From 6550dcd9e879806d359d0549a2f045c70430ac74 Mon Sep 17 00:00:00 2001 From: disclearing <46827438+disclearing@users.noreply.github.com> Date: Mon, 12 Sep 2022 23:34:05 +0100 Subject: [PATCH] All src --- bungee-master@696956eaecd/.gitignore | 8 + bungee-master@696956eaecd/README.md | 2 + bungee-master@696956eaecd/pom.xml | 146 + .../java/net/grandtheftmc/Bungee/Bungee.java | 305 ++ .../java/net/grandtheftmc/Bungee/Lang.java | 80 + .../net/grandtheftmc/Bungee/Settings.java | 132 + .../java/net/grandtheftmc/Bungee/Utils.java | 386 ++ .../Bungee/authy/AuthyManager.java | 42 + .../Bungee/commands/AltCommand.java | 72 + .../Bungee/commands/AuthyCommand.java | 132 + .../Bungee/commands/FindCommand.java | 37 + .../Bungee/commands/GlobalMessageCommand.java | 294 ++ .../Bungee/commands/HelpCommand.java | 199 + .../Bungee/commands/HubCommand.java | 69 + .../Bungee/commands/MotdCommand.java | 76 + .../Bungee/commands/PermsCommand.java | 113 + .../Bungee/commands/PlaytimeCommand.java | 48 + .../Bungee/commands/SeenCommand.java | 95 + .../Bungee/commands/ServerCommand.java | 88 + .../Bungee/commands/StaffChatCommand.java | 90 + .../Bungee/database/BaseDatabase.java | 53 + .../Bungee/database/DatabaseHandler.java | 193 + .../Bungee/database/component/Database.java | 26 + .../component/DatabaseCredentials.java | 112 + .../grandtheftmc/Bungee/help/HelpCore.java | 203 + .../Bungee/help/data/HelpCategory.java | 224 + .../grandtheftmc/Bungee/listeners/Chat.java | 46 + .../Bungee/listeners/Connect.java | 78 + .../Bungee/listeners/Disconnect.java | 59 + .../grandtheftmc/Bungee/listeners/Kick.java | 41 + .../grandtheftmc/Bungee/listeners/Login.java | 52 + .../grandtheftmc/Bungee/listeners/Ping.java | 31 + .../Bungee/redisbungee/RedisListener.java | 258 + .../Bungee/redisbungee/RedisManager.java | 46 + .../Bungee/redisbungee/data/DataType.java | 13 + .../Bungee/tasks/AnnouncerTask.java | 28 + .../grandtheftmc/Bungee/tasks/AuthyTask.java | 38 + .../Bungee/tasks/PlaytimePurgeTask.java | 17 + .../Bungee/tasks/ServerStatusTask.java | 20 + .../net/grandtheftmc/Bungee/users/User.java | 212 + .../Bungee/users/UserManager.java | 327 ++ .../grandtheftmc/Bungee/users/UserRank.java | 99 + .../grandtheftmc/Bungee/utils/Callback.java | 5 + .../Bungee/utils/DefaultFontInfo.java | 133 + .../grandtheftmc/Bungee/utils/HelpLog.java | 57 + .../Bungee/utils/PlaytimeManager.java | 116 + .../Bungee/utils/RequestRateLimiter.java | 48 + .../Bungee/utils/ServerStatus.java | 45 + .../Bungee/utils/TabComplete.java | 40 + .../Bungee/utils/TimeFormatter.java | 45 + .../grandtheftmc/Bungee/utils/UUIDUtil.java | 69 + .../src/main/resources/plugin.yml | 4 + cartels-master@e4f5c2ecec5/.gitignore | 8 + cartels-master@e4f5c2ecec5/README.md | 1 + cartels-master@e4f5c2ecec5/licenses/LGPL.txt | 165 + .../licenses/LICENCE.txt | 674 +++ .../licenses/gson-license.txt | 13 + cartels-master@e4f5c2ecec5/pom.xml | 384 ++ .../src/main/assembly/package.xml | 16 + .../java/com/massivecraft/factions/Board.java | 86 + .../java/com/massivecraft/factions/Conf.java | 467 ++ .../com/massivecraft/factions/FLocation.java | 251 + .../com/massivecraft/factions/FPlayer.java | 264 + .../com/massivecraft/factions/FPlayers.java | 41 + .../com/massivecraft/factions/Faction.java | 265 + .../com/massivecraft/factions/Factions.java | 55 + .../java/com/massivecraft/factions/P.java | 334 ++ .../massivecraft/factions/cmd/CmdAHome.java | 52 + .../massivecraft/factions/cmd/CmdAdmin.java | 96 + .../factions/cmd/CmdAnnounce.java | 48 + .../factions/cmd/CmdAutoClaim.java | 56 + .../factions/cmd/CmdAutoHelp.java | 47 + .../massivecraft/factions/cmd/CmdBoom.java | 51 + .../massivecraft/factions/cmd/CmdBypass.java | 43 + .../massivecraft/factions/cmd/CmdChat.java | 70 + .../massivecraft/factions/cmd/CmdChatSpy.java | 41 + .../massivecraft/factions/cmd/CmdClaim.java | 82 + .../factions/cmd/CmdClaimLine.java | 82 + .../massivecraft/factions/cmd/CmdConfig.java | 248 + .../massivecraft/factions/cmd/CmdConvert.java | 44 + .../massivecraft/factions/cmd/CmdCreate.java | 124 + .../factions/cmd/CmdDeinvite.java | 62 + .../factions/cmd/CmdDelFWarp.java | 44 + .../factions/cmd/CmdDescription.java | 59 + .../massivecraft/factions/cmd/CmdDisband.java | 107 + .../massivecraft/factions/cmd/CmdFWarp.java | 75 + .../massivecraft/factions/cmd/CmdHelp.java | 218 + .../massivecraft/factions/cmd/CmdHome.java | 137 + .../massivecraft/factions/cmd/CmdInvite.java | 80 + .../massivecraft/factions/cmd/CmdJoin.java | 118 + .../massivecraft/factions/cmd/CmdKick.java | 125 + .../massivecraft/factions/cmd/CmdLeave.java | 34 + .../massivecraft/factions/cmd/CmdList.java | 131 + .../massivecraft/factions/cmd/CmdLock.java | 42 + .../massivecraft/factions/cmd/CmdLogins.java | 30 + .../com/massivecraft/factions/cmd/CmdMap.java | 68 + .../com/massivecraft/factions/cmd/CmdMod.java | 92 + .../factions/cmd/CmdModifyPower.java | 49 + .../massivecraft/factions/cmd/CmdMoney.java | 53 + .../factions/cmd/CmdMoneyBalance.java | 55 + .../factions/cmd/CmdMoneyDeposit.java | 68 + .../factions/cmd/CmdMoneyTransferFf.java | 69 + .../factions/cmd/CmdMoneyTransferFp.java | 69 + .../factions/cmd/CmdMoneyTransferPf.java | 72 + .../factions/cmd/CmdMoneyWithdraw.java | 66 + .../massivecraft/factions/cmd/CmdOpen.java | 53 + .../massivecraft/factions/cmd/CmdOwner.java | 106 + .../factions/cmd/CmdOwnerList.java | 70 + .../factions/cmd/CmdPeaceful.java | 60 + .../factions/cmd/CmdPermanent.java | 62 + .../factions/cmd/CmdPermanentPower.java | 58 + .../massivecraft/factions/cmd/CmdPower.java | 53 + .../factions/cmd/CmdPowerBoost.java | 87 + .../factions/cmd/CmdRelationAlly.java | 11 + .../factions/cmd/CmdRelationEnemy.java | 11 + .../factions/cmd/CmdRelationNeutral.java | 11 + .../massivecraft/factions/cmd/CmdReload.java | 41 + .../com/massivecraft/factions/cmd/CmdSB.java | 33 + .../factions/cmd/CmdSafeunclaimall.java | 44 + .../massivecraft/factions/cmd/CmdSaveAll.java | 43 + .../factions/cmd/CmdSeeChunk.java | 71 + .../factions/cmd/CmdSetFWarp.java | 54 + .../massivecraft/factions/cmd/CmdSethome.java | 96 + .../massivecraft/factions/cmd/CmdShow.java | 115 + .../factions/cmd/CmdShowInvites.java | 40 + .../massivecraft/factions/cmd/CmdStatus.java | 43 + .../massivecraft/factions/cmd/CmdStuck.java | 109 + .../com/massivecraft/factions/cmd/CmdTag.java | 112 + .../massivecraft/factions/cmd/CmdTitle.java | 56 + .../factions/cmd/CmdToggleAllianceChat.java | 43 + .../com/massivecraft/factions/cmd/CmdTop.java | 49 + .../massivecraft/factions/cmd/CmdUnclaim.java | 169 + .../factions/cmd/CmdUnclaimall.java | 64 + .../massivecraft/factions/cmd/CmdVersion.java | 35 + .../factions/cmd/CmdWarunclaimall.java | 43 + .../massivecraft/factions/cmd/FCmdRoot.java | 167 + .../massivecraft/factions/cmd/FCommand.java | 312 ++ .../factions/cmd/FRelationCommand.java | 126 + .../massivecraft/factions/eco/EcoResult.java | 30 + .../factions/event/FPlayerJoinEvent.java | 42 + .../factions/event/FPlayerLeaveEvent.java | 43 + .../factions/event/FactionCreateEvent.java | 52 + .../factions/event/FactionDisbandEvent.java | 39 + .../factions/event/FactionEvent.java | 36 + .../factions/event/FactionPlayerEvent.java | 21 + .../factions/event/FactionRelationEvent.java | 50 + .../event/FactionRelationWishEvent.java | 44 + .../factions/event/FactionRenameEvent.java | 59 + .../factions/event/LandClaimEvent.java | 77 + .../factions/event/LandUnclaimAllEvent.java | 60 + .../factions/event/LandUnclaimEvent.java | 72 + .../factions/event/PowerLossEvent.java | 84 + .../factions/iface/EconomyParticipator.java | 12 + .../factions/iface/RelationParticipator.java | 17 + .../factions/integration/Econ.java | 442 ++ .../factions/integration/Essentials.java | 46 + .../factions/integration/Worldguard.java | 132 + .../integration/dynmap/DynmapStyle.java | 113 + .../integration/dynmap/EngineDynmap.java | 780 +++ .../integration/dynmap/TempAreaMarker.java | 116 + .../integration/dynmap/TempMarker.java | 74 + .../integration/dynmap/TempMarkerSet.java | 55 + .../listeners/FactionsBlockListener.java | 308 ++ .../listeners/FactionsChatListener.java | 164 + .../listeners/FactionsEntityListener.java | 586 +++ .../listeners/FactionsExploitListener.java | 62 + .../listeners/FactionsPlayerListener.java | 594 +++ .../factions/listeners/MenuListener.java | 236 + .../scoreboards/BufferedObjective.java | 165 + .../factions/scoreboards/FScoreboard.java | 149 + .../scoreboards/FSidebarProvider.java | 36 + .../factions/scoreboards/FTeamWrapper.java | 207 + .../scoreboards/sidebar/FDefaultSidebar.java | 41 + .../scoreboards/sidebar/FInfoSidebar.java | 33 + .../factions/struct/ChatMode.java | 41 + .../factions/struct/Permission.java | 98 + .../factions/struct/Relation.java | 186 + .../massivecraft/factions/struct/Role.java | 49 + .../factions/util/AsciiCompass.java | 110 + .../factions/util/AutoLeaveProcessTask.java | 93 + .../factions/util/AutoLeaveTask.java | 28 + .../factions/util/EnumTypeAdapter.java | 67 + .../factions/util/LazyLocation.java | 101 + .../util/MapFLocToStringSetTypeAdapter.java | 104 + .../massivecraft/factions/util/MiscUtil.java | 113 + .../factions/util/MyLocationTypeAdapter.java | 59 + .../factions/util/RelationUtil.java | 118 + .../factions/util/SpiralTask.java | 209 + .../factions/util/VisualizeUtil.java | 80 + .../factions/util/WarmUpUtil.java | 42 + .../factions/zcore/CommandVisibility.java | 7 + .../massivecraft/factions/zcore/MCommand.java | 491 ++ .../massivecraft/factions/zcore/MPlugin.java | 350 ++ .../zcore/MPluginSecretPlayerListener.java | 52 + .../factions/zcore/persist/MemoryBoard.java | 313 ++ .../factions/zcore/persist/MemoryFPlayer.java | 953 ++++ .../zcore/persist/MemoryFPlayers.java | 66 + .../factions/zcore/persist/MemoryFaction.java | 893 ++++ .../zcore/persist/MemoryFactions.java | 176 + .../factions/zcore/persist/SaveTask.java | 30 + .../zcore/persist/json/FactionsJSON.java | 45 + .../zcore/persist/json/JSONBoard.java | 103 + .../zcore/persist/json/JSONFPlayer.java | 28 + .../zcore/persist/json/JSONFPlayers.java | 193 + .../zcore/persist/json/JSONFaction.java | 17 + .../zcore/persist/json/JSONFactions.java | 263 + .../factions/zcore/util/DiscUtil.java | 137 + .../factions/zcore/util/PermUtil.java | 86 + .../factions/zcore/util/Persist.java | 154 + .../factions/zcore/util/SmokeUtil.java | 82 + .../massivecraft/factions/zcore/util/TL.java | 798 +++ .../factions/zcore/util/TagReplacer.java | 280 ++ .../factions/zcore/util/TagUtil.java | 236 + .../factions/zcore/util/TextUtil.java | 242 + .../factions/zcore/util/UUIDFetcher.java | 100 + .../src/main/resources/config.yml | 355 ++ .../src/main/resources/lang.yml | 5 + .../src/main/resources/lang/en_GB.yml | 31 + .../src/main/resources/lang/en_US.yml | 505 ++ .../src/main/resources/lang/ja_JP.yml | 434 ++ .../src/main/resources/plugin.yml | 277 ++ common-master@c5eba833390/.gitignore | 8 + common-master@c5eba833390/README.md | 4 + common-master@c5eba833390/pom.xml | 136 + .../java/net/grandtheftmc/ServerType.java | 33 + .../java/net/grandtheftmc/ServerTypeId.java | 26 + .../java/net/grandtheftmc/jedis/JMessage.java | 7 + .../grandtheftmc/jedis/JMessageListener.java | 10 + .../grandtheftmc/jedis/JMessageReader.java | 88 + .../grandtheftmc/jedis/JMessageWriter.java | 59 + .../net/grandtheftmc/jedis/JedisChannel.java | 22 + .../net/grandtheftmc/jedis/JedisManager.java | 30 + .../net/grandtheftmc/jedis/JedisModule.java | 98 + .../jedis/message/FindPlayerMessage.java | 15 + .../jedis/message/SendPlayerMessage.java | 7 + .../message/ServerJoinRequestMessage.java | 28 + .../message/ServerJoinStatusMessage.java | 34 + .../jedis/message/ServerQueueMessage.java | 35 + .../message/ServerQueueNotifyMessage.java | 34 + .../message/UserStateTransactionCheck.java | 34 + .../message/VoteNotificationMessage.java | 46 + .../java/net/grandtheftmc/slack/Slack.java | 132 + .../net/grandtheftmc/slack/SlackChannel.java | 27 + .../net/grandtheftmc/slack/SlackField.java | 118 + .../net/grandtheftmc/slack/SlackHook.java | 26 + .../net/grandtheftmc/slack/SlackMessage.java | 218 + .../slack/action/SlackAction.java | 91 + .../slack/action/SlackActionStyle.java | 20 + .../slack/action/SlackActionType.java | 19 + .../slack/attachment/SlackAttachment.java | 362 ++ .../slack/exception/SlackException.java | 11 + core-master@6ef85bb745a/.gitignore | 102 + core-master@6ef85bb745a/README.md | 5 + core-master@6ef85bb745a/pom.xml | 271 ++ .../setup/database_schema.txt | 275 ++ .../setup/script/copy_house.py | 172 + .../setup/script/data_mine.py | 141 + .../setup/script/fix_house_data.py | 213 + .../setup/script/fix_user_data.py | 306 ++ .../setup/script/fix_user_table_foreign.py | 189 + .../setup/script/mine_log.py | 259 + .../setup/script/python_script.sh | 8 + .../setup/script/slack_api.py | 112 + .../setup/script/stat_app.py | 550 +++ .../setup/script/transpose_gang.py | 383 ++ .../setup/script/transpose_house.py | 232 + .../setup/script/transpose_house_yml.py | 333 ++ .../setup/script/transpose_user.py | 115 + .../setup/script/transpose_user_ammo.py | 155 + .../setup/script/transpose_user_currency.py | 180 + .../setup/script/transpose_user_rank.py | 163 + .../setup/script/transpose_user_uuid.py | 141 + .../setup/script/transpose_vice_cheatcode.py | 112 + .../setup/script/vote_sync.py | 95 + .../main/java/net/grandtheftmc/core/Core.java | 1318 +++++ .../main/java/net/grandtheftmc/core/Lang.java | 116 + .../java/net/grandtheftmc/core/Settings.java | 592 +++ .../java/net/grandtheftmc/core/Utils.java | 1068 ++++ .../core/achivements/Achievement.java | 72 + .../core/achivements/AchievementCommand.java | 138 + .../net/grandtheftmc/core/alert/Alert.java | 117 + .../core/alert/AlertCreateStage.java | 9 + .../grandtheftmc/core/alert/AlertEntry.java | 190 + .../grandtheftmc/core/alert/AlertManager.java | 160 + .../core/alert/command/AlertCommand.java | 73 + .../alert/component/AlertCreateHandler.java | 38 + .../core/alert/type/AlertShowType.java | 16 + .../core/alert/type/AlertType.java | 28 + .../core/alert/ui/AlertCreationMenu.java | 276 ++ .../core/alert/ui/AlertTimeEditor.java | 94 + .../core/alert/ui/AlertsMenu.java | 134 + .../core/animation/Animation.java | 19 + .../core/animation/CoreAnimation.java | 93 + .../animation/event/AnimationFinishEvent.java | 18 + .../core/animation/step/AStep.java | 32 + .../core/animation/step/AStepEnd.java | 9 + .../core/animation/step/AStepStart.java | 9 + .../core/announcer/Announcement.java | 29 + .../core/announcer/Announcer.java | 185 + .../core/announcer/AnnouncerCommand.java | 134 + .../core/anticheat/Anticheat.java | 101 + .../grandtheftmc/core/anticheat/Severity.java | 7 + .../core/anticheat/check/CheatType.java | 63 + .../core/anticheat/check/Check.java | 20 + .../core/anticheat/check/CheckManager.java | 43 + .../anticheat/check/movement/SpeedCheck.java | 211 + .../check/movement/VelocityCheck.java | 147 + .../component/AnticheatComponent.java | 76 + .../core/anticheat/data/ClientData.java | 387 ++ .../core/anticheat/data/ClientHandler.java | 91 + .../anticheat/event/CombatCheatEvent.java | 4 + .../anticheat/event/MovementCheatEvent.java | 53 + .../anticheat/inspect/InspectCommand.java | 34 + .../core/anticheat/report/ReportCommand.java | 62 + .../core/anticheat/report/ReportDAO.java | 112 + .../core/anticheat/report/ReportManager.java | 141 + .../report/data/PlayerReportData.java | 40 + .../anticheat/report/data/ReportData.java | 61 + .../anticheat/trigger/MovementTrigger.java | 93 + .../core/anticheat/trigger/Trigger.java | 25 + .../core/anticheat/util/DummyIdentity.java | 87 + .../core/anticheat/util/DummyPacketGen.java | 119 + .../core/anticheat/util/DummyPlayer.java | 86 + .../net/grandtheftmc/core/boards/Board.java | 208 + .../grandtheftmc/core/boards/BoardScore.java | 29 + .../grandtheftmc/core/boards/BoardType.java | 7 + .../grandtheftmc/core/boards/BoardValue.java | 35 + .../net/grandtheftmc/core/casino/Casino.java | 44 + .../grandtheftmc/core/casino/CoreCasino.java | 144 + .../core/casino/coins/ChipAmount.java | 57 + .../core/casino/coins/CoinManager.java | 155 + .../core/casino/coins/VendorMenu.java | 102 + .../core/casino/game/CasinoGame.java | 75 + .../core/casino/game/CasinoGameAttribute.java | 26 + .../core/casino/game/CasinoGameState.java | 6 + .../core/casino/game/CasinoRunnable.java | 8 + .../core/casino/game/CoreCasinoGame.java | 53 + .../core/casino/game/bet/CasinoBet.java | 12 + .../core/casino/game/bet/CasinoBetType.java | 7 + .../core/casino/game/bet/SlotMachineBet.java | 28 + .../game/component/CasinoGameComponent.java | 102 + .../casino/game/event/CasinoGameEndEvent.java | 28 + .../game/event/CasinoGameStartEvent.java | 28 + .../event/CasinoGameStateChangeEvent.java | 45 + .../core/casino/slot/CasinoSpinData.java | 120 + .../core/casino/slot/SlotItem.java | 25 + .../core/casino/slot/SlotMachine.java | 550 +++ .../core/casino/slot/SlotReward.java | 25 + .../core/casino/slot/SlotWheelType.java | 107 + .../core/casino/slot/SpinState.java | 5 + .../casino/slot/menu/SlotMachineBetMenu.java | 62 + .../core/casino/slot/menu/SlotRewardMenu.java | 27 + .../core/commands/BucksCommand.java | 200 + .../core/commands/BungeeCommand.java | 54 + .../core/commands/ChatFilterCommand.java | 41 + .../core/commands/ClearChatCommand.java | 41 + .../core/commands/ConfigCommand.java | 40 + .../core/commands/CooldownCommand.java | 66 + .../core/commands/CoreCommand.java | 124 + .../core/commands/CouponCreditsCommand.java | 56 + .../core/commands/CrateCommand.java | 126 + .../core/commands/CrowbarCommand.java | 318 ++ .../core/commands/DiscordCommand.java | 20 + .../core/commands/EditModeCommand.java | 111 + .../core/commands/EventTagCommand.java | 157 + .../core/commands/ExampleCommand.java | 50 + .../core/commands/FacebookCommand.java | 18 + .../core/commands/ForumRankCommand.java | 61 + .../core/commands/GlobalMuteCommand.java | 32 + .../core/commands/IgnoreCommand.java | 66 + .../core/commands/InfoCommand.java | 42 + .../core/commands/ListCommand.java | 44 + .../core/commands/MaxPlayersCommand.java | 40 + .../core/commands/MessageCommand.java | 74 + .../core/commands/OpenMenuCommand.java | 32 + .../core/commands/PlaytimeCommand.java | 140 + .../core/commands/PrefsCommand.java | 23 + .../core/commands/RankCommand.java | 410 ++ .../core/commands/RankedCommand.java | 16 + .../core/commands/ReplyCommand.java | 49 + .../core/commands/RewardCommand.java | 71 + .../core/commands/RewardsCommand.java | 23 + .../core/commands/RulesCommand.java | 28 + .../core/commands/SaveCommand.java | 29 + .../core/commands/ServerCommand.java | 31 + .../core/commands/SocialSpyCommand.java | 50 + .../core/commands/SpankCommand.java | 76 + .../core/commands/StoreCommand.java | 16 + .../core/commands/TokensCommand.java | 314 ++ .../core/commands/TradeCommand.java | 117 + .../core/commands/TrialCommand.java | 34 + .../core/commands/TwitterCommand.java | 18 + .../core/commands/VotestreakCommand.java | 68 + .../core/commands/WhitelistCommand.java | 127 + .../grandtheftmc/core/currency/Currency.java | 120 + .../net/grandtheftmc/core/currency/Purse.java | 160 + .../currency/component/CurrencySource.java | 68 + .../core/currency/component/Source.java | 31 + .../currency/trans/CurrencyTransaction.java | 71 + .../grandtheftmc/core/data/CompactLoc.java | 46 + .../core/database/BaseDatabase.java | 53 + .../core/database/DatabaseHandler.java | 241 + .../core/database/component/Database.java | 26 + .../component/DatabaseCredentials.java | 112 + .../core/database/dao/AlertsDAO.java | 221 + .../core/database/dao/CurrencyDAO.java | 282 ++ .../core/database/dao/ExampleDAO.java | 205 + .../core/database/dao/LogDAO.java | 35 + .../core/database/dao/MutexDAO.java | 68 + .../core/database/dao/OldVoteDAO.java | 439 ++ .../core/database/dao/ServerInfoDAO.java | 85 + .../core/database/dao/ServerStatsDAO.java | 235 + .../core/database/dao/VoteDAO.java | 445 ++ .../core/database/mutex/Lockable.java | 36 + .../core/database/mutex/Mutexable.java | 72 + .../database/mutex/common/LoadUserTask.java | 63 + .../database/mutex/common/SaveUserTask.java | 47 + .../mutex/event/AsyncMutexLoadEvent.java | 55 + .../mutex/event/AsyncMutexSaveEvent.java | 54 + .../mutex/event/MutexLoadCompleteEvent.java | 52 + .../mutex/event/MutexSaveCompleteEvent.java | 52 + .../database/mutex/task/LoadMutexTask.java | 170 + .../database/mutex/task/SaveMutexTask.java | 155 + .../core/editmode/BlockChange.java | 91 + .../core/editmode/BreakBlock.java | 18 + .../net/grandtheftmc/core/editmode/Craft.java | 17 + .../grandtheftmc/core/editmode/Damage.java | 54 + .../core/editmode/HangingBreak.java | 37 + .../grandtheftmc/core/editmode/Interact.java | 104 + .../core/editmode/InventoryClick.java | 23 + .../grandtheftmc/core/editmode/Liquid.java | 24 + .../core/editmode/PlaceBlock.java | 19 + .../core/editmode/WorldConfig.java | 66 + .../core/editmode/WorldManager.java | 105 + .../grandtheftmc/core/enjin/EnjinCache.java | 96 + .../grandtheftmc/core/enjin/EnjinCore.java | 73 + .../core/enjin/HTTPInterface.java | 64 + .../core/enjin/data/EnjinResponse.java | 10 + .../core/enjin/data/EnjinResult.java | 12 + .../grandtheftmc/core/event/BaseEvent.java | 136 + .../net/grandtheftmc/core/event/Event.java | 57 + .../grandtheftmc/core/event/EventCommand.java | 245 + .../net/grandtheftmc/core/event/EventDAO.java | 183 + .../grandtheftmc/core/event/EventData.java | 96 + .../grandtheftmc/core/event/EventManager.java | 275 ++ .../grandtheftmc/core/event/EventState.java | 21 + .../grandtheftmc/core/event/EventType.java | 50 + .../grandtheftmc/core/events/ChatEvent.java | 64 + .../grandtheftmc/core/events/CoreEvent.java | 27 + .../core/events/DisplayNameUpdateEvent.java | 59 + .../core/events/GetPermsEvent.java | 40 + .../core/events/ItemStackEvent.java | 45 + .../grandtheftmc/core/events/MoneyEvent.java | 94 + .../core/events/NametagUpdateEvent.java | 65 + .../core/events/PlayerFActionEvent.java | 40 + .../core/events/PlayerSwitchWorldEvent.java | 61 + .../core/events/RequestEvent.java | 54 + .../grandtheftmc/core/events/RewardEvent.java | 46 + .../core/events/ServerSaveEvent.java | 21 + .../core/events/TutorialEvent.java | 84 + .../grandtheftmc/core/events/UpdateEvent.java | 52 + .../grandtheftmc/core/giftcard/Balance.java | 23 + .../net/grandtheftmc/core/giftcard/Data.java | 32 + .../grandtheftmc/core/giftcard/Giftcard.java | 12 + .../core/giftcard/GiftcardAPI.java | 138 + .../core/gui/ConfirmationMenu.java | 313 ++ .../grandtheftmc/core/handlers/Handler.java | 5 + .../core/handlers/chat/ChatAdHandler.java | 27 + .../handlers/chat/ChatCooldownHandler.java | 30 + .../core/handlers/chat/ChatManager.java | 52 + .../core/handlers/chat/ChatRepeatHandler.java | 42 + .../core/handlers/chat/ChatSettings.java | 52 + .../grandtheftmc/core/inventory/CoreMenu.java | 282 ++ .../core/inventory/CoreMenuFlag.java | 32 + .../core/inventory/CoreMenuHandler.java | 89 + .../core/inventory/IMenuButtonHandler.java | 54 + .../core/inventory/button/ClickableItem.java | 42 + .../inventory/button/IMenuClickAction.java | 18 + .../core/inventory/button/MenuItem.java | 55 + .../core/inventory/example/ExampleUI.java | 41 + .../core/inventory/types/PaginationMenu.java | 36 + .../core/leaderboards/LeaderBoard.java | 118 + .../core/leaderboards/LeaderBoardManager.java | 67 + .../net/grandtheftmc/core/listeners/Chat.java | 134 + .../core/listeners/ChunkLoad.java | 18 + .../core/listeners/CommandListener.java | 201 + .../grandtheftmc/core/listeners/Damage.java | 30 + .../core/listeners/HopperComponent.java | 36 + .../core/listeners/HungerChange.java | 17 + .../core/listeners/InventoryClick.java | 42 + .../net/grandtheftmc/core/listeners/Join.java | 177 + .../grandtheftmc/core/listeners/Leave.java | 96 + .../grandtheftmc/core/listeners/Login.java | 221 + .../net/grandtheftmc/core/listeners/Move.java | 169 + .../core/listeners/PetListener.java | 35 + .../core/listeners/PlaywireRecieve.java | 55 + .../net/grandtheftmc/core/listeners/Save.java | 17 + .../core/listeners/SignChange.java | 41 + .../core/listeners/SwapHandItems.java | 20 + .../grandtheftmc/core/listeners/Teleport.java | 112 + .../core/listeners/UpdateListener.java | 7 + .../UserStateTransactionListener.java | 83 + .../core/listeners/WeatherChange.java | 19 + .../net/grandtheftmc/core/menus/Menu.java | 55 + .../core/menus/MenuClickEvent.java | 62 + .../core/menus/MenuCloseEvent.java | 29 + .../grandtheftmc/core/menus/MenuListener.java | 1561 ++++++ .../grandtheftmc/core/menus/MenuManager.java | 93 + .../core/menus/MenuOpenEvent.java | 57 + .../grandtheftmc/core/nametags/Nametag.java | 37 + .../core/nametags/NametagCommand.java | 103 + .../core/nametags/NametagManager.java | 173 + .../core/neural/NeuralNetTools.java | 73 + .../core/neural/NeuralNetwork.java | 221 + .../core/neural/NeuralTrainSet.java | 90 + .../grandtheftmc/core/neural/mnist/Mnist.java | 77 + .../core/neural/mnist/MnistDbFile.java | 112 + .../core/neural/mnist/MnistImageFile.java | 101 + .../core/neural/mnist/MnistImageLoader.java | 67 + .../core/neural/mnist/MnistLabelFile.java | 49 + .../core/neural/mnist/MnistPanel.java | 112 + .../core/neural/parser/NeuralAttribute.java | 70 + .../core/neural/parser/NeuralNode.java | 167 + .../core/neural/parser/NeuralParser.java | 86 + .../core/neural/parser/NeuralParserTools.java | 52 + .../net/grandtheftmc/core/npc/CoreNPC.java | 312 ++ .../net/grandtheftmc/core/npc/NPCDAO.java | 69 + .../net/grandtheftmc/core/npc/NPCManager.java | 182 + .../grandtheftmc/core/npc/PathfindOption.java | 11 + .../core/npc/example/ExampleNPC.java | 40 + .../core/npc/interfaces/ClickableNPC.java | 15 + .../core/npc/interfaces/CollideableNPC.java | 14 + .../core/npc/interfaces/CombustableNPC.java | 14 + .../core/npc/interfaces/DamageableNPC.java | 17 + .../grandtheftmc/core/perms/PermsManager.java | 158 + .../grandtheftmc/core/perms/RankPerms.java | 59 + .../grandtheftmc/core/perms/UserPerms.java | 59 + .../core/playwire/PlaywireManager.java | 63 + .../core/playwire/SocketMessage.java | 49 + .../core/playwire/SocketMessageType.java | 15 + .../events/AsyncPlaywireRecieveEvent.java | 39 + .../core/playwire/listeners/WSListener.java | 135 + .../grandtheftmc/core/redis/RedisFactory.java | 31 + .../core/redis/RedisListener.java | 129 + .../grandtheftmc/core/redis/RedisManager.java | 43 + .../core/redis/data/DataType.java | 15 + .../core/redis/listener/QueueListener.java | 24 + .../UserStateTransactionCheckListener.java | 64 + .../listener/VoteNotificationListener.java | 52 + .../core/resourcepack/RSPack_1_12.java | 57 + .../core/resourcepack/ResourcePack.java | 42 + .../core/resourcepack/ResourcePackEvent.java | 50 + .../resourcepack/ResourcePackManager.java | 227 + .../resourcepack/ResourcePackReceiving.java | 20 + .../core/sentry/CustomExceptionHandler.java | 27 + .../core/servers/PingHandler.java | 51 + .../net/grandtheftmc/core/servers/Server.java | 244 + .../core/servers/ServerManager.java | 165 + .../core/servers/ServerPingListener.java | 16 + .../grandtheftmc/core/servers/ServerType.java | 59 + .../core/servers/menu/GTMTranzitMenu.java | 140 + .../core/servers/menu/TranzitMenu.java | 220 + .../net/grandtheftmc/core/stat/StatDAO.java | 71 + .../grandtheftmc/core/stat/StatFactory.java | 183 + .../grandtheftmc/core/task/ExpirableTask.java | 161 + .../grandtheftmc/core/task/RepeatingTask.java | 213 + .../java/net/grandtheftmc/core/task/Task.java | 96 + .../core/task/common/AntiAFK.java | 74 + .../core/task/common/BossBarTask.java | 74 + .../core/trading/TradeManager.java | 227 + .../grandtheftmc/core/trading/TradeMenu.java | 505 ++ .../core/trading/TradingSlotType.java | 20 + .../core/trading/TradingStatus.java | 11 + .../core/transaction/Transaction.java | 72 + .../core/transaction/TransactionEvent.java | 48 + .../transaction/state/StateTransaction.java | 71 + .../state/StateTransactionEvent.java | 15 + .../state/user/UserStateTransaction.java | 163 + .../state/user/UserStateTransactionDAO.java | 248 + .../state/user/UserStateTransactionEvent.java | 51 + .../net/grandtheftmc/core/tutorials/Help.java | 29 + .../core/tutorials/NextCommand.java | 37 + .../grandtheftmc/core/tutorials/Slide.java | 222 + .../grandtheftmc/core/tutorials/Tutorial.java | 175 + .../core/tutorials/TutorialCommand.java | 987 ++++ .../core/tutorials/TutorialManager.java | 165 + .../grandtheftmc/core/users/CooldownDAO.java | 110 + .../core/users/CooldownPayload.java | 35 + .../net/grandtheftmc/core/users/Pref.java | 97 + .../net/grandtheftmc/core/users/User.java | 1454 ++++++ .../net/grandtheftmc/core/users/UserDAO.java | 1891 +++++++ .../grandtheftmc/core/users/UserManager.java | 194 + .../net/grandtheftmc/core/users/UserRank.java | 315 ++ .../core/users/eventtag/EventTag.java | 47 + .../core/users/eventtag/EventTagDAO.java | 128 + .../core/users/eventtag/PreTagEquipEvent.java | 45 + .../core/users/eventtag/TagVisibility.java | 26 + .../core/users/targets/TrackedEntity.java | 26 + .../core/users/targets/TrackedLocation.java | 24 + .../core/users/targets/TrackedTarget.java | 23 + .../net/grandtheftmc/core/util/AngleUtil.java | 12 + .../net/grandtheftmc/core/util/Attribute.java | 27 + .../core/util/AttributeModifier.java | 80 + .../java/net/grandtheftmc/core/util/C.java | 42 + .../net/grandtheftmc/core/util/Callback.java | 8 + .../net/grandtheftmc/core/util/Component.java | 41 + .../grandtheftmc/core/util/CoreLocation.java | 155 + .../core/util/DefaultFontInfo.java | 129 + .../grandtheftmc/core/util/EntityUtil.java | 35 + .../net/grandtheftmc/core/util/HTTPUtil.java | 18 + .../grandtheftmc/core/util/IconConverter.java | 719 +++ .../grandtheftmc/core/util/Identifiable.java | 15 + .../grandtheftmc/core/util/ImageRenderer.java | 73 + .../core/util/ItemAttributes.java | 112 + .../core/util/ItemStackManager.java | 105 + .../net/grandtheftmc/core/util/MathUtil.java | 28 + .../net/grandtheftmc/core/util/NMSUtil.java | 53 + .../grandtheftmc/core/util/NMSVersion.java | 59 + .../grandtheftmc/core/util/NumeralUtil.java | 29 + .../grandtheftmc/core/util/PlayerAndIP.java | 28 + .../net/grandtheftmc/core/util/Playtime.java | 8 + .../core/util/PluginAssociated.java | 19 + .../core/util/ReflectionUtils.java | 63 + .../grandtheftmc/core/util/ServerUtil.java | 33 + .../grandtheftmc/core/util/Similarity.java | 8 + .../java/net/grandtheftmc/core/util/Slot.java | 25 + .../grandtheftmc/core/util/SoundEffect.java | 131 + .../net/grandtheftmc/core/util/State.java | 23 + .../grandtheftmc/core/util/StringUtil.java | 88 + .../grandtheftmc/core/util/TimeFormatter.java | 45 + .../net/grandtheftmc/core/util/Title.java | 69 + .../net/grandtheftmc/core/util/TopValue.java | 55 + .../net/grandtheftmc/core/util/TrigUtil.java | 17 + .../net/grandtheftmc/core/util/UUIDUtil.java | 72 + .../net/grandtheftmc/core/util/Utils.java | 1139 +++++ .../core/util/WeightedRandomCollection.java | 91 + .../net/grandtheftmc/core/util/debug/Log.java | 59 + .../core/util/factory/CloneableFactory.java | 8 + .../core/util/factory/Factory.java | 9 + .../core/util/factory/FireworkFactory.java | 66 + .../core/util/factory/ItemFactory.java | 125 + .../core/util/json/JSONBuilder.java | 50 + .../core/util/json/JSONParser.java | 313 ++ .../grandtheftmc/core/util/json/JSONUtil.java | 45 + .../grandtheftmc/core/util/nbt/CoreNbt.java | 11 + .../core/util/nbt/NBTUtil1_12_2.java | 64 + .../core/util/particles/ParticleEffects.java | 30 + .../grandtheftmc/core/util/time/TimeUtil.java | 242 + .../core/util/title/NMSTitle.java | 14 + .../net/grandtheftmc/core/voting/Reward.java | 422 ++ .../grandtheftmc/core/voting/RewardPack.java | 67 + .../grandtheftmc/core/voting/ShopItem.java | 53 + .../grandtheftmc/core/voting/VoteCommand.java | 125 + .../grandtheftmc/core/voting/VoteManager.java | 946 ++++ .../grandtheftmc/core/voting/VoteRecord.java | 149 + .../grandtheftmc/core/voting/VoteReward.java | 52 + .../grandtheftmc/core/voting/VoteSite.java | 50 + .../net/grandtheftmc/core/voting/Voter.java | 33 + .../core/voting/crates/Crate.java | 853 ++++ .../core/voting/crates/CrateManager.java | 273 ++ .../core/voting/crates/CrateReward.java | 55 + .../core/voting/crates/CrateStars.java | 80 + .../crates/events/CrateNearbyPlayerEvent.java | 55 + .../voting/crates/events/CrateOpenEvent.java | 35 + .../crates/listeners/CrateNearbyListener.java | 28 + .../crates/listeners/CrateOpenListener.java | 168 + .../core/voting/events/PlayerVoteEvent.java | 59 + .../core/voting/events/RewardCheckEvent.java | 51 + .../core/voting/events/RewardEvent.java | 42 + .../core/voting/events/RewardGiveEvent.java | 42 + .../core/voting/events/RewardInfoEvent.java | 46 + .../core/whitelist/WhitelistManager.java | 122 + .../core/whitelist/WhitelistedUser.java | 31 + .../grandtheftmc/core/wrapper/Wrapper.java | 7 + .../core/wrapper/entity/AbstractEntity.java | 19 + .../core/wrapper/entity/CoreEntity.java | 7 + .../core/wrapper/entity/pig/CorePig.java | 13 + .../core/wrapper/entity/pig/CorePig_1_12.java | 24 + .../core/wrapper/entity/pig/WrappedPig.java | 20 + .../core/wrapper/packet/AbstractPacket.java | 87 + .../wrapper/packet/ChunkPacketProcessor.java | 388 ++ .../WrapperHandshakingClientSetProtocol.java | 119 + .../in/WrapperLoginClientEncryptionBegin.java | 73 + .../packet/in/WrapperLoginClientStart.java | 55 + .../packet/in/WrapperPlayClientAbilities.java | 84 + .../in/WrapperPlayClientAdvancements.java | 78 + .../in/WrapperPlayClientArmAnimation.java | 36 + .../in/WrapperPlayClientAutoRecipe.java | 65 + .../packet/in/WrapperPlayClientBlockDig.java | 87 + .../in/WrapperPlayClientBlockPlace.java | 54 + .../packet/in/WrapperPlayClientBoatMove.java | 54 + .../packet/in/WrapperPlayClientChat.java | 55 + .../in/WrapperPlayClientClientCommand.java | 58 + .../in/WrapperPlayClientCloseWindow.java | 57 + .../in/WrapperPlayClientCustomPayload.java | 104 + .../in/WrapperPlayClientEnchantItem.java | 78 + .../in/WrapperPlayClientEntityAction.java | 122 + .../packet/in/WrapperPlayClientFlying.java | 57 + .../in/WrapperPlayClientHeldItemSlot.java | 57 + .../packet/in/WrapperPlayClientKeepAlive.java | 55 + .../packet/in/WrapperPlayClientLook.java | 97 + .../packet/in/WrapperPlayClientPosition.java | 118 + .../in/WrapperPlayClientPositionLook.java | 158 + .../in/WrapperPlayClientRecipeDisplayed.java | 67 + .../WrapperPlayClientResourcePackStatus.java | 59 + .../in/WrapperPlayClientSetCreativeSlot.java | 78 + .../packet/in/WrapperPlayClientSettings.java | 138 + .../packet/in/WrapperPlayClientSpectate.java | 57 + .../in/WrapperPlayClientSteerVehicle.java | 93 + .../in/WrapperPlayClientTabComplete.java | 95 + .../in/WrapperPlayClientTeleportAccept.java | 59 + .../in/WrapperPlayClientTransaction.java | 98 + .../in/WrapperPlayClientUpdateSign.java | 80 + .../packet/in/WrapperPlayClientUseEntity.java | 118 + .../packet/in/WrapperPlayClientUseItem.java | 139 + .../in/WrapperPlayClientVehicleMove.java | 138 + .../in/WrapperPlayClientWindowClick.java | 149 + .../packet/in/WrapperStatusClientPing.java | 55 + .../packet/in/WrapperStatusClientStart.java | 36 + .../out/WrapperLoginServerDisconnect.java | 65 + .../WrapperLoginServerEncryptionBegin.java | 95 + .../out/WrapperLoginServerSetCompression.java | 58 + .../packet/out/WrapperLoginServerSuccess.java | 55 + .../out/WrapperPlayServerAbilities.java | 84 + .../out/WrapperPlayServerAdvancements.java | 149 + .../out/WrapperPlayServerAnimation.java | 101 + .../out/WrapperPlayServerAttachEntity.java | 102 + .../out/WrapperPlayServerAutoRecipe.java | 55 + .../packet/out/WrapperPlayServerBed.java | 102 + .../out/WrapperPlayServerBlockAction.java | 120 + .../WrapperPlayServerBlockBreakAnimation.java | 123 + .../out/WrapperPlayServerBlockChange.java | 89 + .../packet/out/WrapperPlayServerBoss.java | 134 + .../packet/out/WrapperPlayServerCamera.java | 55 + .../packet/out/WrapperPlayServerChat.java | 101 + .../out/WrapperPlayServerCloseWindow.java | 57 + .../packet/out/WrapperPlayServerCollect.java | 73 + .../out/WrapperPlayServerCombatEvent.java | 137 + .../out/WrapperPlayServerCustomPayload.java | 104 + .../WrapperPlayServerCustomSoundEffect.java | 183 + .../packet/out/WrapperPlayServerEntity.java | 80 + .../out/WrapperPlayServerEntityDestroy.java | 78 + .../out/WrapperPlayServerEntityEffect.java | 155 + .../out/WrapperPlayServerEntityEquipment.java | 111 + .../WrapperPlayServerEntityHeadRotation.java | 101 + .../out/WrapperPlayServerEntityLook.java | 134 + .../out/WrapperPlayServerEntityMetadata.java | 102 + .../out/WrapperPlayServerEntityStatus.java | 100 + .../out/WrapperPlayServerEntityTeleport.java | 147 + .../out/WrapperPlayServerEntityVelocity.java | 135 + .../out/WrapperPlayServerExperience.java | 93 + .../out/WrapperPlayServerExplosion.java | 158 + .../out/WrapperPlayServerGameStateChange.java | 76 + .../out/WrapperPlayServerHeldItemSlot.java | 57 + .../out/WrapperPlayServerKeepAlive.java | 55 + .../out/WrapperPlayServerKickDisconnect.java | 60 + .../packet/out/WrapperPlayServerLogin.java | 202 + .../packet/out/WrapperPlayServerMap.java | 130 + .../packet/out/WrapperPlayServerMapChunk.java | 106 + .../packet/out/WrapperPlayServerMount.java | 125 + .../WrapperPlayServerMultiBlockChange.java | 75 + .../WrapperPlayServerNamedEntitySpawn.java | 205 + .../WrapperPlayServerNamedSoundEffect.java | 157 + .../out/WrapperPlayServerOpenSignEditor.java | 58 + .../out/WrapperPlayServerOpenWindow.java | 163 + .../out/WrapperPlayServerPlayerInfo.java | 56 + ...apperPlayServerPlayerListHeaderFooter.java | 75 + .../packet/out/WrapperPlayServerPosition.java | 162 + .../packet/out/WrapperPlayServerRecipes.java | 99 + .../out/WrapperPlayServerRelEntityMove.java | 123 + .../WrapperPlayServerRelEntityMoveLook.java | 189 + .../WrapperPlayServerRemoveEntityEffect.java | 90 + .../WrapperPlayServerResourcePackSend.java | 82 + .../packet/out/WrapperPlayServerRespawn.java | 122 + ...rPlayServerScoreboardDisplayObjective.java | 79 + .../WrapperPlayServerScoreboardObjective.java | 141 + .../out/WrapperPlayServerScoreboardScore.java | 108 + .../out/WrapperPlayServerScoreboardTeam.java | 276 ++ ...WrapperPlayServerSelectAdvancementTab.java | 46 + .../WrapperPlayServerServerDifficulty.java | 59 + .../out/WrapperPlayServerSetCooldown.java | 97 + .../packet/out/WrapperPlayServerSetSlot.java | 102 + .../out/WrapperPlayServerSpawnEntity.java | 379 ++ ...perPlayServerSpawnEntityExperienceOrb.java | 161 + .../WrapperPlayServerSpawnEntityLiving.java | 316 ++ .../WrapperPlayServerSpawnEntityPainting.java | 131 + .../WrapperPlayServerSpawnEntityWeather.java | 161 + .../out/WrapperPlayServerSpawnPosition.java | 58 + .../out/WrapperPlayServerStatistic.java | 47 + .../out/WrapperPlayServerTabComplete.java | 69 + .../out/WrapperPlayServerTileEntityData.java | 98 + .../packet/out/WrapperPlayServerTitle.java | 137 + .../out/WrapperPlayServerTransaction.java | 98 + .../out/WrapperPlayServerUnloadChunk.java | 78 + .../WrapperPlayServerUpdateAttributes.java | 102 + .../out/WrapperPlayServerUpdateHealth.java | 97 + .../out/WrapperPlayServerUpdateTime.java | 78 + .../out/WrapperPlayServerVehicleMove.java | 138 + .../out/WrapperPlayServerWindowData.java | 97 + .../out/WrapperPlayServerWindowItems.java | 80 + .../out/WrapperPlayServerWorldBorder.java | 109 + .../out/WrapperPlayServerWorldEvent.java | 118 + .../out/WrapperPlayServerWorldParticles.java | 272 ++ .../packet/out/WrapperStatusServerPong.java | 57 + .../out/WrapperStatusServerServerInfo.java | 58 + .../src/main/resources/core.yml | 5 + .../src/main/resources/help.yml | 134 + .../src/main/resources/joinSigns.yml | 2 + .../src/main/resources/perms.yml | 10 + .../src/main/resources/plugin.yml | 58 + .../src/main/resources/redis.yml | 3 + .../src/main/resources/servers.yml | 3 + .../src/main/resources/voting.yml | 36 + creative-master@2baad30b473/.gitignore | 8 + creative-master@2baad30b473/README.md | 4 + creative-master@2baad30b473/pom.xml | 95 + .../net/grandtheftmc/Creative/Creative.java | 102 + .../Creative/CreativeSettings.java | 17 + .../grandtheftmc/Creative/CreativeUtils.java | 11 + .../Creative/commands/CreativeCommand.java | 37 + .../commands/CreativeRankCommand.java | 68 + .../Creative/commands/WorldCommand.java | 95 + .../Creative/listeners/BlockPlace.java | 31 + .../grandtheftmc/Creative/listeners/Join.java | 23 + .../Creative/listeners/Leave.java | 20 + .../Creative/listeners/Login.java | 41 + .../Creative/listeners/PotionUse.java | 29 + .../Creative/listeners/SwitchWorld.java | 23 + .../Creative/listeners/UpdateListener.java | 45 + .../Creative/users/CreativeRank.java | 202 + .../Creative/users/CreativeUser.java | 95 + .../Creative/users/CreativeUserManager.java | 27 + .../src/main/resources/creative.yml | 1 + .../src/main/resources/plugin.yml | 12 + fanciful-master@6fb8a853dd2/.gitignore | 22 + fanciful-master@6fb8a853dd2/.travis.yml | 1 + fanciful-master@6fb8a853dd2/LICENSE | 21 + fanciful-master@6fb8a853dd2/README.md | 32 + fanciful-master@6fb8a853dd2/pom.xml | 116 + .../java/mkremins/fanciful/Example.java | 70 + .../java/mkremins/fanciful/FancyMessage.java | 655 +++ .../fanciful/JsonRepresentedObject.java | 19 + .../java/mkremins/fanciful/JsonString.java | 47 + .../java/mkremins/fanciful/MessagePart.java | 155 + .../mkremins/fanciful/TextualComponent.java | 297 ++ .../java/net/amoebaman/util/ArrayWrapper.java | 111 + gtm-master@bf01c650f8f/.gitignore | 102 + gtm-master@bf01c650f8f/README.md | 1 + gtm-master@bf01c650f8f/pom.xml | 187 + .../setup/database_schema.txt | 211 + .../main/java/net/grandtheftmc/gtm/GTM.java | 1069 ++++ .../net/grandtheftmc/gtm/GTMSettings.java | 590 +++ .../java/net/grandtheftmc/gtm/GTMUtils.java | 949 ++++ .../gtm/armor/ArmorShopManager.java | 510 ++ .../grandtheftmc/gtm/armor/ShopStatue.java | 47 + .../net/grandtheftmc/gtm/bounties/Bounty.java | 92 + .../gtm/bounties/BountyManager.java | 158 + .../gtm/bounties/BountyPlacer.java | 66 + .../gtm/commands/AmmoCommand.java | 152 + .../gtm/commands/AntiAuraCommand.java | 75 + .../gtm/commands/BackpackCommand.java | 65 + .../gtm/commands/BackupCommand.java | 76 + .../gtm/commands/BribeCommand.java | 144 + .../gtm/commands/CheatCodeCommand.java | 243 + .../gtm/commands/ChestCheckCommand.java | 59 + .../gtm/commands/ChristmasCommand.java | 72 + .../gtm/commands/ChunkUnloadCommand.java | 47 + .../gtm/commands/ClearCommand.java | 40 + .../gtm/commands/CoreNPCCommand.java | 92 + .../gtm/commands/DrugCheckCommand.java | 38 + .../gtm/commands/DrugDealerCommand.java | 94 + .../gtm/commands/FeedCommand.java | 59 + .../grandtheftmc/gtm/commands/FixCommand.java | 90 + .../gtm/commands/GTMAdminCommand.java | 260 + .../gtm/commands/GTMRankCommand.java | 64 + .../gtm/commands/GTMRanksCommand.java | 40 + .../gtm/commands/HalloweenCommand.java | 50 + .../gtm/commands/KillCommand.java | 68 + .../gtm/commands/LotteryCommand.java | 193 + .../gtm/commands/MoneyCommand.java | 485 ++ .../gtm/commands/NearCommand.java | 54 + .../grandtheftmc/gtm/commands/PayCommand.java | 75 + .../gtm/commands/PermitsCommand.java | 367 ++ .../gtm/commands/PickerCommand.java | 206 + .../gtm/commands/RankupCommand.java | 50 + .../gtm/commands/ResetCommand.java | 280 ++ .../gtm/commands/ResourcePackCommand.java | 46 + .../gtm/commands/SellCommand.java | 48 + .../gtm/commands/SetRarityCommand.java | 95 + .../gtm/commands/SettingsCommand.java | 529 ++ .../gtm/commands/SkinCommand.java | 206 + .../gtm/commands/SkinsCommand.java | 26 + .../gtm/commands/SpectatorCommand.java | 75 + .../gtm/commands/SpeedCommand.java | 60 + .../gtm/commands/StackCommand.java | 108 + .../gtm/commands/StatsCommand.java | 39 + .../gtm/commands/TeleportCommand.java | 66 + .../gtm/commands/TokenShopCommand.java | 24 + .../gtm/commands/TopKillersCommand.java | 49 + .../gtm/commands/TransferCommand.java | 47 + .../gtm/commands/VehicleCommand.java | 130 + .../gtm/database/dao/AmmoDAO.java | 159 + .../gtm/database/dao/MutexDAO.java | 68 + .../mutex/common/LoadGTMUserTask.java | 63 + .../mutex/common/SaveGTMUserTask.java | 47 + .../java/net/grandtheftmc/gtm/drugs/Drug.java | 56 + .../grandtheftmc/gtm/drugs/DrugCommand.java | 52 + .../grandtheftmc/gtm/drugs/DrugDealer.java | 172 + .../grandtheftmc/gtm/drugs/DrugEffect.java | 15 + .../grandtheftmc/gtm/drugs/DrugHelper.java | 26 + .../grandtheftmc/gtm/drugs/DrugManager.java | 138 + .../net/grandtheftmc/gtm/drugs/DrugParam.java | 17 + .../grandtheftmc/gtm/drugs/DrugService.java | 70 + .../net/grandtheftmc/gtm/drugs/DrugUtil.java | 195 + .../grandtheftmc/gtm/drugs/EffectManager.java | 48 + .../grandtheftmc/gtm/drugs/LockedBlocks.java | 46 + .../gtm/drugs/categories/DrugCategory.java | 37 + .../gtm/drugs/categories/IDrugCategory.java | 20 + .../drugs/categories/examples/AAlcohol.java | 26 + .../categories/examples/AnabolicSteroids.java | 26 + .../categories/examples/Cannabinoids.java | 27 + .../categories/examples/Depressants.java | 26 + .../categories/examples/Hallucinogens.java | 26 + .../drugs/categories/examples/Inhalants.java | 27 + .../drugs/categories/examples/Opioids.java | 26 + .../examples/PrescriptionDrugs.java | 27 + .../drugs/categories/examples/Stimulants.java | 27 + .../gtm/drugs/events/DrugUseEvent.java | 52 + .../drugs/events/listener/DrugListener.java | 68 + .../listener/DrugPlacementListener.java | 200 + .../gtm/drugs/example/Alcohol.java | 94 + .../gtm/drugs/example/Cocaine.java | 120 + .../gtm/drugs/example/Heroin.java | 81 + .../grandtheftmc/gtm/drugs/example/Joint.java | 94 + .../grandtheftmc/gtm/drugs/example/MDMA.java | 95 + .../grandtheftmc/gtm/drugs/example/Meth.java | 73 + .../gtm/drugs/example/RoofiedChocolate.java | 51 + .../gtm/drugs/example/Steroids.java | 96 + .../grandtheftmc/gtm/drugs/example/Weed.java | 84 + .../gtm/drugs/example/lsd/LSD.java | 189 + .../gtm/drugs/internal/manager/Manager.java | 46 + .../gtm/drugs/internal/service/Helper.java | 11 + .../gtm/drugs/internal/service/Service.java | 42 + .../gtm/drugs/item/DrugDealerItem.java | 77 + .../grandtheftmc/gtm/drugs/item/DrugItem.java | 106 + .../grandtheftmc/gtm/event/EventManager.java | 81 + .../gtm/event/christmas/ChristmasEvent.java | 195 + .../event/christmas/ChristmasListener.java | 257 + .../event/christmas/SpawnSantaDropTask.java | 183 + .../gtm/event/easter/EasterDAO.java | 92 + .../gtm/event/easter/EasterEgg.java | 53 + .../gtm/event/easter/EasterEggCommand.java | 54 + .../gtm/event/easter/EasterEvent.java | 308 ++ .../gtm/event/easter/EasterFoundEggEvent.java | 30 + .../event/easter/EasterPacketListener.java | 97 + .../gtm/event/easter/EasterPlayerData.java | 89 + .../gtm/event/halloween/HalloweenDAO.java | 80 + .../gtm/event/halloween/HalloweenEvent.java | 736 +++ .../gtm/event/halloween/TrickOrTreatTask.java | 241 + .../net/grandtheftmc/gtm/events/TPEvent.java | 116 + .../gtm/events/WantedLevelChangeEvent.java | 43 + .../net/grandtheftmc/gtm/gang/GTMGang.java | 1109 +++++ .../java/net/grandtheftmc/gtm/gang/Gang.java | 95 + .../gtm/gang/GangChatCommand.java | 60 + .../net/grandtheftmc/gtm/gang/GangDAO.java | 343 ++ .../grandtheftmc/gtm/gang/GangManager.java | 277 ++ .../gtm/gang/command/GangAdminCommand.java | 98 + .../gtm/gang/command/GangCommand.java | 353 ++ .../gtm/gang/command/GangDisableCommand.java | 26 + .../gtm/gang/member/GTMGangMember.java | 125 + .../gtm/gang/member/GangMember.java | 34 + .../gtm/gang/member/GangRole.java | 41 + .../gtm/gang/relation/GTMGangRelation.java | 43 + .../gtm/gang/relation/GangRelation.java | 12 + .../gtm/gang/relation/RelationType.java | 35 + .../java/net/grandtheftmc/gtm/gang/schema.md | 65 + .../java/net/grandtheftmc/gtm/gangs/Gang.java | 885 ++++ .../grandtheftmc/gtm/gangs/GangManager.java | 71 + .../grandtheftmc/gtm/gangs/GangMember.java | 53 + .../grandtheftmc/gtm/holidays/Holiday.java | 6 + .../gtm/holidays/HolidayManager.java | 24 + .../gtm/holidays/easter/Easter.java | 82 + .../gtm/holidays/easter/EasterListener.java | 79 + .../gtm/holidays/easter/EasterTask.java | 43 + .../gtm/holidays/halloween/PlayerScare.java | 186 + .../holidays/halloween/dao/ServerCoupon.java | 28 + .../halloween/dao/ServerCouponDAO.java | 98 + .../independenceday/IndependenceDay.java | 85 + .../IndependenceDayListener.java | 24 + .../independenceday/IndependenceDayTask.java | 57 + .../net/grandtheftmc/gtm/items/AmmoType.java | 93 + .../net/grandtheftmc/gtm/items/ArmorType.java | 77 + .../grandtheftmc/gtm/items/ArmorUpgrade.java | 283 ++ .../gtm/items/BackpackManager.java | 180 + .../net/grandtheftmc/gtm/items/GameItem.java | 316 ++ .../gtm/items/GameItemCommand.java | 526 ++ .../java/net/grandtheftmc/gtm/items/Head.java | 263 + .../grandtheftmc/gtm/items/ItemManager.java | 410 ++ .../java/net/grandtheftmc/gtm/items/Kit.java | 163 + .../grandtheftmc/gtm/items/KitCommand.java | 387 ++ .../net/grandtheftmc/gtm/items/KitItem.java | 37 + .../grandtheftmc/gtm/items/ShopCommand.java | 48 + .../grandtheftmc/gtm/items/ShopManager.java | 321 ++ .../gtm/items/events/ArmorEquipEvent.java | 148 + .../gtm/items/events/EquipArmorType.java | 75 + .../gtm/listeners/ArmorEquip.java | 263 + .../gtm/listeners/BreakBlock.java | 25 + .../gtm/listeners/ChangeWorld.java | 28 + .../net/grandtheftmc/gtm/listeners/Chat.java | 773 +++ .../gtm/listeners/CommandPreProcess.java | 44 + .../net/grandtheftmc/gtm/listeners/Craft.java | 28 + .../grandtheftmc/gtm/listeners/Damage.java | 412 ++ .../net/grandtheftmc/gtm/listeners/Death.java | 354 ++ .../grandtheftmc/gtm/listeners/Dispense.java | 43 + .../net/grandtheftmc/gtm/listeners/Drop.java | 37 + .../listeners/DrugBlockRemovalListener.java | 89 + .../gtm/listeners/FireListener.java | 29 + .../gtm/listeners/FoodChange.java | 18 + .../gtm/listeners/GamemodeChange.java | 47 + .../grandtheftmc/gtm/listeners/Interact.java | 408 ++ .../gtm/listeners/InventoryClick.java | 279 ++ .../gtm/listeners/InventoryOpen.java | 50 + .../grandtheftmc/gtm/listeners/ItemBreak.java | 42 + .../net/grandtheftmc/gtm/listeners/Join.java | 491 ++ .../net/grandtheftmc/gtm/listeners/Leave.java | 172 + .../net/grandtheftmc/gtm/listeners/Login.java | 40 + .../gtm/listeners/MenuListener.java | 4327 +++++++++++++++++ .../grandtheftmc/gtm/listeners/MobSpawn.java | 38 + .../net/grandtheftmc/gtm/listeners/Move.java | 77 + .../gtm/listeners/MovementCheat.java | 26 + .../gtm/listeners/PetListener.java | 29 + .../grandtheftmc/gtm/listeners/Pickup.java | 86 + .../gtm/listeners/PortalEnter.java | 32 + .../gtm/listeners/PotionSplash.java | 29 + .../gtm/listeners/PrepareItemCraft.java | 45 + .../gtm/listeners/SwapHandItems.java | 83 + .../grandtheftmc/gtm/listeners/Target.java | 71 + .../gtm/listeners/UpdateListener.java | 466 ++ .../gtm/listeners/VehicleUse.java | 248 + .../gtm/listeners/VoteReward.java | 128 + .../gtm/listeners/WeaponShoot.java | 42 + .../grandtheftmc/gtm/listeners/WeaponUse.java | 613 +++ .../gtm/lootcrates/CrateManager.java | 182 + .../gtm/lootcrates/LootCrate.java | 201 + .../gtm/lootcrates/LootCrateCommand.java | 194 + .../grandtheftmc/gtm/lootcrates/LootItem.java | 126 + .../grandtheftmc/gtm/tasks/GlassesTask.java | 36 + .../net/grandtheftmc/gtm/tasks/Lottery.java | 295 ++ .../grandtheftmc/gtm/tasks/LotteryPlayer.java | 64 + .../grandtheftmc/gtm/tasks/PlayerTask.java | 173 + .../grandtheftmc/gtm/tasks/TaskManager.java | 24 + .../gtm/trashcan/TrashCanManager.java | 322 ++ .../grandtheftmc/gtm/users/ChatAction.java | 19 + .../net/grandtheftmc/gtm/users/CheatCode.java | 235 + .../gtm/users/CheatCodeState.java | 26 + .../grandtheftmc/gtm/users/CompassTarget.java | 152 + .../net/grandtheftmc/gtm/users/GTMRank.java | 157 + .../net/grandtheftmc/gtm/users/GTMTag.java | 21 + .../net/grandtheftmc/gtm/users/GTMUser.java | 1832 +++++++ .../grandtheftmc/gtm/users/GTMUserDAO.java | 331 ++ .../gtm/users/GTMUserManager.java | 190 + .../net/grandtheftmc/gtm/users/JobMode.java | 86 + .../grandtheftmc/gtm/users/LockedWeapon.java | 54 + .../gtm/users/PersonalVehicle.java | 368 ++ .../grandtheftmc/gtm/users/TaxiTarget.java | 134 + .../grandtheftmc/gtm/users/npcs/ArmorNPC.java | 109 + .../gtm/users/npcs/BankTellerNPC.java | 51 + .../grandtheftmc/gtm/users/npcs/CarNPC.java | 96 + .../gtm/users/npcs/CasinoNPC.java | 36 + .../gtm/users/npcs/CriminalNPC.java | 59 + .../grandtheftmc/gtm/users/npcs/FoodNPC.java | 104 + .../gtm/users/npcs/HeadSellerNPC.java | 55 + .../gtm/users/npcs/HitmanNPC.java | 59 + .../gtm/users/npcs/MechanicNPC.java | 52 + .../gtm/users/npcs/PoliceNPC.java | 61 + .../gtm/users/npcs/RewardsNPC.java | 52 + .../grandtheftmc/gtm/users/npcs/ShopNPC.java | 275 ++ .../grandtheftmc/gtm/users/npcs/SkinsNPC.java | 47 + .../grandtheftmc/gtm/users/npcs/TaxiNPC.java | 112 + .../grandtheftmc/gtm/utils/ItemStackUtil.java | 82 + .../grandtheftmc/gtm/utils/ParticleColor.java | 206 + .../grandtheftmc/gtm/utils/RandomUtil.java | 7 + .../gtm/utils/ReflectionUtil.java | 210 + .../net/grandtheftmc/gtm/utils/Stats.java | 111 + .../gtm/utils/WeightedRandomCollection.java | 91 + .../grandtheftmc/gtm/warps/SpawnCommand.java | 53 + .../grandtheftmc/gtm/warps/TpaCommand.java | 59 + .../java/net/grandtheftmc/gtm/warps/Warp.java | 31 + .../net/grandtheftmc/gtm/warps/WarpCache.java | 46 + .../grandtheftmc/gtm/warps/WarpCommand.java | 138 + .../grandtheftmc/gtm/warps/WarpManager.java | 601 +++ .../gtm/wastedbarrels/BarrelListener.java | 41 + .../gtm/wastedbarrels/BarrelManager.java | 95 + .../gtm/wastedbarrels/WastedBarrel.java | 133 + .../net/grandtheftmc/gtm/weapon/README.MD | 61 + .../gtm/weapon/WeaponRegistry.java | 419 ++ .../gtm/weapon/WeaponVisualStatue.java | 52 + .../gtm/weapon/airstrike/Airstrike.java | 34 + .../gtm/weapon/airstrike/Nuke.java | 33 + .../gtm/weapon/explosive/Grenade.java | 83 + .../gtm/weapon/explosive/MolotovCocktail.java | 81 + .../gtm/weapon/explosive/ProximityMine.java | 88 + .../gtm/weapon/explosive/StickyBomb.java | 89 + .../gtm/weapon/explosive/TearGas.java | 82 + .../gtm/weapon/melee/BaseballBat.java | 104 + .../gtm/weapon/melee/Chainsaw.java | 131 + .../grandtheftmc/gtm/weapon/melee/Dildo.java | 58 + .../grandtheftmc/gtm/weapon/melee/Katana.java | 59 + .../grandtheftmc/gtm/weapon/melee/Knife.java | 103 + .../gtm/weapon/melee/NightStick.java | 103 + .../grandtheftmc/gtm/weapon/melee/Rake.java | 103 + .../weapon/ranged/assault/AdvancedRifle.java | 114 + .../weapon/ranged/assault/AssaultRifle.java | 114 + .../weapon/ranged/assault/BullpupRifle.java | 114 + .../weapon/ranged/assault/CarbineRifle.java | 114 + .../weapon/ranged/assault/SpecialCarbine.java | 121 + .../ranged/launcher/GrenadeLauncher.java | 84 + .../ranged/launcher/HomingLauncher.java | 129 + .../weapon/ranged/launcher/NetLauncher.java | 132 + .../gtm/weapon/ranged/launcher/RPG.java | 90 + .../gtm/weapon/ranged/lmg/CombatMG.java | 81 + .../gtm/weapon/ranged/lmg/MG.java | 74 + .../weapon/ranged/pistol/CombatPistol.java | 100 + .../gtm/weapon/ranged/pistol/HeavyPistol.java | 101 + .../weapon/ranged/pistol/MarksmanPistol.java | 105 + .../gtm/weapon/ranged/pistol/Pistol.java | 103 + .../gtm/weapon/ranged/pistol/StunGun.java | 108 + .../weapon/ranged/shotgun/AssaultShotgun.java | 116 + .../weapon/ranged/shotgun/HeavyShotgun.java | 123 + .../gtm/weapon/ranged/shotgun/Musket.java | 113 + .../weapon/ranged/shotgun/PumpShotgun.java | 115 + .../ranged/shotgun/SawedoffShotgun.java | 115 + .../gtm/weapon/ranged/smg/AssaultSMG.java | 117 + .../gtm/weapon/ranged/smg/CombatPDW.java | 117 + .../weapon/ranged/smg/GusenbergSweeper.java | 124 + .../gtm/weapon/ranged/smg/MicroSMG.java | 117 + .../gtm/weapon/ranged/smg/SMG.java | 117 + .../gtm/weapon/ranged/sniper/HeavySniper.java | 124 + .../gtm/weapon/ranged/sniper/SniperRifle.java | 113 + .../weapon/ranged/special/Clausinator.java | 51 + .../weapon/ranged/special/Flamethrower.java | 85 + .../weapon/ranged/special/GoldMinigun.java | 83 + .../gtm/weapon/ranged/special/Handcuffs.java | 43 + .../gtm/weapon/ranged/special/Minigun.java | 129 + .../gtm/weapon/skins/WeaponSkinDAO.java | 136 + .../gtm/weapon/skins/WeaponSkinManager.java | 246 + .../gtm/weapon/skins/menu/MainMenu.java | 171 + .../gtm/weapon/skins/menu/SkinsMenu.java | 173 + .../src/main/resources/barrels.yml | 1 + .../src/main/resources/bounties.yml | 11 + .../src/main/resources/christmasdrops.yml | 2 + .../src/main/resources/drugblocks.yml | 1 + .../src/main/resources/drugdealer.yml | 57 + .../src/main/resources/gtm.yml | 1 + .../src/main/resources/items.yml | 0 .../src/main/resources/kits.yml | 13 + .../src/main/resources/loot.yml | 6 + .../src/main/resources/lootcrates.yml | 2 + .../src/main/resources/plugin.yml | 76 + .../src/main/resources/rules.yml | 5 + .../src/main/resources/salemenus.yml | 60 + .../src/main/resources/warps.yml | 3 + houses-master@c2d95d8e6a6/.gitignore | 103 + houses-master@c2d95d8e6a6/README.md | 1 + houses-master@c2d95d8e6a6/pom.xml | 128 + .../net/grandtheftmc/houses/HouseUtils.java | 220 + .../java/net/grandtheftmc/houses/Houses.java | 233 + .../grandtheftmc/houses/HousesSettings.java | 24 + .../net/grandtheftmc/houses/JSONHelper.java | 31 + .../java/net/grandtheftmc/houses/KeyVal.java | 19 + .../houses/commands/HouseChestCommand.java | 156 + .../houses/commands/HouseDisableCommand.java | 26 + .../houses/commands/HouseDoorCommand.java | 227 + .../houses/commands/HouseSignCommand.java | 181 + .../houses/commands/HouseTrashcanCommand.java | 80 + .../houses/commands/HousesCommand.java | 942 ++++ .../net/grandtheftmc/houses/dao/HouseDAO.java | 681 +++ .../houses/dao/PremiumHouseDAO.java | 503 ++ .../grandtheftmc/houses/houses/Blocks.java | 96 + .../houses/houses/EditableBlock.java | 52 + .../net/grandtheftmc/houses/houses/House.java | 515 ++ .../houses/houses/HouseChest.java | 61 + .../grandtheftmc/houses/houses/HouseDoor.java | 78 + .../grandtheftmc/houses/houses/HouseSign.java | 37 + .../houses/houses/HousesManager.java | 553 +++ .../houses/houses/PremiumHouse.java | 744 +++ .../houses/houses/PremiumHouseChest.java | 77 + .../houses/houses/PremiumHouseDoor.java | 76 + .../houses/houses/PremiumHouseGuest.java | 35 + .../houses/houses/PremiumHouseTrashcan.java | 69 + .../houses/listeners/BreakBlock.java | 44 + .../grandtheftmc/houses/listeners/Chat.java | 63 + .../grandtheftmc/houses/listeners/Damage.java | 57 + .../grandtheftmc/houses/listeners/Death.java | 21 + .../houses/listeners/Interact.java | 714 +++ .../houses/listeners/InventoryClose.java | 85 + .../houses/listeners/InventoryInteract.java | 84 + .../grandtheftmc/houses/listeners/Join.java | 20 + .../grandtheftmc/houses/listeners/Leave.java | 45 + .../grandtheftmc/houses/listeners/Login.java | 43 + .../houses/listeners/MenuListener.java | 704 +++ .../houses/listeners/PetListener.java | 35 + .../houses/listeners/Teleport.java | 55 + .../houses/listeners/WeaponShoot.java | 22 + .../grandtheftmc/houses/users/HouseUser.java | 756 +++ .../houses/users/HouseUserManager.java | 34 + .../grandtheftmc/houses/users/UserHouse.java | 97 + .../houses/users/UserHouseChest.java | 81 + .../src/main/resources/houses.yml | 13 + .../src/main/resources/plugin.yml | 20 + .../src/main/resources/premiumHouses.yml | 18 + hub-master@949a7e78421/.gitignore | 8 + hub-master@949a7e78421/README.md | 1 + hub-master@949a7e78421/pom.xml | 119 + .../main/java/net/grandtheftmc/hub/Hub.java | 156 + .../java/net/grandtheftmc/hub/HubUtils.java | 104 + .../java/net/grandtheftmc/hub/Testing.java | 41 + .../hub/commands/SpawnCommand.java | 46 + .../hub/listeners/AlertsComponent.java | 268 + .../hub/listeners/BlockPlace.java | 17 + .../net/grandtheftmc/hub/listeners/Chat.java | 37 + .../grandtheftmc/hub/listeners/Damage.java | 29 + .../net/grandtheftmc/hub/listeners/Death.java | 18 + .../net/grandtheftmc/hub/listeners/Drop.java | 22 + .../grandtheftmc/hub/listeners/Interact.java | 160 + .../net/grandtheftmc/hub/listeners/Join.java | 82 + .../net/grandtheftmc/hub/listeners/Move.java | 25 + .../hub/listeners/PortalComponent.java | 187 + .../hub/listeners/PortalEnter.java | 23 + .../grandtheftmc/hub/listeners/Update.java | 41 + .../hub/patch/InventoryFillPatch.java | 60 + .../src/main/resources/hub.yml | 4 + .../src/main/resources/plugin.yml | 11 + vice-master@f8937e1dbf1/.gitignore | 8 + vice-master@f8937e1dbf1/README.md | 1 + .../chests/abandoned_mineshaft.json | 276 ++ .../loot_tables/chests/desert_pyramid.json | 235 + .../loot_tables/chests/end_city_treasure.json | 162 + .../loot_tables/chests/igloo_chest.json | 93 + .../loot_tables/chests/jungle_temple.json | 128 + .../chests/jungle_temple_dispenser.json | 26 + .../loot_tables/chests/nether_bridge.json | 107 + .../loot_tables/chests/simple_dungeon.json | 264 + .../loot_tables/chests/spawn_bonus_chest.json | 160 + .../chests/stronghold_corridor.json | 143 + .../chests/stronghold_crossing.json | 113 + .../chests/stronghold_library.json | 62 + .../chests/village_blacksmith.json | 135 + .../loot_tables/chests/woodland_mansion.json | 254 + .../loot_tables/empty.json | 1 + .../loot_tables/entities/bat.json | 1 + .../loot_tables/entities/blaze.json | 35 + .../loot_tables/entities/cave_spider.json | 61 + .../loot_tables/entities/chicken.json | 61 + .../loot_tables/entities/cow.json | 68 + .../loot_tables/entities/creeper.json | 30 + .../loot_tables/entities/donkey.json | 29 + .../loot_tables/entities/elder_guardian.json | 120 + .../loot_tables/entities/ender_dragon.json | 1 + .../loot_tables/entities/enderman.json | 30 + .../loot_tables/entities/endermite.json | 1 + .../entities/evocation_illager.json | 44 + .../loot_tables/entities/ghast.json | 56 + .../loot_tables/entities/giant.json | 1 + .../loot_tables/entities/guardian.json | 99 + .../loot_tables/entities/horse.json | 29 + .../loot_tables/entities/husk.json | 60 + .../loot_tables/entities/iron_golem.json | 42 + .../loot_tables/entities/llama.json | 29 + .../loot_tables/entities/magma_cube.json | 30 + .../loot_tables/entities/mule.json | 29 + .../loot_tables/entities/mushroom_cow.json | 68 + .../loot_tables/entities/ocelot.json | 1 + .../loot_tables/entities/parrot.json | 30 + .../loot_tables/entities/pig.json | 42 + .../loot_tables/entities/polar_bear.json | 59 + .../loot_tables/entities/rabbit.json | 88 + .../loot_tables/entities/sheep.json | 42 + .../loot_tables/entities/sheep/black.json | 30 + .../loot_tables/entities/sheep/blue.json | 30 + .../loot_tables/entities/sheep/brown.json | 30 + .../loot_tables/entities/sheep/cyan.json | 30 + .../loot_tables/entities/sheep/gray.json | 30 + .../loot_tables/entities/sheep/green.json | 30 + .../entities/sheep/light_blue.json | 30 + .../loot_tables/entities/sheep/lime.json | 30 + .../loot_tables/entities/sheep/magenta.json | 30 + .../loot_tables/entities/sheep/orange.json | 30 + .../loot_tables/entities/sheep/pink.json | 30 + .../loot_tables/entities/sheep/purple.json | 30 + .../loot_tables/entities/sheep/red.json | 30 + .../loot_tables/entities/sheep/silver.json | 30 + .../loot_tables/entities/sheep/white.json | 30 + .../loot_tables/entities/sheep/yellow.json | 30 + .../loot_tables/entities/shulker.json | 20 + .../loot_tables/entities/silverfish.json | 1 + .../loot_tables/entities/skeleton.json | 56 + .../loot_tables/entities/skeleton_horse.json | 30 + .../loot_tables/entities/slime.json | 30 + .../loot_tables/entities/snowman.json | 23 + .../loot_tables/entities/spider.json | 61 + .../loot_tables/entities/squid.json | 34 + .../loot_tables/entities/stray.json | 92 + .../loot_tables/entities/vex.json | 1 + .../loot_tables/entities/villager.json | 1 + .../entities/vindication_illager.json | 35 + .../loot_tables/entities/witch.json | 159 + .../loot_tables/entities/wither_skeleton.json | 82 + .../loot_tables/entities/wolf.json | 1 + .../loot_tables/entities/zombie.json | 60 + .../loot_tables/entities/zombie_horse.json | 30 + .../loot_tables/entities/zombie_pigman.json | 76 + .../loot_tables/entities/zombie_villager.json | 60 + .../loot_tables/gameplay/fishing.json | 27 + .../loot_tables/gameplay/fishing/fish.json | 53 + .../loot_tables/gameplay/fishing/junk.json | 98 + .../gameplay/fishing/treasure.json | 74 + vice-master@f8937e1dbf1/pom.xml | 220 + .../main/java/net/grandtheftmc/vice/Vice.java | 716 +++ .../net/grandtheftmc/vice/ViceSettings.java | 214 + .../java/net/grandtheftmc/vice/ViceUtils.java | 916 ++++ .../grandtheftmc/vice/areas/AreaManager.java | 301 ++ .../vice/areas/builder/AreaBuilder.java | 42 + .../grandtheftmc/vice/areas/dao/AreaDAO.java | 175 + .../vice/areas/dao/DiscoveryDAO.java | 136 + .../vice/areas/events/AreaEnterEvent.java | 36 + .../vice/areas/events/AreaLeaveEvent.java | 36 + .../areas/listeners/AreaBuilderListener.java | 141 + .../vice/areas/listeners/AreaListener.java | 89 + .../net/grandtheftmc/vice/areas/obj/Area.java | 182 + .../grandtheftmc/vice/areas/obj/AreaUser.java | 37 + .../vice/areas/tasks/AreaUpdater.java | 45 + .../vice/combatlog/CombatLogManager.java | 128 + .../vice/combatlog/CombatLogger.java | 33 + .../vice/combatlog/task/DespawnTask.java | 35 + .../vice/commands/AmmoCommand.java | 152 + .../vice/commands/AntiAuraCommand.java | 75 + .../vice/commands/AreaCommand.java | 123 + .../vice/commands/BackpackCommand.java | 66 + .../vice/commands/BackupCommand.java | 70 + .../vice/commands/BaltopCommand.java | 68 + .../vice/commands/BondsCommand.java | 249 + .../vice/commands/BribeCommand.java | 143 + .../vice/commands/CheatCodeCommand.java | 198 + .../vice/commands/ChunkUnloadCommand.java | 47 + .../vice/commands/ClearCommand.java | 40 + .../vice/commands/CopCommand.java | 201 + .../vice/commands/CoreNPCCommand.java | 68 + .../vice/commands/DrugCheckCommand.java | 33 + .../vice/commands/FeedCommand.java | 58 + .../vice/commands/FixCommand.java | 131 + .../vice/commands/HomeCommand.java | 125 + .../vice/commands/KillCommand.java | 55 + .../vice/commands/LogoutCommand.java | 52 + .../vice/commands/LotteryCommand.java | 92 + .../vice/commands/MoneyCommand.java | 228 + .../vice/commands/NearCommand.java | 54 + .../vice/commands/PayCommand.java | 68 + .../vice/commands/PrestigeCommand.java | 24 + .../vice/commands/RTPCommand.java | 70 + .../vice/commands/RankupCommand.java | 49 + .../vice/commands/ResetCommand.java | 321 ++ .../vice/commands/ResetStatsCommand.java | 33 + .../vice/commands/ResourcePackCommand.java | 48 + .../vice/commands/SellCommand.java | 38 + .../vice/commands/SkinCommand.java | 206 + .../vice/commands/SkinsCommand.java | 26 + .../vice/commands/SpawnCommand.java | 54 + .../vice/commands/SpectatorCommand.java | 64 + .../vice/commands/SpeedCommand.java | 60 + .../vice/commands/StackCommand.java | 100 + .../vice/commands/StatsCommand.java | 39 + .../vice/commands/TeleportCommand.java | 83 + .../vice/commands/TokenShopCommand.java | 24 + .../vice/commands/TopKillersCommand.java | 36 + .../vice/commands/TpaCommand.java | 60 + .../vice/commands/VehicleCommand.java | 132 + .../vice/commands/ViceAdminCommand.java | 95 + .../vice/commands/ViceRankCommand.java | 66 + .../vice/commands/ViceRanksCommand.java | 26 + .../vice/commands/WarpCommand.java | 140 + .../vice/commands/ZoneCommand.java | 179 + .../grandtheftmc/vice/dao/CheatCodeDAO.java | 42 + .../net/grandtheftmc/vice/dao/MachineDAO.java | 157 + .../vice/display/DisplayManager.java | 34 + .../vice/display/cont/CartelListener.java | 196 + .../display/cont/PlayerStatsListener.java | 127 + .../grandtheftmc/vice/dropship/DropShip.java | 88 + .../dropship/DropShipConfirmationMenu.java | 4 + .../vice/dropship/DropShipHandler.java | 118 + .../vice/dropship/DropShipManager.java | 199 + .../vice/dropship/DropShipState.java | 17 + .../vice/dropship/DropShipTask.java | 133 + .../dropship/DropShipTeleportCommand.java | 59 + .../event/DropShipCountdownEvent.java | 24 + .../dropship/event/DropShipStartEvent.java | 18 + .../net/grandtheftmc/vice/drug/BaseDrug.java | 18 + .../java/net/grandtheftmc/vice/drug/Drug.java | 5 + .../grandtheftmc/vice/drug/DrugManager.java | 53 + .../net/grandtheftmc/vice/drug/DrugType.java | 17 + .../vice/drug/attribute/DrugAttribute.java | 7 + .../vice/drug/attribute/DrugBrewable.java | 28 + .../vice/drug/attribute/DrugCraftable.java | 13 + .../vice/drug/attribute/DrugDrinkable.java | 4 + .../vice/drug/attribute/DrugGrowable.java | 20 + .../vice/drug/attribute/DrugMachine.java | 7 + .../vice/drug/attribute/DrugPlaceable.java | 31 + .../vice/drug/attribute/DrugPlantable.java | 32 + .../net/grandtheftmc/vice/drug/item/Acid.java | 17 + .../vice/drug/item/BaseDrugItem.java | 88 + .../grandtheftmc/vice/drug/item/Cocaine.java | 17 + .../drug/item/ConcentratedMagicMushroom.java | 17 + .../grandtheftmc/vice/drug/item/Crack.java | 17 + .../vice/drug/item/DistilledVodka.java | 45 + .../vice/drug/item/DriedMagicMushroom.java | 25 + .../grandtheftmc/vice/drug/item/DrugItem.java | 46 + .../net/grandtheftmc/vice/drug/item/Hop.java | 19 + .../grandtheftmc/vice/drug/item/Joint.java | 78 + .../net/grandtheftmc/vice/drug/item/LSD.java | 17 + .../vice/drug/item/MagicMushroom.java | 17 + .../vice/drug/item/MarijuanaLeaf.java | 35 + .../vice/drug/item/MarijuanaSeed.java | 54 + .../vice/drug/item/PotBrownie.java | 78 + .../grandtheftmc/vice/drug/item/Vodka.java | 22 + .../grandtheftmc/vice/drug/item/WeedBuds.java | 16 + .../vice/drug/item/beer/BeerBottle.java | 23 + .../vice/drug/item/beer/CraftBeer.java | 21 + .../drug/item/beer/HumulusLupulusFruit.java | 26 + .../drug/item/beer/HumulusLupulusSeed.java | 47 + .../drug/item/meth/puremeth/Methylamine.java | 18 + .../drug/item/meth/puremeth/PureMeth.java | 18 + .../item/meth/whitemeth/EphredraSinica.java | 18 + .../meth/whitemeth/EphredraSinicaSeeds.java | 50 + .../drug/item/meth/whitemeth/WhiteMeth.java | 18 + .../net/grandtheftmc/vice/drugs/Drug.java | 55 + .../grandtheftmc/vice/drugs/DrugCommand.java | 52 + .../vice/drugs/DrugComponent.java | 131 + .../grandtheftmc/vice/drugs/DrugEffect.java | 13 + .../grandtheftmc/vice/drugs/DrugHelper.java | 26 + .../grandtheftmc/vice/drugs/DrugManager.java | 149 + .../grandtheftmc/vice/drugs/DrugParam.java | 17 + .../grandtheftmc/vice/drugs/DrugService.java | 70 + .../net/grandtheftmc/vice/drugs/DrugUtil.java | 195 + .../vice/drugs/EffectManager.java | 48 + .../grandtheftmc/vice/drugs/LockedBlocks.java | 45 + .../net/grandtheftmc/vice/drugs/SeedDrop.java | 44 + .../net/grandtheftmc/vice/drugs/SeedType.java | 80 + .../vice/drugs/categories/DrugCategory.java | 37 + .../vice/drugs/categories/IDrugCategory.java | 20 + .../drugs/categories/examples/AAlcohol.java | 24 + .../categories/examples/AnabolicSteroids.java | 24 + .../categories/examples/Cannabinoids.java | 24 + .../categories/examples/Depressants.java | 24 + .../categories/examples/Hallucinogens.java | 24 + .../drugs/categories/examples/Inhalants.java | 23 + .../drugs/categories/examples/Opioids.java | 24 + .../examples/PrescriptionDrugs.java | 24 + .../drugs/categories/examples/Stimulants.java | 25 + .../vice/drugs/events/DrugUseEvent.java | 52 + .../drugs/events/listener/DrugListener.java | 99 + .../listener/DrugPlacementListener.java | 129 + .../vice/drugs/example/Alcohol.java | 94 + .../vice/drugs/example/Cocaine.java | 119 + .../vice/drugs/example/Heroin.java | 78 + .../vice/drugs/example/Joint.java | 94 + .../grandtheftmc/vice/drugs/example/LSD.java | 187 + .../grandtheftmc/vice/drugs/example/MDMA.java | 92 + .../grandtheftmc/vice/drugs/example/Meth.java | 73 + .../vice/drugs/example/Steroids.java | 93 + .../grandtheftmc/vice/drugs/example/Weed.java | 84 + .../vice/drugs/internal/manager/Manager.java | 46 + .../vice/drugs/internal/service/Helper.java | 11 + .../vice/drugs/internal/service/Service.java | 42 + .../vice/drugs/items/DrugItem.java | 107 + .../vice/durability/DurabilityItems.java | 65 + .../vice/durability/DurabilityListener.java | 204 + .../vice/events/ArmorEquipEvent.java | 141 + .../vice/events/EquipArmorType.java | 60 + .../net/grandtheftmc/vice/events/TPEvent.java | 116 + .../grandtheftmc/vice/holidays/Holiday.java | 6 + .../vice/holidays/HolidayManager.java | 16 + .../vice/holidays/easter/Easter.java | 81 + .../vice/holidays/easter/EasterListener.java | 78 + .../vice/holidays/easter/EasterTask.java | 45 + .../vice/hologram/CoreHologram.java | 164 + .../vice/hologram/CoreHologramNode.java | 74 + .../grandtheftmc/vice/hologram/Hologram.java | 27 + .../vice/hologram/HologramManager.java | 269 + .../vice/hologram/HologramNode.java | 18 + .../vice/hologram/TypeWriter.java | 64 + .../hologram/event/HologramReceiveEvent.java | 64 + .../exception/HologramDuplicateException.java | 13 + .../HologramDuplicateNodeException.java | 15 + .../net/grandtheftmc/vice/items/AmmoType.java | 74 + .../grandtheftmc/vice/items/ArmorType.java | 77 + .../grandtheftmc/vice/items/ArmorUpgrade.java | 325 ++ .../vice/items/BackpackManager.java | 121 + .../net/grandtheftmc/vice/items/GameItem.java | 328 ++ .../vice/items/GameItemCommand.java | 523 ++ .../net/grandtheftmc/vice/items/Head.java | 245 + .../grandtheftmc/vice/items/ItemManager.java | 489 ++ .../java/net/grandtheftmc/vice/items/Kit.java | 156 + .../grandtheftmc/vice/items/KitCommand.java | 387 ++ .../net/grandtheftmc/vice/items/KitItem.java | 45 + .../net/grandtheftmc/vice/items/Schedule.java | 51 + .../grandtheftmc/vice/items/ShopCommand.java | 48 + .../grandtheftmc/vice/items/ShopManager.java | 291 ++ .../items/recipes/BottleCraftingRecipe.java | 24 + .../items/recipetypes/BrewingRecipeItem.java | 66 + .../items/recipetypes/CraftingRecipeItem.java | 32 + .../items/recipetypes/OtherRecipeItem.java | 66 + .../vice/items/recipetypes/RecipeItem.java | 17 + .../vice/items/recipetypes/RecipeType.java | 8 + .../items/recipetypes/ShapedRecipeItem.java | 55 + .../vice/items/recipetypes/SlotContainer.java | 24 + .../vice/listeners/ArmorEquip.java | 30 + .../vice/listeners/BlockDispense.java | 23 + .../vice/listeners/BlockPlace.java | 47 + .../vice/listeners/BreakBlock.java | 62 + .../vice/listeners/CartelsComponent.java | 62 + .../vice/listeners/ChangeWorld.java | 31 + .../net/grandtheftmc/vice/listeners/Chat.java | 170 + .../vice/listeners/ChunkLoad.java | 36 + .../vice/listeners/CommandPreProcess.java | 44 + .../vice/listeners/CraftItem.java | 108 + .../grandtheftmc/vice/listeners/Damage.java | 236 + .../grandtheftmc/vice/listeners/Death.java | 184 + .../grandtheftmc/vice/listeners/Dispense.java | 43 + .../net/grandtheftmc/vice/listeners/Drop.java | 64 + .../grandtheftmc/vice/listeners/Enchant.java | 47 + .../vice/listeners/FireListener.java | 29 + .../vice/listeners/FoodChange.java | 28 + .../vice/listeners/GunTestingListener.java | 61 + .../grandtheftmc/vice/listeners/Interact.java | 650 +++ .../vice/listeners/InventoryClick.java | 223 + .../vice/listeners/InventoryOpen.java | 67 + .../vice/listeners/InventoryPickupItem.java | 35 + .../vice/listeners/ItemBreak.java | 49 + .../vice/listeners/ItemComponent.java | 42 + .../vice/listeners/ItemSpawn.java | 30 + .../vice/listeners/ItemStack.java | 19 + .../vice/listeners/JetpackFuelUse.java | 47 + .../net/grandtheftmc/vice/listeners/Join.java | 200 + .../grandtheftmc/vice/listeners/Leave.java | 72 + .../grandtheftmc/vice/listeners/Login.java | 42 + .../vice/listeners/MenuListener.java | 1634 +++++++ .../grandtheftmc/vice/listeners/MobSpawn.java | 32 + .../net/grandtheftmc/vice/listeners/Move.java | 94 + .../vice/listeners/NametagComponent.java | 38 + .../vice/listeners/PetListener.java | 29 + .../grandtheftmc/vice/listeners/Pickup.java | 95 + .../vice/listeners/PlayerEnterZone.java | 41 + .../vice/listeners/PlayerLeaveZone.java | 36 + .../vice/listeners/PortalEnter.java | 79 + .../vice/listeners/RenameComponent.java | 40 + .../vice/listeners/SmeltItem.java | 26 + .../vice/listeners/SwapHandItems.java | 41 + .../grandtheftmc/vice/listeners/Target.java | 39 + .../grandtheftmc/vice/listeners/Teleport.java | 18 + .../vice/listeners/UpdateListener.java | 298 ++ .../vice/listeners/VehicleUse.java | 117 + .../vice/listeners/VoteReward.java | 52 + .../vice/listeners/WeaponShoot.java | 43 + .../vice/listeners/WeaponUse.java | 386 ++ .../vice/lootcrates/CrateManager.java | 188 + .../vice/lootcrates/LootCrate.java | 157 + .../vice/lootcrates/LootCrateCommand.java | 190 + .../vice/lootcrates/LootItem.java | 84 + .../vice/machine/BaseMachine.java | 215 + .../vice/machine/MachineCommand.java | 33 + .../vice/machine/MachineComponent.java | 595 +++ .../vice/machine/MachineManager.java | 149 + .../vice/machine/MachineTask.java | 142 + .../vice/machine/MachineTesting.java | 44 + .../vice/machine/MachineUtil.java | 145 + .../vice/machine/data/MachineData.java | 100 + .../vice/machine/data/MachineDataType.java | 6 + .../machine/event/MachineDurabilityEvent.java | 37 + .../vice/machine/event/MachineFuelEvent.java | 51 + .../event/MachineItemTransferEvent.java | 71 + .../vice/machine/event/MachinePlaceEvent.java | 45 + .../event/MachineRecipeCompleteEvent.java | 37 + .../misc/MachineProgressMultiplier.java | 12 + .../vice/machine/recipe/MachineRecipe.java | 84 + .../machine/recipe/MachineRecipeManager.java | 120 + .../recipe/command/MachineRecipeCommand.java | 20 + .../vice/machine/recipe/menu/RecipeMenu.java | 71 + .../recipe/menu/RecipeMenuManager.java | 52 + .../machine/recipe/menu/RecipeMenuPortal.java | 34 + .../recipe/menu/type/RecipeMenuAcid.java | 182 + .../recipe/menu/type/RecipeMenuBeer.java | 176 + .../recipe/menu/type/RecipeMenuCocaine.java | 176 + .../RecipeMenuConcentratedMagicMushroom.java | 174 + .../recipe/menu/type/RecipeMenuCrack.java | 176 + .../recipe/menu/type/RecipeMenuCraftBeer.java | 176 + .../menu/type/RecipeMenuDistilledVodka.java | 176 + .../menu/type/RecipeMenuDriedMushroom.java | 182 + .../type/RecipeMenuHumulusLapulusFruit.java | 182 + .../recipe/menu/type/RecipeMenuLSD.java | 174 + .../recipe/menu/type/RecipeMenuPureMeth.java | 176 + .../recipe/menu/type/RecipeMenuVodka.java | 176 + .../recipe/menu/type/RecipeMenuWeed.java | 182 + .../recipe/menu/type/RecipeMenuWhiteMeth.java | 174 + .../recipe/misc/MachineRecipeData.java | 63 + .../vice/machine/recipe/misc/RecipeInput.java | 22 + .../machine/recipe/misc/RecipeOutput.java | 22 + .../vice/machine/recipe/type/RecipeAcid.java | 29 + .../vice/machine/recipe/type/RecipeBeer.java | 32 + .../machine/recipe/type/RecipeCocaine.java | 29 + .../type/RecipeConcentratedMagicMushroom.java | 34 + .../vice/machine/recipe/type/RecipeCrack.java | 37 + .../machine/recipe/type/RecipeCraftBeer.java | 32 + .../recipe/type/RecipeDistilledVodka.java | 32 + .../recipe/type/RecipeDriedMushroomBrown.java | 29 + .../recipe/type/RecipeDriedMushroomRed.java | 29 + .../type/RecipeHumulusLupulusFruit.java | 29 + .../vice/machine/recipe/type/RecipeLSD.java | 29 + .../machine/recipe/type/RecipePureMeth.java | 30 + .../vice/machine/recipe/type/RecipeVodka.java | 40 + .../vice/machine/recipe/type/RecipeWeed.java | 29 + .../machine/recipe/type/RecipeWhiteMeth.java | 36 + .../machine/repair/MachineRepairMenu.java | 211 + .../type/MachineAdvancedMethProducer.java | 203 + .../type/MachineBasicMethProducer.java | 189 + .../machine/type/MachineBeerDistillery.java | 191 + .../machine/type/MachineCocaProcessor.java | 191 + .../type/MachineLargeDryingMachine.java | 209 + .../type/MachineMediumDryingChamber.java | 209 + .../machine/type/MachinePulpCondenser.java | 189 + .../type/MachineSmallDryingChamber.java | 197 + .../vice/machine/type/MachineSugarBox.java | 201 + .../machine/type/MachineVodkaDistillery.java | 191 + .../vice/pickers/PickerCommand.java | 110 + .../vice/pickers/PickerManager.java | 43 + .../vice/redstone/PandaRedstoneWire.java | 334 ++ .../vice/redstone/RedstoneManager.java | 32 + .../net/grandtheftmc/vice/season/Season.java | 39 + .../grandtheftmc/vice/season/SeasonDAO.java | 47 + .../grandtheftmc/vice/season/SeasonData.java | 14 + .../vice/season/SeasonListener.java | 92 + .../vice/season/SeasonManager.java | 64 + .../grandtheftmc/vice/tasks/GlassesTask.java | 36 + .../net/grandtheftmc/vice/tasks/Lottery.java | 285 ++ .../vice/tasks/LotteryPlayer.java | 64 + .../grandtheftmc/vice/tasks/PlayerTask.java | 123 + .../grandtheftmc/vice/tasks/TaskManager.java | 24 + .../grandtheftmc/vice/users/AntiAfkTimer.java | 38 + .../grandtheftmc/vice/users/CheatCode.java | 211 + .../vice/users/CheatCodeState.java | 25 + .../net/grandtheftmc/vice/users/CopRank.java | 107 + .../grandtheftmc/vice/users/LockedWeapon.java | 52 + .../vice/users/PersonalVehicle.java | 355 ++ .../net/grandtheftmc/vice/users/Prestige.java | 27 + .../grandtheftmc/vice/users/TaxiTarget.java | 134 + .../net/grandtheftmc/vice/users/ViceRank.java | 110 + .../net/grandtheftmc/vice/users/ViceUser.java | 1203 +++++ .../grandtheftmc/vice/users/ViceUserDAO.java | 936 ++++ .../vice/users/ViceUserManager.java | 30 + .../vice/users/npcs/MachineNPC.java | 43 + .../vice/users/npcs/SkinsNPC.java | 34 + .../grandtheftmc/vice/users/npcs/TaxiNPC.java | 59 + .../vice/users/npcs/TrashCanManager.java | 244 + .../vice/users/npcs/shopnpc/BlocksMenu.java | 199 + .../vice/users/npcs/shopnpc/CategoryMenu.java | 407 ++ .../vice/users/npcs/shopnpc/ShopNPC.java | 40 + .../users/storage/BooleanStorageType.java | 31 + .../vice/users/storage/IntStorageType.java | 17 + .../vice/users/storage/LongStorageType.java | 16 + .../vice/utils/CancellationDetector.java | 217 + .../vice/utils/DurabilityUtil.java | 190 + .../net/grandtheftmc/vice/utils/IconUtil.java | 14 + .../vice/utils/ItemStackUtil.java | 103 + .../grandtheftmc/vice/utils/LocationUtil.java | 204 + .../net/grandtheftmc/vice/utils/MapUtil.java | 33 + .../net/grandtheftmc/vice/utils/NBTUtil.java | 55 + .../vice/utils/ParticleColor.java | 206 + .../grandtheftmc/vice/utils/ReflectUtil.java | 56 + .../vice/utils/ReflectionUtil.java | 210 + .../net/grandtheftmc/vice/utils/Stats.java | 91 + .../grandtheftmc/vice/utils/StringUtils.java | 35 + .../grandtheftmc/vice/utils/TextHelper.java | 68 + .../grandtheftmc/vice/utils/TitleBuilder.java | 68 + .../vice/utils/WeightedRandomCollection.java | 91 + .../utils/advancement/AdvancementUtil.java | 410 ++ .../vice/utils/advancement/Condition.java | 61 + .../vice/utils/advancement/FrameType.java | 33 + .../vice/utils/advancement/Trigger.java | 135 + .../vice/utils/recipe/ShapedRegister.java | 198 + .../vice/utils/recipe/ShapelessRegister.java | 156 + .../net/grandtheftmc/vice/weapon/README.MD | 61 + .../vice/weapon/WeaponRegistry.java | 96 + .../vice/weapon/airstrike/Airstrike.java | 34 + .../vice/weapon/airstrike/Nuke.java | 33 + .../vice/weapon/explosive/Grenade.java | 46 + .../weapon/explosive/MolotovCocktail.java | 48 + .../vice/weapon/explosive/ProximityMine.java | 48 + .../vice/weapon/explosive/StickyBomb.java | 49 + .../vice/weapon/explosive/TearGas.java | 48 + .../vice/weapon/melee/BaseballBat.java | 57 + .../vice/weapon/melee/Chainsaw.java | 84 + .../grandtheftmc/vice/weapon/melee/Dildo.java | 57 + .../vice/weapon/melee/Katana.java | 57 + .../grandtheftmc/vice/weapon/melee/Knife.java | 56 + .../vice/weapon/melee/NightStick.java | 56 + .../grandtheftmc/vice/weapon/melee/Rake.java | 56 + .../weapon/ranged/assault/AdvancedRifle.java | 70 + .../weapon/ranged/assault/AssaultRifle.java | 70 + .../weapon/ranged/assault/BullpupRifle.java | 70 + .../weapon/ranged/assault/CarbineRifle.java | 70 + .../weapon/ranged/assault/SpecialCarbine.java | 77 + .../ranged/launcher/GrenadeLauncher.java | 81 + .../ranged/launcher/HomingLauncher.java | 82 + .../weapon/ranged/launcher/NetLauncher.java | 73 + .../vice/weapon/ranged/launcher/RPG.java | 74 + .../vice/weapon/ranged/lmg/CombatMG.java | 79 + .../vice/weapon/ranged/lmg/MG.java | 72 + .../weapon/ranged/pistol/CombatPistol.java | 69 + .../weapon/ranged/pistol/HeavyPistol.java | 70 + .../weapon/ranged/pistol/MarksmanPistol.java | 74 + .../vice/weapon/ranged/pistol/Pistol.java | 70 + .../vice/weapon/ranged/pistol/StunGun.java | 73 + .../weapon/ranged/shotgun/AssaultShotgun.java | 72 + .../weapon/ranged/shotgun/HeavyShotgun.java | 79 + .../vice/weapon/ranged/shotgun/Musket.java | 70 + .../weapon/ranged/shotgun/PumpShotgun.java | 71 + .../ranged/shotgun/SawedoffShotgun.java | 71 + .../vice/weapon/ranged/smg/AssaultSMG.java | 71 + .../vice/weapon/ranged/smg/CombatPDW.java | 71 + .../weapon/ranged/smg/GusenbergSweeper.java | 78 + .../vice/weapon/ranged/smg/MicroSMG.java | 71 + .../vice/weapon/ranged/smg/SMG.java | 71 + .../weapon/ranged/sniper/HeavySniper.java | 76 + .../weapon/ranged/sniper/SniperRifle.java | 69 + .../weapon/ranged/special/Clausinator.java | 51 + .../weapon/ranged/special/Flamethrower.java | 84 + .../weapon/ranged/special/GoldMinigun.java | 80 + .../vice/weapon/ranged/special/Handcuffs.java | 43 + .../vice/weapon/ranged/special/Minigun.java | 80 + .../vice/weapon/skins/WeaponSkinDAO.java | 136 + .../vice/weapon/skins/WeaponSkinManager.java | 195 + .../vice/weapon/skins/menu/MainMenu.java | 164 + .../vice/weapon/skins/menu/SkinsMenu.java | 164 + .../vice/world/ViceSelection.java | 96 + .../grandtheftmc/vice/world/WorldManager.java | 117 + .../net/grandtheftmc/vice/world/ZoneFlag.java | 9 + .../world/events/PlayerEnterZoneEvent.java | 44 + .../world/events/PlayerLeaveZoneEvent.java | 44 + .../world/obsidianbreaker/BlockStatus.java | 90 + .../world/obsidianbreaker/DamageStorage.java | 124 + .../obsidianbreaker/ObsidianManager.java | 171 + .../vice/world/obsidianbreaker/nms/NMS.java | 10 + .../world/obsidianbreaker/nms/Reflection.java | 33 + .../obsidianbreaker/nms/ReflectionUtils.java | 77 + .../obsidianbreaker/tasks/RegenTask.java | 36 + .../grandtheftmc/vice/world/warps/Warp.java | 31 + .../vice/world/warps/WarpCache.java | 44 + .../vice/world/warps/WarpManager.java | 657 +++ .../src/main/resources/barrels.yml | 1 + .../src/main/resources/bounties.yml | 11 + .../src/main/resources/drugblocks.yml | 1 + .../src/main/resources/drugdealer.yml | 51 + .../src/main/resources/gtm.yml | 1 + .../src/main/resources/homes.yml | 0 .../src/main/resources/items.yml | 0 .../src/main/resources/kits.yml | 13 + .../src/main/resources/loot.yml | 6 + .../src/main/resources/lootcrates.yml | 2 + .../src/main/resources/playercache.yml | 0 .../src/main/resources/plugin.yml | 75 + .../src/main/resources/rules.yml | 5 + .../src/main/resources/salemenus.yml | 60 + .../src/main/resources/upgradedcontainers.yml | 0 .../src/main/resources/warps.yml | 3 + .../src/main/resources/zones.yml | 0 .../src/test/prices/TestPrices.java | 164 + wastedcops-master@4d070d71e37/.gitignore | 6 + wastedcops-master@4d070d71e37/README.MD | 4 + wastedcops-master@4d070d71e37/lib/Core.jar | Bin 0 -> 232346 bytes wastedcops-master@4d070d71e37/lib/GTM.jar | Bin 0 -> 7107134 bytes wastedcops-master@4d070d71e37/lib/Houses.jar | Bin 0 -> 107429 bytes .../lib/WastedGuns.jar | Bin 0 -> 90406 bytes wastedcops-master@4d070d71e37/pom.xml | 158 + .../com/j0ach1mmall3/wastedcops/Main.java | 214 + .../com/j0ach1mmall3/wastedcops/api/Cop.java | 159 + .../wastedcops/api/CopProperties.java | 57 + .../api/events/CopDamagePlayerEvent.java | 48 + .../wastedcops/api/events/CopEvent.java | 28 + .../api/events/CopKillPlayerEvent.java | 45 + .../wastedcops/api/events/CopSpawnEvent.java | 48 + .../api/events/PlayerKillCopEvent.java | 53 + .../commands/WCReloadCommandHandler.java | 23 + .../wastedcops/config/Config.java | 51 + .../wastedcops/listeners/CopListener.java | 63 + .../wastedcops/listeners/EntityListener.java | 207 + .../src/main/resources/config.yml | 88 + .../src/main/resources/plugin.yml | 19 + wastedguns-master@2e3501603b9/.gitignore | 102 + wastedguns-master@2e3501603b9/README.md | 1 + wastedguns-master@2e3501603b9/pom.xml | 132 + .../com/j0ach1mmall3/wastedguns/Main.java | 154 + .../com/j0ach1mmall3/wastedguns/MathUtil.java | 160 + .../j0ach1mmall3/wastedguns/StringUtil.java | 78 + .../api/attachments/Attachment.java | 167 + .../wastedguns/api/events/NetgunHitEvent.java | 135 + .../api/events/WeaponDamageEvent.java | 99 + .../api/events/WeaponDropEvent.java | 34 + .../api/events/WeaponEquipEvent.java | 40 + .../wastedguns/api/events/WeaponEvent.java | 85 + .../api/events/WeaponLeftClickEvent.java | 26 + .../api/events/WeaponPickupEvent.java | 34 + .../api/events/WeaponRightClickEvent.java | 26 + .../api/events/WeaponSneakEvent.java | 33 + .../ExplosionDamageEntityEvent.java | 65 + .../api/events/ranged/AmmoUpdateEvent.java | 45 + .../ranged/RangedWeaponReloadEvent.java | 39 + .../events/ranged/RangedWeaponShootEvent.java | 28 + .../commands/GiveWeaponCommandHandler.java | 70 + .../wastedguns/listeners/EntityListener.java | 131 + .../wastedguns/listeners/PlayerListener.java | 246 + .../wastedguns/listeners/WeaponsListener.java | 81 + .../grandtheftmc/guns/DamageDataHandler.java | 90 + .../java/net/grandtheftmc/guns/GTMGuns.java | 49 + .../java/net/grandtheftmc/guns/TESTING.java | 17 + .../net/grandtheftmc/guns/WeaponCooldown.java | 29 + .../net/grandtheftmc/guns/WeaponHandler.java | 924 ++++ .../net/grandtheftmc/guns/WeaponManager.java | 302 ++ .../net/grandtheftmc/guns/WeaponState.java | 34 + .../grandtheftmc/guns/cache/PlayerCache.java | 93 + .../grandtheftmc/guns/cache/WeaponCache.java | 18 + .../guns/weapon/AirstrikeWeapon.java | 135 + .../grandtheftmc/guns/weapon/AmmoType.java | 39 + .../grandtheftmc/guns/weapon/MeleeWeapon.java | 116 + .../guns/weapon/ThrowableWeapon.java | 435 ++ .../net/grandtheftmc/guns/weapon/Weapon.java | 636 +++ .../grandtheftmc/guns/weapon/WeaponSkin.java | 36 + .../grandtheftmc/guns/weapon/WeaponType.java | 156 + .../guns/weapon/attribute/RankedWeapon.java | 10 + .../guns/weapon/attribute/StarAttribute.java | 32 + .../weapon/attribute/WeaponAttribute.java | 7 + .../weapon/attribute/WeaponExplosive.java | 14 + .../guns/weapon/attribute/WeaponRPM.java | 47 + .../guns/weapon/ranged/RangedWeapon.java | 1097 +++++ .../weapon/ranged/attachment/Attachment.java | 33 + .../weapon/ranged/guns/AssultRifleWeapon.java | 80 + .../guns/weapon/ranged/guns/LMGWeapon.java | 80 + .../weapon/ranged/guns/LauncherWeapon.java | 552 +++ .../guns/weapon/ranged/guns/PistolWeapon.java | 68 + .../guns/weapon/ranged/guns/SMGWeapon.java | 80 + .../weapon/ranged/guns/ShotgunWeapon.java | 75 + .../guns/weapon/ranged/guns/SniperWeapon.java | 86 + .../weapon/ranged/guns/SpecialWeapon.java | 93 + .../src/main/resources/airstrikes.yml | 59 + .../src/main/resources/attachments.yml | 171 + .../src/main/resources/config.yml | 6 + .../src/main/resources/explosives.yml | 112 + .../src/main/resources/melee.yml | 66 + .../src/main/resources/plugin.yml | 23 + .../src/main/resources/ranged.yml | 840 ++++ wastedvehicles-master@5cac11d6d43/.gitignore | 101 + wastedvehicles-master@5cac11d6d43/README.md | 3 + wastedvehicles-master@5cac11d6d43/circle.yml | 5 + wastedvehicles-master@5cac11d6d43/deploy.sh | 23 + wastedvehicles-master@5cac11d6d43/pom.xml | 109 + .../com/j0ach1mmall3/wastedvehicles/Main.java | 211 + .../wastedvehicles/api/SpeedBoost.java | 31 + .../wastedvehicles/api/VehicleProperties.java | 166 + .../wastedvehicles/api/VehicleType.java | 13 + .../api/events/FuelUseEvent.java | 45 + .../api/events/JetpackFlyEvent.java | 54 + .../api/events/VehicleCreateEvent.java | 29 + .../api/events/VehicleDamageEvent.java | 46 + .../api/events/VehicleDestroyEvent.java | 29 + .../api/events/VehicleEnterEvent.java | 36 + .../api/events/VehicleEvent.java | 28 + .../api/events/VehicleIgniteEvent.java | 29 + .../api/events/VehicleImpactEntityEvent.java | 49 + .../api/events/VehicleImpactVehicleEvent.java | 60 + .../api/events/VehicleLeaveEvent.java | 36 + .../events/VehiclePassengerEnterEvent.java | 36 + .../api/events/VehicleShootEvent.java | 42 + .../api/events/VehicleSpeedBoostEvent.java | 47 + .../wastedvehicles/api/vehicles/Boat.java | 62 + .../wastedvehicles/api/vehicles/Car.java | 64 + .../api/vehicles/Helicopter.java | 45 + .../wastedvehicles/api/vehicles/Plane.java | 62 + .../api/vehicles/Submarine.java | 56 + .../api/vehicles/WastedVehicle.java | 396 ++ .../commands/FixVehiclesCommandHandler.java | 63 + .../commands/GiveVehicleCommandHandler.java | 45 + .../commands/WVReloadCommandHandler.java | 23 + .../wastedvehicles/config/Config.java | 100 + .../listeners/JetpackListener.java | 247 + .../listeners/VehicleListener.java | 475 ++ .../wastedvehicles/util/MiscUtil.java | 66 + .../wastedvehicles/util/SteerDirection.java | 47 + .../wastedvehicles/util/VehicleUtils.java | 73 + .../src/main/resources/config.yml | 530 ++ .../src/main/resources/plugin.yml | 27 + 1898 files changed, 217416 insertions(+) create mode 100644 bungee-master@696956eaecd/.gitignore create mode 100644 bungee-master@696956eaecd/README.md create mode 100644 bungee-master@696956eaecd/pom.xml create mode 100644 bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/Bungee.java create mode 100644 bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/Lang.java create mode 100644 bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/Settings.java create mode 100644 bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/Utils.java create mode 100644 bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/authy/AuthyManager.java create mode 100644 bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/commands/AltCommand.java create mode 100644 bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/commands/AuthyCommand.java create mode 100644 bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/commands/FindCommand.java create mode 100644 bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/commands/GlobalMessageCommand.java create mode 100644 bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/commands/HelpCommand.java create mode 100644 bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/commands/HubCommand.java create mode 100644 bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/commands/MotdCommand.java create mode 100644 bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/commands/PermsCommand.java create mode 100644 bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/commands/PlaytimeCommand.java create mode 100644 bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/commands/SeenCommand.java create mode 100644 bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/commands/ServerCommand.java create mode 100644 bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/commands/StaffChatCommand.java create mode 100644 bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/database/BaseDatabase.java create mode 100644 bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/database/DatabaseHandler.java create mode 100644 bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/database/component/Database.java create mode 100644 bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/database/component/DatabaseCredentials.java create mode 100644 bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/help/HelpCore.java create mode 100644 bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/help/data/HelpCategory.java create mode 100644 bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/listeners/Chat.java create mode 100644 bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/listeners/Connect.java create mode 100644 bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/listeners/Disconnect.java create mode 100644 bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/listeners/Kick.java create mode 100644 bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/listeners/Login.java create mode 100644 bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/listeners/Ping.java create mode 100644 bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/redisbungee/RedisListener.java create mode 100644 bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/redisbungee/RedisManager.java create mode 100644 bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/redisbungee/data/DataType.java create mode 100644 bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/tasks/AnnouncerTask.java create mode 100644 bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/tasks/AuthyTask.java create mode 100644 bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/tasks/PlaytimePurgeTask.java create mode 100644 bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/tasks/ServerStatusTask.java create mode 100644 bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/users/User.java create mode 100644 bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/users/UserManager.java create mode 100644 bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/users/UserRank.java create mode 100644 bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/utils/Callback.java create mode 100644 bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/utils/DefaultFontInfo.java create mode 100644 bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/utils/HelpLog.java create mode 100644 bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/utils/PlaytimeManager.java create mode 100644 bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/utils/RequestRateLimiter.java create mode 100644 bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/utils/ServerStatus.java create mode 100644 bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/utils/TabComplete.java create mode 100644 bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/utils/TimeFormatter.java create mode 100644 bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/utils/UUIDUtil.java create mode 100644 bungee-master@696956eaecd/src/main/resources/plugin.yml create mode 100644 cartels-master@e4f5c2ecec5/.gitignore create mode 100644 cartels-master@e4f5c2ecec5/README.md create mode 100644 cartels-master@e4f5c2ecec5/licenses/LGPL.txt create mode 100644 cartels-master@e4f5c2ecec5/licenses/LICENCE.txt create mode 100644 cartels-master@e4f5c2ecec5/licenses/gson-license.txt create mode 100644 cartels-master@e4f5c2ecec5/pom.xml create mode 100644 cartels-master@e4f5c2ecec5/src/main/assembly/package.xml create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/Board.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/Conf.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/FLocation.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/FPlayer.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/FPlayers.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/Faction.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/Factions.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/P.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdAHome.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdAdmin.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdAnnounce.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdAutoClaim.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdAutoHelp.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdBoom.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdBypass.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdChat.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdChatSpy.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdClaim.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdClaimLine.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdConfig.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdConvert.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdCreate.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdDeinvite.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdDelFWarp.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdDescription.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdDisband.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdFWarp.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdHelp.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdHome.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdInvite.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdJoin.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdKick.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdLeave.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdList.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdLock.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdLogins.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdMap.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdMod.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdModifyPower.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdMoney.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdMoneyBalance.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdMoneyDeposit.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdMoneyTransferFf.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdMoneyTransferFp.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdMoneyTransferPf.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdMoneyWithdraw.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdOpen.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdOwner.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdOwnerList.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdPeaceful.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdPermanent.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdPermanentPower.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdPower.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdPowerBoost.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdRelationAlly.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdRelationEnemy.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdRelationNeutral.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdReload.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdSB.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdSafeunclaimall.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdSaveAll.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdSeeChunk.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdSetFWarp.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdSethome.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdShow.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdShowInvites.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdStatus.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdStuck.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdTag.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdTitle.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdToggleAllianceChat.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdTop.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdUnclaim.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdUnclaimall.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdVersion.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdWarunclaimall.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/FCmdRoot.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/FCommand.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/FRelationCommand.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/eco/EcoResult.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/event/FPlayerJoinEvent.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/event/FPlayerLeaveEvent.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/event/FactionCreateEvent.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/event/FactionDisbandEvent.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/event/FactionEvent.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/event/FactionPlayerEvent.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/event/FactionRelationEvent.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/event/FactionRelationWishEvent.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/event/FactionRenameEvent.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/event/LandClaimEvent.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/event/LandUnclaimAllEvent.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/event/LandUnclaimEvent.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/event/PowerLossEvent.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/iface/EconomyParticipator.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/iface/RelationParticipator.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/integration/Econ.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/integration/Essentials.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/integration/Worldguard.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/integration/dynmap/DynmapStyle.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/integration/dynmap/EngineDynmap.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/integration/dynmap/TempAreaMarker.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/integration/dynmap/TempMarker.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/integration/dynmap/TempMarkerSet.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/listeners/FactionsBlockListener.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/listeners/FactionsChatListener.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/listeners/FactionsEntityListener.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/listeners/FactionsExploitListener.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/listeners/FactionsPlayerListener.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/listeners/MenuListener.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/scoreboards/BufferedObjective.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/scoreboards/FScoreboard.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/scoreboards/FSidebarProvider.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/scoreboards/FTeamWrapper.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/scoreboards/sidebar/FDefaultSidebar.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/scoreboards/sidebar/FInfoSidebar.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/struct/ChatMode.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/struct/Permission.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/struct/Relation.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/struct/Role.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/util/AsciiCompass.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/util/AutoLeaveProcessTask.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/util/AutoLeaveTask.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/util/EnumTypeAdapter.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/util/LazyLocation.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/util/MapFLocToStringSetTypeAdapter.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/util/MiscUtil.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/util/MyLocationTypeAdapter.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/util/RelationUtil.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/util/SpiralTask.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/util/VisualizeUtil.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/util/WarmUpUtil.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/CommandVisibility.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/MCommand.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/MPlugin.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/MPluginSecretPlayerListener.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/persist/MemoryBoard.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/persist/MemoryFPlayer.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/persist/MemoryFPlayers.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/persist/MemoryFaction.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/persist/MemoryFactions.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/persist/SaveTask.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/persist/json/FactionsJSON.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/persist/json/JSONBoard.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/persist/json/JSONFPlayer.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/persist/json/JSONFPlayers.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/persist/json/JSONFaction.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/persist/json/JSONFactions.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/util/DiscUtil.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/util/PermUtil.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/util/Persist.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/util/SmokeUtil.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/util/TL.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/util/TagReplacer.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/util/TagUtil.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/util/TextUtil.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/util/UUIDFetcher.java create mode 100644 cartels-master@e4f5c2ecec5/src/main/resources/config.yml create mode 100644 cartels-master@e4f5c2ecec5/src/main/resources/lang.yml create mode 100644 cartels-master@e4f5c2ecec5/src/main/resources/lang/en_GB.yml create mode 100644 cartels-master@e4f5c2ecec5/src/main/resources/lang/en_US.yml create mode 100644 cartels-master@e4f5c2ecec5/src/main/resources/lang/ja_JP.yml create mode 100644 cartels-master@e4f5c2ecec5/src/main/resources/plugin.yml create mode 100644 common-master@c5eba833390/.gitignore create mode 100644 common-master@c5eba833390/README.md create mode 100644 common-master@c5eba833390/pom.xml create mode 100644 common-master@c5eba833390/src/main/java/net/grandtheftmc/ServerType.java create mode 100644 common-master@c5eba833390/src/main/java/net/grandtheftmc/ServerTypeId.java create mode 100644 common-master@c5eba833390/src/main/java/net/grandtheftmc/jedis/JMessage.java create mode 100644 common-master@c5eba833390/src/main/java/net/grandtheftmc/jedis/JMessageListener.java create mode 100644 common-master@c5eba833390/src/main/java/net/grandtheftmc/jedis/JMessageReader.java create mode 100644 common-master@c5eba833390/src/main/java/net/grandtheftmc/jedis/JMessageWriter.java create mode 100644 common-master@c5eba833390/src/main/java/net/grandtheftmc/jedis/JedisChannel.java create mode 100644 common-master@c5eba833390/src/main/java/net/grandtheftmc/jedis/JedisManager.java create mode 100644 common-master@c5eba833390/src/main/java/net/grandtheftmc/jedis/JedisModule.java create mode 100644 common-master@c5eba833390/src/main/java/net/grandtheftmc/jedis/message/FindPlayerMessage.java create mode 100644 common-master@c5eba833390/src/main/java/net/grandtheftmc/jedis/message/SendPlayerMessage.java create mode 100644 common-master@c5eba833390/src/main/java/net/grandtheftmc/jedis/message/ServerJoinRequestMessage.java create mode 100644 common-master@c5eba833390/src/main/java/net/grandtheftmc/jedis/message/ServerJoinStatusMessage.java create mode 100644 common-master@c5eba833390/src/main/java/net/grandtheftmc/jedis/message/ServerQueueMessage.java create mode 100644 common-master@c5eba833390/src/main/java/net/grandtheftmc/jedis/message/ServerQueueNotifyMessage.java create mode 100644 common-master@c5eba833390/src/main/java/net/grandtheftmc/jedis/message/UserStateTransactionCheck.java create mode 100644 common-master@c5eba833390/src/main/java/net/grandtheftmc/jedis/message/VoteNotificationMessage.java create mode 100644 common-master@c5eba833390/src/main/java/net/grandtheftmc/slack/Slack.java create mode 100644 common-master@c5eba833390/src/main/java/net/grandtheftmc/slack/SlackChannel.java create mode 100644 common-master@c5eba833390/src/main/java/net/grandtheftmc/slack/SlackField.java create mode 100644 common-master@c5eba833390/src/main/java/net/grandtheftmc/slack/SlackHook.java create mode 100644 common-master@c5eba833390/src/main/java/net/grandtheftmc/slack/SlackMessage.java create mode 100644 common-master@c5eba833390/src/main/java/net/grandtheftmc/slack/action/SlackAction.java create mode 100644 common-master@c5eba833390/src/main/java/net/grandtheftmc/slack/action/SlackActionStyle.java create mode 100644 common-master@c5eba833390/src/main/java/net/grandtheftmc/slack/action/SlackActionType.java create mode 100644 common-master@c5eba833390/src/main/java/net/grandtheftmc/slack/attachment/SlackAttachment.java create mode 100644 common-master@c5eba833390/src/main/java/net/grandtheftmc/slack/exception/SlackException.java create mode 100644 core-master@6ef85bb745a/.gitignore create mode 100644 core-master@6ef85bb745a/README.md create mode 100644 core-master@6ef85bb745a/pom.xml create mode 100644 core-master@6ef85bb745a/setup/database_schema.txt create mode 100644 core-master@6ef85bb745a/setup/script/copy_house.py create mode 100644 core-master@6ef85bb745a/setup/script/data_mine.py create mode 100644 core-master@6ef85bb745a/setup/script/fix_house_data.py create mode 100644 core-master@6ef85bb745a/setup/script/fix_user_data.py create mode 100644 core-master@6ef85bb745a/setup/script/fix_user_table_foreign.py create mode 100644 core-master@6ef85bb745a/setup/script/mine_log.py create mode 100644 core-master@6ef85bb745a/setup/script/python_script.sh create mode 100644 core-master@6ef85bb745a/setup/script/slack_api.py create mode 100644 core-master@6ef85bb745a/setup/script/stat_app.py create mode 100644 core-master@6ef85bb745a/setup/script/transpose_gang.py create mode 100644 core-master@6ef85bb745a/setup/script/transpose_house.py create mode 100644 core-master@6ef85bb745a/setup/script/transpose_house_yml.py create mode 100644 core-master@6ef85bb745a/setup/script/transpose_user.py create mode 100644 core-master@6ef85bb745a/setup/script/transpose_user_ammo.py create mode 100644 core-master@6ef85bb745a/setup/script/transpose_user_currency.py create mode 100644 core-master@6ef85bb745a/setup/script/transpose_user_rank.py create mode 100644 core-master@6ef85bb745a/setup/script/transpose_user_uuid.py create mode 100644 core-master@6ef85bb745a/setup/script/transpose_vice_cheatcode.py create mode 100644 core-master@6ef85bb745a/setup/script/vote_sync.py create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/Core.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/Lang.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/Settings.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/Utils.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/achivements/Achievement.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/achivements/AchievementCommand.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/alert/Alert.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/alert/AlertCreateStage.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/alert/AlertEntry.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/alert/AlertManager.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/alert/command/AlertCommand.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/alert/component/AlertCreateHandler.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/alert/type/AlertShowType.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/alert/type/AlertType.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/alert/ui/AlertCreationMenu.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/alert/ui/AlertTimeEditor.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/alert/ui/AlertsMenu.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/animation/Animation.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/animation/CoreAnimation.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/animation/event/AnimationFinishEvent.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/animation/step/AStep.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/animation/step/AStepEnd.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/animation/step/AStepStart.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/announcer/Announcement.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/announcer/Announcer.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/announcer/AnnouncerCommand.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/Anticheat.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/Severity.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/check/CheatType.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/check/Check.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/check/CheckManager.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/check/movement/SpeedCheck.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/check/movement/VelocityCheck.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/component/AnticheatComponent.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/data/ClientData.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/data/ClientHandler.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/event/CombatCheatEvent.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/event/MovementCheatEvent.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/inspect/InspectCommand.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/report/ReportCommand.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/report/ReportDAO.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/report/ReportManager.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/report/data/PlayerReportData.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/report/data/ReportData.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/trigger/MovementTrigger.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/trigger/Trigger.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/util/DummyIdentity.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/util/DummyPacketGen.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/util/DummyPlayer.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/boards/Board.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/boards/BoardScore.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/boards/BoardType.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/boards/BoardValue.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/Casino.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/CoreCasino.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/coins/ChipAmount.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/coins/CoinManager.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/coins/VendorMenu.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/game/CasinoGame.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/game/CasinoGameAttribute.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/game/CasinoGameState.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/game/CasinoRunnable.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/game/CoreCasinoGame.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/game/bet/CasinoBet.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/game/bet/CasinoBetType.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/game/bet/SlotMachineBet.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/game/component/CasinoGameComponent.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/game/event/CasinoGameEndEvent.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/game/event/CasinoGameStartEvent.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/game/event/CasinoGameStateChangeEvent.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/slot/CasinoSpinData.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/slot/SlotItem.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/slot/SlotMachine.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/slot/SlotReward.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/slot/SlotWheelType.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/slot/SpinState.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/slot/menu/SlotMachineBetMenu.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/slot/menu/SlotRewardMenu.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/BucksCommand.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/BungeeCommand.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/ChatFilterCommand.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/ClearChatCommand.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/ConfigCommand.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/CooldownCommand.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/CoreCommand.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/CouponCreditsCommand.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/CrateCommand.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/CrowbarCommand.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/DiscordCommand.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/EditModeCommand.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/EventTagCommand.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/ExampleCommand.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/FacebookCommand.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/ForumRankCommand.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/GlobalMuteCommand.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/IgnoreCommand.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/InfoCommand.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/ListCommand.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/MaxPlayersCommand.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/MessageCommand.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/OpenMenuCommand.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/PlaytimeCommand.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/PrefsCommand.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/RankCommand.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/RankedCommand.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/ReplyCommand.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/RewardCommand.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/RewardsCommand.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/RulesCommand.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/SaveCommand.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/ServerCommand.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/SocialSpyCommand.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/SpankCommand.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/StoreCommand.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/TokensCommand.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/TradeCommand.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/TrialCommand.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/TwitterCommand.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/VotestreakCommand.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/WhitelistCommand.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/currency/Currency.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/currency/Purse.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/currency/component/CurrencySource.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/currency/component/Source.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/currency/trans/CurrencyTransaction.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/data/CompactLoc.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/BaseDatabase.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/DatabaseHandler.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/component/Database.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/component/DatabaseCredentials.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/dao/AlertsDAO.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/dao/CurrencyDAO.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/dao/ExampleDAO.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/dao/LogDAO.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/dao/MutexDAO.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/dao/OldVoteDAO.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/dao/ServerInfoDAO.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/dao/ServerStatsDAO.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/dao/VoteDAO.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/mutex/Lockable.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/mutex/Mutexable.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/mutex/common/LoadUserTask.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/mutex/common/SaveUserTask.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/mutex/event/AsyncMutexLoadEvent.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/mutex/event/AsyncMutexSaveEvent.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/mutex/event/MutexLoadCompleteEvent.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/mutex/event/MutexSaveCompleteEvent.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/mutex/task/LoadMutexTask.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/mutex/task/SaveMutexTask.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/editmode/BlockChange.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/editmode/BreakBlock.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/editmode/Craft.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/editmode/Damage.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/editmode/HangingBreak.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/editmode/Interact.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/editmode/InventoryClick.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/editmode/Liquid.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/editmode/PlaceBlock.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/editmode/WorldConfig.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/editmode/WorldManager.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/enjin/EnjinCache.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/enjin/EnjinCore.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/enjin/HTTPInterface.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/enjin/data/EnjinResponse.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/enjin/data/EnjinResult.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/event/BaseEvent.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/event/Event.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/event/EventCommand.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/event/EventDAO.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/event/EventData.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/event/EventManager.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/event/EventState.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/event/EventType.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/events/ChatEvent.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/events/CoreEvent.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/events/DisplayNameUpdateEvent.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/events/GetPermsEvent.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/events/ItemStackEvent.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/events/MoneyEvent.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/events/NametagUpdateEvent.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/events/PlayerFActionEvent.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/events/PlayerSwitchWorldEvent.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/events/RequestEvent.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/events/RewardEvent.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/events/ServerSaveEvent.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/events/TutorialEvent.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/events/UpdateEvent.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/giftcard/Balance.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/giftcard/Data.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/giftcard/Giftcard.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/giftcard/GiftcardAPI.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/gui/ConfirmationMenu.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/handlers/Handler.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/handlers/chat/ChatAdHandler.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/handlers/chat/ChatCooldownHandler.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/handlers/chat/ChatManager.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/handlers/chat/ChatRepeatHandler.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/handlers/chat/ChatSettings.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/inventory/CoreMenu.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/inventory/CoreMenuFlag.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/inventory/CoreMenuHandler.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/inventory/IMenuButtonHandler.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/inventory/button/ClickableItem.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/inventory/button/IMenuClickAction.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/inventory/button/MenuItem.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/inventory/example/ExampleUI.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/inventory/types/PaginationMenu.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/leaderboards/LeaderBoard.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/leaderboards/LeaderBoardManager.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/Chat.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/ChunkLoad.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/CommandListener.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/Damage.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/HopperComponent.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/HungerChange.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/InventoryClick.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/Join.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/Leave.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/Login.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/Move.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/PetListener.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/PlaywireRecieve.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/Save.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/SignChange.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/SwapHandItems.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/Teleport.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/UpdateListener.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/UserStateTransactionListener.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/WeatherChange.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/menus/Menu.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/menus/MenuClickEvent.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/menus/MenuCloseEvent.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/menus/MenuListener.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/menus/MenuManager.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/menus/MenuOpenEvent.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/nametags/Nametag.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/nametags/NametagCommand.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/nametags/NametagManager.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/neural/NeuralNetTools.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/neural/NeuralNetwork.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/neural/NeuralTrainSet.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/neural/mnist/Mnist.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/neural/mnist/MnistDbFile.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/neural/mnist/MnistImageFile.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/neural/mnist/MnistImageLoader.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/neural/mnist/MnistLabelFile.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/neural/mnist/MnistPanel.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/neural/parser/NeuralAttribute.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/neural/parser/NeuralNode.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/neural/parser/NeuralParser.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/neural/parser/NeuralParserTools.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/npc/CoreNPC.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/npc/NPCDAO.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/npc/NPCManager.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/npc/PathfindOption.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/npc/example/ExampleNPC.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/npc/interfaces/ClickableNPC.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/npc/interfaces/CollideableNPC.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/npc/interfaces/CombustableNPC.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/npc/interfaces/DamageableNPC.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/perms/PermsManager.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/perms/RankPerms.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/perms/UserPerms.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/playwire/PlaywireManager.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/playwire/SocketMessage.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/playwire/SocketMessageType.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/playwire/events/AsyncPlaywireRecieveEvent.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/playwire/listeners/WSListener.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/redis/RedisFactory.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/redis/RedisListener.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/redis/RedisManager.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/redis/data/DataType.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/redis/listener/QueueListener.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/redis/listener/UserStateTransactionCheckListener.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/redis/listener/VoteNotificationListener.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/resourcepack/RSPack_1_12.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/resourcepack/ResourcePack.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/resourcepack/ResourcePackEvent.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/resourcepack/ResourcePackManager.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/resourcepack/ResourcePackReceiving.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/sentry/CustomExceptionHandler.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/servers/PingHandler.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/servers/Server.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/servers/ServerManager.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/servers/ServerPingListener.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/servers/ServerType.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/servers/menu/GTMTranzitMenu.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/servers/menu/TranzitMenu.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/stat/StatDAO.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/stat/StatFactory.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/task/ExpirableTask.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/task/RepeatingTask.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/task/Task.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/task/common/AntiAFK.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/task/common/BossBarTask.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/trading/TradeManager.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/trading/TradeMenu.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/trading/TradingSlotType.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/trading/TradingStatus.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/transaction/Transaction.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/transaction/TransactionEvent.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/transaction/state/StateTransaction.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/transaction/state/StateTransactionEvent.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/transaction/state/user/UserStateTransaction.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/transaction/state/user/UserStateTransactionDAO.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/transaction/state/user/UserStateTransactionEvent.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/tutorials/Help.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/tutorials/NextCommand.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/tutorials/Slide.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/tutorials/Tutorial.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/tutorials/TutorialCommand.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/tutorials/TutorialManager.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/users/CooldownDAO.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/users/CooldownPayload.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/users/Pref.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/users/User.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/users/UserDAO.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/users/UserManager.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/users/UserRank.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/users/eventtag/EventTag.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/users/eventtag/EventTagDAO.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/users/eventtag/PreTagEquipEvent.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/users/eventtag/TagVisibility.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/users/targets/TrackedEntity.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/users/targets/TrackedLocation.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/users/targets/TrackedTarget.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/AngleUtil.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/Attribute.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/AttributeModifier.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/C.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/Callback.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/Component.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/CoreLocation.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/DefaultFontInfo.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/EntityUtil.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/HTTPUtil.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/IconConverter.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/Identifiable.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/ImageRenderer.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/ItemAttributes.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/ItemStackManager.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/MathUtil.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/NMSUtil.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/NMSVersion.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/NumeralUtil.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/PlayerAndIP.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/Playtime.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/PluginAssociated.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/ReflectionUtils.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/ServerUtil.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/Similarity.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/Slot.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/SoundEffect.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/State.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/StringUtil.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/TimeFormatter.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/Title.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/TopValue.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/TrigUtil.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/UUIDUtil.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/Utils.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/WeightedRandomCollection.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/debug/Log.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/factory/CloneableFactory.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/factory/Factory.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/factory/FireworkFactory.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/factory/ItemFactory.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/json/JSONBuilder.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/json/JSONParser.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/json/JSONUtil.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/nbt/CoreNbt.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/nbt/NBTUtil1_12_2.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/particles/ParticleEffects.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/time/TimeUtil.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/title/NMSTitle.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/Reward.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/RewardPack.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/ShopItem.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/VoteCommand.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/VoteManager.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/VoteRecord.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/VoteReward.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/VoteSite.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/Voter.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/crates/Crate.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/crates/CrateManager.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/crates/CrateReward.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/crates/CrateStars.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/crates/events/CrateNearbyPlayerEvent.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/crates/events/CrateOpenEvent.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/crates/listeners/CrateNearbyListener.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/crates/listeners/CrateOpenListener.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/events/PlayerVoteEvent.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/events/RewardCheckEvent.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/events/RewardEvent.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/events/RewardGiveEvent.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/events/RewardInfoEvent.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/whitelist/WhitelistManager.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/whitelist/WhitelistedUser.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/Wrapper.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/entity/AbstractEntity.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/entity/CoreEntity.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/entity/pig/CorePig.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/entity/pig/CorePig_1_12.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/entity/pig/WrappedPig.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/AbstractPacket.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/ChunkPacketProcessor.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperHandshakingClientSetProtocol.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperLoginClientEncryptionBegin.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperLoginClientStart.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientAbilities.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientAdvancements.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientArmAnimation.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientAutoRecipe.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientBlockDig.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientBlockPlace.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientBoatMove.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientChat.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientClientCommand.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientCloseWindow.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientCustomPayload.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientEnchantItem.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientEntityAction.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientFlying.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientHeldItemSlot.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientKeepAlive.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientLook.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientPosition.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientPositionLook.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientRecipeDisplayed.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientResourcePackStatus.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientSetCreativeSlot.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientSettings.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientSpectate.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientSteerVehicle.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientTabComplete.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientTeleportAccept.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientTransaction.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientUpdateSign.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientUseEntity.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientUseItem.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientVehicleMove.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientWindowClick.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperStatusClientPing.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperStatusClientStart.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperLoginServerDisconnect.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperLoginServerEncryptionBegin.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperLoginServerSetCompression.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperLoginServerSuccess.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerAbilities.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerAdvancements.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerAnimation.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerAttachEntity.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerAutoRecipe.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerBed.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerBlockAction.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerBlockBreakAnimation.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerBlockChange.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerBoss.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerCamera.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerChat.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerCloseWindow.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerCollect.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerCombatEvent.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerCustomPayload.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerCustomSoundEffect.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerEntity.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerEntityDestroy.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerEntityEffect.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerEntityEquipment.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerEntityHeadRotation.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerEntityLook.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerEntityMetadata.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerEntityStatus.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerEntityTeleport.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerEntityVelocity.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerExperience.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerExplosion.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerGameStateChange.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerHeldItemSlot.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerKeepAlive.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerKickDisconnect.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerLogin.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerMap.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerMapChunk.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerMount.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerMultiBlockChange.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerNamedEntitySpawn.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerNamedSoundEffect.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerOpenSignEditor.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerOpenWindow.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerPlayerInfo.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerPlayerListHeaderFooter.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerPosition.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerRecipes.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerRelEntityMove.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerRelEntityMoveLook.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerRemoveEntityEffect.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerResourcePackSend.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerRespawn.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerScoreboardDisplayObjective.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerScoreboardObjective.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerScoreboardScore.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerScoreboardTeam.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerSelectAdvancementTab.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerServerDifficulty.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerSetCooldown.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerSetSlot.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerSpawnEntity.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerSpawnEntityExperienceOrb.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerSpawnEntityLiving.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerSpawnEntityPainting.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerSpawnEntityWeather.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerSpawnPosition.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerStatistic.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerTabComplete.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerTileEntityData.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerTitle.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerTransaction.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerUnloadChunk.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerUpdateAttributes.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerUpdateHealth.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerUpdateTime.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerVehicleMove.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerWindowData.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerWindowItems.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerWorldBorder.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerWorldEvent.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerWorldParticles.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperStatusServerPong.java create mode 100644 core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperStatusServerServerInfo.java create mode 100644 core-master@6ef85bb745a/src/main/resources/core.yml create mode 100644 core-master@6ef85bb745a/src/main/resources/help.yml create mode 100644 core-master@6ef85bb745a/src/main/resources/joinSigns.yml create mode 100644 core-master@6ef85bb745a/src/main/resources/perms.yml create mode 100644 core-master@6ef85bb745a/src/main/resources/plugin.yml create mode 100644 core-master@6ef85bb745a/src/main/resources/redis.yml create mode 100644 core-master@6ef85bb745a/src/main/resources/servers.yml create mode 100644 core-master@6ef85bb745a/src/main/resources/voting.yml create mode 100644 creative-master@2baad30b473/.gitignore create mode 100644 creative-master@2baad30b473/README.md create mode 100644 creative-master@2baad30b473/pom.xml create mode 100644 creative-master@2baad30b473/src/main/java/net/grandtheftmc/Creative/Creative.java create mode 100644 creative-master@2baad30b473/src/main/java/net/grandtheftmc/Creative/CreativeSettings.java create mode 100644 creative-master@2baad30b473/src/main/java/net/grandtheftmc/Creative/CreativeUtils.java create mode 100644 creative-master@2baad30b473/src/main/java/net/grandtheftmc/Creative/commands/CreativeCommand.java create mode 100644 creative-master@2baad30b473/src/main/java/net/grandtheftmc/Creative/commands/CreativeRankCommand.java create mode 100644 creative-master@2baad30b473/src/main/java/net/grandtheftmc/Creative/commands/WorldCommand.java create mode 100644 creative-master@2baad30b473/src/main/java/net/grandtheftmc/Creative/listeners/BlockPlace.java create mode 100644 creative-master@2baad30b473/src/main/java/net/grandtheftmc/Creative/listeners/Join.java create mode 100644 creative-master@2baad30b473/src/main/java/net/grandtheftmc/Creative/listeners/Leave.java create mode 100644 creative-master@2baad30b473/src/main/java/net/grandtheftmc/Creative/listeners/Login.java create mode 100644 creative-master@2baad30b473/src/main/java/net/grandtheftmc/Creative/listeners/PotionUse.java create mode 100644 creative-master@2baad30b473/src/main/java/net/grandtheftmc/Creative/listeners/SwitchWorld.java create mode 100644 creative-master@2baad30b473/src/main/java/net/grandtheftmc/Creative/listeners/UpdateListener.java create mode 100644 creative-master@2baad30b473/src/main/java/net/grandtheftmc/Creative/users/CreativeRank.java create mode 100644 creative-master@2baad30b473/src/main/java/net/grandtheftmc/Creative/users/CreativeUser.java create mode 100644 creative-master@2baad30b473/src/main/java/net/grandtheftmc/Creative/users/CreativeUserManager.java create mode 100644 creative-master@2baad30b473/src/main/resources/creative.yml create mode 100644 creative-master@2baad30b473/src/main/resources/plugin.yml create mode 100644 fanciful-master@6fb8a853dd2/.gitignore create mode 100644 fanciful-master@6fb8a853dd2/.travis.yml create mode 100644 fanciful-master@6fb8a853dd2/LICENSE create mode 100644 fanciful-master@6fb8a853dd2/README.md create mode 100644 fanciful-master@6fb8a853dd2/pom.xml create mode 100644 fanciful-master@6fb8a853dd2/src/example/java/mkremins/fanciful/Example.java create mode 100644 fanciful-master@6fb8a853dd2/src/main/java/mkremins/fanciful/FancyMessage.java create mode 100644 fanciful-master@6fb8a853dd2/src/main/java/mkremins/fanciful/JsonRepresentedObject.java create mode 100644 fanciful-master@6fb8a853dd2/src/main/java/mkremins/fanciful/JsonString.java create mode 100644 fanciful-master@6fb8a853dd2/src/main/java/mkremins/fanciful/MessagePart.java create mode 100644 fanciful-master@6fb8a853dd2/src/main/java/mkremins/fanciful/TextualComponent.java create mode 100644 fanciful-master@6fb8a853dd2/src/main/java/net/amoebaman/util/ArrayWrapper.java create mode 100644 gtm-master@bf01c650f8f/.gitignore create mode 100644 gtm-master@bf01c650f8f/README.md create mode 100644 gtm-master@bf01c650f8f/pom.xml create mode 100644 gtm-master@bf01c650f8f/setup/database_schema.txt create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/GTM.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/GTMSettings.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/GTMUtils.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/armor/ArmorShopManager.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/armor/ShopStatue.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/bounties/Bounty.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/bounties/BountyManager.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/bounties/BountyPlacer.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/AmmoCommand.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/AntiAuraCommand.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/BackpackCommand.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/BackupCommand.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/BribeCommand.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/CheatCodeCommand.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/ChestCheckCommand.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/ChristmasCommand.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/ChunkUnloadCommand.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/ClearCommand.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/CoreNPCCommand.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/DrugCheckCommand.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/DrugDealerCommand.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/FeedCommand.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/FixCommand.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/GTMAdminCommand.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/GTMRankCommand.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/GTMRanksCommand.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/HalloweenCommand.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/KillCommand.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/LotteryCommand.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/MoneyCommand.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/NearCommand.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/PayCommand.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/PermitsCommand.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/PickerCommand.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/RankupCommand.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/ResetCommand.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/ResourcePackCommand.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/SellCommand.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/SetRarityCommand.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/SettingsCommand.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/SkinCommand.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/SkinsCommand.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/SpectatorCommand.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/SpeedCommand.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/StackCommand.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/StatsCommand.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/TeleportCommand.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/TokenShopCommand.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/TopKillersCommand.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/TransferCommand.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/VehicleCommand.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/database/dao/AmmoDAO.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/database/dao/MutexDAO.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/database/mutex/common/LoadGTMUserTask.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/database/mutex/common/SaveGTMUserTask.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/Drug.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/DrugCommand.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/DrugDealer.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/DrugEffect.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/DrugHelper.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/DrugManager.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/DrugParam.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/DrugService.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/DrugUtil.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/EffectManager.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/LockedBlocks.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/categories/DrugCategory.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/categories/IDrugCategory.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/categories/examples/AAlcohol.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/categories/examples/AnabolicSteroids.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/categories/examples/Cannabinoids.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/categories/examples/Depressants.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/categories/examples/Hallucinogens.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/categories/examples/Inhalants.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/categories/examples/Opioids.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/categories/examples/PrescriptionDrugs.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/categories/examples/Stimulants.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/events/DrugUseEvent.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/events/listener/DrugListener.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/events/listener/DrugPlacementListener.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/example/Alcohol.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/example/Cocaine.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/example/Heroin.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/example/Joint.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/example/MDMA.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/example/Meth.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/example/RoofiedChocolate.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/example/Steroids.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/example/Weed.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/example/lsd/LSD.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/internal/manager/Manager.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/internal/service/Helper.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/internal/service/Service.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/item/DrugDealerItem.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/item/DrugItem.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/event/EventManager.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/event/christmas/ChristmasEvent.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/event/christmas/ChristmasListener.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/event/christmas/SpawnSantaDropTask.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/event/easter/EasterDAO.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/event/easter/EasterEgg.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/event/easter/EasterEggCommand.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/event/easter/EasterEvent.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/event/easter/EasterFoundEggEvent.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/event/easter/EasterPacketListener.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/event/easter/EasterPlayerData.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/event/halloween/HalloweenDAO.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/event/halloween/HalloweenEvent.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/event/halloween/TrickOrTreatTask.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/events/TPEvent.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/events/WantedLevelChangeEvent.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/gang/GTMGang.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/gang/Gang.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/gang/GangChatCommand.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/gang/GangDAO.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/gang/GangManager.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/gang/command/GangAdminCommand.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/gang/command/GangCommand.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/gang/command/GangDisableCommand.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/gang/member/GTMGangMember.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/gang/member/GangMember.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/gang/member/GangRole.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/gang/relation/GTMGangRelation.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/gang/relation/GangRelation.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/gang/relation/RelationType.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/gang/schema.md create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/gangs/Gang.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/gangs/GangManager.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/gangs/GangMember.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/holidays/Holiday.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/holidays/HolidayManager.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/holidays/easter/Easter.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/holidays/easter/EasterListener.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/holidays/easter/EasterTask.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/holidays/halloween/PlayerScare.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/holidays/halloween/dao/ServerCoupon.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/holidays/halloween/dao/ServerCouponDAO.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/holidays/independenceday/IndependenceDay.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/holidays/independenceday/IndependenceDayListener.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/holidays/independenceday/IndependenceDayTask.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/items/AmmoType.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/items/ArmorType.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/items/ArmorUpgrade.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/items/BackpackManager.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/items/GameItem.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/items/GameItemCommand.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/items/Head.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/items/ItemManager.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/items/Kit.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/items/KitCommand.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/items/KitItem.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/items/ShopCommand.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/items/ShopManager.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/items/events/ArmorEquipEvent.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/items/events/EquipArmorType.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/ArmorEquip.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/BreakBlock.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/ChangeWorld.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/Chat.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/CommandPreProcess.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/Craft.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/Damage.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/Death.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/Dispense.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/Drop.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/DrugBlockRemovalListener.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/FireListener.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/FoodChange.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/GamemodeChange.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/Interact.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/InventoryClick.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/InventoryOpen.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/ItemBreak.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/Join.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/Leave.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/Login.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/MenuListener.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/MobSpawn.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/Move.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/MovementCheat.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/PetListener.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/Pickup.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/PortalEnter.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/PotionSplash.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/PrepareItemCraft.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/SwapHandItems.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/Target.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/UpdateListener.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/VehicleUse.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/VoteReward.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/WeaponShoot.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/WeaponUse.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/lootcrates/CrateManager.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/lootcrates/LootCrate.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/lootcrates/LootCrateCommand.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/lootcrates/LootItem.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/tasks/GlassesTask.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/tasks/Lottery.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/tasks/LotteryPlayer.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/tasks/PlayerTask.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/tasks/TaskManager.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/trashcan/TrashCanManager.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/ChatAction.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/CheatCode.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/CheatCodeState.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/CompassTarget.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/GTMRank.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/GTMTag.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/GTMUser.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/GTMUserDAO.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/GTMUserManager.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/JobMode.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/LockedWeapon.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/PersonalVehicle.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/TaxiTarget.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/npcs/ArmorNPC.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/npcs/BankTellerNPC.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/npcs/CarNPC.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/npcs/CasinoNPC.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/npcs/CriminalNPC.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/npcs/FoodNPC.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/npcs/HeadSellerNPC.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/npcs/HitmanNPC.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/npcs/MechanicNPC.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/npcs/PoliceNPC.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/npcs/RewardsNPC.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/npcs/ShopNPC.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/npcs/SkinsNPC.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/npcs/TaxiNPC.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/utils/ItemStackUtil.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/utils/ParticleColor.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/utils/RandomUtil.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/utils/ReflectionUtil.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/utils/Stats.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/utils/WeightedRandomCollection.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/warps/SpawnCommand.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/warps/TpaCommand.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/warps/Warp.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/warps/WarpCache.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/warps/WarpCommand.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/warps/WarpManager.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/wastedbarrels/BarrelListener.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/wastedbarrels/BarrelManager.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/wastedbarrels/WastedBarrel.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/README.MD create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/WeaponRegistry.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/WeaponVisualStatue.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/airstrike/Airstrike.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/airstrike/Nuke.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/explosive/Grenade.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/explosive/MolotovCocktail.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/explosive/ProximityMine.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/explosive/StickyBomb.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/explosive/TearGas.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/melee/BaseballBat.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/melee/Chainsaw.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/melee/Dildo.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/melee/Katana.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/melee/Knife.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/melee/NightStick.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/melee/Rake.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/assault/AdvancedRifle.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/assault/AssaultRifle.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/assault/BullpupRifle.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/assault/CarbineRifle.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/assault/SpecialCarbine.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/launcher/GrenadeLauncher.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/launcher/HomingLauncher.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/launcher/NetLauncher.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/launcher/RPG.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/lmg/CombatMG.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/lmg/MG.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/pistol/CombatPistol.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/pistol/HeavyPistol.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/pistol/MarksmanPistol.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/pistol/Pistol.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/pistol/StunGun.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/shotgun/AssaultShotgun.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/shotgun/HeavyShotgun.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/shotgun/Musket.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/shotgun/PumpShotgun.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/shotgun/SawedoffShotgun.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/smg/AssaultSMG.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/smg/CombatPDW.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/smg/GusenbergSweeper.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/smg/MicroSMG.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/smg/SMG.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/sniper/HeavySniper.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/sniper/SniperRifle.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/special/Clausinator.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/special/Flamethrower.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/special/GoldMinigun.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/special/Handcuffs.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/special/Minigun.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/skins/WeaponSkinDAO.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/skins/WeaponSkinManager.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/skins/menu/MainMenu.java create mode 100644 gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/skins/menu/SkinsMenu.java create mode 100644 gtm-master@bf01c650f8f/src/main/resources/barrels.yml create mode 100644 gtm-master@bf01c650f8f/src/main/resources/bounties.yml create mode 100644 gtm-master@bf01c650f8f/src/main/resources/christmasdrops.yml create mode 100644 gtm-master@bf01c650f8f/src/main/resources/drugblocks.yml create mode 100644 gtm-master@bf01c650f8f/src/main/resources/drugdealer.yml create mode 100644 gtm-master@bf01c650f8f/src/main/resources/gtm.yml create mode 100644 gtm-master@bf01c650f8f/src/main/resources/items.yml create mode 100644 gtm-master@bf01c650f8f/src/main/resources/kits.yml create mode 100644 gtm-master@bf01c650f8f/src/main/resources/loot.yml create mode 100644 gtm-master@bf01c650f8f/src/main/resources/lootcrates.yml create mode 100644 gtm-master@bf01c650f8f/src/main/resources/plugin.yml create mode 100644 gtm-master@bf01c650f8f/src/main/resources/rules.yml create mode 100644 gtm-master@bf01c650f8f/src/main/resources/salemenus.yml create mode 100644 gtm-master@bf01c650f8f/src/main/resources/warps.yml create mode 100644 houses-master@c2d95d8e6a6/.gitignore create mode 100644 houses-master@c2d95d8e6a6/README.md create mode 100644 houses-master@c2d95d8e6a6/pom.xml create mode 100644 houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/HouseUtils.java create mode 100644 houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/Houses.java create mode 100644 houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/HousesSettings.java create mode 100644 houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/JSONHelper.java create mode 100644 houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/KeyVal.java create mode 100644 houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/commands/HouseChestCommand.java create mode 100644 houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/commands/HouseDisableCommand.java create mode 100644 houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/commands/HouseDoorCommand.java create mode 100644 houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/commands/HouseSignCommand.java create mode 100644 houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/commands/HouseTrashcanCommand.java create mode 100644 houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/commands/HousesCommand.java create mode 100644 houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/dao/HouseDAO.java create mode 100644 houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/dao/PremiumHouseDAO.java create mode 100644 houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/houses/Blocks.java create mode 100644 houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/houses/EditableBlock.java create mode 100644 houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/houses/House.java create mode 100644 houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/houses/HouseChest.java create mode 100644 houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/houses/HouseDoor.java create mode 100644 houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/houses/HouseSign.java create mode 100644 houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/houses/HousesManager.java create mode 100644 houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/houses/PremiumHouse.java create mode 100644 houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/houses/PremiumHouseChest.java create mode 100644 houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/houses/PremiumHouseDoor.java create mode 100644 houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/houses/PremiumHouseGuest.java create mode 100644 houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/houses/PremiumHouseTrashcan.java create mode 100644 houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/listeners/BreakBlock.java create mode 100644 houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/listeners/Chat.java create mode 100644 houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/listeners/Damage.java create mode 100644 houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/listeners/Death.java create mode 100644 houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/listeners/Interact.java create mode 100644 houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/listeners/InventoryClose.java create mode 100644 houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/listeners/InventoryInteract.java create mode 100644 houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/listeners/Join.java create mode 100644 houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/listeners/Leave.java create mode 100644 houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/listeners/Login.java create mode 100644 houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/listeners/MenuListener.java create mode 100644 houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/listeners/PetListener.java create mode 100644 houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/listeners/Teleport.java create mode 100644 houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/listeners/WeaponShoot.java create mode 100644 houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/users/HouseUser.java create mode 100644 houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/users/HouseUserManager.java create mode 100644 houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/users/UserHouse.java create mode 100644 houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/users/UserHouseChest.java create mode 100644 houses-master@c2d95d8e6a6/src/main/resources/houses.yml create mode 100644 houses-master@c2d95d8e6a6/src/main/resources/plugin.yml create mode 100644 houses-master@c2d95d8e6a6/src/main/resources/premiumHouses.yml create mode 100644 hub-master@949a7e78421/.gitignore create mode 100644 hub-master@949a7e78421/README.md create mode 100644 hub-master@949a7e78421/pom.xml create mode 100644 hub-master@949a7e78421/src/main/java/net/grandtheftmc/hub/Hub.java create mode 100644 hub-master@949a7e78421/src/main/java/net/grandtheftmc/hub/HubUtils.java create mode 100644 hub-master@949a7e78421/src/main/java/net/grandtheftmc/hub/Testing.java create mode 100644 hub-master@949a7e78421/src/main/java/net/grandtheftmc/hub/commands/SpawnCommand.java create mode 100644 hub-master@949a7e78421/src/main/java/net/grandtheftmc/hub/listeners/AlertsComponent.java create mode 100644 hub-master@949a7e78421/src/main/java/net/grandtheftmc/hub/listeners/BlockPlace.java create mode 100644 hub-master@949a7e78421/src/main/java/net/grandtheftmc/hub/listeners/Chat.java create mode 100644 hub-master@949a7e78421/src/main/java/net/grandtheftmc/hub/listeners/Damage.java create mode 100644 hub-master@949a7e78421/src/main/java/net/grandtheftmc/hub/listeners/Death.java create mode 100644 hub-master@949a7e78421/src/main/java/net/grandtheftmc/hub/listeners/Drop.java create mode 100644 hub-master@949a7e78421/src/main/java/net/grandtheftmc/hub/listeners/Interact.java create mode 100644 hub-master@949a7e78421/src/main/java/net/grandtheftmc/hub/listeners/Join.java create mode 100644 hub-master@949a7e78421/src/main/java/net/grandtheftmc/hub/listeners/Move.java create mode 100644 hub-master@949a7e78421/src/main/java/net/grandtheftmc/hub/listeners/PortalComponent.java create mode 100644 hub-master@949a7e78421/src/main/java/net/grandtheftmc/hub/listeners/PortalEnter.java create mode 100644 hub-master@949a7e78421/src/main/java/net/grandtheftmc/hub/listeners/Update.java create mode 100644 hub-master@949a7e78421/src/main/java/net/grandtheftmc/hub/patch/InventoryFillPatch.java create mode 100644 hub-master@949a7e78421/src/main/resources/hub.yml create mode 100644 hub-master@949a7e78421/src/main/resources/plugin.yml create mode 100644 vice-master@f8937e1dbf1/.gitignore create mode 100644 vice-master@f8937e1dbf1/README.md create mode 100644 vice-master@f8937e1dbf1/loot_tables/chests/abandoned_mineshaft.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/chests/desert_pyramid.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/chests/end_city_treasure.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/chests/igloo_chest.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/chests/jungle_temple.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/chests/jungle_temple_dispenser.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/chests/nether_bridge.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/chests/simple_dungeon.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/chests/spawn_bonus_chest.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/chests/stronghold_corridor.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/chests/stronghold_crossing.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/chests/stronghold_library.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/chests/village_blacksmith.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/chests/woodland_mansion.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/empty.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/entities/bat.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/entities/blaze.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/entities/cave_spider.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/entities/chicken.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/entities/cow.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/entities/creeper.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/entities/donkey.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/entities/elder_guardian.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/entities/ender_dragon.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/entities/enderman.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/entities/endermite.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/entities/evocation_illager.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/entities/ghast.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/entities/giant.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/entities/guardian.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/entities/horse.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/entities/husk.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/entities/iron_golem.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/entities/llama.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/entities/magma_cube.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/entities/mule.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/entities/mushroom_cow.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/entities/ocelot.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/entities/parrot.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/entities/pig.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/entities/polar_bear.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/entities/rabbit.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/entities/sheep.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/entities/sheep/black.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/entities/sheep/blue.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/entities/sheep/brown.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/entities/sheep/cyan.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/entities/sheep/gray.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/entities/sheep/green.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/entities/sheep/light_blue.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/entities/sheep/lime.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/entities/sheep/magenta.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/entities/sheep/orange.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/entities/sheep/pink.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/entities/sheep/purple.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/entities/sheep/red.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/entities/sheep/silver.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/entities/sheep/white.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/entities/sheep/yellow.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/entities/shulker.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/entities/silverfish.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/entities/skeleton.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/entities/skeleton_horse.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/entities/slime.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/entities/snowman.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/entities/spider.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/entities/squid.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/entities/stray.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/entities/vex.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/entities/villager.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/entities/vindication_illager.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/entities/witch.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/entities/wither_skeleton.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/entities/wolf.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/entities/zombie.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/entities/zombie_horse.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/entities/zombie_pigman.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/entities/zombie_villager.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/gameplay/fishing.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/gameplay/fishing/fish.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/gameplay/fishing/junk.json create mode 100644 vice-master@f8937e1dbf1/loot_tables/gameplay/fishing/treasure.json create mode 100644 vice-master@f8937e1dbf1/pom.xml create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/Vice.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/ViceSettings.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/ViceUtils.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/areas/AreaManager.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/areas/builder/AreaBuilder.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/areas/dao/AreaDAO.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/areas/dao/DiscoveryDAO.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/areas/events/AreaEnterEvent.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/areas/events/AreaLeaveEvent.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/areas/listeners/AreaBuilderListener.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/areas/listeners/AreaListener.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/areas/obj/Area.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/areas/obj/AreaUser.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/areas/tasks/AreaUpdater.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/combatlog/CombatLogManager.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/combatlog/CombatLogger.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/combatlog/task/DespawnTask.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/AmmoCommand.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/AntiAuraCommand.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/AreaCommand.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/BackpackCommand.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/BackupCommand.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/BaltopCommand.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/BondsCommand.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/BribeCommand.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/CheatCodeCommand.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/ChunkUnloadCommand.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/ClearCommand.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/CopCommand.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/CoreNPCCommand.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/DrugCheckCommand.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/FeedCommand.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/FixCommand.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/HomeCommand.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/KillCommand.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/LogoutCommand.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/LotteryCommand.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/MoneyCommand.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/NearCommand.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/PayCommand.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/PrestigeCommand.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/RTPCommand.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/RankupCommand.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/ResetCommand.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/ResetStatsCommand.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/ResourcePackCommand.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/SellCommand.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/SkinCommand.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/SkinsCommand.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/SpawnCommand.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/SpectatorCommand.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/SpeedCommand.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/StackCommand.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/StatsCommand.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/TeleportCommand.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/TokenShopCommand.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/TopKillersCommand.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/TpaCommand.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/VehicleCommand.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/ViceAdminCommand.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/ViceRankCommand.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/ViceRanksCommand.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/WarpCommand.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/ZoneCommand.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/dao/CheatCodeDAO.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/dao/MachineDAO.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/display/DisplayManager.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/display/cont/CartelListener.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/display/cont/PlayerStatsListener.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/dropship/DropShip.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/dropship/DropShipConfirmationMenu.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/dropship/DropShipHandler.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/dropship/DropShipManager.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/dropship/DropShipState.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/dropship/DropShipTask.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/dropship/DropShipTeleportCommand.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/dropship/event/DropShipCountdownEvent.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/dropship/event/DropShipStartEvent.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/BaseDrug.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/Drug.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/DrugManager.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/DrugType.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/attribute/DrugAttribute.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/attribute/DrugBrewable.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/attribute/DrugCraftable.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/attribute/DrugDrinkable.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/attribute/DrugGrowable.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/attribute/DrugMachine.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/attribute/DrugPlaceable.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/attribute/DrugPlantable.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/Acid.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/BaseDrugItem.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/Cocaine.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/ConcentratedMagicMushroom.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/Crack.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/DistilledVodka.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/DriedMagicMushroom.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/DrugItem.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/Hop.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/Joint.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/LSD.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/MagicMushroom.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/MarijuanaLeaf.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/MarijuanaSeed.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/PotBrownie.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/Vodka.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/WeedBuds.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/beer/BeerBottle.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/beer/CraftBeer.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/beer/HumulusLupulusFruit.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/beer/HumulusLupulusSeed.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/meth/puremeth/Methylamine.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/meth/puremeth/PureMeth.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/meth/whitemeth/EphredraSinica.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/meth/whitemeth/EphredraSinicaSeeds.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/meth/whitemeth/WhiteMeth.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/Drug.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/DrugCommand.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/DrugComponent.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/DrugEffect.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/DrugHelper.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/DrugManager.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/DrugParam.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/DrugService.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/DrugUtil.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/EffectManager.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/LockedBlocks.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/SeedDrop.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/SeedType.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/categories/DrugCategory.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/categories/IDrugCategory.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/categories/examples/AAlcohol.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/categories/examples/AnabolicSteroids.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/categories/examples/Cannabinoids.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/categories/examples/Depressants.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/categories/examples/Hallucinogens.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/categories/examples/Inhalants.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/categories/examples/Opioids.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/categories/examples/PrescriptionDrugs.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/categories/examples/Stimulants.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/events/DrugUseEvent.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/events/listener/DrugListener.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/events/listener/DrugPlacementListener.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/example/Alcohol.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/example/Cocaine.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/example/Heroin.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/example/Joint.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/example/LSD.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/example/MDMA.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/example/Meth.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/example/Steroids.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/example/Weed.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/internal/manager/Manager.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/internal/service/Helper.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/internal/service/Service.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/items/DrugItem.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/durability/DurabilityItems.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/durability/DurabilityListener.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/events/ArmorEquipEvent.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/events/EquipArmorType.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/events/TPEvent.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/holidays/Holiday.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/holidays/HolidayManager.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/holidays/easter/Easter.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/holidays/easter/EasterListener.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/holidays/easter/EasterTask.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/hologram/CoreHologram.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/hologram/CoreHologramNode.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/hologram/Hologram.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/hologram/HologramManager.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/hologram/HologramNode.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/hologram/TypeWriter.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/hologram/event/HologramReceiveEvent.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/hologram/exception/HologramDuplicateException.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/hologram/exception/HologramDuplicateNodeException.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/AmmoType.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/ArmorType.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/ArmorUpgrade.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/BackpackManager.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/GameItem.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/GameItemCommand.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/Head.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/ItemManager.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/Kit.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/KitCommand.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/KitItem.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/Schedule.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/ShopCommand.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/ShopManager.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/recipes/BottleCraftingRecipe.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/recipetypes/BrewingRecipeItem.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/recipetypes/CraftingRecipeItem.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/recipetypes/OtherRecipeItem.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/recipetypes/RecipeItem.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/recipetypes/RecipeType.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/recipetypes/ShapedRecipeItem.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/recipetypes/SlotContainer.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/ArmorEquip.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/BlockDispense.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/BlockPlace.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/BreakBlock.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/CartelsComponent.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/ChangeWorld.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/Chat.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/ChunkLoad.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/CommandPreProcess.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/CraftItem.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/Damage.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/Death.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/Dispense.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/Drop.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/Enchant.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/FireListener.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/FoodChange.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/GunTestingListener.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/Interact.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/InventoryClick.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/InventoryOpen.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/InventoryPickupItem.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/ItemBreak.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/ItemComponent.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/ItemSpawn.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/ItemStack.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/JetpackFuelUse.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/Join.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/Leave.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/Login.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/MenuListener.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/MobSpawn.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/Move.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/NametagComponent.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/PetListener.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/Pickup.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/PlayerEnterZone.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/PlayerLeaveZone.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/PortalEnter.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/RenameComponent.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/SmeltItem.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/SwapHandItems.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/Target.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/Teleport.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/UpdateListener.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/VehicleUse.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/VoteReward.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/WeaponShoot.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/WeaponUse.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/lootcrates/CrateManager.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/lootcrates/LootCrate.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/lootcrates/LootCrateCommand.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/lootcrates/LootItem.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/BaseMachine.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/MachineCommand.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/MachineComponent.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/MachineManager.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/MachineTask.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/MachineTesting.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/MachineUtil.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/data/MachineData.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/data/MachineDataType.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/event/MachineDurabilityEvent.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/event/MachineFuelEvent.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/event/MachineItemTransferEvent.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/event/MachinePlaceEvent.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/event/MachineRecipeCompleteEvent.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/misc/MachineProgressMultiplier.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/MachineRecipe.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/MachineRecipeManager.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/command/MachineRecipeCommand.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/menu/RecipeMenu.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/menu/RecipeMenuManager.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/menu/RecipeMenuPortal.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/menu/type/RecipeMenuAcid.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/menu/type/RecipeMenuBeer.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/menu/type/RecipeMenuCocaine.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/menu/type/RecipeMenuConcentratedMagicMushroom.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/menu/type/RecipeMenuCrack.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/menu/type/RecipeMenuCraftBeer.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/menu/type/RecipeMenuDistilledVodka.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/menu/type/RecipeMenuDriedMushroom.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/menu/type/RecipeMenuHumulusLapulusFruit.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/menu/type/RecipeMenuLSD.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/menu/type/RecipeMenuPureMeth.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/menu/type/RecipeMenuVodka.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/menu/type/RecipeMenuWeed.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/menu/type/RecipeMenuWhiteMeth.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/misc/MachineRecipeData.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/misc/RecipeInput.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/misc/RecipeOutput.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/type/RecipeAcid.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/type/RecipeBeer.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/type/RecipeCocaine.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/type/RecipeConcentratedMagicMushroom.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/type/RecipeCrack.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/type/RecipeCraftBeer.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/type/RecipeDistilledVodka.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/type/RecipeDriedMushroomBrown.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/type/RecipeDriedMushroomRed.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/type/RecipeHumulusLupulusFruit.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/type/RecipeLSD.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/type/RecipePureMeth.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/type/RecipeVodka.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/type/RecipeWeed.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/type/RecipeWhiteMeth.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/repair/MachineRepairMenu.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/type/MachineAdvancedMethProducer.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/type/MachineBasicMethProducer.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/type/MachineBeerDistillery.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/type/MachineCocaProcessor.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/type/MachineLargeDryingMachine.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/type/MachineMediumDryingChamber.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/type/MachinePulpCondenser.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/type/MachineSmallDryingChamber.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/type/MachineSugarBox.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/type/MachineVodkaDistillery.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/pickers/PickerCommand.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/pickers/PickerManager.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/redstone/PandaRedstoneWire.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/redstone/RedstoneManager.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/season/Season.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/season/SeasonDAO.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/season/SeasonData.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/season/SeasonListener.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/season/SeasonManager.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/tasks/GlassesTask.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/tasks/Lottery.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/tasks/LotteryPlayer.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/tasks/PlayerTask.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/tasks/TaskManager.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/AntiAfkTimer.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/CheatCode.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/CheatCodeState.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/CopRank.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/LockedWeapon.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/PersonalVehicle.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/Prestige.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/TaxiTarget.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/ViceRank.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/ViceUser.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/ViceUserDAO.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/ViceUserManager.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/npcs/MachineNPC.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/npcs/SkinsNPC.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/npcs/TaxiNPC.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/npcs/TrashCanManager.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/npcs/shopnpc/BlocksMenu.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/npcs/shopnpc/CategoryMenu.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/npcs/shopnpc/ShopNPC.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/storage/BooleanStorageType.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/storage/IntStorageType.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/storage/LongStorageType.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/CancellationDetector.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/DurabilityUtil.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/IconUtil.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/ItemStackUtil.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/LocationUtil.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/MapUtil.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/NBTUtil.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/ParticleColor.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/ReflectUtil.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/ReflectionUtil.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/Stats.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/StringUtils.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/TextHelper.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/TitleBuilder.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/WeightedRandomCollection.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/advancement/AdvancementUtil.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/advancement/Condition.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/advancement/FrameType.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/advancement/Trigger.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/recipe/ShapedRegister.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/recipe/ShapelessRegister.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/README.MD create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/WeaponRegistry.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/airstrike/Airstrike.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/airstrike/Nuke.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/explosive/Grenade.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/explosive/MolotovCocktail.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/explosive/ProximityMine.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/explosive/StickyBomb.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/explosive/TearGas.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/melee/BaseballBat.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/melee/Chainsaw.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/melee/Dildo.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/melee/Katana.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/melee/Knife.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/melee/NightStick.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/melee/Rake.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/assault/AdvancedRifle.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/assault/AssaultRifle.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/assault/BullpupRifle.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/assault/CarbineRifle.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/assault/SpecialCarbine.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/launcher/GrenadeLauncher.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/launcher/HomingLauncher.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/launcher/NetLauncher.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/launcher/RPG.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/lmg/CombatMG.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/lmg/MG.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/pistol/CombatPistol.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/pistol/HeavyPistol.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/pistol/MarksmanPistol.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/pistol/Pistol.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/pistol/StunGun.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/shotgun/AssaultShotgun.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/shotgun/HeavyShotgun.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/shotgun/Musket.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/shotgun/PumpShotgun.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/shotgun/SawedoffShotgun.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/smg/AssaultSMG.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/smg/CombatPDW.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/smg/GusenbergSweeper.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/smg/MicroSMG.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/smg/SMG.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/sniper/HeavySniper.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/sniper/SniperRifle.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/special/Clausinator.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/special/Flamethrower.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/special/GoldMinigun.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/special/Handcuffs.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/special/Minigun.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/skins/WeaponSkinDAO.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/skins/WeaponSkinManager.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/skins/menu/MainMenu.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/skins/menu/SkinsMenu.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/world/ViceSelection.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/world/WorldManager.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/world/ZoneFlag.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/world/events/PlayerEnterZoneEvent.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/world/events/PlayerLeaveZoneEvent.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/world/obsidianbreaker/BlockStatus.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/world/obsidianbreaker/DamageStorage.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/world/obsidianbreaker/ObsidianManager.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/world/obsidianbreaker/nms/NMS.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/world/obsidianbreaker/nms/Reflection.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/world/obsidianbreaker/nms/ReflectionUtils.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/world/obsidianbreaker/tasks/RegenTask.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/world/warps/Warp.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/world/warps/WarpCache.java create mode 100644 vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/world/warps/WarpManager.java create mode 100644 vice-master@f8937e1dbf1/src/main/resources/barrels.yml create mode 100644 vice-master@f8937e1dbf1/src/main/resources/bounties.yml create mode 100644 vice-master@f8937e1dbf1/src/main/resources/drugblocks.yml create mode 100644 vice-master@f8937e1dbf1/src/main/resources/drugdealer.yml create mode 100644 vice-master@f8937e1dbf1/src/main/resources/gtm.yml create mode 100644 vice-master@f8937e1dbf1/src/main/resources/homes.yml create mode 100644 vice-master@f8937e1dbf1/src/main/resources/items.yml create mode 100644 vice-master@f8937e1dbf1/src/main/resources/kits.yml create mode 100644 vice-master@f8937e1dbf1/src/main/resources/loot.yml create mode 100644 vice-master@f8937e1dbf1/src/main/resources/lootcrates.yml create mode 100644 vice-master@f8937e1dbf1/src/main/resources/playercache.yml create mode 100644 vice-master@f8937e1dbf1/src/main/resources/plugin.yml create mode 100644 vice-master@f8937e1dbf1/src/main/resources/rules.yml create mode 100644 vice-master@f8937e1dbf1/src/main/resources/salemenus.yml create mode 100644 vice-master@f8937e1dbf1/src/main/resources/upgradedcontainers.yml create mode 100644 vice-master@f8937e1dbf1/src/main/resources/warps.yml create mode 100644 vice-master@f8937e1dbf1/src/main/resources/zones.yml create mode 100644 vice-master@f8937e1dbf1/src/test/prices/TestPrices.java create mode 100644 wastedcops-master@4d070d71e37/.gitignore create mode 100644 wastedcops-master@4d070d71e37/README.MD create mode 100644 wastedcops-master@4d070d71e37/lib/Core.jar create mode 100644 wastedcops-master@4d070d71e37/lib/GTM.jar create mode 100644 wastedcops-master@4d070d71e37/lib/Houses.jar create mode 100644 wastedcops-master@4d070d71e37/lib/WastedGuns.jar create mode 100644 wastedcops-master@4d070d71e37/pom.xml create mode 100644 wastedcops-master@4d070d71e37/src/main/java/com/j0ach1mmall3/wastedcops/Main.java create mode 100644 wastedcops-master@4d070d71e37/src/main/java/com/j0ach1mmall3/wastedcops/api/Cop.java create mode 100644 wastedcops-master@4d070d71e37/src/main/java/com/j0ach1mmall3/wastedcops/api/CopProperties.java create mode 100644 wastedcops-master@4d070d71e37/src/main/java/com/j0ach1mmall3/wastedcops/api/events/CopDamagePlayerEvent.java create mode 100644 wastedcops-master@4d070d71e37/src/main/java/com/j0ach1mmall3/wastedcops/api/events/CopEvent.java create mode 100644 wastedcops-master@4d070d71e37/src/main/java/com/j0ach1mmall3/wastedcops/api/events/CopKillPlayerEvent.java create mode 100644 wastedcops-master@4d070d71e37/src/main/java/com/j0ach1mmall3/wastedcops/api/events/CopSpawnEvent.java create mode 100644 wastedcops-master@4d070d71e37/src/main/java/com/j0ach1mmall3/wastedcops/api/events/PlayerKillCopEvent.java create mode 100644 wastedcops-master@4d070d71e37/src/main/java/com/j0ach1mmall3/wastedcops/commands/WCReloadCommandHandler.java create mode 100644 wastedcops-master@4d070d71e37/src/main/java/com/j0ach1mmall3/wastedcops/config/Config.java create mode 100644 wastedcops-master@4d070d71e37/src/main/java/com/j0ach1mmall3/wastedcops/listeners/CopListener.java create mode 100644 wastedcops-master@4d070d71e37/src/main/java/com/j0ach1mmall3/wastedcops/listeners/EntityListener.java create mode 100644 wastedcops-master@4d070d71e37/src/main/resources/config.yml create mode 100644 wastedcops-master@4d070d71e37/src/main/resources/plugin.yml create mode 100644 wastedguns-master@2e3501603b9/.gitignore create mode 100644 wastedguns-master@2e3501603b9/README.md create mode 100644 wastedguns-master@2e3501603b9/pom.xml create mode 100644 wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/Main.java create mode 100644 wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/MathUtil.java create mode 100644 wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/StringUtil.java create mode 100644 wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/api/attachments/Attachment.java create mode 100644 wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/api/events/NetgunHitEvent.java create mode 100644 wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/api/events/WeaponDamageEvent.java create mode 100644 wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/api/events/WeaponDropEvent.java create mode 100644 wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/api/events/WeaponEquipEvent.java create mode 100644 wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/api/events/WeaponEvent.java create mode 100644 wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/api/events/WeaponLeftClickEvent.java create mode 100644 wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/api/events/WeaponPickupEvent.java create mode 100644 wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/api/events/WeaponRightClickEvent.java create mode 100644 wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/api/events/WeaponSneakEvent.java create mode 100644 wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/api/events/explosives/ExplosionDamageEntityEvent.java create mode 100644 wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/api/events/ranged/AmmoUpdateEvent.java create mode 100644 wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/api/events/ranged/RangedWeaponReloadEvent.java create mode 100644 wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/api/events/ranged/RangedWeaponShootEvent.java create mode 100644 wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/commands/GiveWeaponCommandHandler.java create mode 100644 wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/listeners/EntityListener.java create mode 100644 wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/listeners/PlayerListener.java create mode 100644 wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/listeners/WeaponsListener.java create mode 100644 wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/DamageDataHandler.java create mode 100644 wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/GTMGuns.java create mode 100644 wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/TESTING.java create mode 100644 wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/WeaponCooldown.java create mode 100644 wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/WeaponHandler.java create mode 100644 wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/WeaponManager.java create mode 100644 wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/WeaponState.java create mode 100644 wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/cache/PlayerCache.java create mode 100644 wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/cache/WeaponCache.java create mode 100644 wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/AirstrikeWeapon.java create mode 100644 wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/AmmoType.java create mode 100644 wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/MeleeWeapon.java create mode 100644 wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/ThrowableWeapon.java create mode 100644 wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/Weapon.java create mode 100644 wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/WeaponSkin.java create mode 100644 wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/WeaponType.java create mode 100644 wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/attribute/RankedWeapon.java create mode 100644 wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/attribute/StarAttribute.java create mode 100644 wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/attribute/WeaponAttribute.java create mode 100644 wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/attribute/WeaponExplosive.java create mode 100644 wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/attribute/WeaponRPM.java create mode 100644 wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/ranged/RangedWeapon.java create mode 100644 wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/ranged/attachment/Attachment.java create mode 100644 wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/ranged/guns/AssultRifleWeapon.java create mode 100644 wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/ranged/guns/LMGWeapon.java create mode 100644 wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/ranged/guns/LauncherWeapon.java create mode 100644 wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/ranged/guns/PistolWeapon.java create mode 100644 wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/ranged/guns/SMGWeapon.java create mode 100644 wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/ranged/guns/ShotgunWeapon.java create mode 100644 wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/ranged/guns/SniperWeapon.java create mode 100644 wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/ranged/guns/SpecialWeapon.java create mode 100644 wastedguns-master@2e3501603b9/src/main/resources/airstrikes.yml create mode 100644 wastedguns-master@2e3501603b9/src/main/resources/attachments.yml create mode 100644 wastedguns-master@2e3501603b9/src/main/resources/config.yml create mode 100644 wastedguns-master@2e3501603b9/src/main/resources/explosives.yml create mode 100644 wastedguns-master@2e3501603b9/src/main/resources/melee.yml create mode 100644 wastedguns-master@2e3501603b9/src/main/resources/plugin.yml create mode 100644 wastedguns-master@2e3501603b9/src/main/resources/ranged.yml create mode 100644 wastedvehicles-master@5cac11d6d43/.gitignore create mode 100644 wastedvehicles-master@5cac11d6d43/README.md create mode 100644 wastedvehicles-master@5cac11d6d43/circle.yml create mode 100644 wastedvehicles-master@5cac11d6d43/deploy.sh create mode 100644 wastedvehicles-master@5cac11d6d43/pom.xml create mode 100644 wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/Main.java create mode 100644 wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/SpeedBoost.java create mode 100644 wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/VehicleProperties.java create mode 100644 wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/VehicleType.java create mode 100644 wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/events/FuelUseEvent.java create mode 100644 wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/events/JetpackFlyEvent.java create mode 100644 wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/events/VehicleCreateEvent.java create mode 100644 wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/events/VehicleDamageEvent.java create mode 100644 wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/events/VehicleDestroyEvent.java create mode 100644 wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/events/VehicleEnterEvent.java create mode 100644 wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/events/VehicleEvent.java create mode 100644 wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/events/VehicleIgniteEvent.java create mode 100644 wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/events/VehicleImpactEntityEvent.java create mode 100644 wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/events/VehicleImpactVehicleEvent.java create mode 100644 wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/events/VehicleLeaveEvent.java create mode 100644 wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/events/VehiclePassengerEnterEvent.java create mode 100644 wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/events/VehicleShootEvent.java create mode 100644 wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/events/VehicleSpeedBoostEvent.java create mode 100644 wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/vehicles/Boat.java create mode 100644 wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/vehicles/Car.java create mode 100644 wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/vehicles/Helicopter.java create mode 100644 wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/vehicles/Plane.java create mode 100644 wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/vehicles/Submarine.java create mode 100644 wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/vehicles/WastedVehicle.java create mode 100644 wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/commands/FixVehiclesCommandHandler.java create mode 100644 wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/commands/GiveVehicleCommandHandler.java create mode 100644 wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/commands/WVReloadCommandHandler.java create mode 100644 wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/config/Config.java create mode 100644 wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/listeners/JetpackListener.java create mode 100644 wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/listeners/VehicleListener.java create mode 100644 wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/util/MiscUtil.java create mode 100644 wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/util/SteerDirection.java create mode 100644 wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/util/VehicleUtils.java create mode 100644 wastedvehicles-master@5cac11d6d43/src/main/resources/config.yml create mode 100644 wastedvehicles-master@5cac11d6d43/src/main/resources/plugin.yml diff --git a/bungee-master@696956eaecd/.gitignore b/bungee-master@696956eaecd/.gitignore new file mode 100644 index 0000000..ad7f541 --- /dev/null +++ b/bungee-master@696956eaecd/.gitignore @@ -0,0 +1,8 @@ + +\.idea/ + +target/classes/ + +target/ + +*.iml \ No newline at end of file diff --git a/bungee-master@696956eaecd/README.md b/bungee-master@696956eaecd/README.md new file mode 100644 index 0000000..63f8f25 --- /dev/null +++ b/bungee-master@696956eaecd/README.md @@ -0,0 +1,2 @@ +First commit. +test \ No newline at end of file diff --git a/bungee-master@696956eaecd/pom.xml b/bungee-master@696956eaecd/pom.xml new file mode 100644 index 0000000..f45535f --- /dev/null +++ b/bungee-master@696956eaecd/pom.xml @@ -0,0 +1,146 @@ + + 4.0.0 + + net.grandtheftmc + bungee + 1.0.6 + Bungee + + + + bungee-repo + https://oss.sonatype.org/content/groups/public/ + + + md_5-snapshots + http://repo.md-5.net/content/repositories/snapshots/ + + + nexus-release + http://nexus.grandtheftmc.net/content/repositories/releases + + + + + + nexus-release + Internal Releases + http://nexus.grandtheftmc.net/content/repositories/releases + + + nexus-snapshot + Internal Snapshots + http://nexus.grandtheftmc.net/content/repositories/snapshots + + + + + + net.md-5 + bungeecord-api + LATEST + provided + + + com.imaginarycode.minecraft + RedisBungee + 0.3.6-SNAPSHOT + provided + + + org.json + json + 20131018 + compile + + + com.authy + authy-java + LATEST + + + net.grandtheftmc + common + 1.1.1 + compile + + + redis.clients + jedis + 2.8.0 + jar + compile + + + com.google.code.gson + gson + 2.8.0 + compile + + + com.google.guava + guava + 21.0 + compile + + + org.apache.commons + commons-pool2 + LATEST + + + com.zaxxer + HikariCP + 2.6.0 + + + + + UTF-8 + 1.8 + 1.8 + + + + + + org.apache.maven.plugins + maven-shade-plugin + + Bungee + + + + package + + shade + + + + + + + + org.sonatype.plugins + nexus-staging-maven-plugin + 1.6.8 + true + + + default-deploy + deploy + + deploy + + + + + nexus + http://nexus.grandtheftmc.net/ + true + + + + + \ No newline at end of file diff --git a/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/Bungee.java b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/Bungee.java new file mode 100644 index 0000000..b7a431e --- /dev/null +++ b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/Bungee.java @@ -0,0 +1,305 @@ +package net.grandtheftmc.Bungee; + +import java.util.concurrent.TimeUnit; +import java.util.logging.Level; + +import com.imaginarycode.minecraft.redisbungee.RedisBungee; + +import net.grandtheftmc.ServerType; +import net.grandtheftmc.ServerTypeId; +import net.grandtheftmc.Bungee.authy.AuthyManager; +import net.grandtheftmc.Bungee.commands.AuthyCommand; +import net.grandtheftmc.Bungee.commands.FindCommand; +import net.grandtheftmc.Bungee.commands.GlobalMessageCommand; +import net.grandtheftmc.Bungee.commands.HelpCommand; +import net.grandtheftmc.Bungee.commands.HubCommand; +import net.grandtheftmc.Bungee.commands.MotdCommand; +import net.grandtheftmc.Bungee.commands.PermsCommand; +import net.grandtheftmc.Bungee.commands.PlaytimeCommand; +import net.grandtheftmc.Bungee.commands.ServerCommand; +import net.grandtheftmc.Bungee.commands.StaffChatCommand; +import net.grandtheftmc.Bungee.database.BaseDatabase; +import net.grandtheftmc.Bungee.help.HelpCore; +import net.grandtheftmc.Bungee.listeners.Chat; +import net.grandtheftmc.Bungee.listeners.Connect; +import net.grandtheftmc.Bungee.listeners.Disconnect; +import net.grandtheftmc.Bungee.listeners.Kick; +import net.grandtheftmc.Bungee.listeners.Login; +import net.grandtheftmc.Bungee.listeners.Ping; +import net.grandtheftmc.Bungee.redisbungee.RedisListener; +import net.grandtheftmc.Bungee.redisbungee.RedisManager; +import net.grandtheftmc.Bungee.tasks.AnnouncerTask; +import net.grandtheftmc.Bungee.tasks.AuthyTask; +import net.grandtheftmc.Bungee.tasks.PlaytimePurgeTask; +import net.grandtheftmc.Bungee.tasks.ServerStatusTask; +import net.grandtheftmc.Bungee.users.UserManager; +import net.grandtheftmc.jedis.JMessageListener; +import net.grandtheftmc.jedis.JedisChannel; +import net.grandtheftmc.jedis.JedisManager; +import net.grandtheftmc.jedis.message.ServerJoinRequestMessage; +import net.grandtheftmc.slack.Slack; +import net.grandtheftmc.slack.SlackChannel; +import net.grandtheftmc.slack.SlackField; +import net.grandtheftmc.slack.SlackHook; +import net.grandtheftmc.slack.attachment.SlackAttachment; +import net.md_5.bungee.api.ProxyServer; +import net.md_5.bungee.api.config.ServerInfo; +import net.md_5.bungee.api.connection.ProxiedPlayer; +import net.md_5.bungee.api.plugin.Listener; +import net.md_5.bungee.api.plugin.Plugin; +import net.md_5.bungee.api.plugin.PluginManager; +import net.md_5.bungee.api.scheduler.ScheduledTask; +import net.md_5.bungee.config.Configuration; + +public class Bungee extends Plugin implements Listener { + + // TODO remove + // test commit + + private static Bungee instance; + private RedisManager redisManager; + private AuthyManager authyManager; + private Settings settings; + private UserManager um; + private JedisManager jedisManager; + + public boolean enabled = false; + + public static final boolean GTM = true; + + private HelpCore helpCore; + + private Long startTime; + private ScheduledTask task69; + + public static Bungee getInstance() { + return instance; + } + + public static Settings getSettings() { + return instance.settings; + } + + public static UserManager getUserManager() { + return instance.um; + } + + public static RedisManager getRedisManager() { + return instance.redisManager; + } + + public static AuthyManager getAuthyManager() { + return instance.authyManager; + } + + public static void log(String msg) { + Bungee.getInstance().getLogger().log(Level.INFO, msg); + } + + public static void error(String msg) { + Bungee.getInstance().getLogger().log(Level.SEVERE, msg); + } + + public static void consoleLog(String log) { + } + + public HelpCore getHelpCore() { + return helpCore; + } + + public Long getStartTime() { + return this.startTime; + } + + @Override + public void onEnable() { + instance = this; + + getProxy().getScheduler().runAsync(this, () -> { + this.jedisManager = new JedisManager(); + this.jedisManager.initModule(new ServerTypeId(ServerType.PROXY, -1), JedisChannel.SERVER_QUEUE, GTM ? "172.16.0.1" : "databasesql", 5555, GTM ? "gtmredispass" : "redispass"); + this.jedisManager.getModule(JedisChannel.SERVER_QUEUE).registerListener(ServerJoinRequestMessage.class, new QueueListener()); + }); + + this.settings = new Settings(); + this.load(); + this.um = new UserManager(); + this.registerCommands(); + this.registerListeners(); + new AnnouncerTask(); + new ServerStatusTask(); + new PlaytimePurgeTask(); + new AuthyTask(); + this.startTime = System.currentTimeMillis(); + + enabled = true; + } + + @Override + public void onDisable() { + if(this.task69 != null && this.task69.getTask() != null) + this.task69.cancel(); + + for(JedisChannel channel : this.jedisManager.getJedisModules().keySet()) { + this.jedisManager.getModule(channel).disconnect(); + } + } + + public void registerCommands() { + PluginManager pm = ProxyServer.getInstance().getPluginManager(); + for (String st : this.settings.getServers().keySet()) + pm.registerCommand(this, new ServerCommand(st, this.jedisManager)); +// pm.registerCommand(this, new AltCommand()); + pm.registerCommand(this, new GlobalMessageCommand()); + pm.registerCommand(this, new HelpCommand()); + pm.registerCommand(this, new HubCommand(this.jedisManager, "hub")); + pm.registerCommand(this, new HubCommand(this.jedisManager, "lobby")); + pm.registerCommand(this, new HubCommand(this.jedisManager, "gtm")); + pm.registerCommand(this, new HubCommand(this.jedisManager, "vice")); + pm.registerCommand(this, new MotdCommand()); + pm.registerCommand(this, new PermsCommand()); +// pm.registerCommand(this, new SeenCommand()); + pm.registerCommand(this, new StaffChatCommand()); + pm.registerCommand(this, new PlaytimeCommand()); + pm.registerCommand(this, new AuthyCommand()); + pm.registerCommand(this, new FindCommand()); + } + + private void registerListeners() { + PluginManager pm = ProxyServer.getInstance().getPluginManager(); + pm.registerListener(this, new Chat()); + pm.registerListener(this, new Disconnect()); + pm.registerListener(this, new Login()); + pm.registerListener(this, new Connect()); + pm.registerListener(this, new Kick()); + pm.registerListener(this, new Ping()); + pm.registerListener(this, new RedisListener()); + + getRedisManager().getRedisAPI().registerPubSubChannels(getRedisManager().getMessageChannel()); + } + + private void load() { + this.settings.setMySQLConfig(Utils.loadConfigFromMaster("mysql")); +// this.settings.setBATConfig(BAT.getInstance().getConfiguration()); + this.settings.setPermsConfig(Utils.loadConfig("perms")); + this.settings.setMotdConfig(Utils.loadConfig("motd")); + this.settings.setGtmConfig(Utils.loadConfig("gtmconfig")); + + this.settings.setHelpConfig(Utils.loadConfig("help")); + //Init help core. + this.helpCore = new HelpCore(this.settings.getHelpConfiguration()); + + this.settings.setMotd(this.settings.getMotdConfig().getString("motd")); + this.loadMySQL(); + if (this.getProxy().getPluginManager().getPlugin("RedisBungee") != null) { + this.redisManager = new RedisManager(RedisBungee.getApi()); + } else { + error("RedisBungee not found!"); + } + + this.authyManager = new AuthyManager(); + } + + private void loadMySQL() { + Configuration c = this.settings.getMySQLConfig(); + this.settings.setHost(c.getString("mysql.host")); + this.settings.setPort(c.getString("mysql.port")); + this.settings.setDatabase(c.getString("mysql.database")); + this.settings.setUser(c.getString("mysql.user")); + this.settings.setPassword(c.getString("mysql.password")); + + BaseDatabase.getInstance().init( + this.settings.getHost(), + Integer.parseInt(this.settings.getPort()), + this.settings.getDatabase(), + this.settings.getUser(), + this.settings.getPassword() + ); + } + + private void initHubPinger() { + for (String str : getProxy().getServers().keySet()) { + Utils.SERVERS.putIfAbsent(getProxy().getServerInfo(str), true); + } + + task69 = getProxy().getScheduler().schedule(this, () -> { + for(ServerInfo server : Utils.SERVERS.keySet()) { + if(!Utils.SERVERS.get(server)) continue; + getProxy().getScheduler().runAsync(this, () -> server.ping((serverPing, throwable) -> { + if(throwable != null) { + Utils.SERVERS.put(server, false); + + String[] serv = getServerType(server.getName()); + Slack.send(SlackChannel.PRODUCTION_ALERTS, SlackHook.SERVER_HEARTBEAT, + new SlackAttachment("Server down! " + server.getName()) + .setColor("#e01563") + .setAuthorName("BungeeCord") + .addFields( + new SlackField().setTitle("Server Type").setValue(serv[0]).setShorten(true) + ) + .addFields( + new SlackField().setTitle("Identifier").setValue(serv[1]).setShorten(true) + ) + .addFields( + new SlackField().setTitle("Triggered By").setValue(throwable.getLocalizedMessage()).setShorten(false) + ) + .setFooter("Timestamp") + ); + } + else { + Utils.SERVERS.put(server, true); + } + })); + } + }, 10, 30, TimeUnit.SECONDS); + } + + public String[] getServerType(String server) { + String id = "-1"; + ServerType type = ServerType.OPERATOR; + if(server.toLowerCase().startsWith("hub")) { + id = server.toLowerCase().split("hub")[1]; + type = ServerType.HUB; + } + + if(server.toLowerCase().startsWith("gtm")) { + id = server.toLowerCase().split("gtm")[1]; + type = ServerType.GTM; + } + + if(server.toLowerCase().startsWith("vice")) { + id = server.toLowerCase().split("vice")[1]; + type = ServerType.VICE; + } + + if(server.toLowerCase().startsWith("creative")) { + id = server.toLowerCase().split("creative")[1]; + type = ServerType.CREATIVE; + } + + return new String[]{ type == ServerType.OPERATOR ? server.toUpperCase() : type.name(), id }; + } + + public class QueueListener implements JMessageListener { + + @Override + public void onReceive(ServerTypeId serverTypeId, ServerJoinRequestMessage message) { + if(!enabled) return; + + ProxiedPlayer player = instance.getProxy().getPlayer(message.getUniqueId()); + if(player == null) return; + ServerInfo info = instance.getProxy().getServerInfo(message.getTargetServer().getServerType().getServerName() + message.getTargetServer().getId()); + if(info != null) { + info.ping((serverPing, throwable) -> { + if(serverPing != null) { + player.connect(info); + player.sendMessage(Utils.f("&aSending you to server!")); + } + }); + } + else { + player.sendMessage(Utils.f("&cThis server cannot be recognised!")); + } + } + } +} diff --git a/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/Lang.java b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/Lang.java new file mode 100644 index 0000000..ae48f34 --- /dev/null +++ b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/Lang.java @@ -0,0 +1,80 @@ +package net.grandtheftmc.Bungee; + +import net.md_5.bungee.api.chat.TextComponent; + +public enum Lang { + + GMSG(" &a&lGMSG&8&l> "), + MSG(" &a&lMSG&8&l> "), + BUCKS(" &a&lBUCKS&8&l> "), + BUCKS_ADD(" &a&lBUCKS&8&l> &a&l+&a $&l"), + BUCKS_TAKE(" &a&lBUCKS&8&l> &c&l-&c $&l"), + TOKENS(" &e&lTOKENS&8&l> "), + TOKENS_ADD(" &e&lTOKENS&8&l> &e&l+&e&l"), + TOKENS_TAKE(" &e&lTOKENS&8&l> &c&l-&c&l"), + MONEY(" &3&lMONEY&8&l> "), + MONEY_ADD(" &3&lMONEY&8&l> &a&l+&a $&l"), + MONEY_TAKE(" &3&lMONEY&8&l> &c&l-&c $&l"), + ATM(" &3&lATM&8&l> "), + BANK(" &3&lBANK&8&l> "), + BANK_ADD("&3&lBANK&8&l> &a&l+&a $&l"), + BANK_TAKE("&3&lBANK&8&l> &c&l-&c $&l"), + GTM(" &7&l" + (Bungee.GTM ? "GTM" : "GTA") + "&8&l> "), + PREFS(" &5&lPREFS&8&l> "), + AMMUNATION(" &9&lAMMU&4&lNATION&8&l> "), + WANTED(" &c&lWANTED&8&l> "), + TAXI(" &e&lTAXI&8&l> "), + SHOP(" &a&lSHOP&8&l> "), + TRASH_CAN(" &7&lTRASH CAN&8&l> "), + HEY(" &c&lHEY&8&l> "), + COMBATTAG(" &7&lCOMBATTAG&8&l> "), + GUARDPETS("&c&l GUARD PETS&8&l> "), + BOUNTIES(" &5&lBOUNTIES&8&l> "), + VOTE(" &e&lVOTE&8&l> "), + TOKEN_SHOP(" &e&lTOKEN SHOP&8&l> "), + KITS(" &b&lKITS&8&l> "), + RANKUP(" &a&lRANKUP&8&l> "), + RANKS(" &a&lRANKS&8&l> "), + JOBS(" &3&lJOBS&8&l> "), + COP_MODE(" &3&lCOP MODE&8&l> "), + HITMAN_MODE(" &8&lHITMAN MODE> "), + GPS(" &7&lGPS&8&l> "), + HOUSES(" &3&lHOUSES&8&l> "), + TUTORIALS(" &2&lTUTORIALS&8&l> "), + GANGS(" &a&lGANGS&8&l> "), + NOPERM("&cYou want me to clap yo ass? You ain't got permission for this shit!"), + NOTPLAYER("&cDawg you ain't a player!"), + STAFF(" &c&lSTAFF&8&l> "), + HELP(" &d&lHELP&8&l> "), + GSPY(" &a&lGSPY&8&l> "), + PERMS(" &c&lGPERMS&8&l> "), + VERIFICATION(" &c&lVERIFICATION&8&l> "); + + private final String s; + + Lang(String s) { + this.s = s; + } + + public String s() { + return Utils.f(this.s); + } + + @Override + public String toString() { + return Utils.f(this.s); + } + + public String f(String s) { + return Utils.f(this.s + s); + } + + public TextComponent ft(String s) { + return Utils.ft(this.s + s); + } + + public TextComponent st() { + return Utils.ft(this.s); + } + +} diff --git a/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/Settings.java b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/Settings.java new file mode 100644 index 0000000..d489b57 --- /dev/null +++ b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/Settings.java @@ -0,0 +1,132 @@ +package net.grandtheftmc.Bungee; + +import net.md_5.bungee.api.ProxyServer; +import net.md_5.bungee.config.Configuration; + +import java.util.HashMap; +import java.util.Map; +import java.util.Set; + +public class Settings { + private final Map servers = new HashMap<>(); + private Configuration config; + private Configuration mysqlConfig; + private Configuration permsConfig; + private Configuration motdConfig; + private Configuration helpConfig; + private Configuration gtmConfig; + private String motd; + private String host = "error"; + private String port = "error"; + private String database = "error"; + private String user = "error"; + private String password = "error"; + + Settings() { + this.servers.clear(); + Set s = ProxyServer.getInstance().getServers().keySet(); + for (String c : s) + this.servers.put(c, c); + this.servers.put("creative", "creative1"); + this.servers.put("crea", "creative1"); + this.servers.put("gtm", "gtm1"); + this.servers.put("legacy", "legacygtm"); + this.servers.put("gtmlegacy", "legacygtm"); + this.servers.put("oldgtm", "legacy"); + this.servers.put("gliders", "gliders1"); + this.servers.put("dev", "gtm0"); + this.servers.put("vice","vice1"); + } + + public Configuration getMySQLConfig() { + return this.mysqlConfig; + } + + public void setMySQLConfig(Configuration mysqlConfig) { + this.mysqlConfig = mysqlConfig; + } + + public Configuration getHelpConfiguration(){ + return this.helpConfig; + } + + public void setHelpConfig(Configuration config) { + this.helpConfig = config; + } + + public Map getServers() { + return this.servers; + } + + public Configuration getPermsConfig() { + return this.permsConfig; + } + + public void setPermsConfig(Configuration permsConfig) { + this.permsConfig = permsConfig; + } + + public String getMotd() { + return Utils.f(this.motd); + } + + public void setMotd(String motd) { + this.motd = motd; + } + + public Configuration getMotdConfig() { + return this.motdConfig; + } + + public void setMotdConfig(Configuration motdConfig) { + this.motdConfig = motdConfig; + } + + public Configuration getGtmConfig() { + return this.gtmConfig; + } + + public void setGtmConfig(Configuration gtmConfig) { + this.gtmConfig = gtmConfig; + } + + public String getHost() { + return this.host; + } + + public void setHost(String host) { + this.host = host; + } + + public String getPort() { + return this.port; + } + + public void setPort(String port) { + this.port = port; + } + + public String getDatabase() { + return this.database; + } + + public void setDatabase(String database) { + this.database = database; + } + + public String getUser() { + return this.user; + } + + public void setUser(String user) { + this.user = user; + } + + public String getPassword() { + return this.password; + } + + public void setPassword(String password) { + this.password = password; + } +} \ No newline at end of file diff --git a/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/Utils.java b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/Utils.java new file mode 100644 index 0000000..99b90fb --- /dev/null +++ b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/Utils.java @@ -0,0 +1,386 @@ +package net.grandtheftmc.Bungee; + +import net.grandtheftmc.Bungee.redisbungee.data.DataType; +import net.grandtheftmc.Bungee.users.User; +import net.grandtheftmc.Bungee.users.UserRank; +import net.grandtheftmc.Bungee.utils.DefaultFontInfo; +import net.grandtheftmc.Bungee.utils.ServerStatus; +import net.grandtheftmc.Bungee.utils.TimeFormatter; +import net.md_5.bungee.api.ChatColor; +import net.md_5.bungee.api.CommandSender; +import net.md_5.bungee.api.ProxyServer; +import net.md_5.bungee.api.chat.*; +import net.md_5.bungee.api.config.ServerInfo; +import net.md_5.bungee.api.connection.ProxiedPlayer; +import net.md_5.bungee.config.Configuration; +import net.md_5.bungee.config.ConfigurationProvider; +import net.md_5.bungee.config.YamlConfiguration; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ThreadLocalRandom; +import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; + +public final class Utils { + public static final ConcurrentHashMap SERVERS = new ConcurrentHashMap<>(); + private static final Random RANDOM = new Random(); + public static Collection recentHelps = new ArrayList<>(); + + private Utils() { + } + + public static TextComponent ft(String s) { + return new TextComponent(ChatColor.translateAlternateColorCodes('&', s)); + } + + public static String fc(String s) { + s = Utils.f(s); + int messagePxSize = 0; + boolean previousCode = false; + boolean isBold = false; + + for (char c : s.toCharArray()) { + if (c == '§') { + previousCode = true; + } else if (previousCode) { + previousCode = false; + isBold = c == 'l' || c == 'L'; + } else { + DefaultFontInfo dFI = DefaultFontInfo.getDefaultFontInfo(c); + messagePxSize += isBold ? dFI.getBoldLength() : dFI.getLength(); + messagePxSize++; + } + } + + int halvedMessageSize = messagePxSize / 2; + int toCompensate = 154 - halvedMessageSize; + int spaceLength = DefaultFontInfo.SPACE.getLength() + 1; + int compensated = 0; + StringBuilder sb = new StringBuilder(); + while (compensated < toCompensate) { + sb.append(' '); + compensated += spaceLength; + } + return sb + s; + } + + public static String[] fc(String[] array) { + if (array == null) + return null; + String[] a = new String[array.length]; + for (int i = 0; i < array.length; i++) + a[i] = Utils.fc(array[i]); + return a; + } + + public static void loop(int amount, Runnable runnable) { + for (int i = 0; i < amount; i++) runnable.run(); + } + + public static String f(String s) { + return ChatColor.translateAlternateColorCodes('&', s); + } + + public static void redisChatLog(String sender, String msg) { + Map chatLogSerializd = new HashMap<>(); + chatLogSerializd.put("type", "staff"); + chatLogSerializd.put("sender", sender); + chatLogSerializd.put("message", msg); + Bungee.getRedisManager().sendMessage(Bungee.getRedisManager().serialize(DataType.LOG, chatLogSerializd)); + } + + public static void chatLog(String sender, String msg) { + String fileName = new SimpleDateFormat("MM-dd-yy").format(new Date()); + File file = new File("gtmlogs/gtmlog_staff_" + fileName + ".txt"); + try { + if (!file.isFile() || !file.exists()) { + file.createNewFile(); + } + String date = new SimpleDateFormat("MM/dd/yy - h:mm a").format(new Date()); + String message = date + " - " + sender + ": " + msg + "\n"; + FileWriter fileWriter = new FileWriter(file, true); + BufferedWriter bufferedWriter = new BufferedWriter(fileWriter); + bufferedWriter.write(message); + bufferedWriter.close(); + } catch (IOException exception) { + exception.printStackTrace(); + } + } + + public static void log(String msg, String logName) { + String fileName = new SimpleDateFormat("MM-dd-yy").format(new Date()); + File file = new File("gtmlogs/gtmlog_" + logName + "_" + fileName + ".txt"); + try { + if (!file.isFile() || !file.exists()) { + file.createNewFile(); + } + String date = new SimpleDateFormat("MM/dd/yy - h:mm a").format(new Date()); + String message = date + " - " + msg + "\n"; + FileWriter fileWriter = new FileWriter(file, true); + BufferedWriter bufferedWriter = new BufferedWriter(fileWriter); + bufferedWriter.write(message); + bufferedWriter.close(); + } catch (IOException exception) { + exception.printStackTrace(); + } + } + + public static void redisStaffChat(String sender, String msg) { + Map staffChatSerialized = new HashMap<>(); + staffChatSerialized.put("sender", sender); + staffChatSerialized.put("message", msg); + + Bungee.getRedisManager().sendMessage(Bungee.getRedisManager().serialize(DataType.STAFFCHAT, staffChatSerialized)); + } + + public static void staffChat(String name, String msg) { + String prefix = "&7[&a&l" + name + "&7] "; + ComponentBuilder a = new ComponentBuilder(Lang.STAFF.f(prefix)) + .append(msg) + .color(ChatColor.GREEN); + for (String string : msg.split(" ")) { + if (string.matches("^((https?|ftp)://|(www|ftp)\\.)?[a-z0-9-]+(\\.[a-z0-9-]+)+([/?].*)?$")) { + a.event(new ClickEvent(ClickEvent.Action.OPEN_URL, string)); + break; + } + } + ProxyServer.getInstance().getPlayers().stream().filter(player -> player.hasPermission("staffchat.use")).forEach(player -> player.sendMessage(a.create())); + Bungee.log(Lang.STAFF.f("[" + name + "] " + msg)); + } + + /** + * Called when a help request has been invoked on the Redis listener. This forwards the request to all staff. + * + * @param playerName Player who requested help. + * @param msg What did they ask for help with? + * @param server What server is the player on. + */ + public static void redisHelp(String playerName, String msg, String server) { + //can't pass proxy player here as staff and help requester may be on different instances + BaseComponent[] a = new ComponentBuilder(Lang.HELP.f("&7[&8" + playerName + "&7] ")) + .append(msg) + .color(ChatColor.GREEN) + .event(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/gmsg " + playerName + " ")) + .event(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder(Utils.f("&7User is on server &a" + server)).create())) + .create(); + + ProxyServer.getInstance().getPlayers().stream().filter(p -> p.hasPermission("staffchat.use") || p.getName().equalsIgnoreCase(playerName)).forEach(p -> p.sendMessage(a)); + Bungee.log(Lang.HELP.f("&7[&8" + playerName + "&7] &r" + msg)); + } + + @Deprecated + public static void help(ProxiedPlayer player, String msg) { + if (msg.split(" ").length <= 1) { + player.sendMessage(Lang.HELP.f("&7Only one word? Try to describe your problem more accurately.")); + return; + } + + String name = getColoredName(player); + BaseComponent[] a = new ComponentBuilder(Lang.HELP.f("&7[&a&l" + name + "&7] ")) + .append(msg).color(ChatColor.GREEN) + .event(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/gmsg " + player.getName() + " ")) + .event(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder(Utils.f("&7User is on server &a" + player.getServer().getInfo().getName())).create())) + .create(); + + ProxyServer.getInstance().getPlayers().stream().filter(p -> p.hasPermission("staffchat.use") || p.equals(player)).forEach(p -> p.sendMessage(a)); + Bungee.log(Lang.HELP.f("&7[&a&l" + name + "&7] &r" + msg)); + player.sendMessage(Lang.HELP.f("&7Your message has been sent to all online staff. Use &a&l\"/gmsg \"&7 to talk to them individually.")); + addRecentHelp(player.getName()); + } + + public static void msg(ProxiedPlayer player, String msg) { + player.sendMessage(ft(msg)); + } + + public static void msg(CommandSender player, String msg) { + player.sendMessage(ft(msg)); + } + + public static void redisGlobalMessage(ProxiedPlayer sender, String target, String msg) { + if (!Bungee.getRedisManager().isPlayerOnline(target)) { + msg(sender, "&7That player is not on the server!"); + return; + } + + String to = Lang.GMSG.f("&7[" + getColoredName(sender) + "&7 -> me] &r" + msg); + String from = Lang.GMSG.f("&7[me -> " + getColoredName(target) + "&7] &r" + msg); + String ss = Lang.GSPY.f("&7[" + getColoredName(sender) + "&7 -> " + getColoredName(target) + "&7] &r" + msg); + msg(sender, from); + + Map toSerialized = new HashMap<>(); + toSerialized.put("sender", sender.getName()); + toSerialized.put("target", target); + toSerialized.put("message", to); + Bungee.getRedisManager().sendMessage(Bungee.getRedisManager().serialize(DataType.GMSG, toSerialized)); + + + Map socialSpySerialized = new HashMap<>(); + socialSpySerialized.put("message", ss); + Bungee.getRedisManager().sendMessage(Bungee.getRedisManager().serialize(DataType.SOCIALSPY, socialSpySerialized)); + } + + @Deprecated + public static void globalMessage(ProxiedPlayer sender, ProxiedPlayer target, String msg) { + if (target == null) { + msg(sender, "&7That player is not on the server!"); + return; + } + + String to = Lang.GMSG.f("&7[" + getColoredName(sender) + "&7 -> me] &r" + msg); + String from = Lang.GMSG.f("&7[me -> " + getColoredName(target) + "&7] &r" + msg); + String ss = Lang.GSPY.f("&7[" + getColoredName(sender) + "&7 -> " + getColoredName(target) + "&7] &r" + msg); + String url = ""; + for (String string : msg.split(" ")) { + if (string.matches("^((https?|ftp)://|(www|ftp)\\.)?[a-z0-9-]+(\\.[a-z0-9-]+)+([/?].*)?$")) { + url = string; + break; + } + } + + BaseComponent[] a = new ComponentBuilder(to) + .event(url.isEmpty() ? new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/gmsg " + sender.getName() + " ") + : new ClickEvent(ClickEvent.Action.OPEN_URL, url)) + .create(); + target.sendMessage(a); + msg(sender, from); + Bungee.log(Lang.GMSG.f("&7[" + sender.getName() + " -> " + target.getName() + "&7] &r" + msg)); + log("[" + sender.getName() + " -> " + target.getName() + "] " + msg, "gmsglog"); + socialSpy(ss, sender, target); + } + + public static void socialSpy(String msg, ProxiedPlayer sender, ProxiedPlayer target) { + Bungee.getUserManager().getLoadedUsers().forEach(user -> { + if (Bungee.getInstance().getProxy().getPlayer(user.getUUID()) == null) return; + if (!user.isRank(UserRank.ADMIN)) return; + ProxiedPlayer staff = Bungee.getInstance().getProxy().getPlayer(user.getUUID()); + if (user.getSocialSpy()) { + if (!staff.getName().equals(sender.getName()) || !staff.getName().equals(target.getName())) { + staff.sendMessage(Utils.f(msg)); + } + } + }); + } + + public static Configuration loadConfigFile(File file) { + Configuration c = null; + try { + if (!file.exists()) + file.createNewFile(); + c = ConfigurationProvider.getProvider(YamlConfiguration.class).load(file); + } catch (IOException e) { + e.printStackTrace(); + } + return c; + } + + public static Configuration loadConfig(String src) { + return loadConfigFile(new File(src + ".yml")); + } + + public static Configuration loadConfigFromMaps(String src) { + return loadConfigFile(new File("/home/mcservers/development/master/maps/" + src + ".yml")); + } + + public static Configuration loadConfigFromMaster(String src) { + return loadConfigFile(new File("/home/mcservers/development/master/" + src + ".yml")); + } + + public static void saveConfigFile(Configuration c, File file) { + try { + if (!file.exists()) + file.createNewFile(); + ConfigurationProvider.getProvider(YamlConfiguration.class).save(c, file); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public static void saveConfig(Configuration c, String src) { + saveConfigFile(c, new File(src + ".yml")); + } + + public static Random getRandom() { + return RANDOM; + } + + public static List getPlayerNames() { + return ProxyServer.getInstance().getPlayers().stream().map(CommandSender::getName).collect(Collectors.toList()); + } + + public static void addRecentHelp(String player) { + recentHelps.add(player); + Bungee.getInstance().getProxy().getScheduler().schedule(Bungee.getInstance(), new Runnable() { + @Override + public void run() { + recentHelps.remove(player); + } + }, 30, TimeUnit.SECONDS); + } + + public static ServerInfo getRandomHub() { + List hubs = Bungee.getInstance().getProxy().getServers().entrySet().stream().filter(map -> map.getKey().startsWith("hub")).map(Map.Entry::getValue).collect(Collectors.toList()); + return getLeastPlayers(hubs).orElse(hubs.get(Utils.getRandom().nextInt(hubs.size()))); + } + + public static ServerInfo getRandomServer(String type) { + List servs = Bungee.getInstance().getProxy().getServers().entrySet().stream().filter(map -> map.getKey().startsWith(type)).map(Map.Entry::getValue).collect(Collectors.toList()); + return getLeastPlayers(servs).orElse(servs.get(Utils.getRandom().nextInt(servs.size()))); + } + + public static Optional getLeastPlayers(Collection servers) { + Optional leastPlayers = Optional.empty(); + for (ServerInfo server : servers) { + if (!isOnline(server)) { + Bungee.error(server.getName() + " is offline"); + continue; + } + + if (server.getPlayers().isEmpty()) { + leastPlayers = Optional.of(server); + break; + } + + if (!leastPlayers.isPresent()) { + leastPlayers = Optional.of(server); + continue; + } + + if (server.getPlayers().size() < leastPlayers.get().getPlayers().size()) { + leastPlayers = Optional.of(server); + } + } + return leastPlayers; + } + + public static boolean isOnline(ServerInfo serverInfo) { + ServerStatus serverStatus = ServerStatus.getServerStatus(serverInfo); + return serverStatus.isOnline(); + } + + public static String getColoredName(ProxiedPlayer player) { + Optional userOptional = Bungee.getUserManager().getLoadedUser(player.getUniqueId()); + return Utils.f(userOptional.map(user -> Utils.f(user.getUserRank().getColor() + player.getName())).orElseGet(() -> "&8" + player.getName())); + } + + public static String getColoredName(String player) { + return Utils.f("&8" + player); + } + + public static String formatPlaytime(Long playtime) { + TimeFormatter tf = new TimeFormatter(TimeUnit.MILLISECONDS, playtime); + return tf.getHours() + "h " + tf.getMinutes() + "m"; + } + + public static boolean isStaff(String name) { + for (User user : Bungee.getUserManager().getLoadedUsers()) { + if (user.getUsername().equalsIgnoreCase(name)) return true; + } + return false; + } +} diff --git a/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/authy/AuthyManager.java b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/authy/AuthyManager.java new file mode 100644 index 0000000..317666e --- /dev/null +++ b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/authy/AuthyManager.java @@ -0,0 +1,42 @@ +package net.grandtheftmc.Bungee.authy; + +import com.authy.AuthyApiClient; +import com.authy.api.Hash; +import com.authy.api.Token; +import com.authy.api.User; +import net.grandtheftmc.Bungee.Bungee; + +public class AuthyManager { + private final String apiKey = Bungee.getSettings().getGtmConfig().getString("authy-api-key"); + private AuthyApiClient authyApiClient; + + public AuthyManager() { + init(); + } + + public void init() { + this.authyApiClient = new AuthyApiClient(apiKey); + } + + public User createUser(String email, String phoneNumber, String countryCode) { + return this.authyApiClient.getUsers().createUser(email, phoneNumber, countryCode); + } + + public String verifyToken(int authy_id, String userToken) { + Token verification = this.authyApiClient.getTokens().verify(authy_id, userToken); + if (verification.isOk()) { + return "400"; + } else { + return verification.getError().toString(); + } + } + + public String sendSMSToken(int authy_id) { + Hash sms = this.authyApiClient.getUsers().requestSms(authy_id); + if (sms.isOk()) { + return "400"; + } else { + return sms.getError().toString(); + } + } +} diff --git a/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/commands/AltCommand.java b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/commands/AltCommand.java new file mode 100644 index 0000000..21b7fe7 --- /dev/null +++ b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/commands/AltCommand.java @@ -0,0 +1,72 @@ +package net.grandtheftmc.Bungee.commands; + +//import fr.Alphart.BAT.Modules.Core.LookupFormatter; +import net.grandtheftmc.Bungee.Bungee; +import net.grandtheftmc.Bungee.Utils; +import net.grandtheftmc.Bungee.utils.RequestRateLimiter; +import net.grandtheftmc.Bungee.utils.TabComplete; +import net.md_5.bungee.api.CommandSender; +import net.md_5.bungee.api.ProxyServer; +import net.md_5.bungee.api.connection.ProxiedPlayer; +import net.md_5.bungee.api.plugin.Command; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.UUID; + +public class AltCommand extends Command { + + public AltCommand() { + super("alt", "bat.lookup.ip", "alts"); + } + + @Override + public void execute(CommandSender s, String[] args) { + /*if (args.length != 1) { + s.sendMessage(Utils.ft("&c/alt ")); + return; + } + if (!(s instanceof ProxiedPlayer)) { + s.sendMessage(Utils.ft("&cYou are not a player!")); + return; + } + ProxiedPlayer p = (ProxiedPlayer) s; + UUID sender = p.getUniqueId(); + + if (!RequestRateLimiter.requestCmd(sender)) { + s.sendMessage(Utils.ft("&cYou have issued this command recently, please wait a second.")); + return; + } + + String player = args[0]; + s.sendMessage(Utils.ft("&7Looking up player &a" + player + "&7 in the database.")); + ProxyServer.getInstance().getScheduler().runAsync(Bungee.getInstance(), () -> { + ResultSet rs = Bungee.getBATSQL() + .query("select BAT_player,lastip from BAT_players where BAT_player='" + player + "';"); + String name1 = null; + String lastip = null; + try { + if (rs.next()) { + name1 = rs.getString("BAT_player"); + lastip = rs.getString("lastip"); + } + rs.close(); + } catch (SQLException ignored) { + + } + ProxiedPlayer p1 = ProxyServer.getInstance().getPlayer(sender); + if (p1 == null) + return; +// if (lastip == null || name1 == null || !fr.Alphart.BAT.Utils.Utils.validIP(lastip)) { +// p1.sendMessage(Utils.ft("&7That player is not in the database!")); +// return; +// } +// new LookupFormatter().getSummaryLookupIP(lastip).forEach(p1::sendMessage); + });*/ + } + + public Iterable onTabComplete(CommandSender sender, String[] args) { + return TabComplete.onTabComplete(sender, args); + } + +} diff --git a/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/commands/AuthyCommand.java b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/commands/AuthyCommand.java new file mode 100644 index 0000000..8e495bb --- /dev/null +++ b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/commands/AuthyCommand.java @@ -0,0 +1,132 @@ +package net.grandtheftmc.Bungee.commands; + +import net.grandtheftmc.Bungee.Bungee; +import net.grandtheftmc.Bungee.Lang; +import net.grandtheftmc.Bungee.Utils; +import net.grandtheftmc.Bungee.users.User; +import net.md_5.bungee.api.CommandSender; +import net.md_5.bungee.api.connection.ProxiedPlayer; +import net.md_5.bungee.api.plugin.Command; + +import java.util.Optional; + +public class AuthyCommand extends Command { + + public AuthyCommand() { + super("authy", "authy.admin"); + } + + @Override + public void execute(CommandSender s, String[] args) { + if (!(s instanceof ProxiedPlayer)) return; + ProxiedPlayer player = (ProxiedPlayer) s; + Optional userOptional = Bungee.getUserManager().getLoadedUser(player.getUniqueId()); + if (!userOptional.isPresent()) return; + User user = userOptional.get(); + if (args.length == 0) { + sendHelp(player); + return; + } + + if (args.length == 1) { + if (args[0].equalsIgnoreCase("help")) + sendHelp(player); + + else if (args[0].equalsIgnoreCase("countrycodes")) + sendCountryCodes(player); + + return; + } + + else { + if (user.isAuthyVerified()) { + player.sendMessage(Lang.VERIFICATION.ft("&7You are already verified!")); + return; + } + + if (args[0].equalsIgnoreCase("verify")) { + if (args.length != 2) { + sendHelp(player); + } else { + String token = args[1]; + if (user.getAuthyId() == 0) { + player.sendMessage(Lang.VERIFICATION.ft("&cYou must register first!")); + } else { + String result = Bungee.getAuthyManager().verifyToken(user.getAuthyId(), token); + if (result.equals("400")) { + user.setAuthyVerified(true); + player.sendMessage(Lang.VERIFICATION.ft("&aVerification Successful")); + user.setLastIPAddress(player.getAddress().getAddress().getHostAddress()); + } else { + player.sendMessage(Lang.VERIFICATION.ft("&cError! Verification Failed: " + result)); + } + return; + } + } + } + + else if (args[0].equalsIgnoreCase("sendsms")) { + if (user.getAuthyId() == 0) { + player.sendMessage(Lang.VERIFICATION.ft("&cYou must register first!")); + } else { + String result = Bungee.getAuthyManager().sendSMSToken(user.getAuthyId()); + if (result.equals("400")) { + player.sendMessage(Lang.VERIFICATION.ft("&aToken sent via SMS")); + } else { + player.sendMessage(Lang.VERIFICATION.ft("&cError: " + result)); + } + return; + } + } + + else if (args[0].equalsIgnoreCase("register")) { + if (args.length != 4) { + sendHelp(player); + } else { + String email = args[1]; + String phoneNumber = args[2]; + String countryCode = args[3]; + com.authy.api.User authyUser = Bungee.getAuthyManager().createUser(email, phoneNumber, countryCode); + if (authyUser.isOk()) { + user.setAuthyId(authyUser.getId()); + player.sendMessage(Lang.VERIFICATION.ft("&aRegistration Successful")); + } + + else { + player.sendMessage(Lang.VERIFICATION.ft("&cError! Registration Failed: " + authyUser.getError().toString())); + } + return; + } + } + } + } + + public void sendHelp(ProxiedPlayer player) { + player.sendMessage(Lang.VERIFICATION.ft("&7Help")); + player.sendMessage(Utils.ft("&a/authy help &7- Display this information")); + player.sendMessage(Utils.ft("&a/authy verify &7- Verify yourself using your Authy &7 (you must be registered)")); + player.sendMessage(Utils.ft("&a/authy sendsms &7- If not using Authy app request your verification token to be sent via SMS")); + player.sendMessage(Utils.ft("&a/authy register &7- &7Register for verification. " + + "Example command: &a/authy register &bme@grandtheftmc.net 5276449341 1")); + player.sendMessage(Utils.ft("&a/authy countrycodes &7- List all valid country codes")); + } + + public void sendCountryCodes(ProxiedPlayer player) { + player.sendMessage(Lang.VERIFICATION.ft("&7Country Codes")); + player.sendMessages( + "United States of America: 1" , + "Canada: 1" , + "Russia: 7" , + "Netherlands: 31" , + "Belgium: 32" , + "Spain: 34" , + "Italy: 39" , + "United Kingdom: 44" , + "Mexico: 52" , + "Australia: 61" , + "Korea (+South): 82" , + "Korea (+North): gtfo crue" + ); + } + +} \ No newline at end of file diff --git a/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/commands/FindCommand.java b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/commands/FindCommand.java new file mode 100644 index 0000000..08540aa --- /dev/null +++ b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/commands/FindCommand.java @@ -0,0 +1,37 @@ +package net.grandtheftmc.Bungee.commands; + +import net.grandtheftmc.Bungee.Bungee; +import net.grandtheftmc.Bungee.Lang; +import net.grandtheftmc.Bungee.Utils; +import net.grandtheftmc.Bungee.utils.TabComplete; +import net.md_5.bungee.api.CommandSender; +import net.md_5.bungee.api.config.ServerInfo; +import net.md_5.bungee.api.plugin.Command; + +public class FindCommand extends Command { + + public FindCommand() { + super("find"); + } + + @Override + public void execute(CommandSender s, String[] args) { + if (args.length != 1) { + s.sendMessage(Utils.ft("&c/find ")); + return; + } + + String target = args[0]; + if (Bungee.getRedisManager().isPlayerOnline(target) && !Utils.isStaff(target)) { + ServerInfo serverInfo = Bungee.getRedisManager().getRedisAPI().getServerFor(Bungee.getRedisManager().getUUIDFromName(target)); + s.sendMessage(Lang.GTM.ft("&a" + target + " &7was found on server &a" + serverInfo.getName().toUpperCase())); + } + else { + s.sendMessage(Lang.GTM.ft("&a" + target + " &7is not online!")); + } + } + + public Iterable onTabComplete(CommandSender sender, String[] args) { + return TabComplete.onTabComplete(sender, args); + } +} \ No newline at end of file diff --git a/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/commands/GlobalMessageCommand.java b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/commands/GlobalMessageCommand.java new file mode 100644 index 0000000..6b651a0 --- /dev/null +++ b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/commands/GlobalMessageCommand.java @@ -0,0 +1,294 @@ +package net.grandtheftmc.Bungee.commands; + +import net.grandtheftmc.Bungee.Bungee; +import net.grandtheftmc.Bungee.Lang; +import net.grandtheftmc.Bungee.Utils; +import net.grandtheftmc.Bungee.redisbungee.RedisManager; +import net.grandtheftmc.Bungee.redisbungee.data.DataType; +import net.grandtheftmc.Bungee.users.User; +import net.grandtheftmc.Bungee.utils.HelpLog; +import net.grandtheftmc.Bungee.utils.TabComplete; +import net.md_5.bungee.api.ChatColor; +import net.md_5.bungee.api.CommandSender; +import net.md_5.bungee.api.ProxyServer; +import net.md_5.bungee.api.chat.BaseComponent; +import net.md_5.bungee.api.chat.ClickEvent; +import net.md_5.bungee.api.chat.ComponentBuilder; +import net.md_5.bungee.api.connection.ProxiedPlayer; +import net.md_5.bungee.api.plugin.Command; +import net.md_5.bungee.api.plugin.TabExecutor; + +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; + +public class GlobalMessageCommand extends Command implements TabExecutor { + + public GlobalMessageCommand() { + super( + "globalmessage", + null, + "gmsg", "gmessage", "globalmsg", "gtell", "globaltell", "gwhisper", "globalwhisper", "globalw", "gw", "globalchat", "globalc" + ); + } + + /* + Redis procedure: + ---------------- + - Players may reside on different servers across bungee instances. + 1) Check if name matches, or part matches a player on the current bungee instance. + Yes: Send msg directly. + No: Go to step 2. + 2) Check if name matches, or part matches a player across all redis instances. + Yes: Send GMSG packet on PubSub redis channel. + No: Notify player not found. + */ + + @Override + public void execute(CommandSender s, String[] args) { + if (args.length < 2) { + s.sendMessage(Utils.ft("&c/gmsg ")); + return; + } + + if (!(s instanceof ProxiedPlayer)) { + s.sendMessage(Utils.ft("&cYou are not a player!")); + return; + } + + String sender = s.getName(); + String targetName = null; + ProxiedPlayer senderPlayer = (ProxiedPlayer) s; + + if (args[0].equalsIgnoreCase(senderPlayer.getName())) { + s.sendMessage(Utils.ft("&cYou cannot message yourself!")); + return; + } + + try { + ProxiedPlayer target = null; + + //Try to direct match player name with all players on this proxy instance. + if ((target = ProxyServer.getInstance().getPlayer(args[0])) == null) { + + //Prefix tab matching, if they haven't typed the full name we may still find a match + String search = args[0].toLowerCase(); + for (ProxiedPlayer player : ProxyServer.getInstance().getPlayers()) { + if (player.getName().toLowerCase().startsWith(search)) { + target = player; + targetName = player.getName(); + break; + } + } + + if (target == null) { + //The player we are searching for is not on this bungee instance, try search on redis + + RedisManager mngr = Bungee.getRedisManager(); + + //We fail to find a direct match on redis + if (!mngr.isPlayerOnline(args[0])) { + + //Try a partial match search + for (String redisName : mngr.getRedisAPI().getHumanPlayersOnline()) { + if (redisName.startsWith(search)) { + targetName = redisName; + break; + } + } + } else { + //the player is online, but on another server so send a pub sub msg. + targetName = args[0]; + } + } + } + + //If the player couldn't be found locally, or via redis let the player know. + if (target == null && targetName == null) { + Utils.msg(s, "&7That player is not on the server!"); + return; + } + + else if (targetName != null && targetName.equalsIgnoreCase(senderPlayer.getName())) { + s.sendMessage(Utils.ft("&cYou cannot message yourself!")); + return; + } + + else if (target != null && target.getName().equalsIgnoreCase(senderPlayer.getName())) { + s.sendMessage(Utils.ft("&cYou cannot message yourself!")); + return; + } + + //Build the message + String msg = ""; + for (int i = 1; i < args.length; i++) { + msg += (i > 1 ? " " : "") + args[i]; + } + + + if (target != null) { + //player is on same server so we can message them directly + //This method is deprecated, but still has use in local instances so this should be reviewed. TODO. + String url = ""; + for (String string : msg.split(" ")) { + if (string.matches("^((https?|ftp)://|(www|ftp)\\.)?[a-z0-9-]+(\\.[a-z0-9-]+)+([/?].*)?$")) { + url = string; + break; + } + } + + //Send GMSG to recipient + BaseComponent[] a = new ComponentBuilder(Lang.GMSG.f("&7[" + Utils.getColoredName(senderPlayer) + "&7 -> me] &r" + msg)) + .event(url.isEmpty() ? new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/gmsg " + sender + " ") + : new ClickEvent(ClickEvent.Action.OPEN_URL, url)) + .create(); + target.sendMessage(a); + + //Send GMSG to sender + a = new ComponentBuilder(Lang.GMSG.f("&7[me&7 -> " + Utils.getColoredName(target) + "&7] &r" + msg)) + .event(url.isEmpty() ? new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/gmsg " + target.getName() + " ") + : new ClickEvent(ClickEvent.Action.OPEN_URL, url)) + .create(); + senderPlayer.sendMessage(a); + + //show the player what they said + Optional userOptional; + if (target == null) { + userOptional = Optional.empty(); + } + else { + userOptional = Bungee.getUserManager().getLoadedUser(target.getUniqueId()); + } + + //Color the target name + String coloredName; + if (userOptional.isPresent()) { + coloredName = Utils.f(userOptional.get().getUserRank().getColor() + target.getName()); + } + else { + coloredName = "&8" + target.getName(); + } + + Optional senderOptional = Bungee.getUserManager().getLoadedUser(senderPlayer.getUniqueId()); + + //COlor the senders name + String coloredSenderName; + if (senderOptional.isPresent()) { + coloredSenderName = Utils.f(senderOptional.get().getUserRank().getColor() + senderPlayer.getName()); + } + else { + coloredSenderName = "&8" + senderPlayer.getName(); + } + + //send on social spy + sendSocialSpy(senderPlayer, coloredSenderName, coloredName, targetName, msg); + + //Check if sender is staff, if so sent help_close if needed, this should now let staff get tokens for local reqs. + closeHelp(senderPlayer, target.getName()); + + return; + } + + else { + //player on another redis bungee instance + Map map = new HashMap<>(); + map.put("target", targetName); + map.put("sender", senderPlayer.getName()); + Optional userOptional = Bungee.getUserManager().getLoadedUser(senderPlayer.getUniqueId()); + String coloredName; + if (userOptional.isPresent()) { + coloredName = userOptional.get().getUserRank().getColor() + senderPlayer.getName(); + } else { + coloredName = "&8" + sender; + } + map.put("senderCol", coloredName); + map.put("message", msg); + String ser = Bungee.getRedisManager().serialize(DataType.GMSG, map); + //Send this serialised object to other redis servers for handling... + Bungee.getRedisManager().sendMessage(ser); + } + + //show the player what they said + Optional userOptional; + if (targetName == null) { + userOptional = Optional.empty(); + } + else { + userOptional = Bungee.getUserManager().getLoadedUser(Bungee.getRedisManager().getRedisAPI().getUuidFromName(targetName)); + } + + String coloredName; + if (userOptional.isPresent()) { + coloredName = Utils.f(userOptional.get().getUserRank().getColor() + targetName); + } + else { + coloredName = "&8" + targetName; + } + + Optional senderOptional = Bungee.getUserManager().getLoadedUser(senderPlayer.getUniqueId()); + + String coloredSenderName; + if (senderOptional.isPresent()) { + coloredSenderName = Utils.f(senderOptional.get().getUserRank().getColor() + senderPlayer.getName()); + } + else { + coloredSenderName = "&8" + senderPlayer.getName(); + } + + String from = Lang.GMSG.f("&7[me -> " + Utils.f(coloredName) + "&7] &r" + msg); + + String url = ""; + for (String string : msg.split(" ")) { + if (string.matches("^((https?|ftp)://|(www|ftp)\\.)?[a-z0-9-]+(\\.[a-z0-9-]+)+([/?].*)?$")) { + url = string; + break; + } + } + + //Send GMSG to recipient + BaseComponent[] a = new ComponentBuilder(Lang.GMSG.f("&7[me &7-> " + Utils.f(coloredName) + "&r&7] &r" + msg)) + .event(url.isEmpty() ? new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/gmsg " + targetName + " ") + : new ClickEvent(ClickEvent.Action.OPEN_URL, url)) + .create(); + + senderPlayer.sendMessage(a); + + sendSocialSpy(senderPlayer, coloredSenderName, coloredName, targetName, msg); + + //Check if sender is staff, if so sent help_close if needed + closeHelp(senderPlayer, targetName); + + } catch (Exception exception) { + exception.printStackTrace(); + } + } + + private void sendSocialSpy(ProxiedPlayer senderPlayer, String coloredSenderName, String coloredName, String targetName, String msg){ + //regardless of where the recipient is we should socialspy this on the staff chat channel + String ss = Lang.GSPY.f("&7[" + coloredSenderName + "&7 -> " + coloredName + "&7] &r" + msg); + + Map socialSpySerialized = new HashMap<>(); + socialSpySerialized.put("message", ss); + socialSpySerialized.put("exclude", ChatColor.stripColor(targetName) + "," + senderPlayer.getName()); + Bungee.getRedisManager().sendMessage(Bungee.getRedisManager().serialize(DataType.SOCIALSPY, socialSpySerialized)); + } + + private void closeHelp(ProxiedPlayer player, String targetName) { + //Check if sender is staff, if so sent help_close if needed + if (player.hasPermission("staffchat.use") && HelpLog.helpTicketExists(targetName)) { + Optional helperUserOptional = Bungee.getUserManager().getLoadedUser(player.getUniqueId()); + String helperName = helperUserOptional.isPresent() ? helperUserOptional.get().getColoredName(player) : player.getName(); + Map map = new HashMap<>(); + map.put("helper", helperName); + map.put("helperUUID", player.getUniqueId().toString()); + map.put("sender", targetName); + String ser = Bungee.getRedisManager().serialize(DataType.HELP_CLOSE, map); + Bungee.getRedisManager().sendMessage(ser); + } + } + + @Override + public Iterable onTabComplete(CommandSender sender, String[] args) { + return TabComplete.onTabComplete(sender, args); + } +} \ No newline at end of file diff --git a/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/commands/HelpCommand.java b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/commands/HelpCommand.java new file mode 100644 index 0000000..aa1a0a5 --- /dev/null +++ b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/commands/HelpCommand.java @@ -0,0 +1,199 @@ +package net.grandtheftmc.Bungee.commands; + +import net.grandtheftmc.Bungee.Bungee; +import net.grandtheftmc.Bungee.Lang; +import net.grandtheftmc.Bungee.Utils; +import net.grandtheftmc.Bungee.help.data.HelpCategory; +import net.grandtheftmc.Bungee.redisbungee.data.DataType; +import net.grandtheftmc.Bungee.utils.RequestRateLimiter; +import net.grandtheftmc.Bungee.utils.TabComplete; +import net.md_5.bungee.api.ChatColor; +import net.md_5.bungee.api.CommandSender; +import net.md_5.bungee.api.chat.ClickEvent; +import net.md_5.bungee.api.chat.ComponentBuilder; +import net.md_5.bungee.api.chat.TextComponent; +import net.md_5.bungee.api.connection.ProxiedPlayer; +import net.md_5.bungee.api.plugin.Command; + +import java.util.*; +import java.util.regex.Pattern; + +public class HelpCommand extends Command { + + private static final Pattern PATTERN = Pattern.compile(".*(?:h.?ck).*", Pattern.CASE_INSENSITIVE); + + //Allow players to still bypass help if the topic for help isn't listed. + private HashMap bypassHelp = new HashMap<>(); + + /* + Redis procedure: + ---------------- + 1) Forward the help request to the staff chat of all staff members across all bungee instances using redis. + 2) Clicking on the message should allow the staff member to reply by prompting /gmsg ... + */ + + public HelpCommand() { + super("help", null, "helpop", "ask", "question", "howto", "admin", "mod"); + } + + @Override + public void execute(CommandSender s, String[] args) { + if (!(s instanceof ProxiedPlayer)) { + //It doesn't make sense for the console to ask for help. + return; + } + + ProxiedPlayer player = (ProxiedPlayer) s; + + if (args.length == 0) { + player.sendMessage(Lang.HELP.f("&7Try something like this: &a/help how do I use my car?")); + //Bungee.getInstance().getHelpCore().getMainHelpMenu().stream().forEach(bc -> player.sendMessage(bc)); + return; + } + + String msg = String.join(" ", args); + + if (args.length == 1) { + + if (args[0].equalsIgnoreCase("reload")) { + //reload the configuration + if (player.hasPermission("gtm.generic.admin")) { + //reload, for this perm only + Bungee.getInstance().getHelpCore().reload(); + player.sendMessage(Utils.f("&aHelp configuration file has been reloaded.")); + } + + return; + } + + if (args[0].equalsIgnoreCase("view-null")) { + //Workaround to prevent clicking on the last list items + return; + } + + HelpCategory cat = Bungee.getInstance().getHelpCore().getAssociatedCategory(args[0].toLowerCase()); + + if (args[0].equalsIgnoreCase("help")) { + //link to main help menu + Bungee.getInstance().getHelpCore().getMainHelpMenu().forEach(player::sendMessage); + return; + } + + if (cat != null) { + cat.getDisplay().forEach(player::sendMessage); + } else { + + if (msg.split(" ").length <= 1) { + player.sendMessage(Lang.HELP.f("&7Only one word? Try to describe your problem more accurately.")); + return; + } + + } + + } + + if(PATTERN.matcher(msg).find()) { + player.sendMessage(new ComponentBuilder(Utils.f(" &c&lWATCHDAWG&8&l> &7Please use &f/report &7<&fplayer&7> <&freason&7>")).create()); + return; + } + + + boolean skipCheck = true; + + /*if(bypassHelp.containsKey(player.getUniqueId())){ + long last = bypassHelp.get(player.getUniqueId()); + long ms = System.currentTimeMillis() - last; + if (ms <= (1000 * 60)) { + //if less than a minute ago allow it + skipCheck = true; + } + }*/ + + if (skipCheck) { + bypassHelp.remove(player.getUniqueId()); + } + + if (!skipCheck) { + + List cats = new ArrayList<>(); + Set existingCats = new HashSet<>(); + + //check for matches + for (String a : args) { + HelpCategory hc = Bungee.getInstance().getHelpCore().getAssociatedCategory(a.toLowerCase()); + + if (hc != null && !existingCats.contains(hc.getSectionName())) { + cats.add(hc); + //prevent duplicates + existingCats.add(hc.getSectionName()); + } + } + + if (!cats.isEmpty()) { + //Prompt them to review help before pushing to staff. + //Your query matches n help topics. + // Click on any of these for further information or do /help. + //If this still hasnt answered your question click HERE to ask a staff member. + ComponentBuilder b = new ComponentBuilder(Bungee.getInstance().getHelpCore().getHelpMatch()); + + for (int i = 0; i < cats.size(); i++) { + HelpCategory hc = cats.get(i); + b.append(hc.getDisplayName()).event(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/help " + hc.getSectionName())); + + + if ((i + 1) != cats.size()) { + //comma delimiters + b.append(", ").color(ChatColor.WHITE); + } + } + + + //add headers + Bungee.getInstance().getHelpCore().getHeader().forEach(h -> player.sendMessage(new ComponentBuilder(Utils.f(h)).create())); + + //matching categories + player.sendMessage(b.create()); + + //generic msg + player.sendMessage(new ComponentBuilder(" " + Bungee.getInstance().getHelpCore().getSendHelp()).event(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/help " + msg)).create()); + + //add footers + Bungee.getInstance().getHelpCore().getFooter().forEach(h -> player.sendMessage(new ComponentBuilder(Utils.f(h)).create())); + + bypassHelp.put(player.getUniqueId(), System.currentTimeMillis()); + + return; + } + } + + if (!RequestRateLimiter.requestCmd(player.getUniqueId())) { + s.sendMessage(Utils.ft("&cYou have issued this command recently, please wait a second.")); + return; + } + + //broadcast to redis + Map map = new HashMap<>(); + map.put("sender", player.getName()); + map.put("server", player.getServer().getInfo().getName()); + map.put("message", msg); + + String ser = Bungee.getRedisManager().serialize(DataType.HELP, map); + //Send this serialised object to other redis servers for handling... + Bungee.getRedisManager().sendMessage(ser); + + player.sendMessage(Lang.HELP.f("&7Your message has been sent to all online staff. Use &a&l\"/gmsg \"&7 to talk to them individually.")); + + // log + String logMessage = "[HELP] " + player.getName() + ": " + msg; + + Map chatLogSerializd = new HashMap<>(); + chatLogSerializd.put("type", "help"); + chatLogSerializd.put("message", logMessage); + chatLogSerializd.put("logname", "help"); + Bungee.getRedisManager().sendMessage(Bungee.getRedisManager().serialize(DataType.LOG, chatLogSerializd)); + } + + public Iterable onTabComplete(CommandSender sender, String[] args) { + return TabComplete.onTabComplete(sender, args); + } +} diff --git a/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/commands/HubCommand.java b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/commands/HubCommand.java new file mode 100644 index 0000000..b8476c6 --- /dev/null +++ b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/commands/HubCommand.java @@ -0,0 +1,69 @@ +package net.grandtheftmc.Bungee.commands; + +import net.grandtheftmc.Bungee.Bungee; +import net.grandtheftmc.Bungee.Utils; +import net.grandtheftmc.Bungee.users.User; +import net.grandtheftmc.Bungee.users.UserRank; +import net.grandtheftmc.ServerType; +import net.grandtheftmc.ServerTypeId; +import net.grandtheftmc.jedis.JedisChannel; +import net.grandtheftmc.jedis.JedisManager; +import net.grandtheftmc.jedis.message.ServerQueueMessage; +import net.md_5.bungee.api.CommandSender; +import net.md_5.bungee.api.config.ServerInfo; +import net.md_5.bungee.api.connection.ProxiedPlayer; +import net.md_5.bungee.api.plugin.Command; + +import java.util.Optional; + +public class HubCommand extends Command { + + private final JedisManager jedisManager; + private final String command; + + public HubCommand(JedisManager jedisManager, String command) { + super(command, null); + this.jedisManager = jedisManager; + this.command = command; + } + + @Override + public void execute(CommandSender s, String[] args) { + if (!(s instanceof ProxiedPlayer)) return; + ProxiedPlayer player = (ProxiedPlayer) s; +// player.connect(Utils.getRandomHub()); + ServerInfo info = null; + ServerType type = ServerType.GLOBAL; + + int id = -1; + if(command.toLowerCase().startsWith("hub")) { + type = ServerType.HUB; + info = Utils.getRandomHub(); + id = Integer.parseInt(info.getName().toLowerCase().split("hub")[1]); + } + + if(command.toLowerCase().startsWith("vice")) { + type = ServerType.VICE; + info = Utils.getRandomServer(command); + id = Integer.parseInt(info.getName().toLowerCase().split("vice")[1]); + } + if(command.toLowerCase().startsWith("gtm") || command.toLowerCase().startsWith("gta")) { + type = ServerType.GTM; + info = Utils.getRandomServer(command); + id = Integer.parseInt(info.getName().toLowerCase().split("gtm")[1]); + } + + if(id == -1 || info == null || type == ServerType.GLOBAL) { + s.sendMessage(Utils.ft("&cServer couldn't be found.")); + return; + } + + Optional user = Bungee.getUserManager().getLoadedUser(player.getUniqueId()); + UserRank rank = user.map(User::getUserRank).orElse(UserRank.DEFAULT); + this.jedisManager.getModule(JedisChannel.SERVER_QUEUE).sendMessage( + new ServerQueueMessage(player.getUniqueId(), rank.name(), new ServerTypeId(type, id)), + new ServerTypeId(ServerType.OPERATOR, -1) + ); + } + +} \ No newline at end of file diff --git a/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/commands/MotdCommand.java b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/commands/MotdCommand.java new file mode 100644 index 0000000..ed16dd8 --- /dev/null +++ b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/commands/MotdCommand.java @@ -0,0 +1,76 @@ +package net.grandtheftmc.Bungee.commands; + +import net.grandtheftmc.Bungee.Bungee; +import net.grandtheftmc.Bungee.Utils; +import net.grandtheftmc.Bungee.redisbungee.data.DataType; +import net.md_5.bungee.api.CommandSender; +import net.md_5.bungee.api.connection.ProxiedPlayer; +import net.md_5.bungee.api.plugin.Command; + +import java.util.HashMap; +import java.util.Map; + +public class MotdCommand extends Command { + + public MotdCommand() { + super("motd", "motd", "gmotd", "bungeemotd"); + } + + /* + Redis procedure: + ---------------- + + Reload: + ------- + 1) Send a pub sub message to all instances to force a reload of the MOTD configurations. + + Set: + ---- + 1) Send a pub sub message to all instances to set a new MOTD message. + */ + + @Override + public void execute(CommandSender s, String[] args) { + + if (args.length == 0) { + s.sendMessage(Utils.ft("&7/motd reload")); + s.sendMessage(Utils.ft("&7/motd set ")); + return; + } + + switch (args[0]) { + + case "reload": + Map map = new HashMap<>(); + map.put("reload", true); + map.put("sender", (s instanceof ProxiedPlayer) ? ((ProxiedPlayer) s).getName() : "CONSOLE"); + + String ser = Bungee.getRedisManager().serialize(DataType.MOTD, map); + //Send this serialised object to other redis servers for handling... + //The player/console is notified on the listener end.. + Bungee.getRedisManager().sendMessage(ser); + return; + + case "set": + String msg = ""; + for (int i = 1; i < args.length; i++) + msg += args[i] + ' '; + if (msg.endsWith(" ")) + msg = msg.substring(0, msg.length() - 1); + + map = new HashMap<>(); + map.put("motd", msg); + map.put("sender", (s instanceof ProxiedPlayer) ? ((ProxiedPlayer) s).getName() : "CONSOLE"); + + ser = Bungee.getRedisManager().serialize(DataType.MOTD, map); + //Send this serialised object to other redis servers for handling... + //The player/console is notified on the listener end.. + Bungee.getRedisManager().sendMessage(ser); + return; + + default: + break; + } + + } +} \ No newline at end of file diff --git a/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/commands/PermsCommand.java b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/commands/PermsCommand.java new file mode 100644 index 0000000..ca7642b --- /dev/null +++ b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/commands/PermsCommand.java @@ -0,0 +1,113 @@ +package net.grandtheftmc.Bungee.commands; + +import net.grandtheftmc.Bungee.Bungee; +import net.grandtheftmc.Bungee.Utils; +import net.grandtheftmc.Bungee.database.BaseDatabase; +import net.grandtheftmc.Bungee.redisbungee.data.DataType; +import net.grandtheftmc.Bungee.users.UserRank; +import net.grandtheftmc.Bungee.utils.TabComplete; +import net.md_5.bungee.api.CommandSender; +import net.md_5.bungee.api.connection.ProxiedPlayer; +import net.md_5.bungee.api.plugin.Command; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +public class PermsCommand extends Command { + + public PermsCommand() { + super("gperms", "gperms", "gpermissions", "globalperms", "globalpermissions"); + } + + /* + Redis procedure: + ---------------- + - Send out a request to reload all configurations + - Checking userank, direct database lookup + - Perms update + */ + + @Override + public void execute(CommandSender s, String[] args) { + if (args.length == 0) { + s.sendMessage(Utils.ft("&7/gperms reload")); + s.sendMessage(Utils.ft("&7/gperms check ")); + s.sendMessage(Utils.ft("&7/gperms update ")); + return; + } + + String sender = s instanceof ProxiedPlayer ? s.getName() : "CONSOLE"; + + switch (args[0].toLowerCase()) { + case "reload": + Map map = new HashMap<>(); + map.put("reload", true); + map.put("sender", sender); + String ser = Bungee.getRedisManager().serialize(DataType.PERMS, map); + Bungee.getRedisManager().sendMessage(ser); + return; + + case "check": + if (args.length != 2) { + s.sendMessage(Utils.ft("&7/gperms check ")); + return; + } + Bungee.getInstance().getProxy().getScheduler().runAsync(Bungee.getInstance(), () -> { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("SELECT lastname,userrank FROM users WHERE lastname=?;")) { + statement.setString(1, args[1]); + try (ResultSet result = statement.executeQuery()) { + if (result.isBeforeFirst()) { + if (result.isBeforeFirst()) { + result.next(); + UserRank ur = UserRank.getUserRank(result.getString("userrank")); + s.sendMessage(Utils.ft("&7User " + args[1] + " rank: " + ur.getColoredName())); + } else { + s.sendMessage(Utils.ft("&7The user " + args[1] + " does not exist.")); + } + } + } + } + } catch (SQLException e) { + e.printStackTrace(); + } + }); + return; + + case "update": + if (args.length != 2) { + s.sendMessage(Utils.ft("&7/gperms update ")); + return; + } + + UUID u = Bungee.getRedisManager().getRedisAPI().getUuidFromName(args[1]); + if (u == null || !Bungee.getRedisManager().getRedisAPI().isPlayerOnline(u)) { + Utils.msg(s, "&7That player is not online!"); + return; + } + + map = new HashMap<>(); + map.put("sender", sender); + map.put("target", args[1]); + ser = Bungee.getRedisManager().serialize(DataType.PERMS, map); + Bungee.getRedisManager().sendMessage(ser); + return; + + default: + s.sendMessage(Utils.ft("&7/gperms reload")); + s.sendMessage(Utils.ft("&7/gperms check ")); + s.sendMessage(Utils.ft("&7/gperms update ")); + return; + } + } + + public Iterable onTabComplete(CommandSender sender, String[] args) { + return TabComplete.onTabComplete(sender, args); + } + +} \ No newline at end of file diff --git a/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/commands/PlaytimeCommand.java b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/commands/PlaytimeCommand.java new file mode 100644 index 0000000..2b332d3 --- /dev/null +++ b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/commands/PlaytimeCommand.java @@ -0,0 +1,48 @@ +package net.grandtheftmc.Bungee.commands; + +import net.grandtheftmc.Bungee.Bungee; +import net.grandtheftmc.Bungee.Lang; +import net.grandtheftmc.Bungee.users.User; +import net.grandtheftmc.Bungee.users.UserRank; +import net.grandtheftmc.Bungee.utils.PlaytimeManager; +import net.md_5.bungee.api.CommandSender; +import net.md_5.bungee.api.connection.ProxiedPlayer; +import net.md_5.bungee.api.plugin.Command; + +import java.util.Optional; + +public class PlaytimeCommand extends Command { + + public PlaytimeCommand() { + super("playtime", "playtime.admin", "playtime"); + } + + /* + MySQL DB: + --------- + Typical Row: + + UUID - UUID of player. + Username - Username of player. + Session Time - Time, in MS that the player was connected to this proxy. + Date Time - System time in MS upon disconnect, used to purge old playtime records. + */ + + @Override + public void execute(CommandSender s, String[] args) { + if (!(s instanceof ProxiedPlayer)) return; + + ProxiedPlayer player = (ProxiedPlayer) s; + + //Don't allow non-admins to use this command. + Optional userOptional = Bungee.getUserManager().getLoadedUser(player.getUniqueId()); + if (!userOptional.isPresent() || !userOptional.get().isRank(UserRank.ADMIN)) { + player.sendMessage(Lang.NOPERM.st()); + return; + } + + Bungee.getUserManager().getSortedUsers().forEach(user -> { + PlaytimeManager.lookupPlaytime(player, user.getUsername()); + }); + } +} \ No newline at end of file diff --git a/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/commands/SeenCommand.java b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/commands/SeenCommand.java new file mode 100644 index 0000000..225e8ed --- /dev/null +++ b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/commands/SeenCommand.java @@ -0,0 +1,95 @@ +package net.grandtheftmc.Bungee.commands; + +//import fr.Alphart.BAT.Utils.EnhancedDateFormat; +import net.grandtheftmc.Bungee.Bungee; +import net.grandtheftmc.Bungee.Utils; +import net.grandtheftmc.Bungee.utils.RequestRateLimiter; +import net.grandtheftmc.Bungee.utils.TabComplete; +import net.md_5.bungee.api.CommandSender; +import net.md_5.bungee.api.ProxyServer; +import net.md_5.bungee.api.connection.ProxiedPlayer; +import net.md_5.bungee.api.plugin.Command; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; +import java.util.stream.Collectors; + +public class SeenCommand extends Command { + +// private final EnhancedDateFormat dateFormat = new EnhancedDateFormat(true); + + public SeenCommand() { + super("seen", null, "lastonline", "lastlogin"); + } + + /* + Redis procedure: + ---------------- + 1) Checks if player is on the local instance, if not checks redis distributed. + 2) If player is not found online we check the database. Again TODO: limitations on frequency of access calls. + */ + + @Override + public void execute(CommandSender s, String[] args) { + /*if (args.length != 1) { + s.sendMessage(Utils.ft("&c/seen ")); + return; + } + if (!(s instanceof ProxiedPlayer)) { + s.sendMessage(Utils.ft("&cYou are not a player!")); + return; + } + + UUID sender = ((ProxiedPlayer) s).getUniqueId(); + String player = args[0]; + ProxiedPlayer p = ProxyServer.getInstance().getPlayer(player); + + boolean online = p != null || Bungee.getRedisManager().isPlayerOnline(player); + + if (online) { + s.sendMessage(Utils.ft("&7The player &a" + (p != null ? p.getName() : args[0]) + "&7 is &aonline&7!")); + return; + } + + if (!RequestRateLimiter.requestCmd(sender)) { + s.sendMessage(Utils.ft("&cYou have issued this command recently, please wait a second.")); + return; + } + + s.sendMessage(Utils.ft("&7Looking up player &a" + player + "&7 in the database.")); + ProxyServer.getInstance().getScheduler().runAsync(Bungee.getInstance(), () -> { + ResultSet rs = Bungee.getBATSQL().query("select BAT_player,lastlogin from BAT_players where BAT_player='" + player + "';"); + String name1 = null; + Timestamp lastlogin = null; + ProxiedPlayer p1 = ProxyServer.getInstance().getPlayer(sender); + try { + if (rs.isBeforeFirst()) { + rs.next(); + name1 = rs.getString("BAT_player"); + lastlogin = rs.getTimestamp("lastlogin"); + } + rs.close(); + } catch (SQLException ignored) { + p1.sendMessage(Utils.ft("&7Oops, something went wrong! Please try again.")); + return; + } + + if (p1 == null) + return; + if (lastlogin == null || name1 == null) { + p1.sendMessage(Utils.ft("&7That player is not in the database!")); + return; + } +// p1.sendMessage(Utils.ft("&7The player &a" + name1 + "&7 last logged in &a" + this.dateFormat.format(lastlogin) + "&7!")); + + });*/ + + } + public Iterable onTabComplete(CommandSender sender, String[] args) { + return TabComplete.onTabComplete(sender, args); + } +} diff --git a/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/commands/ServerCommand.java b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/commands/ServerCommand.java new file mode 100644 index 0000000..292d4f8 --- /dev/null +++ b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/commands/ServerCommand.java @@ -0,0 +1,88 @@ +package net.grandtheftmc.Bungee.commands; + +import net.grandtheftmc.Bungee.Bungee; +import net.grandtheftmc.Bungee.Utils; +import net.grandtheftmc.Bungee.users.User; +import net.grandtheftmc.Bungee.users.UserRank; +import net.grandtheftmc.ServerType; +import net.grandtheftmc.ServerTypeId; +import net.grandtheftmc.jedis.JedisChannel; +import net.grandtheftmc.jedis.JedisManager; +import net.grandtheftmc.jedis.message.ServerQueueMessage; +import net.md_5.bungee.api.CommandSender; +import net.md_5.bungee.api.ProxyServer; +import net.md_5.bungee.api.config.ServerInfo; +import net.md_5.bungee.api.connection.ProxiedPlayer; +import net.md_5.bungee.api.plugin.Command; + +import java.util.Optional; + +public class ServerCommand extends Command { + + private final JedisManager jedisManager; + private final String command; + + public ServerCommand(String command, JedisManager jedisManager) { + super(command); + this.command = command; + this.jedisManager = jedisManager; + } + + /** + * Connects the player to the specific Bungee server. + * @param s Who executes the command. + * @param args The desired server ID to connect to. + */ + @Override + public void execute(CommandSender s, String[] args) { + if (!(s instanceof ProxiedPlayer)) return; + ProxiedPlayer player = (ProxiedPlayer) s; + ServerInfo info = ProxyServer.getInstance().getServerInfo(Bungee.getSettings().getServers().get(this.command)); + if (info == null) { + player.sendMessage(Utils.ft("&cThat server does not exist!")); + return; + } + + if(player.getServer().getInfo().getName().equals(info.getName())) { + player.sendMessage(Utils.ft("&cYou're already connected to this server!")); + return; + } + + int id = -1; + ServerType type = ServerType.OPERATOR; + if(this.command.toLowerCase().startsWith("hub")) { + id = Integer.parseInt(this.command.toLowerCase().split("hub")[1]); + type = ServerType.HUB; + } + + if(this.command.toLowerCase().startsWith("gtm")) { + id = Integer.parseInt(this.command.toLowerCase().split("gtm")[1]); + type = ServerType.GTM; + } + + if(this.command.toLowerCase().startsWith("vice")) { + id = Integer.parseInt(this.command.toLowerCase().split("vice")[1]); + type = ServerType.VICE; + } + + if(this.command.toLowerCase().startsWith("creative")) { + id = Integer.parseInt(this.command.toLowerCase().split("creative")[1]); + type = ServerType.CREATIVE; + } + + if(type == ServerType.OPERATOR || id == -1) return; + +// player.connect(info); + Optional user = Bungee.getUserManager().getLoadedUser(player.getUniqueId()); + UserRank rank = user.map(User::getUserRank).orElse(UserRank.DEFAULT); + this.jedisManager.getModule(JedisChannel.SERVER_QUEUE).sendMessage( + new ServerQueueMessage(player.getUniqueId(), rank.name(), new ServerTypeId(type, id)), + new ServerTypeId(ServerType.OPERATOR, -1) + ); + } + + public Iterable onTabComplete(CommandSender sender, String[] args) { + return ProxyServer.getInstance().getServers().keySet(); + } + +} diff --git a/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/commands/StaffChatCommand.java b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/commands/StaffChatCommand.java new file mode 100644 index 0000000..1ed89fa --- /dev/null +++ b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/commands/StaffChatCommand.java @@ -0,0 +1,90 @@ +package net.grandtheftmc.Bungee.commands; + +import net.grandtheftmc.Bungee.Bungee; +import net.grandtheftmc.Bungee.Lang; +import net.grandtheftmc.Bungee.Utils; +import net.grandtheftmc.Bungee.redisbungee.data.DataType; +import net.grandtheftmc.Bungee.users.User; +import net.grandtheftmc.Bungee.utils.TabComplete; +import net.md_5.bungee.api.CommandSender; +import net.md_5.bungee.api.ProxyServer; +import net.md_5.bungee.api.connection.ProxiedPlayer; +import net.md_5.bungee.api.plugin.Command; + +import java.util.*; +import java.util.stream.Collectors; + +public class StaffChatCommand extends Command { + + public StaffChatCommand() { + super("staffchat", "staffchat.use", "sc", "staffc", "schat", "adminchat", "adminc", "ac", "achat"); + } + + /* + Redis procedure: + ---------------- + 1) Staff chat messages should simply be forwarded to all redis instances. + */ + + @Override + public void execute(CommandSender s, String[] args) { + //Allow to chat in staff chat via console + if (!(s instanceof ProxiedPlayer)) { + StringBuilder msg = new StringBuilder(); + for (int i = 0; i < args.length; i++) + msg.append(i > 0 ? " " : "").append(args[i]); + //broadcast to redis + Map map = new HashMap<>(); + map.put("sender", "CONSOLE"); + map.put("message", msg.toString()); + + String ser = Bungee.getRedisManager().serialize(DataType.STAFFCHAT, map); + //Send this serialised object to other redis servers for handling... + Bungee.getRedisManager().sendMessage(ser); + return; + } + + + ProxiedPlayer player = (ProxiedPlayer) s; + //This list only contains staff anyway. + Optional userOptional = Bungee.getUserManager().getLoadedUser(player.getUniqueId()); + userOptional.ifPresent(user -> { + if (args.length == 0) { + user.toggleStaffChat(); + s.sendMessage(Lang.STAFF.ft("&7You turned " + (user.getStaffChat() ? "&a&lon" : "&c&loff") + "&7 staff chat!")); + return; + } + + if ("on".equalsIgnoreCase(args[0])) { + user.setStaffChat(true); + s.sendMessage(Lang.STAFF.ft("&7You turned &a&lon&7 staff chat!")); + return; + } + + if ("off".equalsIgnoreCase(args[0])) { + user.setStaffChat(false); + s.sendMessage(Lang.STAFF.ft("&7You turned &c&loff&7 staff chat!")); + return; + } + + String msg = ""; + for (int i = 0; i < args.length; i++) + msg = (i > 0 ? " " : "") + args[i]; + + //broadcast to redis + Map map = new HashMap<>(); + map.put("sender", player.getName()); + map.put("message", msg); + + String ser = Bungee.getRedisManager().serialize(DataType.STAFFCHAT, map); + //Send this serialised object to other redis servers for handling... + Bungee.getRedisManager().sendMessage(ser); + }); + } + + + //Autocompleting playing names accross the redis network. + public Iterable onTabComplete(CommandSender sender, String[] args) { + return TabComplete.onTabComplete(sender, args); + } +} diff --git a/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/database/BaseDatabase.java b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/database/BaseDatabase.java new file mode 100644 index 0000000..947c73c --- /dev/null +++ b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/database/BaseDatabase.java @@ -0,0 +1,53 @@ +package net.grandtheftmc.Bungee.database; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.SQLException; + +/** + * A generic database handler that acts as a singleton so we can reference it + * anywhere. + * + * @author sbahr + */ +public class BaseDatabase extends DatabaseHandler { + + /** Singleton instance for this class */ + private static BaseDatabase instance; + + /** + * Private constructor as singleton's cannot be instantiated. + */ + private BaseDatabase() { + // Note: DatabaseHandler doesn't have a constructor for a reason + } + + /** + * Get the singleton instance of this class. + *

+ * This allows you to call {@link #getConnection()}. + *

+ * + * @return The instance of this database. + */ + public static BaseDatabase getInstance() { + if (instance == null) { + instance = new BaseDatabase(); + } + + return instance; + } + + public static boolean runCustomQuery(String query) { + try (Connection connection = getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement(query)) { + statement.execute(); + } + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + + return true; + } +} \ No newline at end of file diff --git a/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/database/DatabaseHandler.java b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/database/DatabaseHandler.java new file mode 100644 index 0000000..8575df3 --- /dev/null +++ b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/database/DatabaseHandler.java @@ -0,0 +1,193 @@ +package net.grandtheftmc.Bungee.database; + +import java.io.PrintWriter; +import java.sql.Connection; +import java.sql.SQLException; + +import com.zaxxer.hikari.HikariDataSource; + +import net.grandtheftmc.Bungee.database.component.Database; +import net.grandtheftmc.Bungee.database.component.DatabaseCredentials; + +/** + * A generic database handler that holds a HikariCP data source so we can have + * multiple database connection. + * + * Note: This should be init() with either the Plugin/Config path to load + * settings, or can be init() with just database credentials, which uses default + * HikariCP settings. + * + * @author sbahr + */ +public class DatabaseHandler implements Database { + + /** The default MySQL driver */ + private static final String DEFAULT_MYSQL_DRIVER = "com.mysql.jdbc.Driver"; + /** The database credentials */ + private DatabaseCredentials dbCreds; + /** Data source connection pool from HikariCP */ + private HikariDataSource hikariSource = new HikariDataSource(); + + // NOTE: HikariCP performs best at fixed pool size, minIdle=maxConns + // https://github.com/brettwooldridge/HikariCP + + /** How many minimum idle connections should we always have (2) */ + protected int minIdle = 2; + /** How many max connections should exist in pool (2) */ + protected int maxPoolSize = 2; + /** How long, in millis, we stop waiting for new connection (15 secs) */ + protected int connectionTimeoutMs = 15 * 1000; + /** How long, in millis, before connections timeout (45 secs) */ + protected int idleTimeoutMs = 45 * 1000; + /** How long, in millis, this connection can be alive for (30 mins) */ + protected int maxLifetimeMs = 30 * 60 * 1000; + /** How long, in millis, can a connection be gone from a pool (4 secs) */ + protected int leakDetectionThresholdMs = 4 * 1000; + /** The ping alive query */ + protected String connectionTestQuery = "SELECT 1"; + /** Should the connection cache prepared statements */ + protected boolean cachePreparedStatements = true; + /** Number of prepared statements to cache per connection */ + protected int preparedStatementCache = 250; + /** Max number of prepared statements to have */ + protected int maxPreparedStatementCache = 2048; + /** The log writer for Hikari */ + protected PrintWriter logWriter = new PrintWriter(System.out); + + /** + * Initialize the handler with the specified database credentials. + *

+ * Sets up the configuration for the connection pool and default settings. + *

+ * + * @param dbCreds - the credentials for the database + * @param driver - the driver class + */ + public void init(DatabaseCredentials dbCreds, String driver) { + this.dbCreds = dbCreds; + + // set the driver name for the connection driver + hikariSource.setDriverClassName(driver); + + // assume host/port combo together, or could just be without port + String connURL = dbCreds.getHost(); + + // if a port is defined + if (dbCreds.getPort() > 0) { + connURL = dbCreds.getHost() + ":" + dbCreds.getPort(); + } + + // set the jdbc url, note the character encoding + // https://stackoverflow.com/questions/3040597/jdbc-character-encoding + hikariSource.setJdbcUrl("jdbc:mysql://" + connURL + "/" + dbCreds.getName() + "?characterEncoding=UTF-8"); + + // set user/pass + hikariSource.setUsername(dbCreds.getUser()); + hikariSource.setPassword(dbCreds.getPass()); + + /** General conf settings for hikari */ + // works best when minIdle=maxPoolSize + hikariSource.setMinimumIdle(minIdle); + hikariSource.setMaximumPoolSize(maxPoolSize); + + // how long to wait, for a new connection + hikariSource.setConnectionTimeout(connectionTimeoutMs); + // how long before idle connection is destroyed + hikariSource.setIdleTimeout(idleTimeoutMs); + // how long can a connection exist + hikariSource.setMaxLifetime(maxLifetimeMs); + // how long connection is away from a pool before saying uh oh + hikariSource.setLeakDetectionThreshold(leakDetectionThresholdMs); + // test query to confirm alive + hikariSource.setConnectionTestQuery(connectionTestQuery); + // should we cache prepared statements + hikariSource.addDataSourceProperty("cachePrepStmts", "" + cachePreparedStatements); + // the size of the prepared statement cache + hikariSource.addDataSourceProperty("prepStmtCacheSize", "" + preparedStatementCache); + // the maximum cache limit + hikariSource.addDataSourceProperty("prepStmtCacheSqlLimit", "" + maxPreparedStatementCache); + + // MUST set log writer + try { + hikariSource.setLogWriter(new PrintWriter(System.out)); + } + catch (SQLException e) { + e.printStackTrace(); + } + } + + /** + * Initialize the database handler given the credentials. + * + * @param credentials - the login details to this database + */ + protected void init(DatabaseCredentials credentials) { + this.init(credentials, DEFAULT_MYSQL_DRIVER); + } + + /** + * Load the settings for HikariCP from the yaml config and stores them + * locally in the object, then initializes the database handler. + */ + public void init(String host, int port, String dbName, String user, String pass) { +// +// String host = config.getString(path + ".host", "localhost"); +// int port = config.getInt(path + ".port", 3306); +// String dbName = config.getString(path + ".database", "hyphenical"); +// String username = config.getString(path + ".user", "user"); +// String password = config.getString(path + ".password", "pass123"); +// +// // connection stats +// int minIdle = config.getInt(path + ".min-idle", 2); +// int maxConns = config.getInt(path + ".max-conn", 2); +// +// // load local fields +// this.minIdle = minIdle < 0 ? 1 : minIdle; +// this.maxPoolSize = maxConns < 1 ? 1 : maxConns; +// +// // create database credentials + DatabaseCredentials creds = new DatabaseCredentials(host, port, dbName, user, pass); + +// // initialize hikari cp + init(creds); + } + + /** + * Close HikariCP connection pool, and all the connections. + *

+ * Note: This should be called whenever the plugin turns off! + *

+ */ + public void close() { + if (hikariSource != null && !hikariSource.isClosed()) { + hikariSource.close(); + } + } + + /** + * {@inheritDoc} + */ + @Override + public DatabaseCredentials getCredentials() { + return dbCreds; + } + + /** + * {@inheritDoc} + */ + @Override + public Connection getConnection() { + if (hikariSource != null) { + try { + Connection conn = hikariSource.getConnection(); + return conn; + } + catch (Exception e) { + System.out.println("[DatabaseHandler] Unable to grab a connection from the connection pool!"); + e.printStackTrace(); + } + } + + return null; + } +} diff --git a/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/database/component/Database.java b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/database/component/Database.java new file mode 100644 index 0000000..1c7e027 --- /dev/null +++ b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/database/component/Database.java @@ -0,0 +1,26 @@ +package net.grandtheftmc.Bungee.database.component; + +import java.sql.Connection; + +/** + * An interface that represents a database (and it's credentials). + * + * @author sbahr + */ +public interface Database { + + /** + * Get the credentials for the database. + * + * @return The credentials for the database. + */ + DatabaseCredentials getCredentials(); + + /** + * Get the connection for the database. + * + * @return The connection for the database. + */ + Connection getConnection(); + +} diff --git a/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/database/component/DatabaseCredentials.java b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/database/component/DatabaseCredentials.java new file mode 100644 index 0000000..52c737f --- /dev/null +++ b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/database/component/DatabaseCredentials.java @@ -0,0 +1,112 @@ +package net.grandtheftmc.Bungee.database.component; + +/** + * Represents an immutable data object containing information about a connection + * to the database. + * + * @author sbahr + */ +public class DatabaseCredentials { + + /** The host of the db, ex: example.com */ + private final String host; + /** The port associated, ex: 3306 */ + private final int port; + /** The name of the database to use, ex: test_db */ + private final String dbName; + /** The name of the user that has access to the db, ex: user123 */ + private final String dbUser; + /** The password for the user, ex: pass123 */ + private final String dbPass; + + /** + * Construct a new DatabaseCredentials object. + * + * @param host - the host of the db, ex: example.com + * @param port - the port for the db, ex: 3306 + * @param dbName - the name of the db to use, ex: test_db + * @param dbUser - the user of the db, ex: user123 + * @param dbPass - the pass for the user, ex: pass123 + */ + public DatabaseCredentials(String host, int port, String dbName, String dbUser, String dbPass) { + this.host = host; + this.port = port; + this.dbName = dbName; + this.dbUser = dbUser; + this.dbPass = dbPass; + } + + /** + * Construct a new DatabaseCredentials object. + *

+ * The port for the host is not defined as an argument and either should be + * supplied in the host argument or use a different constructor. If no port + * is defined, we'll use the default port. + *

+ * + * @param host - the host of the db, ex: example.com + * @param dbName - the name of the db to use, ex: test_db + * @param dbUser - the user of the db, ex: user123 + * @param dbPass - the pass for the user, ex: pass123 + */ + public DatabaseCredentials(String host, String dbName, String dbUser, String dbPass) { + this(host, -1, dbName, dbUser, dbPass); + } + + /** + * Get the host associated with this database credentials. + *

+ * The host URL, ex: www.example.com + *

+ * + * @return The host URL for the database. + */ + public final String getHost() { + return host; + } + + /** + * Get the port number for the database. + *

+ * The port number could be irrelevant if defined in {@link #getHost()}. If + * the port number is -1, use the default port. + *

+ * + * @return The port number for the database. + */ + public final int getPort() { + return port; + } + + /** + * Get the name of the database that we are using. + *

+ * This is the name of the database, as there can be multiple databases + * within one database. + *

+ * + * @return The name of the database we are using. + */ + public final String getName() { + return dbName; + } + + /** + * Get the username of the user that has access to the database. + * + * @return The name for the user that has access to this database. + */ + public final String getUser() { + return dbUser; + } + + /** + * Get the password of the user that has access to the database. + * + * @return The password, associated with the user, that has access to this + * database. + */ + public final String getPass() { + return dbPass; + } +} diff --git a/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/help/HelpCore.java b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/help/HelpCore.java new file mode 100644 index 0000000..d898e09 --- /dev/null +++ b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/help/HelpCore.java @@ -0,0 +1,203 @@ +package net.grandtheftmc.Bungee.help; + +import net.grandtheftmc.Bungee.Bungee; +import net.grandtheftmc.Bungee.Utils; +import net.grandtheftmc.Bungee.help.data.HelpCategory; +import net.md_5.bungee.api.ChatColor; +import net.md_5.bungee.api.chat.BaseComponent; +import net.md_5.bungee.api.chat.ClickEvent; +import net.md_5.bungee.api.chat.ComponentBuilder; +import net.md_5.bungee.config.Configuration; + +import java.util.*; + +/** + * Created by Adam on 05/06/2017. + */ +public class HelpCore { + + /* + Sample Data: (Tab to delimit keys for multiple checks) + ------------------------------------------------------ + + help: + topic: + matches: [] + help: [] + subtopic: + matches: [] + help: [] - Can be empty or not, doesn't matter + + Example: + -------- + + help: + Vehicles: + matches: vehicle,vehicles + help: [] + Jetpacks: + matches: + - 'jetpack' + - 'jetpacks' + help: + - 'Jetpacks are cool.' + - 'Go buy a Jetpack.' + Wingsuits: + matches: + - 'fly' + - 'wingsuit' + - 'wingsuits' + - 'wings' + help: + - 'Wingsuits are faster than JetPacks.' + - 'Or, are they' + + + */ + + /** + * A list of all the root categories. + */ + private List rootCategories; + + private List footer; + private List header; + private String pathString, pathDelim, relatedString, title, cats, helpPath, helpMatch, sendHelp; + + /** + * Map match strings to each help category. + */ + private Map mappings = new HashMap<>(); + + private List mainHelpMenu; + + /** + * Create an instance of the help core, load in all the keywords from a config. + * + * @param io The config to load the help data from. + */ + public HelpCore(Configuration io) { + load(io); + } + + public void reload() { + rootCategories.clear(); + header.clear(); + footer.clear(); + mappings.clear(); + mainHelpMenu = null; + + Bungee.getSettings().setHelpConfig(Utils.loadConfig("help")); + load(Bungee.getSettings().getHelpConfiguration()); + } + + private void load(Configuration io) { + + rootCategories = new ArrayList<>(); + + header = io.getStringList("formatting.header"); + footer = io.getStringList("formatting.footer"); + pathString = Utils.f(io.getString("formatting.path")); + pathDelim = Utils.f(io.getString("formatting.pathdelimiter")); + relatedString = Utils.f(io.getString("formatting.related")); + title = Utils.f(io.getString("formatting.title")); + cats = Utils.f(io.getString("formatting.categories")); + helpPath = Utils.f(io.getString("formatting.helppath")); + helpMatch = Utils.f(io.getString("formatting.helpmatch")); + sendHelp = Utils.f(io.getString("formatting.sendhelp")); + + for (String s : io.getSection("help").getKeys()) { + //Each key here is a root category + + HelpCategory rootCategory = new HelpCategory(io.getSection("help." + s), null, s); + rootCategories.add(rootCategory); + } + + //Now traverse the tree to add all matches + for (HelpCategory rootCat : rootCategories) { + associateMappings(rootCat); + } + } + + private void associateMappings(HelpCategory category) { + //Associate mappings with this category + for (String s : category.getMatches()) { + mappings.put(s, category); + } + + //Now do the same for all children, recursively... + category.getChildren().forEach(this::associateMappings); + } + + /** + * Return the help category associated with this search string. + * + * @param s The string to check for matches. + * @return The associated help category. + */ + public HelpCategory getAssociatedCategory(String s) { + return mappings.get(s.toLowerCase()); + } + + public List getMainHelpMenu() { + if (mainHelpMenu == null) { + mainHelpMenu = new ArrayList<>(); + + //add headers + getHeader().forEach(h -> mainHelpMenu.add(new ComponentBuilder(Utils.f(h)).create())); + mainHelpMenu.add(new ComponentBuilder(" " + title).create()); + + //related Categories + ComponentBuilder builder = new ComponentBuilder(" " + cats); + + for (int i = 0; i < rootCategories.size(); i++) { + HelpCategory cat = rootCategories.get(i); + builder.append(cat.getDisplayName()).event(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/help " + cat.getSectionName())); + + if ((i + 1) != rootCategories.size()) { + //comma delimiters + builder.append(", ").color(ChatColor.WHITE); + } + } + //add categories + mainHelpMenu.add(builder.create()); + + //add footers + getFooter().forEach(h -> mainHelpMenu.add(new ComponentBuilder(Utils.f(h)).create())); + } + + return mainHelpMenu; + } + + public List getFooter() { + return footer; + } + + public List getHeader() { + return header; + } + + public String getPathString() { + return pathString; + } + + public String getPathDelim() { + return pathDelim; + } + + public String getRelatedString() { + return relatedString; + } + + public String getHelpPath() { + return helpPath; + } + + public String getHelpMatch() { + return helpMatch; + } + + public String getSendHelp() { + return sendHelp; + } +} diff --git a/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/help/data/HelpCategory.java b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/help/data/HelpCategory.java new file mode 100644 index 0000000..15b9def --- /dev/null +++ b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/help/data/HelpCategory.java @@ -0,0 +1,224 @@ +package net.grandtheftmc.Bungee.help.data; + +import net.grandtheftmc.Bungee.Bungee; +import net.grandtheftmc.Bungee.Utils; +import net.md_5.bungee.api.ChatColor; +import net.md_5.bungee.api.chat.BaseComponent; +import net.md_5.bungee.api.chat.ClickEvent; +import net.md_5.bungee.api.chat.ComponentBuilder; +import net.md_5.bungee.api.chat.TextComponent; +import net.md_5.bungee.config.Configuration; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Set; + +/** + * Created by Adam on 05/06/2017. + */ +public class HelpCategory { + + /** + * A name representing this section. Eg: Vehicles. + */ + private String sectionName; + + /** + * The display string to show in the menus. + */ + private String displayName; + + /** + * A list of help categories for this node, to support sub-categories. + */ + private List subCategories = new ArrayList<>(); + + /** + * All lowercase, any strings in this set will be used to check matches for automated help. + */ + private String[] matches; + + /** + * A list of help messages for this topic. + */ + private String[] help; + + /** + * The parent help category of this child, null if a root. + */ + private HelpCategory parent; + + /** + * A Path representing the relative location of this category. + * Like Vehicles > Cars > Lambourghini + */ + private BaseComponent[] path; + + /** + * A list of display components, pre-compiled on first request. + */ + private List display; + + public HelpCategory(Configuration section, HelpCategory parent, String name) { + //Always pass in the root of whatever config section we are processing. + + this.sectionName = name; + this.parent = parent; + this.displayName = section.contains("display") ? ChatColor.translateAlternateColorCodes('&', section.getString("display")) : name; + + //Load Help + List helpList = section.getStringList("help"); + help = helpList.toArray(new String[helpList.size()]); + + //Load Matches + List helpMatches = section.getStringList("matches"); + //Ensure all values are lowercase. + helpMatches.forEach(m -> m = m.toLowerCase()); + matches = helpMatches.toArray(new String[helpMatches.size()]); + + //Bungee.getInstance().getLogger().info("Loading category: " + sectionName); + //Bungee.getInstance().getLogger().info("Loading related subcategories..."); + + //Load SubCategories Recursively + for (String s : section.getKeys()) { + //Bungee.getInstance().getLogger().info("Key = " + s); + if (!s.equalsIgnoreCase("help") && !s.equalsIgnoreCase("matches") && !s.equalsIgnoreCase("display")) { + //we have found a sub category + //Bungee.getInstance().getLogger().info("Loading subcategory: " + sectionName + "->" + s); + HelpCategory cat = new HelpCategory(section.getSection(s), this, s); + subCategories.add(cat); + } + } + + //Bungee.getInstance().getLogger().info("Loading category: " + sectionName + " = COMPLETE"); + } + + public List getChildren() { + return subCategories; + } + + public String[] getMatches() { + return matches; + } + + public HelpCategory getParent() { + return parent; + } + + public boolean hasParent() { + return parent != null; + } + + public String getDisplayName(){ + return displayName; + } + + public String getSectionName() { + return sectionName; + } + + /** + * Get a display list of text components to show to the player. + * + * @return A list of display components. + */ + public List getDisplay() { + + if (display == null) { + display = new ArrayList<>(); + + //add headers + Bungee.getInstance().getHelpCore().getHeader().forEach(h -> display.add(new ComponentBuilder(Utils.f(h)).create())); + display.add(getPath()); + + //related Categories + ComponentBuilder builder = new ComponentBuilder(" " + Bungee.getInstance().getHelpCore().getRelatedString()); + + for (int i = 0; i < getChildren().size(); i++) { + HelpCategory cat = getChildren().get(i); + builder.append(cat.getDisplayName()).event(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/help " + cat.getSectionName())); + + if ((i + 1) != getChildren().size()) { + //comma delimiters + builder.append(", ").color(ChatColor.WHITE); + } + } + //add categories + if (!getChildren().isEmpty()) { + //only show related categories if there are children + display.add(builder.create()); + } + + //display remaining help + if (help != null && help.length > 0) { + //Only show help if there's some. + for (String s : help) { + display.add(new ComponentBuilder(" " + ChatColor.translateAlternateColorCodes('&', s)).create()); + } + } + + //add footer + Bungee.getInstance().getHelpCore().getFooter().forEach(h -> display.add(new ComponentBuilder(Utils.f(h)).create())); + } + + return display; + } + + /** + * Get a path display string of the current route for this help category. + * + * @return + */ + public BaseComponent[] getPath() { + if (path == null) { + //build path + List route = new ArrayList<>(); + List displayRoute = new ArrayList<>(); + route.add(sectionName); + displayRoute.add(displayName); + + HelpCategory currentCat = this; + + while (currentCat.hasParent()) { + route.add(currentCat.getParent().getSectionName()); + displayRoute.add(currentCat.getParent().getDisplayName()); + currentCat = currentCat.getParent(); + } + + //Add core help. + route.add("Help"); + displayRoute.add(Bungee.getInstance().getHelpCore().getHelpPath()); + + Collections.reverse(route); + Collections.reverse(displayRoute); + + StringBuilder b = new StringBuilder(); + route.stream().forEach(p -> b.append(p).append(" > ")); + //Trim trailing path markers + b.setLength(b.length() - Bungee.getInstance().getHelpCore().getPathDelim().length()); + + ComponentBuilder builder = new ComponentBuilder(" " + Bungee.getInstance().getHelpCore().getPathString()); + for (int i = 0; i < route.size(); i++) { + String r = route.get(i); + //add displayRoute.get(i) + builder.append(displayRoute.get(i)); + + if ((i + 1) != route.size()) { + //path flow object + builder.event(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/help " + r)); + builder.append(Bungee.getInstance().getHelpCore().getPathDelim()); + } else { + //We don't want them to be able to click the last thing, so use this tag to negate it + builder.event(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/help view-null")); + } + } + + path = builder.create(); + } + + return path; + } + + +} diff --git a/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/listeners/Chat.java b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/listeners/Chat.java new file mode 100644 index 0000000..736b626 --- /dev/null +++ b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/listeners/Chat.java @@ -0,0 +1,46 @@ +package net.grandtheftmc.Bungee.listeners; + +import net.grandtheftmc.Bungee.Bungee; +import net.grandtheftmc.Bungee.Utils; +import net.grandtheftmc.Bungee.users.User; +import net.grandtheftmc.Bungee.users.UserRank; +import net.md_5.bungee.api.connection.ProxiedPlayer; +import net.md_5.bungee.api.event.ChatEvent; +import net.md_5.bungee.api.plugin.Listener; +import net.md_5.bungee.event.EventHandler; + +import java.util.Optional; + +public class Chat implements Listener { + + @EventHandler + public void onChat(ChatEvent event) { + try { + if (event.isCancelled() || !(event.getSender() instanceof ProxiedPlayer)) return; + ProxiedPlayer player = (ProxiedPlayer) event.getSender(); + Optional userOptional = Bungee.getUserManager().getLoadedUser(player.getUniqueId()); + userOptional.ifPresent(user -> { + if (!user.isAuthyVerified()) { + if (event.isCommand() && event.getMessage().startsWith("/authy")) return; + event.setCancelled(true); + return; + } + + if (user.isRank(UserRank.HELPOP)) { + Utils.redisChatLog(player.getName(), event.getMessage()); + } + + if (event.isCommand()) return; + + if (player.hasPermission("staffchat.use") && (user.getStaffChat() || event.getMessage().startsWith("#"))) { + event.setCancelled(true); + String msg = event.getMessage().startsWith("#") ? event.getMessage().substring(1) : event.getMessage(); + Utils.redisStaffChat(user.getColoredName(player), msg); + } + }); + } catch(Exception exception) { + exception.printStackTrace(); + } + } + +} diff --git a/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/listeners/Connect.java b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/listeners/Connect.java new file mode 100644 index 0000000..455bdf4 --- /dev/null +++ b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/listeners/Connect.java @@ -0,0 +1,78 @@ +package net.grandtheftmc.Bungee.listeners; + +import net.grandtheftmc.Bungee.Bungee; +import net.grandtheftmc.Bungee.Utils; +import net.grandtheftmc.Bungee.redisbungee.data.DataType; +import net.grandtheftmc.Bungee.users.User; +import net.md_5.bungee.api.connection.ProxiedPlayer; +import net.md_5.bungee.api.event.ServerConnectEvent; +import net.md_5.bungee.api.plugin.Listener; +import net.md_5.bungee.event.EventHandler; + +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; + +public class Connect implements Listener { + + @EventHandler + public void onConnect(ServerConnectEvent event) { + + // grab event variables + ProxiedPlayer player = event.getPlayer(); + + // TODO test messages remove + System.out.println("target: " + event.getTarget()); + System.out.println("player server: " + player.getServer()); + + Optional userOptional = Bungee.getUserManager().getLoadedUser(player.getUniqueId()); + userOptional.ifPresent(user -> { + user.update(); + Bungee.getUserManager().setPerms(player, user.getUserRank()); + + if (!user.isAuthyVerified() && player.getServer() != null) { + event.setCancelled(true); + return; + } + + Map map = new HashMap<>(); + map.put("uuid", player.getUniqueId().toString()); + + String ser = Bungee.getRedisManager().serialize(DataType.STAFF_JOIN, map); + //Send this serialised object to other redis servers for handling... + Bungee.getRedisManager().sendMessage(ser); + }); + + // if the player is currently not on a server + if (player.getServer() == null) { + + // NOTE: The below attempted to allow force hosts to connect directly through + // This failed because force_default_server in bungee MUST be false to allow + // players to use force hosts. However, force_default_server being false means + // players will joining without a force hosts will ALWAYS go back to the + // server they last connected to + + // if no target + if (event.getTarget() == null) { + event.setTarget(Utils.getRandomHub()); + } + + else { + // if they are attempting to join ANY hub, pick a random one + if (event.getTarget().getName().contains("hub")) { + event.setTarget(Utils.getRandomHub()); + } else { + // do nothing, as this should let + // the player force host through + + // if case force default fails, set their "rejoin server" + // as a random hub + player.setReconnectServer(Utils.getRandomHub()); + } + } + } + + // TODO remove test messages + System.out.println("target server after: " + event.getTarget()); + } +} diff --git a/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/listeners/Disconnect.java b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/listeners/Disconnect.java new file mode 100644 index 0000000..fb3ec7f --- /dev/null +++ b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/listeners/Disconnect.java @@ -0,0 +1,59 @@ +package net.grandtheftmc.Bungee.listeners; + +import net.grandtheftmc.Bungee.Bungee; +import net.grandtheftmc.Bungee.Utils; +import net.grandtheftmc.Bungee.redisbungee.data.DataType; +import net.grandtheftmc.Bungee.users.User; +import net.grandtheftmc.Bungee.utils.HelpLog; +import net.grandtheftmc.Bungee.utils.PlaytimeManager; +import net.grandtheftmc.Bungee.utils.TimeFormatter; +import net.md_5.bungee.api.connection.ProxiedPlayer; +import net.md_5.bungee.api.event.PlayerDisconnectEvent; +import net.md_5.bungee.api.plugin.Listener; +import net.md_5.bungee.event.EventHandler; + +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; +import java.util.concurrent.TimeUnit; + +public class Disconnect implements Listener { + + @EventHandler + public void onDisconnect(PlayerDisconnectEvent event) { + ProxiedPlayer player = event.getPlayer(); + + //Stop tracking playtime + PlaytimeManager.endSession(player); + + if (HelpLog.helpTicketExists(player.getName())) { + //send a close + Map map = new HashMap<>(); + map.put("helper", "null"); + map.put("sender", player.getName()); + String ser = Bungee.getRedisManager().serialize(DataType.HELP_CLOSE, map); + //Send this serialised object to other redis servers for handling... + Bungee.getRedisManager().sendMessage(ser); + } + + Optional userOptional = Bungee.getUserManager().getLoadedUser(player.getUniqueId()); + userOptional.ifPresent(user -> { + user.setLastQuit(System.currentTimeMillis()); + Long session = user.getLastQuit() - user.getLastJoin(); + user.setPlaytime(user.getPlaytime() + session); + TimeFormatter timeFormatter = new TimeFormatter(TimeUnit.MILLISECONDS, session); + String msg = "[QUIT] played for " + timeFormatter.getHours() + + "h " + timeFormatter.getMinutes() + "m " + timeFormatter.getSeconds() + "s"; + Utils.chatLog(player.getName(), msg); + }); + +// Bungee.getInstance().getProxy().getScheduler().runAsync(Bungee.getInstance(), () -> { +// try (PreparedStatement statement = Bungee.getSQL().prepareStatement("DELETE FROM user_respack WHERE user=UNHEX(?);")) { +// statement.setString(1, player.getUniqueId().toString().replaceAll("-", "")); +// statement.execute(); +// } catch (SQLException e) { +// e.printStackTrace(); +// } +// }); + } +} diff --git a/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/listeners/Kick.java b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/listeners/Kick.java new file mode 100644 index 0000000..aa01549 --- /dev/null +++ b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/listeners/Kick.java @@ -0,0 +1,41 @@ +package net.grandtheftmc.Bungee.listeners; + +import net.grandtheftmc.Bungee.Bungee; +import net.grandtheftmc.Bungee.Utils; +import net.md_5.bungee.api.AbstractReconnectHandler; +import net.md_5.bungee.api.ProxyServer; +import net.md_5.bungee.api.config.ServerInfo; +import net.md_5.bungee.api.connection.ProxiedPlayer; +import net.md_5.bungee.api.event.ServerKickEvent; +import net.md_5.bungee.api.plugin.Listener; +import net.md_5.bungee.event.EventHandler; + +import java.util.Objects; + +public class Kick implements Listener { + + @EventHandler + public void onServerKick(ServerKickEvent event) { + ProxiedPlayer player = event.getPlayer(); + ProxyServer proxy = Bungee.getInstance().getProxy(); + ServerInfo kickedFrom; + + if (event.getPlayer().getServer() != null) { + kickedFrom = event.getPlayer().getServer().getInfo(); + } + else if (proxy.getReconnectHandler() != null) { + kickedFrom = proxy.getReconnectHandler().getServer(event.getPlayer()); + } + else { + kickedFrom = AbstractReconnectHandler.getForcedHost(event.getPlayer().getPendingConnection()); + if (kickedFrom == null) + kickedFrom = proxy.getServerInfo(event.getPlayer().getPendingConnection().getListener().getServerPriority().get(0)); + } + + ServerInfo kickTo = Utils.getRandomHub(); + if (Objects.equals(kickedFrom, kickTo)) return; + event.setCancelled(true); + event.setCancelServer(kickTo); + player.sendMessage(event.getKickReasonComponent()); + } +} diff --git a/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/listeners/Login.java b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/listeners/Login.java new file mode 100644 index 0000000..3658b7b --- /dev/null +++ b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/listeners/Login.java @@ -0,0 +1,52 @@ +package net.grandtheftmc.Bungee.listeners; + +import net.grandtheftmc.Bungee.Bungee; +import net.grandtheftmc.Bungee.Utils; +import net.grandtheftmc.Bungee.users.User; +import net.grandtheftmc.Bungee.users.UserRank; +import net.md_5.bungee.api.ProxyServer; +import net.md_5.bungee.api.connection.ProxiedPlayer; +import net.md_5.bungee.api.event.LoginEvent; +import net.md_5.bungee.api.plugin.Listener; +import net.md_5.bungee.event.EventHandler; + +import java.util.Objects; +import java.util.Optional; +import java.util.UUID; + +public class Login implements Listener { + + @EventHandler + public void onLogin(LoginEvent event) { + UUID uuid = event.getConnection().getUniqueId(); + Optional userOptional = Bungee.getUserManager().getLoadedUser(uuid); + userOptional.ifPresent(user -> { + if (!Objects.equals(user.getUsername(), event.getConnection().getName())) + user.setUsername(event.getConnection().getName()); + + user.setLastJoin(System.currentTimeMillis()); + + if (user.isRank(UserRank.BUILDER)) { + String address = event.getConnection().getAddress().getAddress().getHostAddress(); + if (user.getLastIPAddress().equals(address)) + user.setAuthyVerified(true); + + else { + Utils.redisChatLog(user.getUsername(), "logged in with unknown IP address " + address); + if (user.getAuthyId() != 0) Bungee.getAuthyManager().sendSMSToken(user.getAuthyId()); + user.setAuthyVerified(false); + } + } + }); + + event.registerIntent(Bungee.getInstance()); + ProxyServer.getInstance().getScheduler().runAsync(Bungee.getInstance(), () -> { + ProxiedPlayer player = ProxyServer.getInstance().getPlayer(uuid); + if (player != null) + Bungee.getUserManager().setPerms(player, userOptional.isPresent() ? userOptional.get().getUserRank() : UserRank.DEFAULT); + + event.completeIntent(Bungee.getInstance()); + }); + } +} + diff --git a/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/listeners/Ping.java b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/listeners/Ping.java new file mode 100644 index 0000000..05c1dd5 --- /dev/null +++ b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/listeners/Ping.java @@ -0,0 +1,31 @@ +package net.grandtheftmc.Bungee.listeners; + +import net.grandtheftmc.Bungee.Bungee; +import net.grandtheftmc.Bungee.Utils; +import net.md_5.bungee.api.ServerPing; +import net.md_5.bungee.api.event.ProxyPingEvent; +import net.md_5.bungee.api.plugin.Listener; +import net.md_5.bungee.event.EventHandler; + +public class Ping implements Listener { + +// private static final int[] prez_is_12 = new int[]{420, 69, 6969, 666}; + + @EventHandler + public void onPing(ProxyPingEvent event) { + ServerPing ping = event.getResponse(); + + ServerPing.Players players = ping.getPlayers(); + //Set online players to equal the number on all servers distributed across redis. + int online = Bungee.getRedisManager().getRedisAPI().getPlayersOnline().size(); + players.setOnline(online); + //Was here before, but not exactly sure why, guessing you have no max cap? +// players.setMax(prez_is_12[ThreadLocalRandom.current().nextInt(0, prez_is_12.length-1)]); + players.setMax(1500); + + if (Bungee.getSettings().getMotd() != null) { + //Set our MOTD if one exists + ping.setDescriptionComponent(Utils.ft(Bungee.getSettings().getMotd())); + } + } +} diff --git a/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/redisbungee/RedisListener.java b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/redisbungee/RedisListener.java new file mode 100644 index 0000000..0a3a547 --- /dev/null +++ b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/redisbungee/RedisListener.java @@ -0,0 +1,258 @@ +package net.grandtheftmc.Bungee.redisbungee; + +import com.imaginarycode.minecraft.redisbungee.events.PubSubMessageEvent; +import net.grandtheftmc.Bungee.Bungee; +import net.grandtheftmc.Bungee.Lang; +import net.grandtheftmc.Bungee.Utils; +import net.grandtheftmc.Bungee.database.BaseDatabase; +import net.grandtheftmc.Bungee.redisbungee.data.DataType; +import net.grandtheftmc.Bungee.users.User; +import net.grandtheftmc.Bungee.users.UserRank; +import net.grandtheftmc.Bungee.utils.HelpLog; +import net.grandtheftmc.Bungee.utils.PlaytimeManager; +import net.grandtheftmc.Bungee.utils.UUIDUtil; +import net.md_5.bungee.api.ProxyServer; +import net.md_5.bungee.api.chat.BaseComponent; +import net.md_5.bungee.api.chat.ClickEvent; +import net.md_5.bungee.api.chat.ComponentBuilder; +import net.md_5.bungee.api.connection.ProxiedPlayer; +import net.md_5.bungee.api.plugin.Listener; +import net.md_5.bungee.event.EventHandler; +import org.json.JSONObject; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.*; + +public class RedisListener implements Listener { + + @EventHandler + public void onPubSubMessage(PubSubMessageEvent event) { + if (event.getChannel().equalsIgnoreCase(Bungee.getRedisManager().getMessageChannel())) { + JSONObject serialized = new JSONObject(event.getMessage()); + + String dataTypeString = serialized.getString("datatype"); + DataType typeEnum = DataType.valueOf(dataTypeString); + + if (typeEnum == null) { + //Invalid datatype + return; + } + + DataType dataType = DataType.valueOf(serialized.getString("datatype")); + + switch (dataType) { + case GMSG: + String target = serialized.getString("target"); + if (Bungee.getInstance().getProxy().getPlayer(target) == null) return; + String sender = serialized.getString("sender"); + String message = serialized.getString("message"); + String senderColName = Utils.f(serialized.getString("senderCol")); + ProxiedPlayer targetPlayer = Bungee.getInstance().getProxy().getPlayer(target); + String url = ""; + for (String string : message.split(" ")) { + if (string.matches("^((https?|ftp)://|(www|ftp)\\.)?[a-z0-9-]+(\\.[a-z0-9-]+)+([/?].*)?$")) { + url = string; + break; + } + } + BaseComponent[] a = new ComponentBuilder(Lang.GMSG.f("&7[" + senderColName + "&7 -> me] &r" + message)) + .event(url.isEmpty() ? new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/gmsg " + sender + " ") + : new ClickEvent(ClickEvent.Action.OPEN_URL, url)) + .create(); + targetPlayer.sendMessage(a); + break; + + case STAFFCHAT: + //A message has been distributed to the staff chat, send this message to all online staff + Utils.staffChat(serialized.getString("sender"), serialized.getString("message")); + break; + + case STAFF_JOIN: + PlaytimeManager.beginSession(serialized.getString("uuid")); + break; + + case HELP_CLOSE: + String staffResponseName = serialized.getString("helper"); + + String helpRequester = serialized.getString("sender"); + + if (staffResponseName.equalsIgnoreCase("null")) { + //If a player logs out their ticket is automatically closed. + HelpLog.closeHelpTicket(helpRequester); + return; + } + + String staffResponseUUID = serialized.getString("helperUUID"); + + //If no ticket exists skip this part. + if (!HelpLog.helpTicketExists(helpRequester)) return; + + boolean receiveTokens = HelpLog.closeHelpTicket(helpRequester); + + ProxiedPlayer pp = Bungee.getInstance().getProxy().getPlayer(UUID.fromString(staffResponseUUID)); + + ProxyServer.getInstance().getPlayers() + .stream() + .filter(player -> player.hasPermission("staffchat.use")) + .forEach(player -> + player.sendMessage(Lang.HELP.ft(staffResponseName + + " &7answered " + helpRequester))); + + if (pp == null) { + Bungee.log(staffResponseUUID); + return; + } + + if (receiveTokens) { + Optional userOptional = Bungee.getUserManager().getLoadedUser(pp.getUniqueId()); + userOptional.ifPresent(user -> { + Bungee.getInstance().getProxy().getScheduler().runAsync(Bungee.getInstance(), () -> { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("update users set tokens=tokens+" + 1 + " where uuid=?;")) { + statement.setString(1, pp.getUniqueId().toString()); + statement.execute(); + } + } catch (SQLException e) { + e.printStackTrace(); + } + }); + }); + } + break; + + case HELP: + String playerName = serialized.getString("sender"), + server = serialized.getString("server"), + msg = serialized.getString("message"); + Utils.redisHelp(playerName, msg, server); + HelpLog.requestHelp(playerName); + break; + + case SOCIALSPY: + String mess = Utils.f(serialized.getString("message")); + String[] exclude = serialized.getString("exclude").split(","); + Set ex = new HashSet<>(); + Arrays.stream(exclude).forEach(e -> ex.add(e.toLowerCase())); + //Stop players receiving social spy msgs if they have been msged or sent the msg + + for (ProxiedPlayer proxP : ProxyServer.getInstance().getPlayers()) { + Optional u = Bungee.getUserManager().getLoadedUser(proxP.getUniqueId()); + if (u.isPresent() && u.get().getSocialSpy()) { + //User is non null has has social spy enabled. + proxP.sendMessage(mess); + } + } + break; + + case MOTD: + sender = serialized.getString("sender"); + if (serialized.has("reload") && serialized.getBoolean("reload")) { + //we want to reload the MOTD from the config. + Bungee.getSettings().setMotdConfig(Utils.loadConfig("motd")); + Bungee.getSettings().setMotd(Bungee.getSettings().getMotdConfig().getString("motd")); + + if (sender.equals("CONSOLE")) { + Bungee.getInstance().getLogger().info("MOTD was reloaded successfully."); + } else { + pp = Bungee.getInstance().getProxy().getPlayer(sender); + + if (pp == null) return; + + pp.sendMessage(Utils.ft("&7Bungee MOTD reloaded successfully.")); + } + } else if (serialized.has("motd")) { + //we want to set a new MOTD, colour codes are translated in the ping event so we dont do that here. + String motd = serialized.getString("motd"); + Bungee.getSettings().setMotd(motd); + + if (sender.equals("CONSOLE")) { + Bungee.getInstance().getLogger().info("You have set a temporary MOTD! Note that it will reset to the motd.yml value when Bungee restarts."); + Bungee.getInstance().getLogger().info(motd); + } else { + pp = Bungee.getInstance().getProxy().getPlayer(sender); + + if (pp == null) return; + + pp.sendMessage(Utils.ft("&7You have set a temporary MOTD! Note that it will reset to the motd.yml value when Bungee restarts.")); + pp.sendMessage(Utils.ft(motd)); + } + } + break; + + case PERMS: + String issuer = serialized.getString("sender"); + pp = Bungee.getInstance().getProxy().getPlayer(issuer); + + if (serialized.has("reload") && serialized.getBoolean("reload")) { + Bungee.getSettings().setPermsConfig(Utils.loadConfig("perms")); + Bungee.getUserManager().loadPerms(); + + if (pp != null) { + pp.sendMessage(Utils.ft("&7GPerms config reloaded.")); + } else { + Bungee.getInstance().getLogger().info("Perms config reloaded."); + } + + } else if (serialized.has("target")) { + String targetUser = serialized.getString("target"); + + ProxiedPlayer targ = Bungee.getInstance().getProxy().getPlayer(targetUser); + + if (pp != null) { + pp.sendMessage(Lang.PERMS.ft("&a" + targetUser + " &aupdated.")); + } else { + Bungee.getInstance().getLogger().info(targ.getDisplayName() + " updated."); + } + + if (targ != null) { + Optional userOptional = Bungee.getUserManager().getLoadedUser(targ.getUniqueId()); + if (userOptional.isPresent()) { + userOptional.get().update(); + } else { + Bungee.getInstance().getProxy().getScheduler().runAsync(Bungee.getInstance(), () -> { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("SELECT HEX(UP.uuid) AS uid, UP.rank, U.name FROM user_profile UP, user U WHERE UP.uuid=UNHEX(?) AND UP.uuid=U.uuid;")) { + statement.setString(1, targ.getUniqueId().toString().replaceAll("-", "")); + try (ResultSet result = statement.executeQuery()) { + while (result.next()) { + String username = result.getString("name"); + UUID uuid = UUIDUtil.createUUID(result.getString("uid")).orElse(null); + UserRank ur = UserRank.getUserRank(result.getString("rank")); + + User user = Bungee.getUserManager().getLoadedUsersMap().computeIfAbsent(uuid, User::new); + + user.setUserRank(ur); + user.setUsername(username); + } + } + } + } catch (SQLException e) { + e.printStackTrace(); + } + }); + } + } + } + break; + + case LOG: + String logType = serialized.getString("type"); + + if (logType.equals("staff")) { + String logSender = serialized.getString("sender"); + String logMessage = serialized.getString("message"); + Utils.chatLog(logSender, logMessage); + } else { + String logMessage = serialized.getString("message"); + String logName = serialized.getString("logname"); + Utils.log(logMessage, logName); + } + default: + break; + } + } + } +} diff --git a/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/redisbungee/RedisManager.java b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/redisbungee/RedisManager.java new file mode 100644 index 0000000..13b9a37 --- /dev/null +++ b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/redisbungee/RedisManager.java @@ -0,0 +1,46 @@ +package net.grandtheftmc.Bungee.redisbungee; + +import com.imaginarycode.minecraft.redisbungee.RedisBungeeAPI; +import net.grandtheftmc.Bungee.redisbungee.data.DataType; +import org.json.JSONObject; + +import java.util.Map; +import java.util.UUID; + +public class RedisManager { + private final String messageChannel = "gtm_messages"; + private final RedisBungeeAPI redisBungeeAPI; + + public RedisManager(RedisBungeeAPI redisBungeeAPI) { + this.redisBungeeAPI = redisBungeeAPI; + } + + public void sendMessage(String serialized) { + this.redisBungeeAPI.sendChannelMessage(this.messageChannel, serialized); + } + + public UUID getUUIDFromName(String name) { + return this.redisBungeeAPI.getUuidFromName(name, false); + } + + public boolean isPlayerOnline(String name) { + UUID uuid = getUUIDFromName(name); + if (uuid == null) return false; + return this.redisBungeeAPI.isPlayerOnline(uuid); + } + + public RedisBungeeAPI getRedisAPI() { + return this.redisBungeeAPI; + } + + public String getMessageChannel() { + return this.messageChannel; + } + + public String serialize(DataType dataType, Map data) { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("datatype", dataType.name()); + data.keySet().forEach(key -> jsonObject.put(key, data.get(key))); + return jsonObject.toString(); + } +} diff --git a/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/redisbungee/data/DataType.java b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/redisbungee/data/DataType.java new file mode 100644 index 0000000..a318119 --- /dev/null +++ b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/redisbungee/data/DataType.java @@ -0,0 +1,13 @@ +package net.grandtheftmc.Bungee.redisbungee.data; + +public enum DataType { + + GMSG("GMSG"), STAFFCHAT("STAFFCHAT"), HELP("HELP"), HELP_CLOSE("HELP_C"), SOCIALSPY("SOCIALSPY"), MOTD("MOTD"), + PERMS("PERMS"), STAFF_JOIN("STAFFJOIN"), LOG("LOG"); + + private final String identifier; + + DataType(String identifier) { + this.identifier = identifier; + } +} diff --git a/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/tasks/AnnouncerTask.java b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/tasks/AnnouncerTask.java new file mode 100644 index 0000000..252ddf1 --- /dev/null +++ b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/tasks/AnnouncerTask.java @@ -0,0 +1,28 @@ +package net.grandtheftmc.Bungee.tasks; + +import net.grandtheftmc.Bungee.Bungee; +import net.grandtheftmc.Bungee.Lang; +import net.grandtheftmc.Bungee.users.User; +import net.md_5.bungee.api.connection.ProxiedPlayer; + +import java.util.*; +import java.util.concurrent.TimeUnit; + +public class AnnouncerTask { + + public AnnouncerTask() { + Bungee.getInstance().getProxy().getScheduler().schedule(Bungee.getInstance(), () -> { + int count = 0; + + for (UUID uuid : Bungee.getRedisManager().getRedisAPI().getPlayersOnline()) { + Optional userOptional = Bungee.getUserManager().getLoadedUser(uuid); + if (userOptional.isPresent()) { + count++; + } + } + + if (count <= 1) return; + Bungee.getInstance().getProxy().broadcast(Lang.GTM.f("&e&lThere are currently " + count + " staff members online! Need help? Use &a&l/help ")); + }, 300, 700, TimeUnit.SECONDS); + } +} diff --git a/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/tasks/AuthyTask.java b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/tasks/AuthyTask.java new file mode 100644 index 0000000..1f0d990 --- /dev/null +++ b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/tasks/AuthyTask.java @@ -0,0 +1,38 @@ +package net.grandtheftmc.Bungee.tasks; + +import net.grandtheftmc.Bungee.Bungee; +import net.grandtheftmc.Bungee.Lang; +import net.grandtheftmc.Bungee.users.UserRank; +import net.md_5.bungee.api.ChatColor; +import net.md_5.bungee.api.chat.TextComponent; +import net.md_5.bungee.api.connection.ProxiedPlayer; + +import java.util.concurrent.TimeUnit; + +public class AuthyTask { + + public AuthyTask() { + Bungee.getInstance().getProxy().getScheduler().schedule(Bungee.getInstance(), () -> { + Bungee.getUserManager().getLoadedUsers().forEach(user -> { + if (!user.isRank(UserRank.BUILDER)) return; + + ProxiedPlayer player = Bungee.getInstance().getProxy().getPlayer(user.getUUID()); + if (player == null) return; + + if (!user.isAuthyVerified()) { + if (user.getAuthyId() == 0) { + player.sendMessage(Lang.VERIFICATION.ft("&7You must register with 2FA &7before &7continuing! " + + "&a/authy register &a " + + "&7Need help? &a/authy help &7or contact a &4&lManager")); + } + + else { + TextComponent textComponent = Lang.VERIFICATION.ft("&7Please enter your 2 factor authentication &7code before continuing! &a/authy verify "); + textComponent.setColor(ChatColor.GRAY); + player.sendMessage(textComponent); + } + } + }); + }, 0, 10, TimeUnit.SECONDS); + } +} diff --git a/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/tasks/PlaytimePurgeTask.java b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/tasks/PlaytimePurgeTask.java new file mode 100644 index 0000000..b97e912 --- /dev/null +++ b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/tasks/PlaytimePurgeTask.java @@ -0,0 +1,17 @@ +package net.grandtheftmc.Bungee.tasks; + +import net.grandtheftmc.Bungee.Bungee; +import net.grandtheftmc.Bungee.Lang; +import net.grandtheftmc.Bungee.users.User; +import net.grandtheftmc.Bungee.utils.PlaytimeManager; + +import java.util.Optional; +import java.util.UUID; +import java.util.concurrent.TimeUnit; + +public class PlaytimePurgeTask { + + public PlaytimePurgeTask() { + Bungee.getInstance().getProxy().getScheduler().schedule(Bungee.getInstance(), PlaytimeManager::purgeOldSessions, 0, 1, TimeUnit.DAYS); + } +} diff --git a/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/tasks/ServerStatusTask.java b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/tasks/ServerStatusTask.java new file mode 100644 index 0000000..86b456b --- /dev/null +++ b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/tasks/ServerStatusTask.java @@ -0,0 +1,20 @@ +package net.grandtheftmc.Bungee.tasks; + +import net.grandtheftmc.Bungee.Bungee; +import net.grandtheftmc.Bungee.utils.ServerStatus; + +import java.util.concurrent.RejectedExecutionException; +import java.util.concurrent.TimeUnit; + +public class ServerStatusTask { + + public ServerStatusTask() { + Bungee.getInstance().getProxy().getScheduler().schedule(Bungee.getInstance(), () -> Bungee.getInstance().getProxy().getServers().values().forEach(serverInfo -> { + try { + ServerStatus serverStatus = ServerStatus.getServerStatus(serverInfo); + serverStatus.updateStatus(); + } + catch (RejectedExecutionException ignored) {} + }), 1, 15, TimeUnit.SECONDS); + } +} diff --git a/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/users/User.java b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/users/User.java new file mode 100644 index 0000000..0236541 --- /dev/null +++ b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/users/User.java @@ -0,0 +1,212 @@ +package net.grandtheftmc.Bungee.users; + +import net.grandtheftmc.Bungee.Bungee; +import net.grandtheftmc.Bungee.database.BaseDatabase; +import net.md_5.bungee.api.connection.ProxiedPlayer; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.UUID; + +public class User { + private final UUID uuid; + private String username; + private UserRank ur; + private int authyId = 0; + private boolean authyVerified; + private String lastIPAddress = "0"; + + private boolean staffChat; + private boolean socialSpy; + private long lastJoin; + private long lastQuit; + private long playtime; + + public User(UUID uuid) { + this.uuid = uuid; + this.dataCheck(); + } + + public void dataCheck() { + this.update(); + + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("INSERT INTO Authy (uuid,authyId) VALUES (?, ?) ON DUPLICATE KEY UPDATE uuid=?;")) { + statement.setString(1, this.uuid.toString()); + statement.setInt(2, this.authyId); + statement.setString(3, this.uuid.toString()); + + statement.execute(); + } + } catch (SQLException e) { + e.printStackTrace(); + } + } + + public UUID getUUID() { + return this.uuid; + } + + public String getUsername() { + return this.username; + } + + public void setUsername(String username) { + this.username = username; + } + + public UserRank getUserRank() { + return this.ur; + } + + public void setUserRank(UserRank ur) { + this.ur = ur; + } + + public boolean isRank(UserRank userRank) { + return userRank == this.ur || this.ur.isHigherThan(userRank); + } + + public boolean isSpecial() { + return this.ur != UserRank.DEFAULT; + } + + public int getAuthyId() { + return this.authyId; + } + + public void setAuthyId(int authyId) { + this.authyId = authyId; + + Bungee.getInstance().getProxy().getScheduler().runAsync(Bungee.getInstance(), () -> { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE Authy SET authyId=? WHERE uuid=?;")) { + statement.setInt(1, this.authyId); + statement.setString(2, this.uuid.toString()); + statement.execute(); + } + } catch (SQLException e) { + e.printStackTrace(); + } + }); + } + + public boolean isAuthyVerified() { + if (!this.isRank(UserRank.BUILDER)) return true; + return authyVerified; + } + + public void setAuthyVerified(boolean authyVerified) { + this.authyVerified = authyVerified; + } + + public String getLastIPAddress() { + return this.lastIPAddress; + } + + public void setLastIPAddress(String lastIPAddress) { + this.lastIPAddress = lastIPAddress; + + Bungee.getInstance().getProxy().getScheduler().runAsync(Bungee.getInstance(), () -> { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE Authy SET lastIPAddress=? WHERE uuid=?;")) { + statement.setString(1, this.lastIPAddress); + statement.setString(2, this.uuid.toString()); + statement.execute(); + } + } catch (SQLException e) { + e.printStackTrace(); + } + }); + } + + public boolean getStaffChat() { + return this.staffChat; + } + + public void setStaffChat(boolean b) { + this.staffChat = b; + } + + public void toggleStaffChat() { + this.staffChat = !this.staffChat; + } + + public boolean getSocialSpy() { + return this.socialSpy; + } + + public void setSocialSpy(boolean b) { + this.socialSpy = b; + } + + public Long getLastJoin() { + return this.lastJoin; + } + + public void setLastJoin(Long lastJoin) { + this.lastJoin = lastJoin; + } + + public long getLastQuit() { + return this.lastQuit; + } + + public void setLastQuit(long lastQuit) { + this.lastQuit = lastQuit; + } + + public Long getPlaytime() { + return this.playtime; + } + + public void setPlaytime(Long playtime) { + this.playtime = playtime; + } + + public String getColoredName(ProxiedPlayer player) { + return this.ur.getColor() + (this.ur == UserRank.DEFAULT ? "" : "&l") + player.getName(); + } + + public String getColoredName() { + return this.ur.getColor() + (this.ur == UserRank.DEFAULT ? "" : "&l") + this.username; + } + + public void update() { + Bungee.getInstance().getProxy().getScheduler().runAsync(Bungee.getInstance(), () -> { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("SELECT UP.rank, U.name FROM user_profile UP, user U WHERE UP.uuid=UNHEX(?) AND UP.uuid=U.uuid;")) { + statement.setString(1, this.uuid.toString().replaceAll("-", "")); + try (ResultSet result = statement.executeQuery()) { + if (result.next()) { + UserRank ur = UserRank.getUserRank(result.getString("rank")); + if (!ur.isHigherThan(UserRank.YOUTUBER)) { + Bungee.getUserManager().getLoadedUsers().remove(this); + return; + } + this.ur = ur; + } + } + } + } catch (SQLException e) { + e.printStackTrace(); + } + + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("SELECT authyId,lastIPAddress FROM Authy WHERE uuid=? LIMIT 1;")) { + statement.setString(1, this.uuid.toString()); + try (ResultSet result = statement.executeQuery()) { + if (result.next()) { + this.authyId = result.getInt("authyId"); + this.lastIPAddress = result.getString("lastIPAddress"); + } + } + } + } catch (SQLException e) { + e.printStackTrace(); + } + }); + } +} diff --git a/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/users/UserManager.java b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/users/UserManager.java new file mode 100644 index 0000000..7fb37b7 --- /dev/null +++ b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/users/UserManager.java @@ -0,0 +1,327 @@ +package net.grandtheftmc.Bungee.users; + +import com.google.common.collect.Maps; +import net.grandtheftmc.Bungee.Bungee; +import net.grandtheftmc.Bungee.database.BaseDatabase; +import net.grandtheftmc.Bungee.utils.Callback; +import net.grandtheftmc.Bungee.utils.UUIDUtil; +import net.md_5.bungee.api.ProxyServer; +import net.md_5.bungee.api.connection.ProxiedPlayer; +import net.md_5.bungee.config.Configuration; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.*; +import java.util.stream.Collectors; + +public class UserManager { + + private final Map loadedUsers = new HashMap<>(); + + /** + * Default set of permissions, loaded from configuration + * + * @see #loadPerms() + */ + private final Map> perms = new HashMap<>(); + + public UserManager() { + this.loadPerms(); + this.loadUsers(); + } + + /** + * Load permissions ranks from configuration file. + */ + public void loadPerms() { + Configuration c = Bungee.getSettings().getPermsConfig(); + for (String s : c.getKeys()) { + UserRank rank = UserRank.getUserRankOrNull(s); + if (rank != null) this.perms.put(rank, c.getStringList(s)); + } + this.setPerms(); + } + + /** + * Load a default set of users into redis memory from MySQL storage. + *

+ * The default set is of all staff members, additional users are loaded on demand. + */ + public void loadUsers() { + Bungee.getInstance().getProxy().getScheduler().runAsync(Bungee.getInstance(), () -> { + + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + this.step1(connection, obj -> { + this.step2(connection, obj); + }); + } catch (SQLException e) { + e.printStackTrace(); + } + +// try (Connection connection = BaseDatabase.getInstance().getConnection()) { +// try (PreparedStatement statement = connection.prepareStatement("SELECT HEX(uuid) AS uid,rank FROM `user_profile` WHERE rank IN ('builder', 'helpop', 'mod', 'srmod', 'admin', 'dev', 'manager', 'owner');")) { +// try (ResultSet result = statement.executeQuery()) { +// HashMap map = Maps.newHashMap(); +// while (result.next()) { +// UUID u = UUIDUtil.createUUID(result.getString("uid")).orElse(null); +// if (u == null) continue; +// map.put(u, UserRank.getUserRank(result.getString("rank"))); +// } +// +// UUID uuid = null; +// for (UUID uid : map.keySet()) { +// uuid = uid; +// try (PreparedStatement statement2 = connection.prepareStatement("SELECT lastname,socialSpy FROM `users` WHERE `uuid`=?;")) { +// statement2.setString(1, uid.toString()); +// try (ResultSet result2 = statement2.executeQuery()) { +// if (result2.next()) { +// String username = result2.getString("lastname"); +// boolean socialSpy = result2.getBoolean("socialSpy"); +// +// //Add user key to hashmap. +// User user = this.loadedUsers.computeIfAbsent(uid, k -> { +// User u = new User(k); +// Bungee.getInstance().getLogger().info("Successfully cached user " + u.getUUID()); +// return u; +// }); +// +// //Set ranks and other miscellaneous data. +// user.setUserRank(map.get(uid)); +// user.setSocialSpy(socialSpy); +// user.setUsername(username); +// } +// } +// } catch (SQLException e) { +// e.printStackTrace(); +// } +// } +// +// ResultSet rs = Bungee.getSQL().query("SELECT authyId,lastIPAddress FROM Authy WHERE uuid='" + uuid.toString() + "' LIMIT 1;"); +// Optional user = getLoadedUser(uuid); +// if (!user.isPresent()) { +// rs.close(); +// return; +// } +// +// int authyId = 0; +// String ipAddress = "0"; +// if (rs.next()) { +// authyId = rs.getInt("authyId"); +// ipAddress = rs.getString("lastIPAddress"); +// } +// user.get().setAuthyId(authyId); +// user.get().setLastIPAddress(ipAddress); +// rs.close(); +// } +// } +// } catch (SQLException e) { +// e.printStackTrace(); +// } + +// try { +// ResultSet resultSet = Bungee.getSQL().query("SELECT HEX(uuid) AS uid,rank FROM `user_profile` WHERE rank IN ('builder', 'helpop', 'mod', 'srmod', 'admin', 'dev', 'manager', 'owner');"); +// HashMap map = Maps.newHashMap(); +// while (resultSet.next()) { +// UUID u = UUIDUtil.createUUID(resultSet.getString("uid")).orElse(null); +// if (u == null) continue; +// map.put(u, UserRank.getUserRank(resultSet.getString("rank"))); +// } +// resultSet.close(); + +// UUID uuid = null; +// for (UUID uid : map.keySet()) { +// uuid = uid; +// try (PreparedStatement statement = Bungee.getSQL().prepareStatement("SELECT lastname,socialSpy FROM `users` WHERE `uuid`=?;")) { +// statement.setString(1, uid.toString()); +// try (ResultSet set = statement.executeQuery()) { +// if (set.next()) { +// String username = set.getString("lastname"); +// boolean socialSpy = set.getBoolean("socialSpy"); +// +// //Add user key to hashmap. +// User user = this.loadedUsers.computeIfAbsent(uid, k -> { +// User u = new User(k); +// Bungee.getInstance().getLogger().info("Successfully cached user " + u.getUUID()); +// return u; +// }); +// +// //Set ranks and other miscellaneous data. +// user.setUserRank(map.get(uid)); +// user.setSocialSpy(socialSpy); +// user.setUsername(username); +// } +// } +// } catch (SQLException e) { +// e.printStackTrace(); +// } +// } + +// ResultSet rs = Bungee.getSQL().query("SELECT authyId,lastIPAddress FROM Authy WHERE uuid='" + uuid.toString() + "' LIMIT 1;"); +// Optional user = getLoadedUser(uuid); +// if (!user.isPresent()) { +// rs.close(); +// return; +// } +// +// int authyId = 0; +// String ipAddress = "0"; +// if (rs.next()) { +// authyId = rs.getInt("authyId"); +// ipAddress = rs.getString("lastIPAddress"); +// } +// user.get().setAuthyId(authyId); +// user.get().setLastIPAddress(ipAddress); +// rs.close(); +// } catch (SQLException exception) { +// exception.printStackTrace(); +// } + }); + } + + private void step1(Connection connection, Callback> callback) { + try (PreparedStatement statement = connection.prepareStatement("SELECT HEX(uuid) AS uid,rank FROM `user_profile` WHERE rank IN ('builder', 'helpop', 'mod', 'srmod', 'admin', 'dev', 'manager', 'owner');")) { + try (ResultSet result = statement.executeQuery()) { + HashMap map = Maps.newHashMap(); + while (result.next()) { + UUID u = UUIDUtil.createUUID(result.getString("uid")).orElse(null); + if (u == null) continue; + map.put(u, UserRank.getUserRank(result.getString("rank"))); + } + + callback.call(map); + } + } catch (SQLException e) { + e.printStackTrace(); + } + } + + private void step2(Connection connection, HashMap map) { + UUID uuid; + for (UUID uid : map.keySet()) { + uuid = uid; + try (PreparedStatement statement2 = connection.prepareStatement("SELECT lastname,socialSpy FROM `users` WHERE `uuid`=?;")) { + statement2.setString(1, uid.toString()); + try (ResultSet result2 = statement2.executeQuery()) { + if (result2.next()) { + String username = result2.getString("lastname"); + boolean socialSpy = result2.getBoolean("socialSpy"); + + //Add user key to hashmap. + User user = this.loadedUsers.computeIfAbsent(uid, k -> { + User u = new User(k); + Bungee.getInstance().getLogger().info("Successfully cached user " + u.getUUID()); + return u; + }); + + //Set ranks and other miscellaneous data. + user.setUserRank(map.get(uid)); + user.setSocialSpy(socialSpy); + user.setUsername(username); + } + } + } catch (SQLException e) { + e.printStackTrace(); + } + + this.step3(connection, uuid); + } + } + + private void step3(Connection connection, UUID uuid) { + try (PreparedStatement statement2 = connection.prepareStatement("SELECT authyId,lastIPAddress FROM Authy WHERE uuid='" + uuid.toString() + "' LIMIT 1;")) { + try (ResultSet result = statement2.executeQuery()) { + Optional user = getLoadedUser(uuid); + if (!user.isPresent()) { + result.close(); + return; + } + + int authyId = 0; + String ipAddress = "0"; + if (result.next()) { + authyId = result.getInt("authyId"); + ipAddress = result.getString("lastIPAddress"); + } + user.get().setAuthyId(authyId); + user.get().setLastIPAddress(ipAddress); + } + } catch (SQLException e) { + e.printStackTrace(); + } + } + + public void setPerms() { + for (ProxiedPlayer player : ProxyServer.getInstance().getPlayers()) { + this.getLoadedUser(player.getUniqueId()).ifPresent(user -> this.setPerms(player, user.getUserRank())); + } + } + + public void setPerms(ProxiedPlayer player, UserRank rank) { + if (rank == null) return; + for (String perm : new ArrayList<>(player.getPermissions())) + player.setPermission(perm, false); + + for (String perm : this.getPermsAndLower(rank)) + player.setPermission(perm, true); + } + + private List getPermsAndLower(UserRank rank) { + List perms = new ArrayList<>(); + if (rank != null) + for (UserRank r : UserRank.values()) { + List l = this.perms.get(r); + if (l != null && !l.isEmpty()) + perms.addAll(l); + if (r == rank) break; + } + return perms; + } + + public Map getLoadedUsersMap() { + return loadedUsers; + } + + public Collection getLoadedUsers() { + return this.loadedUsers.values(); + } + + public List getSortedUsers() { + Collection users = Bungee.getUserManager().getLoadedUsers(); + List userList = new ArrayList<>(); + for (UserRank userRank : UserRank.values()) { + userList.addAll(users.stream().filter(user -> user.getUserRank() == userRank).collect(Collectors.toList())); + } + return userList; + } + + /** + * Get the User object of the player with the specified UUID. + * + * @param uuid + * @return + */ + public Optional getLoadedUser(UUID uuid) { + if (uuid == null) return null; + return Optional.ofNullable(this.loadedUsers.get(uuid)); + } + + /** + * Get the User object of the player with the specified username. + * + * @param username + * @return + */ + public Optional getLoadedUser(String username) { + if (username == null) return null; + List users = new ArrayList<>(); + this.loadedUsers.forEach((uuid, user) -> { + if (user.getUsername().equalsIgnoreCase(username)) { + users.add(user); + return; + } + }); + return users.isEmpty() ? Optional.empty() : Optional.of(users.get(0)); + } +} diff --git a/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/users/UserRank.java b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/users/UserRank.java new file mode 100644 index 0000000..2b19d65 --- /dev/null +++ b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/users/UserRank.java @@ -0,0 +1,99 @@ +package net.grandtheftmc.Bungee.users; + +import net.grandtheftmc.Bungee.Utils; +import net.md_5.bungee.api.ChatColor; + +import java.util.Objects; + +public enum UserRank { + + DEFAULT("&8"), VIP("&6"), PREMIUM("&a"), ELITE("&b"), SPONSOR("&5"), SUPREME("&c"), + YOUTUBER("&r"), HELPOP("&d"), MOD("&9"), SRMOD("&9"), BUILDER("&f"), ADMIN("&c"), + DEV("&9"), MANAGER("&4"), OWNER("&4"); + + private final String color; + + UserRank(String color) { + this.color = color; + } + + public static UserRank[] getUserRanks() { + return UserRank.class.getEnumConstants(); + } + + public static UserRank getUserRank(String name) { + if (name == null) return UserRank.DEFAULT; + for (UserRank ur : getUserRanks()) + if (ur.getName().equalsIgnoreCase(name)) + return ur; + return UserRank.DEFAULT; + } + + public static UserRank getUserRankOrNull(String name) { + if (name == null) + return null; + for (UserRank ur : getUserRanks()) + if (ur.getName().equalsIgnoreCase(name)) + return ur; + return null; + } + + public static UserRank getUserRankExact(String name) { + if (name == null) + return null; + for (UserRank ur : getUserRanks()) + if (ur.getName().equalsIgnoreCase(name)) + return ur; + return null; + } + + public static UserRank[] getDonorRanks() { + return new UserRank[] { VIP, PREMIUM, ELITE, SPONSOR, SUPREME }; + } + + public String getName() { + return this.toString(); + } + + public String getColor() { + return Utils.f(this.isHigherThan(UserRank.YOUTUBER) ? this.color + ChatColor.BOLD : this.color); + } + + public String getColoredName() { + return Utils.f(this == UserRank.YOUTUBER ? "&rYOU&4TUBER" : this.color + this.getName()); + } + + public String getColoredNameBold() { + return Utils.f(this == UserRank.YOUTUBER ? "&r&lYOU&4&lTUBER" : this.color + "&l" + this.getName()); + } + + public String getTabPrefix() { + return Utils.f(this == UserRank.YOUTUBER ? "&r&lY&4&lT" : this.color + "&l" + this.getName()); + } + + public String getPrefix() { + if (!Objects.equals(this.getName(), "DEFAULT")) + return Utils.f(' ' + this.getColoredNameBold() + "&8&l>"); + return ""; + } + + public UserRank getNext() { + boolean picknext = false; + for (UserRank u : getUserRanks()) { + if (picknext) + return u; + if (Objects.equals(u.getName(), this.getName())) + picknext = true; + } + return UserRank.DEFAULT; + } + + public boolean isHigherThan(UserRank rank) { + for (UserRank r : getUserRanks()) + if (r == this) + return false; + else if (r == rank) + return true; + return false; + } +} diff --git a/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/utils/Callback.java b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/utils/Callback.java new file mode 100644 index 0000000..0bb6932 --- /dev/null +++ b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/utils/Callback.java @@ -0,0 +1,5 @@ +package net.grandtheftmc.Bungee.utils; + +public interface Callback { + void call(T obj); +} diff --git a/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/utils/DefaultFontInfo.java b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/utils/DefaultFontInfo.java new file mode 100644 index 0000000..1e47c5a --- /dev/null +++ b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/utils/DefaultFontInfo.java @@ -0,0 +1,133 @@ +package net.grandtheftmc.Bungee.utils; + +import java.util.Arrays; +import java.util.Optional; + +/** + * Created by Adam on 05/06/2017. + */ +public enum DefaultFontInfo { + + A_UPPER('A', 5), + A_LOWER('a', 5), + B_UPPER('B', 5), + B_LOWER('b', 5), + C_UPPER('C', 5), + C_LOWER('c', 5), + D_UPPER('D', 5), + D_LOWER('d', 5), + E_UPPER('E', 5), + E_LOWER('e', 5), + F_UPPER('F', 5), + F_LOWER('f', 4), + G_UPPER('G', 5), + G_LOWER('g', 5), + H_UPPER('H', 5), + H_LOWER('h', 5), + I_UPPER('I', 3), + I_LOWER('i', 1), + J_UPPER('J', 5), + J_LOWER('j', 5), + K_UPPER('K', 5), + K_LOWER('k', 4), + L_UPPER('L', 5), + L_LOWER('l', 1), + M_UPPER('M', 5), + M_LOWER('m', 5), + N_UPPER('N', 5), + N_LOWER('n', 5), + O_UPPER('O', 5), + O_LOWER('o', 5), + P_UPPER('P', 5), + P_LOWER('p', 5), + Q_UPPER('Q', 5), + Q_LOWER('q', 5), + R_UPPER('R', 5), + R_LOWER('r', 5), + S_UPPER('S', 5), + S_LOWER('s', 5), + T_UPPER('T', 5), + T_LOWER('t', 4), + U_UPPER('U', 5), + U_LOWER('u', 5), + V_UPPER('V', 5), + V_LOWER('v', 5), + W_UPPER('W', 5), + W_LOWER('w', 5), + X_UPPER('X', 5), + X_LOWER('x', 5), + Y_UPPER('Y', 5), + Y_LOWER('y', 5), + Z_UPPER('Z', 5), + Z_LOWER('z', 5), + NUM_1('1', 5), + NUM_2('2', 5), + NUM_3('3', 5), + NUM_4('4', 5), + NUM_5('5', 5), + NUM_6('6', 5), + NUM_7('7', 5), + NUM_8('8', 5), + NUM_9('9', 5), + NUM_0('0', 5), + EXCLAMATION_POINT('!', 1), + AT_SYMBOL('@', 6), + NUM_SIGN('#', 5), + DOLLAR_SIGN('$', 5), + PERCENT('%', 5), + UP_ARROW('^', 5), + AMPERSAND('&', 5), + ASTERISK('*', 5), + LEFT_PARENTHESIS('(', 4), + RIGHT_PERENTHESIS(')', 4), + MINUS('-', 5), + UNDERSCORE('_', 5), + PLUS_SIGN('+', 5), + EQUALS_SIGN('=', 5), + LEFT_CURL_BRACE('{', 4), + RIGHT_CURL_BRACE('}', 4), + LEFT_BRACKET('[', 3), + RIGHT_BRACKET(']', 3), + COLON(':', 1), + SEMI_COLON(';', 1), + DOUBLE_QUOTE('"', 3), + SINGLE_QUOTE('\'', 1), + LEFT_ARROW('<', 4), + RIGHT_ARROW('>', 4), + QUESTION_MARK('?', 5), + SLASH('/', 5), + BACK_SLASH('\\', 5), + LINE('|', 1), + TILDE('~', 5), + TICK('`', 2), + PERIOD('.', 1), + COMMA(',', 1), + SPACE(' ', 3), + DEFAULT('a', 4); + + private final char character; + private final int length; + + DefaultFontInfo(char character, int length) { + this.character = character; + this.length = length; + } + + public char getCharacter() { + return this.character; + } + + public int getLength() { + return this.length; + } + + public int getBoldLength() { + if (this == SPACE) return this.length; + return this.length + 1; + } + + public static DefaultFontInfo getDefaultFontInfo(char c) { + Optional defaultFontInfo = Arrays.stream(values()).filter(d -> d.character == c).findFirst(); + return defaultFontInfo.orElse(DEFAULT); + } +} diff --git a/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/utils/HelpLog.java b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/utils/HelpLog.java new file mode 100644 index 0000000..88f08d0 --- /dev/null +++ b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/utils/HelpLog.java @@ -0,0 +1,57 @@ +package net.grandtheftmc.Bungee.utils; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +/** + * Created by Adam on 03/06/2017. + */ +public class HelpLog { + + //A list of users who have requested help. + private static Map helpReqs = new HashMap<>(); + + //1 Minutes timeout for receiving tokens. + private static final int HELP_TOKENS_TIMEOUT = 1000 * 60 * 1; + + /** + * Invoked from RedisListener when a player requests help and this gets forwarded to the staff chat. + * + * @param name + */ + public static void requestHelp(String name) { + helpReqs.put(name.toLowerCase(), System.currentTimeMillis()); + } + + /** + * Invoked whenever a staff member messages a player who requested help. + * + * @param name The name of the player the staff member has gmsg'ed. + * @return True if they should receive tokens. Let's set a 15 minute timeout on help requests in order to receive tokens. + */ + public static boolean closeHelpTicket(String name) { + name = name.toLowerCase(); + if (helpReqs.containsKey(name)) { + long t = helpReqs.remove(name); + long msElapsed = System.currentTimeMillis() - t; + return msElapsed <= HELP_TOKENS_TIMEOUT; + } + + else { + return false; + } + } + + /** + * Check whether the target of gmsg has an open help ticket. + * + * @param name + * @return + */ + public static boolean helpTicketExists(String name) { + return name != null && helpReqs.containsKey(name.toLowerCase()); + } + +} diff --git a/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/utils/PlaytimeManager.java b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/utils/PlaytimeManager.java new file mode 100644 index 0000000..40ee3ae --- /dev/null +++ b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/utils/PlaytimeManager.java @@ -0,0 +1,116 @@ +package net.grandtheftmc.Bungee.utils; + +import net.grandtheftmc.Bungee.Bungee; +import net.grandtheftmc.Bungee.Utils; +import net.grandtheftmc.Bungee.database.BaseDatabase; +import net.grandtheftmc.Bungee.users.User; +import net.md_5.bungee.api.connection.ProxiedPlayer; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; +import java.util.UUID; + +public class PlaytimeManager { + + //How many days to store session history for. + private static final int sessionHistoryDays = 7; + private static final String tableName = "playtime"; + //Map UUID -> Millis() At connect time to track session time. + private static Map sessions = new HashMap<>(); + + /** + * Mark the beginning of a playtime session for the connecting player. + * + * @param uuid The player whose playtime we wish to track. + */ + public static void beginSession(String uuid) { + sessions.put(UUID.fromString(uuid), System.currentTimeMillis()); + } + + /** + * End the playtime session, and store the result in the database. + * + * @param proxiedPlayer The player whose playtime we wish to track. + */ + public static void endSession(ProxiedPlayer proxiedPlayer) { + if (sessions.containsKey(proxiedPlayer.getUniqueId())) { + long now = System.currentTimeMillis(); + long elapsed = now - sessions.remove(proxiedPlayer.getUniqueId()); + + Bungee.getInstance().getProxy().getScheduler().runAsync(Bungee.getInstance(), () -> { + + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + String query = "INSERT INTO " + tableName + " (lastname,uuid,sessiontime,sessiondate) VALUES (?, ?, ?, ?);"; + try (PreparedStatement statement = connection.prepareStatement(query)) { + statement.setString(1, proxiedPlayer.getName()); + statement.setString(2, proxiedPlayer.getUniqueId().toString()); + statement.setLong(3, elapsed); + statement.setLong(4, now); + statement.executeUpdate(); + } + } catch (SQLException e) { + e.printStackTrace(); + } + }); + } + } + + /** + * This function will delete any rows in the DB with session dates older than a week. + * Call this every 24hr and on startup. + */ + public static void purgeOldSessions() { + Bungee.getInstance().getProxy().getScheduler().runAsync(Bungee.getInstance(), () -> { + long threshold = System.currentTimeMillis() - (1000 * 60 * 60 * 24 * sessionHistoryDays); + + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("DELETE FROM " + tableName + " WHERE sessionDate<=" + threshold)) { + statement.executeUpdate(); + } + } catch (SQLException e) { + e.printStackTrace(); + } + }); + } + + /** + * Query the playtime of another user. + * + * @param p The player issuing the command. + * @param target The name of the user to lookup. + */ + public static void lookupPlaytime(ProxiedPlayer p, String target) { + Bungee.getInstance().getProxy().getScheduler().runAsync(Bungee.getInstance(), () -> { + + long threshold = System.currentTimeMillis() - (1000 * 60 * 60 * 24 * sessionHistoryDays); + long totalTime = 0; + + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("SELECT lastname,sessiontime,sessiondate FROM " + tableName + " WHERE lastname='" + target + "' AND sessiondate>" + threshold + ";")) { + try (ResultSet result = statement.executeQuery()) { + if (result.isBeforeFirst()) { + while (result.next()) { + totalTime += result.getLong("sessiontime"); + } + + Optional userOptional = Bungee.getUserManager().getLoadedUser(target); + if (!userOptional.isPresent()) return; + + String s = Utils.formatPlaytime(totalTime); + p.sendMessage(Utils.f(userOptional.get().getColoredName() + " &7has played for &a" + s + " &7in the last week.")); + } else { + p.sendMessage(Utils.f("&cThe player " + target + " either doesn't exist, or hasn't played in the last week.")); + } + } + } + } catch (SQLException e) { + e.printStackTrace(); + } + }); + } +} diff --git a/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/utils/RequestRateLimiter.java b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/utils/RequestRateLimiter.java new file mode 100644 index 0000000..8a773ca --- /dev/null +++ b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/utils/RequestRateLimiter.java @@ -0,0 +1,48 @@ +package net.grandtheftmc.Bungee.utils; + +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +/** + * Created by Adam on 05/06/2017. + */ +public class RequestRateLimiter { + + /* + This class serves to limit requests made by staff members to the database. + + No more than 1 execution every second. + + Still allows frequent use, but without spamming. + + Only applies to the /seen, /alt commands + */ + + //Store the issuing player and the time of the last command + private static Map lastReq = new HashMap<>(); + + /** + * Attempt to make a request to execute a database related command. + * @param u The UUID of the player executing the command. + * @return A boolean representing whether they have been granted use of said command or not. + */ + public static boolean requestCmd(UUID u) { + long t = System.currentTimeMillis(); + + if (!lastReq.containsKey(u)) { + lastReq.put(u, t); + return true; + } + + long last = lastReq.get(u); + if (t - last >= 1000) { + //if at least 1 second has passed allow the command. + lastReq.put(u, t); + return true; + } + + return false; + } + +} diff --git a/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/utils/ServerStatus.java b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/utils/ServerStatus.java new file mode 100644 index 0000000..2c34fd1 --- /dev/null +++ b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/utils/ServerStatus.java @@ -0,0 +1,45 @@ +package net.grandtheftmc.Bungee.utils; + +import io.netty.util.internal.ConcurrentSet; +import net.md_5.bungee.api.Callback; +import net.md_5.bungee.api.ServerPing; +import net.md_5.bungee.api.config.ServerInfo; + +import java.util.HashSet; +import java.util.Set; + +public class ServerStatus implements Callback { + private static final ConcurrentSet serverStatuses = new ConcurrentSet<>(); + private final ServerInfo serverInfo; + private boolean online; + + + public ServerStatus(ServerInfo serverInfo) { + this.serverInfo = serverInfo; + serverStatuses.add(this); + } + + public static ServerStatus getServerStatus(ServerInfo serverInfo) { + Set tempStatuses = new HashSet<>(serverStatuses); + return tempStatuses.stream() + .filter(serverStatus -> serverStatus.getServerInfo() == serverInfo) + .findFirst().orElse(new ServerStatus(serverInfo)); + } + + @Override + public void done(ServerPing serverPing, Throwable throwable) { + this.online = throwable == null; + } + + public void updateStatus() { + this.serverInfo.ping(this); + } + + public boolean isOnline() { + return this.online; + } + + public ServerInfo getServerInfo() { + return this.serverInfo; + } +} diff --git a/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/utils/TabComplete.java b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/utils/TabComplete.java new file mode 100644 index 0000000..478e507 --- /dev/null +++ b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/utils/TabComplete.java @@ -0,0 +1,40 @@ +package net.grandtheftmc.Bungee.utils; + +import com.google.common.collect.ImmutableSet; +import net.grandtheftmc.Bungee.Bungee; +import net.md_5.bungee.api.CommandSender; + +import java.util.HashSet; +import java.util.Set; + +/** + * Created by Adam on 02/06/2017. + */ +public class TabComplete { + + /** + * Match a list of players to a search string accross the Redis network. + * @param sender Who executed the command. + * @param args Arguments of player to search + * @return A Set of potential matches. + */ + public static Set onTabComplete(CommandSender sender, String[] args){ + if (args.length > 2 || args.length == 0) + return ImmutableSet.of(); + + Set matches = new HashSet<>(); + + if (args.length == 1) { + String search = args[0].toLowerCase(); + + //We search all redis online players for the autocomplete + for (String name : Bungee.getRedisManager().getRedisAPI().getHumanPlayersOnline()) { + if (name.toLowerCase().startsWith(search)) { + matches.add(name); + } + } + } + + return matches; + } +} diff --git a/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/utils/TimeFormatter.java b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/utils/TimeFormatter.java new file mode 100644 index 0000000..5373564 --- /dev/null +++ b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/utils/TimeFormatter.java @@ -0,0 +1,45 @@ +package net.grandtheftmc.Bungee.utils; + +import java.util.concurrent.TimeUnit; + +public class TimeFormatter { + private final TimeUnit timeUnit; + private Long time; + + public TimeFormatter(TimeUnit timeUnit, Long time) { + this.timeUnit = timeUnit; + this.time = time; + } + + public Long getTime() { + return new Long(this.time); + } + + public void setTime(Long time) { + this.time = time; + } + + public TimeUnit getTimeUnit() { + return this.timeUnit; + } + + public Long getSeconds() { + return this.timeUnit.toSeconds(this.time) - (this.timeUnit.toMinutes(this.time) * 60); + } + + public Long getMinutes() { + return this.timeUnit.toMinutes(this.time) - (this.timeUnit.toHours(this.time) * 60); + } + + public Long getHours() { + return this.timeUnit.toHours(this.time) - (this.timeUnit.toDays(this.time) * 24); + } + + public Long getDays() { + return this.timeUnit.toDays(this.time); + } + + public Long getMillis() { + return this.timeUnit.toMillis(this.time); + } +} \ No newline at end of file diff --git a/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/utils/UUIDUtil.java b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/utils/UUIDUtil.java new file mode 100644 index 0000000..caccfc8 --- /dev/null +++ b/bungee-master@696956eaecd/src/main/java/net/grandtheftmc/Bungee/utils/UUIDUtil.java @@ -0,0 +1,69 @@ +package net.grandtheftmc.Bungee.utils; + +import java.util.Optional; +import java.util.UUID; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * Created by Stephen + */ +public class UUIDUtil { + + /** + * A {@link Pattern} used to identify and/or split full UUIDs + */ + private static final Pattern PATTERN_UUID = Pattern.compile("^[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}$", Pattern.CASE_INSENSITIVE); + /** + * A {@link Pattern} used to identify and/or split trimmed UUIDs + */ + private static final Pattern PATTERN_TRIMMED_UUID = Pattern.compile("^([a-z0-9]{8})([a-z0-9]{4})([a-z0-9]{4})([a-z0-9]{4})([a-z0-9]{12})$", Pattern.CASE_INSENSITIVE); + + + /** + * Create a UUID safely from a {@link String}. + * + * @param string The {@link String} to deserialize into an {@link UUID} object. + * @return {@link Optional#empty()} if the provided {@link String} is illegal, otherwise an {@link Optional} + * containing the deserialized {@link UUID} object. + */ + public static Optional createUUID(String string) { + if (string == null) { + return Optional.empty(); + } + + UUID result = null; + + try { + // Is it a valid UUID? + if (!PATTERN_UUID.matcher(string).matches()) { + // Un-trim UUID if it is trimmed + Matcher matcher = PATTERN_TRIMMED_UUID.matcher(string); + if (matcher.matches()) { + StringBuilder sb = new StringBuilder(); + + for (int i = 1; i <= matcher.groupCount(); i++) { + if (i != 1) { + sb.append("-"); + } + + sb.append(matcher.group(i)); + } + + string = sb.toString(); + } else { + // Invalid UUID + string = null; + } + } + + if (string != null) { + result = UUID.fromString(string); + } + } catch (IllegalArgumentException ignored) { + // Useless data passed + } + + return Optional.ofNullable(result); + } +} diff --git a/bungee-master@696956eaecd/src/main/resources/plugin.yml b/bungee-master@696956eaecd/src/main/resources/plugin.yml new file mode 100644 index 0000000..e25eb50 --- /dev/null +++ b/bungee-master@696956eaecd/src/main/resources/plugin.yml @@ -0,0 +1,4 @@ +name: Bungee +main: net.grandtheftmc.Bungee.Bungee +version: 1.3 +author: GTMDevs diff --git a/cartels-master@e4f5c2ecec5/.gitignore b/cartels-master@e4f5c2ecec5/.gitignore new file mode 100644 index 0000000..ad7f541 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/.gitignore @@ -0,0 +1,8 @@ + +\.idea/ + +target/classes/ + +target/ + +*.iml \ No newline at end of file diff --git a/cartels-master@e4f5c2ecec5/README.md b/cartels-master@e4f5c2ecec5/README.md new file mode 100644 index 0000000..fdaec0e --- /dev/null +++ b/cartels-master@e4f5c2ecec5/README.md @@ -0,0 +1 @@ +First commit. \ No newline at end of file diff --git a/cartels-master@e4f5c2ecec5/licenses/LGPL.txt b/cartels-master@e4f5c2ecec5/licenses/LGPL.txt new file mode 100644 index 0000000..65c5ca8 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/licenses/LGPL.txt @@ -0,0 +1,165 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. diff --git a/cartels-master@e4f5c2ecec5/licenses/LICENCE.txt b/cartels-master@e4f5c2ecec5/licenses/LICENCE.txt new file mode 100644 index 0000000..94a9ed0 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/licenses/LICENCE.txt @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/cartels-master@e4f5c2ecec5/licenses/gson-license.txt b/cartels-master@e4f5c2ecec5/licenses/gson-license.txt new file mode 100644 index 0000000..634d1aa --- /dev/null +++ b/cartels-master@e4f5c2ecec5/licenses/gson-license.txt @@ -0,0 +1,13 @@ +Copyright (c) 2008-2009 Google Inc. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/cartels-master@e4f5c2ecec5/pom.xml b/cartels-master@e4f5c2ecec5/pom.xml new file mode 100644 index 0000000..b48e75f --- /dev/null +++ b/cartels-master@e4f5c2ecec5/pom.xml @@ -0,0 +1,384 @@ + + 4.0.0 + + com.massivecraft + Cartels + 1.7.1 + jar + Cartels + + + + vault-repo + http://nexus.hc.to/content/repositories/pub_releases + + + ess-repo + http://repo.ess3.net/content/groups/essentials + + + spigot-repo + https://hub.spigotmc.org/nexus/content/groups/public/ + + + maven.sk89q.com + http://maven.sk89q.com/repo/ + + + repo.mikeprimm.com + http://repo.mikeprimm.com/ + + + playervaults + https://ci.drtshock.net/plugin/repository + + + dmulloy2-repo + http://repo.dmulloy2.net/nexus/repository/public/ + + + nexus-release + https://nexus.grandtheftmc.net/content/repositories/releases/ + + + + + + nexus-release + Internal Releases + https://nexus.grandtheftmc.net/content/repositories/releases/ + + + nexus-snapshot + Internal Snapshots + https://nexus.grandtheftmc.net/content/repositories/snapshots/ + + + + + UTF-8 + + + + + org.spigotmc + spigot-api + 1.12-R0.1-SNAPSHOT + provided + + + bungeecord-chat + net.md-5 + + + persistence-api + javax.persistence + + + junit + junit + + + guava + com.google.guava + + + gson + com.google.code.gson + + + + + net.milkbowl.vault + VaultAPI + 1.6 + provided + + + bukkit + org.bukkit + + + + + com.sk89q + worldguard + 6.1.1-SNAPSHOT + provided + + + bukkit + org.bukkit + + + bukkit-classloader-check + com.sk89q.spigot + + + commandbook + com.sk89q + + + jsr305 + com.google.code.findbugs + + + js + rhino + + + truezip + de.schlichtherle + + + jchronic + com.sk89q + + + worldedit + com.sk89q + + + + + com.sk89q.worldedit + worldedit-bukkit + 6.1.1-SNAPSHOT + provided + + + bukkit + org.bukkit + + + jsr305 + com.google.code.findbugs + + + bukkit-classloader-check + org.sk89q.bukkit + + + dummypermscompat + com.sk89q + + + jchronic + com.sk89q + + + js + rhino + + + truezip + de.schlichtherle + + + jlibnoise + com.sk89q.lib + + + paranamer + com.thoughtworks.paranamer + + + guava + com.google.guava + + + gson + com.google.code.gson + + + snakeyaml + org.yaml + + + + + com.google.guava + guava + 10.0.1 + provided + + + jsr305 + com.google.code.findbugs + + + + + net.ess3 + Essentials + 2.13-SNAPSHOT + provided + + + net.ess3 + EssentialsChat + 2.13-SNAPSHOT + provided + + + bukkit + org.bukkit + + + lombok + org.projectlombok + + + Essentials + net.ess3 + + + + + mkremins + fanciful + 0.4.0 + compile + + + gson + com.google.code.gson + + + + + org.dynmap + dynmap + 2.0 + provided + + + bukkit + org.bukkit + + + Permissions + com.nijikokun.bukkit + + + bPermissions + de.bananaco + + + EssentialsGroupManager + org.anjocaido + + + spoutpluginapi + org.getspout + + + PermissionsBukkit + com.platymuus.bukkit.permissions + + + PermissionsEx + ru.tehkode + + + + + com.google.code.gson + gson + 2.6.2 + compile + + + + net.grandtheftmc + core + 1.0.5 + provided + + + net.grandtheftmc + vice + 1.0.2 + provided + + + + + clean package install + ${project.name} + src/main/java + + + true + src/main/resources/ + + + + + maven-compiler-plugin + 3.5.1 + + 1.8 + 1.8 + + + + org.apache.maven.plugins + maven-shade-plugin + 2.4.3 + + false + + + + mkremins.fanciful + com.massivecraft.factions.shade.mkremins.fanciful + + + com.google.gson + com.massivecraft.factions.shade.com.google.gson + + + + + + package + + shade + + + + + + + + org.sonatype.plugins + nexus-staging-maven-plugin + 1.6.8 + true + + + default-deploy + deploy + + deploy + + + + + nexus + https://nexus.grandtheftmc.net/ + true + + + + + diff --git a/cartels-master@e4f5c2ecec5/src/main/assembly/package.xml b/cartels-master@e4f5c2ecec5/src/main/assembly/package.xml new file mode 100644 index 0000000..8f3491c --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/assembly/package.xml @@ -0,0 +1,16 @@ + + bin + false + + zip + + + + ${project.build.directory}/${artifactId}.jar + / + ${artifactId}.jar + + + \ No newline at end of file diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/Board.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/Board.java new file mode 100644 index 0000000..98b25be --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/Board.java @@ -0,0 +1,86 @@ +package com.massivecraft.factions; + +import com.massivecraft.factions.zcore.persist.json.JSONBoard; + +import java.util.ArrayList; +import java.util.Set; + + +public abstract class Board { + protected static Board instance = getBoardImpl(); + + //----------------------------------------------// + // Get and Set + //----------------------------------------------// + public abstract String getIdAt(FLocation flocation); + + private static Board getBoardImpl() { + switch (Conf.backEnd) { + case JSON: + return new JSONBoard(); + } + return null; + } + + public static Board getInstance() { + return instance; + } + + public abstract Faction getFactionAt(FLocation flocation); + + public abstract void setIdAt(String id, FLocation flocation); + + public abstract void setFactionAt(Faction faction, FLocation flocation); + + public abstract void removeAt(FLocation flocation); + + public abstract Set getAllClaims(String factionId); + + public abstract Set getAllClaims(Faction faction); + + // anot to be confused with claims, ownership referring to further member-specific ownership of a claim + public abstract void clearOwnershipAt(FLocation flocation); + + public abstract void unclaimAll(String factionId); + + // Is this coord NOT completely surrounded by coords claimed by the same faction? + // Simpler: Is there any nearby coord with a faction other than the faction here? + public abstract boolean isBorderLocation(FLocation flocation); + + // Is this coord connected to any coord claimed by the specified faction? + public abstract boolean isConnectedLocation(FLocation flocation, Faction faction); + + public abstract boolean hasFactionWithin(FLocation flocation, Faction faction, int radius); + + //----------------------------------------------// + // Cleaner. Remove orphaned foreign keys + //----------------------------------------------// + + public abstract void clean(); + + //----------------------------------------------// + // Coord count + //----------------------------------------------// + + public abstract int getFactionCoordCount(String factionId); + + public abstract int getFactionCoordCount(Faction faction); + + public abstract int getFactionCoordCountInWorld(Faction faction, String worldName); + + //----------------------------------------------// + // Map generation + //----------------------------------------------// + + /** + * The map is relative to a coord and a faction north is in the direction of decreasing x east is in the direction + * of decreasing z + */ + public abstract ArrayList getMap(Faction faction, FLocation flocation, double inDegrees); + + public abstract void forceSave(); + + public abstract void forceSave(boolean sync); + + public abstract boolean load(); +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/Conf.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/Conf.java new file mode 100644 index 0000000..d166a1e --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/Conf.java @@ -0,0 +1,467 @@ +package com.massivecraft.factions; + +import com.google.common.collect.ImmutableMap; +import com.massivecraft.factions.integration.dynmap.DynmapStyle; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.entity.EntityType; + +import java.util.*; + +public class Conf { + + public static List baseCommandAliases = new ArrayList(); + public static boolean allowNoSlashCommand = true; + + // Colors + public static ChatColor colorMember = ChatColor.GREEN; + public static ChatColor colorAlly = ChatColor.LIGHT_PURPLE; + public static ChatColor colorTruce = ChatColor.DARK_PURPLE; + public static ChatColor colorNeutral = ChatColor.WHITE; + public static ChatColor colorEnemy = ChatColor.RED; + + public static ChatColor colorPeaceful = ChatColor.GOLD; + public static ChatColor colorWar = ChatColor.DARK_RED; + + // Power + public static double powerPlayerMax = 10.0; + public static double powerPlayerMin = -10.0; + public static double powerPlayerStarting = 0.0; + public static double powerPerMinute = 0.2; // Default health rate... it takes 5 min to heal one power + public static double powerPerDeath = 4.0; // A death makes you lose 4 power + public static boolean powerRegenOffline = false; // does player power regenerate even while they're offline? + public static double powerOfflineLossPerDay = 0.0; // players will lose this much power per day offline + public static double powerOfflineLossLimit = 0.0; // players will no longer lose power from being offline once their power drops to this amount or less + public static double powerFactionMax = 0.0; // if greater than 0, the cap on how much power a faction can have (additional power from players beyond that will act as a "buffer" of sorts) + + public static String prefixAdmin = "[DrugLord] ";//** + public static String prefixMod = "[Lieutenant] ";//* + + public static int factionTagLengthMin = 3; + public static int factionTagLengthMax = 10; + public static boolean factionTagForceUpperCase = false; + + public static boolean newFactionsDefaultOpen = false; + + // when faction membership hits this limit, players will no longer be able to join using /f join; default is 0, no limit + public static int factionMemberLimit = 0; + + // what faction ID to start new players in when they first join the server; default is 0, "no faction" + public static String newPlayerStartingFactionID = "0"; + + public static boolean showMapFactionKey = true; + public static boolean showNeutralFactionsOnMap = true; + public static boolean showEnemyFactionsOnMap = true; + + // Disallow joining/leaving/kicking while power is negative + public static boolean canLeaveWithNegativePower = true; + + // Configuration for faction-only chat + public static boolean factionOnlyChat = true; + // Configuration on the Faction tag in chat messages. + public static boolean chatTagEnabled = true; + public static transient boolean chatTagHandledByAnotherPlugin = false; + public static boolean chatTagRelationColored = true; + public static String chatTagReplaceString = "[CARTEL]"; + public static String chatTagInsertAfterString = ""; + public static String chatTagInsertBeforeString = ""; + public static int chatTagInsertIndex = 0; + public static boolean chatTagPadBefore = false; + public static boolean chatTagPadAfter = true; + public static String chatTagFormat = "%s" + ChatColor.WHITE; + public static String factionChatFormat = "%s:" + ChatColor.WHITE + " %s"; + public static String allianceChatFormat = ChatColor.LIGHT_PURPLE + "%s:" + ChatColor.WHITE + " %s"; + public static String truceChatFormat = ChatColor.DARK_PURPLE + "%s:" + ChatColor.WHITE + " %s"; + + public static boolean broadcastDescriptionChanges = false; + public static boolean broadcastTagChanges = false; + + public static double saveToFileEveryXMinutes = 30.0; + + public static double autoLeaveAfterDaysOfInactivity = 10.0; + public static double autoLeaveRoutineRunsEveryXMinutes = 5.0; + public static int autoLeaveRoutineMaxMillisecondsPerTick = 5; // 1 server tick is roughly 50ms, so default max 10% of a tick + public static boolean removePlayerDataWhenBanned = true; + public static boolean autoLeaveDeleteFPlayerData = true; // Let them just remove player from Faction. + + public static boolean worldGuardChecking = false; + public static boolean worldGuardBuildPriority = false; + + // server logging options + public static boolean logFactionCreate = true; + public static boolean logFactionDisband = true; + public static boolean logFactionJoin = true; + public static boolean logFactionKick = true; + public static boolean logFactionLeave = true; + public static boolean logLandClaims = true; + public static boolean logLandUnclaims = true; + public static boolean logMoneyTransactions = true; + public static boolean logPlayerCommands = true; + + // prevent some potential exploits + public static boolean handleExploitObsidianGenerators = true; + public static boolean handleExploitEnderPearlClipping = true; + public static boolean handleExploitInteractionSpam = true; + public static boolean handleExploitTNTWaterlog = false; + public static boolean handleExploitLiquidFlow = false; + + public static boolean homesEnabled = true; + public static boolean homesMustBeInClaimedTerritory = true; + public static boolean homesTeleportToOnDeath = true; + public static boolean homesRespawnFromNoPowerLossWorlds = true; + public static boolean homesTeleportCommandEnabled = true; + public static boolean homesTeleportCommandEssentialsIntegration = true; + public static boolean homesTeleportCommandSmokeEffectEnabled = true; + public static float homesTeleportCommandSmokeEffectThickness = 3f; + public static boolean homesTeleportAllowedFromEnemyTerritory = true; + public static boolean homesTeleportAllowedFromDifferentWorld = true; + public static double homesTeleportAllowedEnemyDistance = 32.0; + public static boolean homesTeleportIgnoreEnemiesIfInOwnTerritory = true; + + public static boolean disablePVPBetweenNeutralFactions = false; + public static boolean disablePVPForFactionlessPlayers = false; + public static boolean enablePVPAgainstFactionlessInAttackersLand = false; + + public static int noPVPDamageToOthersForXSecondsAfterLogin = 3; + + public static boolean peacefulTerritoryDisablePVP = true; + public static boolean peacefulTerritoryDisableMonsters = false; + public static boolean peacefulTerritoryDisableBoom = false; + public static boolean peacefulMembersDisablePowerLoss = true; + + public static boolean permanentFactionsDisableLeaderPromotion = false; + + public static boolean claimsMustBeConnected = false; + public static boolean claimsCanBeUnconnectedIfOwnedByOtherFaction = true; + public static int claimsRequireMinFactionMembers = 1; + public static int claimedLandsMax = 0; + public static int lineClaimLimit = 5; + + // if someone is doing a radius claim and the process fails to claim land this many times in a row, it will exit + public static int radiusClaimFailureLimit = 9; + + public static double considerFactionsReallyOfflineAfterXMinutes = 0.0; + + public static int actionDeniedPainAmount = 1; + + // commands which will be prevented if the player is a member of a permanent faction + public static Set permanentFactionMemberDenyCommands = new LinkedHashSet(); + + // commands which will be prevented when in claimed territory of another faction + public static Set territoryNeutralDenyCommands = new LinkedHashSet(); + public static Set territoryEnemyDenyCommands = new LinkedHashSet(); + public static Set territoryAllyDenyCommands = new LinkedHashSet(); + public static Set warzoneDenyCommands = new LinkedHashSet(); + public static Set wildernessDenyCommands = new LinkedHashSet(); + + public static boolean territoryDenyBuild = true; + public static boolean territoryDenyBuildWhenOffline = true; + public static boolean territoryPainBuild = false; + public static boolean territoryPainBuildWhenOffline = false; + public static boolean territoryDenyUseage = true; + public static boolean territoryEnemyDenyBuild = true; + public static boolean territoryEnemyDenyBuildWhenOffline = true; + public static boolean territoryEnemyPainBuild = false; + public static boolean territoryEnemyPainBuildWhenOffline = false; + public static boolean territoryEnemyDenyUseage = true; + public static boolean territoryEnemyProtectMaterials = true; + public static boolean territoryAllyDenyBuild = true; + public static boolean territoryAllyDenyBuildWhenOffline = true; + public static boolean territoryAllyPainBuild = false; + public static boolean territoryAllyPainBuildWhenOffline = false; + public static boolean territoryAllyDenyUseage = true; + public static boolean territoryAllyProtectMaterials = true; + public static boolean territoryTruceDenyBuild = true; + public static boolean territoryTruceDenyBuildWhenOffline = true; + public static boolean territoryTrucePainBuild = false; + public static boolean territoryTrucePainBuildWhenOffline = false; + public static boolean territoryTruceDenyUseage = true; + public static boolean territoryTruceProtectMaterials = true; + public static boolean territoryBlockCreepers = false; + public static boolean territoryBlockCreepersWhenOffline = false; + public static boolean territoryBlockFireballs = false; + public static boolean territoryBlockFireballsWhenOffline = false; + public static boolean territoryBlockTNT = false; + public static boolean territoryBlockTNTWhenOffline = false; + public static boolean territoryDenyEndermanBlocks = true; + public static boolean territoryDenyEndermanBlocksWhenOffline = true; + + public static boolean safeZoneDenyBuild = true; + public static boolean safeZoneDenyUseage = true; + public static boolean safeZoneBlockTNT = true; + public static boolean safeZonePreventAllDamageToPlayers = false; + public static boolean safeZoneDenyEndermanBlocks = true; + + public static boolean warZoneDenyBuild = true; + public static boolean warZoneDenyUseage = true; + public static boolean warZoneBlockCreepers = false; + public static boolean warZoneBlockFireballs = false; + public static boolean warZoneBlockTNT = true; + public static boolean warZonePowerLoss = true; + public static boolean warZoneFriendlyFire = false; + public static boolean warZoneDenyEndermanBlocks = true; + + public static boolean wildernessDenyBuild = false; + public static boolean wildernessDenyUseage = false; + public static boolean wildernessBlockCreepers = false; + public static boolean wildernessBlockFireballs = false; + public static boolean wildernessBlockTNT = false; + public static boolean wildernessPowerLoss = true; + public static boolean wildernessDenyEndermanBlocks = false; + + // for claimed areas where further faction-member ownership can be defined + public static boolean ownedAreasEnabled = true; + public static int ownedAreasLimitPerFaction = 0; + public static boolean ownedAreasModeratorsCanSet = false; + public static boolean ownedAreaModeratorsBypass = true; + public static boolean ownedAreaDenyBuild = true; + public static boolean ownedAreaPainBuild = false; + public static boolean ownedAreaProtectMaterials = true; + public static boolean ownedAreaDenyUseage = true; + + public static boolean ownedMessageOnBorder = true; + public static boolean ownedMessageInsideTerritory = true; + public static boolean ownedMessageByChunk = false; + + public static boolean pistonProtectionThroughDenyBuild = true; + + public static Set territoryProtectedMaterials = EnumSet.noneOf(Material.class); + public static Set territoryDenyUseageMaterials = EnumSet.noneOf(Material.class); + public static Set territoryProtectedMaterialsWhenOffline = EnumSet.noneOf(Material.class); + public static Set territoryDenyUseageMaterialsWhenOffline = EnumSet.noneOf(Material.class); + + public static transient Set safeZoneNerfedCreatureTypes = EnumSet.noneOf(EntityType.class); + // Economy settings + public static boolean econEnabled = true; + public static String econUniverseAccount = ""; + public static double econCostClaimWilderness = 50000.0;//30.0 + public static double econCostClaimFromFactionBonus = 0.0;//30.0 + public static double econOverclaimRewardMultiplier = 0.0; + public static double econClaimAdditionalMultiplier = 0.05;//0.5 + public static double econClaimRefundMultiplier = 0.0;//0.7 + public static double econClaimUnconnectedFee = 0.0; + public static double econCostCreate = 1000000.0;//100.0 + public static double econCostOwner = 0.0;//15.0 + public static double econCostSethome = 100000.0;//30.0 + public static double econCostJoin = 0.0; + public static double econCostLeave = 0.0; + public static double econCostKick = 0.0; + public static double econCostInvite = 50000.0; + public static double econCostHome = 0.0; + public static double econCostTag = 100000.0; + public static double econCostDesc = 0.0; + public static double econCostTitle = 0.0; + public static double econCostList = 0.0; + public static double econCostMap = 0.0; + public static double econCostPower = 0.0; + public static double econCostShow = 0.0; + public static double econCostStuck = 0.0; + public static double econCostOpen = 0.0; + public static double econCostAlly = 0.0; + public static double econCostTruce = 0.0; + public static double econCostEnemy = 0.0; + public static double econCostNeutral = 0.0; + public static double econCostNoBoom = 0.0; + + + // -------------------------------------------- // + // INTEGRATION: DYNMAP + // -------------------------------------------- // + + // Should the dynmap intagration be used? + public static boolean dynmapUse = false; + + // Name of the Factions layer + public static String dynmapLayerName = "Factions"; + + // Should the layer be visible per default + public static boolean dynmapLayerVisible = true; + + // Ordering priority in layer menu (low goes before high - default is 0) + public static int dynmapLayerPriority = 2; + + // (optional) set minimum zoom level before layer is visible (0 = default, always visible) + public static int dynmapLayerMinimumZoom = 0; + + // Format for popup - substitute values for macros + public static String dynmapDescription = + "

\n" + + "%name%
\n" + + "%description%
" + + "
\n" + + "Leader: %players.leader%
\n" + + "Admins: %players.admins.count%
\n" + + "Moderators: %players.moderators.count%
\n" + + "Members: %players.normals.count%
\n" + + "TOTAL: %players.count%
\n" + + "
\n" + + "Bank: %money%
\n" + + "
\n" + + "
"; + + // Enable the %money% macro. Only do this if you know your economy manager is thread-safe. + public static boolean dynmapDescriptionMoney = false; + + // Allow players in faction to see one another on Dynmap (only relevant if Dynmap has 'player-info-protected' enabled) + public static boolean dynmapVisibilityByFaction = true; + + // Optional setting to limit which regions to show. + // If empty all regions are shown. + // Specify Faction either by name or UUID. + // To show all regions on a given world, add 'world:' to the list. + public static Set dynmapVisibleFactions = new HashSet(); + + // Optional setting to hide specific Factions. + // Specify Faction either by name or UUID. + // To hide all regions on a given world, add 'world:' to the list. + public static Set dynmapHiddenFactions = new HashSet(); + + // Region Style + public static final transient String DYNMAP_STYLE_LINE_COLOR = "#00FF00"; + public static final transient double DYNMAP_STYLE_LINE_OPACITY = 0.8D; + public static final transient int DYNMAP_STYLE_LINE_WEIGHT = 3; + public static final transient String DYNMAP_STYLE_FILL_COLOR = "#00FF00"; + public static final transient double DYNMAP_STYLE_FILL_OPACITY = 0.35D; + public static final transient String DYNMAP_STYLE_HOME_MARKER = "greenflag"; + public static final transient boolean DYNMAP_STYLE_BOOST = false; + + public static DynmapStyle dynmapDefaultStyle = new DynmapStyle() + .setStrokeColor(DYNMAP_STYLE_LINE_COLOR) + .setLineOpacity(DYNMAP_STYLE_LINE_OPACITY) + .setLineWeight(DYNMAP_STYLE_LINE_WEIGHT) + .setFillColor(DYNMAP_STYLE_FILL_COLOR) + .setFillOpacity(DYNMAP_STYLE_FILL_OPACITY) + .setHomeMarker(DYNMAP_STYLE_HOME_MARKER) + .setBoost(DYNMAP_STYLE_BOOST); + + // Optional per Faction style overrides. Any defined replace those in dynmapDefaultStyle. + // Specify Faction either by name or UUID. + public static Map dynmapFactionStyles = ImmutableMap.of( + "SafeZone", new DynmapStyle().setStrokeColor("#FF00FF").setFillColor("#FF00FF").setBoost(false), + "WarZone", new DynmapStyle().setStrokeColor("#FF0000").setFillColor("#FF0000").setBoost(false) + ); + + + //Faction banks, to pay for land claiming and other costs instead of individuals paying for them + public static boolean bankEnabled = true; + public static boolean bankMembersCanWithdraw = false; //Have to be at least moderator to withdraw or pay money to another faction + public static boolean bankFactionPaysCosts = true; //The faction pays for faction command costs, such as sethome + public static boolean bankFactionPaysLandCosts = true; //The faction pays for land claiming costs. + + // mainly for other plugins/mods that use a fake player to take actions, which shouldn't be subject to our protections + public static Set playersWhoBypassAllProtection = new LinkedHashSet(); + + public static Set worldsNoClaiming = new LinkedHashSet(); + public static Set worldsNoPowerLoss = new LinkedHashSet(); + public static Set worldsIgnorePvP = new LinkedHashSet(); + public static Set worldsNoWildernessProtection = new LinkedHashSet(); + + // faction- + public static String vaultPrefix = "faction-%s"; + public static int defaultMaxVaults = 0; + + public static Backend backEnd = Backend.JSON; + + public static transient int mapHeight = 8; + public static transient int mapWidth = 19; + public static transient char[] mapKeyChrs = "\\/#$%=&^ABCDEFGHJKLMNOPQRSTUVWXYZ1234567890abcdeghjmnopqrsuvwxyz?".toCharArray(); + + static { + baseCommandAliases.add("f"); + + territoryEnemyDenyCommands.add("home"); + territoryEnemyDenyCommands.add("sethome"); + territoryEnemyDenyCommands.add("spawn"); + territoryEnemyDenyCommands.add("tpahere"); + territoryEnemyDenyCommands.add("tpaccept"); + territoryEnemyDenyCommands.add("tpa"); + + territoryProtectedMaterials.add(Material.WOODEN_DOOR); + territoryProtectedMaterials.add(Material.TRAP_DOOR); + territoryProtectedMaterials.add(Material.FENCE_GATE); + territoryProtectedMaterials.add(Material.DISPENSER); + territoryProtectedMaterials.add(Material.CHEST); + territoryProtectedMaterials.add(Material.FURNACE); + territoryProtectedMaterials.add(Material.BURNING_FURNACE); + territoryProtectedMaterials.add(Material.DIODE_BLOCK_OFF); + territoryProtectedMaterials.add(Material.DIODE_BLOCK_ON); + territoryProtectedMaterials.add(Material.JUKEBOX); + territoryProtectedMaterials.add(Material.BREWING_STAND); + territoryProtectedMaterials.add(Material.ENCHANTMENT_TABLE); + territoryProtectedMaterials.add(Material.CAULDRON); + territoryProtectedMaterials.add(Material.SOIL); + territoryProtectedMaterials.add(Material.BEACON); + territoryProtectedMaterials.add(Material.ANVIL); + territoryProtectedMaterials.add(Material.TRAPPED_CHEST); + territoryProtectedMaterials.add(Material.DROPPER); + territoryProtectedMaterials.add(Material.HOPPER); + + territoryDenyUseageMaterials.add(Material.FIREBALL); + territoryDenyUseageMaterials.add(Material.FLINT_AND_STEEL); + territoryDenyUseageMaterials.add(Material.BUCKET); + territoryDenyUseageMaterials.add(Material.WATER_BUCKET); + territoryDenyUseageMaterials.add(Material.LAVA_BUCKET); + + territoryProtectedMaterialsWhenOffline.add(Material.WOODEN_DOOR); + territoryProtectedMaterialsWhenOffline.add(Material.TRAP_DOOR); + territoryProtectedMaterialsWhenOffline.add(Material.FENCE_GATE); + territoryProtectedMaterialsWhenOffline.add(Material.DISPENSER); + territoryProtectedMaterialsWhenOffline.add(Material.CHEST); + territoryProtectedMaterialsWhenOffline.add(Material.FURNACE); + territoryProtectedMaterialsWhenOffline.add(Material.BURNING_FURNACE); + territoryProtectedMaterialsWhenOffline.add(Material.DIODE_BLOCK_OFF); + territoryProtectedMaterialsWhenOffline.add(Material.DIODE_BLOCK_ON); + territoryProtectedMaterialsWhenOffline.add(Material.JUKEBOX); + territoryProtectedMaterialsWhenOffline.add(Material.BREWING_STAND); + territoryProtectedMaterialsWhenOffline.add(Material.ENCHANTMENT_TABLE); + territoryProtectedMaterialsWhenOffline.add(Material.CAULDRON); + territoryProtectedMaterialsWhenOffline.add(Material.SOIL); + territoryProtectedMaterialsWhenOffline.add(Material.BEACON); + territoryProtectedMaterialsWhenOffline.add(Material.ANVIL); + territoryProtectedMaterialsWhenOffline.add(Material.TRAPPED_CHEST); + territoryProtectedMaterialsWhenOffline.add(Material.DROPPER); + territoryProtectedMaterialsWhenOffline.add(Material.HOPPER); + + territoryDenyUseageMaterialsWhenOffline.add(Material.FIREBALL); + territoryDenyUseageMaterialsWhenOffline.add(Material.FLINT_AND_STEEL); + territoryDenyUseageMaterialsWhenOffline.add(Material.BUCKET); + territoryDenyUseageMaterialsWhenOffline.add(Material.WATER_BUCKET); + territoryDenyUseageMaterialsWhenOffline.add(Material.LAVA_BUCKET); + + safeZoneNerfedCreatureTypes.add(EntityType.BLAZE); + safeZoneNerfedCreatureTypes.add(EntityType.CAVE_SPIDER); + safeZoneNerfedCreatureTypes.add(EntityType.CREEPER); + safeZoneNerfedCreatureTypes.add(EntityType.ENDER_DRAGON); + safeZoneNerfedCreatureTypes.add(EntityType.ENDERMAN); + safeZoneNerfedCreatureTypes.add(EntityType.GHAST); + safeZoneNerfedCreatureTypes.add(EntityType.MAGMA_CUBE); + safeZoneNerfedCreatureTypes.add(EntityType.PIG_ZOMBIE); + safeZoneNerfedCreatureTypes.add(EntityType.SILVERFISH); + safeZoneNerfedCreatureTypes.add(EntityType.SKELETON); + safeZoneNerfedCreatureTypes.add(EntityType.SPIDER); + safeZoneNerfedCreatureTypes.add(EntityType.SLIME); + safeZoneNerfedCreatureTypes.add(EntityType.WITCH); + safeZoneNerfedCreatureTypes.add(EntityType.WITHER); + safeZoneNerfedCreatureTypes.add(EntityType.ZOMBIE); + } + + // -------------------------------------------- // + // Persistance + // -------------------------------------------- // + private static transient Conf i = new Conf(); + + public static void load() { + P.p.persist.loadOrSaveDefault(i, Conf.class, "conf"); + } + + public static void save() { + P.p.persist.save(i); + } + + public enum Backend { + JSON, + //MYSQL, TODO + ; + } +} + diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/FLocation.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/FLocation.java new file mode 100644 index 0000000..790ddac --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/FLocation.java @@ -0,0 +1,251 @@ +package com.massivecraft.factions; + +import com.massivecraft.factions.util.MiscUtil; +import org.bukkit.*; +import org.bukkit.block.Block; +import org.bukkit.entity.Player; + +import java.io.Serializable; +import java.util.HashSet; +import java.util.LinkedHashSet; +import java.util.Set; + +public class FLocation implements Serializable { + private static final long serialVersionUID = -8292915234027387983L; + private static final boolean worldBorderSupport; + private String worldName = "world"; + private int x = 0; + private int z = 0; + + static { + boolean worldBorderClassPresent = false; + try { + Class.forName("org.bukkit.WorldBorder"); + worldBorderClassPresent = true; + } catch (ClassNotFoundException ignored) {} + + worldBorderSupport = worldBorderClassPresent; + } + + //----------------------------------------------// + // Constructors + //----------------------------------------------// + + public FLocation() { + + } + + public FLocation(String worldName, int x, int z) { + this.worldName = worldName; + this.x = x; + this.z = z; + } + + public FLocation(Location location) { + this(location.getWorld().getName(), blockToChunk(location.getBlockX()), blockToChunk(location.getBlockZ())); + } + + public FLocation(Player player) { + this(player.getLocation()); + } + + public FLocation(FPlayer fplayer) { + this(fplayer.getPlayer()); + } + + public FLocation(Block block) { + this(block.getLocation()); + } + + //----------------------------------------------// + // Getters and Setters + //----------------------------------------------// + + public String getWorldName() { + return worldName; + } + + public World getWorld() { + return Bukkit.getWorld(worldName); + } + + public void setWorldName(String worldName) { + this.worldName = worldName; + } + + public long getX() { + return x; + } + + public void setX(int x) { + this.x = x; + } + + public long getZ() { + return z; + } + + public void setZ(int z) { + this.z = z; + } + + public String getCoordString() { + return "" + x + "," + z; + } + + @Override + public String toString() { + return "[" + this.getWorldName() + "," + this.getCoordString() + "]"; + } + + public static FLocation fromString(String string) { + int index = string.indexOf(",", 0); + int start = 1; + String worldName = string.substring(start, index); + start = index + 1; + index = string.indexOf(",", start); + int x = Integer.valueOf(string.substring(start, index)); + int y = Integer.valueOf(string.substring(index + 1, string.length() - 1)); + return new FLocation(worldName, x, y); + } + + //----------------------------------------------// + // Block/Chunk/Region Value Transformation + //----------------------------------------------// + + // bit-shifting is used because it's much faster than standard division and multiplication + public static int blockToChunk(int blockVal) { // 1 chunk is 16x16 blocks + return blockVal >> 4; // ">> 4" == "/ 16" + } + + public static int blockToRegion(int blockVal) { // 1 region is 512x512 blocks + return blockVal >> 9; // ">> 9" == "/ 512" + } + + public static int chunkToRegion(int chunkVal) { // 1 region is 32x32 chunks + return chunkVal >> 5; // ">> 5" == "/ 32" + } + + public static int chunkToBlock(int chunkVal) { + return chunkVal << 4; // "<< 4" == "* 16" + } + + public static int regionToBlock(int regionVal) { + return regionVal << 9; // "<< 9" == "* 512" + } + + public static int regionToChunk(int regionVal) { + return regionVal << 5; // "<< 5" == "* 32" + } + + //----------------------------------------------// + // Misc Geometry + //----------------------------------------------// + + public FLocation getRelative(int dx, int dz) { + return new FLocation(this.worldName, this.x + dx, this.z + dz); + } + + public double getDistanceTo(FLocation that) { + double dx = that.x - this.x; + double dz = that.z - this.z; + return Math.sqrt(dx * dx + dz * dz); + } + + public double getDistanceSquaredTo(FLocation that) { + double dx = that.x - this.x; + double dz = that.z - this.z; + return dx * dx + dz * dz; + } + + public boolean isInChunk(Location loc) { + if (loc == null) { + return false; + } + Chunk chunk = loc.getChunk(); + return loc.getWorld().getName().equalsIgnoreCase(getWorldName()) && chunk.getX() == x && chunk.getZ() == z; + } + + /** + * Checks if the chunk represented by this FLocation is outside the world border + * + * @param buffer the number of chunks from the border that will be treated as "outside" + * @return whether this location is outside of the border + */ + public boolean isOutsideWorldBorder(int buffer) { + if (!worldBorderSupport) { + return false; + } + + WorldBorder border = getWorld().getWorldBorder(); + Chunk chunk = border.getCenter().getChunk(); + + int lim = FLocation.chunkToRegion((int) border.getSize()) - buffer; + int diffX = Math.abs(chunk.getX() - x); + int diffZ = Math.abs(chunk.getZ() - z); + return diffX > lim || diffZ > lim; + } + + //----------------------------------------------// + // Some Geometry + //----------------------------------------------// + public Set getCircle(double radius) { + double radiusSquared = radius * radius; + + Set ret = new LinkedHashSet(); + if (radius <= 0) { + return ret; + } + + int xfrom = (int) Math.floor(this.x - radius); + int xto = (int) Math.ceil(this.x + radius); + int zfrom = (int) Math.floor(this.z - radius); + int zto = (int) Math.ceil(this.z + radius); + + for (int x = xfrom; x <= xto; x++) { + for (int z = zfrom; z <= zto; z++) { + FLocation potential = new FLocation(this.worldName, x, z); + if (this.getDistanceSquaredTo(potential) <= radiusSquared) { + ret.add(potential); + } + } + } + + return ret; + } + + public static HashSet getArea(FLocation from, FLocation to) { + HashSet ret = new HashSet(); + + for (long x : MiscUtil.range(from.getX(), to.getX())) { + for (long z : MiscUtil.range(from.getZ(), to.getZ())) { + ret.add(new FLocation(from.getWorldName(), (int) x, (int) z)); + } + } + + return ret; + } + + //----------------------------------------------// + // Comparison + //----------------------------------------------// + + @Override + public int hashCode() { + // should be fast, with good range and few hash collisions: (x * 512) + z + worldName.hashCode + return (this.x << 9) + this.z + (this.worldName != null ? this.worldName.hashCode() : 0); + } + + @Override + public boolean equals(Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof FLocation)) { + return false; + } + + FLocation that = (FLocation) obj; + return this.x == that.x && this.z == that.z && (this.worldName == null ? that.worldName == null : this.worldName.equals(that.worldName)); + } +} \ No newline at end of file diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/FPlayer.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/FPlayer.java new file mode 100644 index 0000000..3c54b6a --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/FPlayer.java @@ -0,0 +1,264 @@ +package com.massivecraft.factions; + +import com.massivecraft.factions.iface.EconomyParticipator; +import com.massivecraft.factions.iface.RelationParticipator; +import com.massivecraft.factions.struct.ChatMode; +import com.massivecraft.factions.struct.Relation; +import com.massivecraft.factions.struct.Role; +import com.massivecraft.factions.util.WarmUpUtil; +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.entity.Player; + +import java.util.List; + + +/** + * Logged in players always have exactly one FPlayer instance. Logged out players may or may not have an FPlayer + * instance. They will always have one if they are part of a faction. This is because only players with a faction are + * saved to disk (in order to not waste disk space). + *

+ * The FPlayer is linked to a minecraft player using the player name. + *

+ * The same instance is always returned for the same player. This means you can use the == operator. No .equals method + * necessary. + */ + +public interface FPlayer extends EconomyParticipator { + public void login(); + + public void logout(); + + public Faction getFaction(); + + public String getFactionId(); + + public boolean hasFaction(); + + public void setFaction(Faction faction); + + public boolean willAutoLeave(); + + public void setAutoLeave(boolean autoLeave); + + public long getLastFrostwalkerMessage(); + + public void setLastFrostwalkerMessage(); + + public void setMonitorJoins(boolean monitor); + + public boolean isMonitoringJoins(); + + public Role getRole(); + + public void setRole(Role role); + + public double getPowerBoost(); + + public void setPowerBoost(double powerBoost); + + public Faction getAutoClaimFor(); + + public void setAutoClaimFor(Faction faction); + + public boolean isAutoSafeClaimEnabled(); + + public void setIsAutoSafeClaimEnabled(boolean enabled); + + public boolean isAutoWarClaimEnabled(); + + public void setIsAutoWarClaimEnabled(boolean enabled); + + public boolean isAdminBypassing(); + + public boolean isVanished(); + + public void setIsAdminBypassing(boolean val); + + public void setChatMode(ChatMode chatMode); + + public ChatMode getChatMode(); + + public void setIgnoreAllianceChat(boolean ignore); + + public boolean isIgnoreAllianceChat(); + + public void setSpyingChat(boolean chatSpying); + + public boolean isSpyingChat(); + + public boolean showScoreboard(); + + public void setShowScoreboard(boolean show); + + // FIELD: account + public String getAccountId(); + + public void resetFactionData(boolean doSpoutUpdate); + + public void resetFactionData(); + + public long getLastLoginTime(); + + public void setLastLoginTime(long lastLoginTime); + + public boolean isMapAutoUpdating(); + + public void setMapAutoUpdating(boolean mapAutoUpdating); + + public boolean hasLoginPvpDisabled(); + + public FLocation getLastStoodAt(); + + public void setLastStoodAt(FLocation flocation); + + public String getTitle(); + + public void setTitle(String title); + + public String getName(); + + public String getTag(); + + // Base concatenations: + + public String getNameAndSomething(String something); + + public String getNameAndTitle(); + + public String getNameAndTag(); + + // Colored concatenations: + // These are used in information messages + + public String getNameAndTitle(Faction faction); + + public String getNameAndTitle(FPlayer fplayer); + + // Chat CoreTag: + // These are injected into the format of global chat messages. + + public String getChatTag(); + + // Colored Chat CoreTag + public String getChatTag(Faction faction); + + public String getChatTag(FPlayer fplayer); + + public int getKills(); + + public int getDeaths(); + + + // ------------------------------- + // Relation and relation colors + // ------------------------------- + + @Override + public String describeTo(RelationParticipator that, boolean ucfirst); + + @Override + public String describeTo(RelationParticipator that); + + @Override + public Relation getRelationTo(RelationParticipator rp); + + @Override + public Relation getRelationTo(RelationParticipator rp, boolean ignorePeaceful); + + public Relation getRelationToLocation(); + + @Override + public ChatColor getColorTo(RelationParticipator rp); + + //----------------------------------------------// + // Health + //----------------------------------------------// + public void heal(int amnt); + + + //----------------------------------------------// + // Power + //----------------------------------------------// + public double getPower(); + + public void alterPower(double delta); + + public double getPowerMax(); + + public double getPowerMin(); + + public int getPowerRounded(); + + public int getPowerMaxRounded(); + + public int getPowerMinRounded(); + + public void updatePower(); + + public void losePowerFromBeingOffline(); + + public void onDeath(); + + //----------------------------------------------// + // Territory + //----------------------------------------------// + public boolean isInOwnTerritory(); + + public boolean isInOthersTerritory(); + + public boolean isInAllyTerritory(); + + public boolean isInNeutralTerritory(); + + public boolean isInEnemyTerritory(); + + public void sendFactionHereMessage(Faction from); + + // ------------------------------- + // Actions + // ------------------------------- + + public void leave(boolean makePay); + + public boolean canClaimForFaction(Faction forFaction); + + public boolean canClaimForFactionAtLocation(Faction forFaction, Location location, boolean notifyFailure); + + public boolean attemptClaim(Faction forFaction, Location location, boolean notifyFailure); + + public void msg(String str, Object... args); + + public String getId(); + + public Player getPlayer(); + + public boolean isOnline(); + + public void sendMessage(String message); + + public void sendMessage(List messages); + + public boolean isOnlineAndVisibleTo(Player me); + + public void remove(); + + public boolean isOffline(); + + public void setId(String id); + + // ------------------------------- + // Warmups + // ------------------------------- + + public boolean isWarmingUp(); + + public WarmUpUtil.Warmup getWarmupType(); + + public void addWarmup(WarmUpUtil.Warmup warmup, int taskId); + + public void stopWarmup(); + + public void clearWarmup(); + +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/FPlayers.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/FPlayers.java new file mode 100644 index 0000000..fb56eff --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/FPlayers.java @@ -0,0 +1,41 @@ +package com.massivecraft.factions; + +import com.massivecraft.factions.zcore.persist.json.JSONFPlayers; +import org.bukkit.OfflinePlayer; +import org.bukkit.entity.Player; + +import java.util.Collection; + +public abstract class FPlayers { + protected static FPlayers instance = getFPlayersImpl(); + + public abstract void clean(); + + public static FPlayers getInstance() { + return instance; + } + + private static FPlayers getFPlayersImpl() { + switch (Conf.backEnd) { + case JSON: + return new JSONFPlayers(); + } + return null; + } + + public abstract Collection getOnlinePlayers(); + + public abstract FPlayer getByPlayer(Player player); + + public abstract Collection getAllFPlayers(); + + public abstract void forceSave(); + + public abstract void forceSave(boolean sync); + + public abstract FPlayer getByOfflinePlayer(OfflinePlayer player); + + public abstract FPlayer getById(String string); + + public abstract void load(); +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/Faction.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/Faction.java new file mode 100644 index 0000000..7b4b056 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/Faction.java @@ -0,0 +1,265 @@ +package com.massivecraft.factions; + +import com.massivecraft.factions.eco.EcoResult; +import com.massivecraft.factions.iface.EconomyParticipator; +import com.massivecraft.factions.iface.RelationParticipator; +import com.massivecraft.factions.struct.Relation; +import com.massivecraft.factions.struct.Role; +import com.massivecraft.factions.util.LazyLocation; +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.entity.Player; + +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; + +public interface Faction extends EconomyParticipator { + public HashMap> getAnnouncements(); + + public ConcurrentHashMap getWarps(); + + public LazyLocation getWarp(String name); + + public void setWarp(String name, LazyLocation loc); + + public boolean isWarp(String name); + + public boolean removeWarp(String name); + + public void clearWarps(); + + public int getMaxVaults(); + + public void setMaxVaults(int value); + + public void addAnnouncement(FPlayer fPlayer, String msg); + + public void sendUnreadAnnouncements(FPlayer fPlayer); + + public void removeAnnouncements(FPlayer fPlayer); + + public Set getInvites(); + + public String getId(); + + public void invite(FPlayer fplayer); + + public void deinvite(FPlayer fplayer); + + public boolean isInvited(FPlayer fplayer); + + public boolean getOpen(); + + public void setOpen(boolean isOpen); + + public boolean isPeaceful(); + + public void setPeaceful(boolean isPeaceful); + + public void setPeacefulExplosionsEnabled(boolean val); + + public boolean getPeacefulExplosionsEnabled(); + + public boolean noExplosionsInTerritory(); + + public boolean isPermanent(); + + public void setPermanent(boolean isPermanent); + + public String getTag(); + + public String getTag(String prefix); + + public String getTag(Faction otherFaction); + + public String getTag(FPlayer otherFplayer); + + public void setTag(String str); + + public String getComparisonTag(); + + public String getDescription(); + + public void setDescription(String value); + + public void setHome(Location home); + + public boolean hasHome(); + + public Location getHome(); + + public long getFoundedDate(); + + public void setFoundedDate(long newDate); + + public void confirmValidHome(); + + public String getAccountId(); + + public Integer getPermanentPower(); + + public void setPermanentPower(Integer permanentPower); + + public boolean hasPermanentPower(); + + public double getPowerBoost(); + + public void setPowerBoost(double powerBoost); + + public boolean noPvPInTerritory(); + + public boolean noMonstersInTerritory(); + + public boolean isNormal(); + + @Deprecated + public boolean isNone(); + + public boolean isWilderness(); + + public boolean isSafeZone(); + + public boolean isWarZone(); + + public boolean isPlayerFreeType(); + + public boolean isPowerFrozen(); + + public void setLastDeath(long time); + + public int getKills(); + + public int getDeaths(); + + // ------------------------------- + // Relation and relation colors + // ------------------------------- + + @Override + public String describeTo(RelationParticipator that, boolean ucfirst); + + @Override + public String describeTo(RelationParticipator that); + + @Override + public Relation getRelationTo(RelationParticipator rp); + + @Override + public Relation getRelationTo(RelationParticipator rp, boolean ignorePeaceful); + + @Override + public ChatColor getColorTo(RelationParticipator rp); + + public Relation getRelationWish(Faction otherFaction); + + public void setRelationWish(Faction otherFaction, Relation relation); + + public int getRelationCount(Relation relation); + + // ----------------------------------------------// + // Power + // ----------------------------------------------// + public double getPower(); + + public double getPowerMax(); + + public int getPowerRounded(); + + public int getPowerMaxRounded(); + + public int getLandRounded(); + + public int getLandRoundedInWorld(String worldName); + + public boolean hasLandInflation(); + + // ------------------------------- + // FPlayers + // ------------------------------- + + // maintain the reference list of FPlayers in this faction + public void refreshFPlayers(); + + public boolean addFPlayer(FPlayer fplayer); + + public boolean removeFPlayer(FPlayer fplayer); + + public int getSize(); + + public Set getFPlayers(); + + public Set getFPlayersWhereOnline(boolean online); + + public FPlayer getFPlayerAdmin(); + + public ArrayList getFPlayersWhereRole(Role role); + + public ArrayList getOnlinePlayers(); + + // slightly faster check than getOnlinePlayers() if you just want to see if + // there are any players online + public boolean hasPlayersOnline(); + + public void memberLoggedOff(); + + // used when current leader is about to be removed from the faction; + // promotes new leader, or disbands faction if no other members left + public void promoteNewLeader(); + + // ----------------------------------------------// + // Messages + // ----------------------------------------------// + public void msg(String message, Object... args); + + public void sendMessage(String message); + + public void sendMessage(List messages); + + // ----------------------------------------------// + // Ownership of specific claims + // ----------------------------------------------// + + public Map> getClaimOwnership(); + + public void clearAllClaimOwnership(); + + public void clearClaimOwnership(FLocation loc); + + public void clearClaimOwnership(FPlayer player); + + public int getCountOfClaimsWithOwners(); + + public boolean doesLocationHaveOwnersSet(FLocation loc); + + public boolean isPlayerInOwnerList(FPlayer player, FLocation loc); + + public void setPlayerAsOwner(FPlayer player, FLocation loc); + + public void removePlayerAsOwner(FPlayer player, FLocation loc); + + public Set getOwnerList(FLocation loc); + + public String getOwnerListString(FLocation loc); + + public boolean playerHasOwnershipRights(FPlayer fplayer, FLocation loc); + + // ----------------------------------------------// + // Persistance and entity management + // ----------------------------------------------// + public void remove(); + + public Set getAllClaims(); + + public void setId(String id); + + // ----------------------------------------------// + // Economy Faction stash + // ----------------------------------------------// + public double getStash(); + + public EcoResult addToStash(double amount); + + public EcoResult takeFromStash(double amount); + + public void setStash(double amount); +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/Factions.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/Factions.java new file mode 100644 index 0000000..5459b6d --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/Factions.java @@ -0,0 +1,55 @@ +package com.massivecraft.factions; + +import com.massivecraft.factions.zcore.persist.json.JSONFactions; + +import java.util.ArrayList; +import java.util.Set; + +public abstract class Factions { + protected static Factions instance = getFactionsImpl(); + + public abstract Faction getFactionById(String id); + + public abstract Faction getByTag(String str); + + public abstract Faction getBestTagMatch(String start); + + public abstract boolean isTagTaken(String str); + + public abstract boolean isValidFactionId(String id); + + public abstract Faction createFaction(); + + public abstract void removeFaction(String id); + + public abstract Set getFactionTags(); + + public abstract ArrayList getAllFactions(); + + @Deprecated + public abstract Faction getNone(); + + public abstract Faction getWilderness(); + + public abstract Faction getSafeZone(); + + public abstract Faction getWarZone(); + + public abstract void forceSave(); + + public abstract void forceSave(boolean sync); + + public static Factions getInstance() { + return instance; + } + + private static Factions getFactionsImpl() { + switch (Conf.backEnd) { + case JSON: + return new JSONFactions(); + } + return null; + } + + public abstract void load(); +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/P.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/P.java new file mode 100644 index 0000000..864d78e --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/P.java @@ -0,0 +1,334 @@ +package com.massivecraft.factions; + +import com.google.gson.GsonBuilder; +import com.google.gson.reflect.TypeToken; +import com.massivecraft.factions.cmd.CmdAutoHelp; +import com.massivecraft.factions.cmd.FCmdRoot; +import com.massivecraft.factions.integration.Econ; +import com.massivecraft.factions.integration.Essentials; +import com.massivecraft.factions.integration.Worldguard; +import com.massivecraft.factions.integration.dynmap.EngineDynmap; +import com.massivecraft.factions.listeners.*; +import com.massivecraft.factions.struct.ChatMode; +import com.massivecraft.factions.util.*; +import com.massivecraft.factions.zcore.MPlugin; +import com.massivecraft.factions.zcore.util.TextUtil; +import net.grandtheftmc.core.menus.MenuManager; +import net.milkbowl.vault.permission.Permission; +import org.bukkit.Bukkit; +import org.bukkit.OfflinePlayer; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.plugin.RegisteredServiceProvider; + +import java.lang.reflect.Modifier; +import java.lang.reflect.Type; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; +import java.util.logging.Level; + + +public class P extends MPlugin { + + // Our single plugin instance. + // Single 4 life. + public static P p; + public static Permission perms = null; + + // Persistence related + private boolean locked = false; + + public boolean getLocked() { + return this.locked; + } + + public void setLocked(boolean val) { + this.locked = val; + this.setAutoSave(val); + } + + private Integer AutoLeaveTask = null; + + // Commands + public FCmdRoot cmdBase; + public CmdAutoHelp cmdAutoHelp; + + private boolean hookedPlayervaults; + + public P() { + p = this; + } + + @Override + public void onEnable() { + if (!preEnable()) { + return; + } + this.loadSuccessful = false; + saveDefaultConfig(); + + // Load Conf from disk + Conf.load(); + Essentials.setup(); + FPlayers.getInstance().load(); + Factions.getInstance().load(); + for (FPlayer fPlayer : FPlayers.getInstance().getAllFPlayers()) { + Faction faction = Factions.getInstance().getFactionById(fPlayer.getFactionId()); + if (faction == null) { + log("Invalid cartel id on " + fPlayer.getName() + ":" + fPlayer.getFactionId()); + fPlayer.resetFactionData(false); + continue; + } + faction.addFPlayer(fPlayer); + } + Board.getInstance().load(); + Board.getInstance().clean(); + + // Add Base Commands + this.cmdBase = new FCmdRoot(); + this.cmdAutoHelp = new CmdAutoHelp(); + this.getBaseCommands().add(cmdBase); + + Econ.setup(); + setupPermissions(); + + if (Conf.worldGuardChecking || Conf.worldGuardBuildPriority) { + Worldguard.init(this); + } + + EngineDynmap.getInstance().init(); + + // start up task which runs the autoLeaveAfterDaysOfInactivity routine + startAutoLeaveTask(false); + + // Register Event Handlers + getServer().getPluginManager().registerEvents(new FactionsPlayerListener(this), this); + getServer().getPluginManager().registerEvents(new FactionsChatListener(this), this); + getServer().getPluginManager().registerEvents(new FactionsEntityListener(this), this); + getServer().getPluginManager().registerEvents(new FactionsExploitListener(), this); + getServer().getPluginManager().registerEvents(new FactionsBlockListener(this), this); + getServer().getPluginManager().registerEvents(new MenuListener(), this); + + // since some other plugins execute commands directly through this command interface, provide it + this.getCommand(this.refCommand).setExecutor(this); + + MenuManager.addMenu("carteltop", 54, "&cTop Cartels"); + + postEnable(); + this.loadSuccessful = true; + } + + private boolean setupPermissions() { + try { + RegisteredServiceProvider rsp = getServer().getServicesManager().getRegistration(Permission.class); + if (rsp != null) { + perms = rsp.getProvider(); + } + } catch (NoClassDefFoundError ex) { + return false; + } + return perms != null; + } + + @Override + public GsonBuilder getGsonBuilder() { + Type mapFLocToStringSetType = new TypeToken>>() { + }.getType(); + + return new GsonBuilder().setPrettyPrinting().disableHtmlEscaping().excludeFieldsWithModifiers(Modifier.TRANSIENT, Modifier.VOLATILE).registerTypeAdapter(LazyLocation.class, new MyLocationTypeAdapter()).registerTypeAdapter(mapFLocToStringSetType, new MapFLocToStringSetTypeAdapter()).registerTypeAdapterFactory(EnumTypeAdapter.ENUM_FACTORY); + } + + @Override + public void onDisable() { + // only save data if plugin actually completely loaded successfully + if (this.loadSuccessful) { + Conf.save(); + } + if (AutoLeaveTask != null) { + this.getServer().getScheduler().cancelTask(AutoLeaveTask); + AutoLeaveTask = null; + } + + super.onDisable(); + } + + public void startAutoLeaveTask(boolean restartIfRunning) { + if (AutoLeaveTask != null) { + if (!restartIfRunning) { + return; + } + this.getServer().getScheduler().cancelTask(AutoLeaveTask); + } + + if (Conf.autoLeaveRoutineRunsEveryXMinutes > 0.0) { + long ticks = (long) (20 * 60 * Conf.autoLeaveRoutineRunsEveryXMinutes); + AutoLeaveTask = getServer().getScheduler().scheduleSyncRepeatingTask(this, new AutoLeaveTask(), ticks, ticks); + } + } + + @Override + public void postAutoSave() { + //Board.getInstance().forceSave(); Not sure why this was there as it's called after the board is already saved. + Conf.save(); + } + + @Override + public boolean logPlayerCommands() { + return Conf.logPlayerCommands; + } + + @Override + public boolean handleCommand(CommandSender sender, String commandString, boolean testOnly) { + return sender instanceof Player && FactionsPlayerListener.preventCommand(commandString, (Player) sender) || super.handleCommand(sender, commandString, testOnly); + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] split) { + if (split.length == 0) { + return handleCommand(sender, "/c help", false); + } + + // otherwise, needs to be handled; presumably another plugin directly ran the command + String cmd = Conf.baseCommandAliases.isEmpty() ? "/c" : "/" + Conf.baseCommandAliases.get(0); + return handleCommand(sender, cmd + " " + TextUtil.implode(Arrays.asList(split), " "), false); + } + + + // -------------------------------------------- // + // Functions for other plugins to hook into + // -------------------------------------------- // + + // This value will be updated whenever new hooks are added + public int hookSupportVersion() { + return 3; + } + + // If another plugin is handling insertion of chat tags, this should be used to notify Factions + public void handleFactionTagExternally(boolean notByFactions) { + Conf.chatTagHandledByAnotherPlugin = notByFactions; + } + + // Simply put, should this chat event be left for Factions to handle? For now, that means players with Faction Chat + // enabled or use of the Factions f command without a slash; combination of isPlayerFactionChatting() and isFactionsCommand() + + public boolean shouldLetFactionsHandleThisChat(AsyncPlayerChatEvent event) { + return event != null && (isPlayerFactionChatting(event.getPlayer()) || isFactionsCommand(event.getMessage())); + } + + // Does player have Faction Chat enabled? If so, chat plugins should preferably not do channels, + // local chat, or anything else which targets individual recipients, so Faction Chat can be done + public boolean isPlayerFactionChatting(Player player) { + if (player == null) { + return false; + } + FPlayer me = FPlayers.getInstance().getByPlayer(player); + + return me != null && me.getChatMode().isAtLeast(ChatMode.ALLIANCE); + } + + // Is this chat message actually a Factions command, and thus should be left alone by other plugins? + + // TODO: GET THIS BACK AND WORKING + + public boolean isFactionsCommand(String check) { + return !(check == null || check.isEmpty()) && this.handleCommand(null, check, true); + } + + // Get a player's faction tag (faction name), mainly for usage by chat plugins for local/channel chat + public String getPlayerFactionTag(Player player) { + return getPlayerFactionTagRelation(player, null); + } + + // Same as above, but with relation (enemy/neutral/ally) coloring potentially added to the tag + public String getPlayerFactionTagRelation(Player speaker, Player listener) { + String tag = "~"; + + if (speaker == null) { + return tag; + } + + FPlayer me = FPlayers.getInstance().getByPlayer(speaker); + if (me == null) { + return tag; + } + + // if listener isn't set, or config option is disabled, give back uncolored tag + if (listener == null || !Conf.chatTagRelationColored) { + tag = me.getChatTag().trim(); + } else { + FPlayer you = FPlayers.getInstance().getByPlayer(listener); + if (you == null) { + tag = me.getChatTag().trim(); + } else // everything checks out, give the colored tag + { + tag = me.getChatTag(you).trim(); + } + } + if (tag.isEmpty()) { + tag = "~"; + } + + return tag; + } + + // Get a player's title within their faction, mainly for usage by chat plugins for local/channel chat + public String getPlayerTitle(Player player) { + if (player == null) { + return ""; + } + + FPlayer me = FPlayers.getInstance().getByPlayer(player); + if (me == null) { + return ""; + } + + return me.getTitle().trim(); + } + + // Get a list of all faction tags (names) + public Set getFactionTags() { + return Factions.getInstance().getFactionTags(); + } + + // Get a list of all players in the specified faction + public Set getPlayersInFaction(String factionTag) { + Set players = new HashSet(); + Faction faction = Factions.getInstance().getByTag(factionTag); + if (faction != null) { + for (FPlayer fplayer : faction.getFPlayers()) { + players.add(fplayer.getName()); + } + } + return players; + } + + // Get a list of all online players in the specified faction + public Set getOnlinePlayersInFaction(String factionTag) { + Set players = new HashSet(); + Faction faction = Factions.getInstance().getByTag(factionTag); + if (faction != null) { + for (FPlayer fplayer : faction.getFPlayersWhereOnline(true)) { + players.add(fplayer.getName()); + } + } + return players; + } + + public String getPrimaryGroup(OfflinePlayer player) { + return perms == null || !perms.hasGroupSupport() ? " " : perms.getPrimaryGroup(Bukkit.getWorlds().get(0).toString(), player); + } + + public void debug(Level level, String s) { + if (getConfig().getBoolean("debug", false)) { + getLogger().log(level, s); + } + } + + public void debug(String s) { + debug(Level.INFO, s); + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdAHome.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdAHome.java new file mode 100644 index 0000000..f9a2bdc --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdAHome.java @@ -0,0 +1,52 @@ +package com.massivecraft.factions.cmd; + +import com.massivecraft.factions.FPlayer; +import com.massivecraft.factions.Faction; +import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.zcore.util.TL; +import org.bukkit.event.player.PlayerTeleportEvent; + +public class CmdAHome extends FCommand { + + public CmdAHome() { + super(); + this.aliases.add("ahome"); + + this.requiredArgs.add("player name"); + + this.permission = Permission.AHOME.node; + this.disableOnLock = false; + + senderMustBePlayer = false; + senderMustBeMember = false; + senderMustBeModerator = false; + senderMustBeAdmin = false; + } + + @Override + public void perform() { + FPlayer target = argAsBestFPlayerMatch(0); + if (target == null) { + msg(TL.GENERIC_NOPLAYERMATCH, argAsString(0)); + return; + } + + if (target.isOnline()) { + Faction faction = target.getFaction(); + if (faction.hasHome()) { + target.getPlayer().teleport(faction.getHome(), PlayerTeleportEvent.TeleportCause.PLUGIN); + msg(TL.COMMAND_AHOME_SUCCESS, target.getName()); + target.msg(TL.COMMAND_AHOME_TARGET); + } else { + msg(TL.COMMAND_AHOME_NOHOME, target.getName()); + } + } else { + msg(TL.COMMAND_AHOME_OFFLINE, target.getName()); + } + } + + @Override + public TL getUsageTranslation() { + return TL.COMMAND_AHOME_DESCRIPTION; + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdAdmin.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdAdmin.java new file mode 100644 index 0000000..f493b28 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdAdmin.java @@ -0,0 +1,96 @@ +package com.massivecraft.factions.cmd; + +import com.massivecraft.factions.FPlayer; +import com.massivecraft.factions.FPlayers; +import com.massivecraft.factions.Faction; +import com.massivecraft.factions.event.FPlayerJoinEvent; +import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.struct.Role; +import com.massivecraft.factions.zcore.util.TL; +import org.bukkit.Bukkit; + +public class CmdAdmin extends FCommand { + + public CmdAdmin() { + super(); + this.aliases.add("boss"); + this.aliases.add("setboss"); + this.aliases.add("admin"); + this.aliases.add("setadmin"); + this.aliases.add("leader"); + this.aliases.add("setleader"); + + this.requiredArgs.add("player name"); + //this.optionalArgs.put("", ""); + + this.permission = Permission.ADMIN.node; + this.disableOnLock = true; + + senderMustBePlayer = false; + senderMustBeMember = false; + senderMustBeModerator = false; + senderMustBeAdmin = false; + } + + @Override + public void perform() { + FPlayer fyou = this.argAsBestFPlayerMatch(0); + if (fyou == null) { + return; + } + + boolean permAny = Permission.ADMIN_ANY.has(sender, false); + Faction targetFaction = fyou.getFaction(); + + if (targetFaction != myFaction && !permAny) { + msg(TL.COMMAND_ADMIN_NOTMEMBER, fyou.describeTo(fme, true)); + return; + } + + if (fme != null && fme.getRole() != Role.ADMIN && !permAny) { + msg(TL.COMMAND_ADMIN_NOTADMIN); + return; + } + + if (fyou == fme && !permAny) { + msg(TL.COMMAND_ADMIN_TARGETSELF); + return; + } + + // only perform a FPlayerJoinEvent when newLeader isn't actually in the faction + if (fyou.getFaction() != targetFaction) { + FPlayerJoinEvent event = new FPlayerJoinEvent(FPlayers.getInstance().getByPlayer(me), targetFaction, FPlayerJoinEvent.PlayerJoinReason.LEADER); + Bukkit.getServer().getPluginManager().callEvent(event); + if (event.isCancelled()) { + return; + } + } + + FPlayer admin = targetFaction.getFPlayerAdmin(); + + // if target player is currently admin, demote and replace him + if (fyou == admin) { + targetFaction.promoteNewLeader(); + msg(TL.COMMAND_ADMIN_DEMOTES, fyou.describeTo(fme, true)); + fyou.msg(TL.COMMAND_ADMIN_DEMOTED, senderIsConsole ? TL.GENERIC_SERVERADMIN.toString() : fme.describeTo(fyou, true)); + return; + } + + // promote target player, and demote existing admin if one exists + if (admin != null) { + admin.setRole(Role.MODERATOR); + } + fyou.setRole(Role.ADMIN); + msg(TL.COMMAND_ADMIN_PROMOTES, fyou.describeTo(fme, true)); + + // Inform all players + for (FPlayer fplayer : FPlayers.getInstance().getOnlinePlayers()) { + fplayer.msg(TL.COMMAND_ADMIN_PROMOTED, senderIsConsole ? TL.GENERIC_SERVERADMIN.toString() : fme.describeTo(fplayer, true), fyou.describeTo(fplayer), targetFaction.describeTo(fplayer)); + } + } + + public TL getUsageTranslation() { + return TL.COMMAND_ADMIN_DESCRIPTION; + } + +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdAnnounce.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdAnnounce.java new file mode 100644 index 0000000..bc2c6bd --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdAnnounce.java @@ -0,0 +1,48 @@ +package com.massivecraft.factions.cmd; + +import com.massivecraft.factions.FPlayer; +import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.zcore.util.TL; +import org.apache.commons.lang.StringUtils; +import org.bukkit.ChatColor; +import org.bukkit.entity.Player; + +public class CmdAnnounce extends FCommand { + + public CmdAnnounce() { + super(); + this.aliases.add("ann"); + this.aliases.add("announce"); + + this.requiredArgs.add("message"); + this.errorOnToManyArgs = false; + + this.permission = Permission.ANNOUNCE.node; + this.disableOnLock = false; + + senderMustBePlayer = true; + senderMustBeMember = true; + senderMustBeModerator = true; + } + + @Override + public void perform() { + String prefix = ChatColor.GREEN + myFaction.getTag() + ChatColor.YELLOW + " [" + ChatColor.GRAY + me.getName() + ChatColor.YELLOW + "] " + ChatColor.RESET; + String message = StringUtils.join(args, " "); + + for (Player player : myFaction.getOnlinePlayers()) { + player.sendMessage(prefix + message); + } + + // Add for offline players. + for (FPlayer fp : myFaction.getFPlayersWhereOnline(false)) { + myFaction.addAnnouncement(fp, prefix + message); + } + } + + @Override + public TL getUsageTranslation() { + return TL.COMMAND_ANNOUNCE_DESCRIPTION; + } + +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdAutoClaim.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdAutoClaim.java new file mode 100644 index 0000000..f3fa7e2 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdAutoClaim.java @@ -0,0 +1,56 @@ +package com.massivecraft.factions.cmd; + +import com.massivecraft.factions.Faction; +import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.struct.Role; +import com.massivecraft.factions.zcore.util.TL; + +public class CmdAutoClaim extends FCommand { + + public CmdAutoClaim() { + super(); + this.aliases.add("autoclaim"); + + //this.requiredArgs.add(""); + this.optionalArgs.put("cartel", "your"); + + this.permission = Permission.AUTOCLAIM.node; + this.disableOnLock = true; + + senderMustBePlayer = true; + senderMustBeMember = false; + senderMustBeModerator = false; + senderMustBeAdmin = false; + } + + @Override + public void perform() { + Faction forFaction = this.argAsFaction(0, myFaction); + if (forFaction == null || forFaction == fme.getAutoClaimFor()) { + fme.setAutoClaimFor(null); + msg(TL.COMMAND_AUTOCLAIM_DISABLED); + return; + } + + if (!fme.canClaimForFaction(forFaction)) { + if (myFaction == forFaction) { + msg(TL.COMMAND_AUTOCLAIM_REQUIREDRANK, Role.MODERATOR.getTranslation()); + } else { + msg(TL.COMMAND_AUTOCLAIM_OTHERFACTION, forFaction.describeTo(fme)); + } + + return; + } + + fme.setAutoClaimFor(forFaction); + + msg(TL.COMMAND_AUTOCLAIM_ENABLED, forFaction.describeTo(fme)); + fme.attemptClaim(forFaction, me.getLocation(), true); + } + + @Override + public TL getUsageTranslation() { + return TL.COMMAND_AUTOCLAIM_DESCRIPTION; + } + +} \ No newline at end of file diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdAutoHelp.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdAutoHelp.java new file mode 100644 index 0000000..638d770 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdAutoHelp.java @@ -0,0 +1,47 @@ +package com.massivecraft.factions.cmd; + +import com.massivecraft.factions.P; +import com.massivecraft.factions.zcore.CommandVisibility; +import com.massivecraft.factions.zcore.MCommand; +import com.massivecraft.factions.zcore.util.TL; + +import java.util.ArrayList; + +public class CmdAutoHelp extends MCommand

{ + + public CmdAutoHelp() { + super(P.p); + this.aliases.add("?"); + this.aliases.add("h"); + this.aliases.add("help"); + + this.setHelpShort(""); + + this.optionalArgs.put("page", "1"); + } + + @Override + public void perform() { + if (this.commandChain.size() == 0) { + return; + } + MCommand pcmd = this.commandChain.get(this.commandChain.size() - 1); + + ArrayList lines = new ArrayList(); + + lines.addAll(pcmd.helpLong); + + for (MCommand scmd : pcmd.subCommands) { + if (scmd.visibility == CommandVisibility.VISIBLE || (scmd.visibility == CommandVisibility.SECRET && scmd.validSenderPermissions(sender, false))) { + lines.add(scmd.getUseageTemplate(this.commandChain, true)); + } + } + + sendMessage(p.txt.getPage(lines, this.argAsInt(0, 1), TL.COMMAND_AUTOHELP_HELPFOR.toString() + pcmd.aliases.get(0) + "\"")); + } + + @Override + public TL getUsageTranslation() { + return TL.COMMAND_HELP_DESCRIPTION; + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdBoom.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdBoom.java new file mode 100644 index 0000000..7a579bf --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdBoom.java @@ -0,0 +1,51 @@ +package com.massivecraft.factions.cmd; + +import com.massivecraft.factions.Conf; +import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.zcore.util.TL; + +public class CmdBoom extends FCommand { + + public CmdBoom() { + super(); + this.aliases.add("noboom"); + this.aliases.add("explosions"); + this.aliases.add("toggleexplosions"); + + //this.requiredArgs.add(""); + this.optionalArgs.put("on/off", "flip"); + + this.permission = Permission.NO_BOOM.node; + this.disableOnLock = true; + + senderMustBePlayer = true; + senderMustBeMember = false; + senderMustBeModerator = true; + senderMustBeAdmin = false; + } + + @Override + public void perform() { + if (!myFaction.isPeaceful()) { + fme.msg(TL.COMMAND_BOOM_PEACEFULONLY); + return; + } + + // if economy is enabled, they're not on the bypass list, and this command has a cost set, make 'em pay + if (!payForCommand(Conf.econCostNoBoom, TL.COMMAND_BOOM_TOTOGGLE, TL.COMMAND_BOOM_FORTOGGLE)) { + return; + } + + myFaction.setPeacefulExplosionsEnabled(this.argAsBool(0, !myFaction.getPeacefulExplosionsEnabled())); + + String enabled = myFaction.noExplosionsInTerritory() ? TL.GENERIC_DISABLED.toString() : TL.GENERIC_ENABLED.toString(); + + // Inform + myFaction.msg(TL.COMMAND_BOOM_ENABLED, fme.describeTo(myFaction), enabled); + } + + @Override + public TL getUsageTranslation() { + return TL.COMMAND_BOOM_DESCRIPTION; + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdBypass.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdBypass.java new file mode 100644 index 0000000..0104412 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdBypass.java @@ -0,0 +1,43 @@ +package com.massivecraft.factions.cmd; + +import com.massivecraft.factions.P; +import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.zcore.util.TL; + +public class CmdBypass extends FCommand { + + public CmdBypass() { + super(); + this.aliases.add("bypass"); + + //this.requiredArgs.add(""); + this.optionalArgs.put("on/off", "flip"); + + this.permission = Permission.BYPASS.node; + this.disableOnLock = false; + + senderMustBePlayer = true; + senderMustBeMember = false; + senderMustBeModerator = false; + senderMustBeAdmin = false; + } + + @Override + public void perform() { + fme.setIsAdminBypassing(this.argAsBool(0, !fme.isAdminBypassing())); + + // TODO: Move this to a transient field in the model?? + if (fme.isAdminBypassing()) { + fme.msg(TL.COMMAND_BYPASS_ENABLE.toString()); + P.p.log(fme.getName() + TL.COMMAND_BYPASS_ENABLELOG.toString()); + } else { + fme.msg(TL.COMMAND_BYPASS_DISABLE.toString()); + P.p.log(fme.getName() + TL.COMMAND_BYPASS_DISABLELOG.toString()); + } + } + + @Override + public TL getUsageTranslation() { + return TL.COMMAND_BYPASS_DESCRIPTION; + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdChat.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdChat.java new file mode 100644 index 0000000..9b47a74 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdChat.java @@ -0,0 +1,70 @@ +package com.massivecraft.factions.cmd; + +import com.massivecraft.factions.Conf; +import com.massivecraft.factions.struct.ChatMode; +import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.zcore.util.TL; + +public class CmdChat extends FCommand { + + public CmdChat() { + super(); + this.aliases.add("c"); + this.aliases.add("chat"); + + //this.requiredArgs.add(""); + this.optionalArgs.put("mode", "next"); + + this.permission = Permission.CHAT.node; + this.disableOnLock = false; + + senderMustBePlayer = true; + senderMustBeMember = true; + senderMustBeModerator = false; + senderMustBeAdmin = false; + } + + @Override + public void perform() { + if (!Conf.factionOnlyChat) { + msg(TL.COMMAND_CHAT_DISABLED.toString()); + return; + } + + String modeString = this.argAsString(0); + ChatMode modeTarget = fme.getChatMode().getNext(); + + if (modeString != null) { + modeString = modeString.toLowerCase(); + if (modeString.startsWith("p")) { + modeTarget = ChatMode.PUBLIC; + } else if (modeString.startsWith("a")) { + modeTarget = ChatMode.ALLIANCE; + } else if (modeString.startsWith("f")) { + modeTarget = ChatMode.FACTION; + } else if (modeString.startsWith("t")) { + modeTarget = ChatMode.TRUCE; + } else { + msg(TL.COMMAND_CHAT_INVALIDMODE); + return; + } + } + + fme.setChatMode(modeTarget); + + if (fme.getChatMode() == ChatMode.PUBLIC) { + msg(TL.COMMAND_CHAT_MODE_PUBLIC); + } else if (fme.getChatMode() == ChatMode.ALLIANCE) { + msg(TL.COMMAND_CHAT_MODE_ALLIANCE); + } else if (fme.getChatMode() == ChatMode.TRUCE) { + msg(TL.COMMAND_CHAT_MODE_TRUCE); + } else { + msg(TL.COMMAND_CHAT_MODE_FACTION); + } + } + + @Override + public TL getUsageTranslation() { + return TL.COMMAND_CHAT_DESCRIPTION; + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdChatSpy.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdChatSpy.java new file mode 100644 index 0000000..c5e35fa --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdChatSpy.java @@ -0,0 +1,41 @@ +package com.massivecraft.factions.cmd; + +import com.massivecraft.factions.P; +import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.zcore.util.TL; + +public class CmdChatSpy extends FCommand { + + public CmdChatSpy() { + super(); + this.aliases.add("chatspy"); + + this.optionalArgs.put("on/off", "flip"); + + this.permission = Permission.CHATSPY.node; + this.disableOnLock = false; + + senderMustBePlayer = true; + senderMustBeMember = false; + senderMustBeModerator = false; + senderMustBeAdmin = false; + } + + @Override + public void perform() { + fme.setSpyingChat(this.argAsBool(0, !fme.isSpyingChat())); + + if (fme.isSpyingChat()) { + fme.msg(TL.COMMAND_CHATSPY_ENABLE); + P.p.log(fme.getName() + TL.COMMAND_CHATSPY_ENABLELOG.toString()); + } else { + fme.msg(TL.COMMAND_CHATSPY_DISABLE); + P.p.log(fme.getName() + TL.COMMAND_CHATSPY_DISABLELOG.toString()); + } + } + + @Override + public TL getUsageTranslation() { + return TL.COMMAND_CHATSPY_DESCRIPTION; + } +} \ No newline at end of file diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdClaim.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdClaim.java new file mode 100644 index 0000000..b956918 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdClaim.java @@ -0,0 +1,82 @@ +package com.massivecraft.factions.cmd; + +import com.massivecraft.factions.Conf; +import com.massivecraft.factions.FLocation; +import com.massivecraft.factions.Faction; +import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.util.SpiralTask; +import com.massivecraft.factions.zcore.util.TL; +import net.grandtheftmc.core.util.Utils; + + +public class CmdClaim extends FCommand { + + public CmdClaim() { + super(); + this.aliases.add("claim"); + + //this.requiredArgs.add(""); + this.optionalArgs.put("radius", "1"); + this.optionalArgs.put("cartel", "your"); + + this.permission = Permission.CLAIM.node; + this.disableOnLock = true; + + senderMustBePlayer = true; + senderMustBeMember = false; + senderMustBeModerator = false; + senderMustBeAdmin = false; + } + + @Override + public void perform() { + // Read and validate input + int radius = this.argAsInt(0, 1); // Default to 1 + final Faction forFaction = this.argAsFaction(1, myFaction); // Default to own + + if (radius < 1) { + msg(TL.COMMAND_CLAIM_INVALIDRADIUS); + return; + } + + if(me.getLocation().getWorld().getName().equals("spawn") && !this.sender.isOp()) { + me.sendMessage(Utils.f("&c&l Cartels&8&l> &cYou cannot claim in spawn area!")); + return; + } + + if (radius < 2) { + // single chunk + fme.attemptClaim(forFaction, me.getLocation(), true); + } else { + // radius claim + if (!Permission.CLAIM_RADIUS.has(sender, false)) { + msg(TL.COMMAND_CLAIM_DENIED); + return; + } + + new SpiralTask(new FLocation(me), radius) { + private int failCount = 0; + private final int limit = Conf.radiusClaimFailureLimit - 1; + + @Override + public boolean work() { + boolean success = fme.attemptClaim(forFaction, this.currentLocation(), true); + if (success) { + failCount = 0; + } else if (failCount++ >= limit) { + this.stop(); + return false; + } + + return true; + } + }; + } + } + + @Override + public TL getUsageTranslation() { + return TL.COMMAND_CLAIM_DESCRIPTION; + } + +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdClaimLine.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdClaimLine.java new file mode 100644 index 0000000..39b86e2 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdClaimLine.java @@ -0,0 +1,82 @@ +package com.massivecraft.factions.cmd; + +import com.massivecraft.factions.Conf; +import com.massivecraft.factions.Faction; +import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.zcore.util.TL; +import net.grandtheftmc.core.util.Utils; +import org.bukkit.Location; +import org.bukkit.block.BlockFace; + +public class CmdClaimLine extends FCommand { + + public static final BlockFace[] axis = {BlockFace.SOUTH, BlockFace.WEST, BlockFace.NORTH, BlockFace.EAST}; + + public CmdClaimLine() { + + // Aliases + this.aliases.add("claimline"); + this.aliases.add("cl"); + + // Args + this.optionalArgs.put("amount", "1"); + this.optionalArgs.put("direction", "facing"); + this.optionalArgs.put("cartel", "you"); + + this.permission = Permission.CLAIM_LINE.node; + this.disableOnLock = true; + + senderMustBePlayer = true; + senderMustBeMember = false; + senderMustBeModerator = false; + senderMustBeAdmin = false; + } + + @Override + public void perform() { + // Args + Integer amount = this.argAsInt(0, 1); // Default to 1 + + if (amount > Conf.lineClaimLimit) { + fme.msg(TL.COMMAND_CLAIMLINE_ABOVEMAX, Conf.lineClaimLimit); + return; + } + + if(me.getLocation().getWorld().getName().equals("spawn") && !this.sender.isOp()) { + me.sendMessage(Utils.f("&c&l Cartels&8&l> &cYou cannot claim in spawn area!")); + return; + } + + String direction = this.argAsString(1); + BlockFace blockFace; + + if (direction == null) { + blockFace = axis[Math.round(me.getLocation().getYaw() / 90f) & 0x3]; + } else if (direction.equalsIgnoreCase("north")) { + blockFace = BlockFace.NORTH; + } else if (direction.equalsIgnoreCase("east")) { + blockFace = BlockFace.EAST; + } else if (direction.equalsIgnoreCase("south")) { + blockFace = BlockFace.SOUTH; + } else if (direction.equalsIgnoreCase("west")) { + blockFace = BlockFace.WEST; + } else { + fme.msg(TL.COMMAND_CLAIMLINE_NOTVALID, direction); + return; + } + + final Faction forFaction = this.argAsFaction(2, myFaction); + Location location = me.getLocation(); + + // TODO: make this a task like claiming a radius? + for (int i = 0; i < amount; i++) { + fme.attemptClaim(forFaction, location, true); + location = location.add(blockFace.getModX() * 16, 0, blockFace.getModZ() * 16); + } + } + + @Override + public TL getUsageTranslation() { + return TL.COMMAND_CLAIMLINE_DESCRIPTION; + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdConfig.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdConfig.java new file mode 100644 index 0000000..956b6b4 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdConfig.java @@ -0,0 +1,248 @@ +package com.massivecraft.factions.cmd; + +import com.massivecraft.factions.Conf; +import com.massivecraft.factions.P; +import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.zcore.util.TL; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.entity.Player; + +import java.lang.reflect.Field; +import java.lang.reflect.ParameterizedType; +import java.lang.reflect.Type; +import java.util.HashMap; +import java.util.Set; + +public class CmdConfig extends FCommand { + + private static HashMap properFieldNames = new HashMap(); + + public CmdConfig() { + super(); + this.aliases.add("config"); + + this.requiredArgs.add("setting"); + this.requiredArgs.add("value"); + this.errorOnToManyArgs = false; + + this.permission = Permission.CONFIG.node; + this.disableOnLock = true; + + senderMustBePlayer = false; + senderMustBeMember = false; + senderMustBeModerator = false; + senderMustBeAdmin = false; + } + + @Override + public void perform() { + // store a lookup map of lowercase field names paired with proper capitalization field names + // that way, if the person using this command messes up the capitalization, we can fix that + if (properFieldNames.isEmpty()) { + Field[] fields = Conf.class.getDeclaredFields(); + for (int i = 0; i < fields.length; i++) { + properFieldNames.put(fields[i].getName().toLowerCase(), fields[i].getName()); + } + } + + String field = this.argAsString(0).toLowerCase(); + if (field.startsWith("\"") && field.endsWith("\"")) { + field = field.substring(1, field.length() - 1); + } + String fieldName = properFieldNames.get(field); + + if (fieldName == null || fieldName.isEmpty()) { + msg(TL.COMMAND_CONFIG_NOEXIST, field); + return; + } + + String success; + + String value = args.get(1); + for (int i = 2; i < args.size(); i++) { + value += ' ' + args.get(i); + } + + try { + Field target = Conf.class.getField(fieldName); + + // boolean + if (target.getType() == boolean.class) { + boolean targetValue = this.strAsBool(value); + target.setBoolean(null, targetValue); + + if (targetValue) { + success = "\"" + fieldName + TL.COMMAND_CONFIG_SET_TRUE.toString(); + } else { + success = "\"" + fieldName + TL.COMMAND_CONFIG_SET_FALSE.toString(); + } + } + + // int + else if (target.getType() == int.class) { + try { + int intVal = Integer.parseInt(value); + target.setInt(null, intVal); + success = "\"" + fieldName + TL.COMMAND_CONFIG_OPTIONSET.toString() + intVal + "."; + } catch (NumberFormatException ex) { + sendMessage(TL.COMMAND_CONFIG_INTREQUIRED.format(fieldName)); + return; + } + } + + // long + else if (target.getType() == long.class) { + try { + long longVal = Long.parseLong(value); + target.setLong(null, longVal); + success = "\"" + fieldName + TL.COMMAND_CONFIG_OPTIONSET.toString() + longVal + "."; + } catch (NumberFormatException ex) { + sendMessage(TL.COMMAND_CONFIG_LONGREQUIRED.format(fieldName)); + return; + } + } + + // double + else if (target.getType() == double.class) { + try { + double doubleVal = Double.parseDouble(value); + target.setDouble(null, doubleVal); + success = "\"" + fieldName + TL.COMMAND_CONFIG_OPTIONSET.toString() + doubleVal + "."; + } catch (NumberFormatException ex) { + sendMessage(TL.COMMAND_CONFIG_DOUBLEREQUIRED.format(fieldName)); + return; + } + } + + // float + else if (target.getType() == float.class) { + try { + float floatVal = Float.parseFloat(value); + target.setFloat(null, floatVal); + success = "\"" + fieldName + TL.COMMAND_CONFIG_OPTIONSET.toString() + floatVal + "."; + } catch (NumberFormatException ex) { + sendMessage(TL.COMMAND_CONFIG_FLOATREQUIRED.format(fieldName)); + return; + } + } + + // String + else if (target.getType() == String.class) { + target.set(null, value); + success = "\"" + fieldName + TL.COMMAND_CONFIG_OPTIONSET.toString() + value + "\"."; + } + + // ChatColor + else if (target.getType() == ChatColor.class) { + ChatColor newColor = null; + try { + newColor = ChatColor.valueOf(value.toUpperCase()); + } catch (IllegalArgumentException ex) { + + } + if (newColor == null) { + sendMessage(TL.COMMAND_CONFIG_INVALID_COLOUR.format(fieldName, value.toUpperCase())); + return; + } + target.set(null, newColor); + success = "\"" + fieldName + TL.COMMAND_CONFIG_COLOURSET.toString() + value.toUpperCase() + "\"."; + } + + // Set or other parameterized collection + else if (target.getGenericType() instanceof ParameterizedType) { + ParameterizedType targSet = (ParameterizedType) target.getGenericType(); + Type innerType = targSet.getActualTypeArguments()[0]; + + // not a Set, somehow, and that should be the only collection we're using in Conf.java + if (targSet.getRawType() != Set.class) { + sendMessage(TL.COMMAND_CONFIG_INVALID_COLLECTION.format(fieldName)); + return; + } + + // Set + else if (innerType == Material.class) { + Material newMat = null; + try { + newMat = Material.valueOf(value.toUpperCase()); + } catch (IllegalArgumentException ex) { + + } + if (newMat == null) { + sendMessage(TL.COMMAND_CONFIG_INVALID_MATERIAL.format(fieldName, value.toUpperCase())); + return; + } + + @SuppressWarnings("unchecked") Set matSet = (Set) target.get(null); + + // Material already present, so remove it + if (matSet.contains(newMat)) { + matSet.remove(newMat); + target.set(null, matSet); + success = TL.COMMAND_CONFIG_MATERIAL_REMOVED.format(fieldName, value.toUpperCase()); + } + // Material not present yet, add it + else { + matSet.add(newMat); + target.set(null, matSet); + success = TL.COMMAND_CONFIG_MATERIAL_ADDED.format(fieldName, value.toUpperCase()); + } + } + + // Set + else if (innerType == String.class) { + @SuppressWarnings("unchecked") Set stringSet = (Set) target.get(null); + + // String already present, so remove it + if (stringSet.contains(value)) { + stringSet.remove(value); + target.set(null, stringSet); + success = TL.COMMAND_CONFIG_SET_REMOVED.format(fieldName, value); + } + // String not present yet, add it + else { + stringSet.add(value); + target.set(null, stringSet); + success = TL.COMMAND_CONFIG_SET_ADDED.format(fieldName, value); + } + } + + // Set of unknown type + else { + sendMessage(TL.COMMAND_CONFIG_INVALID_TYPESET.format(fieldName)); + return; + } + } + + // unknown type + else { + sendMessage(TL.COMMAND_CONFIG_ERROR_TYPE.format(fieldName, target.getClass().getName())); + return; + } + } catch (NoSuchFieldException ex) { + sendMessage(TL.COMMAND_CONFIG_ERROR_MATCHING.format(fieldName)); + return; + } catch (IllegalAccessException ex) { + sendMessage(TL.COMMAND_CONFIG_ERROR_SETTING.format(fieldName, value)); + return; + } + + if (!success.isEmpty()) { + if (sender instanceof Player) { + sendMessage(success); + P.p.log(success + TL.COMMAND_CONFIG_LOG.format((Player) sender)); + } else // using P.p.log() instead of sendMessage if run from server console so that "[Factions v#.#.#]" is prepended in server log + { + P.p.log(success); + } + } + // save change to disk + Conf.save(); + } + + @Override + public TL getUsageTranslation() { + return TL.COMMAND_CONFIG_DESCRIPTION; + } + +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdConvert.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdConvert.java new file mode 100644 index 0000000..42cf917 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdConvert.java @@ -0,0 +1,44 @@ +package com.massivecraft.factions.cmd; + +import com.massivecraft.factions.Conf; +import com.massivecraft.factions.Conf.Backend; +import com.massivecraft.factions.zcore.persist.json.FactionsJSON; +import com.massivecraft.factions.zcore.util.TL; +import org.bukkit.command.ConsoleCommandSender; + +public class CmdConvert extends FCommand { + + public CmdConvert() { + this.aliases.add("convert"); + + this.requiredArgs.add("[MYSQL|JSON]"); + } + + @Override + public void perform() { + if (!(this.sender instanceof ConsoleCommandSender)) { + this.sender.sendMessage(TL.GENERIC_CONSOLEONLY.toString()); + } + Backend nb = Backend.valueOf(this.argAsString(0).toUpperCase()); + if (nb == Conf.backEnd) { + this.sender.sendMessage(TL.COMMAND_CONVERT_BACKEND_RUNNING.toString()); + return; + } + switch (nb) { + case JSON: + FactionsJSON.convertTo(); + break; + default: + this.sender.sendMessage(TL.COMMAND_CONVERT_BACKEND_INVALID.toString()); + return; + + } + Conf.backEnd = nb; + } + + @Override + public TL getUsageTranslation() { + return TL.COMMAND_CONVERT_DESCRIPTION; + } + +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdCreate.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdCreate.java new file mode 100644 index 0000000..1de4aa1 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdCreate.java @@ -0,0 +1,124 @@ +package com.massivecraft.factions.cmd; + +import com.massivecraft.factions.*; +import com.massivecraft.factions.event.FPlayerJoinEvent; +import com.massivecraft.factions.event.FactionCreateEvent; +import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.struct.Role; +import com.massivecraft.factions.util.MiscUtil; +import com.massivecraft.factions.zcore.util.TL; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.util.NumeralUtil; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.users.ViceUser; +import org.bukkit.Bukkit; + +import java.util.ArrayList; +import java.util.Locale; + + +public class CmdCreate extends FCommand { + + public CmdCreate() { + super(); + this.aliases.add("create"); + + this.requiredArgs.add("cartel tag"); + //this.optionalArgs.put("", ""); + + this.permission = Permission.CREATE.node; + this.disableOnLock = true; + + senderMustBePlayer = true; + senderMustBeMember = false; + senderMustBeModerator = false; + senderMustBeAdmin = false; + } + + @Override + public void perform() { + String tag = this.argAsString(0); + + if (fme.hasFaction()) { + msg(TL.COMMAND_CREATE_MUSTLEAVE); + return; + } + + if (Factions.getInstance().isTagTaken(tag)) { + msg(TL.COMMAND_CREATE_INUSE); + return; + } + + ArrayList tagValidationErrors = MiscUtil.validateTag(tag); + if (tagValidationErrors.size() > 0) { + sendMessage(tagValidationErrors); + return; + } + + // if economy is enabled, they're not on the bypass list, and this command has a cost set, make sure they can pay +// if (!canAffordCommand(Conf.econCostCreate, TL.COMMAND_CREATE_TOCREATE.toString())) { +// return; +// } + + if(Conf.econCostCreate > 0) { + if (fme.getPlayer() == null) return; + ViceUser user = Vice.getUserManager().getLoadedUser(fme.getPlayer().getUniqueId()); + if (user == null) return; + if (!user.hasMoney(Conf.econCostCreate)) { + msg("you can't afford %s %s.", NumeralUtil.toCurrency(Conf.econCostCreate, Locale.US), TL.COMMAND_CREATE_TOCREATE.toString()); + return; + } + + user.takeMoney(Conf.econCostCreate); + sender.sendMessage(Utils.f("&c- " + NumeralUtil.toCurrency(Conf.econCostCreate, Locale.US))); + } + + // trigger the faction creation event (cancellable) + FactionCreateEvent createEvent = new FactionCreateEvent(me, tag); + Bukkit.getServer().getPluginManager().callEvent(createEvent); + if (createEvent.isCancelled()) { + return; + } + + // then make 'em pay (if applicable) +// if (!payForCommand(Conf.econCostCreate, TL.COMMAND_CREATE_TOCREATE, TL.COMMAND_CREATE_FORCREATE)) { +// return; +// } + + Faction faction = Factions.getInstance().createFaction(); + + // TODO: Why would this even happen??? Auto increment clash?? + if (faction == null) { + msg(TL.COMMAND_CREATE_ERROR); + return; + } + + // finish setting up the Faction + faction.setTag(tag); + + // trigger the faction join event for the creator + FPlayerJoinEvent joinEvent = new FPlayerJoinEvent(FPlayers.getInstance().getByPlayer(me), faction, FPlayerJoinEvent.PlayerJoinReason.CREATE); + Bukkit.getServer().getPluginManager().callEvent(joinEvent); + // join event cannot be cancelled or you'll have an empty faction + + // finish setting up the FPlayer + fme.setRole(Role.ADMIN); + fme.setFaction(faction); + + for (FPlayer follower : FPlayers.getInstance().getOnlinePlayers()) { + follower.msg(TL.COMMAND_CREATE_CREATED, fme.describeTo(follower, true), faction.getTag(follower)); + } + + msg(TL.COMMAND_CREATE_YOUSHOULD, p.cmdBase.cmdDescription.getUseageTemplate()); + + if (Conf.logFactionCreate) { + P.p.log(fme.getName() + TL.COMMAND_CREATE_CREATEDLOG.toString() + tag); + } + } + + @Override + public TL getUsageTranslation() { + return TL.COMMAND_CREATE_DESCRIPTION; + } + +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdDeinvite.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdDeinvite.java new file mode 100644 index 0000000..4b60391 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdDeinvite.java @@ -0,0 +1,62 @@ +package com.massivecraft.factions.cmd; + +import com.massivecraft.factions.Conf; +import com.massivecraft.factions.FPlayer; +import com.massivecraft.factions.FPlayers; +import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.zcore.util.TL; +import mkremins.fanciful.FancyMessage; +import org.bukkit.ChatColor; + +public class CmdDeinvite extends FCommand { + + public CmdDeinvite() { + super(); + this.aliases.add("deinvite"); + this.aliases.add("deinv"); + + this.optionalArgs.put("player name", "name"); + //this.optionalArgs.put("", ""); + + this.permission = Permission.DEINVITE.node; + this.disableOnLock = true; + + senderMustBePlayer = true; + senderMustBeMember = false; + senderMustBeModerator = true; + senderMustBeAdmin = false; + } + + @Override + public void perform() { + FPlayer you = this.argAsBestFPlayerMatch(0); + if (you == null) { + FancyMessage msg = new FancyMessage(TL.COMMAND_DEINVITE_CANDEINVITE.toString()).color(ChatColor.GOLD); + for (String id : myFaction.getInvites()) { + FPlayer fp = FPlayers.getInstance().getById(id); + String name = fp != null ? fp.getName() : id; + msg.then(name + " ").color(ChatColor.WHITE).tooltip(TL.COMMAND_DEINVITE_CLICKTODEINVITE.format(name)).command("/" + Conf.baseCommandAliases.get(0) + " deinvite " + name); + } + sendFancyMessage(msg); + return; + } + + if (you.getFaction() == myFaction) { + msg(TL.COMMAND_DEINVITE_ALREADYMEMBER, you.getName(), myFaction.getTag()); + msg(TL.COMMAND_DEINVITE_MIGHTWANT, p.cmdBase.cmdKick.getUseageTemplate(false)); + return; + } + + myFaction.deinvite(you); + + you.msg(TL.COMMAND_DEINVITE_REVOKED, fme.describeTo(you), myFaction.describeTo(you)); + + myFaction.msg(TL.COMMAND_DEINVITE_REVOKES, fme.describeTo(myFaction), you.describeTo(myFaction)); + } + + @Override + public TL getUsageTranslation() { + return TL.COMMAND_DEINVITE_DESCRIPTION; + } + +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdDelFWarp.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdDelFWarp.java new file mode 100644 index 0000000..00583e2 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdDelFWarp.java @@ -0,0 +1,44 @@ +package com.massivecraft.factions.cmd; + +import com.massivecraft.factions.FPlayer; +import com.massivecraft.factions.P; +import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.zcore.util.TL; + +public class CmdDelFWarp extends FCommand { + + public CmdDelFWarp() { + super(); + this.aliases.add("delwarp"); + this.aliases.add("dw"); + this.aliases.add("deletewarp"); + this.requiredArgs.add("warp name"); + this.senderMustBeMember = true; + this.senderMustBeModerator = true; + this.senderMustBePlayer = true; + this.permission = Permission.SETWARP.node; + } + + @Override + public void perform() { + String warp = argAsString(0); + if (myFaction.isWarp(warp)) { + if (!transact(fme)) { + return; + } + myFaction.removeWarp(warp); + fme.msg(TL.COMMAND_DELFWARP_DELETED, warp); + } else { + fme.msg(TL.COMMAND_DELFWARP_INVALID, warp); + } + } + + private boolean transact(FPlayer player) { + return !P.p.getConfig().getBoolean("warp-cost.enabled", false) || player.isAdminBypassing() || payForCommand(P.p.getConfig().getDouble("warp-cost.delwarp", 5), TL.COMMAND_DELFWARP_TODELETE.toString(), TL.COMMAND_DELFWARP_FORDELETE.toString()); + } + + @Override + public TL getUsageTranslation() { + return TL.COMMAND_DELFWARP_DESCRIPTION; + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdDescription.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdDescription.java new file mode 100644 index 0000000..7395e43 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdDescription.java @@ -0,0 +1,59 @@ +package com.massivecraft.factions.cmd; + +import com.massivecraft.factions.Conf; +import com.massivecraft.factions.FPlayer; +import com.massivecraft.factions.FPlayers; +import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.zcore.util.TL; +import com.massivecraft.factions.zcore.util.TextUtil; + +public class CmdDescription extends FCommand { + + public CmdDescription() { + super(); + this.aliases.add("desc"); + this.aliases.add("description"); + + this.requiredArgs.add("desc"); + this.errorOnToManyArgs = false; + //this.optionalArgs + + this.permission = Permission.DESCRIPTION.node; + this.disableOnLock = true; + + senderMustBePlayer = true; + senderMustBeMember = false; + senderMustBeModerator = true; + senderMustBeAdmin = false; + } + + @Override + public void perform() { + // if economy is enabled, they're not on the bypass list, and this command has a cost set, make 'em pay + if (!payForCommand(Conf.econCostDesc, TL.COMMAND_DESCRIPTION_TOCHANGE, TL.COMMAND_DESCRIPTION_FORCHANGE)) { + return; + } + + // since "&" color tags seem to work even through plain old FPlayer.sendMessage() for some reason, we need to break those up + // And replace all the % because it messes with string formatting and this is easy way around that. + myFaction.setDescription(TextUtil.implode(args, " ").replaceAll("%", "").replaceAll("(&([a-f0-9klmnor]))", "& $2")); + + if (!Conf.broadcastDescriptionChanges) { + fme.msg(TL.COMMAND_DESCRIPTION_CHANGED, myFaction.describeTo(fme)); + fme.sendMessage(myFaction.getDescription()); + return; + } + + // Broadcast the description to everyone + for (FPlayer fplayer : FPlayers.getInstance().getOnlinePlayers()) { + fplayer.msg(TL.COMMAND_DESCRIPTION_CHANGES, myFaction.describeTo(fplayer)); + fplayer.sendMessage(myFaction.getDescription()); // players can inject "&" or "`" or "" or whatever in their description; &k is particularly interesting looking + } + } + + @Override + public TL getUsageTranslation() { + return TL.COMMAND_DESCRIPTION_DESCRIPTION; + } + +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdDisband.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdDisband.java new file mode 100644 index 0000000..0e8b4c3 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdDisband.java @@ -0,0 +1,107 @@ +package com.massivecraft.factions.cmd; + +import com.massivecraft.factions.*; +import com.massivecraft.factions.event.FPlayerLeaveEvent; +import com.massivecraft.factions.event.FactionDisbandEvent; +import com.massivecraft.factions.integration.Econ; +import com.massivecraft.factions.scoreboards.FTeamWrapper; +import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.struct.Role; +import com.massivecraft.factions.zcore.util.TL; +import org.bukkit.Bukkit; + + +public class CmdDisband extends FCommand { + + public CmdDisband() { + super(); + this.aliases.add("disband"); + + //this.requiredArgs.add(""); + this.optionalArgs.put("cartel tag", "yours"); + + this.permission = Permission.DISBAND.node; + this.disableOnLock = true; + + senderMustBePlayer = false; + senderMustBeMember = false; + senderMustBeModerator = false; + senderMustBeAdmin = false; + } + + @Override + public void perform() { + // The faction, default to your own.. but null if console sender. + Faction faction = this.argAsFaction(0, fme == null ? null : myFaction); + if (faction == null) { + return; + } + + boolean isMyFaction = fme == null ? false : faction == myFaction; + + if (isMyFaction) { + if (!assertMinRole(Role.ADMIN)) { + return; + } + } else { + if (!Permission.DISBAND_ANY.has(sender, true)) { + return; + } + } + + if (!faction.isNormal()) { + msg(TL.COMMAND_DISBAND_IMMUTABLE.toString()); + return; + } + if (faction.isPermanent()) { + msg(TL.COMMAND_DISBAND_MARKEDPERMANENT.toString()); + return; + } + + FactionDisbandEvent disbandEvent = new FactionDisbandEvent(me, faction.getId()); + Bukkit.getServer().getPluginManager().callEvent(disbandEvent); + if (disbandEvent.isCancelled()) { + return; + } + + // Send FPlayerLeaveEvent for each player in the faction + for (FPlayer fplayer : faction.getFPlayers()) { + Bukkit.getServer().getPluginManager().callEvent(new FPlayerLeaveEvent(fplayer, faction, FPlayerLeaveEvent.PlayerLeaveReason.DISBAND)); + } + + // Inform all players + for (FPlayer fplayer : FPlayers.getInstance().getOnlinePlayers()) { + String who = senderIsConsole ? TL.GENERIC_SERVERADMIN.toString() : fme.describeTo(fplayer); + if (fplayer.getFaction() == faction) { + fplayer.msg(TL.COMMAND_DISBAND_BROADCAST_YOURS, who); + } else { + fplayer.msg(TL.COMMAND_DISBAND_BROADCAST_NOTYOURS, who, faction.getTag(fplayer)); + } + } + if (Conf.logFactionDisband) { + //TODO: Format this correctly and translate. + P.p.log("The cartel " + faction.getTag() + " (" + faction.getId() + ") was disbanded by " + (senderIsConsole ? "console command" : fme.getName()) + "."); + } + + if (Econ.shouldBeUsed() && !senderIsConsole) { + //Give all the faction's money to the disbander + double amount = Econ.getBalance(faction.getAccountId()); + Econ.transferMoney(fme, faction, fme, amount, false); + + if (amount > 0.0) { + String amountString = Econ.moneyString(amount); + msg(TL.COMMAND_DISBAND_HOLDINGS, amountString); + //TODO: Format this correctly and translate + P.p.log(fme.getName() + " has been given bank holdings of " + amountString + " from disbanding " + faction.getTag() + "."); + } + } + + Factions.getInstance().removeFaction(faction.getId()); + FTeamWrapper.applyUpdates(faction); + } + + @Override + public TL getUsageTranslation() { + return TL.COMMAND_DISBAND_DESCRIPTION; + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdFWarp.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdFWarp.java new file mode 100644 index 0000000..908f77d --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdFWarp.java @@ -0,0 +1,75 @@ +package com.massivecraft.factions.cmd; + +import com.massivecraft.factions.Conf; +import com.massivecraft.factions.FPlayer; +import com.massivecraft.factions.P; +import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.util.LazyLocation; +import com.massivecraft.factions.util.WarmUpUtil; +import com.massivecraft.factions.zcore.util.TL; +import mkremins.fanciful.FancyMessage; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.entity.Player; + +import java.util.Map; +import java.util.UUID; + +public class CmdFWarp extends FCommand { + + public CmdFWarp() { + super(); + this.aliases.add("warp"); + this.aliases.add("warps"); + this.optionalArgs.put("warpname", "warpname"); + + this.permission = Permission.WARP.node; + this.senderMustBeMember = true; + this.senderMustBeModerator = false; + } + + @Override + public void perform() { + //TODO: check if in combat. + if (args.size() == 0) { + FancyMessage msg = new FancyMessage(TL.COMMAND_FWARP_WARPS.toString()).color(ChatColor.GOLD); + Map warps = myFaction.getWarps(); + for (String s : warps.keySet()) { + msg.then(s + " ").tooltip(TL.COMMAND_FWARP_CLICKTOWARP.toString()).command("/" + Conf.baseCommandAliases.get(0) + " warp " + s).color(ChatColor.WHITE); + } + sendFancyMessage(msg); + } else if (args.size() > 1) { + fme.msg(TL.COMMAND_FWARP_COMMANDFORMAT); + } else { + final String warpName = argAsString(0); + if (myFaction.isWarp(argAsString(0))) { + if (!transact(fme)) { + return; + } + final FPlayer fPlayer = fme; + final UUID uuid = fme.getPlayer().getUniqueId(); + this.doWarmUp(WarmUpUtil.Warmup.WARP, TL.WARMUPS_NOTIFY_TELEPORT, warpName, new Runnable() { + @Override + public void run() { + Player player = Bukkit.getPlayer(uuid); + if (player != null) { + player.teleport(fPlayer.getFaction().getWarp(warpName).getLocation()); + fPlayer.msg(TL.COMMAND_FWARP_WARPED, warpName); + } + } + }, this.p.getConfig().getLong("warmups.f-warp", 0)); + } else { + fme.msg(TL.COMMAND_FWARP_INVALID, warpName); + } + } + } + + private boolean transact(FPlayer player) { + return !P.p.getConfig().getBoolean("warp-cost.enabled", false) || player.isAdminBypassing() || payForCommand(P.p.getConfig().getDouble("warp-cost.warp", 5), TL.COMMAND_FWARP_TOWARP.toString(), TL.COMMAND_FWARP_FORWARPING.toString()); + } + + @Override + public TL getUsageTranslation() { + return TL.COMMAND_FWARP_DESCRIPTION; + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdHelp.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdHelp.java new file mode 100644 index 0000000..5a9f539 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdHelp.java @@ -0,0 +1,218 @@ +package com.massivecraft.factions.cmd; + +import com.massivecraft.factions.Conf; +import com.massivecraft.factions.P; +import com.massivecraft.factions.integration.Econ; +import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.zcore.util.TL; +import org.bukkit.configuration.ConfigurationSection; + +import java.util.ArrayList; +import java.util.List; + + +public class CmdHelp extends FCommand { + + public CmdHelp() { + super(); + this.aliases.add("help"); + this.aliases.add("h"); + this.aliases.add("?"); + + //this.requiredArgs.add(""); + this.optionalArgs.put("page", "1"); + + this.permission = Permission.HELP.node; + this.disableOnLock = false; + + senderMustBePlayer = false; + senderMustBeMember = false; + senderMustBeModerator = false; + senderMustBeAdmin = false; + } + + @Override + public void perform() { + if (P.p.getConfig().getBoolean("use-old-help", true)) { + if (helpPages == null) { + updateHelp(); + } + + int page = this.argAsInt(0, 1); + sendMessage(p.txt.titleize("Cartels Help (" + page + "/" + helpPages.size() + ")")); + + page -= 1; + + if (page < 0 || page >= helpPages.size()) { + msg(TL.COMMAND_HELP_404.format(String.valueOf(page))); + return; + } + sendMessage(helpPages.get(page)); + return; + } + ConfigurationSection help = P.p.getConfig().getConfigurationSection("help"); + if (help == null) { + help = P.p.getConfig().createSection("help"); // create new help section + List error = new ArrayList(); + error.add("&cUpdate help messages in config.yml!"); + error.add("&cSet use-old-help for legacy help messages"); + help.set("'1'", error); // add default error messages + } + String pageArg = this.argAsString(0, "1"); + List page = help.getStringList(pageArg); + if (page == null || page.isEmpty()) { + msg(TL.COMMAND_HELP_404.format(pageArg)); + return; + } + for (String helpLine : page) { + sendMessage(P.p.txt.parse(helpLine)); + } + } + + //----------------------------------------------// + // Build the help pages + //----------------------------------------------// + + public ArrayList> helpPages; + + public void updateHelp() { + helpPages = new ArrayList>(); + ArrayList pageLines; + + pageLines = new ArrayList(); + pageLines.add(p.cmdBase.cmdHelp.getUseageTemplate(true)); + pageLines.add(p.cmdBase.cmdList.getUseageTemplate(true)); + pageLines.add(p.cmdBase.cmdShow.getUseageTemplate(true)); + pageLines.add(p.cmdBase.cmdPower.getUseageTemplate(true)); + pageLines.add(p.cmdBase.cmdJoin.getUseageTemplate(true)); + pageLines.add(p.cmdBase.cmdLeave.getUseageTemplate(true)); + pageLines.add(p.cmdBase.cmdChat.getUseageTemplate(true)); + pageLines.add(p.cmdBase.cmdToggleAllianceChat.getUseageTemplate(true)); + pageLines.add(p.cmdBase.cmdHome.getUseageTemplate(true)); + pageLines.add(p.txt.parse(TL.COMMAND_HELP_NEXTCREATE.toString())); + helpPages.add(pageLines); + + pageLines = new ArrayList(); + pageLines.add(p.cmdBase.cmdCreate.getUseageTemplate(true)); + pageLines.add(p.cmdBase.cmdDescription.getUseageTemplate(true)); + pageLines.add(p.cmdBase.cmdTag.getUseageTemplate(true)); + pageLines.add(p.txt.parse(TL.COMMAND_HELP_INVITATIONS.toString())); + pageLines.add(p.cmdBase.cmdOpen.getUseageTemplate(true)); + pageLines.add(p.cmdBase.cmdInvite.getUseageTemplate(true)); + pageLines.add(p.cmdBase.cmdDeinvite.getUseageTemplate(true)); + pageLines.add(p.txt.parse(TL.COMMAND_HELP_HOME.toString())); + pageLines.add(p.cmdBase.cmdSethome.getUseageTemplate(true)); + helpPages.add(pageLines); + + if (Econ.isSetup() && Conf.econEnabled && Conf.bankEnabled) { + pageLines = new ArrayList(); + pageLines.add(""); + pageLines.add(p.txt.parse(TL.COMMAND_HELP_BANK_1.toString())); + pageLines.add(p.txt.parse(TL.COMMAND_HELP_BANK_2.toString())); + pageLines.add(p.txt.parse(TL.COMMAND_HELP_BANK_3.toString())); + pageLines.add(""); + pageLines.add(p.cmdBase.cmdMoney.getUseageTemplate(true)); + pageLines.add(""); + pageLines.add(""); + pageLines.add(""); + helpPages.add(pageLines); + } + + pageLines = new ArrayList(); + pageLines.add(p.cmdBase.cmdClaim.getUseageTemplate(true)); + pageLines.add(p.cmdBase.cmdAutoClaim.getUseageTemplate(true)); + pageLines.add(p.cmdBase.cmdUnclaim.getUseageTemplate(true)); + pageLines.add(p.cmdBase.cmdUnclaimall.getUseageTemplate(true)); + pageLines.add(p.cmdBase.cmdKick.getUseageTemplate(true)); + pageLines.add(p.cmdBase.cmdMod.getUseageTemplate(true)); + pageLines.add(p.cmdBase.cmdAdmin.getUseageTemplate(true)); + pageLines.add(p.cmdBase.cmdTitle.getUseageTemplate(true)); + pageLines.add(p.cmdBase.cmdSB.getUseageTemplate(true)); + pageLines.add(p.cmdBase.cmdSeeChunk.getUseageTemplate(true)); + pageLines.add(p.cmdBase.cmdStatus.getUseageTemplate(true)); + pageLines.add(p.txt.parse(TL.COMMAND_HELP_PLAYERTITLES.toString())); + helpPages.add(pageLines); + + pageLines = new ArrayList(); + pageLines.add(p.cmdBase.cmdMap.getUseageTemplate(true)); + pageLines.add(p.cmdBase.cmdBoom.getUseageTemplate(true)); + pageLines.add(p.cmdBase.cmdOwner.getUseageTemplate(true)); + pageLines.add(p.cmdBase.cmdOwnerList.getUseageTemplate(true)); + pageLines.add(p.txt.parse(TL.COMMAND_HELP_OWNERSHIP_1.toString())); + pageLines.add(p.txt.parse(TL.COMMAND_HELP_OWNERSHIP_2.toString())); + pageLines.add(p.txt.parse(TL.COMMAND_HELP_OWNERSHIP_3.toString())); + helpPages.add(pageLines); + + pageLines = new ArrayList(); + pageLines.add(p.cmdBase.cmdDisband.getUseageTemplate(true)); + pageLines.add(""); + pageLines.add(p.cmdBase.cmdRelationAlly.getUseageTemplate(true)); + pageLines.add(p.cmdBase.cmdRelationNeutral.getUseageTemplate(true)); + pageLines.add(p.cmdBase.cmdRelationEnemy.getUseageTemplate(true)); + pageLines.add(p.txt.parse(TL.COMMAND_HELP_RELATIONS_1.toString())); + pageLines.add(p.txt.parse(TL.COMMAND_HELP_RELATIONS_2.toString())); + pageLines.add(p.txt.parse(TL.COMMAND_HELP_RELATIONS_3.toString())); + pageLines.add(p.txt.parse(TL.COMMAND_HELP_RELATIONS_4.toString())); + helpPages.add(pageLines); + + pageLines = new ArrayList(); + pageLines.add(p.txt.parse(TL.COMMAND_HELP_RELATIONS_5.toString())); + pageLines.add(p.txt.parse(TL.COMMAND_HELP_RELATIONS_6.toString())); + pageLines.add(p.txt.parse(TL.COMMAND_HELP_RELATIONS_7.toString())); + pageLines.add(TL.COMMAND_HELP_RELATIONS_8.toString()); + pageLines.add(p.txt.parse(TL.COMMAND_HELP_RELATIONS_9.toString())); + pageLines.add(p.txt.parse(TL.COMMAND_HELP_RELATIONS_10.toString())); + pageLines.add(p.txt.parse(TL.COMMAND_HELP_RELATIONS_11.toString())); + pageLines.add(p.txt.parse(TL.COMMAND_HELP_RELATIONS_12.toString())); + pageLines.add(p.txt.parse(TL.COMMAND_HELP_RELATIONS_13.toString())); + helpPages.add(pageLines); + + pageLines = new ArrayList(); + pageLines.add(p.txt.parse(TL.COMMAND_HELP_PERMISSIONS_1.toString())); + pageLines.add(p.txt.parse(TL.COMMAND_HELP_PERMISSIONS_2.toString())); + pageLines.add(p.txt.parse(TL.COMMAND_HELP_PERMISSIONS_3.toString())); + pageLines.add(TL.COMMAND_HELP_PERMISSIONS_4.toString()); + pageLines.add(p.txt.parse(TL.COMMAND_HELP_PERMISSIONS_5.toString())); + pageLines.add(p.txt.parse(TL.COMMAND_HELP_PERMISSIONS_6.toString())); + pageLines.add(p.txt.parse(TL.COMMAND_HELP_PERMISSIONS_7.toString())); + pageLines.add(p.txt.parse(TL.COMMAND_HELP_PERMISSIONS_8.toString())); + pageLines.add(p.txt.parse(TL.COMMAND_HELP_PERMISSIONS_9.toString())); + helpPages.add(pageLines); + + pageLines = new ArrayList(); + pageLines.add(TL.COMMAND_HELP_MOAR_1.toString()); + pageLines.add(p.cmdBase.cmdBypass.getUseageTemplate(true)); + pageLines.add(p.txt.parse(TL.COMMAND_HELP_ADMIN_1.toString())); + pageLines.add(p.txt.parse(TL.COMMAND_HELP_ADMIN_2.toString())); + pageLines.add(p.txt.parse(TL.COMMAND_HELP_ADMIN_3.toString())); + pageLines.add(p.cmdBase.cmdSafeunclaimall.getUseageTemplate(true)); + pageLines.add(p.cmdBase.cmdWarunclaimall.getUseageTemplate(true)); + //TODO:TL + pageLines.add(p.txt.parse("Note: " + p.cmdBase.cmdUnclaim.getUseageTemplate(false) + P.p.txt.parse("") + " works on safe/war zones as well.")); + pageLines.add(p.cmdBase.cmdPeaceful.getUseageTemplate(true)); + helpPages.add(pageLines); + + pageLines = new ArrayList(); + pageLines.add(p.txt.parse(TL.COMMAND_HELP_MOAR_2.toString())); + pageLines.add(p.cmdBase.cmdChatSpy.getUseageTemplate(true)); + pageLines.add(p.cmdBase.cmdPermanent.getUseageTemplate(true)); + pageLines.add(p.cmdBase.cmdPermanentPower.getUseageTemplate(true)); + pageLines.add(p.cmdBase.cmdPowerBoost.getUseageTemplate(true)); + pageLines.add(p.cmdBase.cmdConfig.getUseageTemplate(true)); + helpPages.add(pageLines); + + pageLines = new ArrayList(); + pageLines.add(p.txt.parse(TL.COMMAND_HELP_MOAR_3.toString())); + pageLines.add(p.cmdBase.cmdLock.getUseageTemplate(true)); + pageLines.add(p.cmdBase.cmdReload.getUseageTemplate(true)); + pageLines.add(p.cmdBase.cmdSaveAll.getUseageTemplate(true)); + pageLines.add(p.cmdBase.cmdVersion.getUseageTemplate(true)); + helpPages.add(pageLines); + } + + @Override + public TL getUsageTranslation() { + return TL.COMMAND_HELP_DESCRIPTION; + } +} + diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdHome.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdHome.java new file mode 100644 index 0000000..4dfc1af --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdHome.java @@ -0,0 +1,137 @@ +package com.massivecraft.factions.cmd; + +import com.massivecraft.factions.*; +import com.massivecraft.factions.integration.Essentials; +import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.struct.Relation; +import com.massivecraft.factions.struct.Role; +import com.massivecraft.factions.util.WarmUpUtil; +import com.massivecraft.factions.zcore.util.SmokeUtil; +import com.massivecraft.factions.zcore.util.TL; +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.entity.Player; + +import java.util.ArrayList; +import java.util.List; + + +public class CmdHome extends FCommand { + + public CmdHome() { + super(); + this.aliases.add("home"); + + //this.requiredArgs.add(""); + //this.optionalArgs.put("", ""); + + this.permission = Permission.HOME.node; + this.disableOnLock = false; + + senderMustBePlayer = true; + senderMustBeMember = true; + senderMustBeModerator = false; + senderMustBeAdmin = false; + } + + @Override + public void perform() { + // TODO: Hide this command on help also. + if (!Conf.homesEnabled) { + fme.msg(TL.COMMAND_HOME_DISABLED); + return; + } + + if (!Conf.homesTeleportCommandEnabled) { + fme.msg(TL.COMMAND_HOME_TELEPORTDISABLED); + return; + } + + if (!myFaction.hasHome()) { + fme.msg(TL.COMMAND_HOME_NOHOME.toString() + (fme.getRole().value < Role.MODERATOR.value ? TL.GENERIC_ASKYOURLEADER.toString() : TL.GENERIC_YOUSHOULD.toString())); + fme.sendMessage(p.cmdBase.cmdSethome.getUseageTemplate()); + return; + } + + if (!Conf.homesTeleportAllowedFromEnemyTerritory && fme.isInEnemyTerritory()) { + fme.msg(TL.COMMAND_HOME_INENEMY); + return; + } + + if (!Conf.homesTeleportAllowedFromDifferentWorld && me.getWorld().getUID() != myFaction.getHome().getWorld().getUID()) { + fme.msg(TL.COMMAND_HOME_WRONGWORLD); + return; + } + + Faction faction = Board.getInstance().getFactionAt(new FLocation(me.getLocation())); + final Location loc = me.getLocation().clone(); + + // if player is not in a safe zone or their own faction territory, only allow teleport if no enemies are nearby + if (Conf.homesTeleportAllowedEnemyDistance > 0 && + !faction.isSafeZone() && + (!fme.isInOwnTerritory() || (fme.isInOwnTerritory() && !Conf.homesTeleportIgnoreEnemiesIfInOwnTerritory))) { + World w = loc.getWorld(); + double x = loc.getX(); + double y = loc.getY(); + double z = loc.getZ(); + + for (Player p : me.getServer().getOnlinePlayers()) { + if (p == null || !p.isOnline() || p.isDead() || p == me || p.getWorld() != w) { + continue; + } + + FPlayer fp = FPlayers.getInstance().getByPlayer(p); + if (fme.getRelationTo(fp) != Relation.ENEMY || fp.isVanished()) { + continue; + } + + Location l = p.getLocation(); + double dx = Math.abs(x - l.getX()); + double dy = Math.abs(y - l.getY()); + double dz = Math.abs(z - l.getZ()); + double max = Conf.homesTeleportAllowedEnemyDistance; + + // box-shaped distance check + if (dx > max || dy > max || dz > max) { + continue; + } + + fme.msg(TL.COMMAND_HOME_ENEMYNEAR, String.valueOf(Conf.homesTeleportAllowedEnemyDistance)); + return; + } + } + + // if economy is enabled, they're not on the bypass list, and this command has a cost set, make 'em pay + if (!payForCommand(Conf.econCostHome, TL.COMMAND_HOME_TOTELEPORT.toString(), TL.COMMAND_HOME_FORTELEPORT.toString())) { + return; + } + + // if Essentials teleport handling is enabled and available, pass the teleport off to it (for delay and cooldown) + if (Essentials.handleTeleport(me, myFaction.getHome())) { + return; + } + + this.doWarmUp(WarmUpUtil.Warmup.HOME, TL.WARMUPS_NOTIFY_TELEPORT, "Home", new Runnable() { + @Override + public void run() { + // Create a smoke effect + if (Conf.homesTeleportCommandSmokeEffectEnabled) { + List smokeLocations = new ArrayList(); + smokeLocations.add(loc); + smokeLocations.add(loc.add(0, 1, 0)); + smokeLocations.add(CmdHome.this.myFaction.getHome()); + smokeLocations.add(CmdHome.this.myFaction.getHome().clone().add(0, 1, 0)); + SmokeUtil.spawnCloudRandom(smokeLocations, Conf.homesTeleportCommandSmokeEffectThickness); + } + + CmdHome.this.me.teleport(CmdHome.this.myFaction.getHome()); + } + }, this.p.getConfig().getLong("warmups.f-home", 0)); + } + + @Override + public TL getUsageTranslation() { + return TL.COMMAND_HOME_DESCRIPTION; + } + +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdInvite.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdInvite.java new file mode 100644 index 0000000..aad855f --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdInvite.java @@ -0,0 +1,80 @@ +package com.massivecraft.factions.cmd; + +import com.massivecraft.factions.Conf; +import com.massivecraft.factions.FPlayer; +import com.massivecraft.factions.eco.EcoResult; +import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.zcore.util.TL; +import mkremins.fanciful.FancyMessage; +import net.grandtheftmc.core.util.NumeralUtil; +import org.bukkit.ChatColor; + +import java.util.Locale; + +public class CmdInvite extends FCommand { + + public CmdInvite() { + super(); + this.aliases.add("invite"); + this.aliases.add("inv"); + + this.requiredArgs.add("player name"); + //this.optionalArgs.put("", ""); + + this.permission = Permission.INVITE.node; + this.disableOnLock = true; + + senderMustBePlayer = true; + senderMustBeMember = false; + senderMustBeModerator = true; + senderMustBeAdmin = false; + } + + @Override + public void perform() { + FPlayer you = this.argAsBestFPlayerMatch(0); + if (you == null) { + return; + } + + if (you.getFaction() == myFaction) { + msg(TL.COMMAND_INVITE_ALREADYMEMBER, you.getName(), myFaction.getTag()); + msg(TL.GENERIC_YOUMAYWANT.toString() + p.cmdBase.cmdKick.getUseageTemplate(false)); + return; + } + + // if economy is enabled, they're not on the bypass list, and this command has a cost set, make 'em pay +// if (!payForCommand(Conf.econCostInvite, TL.COMMAND_INVITE_TOINVITE.toString(), TL.COMMAND_INVITE_FORINVITE.toString())) { +// return; +// } + + if(Conf.econCostInvite > 0) { + EcoResult result = myFaction.takeFromStash(Conf.econCostInvite); + if(result == EcoResult.LOW_FUNDS) { + fme.msg("%s can't afford %s %s.", myFaction.describeTo(myFaction, true), NumeralUtil.toCurrency(Conf.econCostInvite, Locale.US), TL.COMMAND_INVITE_TOINVITE); + return; + } + + if(result != EcoResult.SUCCESS) return; + } + + myFaction.invite(you); + if (!you.isOnline()) { + return; + } + + // Tooltips, colors, and commands only apply to the string immediately before it. + FancyMessage message = new FancyMessage(fme.describeTo(you, true)).tooltip(TL.COMMAND_INVITE_CLICKTOJOIN.toString()).command("/" + Conf.baseCommandAliases.get(0) + " join " + myFaction.getTag()).then(TL.COMMAND_INVITE_INVITEDYOU.toString()).color(ChatColor.YELLOW).tooltip(TL.COMMAND_INVITE_CLICKTOJOIN.toString()).command("/" + Conf.baseCommandAliases.get(0) + " join " + myFaction.getTag()).then(myFaction.describeTo(you)).tooltip(TL.COMMAND_INVITE_CLICKTOJOIN.toString()).command("/" + Conf.baseCommandAliases.get(0) + " join " + myFaction.getTag()); + + message.send(you.getPlayer()); + + //you.msg("%s invited you to %s", fme.describeTo(you, true), myFaction.describeTo(you)); + myFaction.msg(TL.COMMAND_INVITE_INVITED, fme.describeTo(myFaction, true), you.describeTo(myFaction)); + } + + @Override + public TL getUsageTranslation() { + return TL.COMMAND_INVITE_DESCRIPTION; + } + +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdJoin.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdJoin.java new file mode 100644 index 0000000..3aa0b3b --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdJoin.java @@ -0,0 +1,118 @@ +package com.massivecraft.factions.cmd; + +import com.massivecraft.factions.*; +import com.massivecraft.factions.event.FPlayerJoinEvent; +import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.zcore.util.TL; +import org.bukkit.Bukkit; + +public class CmdJoin extends FCommand { + + public CmdJoin() { + super(); + this.aliases.add("join"); + + this.requiredArgs.add("cartel name"); + this.optionalArgs.put("player", "you"); + + this.permission = Permission.JOIN.node; + this.disableOnLock = true; + + senderMustBePlayer = true; + senderMustBeMember = false; + senderMustBeModerator = false; + senderMustBeAdmin = false; + } + + @Override + public void perform() { + Faction faction = this.argAsFaction(0); + if (faction == null) { + return; + } + + FPlayer fplayer = this.argAsBestFPlayerMatch(1, fme, false); + boolean samePlayer = fplayer == fme; + + if (!samePlayer && !Permission.JOIN_OTHERS.has(sender, false)) { + msg(TL.COMMAND_JOIN_CANNOTFORCE); + return; + } + + if (!faction.isNormal()) { + msg(TL.COMMAND_JOIN_SYSTEMFACTION); + return; + } + + if (faction == fplayer.getFaction()) { + //TODO:TL + msg(TL.COMMAND_JOIN_ALREADYMEMBER, fplayer.describeTo(fme, true), (samePlayer ? "are" : "is"), faction.getTag(fme)); + return; + } + + if (Conf.factionMemberLimit > 0 && faction.getFPlayers().size() >= Conf.factionMemberLimit) { + msg(TL.COMMAND_JOIN_ATLIMIT, faction.getTag(fme), Conf.factionMemberLimit, fplayer.describeTo(fme, false)); + return; + } + + if (fplayer.hasFaction()) { + //TODO:TL + msg(TL.COMMAND_JOIN_INOTHERFACTION, fplayer.describeTo(fme, true), (samePlayer ? "your" : "their")); + return; + } + + if (!Conf.canLeaveWithNegativePower && fplayer.getPower() < 0) { + msg(TL.COMMAND_JOIN_NEGATIVEPOWER, fplayer.describeTo(fme, true)); + return; + } + + if (!(faction.getOpen() || faction.isInvited(fplayer) || fme.isAdminBypassing() || Permission.JOIN_ANY.has(sender, false))) { + msg(TL.COMMAND_JOIN_REQUIRESINVITATION); + if (samePlayer) { + faction.msg(TL.COMMAND_JOIN_ATTEMPTEDJOIN, fplayer.describeTo(faction, true)); + } + return; + } + + // if economy is enabled, they're not on the bypass list, and this command has a cost set, make sure they can pay + if (samePlayer && !canAffordCommand(Conf.econCostJoin, TL.COMMAND_JOIN_TOJOIN.toString())) { + return; + } + + // trigger the join event (cancellable) + FPlayerJoinEvent joinEvent = new FPlayerJoinEvent(FPlayers.getInstance().getByPlayer(me), faction, FPlayerJoinEvent.PlayerJoinReason.COMMAND); + Bukkit.getServer().getPluginManager().callEvent(joinEvent); + if (joinEvent.isCancelled()) { + return; + } + + // then make 'em pay (if applicable) + if (samePlayer && !payForCommand(Conf.econCostJoin, TL.COMMAND_JOIN_TOJOIN.toString(), TL.COMMAND_JOIN_FORJOIN.toString())) { + return; + } + + fme.msg(TL.COMMAND_JOIN_SUCCESS, fplayer.describeTo(fme, true), faction.getTag(fme)); + + if (!samePlayer) { + fplayer.msg(TL.COMMAND_JOIN_MOVED, fme.describeTo(fplayer, true), faction.getTag(fplayer)); + } + faction.msg(TL.COMMAND_JOIN_JOINED, fplayer.describeTo(faction, true)); + + fplayer.resetFactionData(); + fplayer.setFaction(faction); + faction.deinvite(fplayer); + + if (Conf.logFactionJoin) { + if (samePlayer) { + P.p.log(TL.COMMAND_JOIN_JOINEDLOG.toString(), fplayer.getName(), faction.getTag()); + } else { + P.p.log(TL.COMMAND_JOIN_MOVEDLOG.toString(), fme.getName(), fplayer.getName(), faction.getTag()); + } + } + } + + @Override + public TL getUsageTranslation() { + return TL.COMMAND_JOIN_DESCRIPTION; + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdKick.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdKick.java new file mode 100644 index 0000000..974e688 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdKick.java @@ -0,0 +1,125 @@ +package com.massivecraft.factions.cmd; + +import com.massivecraft.factions.Conf; +import com.massivecraft.factions.FPlayer; +import com.massivecraft.factions.Faction; +import com.massivecraft.factions.P; +import com.massivecraft.factions.event.FPlayerLeaveEvent; +import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.struct.Role; +import com.massivecraft.factions.zcore.util.TL; +import mkremins.fanciful.FancyMessage; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; + +public class CmdKick extends FCommand { + + public CmdKick() { + super(); + this.aliases.add("kick"); + + this.optionalArgs.put("player name", "player name"); + //this.optionalArgs.put("", ""); + + this.permission = Permission.KICK.node; + this.disableOnLock = false; + + senderMustBePlayer = true; + senderMustBeMember = false; + senderMustBeModerator = true; + senderMustBeAdmin = false; + } + + @Override + public void perform() { + FPlayer toKick = this.argIsSet(0) ? this.argAsBestFPlayerMatch(0) : null; + if (toKick == null) { + FancyMessage msg = new FancyMessage(TL.COMMAND_KICK_CANDIDATES.toString()).color(ChatColor.GOLD); + for (FPlayer player : myFaction.getFPlayersWhereRole(Role.NORMAL)) { + String s = player.getName(); + msg.then(s + " ").color(ChatColor.WHITE).tooltip(TL.COMMAND_KICK_CLICKTOKICK.toString() + s).command("/" + Conf.baseCommandAliases.get(0) + " kick " + s); + } + if (fme.getRole() == Role.ADMIN) { + for (FPlayer player : myFaction.getFPlayersWhereRole(Role.MODERATOR)) { + String s = player.getName(); + msg.then(s + " ").color(ChatColor.GRAY).tooltip(TL.COMMAND_KICK_CLICKTOKICK.toString() + s).command("/" + Conf.baseCommandAliases.get(0) + " kick " + s); + } + } + + sendFancyMessage(msg); + return; + } + + if (fme == toKick) { + msg(TL.COMMAND_KICK_SELF); + msg(TL.GENERIC_YOUMAYWANT.toString() + p.cmdBase.cmdLeave.getUseageTemplate(false)); + return; + } + + Faction toKickFaction = toKick.getFaction(); + + if (toKickFaction.isWilderness()) { + sender.sendMessage(TL.COMMAND_KICK_NONE.toString()); + return; + } + + // players with admin-level "disband" permission can bypass these requirements + if (!Permission.KICK_ANY.has(sender)) { + if (toKickFaction != myFaction) { + msg(TL.COMMAND_KICK_NOTMEMBER, toKick.describeTo(fme, true), myFaction.describeTo(fme)); + return; + } + + if (toKick.getRole().value >= fme.getRole().value) { + msg(TL.COMMAND_KICK_INSUFFICIENTRANK); + return; + } + + if (!Conf.canLeaveWithNegativePower && toKick.getPower() < 0) { + msg(TL.COMMAND_KICK_NEGATIVEPOWER); + return; + } + } + + // if economy is enabled, they're not on the bypass list, and this command has a cost set, make sure they can pay + if (!canAffordCommand(Conf.econCostKick, TL.COMMAND_KICK_TOKICK.toString())) { + return; + } + + // trigger the leave event (cancellable) [reason:kicked] + FPlayerLeaveEvent event = new FPlayerLeaveEvent(toKick, toKick.getFaction(), FPlayerLeaveEvent.PlayerLeaveReason.KICKED); + Bukkit.getServer().getPluginManager().callEvent(event); + if (event.isCancelled()) { + return; + } + + // then make 'em pay (if applicable) + if (!payForCommand(Conf.econCostKick, TL.COMMAND_KICK_TOKICK.toString(), TL.COMMAND_KICK_FORKICK.toString())) { + return; + } + + toKickFaction.msg(TL.COMMAND_KICK_FACTION, fme.describeTo(toKickFaction, true), toKick.describeTo(toKickFaction, true)); + toKick.msg(TL.COMMAND_KICK_KICKED, fme.describeTo(toKick, true), toKickFaction.describeTo(toKick)); + if (toKickFaction != myFaction) { + fme.msg(TL.COMMAND_KICK_KICKS, toKick.describeTo(fme), toKickFaction.describeTo(fme)); + } + + if (Conf.logFactionKick) { + //TODO:TL + P.p.log((senderIsConsole ? "A console command" : fme.getName()) + " kicked " + toKick.getName() + " from the cartel: " + toKickFaction.getTag()); + } + + if (toKick.getRole() == Role.ADMIN) { + toKickFaction.promoteNewLeader(); + } + + toKickFaction.deinvite(toKick); + toKick.resetFactionData(); + } + + @Override + public TL getUsageTranslation() { + return TL.COMMAND_KICK_DESCRIPTION; + } + +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdLeave.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdLeave.java new file mode 100644 index 0000000..635b1da --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdLeave.java @@ -0,0 +1,34 @@ +package com.massivecraft.factions.cmd; + +import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.zcore.util.TL; + +public class CmdLeave extends FCommand { + + public CmdLeave() { + super(); + this.aliases.add("leave"); + + //this.requiredArgs.add(""); + //this.optionalArgs.put("", ""); + + this.permission = Permission.LEAVE.node; + this.disableOnLock = true; + + senderMustBePlayer = true; + senderMustBeMember = true; + senderMustBeModerator = false; + senderMustBeAdmin = false; + } + + @Override + public void perform() { + fme.leave(true); + } + + @Override + public TL getUsageTranslation() { + return TL.LEAVE_DESCRIPTION; + } + +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdList.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdList.java new file mode 100644 index 0000000..319b62e --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdList.java @@ -0,0 +1,131 @@ +package com.massivecraft.factions.cmd; + +import com.massivecraft.factions.Conf; +import com.massivecraft.factions.Faction; +import com.massivecraft.factions.Factions; +import com.massivecraft.factions.P; +import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.zcore.util.TL; +import com.massivecraft.factions.zcore.util.TagUtil; + +import java.util.*; + + +public class CmdList extends FCommand { + + private String[] defaults = new String[3]; + + public CmdList() { + super(); + this.aliases.add("list"); + this.aliases.add("ls"); + + // default values in case user has old config + defaults[0] = "&e&m----------&r&e[ &2Cartel List &9{pagenumber}&e/&9{pagecount} &e]&m----------"; + defaults[1] = "Cartelless {factionless} online"; + defaults[2] = "{faction} {online} / {members} online, Land / Power / Maxpower: {chunks}/{power}/{maxPower}"; + + //this.requiredArgs.add(""); + this.optionalArgs.put("page", "1"); + + this.permission = Permission.LIST.node; + this.disableOnLock = false; + + senderMustBePlayer = false; + senderMustBeMember = false; + senderMustBeModerator = false; + senderMustBeAdmin = false; + } + + @Override + public void perform() { + // if economy is enabled, they're not on the bypass list, and this command has a cost set, make 'em pay + if (!payForCommand(Conf.econCostList, "to list the cartels", "for listing the cartels")) { + return; + } + + ArrayList factionList = Factions.getInstance().getAllFactions(); + factionList.remove(Factions.getInstance().getNone()); + factionList.remove(Factions.getInstance().getSafeZone()); + factionList.remove(Factions.getInstance().getWarZone()); + + // remove exempt factions + if (!fme.getPlayer().hasPermission("factions.show.bypassexempt")) { + List exemptFactions = P.p.getConfig().getStringList("show-exempt"); + Iterator factionIterator = factionList.iterator(); + while (factionIterator.hasNext()) { + Faction next = factionIterator.next(); + if (exemptFactions.contains(next.getTag())) { + factionIterator.remove(); + } + } + } + + // Sort by total followers first + Collections.sort(factionList, new Comparator() { + @Override + public int compare(Faction f1, Faction f2) { + int f1Size = f1.getFPlayers().size(); + int f2Size = f2.getFPlayers().size(); + if (f1Size < f2Size) { + return 1; + } else if (f1Size > f2Size) { + return -1; + } + return 0; + } + }); + + // Then sort by how many members are online now + Collections.sort(factionList, new Comparator() { + @Override + public int compare(Faction f1, Faction f2) { + int f1Size = f1.getFPlayersWhereOnline(true).size(); + int f2Size = f2.getFPlayersWhereOnline(true).size(); + if (f1Size < f2Size) { + return 1; + } else if (f1Size > f2Size) { + return -1; + } + return 0; + } + }); + + ArrayList lines = new ArrayList(); + + factionList.add(0, Factions.getInstance().getNone()); + + final int pageheight = 9; + int pagenumber = this.argAsInt(0, 1); + int pagecount = (factionList.size() / pageheight) + 1; + if (pagenumber > pagecount) { + pagenumber = pagecount; + } else if (pagenumber < 1) { + pagenumber = 1; + } + int start = (pagenumber - 1) * pageheight; + int end = start + pageheight; + if (end > factionList.size()) { + end = factionList.size(); + } + + + String header = p.getConfig().getString("list.header", defaults[0]); + header = header.replace("{pagenumber}", String.valueOf(pagenumber)).replace("{pagecount}", String.valueOf(pagecount)); + lines.add(p.txt.parse(header)); + + for (Faction faction : factionList.subList(start, end)) { + if (faction.isWilderness()) { + lines.add(p.txt.parse(TagUtil.parsePlain(faction, p.getConfig().getString("list.factionless", defaults[1])))); + continue; + } + lines.add(p.txt.parse(TagUtil.parsePlain(faction, fme, p.getConfig().getString("list.entry", defaults[2])))); + } + sendMessage(lines); + } + + @Override + public TL getUsageTranslation() { + return TL.COMMAND_LIST_DESCRIPTION; + } +} \ No newline at end of file diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdLock.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdLock.java new file mode 100644 index 0000000..a3c88af --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdLock.java @@ -0,0 +1,42 @@ +package com.massivecraft.factions.cmd; + +import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.zcore.util.TL; + +public class CmdLock extends FCommand { + + // TODO: This solution needs refactoring. + /* + factions.lock: + description: use the /f lock [on/off] command to temporarily lock the data files from being overwritten + default: op + */ + + public CmdLock() { + super(); + this.aliases.add("lock"); + + //this.requiredArgs.add(""); + this.optionalArgs.put("on/off", "flip"); + + this.permission = Permission.LOCK.node; + this.disableOnLock = false; + + senderMustBePlayer = false; + senderMustBeMember = false; + senderMustBeModerator = false; + senderMustBeAdmin = false; + } + + @Override + public void perform() { + p.setLocked(this.argAsBool(0, !p.getLocked())); + msg(p.getLocked() ? TL.COMMAND_LOCK_LOCKED : TL.COMMAND_LOCK_UNLOCKED); + } + + @Override + public TL getUsageTranslation() { + return TL.COMMAND_LOCK_DESCRIPTION; + } + +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdLogins.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdLogins.java new file mode 100644 index 0000000..08900c4 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdLogins.java @@ -0,0 +1,30 @@ +package com.massivecraft.factions.cmd; + +import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.zcore.util.TL; + +public class CmdLogins extends FCommand { + + public CmdLogins() { + super(); + this.aliases.add("login"); + this.aliases.add("logins"); + this.aliases.add("logout"); + this.aliases.add("logouts"); + this.senderMustBePlayer = true; + this.senderMustBeMember = true; + this.permission = Permission.MONITOR_LOGINS.node; + } + + @Override + public void perform() { + boolean monitor = fme.isMonitoringJoins(); + fme.msg(TL.COMMAND_LOGINS_TOGGLE, String.valueOf(!monitor)); + fme.setMonitorJoins(!monitor); + } + + @Override + public TL getUsageTranslation() { + return TL.COMMAND_LOGINS_DESCRIPTION; + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdMap.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdMap.java new file mode 100644 index 0000000..9724cda --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdMap.java @@ -0,0 +1,68 @@ +package com.massivecraft.factions.cmd; + +import com.massivecraft.factions.Board; +import com.massivecraft.factions.Conf; +import com.massivecraft.factions.FLocation; +import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.zcore.util.TL; + + +public class CmdMap extends FCommand { + + public CmdMap() { + super(); + this.aliases.add("map"); + + //this.requiredArgs.add(""); + this.optionalArgs.put("on/off", "once"); + + this.permission = Permission.MAP.node; + this.disableOnLock = false; + + senderMustBePlayer = true; + senderMustBeMember = false; + senderMustBeModerator = false; + senderMustBeAdmin = false; + } + + @Override + public void perform() { + if (this.argIsSet(0)) { + if (this.argAsBool(0, !fme.isMapAutoUpdating())) { + // Turn on + + // if economy is enabled, they're not on the bypass list, and this command has a cost set, make 'em pay + if (!payForCommand(Conf.econCostMap, "to show the map", "for showing the map")) { + return; + } + + fme.setMapAutoUpdating(true); + msg(TL.COMMAND_MAP_UPDATE_ENABLED); + + // And show the map once + showMap(); + } else { + // Turn off + fme.setMapAutoUpdating(false); + msg(TL.COMMAND_MAP_UPDATE_DISABLED); + } + } else { + // if economy is enabled, they're not on the bypass list, and this command has a cost set, make 'em pay + if (!payForCommand(Conf.econCostMap, TL.COMMAND_MAP_TOSHOW, TL.COMMAND_MAP_FORSHOW)) { + return; + } + + showMap(); + } + } + + public void showMap() { + sendMessage(Board.getInstance().getMap(myFaction, new FLocation(fme), fme.getPlayer().getLocation().getYaw())); + } + + @Override + public TL getUsageTranslation() { + return TL.COMMAND_MAP_DESCRIPTION; + } + +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdMod.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdMod.java new file mode 100644 index 0000000..2949224 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdMod.java @@ -0,0 +1,92 @@ +package com.massivecraft.factions.cmd; + +import com.massivecraft.factions.Conf; +import com.massivecraft.factions.FPlayer; +import com.massivecraft.factions.Faction; +import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.struct.Role; +import com.massivecraft.factions.zcore.util.TL; +import mkremins.fanciful.FancyMessage; +import org.bukkit.ChatColor; + +public class CmdMod extends FCommand { + + public CmdMod() { + super(); + this.aliases.add("underboss"); + this.aliases.add("setunderboss"); + this.aliases.add("ub"); + this.aliases.add("setub"); + this.aliases.add("mod"); + this.aliases.add("setmod"); + this.aliases.add("officer"); + this.aliases.add("setofficer"); + + this.optionalArgs.put("player name", "name"); + //this.optionalArgs.put("", ""); + + this.permission = Permission.MOD.node; + this.disableOnLock = true; + + senderMustBePlayer = false; + senderMustBeMember = true; + senderMustBeModerator = false; + senderMustBeAdmin = true; + } + + @Override + public void perform() { + FPlayer you = this.argAsBestFPlayerMatch(0); + if (you == null) { + FancyMessage msg = new FancyMessage(TL.COMMAND_MOD_CANDIDATES.toString()).color(ChatColor.GOLD); + for (FPlayer player : myFaction.getFPlayersWhereRole(Role.NORMAL)) { + String s = player.getName(); + msg.then(s + " ").color(ChatColor.WHITE).tooltip(TL.COMMAND_MOD_CLICKTOPROMOTE.toString() + s).command("/" + Conf.baseCommandAliases.get(0) + " underboss " + s); + } + + sendFancyMessage(msg); + return; + } + + boolean permAny = Permission.MOD_ANY.has(sender, false); + Faction targetFaction = you.getFaction(); + + if (targetFaction != myFaction && !permAny) { + msg(TL.COMMAND_MOD_NOTMEMBER, you.describeTo(fme, true)); + return; + } + + if (fme != null && fme.getRole() != Role.ADMIN && !permAny) { + msg(TL.COMMAND_MOD_NOTADMIN); + return; + } + + if (you == fme && !permAny) { + msg(TL.COMMAND_MOD_SELF); + return; + } + + if (you.getRole() == Role.ADMIN) { + msg(TL.COMMAND_MOD_TARGETISADMIN); + return; + } + + if (you.getRole() == Role.MODERATOR) { + // Revoke + you.setRole(Role.NORMAL); + targetFaction.msg(TL.COMMAND_MOD_REVOKED, you.describeTo(targetFaction, true)); + msg(TL.COMMAND_MOD_REVOKES, you.describeTo(fme, true)); + } else { + // Give + you.setRole(Role.MODERATOR); + targetFaction.msg(TL.COMMAND_MOD_PROMOTED, you.describeTo(targetFaction, true)); + msg(TL.COMMAND_MOD_PROMOTES, you.describeTo(fme, true)); + } + } + + @Override + public TL getUsageTranslation() { + return TL.COMMAND_MOD_DESCRIPTION; + } + +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdModifyPower.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdModifyPower.java new file mode 100644 index 0000000..7c5f75d --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdModifyPower.java @@ -0,0 +1,49 @@ +package com.massivecraft.factions.cmd; + +import com.massivecraft.factions.FPlayer; +import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.zcore.util.TL; + +public class CmdModifyPower extends FCommand { + + public CmdModifyPower() { + super(); + + this.aliases.add("pm"); + this.aliases.add("mp"); + this.aliases.add("modifypower"); + this.aliases.add("modpower"); + + this.requiredArgs.add("name"); + this.requiredArgs.add("power"); + + this.permission = Permission.MODIFY_POWER.node; // admin only perm. + + // Let's not require anything and let console modify this as well. + this.senderMustBeAdmin = false; + this.senderMustBePlayer = false; + this.senderMustBeMember = false; + this.senderMustBeModerator = false; + } + + @Override + public void perform() { + // /f modify # + FPlayer player = argAsBestFPlayerMatch(0); + Double number = argAsDouble(1); // returns null if not a Double. + + if (player == null || number == null) { + sender.sendMessage(getHelpShort()); + return; + } + + player.alterPower(number); + int newPower = player.getPowerRounded(); // int so we don't have super long doubles. + msg(TL.COMMAND_MODIFYPOWER_ADDED, number, player.getName(), newPower); + } + + @Override + public TL getUsageTranslation() { + return TL.COMMAND_MODIFYPOWER_DESCRIPTION; + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdMoney.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdMoney.java new file mode 100644 index 0000000..738540d --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdMoney.java @@ -0,0 +1,53 @@ +package com.massivecraft.factions.cmd; + +import com.massivecraft.factions.P; +import com.massivecraft.factions.zcore.util.TL; + +public class CmdMoney extends FCommand { + + public CmdMoneyBalance cmdMoneyBalance = new CmdMoneyBalance(); + public CmdMoneyDeposit cmdMoneyDeposit = new CmdMoneyDeposit(); + public CmdMoneyWithdraw cmdMoneyWithdraw = new CmdMoneyWithdraw(); + public CmdMoneyTransferFf cmdMoneyTransferFf = new CmdMoneyTransferFf(); + public CmdMoneyTransferFp cmdMoneyTransferFp = new CmdMoneyTransferFp(); + public CmdMoneyTransferPf cmdMoneyTransferPf = new CmdMoneyTransferPf(); + + public CmdMoney() { + super(); + this.aliases.add("money"); + this.aliases.add("stash"); + this.aliases.add("bal"); + this.aliases.add("balance"); + + //this.requiredArgs.add(""); + //this.optionalArgs.put("","") + + this.isMoneyCommand = true; + + senderMustBePlayer = false; + senderMustBeMember = false; + senderMustBeModerator = false; + senderMustBeAdmin = false; + + this.helpLong.add(p.txt.parseTags(TL.COMMAND_MONEY_LONG.toString())); + + this.addSubCommand(this.cmdMoneyBalance); + this.addSubCommand(this.cmdMoneyDeposit); + this.addSubCommand(this.cmdMoneyWithdraw); +// this.addSubCommand(this.cmdMoneyTransferFf); +// this.addSubCommand(this.cmdMoneyTransferFp); +// this.addSubCommand(this.cmdMoneyTransferPf); + } + + @Override + public void perform() { + this.commandChain.add(this); + P.p.cmdAutoHelp.execute(this.sender, this.args, this.commandChain); + } + + @Override + public TL getUsageTranslation() { + return TL.COMMAND_MONEY_DESCRIPTION; + } + +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdMoneyBalance.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdMoneyBalance.java new file mode 100644 index 0000000..d843411 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdMoneyBalance.java @@ -0,0 +1,55 @@ +package com.massivecraft.factions.cmd; + +import com.massivecraft.factions.Faction; +import com.massivecraft.factions.integration.Econ; +import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.util.MiscUtil; +import com.massivecraft.factions.zcore.util.TL; +import net.grandtheftmc.core.util.C; + +import java.text.NumberFormat; +import java.util.Locale; + +public class CmdMoneyBalance extends FCommand { + + private final Locale locale = Locale.US; + private final NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance(locale); + + public CmdMoneyBalance() { + super(); + this.aliases.add("b"); + this.aliases.add("bal"); + this.aliases.add("balance"); + + //this.requiredArgs.add(""); + this.optionalArgs.put("cartel", "yours"); + + this.permission = Permission.MONEY_BALANCE.node; + this.setHelpShort(TL.COMMAND_MONEYBALANCE_SHORT.toString()); + + senderMustBePlayer = false; + senderMustBeMember = false; + senderMustBeModerator = false; + senderMustBeAdmin = false; + } + + @Override + public void perform() { + Faction faction = myFaction; + if (this.argIsSet(0)) { + faction = this.argAsFaction(0); + } + + if (faction == null || !myFaction.isNormal()) return; + if (faction != myFaction && !Permission.MONEY_BALANCE_ANY.has(sender, true)) return; + +// Econ.sendBalanceInfo(fme, faction); + msg(C.GREEN + "%s's balance is %s.", faction.describeTo(fme, true), currencyFormatter.format(faction.getStash())); + } + + @Override + public TL getUsageTranslation() { + return TL.COMMAND_MONEYBALANCE_DESCRIPTION; + } + +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdMoneyDeposit.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdMoneyDeposit.java new file mode 100644 index 0000000..f1438a4 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdMoneyDeposit.java @@ -0,0 +1,68 @@ +package com.massivecraft.factions.cmd; + +import com.massivecraft.factions.Conf; +import com.massivecraft.factions.Faction; +import com.massivecraft.factions.P; +import com.massivecraft.factions.eco.EcoResult; +import com.massivecraft.factions.iface.EconomyParticipator; +import com.massivecraft.factions.integration.Econ; +import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.zcore.util.TL; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.util.C; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.users.ViceUser; +import net.grandtheftmc.vice.users.ViceUserManager; +import org.bukkit.ChatColor; + +import java.text.NumberFormat; +import java.util.Locale; + + +public class CmdMoneyDeposit extends FCommand { + + private final Locale locale = Locale.US; + private final NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance(locale); + + public CmdMoneyDeposit() { + super(); + this.aliases.add("d"); + this.aliases.add("deposit"); + + this.requiredArgs.add("amount"); + this.optionalArgs.put("cartel", "yours"); + + this.permission = Permission.MONEY_DEPOSIT.node; + + senderMustBePlayer = true; + senderMustBeMember = false; + senderMustBeModerator = false; + senderMustBeAdmin = false; + } + + @Override + public void perform() { + double amount = this.argAsDouble(0, 0d); + Faction faction = this.argAsFaction(1, myFaction); + if (faction == null || !faction.isNormal()) return; + + ViceUser user = Vice.getUserManager().getLoadedUser(fme.getPlayer().getUniqueId()); + if(!user.hasMoney(amount)) { + sender.sendMessage(Utils.f("&cInsufficient funds.")); + return; + } + + EcoResult result = myFaction.addToStash(amount); + if(result != EcoResult.SUCCESS) return; + user.takeMoney(amount); + +// P.p.log(ChatColor.stripColor(P.p.txt.parse(TL.COMMAND_MONEYDEPOSIT_DEPOSITED.toString(), fme.getName(), currencyFormatter.format(amount), faction.describeTo(null)))); + faction.msg(C.GREEN + TL.COMMAND_MONEYDEPOSIT_DEPOSITED.toString(), fme.getName(), currencyFormatter.format(amount), faction.describeTo(null)); + } + + @Override + public TL getUsageTranslation() { + return TL.COMMAND_MONEYDEPOSIT_DESCRIPTION; + } + +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdMoneyTransferFf.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdMoneyTransferFf.java new file mode 100644 index 0000000..5f389ef --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdMoneyTransferFf.java @@ -0,0 +1,69 @@ +package com.massivecraft.factions.cmd; + +import com.massivecraft.factions.Conf; +import com.massivecraft.factions.Faction; +import com.massivecraft.factions.P; +import com.massivecraft.factions.eco.EcoResult; +import com.massivecraft.factions.iface.EconomyParticipator; +import com.massivecraft.factions.integration.Econ; +import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.zcore.util.TL; +import net.grandtheftmc.core.util.Utils; +import org.bukkit.ChatColor; + +import java.text.NumberFormat; +import java.util.Locale; + + +public class CmdMoneyTransferFf extends FCommand { + + private final Locale locale = Locale.US; + private final NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance(locale); + + public CmdMoneyTransferFf() { + this.aliases.add("ff"); + + this.requiredArgs.add("amount"); + this.requiredArgs.add("cartel"); + this.requiredArgs.add("cartel"); + + //this.optionalArgs.put("", ""); + + this.permission = Permission.MONEY_F2F.node; + + senderMustBePlayer = false; + senderMustBeMember = false; + senderMustBeModerator = false; + senderMustBeAdmin = false; + } + + @Override + public void perform() { + double amount = this.argAsDouble(0, 0d); + Faction from = this.argAsFaction(1); + if (from == null || !from.isNormal()) return; + if (!from.getFPlayerAdmin().getName().equalsIgnoreCase(fme.getName())) { + sender.sendMessage(Utils.f("&cOnly Cartel Admin(s) can send money!")); + return; + } + + Faction to = this.argAsFaction(2); + if (to == null || !to.isNormal()) return; + if(amount <= 0) return; + + EcoResult result = from.takeFromStash(amount); + if(result != EcoResult.SUCCESS) return; + + result = to.addToStash(amount); + if(result != EcoResult.SUCCESS) return; + +// P.p.log(ChatColor.stripColor(P.p.txt.parse(TL.COMMAND_MONEYTRANSFERFF_TRANSFER.toString(), fme.getName(), currencyFormatter.format(amount), from.describeTo(null), to.describeTo(null)))); + from.msg(TL.COMMAND_MONEYTRANSFERFF_TRANSFER.toString(), fme.getName(), currencyFormatter.format(amount), from.describeTo(null), to.describeTo(null)); + to.msg(TL.COMMAND_MONEYTRANSFERFF_TRANSFER.toString(), fme.getName(), currencyFormatter.format(amount), from.describeTo(null), to.describeTo(null)); + } + + @Override + public TL getUsageTranslation() { + return TL.COMMAND_MONEYTRANSFERFF_DESCRIPTION; + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdMoneyTransferFp.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdMoneyTransferFp.java new file mode 100644 index 0000000..4788d2e --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdMoneyTransferFp.java @@ -0,0 +1,69 @@ +package com.massivecraft.factions.cmd; + +import com.massivecraft.factions.FPlayer; +import com.massivecraft.factions.Faction; +import com.massivecraft.factions.P; +import com.massivecraft.factions.eco.EcoResult; +import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.zcore.util.TL; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.users.ViceUser; +import org.bukkit.ChatColor; + +import java.text.NumberFormat; +import java.util.Locale; + + +public class CmdMoneyTransferFp extends FCommand { + + private final Locale locale = Locale.US; + private final NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance(locale); + + public CmdMoneyTransferFp() { + this.aliases.add("fp"); + + this.requiredArgs.add("amount"); + this.requiredArgs.add("cartel"); + this.requiredArgs.add("player"); + + //this.optionalArgs.put("", ""); + + this.permission = Permission.MONEY_F2P.node; + + senderMustBePlayer = false; + senderMustBeMember = false; + senderMustBeModerator = false; + senderMustBeAdmin = false; + } + + @Override + public void perform() { + double amount = this.argAsDouble(0, 0d); + Faction from = this.argAsFaction(1); + if (from == null) return; + if (!from.getFPlayerAdmin().getName().equalsIgnoreCase(fme.getName())) { + sender.sendMessage(Utils.f("&cOnly Cartel Admin(s) can send money!")); + return; + } + + FPlayer to = this.argAsBestFPlayerMatch(2); + if (to == null) return; + if(to.getPlayer() == null) return; + + EcoResult result = from.takeFromStash(amount); + if(result != EcoResult.SUCCESS) return; + + ViceUser user = Vice.getUserManager().getLoadedUser(to.getPlayer().getUniqueId()); + if(user == null) return; + user.addMoney(amount); + +// P.p.log(ChatColor.stripColor(P.p.txt.parse(TL.COMMAND_MONEYTRANSFERFP_TRANSFER.toString(), fme.getName(), currencyFormatter.format(amount), from.describeTo(null), to.describeTo(null)))); + msg(TL.COMMAND_MONEYTRANSFERFP_TRANSFER.toString(), fme.getName(), currencyFormatter.format(amount), from.describeTo(null), to.describeTo(null)); + } + + @Override + public TL getUsageTranslation() { + return TL.COMMAND_MONEYTRANSFERFP_DESCRIPTION; + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdMoneyTransferPf.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdMoneyTransferPf.java new file mode 100644 index 0000000..aecd484 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdMoneyTransferPf.java @@ -0,0 +1,72 @@ +package com.massivecraft.factions.cmd; + +import com.massivecraft.factions.Conf; +import com.massivecraft.factions.FPlayer; +import com.massivecraft.factions.Faction; +import com.massivecraft.factions.P; +import com.massivecraft.factions.eco.EcoResult; +import com.massivecraft.factions.iface.EconomyParticipator; +import com.massivecraft.factions.integration.Econ; +import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.zcore.util.TL; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.users.ViceUser; +import org.bukkit.ChatColor; + +import java.text.NumberFormat; +import java.util.Locale; + + +public class CmdMoneyTransferPf extends FCommand { + + private final Locale locale = Locale.US; + private final NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance(locale); + + public CmdMoneyTransferPf() { + this.aliases.add("pf"); + + this.requiredArgs.add("amount"); + this.requiredArgs.add("player"); + this.requiredArgs.add("cartel"); + + //this.optionalArgs.put("", ""); + + this.permission = Permission.MONEY_P2F.node; + + senderMustBePlayer = false; + senderMustBeMember = false; + senderMustBeModerator = false; + senderMustBeAdmin = false; + } + + @Override + public void perform() { + double amount = this.argAsDouble(0, 0d); + FPlayer from = this.argAsBestFPlayerMatch(1); + if (from == null) return; + if(from.getPlayer() == null) return; + + Faction to = this.argAsFaction(2); + if (to == null) return; + + ViceUser user = Vice.getUserManager().getLoadedUser(from.getPlayer().getUniqueId()); + if(user == null) return; + if(!user.hasMoney(amount)) { + sender.sendMessage(Utils.f("&cInsufficient funds.")); + return; + } + + if(to.addToStash(amount) != EcoResult.SUCCESS) return; + user.takeMoney(amount); + + P.p.log(ChatColor.stripColor(P.p.txt.parse(TL.COMMAND_MONEYTRANSFERPF_TRANSFER.toString(), fme.getName(), currencyFormatter.format(amount), from.describeTo(null), to.describeTo(null)))); + msg(TL.COMMAND_MONEYTRANSFERPF_TRANSFER.toString(), fme.getName(), currencyFormatter.format(amount), from.describeTo(null), to.describeTo(null)); + + } + + @Override + public TL getUsageTranslation() { + return TL.COMMAND_MONEYTRANSFERPF_DESCRIPTION; + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdMoneyWithdraw.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdMoneyWithdraw.java new file mode 100644 index 0000000..dcfa070 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdMoneyWithdraw.java @@ -0,0 +1,66 @@ +package com.massivecraft.factions.cmd; + +import com.massivecraft.factions.Conf; +import com.massivecraft.factions.Faction; +import com.massivecraft.factions.P; +import com.massivecraft.factions.eco.EcoResult; +import com.massivecraft.factions.iface.EconomyParticipator; +import com.massivecraft.factions.integration.Econ; +import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.zcore.util.TL; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.util.C; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.users.ViceUser; +import org.bukkit.ChatColor; + +import java.text.NumberFormat; +import java.util.Locale; + + +public class CmdMoneyWithdraw extends FCommand { + + private final Locale locale = Locale.US; + private final NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance(locale); + + public CmdMoneyWithdraw() { + this.aliases.add("w"); + this.aliases.add("wdraw"); + this.aliases.add("withdraw"); + + this.requiredArgs.add("amount"); + this.optionalArgs.put("cartel", "yours"); + + this.permission = Permission.MONEY_WITHDRAW.node; + + senderMustBePlayer = true; + senderMustBeMember = false; + senderMustBeModerator = false; + senderMustBeAdmin = false; + } + + @Override + public void perform() { + double amount = this.argAsDouble(0, 0d); + Faction faction = this.argAsFaction(1, myFaction); + if (faction == null || !faction.isNormal()) return; + if (!myFaction.getFPlayerAdmin().getName().equals(sender.getName())) { + sender.sendMessage(Utils.f("&cOnly Cartel Admin(s) can withdraw!")); + return; + } + + EcoResult result = myFaction.takeFromStash(amount); + if(result != EcoResult.SUCCESS) return; + + ViceUser user = Vice.getUserManager().getLoadedUser(fme.getPlayer().getUniqueId()); + user.addMoney(amount); + +// P.p.log(ChatColor.stripColor(P.p.txt.parse(TL.COMMAND_MONEYWITHDRAW_WITHDRAW.toString(), fme.getName(), currencyFormatter.format(amount), faction.describeTo(null)))); + myFaction.msg(C.GREEN + TL.COMMAND_MONEYWITHDRAW_WITHDRAW.toString(), fme.getName(), currencyFormatter.format(amount), faction.describeTo(null)); + } + + @Override + public TL getUsageTranslation() { + return TL.COMMAND_MONEYWITHDRAW_DESCRIPTION; + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdOpen.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdOpen.java new file mode 100644 index 0000000..5f6239a --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdOpen.java @@ -0,0 +1,53 @@ +package com.massivecraft.factions.cmd; + +import com.massivecraft.factions.Conf; +import com.massivecraft.factions.FPlayer; +import com.massivecraft.factions.FPlayers; +import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.zcore.util.TL; + +public class CmdOpen extends FCommand { + + public CmdOpen() { + super(); + this.aliases.add("open"); + + //this.requiredArgs.add(""); + this.optionalArgs.put("yes/no", "flip"); + + this.permission = Permission.OPEN.node; + this.disableOnLock = false; + + senderMustBePlayer = true; + senderMustBeMember = false; + senderMustBeModerator = true; + senderMustBeAdmin = false; + } + + @Override + public void perform() { + // if economy is enabled, they're not on the bypass list, and this command has a cost set, make 'em pay + if (!payForCommand(Conf.econCostOpen, TL.COMMAND_OPEN_TOOPEN, TL.COMMAND_OPEN_FOROPEN)) { + return; + } + + myFaction.setOpen(this.argAsBool(0, !myFaction.getOpen())); + + String open = myFaction.getOpen() ? TL.COMMAND_OPEN_OPEN.toString() : TL.COMMAND_OPEN_CLOSED.toString(); + + // Inform + for (FPlayer fplayer : FPlayers.getInstance().getOnlinePlayers()) { + if (fplayer.getFactionId().equals(myFaction.getId())) { + fplayer.msg(TL.COMMAND_OPEN_CHANGES, fme.getName(), open); + continue; + } + fplayer.msg(TL.COMMAND_OPEN_CHANGED, myFaction.getTag(fplayer.getFaction()), open); + } + } + + @Override + public TL getUsageTranslation() { + return TL.COMMAND_OPEN_DESCRIPTION; + } + +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdOwner.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdOwner.java new file mode 100644 index 0000000..f4710c1 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdOwner.java @@ -0,0 +1,106 @@ +package com.massivecraft.factions.cmd; + +import com.massivecraft.factions.*; +import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.struct.Role; +import com.massivecraft.factions.zcore.util.TL; + + +public class CmdOwner extends FCommand { + + public CmdOwner() { + super(); + this.aliases.add("owner"); + + //this.requiredArgs.add(""); + this.optionalArgs.put("player name", "you"); + + this.permission = Permission.OWNER.node; + this.disableOnLock = true; + + senderMustBePlayer = true; + senderMustBeMember = false; + senderMustBeModerator = false; + senderMustBeAdmin = false; + } + + // TODO: Fix colors! + + @Override + public void perform() { + boolean hasBypass = fme.isAdminBypassing(); + + if (!hasBypass && !assertHasFaction()) { + return; + } + + if (!Conf.ownedAreasEnabled) { + fme.msg(TL.COMMAND_OWNER_DISABLED); + return; + } + + if (!hasBypass && Conf.ownedAreasLimitPerFaction > 0 && myFaction.getCountOfClaimsWithOwners() >= Conf.ownedAreasLimitPerFaction) { + fme.msg(TL.COMMAND_OWNER_LIMIT, Conf.ownedAreasLimitPerFaction); + return; + } + + if (!hasBypass && !assertMinRole(Conf.ownedAreasModeratorsCanSet ? Role.MODERATOR : Role.ADMIN)) { + return; + } + + FLocation flocation = new FLocation(fme); + + Faction factionHere = Board.getInstance().getFactionAt(flocation); + if (factionHere != myFaction) { + if (!factionHere.isNormal()) { + fme.msg(TL.COMMAND_OWNER_NOTCLAIMED); + return; + } + + if (!hasBypass) { + fme.msg(TL.COMMAND_OWNER_WRONGFACTION); + return; + } + + } + + FPlayer target = this.argAsBestFPlayerMatch(0, fme); + if (target == null) { + return; + } + + String playerName = target.getName(); + + if (target.getFaction() != myFaction) { + fme.msg(TL.COMMAND_OWNER_NOTMEMBER, playerName); + return; + } + + // if no player name was passed, and this claim does already have owners set, clear them + if (args.isEmpty() && myFaction.doesLocationHaveOwnersSet(flocation)) { + myFaction.clearClaimOwnership(flocation); + fme.msg(TL.COMMAND_OWNER_CLEARED); + return; + } + + if (myFaction.isPlayerInOwnerList(target, flocation)) { + myFaction.removePlayerAsOwner(target, flocation); + fme.msg(TL.COMMAND_OWNER_REMOVED, playerName); + return; + } + + // if economy is enabled, they're not on the bypass list, and this command has a cost set, make 'em pay + if (!payForCommand(Conf.econCostOwner, TL.COMMAND_OWNER_TOSET, TL.COMMAND_OWNER_FORSET)) { + return; + } + + myFaction.setPlayerAsOwner(target, flocation); + + fme.msg(TL.COMMAND_OWNER_ADDED, playerName); + } + + @Override + public TL getUsageTranslation() { + return TL.COMMAND_OWNER_DESCRIPTION; + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdOwnerList.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdOwnerList.java new file mode 100644 index 0000000..ccf737f --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdOwnerList.java @@ -0,0 +1,70 @@ +package com.massivecraft.factions.cmd; + +import com.massivecraft.factions.Board; +import com.massivecraft.factions.Conf; +import com.massivecraft.factions.FLocation; +import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.zcore.util.TL; + + +public class CmdOwnerList extends FCommand { + + public CmdOwnerList() { + super(); + this.aliases.add("ownerlist"); + + //this.requiredArgs.add(""); + //this.optionalArgs.put("", ""); + + this.permission = Permission.OWNERLIST.node; + this.disableOnLock = false; + + senderMustBePlayer = true; + senderMustBeMember = false; + senderMustBeModerator = false; + senderMustBeAdmin = false; + } + + @Override + public void perform() { + boolean hasBypass = fme.isAdminBypassing(); + + if (!hasBypass && !assertHasFaction()) { + return; + } + + if (!Conf.ownedAreasEnabled) { + fme.msg(TL.COMMAND_OWNERLIST_DISABLED); + return; + } + + FLocation flocation = new FLocation(fme); + + if (Board.getInstance().getFactionAt(flocation) != myFaction) { + if (!hasBypass) { + fme.msg(TL.COMMAND_OWNERLIST_WRONGFACTION); + return; + } + //TODO: This code won't ever be called. + myFaction = Board.getInstance().getFactionAt(flocation); + if (!myFaction.isNormal()) { + fme.msg(TL.COMMAND_OWNERLIST_NOTCLAIMED); + return; + } + } + + String owners = myFaction.getOwnerListString(flocation); + + if (owners == null || owners.isEmpty()) { + fme.msg(TL.COMMAND_OWNERLIST_NONE); + return; + } + + fme.msg(TL.COMMAND_OWNERLIST_OWNERS, owners); + } + + @Override + public TL getUsageTranslation() { + return TL.COMMAND_OWNERLIST_DESCRIPTION; + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdPeaceful.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdPeaceful.java new file mode 100644 index 0000000..9830fcb --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdPeaceful.java @@ -0,0 +1,60 @@ +package com.massivecraft.factions.cmd; + +import com.massivecraft.factions.FPlayer; +import com.massivecraft.factions.FPlayers; +import com.massivecraft.factions.Faction; +import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.zcore.util.TL; + +public class CmdPeaceful extends FCommand { + + public CmdPeaceful() { + super(); + this.aliases.add("peaceful"); + + this.requiredArgs.add("cartel tag"); + //this.optionalArgs.put("", ""); + + this.permission = Permission.SET_PEACEFUL.node; + this.disableOnLock = true; + + senderMustBePlayer = false; + senderMustBeMember = false; + senderMustBeModerator = false; + senderMustBeAdmin = false; + } + + @Override + public void perform() { + Faction faction = this.argAsFaction(0); + if (faction == null) { + return; + } + + String change; + if (faction.isPeaceful()) { + change = TL.COMMAND_PEACEFUL_REVOKE.toString(); + faction.setPeaceful(false); + } else { + change = TL.COMMAND_PEACEFUL_GRANT.toString(); + faction.setPeaceful(true); + } + + // Inform all players + for (FPlayer fplayer : FPlayers.getInstance().getOnlinePlayers()) { + String blame = (fme == null ? TL.GENERIC_SERVERADMIN.toString() : fme.describeTo(fplayer, true)); + if (fplayer.getFaction() == faction) { + fplayer.msg(TL.COMMAND_PEACEFUL_YOURS, blame, change); + } else { + fplayer.msg(TL.COMMAND_PEACEFUL_OTHER, blame, change, faction.getTag(fplayer)); + } + } + + } + + @Override + public TL getUsageTranslation() { + return TL.COMMAND_PEACEFUL_DESCRIPTION; + } + +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdPermanent.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdPermanent.java new file mode 100644 index 0000000..dbc89da --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdPermanent.java @@ -0,0 +1,62 @@ +package com.massivecraft.factions.cmd; + +import com.massivecraft.factions.FPlayer; +import com.massivecraft.factions.FPlayers; +import com.massivecraft.factions.Faction; +import com.massivecraft.factions.P; +import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.zcore.util.TL; + + +public class CmdPermanent extends FCommand { + + public CmdPermanent() { + super(); + this.aliases.add("permanent"); + + this.requiredArgs.add("cartel tag"); + //this.optionalArgs.put("", ""); + + this.permission = Permission.SET_PERMANENT.node; + this.disableOnLock = true; + + senderMustBePlayer = false; + senderMustBeMember = false; + senderMustBeModerator = false; + senderMustBeAdmin = false; + } + + @Override + public void perform() { + Faction faction = this.argAsFaction(0); + if (faction == null) { + return; + } + + String change; + if (faction.isPermanent()) { + change = TL.COMMAND_PERMANENT_REVOKE.toString(); + faction.setPermanent(false); + } else { + change = TL.COMMAND_PERMANENT_GRANT.toString(); + faction.setPermanent(true); + } + + P.p.log((fme == null ? "A server admin" : fme.getName()) + " " + change + " the cartel \"" + faction.getTag() + "\"."); + + // Inform all players + for (FPlayer fplayer : FPlayers.getInstance().getOnlinePlayers()) { + String blame = (fme == null ? TL.GENERIC_SERVERADMIN.toString() : fme.describeTo(fplayer, true)); + if (fplayer.getFaction() == faction) { + fplayer.msg(TL.COMMAND_PERMANENT_YOURS, blame, change); + } else { + fplayer.msg(TL.COMMAND_PERMANENT_OTHER, blame, change, faction.getTag(fplayer)); + } + } + } + + @Override + public TL getUsageTranslation() { + return TL.COMMAND_PERMANENT_DESCRIPTION; + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdPermanentPower.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdPermanentPower.java new file mode 100644 index 0000000..8038826 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdPermanentPower.java @@ -0,0 +1,58 @@ +package com.massivecraft.factions.cmd; + +import com.massivecraft.factions.FPlayer; +import com.massivecraft.factions.Faction; +import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.zcore.util.TL; + +public class CmdPermanentPower extends FCommand { + public CmdPermanentPower() { + super(); + this.aliases.add("permanentpower"); + + this.requiredArgs.add("cartel"); + this.optionalArgs.put("power", "reset"); + + this.permission = Permission.SET_PERMANENTPOWER.node; + this.disableOnLock = true; + + senderMustBePlayer = false; + senderMustBeMember = false; + senderMustBeModerator = false; + senderMustBeAdmin = false; + } + + @Override + public void perform() { + Faction targetFaction = this.argAsFaction(0); + if (targetFaction == null) { + return; + } + + Integer targetPower = this.argAsInt(1); + + targetFaction.setPermanentPower(targetPower); + + String change = TL.COMMAND_PERMANENTPOWER_REVOKE.toString(); + if (targetFaction.hasPermanentPower()) { + change = TL.COMMAND_PERMANENTPOWER_GRANT.toString(); + } + + // Inform sender + msg(TL.COMMAND_PERMANENTPOWER_SUCCESS, change, targetFaction.describeTo(fme)); + + // Inform all other players + for (FPlayer fplayer : targetFaction.getFPlayersWhereOnline(true)) { + if (fplayer == fme) { + continue; + } + String blame = (fme == null ? TL.GENERIC_SERVERADMIN.toString() : fme.describeTo(fplayer, true)); + fplayer.msg(TL.COMMAND_PERMANENTPOWER_FACTION, blame, change); + } + } + + @Override + public TL getUsageTranslation() { + return TL.COMMAND_PERMANENTPOWER_DESCRIPTION; + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdPower.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdPower.java new file mode 100644 index 0000000..f8061d6 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdPower.java @@ -0,0 +1,53 @@ +package com.massivecraft.factions.cmd; + +import com.massivecraft.factions.Conf; +import com.massivecraft.factions.FPlayer; +import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.zcore.util.TL; + +public class CmdPower extends FCommand { + + public CmdPower() { + super(); + this.aliases.add("power"); + this.aliases.add("pow"); + + //this.requiredArgs.add("faction tag"); + this.optionalArgs.put("player name", "you"); + + this.permission = Permission.POWER.node; + this.disableOnLock = false; + + senderMustBePlayer = false; + senderMustBeMember = false; + senderMustBeModerator = false; + senderMustBeAdmin = false; + } + + @Override + public void perform() { + FPlayer target = this.argAsBestFPlayerMatch(0, fme); + if (target == null) { + return; + } + + if (target != fme && !Permission.POWER_ANY.has(sender, true)) { + return; + } + + // if economy is enabled, they're not on the bypass list, and this command has a cost set, make 'em pay + if (!payForCommand(Conf.econCostPower, TL.COMMAND_POWER_TOSHOW, TL.COMMAND_POWER_FORSHOW)) { + return; + } + + double powerBoost = target.getPowerBoost(); + String boost = (powerBoost == 0.0) ? "" : (powerBoost > 0.0 ? TL.COMMAND_POWER_BONUS.toString() : TL.COMMAND_POWER_PENALTY.toString()) + powerBoost + ")"; + msg(TL.COMMAND_POWER_POWER, target.describeTo(fme, true), target.getPowerRounded(), target.getPowerMaxRounded(), boost); + } + + @Override + public TL getUsageTranslation() { + return TL.COMMAND_POWER_DESCRIPTION; + } + +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdPowerBoost.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdPowerBoost.java new file mode 100644 index 0000000..8638eba --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdPowerBoost.java @@ -0,0 +1,87 @@ +package com.massivecraft.factions.cmd; + +import com.massivecraft.factions.FPlayer; +import com.massivecraft.factions.Faction; +import com.massivecraft.factions.P; +import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.zcore.util.TL; + +public class CmdPowerBoost extends FCommand { + + public CmdPowerBoost() { + super(); + this.aliases.add("powerboost"); + + this.requiredArgs.add("p|c|player|cartel"); + this.requiredArgs.add("name"); + this.requiredArgs.add("# or reset"); + + this.permission = Permission.POWERBOOST.node; + this.disableOnLock = true; + + senderMustBePlayer = false; + senderMustBeMember = false; + senderMustBeModerator = false; + senderMustBeAdmin = false; + } + + @Override + public void perform() { + String type = this.argAsString(0).toLowerCase(); + boolean doPlayer = true; + if (type.equals("c") || type.equals("cartel")) { + doPlayer = false; + } else if (!type.equals("p") && !type.equals("player")) { + msg(TL.COMMAND_POWERBOOST_HELP_1); + msg(TL.COMMAND_POWERBOOST_HELP_2); + return; + } + + Double targetPower = this.argAsDouble(2); + if (targetPower == null) { + if (this.argAsString(2).equalsIgnoreCase("reset")) { + targetPower = 0D; + } else { + msg(TL.COMMAND_POWERBOOST_INVALIDNUM); + return; + } + } + + String target; + + if (doPlayer) { + FPlayer targetPlayer = this.argAsBestFPlayerMatch(1); + if (targetPlayer == null) { + return; + } + + if (targetPower != 0) { + targetPower += targetPlayer.getPowerBoost(); + } + targetPlayer.setPowerBoost(targetPower); + target = TL.COMMAND_POWERBOOST_PLAYER.format(targetPlayer.getName()); + } else { + Faction targetFaction = this.argAsFaction(1); + if (targetFaction == null) { + return; + } + + if (targetPower != 0) { + targetPower += targetFaction.getPowerBoost(); + } + targetFaction.setPowerBoost(targetPower); + target = TL.COMMAND_POWERBOOST_FACTION.format(targetFaction.getTag()); + } + + int roundedPower = (int) Math.round(targetPower); + msg(TL.COMMAND_POWERBOOST_BOOST, target, roundedPower); + if (!senderIsConsole) { + P.p.log(TL.COMMAND_POWERBOOST_BOOSTLOG.toString(), fme.getName(), target, roundedPower); + } + } + + @Override + public TL getUsageTranslation() { + return TL.COMMAND_POWERBOOST_DESCRIPTION; + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdRelationAlly.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdRelationAlly.java new file mode 100644 index 0000000..2520994 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdRelationAlly.java @@ -0,0 +1,11 @@ +package com.massivecraft.factions.cmd; + +import com.massivecraft.factions.struct.Relation; + +public class CmdRelationAlly extends FRelationCommand { + + public CmdRelationAlly() { + aliases.add("ally"); + targetRelation = Relation.ALLY; + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdRelationEnemy.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdRelationEnemy.java new file mode 100644 index 0000000..720f0ef --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdRelationEnemy.java @@ -0,0 +1,11 @@ +package com.massivecraft.factions.cmd; + +import com.massivecraft.factions.struct.Relation; + +public class CmdRelationEnemy extends FRelationCommand { + + public CmdRelationEnemy() { + aliases.add("enemy"); + targetRelation = Relation.ENEMY; + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdRelationNeutral.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdRelationNeutral.java new file mode 100644 index 0000000..4dba5c0 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdRelationNeutral.java @@ -0,0 +1,11 @@ +package com.massivecraft.factions.cmd; + +import com.massivecraft.factions.struct.Relation; + +public class CmdRelationNeutral extends FRelationCommand { + + public CmdRelationNeutral() { + aliases.add("neutral"); + targetRelation = Relation.NEUTRAL; + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdReload.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdReload.java new file mode 100644 index 0000000..9a5198d --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdReload.java @@ -0,0 +1,41 @@ +package com.massivecraft.factions.cmd; + +import com.massivecraft.factions.Conf; +import com.massivecraft.factions.P; +import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.zcore.util.TL; + +public class CmdReload extends FCommand { + + public CmdReload() { + super(); + this.aliases.add("reload"); + + //this.requiredArgs.add(""); + this.optionalArgs.put("file", "all"); + + this.permission = Permission.RELOAD.node; + this.disableOnLock = false; + + senderMustBePlayer = false; + senderMustBeMember = false; + senderMustBeModerator = false; + senderMustBeAdmin = false; + } + + @Override + public void perform() { + long timeInitStart = System.currentTimeMillis(); + Conf.load(); + P.p.reloadConfig(); + P.p.loadLang(); + long timeReload = (System.currentTimeMillis() - timeInitStart); + + msg(TL.COMMAND_RELOAD_TIME, timeReload); + } + + @Override + public TL getUsageTranslation() { + return TL.COMMAND_RELOAD_DESCRIPTION; + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdSB.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdSB.java new file mode 100644 index 0000000..e0f18a3 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdSB.java @@ -0,0 +1,33 @@ +package com.massivecraft.factions.cmd; + +import com.massivecraft.factions.scoreboards.FScoreboard; +import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.zcore.util.TL; + +public class CmdSB extends FCommand { + + public CmdSB() { + this.aliases.add("sb"); + this.aliases.add("scoreboard"); + this.permission = Permission.SCOREBOARD.node; + this.senderMustBePlayer = true; + } + + @Override + public void perform() { + boolean toggleTo = !fme.showScoreboard(); + FScoreboard board = FScoreboard.get(fme); + if (board == null) { + me.sendMessage(TL.COMMAND_TOGGLESB_DISABLED.toString()); + } else { + me.sendMessage(TL.TOGGLE_SB.toString().replace("{value}", String.valueOf(toggleTo))); + board.setSidebarVisibility(toggleTo); + } + fme.setShowScoreboard(toggleTo); + } + + @Override + public TL getUsageTranslation() { + return TL.COMMAND_SCOREBOARD_DESCRIPTION; + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdSafeunclaimall.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdSafeunclaimall.java new file mode 100644 index 0000000..21bf11f --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdSafeunclaimall.java @@ -0,0 +1,44 @@ +package com.massivecraft.factions.cmd; + +import com.massivecraft.factions.Board; +import com.massivecraft.factions.Conf; +import com.massivecraft.factions.Factions; +import com.massivecraft.factions.P; +import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.zcore.util.TL; + +public class CmdSafeunclaimall extends FCommand { + + public CmdSafeunclaimall() { + this.aliases.add("safeunclaimall"); + this.aliases.add("safedeclaimall"); + + //this.requiredArgs.add(""); + //this.optionalArgs.put("radius", "0"); + + this.permission = Permission.MANAGE_SAFE_ZONE.node; + this.disableOnLock = true; + + senderMustBePlayer = false; + senderMustBeMember = false; + senderMustBeModerator = false; + senderMustBeAdmin = false; + + } + + @Override + public void perform() { + Board.getInstance().unclaimAll(Factions.getInstance().getSafeZone().getId()); + msg(TL.COMMAND_SAFEUNCLAIMALL_UNCLAIMED); + + if (Conf.logLandUnclaims) { + P.p.log(TL.COMMAND_SAFEUNCLAIMALL_UNCLAIMEDLOG.format(sender.getName())); + } + } + + @Override + public TL getUsageTranslation() { + return TL.COMMAND_SAFEUNCLAIMALL_DESCRIPTION; + } + +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdSaveAll.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdSaveAll.java new file mode 100644 index 0000000..2a5f568 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdSaveAll.java @@ -0,0 +1,43 @@ +package com.massivecraft.factions.cmd; + +import com.massivecraft.factions.Board; +import com.massivecraft.factions.Conf; +import com.massivecraft.factions.FPlayers; +import com.massivecraft.factions.Factions; +import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.zcore.util.TL; + +public class CmdSaveAll extends FCommand { + + public CmdSaveAll() { + super(); + this.aliases.add("saveall"); + this.aliases.add("save"); + + //this.requiredArgs.add(""); + //this.optionalArgs.put("", ""); + + this.permission = Permission.SAVE.node; + this.disableOnLock = false; + + senderMustBePlayer = false; + senderMustBeMember = false; + senderMustBeModerator = false; + senderMustBeAdmin = false; + } + + @Override + public void perform() { + FPlayers.getInstance().forceSave(false); + Factions.getInstance().forceSave(false); + Board.getInstance().forceSave(false); + Conf.save(); + msg(TL.COMMAND_SAVEALL_SUCCESS); + } + + @Override + public TL getUsageTranslation() { + return TL.COMMAND_SAVEALL_DESCRIPTION; + } + +} \ No newline at end of file diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdSeeChunk.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdSeeChunk.java new file mode 100644 index 0000000..d9284c7 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdSeeChunk.java @@ -0,0 +1,71 @@ +package com.massivecraft.factions.cmd; + +import com.massivecraft.factions.FLocation; +import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.util.VisualizeUtil; +import com.massivecraft.factions.zcore.util.TL; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.World; +import org.bukkit.entity.Player; + +public class CmdSeeChunk extends FCommand { + + public CmdSeeChunk() { + super(); + aliases.add("seechunk"); + aliases.add("sc"); + + permission = Permission.SEECHUNK.node; + + senderMustBePlayer = true; + senderMustBeMember = false; + senderMustBeModerator = false; + senderMustBeAdmin = false; + } + + @Override + public void perform() { + World world = me.getWorld(); + FLocation flocation = new FLocation(me); + int chunkX = (int) flocation.getX(); + int chunkZ = (int) flocation.getZ(); + + int blockX; + int blockZ; + + blockX = chunkX * 16; + blockZ = chunkZ * 16; + showPillar(me, world, blockX, blockZ); + + blockX = chunkX * 16 + 15; + blockZ = chunkZ * 16; + showPillar(me, world, blockX, blockZ); + + blockX = chunkX * 16; + blockZ = chunkZ * 16 + 15; + showPillar(me, world, blockX, blockZ); + + blockX = chunkX * 16 + 15; + blockZ = chunkZ * 16 + 15; + showPillar(me, world, blockX, blockZ); + } + + @SuppressWarnings("deprecation") + public static void showPillar(Player player, World world, int blockX, int blockZ) { + for (int blockY = 0; blockY < player.getLocation().getBlockY() + 30; blockY++) { + Location loc = new Location(world, blockX, blockY, blockZ); + if (loc.getBlock().getType() != Material.AIR) { + continue; + } + int typeId = blockY % 5 == 0 ? Material.REDSTONE_LAMP_ON.getId() : Material.STAINED_GLASS.getId(); + VisualizeUtil.addLocation(player, loc, typeId); + } + } + + @Override + public TL getUsageTranslation() { + return TL.GENERIC_PLACEHOLDER; + } + +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdSetFWarp.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdSetFWarp.java new file mode 100644 index 0000000..630540c --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdSetFWarp.java @@ -0,0 +1,54 @@ +package com.massivecraft.factions.cmd; + +import com.massivecraft.factions.FPlayer; +import com.massivecraft.factions.P; +import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.struct.Relation; +import com.massivecraft.factions.util.LazyLocation; +import com.massivecraft.factions.zcore.util.TL; + +public class CmdSetFWarp extends FCommand { + + public CmdSetFWarp() { + super(); + this.aliases.add("setwarp"); + this.aliases.add("sw"); + this.requiredArgs.add("warp name"); + this.senderMustBeMember = true; + this.senderMustBeModerator = true; + this.senderMustBePlayer = true; + this.permission = Permission.SETWARP.node; + } + + @Override + public void perform() { + if (!(fme.getRelationToLocation() == Relation.MEMBER)) { + fme.msg(TL.COMMAND_SETFWARP_NOTCLAIMED); + return; + } + + int maxWarps = P.p.getConfig().getInt("max-warps", 5); + if (maxWarps <= myFaction.getWarps().size()) { + fme.msg(TL.COMMAND_SETFWARP_LIMIT, maxWarps); + return; + } + + if (!transact(fme)) { + return; + } + + String warp = argAsString(0); + LazyLocation loc = new LazyLocation(fme.getPlayer().getLocation()); + myFaction.setWarp(warp, loc); + fme.msg(TL.COMMAND_SETFWARP_SET, warp); + } + + private boolean transact(FPlayer player) { + return !P.p.getConfig().getBoolean("warp-cost.enabled", false) || player.isAdminBypassing() || payForCommand(P.p.getConfig().getDouble("warp-cost.setwarp", 5), TL.COMMAND_SETFWARP_TOSET.toString(), TL.COMMAND_SETFWARP_FORSET.toString()); + } + + @Override + public TL getUsageTranslation() { + return TL.COMMAND_SETFWARP_DESCRIPTION; + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdSethome.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdSethome.java new file mode 100644 index 0000000..365fe5f --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdSethome.java @@ -0,0 +1,96 @@ +package com.massivecraft.factions.cmd; + +import com.massivecraft.factions.Board; +import com.massivecraft.factions.Conf; +import com.massivecraft.factions.FLocation; +import com.massivecraft.factions.Faction; +import com.massivecraft.factions.eco.EcoResult; +import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.struct.Role; +import com.massivecraft.factions.zcore.util.TL; +import net.grandtheftmc.core.util.NumeralUtil; + +import java.util.Locale; + +public class CmdSethome extends FCommand { + + public CmdSethome() { + this.aliases.add("sethome"); + + //this.requiredArgs.add(""); + this.optionalArgs.put("cartel tag", "mine"); + + this.permission = Permission.SETHOME.node; + this.disableOnLock = true; + + senderMustBePlayer = true; + senderMustBeMember = false; + senderMustBeModerator = false; + senderMustBeAdmin = false; + } + + @Override + public void perform() { + if (!Conf.homesEnabled) { + fme.msg(TL.COMMAND_SETHOME_DISABLED); + return; + } + + Faction faction = this.argAsFaction(0, myFaction); + if (faction == null) { + return; + } + + if (me.getWorld().getName().equals("spawn")) { + return; + } + + // Can the player set the home for this faction? + if (faction == myFaction) { + if (!Permission.SETHOME_ANY.has(sender) && !assertMinRole(Role.MODERATOR)) { + return; + } + } else { + if (!Permission.SETHOME_ANY.has(sender, true)) { + return; + } + } + + // Can the player set the faction home HERE? + if (!Permission.BYPASS.has(me) && + Conf.homesMustBeInClaimedTerritory && + Board.getInstance().getFactionAt(new FLocation(me)) != faction) { + fme.msg(TL.COMMAND_SETHOME_NOTCLAIMED); + return; + } + + // if economy is enabled, they're not on the bypass list, and this command has a cost set, make 'em pay +// if (!payForCommand(Conf.econCostSethome, TL.COMMAND_SETHOME_TOSET, TL.COMMAND_SETHOME_FORSET)) { +// return;//msg("%s can't afford %s %s.", You, moneyString(-delta), toDoThis) +// } + + if(Conf.econCostSethome > 0) { + EcoResult result = faction.takeFromStash(Conf.econCostSethome); + if(result == EcoResult.LOW_FUNDS) { + fme.msg("%s can't afford %s %s.", faction.describeTo(faction, true), NumeralUtil.toCurrency(Conf.econCostSethome, Locale.US), TL.COMMAND_SETHOME_TOSET); + return; + } + + if(result != EcoResult.SUCCESS) return; + } + + faction.setHome(me.getLocation()); + + faction.msg(TL.COMMAND_SETHOME_SET, fme.describeTo(myFaction, true)); + faction.sendMessage(p.cmdBase.cmdHome.getUseageTemplate()); + if (faction != myFaction) { + fme.msg(TL.COMMAND_SETHOME_SETOTHER, faction.getTag(fme)); + } + } + + @Override + public TL getUsageTranslation() { + return TL.COMMAND_SETHOME_DESCRIPTION; + } + +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdShow.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdShow.java new file mode 100644 index 0000000..963bf4f --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdShow.java @@ -0,0 +1,115 @@ +package com.massivecraft.factions.cmd; + +import com.massivecraft.factions.Conf; +import com.massivecraft.factions.Faction; +import com.massivecraft.factions.P; +import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.zcore.util.TL; +import com.massivecraft.factions.zcore.util.TagReplacer; +import com.massivecraft.factions.zcore.util.TagUtil; +import mkremins.fanciful.FancyMessage; + +import java.util.ArrayList; +import java.util.List; + +public class CmdShow extends FCommand { + + List defaults = new ArrayList(); + + public CmdShow() { + this.aliases.add("show"); + this.aliases.add("who"); + + // add defaults to /f show in case config doesnt have it + defaults.add("{header}"); + defaults.add("Description: {description}"); + defaults.add("Joining: {joining} {peaceful}"); + defaults.add("Land / Power / Maxpower: {chunks} / {power} / {maxPower}"); + defaults.add("Founded: {create-date}"); + defaults.add("This cartel is permanent, remaining even with no members."); + defaults.add("Land value: {land-value} {land-refund}"); + defaults.add("Stash: {stash}"); + defaults.add("Allies({allies}/{max-allies}): {allies-list}"); + defaults.add("Online: ({online}/{members}): {online-list}"); + defaults.add("Offline: ({offline}/{members}): {offline-list}"); + + // this.requiredArgs.add(""); + this.optionalArgs.put("cartel tag", "yours"); + + this.permission = Permission.SHOW.node; + this.disableOnLock = false; + + senderMustBeMember = false; + senderMustBeModerator = false; + senderMustBeAdmin = false; + } + + @Override + public void perform() { + Faction faction = myFaction; + if (this.argIsSet(0)) { + faction = this.argAsFaction(0); + } + if (faction == null) { + return; + } + + if (!fme.getPlayer().hasPermission("factions.show.bypassexempt") + && P.p.getConfig().getStringList("show-exempt").contains(faction.getTag())) { + msg(TL.COMMAND_SHOW_EXEMPT); + return; + } + + // if economy is enabled, they're not on the bypass list, and this command has a cost set, make 'em pay + if (!payForCommand(Conf.econCostShow, TL.COMMAND_SHOW_TOSHOW, TL.COMMAND_SHOW_FORSHOW)) { + return; + } + + List show = defaults; +// if (show == null || show.isEmpty()) { +// show = defaults; +// } + + if (!faction.isNormal()) { + String tag = faction.getTag(fme); + // send header and that's all + String header = show.get(0); + if (TagReplacer.HEADER.contains(header)) { + msg(p.txt.titleize(tag)); + } else { + msg(p.txt.parse(TagReplacer.FACTION.replace(header, tag))); + } + return; // we only show header for non-normal factions + } + + for (String raw : show) { + String parsed = TagUtil.parsePlain(faction, fme, raw); // use relations + if (parsed == null) { + continue; // Due to minimal f show. + } + if (TagUtil.hasFancy(parsed)) { + List fancy = TagUtil.parseFancy(faction, fme, parsed); + if (fancy != null) { + sendFancyMessage(fancy); + } + continue; + } + if (!parsed.contains("{notFrozen}") && !parsed.contains("{notPermanent}")) { + if (parsed.contains("{ig}")) { + // replaces all variables with no home TL + parsed = parsed.substring(0, parsed.indexOf("{ig}")) + TL.COMMAND_SHOW_NOHOME.toString(); + } + if (parsed.contains("%")) { + parsed = parsed.replaceAll("%", ""); // Just in case it got in there before we disallowed it. + } + msg(p.txt.parse(parsed)); + } + } + } + + @Override + public TL getUsageTranslation() { + return TL.COMMAND_SHOW_COMMANDDESCRIPTION; + } + +} \ No newline at end of file diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdShowInvites.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdShowInvites.java new file mode 100644 index 0000000..3f8ab4e --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdShowInvites.java @@ -0,0 +1,40 @@ +package com.massivecraft.factions.cmd; + +import com.massivecraft.factions.Conf; +import com.massivecraft.factions.FPlayer; +import com.massivecraft.factions.FPlayers; +import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.zcore.util.TL; +import mkremins.fanciful.FancyMessage; +import org.bukkit.ChatColor; + +public class CmdShowInvites extends FCommand { + + public CmdShowInvites() { + super(); + aliases.add("showinvites"); + permission = Permission.SHOW_INVITES.node; + + senderMustBePlayer = true; + senderMustBeMember = true; + } + + @Override + public void perform() { + FancyMessage msg = new FancyMessage(TL.COMMAND_SHOWINVITES_PENDING.toString()).color(ChatColor.GOLD); + for (String id : myFaction.getInvites()) { + FPlayer fp = FPlayers.getInstance().getById(id); + String name = fp != null ? fp.getName() : id; + msg.then(name + " ").color(ChatColor.WHITE).tooltip(TL.COMMAND_SHOWINVITES_CLICKTOREVOKE.format(name)).command("/" + Conf.baseCommandAliases.get(0) + " deinvite " + name); + } + + sendFancyMessage(msg); + } + + @Override + public TL getUsageTranslation() { + return TL.COMMAND_SHOWINVITES_DESCRIPTION; + } + + +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdStatus.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdStatus.java new file mode 100644 index 0000000..7caea96 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdStatus.java @@ -0,0 +1,43 @@ +package com.massivecraft.factions.cmd; + +import com.massivecraft.factions.FPlayer; +import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.zcore.util.TL; +import org.apache.commons.lang.time.DurationFormatUtils; +import org.bukkit.ChatColor; + +import java.util.ArrayList; + +public class CmdStatus extends FCommand { + + public CmdStatus() { + super(); + this.aliases.add("status"); + this.aliases.add("s"); + + this.permission = Permission.STATUS.node; + + senderMustBePlayer = true; + senderMustBeMember = true; + senderMustBeModerator = false; + senderMustBeAdmin = false; + } + + @Override + public void perform() { + ArrayList ret = new ArrayList(); + for (FPlayer fp : myFaction.getFPlayers()) { + String humanized = DurationFormatUtils.formatDurationWords(System.currentTimeMillis() - fp.getLastLoginTime(), true, true) + TL.COMMAND_STATUS_AGOSUFFIX; + String last = fp.isOnline() ? ChatColor.GREEN + TL.COMMAND_STATUS_ONLINE.toString() : (System.currentTimeMillis() - fp.getLastLoginTime() < 432000000 ? ChatColor.YELLOW + humanized : ChatColor.RED + humanized); + String power = ChatColor.YELLOW + String.valueOf(fp.getPowerRounded()) + " / " + String.valueOf(fp.getPowerMaxRounded()) + ChatColor.RESET; + ret.add(String.format(TL.COMMAND_STATUS_FORMAT.toString(), ChatColor.GOLD + fp.getRole().getPrefix() + fp.getName() + ChatColor.RESET, power, last).trim()); + } + fme.sendMessage(ret); + } + + @Override + public TL getUsageTranslation() { + return TL.COMMAND_STATUS_DESCRIPTION; + } + +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdStuck.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdStuck.java new file mode 100644 index 0000000..2dd4a9f --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdStuck.java @@ -0,0 +1,109 @@ +package com.massivecraft.factions.cmd; + +import com.massivecraft.factions.*; +import com.massivecraft.factions.integration.Essentials; +import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.util.SpiralTask; +import com.massivecraft.factions.zcore.util.TL; +import org.apache.commons.lang.time.DurationFormatUtils; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitRunnable; + +public class CmdStuck extends FCommand { + + public CmdStuck() { + super(); + + this.aliases.add("stuck"); + this.aliases.add("halp!"); // halp! c: + + this.permission = Permission.STUCK.node; + this.disableOnLock = true; + + senderMustBePlayer = false; + senderMustBeMember = false; + senderMustBeModerator = false; + senderMustBeAdmin = false; + } + + @Override + public void perform() { + final Player player = fme.getPlayer(); + final Location sentAt = player.getLocation(); + final FLocation chunk = fme.getLastStoodAt(); + final long delay = P.p.getConfig().getLong("hcf.stuck.delay", 30); + final int radius = P.p.getConfig().getInt("hcf.stuck.radius", 10); + + if (P.p.getStuckMap().containsKey(player.getUniqueId())) { + long wait = P.p.getTimers().get(player.getUniqueId()) - System.currentTimeMillis(); + String time = DurationFormatUtils.formatDuration(wait, TL.COMMAND_STUCK_TIMEFORMAT.toString(), true); + msg(TL.COMMAND_STUCK_EXISTS, time); + } else { + + // if economy is enabled, they're not on the bypass list, and this command has a cost set, make 'em pay + if (!payForCommand(Conf.econCostStuck, TL.COMMAND_STUCK_TOSTUCK.format(fme.getName()), TL.COMMAND_STUCK_FORSTUCK.format(fme.getName()))) { + return; + } + + final int id = Bukkit.getScheduler().runTaskLater(P.p, new BukkitRunnable() { + + @Override + public void run() { + if (!P.p.getStuckMap().containsKey(player.getUniqueId())) { + return; + } + + // check for world difference or radius exceeding + final World world = chunk.getWorld(); + if (world.getUID() != player.getWorld().getUID() || sentAt.distance(player.getLocation()) > radius) { + msg(TL.COMMAND_STUCK_OUTSIDE.format(radius)); + P.p.getTimers().remove(player.getUniqueId()); + P.p.getStuckMap().remove(player.getUniqueId()); + return; + } + + final Board board = Board.getInstance(); + // spiral task to find nearest wilderness chunk + new SpiralTask(new FLocation(me), radius * 2) { + + @Override + public boolean work() { + FLocation chunk = currentFLocation(); + Faction faction = board.getFactionAt(chunk); + if (faction.isWilderness()) { + int cx = FLocation.chunkToBlock((int) chunk.getX()); + int cz = FLocation.chunkToBlock((int) chunk.getZ()); + int y = world.getHighestBlockYAt(cx, cz); + Location tp = new Location(world, cx, y, cz); + msg(TL.COMMAND_STUCK_TELEPORT, tp.getBlockX(), tp.getBlockY(), tp.getBlockZ()); + P.p.getTimers().remove(player.getUniqueId()); + P.p.getStuckMap().remove(player.getUniqueId()); + if (!Essentials.handleTeleport(player, tp)) { + player.teleport(tp); + P.p.debug("/c stuck used regular teleport, not essentials!"); + } + this.stop(); + return false; + } + return true; + } + }; + } + }, delay * 20).getTaskId(); + + P.p.getTimers().put(player.getUniqueId(), System.currentTimeMillis() + (delay * 1000)); + long wait = P.p.getTimers().get(player.getUniqueId()) - System.currentTimeMillis(); + String time = DurationFormatUtils.formatDuration(wait, TL.COMMAND_STUCK_TIMEFORMAT.toString(), true); + msg(TL.COMMAND_STUCK_START, time); + P.p.getStuckMap().put(player.getUniqueId(), id); + } + } + + @Override + public TL getUsageTranslation() { + return TL.COMMAND_STUCK_DESCRIPTION; + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdTag.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdTag.java new file mode 100644 index 0000000..eac25bb --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdTag.java @@ -0,0 +1,112 @@ +package com.massivecraft.factions.cmd; + +import com.massivecraft.factions.*; +import com.massivecraft.factions.eco.EcoResult; +import com.massivecraft.factions.event.FactionRenameEvent; +import com.massivecraft.factions.scoreboards.FTeamWrapper; +import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.util.MiscUtil; +import com.massivecraft.factions.zcore.util.TL; +import net.grandtheftmc.core.util.NumeralUtil; +import org.bukkit.Bukkit; + +import java.util.ArrayList; +import java.util.Locale; + +public class CmdTag extends FCommand { + + public CmdTag() { + this.aliases.add("tag"); + this.aliases.add("rename"); + + this.requiredArgs.add("cartel tag"); + //this.optionalArgs.put("", ""); + + this.permission = Permission.TAG.node; + this.disableOnLock = true; + + senderMustBePlayer = true; + senderMustBeMember = false; + senderMustBeModerator = true; + senderMustBeAdmin = false; + } + + @Override + public void perform() { + String tag = this.argAsString(0); + + // TODO does not first test cover selfcase? + if (Factions.getInstance().isTagTaken(tag) && !MiscUtil.getComparisonString(tag).equals(myFaction.getComparisonTag())) { + msg(TL.COMMAND_TAG_TAKEN); + System.out.println("1"); + return; + } + + ArrayList errors = MiscUtil.validateTag(tag); + if (errors.size() > 0) { + sendMessage(errors); + System.out.println("2"); + return; + } + + // if economy is enabled, they're not on the bypass list, and this command has a cost set, make sure they can pay +// if (!canAffordCommand(Conf.econCostTag, TL.COMMAND_TAG_TOCHANGE.toString())) { +// return; +// } + + if(Conf.econCostTag > 0) { + EcoResult result = myFaction.takeFromStash(Conf.econCostTag); + if(result == EcoResult.LOW_FUNDS) { + fme.msg("%s can't afford %s %s.", myFaction.describeTo(myFaction, true), NumeralUtil.toCurrency(Conf.econCostTag, Locale.US), TL.COMMAND_TAG_TOCHANGE); + System.out.println("3"); + return; + } + + if(result != EcoResult.SUCCESS) { + System.out.println("4"); + return; + } + } + + // trigger the faction rename event (cancellable) + FactionRenameEvent renameEvent = new FactionRenameEvent(fme, tag); + Bukkit.getServer().getPluginManager().callEvent(renameEvent); + if (renameEvent.isCancelled()) { + System.out.println("5"); + return; + } + + // then make 'em pay (if applicable) + if (!payForCommand(Conf.econCostTag, TL.COMMAND_TAG_TOCHANGE, TL.COMMAND_TAG_FORCHANGE)) { + System.out.println("6"); + return; + } + + String oldtag = myFaction.getTag(); + myFaction.setTag(tag); + System.out.println("7"); + + // Inform + for (FPlayer fplayer : FPlayers.getInstance().getOnlinePlayers()) { + if (fplayer.getFactionId().equals(myFaction.getId())) { + fplayer.msg(TL.COMMAND_TAG_FACTION, fme.describeTo(myFaction, true), myFaction.getTag(myFaction)); + continue; + } + + // Broadcast the tag change (if applicable) + if (Conf.broadcastTagChanges) { + Faction faction = fplayer.getFaction(); + fplayer.msg(TL.COMMAND_TAG_CHANGED, fme.getColorTo(faction) + oldtag, myFaction.getTag(faction)); + } + } + + FTeamWrapper.updatePrefixes(myFaction); + System.out.println("8"); + } + + @Override + public TL getUsageTranslation() { + return TL.COMMAND_TAG_DESCRIPTION; + } + +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdTitle.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdTitle.java new file mode 100644 index 0000000..02b8da6 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdTitle.java @@ -0,0 +1,56 @@ +package com.massivecraft.factions.cmd; + +import com.massivecraft.factions.Conf; +import com.massivecraft.factions.FPlayer; +import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.zcore.util.TL; +import com.massivecraft.factions.zcore.util.TextUtil; + +public class CmdTitle extends FCommand { + + public CmdTitle() { + this.aliases.add("title"); + + this.requiredArgs.add("player name"); + this.optionalArgs.put("title", ""); + + this.permission = Permission.TITLE.node; + this.disableOnLock = true; + + senderMustBePlayer = true; + senderMustBeMember = false; + senderMustBeModerator = true; + senderMustBeAdmin = false; + } + + @Override + public void perform() { + FPlayer you = this.argAsBestFPlayerMatch(0); + if (you == null) { + return; + } + + args.remove(0); + String title = TextUtil.implode(args, " "); + + if (!canIAdministerYou(fme, you)) { + return; + } + + // if economy is enabled, they're not on the bypass list, and this command has a cost set, make 'em pay + if (!payForCommand(Conf.econCostTitle, TL.COMMAND_TITLE_TOCHANGE, TL.COMMAND_TITLE_FORCHANGE)) { + return; + } + + you.setTitle(title); + + // Inform + myFaction.msg(TL.COMMAND_TITLE_CHANGED, fme.describeTo(myFaction, true), you.describeTo(myFaction, true)); + } + + @Override + public TL getUsageTranslation() { + return TL.COMMAND_TITLE_DESCRIPTION; + } + +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdToggleAllianceChat.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdToggleAllianceChat.java new file mode 100644 index 0000000..5bea5ac --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdToggleAllianceChat.java @@ -0,0 +1,43 @@ +package com.massivecraft.factions.cmd; + +import com.massivecraft.factions.Conf; +import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.zcore.util.TL; + +public class CmdToggleAllianceChat extends FCommand { + + public CmdToggleAllianceChat() { + super(); + this.aliases.add("tac"); + this.aliases.add("togglealliancechat"); + this.aliases.add("ac"); + + this.disableOnLock = false; + + this.permission = Permission.TOGGLE_ALLIANCE_CHAT.node; + this.disableOnLock = false; + + senderMustBePlayer = true; + senderMustBeMember = true; + senderMustBeModerator = false; + senderMustBeAdmin = false; + } + + @Override + public TL getUsageTranslation() { + return TL.COMMAND_TOGGLEALLIANCECHAT_DESCRIPTION; + } + + @Override + public void perform() { + if (!Conf.factionOnlyChat) { + msg(TL.COMMAND_CHAT_DISABLED.toString()); + return; + } + + boolean ignoring = fme.isIgnoreAllianceChat(); + + msg(ignoring ? TL.COMMAND_TOGGLEALLIANCECHAT_UNIGNORE : TL.COMMAND_TOGGLEALLIANCECHAT_IGNORE); + fme.setIgnoreAllianceChat(!ignoring); + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdTop.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdTop.java new file mode 100644 index 0000000..972648d --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdTop.java @@ -0,0 +1,49 @@ +package com.massivecraft.factions.cmd; + +import com.massivecraft.factions.*; +import com.massivecraft.factions.integration.Econ; +import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.zcore.MPlugin; +import com.massivecraft.factions.zcore.util.TL; +import net.grandtheftmc.core.menus.MenuManager; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.scheduler.BukkitRunnable; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.LinkedList; + +public class CmdTop extends FCommand { + + public CmdTop() { + super(); + this.aliases.add("top"); + this.aliases.add("t"); + + this.permission = Permission.TOP.node; + this.disableOnLock = false; + + senderMustBePlayer = true; + senderMustBeMember = false; + senderMustBeModerator = false; + senderMustBeAdmin = false; + } + + @Override + public void perform() { + MenuManager.openMenu(fme.getPlayer(), "carteltop"); + } + + + @Override + public TL getUsageTranslation() { + return TL.COMMAND_TOP_DESCRIPTION; + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdUnclaim.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdUnclaim.java new file mode 100644 index 0000000..dd68471 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdUnclaim.java @@ -0,0 +1,169 @@ +package com.massivecraft.factions.cmd; + +import com.massivecraft.factions.*; +import com.massivecraft.factions.event.LandUnclaimEvent; +import com.massivecraft.factions.integration.Econ; +import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.struct.Role; +import com.massivecraft.factions.util.SpiralTask; +import com.massivecraft.factions.zcore.util.TL; +import org.bukkit.Bukkit; + +public class CmdUnclaim extends FCommand { + + public CmdUnclaim() { + this.aliases.add("unclaim"); + this.aliases.add("declaim"); + + this.optionalArgs.put("radius", "1"); + this.optionalArgs.put("cartel", "your"); + + this.permission = Permission.UNCLAIM.node; + this.disableOnLock = true; + + senderMustBePlayer = true; + senderMustBeMember = false; + senderMustBeModerator = false; + senderMustBeAdmin = false; + } + + @Override + public void perform() { + // Read and validate input + int radius = this.argAsInt(0, 1); // Default to 1 + final Faction forFaction = this.argAsFaction(1, myFaction); // Default to own + + if (radius < 1) { + msg(TL.COMMAND_CLAIM_INVALIDRADIUS); + return; + } + + if (radius < 2) { + // single chunk + unClaim(new FLocation(me)); + } else { + // radius claim + if (!Permission.CLAIM_RADIUS.has(sender, false)) { + msg(TL.COMMAND_CLAIM_DENIED); + return; + } + + new SpiralTask(new FLocation(me), radius) { + private int failCount = 0; + private final int limit = Conf.radiusClaimFailureLimit - 1; + + @Override + public boolean work() { + boolean success = unClaim(this.currentFLocation()); + if (success) { + failCount = 0; + } else if (failCount++ >= limit) { + this.stop(); + return false; + } + + return true; + } + }; + } + } + + private boolean unClaim(FLocation target) { + Faction targetFaction = Board.getInstance().getFactionAt(target); + if (targetFaction.isSafeZone()) { + if (Permission.MANAGE_SAFE_ZONE.has(sender)) { + Board.getInstance().removeAt(target); + msg(TL.COMMAND_UNCLAIM_SAFEZONE_SUCCESS); + + if (Conf.logLandUnclaims) { + P.p.log(TL.COMMAND_UNCLAIM_LOG.format(fme.getName(), target.getCoordString(), targetFaction.getTag())); + } + return true; + } else { + msg(TL.COMMAND_UNCLAIM_SAFEZONE_NOPERM); + return false; + } + } else if (targetFaction.isWarZone()) { + if (Permission.MANAGE_WAR_ZONE.has(sender)) { + Board.getInstance().removeAt(target); + msg(TL.COMMAND_UNCLAIM_WARZONE_SUCCESS); + + if (Conf.logLandUnclaims) { + P.p.log(TL.COMMAND_UNCLAIM_LOG.format(fme.getName(), target.getCoordString(), targetFaction.getTag())); + } + return true; + } else { + msg(TL.COMMAND_UNCLAIM_WARZONE_NOPERM); + return false; + } + } + + if (fme.isAdminBypassing()) { + LandUnclaimEvent unclaimEvent = new LandUnclaimEvent(target, targetFaction, fme); + Bukkit.getServer().getPluginManager().callEvent(unclaimEvent); + if (unclaimEvent.isCancelled()) { + return false; + } + + Board.getInstance().removeAt(target); + + targetFaction.msg(TL.COMMAND_UNCLAIM_UNCLAIMED, fme.describeTo(targetFaction, true)); + msg(TL.COMMAND_UNCLAIM_UNCLAIMS); + + if (Conf.logLandUnclaims) { + P.p.log(TL.COMMAND_UNCLAIM_LOG.format(fme.getName(), target.getCoordString(), targetFaction.getTag())); + } + + return true; + } + + if (!assertHasFaction()) { + return false; + } + + if (!assertMinRole(Role.MODERATOR)) { + return false; + } + + + if (myFaction != targetFaction) { + msg(TL.COMMAND_UNCLAIM_WRONGFACTION); + return false; + } + + LandUnclaimEvent unclaimEvent = new LandUnclaimEvent(target, targetFaction, fme); + Bukkit.getServer().getPluginManager().callEvent(unclaimEvent); + if (unclaimEvent.isCancelled()) { + return false; + } + + if (Econ.shouldBeUsed()) { + double refund = Econ.calculateClaimRefund(myFaction.getLandRounded()); + + if (Conf.bankEnabled && Conf.bankFactionPaysLandCosts) { + if (!Econ.modifyMoney(myFaction, refund, TL.COMMAND_UNCLAIM_TOUNCLAIM.toString(), TL.COMMAND_UNCLAIM_FORUNCLAIM.toString())) { + return false; + } + } else { + if (!Econ.modifyMoney(fme, refund, TL.COMMAND_UNCLAIM_TOUNCLAIM.toString(), TL.COMMAND_UNCLAIM_FORUNCLAIM.toString())) { + return false; + } + } + } + + Board.getInstance().removeAt(target); + myFaction.msg(TL.COMMAND_UNCLAIM_FACTIONUNCLAIMED, fme.describeTo(myFaction, true)); + + if (Conf.logLandUnclaims) { + P.p.log(TL.COMMAND_UNCLAIM_LOG.format(fme.getName(), target.getCoordString(), targetFaction.getTag())); + } + + return true; + } + + @Override + public TL getUsageTranslation() { + return TL.COMMAND_UNCLAIM_DESCRIPTION; + } + +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdUnclaimall.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdUnclaimall.java new file mode 100644 index 0000000..c8e2b68 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdUnclaimall.java @@ -0,0 +1,64 @@ +package com.massivecraft.factions.cmd; + +import com.massivecraft.factions.Board; +import com.massivecraft.factions.Conf; +import com.massivecraft.factions.P; +import com.massivecraft.factions.event.LandUnclaimAllEvent; +import com.massivecraft.factions.integration.Econ; +import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.zcore.util.TL; +import org.bukkit.Bukkit; + +public class CmdUnclaimall extends FCommand { + + public CmdUnclaimall() { + this.aliases.add("unclaimall"); + this.aliases.add("declaimall"); + + //this.requiredArgs.add(""); + //this.optionalArgs.put("", ""); + + this.permission = Permission.UNCLAIM_ALL.node; + this.disableOnLock = true; + + senderMustBePlayer = true; + senderMustBeMember = false; + senderMustBeModerator = true; + senderMustBeAdmin = false; + } + + @Override + public void perform() { + if (Econ.shouldBeUsed()) { + double refund = Econ.calculateTotalLandRefund(myFaction.getLandRounded()); + if (Conf.bankEnabled && Conf.bankFactionPaysLandCosts) { + if (!Econ.modifyMoney(myFaction, refund, TL.COMMAND_UNCLAIMALL_TOUNCLAIM.toString(), TL.COMMAND_UNCLAIMALL_FORUNCLAIM.toString())) { + return; + } + } else { + if (!Econ.modifyMoney(fme, refund, TL.COMMAND_UNCLAIMALL_TOUNCLAIM.toString(), TL.COMMAND_UNCLAIMALL_FORUNCLAIM.toString())) { + return; + } + } + } + + LandUnclaimAllEvent unclaimAllEvent = new LandUnclaimAllEvent(myFaction, fme); + Bukkit.getServer().getPluginManager().callEvent(unclaimAllEvent); + if (unclaimAllEvent.isCancelled()) { + return; + } + + Board.getInstance().unclaimAll(myFaction.getId()); + myFaction.msg(TL.COMMAND_UNCLAIMALL_UNCLAIMED, fme.describeTo(myFaction, true)); + + if (Conf.logLandUnclaims) { + P.p.log(TL.COMMAND_UNCLAIMALL_LOG.format(fme.getName(), myFaction.getTag())); + } + } + + @Override + public TL getUsageTranslation() { + return TL.COMMAND_UNCLAIMALL_DESCRIPTION; + } + +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdVersion.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdVersion.java new file mode 100644 index 0000000..84b2362 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdVersion.java @@ -0,0 +1,35 @@ +package com.massivecraft.factions.cmd; + +import com.massivecraft.factions.P; +import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.zcore.util.TL; + + +public class CmdVersion extends FCommand { + + public CmdVersion() { + this.aliases.add("version"); + this.aliases.add("ver"); + + //this.requiredArgs.add(""); + //this.optionalArgs.put("", ""); + + this.permission = Permission.VERSION.node; + this.disableOnLock = false; + + senderMustBePlayer = false; + senderMustBeMember = false; + senderMustBeModerator = false; + senderMustBeAdmin = false; + } + + @Override + public void perform() { + msg(TL.COMMAND_VERSION_VERSION, P.p.getDescription().getFullName()); + } + + @Override + public TL getUsageTranslation() { + return TL.COMMAND_VERSION_DESCRIPTION; + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdWarunclaimall.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdWarunclaimall.java new file mode 100644 index 0000000..f85c84f --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/CmdWarunclaimall.java @@ -0,0 +1,43 @@ +package com.massivecraft.factions.cmd; + +import com.massivecraft.factions.Board; +import com.massivecraft.factions.Conf; +import com.massivecraft.factions.Factions; +import com.massivecraft.factions.P; +import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.zcore.util.TL; + +public class CmdWarunclaimall extends FCommand { + + public CmdWarunclaimall() { + this.aliases.add("warunclaimall"); + this.aliases.add("wardeclaimall"); + + //this.requiredArgs.add(""); + //this.optionalArgs.put("", ""); + + this.permission = Permission.MANAGE_WAR_ZONE.node; + this.disableOnLock = true; + + senderMustBePlayer = false; + senderMustBeMember = false; + senderMustBeModerator = false; + senderMustBeAdmin = false; + } + + @Override + public void perform() { + Board.getInstance().unclaimAll(Factions.getInstance().getWarZone().getId()); + msg(TL.COMMAND_WARUNCLAIMALL_SUCCESS); + + if (Conf.logLandUnclaims) { + P.p.log(TL.COMMAND_WARUNCLAIMALL_LOG.format(fme.getName())); + } + } + + @Override + public TL getUsageTranslation() { + return TL.COMMAND_WARUNCLAIMALL_DESCRIPTION; + } + +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/FCmdRoot.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/FCmdRoot.java new file mode 100644 index 0000000..53f43e8 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/FCmdRoot.java @@ -0,0 +1,167 @@ +package com.massivecraft.factions.cmd; + +import com.massivecraft.factions.Conf; +import com.massivecraft.factions.zcore.util.TL; + +import java.util.Collections; + +public class FCmdRoot extends FCommand { + + public CmdAdmin cmdAdmin = new CmdAdmin(); + public CmdAutoClaim cmdAutoClaim = new CmdAutoClaim(); + public CmdBoom cmdBoom = new CmdBoom(); + public CmdBypass cmdBypass = new CmdBypass(); + public CmdChat cmdChat = new CmdChat(); + public CmdChatSpy cmdChatSpy = new CmdChatSpy(); + public CmdClaim cmdClaim = new CmdClaim(); + public CmdConfig cmdConfig = new CmdConfig(); + public CmdCreate cmdCreate = new CmdCreate(); + public CmdDeinvite cmdDeinvite = new CmdDeinvite(); + public CmdDescription cmdDescription = new CmdDescription(); + public CmdDisband cmdDisband = new CmdDisband(); + public CmdHelp cmdHelp = new CmdHelp(); + public CmdHome cmdHome = new CmdHome(); + public CmdInvite cmdInvite = new CmdInvite(); + public CmdJoin cmdJoin = new CmdJoin(); + public CmdKick cmdKick = new CmdKick(); + public CmdLeave cmdLeave = new CmdLeave(); + public CmdList cmdList = new CmdList(); + public CmdLock cmdLock = new CmdLock(); + public CmdMap cmdMap = new CmdMap(); + public CmdMod cmdMod = new CmdMod(); + public CmdMoney cmdMoney = new CmdMoney(); + public CmdOpen cmdOpen = new CmdOpen(); + public CmdOwner cmdOwner = new CmdOwner(); + public CmdOwnerList cmdOwnerList = new CmdOwnerList(); + public CmdPeaceful cmdPeaceful = new CmdPeaceful(); + public CmdPermanent cmdPermanent = new CmdPermanent(); + public CmdPermanentPower cmdPermanentPower = new CmdPermanentPower(); + public CmdPowerBoost cmdPowerBoost = new CmdPowerBoost(); + public CmdPower cmdPower = new CmdPower(); + public CmdRelationAlly cmdRelationAlly = new CmdRelationAlly(); + public CmdRelationEnemy cmdRelationEnemy = new CmdRelationEnemy(); + public CmdRelationNeutral cmdRelationNeutral = new CmdRelationNeutral(); + public CmdReload cmdReload = new CmdReload(); + public CmdSafeunclaimall cmdSafeunclaimall = new CmdSafeunclaimall(); + public CmdSaveAll cmdSaveAll = new CmdSaveAll(); + public CmdSethome cmdSethome = new CmdSethome(); + public CmdShow cmdShow = new CmdShow(); + public CmdStatus cmdStatus = new CmdStatus(); + public CmdStuck cmdStuck = new CmdStuck(); + public CmdTag cmdTag = new CmdTag(); + public CmdTitle cmdTitle = new CmdTitle(); + public CmdToggleAllianceChat cmdToggleAllianceChat = new CmdToggleAllianceChat(); + public CmdUnclaim cmdUnclaim = new CmdUnclaim(); + public CmdUnclaimall cmdUnclaimall = new CmdUnclaimall(); + public CmdVersion cmdVersion = new CmdVersion(); + public CmdWarunclaimall cmdWarunclaimall = new CmdWarunclaimall(); + public CmdSB cmdSB = new CmdSB(); + public CmdShowInvites cmdShowInvites = new CmdShowInvites(); + public CmdAnnounce cmdAnnounce = new CmdAnnounce(); + public CmdSeeChunk cmdSeeChunk = new CmdSeeChunk(); + public CmdConvert cmdConvert = new CmdConvert(); + public CmdFWarp cmdFWarp = new CmdFWarp(); + public CmdSetFWarp cmdSetFWarp = new CmdSetFWarp(); + public CmdDelFWarp cmdDelFWarp = new CmdDelFWarp(); + public CmdModifyPower cmdModifyPower = new CmdModifyPower(); + public CmdLogins cmdLogins = new CmdLogins(); + public CmdClaimLine cmdClaimLine = new CmdClaimLine(); + public CmdTop cmdTop = new CmdTop(); + public CmdAHome cmdAHome = new CmdAHome(); + + public FCmdRoot() { + super(); + this.aliases.addAll(Conf.baseCommandAliases); + this.aliases.removeAll(Collections.singletonList(null)); // remove any nulls from extra commas + this.allowNoSlashAccess = Conf.allowNoSlashCommand; + + //this.requiredArgs.add(""); + //this.optionalArgs.put("","") + + senderMustBePlayer = false; + senderMustBeMember = false; + senderMustBeModerator = false; + senderMustBeAdmin = false; + + this.disableOnLock = false; + + this.setHelpShort("The cartel base command"); + this.helpLong.add(p.txt.parseTags("This command contains all cartel stuff.")); + +// this.subCommands.add(p.cmdHelp); + + this.addSubCommand(this.cmdAdmin); + this.addSubCommand(this.cmdAutoClaim); + this.addSubCommand(this.cmdBoom); + this.addSubCommand(this.cmdBypass); + this.addSubCommand(this.cmdChat); + this.addSubCommand(this.cmdToggleAllianceChat); + this.addSubCommand(this.cmdChatSpy); + this.addSubCommand(this.cmdClaim); + this.addSubCommand(this.cmdConfig); + this.addSubCommand(this.cmdCreate); + this.addSubCommand(this.cmdDeinvite); + this.addSubCommand(this.cmdDescription); + this.addSubCommand(this.cmdDisband); + this.addSubCommand(this.cmdHelp); + this.addSubCommand(this.cmdHome); + this.addSubCommand(this.cmdInvite); + this.addSubCommand(this.cmdJoin); + this.addSubCommand(this.cmdKick); + this.addSubCommand(this.cmdLeave); + this.addSubCommand(this.cmdList); + this.addSubCommand(this.cmdLock); + this.addSubCommand(this.cmdMap); + this.addSubCommand(this.cmdMod); + this.addSubCommand(this.cmdMoney); + this.addSubCommand(this.cmdOpen); + this.addSubCommand(this.cmdOwner); + this.addSubCommand(this.cmdOwnerList); + this.addSubCommand(this.cmdPeaceful); + this.addSubCommand(this.cmdPermanent); + this.addSubCommand(this.cmdPermanentPower); + this.addSubCommand(this.cmdPower); + this.addSubCommand(this.cmdPowerBoost); + this.addSubCommand(this.cmdRelationAlly); + this.addSubCommand(this.cmdRelationEnemy); + this.addSubCommand(this.cmdRelationNeutral); + this.addSubCommand(this.cmdReload); + this.addSubCommand(this.cmdSafeunclaimall); + this.addSubCommand(this.cmdSaveAll); + this.addSubCommand(this.cmdSethome); + this.addSubCommand(this.cmdShow); + this.addSubCommand(this.cmdStatus); + this.addSubCommand(this.cmdStuck); + this.addSubCommand(this.cmdTag); + this.addSubCommand(this.cmdTitle); + this.addSubCommand(this.cmdUnclaim); + this.addSubCommand(this.cmdUnclaimall); + this.addSubCommand(this.cmdVersion); + this.addSubCommand(this.cmdWarunclaimall); + this.addSubCommand(this.cmdSB); + this.addSubCommand(this.cmdShowInvites); + this.addSubCommand(this.cmdAnnounce); + this.addSubCommand(this.cmdSeeChunk); + this.addSubCommand(this.cmdConvert); + this.addSubCommand(this.cmdFWarp); + this.addSubCommand(this.cmdSetFWarp); + this.addSubCommand(this.cmdDelFWarp); + this.addSubCommand(this.cmdModifyPower); + this.addSubCommand(this.cmdLogins); + this.addSubCommand(this.cmdClaimLine); + this.addSubCommand(this.cmdTop); + this.addSubCommand(this.cmdAHome); + } + + @Override + public void perform() { + this.commandChain.add(this); + this.cmdHelp.execute(this.sender, this.args, this.commandChain); + } + + @Override + public TL getUsageTranslation() { + return TL.GENERIC_PLACEHOLDER; + } + +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/FCommand.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/FCommand.java new file mode 100644 index 0000000..1715585 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/FCommand.java @@ -0,0 +1,312 @@ +package com.massivecraft.factions.cmd; + +import com.massivecraft.factions.*; +import com.massivecraft.factions.integration.Econ; +import com.massivecraft.factions.struct.Role; +import com.massivecraft.factions.util.WarmUpUtil; +import com.massivecraft.factions.zcore.MCommand; +import com.massivecraft.factions.zcore.util.TL; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.text.SimpleDateFormat; +import java.util.List; + + +public abstract class FCommand extends MCommand

{ + + public SimpleDateFormat sdf = new SimpleDateFormat(TL.DATE_FORMAT.toString()); + + public boolean disableOnLock; + + public FPlayer fme; + public Faction myFaction; + public boolean senderMustBeMember; + public boolean senderMustBeModerator; + public boolean senderMustBeAdmin; + + public boolean isMoneyCommand; + + public FCommand() { + super(P.p); + + // Due to safety reasons it defaults to disable on lock. + disableOnLock = true; + + // The money commands must be disabled if money should not be used. + isMoneyCommand = false; + + senderMustBeMember = false; + senderMustBeModerator = false; + senderMustBeAdmin = false; + } + + @Override + public void execute(CommandSender sender, List args, List> commandChain) { + if (sender instanceof Player) { + this.fme = FPlayers.getInstance().getByPlayer((Player) sender); + this.myFaction = this.fme.getFaction(); + } else { + this.fme = null; + this.myFaction = null; + } + super.execute(sender, args, commandChain); + } + + @Override + public boolean isEnabled() { + if (p.getLocked() && this.disableOnLock) { + msg("Cartels was locked by an admin. Please try again later."); + return false; + } + + if (this.isMoneyCommand && !Conf.econEnabled) { + msg("Cartels economy features are disabled on this server."); + return false; + } + + if (this.isMoneyCommand && !Conf.bankEnabled) { + msg("The cartel bank system is disabled on this server."); + return false; + } + + return true; + } + + @Override + public boolean validSenderType(CommandSender sender, boolean informSenderIfNot) { + boolean superValid = super.validSenderType(sender, informSenderIfNot); + if (!superValid) { + return false; + } + + if (!(this.senderMustBeMember || this.senderMustBeModerator || this.senderMustBeAdmin)) { + return true; + } + + if (!(sender instanceof Player)) { + return false; + } + + if (!fme.hasFaction()) { + sender.sendMessage(p.txt.parse("You are not member of any cartel.")); + return false; + } + + if (this.senderMustBeModerator && !fme.getRole().isAtLeast(Role.MODERATOR)) { + sender.sendMessage(p.txt.parse("Only cartel underbosses can %s.", this.getHelpShort())); + return false; + } + + if (this.senderMustBeAdmin && !fme.getRole().isAtLeast(Role.ADMIN)) { + sender.sendMessage(p.txt.parse("Only cartel bosses can %s.", this.getHelpShort())); + return false; + } + + return true; + } + + // -------------------------------------------- // + // Assertions + // -------------------------------------------- // + + public boolean assertHasFaction() { + if (me == null) { + return true; + } + + if (!fme.hasFaction()) { + sendMessage("You are not member of any cartel."); + return false; + } + return true; + } + + public boolean assertMinRole(Role role) { + if (me == null) { + return true; + } + + if (fme.getRole().value < role.value) { + msg("You must be " + role + " to " + this.getHelpShort() + "."); + return false; + } + return true; + } + + // -------------------------------------------- // + // Argument Readers + // -------------------------------------------- // + + // FPLAYER ====================== + public FPlayer strAsFPlayer(String name, FPlayer def, boolean msg) { + FPlayer ret = def; + + if (name != null) { + for (FPlayer fplayer : FPlayers.getInstance().getAllFPlayers()) { + if (fplayer.getName().equalsIgnoreCase(name)) { + ret = fplayer; + break; + } + } + } + + if (msg && ret == null) { + this.msg("No player \"

%s\" could be found.", name); + } + + return ret; + } + + public FPlayer argAsFPlayer(int idx, FPlayer def, boolean msg) { + return this.strAsFPlayer(this.argAsString(idx), def, msg); + } + + public FPlayer argAsFPlayer(int idx, FPlayer def) { + return this.argAsFPlayer(idx, def, true); + } + + public FPlayer argAsFPlayer(int idx) { + return this.argAsFPlayer(idx, null); + } + + // BEST FPLAYER MATCH ====================== + public FPlayer strAsBestFPlayerMatch(String name, FPlayer def, boolean msg) { + return strAsFPlayer(name, def, msg); + } + + public FPlayer argAsBestFPlayerMatch(int idx, FPlayer def, boolean msg) { + return this.strAsBestFPlayerMatch(this.argAsString(idx), def, msg); + } + + public FPlayer argAsBestFPlayerMatch(int idx, FPlayer def) { + return this.argAsBestFPlayerMatch(idx, def, true); + } + + public FPlayer argAsBestFPlayerMatch(int idx) { + return this.argAsBestFPlayerMatch(idx, null); + } + + // FACTION ====================== + public Faction strAsFaction(String name, Faction def, boolean msg) { + Faction ret = def; + + if (name != null) { + // First we try an exact match + Faction faction = Factions.getInstance().getByTag(name); // Checks for faction name match. + + // Now lets try for warzone / safezone. Helpful for custom warzone / safezone names. + // Do this after we check for an exact match in case they rename the warzone / safezone + // and a player created faction took one of the names. + if (faction == null) { + if (name.equalsIgnoreCase("warzone")) { + faction = Factions.getInstance().getWarZone(); + } else if (name.equalsIgnoreCase("safezone")) { + faction = Factions.getInstance().getSafeZone(); + } + } + + // Next we match faction tags + if (faction == null) { + faction = Factions.getInstance().getBestTagMatch(name); + } + + // Next we match player names + if (faction == null) { + FPlayer fplayer = strAsFPlayer(name, null, false); + if (fplayer != null) { + faction = fplayer.getFaction(); + } + } + + if (faction != null) { + ret = faction; + } + } + + if (msg && ret == null) { + this.msg("The cartel or player \"

%s\" could not be found.", name); + } + + return ret; + } + + public Faction argAsFaction(int idx, Faction def, boolean msg) { + return this.strAsFaction(this.argAsString(idx), def, msg); + } + + public Faction argAsFaction(int idx, Faction def) { + return this.argAsFaction(idx, def, true); + } + + public Faction argAsFaction(int idx) { + return this.argAsFaction(idx, null); + } + + // -------------------------------------------- // + // Commonly used logic + // -------------------------------------------- // + + public boolean canIAdministerYou(FPlayer i, FPlayer you) { + if (!i.getFaction().equals(you.getFaction())) { + i.sendMessage(p.txt.parse("%s is not in the same cartel as you.", you.describeTo(i, true))); + return false; + } + + if (i.getRole().value > you.getRole().value || i.getRole().equals(Role.ADMIN)) { + return true; + } + + if (you.getRole().equals(Role.ADMIN)) { + i.sendMessage(p.txt.parse("Only the cartel admin can do that.")); + } else if (i.getRole().equals(Role.MODERATOR)) { + if (i == you) { + return true; //Moderators can control themselves + } else { + i.sendMessage(p.txt.parse("Underbosses can't control each other...")); + } + } else { + i.sendMessage(p.txt.parse("You must be a cartel underboss to do that.")); + } + + return false; + } + + // if economy is enabled and they're not on the bypass list, make 'em pay; returns true unless person can't afford the cost + public boolean payForCommand(double cost, String toDoThis, String forDoingThis) { + if (!Econ.shouldBeUsed() || this.fme == null || cost == 0.0 || fme.isAdminBypassing()) { + return true; + } + + if (Conf.bankEnabled && Conf.bankFactionPaysCosts && fme.hasFaction()) { + return Econ.modifyMoney(myFaction, -cost, toDoThis, forDoingThis); + } else { + return Econ.modifyMoney(fme, -cost, toDoThis, forDoingThis); + } + } + + public boolean payForCommand(double cost, TL toDoThis, TL forDoingThis) { + return payForCommand(cost, toDoThis.toString(), forDoingThis.toString()); + } + + // like above, but just make sure they can pay; returns true unless person can't afford the cost + public boolean canAffordCommand(double cost, String toDoThis) { + if (!Econ.shouldBeUsed() || this.fme == null || cost == 0.0 || fme.isAdminBypassing()) { + return true; + } + + if (Conf.bankEnabled && Conf.bankFactionPaysCosts && fme.hasFaction()) { + return Econ.hasAtLeast(myFaction, cost, toDoThis); + } else { + return Econ.hasAtLeast(fme, cost, toDoThis); + } + } + + public void doWarmUp(WarmUpUtil.Warmup warmup, TL translationKey, String action, Runnable runnable, long delay) { + this.doWarmUp(this.fme, warmup, translationKey, action, runnable, delay); + } + + public void doWarmUp(FPlayer player, WarmUpUtil.Warmup warmup, TL translationKey, String action, Runnable runnable, long delay) { + WarmUpUtil.process(player, warmup, translationKey, action, runnable, delay); + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/FRelationCommand.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/FRelationCommand.java new file mode 100644 index 0000000..cb497d6 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/cmd/FRelationCommand.java @@ -0,0 +1,126 @@ +package com.massivecraft.factions.cmd; + +import com.massivecraft.factions.Conf; +import com.massivecraft.factions.Faction; +import com.massivecraft.factions.P; +import com.massivecraft.factions.event.FactionRelationEvent; +import com.massivecraft.factions.event.FactionRelationWishEvent; +import com.massivecraft.factions.scoreboards.FTeamWrapper; +import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.struct.Relation; +import com.massivecraft.factions.zcore.util.TL; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; + +public abstract class FRelationCommand extends FCommand { + + public Relation targetRelation; + + public FRelationCommand() { + super(); + this.requiredArgs.add("faction tag"); + //this.optionalArgs.put("player name", "you"); + + this.permission = Permission.RELATION.node; + this.disableOnLock = true; + + senderMustBePlayer = true; + senderMustBeMember = false; + senderMustBeModerator = true; + senderMustBeAdmin = false; + } + + @Override + public void perform() { + Faction them = this.argAsFaction(0); + if (them == null) { + return; + } + + if (!them.isNormal()) { + msg(TL.COMMAND_RELATIONS_ALLTHENOPE); + return; + } + + if (them == myFaction) { + msg(TL.COMMAND_RELATIONS_MORENOPE); + return; + } + + if (myFaction.getRelationWish(them) == targetRelation) { + msg(TL.COMMAND_RELATIONS_ALREADYINRELATIONSHIP, them.getTag()); + return; + } + + if (hasMaxRelations(them, targetRelation)) { + // We message them down there with the count. + return; + } + Relation oldRelation = myFaction.getRelationTo(them, true); + FactionRelationWishEvent wishEvent = new FactionRelationWishEvent(fme, myFaction, them, oldRelation, targetRelation); + Bukkit.getPluginManager().callEvent(wishEvent); + if (wishEvent.isCancelled()) { + return; + } + + // if economy is enabled, they're not on the bypass list, and this command has a cost set, make 'em pay + if (!payForCommand(targetRelation.getRelationCost(), TL.COMMAND_RELATIONS_TOMARRY, TL.COMMAND_RELATIONS_FORMARRY)) { + return; + } + + // try to set the new relation + myFaction.setRelationWish(them, targetRelation); + Relation currentRelation = myFaction.getRelationTo(them, true); + ChatColor currentRelationColor = currentRelation.getColor(); + + // if the relation change was successful + if (targetRelation.value == currentRelation.value) { + // trigger the faction relation event + FactionRelationEvent relationEvent = new FactionRelationEvent(myFaction, them, oldRelation, currentRelation); + Bukkit.getServer().getPluginManager().callEvent(relationEvent); + + them.msg(TL.COMMAND_RELATIONS_MUTUAL, currentRelationColor + targetRelation.getTranslation(), currentRelationColor + myFaction.getTag()); + myFaction.msg(TL.COMMAND_RELATIONS_MUTUAL, currentRelationColor + targetRelation.getTranslation(), currentRelationColor + them.getTag()); + } else { + // inform the other faction of your request + them.msg(TL.COMMAND_RELATIONS_PROPOSAL_1, currentRelationColor + myFaction.getTag(), targetRelation.getColor() + targetRelation.getTranslation()); + them.msg(TL.COMMAND_RELATIONS_PROPOSAL_2, Conf.baseCommandAliases.get(0), targetRelation, myFaction.getTag()); + myFaction.msg(TL.COMMAND_RELATIONS_PROPOSAL_SENT, currentRelationColor + them.getTag(), "" + targetRelation.getColor() + targetRelation); + } + + if (!targetRelation.isNeutral() && them.isPeaceful()) { + them.msg(TL.COMMAND_RELATIONS_PEACEFUL); + myFaction.msg(TL.COMMAND_RELATIONS_PEACEFULOTHER); + } + + if (!targetRelation.isNeutral() && myFaction.isPeaceful()) { + them.msg(TL.COMMAND_RELATIONS_PEACEFULOTHER); + myFaction.msg(TL.COMMAND_RELATIONS_PEACEFUL); + } + + FTeamWrapper.updatePrefixes(myFaction); + FTeamWrapper.updatePrefixes(them); + } + + private boolean hasMaxRelations(Faction them, Relation targetRelation) { + int max = P.p.getConfig().getInt("max-relations." + targetRelation.toString(), -1); + if (P.p.getConfig().getBoolean("max-relations.enabled", false)) { + if (max != -1) { + if (myFaction.getRelationCount(targetRelation) >= max) { + msg(TL.COMMAND_RELATIONS_EXCEEDS_ME, max, targetRelation.getPluralTranslation()); + return true; + } + if (them.getRelationCount(targetRelation) > max) { + msg(TL.COMMAND_RELATIONS_EXCEEDS_THEY, max, targetRelation.getPluralTranslation()); + return true; + } + } + } + return false; + } + + @Override + public TL getUsageTranslation() { + return TL.COMMAND_RELATIONS_DESCRIPTION; + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/eco/EcoResult.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/eco/EcoResult.java new file mode 100644 index 0000000..845e6ce --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/eco/EcoResult.java @@ -0,0 +1,30 @@ +package com.massivecraft.factions.eco; + +/** + * Created by Luke Bingham on 31/07/2017. + */ +public enum EcoResult { + + /** + * If the transaction goes well, + * This shall be returned. + */ + SUCCESS(), + + /** + * If the balance is hitting the maximum capacity, + * This shall be returned. + */ + OVERWEIGHT(), + + /** + * If the transaction cannot be made due to lack of funds, + * This shall be returned. + */ + LOW_FUNDS(), + + /** + * This shall be returned when a Unknown issue occurs. + */ + UNKNOWN(), +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/event/FPlayerJoinEvent.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/event/FPlayerJoinEvent.java new file mode 100644 index 0000000..ce3148a --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/event/FPlayerJoinEvent.java @@ -0,0 +1,42 @@ +package com.massivecraft.factions.event; + +import com.massivecraft.factions.FPlayer; +import com.massivecraft.factions.Faction; +import org.bukkit.event.Cancellable; + +/** + * Event called when an FPlayer joins a Faction. + */ +public class FPlayerJoinEvent extends FactionPlayerEvent implements Cancellable { + + PlayerJoinReason reason; + boolean cancelled = false; + + public enum PlayerJoinReason { + CREATE, LEADER, COMMAND + } + + public FPlayerJoinEvent(FPlayer fp, Faction f, PlayerJoinReason r) { + super(f, fp); + reason = r; + } + + /** + * Get the reason the player joined the faction. + * + * @return reason player joined the faction. + */ + public PlayerJoinReason getReason() { + return reason; + } + + @Override + public boolean isCancelled() { + return cancelled; + } + + @Override + public void setCancelled(boolean c) { + cancelled = c; + } +} \ No newline at end of file diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/event/FPlayerLeaveEvent.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/event/FPlayerLeaveEvent.java new file mode 100644 index 0000000..73afb5e --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/event/FPlayerLeaveEvent.java @@ -0,0 +1,43 @@ +package com.massivecraft.factions.event; + +import com.massivecraft.factions.FPlayer; +import com.massivecraft.factions.Faction; +import org.bukkit.event.Cancellable; + +public class FPlayerLeaveEvent extends FactionPlayerEvent implements Cancellable { + + private PlayerLeaveReason reason; + boolean cancelled = false; + + public enum PlayerLeaveReason { + KICKED, DISBAND, RESET, JOINOTHER, LEAVE + } + + public FPlayerLeaveEvent(FPlayer p, Faction f, PlayerLeaveReason r) { + super(f, p); + reason = r; + } + + /** + * Get the reason the player left the faction. + * + * @return reason player left the faction. + */ + public PlayerLeaveReason getReason() { + return reason; + } + + @Override + public boolean isCancelled() { + return cancelled; + } + + @Override + public void setCancelled(boolean c) { + if (reason == PlayerLeaveReason.DISBAND || reason == PlayerLeaveReason.RESET) { + cancelled = false; // Don't let them cancel factions disbanding. + } else { + cancelled = c; + } + } +} \ No newline at end of file diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/event/FactionCreateEvent.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/event/FactionCreateEvent.java new file mode 100644 index 0000000..0afc612 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/event/FactionCreateEvent.java @@ -0,0 +1,52 @@ +package com.massivecraft.factions.event; + +import com.massivecraft.factions.FPlayer; +import com.massivecraft.factions.FPlayers; +import org.bukkit.entity.Player; +import org.bukkit.event.Cancellable; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +/** + * Event called when a Faction is created. + */ +public class FactionCreateEvent extends Event implements Cancellable { + + private static final HandlerList handlers = new HandlerList(); + + private String factionTag; + private Player sender; + private boolean cancelled; + + public FactionCreateEvent(Player sender, String tag) { + this.factionTag = tag; + this.sender = sender; + this.cancelled = false; + } + + public FPlayer getFPlayer() { + return FPlayers.getInstance().getByPlayer(sender); + } + + public String getFactionTag() { + return factionTag; + } + + public HandlerList getHandlers() { + return handlers; + } + + public static HandlerList getHandlerList() { + return handlers; + } + + @Override + public boolean isCancelled() { + return cancelled; + } + + @Override + public void setCancelled(boolean c) { + this.cancelled = c; + } +} \ No newline at end of file diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/event/FactionDisbandEvent.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/event/FactionDisbandEvent.java new file mode 100644 index 0000000..5504b87 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/event/FactionDisbandEvent.java @@ -0,0 +1,39 @@ +package com.massivecraft.factions.event; + +import com.massivecraft.factions.FPlayer; +import com.massivecraft.factions.FPlayers; +import com.massivecraft.factions.Factions; +import org.bukkit.entity.Player; +import org.bukkit.event.Cancellable; + +/** + * Event called when a faction is disbanded. + */ +public class FactionDisbandEvent extends FactionEvent implements Cancellable { + + private boolean cancelled = false; + private Player sender; + + public FactionDisbandEvent(Player sender, String factionId) { + super(Factions.getInstance().getFactionById(factionId)); + this.sender = sender; + } + + public FPlayer getFPlayer() { + return FPlayers.getInstance().getByPlayer(sender); + } + + public Player getPlayer() { + return sender; + } + + @Override + public boolean isCancelled() { + return cancelled; + } + + @Override + public void setCancelled(boolean c) { + cancelled = c; + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/event/FactionEvent.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/event/FactionEvent.java new file mode 100644 index 0000000..53c87fd --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/event/FactionEvent.java @@ -0,0 +1,36 @@ +package com.massivecraft.factions.event; + +import com.massivecraft.factions.Faction; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +/** + * Represents an event involving a Faction. + */ +public class FactionEvent extends Event { + + private static final HandlerList handlers = new HandlerList(); + private final Faction faction; + + public FactionEvent(Faction faction) { + this.faction = faction; + } + + /** + * Get the Faction involved in the event. + * + * @return faction involved in the event. + */ + public Faction getFaction() { + return this.faction; + } + + public HandlerList getHandlers() { + return handlers; + } + + public static HandlerList getHandlerList() { + return handlers; + } + +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/event/FactionPlayerEvent.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/event/FactionPlayerEvent.java new file mode 100644 index 0000000..8a2552d --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/event/FactionPlayerEvent.java @@ -0,0 +1,21 @@ +package com.massivecraft.factions.event; + +import com.massivecraft.factions.FPlayer; +import com.massivecraft.factions.Faction; + +/** + * Represents an event involving a Faction and a FPlayer. + */ +public class FactionPlayerEvent extends FactionEvent { + + private final FPlayer fPlayer; + + public FactionPlayerEvent(Faction faction, FPlayer fPlayer) { + super(faction); + this.fPlayer = fPlayer; + } + + public FPlayer getfPlayer() { + return this.fPlayer; + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/event/FactionRelationEvent.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/event/FactionRelationEvent.java new file mode 100644 index 0000000..a9b6a2f --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/event/FactionRelationEvent.java @@ -0,0 +1,50 @@ +package com.massivecraft.factions.event; + +import com.massivecraft.factions.Faction; +import com.massivecraft.factions.struct.Relation; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +/** + * Event called when a Faction relation is called. + */ +public class FactionRelationEvent extends Event { + + private static final HandlerList handlers = new HandlerList(); + + private Faction fsender; + private Faction ftarget; + private Relation foldrel; + private Relation frel; + + public FactionRelationEvent(Faction sender, Faction target, Relation oldrel, Relation rel) { + fsender = sender; + ftarget = target; + foldrel = oldrel; + frel = rel; + } + + public HandlerList getHandlers() { + return handlers; + } + + public static HandlerList getHandlerList() { + return handlers; + } + + public Relation getOldRelation() { + return foldrel; + } + + public Relation getRelation() { + return frel; + } + + public Faction getFaction() { + return fsender; + } + + public Faction getTargetFaction() { + return ftarget; + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/event/FactionRelationWishEvent.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/event/FactionRelationWishEvent.java new file mode 100644 index 0000000..8590f7b --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/event/FactionRelationWishEvent.java @@ -0,0 +1,44 @@ +package com.massivecraft.factions.event; + +import com.massivecraft.factions.FPlayer; +import com.massivecraft.factions.Faction; +import com.massivecraft.factions.struct.Relation; +import org.bukkit.event.Cancellable; + +public class FactionRelationWishEvent extends FactionPlayerEvent implements Cancellable { + private final Faction targetFaction; + private final Relation currentRelation; + private final Relation targetRelation; + + private boolean cancelled; + + public FactionRelationWishEvent(FPlayer caller, Faction sender, Faction targetFaction, Relation currentRelation, Relation targetRelation) { + super(sender, caller); + + this.targetFaction = targetFaction; + this.currentRelation = currentRelation; + this.targetRelation = targetRelation; + } + + public Faction getTargetFaction() { + return targetFaction; + } + + public Relation getCurrentRelation() { + return currentRelation; + } + + public Relation getTargetRelation() { + return targetRelation; + } + + @Override + public boolean isCancelled() { + return cancelled; + } + + @Override + public void setCancelled(boolean cancelled) { + this.cancelled = cancelled; + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/event/FactionRenameEvent.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/event/FactionRenameEvent.java new file mode 100644 index 0000000..702f9b0 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/event/FactionRenameEvent.java @@ -0,0 +1,59 @@ +package com.massivecraft.factions.event; + +import com.massivecraft.factions.FPlayer; +import org.bukkit.entity.Player; +import org.bukkit.event.Cancellable; + +public class FactionRenameEvent extends FactionPlayerEvent implements Cancellable { + + private boolean cancelled = false; + private String tag; + + public FactionRenameEvent(FPlayer sender, String newTag) { + super(sender.getFaction(), sender); + tag = newTag; + } + + /** + * Get the player involved in the event. + * + * @return Player involved in the event. + * + * @deprecated use getfPlayer().getPlayer() instead. + */ + @Deprecated + public Player getPlayer() { + return getfPlayer().getPlayer(); + } + + /** + * Get the faction tag before it was renamed. + * + * @return old faction tag. + * + * @deprecated use getFaction().getTag() instead. + */ + @Deprecated + public String getOldFactionTag() { + return getFaction().getTag(); + } + + /** + * Get the new faction tag. + * + * @return new faction tag as String. + */ + public String getFactionTag() { + return tag; + } + + @Override + public boolean isCancelled() { + return cancelled; + } + + @Override + public void setCancelled(boolean c) { + this.cancelled = c; + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/event/LandClaimEvent.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/event/LandClaimEvent.java new file mode 100644 index 0000000..a41a5eb --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/event/LandClaimEvent.java @@ -0,0 +1,77 @@ +package com.massivecraft.factions.event; + +import com.massivecraft.factions.FLocation; +import com.massivecraft.factions.FPlayer; +import com.massivecraft.factions.Faction; +import org.bukkit.entity.Player; +import org.bukkit.event.Cancellable; + +/** + * Event called when an FPlayer claims land for a Faction. + */ +public class LandClaimEvent extends FactionPlayerEvent implements Cancellable { + + private boolean cancelled; + private FLocation location; + + public LandClaimEvent(FLocation loc, Faction f, FPlayer p) { + super(f, p); + cancelled = false; + location = loc; + } + + /** + * Get the FLocation involved in this event. + * + * @return the FLocation (also a chunk) involved in this event. + */ + public FLocation getLocation() { + return this.location; + } + + /** + * Get the id of the faction. + * + * @return id of faction as String + * + * @deprecated use getFaction().getId() instead. + */ + @Deprecated + public String getFactionId() { + return getFaction().getId(); + } + + /** + * Get the tag of the faction. + * + * @return tag of faction as String + * + * @deprecated use getFaction().getTag() instead. + */ + @Deprecated + public String getFactionTag() { + return getFaction().getTag(); + } + + /** + * Get the Player involved in this event. + * + * @return player from FPlayer. + * + * @deprecated use getfPlayer().getPlayer() instead. + */ + @Deprecated + public Player getPlayer() { + return getfPlayer().getPlayer(); + } + + @Override + public boolean isCancelled() { + return cancelled; + } + + @Override + public void setCancelled(boolean c) { + this.cancelled = c; + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/event/LandUnclaimAllEvent.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/event/LandUnclaimAllEvent.java new file mode 100644 index 0000000..6c52b93 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/event/LandUnclaimAllEvent.java @@ -0,0 +1,60 @@ +package com.massivecraft.factions.event; + +import com.massivecraft.factions.FPlayer; +import com.massivecraft.factions.Faction; +import org.bukkit.entity.Player; +import org.bukkit.event.Cancellable; + +public class LandUnclaimAllEvent extends FactionPlayerEvent implements Cancellable { + private boolean cancelled; + + public LandUnclaimAllEvent(Faction f, FPlayer p) { + super(f, p); + } + + /** + * Get the id of the faction. + * + * @return id of faction as String + * + * @deprecated use getFaction().getId() instead. + */ + @Deprecated + public String getFactionId() { + return getFaction().getId(); + } + + /** + * Get the tag of the faction. + * + * @return tag of faction as String + * + * @deprecated use getFaction().getTag() instead. + */ + @Deprecated + public String getFactionTag() { + return getFaction().getTag(); + } + + /** + * Get the Player involved in the event. + * + * @return Player from FPlayer. + * + * @deprecated use getfPlayer().getPlayer() instead. + */ + @Deprecated + public Player getPlayer() { + return getfPlayer().getPlayer(); + } + + @Override + public boolean isCancelled() { + return cancelled; + } + + @Override + public void setCancelled(boolean cancelled) { + this.cancelled = cancelled; + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/event/LandUnclaimEvent.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/event/LandUnclaimEvent.java new file mode 100644 index 0000000..c7321eb --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/event/LandUnclaimEvent.java @@ -0,0 +1,72 @@ +package com.massivecraft.factions.event; + +import com.massivecraft.factions.FLocation; +import com.massivecraft.factions.FPlayer; +import com.massivecraft.factions.Faction; +import org.bukkit.entity.Player; +import org.bukkit.event.Cancellable; + +/** + * Event called when an FPlayer unclaims land for a Faction. + */ +public class LandUnclaimEvent extends FactionPlayerEvent implements Cancellable { + + private boolean cancelled; + private FLocation location; + + public LandUnclaimEvent(FLocation loc, Faction f, FPlayer p) { + super(f, p); + cancelled = false; + location = loc; + } + + public FLocation getLocation() { + return this.location; + } + + /** + * Get the id of the faction. + * + * @return id of faction as String + * + * @deprecated use getFaction().getId() instead. + */ + @Deprecated + public String getFactionId() { + return getFaction().getId(); + } + + /** + * Get the tag of the faction. + * + * @return tag of faction as String + * + * @deprecated use getFaction().getTag() instead. + */ + @Deprecated + public String getFactionTag() { + return getFaction().getTag(); + } + + /** + * Get the Player involved in the event. + * + * @return Player from FPlayer. + * + * @deprecated use getfPlayer().getPlayer() instead. + */ + @Deprecated + public Player getPlayer() { + return getfPlayer().getPlayer(); + } + + @Override + public boolean isCancelled() { + return cancelled; + } + + @Override + public void setCancelled(boolean c) { + cancelled = c; + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/event/PowerLossEvent.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/event/PowerLossEvent.java new file mode 100644 index 0000000..681ba61 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/event/PowerLossEvent.java @@ -0,0 +1,84 @@ +package com.massivecraft.factions.event; + +import com.massivecraft.factions.FPlayer; +import com.massivecraft.factions.Faction; +import org.bukkit.entity.Player; +import org.bukkit.event.Cancellable; + +/** + * Event called when a player loses power. + */ +public class PowerLossEvent extends FactionPlayerEvent implements Cancellable { + + private boolean cancelled = false; + private String message; + + public PowerLossEvent(Faction f, FPlayer p) { + super(f, p); + } + + /** + * Get the id of the faction. + * + * @return id of faction as String + * + * @deprecated use getFaction().getId() instead. + */ + @Deprecated + public String getFactionId() { + return getFaction().getId(); + } + + /** + * Get the tag of the faction. + * + * @return tag of faction as String + * + * @deprecated use getFaction().getTag() instead. + */ + @Deprecated + public String getFactionTag() { + return getFaction().getTag(); + } + + /** + * Get the Player involved in the event. + * + * @return Player from FPlayer. + * + * @deprecated use getfPlayer().getPlayer() instead. + */ + @Deprecated + public Player getPlayer() { + return getfPlayer().getPlayer(); + } + + /** + * Get the power loss message. + * + * @return power loss message as String. + */ + public String getMessage() { + return message; + } + + /** + * Set the power loss message. + * + * @param message + */ + public void setMessage(String message) { + this.message = message; + } + + @Override + public boolean isCancelled() { + return cancelled; + } + + @Override + public void setCancelled(boolean c) { + this.cancelled = c; + } + +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/iface/EconomyParticipator.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/iface/EconomyParticipator.java new file mode 100644 index 0000000..37fcb5c --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/iface/EconomyParticipator.java @@ -0,0 +1,12 @@ +package com.massivecraft.factions.iface; + +import com.massivecraft.factions.zcore.util.TL; + +public interface EconomyParticipator extends RelationParticipator { + + public String getAccountId(); + + public void msg(String str, Object... args); + + public void msg(TL translation, Object... args); +} \ No newline at end of file diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/iface/RelationParticipator.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/iface/RelationParticipator.java new file mode 100644 index 0000000..eb0bb55 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/iface/RelationParticipator.java @@ -0,0 +1,17 @@ +package com.massivecraft.factions.iface; + +import com.massivecraft.factions.struct.Relation; +import org.bukkit.ChatColor; + +public interface RelationParticipator { + + public String describeTo(RelationParticipator that); + + public String describeTo(RelationParticipator that, boolean ucfirst); + + public Relation getRelationTo(RelationParticipator that); + + public Relation getRelationTo(RelationParticipator that, boolean ignorePeaceful); + + public ChatColor getColorTo(RelationParticipator to); +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/integration/Econ.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/integration/Econ.java new file mode 100644 index 0000000..2213bab --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/integration/Econ.java @@ -0,0 +1,442 @@ +package com.massivecraft.factions.integration; + +import com.massivecraft.factions.Conf; +import com.massivecraft.factions.FPlayer; +import com.massivecraft.factions.Faction; +import com.massivecraft.factions.P; +import com.massivecraft.factions.iface.EconomyParticipator; +import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.struct.Role; +import com.massivecraft.factions.util.RelationUtil; +import net.milkbowl.vault.economy.Economy; +import net.milkbowl.vault.economy.EconomyResponse; +import org.bukkit.Bukkit; +import org.bukkit.OfflinePlayer; +import org.bukkit.plugin.RegisteredServiceProvider; + +import java.text.DecimalFormat; +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; +import java.util.logging.Level; + +public class Econ { + + private static Economy econ = null; + + public static void setup() { + if (isSetup()) { + return; + } + + String integrationFail = "Economy integration is " + (Conf.econEnabled ? "enabled, but" : "disabled, and") + " the plugin \"Vault\" "; + + if (Bukkit.getServer().getPluginManager().getPlugin("Vault") == null) { + P.p.log(integrationFail + "is not installed."); + return; + } + + RegisteredServiceProvider rsp = Bukkit.getServer().getServicesManager().getRegistration(Economy.class); + if (rsp == null) { + P.p.log(integrationFail + "is not hooked into an economy plugin."); + return; + } + econ = rsp.getProvider(); + + P.p.log("Economy integration through Vault plugin successful."); + + if (!Conf.econEnabled) { + P.p.log("NOTE: Economy is disabled. You can enable it with the command: c config econEnabled true"); + } + + P.p.cmdBase.cmdHelp.updateHelp(); + } + + public static boolean shouldBeUsed() { + return Conf.econEnabled && econ != null && econ.isEnabled(); + } + + public static boolean isSetup() { + return econ != null; + } + + + public static void modifyUniverseMoney(double delta) { + if (!shouldBeUsed()) { + return; + } + + if (Conf.econUniverseAccount == null) { + return; + } + if (Conf.econUniverseAccount.length() == 0) { + return; + } + if (!econ.hasAccount(Conf.econUniverseAccount)) { + return; + } + + modifyBalance(Conf.econUniverseAccount, delta); + } + + public static void sendBalanceInfo(FPlayer to, EconomyParticipator about) { + if (!shouldBeUsed()) { + P.p.log(Level.WARNING, "Vault does not appear to be hooked into an economy plugin."); + return; + } + to.msg("%s's balance is %s.", about.describeTo(to, true), Econ.moneyString(econ.getBalance(about.getAccountId()))); + } + + public static boolean canIControllYou(EconomyParticipator i, EconomyParticipator you) { + Faction fI = RelationUtil.getFaction(i); + Faction fYou = RelationUtil.getFaction(you); + + // This is a system invoker. Accept it. + if (fI == null) { + return true; + } + + // Bypassing players can do any kind of transaction + if (i instanceof FPlayer && ((FPlayer) i).isAdminBypassing()) { + return true; + } + + // Players with the any withdraw can do. + if (i instanceof FPlayer && Permission.MONEY_WITHDRAW_ANY.has(((FPlayer) i).getPlayer())) { + return true; + } + + // You can deposit to anywhere you feel like. It's your loss if you can't withdraw it again. + if (i == you) { + return true; + } + + // A faction can always transfer away the money of it's members and its own money... + // This will however probably never happen as a faction does not have free will. + // Ohh by the way... Yes it could. For daily rent to the faction. + if (i == fI && fI == fYou) { + return true; + } + + // Factions can be controlled by members that are moderators... or any member if any member can withdraw. + if (you instanceof Faction && fI == fYou && (Conf.bankMembersCanWithdraw || ((FPlayer) i).getRole().value >= Role.MODERATOR.value)) { + return true; + } + + // Otherwise you may not! ;,,; + i.msg("%s lacks permission to control %s's money.", i.describeTo(i, true), you.describeTo(i)); + return false; + } + + public static boolean transferMoney(EconomyParticipator invoker, EconomyParticipator from, EconomyParticipator to, double amount) { + return transferMoney(invoker, from, to, amount, true); + } + + public static boolean transferMoney(EconomyParticipator invoker, EconomyParticipator from, EconomyParticipator to, double amount, boolean notify) { + if (!shouldBeUsed()) { + return false; + } + + // The amount must be positive. + // If the amount is negative we must flip and multiply amount with -1. + if (amount < 0) { + amount *= -1; + EconomyParticipator temp = from; + from = to; + to = temp; + } + + // Check the rights + if (!canIControllYou(invoker, from)) { + return false; + } + + OfflinePlayer fromAcc; + OfflinePlayer toAcc; + + if (isUUID(from.getAccountId())) { + fromAcc = Bukkit.getOfflinePlayer(UUID.fromString(from.getAccountId())); + if (fromAcc.getName() == null) { + return false; + } + } else { + fromAcc = Bukkit.getOfflinePlayer(from.getAccountId()); + } + + if (isUUID(to.getAccountId())) { + toAcc = Bukkit.getOfflinePlayer(UUID.fromString(to.getAccountId())); + if (toAcc.getName() == null) { + return false; + } + } else { + toAcc = Bukkit.getOfflinePlayer(to.getAccountId()); + } + + // Is there enough money for the transaction to happen? + if (!econ.has(fromAcc, amount)) { + // There was not enough money to pay + if (invoker != null && notify) { + invoker.msg("%s can't afford to transfer %s to %s.", from.describeTo(invoker, true), moneyString(amount), to.describeTo(invoker)); + } + + return false; + } + + // Transfer money + EconomyResponse erw = econ.withdrawPlayer(fromAcc, amount); + + if (erw.transactionSuccess()) { + EconomyResponse erd = econ.depositPlayer(toAcc, amount); + if (erd.transactionSuccess()) { + if (notify) { + sendTransferInfo(invoker, from, to, amount); + } + return true; + } else { + // transaction failed, refund account + econ.depositPlayer(fromAcc, amount); + } + } + + // if we get here something with the transaction failed + if (notify) { + invoker.msg("Unable to transfer %s to %s from %s.", moneyString(amount), to.describeTo(invoker), from.describeTo(invoker, true)); + } + + return false; + } + + public static Set getFplayers(EconomyParticipator ep) { + Set fplayers = new HashSet(); + + if (ep != null) { + if (ep instanceof FPlayer) { + fplayers.add((FPlayer) ep); + } else if (ep instanceof Faction) { + fplayers.addAll(((Faction) ep).getFPlayers()); + } + } + + return fplayers; + } + + public static void sendTransferInfo(EconomyParticipator invoker, EconomyParticipator from, EconomyParticipator to, double amount) { + Set recipients = new HashSet(); + recipients.addAll(getFplayers(invoker)); + recipients.addAll(getFplayers(from)); + recipients.addAll(getFplayers(to)); + + if (invoker == null) { + for (FPlayer recipient : recipients) { + recipient.msg("%s was transferred from %s to %s.", moneyString(amount), from.describeTo(recipient), to.describeTo(recipient)); + } + } else if (invoker == from) { + for (FPlayer recipient : recipients) { + recipient.msg("%s gave %s to %s.", from.describeTo(recipient, true), moneyString(amount), to.describeTo(recipient)); + } + } else if (invoker == to) { + for (FPlayer recipient : recipients) { + recipient.msg("%s took %s from %s.", to.describeTo(recipient, true), moneyString(amount), from.describeTo(recipient)); + } + } else { + for (FPlayer recipient : recipients) { + recipient.msg("%s transferred %s from %s to %s.", invoker.describeTo(recipient, true), moneyString(amount), from.describeTo(recipient), to.describeTo(recipient)); + } + } + } + + public static boolean hasAtLeast(EconomyParticipator ep, double delta, String toDoThis) { + if (!shouldBeUsed()) { + return true; + } + + // going the hard way round as econ.has refuses to work. + boolean affordable = false; + double currentBalance; + + if (isUUID(ep.getAccountId())) { + OfflinePlayer offline = Bukkit.getOfflinePlayer(UUID.fromString(ep.getAccountId())); + if (offline.getName() != null) { + currentBalance = econ.getBalance(Bukkit.getOfflinePlayer(UUID.fromString(ep.getAccountId()))); + } else { + currentBalance = 0; + } + } else { + currentBalance = econ.getBalance(ep.getAccountId()); + } + + if (currentBalance >= delta) { + affordable = true; + } + + if (!affordable) { + if (toDoThis != null && !toDoThis.isEmpty()) { + ep.msg("%s can't afford %s %s.", ep.describeTo(ep, true), moneyString(delta), toDoThis); + } + return false; + } + return true; + } + + public static boolean modifyMoney(EconomyParticipator ep, double delta, String toDoThis, String forDoingThis) { + if (!shouldBeUsed()) { + return false; + } + + OfflinePlayer acc; + + if (isUUID(ep.getAccountId())) { + acc = Bukkit.getOfflinePlayer(UUID.fromString(ep.getAccountId())); + if (acc.getName() == null) { + return false; + } + } else { + acc = Bukkit.getOfflinePlayer(ep.getAccountId()); + } + + String You = ep.describeTo(ep, true); + + if (delta == 0) { + // no money actually transferred? +// ep.msg("%s didn't have to pay anything %s.", You, forDoingThis); // might be for gains, might be for losses + return true; + } + + if (delta > 0) { + // The player should gain money + // The account might not have enough space + EconomyResponse er = econ.depositPlayer(acc, delta); + if (er.transactionSuccess()) { + modifyUniverseMoney(-delta); + if (forDoingThis != null && !forDoingThis.isEmpty()) { + ep.msg("%s gained %s %s.", You, moneyString(delta), forDoingThis); + } + return true; + } else { + // transfer to account failed + if (forDoingThis != null && !forDoingThis.isEmpty()) { + ep.msg("%s would have gained %s %s, but the deposit failed.", You, moneyString(delta), forDoingThis); + } + return false; + } + } else { + // The player should loose money + // The player might not have enough. + + if (econ.has(acc, -delta) && econ.withdrawPlayer(acc, -delta).transactionSuccess()) { + // There is enough money to pay + modifyUniverseMoney(-delta); + if (forDoingThis != null && !forDoingThis.isEmpty()) { + ep.msg("%s lost %s %s.", You, moneyString(-delta), forDoingThis); + } + return true; + } else { + // There was not enough money to pay + if (toDoThis != null && !toDoThis.isEmpty()) { + ep.msg("%s can't afford %s %s.", You, moneyString(-delta), toDoThis); + } + return false; + } + } + } + + // format money string based on server's set currency type, like "24 gold" or "$24.50" + public static String moneyString(double amount) { + return econ.format(amount); + } + + // calculate the cost for claiming land + public static double calculateClaimCost(int ownedLand, boolean takingFromAnotherFaction) { +// if (!shouldBeUsed()) { +// return 0d; +// } + + // basic claim cost, plus land inflation cost, minus the potential bonus given for claiming from another faction + return Conf.econCostClaimWilderness + (Conf.econCostClaimWilderness * Conf.econClaimAdditionalMultiplier * ownedLand) - (takingFromAnotherFaction ? Conf.econCostClaimFromFactionBonus : 0); + } + + // calculate refund amount for unclaiming land + public static double calculateClaimRefund(int ownedLand) { + return calculateClaimCost(ownedLand - 1, false) * Conf.econClaimRefundMultiplier; + } + + // calculate value of all owned land + public static double calculateTotalLandValue(int ownedLand) { + double amount = 0; + for (int x = 0; x < ownedLand; x++) { + amount += calculateClaimCost(x, false); + } + return amount; + } + + // calculate refund amount for all owned land + public static double calculateTotalLandRefund(int ownedLand) { + return calculateTotalLandValue(ownedLand) * Conf.econClaimRefundMultiplier; + } + + + // -------------------------------------------- // + // Standard account management methods + // -------------------------------------------- // + + public static boolean hasAccount(String name) { + return econ.hasAccount(name); + } + + public static double getBalance(String account) { + return econ.getBalance(account); + } + + private static final DecimalFormat format = new DecimalFormat("#,###"); + + public static String getFriendlyBalance(UUID uuid) { + OfflinePlayer offline = Bukkit.getOfflinePlayer(uuid); + if (offline.getName() == null) { + return "0"; + } + return format.format(econ.getBalance(offline)); + } + + public static String getFriendlyBalance(FPlayer player) { + return getFriendlyBalance(UUID.fromString(player.getId())); + } + + public static boolean setBalance(String account, double amount) { + double current = econ.getBalance(account); + if (current > amount) { + return econ.withdrawPlayer(account, current - amount).transactionSuccess(); + } else { + return econ.depositPlayer(account, amount - current).transactionSuccess(); + } + } + + public static boolean modifyBalance(String account, double amount) { + if (amount < 0) { + return econ.withdrawPlayer(account, -amount).transactionSuccess(); + } else { + return econ.depositPlayer(account, amount).transactionSuccess(); + } + } + + public static boolean deposit(String account, double amount) { + return econ.depositPlayer(account, amount).transactionSuccess(); + } + + public static boolean withdraw(String account, double amount) { + return econ.withdrawPlayer(account, amount).transactionSuccess(); + } + + // --------------------------------------- + // Helpful Utilities + // --------------------------------------- + + public static boolean isUUID(String uuid) { + try { + UUID.fromString(uuid); + } catch (IllegalArgumentException ex) { + return false; + } + + return true; + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/integration/Essentials.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/integration/Essentials.java new file mode 100644 index 0000000..7b67d56 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/integration/Essentials.java @@ -0,0 +1,46 @@ +package com.massivecraft.factions.integration; + +import com.earth2me.essentials.IEssentials; +import com.earth2me.essentials.Teleport; +import com.earth2me.essentials.Trade; +import com.massivecraft.factions.Conf; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.entity.Player; +import org.bukkit.plugin.Plugin; + +public class Essentials { + + private static IEssentials essentials; + + public static void setup() { + Plugin ess = Bukkit.getPluginManager().getPlugin("Essentials"); + if (ess != null) { + essentials = (IEssentials) ess; + } + } + + // return false if feature is disabled or Essentials isn't available + public static boolean handleTeleport(Player player, Location loc) { + if (!Conf.homesTeleportCommandEssentialsIntegration || essentials == null) { + return false; + } + + Teleport teleport = essentials.getUser(player).getTeleport(); + Trade trade = new Trade(Conf.econCostHome, essentials); + try { + teleport.teleport(loc, trade); + } catch (Exception e) { + player.sendMessage(ChatColor.RED.toString() + e.getMessage()); + } + return true; + } + + public static boolean isVanished(Player player) { + if (essentials == null) { + return false; + } + return essentials.getUser(player).isVanished(); + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/integration/Worldguard.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/integration/Worldguard.java new file mode 100644 index 0000000..4bd0f65 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/integration/Worldguard.java @@ -0,0 +1,132 @@ +package com.massivecraft.factions.integration; + +import com.massivecraft.factions.P; +import com.sk89q.worldedit.BlockVector; +import com.sk89q.worldedit.Vector; +import com.sk89q.worldguard.bukkit.WorldGuardPlugin; +import com.sk89q.worldguard.protection.ApplicableRegionSet; +import com.sk89q.worldguard.protection.flags.DefaultFlag; +import com.sk89q.worldguard.protection.managers.RegionManager; +import com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion; +import com.sk89q.worldguard.protection.regions.ProtectedRegion; +import org.bukkit.Chunk; +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.entity.Player; +import org.bukkit.plugin.Plugin; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Map; + +import static com.sk89q.worldguard.bukkit.BukkitUtil.toVector; + +/* + * Worldguard Region Checking + * Author: Spathizilla + */ + +public class Worldguard { + + private static WorldGuardPlugin wg; + private static boolean enabled = false; + + public static void init(Plugin plugin) { + Plugin wgplug = plugin.getServer().getPluginManager().getPlugin("WorldGuard"); + if (wgplug == null || !(wgplug instanceof WorldGuardPlugin)) { + enabled = false; + wg = null; + P.p.log("Could not hook to WorldGuard. WorldGuard checks are disabled."); + } else { + wg = (WorldGuardPlugin) wgplug; + enabled = true; + P.p.log("Successfully hooked to WorldGuard."); + } + } + + public static boolean isEnabled() { + return enabled; + } + + // PVP Flag check + // Returns: + // True: PVP is allowed + // False: PVP is disallowed + public static boolean isPVP(Player player) { + if (!enabled) { + // No WG hooks so we'll always bypass this check. + return true; + } + + Location loc = player.getLocation(); + World world = loc.getWorld(); + Vector pt = toVector(loc); + + RegionManager regionManager = wg.getRegionManager(world); + ApplicableRegionSet set = regionManager.getApplicableRegions(pt); + return set.allows(DefaultFlag.PVP); + } + + // Check if player can build at location by worldguards rules. + // Returns: + // True: Player can build in the region. + // False: Player can not build in the region. + public static boolean playerCanBuild(Player player, Location loc) { + if (!enabled) { + // No WG hooks so we'll always bypass this check. + return false; + } + + World world = loc.getWorld(); + Vector pt = toVector(loc); + + if (wg.getRegionManager(world).getApplicableRegions(pt).size() > 0) { + return wg.canBuild(player, loc); + } + return false; + } + + // Check for Regions in chunk the chunk + // Returns: + // True: Regions found within chunk + // False: No regions found within chunk + public static boolean checkForRegionsInChunk(Location loc) { + if (!enabled) { + // No WG hooks so we'll always bypass this check. + return false; + } + + World world = loc.getWorld(); + Chunk chunk = world.getChunkAt(loc); + int minChunkX = chunk.getX() << 4; + int minChunkZ = chunk.getZ() << 4; + int maxChunkX = minChunkX + 15; + int maxChunkZ = minChunkZ + 15; + + int worldHeight = world.getMaxHeight(); // Allow for heights other than default + + BlockVector minChunk = new BlockVector(minChunkX, 0, minChunkZ); + BlockVector maxChunk = new BlockVector(maxChunkX, worldHeight, maxChunkZ); + + RegionManager regionManager = wg.getRegionManager(world); + ProtectedCuboidRegion region = new ProtectedCuboidRegion("wgfactionoverlapcheck", minChunk, maxChunk); + Map allregions = regionManager.getRegions(); + Collection allregionslist = new ArrayList(allregions.values()); + List overlaps; + boolean foundregions = false; + + try { + overlaps = region.getIntersectingRegions(allregionslist); + if (overlaps == null || overlaps.isEmpty()) { + foundregions = false; + } else { + foundregions = true; + } + } catch (Exception e) { + e.printStackTrace(); + } + + return foundregions; + } +} \ No newline at end of file diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/integration/dynmap/DynmapStyle.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/integration/dynmap/DynmapStyle.java new file mode 100644 index 0000000..e34d78c --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/integration/dynmap/DynmapStyle.java @@ -0,0 +1,113 @@ +package com.massivecraft.factions.integration.dynmap; + +import com.massivecraft.factions.Conf; + +public class DynmapStyle { + // -------------------------------------------- // + // FIELDS + // -------------------------------------------- // + + public String lineColor = null; + + public int getLineColor() { + return getColor(coalesce(this.lineColor, Conf.dynmapDefaultStyle.lineColor, Conf.DYNMAP_STYLE_LINE_COLOR)); + } + + public DynmapStyle setStrokeColor(String strokeColor) { + this.lineColor = strokeColor; + return this; + } + + public Double lineOpacity = null; + + public double getLineOpacity() { + return coalesce(this.lineOpacity, Conf.dynmapDefaultStyle.lineOpacity, Conf.DYNMAP_STYLE_LINE_OPACITY); + } + + public DynmapStyle setLineOpacity(Double strokeOpacity) { + this.lineOpacity = strokeOpacity; + return this; + } + + public Integer lineWeight = null; + + public int getLineWeight() { + return coalesce(this.lineWeight, Conf.dynmapDefaultStyle.lineWeight, Conf.DYNMAP_STYLE_LINE_WEIGHT); + } + + public DynmapStyle setLineWeight(Integer strokeWeight) { + this.lineWeight = strokeWeight; + return this; + } + + public String fillColor = null; + + public int getFillColor() { + return getColor(coalesce(this.fillColor, Conf.dynmapDefaultStyle.fillColor, Conf.DYNMAP_STYLE_FILL_COLOR)); + } + + public DynmapStyle setFillColor(String fillColor) { + this.fillColor = fillColor; + return this; + } + + public Double fillOpacity = null; + + public double getFillOpacity() { + return coalesce(this.fillOpacity, Conf.dynmapDefaultStyle.fillOpacity, Conf.DYNMAP_STYLE_FILL_OPACITY); + } + + public DynmapStyle setFillOpacity(Double fillOpacity) { + this.fillOpacity = fillOpacity; + return this; + } + + // NOTE: We just return the string here. We do not return the resolved Dynmap MarkerIcon object. + // The reason is we use this class in the MConf. For serialization to work Dynmap would have to be loaded and we can't require that. + // Using dynmap is optional. + public String homeMarker = null; + + public String getHomeMarker() { + return coalesce(this.homeMarker, Conf.dynmapDefaultStyle.homeMarker, Conf.DYNMAP_STYLE_HOME_MARKER); + } + + public DynmapStyle setHomeMarker(String homeMarker) { + this.homeMarker = homeMarker; + return this; + } + + public Boolean boost = null; + + public boolean getBoost() { + return coalesce(this.boost, Conf.dynmapDefaultStyle.boost, Conf.DYNMAP_STYLE_BOOST); + } + + public DynmapStyle setBoost(Boolean boost) { + this.boost = boost; + return this; + } + + // -------------------------------------------- // + // UTIL + // -------------------------------------------- // + + @SafeVarargs + public static T coalesce(T... items) { + for (T item : items) { + if (item != null) { + return item; + } + } + return null; + } + + public static int getColor(String string) { + int ret = 0x00FF00; + try { + ret = Integer.parseInt(string.substring(1), 16); + } catch (NumberFormatException ignored) { + } + return ret; + } + +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/integration/dynmap/EngineDynmap.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/integration/dynmap/EngineDynmap.java new file mode 100644 index 0000000..40faace --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/integration/dynmap/EngineDynmap.java @@ -0,0 +1,780 @@ +package com.massivecraft.factions.integration.dynmap; + +import com.massivecraft.factions.*; +import com.massivecraft.factions.integration.Econ; +import com.massivecraft.factions.struct.Role; +import com.massivecraft.factions.zcore.persist.MemoryBoard; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.plugin.Plugin; +import org.dynmap.DynmapAPI; +import org.dynmap.markers.*; +import org.dynmap.utils.TileFlags; + +import java.util.*; +import java.util.Map.Entry; + +// This source code is a heavily modified version of mikeprimms plugin Dynmap-Factions. +public class EngineDynmap { + // -------------------------------------------- // + // CONSTANTS + // -------------------------------------------- // + + public final static int BLOCKS_PER_CHUNK = 16; + + public final static String DYNMAP_INTEGRATION = "\u00A7dDynmap Integration: \u00A7e"; + + public final static String FACTIONS = "factions"; + public final static String FACTIONS_ = FACTIONS + "_"; + + public final static String FACTIONS_MARKERSET = FACTIONS_ + "markerset"; + + public final static String FACTIONS_HOME = FACTIONS_ + "home"; + public final static String FACTIONS_HOME_ = FACTIONS_HOME + "_"; + + public final static String FACTIONS_PLAYERSET = FACTIONS_ + "playerset"; + public final static String FACTIONS_PLAYERSET_ = FACTIONS_PLAYERSET + "_"; + + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static EngineDynmap i = new EngineDynmap(); + + public static EngineDynmap getInstance() { + return i; + } + + private EngineDynmap() { + } + + public DynmapAPI dynmapApi; + public MarkerAPI markerApi; + public MarkerSet markerset; + + public void init() { + Plugin dynmap = Bukkit.getServer().getPluginManager().getPlugin("dynmap"); + + if (dynmap == null || !dynmap.isEnabled()) { + return; + } + + // Should we even use dynmap? + if (!Conf.dynmapUse) { + if (this.markerset != null) { + this.markerset.deleteMarkerSet(); + this.markerset = null; + } + return; + } + + // Shedule non thread safe sync at the end! + Bukkit.getScheduler().scheduleSyncRepeatingTask(P.p, new Runnable() { + @Override + public void run() { + + final Map homes = createHomes(); + final Map areas = createAreas(); + final Map> playerSets = createPlayersets(); + + if (!updateCore()) { + return; + } + + // createLayer() is thread safe but it makes use of fields set in updateCore() so we must have it after. + if (!updateLayer(createLayer())) { + return; + } + + updateHomes(homes); + updateAreas(areas); + updatePlayersets(playerSets); + } + }, 100L, 100L); + } + + // Thread Safe / Asynchronous: No + public boolean updateCore() { + // Get DynmapAPI + this.dynmapApi = (DynmapAPI) Bukkit.getPluginManager().getPlugin("dynmap"); + if (this.dynmapApi == null) { + severe("Could not retrieve the DynmapAPI."); + return false; + } + + // Get MarkerAPI + this.markerApi = this.dynmapApi.getMarkerAPI(); + if (this.markerApi == null) { + severe("Could not retrieve the MarkerAPI."); + return false; + } + + return true; + } + + // Thread Safe / Asynchronous: Yes + public TempMarkerSet createLayer() { + TempMarkerSet ret = new TempMarkerSet(); + ret.label = Conf.dynmapLayerName; + ret.minimumZoom = Conf.dynmapLayerMinimumZoom; + ret.priority = Conf.dynmapLayerPriority; + ret.hideByDefault = !Conf.dynmapLayerVisible; + return ret; + } + + // Thread Safe / Asynchronous: No + public boolean updateLayer(TempMarkerSet temp) { + this.markerset = this.markerApi.getMarkerSet(FACTIONS_MARKERSET); + if (this.markerset == null) { + this.markerset = temp.create(this.markerApi, FACTIONS_MARKERSET); + if (this.markerset == null) { + severe("Could not create the Faction Markerset/Layer"); + return false; + } + } else { + temp.update(this.markerset); + } + return true; + } + + // -------------------------------------------- // + // UPDATE: HOMES + // -------------------------------------------- // + + // Thread Safe / Asynchronous: Yes + public Map createHomes() { + Map ret = new HashMap(); + + // Loop current factions + for (Faction faction : Factions.getInstance().getAllFactions()) { + Location ps = faction.getHome(); + if (ps == null) { + continue; + } + + DynmapStyle style = getStyle(faction); + + String markerId = FACTIONS_HOME_ + faction.getId(); + + TempMarker temp = new TempMarker(); + temp.label = ChatColor.stripColor(faction.getTag()); + temp.world = ps.getWorld().toString(); + temp.x = ps.getX(); + temp.y = ps.getY(); + temp.z = ps.getZ(); + temp.iconName = style.getHomeMarker(); + temp.description = getDescription(faction); + + ret.put(markerId, temp); + } + + return ret; + } + + // Thread Safe / Asynchronous: No + // This method places out the faction home markers into the factions markerset. + public void updateHomes(Map homes) { + // Put all current faction markers in a map + Map markers = new HashMap(); + for (Marker marker : this.markerset.getMarkers()) { + markers.put(marker.getMarkerID(), marker); + } + + // Loop homes + for (Entry entry : homes.entrySet()) { + String markerId = entry.getKey(); + TempMarker temp = entry.getValue(); + + // Get Creative + // NOTE: I remove from the map created just in the beginning of this method. + // NOTE: That way what is left at the end will be outdated markers to remove. + Marker marker = markers.remove(markerId); + if (marker == null) { + marker = temp.create(this.markerApi, this.markerset, markerId); + if (marker == null) { + EngineDynmap.severe("Could not get/create the home marker " + markerId); + } + } else { + temp.update(this.markerApi, marker); + } + } + + // Delete Deprecated Markers + // Only old markers should now be left + for (Marker marker : markers.values()) { + marker.deleteMarker(); + } + } + + // -------------------------------------------- // + // UPDATE: AREAS + // -------------------------------------------- // + + // Thread Safe: YES + public Map createAreas() { + Map>> worldFactionChunks = createWorldFactionChunks(); + return createAreas(worldFactionChunks); + } + + // Thread Safe: YES + public Map>> createWorldFactionChunks() { + // Create map "world name --> faction --> set of chunk coords" + Map>> worldFactionChunks = new HashMap>>(); + + // Note: The board is the world. The board id is the world name. + MemoryBoard board = (MemoryBoard) Board.getInstance(); + + for (Entry entry : board.flocationIds.entrySet()) { + String world = entry.getKey().getWorldName(); + Faction chunkOwner = Factions.getInstance().getFactionById(entry.getValue()); + + Map> factionChunks = worldFactionChunks.get(world); + if (factionChunks == null) { + factionChunks = new HashMap>(); + worldFactionChunks.put(world, factionChunks); + } + + Set factionTerritory = factionChunks.get(chunkOwner); + if (factionTerritory == null) { + factionTerritory = new HashSet(); + factionChunks.put(chunkOwner, factionTerritory); + } + + factionTerritory.add(entry.getKey()); + } + + return worldFactionChunks; + } + + // Thread Safe: YES + public Map createAreas(Map>> worldFactionChunks) { + Map ret = new HashMap(); + + // For each world + for (Entry>> entry : worldFactionChunks.entrySet()) { + String world = entry.getKey(); + Map> factionChunks = entry.getValue(); + + // For each faction and its chunks in that world + for (Entry> entry1 : factionChunks.entrySet()) { + Faction faction = entry1.getKey(); + Set chunks = entry1.getValue(); + Map worldFactionMarkers = createAreas(world, faction, chunks); + ret.putAll(worldFactionMarkers); + } + } + + return ret; + } + + // Thread Safe: YES + // Handle specific faction on specific world + // "handle faction on world" + public Map createAreas(String world, Faction faction, Set chunks) { + Map ret = new HashMap(); + + // If the faction is visible ... + if (!isVisible(faction, world)) { + return ret; + } + + // ... and has any chunks ... + if (chunks.isEmpty()) { + return ret; + } + + // Index of polygon for given faction + int markerIndex = 0; + + // Create the info window + String description = getDescription(faction); + + // Fetch Style + DynmapStyle style = this.getStyle(faction); + + // Loop through chunks: set flags on chunk map + TileFlags allChunkFlags = new TileFlags(); + LinkedList allChunks = new LinkedList(); + for (FLocation chunk : chunks) { + allChunkFlags.setFlag((int) chunk.getX(), (int) chunk.getZ(), true); // Set flag for chunk + allChunks.addLast(chunk); + } + + // Loop through until we don't find more areas + while (allChunks != null) { + TileFlags ourChunkFlags = null; + LinkedList ourChunks = null; + LinkedList newChunks = null; + + int minimumX = Integer.MAX_VALUE; + int minimumZ = Integer.MAX_VALUE; + for (FLocation chunk : allChunks) { + int chunkX = (int) chunk.getX(); + int chunkZ = (int) chunk.getZ(); + + // If we need to start shape, and this block is not part of one yet + if (ourChunkFlags == null && allChunkFlags.getFlag(chunkX, chunkZ)) { + ourChunkFlags = new TileFlags(); // Create map for shape + ourChunks = new LinkedList(); + floodFillTarget(allChunkFlags, ourChunkFlags, chunkX, chunkZ); // Copy shape + ourChunks.add(chunk); // Add it to our chunk list + minimumX = chunkX; + minimumZ = chunkZ; + } + // If shape found, and we're in it, add to our node list + else if (ourChunkFlags != null && ourChunkFlags.getFlag(chunkX, chunkZ)) { + ourChunks.add(chunk); + if (chunkX < minimumX) { + minimumX = chunkX; + minimumZ = chunkZ; + } else if (chunkX == minimumX && chunkZ < minimumZ) { + minimumZ = chunkZ; + } + } + // Else, keep it in the list for the next polygon + else { + if (newChunks == null) { + newChunks = new LinkedList(); + } + newChunks.add(chunk); + } + } + + // Replace list (null if no more to process) + allChunks = newChunks; + + if (ourChunkFlags == null) { + continue; + } + + // Trace outline of blocks - start from minx, minz going to x+ + int initialX = minimumX; + int initialZ = minimumZ; + int currentX = minimumX; + int currentZ = minimumZ; + Direction direction = Direction.XPLUS; + ArrayList linelist = new ArrayList(); + linelist.add(new int[]{initialX, initialZ}); // Add start point + while ((currentX != initialX) || (currentZ != initialZ) || (direction != Direction.ZMINUS)) { + switch (direction) { + case XPLUS: // Segment in X+ direction + if (!ourChunkFlags.getFlag(currentX + 1, currentZ)) { // Right turn? + linelist.add(new int[]{currentX + 1, currentZ}); // Finish line + direction = Direction.ZPLUS; // Change direction + } else if (!ourChunkFlags.getFlag(currentX + 1, currentZ - 1)) { // Straight? + currentX++; + } else { // Left turn + linelist.add(new int[]{currentX + 1, currentZ}); // Finish line + direction = Direction.ZMINUS; + currentX++; + currentZ--; + } + break; + case ZPLUS: // Segment in Z+ direction + if (!ourChunkFlags.getFlag(currentX, currentZ + 1)) { // Right turn? + linelist.add(new int[]{currentX + 1, currentZ + 1}); // Finish line + direction = Direction.XMINUS; // Change direction + } else if (!ourChunkFlags.getFlag(currentX + 1, currentZ + 1)) { // Straight? + currentZ++; + } else { // Left turn + linelist.add(new int[]{currentX + 1, currentZ + 1}); // Finish line + direction = Direction.XPLUS; + currentX++; + currentZ++; + } + break; + case XMINUS: // Segment in X- direction + if (!ourChunkFlags.getFlag(currentX - 1, currentZ)) { // Right turn? + linelist.add(new int[]{currentX, currentZ + 1}); // Finish line + direction = Direction.ZMINUS; // Change direction + } else if (!ourChunkFlags.getFlag(currentX - 1, currentZ + 1)) { // Straight? + currentX--; + } else { // Left turn + linelist.add(new int[]{currentX, currentZ + 1}); // Finish line + direction = Direction.ZPLUS; + currentX--; + currentZ++; + } + break; + case ZMINUS: // Segment in Z- direction + if (!ourChunkFlags.getFlag(currentX, currentZ - 1)) { // Right turn? + linelist.add(new int[]{currentX, currentZ}); // Finish line + direction = Direction.XPLUS; // Change direction + } else if (!ourChunkFlags.getFlag(currentX - 1, currentZ - 1)) { // Straight? + currentZ--; + } else { // Left turn + linelist.add(new int[]{currentX, currentZ}); // Finish line + direction = Direction.XMINUS; + currentX--; + currentZ--; + } + break; + } + } + + int sz = linelist.size(); + double[] x = new double[sz]; + double[] z = new double[sz]; + for (int i = 0; i < sz; i++) { + int[] line = linelist.get(i); + x[i] = (double) line[0] * (double) BLOCKS_PER_CHUNK; + z[i] = (double) line[1] * (double) BLOCKS_PER_CHUNK; + } + + // Build information for specific area + String markerId = FACTIONS_ + world + "__" + faction.getId() + "__" + markerIndex; + + TempAreaMarker temp = new TempAreaMarker(); + temp.label = faction.getTag(); + temp.world = world; + temp.x = x; + temp.z = z; + temp.description = description; + + temp.lineColor = style.getLineColor(); + temp.lineOpacity = style.getLineOpacity(); + temp.lineWeight = style.getLineWeight(); + + temp.fillColor = style.getFillColor(); + temp.fillOpacity = style.getFillOpacity(); + + temp.boost = style.getBoost(); + + ret.put(markerId, temp); + + markerIndex++; + } + + return ret; + } + + // Thread Safe: NO + public void updateAreas(Map areas) { + // Map Current + Map markers = new HashMap(); + for (AreaMarker marker : this.markerset.getAreaMarkers()) { + markers.put(marker.getMarkerID(), marker); + } + + // Loop New + for (Entry entry : areas.entrySet()) { + String markerId = entry.getKey(); + TempAreaMarker temp = entry.getValue(); + + // Get Creative + // NOTE: I remove from the map created just in the beginning of this method. + // NOTE: That way what is left at the end will be outdated markers to remove. + AreaMarker marker = markers.remove(markerId); + if (marker == null) { + marker = temp.create(this.markerset, markerId); + if (marker == null) { + severe("Could not get/create the area marker " + markerId); + } + } else { + temp.update(marker); + } + } + + // Only old/outdated should now be left. Delete them. + for (AreaMarker marker : markers.values()) { + marker.deleteMarker(); + } + } + + // -------------------------------------------- // + // UPDATE: PLAYERSET + // -------------------------------------------- // + + // Thread Safe / Asynchronous: Yes + public String createPlayersetId(Faction faction) { + if (faction == null) { + return null; + } + if (faction.isWilderness()) { + return null; + } + String factionId = faction.getId(); + if (factionId == null) { + return null; + } + return FACTIONS_PLAYERSET_ + factionId; + } + + // Thread Safe / Asynchronous: Yes + public Set createPlayerset(Faction faction) { + if (faction == null) { + return null; + } + if (faction.isWilderness()) { + return null; + } + + Set ret = new HashSet(); + + for (FPlayer fplayer : faction.getFPlayers()) { + // NOTE: We add both UUID and name. This might be a good idea for future proofing. + ret.add(fplayer.getId()); + ret.add(fplayer.getName()); + } + + return ret; + } + + // Thread Safe / Asynchronous: Yes + public Map> createPlayersets() { + if (!Conf.dynmapVisibilityByFaction) { + return null; + } + + Map> ret = new HashMap>(); + + for (Faction faction : Factions.getInstance().getAllFactions()) { + String playersetId = createPlayersetId(faction); + if (playersetId == null) { + continue; + } + Set playerIds = createPlayerset(faction); + if (playerIds == null) { + continue; + } + ret.put(playersetId, playerIds); + } + + return ret; + } + + // Thread Safe / Asynchronous: No + public void updatePlayersets(Map> playersets) { + if (playersets == null) { + return; + } + + // Remove + for (PlayerSet set : this.markerApi.getPlayerSets()) { + if (!set.getSetID().startsWith(FACTIONS_PLAYERSET_)) { + continue; + } + + // (Null means remove all) + if (playersets.containsKey(set.getSetID())) { + continue; + } + + set.deleteSet(); + } + + // Add / Update + for (Entry> entry : playersets.entrySet()) { + // Extract from Entry + String setId = entry.getKey(); + Set playerIds = entry.getValue(); + + // Get Creatively + PlayerSet set = this.markerApi.getPlayerSet(setId); + if (set == null) { + set = this.markerApi.createPlayerSet(setId, // id + true, // symmetric + playerIds, // players + false // persistent + ); + } + if (set == null) { + severe("Could not get/create the player set " + setId); + continue; + } + + // Set Content + set.setPlayers(playerIds); + } + } + + // -------------------------------------------- // + // UTIL & SHARED + // -------------------------------------------- // + + // Thread Safe / Asynchronous: Yes + private String getDescription(Faction faction) { + String ret = "

"; + + // Name + String name = faction.getTag(); + name = ChatColor.stripColor(name); + name = escapeHtml(name); + ret = ret.replace("%name%", name); + + // Description + String description = faction.getDescription(); + description = ChatColor.stripColor(description); + description = escapeHtml(description); + ret = ret.replace("%description%", description); + + // Money + + String money = "unavailable"; + if (Conf.bankEnabled && Conf.dynmapDescriptionMoney) { + money = String.format("%.2f", Econ.getBalance(faction.getAccountId())); + } + ret = ret.replace("%money%", money); + + + // Players + Set playersList = faction.getFPlayers(); + String playersCount = String.valueOf(playersList.size()); + String players = getHtmlPlayerString(playersList); + + FPlayer playersLeaderObject = faction.getFPlayerAdmin(); + String playersLeader = getHtmlPlayerName(playersLeaderObject); + + ArrayList playersAdminsList = faction.getFPlayersWhereRole(Role.ADMIN); + String playersAdminsCount = String.valueOf(playersAdminsList.size()); + String playersAdmins = getHtmlPlayerString(playersAdminsList); + + ArrayList playersModeratorsList = faction.getFPlayersWhereRole(Role.MODERATOR); + String playersModeratorsCount = String.valueOf(playersModeratorsList.size()); + String playersModerators = getHtmlPlayerString(playersModeratorsList); + + + ArrayList playersNormalsList = faction.getFPlayersWhereRole(Role.NORMAL); + String playersNormalsCount = String.valueOf(playersNormalsList.size()); + String playersNormals = getHtmlPlayerString(playersNormalsList); + + + ret = ret.replace("%players%", players); + ret = ret.replace("%players.count%", playersCount); + ret = ret.replace("%players.leader%", playersLeader); + ret = ret.replace("%players.admins%", playersAdmins); + ret = ret.replace("%players.admins.count%", playersAdminsCount); + ret = ret.replace("%players.moderators%", playersModerators); + ret = ret.replace("%players.moderators.count%", playersModeratorsCount); + ret = ret.replace("%players.normals%", playersNormals); + ret = ret.replace("%players.normals.count%", playersNormalsCount); + + return ret; + } + + public static String getHtmlPlayerString(Collection playersOfficersList) { + String ret = ""; + for (FPlayer fplayer : playersOfficersList) { + if (ret.length() > 0) { + ret += ", "; + } + ret += getHtmlPlayerName(fplayer); + } + return ret; + } + + public static String getHtmlPlayerName(FPlayer fplayer) { + if (fplayer == null) { + return "none"; + } + return escapeHtml(fplayer.getName()); + } + + public static String escapeHtml(String string) { + StringBuilder out = new StringBuilder(Math.max(16, string.length())); + for (int i = 0; i < string.length(); i++) { + char c = string.charAt(i); + if (c > 127 || c == '"' || c == '<' || c == '>' || c == '&') { + out.append("&#"); + out.append((int) c); + out.append(';'); + } else { + out.append(c); + } + } + return out.toString(); + } + + // Thread Safe / Asynchronous: Yes + private boolean isVisible(Faction faction, String world) { + if (faction == null) { + return false; + } + final String factionId = faction.getId(); + if (factionId == null) { + return false; + } + final String factionName = faction.getTag(); + if (factionName == null) { + return false; + } + + Set visible = Conf.dynmapVisibleFactions; + Set hidden = Conf.dynmapHiddenFactions; + + if (!visible.isEmpty() && !visible.contains(factionId) && !visible.contains(factionName) && !visible.contains("world:" + world)) { + return false; + } + + if (hidden.contains(factionId) || hidden.contains(factionName) || hidden.contains("world:" + world)) { + return false; + } + + return true; + } + + // Thread Safe / Asynchronous: Yes + public DynmapStyle getStyle(Faction faction) { + DynmapStyle ret; + + ret = Conf.dynmapFactionStyles.get(faction.getId()); + if (ret != null) { + return ret; + } + + ret = Conf.dynmapFactionStyles.get(faction.getTag()); + if (ret != null) { + return ret; + } + + return Conf.dynmapDefaultStyle; + } + + // Thread Safe / Asynchronous: Yes + public static void info(String msg) { + String message = DYNMAP_INTEGRATION + msg; + System.out.println(message); + } + + // Thread Safe / Asynchronous: Yes + public static void severe(String msg) { + String message = DYNMAP_INTEGRATION + ChatColor.RED.toString() + msg; + System.out.println(message); + } + + enum Direction { + XPLUS, ZPLUS, XMINUS, ZMINUS + } + + // Find all contiguous blocks, set in target and clear in source + private int floodFillTarget(TileFlags source, TileFlags destination, int x, int y) { + int cnt = 0; + ArrayDeque stack = new ArrayDeque(); + stack.push(new int[]{x, y}); + + while (!stack.isEmpty()) { + int[] nxt = stack.pop(); + x = nxt[0]; + y = nxt[1]; + if (source.getFlag(x, y)) { // Set in src + source.setFlag(x, y, false); // Clear source + destination.setFlag(x, y, true); // Set in destination + cnt++; + if (source.getFlag(x + 1, y)) { + stack.push(new int[]{x + 1, y}); + } + if (source.getFlag(x - 1, y)) { + stack.push(new int[]{x - 1, y}); + } + if (source.getFlag(x, y + 1)) { + stack.push(new int[]{x, y + 1}); + } + if (source.getFlag(x, y - 1)) { + stack.push(new int[]{x, y - 1}); + } + } + } + return cnt; + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/integration/dynmap/TempAreaMarker.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/integration/dynmap/TempAreaMarker.java new file mode 100644 index 0000000..f03dff6 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/integration/dynmap/TempAreaMarker.java @@ -0,0 +1,116 @@ +package com.massivecraft.factions.integration.dynmap; + +import org.dynmap.markers.AreaMarker; +import org.dynmap.markers.MarkerSet; + +public class TempAreaMarker { + // -------------------------------------------- // + // FIELDS + // -------------------------------------------- // + + public String label; + public String world; + public double x[]; + public double z[]; + public String description; + + public int lineColor; + public double lineOpacity; + public int lineWeight; + + public int fillColor; + public double fillOpacity; + + public boolean boost; + + // -------------------------------------------- // + // CREATE + // -------------------------------------------- // + + public AreaMarker create(MarkerSet markerset, String markerId) { + AreaMarker ret = markerset.createAreaMarker(markerId, this.label, false, this.world, this.x, this.z, false // not persistent + ); + + if (ret == null) { + return null; + } + + // Description + ret.setDescription(this.description); + + // Line Style + ret.setLineStyle(this.lineWeight, this.lineOpacity, this.lineColor); + + // Fill Style + ret.setFillStyle(this.fillOpacity, this.fillColor); + + // Boost Flag + ret.setBoostFlag(this.boost); + + return ret; + } + + // -------------------------------------------- // + // UPDATE + // -------------------------------------------- // + + public void update(AreaMarker marker) { + // Corner Locations + if (!equals(marker, this.x, this.z)) { + marker.setCornerLocations(this.x, this.z); + } + + // Label + if (!marker.getLabel().equals(this.label)) { + marker.setLabel(this.label); + } + + // Description + if (!marker.getDescription().equals(this.description)) { + marker.setDescription(this.description); + } + + // Line Style + if (marker.getLineWeight() != this.lineWeight || + marker.getLineOpacity() != this.lineOpacity || + marker.getLineColor() != this.lineColor) { + marker.setLineStyle(this.lineWeight, this.lineOpacity, this.lineColor); + } + + // Fill Style + if ((marker.getFillOpacity() != this.fillOpacity) || (marker.getFillColor() != this.fillColor)) { + marker.setFillStyle(this.fillOpacity, this.fillColor); + } + // Boost Flag + if (marker.getBoostFlag() != this.boost) { + marker.setBoostFlag(this.boost); + } + } + + // -------------------------------------------- // + // UTIL + // -------------------------------------------- // + + public static boolean equals(AreaMarker marker, double x[], double z[]) { + int length = marker.getCornerCount(); + + if (x.length != length) { + return false; + } + if (z.length != length) { + return false; + } + + for (int i = 0; i < length; i++) { + if (marker.getCornerX(i) != x[i]) { + return false; + } + if (marker.getCornerZ(i) != z[i]) { + return false; + } + } + + return true; + } + +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/integration/dynmap/TempMarker.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/integration/dynmap/TempMarker.java new file mode 100644 index 0000000..ee3bbd5 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/integration/dynmap/TempMarker.java @@ -0,0 +1,74 @@ +package com.massivecraft.factions.integration.dynmap; + +import com.massivecraft.factions.Conf; +import org.dynmap.markers.Marker; +import org.dynmap.markers.MarkerAPI; +import org.dynmap.markers.MarkerIcon; +import org.dynmap.markers.MarkerSet; + +public class TempMarker { + // -------------------------------------------- // + // FIELDS + // -------------------------------------------- // + + public String label; + public String world; + public double x; + public double y; + public double z; + public String iconName; + public String description; + + // -------------------------------------------- // + // CREATE + // -------------------------------------------- // + + public Marker create(MarkerAPI markerApi, MarkerSet markerset, String markerId) { + Marker ret = markerset.createMarker(markerId, this.label, this.world, this.x, this.y, this.z, getMarkerIcon(markerApi, this.iconName), false // not persistent + ); + + if (ret == null) { + return null; + } + + ret.setDescription(this.description); + + return ret; + } + + // -------------------------------------------- // + // UPDATE + // -------------------------------------------- // + + public void update(MarkerAPI markerApi, Marker marker) { + if (!this.world.equals(marker.getWorld()) || this.x != marker.getX() || this.y != marker.getY() || this.z != marker.getZ()) { + marker.setLocation(this.world, this.x, this.y, this.z); + } + + if (!marker.getLabel().equals(this.label)) { + marker.setLabel(this.label); + } + + MarkerIcon icon = getMarkerIcon(markerApi, this.iconName); + if (marker.getMarkerIcon() == null || marker.getMarkerIcon().equals(icon)) { + marker.setMarkerIcon(icon); + } + + if (!marker.getDescription().equals(this.description)) { + marker.setDescription(this.description); + } + } + + // -------------------------------------------- // + // UTIL + // -------------------------------------------- // + + public static MarkerIcon getMarkerIcon(MarkerAPI markerApi, String name) { + MarkerIcon ret = markerApi.getMarkerIcon(name); + if (ret == null) { + ret = markerApi.getMarkerIcon(Conf.DYNMAP_STYLE_HOME_MARKER); + } + return ret; + } + +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/integration/dynmap/TempMarkerSet.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/integration/dynmap/TempMarkerSet.java new file mode 100644 index 0000000..553bbde --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/integration/dynmap/TempMarkerSet.java @@ -0,0 +1,55 @@ +package com.massivecraft.factions.integration.dynmap; + +import org.dynmap.markers.MarkerAPI; +import org.dynmap.markers.MarkerSet; + +public class TempMarkerSet { + + public String label; + public int minimumZoom; + public int priority; + public boolean hideByDefault; + + public MarkerSet create(MarkerAPI markerApi, String id) { + MarkerSet ret = markerApi.createMarkerSet(id, this.label, null, false); // ("null, false" at the end means "all icons allowed, not perisistent") + + if (ret == null) { + return null; + } + + // Minimum Zoom + if (this.minimumZoom > 0) { + ret.setMinZoom(this.minimumZoom); + } + + // Priority + ret.setLayerPriority(this.priority); + + // Hide by Default + ret.setHideByDefault(this.hideByDefault); + + return ret; + } + + public void update(MarkerSet markerset) { + // Name + if (!markerset.getMarkerSetLabel().equals(this.label)) { + markerset.setMarkerSetLabel(this.label); + } + + if (this.minimumZoom > 0) { + if (markerset.getMinZoom() != this.minimumZoom) { + markerset.setMinZoom(this.minimumZoom); + } + } + + if (markerset.getLayerPriority() != this.priority) { + markerset.setLayerPriority(this.priority); + } + + if (markerset.getHideByDefault() != this.hideByDefault) { + markerset.setHideByDefault(this.hideByDefault); + } + } + +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/listeners/FactionsBlockListener.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/listeners/FactionsBlockListener.java new file mode 100644 index 0000000..061e34c --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/listeners/FactionsBlockListener.java @@ -0,0 +1,308 @@ +package com.massivecraft.factions.listeners; + +import com.massivecraft.factions.*; +import com.massivecraft.factions.event.LandClaimEvent; +import com.massivecraft.factions.integration.Worldguard; +import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.struct.Relation; +import net.grandtheftmc.core.util.Utils; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.block.*; + + +public class FactionsBlockListener implements Listener { + + public P p; + + public FactionsBlockListener(P p) { + this.p = p; + } + + @EventHandler + public void onLandClaim(LandClaimEvent event) { + FPlayer player = event.getfPlayer(); + if(player.getPlayer().getWorld().getName().equalsIgnoreCase("spawn") && !player.getPlayer().isOp()) { + event.setCancelled(true); + Utils.f("&c&l Cartels&8&l> &cYou cannot claim in spawn area!"); + } + } + + @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) + public void onBlockPlace(BlockPlaceEvent event) { + if (!event.canBuild()) { + return; + } + + // special case for flint&steel, which should only be prevented by DenyUsage list + if (event.getBlockPlaced().getType() == Material.FIRE) { + return; + } + + if (!playerCanBuildDestroyBlock(event.getPlayer(), event.getBlock().getLocation(), "build", false)) { + event.setCancelled(true); + } + } + + @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) + public void onBlockFromTo(BlockFromToEvent event) { + if (!Conf.handleExploitLiquidFlow) { + return; + } + if (event.getBlock().isLiquid()) { + if (event.getToBlock().isEmpty()) { + Faction from = Board.getInstance().getFactionAt(new FLocation(event.getBlock())); + Faction to = Board.getInstance().getFactionAt(new FLocation(event.getToBlock())); + if (from == to) { + // not concerned with inter-faction events + return; + } + // from faction != to faction + if (to.isNormal()) { + if (from.isNormal() && from.getRelationTo(to).isAlly()) { + return; + } + event.setCancelled(true); + } + } + } + } + + @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) + public void onBlockBreak(BlockBreakEvent event) { + if (!playerCanBuildDestroyBlock(event.getPlayer(), event.getBlock().getLocation(), "destroy", false)) { + event.setCancelled(true); + } + } + + @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) + public void onBlockDamage(BlockDamageEvent event) { + if (event.getInstaBreak() && !playerCanBuildDestroyBlock(event.getPlayer(), event.getBlock().getLocation(), "destroy", false)) { + event.setCancelled(true); + } + } + + @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) + public void onBlockPistonExtend(BlockPistonExtendEvent event) { + if (!Conf.pistonProtectionThroughDenyBuild) { + return; + } + + Faction pistonFaction = Board.getInstance().getFactionAt(new FLocation(event.getBlock())); + + // target end-of-the-line empty (air) block which is being pushed into, including if piston itself would extend into air + Block targetBlock = event.getBlock().getRelative(event.getDirection(), event.getLength() + 1); + + // if potentially pushing into air/water/lava in another territory, we need to check it out + if ((targetBlock.isEmpty() || targetBlock.isLiquid()) && !canPistonMoveBlock(pistonFaction, targetBlock.getLocation())) { + event.setCancelled(true); + return; + } + + /* + * note that I originally was testing the territory of each affected block, but since I found that pistons can only push + * up to 12 blocks and the width of any territory is 16 blocks, it should be safe (and much more lightweight) to test + * only the final target block as done above + */ + } + + @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) + public void onBlockPistonRetract(BlockPistonRetractEvent event) { + // if not a sticky piston, retraction should be fine + if (!event.isSticky() || !Conf.pistonProtectionThroughDenyBuild) { + return; + } + + Location targetLoc = event.getRetractLocation(); + Faction otherFaction = Board.getInstance().getFactionAt(new FLocation(targetLoc)); + + // Check if the piston is moving in a faction's territory. This disables pistons entirely in faction territory. + if (otherFaction.isNormal() && P.p.getConfig().getBoolean("disable-pistons-in-territory", false)) { + event.setCancelled(true); + return; + } + + // if potentially retracted block is just air/water/lava, no worries + if (targetLoc.getBlock().isEmpty() || targetLoc.getBlock().isLiquid()) { + return; + } + + Faction pistonFaction = Board.getInstance().getFactionAt(new FLocation(event.getBlock())); + + if (!canPistonMoveBlock(pistonFaction, targetLoc)) { + event.setCancelled(true); + return; + } + } + + @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) + public void onFrostWalker(EntityBlockFormEvent event) { + if (event.getEntity() == null || event.getEntity().getType() != EntityType.PLAYER || event.getBlock() == null) { + return; + } + + Player player = (Player) event.getEntity(); + Location location = event.getBlock().getLocation(); + + // only notify every 10 seconds + FPlayer fPlayer = FPlayers.getInstance().getByPlayer(player); + boolean justCheck = fPlayer.getLastFrostwalkerMessage() + 10000 > System.currentTimeMillis(); + if (!justCheck) { + fPlayer.setLastFrostwalkerMessage(); + } + + // Check if they have build permissions here. If not, block this from happening. + if (!playerCanBuildDestroyBlock(player, location, "frost walk", justCheck)) { + event.setCancelled(true); + } + } + + private boolean canPistonMoveBlock(Faction pistonFaction, Location target) { + + Faction otherFaction = Board.getInstance().getFactionAt(new FLocation(target)); + + if (pistonFaction == otherFaction) { + return true; + } + + if (otherFaction.isWilderness()) { + if (!Conf.wildernessDenyBuild || Conf.worldsNoWildernessProtection.contains(target.getWorld().getName())) { + return true; + } + + return false; + } else if (otherFaction.isSafeZone()) { + if (!Conf.safeZoneDenyBuild) { + return true; + } + + return false; + } else if (otherFaction.isWarZone()) { + if (!Conf.warZoneDenyBuild) { + return true; + } + + return false; + } + + Relation rel = pistonFaction.getRelationTo(otherFaction); + + if (rel.confDenyBuild(otherFaction.hasPlayersOnline())) { + return false; + } + + return true; + } + + public static boolean playerCanBuildDestroyBlock(Player player, Location location, String action, boolean justCheck) { + String name = player.getName(); + if (Conf.playersWhoBypassAllProtection.contains(name)) { + return true; + } + + FPlayer me = FPlayers.getInstance().getById(player.getUniqueId().toString()); + if (me.isAdminBypassing()) { + return true; + } + + FLocation loc = new FLocation(location); + Faction otherFaction = Board.getInstance().getFactionAt(loc); + + if (otherFaction.isWilderness()) { + if (Conf.worldGuardBuildPriority && Worldguard.playerCanBuild(player, location)) { + return true; + } + + if (!Conf.wildernessDenyBuild || Conf.worldsNoWildernessProtection.contains(location.getWorld().getName())) { + return true; // This is not faction territory. Use whatever you like here. + } + + if (!justCheck) { + me.msg("You can't " + action + " in the wilderness."); + } + + return false; + } else if (otherFaction.isSafeZone()) { + if (Conf.worldGuardBuildPriority && Worldguard.playerCanBuild(player, location)) { + return true; + } + + if (!Conf.safeZoneDenyBuild || Permission.MANAGE_SAFE_ZONE.has(player)) { + return true; + } + + if (!justCheck) { + me.msg("You can't " + action + " in a safe zone."); + } + + return false; + } else if (otherFaction.isWarZone()) { + if (Conf.worldGuardBuildPriority && Worldguard.playerCanBuild(player, location)) { + return true; + } + + if (!Conf.warZoneDenyBuild || Permission.MANAGE_WAR_ZONE.has(player)) { + return true; + } + + if (!justCheck) { + me.msg("You can't " + action + " in a war zone."); + } + + return false; + } + if (P.p.getConfig().getBoolean("hcf.raidable", false) && otherFaction.getLandRounded() >= otherFaction.getPowerRounded()) { + return true; + } + + Faction myFaction = me.getFaction(); + Relation rel = myFaction.getRelationTo(otherFaction); + boolean online = otherFaction.hasPlayersOnline(); + boolean pain = !justCheck && rel.confPainBuild(online); + boolean deny = rel.confDenyBuild(online); + + // hurt the player for building/destroying in other territory? + if (pain) { + player.damage(Conf.actionDeniedPainAmount); + + if (!deny) { + me.msg("It is painful to try to " + action + " in the territory of " + otherFaction.getTag(myFaction)); + } + } + + // cancel building/destroying in other territory? + if (deny) { + if (!justCheck) { + me.msg("You can't " + action + " in the territory of " + otherFaction.getTag(myFaction)); + } + + return false; + } + + // Also cancel and/or cause pain if player doesn't have ownership rights for this claim + if (Conf.ownedAreasEnabled && (Conf.ownedAreaDenyBuild || Conf.ownedAreaPainBuild) && !otherFaction.playerHasOwnershipRights(me, loc)) { + if (!pain && Conf.ownedAreaPainBuild && !justCheck) { + player.damage(Conf.actionDeniedPainAmount); + + if (!Conf.ownedAreaDenyBuild) { + me.msg("It is painful to try to " + action + " in this territory, it is owned by: " + otherFaction.getOwnerListString(loc)); + } + } + if (Conf.ownedAreaDenyBuild) { + if (!justCheck) { + me.msg("You can't " + action + " in this territory, it is owned by: " + otherFaction.getOwnerListString(loc)); + } + + return false; + } + } + + return true; + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/listeners/FactionsChatListener.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/listeners/FactionsChatListener.java new file mode 100644 index 0000000..00d2513 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/listeners/FactionsChatListener.java @@ -0,0 +1,164 @@ +package com.massivecraft.factions.listeners; + +import com.massivecraft.factions.*; +import com.massivecraft.factions.struct.ChatMode; +import com.massivecraft.factions.struct.Relation; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.player.AsyncPlayerChatEvent; + +import java.util.UnknownFormatConversionException; +import java.util.logging.Level; + + +public class FactionsChatListener implements Listener { + + public P p; + + public FactionsChatListener(P p) { + this.p = p; + } + + // this is for handling slashless command usage and faction/alliance chat, set at lowest priority so Factions gets to them first + @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) + public void onPlayerEarlyChat(AsyncPlayerChatEvent event) { + Player talkingPlayer = event.getPlayer(); + String msg = event.getMessage(); + FPlayer me = FPlayers.getInstance().getByPlayer(talkingPlayer); + ChatMode chat = me.getChatMode(); + + // Is it a faction chat message? + if (chat == ChatMode.FACTION) { + Faction myFaction = me.getFaction(); + + String message = String.format(Conf.factionChatFormat, me.describeTo(myFaction), msg); + myFaction.sendMessage(message); + + Bukkit.getLogger().log(Level.INFO, ChatColor.stripColor("CartelChat " + myFaction.getTag() + ": " + message)); + + //Send to any players who are spying chat + for (FPlayer fplayer : FPlayers.getInstance().getOnlinePlayers()) { + if (fplayer.isSpyingChat() && fplayer.getFaction() != myFaction && me != fplayer) { + fplayer.sendMessage("[CCspy] " + myFaction.getTag() + ": " + message); + } + } + + event.setCancelled(true); + } else if (chat == ChatMode.ALLIANCE) { + Faction myFaction = me.getFaction(); + + String message = String.format(Conf.allianceChatFormat, ChatColor.stripColor(me.getNameAndTag()), msg); + + //Send message to our own faction + myFaction.sendMessage(message); + + //Send to all our allies + for (FPlayer fplayer : FPlayers.getInstance().getOnlinePlayers()) { + if (myFaction.getRelationTo(fplayer) == Relation.ALLY && !fplayer.isIgnoreAllianceChat()) { + fplayer.sendMessage(message); + } else if (fplayer.isSpyingChat() && me != fplayer) { + fplayer.sendMessage("[ACspy]: " + message); + } + } + + Bukkit.getLogger().log(Level.INFO, ChatColor.stripColor("AllianceChat: " + message)); + + event.setCancelled(true); + } else if (chat == ChatMode.TRUCE) { + Faction myFaction = me.getFaction(); + + String message = String.format(Conf.truceChatFormat, ChatColor.stripColor(me.getNameAndTag()), msg); + + //Send message to our own faction + myFaction.sendMessage(message); + + //Send to all our truces + for (FPlayer fplayer : FPlayers.getInstance().getOnlinePlayers()) { + if (myFaction.getRelationTo(fplayer) == Relation.TRUCE) { + fplayer.sendMessage(message); + } else if (fplayer.isSpyingChat() && fplayer != me) { + fplayer.sendMessage("[TCspy]: " + message); + } + } + + Bukkit.getLogger().log(Level.INFO, ChatColor.stripColor("TruceChat: " + message)); + event.setCancelled(true); + } + } + + // this is for handling insertion of the player's faction tag, set at highest priority to give other plugins a chance to modify chat first + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) + public void onPlayerChat(AsyncPlayerChatEvent event) { + // Are we to insert the Faction tag into the format? + // If we are not to insert it - we are done. + if (!Conf.chatTagEnabled || Conf.chatTagHandledByAnotherPlugin) { + return; + } + + Player talkingPlayer = event.getPlayer(); + String msg = event.getMessage(); + String eventFormat = event.getFormat(); + FPlayer me = FPlayers.getInstance().getByPlayer(talkingPlayer); + int InsertIndex; + + if (!Conf.chatTagReplaceString.isEmpty() && eventFormat.contains(Conf.chatTagReplaceString)) { + // we're using the "replace" method of inserting the faction tags + if (eventFormat.contains("[FACTION_TITLE]")) { + eventFormat = eventFormat.replace("[FACTION_TITLE]", me.getTitle()); + } + InsertIndex = eventFormat.indexOf(Conf.chatTagReplaceString); + eventFormat = eventFormat.replace(Conf.chatTagReplaceString, ""); + Conf.chatTagPadAfter = false; + Conf.chatTagPadBefore = false; + } else if (!Conf.chatTagInsertAfterString.isEmpty() && eventFormat.contains(Conf.chatTagInsertAfterString)) { + // we're using the "insert after string" method + InsertIndex = eventFormat.indexOf(Conf.chatTagInsertAfterString) + Conf.chatTagInsertAfterString.length(); + } else if (!Conf.chatTagInsertBeforeString.isEmpty() && eventFormat.contains(Conf.chatTagInsertBeforeString)) { + // we're using the "insert before string" method + InsertIndex = eventFormat.indexOf(Conf.chatTagInsertBeforeString); + } else { + // we'll fall back to using the index place method + InsertIndex = Conf.chatTagInsertIndex; + if (InsertIndex > eventFormat.length()) { + return; + } + } + + String formatStart = eventFormat.substring(0, InsertIndex) + ((Conf.chatTagPadBefore && !me.getChatTag().isEmpty()) ? " " : ""); + String formatEnd = ((Conf.chatTagPadAfter && !me.getChatTag().isEmpty()) ? " " : "") + eventFormat.substring(InsertIndex); + + String nonColoredMsgFormat = formatStart + me.getChatTag().trim() + formatEnd; + + // Relation Colored? + if (Conf.chatTagRelationColored) { + // We must choke the standard message and send out individual messages to all players + // Why? Because the relations will differ. + event.setCancelled(true); + + for (Player listeningPlayer : event.getRecipients()) { + FPlayer you = FPlayers.getInstance().getByPlayer(listeningPlayer); + String yourFormat = formatStart + me.getChatTag(you).trim() + formatEnd; + try { + listeningPlayer.sendMessage(String.format(yourFormat, talkingPlayer.getDisplayName(), msg)); + } catch (UnknownFormatConversionException ex) { + Conf.chatTagInsertIndex = 0; + P.p.log(Level.SEVERE, "Critical error in chat message formatting!"); + P.p.log(Level.SEVERE, "NOTE: This has been automatically fixed right now by setting chatTagInsertIndex to 0."); + P.p.log(Level.SEVERE, "For a more proper fix, please read this regarding chat configuration: http://massivecraft.com/plugins/factions/config#Chat_configuration"); + return; + } + } + + // Write to the log... We will write the non colored message. + String nonColoredMsg = ChatColor.stripColor(String.format(nonColoredMsgFormat, talkingPlayer.getDisplayName(), msg)); + Bukkit.getLogger().log(Level.INFO, nonColoredMsg); + } else { + // No relation color. + event.setFormat(nonColoredMsgFormat); + } + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/listeners/FactionsEntityListener.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/listeners/FactionsEntityListener.java new file mode 100644 index 0000000..4fa5d5b --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/listeners/FactionsEntityListener.java @@ -0,0 +1,586 @@ +package com.massivecraft.factions.listeners; + +import com.massivecraft.factions.*; +import com.massivecraft.factions.event.PowerLossEvent; +import com.massivecraft.factions.struct.Relation; +import com.massivecraft.factions.util.MiscUtil; +import com.massivecraft.factions.zcore.util.TL; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.TravelAgent; +import org.bukkit.block.Block; +import org.bukkit.entity.*; +import org.bukkit.entity.minecart.ExplosiveMinecart; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.*; +import org.bukkit.event.hanging.HangingBreakByEntityEvent; +import org.bukkit.event.hanging.HangingBreakEvent; +import org.bukkit.event.hanging.HangingBreakEvent.RemoveCause; +import org.bukkit.event.hanging.HangingPlaceEvent; +import org.bukkit.event.player.PlayerPortalEvent; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; +import org.bukkit.projectiles.ProjectileSource; + +import java.util.*; + + +public class FactionsEntityListener implements Listener { + + public P p; + + public FactionsEntityListener(P p) { + this.p = p; + } + + @EventHandler(priority = EventPriority.NORMAL) + public void onEntityDeath(EntityDeathEvent event) { + Entity entity = event.getEntity(); + if (!(entity instanceof Player)) { + return; + } + + Player player = (Player) entity; + FPlayer fplayer = FPlayers.getInstance().getByPlayer(player); + Faction faction = Board.getInstance().getFactionAt(new FLocation(player.getLocation())); + + PowerLossEvent powerLossEvent = new PowerLossEvent(faction, fplayer); + // Check for no power loss conditions + if (faction.isWarZone()) { + // war zones always override worldsNoPowerLoss either way, thus this layout + if (!Conf.warZonePowerLoss) { + powerLossEvent.setMessage(TL.PLAYER_POWER_NOLOSS_WARZONE.toString()); + powerLossEvent.setCancelled(true); + } + if (Conf.worldsNoPowerLoss.contains(player.getWorld().getName())) { + powerLossEvent.setMessage(TL.PLAYER_POWER_LOSS_WARZONE.toString()); + } + } else if (faction.isWilderness() && !Conf.wildernessPowerLoss && !Conf.worldsNoWildernessProtection.contains(player.getWorld().getName())) { + powerLossEvent.setMessage(TL.PLAYER_POWER_NOLOSS_WILDERNESS.toString()); + powerLossEvent.setCancelled(true); + } else if (Conf.worldsNoPowerLoss.contains(player.getWorld().getName())) { + powerLossEvent.setMessage(TL.PLAYER_POWER_NOLOSS_WORLD.toString()); + powerLossEvent.setCancelled(true); + } else if (Conf.peacefulMembersDisablePowerLoss && fplayer.hasFaction() && fplayer.getFaction().isPeaceful()) { + powerLossEvent.setMessage(TL.PLAYER_POWER_NOLOSS_PEACEFUL.toString()); + powerLossEvent.setCancelled(true); + } else { + powerLossEvent.setMessage(TL.PLAYER_POWER_NOW.toString()); + } + + // call Event + Bukkit.getPluginManager().callEvent(powerLossEvent); + + // Call player onDeath if the event is not cancelled + if (!powerLossEvent.isCancelled()) { + fplayer.onDeath(); + } + // Send the message from the powerLossEvent + final String msg = powerLossEvent.getMessage(); + if (msg != null && !msg.isEmpty()) { + fplayer.msg(msg, fplayer.getPowerRounded(), fplayer.getPowerMaxRounded()); + } + } + + /** + * Who can I hurt? I can never hurt members or allies. I can always hurt enemies. I can hurt neutrals as long as + * they are outside their own territory. + */ + @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) + public void onEntityDamage(EntityDamageEvent event) { + if (event instanceof EntityDamageByEntityEvent) { + EntityDamageByEntityEvent sub = (EntityDamageByEntityEvent) event; + if (!this.canDamagerHurtDamagee(sub, true)) { + event.setCancelled(true); + } + // event is not cancelled by factions + + Entity damagee = sub.getEntity(); + Entity damager = sub.getDamager(); + + if (damagee != null && damagee instanceof Player) { + cancelFStuckTeleport((Player) damagee); + } + if (damager instanceof Player) { + cancelFStuckTeleport((Player) damager); + } + } else if (Conf.safeZonePreventAllDamageToPlayers && isPlayerInSafeZone(event.getEntity())) { + // Players can not take any damage in a Safe Zone + event.setCancelled(true); + } + + // entity took generic damage? + Entity entity = event.getEntity(); + if (entity instanceof Player) { + Player player = (Player) entity; + FPlayer me = FPlayers.getInstance().getByPlayer(player); + cancelFStuckTeleport(player); + if (me.isWarmingUp()) { + me.clearWarmup(); + me.msg(TL.WARMUPS_CANCELLED); + } + } + } + + public void cancelFStuckTeleport(Player player) { + if (player == null) { + return; + } + UUID uuid = player.getUniqueId(); + if (P.p.getStuckMap().containsKey(uuid)) { + FPlayers.getInstance().getByPlayer(player).msg(TL.COMMAND_STUCK_CANCELLED); + P.p.getStuckMap().remove(uuid); + } + } + + @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) + public void onEntityExplode(EntityExplodeEvent event) { + Location loc = event.getLocation(); + Entity boomer = event.getEntity(); + Faction faction = Board.getInstance().getFactionAt(new FLocation(loc)); + + if (faction.noExplosionsInTerritory() || (faction.isPeaceful() && Conf.peacefulTerritoryDisableBoom)) { + // faction is peaceful and has explosions set to disabled + event.setCancelled(true); + return; + } + + boolean online = faction.hasPlayersOnline(); + + //TODO: :( + if (boomer instanceof Creeper && ((faction.isWilderness() && Conf.wildernessBlockCreepers && !Conf.worldsNoWildernessProtection.contains(loc.getWorld().getName())) || + (faction.isNormal() && (online ? Conf.territoryBlockCreepers : Conf.territoryBlockCreepersWhenOffline)) || + (faction.isWarZone() && Conf.warZoneBlockCreepers) || + faction.isSafeZone())) { + // creeper which needs prevention + event.setCancelled(true); + } else if ( + // it's a bit crude just using fireball protection for Wither boss too, but I'd rather not add in a whole new set of xxxBlockWitherExplosion or whatever + (boomer instanceof Fireball || boomer instanceof WitherSkull || boomer instanceof Wither) && ((faction.isWilderness() && Conf.wildernessBlockFireballs && !Conf.worldsNoWildernessProtection.contains(loc.getWorld().getName())) || + (faction.isNormal() && (online ? Conf.territoryBlockFireballs : Conf.territoryBlockFireballsWhenOffline)) || + (faction.isWarZone() && Conf.warZoneBlockFireballs) || + faction.isSafeZone())) { + // ghast fireball which needs prevention + event.setCancelled(true); + } else if ((boomer instanceof TNTPrimed || boomer instanceof ExplosiveMinecart) && ((faction.isWilderness() && Conf.wildernessBlockTNT && !Conf.worldsNoWildernessProtection.contains(loc.getWorld().getName())) || + (faction.isNormal() && (online ? Conf.territoryBlockTNT : Conf.territoryBlockTNTWhenOffline)) || + (faction.isWarZone() && Conf.warZoneBlockTNT) || + (faction.isSafeZone() && Conf.safeZoneBlockTNT))) { + // TNT which needs prevention + event.setCancelled(true); + } else if ((boomer instanceof TNTPrimed || boomer instanceof ExplosiveMinecart) && Conf.handleExploitTNTWaterlog) { + // TNT in water/lava doesn't normally destroy any surrounding blocks, which is usually desired behavior, but... + // this change below provides workaround for waterwalling providing perfect protection, + // and makes cheap (non-obsidian) TNT cannons require minor maintenance between shots + Block center = loc.getBlock(); + if (center.isLiquid()) { + // a single surrounding block in all 6 directions is broken if the material is weak enough + List targets = new ArrayList(); + targets.add(center.getRelative(0, 0, 1)); + targets.add(center.getRelative(0, 0, -1)); + targets.add(center.getRelative(0, 1, 0)); + targets.add(center.getRelative(0, -1, 0)); + targets.add(center.getRelative(1, 0, 0)); + targets.add(center.getRelative(-1, 0, 0)); + for (Block target : targets) { + int id = target.getTypeId(); + // ignore air, bedrock, water, lava, obsidian, enchanting table, etc.... too bad we can't get a blast resistance value through Bukkit yet + if (id != 0 && (id < 7 || id > 11) && id != 49 && id != 90 && id != 116 && id != 119 && id != 120 && id != 130) { + target.breakNaturally(); + } + } + } + } + } + + // mainly for flaming arrows; don't want allies or people in safe zones to be ignited even after damage event is cancelled + @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) + public void onEntityCombustByEntity(EntityCombustByEntityEvent event) { + EntityDamageByEntityEvent sub = new EntityDamageByEntityEvent(event.getCombuster(), event.getEntity(), EntityDamageEvent.DamageCause.FIRE, 0d); + if (!this.canDamagerHurtDamagee(sub, false)) { + event.setCancelled(true); + } + sub = null; + } + + private static final Set badPotionEffects = new LinkedHashSet(Arrays.asList(PotionEffectType.BLINDNESS, PotionEffectType.CONFUSION, PotionEffectType.HARM, PotionEffectType.HUNGER, PotionEffectType.POISON, PotionEffectType.SLOW, PotionEffectType.SLOW_DIGGING, PotionEffectType.WEAKNESS, PotionEffectType.WITHER)); + + @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) + public void onPotionSplashEvent(PotionSplashEvent event) { + // see if the potion has a harmful effect + boolean badjuju = false; + for (PotionEffect effect : event.getPotion().getEffects()) { + if (badPotionEffects.contains(effect.getType())) { + badjuju = true; + break; + } + } + if (!badjuju) { + return; + } + + ProjectileSource thrower = event.getPotion().getShooter(); + if (!(thrower instanceof Entity)) { + return; + } + + if (thrower instanceof Player) { + Player player = (Player) thrower; + FPlayer fPlayer = FPlayers.getInstance().getByPlayer(player); + if (badjuju && fPlayer.getFaction().isPeaceful()) { + event.setCancelled(true); + return; + } + } + + // scan through affected entities to make sure they're all valid targets + Iterator iter = event.getAffectedEntities().iterator(); + while (iter.hasNext()) { + LivingEntity target = iter.next(); + EntityDamageByEntityEvent sub = new EntityDamageByEntityEvent((Entity) thrower, target, EntityDamageEvent.DamageCause.CUSTOM, 0); + if (!this.canDamagerHurtDamagee(sub, true)) { + event.setIntensity(target, 0.0); // affected entity list doesn't accept modification (so no iter.remove()), but this works + } + sub = null; + } + } + + public boolean isPlayerInSafeZone(Entity damagee) { + if (!(damagee instanceof Player)) { + return false; + } + if (Board.getInstance().getFactionAt(new FLocation(damagee.getLocation())).isSafeZone()) { + return true; + } + return false; + } + + public boolean canDamagerHurtDamagee(EntityDamageByEntityEvent sub) { + return canDamagerHurtDamagee(sub, true); + } + + public boolean canDamagerHurtDamagee(EntityDamageByEntityEvent sub, boolean notify) { + Entity damager = sub.getDamager(); + Entity damagee = sub.getEntity(); + + if (!(damagee instanceof Player)) { + return true; + } + + FPlayer defender = FPlayers.getInstance().getByPlayer((Player) damagee); + + if (defender == null || defender.getPlayer() == null) { + return true; + } + + Location defenderLoc = defender.getPlayer().getLocation(); + Faction defLocFaction = Board.getInstance().getFactionAt(new FLocation(defenderLoc)); + + // for damage caused by projectiles, getDamager() returns the projectile... what we need to know is the source + if (damager instanceof Projectile) { + Projectile projectile = (Projectile) damager; + + if (!(projectile.getShooter() instanceof Entity)) { + return true; + } + + damager = (Entity) projectile.getShooter(); + } + + if (damager == damagee) // ender pearl usage and other self-inflicted damage + { + return true; + } + + // Players can not take attack damage in a SafeZone, or possibly peaceful territory + if (defLocFaction.noPvPInTerritory()) { + if (damager instanceof Player) { + if (notify) { + FPlayer attacker = FPlayers.getInstance().getByPlayer((Player) damager); + attacker.msg(TL.PLAYER_CANTHURT, (defLocFaction.isSafeZone() ? TL.REGION_SAFEZONE.toString() : TL.REGION_PEACEFUL.toString())); + } + return false; + } + return !defLocFaction.noMonstersInTerritory(); + } + + if (!(damager instanceof Player)) { + return true; + } + + FPlayer attacker = FPlayers.getInstance().getByPlayer((Player) damager); + + if (attacker == null || attacker.getPlayer() == null) { + return true; + } + + if (Conf.playersWhoBypassAllProtection.contains(attacker.getName())) { + return true; + } + + if (attacker.hasLoginPvpDisabled()) { + if (notify) { + attacker.msg(TL.PLAYER_PVP_LOGIN, Conf.noPVPDamageToOthersForXSecondsAfterLogin); + } + return false; + } + + Faction locFaction = Board.getInstance().getFactionAt(new FLocation(attacker)); + + // so we know from above that the defender isn't in a safezone... what about the attacker, sneaky dog that he might be? + if (locFaction.noPvPInTerritory()) { + if (notify) { + attacker.msg(TL.PLAYER_CANTHURT, (locFaction.isSafeZone() ? TL.REGION_SAFEZONE.toString() : TL.REGION_PEACEFUL.toString())); + } + return false; + } + + if (locFaction.isWarZone() && Conf.warZoneFriendlyFire) { + return true; + } + + if (Conf.worldsIgnorePvP.contains(defenderLoc.getWorld().getName())) { + return true; + } + + Faction defendFaction = defender.getFaction(); + Faction attackFaction = attacker.getFaction(); + + if (attackFaction.isWilderness() && Conf.disablePVPForFactionlessPlayers) { + if (notify) { + attacker.msg(TL.PLAYER_PVP_REQUIREFACTION); + } + return false; + } else if (defendFaction.isWilderness()) { + if (defLocFaction == attackFaction && Conf.enablePVPAgainstFactionlessInAttackersLand) { + // Allow PVP vs. Factionless in attacker's faction territory + return true; + } else if (Conf.disablePVPForFactionlessPlayers) { + if (notify) { + attacker.msg(TL.PLAYER_PVP_FACTIONLESS); + } + return false; + } + } + + if (defendFaction.isPeaceful()) { + if (notify) { + attacker.msg(TL.PLAYER_PVP_PEACEFUL); + } + return false; + } else if (attackFaction.isPeaceful()) { + if (notify) { + attacker.msg(TL.PLAYER_PVP_PEACEFUL); + } + return false; + } + + Relation relation = defendFaction.getRelationTo(attackFaction); + + // You can not hurt neutral factions + if (Conf.disablePVPBetweenNeutralFactions && relation.isNeutral()) { + if (notify) { + attacker.msg(TL.PLAYER_PVP_NEUTRAL); + } + return false; + } + + // Players without faction may be hurt anywhere + if (!defender.hasFaction()) { + return true; + } + + // You can never hurt faction members or allies + if (relation.isMember() || relation.isAlly()) { + if (notify) { + attacker.msg(TL.PLAYER_PVP_CANTHURT, defender.describeTo(attacker)); + } + return false; + } + + boolean ownTerritory = defender.isInOwnTerritory(); + + // You can not hurt neutrals in their own territory. + if (ownTerritory && relation.isNeutral()) { + if (notify) { + attacker.msg(TL.PLAYER_PVP_NEUTRALFAIL, defender.describeTo(attacker)); + defender.msg(TL.PLAYER_PVP_TRIED, attacker.describeTo(defender, true)); + } + return false; + } + + // Damage will be dealt. However check if the damage should be reduced. + /* + if (damage > 0.0 && ownTerritory && Conf.territoryShieldFactor > 0) { + double newDamage = Math.ceil(damage * (1D - Conf.territoryShieldFactor)); + sub.setDamage(newDamage); + + // Send message + if (notify) { + String perc = MessageFormat.format("{0,number,#%}", (Conf.territoryShieldFactor)); // TODO does this display correctly?? + defender.msg("Enemy damage reduced by %s.", perc); + } + } */ + + return true; + } + + @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) + public void onCreatureSpawn(CreatureSpawnEvent event) { + if (event.getLocation() == null) { + return; + } + + if (Conf.safeZoneNerfedCreatureTypes.contains(event.getEntityType()) && Board.getInstance().getFactionAt(new FLocation(event.getLocation())).noMonstersInTerritory()) { + event.setCancelled(true); + } + } + + @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) + public void onEntityTarget(EntityTargetEvent event) { + // if there is a target + Entity target = event.getTarget(); + if (target == null) { + return; + } + + // We are interested in blocking targeting for certain mobs: + if (!Conf.safeZoneNerfedCreatureTypes.contains(MiscUtil.creatureTypeFromEntity(event.getEntity()))) { + return; + } + + // in case the target is in a safe zone. + if (Board.getInstance().getFactionAt(new FLocation(target.getLocation())).noMonstersInTerritory()) { + event.setCancelled(true); + } + } + + @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) + public void onPaintingBreak(HangingBreakEvent event) { + if (event.getCause() == RemoveCause.EXPLOSION) { + Location loc = event.getEntity().getLocation(); + Faction faction = Board.getInstance().getFactionAt(new FLocation(loc)); + if (faction.noExplosionsInTerritory()) { + // faction is peaceful and has explosions set to disabled + event.setCancelled(true); + return; + } + + boolean online = faction.hasPlayersOnline(); + + if ((faction.isWilderness() && !Conf.worldsNoWildernessProtection.contains(loc.getWorld().getName()) && (Conf.wildernessBlockCreepers || Conf.wildernessBlockFireballs || Conf.wildernessBlockTNT)) || + (faction.isNormal() && (online ? (Conf.territoryBlockCreepers || Conf.territoryBlockFireballs || Conf.territoryBlockTNT) : (Conf.territoryBlockCreepersWhenOffline || Conf.territoryBlockFireballsWhenOffline || Conf.territoryBlockTNTWhenOffline))) || + (faction.isWarZone() && (Conf.warZoneBlockCreepers || Conf.warZoneBlockFireballs || Conf.warZoneBlockTNT)) || + faction.isSafeZone()) { + // explosion which needs prevention + event.setCancelled(true); + } + } + + if (!(event instanceof HangingBreakByEntityEvent)) { + return; + } + + Entity breaker = ((HangingBreakByEntityEvent) event).getRemover(); + if (!(breaker instanceof Player)) { + return; + } + + if (!FactionsBlockListener.playerCanBuildDestroyBlock((Player) breaker, event.getEntity().getLocation(), "remove paintings", false)) { + event.setCancelled(true); + } + } + + @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) + public void onPaintingPlace(HangingPlaceEvent event) { + if (!FactionsBlockListener.playerCanBuildDestroyBlock(event.getPlayer(), event.getBlock().getLocation(), "place paintings", false)) { + event.setCancelled(true); + } + } + + @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) + public void onEntityChangeBlock(EntityChangeBlockEvent event) { + Entity entity = event.getEntity(); + + // for now, only interested in Enderman and Wither boss tomfoolery + if (!(entity instanceof Enderman) && !(entity instanceof Wither)) { + return; + } + + Location loc = event.getBlock().getLocation(); + + if (entity instanceof Enderman) { + if (stopEndermanBlockManipulation(loc)) { + event.setCancelled(true); + } + } else if (entity instanceof Wither) { + Faction faction = Board.getInstance().getFactionAt(new FLocation(loc)); + // it's a bit crude just using fireball protection, but I'd rather not add in a whole new set of xxxBlockWitherExplosion or whatever + if ((faction.isWilderness() && Conf.wildernessBlockFireballs && !Conf.worldsNoWildernessProtection.contains(loc.getWorld().getName())) || + (faction.isNormal() && (faction.hasPlayersOnline() ? Conf.territoryBlockFireballs : Conf.territoryBlockFireballsWhenOffline)) || + (faction.isWarZone() && Conf.warZoneBlockFireballs) || + faction.isSafeZone()) { + event.setCancelled(true); + } + } + } + + @EventHandler + public void onTravel(PlayerPortalEvent event) { + if (!P.p.getConfig().getBoolean("portals.limit", false)) { + return; // Don't do anything if they don't want us to. + } + + TravelAgent agent = event.getPortalTravelAgent(); + + // If they aren't able to find a portal, it'll try to create one. + if (event.useTravelAgent() && agent.getCanCreatePortal() && agent.findPortal(event.getTo()) == null) { + FLocation loc = new FLocation(event.getTo()); + Faction faction = Board.getInstance().getFactionAt(loc); + if (faction.isWilderness()) { + return; // We don't care about wilderness. + } else if (!faction.isNormal() && !event.getPlayer().isOp()) { + // Don't let non ops make portals in safezone or warzone. + event.setCancelled(true); + return; + } + + FPlayer fp = FPlayers.getInstance().getByPlayer(event.getPlayer()); + String mininumRelation = P.p.getConfig().getString("portals.minimum-relation", "MEMBER"); // Defaults to Neutral if typed wrong. + if (!fp.getFaction().getRelationTo(faction).isAtLeast(Relation.fromString(mininumRelation))) { + event.setCancelled(true); + } + } + } + + private boolean stopEndermanBlockManipulation(Location loc) { + if (loc == null) { + return false; + } + // quick check to see if all Enderman deny options are enabled; if so, no need to check location + if (Conf.wildernessDenyEndermanBlocks && + Conf.territoryDenyEndermanBlocks && + Conf.territoryDenyEndermanBlocksWhenOffline && + Conf.safeZoneDenyEndermanBlocks && + Conf.warZoneDenyEndermanBlocks) { + return true; + } + + FLocation fLoc = new FLocation(loc); + Faction claimFaction = Board.getInstance().getFactionAt(fLoc); + + if (claimFaction.isWilderness()) { + return Conf.wildernessDenyEndermanBlocks; + } else if (claimFaction.isNormal()) { + return claimFaction.hasPlayersOnline() ? Conf.territoryDenyEndermanBlocks : Conf.territoryDenyEndermanBlocksWhenOffline; + } else if (claimFaction.isSafeZone()) { + return Conf.safeZoneDenyEndermanBlocks; + } else if (claimFaction.isWarZone()) { + return Conf.warZoneDenyEndermanBlocks; + } + + return false; + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/listeners/FactionsExploitListener.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/listeners/FactionsExploitListener.java new file mode 100644 index 0000000..61846ec --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/listeners/FactionsExploitListener.java @@ -0,0 +1,62 @@ +package com.massivecraft.factions.listeners; + +import com.massivecraft.factions.Conf; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockFromToEvent; +import org.bukkit.event.player.PlayerTeleportEvent; + + +public class FactionsExploitListener implements Listener { + + @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) + public void obsidianGenerator(BlockFromToEvent event) { + if (!Conf.handleExploitObsidianGenerators) { + return; + } + + // thanks to ObGenBlocker and WorldGuard for this method + Block block = event.getToBlock(); + int source = event.getBlock().getTypeId(); + int target = block.getTypeId(); + if ((target == 55 || target == 132) && (source == 0 || source == 10 || source == 11)) { + block.setTypeId(0); + } + } + + + @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) + public void enderPearlTeleport(PlayerTeleportEvent event) { + if (!Conf.handleExploitEnderPearlClipping) { + return; + } + if (event.getCause() != PlayerTeleportEvent.TeleportCause.ENDER_PEARL) { + return; + } + + // this exploit works when the target location is within 0.31 blocks or so of a door or glass block or similar... + Location target = event.getTo(); + Location from = event.getFrom(); + + // blocks who occupy less than 1 block width or length wise need to be handled differently + Material mat = event.getTo().getBlock().getType(); + if (((mat == Material.THIN_GLASS || mat == Material.IRON_FENCE) && clippingThrough(target, from, 0.65)) || ((mat == Material.FENCE || mat == Material.NETHER_FENCE) && clippingThrough(target, from, 0.45))) { + event.setTo(from); + return; + } + + // simple fix otherwise: ender pearl target locations are standardized to be in the center (X/Z) of the target block, not at the edges + target.setX(target.getBlockX() + 0.5); + target.setZ(target.getBlockZ() + 0.5); + event.setTo(target); + + } + + public static boolean clippingThrough(Location target, Location from, double thickness) { + return ((from.getX() > target.getX() && (from.getX() - target.getX() < thickness)) || (target.getX() > from.getX() && (target.getX() - from.getX() < thickness)) || (from.getZ() > target.getZ() && (from.getZ() - target.getZ() < thickness)) || (target.getZ() > from.getZ() && (target.getZ() - from.getZ() < thickness))); + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/listeners/FactionsPlayerListener.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/listeners/FactionsPlayerListener.java new file mode 100644 index 0000000..aeaab2b --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/listeners/FactionsPlayerListener.java @@ -0,0 +1,594 @@ +package com.massivecraft.factions.listeners; + +import com.massivecraft.factions.*; +import com.massivecraft.factions.event.FPlayerJoinEvent; +import com.massivecraft.factions.event.FPlayerLeaveEvent; +import com.massivecraft.factions.scoreboards.FScoreboard; +import com.massivecraft.factions.scoreboards.FTeamWrapper; +import com.massivecraft.factions.scoreboards.sidebar.FDefaultSidebar; +import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.struct.Relation; +import com.massivecraft.factions.struct.Role; +import com.massivecraft.factions.util.VisualizeUtil; +import com.massivecraft.factions.zcore.persist.MemoryFPlayer; +import com.massivecraft.factions.zcore.util.TL; +import com.massivecraft.factions.zcore.util.TextUtil; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.player.*; +import org.bukkit.util.NumberConversions; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; +import java.util.UUID; +import java.util.logging.Level; + + +public class FactionsPlayerListener implements Listener { + + public P p; + + public FactionsPlayerListener(P p) { + this.p = p; + for (Player player : p.getServer().getOnlinePlayers()) { + initPlayer(player); + } + } + + @EventHandler(priority = EventPriority.NORMAL) + public void onPlayerJoin(PlayerJoinEvent event) { + initPlayer(event.getPlayer()); + } + + private void initPlayer(Player player) { + // Make sure that all online players do have a fplayer. + final FPlayer me = FPlayers.getInstance().getByPlayer(player); + ((MemoryFPlayer) me).setName(player.getName()); + + // Update the lastLoginTime for this fplayer + me.setLastLoginTime(System.currentTimeMillis()); + + // Store player's current FLocation and notify them where they are + me.setLastStoodAt(new FLocation(player.getLocation())); + + me.login(); // set kills / deaths + + // Check for Faction announcements. Let's delay this so they actually see it. + Bukkit.getScheduler().runTaskLater(P.p, new Runnable() { + @Override + public void run() { + if (me.isOnline()) { + me.getFaction().sendUnreadAnnouncements(me); + } + } + }, 33L); // Don't ask me why. + + if (P.p.getConfig().getBoolean("scoreboard.default-enabled", false)) { + FScoreboard.init(me); + FScoreboard.get(me).setDefaultSidebar(new FDefaultSidebar(), P.p.getConfig().getInt("default-update-interval", 20)); + FScoreboard.get(me).setSidebarVisibility(me.showScoreboard()); + } + + Faction myFaction = me.getFaction(); + if (!myFaction.isWilderness()) { + for (FPlayer other : myFaction.getFPlayersWhereOnline(true)) { + if (other != me && other.isMonitoringJoins()) { + other.msg(TL.FACTION_LOGIN, me.getName()); + } + } + } + + if (me.isSpyingChat() && !player.hasPermission(Permission.CHATSPY.node)) { + me.setSpyingChat(false); + P.p.log(Level.INFO, "Found %s spying chat without permission on login. Disabled their chat spying.", player.getName()); + } + + if (me.isAdminBypassing() && !player.hasPermission(Permission.BYPASS.node)) { + me.setIsAdminBypassing(false); + P.p.log(Level.INFO, "Found %s on admin Bypass without permission on login. Disabled it for them.", player.getName()); + } + + // If they have the permission, don't let them autoleave. Bad inverted setter :\ + me.setAutoLeave(!player.hasPermission(Permission.AUTO_LEAVE_BYPASS.node)); + } + + @EventHandler(priority = EventPriority.NORMAL) + public void onPlayerQuit(PlayerQuitEvent event) { + FPlayer me = FPlayers.getInstance().getByPlayer(event.getPlayer()); + + // Make sure player's power is up to date when they log off. + me.getPower(); + // and update their last login time to point to when the logged off, for auto-remove routine + me.setLastLoginTime(System.currentTimeMillis()); + + me.logout(); // cache kills / deaths + + // if player is waiting for fstuck teleport but leaves, remove + if (P.p.getStuckMap().containsKey(me.getPlayer().getUniqueId())) { + FPlayers.getInstance().getByPlayer(me.getPlayer()).msg(TL.COMMAND_STUCK_CANCELLED); + P.p.getStuckMap().remove(me.getPlayer().getUniqueId()); + P.p.getTimers().remove(me.getPlayer().getUniqueId()); + } + + Faction myFaction = me.getFaction(); + if (!myFaction.isWilderness()) { + myFaction.memberLoggedOff(); + } + + if (!myFaction.isWilderness()) { + for (FPlayer player : myFaction.getFPlayersWhereOnline(true)) { + if (player != me && player.isMonitoringJoins()) { + player.msg(TL.FACTION_LOGOUT, me.getName()); + } + } + } + + FScoreboard.remove(me); + } + + // Holds the next time a player can have a map shown. + private HashMap showTimes = new HashMap(); + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onPlayerMove(PlayerMoveEvent event) { + Player player = event.getPlayer(); + FPlayer me = FPlayers.getInstance().getByPlayer(player); + + // clear visualization + if (event.getFrom().getBlockX() != event.getTo().getBlockX() || event.getFrom().getBlockY() != event.getTo().getBlockY() || event.getFrom().getBlockZ() != event.getTo().getBlockZ()) { + VisualizeUtil.clear(event.getPlayer()); + if (me.isWarmingUp()) { + me.clearWarmup(); + me.msg(TL.WARMUPS_CANCELLED); + } + } + + // quick check to make sure player is moving between chunks; good performance boost + if (event.getFrom().getBlockX() >> 4 == event.getTo().getBlockX() >> 4 && event.getFrom().getBlockZ() >> 4 == event.getTo().getBlockZ() >> 4 && event.getFrom().getWorld() == event.getTo().getWorld()) { + return; + } + + // Did we change coord? + FLocation from = me.getLastStoodAt(); + FLocation to = new FLocation(event.getTo()); + + if (from.equals(to)) { + return; + } + + // Yes we did change coord (: + + me.setLastStoodAt(to); + + // Did we change "host"(faction)? + Faction factionFrom = Board.getInstance().getFactionAt(from); + Faction factionTo = Board.getInstance().getFactionAt(to); + boolean changedFaction = (factionFrom != factionTo); + + if (me.isMapAutoUpdating()) { + if (showTimes.containsKey(player.getUniqueId()) && (showTimes.get(player.getUniqueId()) > System.currentTimeMillis())) { + if (P.p.getConfig().getBoolean("findfactionsexploit.log", false)) { + P.p.log(Level.WARNING, "%s tried to show a cartel map too soon and triggered exploit blocker.", player.getName()); + } + } else { + me.sendMessage(Board.getInstance().getMap(me.getFaction(), to, player.getLocation().getYaw())); + showTimes.put(player.getUniqueId(), System.currentTimeMillis() + P.p.getConfig().getLong("findfactionsexploit.cooldown", 2000)); + } + } else { + Faction myFaction = me.getFaction(); + String ownersTo = myFaction.getOwnerListString(to); + + if (changedFaction) { + me.sendFactionHereMessage(factionFrom); + if (Conf.ownedAreasEnabled && Conf.ownedMessageOnBorder && myFaction == factionTo && !ownersTo.isEmpty()) { + me.sendMessage(TL.GENERIC_OWNERS.format(ownersTo)); + } + } else if (Conf.ownedAreasEnabled && Conf.ownedMessageInsideTerritory && myFaction == factionTo && !myFaction.isWilderness()) { + String ownersFrom = myFaction.getOwnerListString(from); + if (Conf.ownedMessageByChunk || !ownersFrom.equals(ownersTo)) { + if (!ownersTo.isEmpty()) { + me.sendMessage(TL.GENERIC_OWNERS.format(ownersTo)); + } else if (!TL.GENERIC_PUBLICLAND.toString().isEmpty()) { + me.sendMessage(TL.GENERIC_PUBLICLAND.toString()); + } + } + } + } + + if (me.getAutoClaimFor() != null) { + me.attemptClaim(me.getAutoClaimFor(), event.getTo(), true); + } else if (me.isAutoSafeClaimEnabled()) { + if (!Permission.MANAGE_SAFE_ZONE.has(player)) { + me.setIsAutoSafeClaimEnabled(false); + } else { + if (!Board.getInstance().getFactionAt(to).isSafeZone()) { + Board.getInstance().setFactionAt(Factions.getInstance().getSafeZone(), to); + me.msg(TL.PLAYER_SAFEAUTO); + } + } + } else if (me.isAutoWarClaimEnabled()) { + if (!Permission.MANAGE_WAR_ZONE.has(player)) { + me.setIsAutoWarClaimEnabled(false); + } else { + if (!Board.getInstance().getFactionAt(to).isWarZone()) { + Board.getInstance().setFactionAt(Factions.getInstance().getWarZone(), to); + me.msg(TL.PLAYER_WARAUTO); + } + } + } + } + + @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) + public void onPlayerInteract(PlayerInteractEvent event) { + // only need to check right-clicks and physical as of MC 1.4+; good performance boost + if (event.getAction() != Action.RIGHT_CLICK_BLOCK && event.getAction() != Action.PHYSICAL) { + return; + } + + Block block = event.getClickedBlock(); + Player player = event.getPlayer(); + + if (block == null) { + return; // clicked in air, apparently + } + + if (!canPlayerUseBlock(player, block, false)) { + event.setCancelled(true); + if (Conf.handleExploitInteractionSpam) { + String name = player.getName(); + InteractAttemptSpam attempt = interactSpammers.get(name); + if (attempt == null) { + attempt = new InteractAttemptSpam(); + interactSpammers.put(name, attempt); + } + int count = attempt.increment(); + if (count >= 10) { + FPlayer me = FPlayers.getInstance().getByPlayer(player); + me.msg(TL.PLAYER_OUCH); + player.damage(NumberConversions.floor((double) count / 10)); + } + } + return; + } + + if (event.getAction() != Action.RIGHT_CLICK_BLOCK) { + return; // only interested on right-clicks for below + } + + if (!playerCanUseItemHere(player, block.getLocation(), event.getMaterial(), false)) { + event.setCancelled(true); + } + } + + + // for handling people who repeatedly spam attempts to open a door (or similar) in another faction's territory + private Map interactSpammers = new HashMap(); + + private static class InteractAttemptSpam { + private int attempts = 0; + private long lastAttempt = System.currentTimeMillis(); + + // returns the current attempt count + public int increment() { + long Now = System.currentTimeMillis(); + if (Now > lastAttempt + 2000) { + attempts = 1; + } else { + attempts++; + } + lastAttempt = Now; + return attempts; + } + } + + + public static boolean playerCanUseItemHere(Player player, Location location, Material material, boolean justCheck) { + if(player.isOp()) + return true; + String name = player.getName(); + if (Conf.playersWhoBypassAllProtection.contains(name)) { + return true; + } + + FPlayer me = FPlayers.getInstance().getByPlayer(player); + if (me.isAdminBypassing()) { + return true; + } + + FLocation loc = new FLocation(location); + Faction otherFaction = Board.getInstance().getFactionAt(loc); + + if (P.p.getConfig().getBoolean("hcf.raidable", false) && otherFaction.getLandRounded() >= otherFaction.getPowerRounded()) { + return true; + } + + if (otherFaction.hasPlayersOnline()) { + if (!Conf.territoryDenyUseageMaterials.contains(material)) { + return true; // Item isn't one we're preventing for online factions. + } + } else { + if (!Conf.territoryDenyUseageMaterialsWhenOffline.contains(material)) { + return true; // Item isn't one we're preventing for offline factions. + } + } + + if (otherFaction.isWilderness()) { + if (!Conf.wildernessDenyUseage || Conf.worldsNoWildernessProtection.contains(location.getWorld().getName())) { + return true; // This is not faction territory. Use whatever you like here. + } + + if (!justCheck) { + me.msg(TL.PLAYER_USE_WILDERNESS, TextUtil.getMaterialName(material)); + } + + return false; + } else if (otherFaction.isSafeZone()) { + if (!Conf.safeZoneDenyUseage || Permission.MANAGE_SAFE_ZONE.has(player)) { + return true; + } + + if (!justCheck) { + me.msg(TL.PLAYER_USE_SAFEZONE, TextUtil.getMaterialName(material)); + } + + return false; + } else if (otherFaction.isWarZone()) { + if (!Conf.warZoneDenyUseage || Permission.MANAGE_WAR_ZONE.has(player)) { + return true; + } + + if (!justCheck) { + me.msg(TL.PLAYER_USE_WARZONE, TextUtil.getMaterialName(material)); + } + + return false; + } + + Faction myFaction = me.getFaction(); + Relation rel = myFaction.getRelationTo(otherFaction); + + // Cancel if we are not in our own territory + if (rel.confDenyUseage()) { + if (!justCheck) { + me.msg(TL.PLAYER_USE_TERRITORY, TextUtil.getMaterialName(material), otherFaction.getTag(myFaction)); + } + + return false; + } + + // Also cancel if player doesn't have ownership rights for this claim + if (Conf.ownedAreasEnabled && Conf.ownedAreaDenyUseage && !otherFaction.playerHasOwnershipRights(me, loc)) { + if (!justCheck) { + me.msg(TL.PLAYER_USE_OWNED, TextUtil.getMaterialName(material), otherFaction.getOwnerListString(loc)); + } + + return false; + } + + return true; + } + + public static boolean canPlayerUseBlock(Player player, Block block, boolean justCheck) { + if(player.isOp()) + return true; + if (Conf.playersWhoBypassAllProtection.contains(player.getName())) { + return true; + } + + FPlayer me = FPlayers.getInstance().getByPlayer(player); + if (me.isAdminBypassing()) { + return true; + } + + Material material = block.getType(); + FLocation loc = new FLocation(block); + Faction otherFaction = Board.getInstance().getFactionAt(loc); + + // no door/chest/whatever protection in wilderness, war zones, or safe zones + if (!otherFaction.isNormal()) { + return true; + } + + if (P.p.getConfig().getBoolean("hcf.raidable", false) && otherFaction.getLandRounded() >= otherFaction.getPowerRounded()) { + return true; + } + + // Dupe fix. + Faction myFaction = me.getFaction(); + Relation rel = myFaction.getRelationTo(otherFaction); + if (!rel.isMember() || !otherFaction.playerHasOwnershipRights(me, loc) && player.getItemInHand() != null) { + switch (player.getItemInHand().getType()) { + case CHEST: + case SIGN_POST: + case TRAPPED_CHEST: + case SIGN: + case WOOD_DOOR: + case IRON_DOOR: + return false; + default: + break; + } + } + + // We only care about some material types. + if (otherFaction.hasPlayersOnline()) { + if (!Conf.territoryProtectedMaterials.contains(material)) { + return true; + } + } else { + if (!Conf.territoryProtectedMaterialsWhenOffline.contains(material)) { + return true; + } + } + + // You may use any block unless it is another faction's territory... + if (rel.isNeutral() || (rel.isEnemy() && Conf.territoryEnemyProtectMaterials) || (rel.isAlly() && Conf.territoryAllyProtectMaterials) || (rel.isTruce() && Conf.territoryTruceProtectMaterials)) { + if (!justCheck) { + me.msg(TL.PLAYER_USE_TERRITORY, (material == Material.SOIL ? "trample " : "use ") + TextUtil.getMaterialName(material), otherFaction.getTag(myFaction)); + } + + return false; + } + + // Also cancel if player doesn't have ownership rights for this claim + if (Conf.ownedAreasEnabled && Conf.ownedAreaProtectMaterials && !otherFaction.playerHasOwnershipRights(me, loc)) { + if (!justCheck) { + me.msg(TL.PLAYER_USE_OWNED, TextUtil.getMaterialName(material), otherFaction.getOwnerListString(loc)); + } + + return false; + } + + return true; + } + + @EventHandler(priority = EventPriority.HIGH) + public void onPlayerRespawn(PlayerRespawnEvent event) { + FPlayer me = FPlayers.getInstance().getByPlayer(event.getPlayer()); + + me.getPower(); // update power, so they won't have gained any while dead + + Location home = me.getFaction().getHome(); + if (Conf.homesEnabled && + Conf.homesTeleportToOnDeath && + home != null && + (Conf.homesRespawnFromNoPowerLossWorlds || !Conf.worldsNoPowerLoss.contains(event.getPlayer().getWorld().getName()))) { + event.setRespawnLocation(home); + } + } + + // For some reason onPlayerInteract() sometimes misses bucket events depending on distance (something like 2-3 blocks away isn't detected), + // but these separate bucket events below always fire without fail + @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) + public void onPlayerBucketEmpty(PlayerBucketEmptyEvent event) { + Block block = event.getBlockClicked(); + Player player = event.getPlayer(); + + if (!playerCanUseItemHere(player, block.getLocation(), event.getBucket(), false)) { + event.setCancelled(true); + return; + } + } + + @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) + public void onPlayerBucketFill(PlayerBucketFillEvent event) { + Block block = event.getBlockClicked(); + Player player = event.getPlayer(); + + if (!playerCanUseItemHere(player, block.getLocation(), event.getBucket(), false)) { + event.setCancelled(true); + return; + } + } + + public static boolean preventCommand(String fullCmd, Player player) { + if(player.isOp()) + return false; + if ((Conf.territoryNeutralDenyCommands.isEmpty() && Conf.territoryEnemyDenyCommands.isEmpty() && Conf.permanentFactionMemberDenyCommands.isEmpty() && Conf.warzoneDenyCommands.isEmpty())) { + return false; + } + + fullCmd = fullCmd.toLowerCase(); + + FPlayer me = FPlayers.getInstance().getByPlayer(player); + + String shortCmd; // command without the slash at the beginning + if (fullCmd.startsWith("/")) { + shortCmd = fullCmd.substring(1); + } else { + shortCmd = fullCmd; + fullCmd = "/" + fullCmd; + } + + if (me.hasFaction() && + !me.isAdminBypassing() && + !Conf.permanentFactionMemberDenyCommands.isEmpty() && + me.getFaction().isPermanent() && + isCommandInList(fullCmd, shortCmd, Conf.permanentFactionMemberDenyCommands.iterator())) { + me.msg(TL.PLAYER_COMMAND_PERMANENT, fullCmd); + return true; + } + + Faction at = Board.getInstance().getFactionAt(new FLocation(player.getLocation())); + if (at.isWilderness() && !Conf.wildernessDenyCommands.isEmpty() && !me.isAdminBypassing() && isCommandInList(fullCmd, shortCmd, Conf.wildernessDenyCommands.iterator())) { + me.msg(TL.PLAYER_COMMAND_WILDERNESS, fullCmd); + return true; + } + + Relation rel = at.getRelationTo(me); + if (at.isNormal() && rel.isAlly() && !Conf.territoryAllyDenyCommands.isEmpty() && !me.isAdminBypassing() && isCommandInList(fullCmd, shortCmd, Conf.territoryAllyDenyCommands.iterator())) { + me.msg(TL.PLAYER_COMMAND_ALLY, fullCmd); + return false; + } + + if (at.isNormal() && rel.isNeutral() && !Conf.territoryNeutralDenyCommands.isEmpty() && !me.isAdminBypassing() && isCommandInList(fullCmd, shortCmd, Conf.territoryNeutralDenyCommands.iterator())) { + me.msg(TL.PLAYER_COMMAND_NEUTRAL, fullCmd); + return true; + } + + if (at.isNormal() && rel.isEnemy() && !Conf.territoryEnemyDenyCommands.isEmpty() && !me.isAdminBypassing() && isCommandInList(fullCmd, shortCmd, Conf.territoryEnemyDenyCommands.iterator())) { + me.msg(TL.PLAYER_COMMAND_ENEMY, fullCmd); + return true; + } + + if (at.isWarZone() && !Conf.warzoneDenyCommands.isEmpty() && !me.isAdminBypassing() && isCommandInList(fullCmd, shortCmd, Conf.warzoneDenyCommands.iterator())) { + me.msg(TL.PLAYER_COMMAND_WARZONE, fullCmd); + return true; + } + + return false; + } + + private static boolean isCommandInList(String fullCmd, String shortCmd, Iterator iter) { + String cmdCheck; + while (iter.hasNext()) { + cmdCheck = iter.next(); + if (cmdCheck == null) { + iter.remove(); + continue; + } + + cmdCheck = cmdCheck.toLowerCase(); + if (fullCmd.startsWith(cmdCheck) || shortCmd.startsWith(cmdCheck)) { + return true; + } + } + return false; + } + + @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) + public void onPlayerKick(PlayerKickEvent event) { + FPlayer badGuy = FPlayers.getInstance().getByPlayer(event.getPlayer()); + if (badGuy == null) { + return; + } + + // if player was banned (not just kicked), get rid of their stored info + if (Conf.removePlayerDataWhenBanned && event.getReason().equals("Banned by admin.")) { + if (badGuy.getRole() == Role.ADMIN) { + badGuy.getFaction().promoteNewLeader(); + } + + badGuy.leave(false); + badGuy.remove(); + } + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + final public void onFactionJoin(FPlayerJoinEvent event) { + FTeamWrapper.applyUpdatesLater(event.getFaction()); + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onFactionLeave(FPlayerLeaveEvent event) { + FTeamWrapper.applyUpdatesLater(event.getFaction()); + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/listeners/MenuListener.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/listeners/MenuListener.java new file mode 100644 index 0000000..cc3f04e --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/listeners/MenuListener.java @@ -0,0 +1,236 @@ +package com.massivecraft.factions.listeners; + +import com.massivecraft.factions.*; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.menus.Menu; +import net.grandtheftmc.core.menus.MenuClickEvent; +import net.grandtheftmc.core.menus.MenuManager; +import net.grandtheftmc.core.menus.MenuOpenEvent; +import net.grandtheftmc.core.util.Utils; +import org.apache.commons.lang.StringUtils; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.inventory.meta.SkullMeta; +import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.scheduler.BukkitTask; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; + +/** + * Created by Timothy Lampen on 2017-09-22. + */ +public class MenuListener implements Listener{ + + @EventHandler + public void onOpen(MenuOpenEvent e) { + Player player = e.getPlayer(); + FPlayer fme = FPlayers.getInstance().getByPlayer(player); + Menu menu = e.getMenu(); + + switch (menu.getName()) { + case "carteltop" : { + player.sendMessage(Lang.VICE.f("&7Organizing &6" + Factions.getInstance().getAllFactions().size() + "&7 factions...")); + new BukkitRunnable() { + @Override + public void run() { + // Get all Factions and remove non player ones. + ArrayList factionList = Factions.getInstance().getAllFactions(); + factionList.remove(Factions.getInstance().getWilderness()); + factionList.remove(Factions.getInstance().getSafeZone()); + factionList.remove(Factions.getInstance().getWarZone()); + Collections.sort(factionList, new Comparator() { + @Override + public int compare(Faction o1, Faction o2) { + + double f1Worth = o1.getStash(); + for(int i =0; i < o1.getAllClaims().size(); i++ ) + f1Worth += Conf.econCostClaimWilderness + (Conf.econCostClaimWilderness * Conf.econClaimAdditionalMultiplier * i); + + double f2Worth = o2.getStash(); + for(int i =0; i < o2.getAllClaims().size(); i++ ) + f2Worth += Conf.econCostClaimWilderness + (Conf.econCostClaimWilderness * Conf.econClaimAdditionalMultiplier * i); + //takes 0.08ms to complete the entire sort. + + if(f1Worth < f2Worth) + return 1; + else if(f1Worth > f2Worth) + return -1; + return 0; + } + }); + boolean containsSender = false; + ArrayList items = new ArrayList(); + for(int i = 0; i<(factionList.size()>=20 ? 20 : factionList.size()); i++) { + Faction f = factionList.get(i); + if(f.getFPlayers().contains(fme)) + containsSender = true; + items.add(generateRankingItem(fme, f, i+1)); + } + final boolean finalContainsSender = containsSender; + new BukkitRunnable() { + @Override + public void run() { + if(!player.isOnline()) + return; + Inventory inv = Bukkit.createInventory(player, 54, Utils.f("&cTop Cartels")); + setPhoneDefaults(inv); + int[] slots = new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 38, 39, 40, 41, 42}; + int counter = 0; + for (ItemStack is : items) { + int slot = slots[counter]; + inv.setItem(slot, is); + counter++; + } + if (!finalContainsSender && !Factions.getInstance().getWilderness().getFPlayers().contains(fme)) { + inv.setItem(49, generateRankingItem(fme, fme.getFaction(), -1)); + } + inv.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lClose Menu")); + player.openInventory(inv); + player.updateInventory(); + } + }.runTaskLater(P.p, 5); + } + }.runTaskAsynchronously(P.p); + break; + } + } + } + + @EventHandler + public void onClick(MenuClickEvent e){ + Player player = e.getPlayer(); + FPlayer fme = FPlayers.getInstance().getByPlayer(player); + Menu menu = e.getMenu(); + ItemStack clicked = e.getItem(); + if(clicked==null || clicked.getType()==Material.STAINED_GLASS_PANE || clicked.getType()==Material.AIR) + return; + + switch (menu.getName()) { + case "carteltop" : { + switch (clicked.getType()) { + case REDSTONE: + player.closeInventory(); + break; + } + break; + } + } + } + + private ItemStack generateRankingItem(FPlayer fme, Faction f, int rank){ + ItemStack item = new ItemStack(Material.SKULL_ITEM, 1, (short)3); + SkullMeta im = (SkullMeta)item.getItemMeta(); + im.setDisplayName((rank==-1 ? ChatColor.GREEN + "Your Faction" : ChatColor.GREEN +"#" + ChatColor.GOLD + rank + ChatColor.GREEN + " Rank")); + ArrayList lore = new ArrayList(); + lore.add(ChatColor.GOLD + "Name: " + ChatColor.GRAY + f.getTag()); + lore.add(ChatColor.GOLD + "Owner: " + ChatColor.GRAY + (f.getFPlayerAdmin()==null ? "Wilderness" : f.getFPlayerAdmin().getName())); + im.setOwner(f.getFPlayerAdmin().getName()); + + double worth = f.getStash(); + for(int i =0; i < f.getAllClaims().size(); i++ ) + worth += Conf.econCostClaimWilderness + (Conf.econCostClaimWilderness * Conf.econClaimAdditionalMultiplier * i); + lore.add(ChatColor.GOLD + "Worth: " + ChatColor.GRAY + Utils.formatMoney(worth)); + + lore.add(ChatColor.GOLD + "Members: " + ChatColor.GRAY + f.getFPlayers().size()); + lore.add(ChatColor.GOLD + "Relation: " + f.getRelationTo(fme).getColor() + StringUtils.capitalize(f.getRelationTo(fme).nicename)); + + im.setLore(lore); + item.setItemMeta(im); + return item; + } + + + public void setPhoneDefaults(MenuOpenEvent e) { + ItemStack whiteGlass = Utils.createItem(Material.STAINED_GLASS_PANE, "&a"); + ItemStack grayGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 7, "&a"); + ItemStack blackGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 15, "&a"); + ItemStack lightGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 8, "&a"); + for (int i : new int[]{1, 10, 19, 28, 37, 46, 7, 16, 25, 34, 43, 52}) e.setItem(i, whiteGlass); + for (int i : new int[]{2, 3, 4, 5, 6}) e.setItem(i, blackGlass); + for (int i : new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 38, 39, 40, 41, 42, 47, 48, + 49, 50, 51}) + e.setItem(i, grayGlass); + for (int i : new int[]{0, 8, 9, 17, 18, 26, 27, 35, 36, 44, 45, 53}) e.setItem(i, lightGlass); + } + + public void setPhoneDefaults(Inventory inv) { + ItemStack whiteGlass = Utils.createItem(Material.STAINED_GLASS_PANE, "&a"); + ItemStack grayGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 7, "&a"); + ItemStack blackGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 15, "&a"); + ItemStack lightGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 8, "&a"); + for (int i : new int[]{1, 10, 19, 28, 37, 46, 7, 16, 25, 34, 43, 52}) inv.setItem(i, whiteGlass); + for (int i : new int[]{2, 3, 4, 5, 6}) inv.setItem(i, blackGlass); + for (int i : new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 38, 39, 40, 41, 42, 47, 48, + 49, 50, 51}) + inv.setItem(i, grayGlass); + for (int i : new int[]{0, 8, 9, 17, 18, 26, 27, 35, 36, 44, 45, 53}) inv.setItem(i, lightGlass); + } + + public void setGPSDefaults(MenuOpenEvent e) { + ItemStack whiteGlass = Utils.createItem(Material.STAINED_GLASS_PANE, "&a"); + ItemStack grayGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 7, "&a"); + ItemStack blackGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 15, "&a"); + for (int i : new int[]{0, 9, 18, 27, 36, 45, 8, 17, 26, 35, 44, 53}) e.setItem(i, whiteGlass); + for (int i : new int[]{1, 2, 3, 4, 5, 6, 7}) e.setItem(i, blackGlass); + for (int i : new int[]{10, 11, 12, 13, 14, 15, 16, 19, 20, 21, 22, 23, 24, 25, 28, 29, 30, 31, 32, 33, 34, 37, + 38, 39, 40, 41, 42, 43, 46, 47, 48, 49, 50, 51, 52}) + e.setItem(i, grayGlass); + } + + public void setGPSDefaults(Inventory inv) { + ItemStack whiteGlass = Utils.createItem(Material.STAINED_GLASS_PANE, "&a"); + ItemStack grayGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 7, "&a"); + ItemStack blackGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 15, "&a"); + for (int i : new int[]{0, 9, 18, 27, 36, 45, 8, 17, 26, 35, 44, 53}) + inv.setItem(i, whiteGlass); + for (int i : new int[]{1, 2, 3, 4, 5, 6, 7}) + inv.setItem(i, blackGlass); + for (int i : new int[]{10, 11, 12, 13, 14, 15, 16, 19, 20, 21, 22, 23, 24, 25, 28, 29, 30, 31, 32, 33, 34, 37, + 38, 39, 40, 41, 42, 43, 46, 47, 48, 49, 50, 51, 52}) + inv.setItem(i, grayGlass); + } + + private void setConfirmDefaults(MenuOpenEvent e) { + this.setConfirmDefaults(e, "&a&lConfirm", "&c&lCancel"); + } + + private void setConfirmDefaults(MenuOpenEvent e, String confirmMessage, String cancelMessage) { + ItemStack whiteGlass = Utils.createItem(Material.STAINED_GLASS_PANE, "&a"); + ItemStack grayGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 7, "&a"); + ItemStack blackGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 15, "&a"); + ItemStack lightGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 8, "&a"); + ItemStack greenGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 5, confirmMessage); + ItemStack redGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 14, cancelMessage); + for (int i : new int[]{1, 10, 19, 28, 37, 46, 7, 16, 25, 34, 43, 52}) e.setItem(i, whiteGlass); + for (int i : new int[]{2, 3, 4, 5, 6}) e.setItem(i, blackGlass); + for (int i : new int[]{13, 22, 31, 40, 49,}) e.setItem(i, grayGlass); + for (int i : new int[]{0, 8, 9, 17, 18, 26, 27, 35, 36, 44, 45, 53}) e.setItem(i, lightGlass); + for (int i : new int[]{11, 12, 20, 21, 29, 30, 38, 39, 47, 48}) e.setItem(i, greenGlass); + for (int i : new int[]{14, 15, 23, 24, 32, 33, 41, 42, 50, 51}) e.setItem(i, redGlass); + } + + private void setConfirmDefaults(MenuOpenEvent e, String confirmMessage, String cancelMessage, List confirmLore, List cancelLore) { + ItemStack whiteGlass = Utils.createItem(Material.STAINED_GLASS_PANE, "&a"); + ItemStack grayGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 7, "&a"); + ItemStack lightGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 8, "&a"); + ItemStack blackGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 15, "&a"); + ItemStack greenGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 5, confirmMessage, confirmLore == null ? new ArrayList<>() : confirmLore); + ItemStack redGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 14, cancelMessage, cancelLore == null ? new ArrayList<>() : cancelLore); + for (int i : new int[]{1, 10, 19, 28, 37, 46, 7, 16, 25, 34, 43, 52}) e.setItem(i, whiteGlass); + for (int i : new int[]{2, 3, 4, 5, 6}) e.setItem(i, blackGlass); + for (int i : new int[]{13, 22, 31, 40, 49,}) e.setItem(i, grayGlass); + for (int i : new int[]{0, 8, 9, 17, 18, 26, 27, 35, 36, 44, 45, 53}) e.setItem(i, lightGlass); + for (int i : new int[]{11, 12, 20, 21, 29, 30, 38, 39, 47, 48}) e.setItem(i, greenGlass); + for (int i : new int[]{14, 15, 23, 24, 32, 33, 41, 42, 50, 51}) e.setItem(i, redGlass); + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/scoreboards/BufferedObjective.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/scoreboards/BufferedObjective.java new file mode 100644 index 0000000..335b0bb --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/scoreboards/BufferedObjective.java @@ -0,0 +1,165 @@ +package com.massivecraft.factions.scoreboards; + +import com.google.common.base.Splitter; +import org.bukkit.ChatColor; +import org.bukkit.scoreboard.DisplaySlot; +import org.bukkit.scoreboard.Objective; +import org.bukkit.scoreboard.Scoreboard; +import org.bukkit.scoreboard.Team; + +import java.lang.reflect.Method; +import java.util.*; + +public class BufferedObjective { + private static final Method addEntryMethod; + private static final int MAX_LINE_LENGTH; + + private final Scoreboard scoreboard; + private final String baseName; + + private Objective current; + private List currentTeams = new ArrayList(); + private String title; + private DisplaySlot displaySlot; + + private int objPtr; + private int teamPtr; + private boolean requiresUpdate = false; + + private final Map contents = new HashMap(); + + static { + // Check for long line support. + // We require use of Spigot's `addEntry(String)` method on + // Teams, as adding OfflinePlayers to a team is far too slow. + + Method addEntryMethodLookup = null; + try { + addEntryMethodLookup = Team.class.getMethod("addEntry", String.class); + } catch (NoSuchMethodException ignored) { + } + + addEntryMethod = addEntryMethodLookup; + + if (addEntryMethod != null) { + MAX_LINE_LENGTH = 48; + } else { + MAX_LINE_LENGTH = 16; + } + } + + public BufferedObjective(Scoreboard scoreboard) { + this.scoreboard = scoreboard; + this.baseName = createBaseName(); + + current = scoreboard.registerNewObjective(getNextObjectiveName(), "dummy"); + } + + private String createBaseName() { + Random random = new Random(); + StringBuilder builder = new StringBuilder(); + while (builder.length() < 14) { + builder.append(Integer.toHexString(random.nextInt())); + } + return builder.toString().substring(0, 14); + } + + public void setTitle(String title) { + if (this.title == null || !this.title.equals(title)) { + this.title = title; + requiresUpdate = true; + } + } + + public void setDisplaySlot(DisplaySlot slot) { + this.displaySlot = slot; + current.setDisplaySlot(slot); + } + + public void setAllLines(List lines) { + if (lines.size() != contents.size()) { + contents.clear(); + } + for (int i = 0; i < lines.size(); i++) { + setLine(lines.size() - i, lines.get(i)); + } + } + + public void setLine(int lineNumber, String content) { + if (content.length() > MAX_LINE_LENGTH) { + content = content.substring(0, MAX_LINE_LENGTH); + } + content = ChatColor.translateAlternateColorCodes('&', content); + + if (contents.get(lineNumber) == null || !contents.get(lineNumber).equals(content)) { + contents.put(lineNumber, content); + requiresUpdate = true; + } + } + + // Hides the objective from the display slot until flip() is called + public void hide() { + if (displaySlot != null) { + scoreboard.clearSlot(displaySlot); + } + } + + public void flip() { + if (!requiresUpdate) { + return; + } + requiresUpdate = false; + + Objective buffer = scoreboard.registerNewObjective(getNextObjectiveName(), "dummy"); + buffer.setDisplayName(title); + + List bufferTeams = new ArrayList(); + + for (Map.Entry entry : contents.entrySet()) { + if (entry.getValue().length() > 16) { + Team team = scoreboard.registerNewTeam(getNextTeamName()); + bufferTeams.add(team); + + Iterator split = Splitter.fixedLength(16).split(entry.getValue()).iterator(); + + team.setPrefix(split.next()); + String name = split.next(); + if (split.hasNext()) { // We only guarantee two splits + team.setSuffix(split.next()); + } + + try { + addEntryMethod.invoke(team, name); + } catch (ReflectiveOperationException ignored) { + } + buffer.getScore(name).setScore(entry.getKey()); + } else { + buffer.getScore(entry.getValue()).setScore(entry.getKey()); + } + } + + if (displaySlot != null) { + buffer.setDisplaySlot(displaySlot); + } + + // Unregister _ALL_ the old things + current.unregister(); + + Iterator it = currentTeams.iterator(); + while (it.hasNext()) { + it.next().unregister(); + it.remove(); + } + + current = buffer; + currentTeams = bufferTeams; + } + + private String getNextObjectiveName() { + return baseName + "_" + ((objPtr++) % 2); + } + + private String getNextTeamName() { + return baseName.substring(0, 10) + "_" + ((teamPtr++) % 999999); + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/scoreboards/FScoreboard.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/scoreboards/FScoreboard.java new file mode 100644 index 0000000..86bcd88 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/scoreboards/FScoreboard.java @@ -0,0 +1,149 @@ +package com.massivecraft.factions.scoreboards; + +import com.massivecraft.factions.FPlayer; +import com.massivecraft.factions.FPlayers; +import com.massivecraft.factions.P; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.scoreboard.DisplaySlot; +import org.bukkit.scoreboard.Scoreboard; + +import java.util.HashMap; +import java.util.Map; + +public class FScoreboard { + private static final Map fscoreboards = new HashMap(); + + private final Scoreboard scoreboard; + private final FPlayer fplayer; + private final BufferedObjective bufferedObjective; + private FSidebarProvider defaultProvider; + private FSidebarProvider temporaryProvider; + private boolean removed = false; + + // Glowstone doesn't support scoreboards. + // All references to this and related workarounds can be safely + // removed when scoreboards are supported. + public static boolean isSupportedByServer() { + return Bukkit.getScoreboardManager() != null; + } + + public static void init(FPlayer fplayer) { + FScoreboard fboard = new FScoreboard(fplayer); + fscoreboards.put(fplayer, fboard); + + if (fplayer.hasFaction()) { + FTeamWrapper.applyUpdates(fplayer.getFaction()); + } + FTeamWrapper.track(fboard); + } + + public static void remove(FPlayer fplayer) { + FScoreboard fboard = fscoreboards.remove(fplayer); + + if (fboard != null) { + fboard.removed = true; + FTeamWrapper.untrack(fboard); + } + } + + public static FScoreboard get(FPlayer fplayer) { + return fscoreboards.get(fplayer); + } + + public static FScoreboard get(Player player) { + return fscoreboards.get(FPlayers.getInstance().getByPlayer(player)); + } + + private FScoreboard(FPlayer fplayer) { + this.fplayer = fplayer; + + if (isSupportedByServer()) { + this.scoreboard = Bukkit.getScoreboardManager().getNewScoreboard(); + this.bufferedObjective = new BufferedObjective(scoreboard); + + fplayer.getPlayer().setScoreboard(scoreboard); + } else { + this.scoreboard = null; + this.bufferedObjective = null; + } + } + + protected FPlayer getFPlayer() { + return fplayer; + } + + protected Scoreboard getScoreboard() { + return scoreboard; + } + + public void setSidebarVisibility(boolean visible) { + if (!isSupportedByServer()) { + return; + } + + bufferedObjective.setDisplaySlot(visible ? DisplaySlot.SIDEBAR : null); + } + + public void setDefaultSidebar(final FSidebarProvider provider, int updateInterval) { + if (!isSupportedByServer()) { + return; + } + + defaultProvider = provider; + if (temporaryProvider == null) { + // We have no temporary provider; update the BufferedObjective! + updateObjective(); + } + + new BukkitRunnable() { + @Override + public void run() { + if (removed || provider != defaultProvider) { + cancel(); + return; + } + + if (temporaryProvider == null) { + updateObjective(); + } + } + }.runTaskTimer(P.p, updateInterval, updateInterval); + } + + public void setTemporarySidebar(final FSidebarProvider provider) { + if (!isSupportedByServer()) { + return; + } + + temporaryProvider = provider; + updateObjective(); + + new BukkitRunnable() { + @Override + public void run() { + if (removed) { + return; + } + + if (temporaryProvider == provider) { + temporaryProvider = null; + updateObjective(); + } + } + }.runTaskLater(P.p, P.p.getConfig().getInt("scoreboard.expiration", 7) * 20); + } + + private void updateObjective() { + FSidebarProvider provider = temporaryProvider != null ? temporaryProvider : defaultProvider; + + if (provider == null) { + bufferedObjective.hide(); + } else { + bufferedObjective.setTitle(provider.getTitle(fplayer)); + bufferedObjective.setAllLines(provider.getLines(fplayer)); + bufferedObjective.flip(); + } + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/scoreboards/FSidebarProvider.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/scoreboards/FSidebarProvider.java new file mode 100644 index 0000000..1a2ed9b --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/scoreboards/FSidebarProvider.java @@ -0,0 +1,36 @@ +package com.massivecraft.factions.scoreboards; + +import com.massivecraft.factions.FPlayer; +import com.massivecraft.factions.Faction; +import com.massivecraft.factions.P; +import com.massivecraft.factions.zcore.util.TL; +import com.massivecraft.factions.zcore.util.TagUtil; + +import java.util.List; + +public abstract class FSidebarProvider { + + public abstract String getTitle(FPlayer fplayer); + + public abstract List getLines(FPlayer fplayer); + + public String replaceTags(FPlayer fPlayer, String s) { + return qualityAssure(TagUtil.parsePlain(fPlayer, s)); + } + + public String replaceTags(Faction faction, FPlayer fPlayer, String s) { + return qualityAssure(TagUtil.parsePlain(faction, fPlayer, s)); + } + + private String qualityAssure(String line) { + if (line.contains("{notFrozen}") || line.contains("{notPermanent}")) { + return "n/a"; // we dont support support these error variables in scoreboards + } + if (line.contains("{ig}")) { + // since you can't really fit a whole "Faction Home: world, x, y, z" on one line + // we assume it's broken up into two lines, so returning our tl will suffice. + return TL.COMMAND_SHOW_NOHOME.toString(); + } + return P.p.txt.parse(line); // finally add color :) + } +} \ No newline at end of file diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/scoreboards/FTeamWrapper.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/scoreboards/FTeamWrapper.java new file mode 100644 index 0000000..2d27317 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/scoreboards/FTeamWrapper.java @@ -0,0 +1,207 @@ +package com.massivecraft.factions.scoreboards; + +import com.massivecraft.factions.*; +import com.massivecraft.factions.zcore.util.TL; +import org.bukkit.Bukkit; +import org.bukkit.OfflinePlayer; +import org.bukkit.scoreboard.Scoreboard; +import org.bukkit.scoreboard.Team; + +import java.util.*; + +public class FTeamWrapper { + private static final Map wrappers = new HashMap(); + private static final List tracking = new ArrayList(); + private static int factionTeamPtr; + private static final Set updating = new HashSet(); + + private final Map teams = new HashMap(); + private final String teamName; + private final Faction faction; + private final Set members = new HashSet(); + + public static void applyUpdatesLater(final Faction faction) { + if (!FScoreboard.isSupportedByServer()) { + return; + } + + if (faction.isWilderness()) { + return; + } + + if (!P.p.getConfig().getBoolean("scoreboard.default-prefixes", false)) { + return; + } + + + if (updating.add(faction)) { + Bukkit.getScheduler().runTask(P.p, new Runnable() { + @Override + public void run() { + updating.remove(faction); + applyUpdates(faction); + } + }); + } + } + + public static void applyUpdates(Faction faction) { + if (!FScoreboard.isSupportedByServer()) { + return; + } + + if (faction.isWilderness()) { + return; + } + + if (!P.p.getConfig().getBoolean("scoreboard.default-prefixes", false)) { + return; + } + + if (updating.contains(faction)) { + // Faction will be updated soon. + return; + } + + FTeamWrapper wrapper = wrappers.get(faction); + Set factionMembers = faction.getFPlayers(); + + if (wrapper != null && Factions.getInstance().getFactionById(faction.getId()) == null) { + // Faction was disbanded + wrapper.unregister(); + wrappers.remove(faction); + return; + } + + if (wrapper == null) { + wrapper = new FTeamWrapper(faction); + wrappers.put(faction, wrapper); + } + + for (OfflinePlayer player : wrapper.getPlayers()) { + if (!player.isOnline() || !factionMembers.contains(FPlayers.getInstance().getByOfflinePlayer(player))) { + // Player is offline or no longer in faction + wrapper.removePlayer(player); + } + } + + for (FPlayer fmember : factionMembers) { + if (!fmember.isOnline()) { + continue; + } + + // Scoreboard might not have player; add him/her + wrapper.addPlayer(fmember.getPlayer()); + } + + wrapper.updatePrefixes(); + } + + public static void updatePrefixes(Faction faction) { + if (!FScoreboard.isSupportedByServer()) { + return; + } + + if (!wrappers.containsKey(faction)) { + applyUpdates(faction); + } else { + wrappers.get(faction).updatePrefixes(); + } + } + + protected static void track(FScoreboard fboard) { + if (!FScoreboard.isSupportedByServer()) { + return; + } + tracking.add(fboard); + for (FTeamWrapper wrapper : wrappers.values()) { + wrapper.add(fboard); + } + } + + protected static void untrack(FScoreboard fboard) { + if (!FScoreboard.isSupportedByServer()) { + return; + } + tracking.remove(fboard); + for (FTeamWrapper wrapper : wrappers.values()) { + wrapper.remove(fboard); + } + } + + + private FTeamWrapper(Faction faction) { + this.teamName = "faction_" + (factionTeamPtr++); + this.faction = faction; + + for (FScoreboard fboard : tracking) { + add(fboard); + } + } + + private void add(FScoreboard fboard) { + Scoreboard board = fboard.getScoreboard(); + Team team = board.registerNewTeam(teamName); + teams.put(fboard, team); + + for (OfflinePlayer player : getPlayers()) { + team.addPlayer(player); + } + + updatePrefix(fboard); + } + + private void remove(FScoreboard fboard) { + teams.remove(fboard).unregister(); + } + + private void updatePrefixes() { + if (P.p.getConfig().getBoolean("scoreboard.default-prefixes", false)) { + for (FScoreboard fboard : teams.keySet()) { + updatePrefix(fboard); + } + } + } + + private void updatePrefix(FScoreboard fboard) { + if (P.p.getConfig().getBoolean("scoreboard.default-prefixes", false)) { + FPlayer fplayer = fboard.getFPlayer(); + Team team = teams.get(fboard); + + String prefix = TL.DEFAULT_PREFIX.toString(); + prefix = prefix.replace("{relationcolor}", faction.getRelationTo(fplayer).getColor().toString()); + prefix = prefix.replace("{faction}", faction.getTag().substring(0, Math.min("{faction}".length() + 16 - prefix.length(), faction.getTag().length()))); + if (team.getPrefix() == null || !team.getPrefix().equals(prefix)) { + team.setPrefix(prefix); + } + } + } + + private void addPlayer(OfflinePlayer player) { + if (members.add(player)) { + for (Team team : teams.values()) { + team.addPlayer(player); + } + } + } + + private void removePlayer(OfflinePlayer player) { + if (members.remove(player)) { + for (Team team : teams.values()) { + team.removePlayer(player); + } + } + } + + private Set getPlayers() { + return new HashSet(this.members); + } + + private void unregister() { + for (Team team : teams.values()) { + team.unregister(); + } + teams.clear(); + } +} + diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/scoreboards/sidebar/FDefaultSidebar.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/scoreboards/sidebar/FDefaultSidebar.java new file mode 100644 index 0000000..af93921 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/scoreboards/sidebar/FDefaultSidebar.java @@ -0,0 +1,41 @@ +package com.massivecraft.factions.scoreboards.sidebar; + +import com.massivecraft.factions.FPlayer; +import com.massivecraft.factions.P; +import com.massivecraft.factions.scoreboards.FSidebarProvider; + +import java.util.ArrayList; +import java.util.List; +import java.util.ListIterator; + +public class FDefaultSidebar extends FSidebarProvider { + + @Override + public String getTitle(FPlayer fplayer) { + return replaceTags(fplayer, P.p.getConfig().getString("scoreboard.default-title", "{name}")); + } + + @Override + public List getLines(FPlayer fplayer) { + if (fplayer.hasFaction()) { + return getOutput(fplayer, "scoreboard.default"); + } else if (P.p.getConfig().getBoolean("scoreboard.factionless-enabled", false)) { + return getOutput(fplayer, "scoreboard.factionless"); + } + return getOutput(fplayer, "scoreboard.default"); // no faction, factionless-board disabled + } + + public List getOutput(FPlayer fplayer, String list) { + List lines = P.p.getConfig().getStringList(list); + + if (lines == null || lines.isEmpty()) { + return new ArrayList(); + } + + ListIterator it = lines.listIterator(); + while (it.hasNext()) { + it.set(replaceTags(fplayer, it.next())); + } + return lines; + } +} \ No newline at end of file diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/scoreboards/sidebar/FInfoSidebar.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/scoreboards/sidebar/FInfoSidebar.java new file mode 100644 index 0000000..d375272 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/scoreboards/sidebar/FInfoSidebar.java @@ -0,0 +1,33 @@ +package com.massivecraft.factions.scoreboards.sidebar; + +import com.massivecraft.factions.FPlayer; +import com.massivecraft.factions.Faction; +import com.massivecraft.factions.P; +import com.massivecraft.factions.scoreboards.FSidebarProvider; + +import java.util.List; +import java.util.ListIterator; + +public class FInfoSidebar extends FSidebarProvider { + private final Faction faction; + + public FInfoSidebar(Faction faction) { + this.faction = faction; + } + + @Override + public String getTitle(FPlayer fplayer) { + return faction.getRelationTo(fplayer).getColor() + faction.getTag(); + } + + @Override + public List getLines(FPlayer fplayer) { + List lines = P.p.getConfig().getStringList("scoreboard.finfo"); + + ListIterator it = lines.listIterator(); + while (it.hasNext()) { + it.set(replaceTags(faction, fplayer, it.next())); + } + return lines; + } +} \ No newline at end of file diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/struct/ChatMode.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/struct/ChatMode.java new file mode 100644 index 0000000..020dfb2 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/struct/ChatMode.java @@ -0,0 +1,41 @@ +package com.massivecraft.factions.struct; + +import com.massivecraft.factions.zcore.util.TL; + +public enum ChatMode { + FACTION(3, TL.CHAT_FACTION), + ALLIANCE(2, TL.CHAT_ALLIANCE), + TRUCE(1, TL.CHAT_TRUCE), + PUBLIC(0, TL.CHAT_PUBLIC); + + public final int value; + public final TL nicename; + + private ChatMode(final int value, final TL nicename) { + this.value = value; + this.nicename = nicename; + } + + public boolean isAtLeast(ChatMode role) { + return this.value >= role.value; + } + + public boolean isAtMost(ChatMode role) { + return this.value <= role.value; + } + + @Override + public String toString() { + return this.nicename.toString(); + } + + public ChatMode getNext() { + if (this == PUBLIC) { + return ALLIANCE; + } + if (this == ALLIANCE) { + return FACTION; + } + return PUBLIC; + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/struct/Permission.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/struct/Permission.java new file mode 100644 index 0000000..b5edbb8 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/struct/Permission.java @@ -0,0 +1,98 @@ +package com.massivecraft.factions.struct; + +import com.massivecraft.factions.P; +import org.bukkit.command.CommandSender; + +public enum Permission { + MANAGE_SAFE_ZONE("managesafezone"), + MANAGE_WAR_ZONE("managewarzone"), + OWNERSHIP_BYPASS("ownershipbypass"), + ADMIN("admin"), + ADMIN_ANY("admin.any"), + AHOME("ahome"), + ANNOUNCE("announce"), + AUTOCLAIM("autoclaim"), + AUTO_LEAVE_BYPASS("autoleavebypass"), + BYPASS("bypass"), + CHAT("chat"), + CHATSPY("chatspy"), + CLAIM("claim"), + CLAIM_LINE("claim.line"), + CLAIM_RADIUS("claim.radius"), + CONFIG("config"), + CREATE("create"), + DEINVITE("deinvite"), + DESCRIPTION("description"), + DISBAND("disband"), + DISBAND_ANY("disband.any"), + HELP("help"), + HOME("home"), + INVITE("invite"), + JOIN("join"), + JOIN_ANY("join.any"), + JOIN_OTHERS("join.others"), + KICK("kick"), + KICK_ANY("kick.any"), + LEAVE("leave"), + LIST("list"), + LOCK("lock"), + MAP("map"), + MOD("mod"), + MOD_ANY("mod.any"), + MODIFY_POWER("modifypower"), + MONEY_BALANCE("money.balance"), + MONEY_BALANCE_ANY("money.balance.any"), + MONEY_DEPOSIT("money.deposit"), + MONEY_WITHDRAW("money.withdraw"), + MONEY_WITHDRAW_ANY("money.withdraw.any"), + MONEY_F2F("money.f2f"), + MONEY_F2P("money.f2p"), + MONEY_P2F("money.p2f"), + MONITOR_LOGINS("monitorlogins"), + NO_BOOM("noboom"), + OPEN("open"), + OWNER("owner"), + OWNERLIST("ownerlist"), + SET_PEACEFUL("setpeaceful"), + SET_PERMANENT("setpermanent"), + SET_PERMANENTPOWER("setpermanentpower"), + SHOW_INVITES("showinvites"), + POWERBOOST("powerboost"), + POWER("power"), + POWER_ANY("power.any"), + RELATION("relation"), + RELOAD("reload"), + SAVE("save"), + SETHOME("sethome"), + SETHOME_ANY("sethome.any"), + SHOW("show"), + STATUS("status"), + STUCK("stuck"), + TAG("tag"), + TITLE("title"), + TOGGLE_ALLIANCE_CHAT("togglealliancechat"), + UNCLAIM("unclaim"), + UNCLAIM_ALL("unclaimall"), + VERSION("version"), + SCOREBOARD("scoreboard"), + SEECHUNK("seechunk"), + SETWARP("setwarp"), + TOP("top"), + VAULT("vault"), + SETMAXVAULTS("setmaxvaults"), + WARP("warp"); + + public final String node; + + Permission(final String node) { + this.node = "factions." + node; + } + + public boolean has(CommandSender sender, boolean informSenderIfNot) { + return P.p.perm.has(sender, this.node, informSenderIfNot); + } + + public boolean has(CommandSender sender) { + return has(sender, false); + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/struct/Relation.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/struct/Relation.java new file mode 100644 index 0000000..2dd92c4 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/struct/Relation.java @@ -0,0 +1,186 @@ +package com.massivecraft.factions.struct; + +import com.massivecraft.factions.Conf; +import com.massivecraft.factions.zcore.util.TL; +import org.bukkit.ChatColor; + + +public enum Relation { + MEMBER(4, "member"), + ALLY(3, "ally"), + TRUCE(2, "truce"), + NEUTRAL(1, "neutral"), + ENEMY(0, "enemy"); + + public final int value; + public final String nicename; + + private Relation(final int value, final String nicename) { + this.value = value; + this.nicename = nicename; + } + + @Override + public String toString() { + return this.nicename; + } + + public static Relation fromString(String s) { + // Because Java 6 doesn't allow String switches :( + if (s.equalsIgnoreCase("member")) { + return MEMBER; + } else if (s.equalsIgnoreCase("ally")) { + return ALLY; + } else if (s.equalsIgnoreCase("truce")) { + return TRUCE; + } else if (s.equalsIgnoreCase("enemy")) { + return ENEMY; + } else { + return NEUTRAL; // If they somehow mess things up, go back to default behavior. + } + } + + public String getTranslation() { + try { + return TL.valueOf("RELATION_" + name() + "_SINGULAR").toString(); + } catch (IllegalArgumentException e) { + return toString(); + } + } + + public String getPluralTranslation() { + for (TL t : TL.values()) { + if (t.name().equalsIgnoreCase("RELATION_" + name() + "_PLURAL")) { + return t.toString(); + } + } + return toString(); + } + + public boolean isMember() { + return this == MEMBER; + } + + public boolean isAlly() { + return this == ALLY; + } + + public boolean isTruce() { + return this == TRUCE; + } + + public boolean isNeutral() { + return this == NEUTRAL; + } + + public boolean isEnemy() { + return this == ENEMY; + } + + public boolean isAtLeast(Relation relation) { + return this.value >= relation.value; + } + + public boolean isAtMost(Relation relation) { + return this.value <= relation.value; + } + + public ChatColor getColor() { + if (this == MEMBER) { + return Conf.colorMember; + } else if (this == ALLY) { + return Conf.colorAlly; + } else if (this == NEUTRAL) { + return Conf.colorNeutral; + } else if (this == TRUCE) { + return Conf.colorTruce; + } else { + return Conf.colorEnemy; + } + } + + // return appropriate Conf setting for DenyBuild based on this relation and their online status + public boolean confDenyBuild(boolean online) { + if (isMember()) { + return false; + } + + if (online) { + if (isEnemy()) { + return Conf.territoryEnemyDenyBuild; + } else if (isAlly()) { + return Conf.territoryAllyDenyBuild; + } else if (isTruce()) { + return Conf.territoryTruceDenyBuild; + } else { + return Conf.territoryDenyBuild; + } + } else { + if (isEnemy()) { + return Conf.territoryEnemyDenyBuildWhenOffline; + } else if (isAlly()) { + return Conf.territoryAllyDenyBuildWhenOffline; + } else if (isTruce()) { + return Conf.territoryTruceDenyBuildWhenOffline; + } else { + return Conf.territoryDenyBuildWhenOffline; + } + } + } + + // return appropriate Conf setting for PainBuild based on this relation and their online status + public boolean confPainBuild(boolean online) { + if (isMember()) { + return false; + } + + if (online) { + if (isEnemy()) { + return Conf.territoryEnemyPainBuild; + } else if (isAlly()) { + return Conf.territoryAllyPainBuild; + } else if (isTruce()) { + return Conf.territoryTrucePainBuild; + } else { + return Conf.territoryPainBuild; + } + } else { + if (isEnemy()) { + return Conf.territoryEnemyPainBuildWhenOffline; + } else if (isAlly()) { + return Conf.territoryAllyPainBuildWhenOffline; + } else if (isTruce()) { + return Conf.territoryTrucePainBuildWhenOffline; + } else { + return Conf.territoryPainBuildWhenOffline; + } + } + } + + // return appropriate Conf setting for DenyUseage based on this relation + public boolean confDenyUseage() { + if (isMember()) { + return false; + } else if (isEnemy()) { + return Conf.territoryEnemyDenyUseage; + } else if (isAlly()) { + return Conf.territoryAllyDenyUseage; + } else if (isTruce()) { + return Conf.territoryTruceDenyUseage; + } else { + return Conf.territoryDenyUseage; + } + } + + public double getRelationCost() { + if (isEnemy()) { + return Conf.econCostEnemy; + } else if (isAlly()) { + return Conf.econCostAlly; + } else if (isTruce()) { + return Conf.econCostTruce; + } else { + return Conf.econCostNeutral; + } + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/struct/Role.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/struct/Role.java new file mode 100644 index 0000000..cf81e8a --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/struct/Role.java @@ -0,0 +1,49 @@ +package com.massivecraft.factions.struct; + +import com.massivecraft.factions.Conf; +import com.massivecraft.factions.zcore.util.TL; + +public enum Role { + ADMIN(2, TL.ROLE_ADMIN), + MODERATOR(1, TL.ROLE_MODERATOR), + NORMAL(0, TL.ROLE_NORMAL); + + public final int value; + public final String nicename; + public final TL translation; + + private Role(final int value, final TL translation) { + this.value = value; + this.nicename = translation.toString(); + this.translation = translation; + } + + public boolean isAtLeast(Role role) { + return this.value >= role.value; + } + + public boolean isAtMost(Role role) { + return this.value <= role.value; + } + + @Override + public String toString() { + return this.nicename; + } + + public TL getTranslation(){ + return translation; + } + + public String getPrefix() { + if (this == Role.ADMIN) { + return Conf.prefixAdmin; + } + + if (this == Role.MODERATOR) { + return Conf.prefixMod; + } + + return ""; + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/util/AsciiCompass.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/util/AsciiCompass.java new file mode 100644 index 0000000..7d52b36 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/util/AsciiCompass.java @@ -0,0 +1,110 @@ +package com.massivecraft.factions.util; + +import com.massivecraft.factions.zcore.util.TL; +import org.bukkit.ChatColor; + +import java.util.ArrayList; + +public class AsciiCompass { + + public enum Point { + + N('N'), + NE('/'), + E('E'), + SE('\\'), + S('S'), + SW('/'), + W('W'), + NW('\\'); + + public final char asciiChar; + + private Point(final char asciiChar) { + this.asciiChar = asciiChar; + } + + @Override + public String toString() { + return String.valueOf(this.asciiChar); + } + + public String getTranslation() { + if (this == N) { + return TL.COMPASS_SHORT_NORTH.toString(); + } + if (this == E) { + return TL.COMPASS_SHORT_EAST.toString(); + } + if (this == S) { + return TL.COMPASS_SHORT_SOUTH.toString(); + } + if (this == W) { + return TL.COMPASS_SHORT_WEST.toString(); + } + return toString(); + } + + public String toString(boolean isActive, ChatColor colorActive, String colorDefault) { + return (isActive ? colorActive : colorDefault) + getTranslation(); + } + } + + public static AsciiCompass.Point getCompassPointForDirection(double inDegrees) { + double degrees = (inDegrees - 180) % 360; + if (degrees < 0) { + degrees += 360; + } + + if (0 <= degrees && degrees < 22.5) { + return AsciiCompass.Point.N; + } else if (22.5 <= degrees && degrees < 67.5) { + return AsciiCompass.Point.NE; + } else if (67.5 <= degrees && degrees < 112.5) { + return AsciiCompass.Point.E; + } else if (112.5 <= degrees && degrees < 157.5) { + return AsciiCompass.Point.SE; + } else if (157.5 <= degrees && degrees < 202.5) { + return AsciiCompass.Point.S; + } else if (202.5 <= degrees && degrees < 247.5) { + return AsciiCompass.Point.SW; + } else if (247.5 <= degrees && degrees < 292.5) { + return AsciiCompass.Point.W; + } else if (292.5 <= degrees && degrees < 337.5) { + return AsciiCompass.Point.NW; + } else if (337.5 <= degrees && degrees < 360.0) { + return AsciiCompass.Point.N; + } else { + return null; + } + } + + public static ArrayList getAsciiCompass(Point point, ChatColor colorActive, String colorDefault) { + ArrayList ret = new ArrayList(); + String row; + + row = ""; + row += Point.NW.toString(Point.NW == point, colorActive, colorDefault); + row += Point.N.toString(Point.N == point, colorActive, colorDefault); + row += Point.NE.toString(Point.NE == point, colorActive, colorDefault); + ret.add(row); + + row = ""; + row += Point.W.toString(Point.W == point, colorActive, colorDefault); + row += colorDefault + "+"; + row += Point.E.toString(Point.E == point, colorActive, colorDefault); + ret.add(row); + + row = ""; + row += Point.SW.toString(Point.SW == point, colorActive, colorDefault); + row += Point.S.toString(Point.S == point, colorActive, colorDefault); + row += Point.SE.toString(Point.SE == point, colorActive, colorDefault); + ret.add(row); + + return ret; + } + + public static ArrayList getAsciiCompass(double inDegrees, ChatColor colorActive, String colorDefault) { + return getAsciiCompass(getCompassPointForDirection(inDegrees), colorActive, colorDefault); + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/util/AutoLeaveProcessTask.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/util/AutoLeaveProcessTask.java new file mode 100644 index 0000000..26e656b --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/util/AutoLeaveProcessTask.java @@ -0,0 +1,93 @@ +package com.massivecraft.factions.util; + +import com.massivecraft.factions.*; +import com.massivecraft.factions.struct.Role; +import org.bukkit.scheduler.BukkitRunnable; + +import java.util.ArrayList; +import java.util.ListIterator; +import java.util.logging.Level; + +public class AutoLeaveProcessTask extends BukkitRunnable { + + private transient boolean readyToGo = false; + private transient boolean finished = false; + private transient ListIterator iterator; + private transient double toleranceMillis; + + public AutoLeaveProcessTask() { + ArrayList fplayers = (ArrayList) FPlayers.getInstance().getAllFPlayers(); + this.iterator = fplayers.listIterator(); + this.toleranceMillis = Conf.autoLeaveAfterDaysOfInactivity * 24 * 60 * 60 * 1000; + this.readyToGo = true; + this.finished = false; + } + + public void run() { + if (Conf.autoLeaveAfterDaysOfInactivity <= 0.0 || Conf.autoLeaveRoutineMaxMillisecondsPerTick <= 0.0) { + this.stop(); + return; + } + + if (!readyToGo) { + return; + } + // this is set so it only does one iteration at a time, no matter how frequently the timer fires + readyToGo = false; + // and this is tracked to keep one iteration from dragging on too long and possibly choking the system if there are a very large number of players to go through + long loopStartTime = System.currentTimeMillis(); + + while (iterator.hasNext()) { + long now = System.currentTimeMillis(); + + // if this iteration has been running for maximum time, stop to take a breather until next tick + if (now > loopStartTime + Conf.autoLeaveRoutineMaxMillisecondsPerTick) { + readyToGo = true; + return; + } + + FPlayer fplayer = iterator.next(); + + // Check if they should be exempt from this. + if (!fplayer.willAutoLeave()) { + P.p.debug(Level.INFO, fplayer.getName() + " was going to be auto-removed but was set not to."); + continue; + } + + if (fplayer.isOffline() && now - fplayer.getLastLoginTime() > toleranceMillis) { + if (Conf.logFactionLeave || Conf.logFactionKick) { + P.p.log("Player " + fplayer.getName() + " was auto-removed due to inactivity."); + } + + // if player is faction admin, sort out the faction since he's going away + if (fplayer.getRole() == Role.ADMIN) { + Faction faction = fplayer.getFaction(); + if (faction != null) { + fplayer.getFaction().promoteNewLeader(); + } + } + + fplayer.leave(false); + iterator.remove(); // go ahead and remove this list's link to the FPlayer object + if (Conf.autoLeaveDeleteFPlayerData) { + fplayer.remove(); + } + } + } + + // looks like we've finished + this.stop(); + } + + // we're done, shut down + public void stop() { + readyToGo = false; + finished = true; + + this.cancel(); + } + + public boolean isFinished() { + return finished; + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/util/AutoLeaveTask.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/util/AutoLeaveTask.java new file mode 100644 index 0000000..6a1bda4 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/util/AutoLeaveTask.java @@ -0,0 +1,28 @@ +package com.massivecraft.factions.util; + +import com.massivecraft.factions.Conf; +import com.massivecraft.factions.P; + +public class AutoLeaveTask implements Runnable { + + private static AutoLeaveProcessTask task; + double rate; + + public AutoLeaveTask() { + this.rate = Conf.autoLeaveRoutineRunsEveryXMinutes; + } + + public synchronized void run() { + if (task != null && !task.isFinished()) { + return; + } + + task = new AutoLeaveProcessTask(); + task.runTaskTimer(P.p, 1, 1); + + // maybe setting has been changed? if so, restart this task at new rate + if (this.rate != Conf.autoLeaveRoutineRunsEveryXMinutes) { + P.p.startAutoLeaveTask(true); + } + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/util/EnumTypeAdapter.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/util/EnumTypeAdapter.java new file mode 100644 index 0000000..8e8f6fc --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/util/EnumTypeAdapter.java @@ -0,0 +1,67 @@ +package com.massivecraft.factions.util; + +import com.google.gson.Gson; +import com.google.gson.TypeAdapter; +import com.google.gson.TypeAdapterFactory; +import com.google.gson.annotations.SerializedName; +import com.google.gson.reflect.TypeToken; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonToken; +import com.google.gson.stream.JsonWriter; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +public final class EnumTypeAdapter> extends TypeAdapter { + + private final Map nameToConstant = new HashMap(); + private final Map constantToName = new HashMap(); + + public EnumTypeAdapter(Class classOfT) { + try { + for (T constant : classOfT.getEnumConstants()) { + String name = constant.name(); + SerializedName annotation = classOfT.getField(name).getAnnotation(SerializedName.class); + if (annotation != null) { + name = annotation.value(); + } + nameToConstant.put(name, constant); + constantToName.put(constant, name); + } + } catch (NoSuchFieldException e) { + // ignore since it could be a modified enum + } + } + + public T read(JsonReader in) throws IOException { + if (in.peek() == JsonToken.NULL) { + in.nextNull(); + return null; + } + return nameToConstant.get(in.nextString()); + } + + public void write(JsonWriter out, T value) throws IOException { + out.value(value == null ? null : constantToName.get(value)); + } + + public static final TypeAdapterFactory ENUM_FACTORY = newEnumTypeHierarchyFactory(); + + public static TypeAdapterFactory newEnumTypeHierarchyFactory() { + return new TypeAdapterFactory() { + @SuppressWarnings({"rawtypes", "unchecked"}) + public TypeAdapter create(Gson gson, TypeToken typeToken) { + Class rawType = typeToken.getRawType(); + if (!Enum.class.isAssignableFrom(rawType) || rawType == Enum.class) { + return null; + } + if (!rawType.isEnum()) { + rawType = rawType.getSuperclass(); // handle anonymous subclasses + } + return (TypeAdapter) new EnumTypeAdapter(rawType); + } + }; + } + +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/util/LazyLocation.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/util/LazyLocation.java new file mode 100644 index 0000000..a141bbc --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/util/LazyLocation.java @@ -0,0 +1,101 @@ +package com.massivecraft.factions.util; + +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.World; + +import java.io.Serializable; + +/* + * This class provides a lazy-load Location, so that World doesn't need to be initialized + * yet when an object of this class is created, only when the Location is first accessed. + */ + +public class LazyLocation implements Serializable { + private static final long serialVersionUID = -6049901271320963314L; + private transient Location location = null; + private String worldName; + private double x; + private double y; + private double z; + private float pitch; + private float yaw; + + public LazyLocation(Location loc) { + setLocation(loc); + } + + public LazyLocation(final String worldName, final double x, final double y, final double z) { + this(worldName, x, y, z, 0, 0); + } + + public LazyLocation(final String worldName, final double x, final double y, final double z, final float yaw, final float pitch) { + this.worldName = worldName; + this.x = x; + this.y = y; + this.z = z; + this.yaw = yaw; + this.pitch = pitch; + } + + // This returns the actual Location + public final Location getLocation() { + // make sure Location is initialized before returning it + initLocation(); + return location; + } + + // change the Location + public final void setLocation(Location loc) { + this.location = loc; + this.worldName = loc.getWorld().getName(); + this.x = loc.getX(); + this.y = loc.getY(); + this.z = loc.getZ(); + this.yaw = loc.getYaw(); + this.pitch = loc.getPitch(); + } + + + // This initializes the Location + private void initLocation() { + // if location is already initialized, simply return + if (location != null) { + return; + } + + // get World; hopefully it's initialized at this point + World world = Bukkit.getWorld(worldName); + if (world == null) { + return; + } + + // store the Location for future calls, and pass it on + location = new Location(world, x, y, z, yaw, pitch); + } + + + public final String getWorldName() { + return worldName; + } + + public final double getX() { + return x; + } + + public final double getY() { + return y; + } + + public final double getZ() { + return z; + } + + public final double getPitch() { + return pitch; + } + + public final double getYaw() { + return yaw; + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/util/MapFLocToStringSetTypeAdapter.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/util/MapFLocToStringSetTypeAdapter.java new file mode 100644 index 0000000..eb9936a --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/util/MapFLocToStringSetTypeAdapter.java @@ -0,0 +1,104 @@ +package com.massivecraft.factions.util; + +import com.google.gson.*; +import com.massivecraft.factions.FLocation; +import com.massivecraft.factions.P; + +import java.lang.reflect.Type; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; +import java.util.logging.Level; + + +public class MapFLocToStringSetTypeAdapter implements JsonDeserializer>>, JsonSerializer>> { + + @Override + public Map> deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { + try { + JsonObject obj = json.getAsJsonObject(); + if (obj == null) { + return null; + } + + Map> locationMap = new ConcurrentHashMap>(); + Set nameSet; + Iterator iter; + String worldName; + String[] coords; + int x, z; + + for (Entry entry : obj.entrySet()) { + worldName = entry.getKey(); + for (Entry entry2 : entry.getValue().getAsJsonObject().entrySet()) { + coords = entry2.getKey().trim().split("[,\\s]+"); + x = Integer.parseInt(coords[0]); + z = Integer.parseInt(coords[1]); + + nameSet = new HashSet(); + iter = entry2.getValue().getAsJsonArray().iterator(); + while (iter.hasNext()) { + nameSet.add(iter.next().getAsString()); + } + + locationMap.put(new FLocation(worldName, x, z), nameSet); + } + } + + return locationMap; + + } catch (Exception ex) { + ex.printStackTrace(); + P.p.log(Level.WARNING, "Error encountered while deserializing a Map of FLocations to String Sets."); + return null; + } + } + + @Override + public JsonElement serialize(Map> src, Type typeOfSrc, JsonSerializationContext context) { + JsonObject obj = new JsonObject(); + + try { + if (src != null) { + FLocation loc; + String locWorld; + Set nameSet; + Iterator iter; + JsonArray nameArray; + JsonPrimitive nameElement; + + for (Entry> entry : src.entrySet()) { + loc = entry.getKey(); + locWorld = loc.getWorldName(); + nameSet = entry.getValue(); + + if (nameSet == null || nameSet.isEmpty()) { + continue; + } + + nameArray = new JsonArray(); + iter = nameSet.iterator(); + while (iter.hasNext()) { + nameElement = new JsonPrimitive(iter.next()); + nameArray.add(nameElement); + } + + if (!obj.has(locWorld)) { + obj.add(locWorld, new JsonObject()); + } + + obj.get(locWorld).getAsJsonObject().add(loc.getCoordString(), nameArray); + } + } + return obj; + + } catch (Exception ex) { + ex.printStackTrace(); + P.p.log(Level.WARNING, "Error encountered while serializing a Map of FLocations to String Sets."); + return obj; + } + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/util/MiscUtil.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/util/MiscUtil.java new file mode 100644 index 0000000..b59ff55 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/util/MiscUtil.java @@ -0,0 +1,113 @@ +package com.massivecraft.factions.util; + +import com.massivecraft.factions.Conf; +import com.massivecraft.factions.FPlayer; +import com.massivecraft.factions.Faction; +import com.massivecraft.factions.P; +import com.massivecraft.factions.zcore.util.TL; +import org.bukkit.ChatColor; +import org.bukkit.entity.Creature; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; + +public class MiscUtil { + + public static EntityType creatureTypeFromEntity(Entity entity) { + if (!(entity instanceof Creature)) { + return null; + } + + String name = entity.getClass().getSimpleName(); + name = name.substring(5); // Remove "Craft" + + return EntityType.fromName(name); + } + + // Inclusive range + public static long[] range(long start, long end) { + long[] values = new long[(int) Math.abs(end - start) + 1]; + + if (end < start) { + long oldstart = start; + start = end; + end = oldstart; + } + + for (long i = start; i <= end; i++) { + values[(int) (i - start)] = i; + } + + return values; + } + + /// TODO create tag whitelist!! + public static HashSet substanceChars = new HashSet(Arrays.asList(new String[]{"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"})); + + public static String getComparisonString(String str) { + String ret = ""; + + str = ChatColor.stripColor(str); + str = str.toLowerCase(); + + for (char c : str.toCharArray()) { + if (substanceChars.contains(String.valueOf(c))) { + ret += c; + } + } + return ret.toLowerCase(); + } + + public static ArrayList validateTag(String str) { + ArrayList errors = new ArrayList(); + + if (getComparisonString(str).length() < Conf.factionTagLengthMin) { + errors.add(P.p.txt.parse(TL.GENERIC_FACTIONTAG_TOOSHORT.toString(), Conf.factionTagLengthMin)); + } + + if (str.length() > Conf.factionTagLengthMax) { + errors.add(P.p.txt.parse(TL.GENERIC_FACTIONTAG_TOOLONG.toString(), Conf.factionTagLengthMax)); + } + + for (char c : str.toCharArray()) { + if (!substanceChars.contains(String.valueOf(c))) { + errors.add(P.p.txt.parse(TL.GENERIC_FACTIONTAG_ALPHANUMERIC.toString(), c)); + } + } + + return errors; + } + + public static Iterable rankOrder(Iterable players) { + List admins = new ArrayList(); + List moderators = new ArrayList(); + List normal = new ArrayList(); + + for (FPlayer player : players) { + switch (player.getRole()) { + case ADMIN: + admins.add(player); + break; + + case MODERATOR: + moderators.add(player); + break; + + case NORMAL: + normal.add(player); + break; + } + } + + List ret = new ArrayList(); + ret.addAll(admins); + ret.addAll(moderators); + ret.addAll(normal); + return ret; + } +} + diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/util/MyLocationTypeAdapter.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/util/MyLocationTypeAdapter.java new file mode 100644 index 0000000..c68fca6 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/util/MyLocationTypeAdapter.java @@ -0,0 +1,59 @@ +package com.massivecraft.factions.util; + +import com.google.gson.*; +import com.massivecraft.factions.P; + +import java.lang.reflect.Type; +import java.util.logging.Level; + + +public class MyLocationTypeAdapter implements JsonDeserializer, JsonSerializer { + + private static final String WORLD = "world"; + private static final String X = "x"; + private static final String Y = "y"; + private static final String Z = "z"; + private static final String YAW = "yaw"; + private static final String PITCH = "pitch"; + + @Override + public LazyLocation deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { + try { + JsonObject obj = json.getAsJsonObject(); + + String worldName = obj.get(WORLD).getAsString(); + double x = obj.get(X).getAsDouble(); + double y = obj.get(Y).getAsDouble(); + double z = obj.get(Z).getAsDouble(); + float yaw = obj.get(YAW).getAsFloat(); + float pitch = obj.get(PITCH).getAsFloat(); + + return new LazyLocation(worldName, x, y, z, yaw, pitch); + + } catch (Exception ex) { + ex.printStackTrace(); + P.p.log(Level.WARNING, "Error encountered while deserializing a LazyLocation."); + return null; + } + } + + @Override + public JsonElement serialize(LazyLocation src, Type typeOfSrc, JsonSerializationContext context) { + JsonObject obj = new JsonObject(); + + try { + obj.addProperty(WORLD, src.getWorldName()); + obj.addProperty(X, src.getX()); + obj.addProperty(Y, src.getY()); + obj.addProperty(Z, src.getZ()); + obj.addProperty(YAW, src.getYaw()); + obj.addProperty(PITCH, src.getPitch()); + + return obj; + } catch (Exception ex) { + ex.printStackTrace(); + P.p.log(Level.WARNING, "Error encountered while serializing a LazyLocation."); + return obj; + } + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/util/RelationUtil.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/util/RelationUtil.java new file mode 100644 index 0000000..3c03cd2 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/util/RelationUtil.java @@ -0,0 +1,118 @@ +package com.massivecraft.factions.util; + +import com.massivecraft.factions.Conf; +import com.massivecraft.factions.FPlayer; +import com.massivecraft.factions.Faction; +import com.massivecraft.factions.iface.RelationParticipator; +import com.massivecraft.factions.struct.Relation; +import com.massivecraft.factions.zcore.util.TL; +import com.massivecraft.factions.zcore.util.TextUtil; +import org.bukkit.ChatColor; + +public class RelationUtil { + + public static String describeThatToMe(RelationParticipator that, RelationParticipator me, boolean ucfirst) { + String ret = ""; + + Faction thatFaction = getFaction(that); + if (thatFaction == null) { + return "ERROR"; // ERROR + } + + Faction myFaction = getFaction(me); +// if (myFaction == null) return that.describeTo(null); // no relation, but can show basic name or tag + + if (that instanceof Faction) { + if (me instanceof FPlayer && myFaction == thatFaction) { + ret = TL.GENERIC_YOURFACTION.toString(); + } else { + ret = thatFaction.getTag(); + } + } else if (that instanceof FPlayer) { + FPlayer fplayerthat = (FPlayer) that; + if (that == me) { + ret = TL.GENERIC_YOU.toString(); + } else if (thatFaction == myFaction) { + ret = fplayerthat.getNameAndTitle(); + } else { + ret = fplayerthat.getNameAndTag(); + } + } + + if (ucfirst) { + ret = TextUtil.upperCaseFirst(ret); + } + + return "" + getColorOfThatToMe(that, me) + ret; + } + + public static String describeThatToMe(RelationParticipator that, RelationParticipator me) { + return describeThatToMe(that, me, false); + } + + public static Relation getRelationTo(RelationParticipator me, RelationParticipator that) { + return getRelationTo(that, me, false); + } + + public static Relation getRelationTo(RelationParticipator me, RelationParticipator that, boolean ignorePeaceful) { + Faction fthat = getFaction(that); + if (fthat == null) { + return Relation.NEUTRAL; // ERROR + } + + Faction fme = getFaction(me); + if (fme == null) { + return Relation.NEUTRAL; // ERROR + } + + if (!fthat.isNormal() || !fme.isNormal()) { + return Relation.NEUTRAL; + } + + if (fthat.equals(fme)) { + return Relation.MEMBER; + } + + if (!ignorePeaceful && (fme.isPeaceful() || fthat.isPeaceful())) { + return Relation.NEUTRAL; + } + + if (fme.getRelationWish(fthat).value >= fthat.getRelationWish(fme).value) { + return fthat.getRelationWish(fme); + } + + return fme.getRelationWish(fthat); + } + + public static Faction getFaction(RelationParticipator rp) { + if (rp instanceof Faction) { + return (Faction) rp; + } + + if (rp instanceof FPlayer) { + return ((FPlayer) rp).getFaction(); + } + + // ERROR + return null; + } + + public static ChatColor getColorOfThatToMe(RelationParticipator that, RelationParticipator me) { + Faction thatFaction = getFaction(that); + if (thatFaction != null) { + if (thatFaction.isPeaceful() && thatFaction != getFaction(me)) { + return Conf.colorPeaceful; + } + + if (thatFaction.isSafeZone() && thatFaction != getFaction(me)) { + return Conf.colorPeaceful; + } + + if (thatFaction.isWarZone() && thatFaction != getFaction(me)) { + return Conf.colorWar; + } + } + + return getRelationTo(that, me).getColor(); + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/util/SpiralTask.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/util/SpiralTask.java new file mode 100644 index 0000000..85afa1d --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/util/SpiralTask.java @@ -0,0 +1,209 @@ +package com.massivecraft.factions.util; + +import com.massivecraft.factions.FLocation; +import com.massivecraft.factions.P; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.World; + +import java.util.logging.Level; + + +/* + * reference diagram, task should move in this pattern out from chunk 0 in the center. + * 8 [>][>][>][>][>] etc. + * [^][6][>][>][>][>][>][6] + * [^][^][4][>][>][>][4][v] + * [^][^][^][2][>][2][v][v] + * [^][^][^][^][0][v][v][v] + * [^][^][^][1][1][v][v][v] + * [^][^][3][<][<][3][v][v] + * [^][5][<][<][<][<][5][v] + * [7][<][<][<][<][<][<][7] + */ + +public abstract class SpiralTask implements Runnable { + + // general task-related reference data + private transient World world = null; + private transient boolean readyToGo = false; + private transient int taskID = -1; + private transient int limit = 0; + + // values for the spiral pattern routine + private transient int x = 0; + private transient int z = 0; + private transient boolean isZLeg = false; + private transient boolean isNeg = false; + private transient int length = -1; + private transient int current = 0; + + @SuppressWarnings("LeakingThisInConstructor") + public SpiralTask(FLocation fLocation, int radius) { + // limit is determined based on spiral leg length for given radius; see insideRadius() + this.limit = (radius - 1) * 2; + + this.world = Bukkit.getWorld(fLocation.getWorldName()); + if (this.world == null) { + P.p.log(Level.WARNING, "[SpiralTask] A valid world must be specified!"); + this.stop(); + return; + } + + this.x = (int) fLocation.getX(); + this.z = (int) fLocation.getZ(); + + this.readyToGo = true; + + // get this party started + this.setTaskID(Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(P.p, this, 2, 2)); + } + + /* + * This is where the necessary work is done; you'll need to override this method with whatever you want + * done at each chunk in the spiral pattern. + * Return false if the entire task needs to be aborted, otherwise return true to continue. + */ + public abstract boolean work(); + + /* + * Returns an FLocation pointing at the current chunk X and Z values. + */ + public final FLocation currentFLocation() { + return new FLocation(world.getName(), x, z); + } + + /* + * Returns a Location pointing at the current chunk X and Z values. + * note that the Location is at the corner of the chunk, not the center. + */ + public final Location currentLocation() { + return new Location(world, FLocation.chunkToBlock(x), 65.0, FLocation.chunkToBlock(z)); + } + + /* + * Returns current chunk X and Z values. + */ + public final int getX() { + return x; + } + + public final int getZ() { + return z; + } + + + +/* + * Below are the guts of the class, which you normally wouldn't need to mess with. + */ + + public final void setTaskID(int ID) { + if (ID == -1) { + this.stop(); + } + taskID = ID; + } + + public final void run() { + if (!this.valid() || !readyToGo) { + return; + } + + // this is set so it only does one iteration at a time, no matter how frequently the timer fires + readyToGo = false; + + // make sure we're still inside the specified radius + if (!this.insideRadius()) { + return; + } + + // track this to keep one iteration from dragging on too long and possibly choking the system + long loopStartTime = now(); + + // keep going until the task has been running for 20ms or more, then stop to take a breather + while (now() < loopStartTime + 20) { + // run the primary task on the current X/Z coordinates + if (!this.work()) { + this.finish(); + return; + } + + // move on to next chunk in spiral + if (!this.moveToNext()) { + return; + } + } + + // ready for the next iteration to run + readyToGo = true; + } + + // step through chunks in spiral pattern from center; returns false if we're done, otherwise returns true + public final boolean moveToNext() { + if (!this.valid()) { + return false; + } + + // make sure we don't need to turn down the next leg of the spiral + if (current < length) { + current++; + + // if we're outside the radius, we're done + if (!this.insideRadius()) { + return false; + } + } else { // one leg/side of the spiral down... + current = 0; + isZLeg ^= true; + // every second leg (between X and Z legs, negative or positive), length increases + if (isZLeg) { + isNeg ^= true; + length++; + } + } + + // move one chunk further in the appropriate direction + if (isZLeg) { + z += (isNeg) ? -1 : 1; + } else { + x += (isNeg) ? -1 : 1; + } + + return true; + } + + public final boolean insideRadius() { + boolean inside = current < limit; + if (!inside) { + this.finish(); + } + return inside; + } + + // for successful completion + public void finish() { +// P.p.log("SpiralTask successfully completed!"); + this.stop(); + } + + // we're done, whether finished or cancelled + public final void stop() { + if (!this.valid()) { + return; + } + + readyToGo = false; + Bukkit.getServer().getScheduler().cancelTask(taskID); + taskID = -1; + } + + // is this task still valid/workable? + public final boolean valid() { + return taskID != -1; + } + + private static long now() { + return System.currentTimeMillis(); + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/util/VisualizeUtil.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/util/VisualizeUtil.java new file mode 100644 index 0000000..8ef7f91 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/util/VisualizeUtil.java @@ -0,0 +1,80 @@ +package com.massivecraft.factions.util; + +import org.bukkit.Location; +import org.bukkit.block.Block; +import org.bukkit.entity.Player; + +import java.util.*; +import java.util.Map.Entry; + +public class VisualizeUtil { + + protected static Map> playerLocations = new HashMap>(); + + public static Set getPlayerLocations(Player player) { + return getPlayerLocations(player.getUniqueId()); + } + + public static Set getPlayerLocations(UUID uuid) { + Set ret = playerLocations.get(uuid); + if (ret == null) { + ret = new HashSet(); + playerLocations.put(uuid, ret); + } + return ret; + } + + @SuppressWarnings("deprecation") + public static void addLocation(Player player, Location location, int typeId, byte data) { + getPlayerLocations(player).add(location); + player.sendBlockChange(location, typeId, data); + } + + @SuppressWarnings("deprecation") + public static void addLocation(Player player, Location location, int typeId) { + getPlayerLocations(player).add(location); + player.sendBlockChange(location, typeId, (byte) 0); + } + + @SuppressWarnings("deprecation") + public static void addLocations(Player player, Map locationMaterialIds) { + Set ploc = getPlayerLocations(player); + for (Entry entry : locationMaterialIds.entrySet()) { + ploc.add(entry.getKey()); + player.sendBlockChange(entry.getKey(), entry.getValue(), (byte) 0); + } + } + + @SuppressWarnings("deprecation") + public static void addLocations(Player player, Collection locations, int typeId) { + Set ploc = getPlayerLocations(player); + for (Location location : locations) { + ploc.add(location); + player.sendBlockChange(location, typeId, (byte) 0); + } + } + + @SuppressWarnings("deprecation") + public static void addBlocks(Player player, Collection blocks, int typeId) { + Set ploc = getPlayerLocations(player); + for (Block block : blocks) { + Location location = block.getLocation(); + ploc.add(location); + player.sendBlockChange(location, typeId, (byte) 0); + } + } + + @SuppressWarnings("deprecation") + public static void clear(Player player) { + Set locations = getPlayerLocations(player); + if (locations == null) { + return; + } + for (Location location : locations) { + Block block = location.getWorld().getBlockAt(location); + player.sendBlockChange(location, block.getTypeId(), block.getData()); + } + locations.clear(); + } + +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/util/WarmUpUtil.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/util/WarmUpUtil.java new file mode 100644 index 0000000..14862ab --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/util/WarmUpUtil.java @@ -0,0 +1,42 @@ +package com.massivecraft.factions.util; + +import com.massivecraft.factions.FPlayer; +import com.massivecraft.factions.P; +import com.massivecraft.factions.zcore.util.TL; + +public class WarmUpUtil { + + /** + * @param player The player to notify. + * @param translationKey The translation key used for notifying. + * @param action The action, inserted into the notification message. + * @param runnable The task to run after the delay. If the delay is 0, the task is instantly ran. + * @param delay The time used, in seconds, for the delay. + *

+ * note: for translations: %s = action, %d = delay + */ + public static void process(final FPlayer player, Warmup warmup, TL translationKey, String action, final Runnable runnable, long delay) { + if (delay > 0) { + if (player.isWarmingUp()) { + player.msg(TL.WARMUPS_ALREADY); + } else { + player.msg(translationKey.format(action, delay)); + int id = P.p.getServer().getScheduler().runTaskLater(P.p, new Runnable() { + @Override + public void run() { + player.stopWarmup(); + runnable.run(); + } + }, delay * 20).getTaskId(); + player.addWarmup(warmup, id); + } + } else { + runnable.run(); + } + } + + public enum Warmup { + HOME, WARP; + } + +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/CommandVisibility.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/CommandVisibility.java new file mode 100644 index 0000000..df588fb --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/CommandVisibility.java @@ -0,0 +1,7 @@ +package com.massivecraft.factions.zcore; + +public enum CommandVisibility { + VISIBLE, // Visible commands are visible to anyone. Even those who don't have permission to use it or is of invalid sender type. + SECRET, // Secret commands are visible only to those who can use the command. These commands are usually some kind of admin commands. + INVISIBLE; // Invisible commands are invisible to everyone, even those who can use the command. +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/MCommand.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/MCommand.java new file mode 100644 index 0000000..d67ee46 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/MCommand.java @@ -0,0 +1,491 @@ +package com.massivecraft.factions.zcore; + +import com.massivecraft.factions.FPlayer; +import com.massivecraft.factions.Faction; +import com.massivecraft.factions.P; +import com.massivecraft.factions.integration.Econ; +import com.massivecraft.factions.zcore.util.TL; +import com.massivecraft.factions.zcore.util.TextUtil; +import mkremins.fanciful.FancyMessage; +import org.apache.commons.lang.time.DurationFormatUtils; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map.Entry; +import java.util.UUID; + + +public abstract class MCommand { + + public T p; + + // The sub-commands to this command + public List> subCommands; + + public void addSubCommand(MCommand subCommand) { + subCommand.commandChain.addAll(this.commandChain); + subCommand.commandChain.add(this); + this.subCommands.add(subCommand); + } + + // The different names this commands will react to + public List aliases; + public boolean allowNoSlashAccess; + + // Information on the args + public List requiredArgs; + public LinkedHashMap optionalArgs; + public boolean errorOnToManyArgs = true; + + // FIELD: Help Short + // This field may be left blank and will in such case be loaded from the permissions node instead. + // Thus make sure the permissions node description is an action description like "eat hamburgers" or "do admin stuff". + private String helpShort; + + public void setHelpShort(String val) { + this.helpShort = val; + } + + public String getHelpShort() { + if (this.helpShort == null) { + return getUsageTranslation().toString(); + } + + return this.helpShort; + } + + public abstract TL getUsageTranslation(); + + public List helpLong; + public CommandVisibility visibility; + + // Some information on permissions + public boolean senderMustBePlayer; + public String permission; + + // Information available on execution of the command + public CommandSender sender; // Will always be set + public Player me; // Will only be set when the sender is a player + public boolean senderIsConsole; + public List args; // Will contain the arguments, or and empty list if there are none. + public List> commandChain = new ArrayList>(); // The command chain used to execute this command + + public MCommand(T p) { + this.p = p; + + this.permission = null; + + this.allowNoSlashAccess = false; + + this.subCommands = new ArrayList>(); + this.aliases = new ArrayList(); + + this.requiredArgs = new ArrayList(); + this.optionalArgs = new LinkedHashMap(); + + this.helpShort = null; + this.helpLong = new ArrayList(); + this.visibility = CommandVisibility.VISIBLE; + } + + // The commandChain is a list of the parent command chain used to get to this command. + public void execute(CommandSender sender, List args, List> commandChain) { + // Set the execution-time specific variables + this.sender = sender; + if (sender instanceof Player) { + this.me = (Player) sender; + this.senderIsConsole = false; + } else { + this.me = null; + this.senderIsConsole = true; + } + this.args = args; + this.commandChain = commandChain; + + // Is there a matching sub command? + if (args.size() > 0) { + for (MCommand subCommand : this.subCommands) { + if (subCommand.aliases.contains(args.get(0).toLowerCase())) { + args.remove(0); + commandChain.add(this); + subCommand.execute(sender, args, commandChain); + return; + } + } + } + + if (!validCall(this.sender, this.args)) { + return; + } + + if (!this.isEnabled()) { + return; + } + + perform(); + } + + public void execute(CommandSender sender, List args) { + execute(sender, args, new ArrayList>()); + } + + // This is where the command action is performed. + public abstract void perform(); + + + // -------------------------------------------- // + // Call Validation + // -------------------------------------------- // + + /** + * In this method we validate that all prerequisites to perform this command has been met. + */ + // TODO: There should be a boolean for silence + public boolean validCall(CommandSender sender, List args) { + return validSenderType(sender, true) && validSenderPermissions(sender, true) && validArgs(args, sender); + + } + + public boolean isEnabled() { + return true; + } + + public boolean validSenderType(CommandSender sender, boolean informSenderIfNot) { + if (this.senderMustBePlayer && !(sender instanceof Player)) { + if (informSenderIfNot) { + msg(TL.GENERIC_PLAYERONLY); + } + return false; + } + return true; + } + + public boolean validSenderPermissions(CommandSender sender, boolean informSenderIfNot) { + return this.permission == null || p.perm.has(sender, this.permission, informSenderIfNot); + } + + public boolean validArgs(List args, CommandSender sender) { + if (args.size() < this.requiredArgs.size()) { + if (sender != null) { + msg(TL.GENERIC_ARGS_TOOFEW); + sender.sendMessage(this.getUseageTemplate()); + } + return false; + } + + if (args.size() > this.requiredArgs.size() + this.optionalArgs.size() && this.errorOnToManyArgs) { + if (sender != null) { + // Get the to many string slice + List theToMany = args.subList(this.requiredArgs.size() + this.optionalArgs.size(), args.size()); + msg(TL.GENERIC_ARGS_TOOMANY, TextUtil.implode(theToMany, " ")); + sender.sendMessage(this.getUseageTemplate()); + } + return false; + } + return true; + } + + public boolean validArgs(List args) { + return this.validArgs(args, null); + } + + // -------------------------------------------- // + // Help and Usage information + // -------------------------------------------- // + + public String getUseageTemplate(List> commandChain, boolean addShortHelp) { + StringBuilder ret = new StringBuilder(); + ret.append(p.txt.parseTags("")); + ret.append('/'); + + for (MCommand mc : commandChain) { + ret.append(TextUtil.implode(mc.aliases, ",")); + ret.append(' '); + } + + ret.append(TextUtil.implode(this.aliases, ",")); + + List args = new ArrayList(); + + for (String requiredArg : this.requiredArgs) { + args.add("<" + requiredArg + ">"); + } + + for (Entry optionalArg : this.optionalArgs.entrySet()) { + String val = optionalArg.getValue(); + if (val == null) { + val = ""; + } else { + val = "=" + val; + } + args.add("[" + optionalArg.getKey() + val + "]"); + } + + if (args.size() > 0) { + ret.append(p.txt.parseTags("

+ * The FPlayer is linked to a minecraft player using the player name. + *

+ * The same instance is always returned for the same player. This means you can use the == operator. No .equals method + * necessary. + */ + +public abstract class MemoryFPlayer implements FPlayer { + + protected String factionId; + protected Role role; + protected String title; + protected double power; + protected double powerBoost; + protected long lastPowerUpdateTime; + protected long lastLoginTime; + protected ChatMode chatMode; + protected boolean ignoreAllianceChat = false; + protected String id; + protected String name; + protected boolean monitorJoins; + protected boolean spyingChat = false; + protected boolean showScoreboard = true; + protected WarmUpUtil.Warmup warmup; + protected int warmupTask; + protected boolean isAdminBypassing = false; + protected int kills, deaths; + protected boolean willAutoLeave = true; + + protected transient FLocation lastStoodAt = new FLocation(); // Where did this player stand the last time we checked? + protected transient boolean mapAutoUpdating; + protected transient Faction autoClaimFor; + protected transient boolean autoSafeZoneEnabled; + protected transient boolean autoWarZoneEnabled; + protected transient boolean loginPvpDisabled; + protected transient long lastFrostwalkerMessage; + + + public void login() { + this.kills = getPlayer().getStatistic(Statistic.PLAYER_KILLS); + this.deaths = getPlayer().getStatistic(Statistic.DEATHS); + } + + public void logout() { + this.kills = getPlayer().getStatistic(Statistic.PLAYER_KILLS); + this.deaths = getPlayer().getStatistic(Statistic.DEATHS); + } + + public Faction getFaction() { + if (this.factionId == null) { + this.factionId = "0"; + } + return Factions.getInstance().getFactionById(this.factionId); + } + + public String getFactionId() { + return this.factionId; + } + + public boolean hasFaction() { + return !factionId.equals("0"); + } + + public void setFaction(Faction faction) { + Faction oldFaction = this.getFaction(); + if (oldFaction != null) { + oldFaction.removeFPlayer(this); + } + faction.addFPlayer(this); + this.factionId = faction.getId(); + } + + public void setMonitorJoins(boolean monitor) { + this.monitorJoins = monitor; + } + + public boolean isMonitoringJoins() { + return this.monitorJoins; + } + + public Role getRole() { + return this.role; + } + + public void setRole(Role role) { + this.role = role; + } + + public double getPowerBoost() { + return this.powerBoost; + } + + public void setPowerBoost(double powerBoost) { + this.powerBoost = powerBoost; + } + + public boolean willAutoLeave() { + return this.willAutoLeave; + } + + public void setAutoLeave(boolean willLeave) { + this.willAutoLeave = willLeave; + P.p.debug(name + " set autoLeave to " + willLeave); + } + + public long getLastFrostwalkerMessage() { + return this.lastFrostwalkerMessage; + } + + public void setLastFrostwalkerMessage() { + this.lastFrostwalkerMessage = System.currentTimeMillis(); + } + + public Faction getAutoClaimFor() { + return autoClaimFor; + } + + public void setAutoClaimFor(Faction faction) { + this.autoClaimFor = faction; + if (this.autoClaimFor != null) { + // TODO: merge these into same autoclaim + this.autoSafeZoneEnabled = false; + this.autoWarZoneEnabled = false; + } + } + + public boolean isAutoSafeClaimEnabled() { + return autoSafeZoneEnabled; + } + + public void setIsAutoSafeClaimEnabled(boolean enabled) { + this.autoSafeZoneEnabled = enabled; + if (enabled) { + this.autoClaimFor = null; + this.autoWarZoneEnabled = false; + } + } + + public boolean isAutoWarClaimEnabled() { + return autoWarZoneEnabled; + } + + public void setIsAutoWarClaimEnabled(boolean enabled) { + this.autoWarZoneEnabled = enabled; + if (enabled) { + this.autoClaimFor = null; + this.autoSafeZoneEnabled = false; + } + } + + public boolean isAdminBypassing() { + return this.isAdminBypassing; + } + + public boolean isVanished() { + return Essentials.isVanished(getPlayer()); + } + + public void setIsAdminBypassing(boolean val) { + this.isAdminBypassing = val; + } + + public void setChatMode(ChatMode chatMode) { + this.chatMode = chatMode; + } + + public ChatMode getChatMode() { + if (this.factionId.equals("0") || !Conf.factionOnlyChat) { + this.chatMode = ChatMode.PUBLIC; + } + return chatMode; + } + + public void setIgnoreAllianceChat(boolean ignore) { + this.ignoreAllianceChat = ignore; + } + + public boolean isIgnoreAllianceChat() { + return ignoreAllianceChat; + } + + public void setSpyingChat(boolean chatSpying) { + this.spyingChat = chatSpying; + } + + public boolean isSpyingChat() { + return spyingChat; + } + + // FIELD: account + public String getAccountId() { + return this.getId(); + } + + public MemoryFPlayer() { + } + + public MemoryFPlayer(String id) { + this.id = id; + this.resetFactionData(false); + this.power = Conf.powerPlayerStarting; + this.lastPowerUpdateTime = System.currentTimeMillis(); + this.lastLoginTime = System.currentTimeMillis(); + this.mapAutoUpdating = false; + this.autoClaimFor = null; + this.autoSafeZoneEnabled = false; + this.autoWarZoneEnabled = false; + this.loginPvpDisabled = Conf.noPVPDamageToOthersForXSecondsAfterLogin > 0; + this.powerBoost = 0.0; + this.showScoreboard = P.p.getConfig().getBoolean("scoreboard.default-enabled", false); + this.kills = 0; + this.deaths = 0; + + if (!Conf.newPlayerStartingFactionID.equals("0") && Factions.getInstance().isValidFactionId(Conf.newPlayerStartingFactionID)) { + this.factionId = Conf.newPlayerStartingFactionID; + } + } + + public MemoryFPlayer(MemoryFPlayer other) { + this.factionId = other.factionId; + this.id = other.id; + this.power = other.power; + this.lastLoginTime = other.lastLoginTime; + this.mapAutoUpdating = other.mapAutoUpdating; + this.autoClaimFor = other.autoClaimFor; + this.autoSafeZoneEnabled = other.autoSafeZoneEnabled; + this.autoWarZoneEnabled = other.autoWarZoneEnabled; + this.loginPvpDisabled = other.loginPvpDisabled; + this.powerBoost = other.powerBoost; + this.role = other.role; + this.title = other.title; + this.chatMode = other.chatMode; + this.spyingChat = other.spyingChat; + this.lastStoodAt = other.lastStoodAt; + this.isAdminBypassing = other.isAdminBypassing; + this.showScoreboard = P.p.getConfig().getBoolean("scoreboard.default-enabled", true); + this.kills = other.kills; + this.deaths = other.deaths; + } + + public void resetFactionData(boolean doSpoutUpdate) { + // clean up any territory ownership in old faction, if there is one + if (factionId != null && Factions.getInstance().isValidFactionId(this.getFactionId())) { + Faction currentFaction = this.getFaction(); + currentFaction.removeFPlayer(this); + if (currentFaction.isNormal()) { + currentFaction.clearClaimOwnership(this); + } + } + + this.factionId = "0"; // The default neutral faction + this.chatMode = ChatMode.PUBLIC; + this.role = Role.NORMAL; + this.title = ""; + this.autoClaimFor = null; + } + + public void resetFactionData() { + this.resetFactionData(true); + } + + // -------------------------------------------- // + // Getters And Setters + // -------------------------------------------- // + + + public long getLastLoginTime() { + return lastLoginTime; + } + + + public void setLastLoginTime(long lastLoginTime) { + losePowerFromBeingOffline(); + this.lastLoginTime = lastLoginTime; + this.lastPowerUpdateTime = lastLoginTime; + if (Conf.noPVPDamageToOthersForXSecondsAfterLogin > 0) { + this.loginPvpDisabled = true; + } + } + + public boolean isMapAutoUpdating() { + return mapAutoUpdating; + } + + public void setMapAutoUpdating(boolean mapAutoUpdating) { + this.mapAutoUpdating = mapAutoUpdating; + } + + public boolean hasLoginPvpDisabled() { + if (!loginPvpDisabled) { + return false; + } + if (this.lastLoginTime + (Conf.noPVPDamageToOthersForXSecondsAfterLogin * 1000) < System.currentTimeMillis()) { + this.loginPvpDisabled = false; + return false; + } + return true; + } + + public FLocation getLastStoodAt() { + return this.lastStoodAt; + } + + public void setLastStoodAt(FLocation flocation) { + this.lastStoodAt = flocation; + } + + //----------------------------------------------// + // Title, Name, Faction CoreTag and Chat + //----------------------------------------------// + + // Base: + + public String getTitle() { + return this.hasFaction() ? title : TL.NOFACTION_PREFIX.toString(); + } + + public void setTitle(String title) { + this.title = title; + } + + public String getName() { + if (this.name == null) { + // Older versions of FactionsUUID don't save the name, + // so `name` will be null the first time it's retrieved + // after updating + OfflinePlayer offline = Bukkit.getOfflinePlayer(UUID.fromString(getId())); + this.name = offline.getName() != null ? offline.getName() : getId(); + } + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getTag() { + return this.hasFaction() ? this.getFaction().getTag() : ""; + } + + // Base concatenations: + + public String getNameAndSomething(String something) { + String ret = this.role.getPrefix(); + if (something.length() > 0) { + ret += something + " "; + } + ret += this.getName(); + return ret; + } + + public String getNameAndTitle() { + return this.getNameAndSomething(this.getTitle()); + } + + public String getNameAndTag() { + return this.getNameAndSomething(this.getTag()); + } + + // Colored concatenations: + // These are used in information messages + + public String getNameAndTitle(Faction faction) { + return this.getColorTo(faction) + this.getNameAndTitle(); + } + + public String getNameAndTitle(MemoryFPlayer fplayer) { + return this.getColorTo(fplayer) + this.getNameAndTitle(); + } + + // Chat CoreTag: + // These are injected into the format of global chat messages. + + public String getChatTag() { + return this.hasFaction() ? String.format(Conf.chatTagFormat, this.role.getPrefix() + this.getTag()) : ""; + } + + // Colored Chat CoreTag + public String getChatTag(Faction faction) { + return this.hasFaction() ? this.getRelationTo(faction).getColor() + getChatTag() : ""; + } + + public String getChatTag(MemoryFPlayer fplayer) { + return this.hasFaction() ? this.getColorTo(fplayer) + getChatTag() : ""; + } + + public int getKills() { + return isOnline() ? getPlayer().getStatistic(Statistic.PLAYER_KILLS) : this.kills; + } + + public int getDeaths() { + return isOnline() ? getPlayer().getStatistic(Statistic.DEATHS) : this.deaths; + + } + + // ------------------------------- + // Relation and relation colors + // ------------------------------- + + @Override + public String describeTo(RelationParticipator that, boolean ucfirst) { + return RelationUtil.describeThatToMe(this, that, ucfirst); + } + + @Override + public String describeTo(RelationParticipator that) { + return RelationUtil.describeThatToMe(this, that); + } + + @Override + public Relation getRelationTo(RelationParticipator rp) { + return RelationUtil.getRelationTo(this, rp); + } + + @Override + public Relation getRelationTo(RelationParticipator rp, boolean ignorePeaceful) { + return RelationUtil.getRelationTo(this, rp, ignorePeaceful); + } + + public Relation getRelationToLocation() { + return Board.getInstance().getFactionAt(new FLocation(this)).getRelationTo(this); + } + + @Override + public ChatColor getColorTo(RelationParticipator rp) { + return RelationUtil.getColorOfThatToMe(this, rp); + } + + //----------------------------------------------// + // Health + //----------------------------------------------// + public void heal(int amnt) { + Player player = this.getPlayer(); + if (player == null) { + return; + } + player.setHealth(player.getHealth() + amnt); + } + + + //----------------------------------------------// + // Power + //----------------------------------------------// + public double getPower() { + this.updatePower(); + return this.power; + } + + public void alterPower(double delta) { + this.power += delta; + if (this.power > this.getPowerMax()) { + this.power = this.getPowerMax(); + } else if (this.power < this.getPowerMin()) { + this.power = this.getPowerMin(); + } + } + + public double getPowerMax() { + return Conf.powerPlayerMax + this.powerBoost; + } + + public double getPowerMin() { + return Conf.powerPlayerMin + this.powerBoost; + } + + public int getPowerRounded() { + return (int) Math.round(this.getPower()); + } + + public int getPowerMaxRounded() { + return (int) Math.round(this.getPowerMax()); + } + + public int getPowerMinRounded() { + return (int) Math.round(this.getPowerMin()); + } + + public void updatePower() { + if (this.isOffline()) { + losePowerFromBeingOffline(); + if (!Conf.powerRegenOffline) { + return; + } + } else if (hasFaction() && getFaction().isPowerFrozen()) { + return; // Don't let power regen if faction power is frozen. + } + long now = System.currentTimeMillis(); + long millisPassed = now - this.lastPowerUpdateTime; + this.lastPowerUpdateTime = now; + + Player thisPlayer = this.getPlayer(); + if (thisPlayer != null && thisPlayer.isDead()) { + return; // don't let dead players regain power until they respawn + } + + int millisPerMinute = 60 * 1000; + this.alterPower(millisPassed * Conf.powerPerMinute / millisPerMinute); + } + + public void losePowerFromBeingOffline() { + if (Conf.powerOfflineLossPerDay > 0.0 && this.power > Conf.powerOfflineLossLimit) { + long now = System.currentTimeMillis(); + long millisPassed = now - this.lastPowerUpdateTime; + this.lastPowerUpdateTime = now; + + double loss = millisPassed * Conf.powerOfflineLossPerDay / (24 * 60 * 60 * 1000); + if (this.power - loss < Conf.powerOfflineLossLimit) { + loss = this.power; + } + this.alterPower(-loss); + } + } + + public void onDeath() { + this.updatePower(); + this.alterPower(-Conf.powerPerDeath); + if (hasFaction()) { + getFaction().setLastDeath(System.currentTimeMillis()); + } + } + + //----------------------------------------------// + // Territory + //----------------------------------------------// + public boolean isInOwnTerritory() { + return Board.getInstance().getFactionAt(new FLocation(this)) == this.getFaction(); + } + + public boolean isInOthersTerritory() { + Faction factionHere = Board.getInstance().getFactionAt(new FLocation(this)); + return factionHere != null && factionHere.isNormal() && factionHere != this.getFaction(); + } + + public boolean isInAllyTerritory() { + return Board.getInstance().getFactionAt(new FLocation(this)).getRelationTo(this).isAlly(); + } + + public boolean isInNeutralTerritory() { + return Board.getInstance().getFactionAt(new FLocation(this)).getRelationTo(this).isNeutral(); + } + + public boolean isInEnemyTerritory() { + return Board.getInstance().getFactionAt(new FLocation(this)).getRelationTo(this).isEnemy(); + } + + public void sendFactionHereMessage(Faction from) { + Faction toShow = Board.getInstance().getFactionAt(getLastStoodAt()); + boolean showChat = true; + if (showInfoBoard(toShow)) { + FScoreboard.get(this).setTemporarySidebar(new FInfoSidebar(toShow)); + showChat = P.p.getConfig().getBoolean("scoreboard.also-send-chat", true); + } + if (showChat) { + this.sendMessage(P.p.txt.parse(TL.FACTION_LEAVE.format(from.getTag(this), toShow.getTag(this)))); + } + } + + /** + * Check if the scoreboard should be shown. Simple method to be used by above method. + * + * @param toShow Faction to be shown. + * + * @return true if should show, otherwise false. + */ + public boolean showInfoBoard(Faction toShow) { + return showScoreboard && !toShow.isWarZone() && !toShow.isWilderness() && !toShow.isSafeZone() && P.p.getConfig().contains("scoreboard.finfo") && P.p.getConfig().getBoolean("scoreboard.finfo-enabled", false) && FScoreboard.get(this) != null; + } + + @Override + public boolean showScoreboard() { + return this.showScoreboard; + } + + @Override + public void setShowScoreboard(boolean show) { + this.showScoreboard = show; + } + + // ------------------------------- + // Actions + // ------------------------------- + + public void leave(boolean makePay) { + Faction myFaction = this.getFaction(); + makePay = makePay && Econ.shouldBeUsed() && !this.isAdminBypassing(); + + if (myFaction == null) { + resetFactionData(); + return; + } + + boolean perm = myFaction.isPermanent(); + + if (!perm && this.getRole() == Role.ADMIN && myFaction.getFPlayers().size() > 1) { + msg(TL.LEAVE_PASSADMIN); + return; + } + + if (!Conf.canLeaveWithNegativePower && this.getPower() < 0) { + msg(TL.LEAVE_NEGATIVEPOWER); + return; + } + + // if economy is enabled and they're not on the bypass list, make sure they can pay + if (makePay && !Econ.hasAtLeast(this, Conf.econCostLeave, TL.LEAVE_TOLEAVE.toString())) { + return; + } + + FPlayerLeaveEvent leaveEvent = new FPlayerLeaveEvent(this, myFaction, FPlayerLeaveEvent.PlayerLeaveReason.LEAVE); + Bukkit.getServer().getPluginManager().callEvent(leaveEvent); + if (leaveEvent.isCancelled()) { + return; + } + + // then make 'em pay (if applicable) + if (makePay && !Econ.modifyMoney(this, -Conf.econCostLeave, TL.LEAVE_TOLEAVE.toString(), TL.LEAVE_FORLEAVE.toString())) { + return; + } + + // Am I the last one in the faction? + if (myFaction.getFPlayers().size() == 1) { + // Transfer all money + if (Econ.shouldBeUsed()) { + Econ.transferMoney(this, myFaction, this, Econ.getBalance(myFaction.getAccountId())); + } + } + + if (myFaction.isNormal()) { + for (FPlayer fplayer : myFaction.getFPlayersWhereOnline(true)) { + fplayer.msg(TL.LEAVE_LEFT, this.describeTo(fplayer, true), myFaction.describeTo(fplayer)); + } + + if (Conf.logFactionLeave) { + P.p.log(TL.LEAVE_LEFT.format(this.getName(), myFaction.getTag())); + } + } + + myFaction.removeAnnouncements(this); + this.resetFactionData(); + + if (myFaction.isNormal() && !perm && myFaction.getFPlayers().isEmpty()) { + // Remove this faction + for (FPlayer fplayer : FPlayers.getInstance().getOnlinePlayers()) { + fplayer.msg(TL.LEAVE_DISBANDED, myFaction.describeTo(fplayer, true)); + } + + Factions.getInstance().removeFaction(myFaction.getId()); + if (Conf.logFactionDisband) { + P.p.log(TL.LEAVE_DISBANDEDLOG.format(myFaction.getTag(), myFaction.getId(), this.getName())); + } + } + } + + public boolean canClaimForFaction(Faction forFaction) { + return !forFaction.isWilderness() && (this.isAdminBypassing() || (forFaction == this.getFaction() && this.getRole().isAtLeast(Role.MODERATOR)) || (forFaction.isSafeZone() && Permission.MANAGE_SAFE_ZONE.has(getPlayer())) || (forFaction.isWarZone() && Permission.MANAGE_WAR_ZONE.has(getPlayer()))); + } + + public boolean canClaimForFactionAtLocation(Faction forFaction, Location location, boolean notifyFailure) { + String error = null; + FLocation flocation = new FLocation(location); + Faction myFaction = getFaction(); + Faction currentFaction = Board.getInstance().getFactionAt(flocation); + int ownedLand = forFaction.getLandRounded(); + int factionBuffer = P.p.getConfig().getInt("hcf.buffer-zone", 0); + int worldBuffer = P.p.getConfig().getInt("world-border.buffer", 0); + + if (Conf.worldGuardChecking && Worldguard.checkForRegionsInChunk(location)) { + // Checks for WorldGuard regions in the chunk attempting to be claimed + error = P.p.txt.parse(TL.CLAIM_PROTECTED.toString()); + } else if (Conf.worldsNoClaiming.contains(flocation.getWorldName())) { + error = P.p.txt.parse(TL.CLAIM_DISABLED.toString()); + } else if (this.isAdminBypassing()) { + return true; + } else if (forFaction.isSafeZone() && Permission.MANAGE_SAFE_ZONE.has(getPlayer())) { + return true; + } else if (forFaction.isWarZone() && Permission.MANAGE_WAR_ZONE.has(getPlayer())) { + return true; + } else if (myFaction != forFaction) { + error = P.p.txt.parse(TL.CLAIM_CANTCLAIM.toString(), forFaction.describeTo(this)); + } else if (forFaction == currentFaction) { + error = P.p.txt.parse(TL.CLAIM_ALREADYOWN.toString(), forFaction.describeTo(this, true)); + } else if (this.getRole().value < Role.MODERATOR.value) { + error = P.p.txt.parse(TL.CLAIM_MUSTBE.toString(), Role.MODERATOR.getTranslation()); + } else if (forFaction.getFPlayers().size() < Conf.claimsRequireMinFactionMembers) { + error = P.p.txt.parse(TL.CLAIM_MEMBERS.toString(), Conf.claimsRequireMinFactionMembers); + } else if (currentFaction.isSafeZone()) { + error = P.p.txt.parse(TL.CLAIM_SAFEZONE.toString()); + } else if (currentFaction.isWarZone()) { + error = P.p.txt.parse(TL.CLAIM_WARZONE.toString()); + } else if (P.p.getConfig().getBoolean("hcf.allow-overclaim", true) && ownedLand >= forFaction.getPowerRounded()) { + error = P.p.txt.parse(TL.CLAIM_POWER.toString()); + } else if (Conf.claimedLandsMax != 0 && ownedLand >= Conf.claimedLandsMax && forFaction.isNormal()) { + error = P.p.txt.parse(TL.CLAIM_LIMIT.toString()); + } else if (currentFaction.getRelationTo(forFaction) == Relation.ALLY) { + error = P.p.txt.parse(TL.CLAIM_ALLY.toString()); + } else if (Conf.claimsMustBeConnected && !this.isAdminBypassing() && myFaction.getLandRoundedInWorld(flocation.getWorldName()) > 0 && !Board.getInstance().isConnectedLocation(flocation, myFaction) && (!Conf.claimsCanBeUnconnectedIfOwnedByOtherFaction || !currentFaction.isNormal())) { + if (Conf.claimsCanBeUnconnectedIfOwnedByOtherFaction) { + error = P.p.txt.parse(TL.CLAIM_CONTIGIOUS.toString()); + } else { + error = P.p.txt.parse(TL.CLAIM_FACTIONCONTIGUOUS.toString()); + } + } else if (factionBuffer > 0 && Board.getInstance().hasFactionWithin(flocation, myFaction, factionBuffer)) { + error = P.p.txt.parse(TL.CLAIM_TOOCLOSETOOTHERFACTION.format(factionBuffer)); + } else if (flocation.isOutsideWorldBorder(worldBuffer)) { + if (worldBuffer > 0) { + error = P.p.txt.parse(TL.CLAIM_OUTSIDEBORDERBUFFER.format(worldBuffer)); + } else { + error = P.p.txt.parse(TL.CLAIM_OUTSIDEWORLDBORDER.toString()); + } + } else if (currentFaction.isNormal()) { + if (myFaction.isPeaceful()) { + error = P.p.txt.parse(TL.CLAIM_PEACEFUL.toString(), currentFaction.getTag(this)); + } else if (currentFaction.isPeaceful()) { + error = P.p.txt.parse(TL.CLAIM_PEACEFULTARGET.toString(), currentFaction.getTag(this)); + } else if (!currentFaction.hasLandInflation()) { + // TODO more messages WARN current faction most importantly + error = P.p.txt.parse(TL.CLAIM_THISISSPARTA.toString(), currentFaction.getTag(this)); + } else if (currentFaction.hasLandInflation() && !P.p.getConfig().getBoolean("hcf.allow-overclaim", true)) { + // deny over claim when it normally would be allowed. + error = P.p.txt.parse(TL.CLAIM_OVERCLAIM_DISABLED.toString()); + } else if (!Board.getInstance().isBorderLocation(flocation)) { + error = P.p.txt.parse(TL.CLAIM_BORDER.toString()); + } + } + // TODO: Add more else if statements. + + if (notifyFailure && error != null) { + msg(error); + } + return error == null; + } + + public boolean attemptClaim(Faction forFaction, Location location, boolean notifyFailure) { + // notifyFailure is false if called by auto-claim; no need to notify on every failure for it + // return value is false on failure, true on success + + FLocation flocation = new FLocation(location); + Faction currentFaction = Board.getInstance().getFactionAt(flocation); + + int ownedLand = forFaction.getLandRounded(); + + if (!this.canClaimForFactionAtLocation(forFaction, location, notifyFailure)) { + return false; + } + + // if economy is enabled and they're not on the bypass list, make sure they can pay + boolean mustPay = /*Econ.shouldBeUsed() &&*/Conf.econCostClaimWilderness > 0 && !this.isAdminBypassing() && !forFaction.isSafeZone() && !forFaction.isWarZone(); + double cost = 0.0; + EconomyParticipator payee = null; + if (mustPay) { + cost = Econ.calculateClaimCost(ownedLand, currentFaction.isNormal()); + + if (Conf.econClaimUnconnectedFee != 0.0 && forFaction.getLandRoundedInWorld(flocation.getWorldName()) > 0 && !Board.getInstance().isConnectedLocation(flocation, forFaction)) { + cost += Conf.econClaimUnconnectedFee; + } + +// if (Conf.bankEnabled && Conf.bankFactionPaysLandCosts && this.hasFaction()) { +// payee = this.getFaction(); +// } else { +// payee = this; +// } + +// if (!Econ.hasAtLeast(payee, cost, TL.CLAIM_TOCLAIM.toString())) { +// return false; +// } + + EcoResult result = getFaction().takeFromStash(cost); + if(result == EcoResult.LOW_FUNDS) { + msg("%s can't afford %s %s.", getFaction().describeTo(getFaction(), true), NumeralUtil.toCurrency(cost, Locale.US), TL.CLAIM_TOCLAIM.toString()); + return false; + } + + if(result != EcoResult.SUCCESS) return false; + } + + LandClaimEvent claimEvent = new LandClaimEvent(flocation, forFaction, this); + Bukkit.getServer().getPluginManager().callEvent(claimEvent); + if (claimEvent.isCancelled()) { + return false; + } + +// // then make 'em pay (if applicable) +// if (mustPay && !Econ.modifyMoney(payee, -cost, TL.CLAIM_TOCLAIM.toString(), TL.CLAIM_FORCLAIM.toString())) { +// return false; +// } +// +// // Was an over claim +// if (currentFaction.isNormal() && currentFaction.hasLandInflation()) { +// // Give them money for over claiming. +// Econ.modifyMoney(payee, Conf.econOverclaimRewardMultiplier, TL.CLAIM_TOOVERCLAIM.toString(), TL.CLAIM_FOROVERCLAIM.toString()); +// } + + // announce success + Set informTheseFPlayers = new HashSet(); + informTheseFPlayers.add(this); + informTheseFPlayers.addAll(forFaction.getFPlayersWhereOnline(true)); + for (FPlayer fp : informTheseFPlayers) { + fp.msg(TL.CLAIM_CLAIMED, this.describeTo(fp, true), forFaction.describeTo(fp), currentFaction.describeTo(fp)); + } + + Board.getInstance().setFactionAt(forFaction, flocation); + + if (Conf.logLandClaims) { + P.p.log(TL.CLAIM_CLAIMEDLOG.toString(), this.getName(), flocation.getCoordString(), forFaction.getTag()); + } + + return true; + } + + public boolean shouldBeSaved() { + if (!this.hasFaction() && (this.getPowerRounded() == this.getPowerMaxRounded() || this.getPowerRounded() == (int) Math.round(Conf.powerPlayerStarting))) { + return false; + } + return true; + } + + public void msg(String str, Object... args) { + this.sendMessage(P.p.txt.parse(str, args)); + } + + public void msg(TL translation, Object... args) { + this.msg(translation.toString(), args); + } + + public Player getPlayer() { + return Bukkit.getPlayer(UUID.fromString(this.getId())); + } + + public boolean isOnline() { + return this.getPlayer() != null; + } + + // make sure target player should be able to detect that this player is online + public boolean isOnlineAndVisibleTo(Player player) { + Player target = this.getPlayer(); + return target != null && player.canSee(target); + } + + public boolean isOffline() { + return !isOnline(); + } + + // -------------------------------------------- // + // Message Sending Helpers + // -------------------------------------------- // + + public void sendMessage(String msg) { + if (msg.contains("{null}")) { + return; // user wants this message to not send + } + if (msg.contains("/n/")) { + for (String s : msg.split("/n/")) { + sendMessage(s); + } + return; + } + Player player = this.getPlayer(); + if (player == null) { + return; + } + player.sendMessage(msg); + } + + public void sendMessage(List msgs) { + for (String msg : msgs) { + this.sendMessage(msg); + } + } + + public String getNameAndTitle(FPlayer fplayer) { + return this.getColorTo(fplayer) + this.getNameAndTitle(); + } + + @Override + public String getChatTag(FPlayer fplayer) { + return this.hasFaction() ? this.getRelationTo(fplayer).getColor() + getChatTag() : ""; + } + + @Override + public String getId() { + return id; + } + + public abstract void remove(); + + @Override + public void setId(String id) { + this.id = id; + } + + @Override + public void clearWarmup() { + if (warmup != null) { + Bukkit.getScheduler().cancelTask(warmupTask); + this.stopWarmup(); + } + } + + @Override + public void stopWarmup() { + warmup = null; + } + + @Override + public boolean isWarmingUp() { + return warmup != null; + } + + @Override + public WarmUpUtil.Warmup getWarmupType() { + return warmup; + } + + @Override + public void addWarmup(WarmUpUtil.Warmup warmup, int taskId) { + if (this.warmup != null) { + this.clearWarmup(); + } + this.warmup = warmup; + this.warmupTask = taskId; + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/persist/MemoryFPlayers.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/persist/MemoryFPlayers.java new file mode 100644 index 0000000..196c473 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/persist/MemoryFPlayers.java @@ -0,0 +1,66 @@ +package com.massivecraft.factions.zcore.persist; + +import com.massivecraft.factions.FPlayer; +import com.massivecraft.factions.FPlayers; +import com.massivecraft.factions.Factions; +import com.massivecraft.factions.P; +import org.bukkit.Bukkit; +import org.bukkit.OfflinePlayer; +import org.bukkit.entity.Player; + +import java.util.*; +import java.util.concurrent.ConcurrentSkipListMap; + +public abstract class MemoryFPlayers extends FPlayers { + public Map fPlayers = new ConcurrentSkipListMap(String.CASE_INSENSITIVE_ORDER); + + public void clean() { + for (FPlayer fplayer : this.fPlayers.values()) { + if (!Factions.getInstance().isValidFactionId(fplayer.getFactionId())) { + P.p.log("Reset faction data (invalid faction:" + fplayer.getFactionId() + ") for player " + fplayer.getName()); + fplayer.resetFactionData(false); + } + } + } + + public Collection getOnlinePlayers() { + Set entities = new HashSet(); + for (Player player : Bukkit.getServer().getOnlinePlayers()) { + entities.add(this.getByPlayer(player)); + } + return entities; + } + + @Override + public FPlayer getByPlayer(Player player) { + return getById(player.getUniqueId().toString()); + } + + @Override + public List getAllFPlayers() { + return new ArrayList(fPlayers.values()); + } + + @Override + public abstract void forceSave(); + + public abstract void load(); + + @Override + public FPlayer getByOfflinePlayer(OfflinePlayer player) { + return getById(player.getUniqueId().toString()); + } + + @Override + public FPlayer getById(String id) { + FPlayer player = fPlayers.get(id); + if (player == null) { + player = generateFPlayer(id); + } + return player; + } + + public abstract FPlayer generateFPlayer(String id); + + public abstract void convertFrom(MemoryFPlayers old); +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/persist/MemoryFaction.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/persist/MemoryFaction.java new file mode 100644 index 0000000..02d8c54 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/persist/MemoryFaction.java @@ -0,0 +1,893 @@ +package com.massivecraft.factions.zcore.persist; + +import com.massivecraft.factions.*; +import com.massivecraft.factions.eco.EcoResult; +import com.massivecraft.factions.iface.EconomyParticipator; +import com.massivecraft.factions.iface.RelationParticipator; +import com.massivecraft.factions.integration.Econ; +import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.struct.Relation; +import com.massivecraft.factions.struct.Role; +import com.massivecraft.factions.util.LazyLocation; +import com.massivecraft.factions.util.MiscUtil; +import com.massivecraft.factions.util.RelationUtil; +import com.massivecraft.factions.zcore.util.TL; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.OfflinePlayer; +import org.bukkit.entity.Player; + +import java.util.*; +import java.util.Map.Entry; +import java.util.concurrent.ConcurrentHashMap; + +public abstract class MemoryFaction implements Faction, EconomyParticipator { + protected String id = null; + protected boolean peacefulExplosionsEnabled; + protected boolean permanent; + protected String tag; + protected String description; + protected boolean open; + protected boolean peaceful; + protected Integer permanentPower; + protected LazyLocation home; + protected long foundedDate; + protected transient long lastPlayerLoggedOffTime; + protected double money = 0; + protected double powerBoost; + protected Map relationWish = new HashMap(); + protected Map> claimOwnership = new ConcurrentHashMap>(); + protected transient Set fplayers = new HashSet(); + protected Set invites = new HashSet(); + protected HashMap> announcements = new HashMap>(); + protected ConcurrentHashMap warps = new ConcurrentHashMap(); + private long lastDeath; + protected int maxVaults; + + public HashMap> getAnnouncements() { + return this.announcements; + } + + public void addAnnouncement(FPlayer fPlayer, String msg) { + List list = announcements.containsKey(fPlayer.getId()) ? announcements.get(fPlayer.getId()) : new ArrayList(); + list.add(msg); + announcements.put(fPlayer.getId(), list); + } + + public void sendUnreadAnnouncements(FPlayer fPlayer) { + if (!announcements.containsKey(fPlayer.getId())) { + return; + } + fPlayer.sendMessage(ChatColor.LIGHT_PURPLE + "--Unread Cartel Announcements--"); + for (String s : announcements.get(fPlayer.getPlayer().getUniqueId().toString())) { + fPlayer.sendMessage(s); + } + fPlayer.sendMessage(ChatColor.LIGHT_PURPLE + "--Unread Cartel Announcements--"); + announcements.remove(fPlayer.getId()); + } + + public void removeAnnouncements(FPlayer fPlayer) { + if (announcements.containsKey(fPlayer.getId())) { + announcements.remove(fPlayer.getId()); + } + } + + public ConcurrentHashMap getWarps() { + return this.warps; + } + + public LazyLocation getWarp(String name) { + return this.warps.get(name); + } + + public void setWarp(String name, LazyLocation loc) { + this.warps.put(name, loc); + } + + public boolean isWarp(String name) { + return this.warps.containsKey(name); + } + + public boolean removeWarp(String name) { + return warps.remove(name) != null; + } + + public void clearWarps() { + warps.clear(); + } + + public int getMaxVaults() { + return this.maxVaults; + } + + public void setMaxVaults(int value) { + this.maxVaults = value; + } + + public Set getInvites() { + return invites; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public void invite(FPlayer fplayer) { + this.invites.add(fplayer.getId()); + } + + public void deinvite(FPlayer fplayer) { + this.invites.remove(fplayer.getId()); + } + + public boolean isInvited(FPlayer fplayer) { + return this.invites.contains(fplayer.getId()); + } + + public boolean getOpen() { + return open; + } + + public void setOpen(boolean isOpen) { + open = isOpen; + } + + public boolean isPeaceful() { + return this.peaceful; + } + + public void setPeaceful(boolean isPeaceful) { + this.peaceful = isPeaceful; + } + + public void setPeacefulExplosionsEnabled(boolean val) { + peacefulExplosionsEnabled = val; + } + + public boolean getPeacefulExplosionsEnabled() { + return this.peacefulExplosionsEnabled; + } + + public boolean noExplosionsInTerritory() { + return this.peaceful && !peacefulExplosionsEnabled; + } + + public boolean isPermanent() { + return permanent || !this.isNormal(); + } + + public void setPermanent(boolean isPermanent) { + permanent = isPermanent; + } + + public String getTag() { + return this.tag; + } + + public String getTag(String prefix) { + return prefix + this.tag; + } + + public String getTag(Faction otherFaction) { + if (otherFaction == null) { + return getTag(); + } + return this.getTag(this.getColorTo(otherFaction).toString()); + } + + public String getTag(FPlayer otherFplayer) { + if (otherFplayer == null) { + return getTag(); + } + return this.getTag(this.getColorTo(otherFplayer).toString()); + } + + public void setTag(String str) { + if (Conf.factionTagForceUpperCase) { + str = str.toUpperCase(); + } + this.tag = str; + } + + public String getComparisonTag() { + return MiscUtil.getComparisonString(this.tag); + } + + public String getDescription() { + return this.description; + } + + public void setDescription(String value) { + this.description = value; + } + + public void setHome(Location home) { + this.home = new LazyLocation(home); + } + + public boolean hasHome() { + return this.getHome() != null; + } + + public Location getHome() { + confirmValidHome(); + return (this.home != null) ? this.home.getLocation() : null; + } + + public long getFoundedDate() { + if (this.foundedDate == 0) { + setFoundedDate(System.currentTimeMillis()); + } + return this.foundedDate; + } + + public void setFoundedDate(long newDate) { + this.foundedDate = newDate; + } + + public void confirmValidHome() { + if (!Conf.homesMustBeInClaimedTerritory || this.home == null || (this.home.getLocation() != null && Board.getInstance().getFactionAt(new FLocation(this.home.getLocation())) == this)) { + return; + } + + msg("Your cartel home has been un-set since it is no longer in your territory."); + this.home = null; + } + + public String getAccountId() { + String aid = "faction-" + this.getId(); + + // We need to override the default money given to players. + if (!Econ.hasAccount(aid)) { + Econ.setBalance(aid, 0); + } + + return aid; + } + + public Integer getPermanentPower() { + return this.permanentPower; + } + + public void setPermanentPower(Integer permanentPower) { + this.permanentPower = permanentPower; + } + + public boolean hasPermanentPower() { + return this.permanentPower != null; + } + + public double getPowerBoost() { + return this.powerBoost; + } + + public void setPowerBoost(double powerBoost) { + this.powerBoost = powerBoost; + } + + public boolean isPowerFrozen() { + int freezeSeconds = P.p.getConfig().getInt("hcf.powerfreeze", 0); + if (freezeSeconds == 0) { + return false; + } + + return System.currentTimeMillis() - lastDeath < freezeSeconds * 1000; + } + + public void setLastDeath(long time) { + this.lastDeath = time; + } + + public long getLastDeath() { + return this.lastDeath; + } + + public int getKills() { + int kills = 0; + for (FPlayer fp : getFPlayers()) { + kills += fp.getKills(); + } + + return kills; + } + + public int getDeaths() { + int deaths = 0; + for (FPlayer fp : getFPlayers()) { + deaths += fp.getDeaths(); + } + + return deaths; + } + + // -------------------------------------------- // + // Construct + // -------------------------------------------- // + public MemoryFaction() { + } + + public MemoryFaction(String id) { + this.id = id; + this.open = Conf.newFactionsDefaultOpen; + this.tag = "???"; + this.description = TL.GENERIC_DEFAULTDESCRIPTION.toString(); + this.lastPlayerLoggedOffTime = 0; + this.peaceful = false; + this.peacefulExplosionsEnabled = false; + this.permanent = false; + this.money = 0.0; + this.powerBoost = 0.0; + this.foundedDate = System.currentTimeMillis(); + this.maxVaults = Conf.defaultMaxVaults; + } + + public MemoryFaction(MemoryFaction old) { + id = old.id; + peacefulExplosionsEnabled = old.peacefulExplosionsEnabled; + permanent = old.permanent; + tag = old.tag; + description = old.description; + open = old.open; + foundedDate = old.foundedDate; + peaceful = old.peaceful; + permanentPower = old.permanentPower; + home = old.home; + lastPlayerLoggedOffTime = old.lastPlayerLoggedOffTime; + money = old.money; + powerBoost = old.powerBoost; + relationWish = old.relationWish; + claimOwnership = old.claimOwnership; + fplayers = new HashSet(); + invites = old.invites; + announcements = old.announcements; + } + + // -------------------------------------------- // + // Extra Getters And Setters + // -------------------------------------------- // + public boolean noPvPInTerritory() { + return isSafeZone() || (peaceful && Conf.peacefulTerritoryDisablePVP); + } + + public boolean noMonstersInTerritory() { + return isSafeZone() || (peaceful && Conf.peacefulTerritoryDisableMonsters); + } + + // ------------------------------- + // Understand the types + // ------------------------------- + + public boolean isNormal() { + return !(this.isWilderness() || this.isSafeZone() || this.isWarZone()); + } + + public boolean isNone() { + return this.getId().equals("0"); + } + + public boolean isWilderness() { + return this.getId().equals("0"); + } + + public boolean isSafeZone() { + return this.getId().equals("-1"); + } + + public boolean isWarZone() { + return this.getId().equals("-2"); + } + + public boolean isPlayerFreeType() { + return this.isSafeZone() || this.isWarZone(); + } + + // ------------------------------- + // Relation and relation colors + // ------------------------------- + + @Override + public String describeTo(RelationParticipator that, boolean ucfirst) { + return RelationUtil.describeThatToMe(this, that, ucfirst); + } + + @Override + public String describeTo(RelationParticipator that) { + return RelationUtil.describeThatToMe(this, that); + } + + @Override + public Relation getRelationTo(RelationParticipator rp) { + return RelationUtil.getRelationTo(this, rp); + } + + @Override + public Relation getRelationTo(RelationParticipator rp, boolean ignorePeaceful) { + return RelationUtil.getRelationTo(this, rp, ignorePeaceful); + } + + @Override + public ChatColor getColorTo(RelationParticipator rp) { + return RelationUtil.getColorOfThatToMe(this, rp); + } + + public Relation getRelationWish(Faction otherFaction) { + if (this.relationWish.containsKey(otherFaction.getId())) { + return this.relationWish.get(otherFaction.getId()); + } + return Relation.fromString(P.p.getConfig().getString("default-relation", "neutral")); // Always default to old behavior. + } + + public void setRelationWish(Faction otherFaction, Relation relation) { + if (this.relationWish.containsKey(otherFaction.getId()) && relation.equals(Relation.NEUTRAL)) { + this.relationWish.remove(otherFaction.getId()); + } else { + this.relationWish.put(otherFaction.getId(), relation); + } + } + + public int getRelationCount(Relation relation) { + int count = 0; + for (Faction faction : Factions.getInstance().getAllFactions()) { + if (faction.getRelationTo(this) == relation) { + count++; + } + } + return count; + } + + // ----------------------------------------------// + // Power + // ----------------------------------------------// + public double getPower() { + if (this.hasPermanentPower()) { + return this.getPermanentPower(); + } + + double ret = 0; + for (FPlayer fplayer : fplayers) { + ret += fplayer.getPower(); + } + if (Conf.powerFactionMax > 0 && ret > Conf.powerFactionMax) { + ret = Conf.powerFactionMax; + } + return ret + this.powerBoost; + } + + public double getPowerMax() { + if (this.hasPermanentPower()) { + return this.getPermanentPower(); + } + + double ret = 0; + for (FPlayer fplayer : fplayers) { + ret += fplayer.getPowerMax(); + } + if (Conf.powerFactionMax > 0 && ret > Conf.powerFactionMax) { + ret = Conf.powerFactionMax; + } + return ret + this.powerBoost; + } + + public int getPowerRounded() { + return (int) Math.round(this.getPower()); + } + + public int getPowerMaxRounded() { + return (int) Math.round(this.getPowerMax()); + } + + public int getLandRounded() { + return Board.getInstance().getFactionCoordCount(this); + } + + public int getLandRoundedInWorld(String worldName) { + return Board.getInstance().getFactionCoordCountInWorld(this, worldName); + } + + public boolean hasLandInflation() { + return this.getLandRounded() > this.getPowerRounded(); + } + + // ------------------------------- + // FPlayers + // ------------------------------- + + // maintain the reference list of FPlayers in this faction + public void refreshFPlayers() { + fplayers.clear(); + if (this.isPlayerFreeType()) { + return; + } + + for (FPlayer fplayer : FPlayers.getInstance().getAllFPlayers()) { + if (fplayer.getFactionId().equalsIgnoreCase(id)) { + fplayers.add(fplayer); + } + } + } + + public boolean addFPlayer(FPlayer fplayer) { + return !this.isPlayerFreeType() && fplayers.add(fplayer); + + } + + public boolean removeFPlayer(FPlayer fplayer) { + return !this.isPlayerFreeType() && fplayers.remove(fplayer); + + } + + public int getSize() { + return fplayers.size(); + } + + public Set getFPlayers() { + // return a shallow copy of the FPlayer list, to prevent tampering and + // concurrency issues + return new HashSet(fplayers); + } + + public Set getFPlayersWhereOnline(boolean online) { + Set ret = new HashSet(); + if (!this.isNormal()) { + return ret; + } + + for (FPlayer fplayer : fplayers) { + if (fplayer.isOnline() == online) { + ret.add(fplayer); + } + } + + return ret; + } + + public FPlayer getFPlayerAdmin() { + if (!this.isNormal()) { + return null; + } + + for (FPlayer fplayer : fplayers) { + if (fplayer.getRole() == Role.ADMIN) { + return fplayer; + } + } + return null; + } + + public ArrayList getFPlayersWhereRole(Role role) { + ArrayList ret = new ArrayList(); + if (!this.isNormal()) { + return ret; + } + + for (FPlayer fplayer : fplayers) { + if (fplayer.getRole() == role) { + ret.add(fplayer); + } + } + + return ret; + } + + public ArrayList getOnlinePlayers() { + ArrayList ret = new ArrayList(); + if (this.isPlayerFreeType()) { + return ret; + } + + for (Player player : P.p.getServer().getOnlinePlayers()) { + FPlayer fplayer = FPlayers.getInstance().getByPlayer(player); + if (fplayer.getFaction() == this) { + ret.add(player); + } + } + + return ret; + } + + // slightly faster check than getOnlinePlayers() if you just want to see if + // there are any players online + public boolean hasPlayersOnline() { + // only real factions can have players online, not safe zone / war zone + if (this.isPlayerFreeType()) { + return false; + } + + for (Player player : P.p.getServer().getOnlinePlayers()) { + FPlayer fplayer = FPlayers.getInstance().getByPlayer(player); + if (fplayer != null && fplayer.getFaction() == this) { + return true; + } + } + + // even if all players are technically logged off, maybe someone was on + // recently enough to not consider them officially offline yet + return Conf.considerFactionsReallyOfflineAfterXMinutes > 0 && System.currentTimeMillis() < lastPlayerLoggedOffTime + (Conf.considerFactionsReallyOfflineAfterXMinutes * 60000); + } + + public void memberLoggedOff() { + if (this.isNormal()) { + lastPlayerLoggedOffTime = System.currentTimeMillis(); + } + } + + // used when current leader is about to be removed from the faction; + // promotes new leader, or disbands faction if no other members left + public void promoteNewLeader() { + if (!this.isNormal()) { + return; + } + if (this.isPermanent() && Conf.permanentFactionsDisableLeaderPromotion) { + return; + } + + FPlayer oldLeader = this.getFPlayerAdmin(); + + // get list of moderators, or list of normal members if there are no moderators + ArrayList replacements = this.getFPlayersWhereRole(Role.MODERATOR); + if (replacements == null || replacements.isEmpty()) { + replacements = this.getFPlayersWhereRole(Role.NORMAL); + } + + if (replacements == null || replacements.isEmpty()) { // faction admin is the only member; one-man faction + if (this.isPermanent()) { + if (oldLeader != null) { + oldLeader.setRole(Role.NORMAL); + } + return; + } + + // no members left and faction isn't permanent, so disband it + if (Conf.logFactionDisband) { + P.p.log("The cartel " + this.getTag() + " (" + this.getId() + ") has been disbanded since it has no members left."); + } + + for (FPlayer fplayer : FPlayers.getInstance().getOnlinePlayers()) { + fplayer.msg("The cartel %s was disbanded.", this.getTag(fplayer)); + } + + Factions.getInstance().removeFaction(getId()); + } else { // promote new faction admin + if (oldLeader != null) { + oldLeader.setRole(Role.NORMAL); + } + replacements.get(0).setRole(Role.ADMIN); + //TODO:TL + this.msg("Cartel boss %s has been removed. %s has been promoted as the new cartel boss.", oldLeader == null ? "" : oldLeader.getName(), replacements.get(0).getName()); + P.p.log("Cartel " + this.getTag() + " (" + this.getId() + ") boss was removed. Replacement boss: " + replacements.get(0).getName()); + } + } + + // ----------------------------------------------// + // Messages + // ----------------------------------------------// + public void msg(String message, Object... args) { + message = P.p.txt.parse(message, args); + + for (FPlayer fplayer : this.getFPlayersWhereOnline(true)) { + fplayer.sendMessage(message); + } + } + + public void msg(TL translation, Object... args) { + msg(translation.toString(), args); + } + + public void sendMessage(String message) { + for (FPlayer fplayer : this.getFPlayersWhereOnline(true)) { + fplayer.sendMessage(message); + } + } + + public void sendMessage(List messages) { + for (FPlayer fplayer : this.getFPlayersWhereOnline(true)) { + fplayer.sendMessage(messages); + } + } + + // ----------------------------------------------// + // Ownership of specific claims + // ----------------------------------------------// + + public Map> getClaimOwnership() { + return claimOwnership; + } + + public void clearAllClaimOwnership() { + claimOwnership.clear(); + } + + public void clearClaimOwnership(FLocation loc) { + claimOwnership.remove(loc); + } + + public void clearClaimOwnership(FPlayer player) { + if (id == null || id.isEmpty()) { + return; + } + + Set ownerData; + + for (Entry> entry : claimOwnership.entrySet()) { + ownerData = entry.getValue(); + + if (ownerData == null) { + continue; + } + + Iterator iter = ownerData.iterator(); + while (iter.hasNext()) { + if (iter.next().equals(player.getId())) { + iter.remove(); + } + } + + if (ownerData.isEmpty()) { + claimOwnership.remove(entry.getKey()); + } + } + } + + public int getCountOfClaimsWithOwners() { + return claimOwnership.isEmpty() ? 0 : claimOwnership.size(); + } + + public boolean doesLocationHaveOwnersSet(FLocation loc) { + if (claimOwnership.isEmpty() || !claimOwnership.containsKey(loc)) { + return false; + } + + Set ownerData = claimOwnership.get(loc); + return ownerData != null && !ownerData.isEmpty(); + } + + public boolean isPlayerInOwnerList(FPlayer player, FLocation loc) { + if (claimOwnership.isEmpty()) { + return false; + } + Set ownerData = claimOwnership.get(loc); + if (ownerData == null) { + return false; + } + return ownerData.contains(player.getId()); + } + + public void setPlayerAsOwner(FPlayer player, FLocation loc) { + Set ownerData = claimOwnership.get(loc); + if (ownerData == null) { + ownerData = new HashSet(); + } + ownerData.add(player.getId()); + claimOwnership.put(loc, ownerData); + } + + public void removePlayerAsOwner(FPlayer player, FLocation loc) { + Set ownerData = claimOwnership.get(loc); + if (ownerData == null) { + return; + } + ownerData.remove(player.getId()); + claimOwnership.put(loc, ownerData); + } + + public Set getOwnerList(FLocation loc) { + return claimOwnership.get(loc); + } + + public String getOwnerListString(FLocation loc) { + Set ownerData = claimOwnership.get(loc); + if (ownerData == null || ownerData.isEmpty()) { + return ""; + } + + String ownerList = ""; + + Iterator iter = ownerData.iterator(); + while (iter.hasNext()) { + if (!ownerList.isEmpty()) { + ownerList += ", "; + } + OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(UUID.fromString(iter.next())); + //TODO:TL + ownerList += offlinePlayer != null ? offlinePlayer.getName() : "null player"; + } + return ownerList; + } + + public boolean playerHasOwnershipRights(FPlayer fplayer, FLocation loc) { + // in own faction, with sufficient role or permission to bypass + // ownership? + if (fplayer.getFaction() == this && (fplayer.getRole().isAtLeast(Conf.ownedAreaModeratorsBypass ? Role.MODERATOR : Role.ADMIN) || Permission.OWNERSHIP_BYPASS.has(fplayer.getPlayer()))) { + return true; + } + + // make sure claimOwnership is initialized + if (claimOwnership.isEmpty()) { + return true; + } + + // need to check the ownership list, then + Set ownerData = claimOwnership.get(loc); + + // if no owner list, owner list is empty, or player is in owner list, + // they're allowed + return ownerData == null || ownerData.isEmpty() || ownerData.contains(fplayer.getId()); + } + + // ----------------------------------------------// + // Persistance and entity management + // ----------------------------------------------// + public void remove() { + if (Econ.shouldBeUsed()) { + Econ.setBalance(getAccountId(), 0); + } + + // Clean the board + ((MemoryBoard) Board.getInstance()).clean(id); + + for (FPlayer fPlayer : fplayers) { + fPlayer.resetFactionData(false); + } + } + + public Set getAllClaims() { + return Board.getInstance().getAllClaims(this); + } + + @Override + public double getStash() { + return this.money; + } + + @Override + public EcoResult addToStash(double amount) { + if(this.money >= Double.MAX_VALUE || amount >= Double.MAX_VALUE) + return EcoResult.OVERWEIGHT; + + if((this.money + amount) > Double.MAX_VALUE) { + this.money = Double.MAX_VALUE; + return EcoResult.SUCCESS; + } + + if(amount <= 0) + return EcoResult.UNKNOWN; + + this.money += amount; + return EcoResult.SUCCESS; + } + + @Override + public EcoResult takeFromStash(double amount) { + if(this.money <= 0) + return EcoResult.LOW_FUNDS; + + if((this.money - amount) < 0) + return EcoResult.LOW_FUNDS; + + if(amount <= 0) + return EcoResult.UNKNOWN; + + this.money -= amount; + return EcoResult.SUCCESS; + } + + @Override + public void setStash(double amount) { + if(amount >= Double.MAX_VALUE) { + this.money = Double.MAX_VALUE - 1; + return; + } + + if(amount <= 0) { + this.money = 0; + return; + } + + this.money = amount; + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/persist/MemoryFactions.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/persist/MemoryFactions.java new file mode 100644 index 0000000..8bb3f17 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/persist/MemoryFactions.java @@ -0,0 +1,176 @@ +package com.massivecraft.factions.zcore.persist; + +import com.massivecraft.factions.Faction; +import com.massivecraft.factions.Factions; +import com.massivecraft.factions.util.MiscUtil; +import com.massivecraft.factions.zcore.util.TL; +import org.bukkit.ChatColor; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; + +public abstract class MemoryFactions extends Factions { + public Map factions = new ConcurrentHashMap(); + public int nextId = 1; + + public void load() { + // Make sure the default neutral faction exists + if (!factions.containsKey("0")) { + Faction faction = generateFactionObject("0"); + factions.put("0", faction); + faction.setTag(TL.WILDERNESS.toString()); + faction.setDescription(TL.WILDERNESS_DESCRIPTION.toString()); + } else { + Faction faction = factions.get("0"); + if (!faction.getTag().equalsIgnoreCase(TL.WILDERNESS.toString())) { + faction.setTag(TL.WILDERNESS.toString()); + } + if (!faction.getDescription().equalsIgnoreCase(TL.WILDERNESS_DESCRIPTION.toString())) { + faction.setDescription(TL.WILDERNESS_DESCRIPTION.toString()); + } + } + + // Make sure the safe zone faction exists + if (!factions.containsKey("-1")) { + Faction faction = generateFactionObject("-1"); + factions.put("-1", faction); + faction.setTag(TL.SAFEZONE.toString()); + faction.setDescription(TL.SAFEZONE_DESCRIPTION.toString()); + } else { + Faction faction = factions.get("-1"); + if (!faction.getTag().equalsIgnoreCase(TL.SAFEZONE.toString())) { + faction.setTag(TL.SAFEZONE.toString()); + } + if (!faction.getDescription().equalsIgnoreCase(TL.SAFEZONE_DESCRIPTION.toString())) { + faction.setDescription(TL.SAFEZONE_DESCRIPTION.toString()); + } + // if SafeZone has old pre-1.6.0 name, rename it to remove troublesome " " + if (faction.getTag().contains(" ")) { + faction.setTag(TL.SAFEZONE.toString()); + } + } + + // Make sure the war zone faction exists + if (!factions.containsKey("-2")) { + Faction faction = generateFactionObject("-2"); + factions.put("-2", faction); + faction.setTag(TL.WARZONE.toString()); + faction.setDescription(TL.WARZONE_DESCRIPTION.toString()); + } else { + Faction faction = factions.get("-2"); + if (!faction.getTag().equalsIgnoreCase(TL.WARZONE.toString())) { + faction.setTag(TL.WARZONE.toString()); + } + if (!faction.getDescription().equalsIgnoreCase(TL.WARZONE_DESCRIPTION.toString())) { + faction.setDescription(TL.WARZONE_DESCRIPTION.toString()); + } + // if WarZone has old pre-1.6.0 name, rename it to remove troublesome " " + if (faction.getTag().contains(" ")) { + faction.setTag(TL.WARZONE.toString()); + } + } + } + + public Faction getFactionById(String id) { + return factions.get(id); + } + + public abstract Faction generateFactionObject(String string); + + public Faction getByTag(String str) { + String compStr = MiscUtil.getComparisonString(str); + for (Faction faction : factions.values()) { + if (faction.getComparisonTag().equals(compStr)) { + return faction; + } + } + return null; + } + + public Faction getBestTagMatch(String start) { + int best = 0; + start = start.toLowerCase(); + int minlength = start.length(); + Faction bestMatch = null; + for (Faction faction : factions.values()) { + String candidate = faction.getTag(); + candidate = ChatColor.stripColor(candidate); + if (candidate.length() < minlength) { + continue; + } + if (!candidate.toLowerCase().startsWith(start)) { + continue; + } + + // The closer to zero the better + int lendiff = candidate.length() - minlength; + if (lendiff == 0) { + return faction; + } + if (lendiff < best || best == 0) { + best = lendiff; + bestMatch = faction; + } + } + + return bestMatch; + } + + public boolean isTagTaken(String str) { + return this.getByTag(str) != null; + } + + public boolean isValidFactionId(String id) { + return factions.containsKey(id); + } + + public Faction createFaction() { + Faction faction = generateFactionObject(); + factions.put(faction.getId(), faction); + return faction; + } + + public Set getFactionTags() { + Set tags = new HashSet(); + for (Faction faction : factions.values()) { + tags.add(faction.getTag()); + } + return tags; + } + + public abstract Faction generateFactionObject(); + + public void removeFaction(String id) { + factions.remove(id).remove(); + } + + @Override + public ArrayList getAllFactions() { + return new ArrayList(factions.values()); + } + + @Override + public Faction getNone() { + return factions.get("0"); + } + + @Override + public Faction getWilderness() { + return factions.get("0"); + } + + @Override + public Faction getSafeZone() { + return factions.get("-1"); + } + + @Override + public Faction getWarZone() { + return factions.get("-2"); + } + + public abstract void convertFrom(MemoryFactions old); +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/persist/SaveTask.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/persist/SaveTask.java new file mode 100644 index 0000000..232c9d2 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/persist/SaveTask.java @@ -0,0 +1,30 @@ +package com.massivecraft.factions.zcore.persist; + +import com.massivecraft.factions.Board; +import com.massivecraft.factions.FPlayers; +import com.massivecraft.factions.Factions; +import com.massivecraft.factions.zcore.MPlugin; + +public class SaveTask implements Runnable { + + private static boolean running = false; + + MPlugin p; + + public SaveTask(MPlugin p) { + this.p = p; + } + + public void run() { + if (!p.getAutoSave() || running) { + return; + } + running = true; + p.preAutoSave(); + Factions.getInstance().forceSave(false); + FPlayers.getInstance().forceSave(false); + Board.getInstance().forceSave(false); + p.postAutoSave(); + running = false; + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/persist/json/FactionsJSON.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/persist/json/FactionsJSON.java new file mode 100644 index 0000000..2cc1c83 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/persist/json/FactionsJSON.java @@ -0,0 +1,45 @@ +package com.massivecraft.factions.zcore.persist.json; + +import com.massivecraft.factions.*; +import com.massivecraft.factions.zcore.persist.MemoryBoard; +import com.massivecraft.factions.zcore.persist.MemoryFPlayers; +import com.massivecraft.factions.zcore.persist.MemoryFactions; +import org.bukkit.scheduler.BukkitRunnable; + +import java.util.logging.Logger; + +public class FactionsJSON { + + public static void convertTo() { + if (!(Factions.getInstance() instanceof MemoryFactions)) { + return; + } + if (!(FPlayers.getInstance() instanceof MemoryFPlayers)) { + return; + } + if (!(Board.getInstance() instanceof MemoryBoard)) { + return; + } + new BukkitRunnable() { + @Override + public void run() { + Logger logger = P.p.getLogger(); + logger.info("Beginning Board conversion to JSON"); + new JSONBoard().convertFrom((MemoryBoard) Board.getInstance()); + logger.info("Board Converted"); + logger.info("Beginning FPlayers conversion to JSON"); + new JSONFPlayers().convertFrom((MemoryFPlayers) FPlayers.getInstance()); + logger.info("FPlayers Converted"); + logger.info("Beginning Factions conversion to JSON"); + new JSONFactions().convertFrom((MemoryFactions) Factions.getInstance()); + logger.info("Factions Converted"); + logger.info("Refreshing object caches"); + for (FPlayer fPlayer : FPlayers.getInstance().getAllFPlayers()) { + Faction faction = Factions.getInstance().getFactionById(fPlayer.getFactionId()); + faction.addFPlayer(fPlayer); + } + logger.info("Conversion Complete"); + } + }.runTaskAsynchronously(P.p); + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/persist/json/JSONBoard.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/persist/json/JSONBoard.java new file mode 100644 index 0000000..d81afb4 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/persist/json/JSONBoard.java @@ -0,0 +1,103 @@ +package com.massivecraft.factions.zcore.persist.json; + +import com.google.gson.reflect.TypeToken; +import com.massivecraft.factions.Board; +import com.massivecraft.factions.FLocation; +import com.massivecraft.factions.P; +import com.massivecraft.factions.zcore.persist.MemoryBoard; +import com.massivecraft.factions.zcore.util.DiscUtil; + +import java.io.File; +import java.lang.reflect.Type; +import java.util.HashMap; +import java.util.Map; +import java.util.Map.Entry; +import java.util.TreeMap; + + +public class JSONBoard extends MemoryBoard { + private static transient File file = new File(P.p.getDataFolder(), "board.json"); + + // -------------------------------------------- // + // Persistance + // -------------------------------------------- // + + public Map> dumpAsSaveFormat() { + Map> worldCoordIds = new HashMap>(); + + String worldName, coords; + String id; + + for (Entry entry : flocationIds.entrySet()) { + worldName = entry.getKey().getWorldName(); + coords = entry.getKey().getCoordString(); + id = entry.getValue(); + if (!worldCoordIds.containsKey(worldName)) { + worldCoordIds.put(worldName, new TreeMap()); + } + + worldCoordIds.get(worldName).put(coords, id); + } + + return worldCoordIds; + } + + public void loadFromSaveFormat(Map> worldCoordIds) { + flocationIds.clear(); + + String worldName; + String[] coords; + int x, z; + String factionId; + + for (Entry> entry : worldCoordIds.entrySet()) { + worldName = entry.getKey(); + for (Entry entry2 : entry.getValue().entrySet()) { + coords = entry2.getKey().trim().split("[,\\s]+"); + x = Integer.parseInt(coords[0]); + z = Integer.parseInt(coords[1]); + factionId = entry2.getValue(); + flocationIds.put(new FLocation(worldName, x, z), factionId); + } + } + } + + public void forceSave() { + forceSave(true); + } + + public void forceSave(boolean sync) { + DiscUtil.writeCatch(file, P.p.gson.toJson(dumpAsSaveFormat()), sync); + } + + public boolean load() { + P.p.log("Loading board from disk"); + + if (!file.exists()) { + P.p.log("No board to load from disk. Creating new file."); + forceSave(); + return true; + } + + try { + Type type = new TypeToken>>() { + }.getType(); + Map> worldCoordIds = P.p.gson.fromJson(DiscUtil.read(file), type); + loadFromSaveFormat(worldCoordIds); + P.p.log("Loaded " + flocationIds.size() + " board locations"); + } catch (Exception e) { + e.printStackTrace(); + P.p.log("Failed to load the board from disk."); + return false; + } + + return true; + } + + @Override + public void convertFrom(MemoryBoard old) { + this.flocationIds = old.flocationIds; + forceSave(); + Board.instance = this; + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/persist/json/JSONFPlayer.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/persist/json/JSONFPlayer.java new file mode 100644 index 0000000..71d451d --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/persist/json/JSONFPlayer.java @@ -0,0 +1,28 @@ +package com.massivecraft.factions.zcore.persist.json; + +import com.massivecraft.factions.Conf; +import com.massivecraft.factions.FPlayers; +import com.massivecraft.factions.zcore.persist.MemoryFPlayer; + +public class JSONFPlayer extends MemoryFPlayer { + + public JSONFPlayer(MemoryFPlayer arg0) { + super(arg0); + } + + public JSONFPlayer(String id) { + super(id); + } + + @Override + public void remove() { + ((JSONFPlayers) FPlayers.getInstance()).fPlayers.remove(getId()); + } + + public boolean shouldBeSaved() { + if (!this.hasFaction() && (this.getPowerRounded() == this.getPowerMaxRounded() || this.getPowerRounded() == (int) Math.round(Conf.powerPlayerStarting))) { + return false; + } + return true; + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/persist/json/JSONFPlayers.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/persist/json/JSONFPlayers.java new file mode 100644 index 0000000..c5a2ec6 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/persist/json/JSONFPlayers.java @@ -0,0 +1,193 @@ +package com.massivecraft.factions.zcore.persist.json; + +import com.google.common.base.Function; +import com.google.common.collect.Maps; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import com.massivecraft.factions.FPlayer; +import com.massivecraft.factions.FPlayers; +import com.massivecraft.factions.P; +import com.massivecraft.factions.zcore.persist.MemoryFPlayer; +import com.massivecraft.factions.zcore.persist.MemoryFPlayers; +import com.massivecraft.factions.zcore.util.DiscUtil; +import com.massivecraft.factions.zcore.util.UUIDFetcher; +import org.apache.commons.lang.StringUtils; +import org.bukkit.Bukkit; + +import java.io.File; +import java.io.IOException; +import java.util.*; +import java.util.Map.Entry; +import java.util.logging.Level; + +public class JSONFPlayers extends MemoryFPlayers { + // Info on how to persist + private Gson gson; + + public Gson getGson() { + return gson; + } + + public void setGson(Gson gson) { + this.gson = gson; + } + + private File file; + + public JSONFPlayers() { + file = new File(P.p.getDataFolder(), "players.json"); + gson = P.p.gson; + } + + public void convertFrom(MemoryFPlayers old) { + this.fPlayers.putAll(Maps.transformValues(old.fPlayers, new Function() { + @Override + public JSONFPlayer apply(FPlayer arg0) { + return new JSONFPlayer((MemoryFPlayer) arg0); + } + })); + forceSave(); + FPlayers.instance = this; + } + + public void forceSave() { + forceSave(true); + } + + public void forceSave(boolean sync) { + final Map entitiesThatShouldBeSaved = new HashMap(); + for (FPlayer entity : this.fPlayers.values()) { + if (((MemoryFPlayer) entity).shouldBeSaved()) { + entitiesThatShouldBeSaved.put(entity.getId(), (JSONFPlayer) entity); + } + } + + saveCore(file, entitiesThatShouldBeSaved, sync); + } + + private boolean saveCore(File target, Map data, boolean sync) { + return DiscUtil.writeCatch(target, this.gson.toJson(data), sync); + } + + public void load() { + Map fplayers = this.loadCore(); + if (fplayers == null) { + return; + } + this.fPlayers.clear(); + this.fPlayers.putAll(fplayers); + P.p.log("Loaded " + fPlayers.size() + " players"); + } + + private Map loadCore() { + if (!this.file.exists()) { + return new HashMap(); + } + + String content = DiscUtil.readCatch(this.file); + if (content == null) { + return null; + } + + Map data = this.gson.fromJson(content, new TypeToken>() { + }.getType()); + Set list = new HashSet(); + Set invalidList = new HashSet(); + for (Entry entry : data.entrySet()) { + String key = entry.getKey(); + entry.getValue().setId(key); + if (doesKeyNeedMigration(key)) { + if (!isKeyInvalid(key)) { + list.add(key); + } else { + invalidList.add(key); + } + } + } + + if (list.size() > 0) { + // We've got some converting to do! + Bukkit.getLogger().log(Level.INFO, "Factions is now updating players.json"); + + // First we'll make a backup, because god forbid anybody heed a + // warning + File file = new File(this.file.getParentFile(), "players.json.old"); + try { + file.createNewFile(); + } catch (IOException e) { + e.printStackTrace(); + } + saveCore(file, (Map) data, true); + Bukkit.getLogger().log(Level.INFO, "Backed up your old data at " + file.getAbsolutePath()); + + // Start fetching those UUIDs + Bukkit.getLogger().log(Level.INFO, "Please wait while Factions converts " + list.size() + " old player names to UUID. This may take a while."); + UUIDFetcher fetcher = new UUIDFetcher(new ArrayList(list)); + try { + Map response = fetcher.call(); + for (String s : list) { + // Are we missing any responses? + if (!response.containsKey(s)) { + // They don't have a UUID so they should just be removed + invalidList.add(s); + } + } + for (String value : response.keySet()) { + // For all the valid responses, let's replace their old + // named entry with a UUID key + String id = response.get(value).toString(); + + JSONFPlayer player = data.get(value); + + if (player == null) { + // The player never existed here, and shouldn't persist + invalidList.add(value); + continue; + } + + player.setId(id); // Update the object so it knows + + data.remove(value); // Out with the old... + data.put(id, player); // And in with the new + } + } catch (Exception e) { + e.printStackTrace(); + } + if (invalidList.size() > 0) { + for (String name : invalidList) { + // Remove all the invalid names we collected + data.remove(name); + } + Bukkit.getLogger().log(Level.INFO, "While converting we found names that either don't have a UUID or aren't players and removed them from storage."); + Bukkit.getLogger().log(Level.INFO, "The following names were detected as being invalid: " + StringUtils.join(invalidList, ", ")); + } + saveCore(this.file, (Map) data, true); // Update the + // flatfile + Bukkit.getLogger().log(Level.INFO, "Done converting players.json to UUID."); + } + return (Map) data; + } + + private boolean doesKeyNeedMigration(String key) { + if (!key.matches("[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}")) { + // Not a valid UUID.. + if (key.matches("[a-zA-Z0-9_]{2,16}")) { + // Valid playername, we'll mark this as one for conversion + // to UUID + return true; + } + } + return false; + } + + private boolean isKeyInvalid(String key) { + return !key.matches("[a-zA-Z0-9_]{2,16}"); + } + + @Override + public FPlayer generateFPlayer(String id) { + FPlayer player = new JSONFPlayer(id); + this.fPlayers.put(player.getId(), player); + return player; + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/persist/json/JSONFaction.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/persist/json/JSONFaction.java new file mode 100644 index 0000000..af1b4e8 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/persist/json/JSONFaction.java @@ -0,0 +1,17 @@ +package com.massivecraft.factions.zcore.persist.json; + +import com.massivecraft.factions.zcore.persist.MemoryFaction; + +public class JSONFaction extends MemoryFaction { + + public JSONFaction(MemoryFaction arg0) { + super(arg0); + } + + public JSONFaction() { + } + + public JSONFaction(String id) { + super(id); + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/persist/json/JSONFactions.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/persist/json/JSONFactions.java new file mode 100644 index 0000000..4183d58 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/persist/json/JSONFactions.java @@ -0,0 +1,263 @@ +package com.massivecraft.factions.zcore.persist.json; + +import com.google.common.base.Function; +import com.google.common.collect.Maps; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import com.massivecraft.factions.FLocation; +import com.massivecraft.factions.Faction; +import com.massivecraft.factions.Factions; +import com.massivecraft.factions.P; +import com.massivecraft.factions.zcore.persist.MemoryFaction; +import com.massivecraft.factions.zcore.persist.MemoryFactions; +import com.massivecraft.factions.zcore.util.DiscUtil; +import com.massivecraft.factions.zcore.util.UUIDFetcher; +import org.bukkit.Bukkit; + +import java.io.File; +import java.io.IOException; +import java.util.*; +import java.util.Map.Entry; +import java.util.logging.Level; + +public class JSONFactions extends MemoryFactions { + // Info on how to persist + private Gson gson; + + public Gson getGson() { + return gson; + } + + public void setGson(Gson gson) { + this.gson = gson; + } + + private File file; + + public File getFile() { + return file; + } + + public void setFile(File file) { + this.file = file; + } + + // -------------------------------------------- // + // CONSTRUCTORS + // -------------------------------------------- // + + public JSONFactions() { + this.file = new File(P.p.getDataFolder(), "factions.json"); + this.gson = P.p.gson; + this.nextId = 1; + } + + public void forceSave() { + forceSave(true); + } + + public void forceSave(boolean sync) { + final Map entitiesThatShouldBeSaved = new HashMap(); + for (Faction entity : this.factions.values()) { + entitiesThatShouldBeSaved.put(entity.getId(), (JSONFaction) entity); + } + + saveCore(file, entitiesThatShouldBeSaved, sync); + } + + private boolean saveCore(File target, Map entities, boolean sync) { + return DiscUtil.writeCatch(target, this.gson.toJson(entities), sync); + } + + public void load() { + Map factions = this.loadCore(); + if (factions == null) { + return; + } + this.factions.putAll(factions); + + super.load(); + P.p.log("Loaded " + factions.size() + " Factions"); + } + + private Map loadCore() { + if (!this.file.exists()) { + return new HashMap(); + } + + String content = DiscUtil.readCatch(this.file); + if (content == null) { + return null; + } + + Map data = this.gson.fromJson(content, new TypeToken>() { + }.getType()); + + this.nextId = 1; + // Do we have any names that need updating in claims or invites? + + int needsUpdate = 0; + for (Entry entry : data.entrySet()) { + String id = entry.getKey(); + Faction f = entry.getValue(); + f.setId(id); + this.updateNextIdForId(id); + needsUpdate += whichKeysNeedMigration(f.getInvites()).size(); + for (Set keys : f.getClaimOwnership().values()) { + needsUpdate += whichKeysNeedMigration(keys).size(); + } + } + + if (needsUpdate > 0) { + // We've got some converting to do! + Bukkit.getLogger().log(Level.INFO, "Factions is now updating factions.json"); + + // First we'll make a backup, because god forbid anybody heed a + // warning + File file = new File(this.file.getParentFile(), "factions.json.old"); + try { + file.createNewFile(); + } catch (IOException e) { + e.printStackTrace(); + } + saveCore(file, (Map) data, true); + Bukkit.getLogger().log(Level.INFO, "Backed up your old data at " + file.getAbsolutePath()); + + Bukkit.getLogger().log(Level.INFO, "Please wait while Factions converts " + needsUpdate + " old player names to UUID. This may take a while."); + + // Update claim ownership + + for (String string : data.keySet()) { + Faction f = data.get(string); + Map> claims = f.getClaimOwnership(); + for (FLocation key : claims.keySet()) { + Set set = claims.get(key); + + Set list = whichKeysNeedMigration(set); + + if (list.size() > 0) { + UUIDFetcher fetcher = new UUIDFetcher(new ArrayList(list)); + try { + Map response = fetcher.call(); + for (String value : response.keySet()) { + // Let's replace their old named entry with a + // UUID key + String id = response.get(value).toString(); + set.remove(value.toLowerCase()); // Out with the + // old... + set.add(id); // And in with the new + } + } catch (Exception e) { + e.printStackTrace(); + } + claims.put(key, set); // Update + } + } + } + + // Update invites + + for (String string : data.keySet()) { + Faction f = data.get(string); + Set invites = f.getInvites(); + Set list = whichKeysNeedMigration(invites); + + if (list.size() > 0) { + UUIDFetcher fetcher = new UUIDFetcher(new ArrayList(list)); + try { + Map response = fetcher.call(); + for (String value : response.keySet()) { + // Let's replace their old named entry with a UUID + // key + String id = response.get(value).toString(); + invites.remove(value.toLowerCase()); // Out with the + // old... + invites.add(id); // And in with the new + } + } catch (Exception e) { + e.printStackTrace(); + } + } + } + + saveCore(this.file, (Map) data, true); // Update the flatfile + Bukkit.getLogger().log(Level.INFO, "Done converting factions.json to UUID."); + } + return data; + } + + private Set whichKeysNeedMigration(Set keys) { + HashSet list = new HashSet(); + for (String value : keys) { + if (!value.matches("[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}")) { + // Not a valid UUID.. + if (value.matches("[a-zA-Z0-9_]{2,16}")) { + // Valid playername, we'll mark this as one for conversion + // to UUID + list.add(value); + } + } + } + return list; + } + + // -------------------------------------------- // + // ID MANAGEMENT + // -------------------------------------------- // + + public String getNextId() { + while (!isIdFree(this.nextId)) { + this.nextId += 1; + } + return Integer.toString(this.nextId); + } + + public boolean isIdFree(String id) { + return !this.factions.containsKey(id); + } + + public boolean isIdFree(int id) { + return this.isIdFree(Integer.toString(id)); + } + + protected synchronized void updateNextIdForId(int id) { + if (this.nextId < id) { + this.nextId = id + 1; + } + } + + protected void updateNextIdForId(String id) { + try { + int idAsInt = Integer.parseInt(id); + this.updateNextIdForId(idAsInt); + } catch (Exception ignored) { + } + } + + @Override + public Faction generateFactionObject() { + String id = getNextId(); + Faction faction = new JSONFaction(id); + updateNextIdForId(id); + return faction; + } + + @Override + public Faction generateFactionObject(String id) { + Faction faction = new JSONFaction(id); + return faction; + } + + @Override + public void convertFrom(MemoryFactions old) { + this.factions.putAll(Maps.transformValues(old.factions, new Function() { + @Override + public JSONFaction apply(Faction arg0) { + return new JSONFaction((MemoryFaction) arg0); + } + })); + this.nextId = old.nextId; + forceSave(); + Factions.instance = this; + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/util/DiscUtil.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/util/DiscUtil.java new file mode 100644 index 0000000..cae9dda --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/util/DiscUtil.java @@ -0,0 +1,137 @@ +package com.massivecraft.factions.zcore.util; + +import com.massivecraft.factions.P; +import org.bukkit.Bukkit; + +import java.io.*; +import java.util.HashMap; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReadWriteLock; +import java.util.concurrent.locks.ReentrantReadWriteLock; + +public class DiscUtil { + + // -------------------------------------------- // + // CONSTANTS + // -------------------------------------------- // + + private final static String UTF8 = "UTF-8"; + + // -------------------------------------------- // + // BYTE + // -------------------------------------------- // + + + public static byte[] readBytes(File file) throws IOException { + int length = (int) file.length(); + byte[] output = new byte[length]; + InputStream in = new FileInputStream(file); + int offset = 0; + while (offset < length) { + offset += in.read(output, offset, (length - offset)); + } + in.close(); + return output; + } + + public static void writeBytes(File file, byte[] bytes) throws IOException { + FileOutputStream out = new FileOutputStream(file); + out.write(bytes); + out.close(); + } + + // -------------------------------------------- // + // STRING + // -------------------------------------------- // + + public static void write(File file, String content) throws IOException { + writeBytes(file, utf8(content)); + } + + public static String read(File file) throws IOException { + return utf8(readBytes(file)); + } + + // -------------------------------------------- // + // CATCH + // -------------------------------------------- // + + private static HashMap locks = new HashMap(); + + public static boolean writeCatch(final File file, final String content, boolean sync) { + final byte[] bytes = utf8(content); + String name = file.getName(); + final Lock lock; + + // Create lock for each file if there isn't already one. + if (locks.containsKey(name)) { + lock = locks.get(name); + } else { + ReadWriteLock rwl = new ReentrantReadWriteLock(); + lock = rwl.writeLock(); + locks.put(name, lock); + } + + if (sync) { + lock.lock(); + try { + FileOutputStream out = new FileOutputStream(file); + out.write(bytes); + out.close(); + } catch (IOException e) { + e.printStackTrace(); + } finally { + lock.unlock(); + } + } else { + Bukkit.getScheduler().runTaskAsynchronously(P.p, new Runnable() { + @Override + public void run() { + lock.lock(); + try { + FileOutputStream out = new FileOutputStream(file); + out.write(bytes); + out.close(); + } catch (IOException e) { + e.printStackTrace(); + } finally { + lock.unlock(); + } + } + }); + } + + return true; // don't really care but for some reason this is a boolean. + } + + public static String readCatch(File file) { + try { + return read(file); + } catch (IOException e) { + return null; + } + } + + // -------------------------------------------- // + // UTF8 ENCODE AND DECODE + // -------------------------------------------- // + + public static byte[] utf8(String string) { + try { + return string.getBytes(UTF8); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + return null; + } + } + + public static String utf8(byte[] bytes) { + try { + return new String(bytes, UTF8); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + return null; + } + } + +} \ No newline at end of file diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/util/PermUtil.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/util/PermUtil.java new file mode 100644 index 0000000..f5cfb75 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/util/PermUtil.java @@ -0,0 +1,86 @@ +package com.massivecraft.factions.zcore.util; + +import com.massivecraft.factions.zcore.MPlugin; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.permissions.Permission; + +import java.util.HashMap; +import java.util.Map; +import java.util.Map.Entry; + + +public class PermUtil { + + public Map permissionDescriptions = new HashMap(); + + protected MPlugin p; + + public PermUtil(MPlugin p) { + this.p = p; + this.setup(); + } + + public String getForbiddenMessage(String perm) { + return p.txt.parse(TL.GENERIC_NOPERMISSION.toString(), getPermissionDescription(perm)); + } + + /** + * This method hooks into all permission plugins we are supporting + */ + public final void setup() { + for (Permission permission : p.getDescription().getPermissions()) { + //p.log("\""+permission.getName()+"\" = \""+permission.getDescription()+"\""); + this.permissionDescriptions.put(permission.getName(), permission.getDescription()); + } + } + + public String getPermissionDescription(String perm) { + String desc = permissionDescriptions.get(perm); + if (desc == null) { + return TL.GENERIC_DOTHAT.toString(); + } + return desc; + } + + /** + * This method tests if me has a certain permission and returns true if me has. Otherwise false + */ + public boolean has(CommandSender me, String perm) { + if (me == null) { + return false; + } + + if (!(me instanceof Player)) { + return me.hasPermission(perm); + } + + return me.hasPermission(perm); + } + + public boolean has(CommandSender me, String perm, boolean informSenderIfNot) { + if (has(me, perm)) { + return true; + } else if (informSenderIfNot && me != null) { + me.sendMessage(this.getForbiddenMessage(perm)); + } + return false; + } + + public T pickFirstVal(CommandSender me, Map perm2val) { + if (perm2val == null) { + return null; + } + T ret = null; + + for (Entry entry : perm2val.entrySet()) { + ret = entry.getValue(); + if (has(me, entry.getKey())) { + break; + } + } + + return ret; + } + +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/util/Persist.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/util/Persist.java new file mode 100644 index 0000000..0d15027 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/util/Persist.java @@ -0,0 +1,154 @@ +package com.massivecraft.factions.zcore.util; + +import com.massivecraft.factions.zcore.MPlugin; + +import java.io.File; +import java.lang.reflect.Type; +import java.util.logging.Level; + +// TODO: Give better name and place to differentiate from the entity-orm-ish system in "com.massivecraft.core.persist". + +public class Persist { + + private MPlugin p; + + public Persist(MPlugin p) { + this.p = p; + } + + // ------------------------------------------------------------ // + // GET NAME - What should we call this type of object? + // ------------------------------------------------------------ // + + public static String getName(Class clazz) { + return clazz.getSimpleName().toLowerCase(); + } + + public static String getName(Object o) { + return getName(o.getClass()); + } + + public static String getName(Type type) { + return getName(type.getClass()); + } + + // ------------------------------------------------------------ // + // GET FILE - In which file would we like to store this object? + // ------------------------------------------------------------ // + + public File getFile(String name) { + return new File(p.getDataFolder(), name + ".json"); + } + + public File getFile(Class clazz) { + return getFile(getName(clazz)); + } + + public File getFile(Object obj) { + return getFile(getName(obj)); + } + + public File getFile(Type type) { + return getFile(getName(type)); + } + + + // NICE WRAPPERS + + public T loadOrSaveDefault(T def, Class clazz) { + return loadOrSaveDefault(def, clazz, getFile(clazz)); + } + + public T loadOrSaveDefault(T def, Class clazz, String name) { + return loadOrSaveDefault(def, clazz, getFile(name)); + } + + public T loadOrSaveDefault(T def, Class clazz, File file) { + if (!file.exists()) { + p.log("Creating default: " + file); + this.save(def, file); + return def; + } + + T loaded = this.load(clazz, file); + + if (loaded == null) { + p.log(Level.WARNING, "Using default as I failed to load: " + file); + + // backup bad file, so user can attempt to recover their changes from it + File backup = new File(file.getPath() + "_bad"); + if (backup.exists()) { + backup.delete(); + } + p.log(Level.WARNING, "Backing up copy of bad file to: " + backup); + file.renameTo(backup); + + return def; + } + + return loaded; + } + + // SAVE + + public boolean save(Object instance) { + return save(instance, getFile(instance)); + } + + public boolean save(Object instance, String name) { + return save(instance, getFile(name)); + } + + public boolean save(Object instance, File file) { + return DiscUtil.writeCatch(file, p.gson.toJson(instance), true); + } + + // LOAD BY CLASS + + public T load(Class clazz) { + return load(clazz, getFile(clazz)); + } + + public T load(Class clazz, String name) { + return load(clazz, getFile(name)); + } + + public T load(Class clazz, File file) { + String content = DiscUtil.readCatch(file); + if (content == null) { + return null; + } + + try { + T instance = p.gson.fromJson(content, clazz); + return instance; + } catch (Exception ex) { // output the error message rather than full stack trace; error parsing the file, most likely + p.log(Level.WARNING, ex.getMessage()); + } + + return null; + } + + + // LOAD BY TYPE + @SuppressWarnings("unchecked") + public T load(Type typeOfT, String name) { + return (T) load(typeOfT, getFile(name)); + } + + @SuppressWarnings("unchecked") + public T load(Type typeOfT, File file) { + String content = DiscUtil.readCatch(file); + if (content == null) { + return null; + } + + try { + return (T) p.gson.fromJson(content, typeOfT); + } catch (Exception ex) { // output the error message rather than full stack trace; error parsing the file, most likely + p.log(Level.WARNING, ex.getMessage()); + } + + return null; + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/util/SmokeUtil.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/util/SmokeUtil.java new file mode 100644 index 0000000..6451a69 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/util/SmokeUtil.java @@ -0,0 +1,82 @@ +package com.massivecraft.factions.zcore.util; + +import org.bukkit.Effect; +import org.bukkit.Location; + +import java.util.Collection; +import java.util.Random; + +// http://mc.kev009.com/Protocol +// ----------------------------- +// Smoke Directions +// ----------------------------- +// Direction ID Direction +// 0 South - East +// 1 South +// 2 South - West +// 3 East +// 4 (Up or middle ?) +// 5 West +// 6 North - East +// 7 North +// 8 North - West +//----------------------------- + +public class SmokeUtil { + + public static Random random = new Random(); + + // -------------------------------------------- // + // Spawn once + // -------------------------------------------- // + + // Single ======== + public static void spawnSingle(Location location, int direction) { + if (location == null) { + return; + } + location.getWorld().playEffect(location.clone(), Effect.SMOKE, direction); + } + + public static void spawnSingle(Location location) { + spawnSingle(location, 4); + } + + public static void spawnSingleRandom(Location location) { + spawnSingle(location, random.nextInt(9)); + } + + // Simple Cloud ======== + public static void spawnCloudSimple(Location location) { + for (int i = 0; i <= 8; i++) { + spawnSingle(location, i); + } + } + + public static void spawnCloudSimple(Collection locations) { + for (Location location : locations) { + spawnCloudSimple(location); + } + } + + // Random Cloud ======== + public static void spawnCloudRandom(Location location, float thickness) { + int singles = (int) Math.floor(thickness * 9); + for (int i = 0; i < singles; i++) { + spawnSingleRandom(location.clone()); + } + } + + public static void spawnCloudRandom(Collection locations, float thickness) { + for (Location location : locations) { + spawnCloudRandom(location, thickness); + } + } + + // -------------------------------------------- // + // Attach continuous effects to or locations + // -------------------------------------------- // + + // TODO + +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/util/TL.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/util/TL.java new file mode 100644 index 0000000..ed3cbfc --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/util/TL.java @@ -0,0 +1,798 @@ +/* + * Copyright (C) 2013 drtshock + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.massivecraft.factions.zcore.util; + +import org.bukkit.ChatColor; +import org.bukkit.configuration.file.YamlConfiguration; + +import java.text.SimpleDateFormat; + +/** + * An enum for requesting strings from the language file. The contents of this enum file may be subject to frequent + * changes. + */ +public enum TL { + /** + * Translation meta + */ + _AUTHOR("misc"), + _RESPONSIBLE("misc"), + _LANGUAGE("English"), + _ENCODING("UTF-8"), + _LOCALE("en_US"), + _REQUIRESUNICODE("false"), + _DEFAULT("true"), + _STATE("complete"), //incomplete, limited, partial, majority, complete + + /** + * Localised translation meta + */ + _LOCAL_AUTHOR("misc"), + _LOCAL_RESPONSIBLE("misc"), + _LOCAL_LANGUAGE("English"), + _LOCAL_REGION("US"), + _LOCAL_STATE("complete"), //And this is the English version. It's not ever going to be not complete. + + /** + * Command translations + */ + COMMAND_ADMIN_NOTMEMBER("%1$s is not a member in your cartel."), + COMMAND_ADMIN_NOTADMIN("You are not the cartel boss."), + COMMAND_ADMIN_TARGETSELF("The target player musn't be yourself."), + COMMAND_ADMIN_DEMOTES("You have demoted %1$s from the position of cartel boss."), + COMMAND_ADMIN_DEMOTED("You have been demoted from the position of cartel boss by %1$s."), + COMMAND_ADMIN_PROMOTES("You have promoted %1$s to the position of cartel boss."), + COMMAND_ADMIN_PROMOTED("%1$s gave %2$s the leadership of %3$s."), + COMMAND_ADMIN_DESCRIPTION("Hand over your boss rights"), + + COMMAND_AHOME_DESCRIPTION("Send a player to their cartel home no matter what."), + COMMAND_AHOME_NOHOME("%1$s doesn't have a cartel home."), + COMMAND_AHOME_SUCCESS("$1%s was sent to their cartel home."), + COMMAND_AHOME_OFFLINE("%1$s is offline."), + COMMAND_AHOME_TARGET("You were sent to your cartel home."), + + COMMAND_ANNOUNCE_DESCRIPTION("Announce a message to players in cartel."), + + COMMAND_AUTOCLAIM_ENABLED("Now auto-claiming land for %1$s."), + COMMAND_AUTOCLAIM_DISABLED("Auto-claiming of land disabled."), + COMMAND_AUTOCLAIM_REQUIREDRANK("You must be %1$s to claim land."), + COMMAND_AUTOCLAIM_OTHERFACTION("You can't claim land for %1$s."), + COMMAND_AUTOCLAIM_DESCRIPTION("Auto-claim land as you walk around"), + + COMMAND_AUTOHELP_HELPFOR("Help for command \""), + + COMMAND_BOOM_PEACEFULONLY("This command is only usable by cartels which are specifically designated as peaceful."), + COMMAND_BOOM_TOTOGGLE("to toggle explosions"), + COMMAND_BOOM_FORTOGGLE("for toggling explosions"), + COMMAND_BOOM_ENABLED("%1$s has %2$s explosions in your cartel's territory."), + COMMAND_BOOM_DESCRIPTION("Toggle explosions (peaceful cartels only)"), + + COMMAND_BYPASS_ENABLE("You have enabled admin bypass mode. You will be able to build or destroy anywhere."), + COMMAND_BYPASS_ENABLELOG(" has ENABLED admin bypass mode."), + COMMAND_BYPASS_DISABLE("You have disabled admin bypass mode."), + COMMAND_BYPASS_DISABLELOG(" has DISABLED admin bypass mode."), + COMMAND_BYPASS_DESCRIPTION("Enable admin bypass mode"), + + COMMAND_CHAT_DISABLED("The built in chat channels are disabled on this server."), + COMMAND_CHAT_INVALIDMODE("Unrecognised chat mode. Please enter either 'a','c' or 'p'"),//TODO Don't forget, change character to c for chatmode. + COMMAND_CHAT_DESCRIPTION("Change chat mode"), + + COMMAND_CHAT_MODE_PUBLIC("Public chat mode."), + COMMAND_CHAT_MODE_ALLIANCE("Alliance only chat mode."), + COMMAND_CHAT_MODE_TRUCE("Truce only chat mode."), + COMMAND_CHAT_MODE_FACTION("Cartel only chat mode."), + + COMMAND_CHATSPY_ENABLE("You have enabled chat spying mode."), + COMMAND_CHATSPY_ENABLELOG(" has ENABLED chat spying mode."), + COMMAND_CHATSPY_DISABLE("You have disabled chat spying mode."), + COMMAND_CHATSPY_DISABLELOG(" has DISABLED chat spying mode."), + COMMAND_CHATSPY_DESCRIPTION("Enable admin chat spy mode"), + + COMMAND_CLAIM_INVALIDRADIUS("If you specify a radius, it must be at least 1."), + COMMAND_CLAIM_DENIED("You do not have permission to claim in a radius."), + COMMAND_CLAIM_DESCRIPTION("Claim land from where you are standing"), + + COMMAND_CLAIMLINE_INVALIDRADIUS("If you specify a distance, it must be at least 1."), + COMMAND_CLAIMLINE_DENIED("You do not have permission to claim in a line."), + COMMAND_CLAIMLINE_DESCRIPTION("Claim land in a straight line."), + COMMAND_CLAIMLINE_ABOVEMAX("The maximum limit for claim line is %s."), + COMMAND_CLAIMLINE_NOTVALID("%s is not a cardinal direction. You may use north, east, south or west."), + + COMMAND_CONFIG_NOEXIST("No configuration setting \"%1$s\" exists."), + COMMAND_CONFIG_SET_TRUE("\" option set to true (enabled)."), + COMMAND_CONFIG_SET_FALSE("\" option set to false (disabled)."), + COMMAND_CONFIG_OPTIONSET("\" option set to "), + COMMAND_CONFIG_COLOURSET("\" color option set to \""), + COMMAND_CONFIG_INTREQUIRED("Cannot set \"%1$s\": An integer (whole number) value required."), + COMMAND_CONFIG_LONGREQUIRED("Cannot set \"%1$s\": A long integer (whole number) value required."), + COMMAND_CONFIG_DOUBLEREQUIRED("Cannot set \"%1$s\": A double (numeric) value required."), + COMMAND_CONFIG_FLOATREQUIRED("Cannot set \"%1$s\": A float (numeric) value required."), + COMMAND_CONFIG_INVALID_COLOUR("Cannot set \"%1$s\": \"%2$s\" is not a valid color."), + COMMAND_CONFIG_INVALID_COLLECTION("\"%1$s\" is not a data collection type which can be modified with this command."), + COMMAND_CONFIG_INVALID_MATERIAL("Cannot change \"%1$s\" set: \"%2$s\" is not a valid material."), + COMMAND_CONFIG_INVALID_TYPESET("\"%1$s\" is not a data type set which can be modified with this command."), + COMMAND_CONFIG_MATERIAL_ADDED("\"%1$s\" set: Material \"%2$s\" added."), + COMMAND_CONFIG_MATERIAL_REMOVED("\"%1$s\" set: Material \"%2$s\" removed."), + COMMAND_CONFIG_SET_ADDED("\"%1$s\" set: \"%2$s\" added."), + COMMAND_CONFIG_SET_REMOVED("\"%1$s\" set: \"%2$s\" removed."), + COMMAND_CONFIG_LOG(" (Command was run by %1$s.)"), + COMMAND_CONFIG_ERROR_SETTING("Error setting configuration setting \"%1$s\" to \"%2$s\"."), + COMMAND_CONFIG_ERROR_MATCHING("Configuration setting \"%1$s\" couldn't be matched, though it should be... please report this error."), + COMMAND_CONFIG_ERROR_TYPE("'%1$s' is of type '%2$s', which cannot be modified with this command."), + COMMAND_CONFIG_DESCRIPTION("Change a conf.json setting"), + + COMMAND_CONVERT_BACKEND_RUNNING("Already running that backend."), + COMMAND_CONVERT_BACKEND_INVALID("Invalid backend"), + COMMAND_CONVERT_DESCRIPTION("Convert the plugin backend"), + + COMMAND_CREATE_MUSTLEAVE("You must leave your current cartel first."), + COMMAND_CREATE_INUSE("That tag is already in use."), + COMMAND_CREATE_TOCREATE("to create a new cartel"), + COMMAND_CREATE_FORCREATE("for creating a new cartel"), + COMMAND_CREATE_ERROR("There was an internal error while trying to create your cartel. Please try again."), + COMMAND_CREATE_CREATED("%1$s created a new cartel %2$s"), + COMMAND_CREATE_YOUSHOULD("You should now: %1$s"), + COMMAND_CREATE_CREATEDLOG(" created a new cartel: "), + COMMAND_CREATE_DESCRIPTION("Create a new cartel"), + + COMMAND_DEINVITE_CANDEINVITE("Players you can deinvite: "), + COMMAND_DEINVITE_CLICKTODEINVITE("Click to revoke invite for %1$s"), + COMMAND_DEINVITE_ALREADYMEMBER("%1$s is already a member of %2$s"), + COMMAND_DEINVITE_MIGHTWANT("You might want to: %1$s"), + COMMAND_DEINVITE_REVOKED("%1$s revoked your invitation to %2$s."), + COMMAND_DEINVITE_REVOKES("%1$s revoked %2$s's invitation."), + COMMAND_DEINVITE_DESCRIPTION("Remove a pending invitation"), + + COMMAND_DELFWARP_DELETED("Deleted warp %1$s"), + COMMAND_DELFWARP_INVALID("Couldn't find warp %1$s"), + COMMAND_DELFWARP_TODELETE("to delete warp"), + COMMAND_DELFWARP_FORDELETE("for deleting warp"), + COMMAND_DELFWARP_DESCRIPTION("Delete a cartel warp"), + + COMMAND_DESCRIPTION_CHANGES("You have changed the description for %1$s to:"), + COMMAND_DESCRIPTION_CHANGED("The cartel %1$s changed their description to:"), + COMMAND_DESCRIPTION_TOCHANGE("to change cartel description"), + COMMAND_DESCRIPTION_FORCHANGE("for changing cartel description"), + COMMAND_DESCRIPTION_DESCRIPTION("Change the cartel description"), + + COMMAND_DISBAND_IMMUTABLE("You cannot disband the Wilderness, SafeZone, or WarZone."), + COMMAND_DISBAND_MARKEDPERMANENT("This cartel is designated as permanent, so you cannot disband it."), + COMMAND_DISBAND_BROADCAST_YOURS("%1$s disbanded your cartel."), + COMMAND_DISBAND_BROADCAST_NOTYOURS("%1$s disbanded the cartel %2$s."), + COMMAND_DISBAND_HOLDINGS("You have been given the disbanded cartel's bank, totaling %1$s."), + COMMAND_DISBAND_DESCRIPTION("Disband a cartel"), + + COMMAND_FWARP_CLICKTOWARP("Click to warp!"), + COMMAND_FWARP_COMMANDFORMAT("/f warp "), + COMMAND_FWARP_WARPED("Warped to %1$s"), + COMMAND_FWARP_INVALID("Couldn't find warp %1$s"), + COMMAND_FWARP_TOWARP("to warp"), + COMMAND_FWARP_FORWARPING("for warping"), + COMMAND_FWARP_WARPS("Warps: "), + COMMAND_FWARP_DESCRIPTION("Teleport to a cartel warp"), + + COMMAND_HELP_404("This page does not exist"), + COMMAND_HELP_NEXTCREATE("Learn how to create a cartel on the next page."), + COMMAND_HELP_INVITATIONS("command.help.invitations", "You might want to close it and use invitations:"), + COMMAND_HELP_HOME("And don't forget to set your home:"), + COMMAND_HELP_BANK_1("Your cartel has a bank which is used to pay for certain"), + COMMAND_HELP_BANK_2("things, so it will need to have money deposited into it."), + COMMAND_HELP_BANK_3("To learn more, use the money command."), + COMMAND_HELP_PLAYERTITLES("Player titles are just for fun. No rules connected to them."), + COMMAND_HELP_OWNERSHIP_1("Claimed land with ownership set is further protected so"), + COMMAND_HELP_OWNERSHIP_2("that only the owner(s), cartel boss, and possibly the"), + COMMAND_HELP_OWNERSHIP_3("cartel underbosses have full access."), + COMMAND_HELP_RELATIONS_1("Set the relation you WISH to have with another cartel."), + COMMAND_HELP_RELATIONS_2("Your default relation with other cartels will be neutral."), + COMMAND_HELP_RELATIONS_3("If BOTH cartels choose \"ally\" you will be allies."), + COMMAND_HELP_RELATIONS_4("If ONE cartel chooses \"enemy\" you will be enemies."), + COMMAND_HELP_RELATIONS_5("You can never hurt members or allies."), + COMMAND_HELP_RELATIONS_6("You can not hurt neutrals in their own territory."), + COMMAND_HELP_RELATIONS_7("You can always hurt enemies and players without cartel."), + COMMAND_HELP_RELATIONS_8(""), + COMMAND_HELP_RELATIONS_9("Damage from enemies is reduced in your own territory."), + COMMAND_HELP_RELATIONS_10("When you die you lose power. It is restored over time."), + COMMAND_HELP_RELATIONS_11("The power of a cartel is the sum of all member power."), + COMMAND_HELP_RELATIONS_12("The power of a cartel determines how much land it can hold."), + COMMAND_HELP_RELATIONS_13("You can claim land from cartels with too little power."), + COMMAND_HELP_PERMISSIONS_1("Only cartel members can build and destroy in their own"), + COMMAND_HELP_PERMISSIONS_2("territory. Usage of the following items is also restricted:"), + COMMAND_HELP_PERMISSIONS_3("Door, Chest, Furnace, Dispenser, Diode."), + COMMAND_HELP_PERMISSIONS_4(""), + COMMAND_HELP_PERMISSIONS_5("Make sure to put pressure plates in front of doors for your"), + COMMAND_HELP_PERMISSIONS_6("guest visitors. Otherwise they can't get through. You can"), + COMMAND_HELP_PERMISSIONS_7("also use this to create member only areas."), + COMMAND_HELP_PERMISSIONS_8("As dispensers are protected, you can create traps without"), + COMMAND_HELP_PERMISSIONS_9("worrying about those arrows getting stolen."), + COMMAND_HELP_ADMIN_1("/c claim safezone claim land for the Safe Zone"), + COMMAND_HELP_ADMIN_2("/c claim warzone claim land for the War Zone"), + COMMAND_HELP_ADMIN_3("/c autoclaim [safezone|warzone] take a guess"), + COMMAND_HELP_MOAR_1("Finally some commands for the server admins:"), + COMMAND_HELP_MOAR_2("More commands for server admins:"), + COMMAND_HELP_MOAR_3("Even more commands for server admins:"), + COMMAND_HELP_DESCRIPTION("Display a help page"), + + COMMAND_HOME_DISABLED("Sorry, Cartel homes are disabled on this server."), + COMMAND_HOME_TELEPORTDISABLED("Sorry, the ability to teleport to Cartel homes is disabled on this server."), + COMMAND_HOME_NOHOME("Your cartel does not have a home. "), + COMMAND_HOME_INENEMY("You cannot teleport to your cartel home while in the territory of an enemy cartel."), + COMMAND_HOME_WRONGWORLD("You cannot teleport to your cartel home while in a different world."), + COMMAND_HOME_ENEMYNEAR("You cannot teleport to your cartel home while an enemy is within %s blocks of you."), + COMMAND_HOME_TOTELEPORT("to teleport to your cartel home"), + COMMAND_HOME_FORTELEPORT("for teleporting to your cartel home"), + COMMAND_HOME_DESCRIPTION("Teleport to the cartel home"), + + COMMAND_INVITE_TOINVITE("to invite someone"), + COMMAND_INVITE_FORINVITE("for inviting someone"), + COMMAND_INVITE_CLICKTOJOIN("Click to join!"), + COMMAND_INVITE_INVITEDYOU(" has invited you to join "), + COMMAND_INVITE_INVITED("%1$s invited %2$s to your cartel."), + COMMAND_INVITE_ALREADYMEMBER("%1$s is already a member of %2$s"), + COMMAND_INVITE_DESCRIPTION("Invite a player to your cartel"), + + COMMAND_JOIN_CANNOTFORCE("You do not have permission to move other players into a cartel."), + COMMAND_JOIN_SYSTEMFACTION("Players may only join normal cartels. This is a system cartel."), + COMMAND_JOIN_ALREADYMEMBER("%1$s %2$s already a member of %3$s"), + COMMAND_JOIN_ATLIMIT(" ! The cartel %1$s is at the limit of %2$d members, so %3$s cannot currently join."), + COMMAND_JOIN_INOTHERFACTION("%1$s must leave %2$s current cartel first."), + COMMAND_JOIN_NEGATIVEPOWER("%1$s cannot join a cartel with a negative power level."), + COMMAND_JOIN_REQUIRESINVITATION("This cartel requires invitation."), + COMMAND_JOIN_ATTEMPTEDJOIN("%1$s tried to join your cartel."), + COMMAND_JOIN_TOJOIN("to join a cartel"), + COMMAND_JOIN_FORJOIN("for joining a cartel"), + COMMAND_JOIN_SUCCESS("%1$s successfully joined %2$s."), + COMMAND_JOIN_MOVED("%1$s moved you into the cartel %2$s."), + COMMAND_JOIN_JOINED("%1$s joined your cartel."), + COMMAND_JOIN_JOINEDLOG("%1$s joined the cartel %2$s."), + COMMAND_JOIN_MOVEDLOG("%1$s moved the player %2$s into the cartel %3$s."), + COMMAND_JOIN_DESCRIPTION("Join a cartel"), + + COMMAND_KICK_CANDIDATES("Players you can kick: "), + COMMAND_KICK_CLICKTOKICK("Click to kick "), + COMMAND_KICK_SELF("You cannot kick yourself."), + COMMAND_KICK_NONE("That player is not in a cartel."), + COMMAND_KICK_NOTMEMBER("%1$s is not a member of %2$s"), + COMMAND_KICK_INSUFFICIENTRANK("Your rank is too low to kick this player."), + COMMAND_KICK_NEGATIVEPOWER("You cannot kick that member until their power is positive."), + COMMAND_KICK_TOKICK("to kick someone from the cartel"), + COMMAND_KICK_FORKICK("for kicking someone from the cartel"), + COMMAND_KICK_FACTION("%1$s kicked %2$s from the cartel! :O"), //message given to cartel members + COMMAND_KICK_KICKS("You kicked %1$s from the cartel %2$s!"), //kicker perspective + COMMAND_KICK_KICKED("%1$s kicked you from %2$s! :O"), //kicked player perspective + COMMAND_KICK_DESCRIPTION("Kick a player from the cartel"), + + COMMAND_LIST_FACTIONLIST("Cartel List "), + COMMAND_LIST_TOLIST("to list the cartels"), + COMMAND_LIST_FORLIST("for listing the cartels"), + COMMAND_LIST_ONLINEFACTIONLESS("Online cartelless: "), + COMMAND_LIST_DESCRIPTION("See a list of the cartels"), + + COMMAND_LOCK_LOCKED("Cartels is now locked"), + COMMAND_LOCK_UNLOCKED("Cartels in now unlocked"), + COMMAND_LOCK_DESCRIPTION("Lock all write stuff. Apparently."), + + COMMAND_LOGINS_TOGGLE("Set login / logout notifications for Cartel members to: %s"), + COMMAND_LOGINS_DESCRIPTION("Toggle(?) login / logout notifications for Cartel members"), + + COMMAND_MAP_TOSHOW("to show the map"), + COMMAND_MAP_FORSHOW("for showing the map"), + COMMAND_MAP_UPDATE_ENABLED("Map auto update ENABLED."), + COMMAND_MAP_UPDATE_DISABLED("Map auto update DISABLED."), + COMMAND_MAP_DESCRIPTION("Show the territory map, and set optional auto update"), + + COMMAND_MOD_CANDIDATES("Players you can promote: "), + COMMAND_MOD_CLICKTOPROMOTE("Click to promote "), + COMMAND_MOD_NOTMEMBER("%1$s is not a member in your cartel."), + COMMAND_MOD_NOTADMIN("You are not the cartel boss."), + COMMAND_MOD_SELF("The target player musn't be yourself."), + COMMAND_MOD_TARGETISADMIN("The target player is a cartel boss. Demote them first."), + COMMAND_MOD_REVOKES("You have removed underbos status from %1$s."), + COMMAND_MOD_REVOKED("%1$s is no longer underbos in your cartel."), + COMMAND_MOD_PROMOTES("%1$s was promoted to underbos in your cartel."), + COMMAND_MOD_PROMOTED("You have promoted %1$s to underbos."), + COMMAND_MOD_DESCRIPTION("Give or revoke underbos rights"), + + COMMAND_MODIFYPOWER_ADDED("Added %1$f power to %2$s. New total rounded power: %3$d"), + COMMAND_MODIFYPOWER_DESCRIPTION("Modify the power of a cartel/player"), + + COMMAND_MONEY_LONG("The cartel money commands."), + COMMAND_MONEY_DESCRIPTION("Cartel money commands"), + + COMMAND_MONEYBALANCE_SHORT("show cartel balance"), + COMMAND_MONEYBALANCE_DESCRIPTION("Show your cartels current money balance"), + + COMMAND_MONEYDEPOSIT_DESCRIPTION("Deposit money"), + COMMAND_MONEYDEPOSIT_DEPOSITED("%1$s deposited %2$s in the cartel bank: %3$s"), + + COMMAND_MONEYTRANSFERFF_DESCRIPTION("Transfer f -> f"), + COMMAND_MONEYTRANSFERFF_TRANSFER("%1$s transferred %2$s from the cartel \"%3$s\" to the cartel \"%4$s\""), + + COMMAND_MONEYTRANSFERFP_DESCRIPTION("Transfer f -> p"), + COMMAND_MONEYTRANSFERFP_TRANSFER("%1$s transferred %2$s from the cartel \"%3$s\" to the player \"%4$s\""), + + COMMAND_MONEYTRANSFERPF_DESCRIPTION("Transfer p -> f"), + COMMAND_MONEYTRANSFERPF_TRANSFER("%1$s transferred %2$s from the player \"%3$s\" to the cartel \"%4$s\""), + + COMMAND_MONEYWITHDRAW_DESCRIPTION("Withdraw money"), + COMMAND_MONEYWITHDRAW_WITHDRAW("%1$s withdrew %2$s from the cartel bank: %3$s"), + + COMMAND_OPEN_TOOPEN("to open or close the cartel"), + COMMAND_OPEN_FOROPEN("for opening or closing the cartel"), + COMMAND_OPEN_OPEN("open"), + COMMAND_OPEN_CLOSED("closed"), + COMMAND_OPEN_CHANGES("%1$s changed the cartel to %2$s."), + COMMAND_OPEN_CHANGED("The cartel %1$s is now %2$s"), + COMMAND_OPEN_DESCRIPTION("Switch if invitation is required to join"), + + COMMAND_OWNER_DISABLED("Sorry, but owned areas are disabled on this server."), + COMMAND_OWNER_LIMIT("Sorry, but you have reached the server's limit of %1$d owned areas per cartel."), + COMMAND_OWNER_WRONGFACTION("This land is not claimed by your cartel, so you can't set ownership of it."), + COMMAND_OWNER_NOTCLAIMED("This land is not claimed by a cartel. Ownership is not possible."), + COMMAND_OWNER_NOTMEMBER("%1$s is not a member of this cartel."), + COMMAND_OWNER_CLEARED("You have cleared ownership for this claimed area."), + COMMAND_OWNER_REMOVED("You have removed ownership of this claimed land from %1$s."), + COMMAND_OWNER_TOSET("to set ownership of claimed land"), + COMMAND_OWNER_FORSET("for setting ownership of claimed land"), + COMMAND_OWNER_ADDED("You have added %1$s to the owner list for this claimed land."), + COMMAND_OWNER_DESCRIPTION("Set ownership of claimed land"), + + COMMAND_OWNERLIST_DISABLED("Sorry, but owned areas are disabled on this server."),//dup-> + COMMAND_OWNERLIST_WRONGFACTION("This land is not claimed by your cartel."),//eq + COMMAND_OWNERLIST_NOTCLAIMED("This land is not claimed by any cartel, thus no owners."),//eq + COMMAND_OWNERLIST_NONE("No owners are set here; everyone in the cartel has access."), + COMMAND_OWNERLIST_OWNERS("Current owner(s) of this land: %1$s"), + COMMAND_OWNERLIST_DESCRIPTION("List owner(s) of this claimed land"), + + COMMAND_PEACEFUL_DESCRIPTION("Set a cartel to peaceful"), + COMMAND_PEACEFUL_YOURS("%1$s has %2$s your cartel"), + COMMAND_PEACEFUL_OTHER("%s has %s the cartel '%s'."), + COMMAND_PEACEFUL_GRANT("granted peaceful status to"), + COMMAND_PEACEFUL_REVOKE("removed peaceful status from"), + + COMMAND_PERMANENT_DESCRIPTION("Toggles a cartel's permanence"), //TODO: Real word? + COMMAND_PERMANENT_GRANT("added permanent status to"), + COMMAND_PERMANENT_REVOKE("removed permanent status from"), + COMMAND_PERMANENT_YOURS("%1$s has %2$s your cartel"), + COMMAND_PERMANENT_OTHER("%s has %s the cartel '%s'."), + + COMMAND_PERMANENTPOWER_DESCRIPTION("Toggle cartel power permanence"), //TODO: This a real word? + COMMAND_PERMANENTPOWER_GRANT("added permanentpower status to"), + COMMAND_PERMANENTPOWER_REVOKE("removed permanentpower status from"), + COMMAND_PERMANENTPOWER_SUCCESS("You %s %s."), + COMMAND_PERMANENTPOWER_FACTION("%s %s your cartel"), + + COMMAND_POWER_TOSHOW("to show player power info"), + COMMAND_POWER_FORSHOW("for showing player power info"), + COMMAND_POWER_POWER("%1$s - Power / Maxpower: %2$d / %3$d %4$s"), + COMMAND_POWER_BONUS(" (bonus: "), + COMMAND_POWER_PENALTY(" (penalty: "), + COMMAND_POWER_DESCRIPTION("Show player power info"), + + COMMAND_POWERBOOST_HELP_1("You must specify \"p\" or \"player\" to target a player or \"f\" or \"cartel\" to target a cartel."), + COMMAND_POWERBOOST_HELP_2("ex. /c powerboost p SomePlayer 0.5 -or- /c powerboost c SomeCartel -5"), + COMMAND_POWERBOOST_INVALIDNUM("You must specify a valid numeric value for the power bonus/penalty amount."), + COMMAND_POWERBOOST_PLAYER("Player \"%1$s\""), + COMMAND_POWERBOOST_FACTION("Cartel \"%1$s\""), + COMMAND_POWERBOOST_BOOST("%1$s now has a power bonus/penalty of %2$d to min and max power levels."), + COMMAND_POWERBOOST_BOOSTLOG("%1$s has set the power bonus/penalty for %2$s to %3$d."), + COMMAND_POWERBOOST_DESCRIPTION("Apply permanent power bonus/penalty to specified player or cartel"), + + COMMAND_RELATIONS_ALLTHENOPE("Nope! You can't."), + COMMAND_RELATIONS_MORENOPE("Nope! You can't declare a relation to yourself :)"), + COMMAND_RELATIONS_ALREADYINRELATIONSHIP("You already have that relation wish set with %1$s."), + COMMAND_RELATIONS_TOMARRY("to change a relation wish"), + COMMAND_RELATIONS_FORMARRY("for changing a relation wish"), + COMMAND_RELATIONS_MUTUAL("Your cartel is now %1$s to %2$s"), + COMMAND_RELATIONS_PEACEFUL("This will have no effect while your cartel is peaceful."), + COMMAND_RELATIONS_PEACEFULOTHER("This will have no effect while their cartel is peaceful."), + COMMAND_RELATIONS_DESCRIPTION("Set relation wish to another cartel"), + COMMAND_RELATIONS_EXCEEDS_ME("Failed to set relation wish. You can only have %1$s %2$s."), + COMMAND_RELATIONS_EXCEEDS_THEY("Failed to set relation wish. They can only have %1$s %2$s."), + + COMMAND_RELATIONS_PROPOSAL_1("%1$s wishes to be your %2$s"), + COMMAND_RELATIONS_PROPOSAL_2("Type /%1$s %2$s %3$s to accept."), + COMMAND_RELATIONS_PROPOSAL_SENT("%1$s were informed that you wish to be %2$s"), + + COMMAND_RELOAD_TIME("Reloaded all configuration files from disk, took %1$d ms."), + COMMAND_RELOAD_DESCRIPTION("Reload data file(s) from disk"), + + COMMAND_SAFEUNCLAIMALL_DESCRIPTION("Unclaim all safezone land"), + COMMAND_SAFEUNCLAIMALL_UNCLAIMED("You unclaimed ALL safe zone land."), + COMMAND_SAFEUNCLAIMALL_UNCLAIMEDLOG("%1$s unclaimed all safe zones."), + + COMMAND_SAVEALL_SUCCESS("Cartels saved to disk!"), + COMMAND_SAVEALL_DESCRIPTION("Save all data to disk"), + + COMMAND_SCOREBOARD_DESCRIPTION("Scoreboardy things"), + + COMMAND_SETFWARP_NOTCLAIMED("You can only set warps in your cartel territory."), + COMMAND_SETFWARP_LIMIT("Your Cartel already has the max amount of warps set (%1$d)."), + COMMAND_SETFWARP_SET("Set warp %1$s to your location."), + COMMAND_SETFWARP_TOSET("to set warp"), + COMMAND_SETFWARP_FORSET("for setting warp"), + COMMAND_SETFWARP_DESCRIPTION("Set a cartel warp"), + + COMMAND_SETHOME_DISABLED("Sorry, Cartel homes are disabled on this server."), + COMMAND_SETHOME_NOTCLAIMED("Sorry, your cartel home can only be set inside your own claimed territory."), + COMMAND_SETHOME_TOSET("to set the cartel home"), + COMMAND_SETHOME_FORSET("for setting the cartel home"), + COMMAND_SETHOME_SET("%1$s set the home for your cartel. You can now use:"), + COMMAND_SETHOME_SETOTHER("You have set the home for the %1$s cartel."), + COMMAND_SETHOME_DESCRIPTION("Set the cartel home"), + + COMMAND_SETMAXVAULTS_DESCRIPTION("Set max vaults for a Cartel."), + COMMAND_SETMAXVAULTS_SUCCESS("&aSet max vaults for &e%s &ato &b%d"), + + COMMAND_VAULT_DESCRIPTION("/c vault to open one of your Cartel's vaults."), + COMMAND_VAULT_TOOHIGH("&cYou tried to open vault %d but your Cartel only has %d vaults."), + + COMMAND_SHOW_NOFACTION_SELF("You are not in a cartel"), + COMMAND_SHOW_NOFACTION_OTHER("That's not a cartel"), + COMMAND_SHOW_TOSHOW("to show cartel information"), + COMMAND_SHOW_FORSHOW("for showing cartel information"), + COMMAND_SHOW_DESCRIPTION("Description: %1$s"), + COMMAND_SHOW_PEACEFUL("This cartel is Peaceful"), + COMMAND_SHOW_PERMANENT("This cartel is permanent, remaining even with no members."), + COMMAND_SHOW_JOINING("Joining: %1$s "), + COMMAND_SHOW_INVITATION("invitation is required"), + COMMAND_SHOW_UNINVITED("no invitation is needed"), + COMMAND_SHOW_NOHOME("n/a"), + COMMAND_SHOW_POWER("Land / Power / Maxpower: %1$d/%2$d/%3$d %4$s."), + COMMAND_SHOW_BONUS(" (bonus: "), + COMMAND_SHOW_PENALTY(" (penalty: "), + COMMAND_SHOW_DEPRECIATED("(%1$s depreciated)"), //This is spelled correctly. + COMMAND_SHOW_LANDVALUE("Total land value: %1$s %2$s"), + COMMAND_SHOW_BANKCONTAINS("Bank contains: %1$s"), + COMMAND_SHOW_ALLIES("Allies: "), + COMMAND_SHOW_ENEMIES("Enemies: "), + COMMAND_SHOW_MEMBERSONLINE("Members online: "), + COMMAND_SHOW_MEMBERSOFFLINE("Members offline: "), + COMMAND_SHOW_COMMANDDESCRIPTION("Show cartel information"), + COMMAND_SHOW_DEATHS_TIL_RAIDABLE("DTR: %1$d"), + COMMAND_SHOW_EXEMPT("This cartel is exempt and cannot be seen."), + + COMMAND_SHOWINVITES_PENDING("Players with pending invites: "), + COMMAND_SHOWINVITES_CLICKTOREVOKE("Click to revoke invite for %1$s"), + COMMAND_SHOWINVITES_DESCRIPTION("Show pending cartel invites"), + + COMMAND_STATUS_FORMAT("%1$s Power: %2$s Last Seen: %3$s"), + COMMAND_STATUS_ONLINE("Online"), + COMMAND_STATUS_AGOSUFFIX(" ago."), + COMMAND_STATUS_DESCRIPTION("Show the status of a player"), + + COMMAND_STUCK_TIMEFORMAT("m 'minutes', s 'seconds.'"), + COMMAND_STUCK_CANCELLED("Teleport cancelled because you were damaged"), + COMMAND_STUCK_OUTSIDE("Teleport cancelled because you left %1$d block radius"), + COMMAND_STUCK_EXISTS("You are already teleporting, you must wait %1$s"), + COMMAND_STUCK_START("Teleport will commence in %s. Don't take or deal damage. "), + COMMAND_STUCK_TELEPORT("Teleported safely to %1$d, %2$d, %3$d."), + COMMAND_STUCK_TOSTUCK("to safely teleport %1$s out"), + COMMAND_STUCK_FORSTUCK("for %1$s initiating a safe teleport out"), + COMMAND_STUCK_DESCRIPTION("Safely teleports you out of enemy cartel"), + + COMMAND_TAG_TAKEN("That tag is already taken"), + COMMAND_TAG_TOCHANGE("to change the cartel tag"), + COMMAND_TAG_FORCHANGE("for changing the cartel tag"), + COMMAND_TAG_FACTION("%1$s changed your cartel tag to %2$s"), + COMMAND_TAG_CHANGED("The cartel %1$s changed their name to %2$s."), + COMMAND_TAG_DESCRIPTION("Change the cartel tag"), + + COMMAND_TITLE_TOCHANGE("to change a players title"), + COMMAND_TITLE_FORCHANGE("for changing a players title"), + COMMAND_TITLE_CHANGED("%1$s changed a title: %2$s"), + COMMAND_TITLE_DESCRIPTION("Set or remove a players title"), + + COMMAND_TOGGLEALLIANCECHAT_DESCRIPTION("Toggles whether or not you will see alliance chat"), + COMMAND_TOGGLEALLIANCECHAT_IGNORE("Alliance chat is now ignored"), + COMMAND_TOGGLEALLIANCECHAT_UNIGNORE("Alliance chat is no longer ignored"), + + COMMAND_TOGGLESB_DISABLED("You can't toggle scoreboards while they are disabled."), + + COMMAND_TOP_DESCRIPTION("Sort Cartels to see the top of some criteria."), + COMMAND_TOP_TOP("Top Cartels by %s. Page %d/%d"), + COMMAND_TOP_LINE("%d. &6%s: &c%s"), // Rank. Cartel: Value + COMMAND_TOP_INVALID("Could not sort by %s. Try balance, online, members, power or land."), + + COMMAND_UNCLAIM_SAFEZONE_SUCCESS("Safe zone was unclaimed."), + COMMAND_UNCLAIM_SAFEZONE_NOPERM("This is a safe zone. You lack permissions to unclaim."), + COMMAND_UNCLAIM_WARZONE_SUCCESS("War zone was unclaimed."), + COMMAND_UNCLAIM_WARZONE_NOPERM("This is a war zone. You lack permissions to unclaim."), + COMMAND_UNCLAIM_UNCLAIMED("%1$s unclaimed some of your land."), + COMMAND_UNCLAIM_UNCLAIMS("You unclaimed this land."), + COMMAND_UNCLAIM_LOG("%1$s unclaimed land at (%2$s) from the cartel: %3$s"), + COMMAND_UNCLAIM_WRONGFACTION("You don't own this land."), + COMMAND_UNCLAIM_TOUNCLAIM("to unclaim this land"), + COMMAND_UNCLAIM_FORUNCLAIM("for unclaiming this land"), + COMMAND_UNCLAIM_FACTIONUNCLAIMED("%1$s unclaimed some land."), + COMMAND_UNCLAIM_DESCRIPTION("Unclaim the land where you are standing"), + + COMMAND_UNCLAIMALL_TOUNCLAIM("to unclaim all cartel land"), + COMMAND_UNCLAIMALL_FORUNCLAIM("for unclaiming all cartel land"), + COMMAND_UNCLAIMALL_UNCLAIMED("%1$s unclaimed ALL of your cartel's land."), + COMMAND_UNCLAIMALL_LOG("%1$s unclaimed everything for the cartel: %2$s"), + COMMAND_UNCLAIMALL_DESCRIPTION("Unclaim all of your cartels land"), + + COMMAND_VERSION_VERSION("You are running %1$s"), + COMMAND_VERSION_DESCRIPTION("Show plugin and translation version information"), + + COMMAND_WARUNCLAIMALL_DESCRIPTION("Unclaim all warzone land"), + COMMAND_WARUNCLAIMALL_SUCCESS("You unclaimed ALL war zone land."), + COMMAND_WARUNCLAIMALL_LOG("%1$s unclaimed all war zones."), + + /** + * Leaving - This is accessed through a command, and so it MAY need a COMMAND_* slug :s + */ + LEAVE_PASSADMIN("You must give the boss role to someone else first."), + LEAVE_NEGATIVEPOWER("You cannot leave until your power is positive."), + LEAVE_TOLEAVE("to leave your cartel."), + LEAVE_FORLEAVE("for leaving your cartel."), + LEAVE_LEFT("%s left cartel %s."), + LEAVE_DISBANDED("%s was disbanded."), + LEAVE_DISBANDEDLOG("The cartel %s (%s) was disbanded due to the last player (%s) leaving."), + LEAVE_DESCRIPTION("Leave your cartel"), + + /** + * Claiming - Same as above basically. No COMMAND_* because it's not in a command class, but... + */ + CLAIM_PROTECTED("This land is protected"), + CLAIM_DISABLED("Sorry, this world has land claiming disabled."), + CLAIM_CANTCLAIM("You can't claim land for %s."), + CLAIM_ALREADYOWN("%s already own this land."), + CLAIM_MUSTBE("You must be %s to claim land."), + CLAIM_MEMBERS("Cartels must have at least %s members to claim land."), + CLAIM_SAFEZONE("You can not claim a Safe Zone."), + CLAIM_WARZONE("You can not claim a War Zone."), + CLAIM_POWER("You can't claim more land! You need more power!"), + CLAIM_LIMIT("Limit reached. You can't claim more land!"), + CLAIM_ALLY("You can't claim the land of your allies."), + CLAIM_CONTIGIOUS("You can only claim additional land which is connected to your first claim or controlled by another cartel!"), + CLAIM_FACTIONCONTIGUOUS("You can only claim additional land which is connected to your first claim!"), + CLAIM_PEACEFUL("%s owns this land. Your cartel is peaceful, so you cannot claim land from other cartels."), + CLAIM_PEACEFULTARGET("%s owns this land, and is a peaceful cartel. You cannot claim land from them."), + CLAIM_THISISSPARTA("%s owns this land and is strong enough to keep it."), + CLAIM_BORDER("You must start claiming land at the border of the territory."), + CLAIM_TOCLAIM("to claim this land"), + CLAIM_FORCLAIM("for claiming this land"), + CLAIM_TOOVERCLAIM("to overclaim this land"), + CLAIM_FOROVERCLAIM("for over claiming this land"), + CLAIM_CLAIMED("%s claimed land for %s from %s."), + CLAIM_CLAIMEDLOG("%s claimed land at (%s) for the cartel: %s"), + CLAIM_OVERCLAIM_DISABLED("Over claiming is disabled on this server."), + CLAIM_TOOCLOSETOOTHERFACTION("Your claim is too close to another Cartel. Buffer required is %d"), + CLAIM_OUTSIDEWORLDBORDER("Your claim is outside the border."), + CLAIM_OUTSIDEBORDERBUFFER("Your claim is outside the border. %d chunks away world edge required."), + /** + * More generic, or less easily categorisable translations, which may apply to more than one class + */ + GENERIC_YOU("you"), + GENERIC_YOURFACTION("your cartel"), + GENERIC_NOPERMISSION("You don't have permission to %1$s."), + GENERIC_DOTHAT("do that"), //Ugh nuke this from high orbit + GENERIC_NOPLAYERMATCH("No player match found for \"

%1$s\"."), + GENERIC_NOPLAYERFOUND("No player \"

%1$s\" could not be found."), + GENERIC_ARGS_TOOFEW("Too few arguments. Use like this:"), + GENERIC_ARGS_TOOMANY("Strange argument \"

%1$s\". Use the command like this:"), + GENERIC_DEFAULTDESCRIPTION("Default cartel description :("), + GENERIC_OWNERS("Owner(s): %1$s"), + GENERIC_PUBLICLAND("Public cartel land."), + GENERIC_FACTIONLESS("cartelless"), + GENERIC_SERVERADMIN("A server admin"), + GENERIC_DISABLED("disabled"), + GENERIC_ENABLED("enabled"), + GENERIC_INFINITY("∞"), + GENERIC_CONSOLEONLY("This command cannot be run as a player."), + GENERIC_PLAYERONLY("This command can only be used by ingame players."), + GENERIC_ASKYOURLEADER(" Ask your boss to:"), + GENERIC_YOUSHOULD("You should:"), + GENERIC_YOUMAYWANT("You may want to: "), + GENERIC_TRANSLATION_VERSION("Translation: %1$s(%2$s,%3$s) State: %4$s"), + GENERIC_TRANSLATION_CONTRIBUTORS("Translation contributors: %1$s"), + GENERIC_TRANSLATION_RESPONSIBLE("Responsible for translation: %1$s"), + GENERIC_FACTIONTAG_TOOSHORT("The cartel tag can't be shorter than %1$s chars."), + GENERIC_FACTIONTAG_TOOLONG("The cartel tag can't be longer than %s chars."), + GENERIC_FACTIONTAG_ALPHANUMERIC("Cartel tag must be alphanumeric. \"%s\" is not allowed."), + GENERIC_PLACEHOLDER(""), + + /** + * ASCII compass (for chat map) + */ + COMPASS_SHORT_NORTH("N"), + COMPASS_SHORT_EAST("E"), + COMPASS_SHORT_SOUTH("S"), + COMPASS_SHORT_WEST("W"), + + /** + * Chat modes + */ + CHAT_FACTION("cartel chat"), + CHAT_ALLIANCE("alliance chat"), + CHAT_TRUCE("truce chat"), + CHAT_PUBLIC("public chat"), + + /** + * Economy stuff + */ + + ECON_OFF("no %s"), // no balance, no value, no refund, etc + + /** + * Relations + */ + RELATION_MEMBER_SINGULAR("member"), + RELATION_MEMBER_PLURAL("members"), + RELATION_ALLY_SINGULAR("ally"), + RELATION_ALLY_PLURAL("allies"), + RELATION_TRUCE_SINGULAR("truce"), + RELATION_TRUCE_PLURAL("truces"), + RELATION_NEUTRAL_SINGULAR("neutral"), + RELATION_NEUTRAL_PLURAL("neutrals"), + RELATION_ENEMY_SINGULAR("enemy"), + RELATION_ENEMY_PLURAL("enemies"), + + /** + * Roles + */ + ROLE_ADMIN("boss"), + ROLE_MODERATOR("underbos"), + ROLE_NORMAL("goon"), + + /** + * Region types. + */ + REGION_SAFEZONE("safezone"), + REGION_WARZONE("warzone"), + REGION_WILDERNESS("wilderness"), + + REGION_PEACEFUL("peaceful territory"), + /** + * In the player and entity listeners + */ + PLAYER_CANTHURT("You may not harm other players in %s"), + PLAYER_SAFEAUTO("This land is now a safe zone."), + PLAYER_WARAUTO("This land is now a war zone."), + PLAYER_OUCH("Ouch, that is starting to hurt. You should give it a rest."), + PLAYER_USE_WILDERNESS("You can't use %s in the wilderness."), + PLAYER_USE_SAFEZONE("You can't use %s in a safe zone."), + PLAYER_USE_WARZONE("You can't use %s in a war zone."), + PLAYER_USE_TERRITORY("You can't %s in the territory of %s."), + PLAYER_USE_OWNED("You can't use %s in this territory, it is owned by: %s."), + PLAYER_COMMAND_WARZONE("You can't use the command '%s' in warzone."), + PLAYER_COMMAND_NEUTRAL("You can't use the command '%s' in neutral territory."), + PLAYER_COMMAND_ENEMY("You can't use the command '%s' in enemy territory."), + PLAYER_COMMAND_PERMANENT("You can't use the command '%s' because you are in a permanent cartel."), + PLAYER_COMMAND_ALLY("You can't use the command '%s' in ally territory."), + PLAYER_COMMAND_WILDERNESS("You can't use the command '%s' in the wilderness."), + + PLAYER_POWER_NOLOSS_PEACEFUL("You didn't lose any power since you are in a peaceful cartel."), + PLAYER_POWER_NOLOSS_WORLD("You didn't lose any power due to the world you died in."), + PLAYER_POWER_NOLOSS_WILDERNESS("You didn't lose any power since you were in the wilderness."), + PLAYER_POWER_NOLOSS_WARZONE("You didn't lose any power since you were in a war zone."), + PLAYER_POWER_LOSS_WARZONE("The world you are in has power loss normally disabled, but you still lost power since you were in a war zone.\nYour power is now %d / %d"), + PLAYER_POWER_NOW("Your power is now %d / %d"), + + PLAYER_PVP_LOGIN("You can't hurt other players for %d seconds after logging in."), + PLAYER_PVP_REQUIREFACTION("You can't hurt other players until you join a cartel."), + PLAYER_PVP_FACTIONLESS("You can't hurt players who are not currently in a cartel."), + PLAYER_PVP_PEACEFUL("Peaceful players cannot participate in combat."), + PLAYER_PVP_NEUTRAL("You can't hurt neutral cartels. Declare them as an enemy."), + PLAYER_PVP_CANTHURT("You can't hurt %s."), + + PLAYER_PVP_NEUTRALFAIL("You can't hurt %s in their own territory unless you declare them as an enemy."), + PLAYER_PVP_TRIED("%s tried to hurt you."), + + /** + * Strings lying around in other bits of the plugins + */ + NOPAGES("Sorry. No Pages available."), + INVALIDPAGE("Invalid page. Must be between 1 and %1$d"), + + /** + * The ones here before I started messing around with this + */ + TITLE("title", "&bCartels &0|&r"), + WILDERNESS("wilderness", "&2Wilderness"), + WILDERNESS_DESCRIPTION("wilderness-description", ""), + WARZONE("warzone", "&4Warzone"), + WARZONE_DESCRIPTION("warzone-description", "Not the safest place to be."), + SAFEZONE("safezone", "&6Safezone"), + SAFEZONE_DESCRIPTION("safezone-description", "Free from pvp and monsters."), + TOGGLE_SB("toggle-sb", "You now have scoreboards set to {value}"), + FACTION_LEAVE("faction-leave", "Leaving %1$s, Entering %2$s"), + DEFAULT_PREFIX("default-prefix", "{relationcolor}[{cartel}] &r"), + FACTION_LOGIN("faction-login", "&e%1$s &9logged in."), + FACTION_LOGOUT("faction-logout", "&e%1$s &9logged out.."), + NOFACTION_PREFIX("nofactions-prefix", "&6[&a4-&6]&r"), + DATE_FORMAT("date-format", "MM/d/yy h:ma"), // 3/31/15 07:49AM + + /** + * Raidable is used in multiple places. Allow more than just true/false. + */ + RAIDABLE_TRUE("raidable-true", "true"), + RAIDABLE_FALSE("raidable-false", "false"), + /** + * Warmups + */ + WARMUPS_NOTIFY_TELEPORT("&eYou will teleport to &d%1$s &ein &d%2$d &eseconds."), + WARMUPS_ALREADY("&cYou are already warming up."), + WARMUPS_CANCELLED("&cYou have cancelled your warmup."); + + private String path; + private String def; + private static YamlConfiguration LANG; + public static SimpleDateFormat sdf; + + /** + * Lang enum constructor. + * + * @param path The string path. + * @param start The default string. + */ + TL(String path, String start) { + this.path = path; + this.def = start; + } + + /** + * Lang enum constructor. Use this when your desired path simply exchanges '_' for '.' + * + * @param start The default string. + */ + TL(String start) { + this.path = this.name().replace('_', '.'); + if (this.path.startsWith(".")) { + path = "root" + path; + } + this.def = start; + } + + /** + * Set the {@code YamlConfiguration} to use. + * + * @param config The config to set. + */ + public static void setFile(YamlConfiguration config) { + LANG = config; + sdf = new SimpleDateFormat(DATE_FORMAT.toString()); + } + + @Override + public String toString() { + return this == TITLE ? ChatColor.translateAlternateColorCodes('&', LANG.getString(this.path, def)) + " " : ChatColor.translateAlternateColorCodes('&', LANG.getString(this.path, def)); + } + + public String format(Object... args) { + return String.format(toString(), args); + } + + /** + * Get the default value of the path. + * + * @return The default value of the path. + */ + public String getDefault() { + return this.def; + } + + /** + * Get the path to the string. + * + * @return The path to the string. + */ + public String getPath() { + return this.path; + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/util/TagReplacer.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/util/TagReplacer.java new file mode 100644 index 0000000..ace0c8a --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/util/TagReplacer.java @@ -0,0 +1,280 @@ +package com.massivecraft.factions.zcore.util; + +import com.massivecraft.factions.*; +import com.massivecraft.factions.integration.Econ; +import com.massivecraft.factions.struct.Relation; +import org.apache.commons.lang.time.DurationFormatUtils; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; + +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +/** + * Link between config and in-game messages
Changes based on faction / player
Interfaces the config lists with + * {} variables to plugin + */ +public enum TagReplacer { + + /** + * Fancy variables, used by f show + */ + ALLIES_LIST(TagType.FANCY, "{allies-list}"), + ONLINE_LIST(TagType.FANCY, "{online-list}"), + ENEMIES_LIST(TagType.FANCY, "{enemies-list}"), + OFFLINE_LIST(TagType.FANCY, "{offline-list}"), + + /** + * Player variables, require a player + */ + PLAYER_GROUP(TagType.PLAYER, "{group}"), + LAST_SEEN(TagType.PLAYER, "{lastSeen}"), + PLAYER_BALANCE(TagType.PLAYER, "{balance}"), + PLAYER_POWER(TagType.PLAYER, "{player-power}"), + PLAYER_MAXPOWER(TagType.PLAYER, "{player-maxpower}"), + PLAYER_KILLS(TagType.PLAYER, "{player-kills}"), + PLAYER_DEATHS(TagType.PLAYER, "{player-deaths}"), + + /** + * Faction variables, require at least a player + */ + HOME_X(TagType.FACTION, "{x}"), + HOME_Y(TagType.FACTION, "{y}"), + HOME_Z(TagType.FACTION, "{z}"), + CHUNKS(TagType.FACTION, "{chunks}"), + WARPS(TagType.FACTION, "{warps}"), + HEADER(TagType.FACTION, "{header}"), + POWER(TagType.FACTION, "{power}"), + MAX_POWER(TagType.FACTION, "{maxPower}"), + POWER_BOOST(TagType.FACTION, "{power-boost}"), + LEADER(TagType.FACTION, "{leader}"), + JOINING(TagType.FACTION, "{joining}"), + FACTION(TagType.FACTION, "{faction}"), + PLAYER_NAME(TagType.FACTION, "{name}"), + HOME_WORLD(TagType.FACTION, "{world}"), + RAIDABLE(TagType.FACTION, "{raidable}"), + PEACEFUL(TagType.FACTION, "{peaceful}"), + PERMANENT(TagType.FACTION, "permanent"), // no braces needed + TIME_LEFT(TagType.FACTION, "{time-left}"), + LAND_VALUE(TagType.FACTION, "{land-value}"), + DESCRIPTION(TagType.FACTION, "{description}"), + CREATE_DATE(TagType.FACTION, "{create-date}"), + LAND_REFUND(TagType.FACTION, "{land-refund}"), + BANK_BALANCE(TagType.FACTION, "{faction-balance}"), + ALLIES_COUNT(TagType.FACTION, "{allies}"), + ENEMIES_COUNT(TagType.FACTION, "{enemies}"), + ONLINE_COUNT(TagType.FACTION, "{online}"), + OFFLINE_COUNT(TagType.FACTION, "{offline}"), + FACTION_SIZE(TagType.FACTION, "{members}"), + FACTION_KILLS(TagType.FACTION, "{faction-kills}"), + FACTION_DEATHS(TagType.FACTION, "{faction-deaths}"), + FACTION_STASH(TagType.FACTION, "{stash}"), + + /** + * General variables, require no faction or player + */ + MAX_WARPS(TagType.GENERAL, "{max-warps}"), + MAX_ALLIES(TagType.GENERAL, "{max-allies}"), + MAX_ENEMIES(TagType.GENERAL, "{max-enemies}"), + FACTIONLESS(TagType.GENERAL, "{factionless}"), + TOTAL_ONLINE(TagType.GENERAL, "{total-online}"); + + private TagType type; + private String tag; + + protected enum TagType { + FANCY(0), PLAYER(1), FACTION(2), GENERAL(3); + public int id; + + TagType(int id) { + this.id = id; + } + } + + TagReplacer(TagType type, String tag) { + this.type = type; + this.tag = tag; + } + + /** + * Protected access to this generic server related variable + * + * @return value for this generic server related variable
+ */ + protected String getValue() { + switch (this) { + case TOTAL_ONLINE: + return String.valueOf(Bukkit.getOnlinePlayers().size()); + case FACTIONLESS: + return String.valueOf(Factions.getInstance().getNone().getFPlayersWhereOnline(true).size()); + case MAX_ALLIES: + if (P.p.getConfig().getBoolean("max-relations.enabled", true)) { + return String.valueOf(P.p.getConfig().getInt("max-relations.ally", 10)); + } + return TL.GENERIC_INFINITY.toString(); + case MAX_ENEMIES: + if (P.p.getConfig().getBoolean("max-relations.enabled", true)) { + return String.valueOf(P.p.getConfig().getInt("max-relations.enemy", 10)); + } + return TL.GENERIC_INFINITY.toString(); + case MAX_WARPS: + return String.valueOf(P.p.getConfig().getInt("max-warps", 5)); + } + return null; + } + + /** + * Gets the value for this (as in the instance this is called from) variable! + * + * @param fac Target faction + * @param fp Target player (can be null) + * + * @return the value for this enum! + */ + protected String getValue(Faction fac, FPlayer fp) { + if (this.type == TagType.GENERAL) { + return getValue(); + } + + boolean minimal = P.p.getConfig().getBoolean("minimal-show", false); + + if (fp != null) { + switch (this) { + case HEADER: + return P.p.txt.titleize(fac.getTag(fp)); + case PLAYER_NAME: + return fp.getName(); + case FACTION: + return !fac.isWilderness() ? fac.getTag(fp) : TL.GENERIC_FACTIONLESS.toString(); + case LAST_SEEN: + String humanized = DurationFormatUtils.formatDurationWords(System.currentTimeMillis() - fp.getLastLoginTime(), true, true) + TL.COMMAND_STATUS_AGOSUFFIX; + return fp.isOnline() ? ChatColor.GREEN + TL.COMMAND_STATUS_ONLINE.toString() : (System.currentTimeMillis() - fp.getLastLoginTime() < 432000000 ? ChatColor.YELLOW + humanized : ChatColor.RED + humanized); + case PLAYER_GROUP: + return P.p.getPrimaryGroup(Bukkit.getOfflinePlayer(UUID.fromString(fp.getId()))); + case PLAYER_BALANCE: + return Econ.isSetup() ? Econ.getFriendlyBalance(fp) : TL.ECON_OFF.format("balance"); + case PLAYER_POWER: + return String.valueOf(fp.getPowerRounded()); + case PLAYER_MAXPOWER: + return String.valueOf(fp.getPowerMaxRounded()); + case PLAYER_KILLS: + return String.valueOf(fp.getKills()); + case PLAYER_DEATHS: + return String.valueOf(fp.getDeaths()); + } + } + switch (this) { + case DESCRIPTION: + return fac.getDescription(); + case FACTION: + return fac.getTag(); + case JOINING: + return (fac.getOpen() ? TL.COMMAND_SHOW_UNINVITED.toString() : TL.COMMAND_SHOW_INVITATION.toString()); + case PEACEFUL: + return fac.isPeaceful() ? Conf.colorNeutral + TL.COMMAND_SHOW_PEACEFUL.toString() : ""; + case PERMANENT: + return fac.isPermanent() ? "permanent" : "{notPermanent}"; + case CHUNKS: + return String.valueOf(fac.getLandRounded()); + case POWER: + return String.valueOf(fac.getPowerRounded()); + case MAX_POWER: + return String.valueOf(fac.getPowerMaxRounded()); + case POWER_BOOST: + double powerBoost = fac.getPowerBoost(); + return (powerBoost == 0.0) ? "" : (powerBoost > 0.0 ? TL.COMMAND_SHOW_BONUS.toString() : TL.COMMAND_SHOW_PENALTY.toString() + powerBoost + ")"); + case LEADER: + FPlayer fAdmin = fac.getFPlayerAdmin(); + return fAdmin == null ? "Server" : fAdmin.getName().substring(0, fAdmin.getName().length() > 14 ? 13 : fAdmin.getName().length()); + case WARPS: + return String.valueOf(fac.getWarps().size()); + case CREATE_DATE: + return TL.sdf.format(fac.getFoundedDate()); + case RAIDABLE: + boolean raid = P.p.getConfig().getBoolean("hcf.raidable", false) && fac.getLandRounded() >= fac.getPowerRounded(); + return raid ? TL.RAIDABLE_TRUE.toString() : TL.RAIDABLE_FALSE.toString(); + case HOME_WORLD: + return fac.hasHome() ? fac.getHome().getWorld().getName() : minimal ? null : "{ig}"; + case HOME_X: + return fac.hasHome() ? String.valueOf(fac.getHome().getBlockX()) : minimal ? null : "{ig}"; + case HOME_Y: + return fac.hasHome() ? String.valueOf(fac.getHome().getBlockY()) : minimal ? null : "{ig}"; + case HOME_Z: + return fac.hasHome() ? String.valueOf(fac.getHome().getBlockZ()) : minimal ? null : "{ig}"; + case LAND_VALUE: + return Econ.shouldBeUsed() ? Econ.moneyString(Econ.calculateTotalLandValue(fac.getLandRounded())) : minimal ? null : TL.ECON_OFF.format("value"); + case LAND_REFUND: + return Econ.shouldBeUsed() ? Econ.moneyString(Econ.calculateTotalLandRefund(fac.getLandRounded())) : minimal ? null : TL.ECON_OFF.format("refund"); + case BANK_BALANCE: + if (Econ.shouldBeUsed()) { + return Conf.bankEnabled ? Econ.moneyString(Econ.getBalance(fac.getAccountId())) : minimal ? null : TL.ECON_OFF.format("balance"); + } + return minimal ? null : TL.ECON_OFF.format("balance"); + case ALLIES_COUNT: + return String.valueOf(fac.getRelationCount(Relation.ALLY)); + case ENEMIES_COUNT: + return String.valueOf(fac.getRelationCount(Relation.ENEMY)); + case ONLINE_COUNT: + return String.valueOf(fac.getOnlinePlayers().size()); + case OFFLINE_COUNT: + return String.valueOf(fac.getFPlayers().size() - fac.getOnlinePlayers().size()); + case FACTION_SIZE: + return String.valueOf(fac.getFPlayers().size()); + case FACTION_KILLS: + return String.valueOf(fac.getKills()); + case FACTION_DEATHS: + return String.valueOf(fac.getDeaths()); + } + return null; + } + + /** + * Returns a list of all the variables we can use for this type
+ * + * @param type the type we want + * + * @return a list of all the variables with this type + */ + protected static List getByType(TagType type) { + List tagReplacers = new ArrayList(); + for (TagReplacer tagReplacer : TagReplacer.values()) { + if (type == TagType.FANCY) { + if (tagReplacer.type == TagType.FANCY) { + tagReplacers.add(tagReplacer); + } + } else if (tagReplacer.type.id >= type.id) { + tagReplacers.add(tagReplacer); + } + } + return tagReplacers; + } + + /** + * @param original raw line with variables + * @param value what to replace var in raw line with + * + * @return the string with the new value + */ + public String replace(String original, String value) { + return original.replace(tag, value); + } + + /** + * @param toSearch raw line with variables + * + * @return if the raw line contains this enums variable + */ + public boolean contains(String toSearch) { + return toSearch.contains(tag); + } + + /** + * Gets the tag associated with this enum that we should replace + * + * @return the {....} variable that is located in config + */ + public String getTag() { + return this.tag; + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/util/TagUtil.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/util/TagUtil.java new file mode 100644 index 0000000..b89165d --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/util/TagUtil.java @@ -0,0 +1,236 @@ +package com.massivecraft.factions.zcore.util; + + +import com.massivecraft.factions.FPlayer; +import com.massivecraft.factions.Faction; +import com.massivecraft.factions.Factions; +import com.massivecraft.factions.P; +import com.massivecraft.factions.util.MiscUtil; +import mkremins.fanciful.FancyMessage; +import org.bukkit.ChatColor; + +import java.util.ArrayList; +import java.util.List; + +import static com.massivecraft.factions.zcore.util.TagReplacer.TagType; + +public class TagUtil { + + private static final int ARBITRARY_LIMIT = 25000; + + /** + * Replaces all variables in a plain raw line for a faction + * + * @param faction for faction + * @param line raw line from config with variables to replace for + * + * @return clean line + */ + public static String parsePlain(Faction faction, String line) { + for (TagReplacer tagReplacer : TagReplacer.getByType(TagType.FACTION)) { + if (tagReplacer.contains(line)) { + line = tagReplacer.replace(line, tagReplacer.getValue(faction, null)); + } + } + return line; + } + + /** + * Replaces all variables in a plain raw line for a player + * + * @param fplayer for player + * @param line raw line from config with variables to replace for + * + * @return clean line + */ + public static String parsePlain(FPlayer fplayer, String line) { + for (TagReplacer tagReplacer : TagReplacer.getByType(TagType.PLAYER)) { + if (tagReplacer.contains(line)) { + String rep = tagReplacer.getValue(fplayer.getFaction(), fplayer); + if (rep == null) { + rep = ""; // this should work, but it's not a good way to handle whatever is going wrong + } + line = tagReplacer.replace(line, rep); + } + } + return line; + } + + /** + * Replaces all variables in a plain raw line for a faction, using relations from fplayer + * + * @param faction for faction + * @param fplayer from player + * @param line raw line from config with variables to replace for + * + * @return clean line + */ + public static String parsePlain(Faction faction, FPlayer fplayer, String line) { + for (TagReplacer tagReplacer : TagReplacer.getByType(TagType.PLAYER)) { + if (tagReplacer.contains(line)) { + String value = tagReplacer.getValue(faction, fplayer); + if (value != null) { + line = tagReplacer.replace(line, value); + } else { + return null; // minimal show, entire line to be ignored + } + } + } + return line; + } + + /** + * Scan a line and parse the fancy variable into a fancy list + * + * @param faction for faction (viewers faction) + * @param fme for player (viewer) + * @param line fancy message prefix + * + * @return + */ + public static List parseFancy(Faction faction, FPlayer fme, String line) { + for (TagReplacer tagReplacer : TagReplacer.getByType(TagType.FANCY)) { + if (tagReplacer.contains(line)) { + String clean = line.replace(tagReplacer.getTag(), ""); // remove tag + return getFancy(faction, fme, tagReplacer, clean); + } + } + return null; + } + + /** + * Checks if a line has fancy variables + * + * @param line raw line from config with variables + * + * @return if the line has fancy variables + */ + public static boolean hasFancy(String line) { + for (TagReplacer tagReplacer : TagReplacer.getByType(TagType.FANCY)) { + if (tagReplacer.contains(line)) { + return true; + } + } + return false; + } + + /** + * Lets get fancy. + * + * @param target Faction to get relate from + * @param fme Player to relate to + * @param prefix First part of the fancy message + * + * @return list of fancy messages to send + */ + protected static List getFancy(Faction target, FPlayer fme, TagReplacer type, String prefix) { + List fancyMessages = new ArrayList(); + boolean minimal = P.p.getConfig().getBoolean("minimal-show", false); + + switch (type) { + case ALLIES_LIST: + FancyMessage currentAllies = P.p.txt.parseFancy(prefix); + boolean firstAlly = true; + for (Faction otherFaction : Factions.getInstance().getAllFactions()) { + if (otherFaction == target) { + continue; + } + String s = otherFaction.getTag(fme); + if (otherFaction.getRelationTo(target).isAlly()) { + currentAllies.then(firstAlly ? s : ", " + s); + currentAllies.tooltip(tipFaction(otherFaction)).color(fme.getColorTo(otherFaction)); + firstAlly = false; + if (currentAllies.toJSONString().length() > ARBITRARY_LIMIT) { + fancyMessages.add(currentAllies); + currentAllies = new FancyMessage(""); + } + } + } + fancyMessages.add(currentAllies); + return firstAlly && minimal ? null : fancyMessages; // we must return here and not outside the switch + case ENEMIES_LIST: + FancyMessage currentEnemies = P.p.txt.parseFancy(prefix); + boolean firstEnemy = true; + for (Faction otherFaction : Factions.getInstance().getAllFactions()) { + if (otherFaction == target) { + continue; + } + String s = otherFaction.getTag(fme); + if (otherFaction.getRelationTo(target).isEnemy()) { + currentEnemies.then(firstEnemy ? s : ", " + s); + currentEnemies.tooltip(tipFaction(otherFaction)).color(fme.getColorTo(otherFaction)); + firstEnemy = false; + if (currentEnemies.toJSONString().length() > ARBITRARY_LIMIT) { + fancyMessages.add(currentEnemies); + currentEnemies = new FancyMessage(""); + } + } + } + fancyMessages.add(currentEnemies); + return firstEnemy && minimal ? null : fancyMessages; // we must return here and not outside the switch + case ONLINE_LIST: + FancyMessage currentOnline = P.p.txt.parseFancy(prefix); + boolean firstOnline = true; + for (FPlayer p : MiscUtil.rankOrder(target.getFPlayersWhereOnline(true))) { + String name = p.getNameAndTitle(); + currentOnline.then(firstOnline ? name : ", " + name); + currentOnline.tooltip(tipPlayer(p)).color(fme.getColorTo(p)); + firstOnline = false; + if (currentOnline.toJSONString().length() > ARBITRARY_LIMIT) { + fancyMessages.add(currentOnline); + currentOnline = new FancyMessage(""); + } + } + fancyMessages.add(currentOnline); + return firstOnline && minimal ? null : fancyMessages; // we must return here and not outside the switch + case OFFLINE_LIST: + FancyMessage currentOffline = P.p.txt.parseFancy(prefix); + boolean firstOffline = true; + for (FPlayer p : MiscUtil.rankOrder(target.getFPlayers())) { + String name = p.getNameAndTitle(); + if (!p.isOnline()) { + currentOffline.then(firstOffline ? name : ", " + name); + currentOffline.tooltip(tipPlayer(p)).color(fme.getColorTo(p)); + firstOffline = false; + if (currentOffline.toJSONString().length() > ARBITRARY_LIMIT) { + fancyMessages.add(currentOffline); + currentOffline = new FancyMessage(""); + } + } + } + fancyMessages.add(currentOffline); + return firstOffline && minimal ? null : fancyMessages; // we must return here and not outside the switch + } + return null; + } + + /** + * Parses tooltip variables from config
Supports variables for factions only (type 2) + * + * @param faction faction to tooltip for + * + * @return list of tooltips for a fancy message + */ + private static List tipFaction(Faction faction) { + List lines = new ArrayList(); + for (String line : P.p.getConfig().getStringList("tooltips.list")) { + lines.add(ChatColor.translateAlternateColorCodes('&', TagUtil.parsePlain(faction, line))); + } + return lines; + } + + /** + * Parses tooltip variables from config
Supports variables for players and factions (types 1 and 2) + * + * @param fplayer player to tooltip for + * + * @return list of tooltips for a fancy message + */ + private static List tipPlayer(FPlayer fplayer) { + List lines = new ArrayList(); + for (String line : P.p.getConfig().getStringList("tooltips.show")) { + lines.add(ChatColor.translateAlternateColorCodes('&', TagUtil.parsePlain(fplayer, line))); + } + return lines; + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/util/TextUtil.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/util/TextUtil.java new file mode 100644 index 0000000..577ebcc --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/util/TextUtil.java @@ -0,0 +1,242 @@ +package com.massivecraft.factions.zcore.util; + +import mkremins.fanciful.FancyMessage; +import org.bukkit.ChatColor; +import org.bukkit.Material; + +import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class TextUtil { + + public Map tags; + + public TextUtil() { + this.tags = new HashMap(); + } + + // -------------------------------------------- // + // Top-level parsing functions. + // -------------------------------------------- // + + public String parse(String str, Object... args) { + return String.format(this.parse(str), args); + } + + public String parse(String str) { + return this.parseTags(parseColor(str)); + } + + // -------------------------------------------- // + // CoreTag parsing + // -------------------------------------------- // + + public String parseTags(String str) { + return replaceTags(str, this.tags); + } + + public static final transient Pattern patternTag = Pattern.compile("<([a-zA-Z0-9_]*)>"); + + public static String replaceTags(String str, Map tags) { + StringBuffer ret = new StringBuffer(); + Matcher matcher = patternTag.matcher(str); + while (matcher.find()) { + String tag = matcher.group(1); + String repl = tags.get(tag); + if (repl == null) { + matcher.appendReplacement(ret, "<" + tag + ">"); + } else { + matcher.appendReplacement(ret, repl); + } + } + matcher.appendTail(ret); + return ret.toString(); + } + + // -------------------------------------------- // + // Fancy parsing + // -------------------------------------------- // + + public FancyMessage parseFancy(String prefix) { + return toFancy(parse(prefix)); + } + + public static FancyMessage toFancy(String first) { + String text = ""; + FancyMessage message = new FancyMessage(text); + ChatColor color = null; + char[] chars = first.toCharArray(); + + for (int i = 0; i < chars.length; i++) { + if (chars[i] == '§') { + if (color != null) { + if (color.isColor()) { + message.then(text).color(color); + } else { + message.then(text).style(color); + } + text = ""; + color = ChatColor.getByChar(chars[i + 1]); + } else { + color = ChatColor.getByChar(chars[i + 1]); + } + i++; // skip color char + } else { + text += chars[i]; + } + } + if (text.length() > 0) { + if (color != null) { + if (color.isColor()) { + message.then(text).color(color); + } else { + message.then(text).style(color); + } + } else { + message.text(text); + } + } + return message; + } + + // -------------------------------------------- // + // Color parsing + // -------------------------------------------- // + + public static String parseColor(String string) { + string = parseColorAmp(string); + string = parseColorAcc(string); + string = parseColorTags(string); + return ChatColor.translateAlternateColorCodes('&', string); + } + + public static String parseColorAmp(String string) { + string = string.replaceAll("(§([a-z0-9]))", "\u00A7$2"); + string = string.replaceAll("(&([a-z0-9]))", "\u00A7$2"); + string = string.replace("&&", "&"); + return string; + } + + public static String parseColorAcc(String string) { + return string.replace("`e", "").replace("`r", ChatColor.RED.toString()).replace("`R", ChatColor.DARK_RED.toString()).replace("`y", ChatColor.YELLOW.toString()).replace("`Y", ChatColor.GOLD.toString()).replace("`g", ChatColor.GREEN.toString()).replace("`G", ChatColor.DARK_GREEN.toString()).replace("`a", ChatColor.AQUA.toString()).replace("`A", ChatColor.DARK_AQUA.toString()).replace("`b", ChatColor.BLUE.toString()).replace("`B", ChatColor.DARK_BLUE.toString()).replace("`p", ChatColor.LIGHT_PURPLE.toString()).replace("`P", ChatColor.DARK_PURPLE.toString()).replace("`k", ChatColor.BLACK.toString()).replace("`s", ChatColor.GRAY.toString()).replace("`S", ChatColor.DARK_GRAY.toString()).replace("`w", ChatColor.WHITE.toString()); + } + + public static String parseColorTags(String string) { + return string.replace("", "").replace("", "\u00A70").replace("", "\u00A71").replace("", "\u00A72").replace("", "\u00A73").replace("", "\u00A74").replace("", "\u00A75").replace("", "\u00A76").replace("", "\u00A77").replace("", "\u00A78").replace("", "\u00A79").replace("", "\u00A7a").replace("", "\u00A7b").replace("", "\u00A7c").replace("", "\u00A7d").replace("", "\u00A7e").replace("", "\u00A7f"); + } + + // -------------------------------------------- // + // Standard utils like UCFirst, implode and repeat. + // -------------------------------------------- // + + public static String upperCaseFirst(String string) { + return string.substring(0, 1).toUpperCase() + string.substring(1); + } + + public static String implode(List list, String glue) { + StringBuilder ret = new StringBuilder(); + for (int i = 0; i < list.size(); i++) { + if (i != 0) { + ret.append(glue); + } + ret.append(list.get(i)); + } + return ret.toString(); + } + + public static String repeat(String s, int times) { + if (times <= 0) { + return ""; + } else { + return s + repeat(s, times - 1); + } + } + + // -------------------------------------------- // + // Material name tools + // -------------------------------------------- // + + public static String getMaterialName(Material material) { + return material.toString().replace('_', ' ').toLowerCase(); + } + + public static String getMaterialName(int materialId) { + return getMaterialName(Material.getMaterial(materialId)); + } + + // -------------------------------------------- // + // Paging and chrome-tools like titleize + // -------------------------------------------- // + + private final static String titleizeLine = repeat("_", 52); + private final static int titleizeBalance = -1; + + public String titleize(String str) { + String center = ".[ " + parseTags("") + str + parseTags("
") + " ]."; + int centerlen = ChatColor.stripColor(center).length(); + int pivot = titleizeLine.length() / 2; + int eatLeft = (centerlen / 2) - titleizeBalance; + int eatRight = (centerlen - eatLeft) + titleizeBalance; + + if (eatLeft < pivot) { + return parseTags("") + titleizeLine.substring(0, pivot - eatLeft) + center + titleizeLine.substring(pivot + eatRight); + } else { + return parseTags("") + center; + } + } + + public ArrayList getPage(List lines, int pageHumanBased, String title) { + ArrayList ret = new ArrayList(); + int pageZeroBased = pageHumanBased - 1; + int pageheight = 9; + int pagecount = (lines.size() / pageheight) + 1; + + ret.add(this.titleize(title + " " + pageHumanBased + "/" + pagecount)); + + if (pagecount == 0) { + ret.add(this.parseTags(TL.NOPAGES.toString())); + return ret; + } else if (pageZeroBased < 0 || pageHumanBased > pagecount) { + ret.add(this.parseTags(TL.INVALIDPAGE.format(pagecount))); + return ret; + } + + int from = pageZeroBased * pageheight; + int to = from + pageheight; + if (to > lines.size()) { + to = lines.size(); + } + + ret.addAll(lines.subList(from, to)); + + return ret; + } + + public static String getBestStartWithCI(Collection candidates, String start) { + String ret = null; + int best = 0; + + start = start.toLowerCase(); + int minlength = start.length(); + for (String candidate : candidates) { + if (candidate.length() < minlength) { + continue; + } + if (!candidate.toLowerCase().startsWith(start)) { + continue; + } + + // The closer to zero the better + int lendiff = candidate.length() - minlength; + if (lendiff == 0) { + return candidate; + } + if (lendiff < best || best == 0) { + best = lendiff; + ret = candidate; + } + } + return ret; + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/util/UUIDFetcher.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/util/UUIDFetcher.java new file mode 100644 index 0000000..e41da56 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/util/UUIDFetcher.java @@ -0,0 +1,100 @@ +package com.massivecraft.factions.zcore.util; + +import com.google.common.collect.ImmutableList; +import org.json.simple.JSONArray; +import org.json.simple.JSONObject; +import org.json.simple.parser.JSONParser; + +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.net.HttpURLConnection; +import java.net.URL; +import java.nio.ByteBuffer; +import java.util.*; +import java.util.concurrent.Callable; + +/** + * @author evilmidget38 + */ + +public class UUIDFetcher implements Callable> { + private static final double PROFILES_PER_REQUEST = 100; + private static final String PROFILE_URL = "https://api.mojang.com/profiles/minecraft"; + private final JSONParser jsonParser = new JSONParser(); + private final List names; + private final boolean rateLimiting; + + public UUIDFetcher(List names, boolean rateLimiting) { + this.names = ImmutableList.copyOf(names); + this.rateLimiting = rateLimiting; + } + + public UUIDFetcher(List names) { + this(names, true); + } + + public Map call() throws Exception { + Map uuidMap = new HashMap(); + int requests = (int) Math.ceil(names.size() / PROFILES_PER_REQUEST); + for (int i = 0; i < requests; i++) { + HttpURLConnection connection = createConnection(); + String body = JSONArray.toJSONString(names.subList(i * 100, Math.min((i + 1) * 100, names.size()))); + writeBody(connection, body); + JSONArray array = (JSONArray) jsonParser.parse(new InputStreamReader(connection.getInputStream())); + for (Object profile : array) { + JSONObject jsonProfile = (JSONObject) profile; + String id = (String) jsonProfile.get("id"); + String name = (String) jsonProfile.get("name"); + UUID uuid = UUIDFetcher.getUUID(id); + uuidMap.put(name, uuid); + } + if (rateLimiting && i != requests - 1) { + Thread.sleep(100L); + } + } + return uuidMap; + } + + private static void writeBody(HttpURLConnection connection, String body) throws Exception { + OutputStream stream = connection.getOutputStream(); + stream.write(body.getBytes()); + stream.flush(); + stream.close(); + } + + private static HttpURLConnection createConnection() throws Exception { + URL url = new URL(PROFILE_URL); + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + connection.setRequestMethod("POST"); + connection.setRequestProperty("Content-Type", "application/json"); + connection.setUseCaches(false); + connection.setDoInput(true); + connection.setDoOutput(true); + return connection; + } + + private static UUID getUUID(String id) { + return UUID.fromString(id.substring(0, 8) + "-" + id.substring(8, 12) + "-" + id.substring(12, 16) + "-" + id.substring(16, 20) + "-" + id.substring(20, 32)); + } + + public static byte[] toBytes(UUID uuid) { + ByteBuffer byteBuffer = ByteBuffer.wrap(new byte[16]); + byteBuffer.putLong(uuid.getMostSignificantBits()); + byteBuffer.putLong(uuid.getLeastSignificantBits()); + return byteBuffer.array(); + } + + public static UUID fromBytes(byte[] array) { + if (array.length != 16) { + throw new IllegalArgumentException("Illegal byte array length: " + array.length); + } + ByteBuffer byteBuffer = ByteBuffer.wrap(array); + long mostSignificant = byteBuffer.getLong(); + long leastSignificant = byteBuffer.getLong(); + return new UUID(mostSignificant, leastSignificant); + } + + public static UUID getUUIDOf(String name) throws Exception { + return new UUIDFetcher(Arrays.asList(name)).call().get(name); + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/resources/config.yml b/cartels-master@e4f5c2ecec5/src/main/resources/config.yml new file mode 100644 index 0000000..835eddd --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/resources/config.yml @@ -0,0 +1,355 @@ +# FactionsUUID by drtshock +# Report issues https://github.com/drtshock/Factions/issues?state=open +# Live support http://webchat.esper.net/?channels=factions&prompt=1 + +# Made with love <3 + +# Debug +# Turn this on if you are having issues with something and working on resolving them. +# This will spam your console with information that is useful if you know how to read the source. +# It's suggested that you only turn this on at the direction of a developer. +debug: false + +# Prevent find factions exploit +# This will help limit how many times a player can be sent a map of factions. +# Set this to the cooldown you want, in miliseconds, for a map to be shown to a player. +# If you want to log when a player violates this (only happens on chunk enter so it shouldn't be too spammy), +# set log to true and it will be logged to console as "player tried to show a faction map too soon and triggered exploit blocker." +findfactionsexploit: + cooldown: 2000 # in miliseconds. 2000 = 2 seconds. + log: false + +### Hard Core Settings ### +# Many of the features that are / are to come in this section have been requested by +# people in relation to HCF servers. All settings are set to the normal Factions +# behavior by default. + +# Default Relation allows you to change the default relation for Factions. +# Example usage would be so people can't leave then make a new Faction while Raiding +# in order to be able to execute commands if the default relation is neutral. +# This has always been neutral. +default-relation: "neutral" + +# Portal Creation +# Do you want to limit portal creation? +portals: + limit: false # will disable the below check if set to false + + # What should the minimum relation be to create a portal in territory? + # Goes in the order of: ENEMY, NEUTRAL, ALLY, MEMBER. + # Minimum relation allows that and all listed to the right to create portals. + # Example: put ALLY to allow ALLY and MEMBER to be able to create portals. + minimum-relation: MEMBER # If typed incorrectly, defaults to NEUTRAL. + +### Hard Core Settings ### + +# Warps +# What should be the max amount of warps that a Factoin can set? +max-warps: 5 + +# This is the cost section for warps. +# It will charge them each time the command would be successful. (won't charge on erroneous /f warp attempts). +# You can use decimal places here. +# If enabled is set to false, it will ignore the values. +warp-cost: + enabled: false + setwarp: 5 + delwarp: 5 + warp: 5 + +# Pistons +# Should we disable pistons in Faction territory? This will prevent people from doing something like: +# http://i.gyazo.com/6a1a31222e58a5d60ff341c13f6a8404.gif +disable-pistons-in-territory: false + +# ToolTips +# This section is to configure tooltips for things like /f list +tooltips: + + # List + # This shows up when someone does /f list for the top factions. + # It will not sure up for factionless of course, just actual factions. + # You can use color codes here. + list: + - "&6Boss: &f{leader}" + - "&6Claimed: &f{chunks}" + - "&6Raidable: &f{raidable}" + - "&6Warps: &f{warps}" + - "&6Power: &f{power}/{maxPower}" + - "&6Members: &f{online}/{members}" + + # Show + # This shows up when someone does /f show. + # It adds tooltips to each player in the list here, nothing else. + # {group} will show the players primary group if you have vault installed. + # {balance} will show their balance if you have vault installed. + # {lastSeen} will show human readable info on when the player was last seen, or online. + show: + - "&6Last Seen: &f{lastSeen}" + - "&6Power: &f{power}" + - "&6Rank: &f{group}" + - "&6Balance: &a${player-balance}" + +# Configuration section for Scoreboards +# This will allow you to completely customize how your scoreboards look. +# Make sure that no lines are duplicates of each other otherwise only the first will display. +# Use &0-9a-f for colors and include messages in "quotes" +scoreboard: + +# send faction change message as well when scoreboard is up? + also-send-chat: true +# How long do we want scoreboards to stay if set temporarily. + expiration: 7 + +# FInfo scoreboard is displayed when a player walks into a new Faction's territory. +# Scoreboard disappears after seconds. +# Things to be replaced in this: +# {power} - faction's power. {chunks} - total claimed chunks. {members} - total members. +# {online} - online members. {leader} - faction's leader. {open} - shows either true or false if open. +# {raidable} - true if the faction can be claimed over, otherwise false. +# {warps} - the number of warps that a faction has set. +# The title of the scoreboard will be the Faction's tag and colored according to the relation with the player's Faction. +# Commenting this section out will cause the info to appear in chat as the plugin originally did. + finfo-enabled: false # Default to false to keep original functionality. + finfo: + - "&6Power" + - "{power}" + - "&3Members" + - "{online}/{members}" + - "&4Drug Lord" + - "{leader}" + - "&bTerritory" + - "{chunks}" + +# Default board that will always show up if a player wants it to. +# This can show any arbitrary text or you can use a lot of variables to replace things. +# Replace {name} - player's name. {faction} - player's faction title, factionless if none. +# {totalOnline} - total players on the server. {balance} - player's balance. +# {maxPower} - player's max power. +# {powerBoost} - player's powerboost. + + default-enabled: false # Default to false to keep original functionality. + default-title: "cartels" # Can use any of the values from above but this won't update once it's set (so don't set {balance}). + default-update-interval: 2 # in seconds. + + # This will show faction prefixes colored based on relation on nametags and in the tab. + # The scoreboard needs to be enabled for this to work. + default-prefixes: true + + default: + - "&6Your Cartel" + - "{faction}" + - "&3Your Power" + - "{power}" + - "&aBalance" + - "${stash}" + + factionless-enabled: false + factionless: + - "Make a new Cartel" + - "Use /c create" + +# Configration section for warmups. +# Warmup times are in seconds - if a value of 0 is set, there is no warmup. +warmups: + # Delay for /f home + f-home: 0 + # Delay for /f warp + f-warp: 0 + +###################################################### +#################### HCF Features #################### +###################################################### +# These features were requested as part of Hardcore Factions or something. +# All of them are disabled by default. + +# Max Relation Types +# Limits factions to having a max number of each relation. +# Setting to 0 means none allowed. -1 for disabled. +# This will have no effect on default or existing relations, only when relations are changed. +# It is advised that you set the default relation to -1 so they can always go back to that. +# Otherwise Factions could be stuck with not being able to unenemy other Factions. +max-relations: + enabled: false + ally: 10 + truce: 10 + neutral: -1 + enemy: 10 + +# WorldBorder support +# A buffer of 0 means faction claims can go right up to the border of the world. +# The buffer is in chunks, so 1 as a buffer means an entire chunk of buffer between +# the border of the world and what can be claimed to factions +world-border: + buffer: 0 + +# Raids +# Allow a faction to be raided if they have more land than power. +# This will make claimed territory lose all protections +# allowing factions to open chests, break blocks, etc. if they +# have claimed chunks >= power. +hcf: + raidable: false + + # DTR (death til raidable) will be in /f show if enabled. Configure the message in the lang.yml + dtr: false + + # Should we allow Factions to over claim if they are raidable (above has no effect on this)? + # This has always been true, allowing factions to over claim others. + allow-overclaim: true + + # Power Freeze + # After a player dies, how long should the faction not be able to regen power? + # This resets on each death but does not accumulate. + # Set to 0 for no freeze. Time is in seconds. + powerfreeze: 0 + + # Buffer Zone + # Buffer Zone is an chunk area required between claims of different Factions. + # This is default to 0 and has always been that way. Meaning Factions can have + # claims that border each other. + # If this is set to 3, then Factions need to have 3 chunks between their claim + # and another Faction's claim. + # It's recommended to keep this pretty low as the radius check could be a + # heavy operation if set to a large number. + # If this is set to 0, we won't even bother checking which is how Factions has + # always been. + buffer-zone: 0 + + stuck: + delay: 30 + radius: 10 + +############################################################ +# +------------------------------------------------------+ # +# | Configurable /f show | # +# +------------------------------------------------------+ # +############################################################ + +# You can use any variable here, including fancy messages. Color codes and or tags work fine. +# Lines that arent defined wont be sent (home not set, faction not peaceful / permanent, dtr freeze) +show: + # First line can be {header} for default header, or any string (we recommend &m for smooth lines ;p) + - '{header}' + - 'Description: {description}' + - 'Joining: {joining} {peaceful}' + - 'Land / Power / Maxpower: {chunks}/{power}/{maxPower}' + - 'Founded: {create-date}' + - 'This cartel is permanent, remaining even with no members.' # only shows if faction is permanent + - 'Land value: {land-value} {land-refund}' + - 'Cartel Stash: {stash}' + - 'Allies({allies}/{max-allies}): {allies-list} ' + - 'Online: ({online}/{members}): {online-list}' + - 'Offline: ({offline}/{members}): {offline-list}' + +# For a /f show that does not display fancy messages that are essentially empty, use minimal-show +minimal-show: false + +# Factions that should be exempt from /f show, case sensitive, useful for a +# serverteam faction, since the command shows vanished players otherwise +show-exempt: + - Put_faction_tag_here + +############################################################ +# +------------------------------------------------------+ # +# | Configurable /f list | # +# +------------------------------------------------------+ # +############################################################ + +list: + # You can only use {pagenumber} and {pagecount} in the header + header: '&e&m----------&r&e[ &2Cartel List &9{pagenumber}&e/&9{pagecount} &e]&m----------' + # You can use any variables here + factionless: 'Cartel-less {factionless} online' + # You can use any variable here + entry: '{faction} {online} / {members} online, Land / Power / Maxpower: {chunks}/{power}/{maxPower}' + +############################################################ +# +------------------------------------------------------+ # +# | Configurable /f help | # +# +------------------------------------------------------+ # +############################################################ + +# set to true to use legacy factions help +use-old-help: true + +help: + # You can change the page name to whatever you like + # We use '1' to preserve default functionality of /f help 1 + '1': + - '&e&m----------------------------------------------' + - ' &c&lCartel Help ' + - '&e&m----------------------------------------------' + - '&3/c create &e>> &7Create your own cartel' + - '&3/c who &e>> &7Show cartel info' + - '&3/c tag &e>> &7Change cartel tag' + - '&3/c join &e>> &7Join cartel' + - '&3/c list &e>> &7List all cartel' + - '&e&m--------------&r &2/c help 2 for more &e&m--------------' + '2': + - '&e&m------------------&r&c&l Page 2 &e&m--------------------' + - '&3/c home &e>> &7Teleport to cartel home' + - '&3/c sethome &e>> &7Set your cartel home' + - '&3/c leave &e>> &7Leave your cartel' + - '&3/c invite &e>> &7Invite a player to your cartel' + - '&3/c deinvite &e>> &7Revoke invitation to player' + - '&e&m--------------&r &2/c help 3 for more &e&m--------------' + '3': + - '&e&m------------------&r&c&l Page 3 &e&m--------------------' + - '&3/c claim &e>> &7Claim land' + - '&3/c unclaim &e>> &7Unclaim land' + - '&3/c kick &e>> &7Kick player from your cartel' + - '&3/c mod &e>> &7Set player role in cartel' + - '&3/c chat &e>> &7Switch to cartel chat' + - '&e&m--------------&r &2/c help 4 for more &e&m--------------' + '4': + - '&e&m------------------&r&c&l Page 4 &e&m--------------------' + - '&3/c version &e>> &7Display version information' + - '&e&m--------------&r&2 End of /c help &e&m-----------------' + +############################################################ +# +------------------------------------------------------+ # +# | Big List of variables | # +# +------------------------------------------------------+ # +############################################################ +# Fancy variables. Can only be used in /f show +# - {allies-list} : Lists each faction ally with tooltips +# - {enemies-list} : Lists each faction enemy with tooltips +# - {online-list} : Lists all online members with tooltips +# - {offline-list} : Lists all offline members with tooltips +# Player variables. Can be used in tooltips.show, scoreboards, or /f show +# - {group} : Players group +# - {name} : Players name +# - {lastSeen} : Last time player was seen (if offline), or just 'Online' +# - {balance} : Players balance +# - {player-kills} : # of kills the player has +# - {player-deaths}: # of deaths the player has +# Faction variables. Can be used in tooltips.list, scoreboards, or /f show +# - {header} : Default factions header (ex. /f show) +# - {faction} : Factions tag (if none, uses lang.yml for factionless name) +# - {joining} : How to join this faction +# - {power} : Factions deaths until raidable value +# - {power-boost} : DTR Symbol based on current DTR (max, regen, frozen, raidable) +# - {maxPower} : Factions max deaths until raidable value +# - {chunks} : # of claims faction has (in chunks) +# - {warps} : # of warps faction has +# - {description} : Factions description +# - {create-date} : Date faction was created +# - {leader} : Faction leader +# - {land-value} : Value of all claims +# - {land-refund} : Calculated refund value +# - {allies} : # of allies faction has +# - {enemies} : # of enemies faction has +# - {online} : # of faction members online +# - {offline} : # of faction members offline +# - {members} : # of faction members (includes offline) +# - {faction-balance} : Faction bank balance +# - {world}, {x}, {y}, {z} : Faction home variables. You don't need to use them all. +# - {faction-kills} : # of kills the faction has +# - {faction-deaths}: # of deaths the faction has +# General variables. Can be used anywhere. +# - {total-online} : Total # of players on the server +# - {max-warps} : Max # of warps a faction can set +# - {max-allies} : Max # of allies a faction can have +# - {max-enemies} : Max # of enemies a faction can have +# - {factionless} : Count of all factionless players online \ No newline at end of file diff --git a/cartels-master@e4f5c2ecec5/src/main/resources/lang.yml b/cartels-master@e4f5c2ecec5/src/main/resources/lang.yml new file mode 100644 index 0000000..b889fd3 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/resources/lang.yml @@ -0,0 +1,5 @@ +# Lang file for FactionsUUID by drtshock +# Use & for color codes. +# Made with love <3 + + diff --git a/cartels-master@e4f5c2ecec5/src/main/resources/lang/en_GB.yml b/cartels-master@e4f5c2ecec5/src/main/resources/lang/en_GB.yml new file mode 100644 index 0000000..d69fe60 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/resources/lang/en_GB.yml @@ -0,0 +1,31 @@ +# Lang file for FactionsUUID by drtshock +# Use & for color codes. +# Made with love <3 + +#Slightly different localised variant for UK-style english (Color→Colour, etc) +#It's cut down to the sections that were actually changed. Ie basically nothing. What ho, dear chap! + +root: + AUTHOR: misc + RESPONSIBLE: Korikisulda + LANGUAGE: English + ENCODING: UTF-8 + LOCALE: en_GB + EXTENDS: en_US + REQUIRESUNICODE: 'false' + DEFAULT: 'false' + STATE: complete + LOCAL: + AUTHOR: misc + RESPONSIBLE: Korikisulda + LANGUAGE: English + REGION: UK + STATE: complete +COMMAND: + CONFIG: + COLOURSET: '" colour option set to "' + INVALID: + COLOUR: 'Cannot set "%1$s": "%2$s" is not a valid colour.' + COLLECTION: '"%1$s" is not a data collection type which can be modified with this + command.' + diff --git a/cartels-master@e4f5c2ecec5/src/main/resources/lang/en_US.yml b/cartels-master@e4f5c2ecec5/src/main/resources/lang/en_US.yml new file mode 100644 index 0000000..536816d --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/resources/lang/en_US.yml @@ -0,0 +1,505 @@ +# Lang file for FactionsUUID by drtshock +# Use & for color codes. +# Made with love <3 + + + +root: + AUTHOR: misc + RESPONSIBLE: misc + LANGUAGE: English + ENCODING: UTF-8 + LOCALE: en_US + REQUIRESUNICODE: 'false' + DEFAULT: 'true' + STATE: complete + LOCAL: + AUTHOR: misc + RESPONSIBLE: misc + LANGUAGE: English + REGION: US + STATE: complete +COMMAND: + ADMIN: + NOTMEMBER: '%1$s is not a member in your cartel.' + NOTADMIN: You are not the cartel admin. + TARGETSELF: The target player musn't be yourself. + DEMOTES: You have demoted %1$s from the position of cartel admin. + DEMOTED: You have been demoted from the position of cartel admin by %1$s. + PROMOTES: You have promoted %1$s to the position of cartel admin. + PROMOTED: '%1$s gave %2$s the leadership of %3$s.' + AUTOCLAIM: + ENABLED: Now auto-claiming land for %1$s. + DISABLED: Auto-claiming of land disabled. + REQUIREDRANK: You must be %1$s to claim land. + OTHERFACTION: You can't claim land for %1$s. + AUTOHELP: + HELPFOR: Help for command " + BOOM: + PEACEFULONLY: This command is only usable by cartels which are specifically designated as peaceful. + TOTOGGLE: to toggle explosions + FORTOGGLE: for toggling explosions + ENABLED: '%1$s has %2$s explosions in your cartel''s territory.' + BYPASS: + ENABLE: You have enabled admin bypass mode. You will be able to build or destroy anywhere. + ENABLELOG: ' has ENABLED admin bypass mode.' + DISABLE: You have disabled admin bypass mode. + DISABLELOG: ' has DISABLED admin bypass mode.' + CHAT: + DISABLED: The built in chat chat channels are disabled on this server. + INVALIDMODE: Unrecognised chat mode. Please enter either 'a','f' or 'p' + MODE: + PUBLIC: Public chat mode. + ALLIANCE: Alliance only chat mode. + FACTION: Faction only chat mode. + CHATSPY: + ENABLE: You have enabled chat spying mode. + ENABLELOG: ' has ENABLED chat spying mode.' + DISABLE: You have disabled chat spying mode. + DISABLELOG: ' has DISABLED chat spying mode.' + CLAIM: + INVALIDRADIUS: If you specify a radius, it must be at least 1. + DENIED: You do not have permission to claim in a radius. + CONFIG: + NOEXIST: No configuration setting "%1$s" exists. + SET: + 'TRUE': '" option set to true (enabled).' + 'FALSE': '" option set to false (disabled).' + ADDED: '"%1$s" set: "%2$s" added.' + REMOVED: '"%1$s" set: "%2$s" removed.' + OPTIONSET: '" option set to ' + COLOURSET: '" color option set to "' + INTREQUIRED: 'Cannot set "%1$s": An integer (whole number) value required.' + LONGREQUIRED: 'Cannot set "%1$s": A long integer (whole number) value required.' + DOUBLEREQUIRED: 'Cannot set "%1$s": A double (numeric) value required.' + FLOATREQUIRED: 'Cannot set "%1$s": A float (numeric) value required.' + INVALID: + COLOUR: 'Cannot set "%1$s": "%2$s" is not a valid color.' + COLLECTION: '"%1$s" is not a data collection type which can be modified with + this command.' + MATERIAL: 'Cannot change "%1$s" set: "%2$s" is not a valid material.' + TYPESET: '"%1$s" is not a data type set which can be modified with this command.' + MATERIAL: + ADDED: '"%1$s" set: Material "%2$s" added.' + REMOVED: '"%1$s" set: Material "%2$s" removed.' + LOG: ' (Command was run by %1$s.)' + ERROR: + SETTING: Error setting configuration setting "%1$s" to "%2$s". + MATCHING: Configuration setting "%1$s" couldn't be matched, though it should be... please report this error. + TYPE: '''%1$s'' is of type ''%2$s'', which cannot be modified with this command.' + CREATE: + MUSTLEAVE: You must leave your current cartel first. + INUSE: That tag is already in use. + TOCREATE: to create a new cartel + FORCREATE: for creating a new cartel + ERROR: There was an internal error while trying to create your cartel. Please try again. + CREATED: '%1$s created a new cartel %2$s' + YOUSHOULD: 'You should now: %1$s' + CREATEDLOG: ' created a new cartel: ' + DEINVITE: + CANDEINVITE: 'Players you can deinvite: ' + CLICKTODEINVITE: Click to revoke invite for %1$s + ALREADYMEMBER: '%1$s is already a member of %2$s' + MIGHTWANT: 'You might want to: %1$s' + REVOKED: '%1$s revoked your invitation to %2$s.' + REVOKES: '%1$s revoked %2$s''s invitation.' + DELFWARP: + DELETED: Deleted warp %1$s + INVALID: Couldn't find warp %1$s + TODELETE: to delete warp + FORDELETE: for deleting warp + DESCRIPTION: + CHANGES: 'You have changed the description for %1$s to:' + CHANGED: 'The cartel %1$s changed their description to:' + TOCHANGE: to change cartel description + FORCHANGE: for changing cartel description + DISBAND: + IMMUTABLE: You cannot disband the Wilderness, SafeZone, or WarZone. + MARKEDPERMANENT: This cartel is designated as permanent, so you cannot disband it. + BROADCAST: + YOURS: %1$s disbanded your cartel. + NOTYOURS: %1$s disbanded the cartel %2$s. + HOLDINGS: You have been given the disbanded cartel's bank, totaling %1$s. + FWARP: + CLICKTOWARP: Click to warp! + COMMANDFORMAT: /c warp + WARPED: Warped to %1$s + INVALID: Couldn't find warp %1$s + TOWARP: to warp + FORWARPING: for warping + WARPS: 'Warps: ' + HELP: + '404': This page does not exist + NEXTCREATE: Learn how to create a cartel on the next page. + HOME: 'And don''t forget to set your home:' + BANK: + '1': Your cartel has a bank which is used to pay for certain + '2': things, so it will need to have money deposited into it. + '3': To learn more, use the money command. + PLAYERTITLES: Player titles are just for fun. No rules connected to them. + OWNERSHIP: + '1': Claimed land with ownership set is further protected so + '2': that only the owner(s), cartel admin, and possibly the + '3': cartel moderators have full access. + RELATIONS: + '1': Set the relation you WISH to have with another cartel. + '2': Your default relation with other cartels will be neutral. + '3': If BOTH cartels choose "ally" you will be allies. + '4': If ONE cartel chooses "enemy" you will be enemies. + '5': You can never hurt members or allies. + '6': You can not hurt neutrals in their own territory. + '7': You can always hurt enemies and players without cartel. + '8': '' + '9': Damage from enemies is reduced in your own territory. + '10': When you die you lose power. It is restored over time. + '11': The power of a cartel is the sum of all member power. + '12': The power of a cartel determines how much land it can hold. + '13': You can claim land from cartels with too little power. + PERMISSIONS: + '1': Only cartel members can build and destroy in their own + '2': 'territory. Usage of the following items is also restricted:' + '3': Door, Chest, Furnace, Dispenser, Diode. + '4': '' + '5': Make sure to put pressure plates in front of doors for your + '6': guest visitors. Otherwise they can't get through. You can + '7': also use this to create member only areas. + '8': As dispensers are protected, you can create traps without + '9': worrying about those arrows getting stolen. + ADMIN: + '1': /c claim safezone claim land for the Safe Zone + '2': /c claim warzone claim land for the War Zone + '3': /c autoclaim [safezone|warzone] take a guess + MOAR: + '1': 'Finally some commands for the server admins:' + '2': 'More commands for server admins:' + '3': 'Even more commands for server admins:' + HOME: + DISABLED: Sorry, Cartel homes are disabled on this server. + TELEPORTDISABLED: Sorry, the ability to teleport to Cartel homes is disabled on this server. + NOHOME: 'Your cartel does not have a home. ' + INENEMY: You cannot teleport to your cartel home while in the territory of an enemy cartel. + WRONGWORLD: You cannot teleport to your cartel home while in a different world. + ENEMYNEAR: You cannot teleport to your cartel home while an enemy is within %s blocks of you. + TOTELEPORT: to teleport to your cartel home + FORTELEPORT: for teleporting to your cartel home + INVITE: + TOINVITE: to invite someone + FORINVITE: for inviting someone + CLICKTOJOIN: Click to join! + INVITEDYOU: ' has invited you to join ' + INVITED: '%1$s invited %2$s to your cartel.' + ALREADYMEMBER: '%1$s is already a member of %2$s' + JOIN: + CANNOTFORCE: You do not have permission to move other players into a cartel. + SYSTEMFACTION: Players may only join normal cartels. This is a system cartel. + ALREADYMEMBER: %1$s %2$s already a member of %3$s + ATLIMIT: ' ! The cartel %1$s is at the limit of %2$d members, so %3$s + cannot currently join.' + INOTHERFACTION: %1$s must leave %2$s current cartel first. + NEGATIVEPOWER: %1$s cannot join a cartel with a negative power level. + REQUIRESINVITATION: This cartel requires invitation. + ATTEMPTEDJOIN: '%1$s tried to join your cartel.' + TOJOIN: to join a cartel + FORJOIN: for joining a cartel + SUCCESS: %1$s successfully joined %2$s. + MOVED: %1$s moved you into the cartel %2$s. + JOINED: %1$s joined your cartel. + JOINEDLOG: '%1$s joined the cartel %2$s.' + MOVEDLOG: '%1$s moved the player %2$s into the cartel %3$s.' + KICK: + CANDIDATES: 'Players you can kick: ' + CLICKTOKICK: 'Click to kick ' + SELF: You cannot kick yourself. + NONE: That player is not in a cartel. + NOTMEMBER: '%1$s is not a member of %2$s' + INSUFFICIENTRANK: Your rank is too low to kick this player. + NEGATIVEPOWER: You cannot kick that member until their power is positive. + TOKICK: to kick someone from the cartel + FORKICK: for kicking someone from the cartel + FACTION: '%1$s kicked %2$s from the cartel! :O' + KICKS: You kicked %1$s from the cartel %2$s! + KICKED: '%1$s kicked you from %2$s! :O' + LIST: + FACTIONLIST: 'Cartel List ' + TOLIST: to list the cartels + FORLIST: for listing the cartels + ONLINEFACTIONLESS: 'Online cartelless: ' + LOCK: + LOCKED: Cartels is now locked + UNLOCKED: Cartels in now unlocked + LOGINS: + TOGGLE: 'Set login / logout notifications for Cartel members to: %s' + MAP: + TOSHOW: to show the map + FORSHOW: for showing the map + UPDATE: + ENABLED: Map auto update ENABLED. + DISABLED: Map auto update DISABLED. + MOD: + CANDIDATES: 'Players you can promote: ' + CLICKTOPROMOTE: 'Click to promote ' + NOTMEMBER: '%1$s is not a member in your cartel.' + NOTADMIN: You are not the cartel admin. + SELF: The target player musn't be yourself. + TARGETISADMIN: The target player is a cartel admin. Demote them first. + REVOKES: You have removed moderator status from %1$s. + REVOKED: '%1$s is no longer moderator in your cartel.' + PROMOTES: '%1$s was promoted to moderator in your cartel.' + PROMOTED: You have promoted %1$s to moderator. + MODIFYPOWER: + ADDED: 'Added %1$f power to %2$s. New total rounded power: %3$d' + MONEY: + SHORT: cartel money commands + LONG: The cartel money commands. + MONEYBALANCE: + SHORT: show cartel balance + MONEYDEPOSIT: + SHORT: deposit money + DEPOSITED: '%1$s deposited %2$s in the cartel bank: %3$s' + MONEYTRANSFERFF: + SHORT: transfer f -> f + TRANSFER: '%1$s transferred %2$s from the cartel "%3$s" to the cartel "%4$s"' + MONEYTRANSFERFP: + SHORT: transfer f -> p + TRANSFER: '%1$s transferred %2$s from the cartel "%3$s" to the player "%4$s"' + MONEYTRANSFERPF: + SHORT: transfer p -> f + TRANSFER: '%1$s transferred %2$s from the player "%3$s" to the cartel "%4$s"' + MONEYWITHDRAW: + SHORT: withdraw money + WITHDRAW: '%1$s withdrew %2$s from the cartel bank: %3$s' + OPEN: + TOOPEN: to open or close the cartel + FOROPEN: for opening or closing the cartel + OPEN: open + CLOSED: closed + CHANGES: '%1$s changed the cartel to %2$s.' + CHANGED: The cartel %1$s is now %2$s + OWNER: + DISABLED: Sorry, but owned areas are disabled on this server. + LIMIT: Sorry, but you have reached the server's limit of %1$d owned areas per cartel. + WRONGFACTION: This land is not claimed by your cartel, so you can't set ownership of it. + NOTCLAIMED: This land is not claimed by a cartel. Ownership is not possible. + NOTMEMBER: '%1$s is not a member of this cartel.' + CLEARED: You have cleared ownership for this claimed area. + REMOVED: You have removed ownership of this claimed land from %1$s. + TOSET: to set ownership of claimed land + FORSET: for setting ownership of claimed land + ADDED: You have added %1$s to the owner list for this claimed land. + OWNERLIST: + DISABLED: Sorry, but owned areas are disabled on this server. + WRONGFACTION: This land is not claimed by your cartel. + NOTCLAIMED: This land is not claimed by any cartel, thus no owners. + NONE: No owners are set here; everyone in the cartel has access. + OWNERS: 'Current owner(s) of this land: %1$s' + POWER: + TOSHOW: to show player power info + FORSHOW: for showing player power info + POWER: '%1$s - Power / Maxpower: %2$d / %3$d %4$s' + BONUS: ' (bonus: ' + PENALTY: ' (penalty: ' + POWERBOOST: + HELP: + '1': You must specify "p" or "player" to target a player or "c" or "cartel" to target a cartel. + '2': ex. /c powerboost p SomePlayer 0.5 -or- /c powerboost c SomeCartel -5 + INVALIDNUM: You must specify a valid numeric value for the power bonus/penalty amount. + PLAYER: Player "%1$s" + FACTION: Cartel "%1$s" + BOOST: %1$s now has a power bonus/penalty of %2$d to min and max power levels. + BOOSTLOG: '%1$s has set the power bonus/penalty for %2$s to %3$d.' + RELOAD: + TIME: Reloaded conf.json from disk, took %1$d ms. + SAFEUNCLAIMALL: + SHORT: Unclaim all safezone land + UNCLAIMED: You unclaimed ALL safe zone land. + UNCLAIMEDLOG: '%1$s unclaimed all safe zones.' + SAVEALL: Cartels saved to disk! + SETFWARP: + NOTCLAIMED: You can only set warps in your cartel territory. + LIMIT: Your Cartel already has the max amount of warps set (%1$d). + SET: Set warp %1$s to your location. + TOSET: to set warp + FORSET: for setting warp + SETHOME: + DISABLED: Sorry, Cartel homes are disabled on this server. + NOTCLAIMED: Sorry, your cartel home can only be set inside your own claimed territory. + TOSET: to set the cartel home + FORSET: for setting the cartel home + SET: '%1$s set the home for your cartel. You can now use:' + SETOTHER: You have set the home for the %1$s cartel. + SHOW: + NOFACTION: + SELF: You are not in a cartel + OTHER: That's not a cartel + TOSHOW: to show cartel information + FORSHOW: for showing cartel information + DESCRIPTION: 'Description: %1$s' + PEACEFUL: This cartel is Peaceful + PERMANENT: This cartel is permanent, remaining even with no members. + JOINING: 'Joining: %1$s ' + INVITATION: invitation is required + UNINVITED: no invitation is needed + POWER: 'Land / Power / Maxpower: %1$d/%2$d/%3$d %4$s' + BONUS: ' (bonus: ' + PENALTY: ' (penalty: ' + DEPRECIATED: (%1$s depreciated) + LANDVALUE: 'Total land value: %1$s %2$s' + BANKCONTAINS: 'Bank contains: %1$s' + ALLIES: 'Allies: ' + ENEMIES: 'Enemies: ' + MEMBERSONLINE: 'Members online: ' + MEMBERSOFFLINE: 'Members offline: ' + SHOWINVITES: + PENDING: 'Players with pending invites: ' + CLICKTOREVOKE: Click to revoke invite for %1$s + STATUS: + FORMAT: '%1$s Power: %2$s Last Seen: %3$s' + ONLINE: Online + AGOSUFFIX: ' ago.' + TAG: + TAKEN: That tag is already taken + TOCHANGE: to change the cartel tag + FORCHANGE: for changing the cartel tag + FACTION: '%1$s changed your cartel tag to %2$s' + CHANGED: The cartel %1$s changed their name to %2$s. + TITLE: + TOCHANGE: to change a players title + FORCHANGE: for changing a players title + CHANGED: '%1$s changed a title: %2$s' + UNCLAIM: + SAFEZONE: + SUCCESS: Safe zone was unclaimed. + NOPERM: This is a safe zone. You lack permissions to unclaim. + WARZONE: + SUCCESS: War zone was unclaimed. + NOPERM: This is a war zone. You lack permissions to unclaim. + UNCLAIMED: '%1$s unclaimed some of your land.' + UNCLAIMS: You unclaimed this land. + LOG: '%1$s unclaimed land at (%2$s) from the cartel: %3$s' + WRONGFACTION: You don't own this land. + TOUNCLAIM: to unclaim this land + FORUNCLAIM: for unclaiming this land + FACTIONUNCLAIMED: '%1$s unclaimed some land.' + UNCLAIMALL: + TOUNCLAIM: to unclaim all cartel land + FORUNCLAIM: for unclaiming all cartel land + UNCLAIMED: '%1$s unclaimed ALL of your cartel''s land.' + LOG: '%1$s unclaimed everything for the cartel: %2$s' + VERSION: + VERSION: You are running %1$s + WARUNCLAIMALL: + SHORT: unclaim all warzone land + SUCCESS: You unclaimed ALL war zone land. + LOG: '%1$s unclaimed all war zones.' + RELATIONS: + ALLTHENOPE: Nope! You can't. + MORENOPE: Nope! You can't declare a relation to yourself :) + ALREADYINRELATIONSHIP: You already have that relation wish set with %1$s. + TOMARRY: to change a relation wish + FORMARRY: for changing a relation wish + MUTUAL: Your cartel is now %1$s to %2$s + PEACEFUL: This will have no effect while your cartel is peaceful. + PEACEFULOTHER: This will have no effect while their cartel is peaceful. + PROPOSAL: + '1': '%1$s wishes to be your %2$s' + '2': Type /%1$s %2$s %3$s to accept. + SENT: '%1$s were informed that you wish to be %2$s' +command: + convert: + backend: + running: Already running that backend. + invalid: Invalid backend + help: + invitations: 'You might want to close it and use invitations:' +LEAVE: + PASSADMIN: You must give the admin role to someone else first. + NEGATIVEPOWER: You cannot leave until your power is positive. + TOLEAVE: to leave your cartel. + FORLEAVE: for leaving your cartel. + LEFT: '%s left cartel %s.' + DISBANDED: %s was disbanded. + DISBANDEDLOG: The cartel %s (%s) was disbanded due to the last player (%s) leaving. +CLAIM: + PROTECTED: This land is protected + DISABLED: Sorry, this world has land claiming disabled. + CANTCLAIM: You can't claim land for %s. + ALREADYOWN: '%s already own this land.' + MUSTBE: You must be %s to claim land. + MEMBERS: Cartels must have at least %s members to claim land. + SAFEZONE: You can not claim a Safe Zone. + WARZONE: You can not claim a War Zone. + POWER: You can't claim more land! You need more power! + LIMIT: Limit reached. You can't claim more land! + ALLY: You can't claim the land of your allies. + CONTIGIOUS: You can only claim additional land which is connected to your first claim or controlled by another cartel! + FACTIONCONTIGUOUS: You can only claim additional land which is connected to your first claim! + PEACEFUL: '%s owns this land. Your cartel is peaceful, so you cannot claim land + from other cartels.' + PEACEFULTARGET: '%s owns this land, and is a peaceful cartel. You cannot claim + land from them.' + THISISSPARTA: '%s owns this land and is strong enough to keep it.' + BORDER: You must start claiming land at the border of the territory. + TOCLAIM: to claim this land + FORCLAIM: for claiming this land + CLAIMED: %s claimed land for %s from %s. + CLAIMEDLOG: '%s claimed land at (%s) for the cartel: %s' +GENERIC: + NOPERMISSION: You don't have permission to %1$s. + DOTHAT: do that + NOPLAYERMATCH: No player match found for "

%1$s". + NOPLAYERFOUND: No player "

%1$s" could not be found. + ARGS: + TOOFEW: 'Too few arguments. Use like this:' + TOOMANY: 'Strange argument "

%1$s". Use the command like this:' + OWNERS: 'Owner(s): %1$s' + PUBLICLAND: Public cartel land. + FACTIONLESS: cartelless + SERVERADMIN: A server admin + DISABLED: disabled + ENABLED: enabled + CONSOLEONLY: This command cannot be run as a player. + PLAYERONLY: This command can only be used by ingame players. + ASKYOURLEADER: ' Ask your boss to:' + YOUSHOULD: 'You should:' + YOUMAYWANT: 'You may want to: ' + TRANSLATION: + VERSION: 'Translation: %1$s(%2$s,%3$s) State: %4$s' + CONTRIBUTORS: 'Translation contributors: %1$s' + RESPONSIBLE: 'Responsible for translation: %1$s' + FACTIONTAG: + TOOSHORT: The cartel tag can't be shorter than %1$s chars. + TOOLONG: The cartel tag can't be longer than %s chars. + ALPHANUMERIC: Cartel tag must be alphanumeric. "%s" is not allowed. +COMPASS: + SHORT: + NORTH: N + EAST: E + SOUTH: S + WEST: W +CHAT: + FACTION: cartel chat + ALLIANCE: alliance chat + PUBLIC: public chat +RELATION: + MEMBER: member + ALLY: ally + NEUTRAL: neutral + ENEMY: enemy +NOPAGES: Sorry. No Pages available. +INVALIDPAGE: Invalid page. Must be between 1 and %1$d +title: '&bCartels &0|&r' +wilderness: '&2Wilderness' +wilderness-description: '' +warzone: '&4Warzone' +warzone-description: Not the safest place to be. +safezone: '&6Safezone' +safezone-description: Free from pvp and monsters. +toggle-sb: You now have scoreboards set to {value} +default-prefix: '{relationcolor}[{faction}] &r' +faction-login: '&e%1$s &9logged in.' +faction-logout: '&e%1$s &9logged out..' +WARMUPS: + NOTIFY: + TELEPORT: '&eYou will teleport to &d%1$s &ein &d%2$d &eseconds.' + ALREADY: '&cYou are already warming up.' + CANCELLED: '&cYou have cancelled your warmup.' diff --git a/cartels-master@e4f5c2ecec5/src/main/resources/lang/ja_JP.yml b/cartels-master@e4f5c2ecec5/src/main/resources/lang/ja_JP.yml new file mode 100644 index 0000000..f19fae0 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/resources/lang/ja_JP.yml @@ -0,0 +1,434 @@ +# FactionsUUID「党派・一意な利用者識別子」言語ファイル +# &為に色コード使用 +# 愛で造った〜♥ + +root: + AUTHOR: Korikisulda + RESPONSIBLE: Korikisulda + LANGUAGE: Japanese + ENCODING: UTF-8 + LOCALE: ja_JP + REQUIRESUNICODE: 'true' + DEFAULT: 'false' + STATE: partial + LOCAL: + AUTHOR: エヴェリン雪「korikisulda」 + RESPONSIBLE: 'エヴェリン雪・ツイッター、IRC:「korikisulda」' + LANGUAGE: 日本語 + REGION: 日本 + STATE: 不全 +COMMAND: + ADMIN: + NOTMEMBER: '%sは党派の員になっていませんよ・' + NOTADMIN: アドミンではありません・ + TARGETSELF: 自分はターゲットになれません・ + DEMOTES: 党派アドミンから%sをデモートしました・ + DEMOTED: 党派アドミンから%sはデモートしました・. + PROMOTES: 党派アドミンに%sをプロモートしました + PROMOTED: '%sは%sを%sの党派アドミンにあげりました・' + AUTOCLAIM: + ENABLED: %s為にオート引取っています・ + DISABLED: オート引取っていません・ + REQUIREDRANK: %sになりません・ + OTHERFACTION: %s為に引取れません・. + AUTOHELP: + HELPFOR: ヘルプ・コマンド" + BOOM: + PEACEFULONLY: 安らかじゃない党派は爆発トグルが禁止です・ + TOTOGGLE: 爆発トグルし + FORTOGGLE: 爆発トグルした + ENABLED: '%s は爆発を%sしました' + BYPASS: + ENABLE: アドミンバイパスモードで入っています + ENABLELOG: はアドミンバイパスモードで入っています + DISABLE: アドミンバイパスモードで出た + DISABLELOG: はアドミンバイパスモードで出た + CHAT: + DISABLED: 党派チャットは禁止されました・ + INVALIDMODE: 不正なチャットモード・a,fかpと入力して下さい・ + MODE: + PUBLIC: 只公開チャットモード + ALLIANCE: 只連盟チャットモード + FACTION: 只党派チャットモード + CHATSPY: + ENABLE: チャットスパイモードで入ってします + ENABLELOG: はチャットスパイモードで入ってします + DISABLE: チャットスパイモードで出た + DISABLELOG: はチャットスパイモードで出た + CLAIM: + INVALIDRADIUS: 半径を指定しますなら1以上を指定して下さい・ + DENIED: 半径で引き取る許可がありません・ + CONFIG: + NOEXIST: 設定オプション"%s"はありません・ + SET: + 'TRUE': '"オプションは正に変わりました' + 'FALSE': '"オプションは正じゃなくに変わりました' + ADDED: '"%s" set: "%s" added.' + REMOVED: '"%s" set: "%s" removed.' + OPTIONSET: '" option set to ' + COLOURSET: '" color option set to "' + INTREQUIRED: 'Cannot set "%s": An integer (whole number) value required.' + LONGREQUIRED: 'Cannot set "%s": A long integer (whole number) value required.' + DOUBLEREQUIRED: 'Cannot set "%s": A double (numeric) value required.' + FLOATREQUIRED: 'Cannot set "%s": A float (numeric) value required.' + INVALID: + COLOUR: 'Cannot set "%s": "%s" is not a valid color.' + COLLECTION: '"%s" is not a data collection type which can be modified with this command.' + MATERIAL: 'Cannot change "%s" set: "%s" is not a valid material.' + TYPESET: '"%s" is not a data type set which can be modified with this command.' + MATERIAL: + ADDED: '"%s" set: Material "%s" added.' + REMOVED: '"%s" set: Material "%s" removed.' + LOG: ' (Command was run by %s.)' + ERROR: + SETTING: Error setting configuration setting "%s" to "%s". + MATCHING: Configuration setting "%s" couldn't be matched, though it should be... please report this error. + TYPE: '''%s'' is of type ''%s'', which cannot be modified with this command.' + CREATE: + MUSTLEAVE: You must leave your current faction first. + INUSE: That tag is already in use. + TOCREATE: to create a new faction + FORCREATE: for creating a new faction + ERROR: There was an internal error while trying to create your faction. Please try again. + CREATED: %s created a new faction %s + CREATEDLOG: ' は新しい党派を造りました: ' + YOUSHOULD: 'You should now: %s' + DEINVITE: + CANDEINVITE: 'Players you can deinvite: ' + CLICKTODEINVITE: 'Click to revoke invite for %s' + ALREADYMEMBER: '%s is already a member of %s' + MIGHTWANT: 'You might want to: %s' + REVOKED: '%s revoked your invitation to %s.' + REVOKES: '%s revoked %s''s invitation.' + DELFWARP: + DELETED: Deleted warp %s + INVALID: Couldn't find warp %s + TODELETE: to delete warp + FORDELETE: for deleting warp + DESCRIPTION: + CHANGES: 'You have changed the description for %s to:' + CHANGED: 'The faction %s changed their description to:' + TOCHANGE: to change faction description + FORCHANGE: for changing faction description + DISBAND: + IMMUTABLE: You cannot disband the Wilderness, SafeZone, or WarZone. + MARKEDPERMANENT: This faction is designated as permanent, so you cannot disband it. + BROADCAST: + YOURS: %s disbanded your faction. + NOTYOURS: %s disbanded the faction %s. + HOLDINGS: You have been given the disbanded faction's bank, totaling %s. + FWARP: + CLICKTOWARP: クリック為にワープ「テレポート」! + COMMANDFORMAT: /f warp <ワープ名> + WARPED: %sにテレポートしました + INVALID: %sが見つかりません + TOWARP: ワープし + FORWARPING: ワープした + WARPS: 'ワープリスト: ' + HELP: + '404': 指定ページは不正です・ + NEXTCREATE: Learn how to create a faction on the next page. + HOME: 'And don''t forget to set your home:' + BANK: + '1': Your faction has a bank which is used to pay for certain + '2': things, so it will need to have money deposited into it. + '3': To learn more, use the money command. + PLAYERTITLES: Player titles are just for fun. No rules connected to them. + OWNERSHIP: + '1': Claimed land with ownership set is further protected so + '2': that only the owner(s), faction admin, and possibly the + '3': faction moderators have full access. + RELATIONS: + '1': Set the relation you WISH to have with another faction. + '2': Your default relation with other factions will be neutral. + '3': If BOTH factions choose "ally" you will be allies. + '4': If ONE faction chooses "enemy" you will be enemies. + '5': You can never hurt members or allies. + '6': You can not hurt neutrals in their own territory. + '7': You can always hurt enemies and players without faction. + '8': '' + '9': Damage from enemies is reduced in your own territory. + '10': When you die you lose power. It is restored over time. + '11': The power of a faction is the sum of all member power. + '12': The power of a faction determines how much land it can hold. + '13': You can claim land from factions with too little power. + PERMISSIONS: + '1': Only faction members can build and destroy in their own + '2': 'territory. Usage of the following items is also restricted:' + '3': Door, Chest, Furnace, Dispenser, Diode. + '4': '' + '5': Make sure to put pressure plates in front of doors for your + '6': guest visitors. Otherwise they can't get through. You can + '7': also use this to create member only areas. + '8': As dispensers are protected, you can create traps without + '9': worrying about those arrows getting stolen. + ADMIN: + '1': /f claim safezone claim land for the Safe Zone + '2': /f claim warzone claim land for the War Zone + '3': /f autoclaim [safezone|warzone] take a guess + MOAR: + '1': 'Finally some commands for the server admins:' + '2': 'More commands for server admins:' + '3': 'Even more commands for server admins:' + HOME: + DISABLED: 党派ホームは禁止されました・ + TELEPORTDISABLED: 党派ホームテレポートは禁止されました・ + NOHOME: '党派のホームはありません' + INENEMY: You cannot teleport to your faction home while in the territory of an enemy faction. + WRONGWORLD: You cannot teleport to your faction home while in a different world. + ENEMYNEAR: You cannot teleport to your faction home while an enemy is within %s blocks of you. + TOTELEPORT: to teleport to your faction home + FORTELEPORT: for teleporting to your faction home + INVITE: + TOINVITE: to invite someone + FORINVITE: for inviting someone + CLICKTOJOIN: Click to join! + INVITEDYOU: ' has invited you to join ' + INVITED: '%s invited %s to your faction.' + ALREADYMEMBER: '%s is already a member of %s' + JOIN: + CANNOTFORCE: You do not have permission to move other players into a faction. + SYSTEMFACTION: Players may only join normal factions. This is a system faction. + ALREADYMEMBER: %s %s already a member of %s + ATLIMIT: ' ! The faction %s is at the limit of %d members, so %s cannot + currently join.' + INOTHERFACTION: %s must leave %s current faction first. + NEGATIVEPOWER: %s cannot join a faction with a negative power level. + REQUIRESINVITATION: This faction requires invitation. + ATTEMPTEDJOIN: '%s tried to join your faction.' + TOJOIN: to join a faction + FORJOIN: for joining a faction + SUCCESS: %s successfully joined %s. + MOVED: %s moved you into the faction %s. + JOINED: %s joined your faction. + JOINEDLOG: '%s joined the faction %s.' + MOVEDLOG: '%s moved the player %s into the faction %s.' + KICK: + CANDIDATES: 'Players you can kick: ' + CLICKTOKICK: 'Click to kick ' + SELF: You cannot kick yourself. + NONE: That player is not in a faction. + NOTMEMBER: '%s is not a member of %s' + INSUFFICIENTRANK: Your rank is too low to kick this player. + NEGATIVEPOWER: You cannot kick that member until their power is positive. + TOKICK: to kick someone from the faction + FORKICK: for kicking someone from the faction + FACTION: '%s kicked %s from the faction! :O' + KICKS: You kicked %s from the faction %s! + KICKED: '%s kicked you from %s! :O' + LIST: + FACTIONLIST: 'Faction List ' + TOLIST: to list the factions + FORLIST: for listing the factions + ONLINEFACTIONLESS: 'Online factionless: ' + LOCK: + LOCKED: Factions is now locked + UNLOCKED: Factions in now unlocked + MAP: + TOSHOW: to show the map + FORSHOW: for showing the map + UPDATE: + ENABLED: Map auto update ENABLED. + DISABLED: Map auto update DISABLED. + MOD: + CANDIDATES: 'Players you can promote: ' + CLICKTOPROMOTE: 'Click to promote ' + NOTMEMBER: '%s is not a member in your faction.' + NOTADMIN: You are not the faction admin. + SELF: The target player musn't be yourself. + TARGETISADMIN: The target player is a faction admin. Demote them first. + REVOKES: You have removed moderator status from %s. + REVOKED: '%s is no longer moderator in your faction.' + PROMOTES: '%s was promoted to moderator in your faction.' + PROMOTED: You have promoted %s to moderator. + MODIFYPOWER: + ADDED: 'Added %f power to %s. New total rounded power: %d' + MONEY: + SHORT: faction money commands + LONG: The faction money commands. + MONEYBALANCE: + SHORT: show faction balance + MONEYDEPOSIT: + SHORT: deposit money + DEPOSITED: '%s deposited %s in the faction bank: %s' + MONEYTRANSFERFF: + SHORT: transfer f -> f + TRANSFER: '%s transferred %s from the faction "%s" to the faction "%s"' + MONEYTRANSFERFP: + SHORT: transfer f -> p + TRANSFER: '%s transferred %s from the faction "%s" to the player "%s"' + MONEYTRANSFERPF: + SHORT: transfer p -> f + TRANSFER: '%s transferred %s from the player "%s" to the faction "%s"' + MONEYWITHDRAW: + SHORT: withdraw money + WITHDRAW: '%s withdrew %s from the faction bank: %s' + OPEN: + TOOPEN: to open or close the faction + FOROPEN: for opening or closing the faction + OPEN: open + CLOSED: closed + CHANGES: '%s changed the faction to %s.' + CHANGED: The faction %s is now %s + OWNER: + DISABLED: Sorry, but owned areas are disabled on this server. + LIMIT: Sorry, but you have reached the server's limit of %d owned areas per faction. + WRONGFACTION: This land is not claimed by your faction, so you can't set ownership of it. + NOTCLAIMED: This land is not claimed by a faction. Ownership is not possible. + NOTMEMBER: '%s is not a member of this faction.' + CLEARED: You have cleared ownership for this claimed area. + REMOVED: You have removed ownership of this claimed land from %s. + TOSET: to set ownership of claimed land + FORSET: for setting ownership of claimed land + ADDED: You have added %s to the owner list for this claimed land. + OWNERLIST: + DISABLED: Sorry, but owned areas are disabled on this server. + WRONGFACTION: This land is not claimed by your faction. + NOTCLAIMED: This land is not claimed by any faction, thus no owners. + NONE: No owners are set here; everyone in the faction has access. + OWNERS: 'Current owner(s) of this land: %s' + POWER: + TOSHOW: to show player power info + FORSHOW: for showing player power info + POWER: '%s - Power / Maxpower: %d / %d %s' + BONUS: ' (bonus: ' + PENALTY: ' (penalty: ' + POWERBOOST: + HELP: + '1': You must specify "p" or "player" to target a player or "f" or "faction" to target a faction. + '2': ex. /f powerboost p SomePlayer 0.5 -or- /f powerboost f SomeFaction -5 + INVALIDNUM: You must specify a valid numeric value for the power bonus/penalty amount. + PLAYER: Player "%s" + FACTION: Faction "%s" + BOOST: %s now has a power bonus/penalty of %d to min and max power levels. + BOOSTLOG: '%s has set the power bonus/penalty for %s to %d.' + RELOAD: + TIME: conf.json をリロードしました・%dミリ秒〜. + SAFEUNCLAIMALL: + SHORT: Unclaim all safezone land + UNCLAIMED: You unclaimed ALL safe zone land. + UNCLAIMEDLOG: '%s unclaimed all safe zones.' + SAVEALL: Factions saved to disk! + SETFWARP: + NOTCLAIMED: You can only set warps in your faction territory. + LIMIT: Your Faction already has the max amount of warps set (%d). + SET: Set warp %s to your location. + TOSET: to set warp + FORSET: for setting warp + SETHOME: + DISABLED: 党派ホームは禁止されました・ + NOTCLAIMED: Sorry, your faction home can only be set inside your own claimed territory. + TOSET: to set the faction home + FORSET: for setting the faction home + SET: '%s set the home for your faction. You can now use:' + SETOTHER: You have set the home for the %s faction. + SHOW: + TOSHOW: to show faction information + FORSHOW: for showing faction information + DESCRIPTION: 'Description: %s' + PEACEFUL: This faction is Peaceful + PERMANENT: This faction is permanent, remaining even with no members. + JOINING: 'Joining: %s ' + INVITATION: invitation is required + UNINVITED: no invitation is needed + POWER: 'Land / Power / Maxpower: %d/%d/%d %s' + BONUS: ' (bonus: ' + PENALTY: ' (penalty: ' + DEPRECIATED: (%s depreciated) + LANDVALUE: 'トータル地価: %s%s' + BANKCONTAINS: '残高: %s' + ALLIES: 'Allies: ' + ENEMIES: 'Enemies: ' + MEMBERSONLINE: 'Members online: ' + MEMBERSOFFLINE: 'Members offline: ' + SHOWINVITES: + PENDING: 'Players with pending invites: ' + CLICKTOREVOKE: Click to revoke invite for %s + STATUS: + FORMAT: '%s パワー:%s 最終オンライン:%s' + ONLINE: オンライン + AGOSUFFIX: '間・' + TAG: + TAKEN: That tag is already taken + TOCHANGE: to change the faction tag + FORCHANGE: for changing the faction tag + FACTION: '%s changed your faction tag to %s' + CHANGED: 党派「%s」は名が%sに変わりました・ + TITLE: + TOCHANGE: to change a players title + FORCHANGE: for changing a players title + CHANGED: '%sはタイトルが変わりました: %s' + UNCLAIM: + SAFEZONE: + SUCCESS: この安全地帯は原に変わりました・ + NOPERM: This is a safe zone. You lack permissions to unclaim. + WARZONE: + SUCCESS: この戦場は原に変わりました・ + NOPERM: This is a war zone. You lack permissions to unclaim. + UNCLAIMED: '%s unclaimed some of your land.' + UNCLAIMS: You unclaimed this land. + LOG: '%s unclaimed land at (%s) from the faction: %s' + WRONGFACTION: You don't own this land. + TOUNCLAIM: to unclaim this land + FORUNCLAIM: for unclaiming this land + FACTIONUNCLAIMED: '%s unclaimed some land.' + UNCLAIMALL: + TOUNCLAIM: to unclaim all faction land + FORUNCLAIM: for unclaiming all faction land + UNCLAIMED: '%s unclaimed ALL of your faction''s land.' + LOG: '%s unclaimed everything for the faction: %s' + VERSION: + VERSION: 現在バーション %s + WARUNCLAIMALL: + SHORT: unclaim all warzone land + SUCCESS: You unclaimed ALL war zone land. + LOG: '%s unclaimed all war zones.' + RELATIONS: + ALLTHENOPE: いいえ!出来ません・ + MORENOPE: いいえ・自分は自分には関係出来ません・ + ALREADYINRELATIONSHIP: %sの関係はもうありますよ・ + TOMARRY: 関係は変わり + FORMARRY: 関係は変わった + MUTUAL: Your faction is now %s to %s + PEACEFUL: This will have no effect while your faction is peaceful. + PEACEFULOTHER: This will have no effect while their faction is peaceful. + PROPOSAL: + '1': '%s wishes to be your %s' + '2': Type /%s %s %s to accept. + SENT: '%s were informed that you wish to be %s' +command: + convert: + backend: + running: そのバックエンドは使用中です・ + invalid: バックエンドは不正です・ + help: + invitations: 'You might want to close it and use invitations:' +GENERIC: + ASKYOURLEADER: ' Ask your boss to:' + YOUSHOULD: 'You should:' + YOUMAYWANT: 'You may want to: ' + SERVERADMIN: サーバアドミン + DISABLED: ディセーブル + ENABLED: エネーブル + CONSOLEONLY: プレーヤはそのコマンド使用出来ませんよ・ + TRASLATION: + VERSION: 翻訳:%s・%s「%s」%s + CONTRIBUTORS: 翻訳者:%s + RESPONSIBLE: 翻訳の主任:%s +RELATION: + MEMBER: 員 + ALLY: 連盟 + NEUTRAL: 中立 + ENEMY: 敵 +NOPAGES: 申し訳ありません・ページはありません・ +INVALIDPAGE: 指定ページは不正です・1から%dまで・ + +title: '&b党派 &0|&r' +wilderness: '&2原' +wilderness-description: ' ' +warzone: '&4戦場' +warzone-description: 安全じゃない地帯 +safezone: '&6安全地帯' +safezone-description: プレーヤコンバットとモンスターはありません・ +toggle-sb: 今、スコアーボードは{value}になっています・ +default-prefix: '{relationcolor}[{faction}] &r' diff --git a/cartels-master@e4f5c2ecec5/src/main/resources/plugin.yml b/cartels-master@e4f5c2ecec5/src/main/resources/plugin.yml new file mode 100644 index 0000000..c635b06 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/resources/plugin.yml @@ -0,0 +1,277 @@ +name: Factions +version: ${project.version} +main: com.massivecraft.factions.P +authors: [Olof Larsson, Brett Flannigan, drtshock, Presidentx, Teddeh] +depend: [Core] +softdepend: [PlayerVaults, PermissionsEx, Permissions, Essentials, EssentialsChat, HeroChat, iChat, LocalAreaChat, LWC, nChat, ChatManager, CAPI, AuthMe, Vault, Spout, WorldEdit, WorldGuard, AuthDB, CaptureThePoints, CombatTag, dynmap] +commands: + cartels: + description: Reference command for Cartels. + aliases: [c, cartel, f, faction, factions] +permissions: + factions.kit.admin: + description: All faction permissions. + children: + factions.kit.mod: true + factions.config: true + factions.lock: true + factions.reload: true + factions.save: true + factions.modifypower: true + factions.ahome: true + factions.setmaxvaults: true + factions.*: + description: This is just an alias for factions.kit.admin + children: + factions.kit.admin: true + factions.kit.mod: + description: All faction permissions but configuration and persistance. + children: + factions.kit.halfmod: true + factions.disband.any: true + factions.setpeaceful: true + factions.setpermanent: true + factions.setpermanentpower: true + factions.powerboost: true + factions.sethome.any: true + factions.money.*: true + factions.join.any: true + factions.join.others: true + factions.admin.any: true + factions.mod.any: true + factions.kit.halfmod: + description: Zones, bypassing, kicking, and chatspy + children: + factions.kit.fullplayer: true + factions.managesafezone: true + factions.managewarzone: true + factions.bypass: true + factions.kick.any: true + factions.ownershipbypass: true + factions.chatspy: true + factions.show.bypassexempt: true + factions.kit.fullplayer: + default: true + description: Can also create new factions. + children: + factions.kit.halfplayer: true + factions.create: true + factions.kit.halfplayer: + description: Can do all but create factions. + children: + factions.admin: true + factions.autoclaim: true + factions.chat: true + factions.claim: true + factions.claim.line: true + factions.claim.radius: true + factions.deinvite: true + factions.description: true + factions.disband: true + factions.help: true + factions.home: true + factions.invite: true + factions.join: true + factions.kick: true + factions.leave: true + factions.list: true + factions.map: true + factions.mod: true + factions.money.kit.standard: true + factions.noboom: true + factions.open: true + factions.owner: true + factions.ownerlist: true + factions.power: true + factions.power.any: true + factions.relation: true + factions.sethome: true + factions.show: true + factions.stuck: true + factions.tag: true + factions.title: true + factions.version: true + factions.unclaim: true + factions.unclaimall: true + factions.scoreboard: true + factions.showinvites: true + factions.seechunk: true + factions.monitorlogins: true + factions.top: true + factions.togglealliancechat: true + factions.vault: true + factions.admin: + description: hand over your admin rights + factions.admin.any: + description: give or revoke admin status for any player in any faction + factions.announce: + description: announce things to the peasants + factions.autoclaim: + description: auto-claim land as you walk around + factions.bypass: + description: enable admin bypass mode + factions.chat: + description: change chat mode + factions.chatspy: + description: enable admin chat spy mode + factions.claim: + description: claim land where you are standing + factions.claim.radius: + description: claim land in a large radius + factions.config: + description: change a conf.json setting + factions.create: + description: create a new faction + factions.deinvite: + description: remove a pending invitation + factions.description: + description: change the faction description + factions.disband: + description: disband a faction + factions.disband.any: + description: disband another faction + factions.help: + description: display a help page + factions.home: + description: teleport to the faction home + factions.invite: + description: invite a player to your faction + factions.join: + description: join a faction + factions.join.any: + description: join any faction, bypassing invitation process for closed factions + factions.join.others: + description: specify another player in the join command, to move them to the specified faction + factions.kick: + description: kick a player from the faction + factions.kick.any: + description: kick anyone from any faction + factions.leave: + description: leave your faction + factions.list: + description: see a list of the factions + factions.lock: + description: lock all write stuff + factions.managesafezone: + description: claim land as a safe zone and build/destroy within safe zones + factions.managewarzone: + description: claim land as a war zone and build/destroy within war zones + factions.map: + description: show the territory map, and set optional auto update + factions.mod: + description: give or revoke moderator rights + factions.mod.any: + description: give or revoke moderator rights for any player in any faction + factions.money.balance: + description: show your factions current money balance + factions.money.balance.any: + description: show money balance for factions other than your own + factions.money.deposit: + description: deposit money into a faction bank + factions.money.withdraw: + description: withdraw money from your faction bank + factions.money.withdraw.any: + description: withdraw money from your factions other than your own + factions.money.f2f: + description: transfer money from faction to faction + factions.money.f2p: + description: transfer money from faction to player + factions.money.p2f: + description: transfer money from player to faction + factions.money.kit.standard: + children: + factions.money.balance: true + factions.money.balance.any: true + factions.money.deposit: true + factions.money.withdraw: true + factions.money.f2f: true + factions.money.f2p: true + factions.money.p2f: true + factions.money.*: + children: + factions.money.kit.standard: true + factions.money.balance.any: true + factions.money.deposit: true + factions.money.withdraw: true + factions.money.withdraw.any: true + factions.money.f2f: true + factions.money.f2p: true + factions.money.p2f: true + factions.noboom: + description: toggle explosions (peaceful factions only) + factions.open: + description: switch if invitation is required to join + factions.owner: + description: set ownership of claimed land + factions.ownerlist: + description: list owner(s) of this claimed land + factions.ownershipbypass: + description: bypass ownership restrictions within own faction's territory + factions.setpeaceful: + description: designate a faction as peaceful + factions.setpermanent: + description: designate a faction as permanent + factions.setpermanentpower: + description: set permanent power for a faction + factions.stuck: + description: teleports player outside a faction + factions.power: + description: show player power info + factions.power.any: + description: view an other players power level + factions.powerboost: + description: apply permanent power bonus/penalty to specified player or faction + factions.relation: + description: set relation wish to another faction + factions.reload: + description: reload data file(s) from disk + factions.save: + description: save all data to disk + factions.sethome: + description: set the faction home + factions.sethome.any: + description: set faction home for another faction + factions.show: + description: show faction information + factions.show.bypassexempt: + description: show exempt faction information + factions.tag: + description: change the faction tag + factions.title: + description: set or remove a players title + factions.version: + description: see the version of the plugin + factions.unclaim: + description: unclaim the land where you are standing + factions.unclaimall: + description: unclaim all of your factions land + factions.scoreboard: + description: ability to toggle scoreboards + factions.showinvites: + description: show pending invites to your faction + factions.seechunk: + description: see the chunk you stand in + factions.setwarp: + description: set a warp for your faction + factions.warp: + description: access your faction warps + factions.modifypower: + description: modify other player's power + factions.monitorlogins: + description: monitor join and leaves of faction members + factions.claim.line: + description: claim in a line + factions.top: + description: sort factions + factions.togglealliancechat: + description: toggle alliance chat on and off + factions.dontlosepoweroffline: + description: Don't lose power for being offline. + factions.ahome: + description: Ability to send players to their faction home. + factions.autoleavebypass: + description: Bypass autoleave. + factions.vault: + description: Access faction vault. + factions.setmaxvault: + description: Set a faction's max vaults. \ No newline at end of file diff --git a/common-master@c5eba833390/.gitignore b/common-master@c5eba833390/.gitignore new file mode 100644 index 0000000..ad7f541 --- /dev/null +++ b/common-master@c5eba833390/.gitignore @@ -0,0 +1,8 @@ + +\.idea/ + +target/classes/ + +target/ + +*.iml \ No newline at end of file diff --git a/common-master@c5eba833390/README.md b/common-master@c5eba833390/README.md new file mode 100644 index 0000000..91b5899 --- /dev/null +++ b/common-master@c5eba833390/README.md @@ -0,0 +1,4 @@ +# GTMCore +Link: https://circleci.com/gh/GrandTheftMinecart/GTMCore +
+Latest Artifact: https://github.com/GrandTheftMinecart/GTMCore/releases/latest \ No newline at end of file diff --git a/common-master@c5eba833390/pom.xml b/common-master@c5eba833390/pom.xml new file mode 100644 index 0000000..ba96ef0 --- /dev/null +++ b/common-master@c5eba833390/pom.xml @@ -0,0 +1,136 @@ + + + 4.0.0 + + net.grandtheftmc + common + 1.1.6 + Common + + + + nexus-release + http://nexus.grandtheftmc.net/content/repositories/releases + + + + + + nexus-release + Internal Releases + http://nexus.grandtheftmc.net/content/repositories/releases + + + nexus-snapshot + Internal Snapshots + http://nexus.grandtheftmc.net/content/repositories/snapshots + + + + + + 1 + Presidentx + + Owner + Developer + + + + + 2 + MrTeddeh + + Senior Developer + + + + + 3 + Tim + + Developer + + + + + 4 + ThatAbstractWolf + + Developer + + + + + + + redis.clients + jedis + LATEST + compile + + + + com.google.code.gson + gson + 2.8.0 + + + + com.google.guava + guava + 21.0 + + + + + UTF-8 + 1.8 + 1.8 + + + + + + org.apache.maven.plugins + maven-shade-plugin + 3.0.0 + + Common + + + + package + + shade + + + + + + + + org.sonatype.plugins + nexus-staging-maven-plugin + 1.6.8 + true + + + default-deploy + deploy + + deploy + + + + + nexus + http://nexus.grandtheftmc.net/ + true + + + + + \ No newline at end of file diff --git a/common-master@c5eba833390/src/main/java/net/grandtheftmc/ServerType.java b/common-master@c5eba833390/src/main/java/net/grandtheftmc/ServerType.java new file mode 100644 index 0000000..50fc97a --- /dev/null +++ b/common-master@c5eba833390/src/main/java/net/grandtheftmc/ServerType.java @@ -0,0 +1,33 @@ +package net.grandtheftmc; + +/** + * Created by Luke Bingham on 19/08/2017. + */ +public enum ServerType { + HUB("hub", true), + GTM("gtm", true), + VICE("vice", true), + CREATIVE("creative", true), + + PROXY("proxy", false), + OPERATOR("operator", false), + + GLOBAL("global", false), + ; + + private final String serverName; + private final boolean playable; + + ServerType(String serverName, boolean playable) { + this.serverName = serverName; + this.playable = playable; + } + + public String getServerName() { + return serverName; + } + + public boolean isPlayable() { + return playable; + } +} diff --git a/common-master@c5eba833390/src/main/java/net/grandtheftmc/ServerTypeId.java b/common-master@c5eba833390/src/main/java/net/grandtheftmc/ServerTypeId.java new file mode 100644 index 0000000..928be90 --- /dev/null +++ b/common-master@c5eba833390/src/main/java/net/grandtheftmc/ServerTypeId.java @@ -0,0 +1,26 @@ +package net.grandtheftmc; + +/** + * Created by Luke Bingham on 19/08/2017. + */ +public class ServerTypeId { + private final ServerType serverType; + private final int id; + + public ServerTypeId(ServerType serverType, int id) { + this.serverType = serverType; + this.id = id; + } + + public ServerType getServerType() { + return serverType; + } + + public int getId() { + return id; + } + + public boolean isOperator() { + return serverType == ServerType.OPERATOR; + } +} diff --git a/common-master@c5eba833390/src/main/java/net/grandtheftmc/jedis/JMessage.java b/common-master@c5eba833390/src/main/java/net/grandtheftmc/jedis/JMessage.java new file mode 100644 index 0000000..a1f7358 --- /dev/null +++ b/common-master@c5eba833390/src/main/java/net/grandtheftmc/jedis/JMessage.java @@ -0,0 +1,7 @@ +package net.grandtheftmc.jedis; + +/** + * Created by Luke Bingham on 19/08/2017. + */ +public interface JMessage { +} diff --git a/common-master@c5eba833390/src/main/java/net/grandtheftmc/jedis/JMessageListener.java b/common-master@c5eba833390/src/main/java/net/grandtheftmc/jedis/JMessageListener.java new file mode 100644 index 0000000..4d90c44 --- /dev/null +++ b/common-master@c5eba833390/src/main/java/net/grandtheftmc/jedis/JMessageListener.java @@ -0,0 +1,10 @@ +package net.grandtheftmc.jedis; + +import net.grandtheftmc.ServerTypeId; + +/** + * Created by Luke Bingham on 19/08/2017. + */ +public interface JMessageListener { + void onReceive(ServerTypeId sender, T message); +} diff --git a/common-master@c5eba833390/src/main/java/net/grandtheftmc/jedis/JMessageReader.java b/common-master@c5eba833390/src/main/java/net/grandtheftmc/jedis/JMessageReader.java new file mode 100644 index 0000000..917f1f5 --- /dev/null +++ b/common-master@c5eba833390/src/main/java/net/grandtheftmc/jedis/JMessageReader.java @@ -0,0 +1,88 @@ +package net.grandtheftmc.jedis; + +import com.google.gson.Gson; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import net.grandtheftmc.ServerType; +import net.grandtheftmc.ServerTypeId; +import redis.clients.jedis.JedisPubSub; + +import java.util.List; + +/** + * Created by Luke Bingham on 19/08/2017. + */ +public final class JMessageReader extends JedisPubSub { + + private final ServerTypeId serverTypeId; + private final Gson gson = new Gson(); + private final JsonParser jsonParser = new JsonParser(); + + public JMessageReader(ServerTypeId serverTypeId) { + this.serverTypeId = serverTypeId; + } + + @Override + public final void onMessage(String channel, String message) { + if (!isValid(message)) return; + + try { + JsonObject label = (JsonObject) jsonParser.parse(message); + String messageName = label.get("name").getAsString(); + int senderId = label.get("senderId").getAsInt(); + String senderType = label.get("senderType").getAsString(); + int recipientId = label.get("recipientId").getAsInt(); + String recipientType = label.get("recipientType").getAsString(); + + if(!"GLOBAL".equalsIgnoreCase(recipientType)) { + if(!this.serverTypeId.getServerType().name().equals(recipientType)) return; + if(recipientId != -1) if(this.serverTypeId.getId() != recipientId) return; + } +// if (recipient.equalsIgnoreCase("all") || recipient.equalsIgnoreCase(serverName)) { + Class messageClass = (Class) Class.forName(messageName); + JMessage msg = gson.fromJson(label.getAsJsonObject("content"), messageClass); + + List listenerList = JedisModule.listeners.get(messageClass); + if (listenerList != null) listenerList.forEach(c -> c.onReceive(new ServerTypeId(ServerType.valueOf(senderType), senderId), msg)); +// } + } + catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public final void onPMessage(String s, String s1, String s2) { + + } + + @Override + public final void onSubscribe(String s, int i) { + + } + + @Override + public final void onUnsubscribe(String s, int i) { + + } + + @Override + public final void onPUnsubscribe(String s, int i) { + + } + + @Override + public final void onPSubscribe(String s, int i) { + + } + + private boolean isValid(String str) { + try { + jsonParser.parse(str); + return true; + } + catch (Exception e) { + return false; + } + } +} diff --git a/common-master@c5eba833390/src/main/java/net/grandtheftmc/jedis/JMessageWriter.java b/common-master@c5eba833390/src/main/java/net/grandtheftmc/jedis/JMessageWriter.java new file mode 100644 index 0000000..42ef7cc --- /dev/null +++ b/common-master@c5eba833390/src/main/java/net/grandtheftmc/jedis/JMessageWriter.java @@ -0,0 +1,59 @@ +package net.grandtheftmc.jedis; + +import com.google.gson.Gson; +import com.google.gson.JsonObject; +import net.grandtheftmc.ServerType; +import net.grandtheftmc.ServerTypeId; +import redis.clients.jedis.Jedis; +import redis.clients.jedis.JedisPool; + +/** + * Created by Luke Bingham on 19/08/2017. + */ +public final class JMessageWriter { + + private final ServerTypeId serverTypeId; + private final Gson gson = new Gson(); + private final JedisPool pool; + private final JedisChannel channel; + + public JMessageWriter(ServerTypeId serverTypeId, JedisPool pool, JedisChannel channel) { + this.serverTypeId = serverTypeId; + this.pool = pool; + this.channel = channel; + } + + public final void publishPacket(Object message, ServerTypeId recipient) { + JsonObject label = new JsonObject(); + label.addProperty("name", message.getClass().getName()); + label.addProperty("senderId", serverTypeId.getId()); + label.addProperty("senderType", serverTypeId.getServerType().name()); + label.addProperty("recipientId", recipient.getId()); + label.addProperty("recipientType", recipient.getServerType().name()); + label.add("content", gson.toJsonTree(message)); + + try (Jedis jedis = pool.getResource()) { + jedis.publish(channel.getChannel(), label.toString()); + } + catch (Exception e) { + e.printStackTrace(); + } + } + + public final void publishPacket(Object message) { + JsonObject label = new JsonObject(); + label.addProperty("name", message.getClass().getName()); + label.addProperty("senderId", serverTypeId.getId()); + label.addProperty("senderType", serverTypeId.getServerType().name()); + label.addProperty("recipientId", -1); + label.addProperty("recipientType", ServerType.GLOBAL.name()); + label.add("content", gson.toJsonTree(message)); + + try (Jedis jedis = pool.getResource()) { + jedis.publish(channel.getChannel(), label.toString()); + } + catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/common-master@c5eba833390/src/main/java/net/grandtheftmc/jedis/JedisChannel.java b/common-master@c5eba833390/src/main/java/net/grandtheftmc/jedis/JedisChannel.java new file mode 100644 index 0000000..a2d2537 --- /dev/null +++ b/common-master@c5eba833390/src/main/java/net/grandtheftmc/jedis/JedisChannel.java @@ -0,0 +1,22 @@ +package net.grandtheftmc.jedis; + +/** + * Created by Luke Bingham on 19/08/2017. + */ +public enum JedisChannel { + GLOBAL("global_network"), + SERVER_QUEUE("server_queue"), + DEV("dev"), + WATCHDAWG("watchdawg"), + ; + + private String channel; + + JedisChannel(String channel) { + this.channel = channel; + } + + public String getChannel() { + return channel; + } +} diff --git a/common-master@c5eba833390/src/main/java/net/grandtheftmc/jedis/JedisManager.java b/common-master@c5eba833390/src/main/java/net/grandtheftmc/jedis/JedisManager.java new file mode 100644 index 0000000..2bb370e --- /dev/null +++ b/common-master@c5eba833390/src/main/java/net/grandtheftmc/jedis/JedisManager.java @@ -0,0 +1,30 @@ +package net.grandtheftmc.jedis; + +import net.grandtheftmc.ServerType; +import net.grandtheftmc.ServerTypeId; + +import java.util.HashMap; + +/** + * Created by Luke Bingham on 19/08/2017. + */ +public class JedisManager { + + private final HashMap jedisModules; + + public JedisManager() { + this.jedisModules = new HashMap(); + } + + public JedisModule getModule(JedisChannel channel) { + return this.jedisModules.getOrDefault(channel, null); + } + + public void initModule(ServerTypeId serverTypeId, JedisChannel channel, String vlan, int port, String password) { + this.jedisModules.putIfAbsent(channel, new JedisModule(serverTypeId, channel, vlan, port, password)); + } + + public HashMap getJedisModules() { + return this.jedisModules; + } +} diff --git a/common-master@c5eba833390/src/main/java/net/grandtheftmc/jedis/JedisModule.java b/common-master@c5eba833390/src/main/java/net/grandtheftmc/jedis/JedisModule.java new file mode 100644 index 0000000..50bce14 --- /dev/null +++ b/common-master@c5eba833390/src/main/java/net/grandtheftmc/jedis/JedisModule.java @@ -0,0 +1,98 @@ +package net.grandtheftmc.jedis; + +import com.google.common.collect.Lists; +import com.google.gson.Gson; +import net.grandtheftmc.ServerType; +import net.grandtheftmc.ServerTypeId; +import redis.clients.jedis.Jedis; +import redis.clients.jedis.JedisPool; +import redis.clients.jedis.JedisPoolConfig; + +import java.util.HashMap; +import java.util.List; + +/** + * Created by Luke Bingham on 19/08/2017. + */ +public class JedisModule { + private final Gson gson = new Gson(); + private JedisPool jedisPool; + private JMessageReader reader; + private JMessageWriter writer; + private final JedisChannel channel; + + protected static final HashMap, List> listeners; + + static { + listeners = new HashMap<>(); + } + + public JedisModule(ServerTypeId serverTypeId, JedisChannel channel, String vlan, int port, String password) { + this.channel = channel; + this.connect(serverTypeId, channel, vlan, port, password); + } + + public final void connect(ServerTypeId serverTypeId, JedisChannel channel, String vlan, int port, String password) { + this.jedisPool = new JedisPool(new JedisPoolConfig(), vlan, port, 5000, password); + + reader = new JMessageReader(serverTypeId); + writer = new JMessageWriter(serverTypeId, jedisPool, channel); + + new Thread(() -> { + try (Jedis j = getJedisPool().getResource()) { + j.subscribe(reader, channel.getChannel()); + } + catch (Exception e) { + e.printStackTrace(); + } + }).start(); + } + + /** + * This will send a message to the given server. + * + * @param message - The message a' server will receive. + * @param serverTypeId - Server to send the message to. + */ + public final void sendMessage(Object message, ServerTypeId serverTypeId) { + writer.publishPacket(message, serverTypeId); + } + + /** + * This will send a message to all servers including Proxy and Operator. + * + * @param message - The message all servers will receive. + */ + public final void sendMessage(Object message) { + writer.publishPacket(message); + } + + public final void disable() { + if(reader != null) { + if (reader.isSubscribed()) + reader.unsubscribe(); + } + + if(jedisPool != null) + jedisPool.destroy(); + } + + public final void disconnect() { + this.disable(); + } + + public final JedisPool getJedisPool() { + return jedisPool; + } + + public final void registerListener(Class msg, JMessageListener listener) { + if (listeners.containsKey(msg)) { + listeners.get(msg).add(listener); + } + else { + List list = Lists.newArrayList(); + list.add(listener); + listeners.put(msg, list); + } + } +} diff --git a/common-master@c5eba833390/src/main/java/net/grandtheftmc/jedis/message/FindPlayerMessage.java b/common-master@c5eba833390/src/main/java/net/grandtheftmc/jedis/message/FindPlayerMessage.java new file mode 100644 index 0000000..f391280 --- /dev/null +++ b/common-master@c5eba833390/src/main/java/net/grandtheftmc/jedis/message/FindPlayerMessage.java @@ -0,0 +1,15 @@ +package net.grandtheftmc.jedis.message; + +import net.grandtheftmc.jedis.JMessage; + +import java.util.UUID; + +/** + * Created by Luke Bingham on 19/08/2017. + */ +public class FindPlayerMessage implements JMessage { + + public FindPlayerMessage() { + //TODO + } +} diff --git a/common-master@c5eba833390/src/main/java/net/grandtheftmc/jedis/message/SendPlayerMessage.java b/common-master@c5eba833390/src/main/java/net/grandtheftmc/jedis/message/SendPlayerMessage.java new file mode 100644 index 0000000..1420148 --- /dev/null +++ b/common-master@c5eba833390/src/main/java/net/grandtheftmc/jedis/message/SendPlayerMessage.java @@ -0,0 +1,7 @@ +package net.grandtheftmc.jedis.message; + +/** + * Created by Luke Bingham on 20/08/2017. + */ +public class SendPlayerMessage { +} diff --git a/common-master@c5eba833390/src/main/java/net/grandtheftmc/jedis/message/ServerJoinRequestMessage.java b/common-master@c5eba833390/src/main/java/net/grandtheftmc/jedis/message/ServerJoinRequestMessage.java new file mode 100644 index 0000000..9f1f02a --- /dev/null +++ b/common-master@c5eba833390/src/main/java/net/grandtheftmc/jedis/message/ServerJoinRequestMessage.java @@ -0,0 +1,28 @@ +package net.grandtheftmc.jedis.message; + +import net.grandtheftmc.ServerTypeId; +import net.grandtheftmc.jedis.JMessage; + +import java.util.UUID; + +/** + * Created by Luke Bingham on 20/08/2017. + */ +public class ServerJoinRequestMessage implements JMessage { + + private final UUID uniqueId; + private final ServerTypeId targetServer; + + public ServerJoinRequestMessage(UUID uniqueId, String rank, ServerTypeId targetServer) { + this.uniqueId = uniqueId; + this.targetServer = targetServer; + } + + public UUID getUniqueId() { + return uniqueId; + } + + public ServerTypeId getTargetServer() { + return targetServer; + } +} diff --git a/common-master@c5eba833390/src/main/java/net/grandtheftmc/jedis/message/ServerJoinStatusMessage.java b/common-master@c5eba833390/src/main/java/net/grandtheftmc/jedis/message/ServerJoinStatusMessage.java new file mode 100644 index 0000000..acbf94a --- /dev/null +++ b/common-master@c5eba833390/src/main/java/net/grandtheftmc/jedis/message/ServerJoinStatusMessage.java @@ -0,0 +1,34 @@ +package net.grandtheftmc.jedis.message; + +import net.grandtheftmc.ServerTypeId; +import net.grandtheftmc.jedis.JMessage; + +import java.util.UUID; + +/** + * Created by Luke Bingham on 20/08/2017. + */ +public class ServerJoinStatusMessage implements JMessage { + + private final UUID uniqueId; + private final ServerTypeId targetServer; + + public ServerJoinStatusMessage(UUID uniqueId, String rank, ServerTypeId targetServer) { + this.uniqueId = uniqueId; + this.targetServer = targetServer; + } + + public UUID getUniqueId() { + return uniqueId; + } + + public ServerTypeId getTargetServer() { + return targetServer; + } + + public enum Status { + ERROR, + FULL, + ; + } +} diff --git a/common-master@c5eba833390/src/main/java/net/grandtheftmc/jedis/message/ServerQueueMessage.java b/common-master@c5eba833390/src/main/java/net/grandtheftmc/jedis/message/ServerQueueMessage.java new file mode 100644 index 0000000..07d500a --- /dev/null +++ b/common-master@c5eba833390/src/main/java/net/grandtheftmc/jedis/message/ServerQueueMessage.java @@ -0,0 +1,35 @@ +package net.grandtheftmc.jedis.message; + +import net.grandtheftmc.ServerType; +import net.grandtheftmc.ServerTypeId; +import net.grandtheftmc.jedis.JMessage; + +import java.util.UUID; + +/** + * Created by Luke Bingham on 19/08/2017. + */ +public class ServerQueueMessage implements JMessage { + + private final UUID uniqueId; + private final String rank; + private final ServerTypeId targetServer; + + public ServerQueueMessage(UUID uniqueId, String rank, ServerTypeId targetServer) { + this.uniqueId = uniqueId; + this.rank = rank; + this.targetServer = targetServer; + } + + public UUID getUniqueId() { + return uniqueId; + } + + public String getRank() { + return rank; + } + + public ServerTypeId getTargetServer() { + return targetServer; + } +} diff --git a/common-master@c5eba833390/src/main/java/net/grandtheftmc/jedis/message/ServerQueueNotifyMessage.java b/common-master@c5eba833390/src/main/java/net/grandtheftmc/jedis/message/ServerQueueNotifyMessage.java new file mode 100644 index 0000000..2dab810 --- /dev/null +++ b/common-master@c5eba833390/src/main/java/net/grandtheftmc/jedis/message/ServerQueueNotifyMessage.java @@ -0,0 +1,34 @@ +package net.grandtheftmc.jedis.message; + +import net.grandtheftmc.ServerTypeId; +import net.grandtheftmc.jedis.JMessage; + +import java.util.UUID; + +/** + * Created by Luke Bingham on 19/08/2017. + */ +public class ServerQueueNotifyMessage implements JMessage { + + private final UUID uniqueId; + private final ServerTypeId targetServer; + private final int possition; + + public ServerQueueNotifyMessage(UUID uniqueId, ServerTypeId targetServer, int possition) { + this.uniqueId = uniqueId; + this.targetServer = targetServer; + this.possition = possition; + } + + public UUID getUniqueId() { + return uniqueId; + } + + public ServerTypeId getTargetServer() { + return targetServer; + } + + public int getPossition() { + return possition; + } +} diff --git a/common-master@c5eba833390/src/main/java/net/grandtheftmc/jedis/message/UserStateTransactionCheck.java b/common-master@c5eba833390/src/main/java/net/grandtheftmc/jedis/message/UserStateTransactionCheck.java new file mode 100644 index 0000000..2661df9 --- /dev/null +++ b/common-master@c5eba833390/src/main/java/net/grandtheftmc/jedis/message/UserStateTransactionCheck.java @@ -0,0 +1,34 @@ +package net.grandtheftmc.jedis.message; + +import java.util.UUID; + +import net.grandtheftmc.jedis.JMessage; + +public class UserStateTransactionCheck implements JMessage { + + /** The uuid of the user to check transactions for */ + private final UUID uuid; + + /** + * Construct a new UserStateTransactionCheck. + *

+ * This is forwarded to all servers and to force check for user state + * transactions for the given user. + *

+ * + * @param uuid - the uuid of the user to check transactions for + */ + public UserStateTransactionCheck(UUID uuid) { + this.uuid = uuid; + } + + /** + * Get the UUID of the user to check the user state transactions for. + * + * @return The UUID of the user to check the user state transactions in the + * database. + */ + public UUID getUUID() { + return uuid; + } +} diff --git a/common-master@c5eba833390/src/main/java/net/grandtheftmc/jedis/message/VoteNotificationMessage.java b/common-master@c5eba833390/src/main/java/net/grandtheftmc/jedis/message/VoteNotificationMessage.java new file mode 100644 index 0000000..4424f83 --- /dev/null +++ b/common-master@c5eba833390/src/main/java/net/grandtheftmc/jedis/message/VoteNotificationMessage.java @@ -0,0 +1,46 @@ +package net.grandtheftmc.jedis.message; + +import java.util.UUID; + +import net.grandtheftmc.jedis.JMessage; + +public class VoteNotificationMessage implements JMessage { + + /** The uuid of the user the vote notification is for */ + private final UUID uuid; + /** The message to pass along */ + private final String message; + + /** + * Construct a new VoteNotificationMessage. + *

+ * This is forwarded to all servers to let the user know that we have received their vote. + *

+ * + * @param uuid - the uuid of the user to notify + * @param message - the message to pass along + */ + public VoteNotificationMessage(UUID uuid, String message) { + this.uuid = uuid; + this.message = message; + } + + /** + * Get the UUID of the user that the vote notification is for. + * + * @return The UUID of the user that the vote notification is for. + */ + public UUID getUUID() { + return uuid; + } + + /** + * Get the message that should be passed along to this user. + * + * @return The message that should be displayed to the user. + */ + public String getMessage() { + return message; + } +} + diff --git a/common-master@c5eba833390/src/main/java/net/grandtheftmc/slack/Slack.java b/common-master@c5eba833390/src/main/java/net/grandtheftmc/slack/Slack.java new file mode 100644 index 0000000..954022f --- /dev/null +++ b/common-master@c5eba833390/src/main/java/net/grandtheftmc/slack/Slack.java @@ -0,0 +1,132 @@ +package net.grandtheftmc.slack; + +import com.google.gson.JsonObject; +import net.grandtheftmc.slack.attachment.SlackAttachment; +import net.grandtheftmc.slack.exception.SlackException; + +import java.io.BufferedReader; +import java.io.DataOutputStream; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.Proxy; +import java.net.URL; +import java.net.URLEncoder; + +/** + * Created by Luke Bingham on 05/09/2017. + */ +public class Slack { + + private static final String POST = "POST"; + private static final String PAYLOAD = "payload="; + private static final String UTF_8 = "UTF-8"; + + private final String service; + private final int timeout; + private final Proxy proxy; + + public Slack(String service) { + this(service, 5000); + } + + public Slack(String service, Proxy proxy) { + this(service, 5000, proxy); + } + + public Slack(String service, int timeout) { + this(service, timeout, Proxy.NO_PROXY); + } + + public Slack(String service, int timeout, Proxy proxy) { + this.timeout = timeout; + if (service == null) + throw new IllegalArgumentException("Missing WebHook URL Configuration @ SlackApi"); + + if (proxy == null) this.proxy = Proxy.NO_PROXY; + else this.proxy = proxy; + + this.service = service; + + } + + /** + * Prepare Message and send to Slack + */ + public static void send(SlackChannel channel, SlackHook hook, String... message) { + Slack api = new Slack(hook.getHook()); + StringBuilder msg = new StringBuilder(); + for(String str : message) msg.append(str).append("\n"); + api.call(new SlackMessage(channel.getChannelId(), hook.getName(), msg.toString())); + } + + /** + * Prepare Message and send to Slack + */ + public static void send(SlackChannel channel, SlackHook hook, SlackAttachment attachment, String... message) { + Slack api = new Slack(hook.getHook()); + StringBuilder msg = new StringBuilder(); + for(String str : message) msg.append(str).append("\n"); + api.call(new SlackMessage(channel.getChannelId(), hook.getName(), msg.toString()).addAttachments(attachment)); + } + + + + /** + * Prepare Message and send to Slack + */ + public static void send(SlackChannel channel, SlackHook hook, SlackAttachment attachment) { + Slack api = new Slack(hook.getHook()); + api.send(attachment.toJson()); + } + + /** + * Prepare Message and send to Slack + */ + public void call(SlackMessage message) { + if (message != null) { + this.send(message.prepare()); + } + } + + private String send(JsonObject message) { + HttpURLConnection connection = null; + try { + // Create connection + final URL url = new URL(this.service); + connection = (HttpURLConnection) url.openConnection(proxy); + connection.setRequestMethod(POST); + connection.setConnectTimeout(timeout); + connection.setUseCaches(false); + connection.setDoInput(true); + connection.setDoOutput(true); + + final String payload = PAYLOAD + URLEncoder.encode(message.toString(), UTF_8); + + // Send request + final DataOutputStream wr = new DataOutputStream(connection.getOutputStream()); + wr.writeBytes(payload); + wr.flush(); + wr.close(); + + // Get Response + final InputStream is = connection.getInputStream(); + final BufferedReader rd = new BufferedReader(new InputStreamReader(is)); + String line; + StringBuilder response = new StringBuilder(); + while ((line = rd.readLine()) != null) { + response.append(line); + response.append('\n'); + } + + rd.close(); + return response.toString(); + } catch (Exception e) { + throw new SlackException(e); + } finally { + if (connection != null) { + connection.disconnect(); + } + } + } +} diff --git a/common-master@c5eba833390/src/main/java/net/grandtheftmc/slack/SlackChannel.java b/common-master@c5eba833390/src/main/java/net/grandtheftmc/slack/SlackChannel.java new file mode 100644 index 0000000..b7f7c68 --- /dev/null +++ b/common-master@c5eba833390/src/main/java/net/grandtheftmc/slack/SlackChannel.java @@ -0,0 +1,27 @@ +package net.grandtheftmc.slack; + +/** + * Created by Luke Bingham on 29/08/2017. + */ +public enum SlackChannel { + + DEVELOP("#develop"), + DEVELOP_ALERTS("#develop_alerts"), + ENVIRONMENT("#environment"), + IMPORTANT("#important"), + PRODUCTION_ALERTS("#production_alerts"), + SENTRY("#sentry"), + TRELLO("#trello"), + + ; + + private String channelId; + + SlackChannel(String channelId) { + this.channelId = channelId; + } + + public String getChannelId() { + return channelId; + } +} diff --git a/common-master@c5eba833390/src/main/java/net/grandtheftmc/slack/SlackField.java b/common-master@c5eba833390/src/main/java/net/grandtheftmc/slack/SlackField.java new file mode 100644 index 0000000..8d29a5b --- /dev/null +++ b/common-master@c5eba833390/src/main/java/net/grandtheftmc/slack/SlackField.java @@ -0,0 +1,118 @@ +package net.grandtheftmc.slack; + +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; +import com.google.gson.JsonPrimitive; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by Luke Bingham on 05/09/2017. + */ +public class SlackField { + + private static final String TITLE = "title"; + private static final String VALUE = "value"; + private static final String SHORT = "short"; + private static final String MRKDWN_IN = "mrkdwn_in"; + private static final String FIELD_ALLOWS_MARKDOWN_REGEX = "^(pretext|text|title|fields|fallback)$"; + + private List allowMarkdown = null; + private boolean shorten = false; + private String title = null; + private String value = null; + + public void addAllowedMarkdown(String field) { + if (this.allowMarkdown == null) { + this.allowMarkdown = new ArrayList(); + } + + if (field.matches(FIELD_ALLOWS_MARKDOWN_REGEX)) { + this.allowMarkdown.add(field); + } else { + throw new IllegalArgumentException( + field + " is not allowed. Allowed: pretext, text, title, fields and fallback"); + } + } + + public boolean isShorten() { + return shorten; + } + + private JsonArray prepareMarkdown() { + JsonArray data = new JsonArray(); + for (String item : this.allowMarkdown) { + data.add(new JsonPrimitive(item)); + } + + return data; + } + + public void setAllowedMarkdown(ArrayList allowMarkdown) { + if (allowMarkdown != null) { + this.allowMarkdown = allowMarkdown; + } + } + + public SlackField setShorten(boolean shorten) { + this.shorten = shorten; + return this; + } + + public SlackField setTitle(String title) { + this.title = title; + return this; + } + + public SlackField setValue(String value) { + this.value = value; + return this; + } + + public JsonObject toJson() { + final JsonObject data = new JsonObject(); + data.addProperty(TITLE, title); + data.addProperty(VALUE, value); + data.addProperty(SHORT, shorten); + if (allowMarkdown != null && allowMarkdown.size() > 0) { + data.add(MRKDWN_IN, prepareMarkdown()); + } + + return data; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + final SlackField that = (SlackField) o; + + if (shorten != that.shorten) return false; + if (allowMarkdown != null ? !allowMarkdown.equals(that.allowMarkdown) : that.allowMarkdown != null) + return false; + if (title != null ? !title.equals(that.title) : that.title != null) return false; + return !(value != null ? !value.equals(that.value) : that.value != null); + + } + + @Override + public int hashCode() { + int result = allowMarkdown != null ? allowMarkdown.hashCode() : 0; + result = 31 * result + (shorten ? 1 : 0); + result = 31 * result + (title != null ? title.hashCode() : 0); + result = 31 * result + (value != null ? value.hashCode() : 0); + return result; + } + + @Override + public String toString() { + return "SlackField{" + + "allowMarkdown=" + allowMarkdown + + ", shorten=" + shorten + + ", title='" + title + '\'' + + ", value='" + value + '\'' + + '}'; + } +} diff --git a/common-master@c5eba833390/src/main/java/net/grandtheftmc/slack/SlackHook.java b/common-master@c5eba833390/src/main/java/net/grandtheftmc/slack/SlackHook.java new file mode 100644 index 0000000..8f2e2c3 --- /dev/null +++ b/common-master@c5eba833390/src/main/java/net/grandtheftmc/slack/SlackHook.java @@ -0,0 +1,26 @@ +package net.grandtheftmc.slack; + +/** + * Created by Luke Bingham on 29/08/2017. + */ +public enum SlackHook { + + MONTHLY_VOTES("Voters", "https://hooks.slack.com/services/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"), + SERVER_HEARTBEAT("Heartbeat", "https://hooks.slack.com/services/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"), + ; + + private final String name, hook; + + SlackHook(String name, String hook) { + this.name = name; + this.hook = hook; + } + + public String getName() { + return name; + } + + public String getHook() { + return hook; + } +} diff --git a/common-master@c5eba833390/src/main/java/net/grandtheftmc/slack/SlackMessage.java b/common-master@c5eba833390/src/main/java/net/grandtheftmc/slack/SlackMessage.java new file mode 100644 index 0000000..5a244f9 --- /dev/null +++ b/common-master@c5eba833390/src/main/java/net/grandtheftmc/slack/SlackMessage.java @@ -0,0 +1,218 @@ +package net.grandtheftmc.slack; + +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; +import net.grandtheftmc.slack.attachment.SlackAttachment; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by Luke Bingham on 05/09/2017. + */ +public class SlackMessage { + + private static final String CHANNEL = "channel"; + private static final String USERNAME = "username"; + private static final String HTTP = "http"; + private static final String ICON_URL = "icon_url"; + private static final String ICON_EMOJI = "icon_emoji"; + private static final String UNFURL_MEDIA = "unfurl_media"; + private static final String UNFURL_LINKS = "unfurl_links"; + private static final String TEXT = "text"; + private static final String ATTACHMENTS = "attachments"; + + private List attach = new ArrayList(); + private String channel = null; + private String icon = null; + private JsonObject slackMessage = new JsonObject(); + + private String text = null; + private String username = null; + + private boolean unfurlMedia = false; + private boolean unfurlLinks = false; + + public SlackMessage() { + } + + public SlackMessage(String text) { + this(null, null, text); + } + + public SlackMessage(String username, String text) { + this(null, username, text); + } + + public SlackMessage(String channel, String username, String text) { + if (channel != null) { + this.channel = channel; + } + + if (username != null) { + this.username = username; + } + + this.text = text; + } + + public SlackMessage addAttachments(SlackAttachment attach) { + this.attach.add(attach); + + return this; + } + + /** + * Convert SlackMessage to JSON + * + * @return JsonObject + */ + public JsonObject prepare() { + if (channel != null) { + slackMessage.addProperty(CHANNEL, channel); + } + + if (username != null) { + slackMessage.addProperty(USERNAME, username); + } + + if (icon != null) { + if (icon.contains(HTTP)) { + slackMessage.addProperty(ICON_URL, icon); + } else { + slackMessage.addProperty(ICON_EMOJI, icon); + } + } + + slackMessage.addProperty(UNFURL_MEDIA, unfurlMedia); + slackMessage.addProperty(UNFURL_LINKS, unfurlLinks); + + if (text == null) { + throw new IllegalArgumentException( + "Missing Text field @ SlackMessage"); + } else { + slackMessage.addProperty(TEXT, text); + } + + if (!attach.isEmpty()) { + slackMessage.add(ATTACHMENTS, this.prepareAttach()); + } + + return slackMessage; + } + + private JsonArray prepareAttach() { + final JsonArray attachs = new JsonArray(); + for (SlackAttachment attach : this.attach) { + attachs.add(attach.toJson()); + } + + return attachs; + } + + public SlackMessage removeAttachment(int index) { + this.attach.remove(index); + + return this; + } + + public SlackMessage setAttachments(List attach) { + this.attach = attach; + + return this; + } + + public SlackMessage setChannel(String channel) { + if (channel != null) { + this.channel = channel; + } + + return this; + } + + /** + * See more icons in http://www.emoji-cheat-sheet.com/ + * + * @param icon + * Avatar + * @return SlackMessage + */ + public SlackMessage setIcon(String icon) { + if (icon != null) { + this.icon = icon; + } + + return this; + } + + public SlackMessage setText(String message) { + if (message != null) { + this.text = message; + } + + return this; + } + + public SlackMessage setUsername(String username) { + if (username != null) { + this.username = username; + } + + return this; + } + + public SlackMessage setUnfurlMedia(boolean unfurlMedia) { + this.unfurlMedia = unfurlMedia; + + return this; + } + + public SlackMessage setUnfurlLinks(boolean unfurlLinks) { + this.unfurlLinks = unfurlLinks; + + return this; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + final SlackMessage that = (SlackMessage) o; + + if (unfurlMedia != that.unfurlMedia) return false; + if (unfurlLinks != that.unfurlLinks) return false; + if (attach != null ? !attach.equals(that.attach) : that.attach != null) return false; + if (channel != null ? !channel.equals(that.channel) : that.channel != null) return false; + if (icon != null ? !icon.equals(that.icon) : that.icon != null) return false; + if (text != null ? !text.equals(that.text) : that.text != null) return false; + return !(username != null ? !username.equals(that.username) : that.username != null); + + } + + @Override + public int hashCode() { + int result = attach != null ? attach.hashCode() : 0; + result = 31 * result + (channel != null ? channel.hashCode() : 0); + result = 31 * result + (icon != null ? icon.hashCode() : 0); + result = 31 * result + (text != null ? text.hashCode() : 0); + result = 31 * result + (username != null ? username.hashCode() : 0); + result = 31 * result + (unfurlMedia ? 1 : 0); + result = 31 * result + (unfurlLinks ? 1 : 0); + return result; + } + + @Override + public String toString() { + return "SlackMessage{" + + "attach=" + attach + + ", channel='" + channel + '\'' + + ", icon='" + icon + '\'' + + ", slackMessage=" + slackMessage + + ", text='" + text + '\'' + + ", username='" + username + '\'' + + ", unfurlMedia=" + unfurlMedia + + ", unfurlLinks=" + unfurlLinks + + '}'; + } +} diff --git a/common-master@c5eba833390/src/main/java/net/grandtheftmc/slack/action/SlackAction.java b/common-master@c5eba833390/src/main/java/net/grandtheftmc/slack/action/SlackAction.java new file mode 100644 index 0000000..4ddae04 --- /dev/null +++ b/common-master@c5eba833390/src/main/java/net/grandtheftmc/slack/action/SlackAction.java @@ -0,0 +1,91 @@ +package net.grandtheftmc.slack.action; + +import com.google.gson.JsonObject; + +/** + * Created by Luke Bingham on 05/09/2017. + */ +public class SlackAction { + private static final String NAME = "name"; + private static final String TEXT = "text"; + private static final String TYPE = "type"; + private static final String VALUE = "value"; + private static final String CONFIRM = "confirm"; + private static final String STYLE = "style"; + private static final String OPTIONS = "options"; + private static final String OPTION_GROUPS = "option_groups"; + private static final String DATA_SOURCE = "data_source"; + private static final String SELECTED_OPTIONS = "selected_options"; + private static final String MIN_QUERY_LENGTH = "min_query_length"; + + private String name; + private String text; + private SlackActionType type; + private String value; + private SlackActionStyle style; + + public SlackAction(String name, String text, SlackActionType type, String value) { + this.name = name; + this.text = text; + this.type = type; + this.value = value; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + + public SlackActionType getType() { + return type; + } + + public void setType(SlackActionType type) { + this.type = type; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + public SlackActionStyle getStyle() { + return style; + } + + public void setStyle(SlackActionStyle style) { + this.style = style; + } + + public JsonObject toJson() { + final JsonObject data = new JsonObject(); + data.addProperty(NAME, name); + data.addProperty(TEXT, text); + + if (type != null) { + data.addProperty(TYPE, type.getCode()); + } + + data.addProperty(VALUE, value); + + if (style != null) { + data.addProperty(STYLE, style.getCode()); + } + + return data; + } +} diff --git a/common-master@c5eba833390/src/main/java/net/grandtheftmc/slack/action/SlackActionStyle.java b/common-master@c5eba833390/src/main/java/net/grandtheftmc/slack/action/SlackActionStyle.java new file mode 100644 index 0000000..b2fca25 --- /dev/null +++ b/common-master@c5eba833390/src/main/java/net/grandtheftmc/slack/action/SlackActionStyle.java @@ -0,0 +1,20 @@ +package net.grandtheftmc.slack.action; + +/** + * Created by Luke Bingham on 05/09/2017. + */ +public enum SlackActionStyle { + DEFAULT("default"), + PRIMARY("primary"), + DANGER("danger"); + + private String code; + + SlackActionStyle(String code) { + this.code = code; + } + + public String getCode() { + return code; + } +} diff --git a/common-master@c5eba833390/src/main/java/net/grandtheftmc/slack/action/SlackActionType.java b/common-master@c5eba833390/src/main/java/net/grandtheftmc/slack/action/SlackActionType.java new file mode 100644 index 0000000..b07e6f2 --- /dev/null +++ b/common-master@c5eba833390/src/main/java/net/grandtheftmc/slack/action/SlackActionType.java @@ -0,0 +1,19 @@ +package net.grandtheftmc.slack.action; + +/** + * Created by Luke Bingham on 05/09/2017. + */ +public enum SlackActionType { + BUTTON("button"), + SELECT("select"); + + private String code; + + SlackActionType(String code) { + this.code = code; + } + + public String getCode() { + return code; + } +} diff --git a/common-master@c5eba833390/src/main/java/net/grandtheftmc/slack/attachment/SlackAttachment.java b/common-master@c5eba833390/src/main/java/net/grandtheftmc/slack/attachment/SlackAttachment.java new file mode 100644 index 0000000..f4486c5 --- /dev/null +++ b/common-master@c5eba833390/src/main/java/net/grandtheftmc/slack/attachment/SlackAttachment.java @@ -0,0 +1,362 @@ +package net.grandtheftmc.slack.attachment; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; +import com.google.gson.JsonPrimitive; +import net.grandtheftmc.slack.SlackField; +import net.grandtheftmc.slack.action.SlackAction; + +/** + * Created by Luke Bingham on 05/09/2017. + */ +public class SlackAttachment { + + private static final String HEX_REGEX = "^([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$"; + private static final String FALLBACK = "fallback"; + private static final String CALLBACK_ID = "callback_id"; + private static final String TEXT = "text"; + private static final String PRETEXT = "pretext"; + private static final String COLOR = "color"; + private static final String FIELDS = "fields"; + private static final String AUTHOR_NAME = "author_name"; + private static final String AUTHOR_LINK = "author_link"; + private static final String AUTHOR_ICON = "author_icon"; + private static final String TITLE = "title"; + private static final String TITLE_LINK = "title_link"; + private static final String IMAGE_URL = "image_url"; + private static final String THUMB_URL = "thumb_url"; + private static final String MRKDWN_IN = "mrkdwn_in"; + private static final String ACTIONS = "actions"; + private static final String FOOTER = "footer"; + private static final String STAMP = "ts"; + + private String fallback; + private String callbackId; + private String text; + private String pretext; + private String color; + private String authorName; + private String authorLink; + private String authorIcon; + private String title; + private String titleLink; + private String imageUrl; + private String thumbUrl; + private Set markdownAttributes = new HashSet(); + private List fields = new ArrayList(); + private List actions = new ArrayList(); + private String footer; + + public SlackAttachment() { + } + + public SlackAttachment(String fallback) { + this.fallback = fallback; + } + + public SlackAttachment addFields(SlackField field) { + this.fields.add(field); + + return this; + } + + public SlackAttachment addAction(SlackAction action) { + this.actions.add(action); + + return this; + } + + public SlackAttachment addMarkdownAttribute(String attr) { + this.markdownAttributes.add(attr); + + return this; + } + + private boolean isHex(String pair) { + return pair.matches(HEX_REGEX); + } + + private JsonArray prepareFields() { + final JsonArray data = new JsonArray(); + for (SlackField field : fields) { + data.add(field.toJson()); + } + + return data; + } + + private JsonArray prepareActions() { + final JsonArray data = new JsonArray(); + for (SlackAction action : actions) { + data.add(action.toJson()); + } + + return data; + } + + public SlackAttachment removeAction(int index) { + this.actions.remove(index); + + return this; + } + + public SlackAttachment setFooter(String footer) { + this.footer = footer; + + return this; + } + + public SlackAttachment removeFields(int index) { + this.fields.remove(index); + + return this; + } + + private JsonArray prepareMarkdownAttributes() { + final JsonArray data = new JsonArray(); + for (String attr : markdownAttributes) { + data.add(new JsonPrimitive(attr)); + } + + return data; + } + + public SlackAttachment removeMarkdownAttribute(String attr) { + this.markdownAttributes.remove(attr); + + return this; + } + + public SlackAttachment setColor(String color) { + if (color != null) { + if (color.charAt(0) == '#') { + if (!isHex(color.substring(1))) { + throw new IllegalArgumentException("Invalid Hex Color @ SlackAttachment"); + } + } else if (!color.matches("^(good|warning|danger)$")) { + throw new IllegalArgumentException("Invalid PreDefined Color @ SlackAttachment"); + } + } + + this.color = color; + + return this; + } + + public SlackAttachment setFallback(String fallback) { + this.fallback = fallback; + + return this; + } + + public SlackAttachment setCallbackId(String callbackId) { + this.callbackId = callbackId; + + return this; + } + + public SlackAttachment setFields(List fields) { + this.fields = fields; + + return this; + } + + public SlackAttachment setPretext(String pretext) { + this.pretext = pretext; + + return this; + } + + public SlackAttachment setText(String text) { + this.text = text; + + return this; + } + + public SlackAttachment setAuthorName(String authorName) { + this.authorName = authorName; + + return this; + } + + public SlackAttachment setAuthorLink(String authorLink) { + this.authorLink = authorLink; + + return this; + } + + public SlackAttachment setAuthorIcon(String authorIcon) { + this.authorIcon = authorIcon; + + return this; + } + + public SlackAttachment setTitle(String title) { + this.title = title; + + return this; + } + + public SlackAttachment setTitleLink(String titleLink) { + this.titleLink = titleLink; + + return this; + } + + public SlackAttachment setImageUrl(String imageUrl) { + this.imageUrl = imageUrl; + + return this; + } + + public SlackAttachment setThumbUrl(String thumbUrl) { + this.thumbUrl = thumbUrl; + + return this; + } + + public JsonObject toJson() { + JsonObject data = new JsonObject(); + + if (fallback == null) { + throw new IllegalArgumentException("Missing Fallback @ SlackAttachment"); + } else { + data.addProperty(FALLBACK, fallback); + } + + if (text != null) { + data.addProperty(TEXT, text); + } + + if (pretext != null) { + data.addProperty(PRETEXT, pretext); + } + + if (color != null) { + data.addProperty(COLOR, color); + } + + if (authorName != null) { + data.addProperty(AUTHOR_NAME, authorName); + } + + if (authorLink != null) { + data.addProperty(AUTHOR_LINK, authorLink); + } + + if (authorIcon != null) { + data.addProperty(AUTHOR_ICON, authorIcon); + } + + if (title != null) { + data.addProperty(TITLE, title); + } + + if (titleLink != null) { + data.addProperty(TITLE_LINK, titleLink); + } + + if (imageUrl != null) { + data.addProperty(IMAGE_URL, imageUrl); + } + + if (thumbUrl != null) { + data.addProperty(THUMB_URL, thumbUrl); + } + + if (markdownAttributes != null) { + data.add(MRKDWN_IN, prepareMarkdownAttributes()); + } + + if (fields != null && fields.size() > 0) { + data.add(FIELDS, prepareFields()); + } + + if (actions != null && actions.size() > 0) { + data.add(ACTIONS, prepareActions()); + + if (callbackId == null) { + throw new IllegalArgumentException("Missing Callback ID @ SlackAttachment"); + } else { + data.addProperty(CALLBACK_ID, callbackId); + } + } + + if(footer != null) { + data.addProperty(FOOTER, footer); + data.addProperty(STAMP, System.currentTimeMillis()); + } + + return data; + } + + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (o == null || getClass() != o.getClass()) + return false; + + SlackAttachment that = (SlackAttachment) o; + + if (fallback != null ? !fallback.equals(that.fallback) : that.fallback != null) + return false; + if (text != null ? !text.equals(that.text) : that.text != null) + return false; + if (pretext != null ? !pretext.equals(that.pretext) : that.pretext != null) + return false; + if (color != null ? !color.equals(that.color) : that.color != null) + return false; + if (authorName != null ? !authorName.equals(that.authorName) : that.authorName != null) + return false; + if (authorLink != null ? !authorLink.equals(that.authorLink) : that.authorLink != null) + return false; + if (authorIcon != null ? !authorIcon.equals(that.authorIcon) : that.authorIcon != null) + return false; + if (title != null ? !title.equals(that.title) : that.title != null) + return false; + if (titleLink != null ? !titleLink.equals(that.titleLink) : that.titleLink != null) + return false; + if (imageUrl != null ? !imageUrl.equals(that.imageUrl) : that.imageUrl != null) + return false; + if (thumbUrl != null ? !thumbUrl.equals(that.thumbUrl) : that.thumbUrl != null) + return false; + if (markdownAttributes != null ? !markdownAttributes.equals(that.markdownAttributes) + : that.markdownAttributes != null) + return false; + return !(fields != null ? !fields.equals(that.fields) : that.fields != null); + + } + + @Override + public int hashCode() { + int result = fallback != null ? fallback.hashCode() : 0; + result = 31 * result + (text != null ? text.hashCode() : 0); + result = 31 * result + (pretext != null ? pretext.hashCode() : 0); + result = 31 * result + (color != null ? color.hashCode() : 0); + result = 31 * result + (authorName != null ? authorName.hashCode() : 0); + result = 31 * result + (authorLink != null ? authorLink.hashCode() : 0); + result = 31 * result + (authorIcon != null ? authorIcon.hashCode() : 0); + result = 31 * result + (title != null ? title.hashCode() : 0); + result = 31 * result + (titleLink != null ? titleLink.hashCode() : 0); + result = 31 * result + (imageUrl != null ? imageUrl.hashCode() : 0); + result = 31 * result + (thumbUrl != null ? thumbUrl.hashCode() : 0); + result = 31 * result + (markdownAttributes != null ? markdownAttributes.hashCode() : 0); + result = 31 * result + (fields != null ? fields.hashCode() : 0); + return result; + } + + @Override + public String toString() { + return "SlackAttachment{" + "fallback='" + fallback + '\'' + ", text='" + text + '\'' + ", pretext='" + pretext + + '\'' + ", color='" + color + '\'' + ", authorName='" + authorName + '\'' + ", authorLink='" + + authorLink + '\'' + ", authorIcon='" + authorIcon + '\'' + ", title='" + title + '\'' + + ", titleLink='" + titleLink + '\'' + ", imageUrl='" + imageUrl + '\'' + ", thumbUrl='" + thumbUrl + + '\'' + ", markdownAttributes=" + markdownAttributes + ", fields=" + fields + '}'; + } +} diff --git a/common-master@c5eba833390/src/main/java/net/grandtheftmc/slack/exception/SlackException.java b/common-master@c5eba833390/src/main/java/net/grandtheftmc/slack/exception/SlackException.java new file mode 100644 index 0000000..544c73a --- /dev/null +++ b/common-master@c5eba833390/src/main/java/net/grandtheftmc/slack/exception/SlackException.java @@ -0,0 +1,11 @@ +package net.grandtheftmc.slack.exception; + +/** + * Created by Luke Bingham on 05/09/2017. + */ +public class SlackException extends RuntimeException { + + public SlackException(Throwable cause) { + super(cause); + } +} diff --git a/core-master@6ef85bb745a/.gitignore b/core-master@6ef85bb745a/.gitignore new file mode 100644 index 0000000..b1935ec --- /dev/null +++ b/core-master@6ef85bb745a/.gitignore @@ -0,0 +1,102 @@ + +\.idea/ + +target/classes/ + +target/ + +*.iml + +/bin/ +/build/ + +##### Gradle ##### +.gradle +# Ignore Gradle GUI config +gradle-app.setting + +# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) +!gradle-wrapper.jar + +# Cache of project +.gradletasknamecache + +# # Work around https://youtrack.jetbrains.com/issue/IDEA-116898 +# gradle/wrapper/gradle-wrapper.properties + +##### Eclipse ##### +.metadata +bin/ +tmp/ +*.tmp +*.bak +*.swp +*~.nib +local.properties +.settings/ +.loadpath +.recommenders + +.project + +# External tool builders +.externalToolBuilders/ + +# Locally stored "Eclipse launch configurations" +*.launch + +# PyDev specific (Python IDE for Eclipse) +*.pydevproject + +# CDT-specific (C/C++ Development Tooling) +.cproject + +# JDT-specific (Eclipse Java Development Tools) +.classpath + +# Java annotation processor (APT) +.factorypath + +# PDT-specific (PHP Development Tools) +.buildpath + +# sbteclipse plugin +.target + +# Tern plugin +.tern-project + +# TeXlipse plugin +.texlipse + +# STS (Spring Tool Suite) +.springBeans + +# Code Recommenders +.recommenders/ + +*.class + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files # +*.jar +*.war +*.ear + + +##### IntelliJ ##### +*.iml +*.ipr +*.iws +.idea/ + +##### NetBeans ##### +/.nb-gradle/ + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* + +##### MacOS ##### +.DS_Store diff --git a/core-master@6ef85bb745a/README.md b/core-master@6ef85bb745a/README.md new file mode 100644 index 0000000..61ae224 --- /dev/null +++ b/core-master@6ef85bb745a/README.md @@ -0,0 +1,5 @@ +# GTMCore +Link: https://circleci.com/gh/GrandTheftMinecart/GTMCore +
+Latest Artifact: https://github.com/GrandTheftMinecart/GTMCore/releases/latest +-- \ No newline at end of file diff --git a/core-master@6ef85bb745a/pom.xml b/core-master@6ef85bb745a/pom.xml new file mode 100644 index 0000000..d27402e --- /dev/null +++ b/core-master@6ef85bb745a/pom.xml @@ -0,0 +1,271 @@ + + 4.0.0 + + net.grandtheftmc + core + + 2.3.10 + Core + + + + jitpack.io + https://jitpack.io + + + citizens-repo + http://repo.citizensnpcs.co/ + + + worldedit-repo + http://maven.sk89q.com/repo/ + + + dmulloy2-repo + http://repo.dmulloy2.net/nexus/repository/public/ + + + nexus-release + https://nexus.grandtheftmc.net/content/repositories/releases/ + + + bstats-repo + http://repo.bstats.org/content/repositories/releases/ + + + + + + nexus-release + Internal Releases + https://nexus.grandtheftmc.net/content/repositories/releases/ + + + nexus-snapshot + Internal Snapshots + https://nexus.grandtheftmc.net/content/repositories/snapshots/ + + + + + + net.citizensnpcs + citizensapi + 2.0.22 + provided + + + org.apache.poi + poi-ooxml + 3.15 + + + net.gpedro.integrations.slack + slack-webhook + 1.3.0 + + + com.neovisionaries + nv-websocket-client + 2.3 + + + org.json + json + 20131018 + compile + + + org.spigotmc.1.12 + spigot + 1.12.0 + provided + + + com.github.j0ach1mmall3 + JLib + 1.10.0 + provided + + + us.myles + viaversion + 1.0.4 + provided + + + + com.github.j0ach1mmall3 + UltimateCosmetics + 1.0.0 + provided + + + com.sk89q.worldedit + worldedit-bukkit + 6.1.5 + provided + + + com.github.vexsoftware + votifier + LATEST + provided + + + com.gmail.filoghost.holographicdisplays + HolographicDisplays + 1.0.0 + provided + + + com.earth2me + Essentials + 2.0.0 + provided + + + com.zaxxer + HikariCP + 2.6.0 + + + com.comphenix.protocol + ProtocolLib + LATEST + provided + + + redis.clients + jedis + 2.8.0 + jar + compile + + + org.apache.commons + commons-pool2 + 2.4.2 + + + net.grandtheftmc + common + 1.1.6 + + + net.buycraft + BuycraftX + 10.3.0 + provided + + + io.sentry + sentry + 1.5.2 + compile + + + de.oppermann.bastian.safetrade + safetrade + 1.0.14 + provided + + + com.squareup.okhttp3 + okhttp + 3.9.0 + provided + + + org.slf4j + slf4j-simple + 1.7.13 + + + org.slf4j + slf4j-api + 1.7.13 + + + + + UTF-8 + 1.8 + 1.8 + + + + + + org.apache.maven.plugins + maven-shade-plugin + 3.0.0 + + + + org.apache.poi.poi-ooxml + net.grandtheftmc.core.shaded.org.apache.poi.poi-ooxml + + + net.gpedro.integrations.slack.slack-webhook + net.grandtheftmc.core.shaded.net.gpedro.integrations.slack.slack-webhookl + + + redis.clients.jedis + net.grandtheftmc.core.shaded.redis.clients.jedis + + + org.apache.commons.pool + net.grandtheftmc.core.shaded.org.apache.commons.pool + + + com.neovisionaries.nv-websocket-client + net.grandtheftmc.core.shaded.com.neovisionaries.nv-websocket-client + + + redis.clients.util + net.grandtheftmc.core.shaded.redis.clients.util + + + Core + + + + package + + shade + + + + + + + + org.sonatype.plugins + nexus-staging-maven-plugin + 1.6.8 + true + + + default-deploy + deploy + + deploy + + + + + nexus + http://nexus.grandtheftmc.net/ + true + + + + + \ No newline at end of file diff --git a/core-master@6ef85bb745a/setup/database_schema.txt b/core-master@6ef85bb745a/setup/database_schema.txt new file mode 100644 index 0000000..68c347b --- /dev/null +++ b/core-master@6ef85bb745a/setup/database_schema.txt @@ -0,0 +1,275 @@ +/***** +** Table Description: +** Represents user information. +** +** uuid is the uuid of the user +** name is the name of the user +** mutex is for mutual exclusion saves +** +** Reasoning for structure: +** PK is `uuid` , as there is a unique one per user. +** We add an index on name so we can do an efficient query for a name. +*****/ +CREATE TABLE IF NOT EXISTS user( +uuid BINARY(16) NOT NULL, +name VARCHAR(16) NOT NULL, +mutex TINYINT(1) NOT NULL DEFAULT 0, +PRIMARY KEY (uuid), +INDEX (name) +); + +/***** +** Table Description: +** Represents user cooldowns. +** +** uuid is the uuid of the user +** server_key is the id of the server +** id is the name of the cooldown +** endTime is the time that the cooldown will end. +** +** Reasoning for structure: +** PK is `uuid` and `id` since one player can have multiple `id`'s +** +*****/ +CREATE TABLE IF NOT EXISTS user_cooldown ( +uuid BINARY(16) NOT NULL, +server_key VARCHAR(10) NOT NULL, +id VARCHAR(32) NOT NULL, +endTime TIMESTAMP NOT NULL, +PRIMARY KEY (uuid, id)); +); + +/***** +** Table Description: +** Represents user profile information. +** +** uuid is the uuid of the user +** server_key is the id of the server +** rank is that users rank on the server +** +** Reasoning for structure: +** PK is `uuid, server_key` pair, as there can be a diff +** rank for a user on a diff server. +*****/ +CREATE TABLE IF NOT EXISTS user_profile( +uuid BINARY(16) NOT NULL, +server_key VARCHAR(10) NOT NULL, +rank VARCHAR(10) NOT NULL, +PRIMARY KEY (uuid, server_key), +FOREIGN KEY (uuid) REFERENCES user(uuid) ON DELETE CASCADE +); + +/***** +** Table Description: +** Represents user trial rank information. +** +** uuid is the uuid of the user +** server_key is the id of the server +** rank is that users trial rank on the server +** creation is when it was created +** expire_at is when the rank expires +** +** Reasoning for structure: +** PK is `uuid, server_key` pair, as there can be a diff +** rank for a user on a diff server. +*****/ +CREATE TABLE IF NOT EXISTS user_trial_rank( +uuid BINARY(16) NOT NULL, +server_key VARCHAR(10) NOT NULL, +rank VARCHAR(10) NOT NULL, +creation TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, +expire_at TIMESTAMP NOT NULL, +PRIMARY KEY (uuid, server_key), +FOREIGN KEY (uuid) REFERENCES user(uuid) ON DELETE CASCADE +); + +/***** +** Table Description: +** Represents user currency information. +** +** uuid is the uuid of the user +** server_key is the id of the server +** currency is the id of the currency +** amount is the amount of the currency +** +** Reasoning for structure: +** PK is `uuid, server_key, currency` tuple, as there can be a diff +** currency / server / uuid tuple. +*****/ +CREATE TABLE IF NOT EXISTS user_currency( +uuid BINARY(16) NOT NULL, +server_key VARCHAR(10) NOT NULL, +currency VARCHAR(16) NOT NULL, +amount INT NOT NULL, +PRIMARY KEY (uuid, server_key, currency), +FOREIGN KEY (uuid) REFERENCES user(uuid) ON DELETE CASCADE +); + +/***** +** Table Description: +** Represents user tag information. +** +** uuid is the uuid of the user +** server_key is the id of the server +** tag is the tag that they own +** enabled is whether its equipped +** +** Reasoning for structure: +** PK is `uuid, server_key, tag` tuple, as there can be a diff +** tags per server and per user. +*****/ +CREATE TABLE IF NOT EXISTS user_tag( +uuid BINARY(16) NOT NULL, +server_key VARCHAR(10) NOT NULL, +tag VARCHAR(16) NOT NULL, +enabled TINYINT(1) NOT NULL DEFAULT 0, +PRIMARY KEY (uuid, server_key, tag) +); + +/***** +** Table Description: +** Represents a log of currency transactions for users. +** +** uuid is the uuid of the user +** server_key is the id of the server +** currency is the id of the currency +** amount is the amount of the currency +** source is where the currency came from +** reason is optional data of what specifically the source is +** +** Reasoning for structure: +** PK is `id` as it's auto increment. +*****/ +CREATE TABLE IF NOT EXISTS log_currency_transaction( +id INT NOT NULL AUTO_INCREMENT, +uuid BINARY(16) NOT NULL, +server_key VARCHAR(10) NOT NULL, +currency VARCHAR(16) NOT NULL, +amount INT NOT NULL, +source VARCHAR(20) NOT NULL, +reason VARCHAR(40) NOT NULL DEFAULT "", +creation TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, +PRIMARY KEY (id) +); + +/***** +** Table Description: +** Represents user voting logs. +** +** uuid is the user that voted +** amount is the worth of their vote +** service_id is the service id that they voted on, from VoteSite.java +** +** Reasoning for structure: +** PK is the `id` field as this table logs all of the votes. +*****/ +CREATE TABLE IF NOT EXISTS log_user_vote( +id INT(10) unsigned NOT NULL AUTO_INCREMENT, +uuid BINARY(16) NOT NULL, +amount INT NOT NULL DEFAULT 1, +service_id TINYINT(1) NOT NULL, +creation TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, +PRIMARY KEY (id) +); + +/***** +** Table Description: +** Represents the tags that players have +** +** uuid is the user that the specific entry is for +** server_key is the server that it is for (global or gtm1 / vice1 etc) +** tag the display tag +** +** Reasoning for structure: +** have different entries for each column so global or server-specific can be specified +*****/ +CREATE TABLE IF NOT EXISTS user_tag( +uuid BINARY(16) NOT NULL, +server_key VARCHAR(10) NOT NULL, +tag VARCHAR(16) NOT NULL, +enabled TINYINT(1) NOT NULL DEFAULT 0, +PRIMARY KEY (uuid, server_key, tag) +); + +/***** +** Table Description: +** Represents the different npcs in the world. +** +** location is the location of the npc +** server_key is the server that it is for (global or gtm1 / vice1 etc) +** reference is the name of the class that the npc represents. +** +** Reasoning for structure: +** have different entries for each column so global or server-specific can be specified +*****/ +CREATE TABLE IF NOT EXISTS npc_record ( +location VARCHAR(255) NOT NULL, +reference VARCHAR(100) NOT NULL, +server_key VARCHAR(10) NOT NULL, +PRIMARY KEY (location) + +/***** +** Table Description: +** Represents the weapon skins that players have +** +** uuid is the user that the specific entry is for +** server_key is the server that it is for (global or gtm1 / vice1 etc) +** weapon_id the int id for the weapon +** skin_id is the int id for the skin +** +** Reasoning for structure: +** Have different entries for each column so global or server-specific can be specified +*****/ +CREATE TABLE IF NOT EXISTS user_weapon_skin( +uuid BINARY(16) NOT NULL, +server_key VARCHAR(10) NOT NULL, +weapon_id TINYINT NOT NULL, +skin_id TINYINT NOT NULL, +enabled TINYINT(1) DEFAULT 0, +PRIMARY KEY (uuid, server_key, weapon_id, skin_id) +); + +/***** +** Table Description: +** Represents the join info for the player. +** +** uuid is the user that the specific entry is for +** initial_server_address is the ip the user connected to for the network for the first time +** last_server_address is the ip the user connected to most recently +** join_date is when the user joined the server +** last_login is the when the user last logged in +** +** Reasoning for structure: +** Unique key is the uuid of the player, so it's an efficient lookup. +*****/ +CREATE TABLE IF NOT EXISTS user_join_info( +uuid BINARY(16) NOT NULL, +initial_server_address VARCHAR(30) NOT NULL, +last_server_address VARCHAR(30) NOT NULL, +join_date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, +last_login TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, +PRIMARY KEY (uuid), +FOREIGN KEY (uuid) REFERENCES user(uuid) +); + +/***** +** Table Description: +** Represents user ammo information. +** +** uuid is the uuid of the user +** server_key is the id of the server +** ammo is the id of the ammo +** amount is the amount of the currency +** +** Reasoning for structure: +** PK is `uuid, server_key, ammo` tuple, as there can be a diff +** ammo / server / uuid tuple. +*****/ +CREATE TABLE IF NOT EXISTS user_ammo( +uuid BINARY(16) NOT NULL, +server_key VARCHAR(10) NOT NULL, +ammo VARCHAR(16) NOT NULL, +amount INT NOT NULL, +PRIMARY KEY (uuid, server_key, ammo), +FOREIGN KEY (uuid) REFERENCES user(uuid) ON DELETE CASCADE +); diff --git a/core-master@6ef85bb745a/setup/script/copy_house.py b/core-master@6ef85bb745a/setup/script/copy_house.py new file mode 100644 index 0000000..0cdd08a --- /dev/null +++ b/core-master@6ef85bb745a/setup/script/copy_house.py @@ -0,0 +1,172 @@ +#!/usr/bin/python + +# local imports + +# python modules +import MySQLdb +import string +import time + +DB_HOST = "localhost" +DB_USER = "root" +DB_PASS = "" +DB_NAME = "" +# number of queries per interval +MAX_QUERY_TICK = 10000000000 +# how long in seconds we sleep for +TICK_SLEEP = 1 + +FROM_SERVER_KEY = "GTM1" +TO_SERVER_KEY = "GTM2" + +QUERY_GET_HOUSES = ''' SELECT id, house_num, premium, currency, price FROM gtm_house WHERE server_key = %s; ''' +QUERY_GET_HOUSE_DATA = ''' SELECT hotspot_id, hotspot_type, data FROM gtm_house_data WHERE house_id = %s; ''' +QUERY_CREATE_HOUSE = ''' INSERT INTO gtm_house (house_num, server_key, premium, currency, price) VALUES (%s, %s, %s, %s, %s);''' +QUERY_CREATE_HOUSE_DATA = ''' INSERT INTO gtm_house_data (house_id, hotspot_type, data) VALUES (%s, %s, %s);''' + +# open MySQL connection +db = MySQLdb.connect(host=DB_HOST, user=DB_USER, passwd=DB_PASS, db=DB_NAME) +# grab cursor +cur = db.cursor() + +# print out variables +print("MAX_QUERY_TICK = " + str(MAX_QUERY_TICK)) +print("TICK_SLEEP = " + str(TICK_SLEEP)) +print("FROM_SERVER_KEY = " + str(FROM_SERVER_KEY)) +print("TO_SERVER_KEY = " + str(TO_SERVER_KEY)) +print("QUERY_GET_HOUSES = " + str(QUERY_GET_HOUSES)) +print("QUERY_GET_HOUSE_DATA = " + str(QUERY_GET_HOUSE_DATA)) +print("QUERY_CREATE_HOUSE = " + str(QUERY_CREATE_HOUSE)) +print("QUERY_CREATE_HOUSE_DATA = " + str(QUERY_CREATE_HOUSE_DATA)) + +def get_houses(server_key): + ''' + Get all the houses with the specified server key. + + Args: + server_key: The server key to get the houses for, i.e. "GTM1" + + Returns: + A list of tuples for the houses on the server key in the form + of (house_id, house_num, premium, currency, price). + ''' + data = (str(server_key)) + cur.execute(QUERY_GET_HOUSES, data) + + houses = [] + for tup in cur: + house_id = int(tup[0]) + house_num = int(tup[1]) + premium = bool(tup[2]) + currency = str(tup[3]) + price = int(tup[4]) + + houses.append((house_id, house_num, premium, currency, price)) + + return houses + +def get_house_data(house_id): + ''' + Get all the data regarding the house. + + Args: + house_id: The id of the house + + Returns: + A list of tuples for the house data in the form of (hotspot_id, hotspot_type, data). + ''' + data = (int(house_id)) + cur.execute(QUERY_GET_HOUSE_DATA, data) + + house_data = [] + for tup in cur: + hotspot_id = int(tup[0]) + hotspot_type = str(tup[1]) + data = str(tup[2]) + + house_data.append((hotspot_id, hotspot_type, data)) + + return house_data + +def create_house_entry(house_num, server_key, premium, currency, price): + ''' + Creates an entry in the 'gtm_house' table. + + Args: + house_num: The number of the house + server_key: The server key that this house is on + premium: Whether or not this is a premium house + currency: The currency involved for the purchase of this house + price: The amount of the currency involved for the purchase of this house + + Returns: + The generated house_id that is unique, if one was made. + ''' + data = (int(house_num), str(server_key), bool(premium), str(currency), int(price)) + cur.execute(QUERY_CREATE_HOUSE, data) + + # return the generated key + return cur.lastrowid + +def create_house_data_entry(house_id, hotspot_type, data): + ''' + Creates an entry in the 'gtm_house_data' table. + + Args: + house_id: The unique id of the house, generated by the database + hotspot_type: The type of the hotspot + data: The data associated with the hotspot + ''' + data = (int(house_id), str(hotspot_type), str(data)) + cur.execute(QUERY_CREATE_HOUSE_DATA, data) + +######### +# BELOW IS THE ACTUAL SCRIPT LOGIC +######### + +print('Running script...') +start_time = time.time() + +# limit the amount of queries to the database per interval +tick = 0 + +houses = get_houses(server_key=FROM_SERVER_KEY) +houses_created = 0 +house_data_found = 0 +house_data_created = 0 +for house_id, house_num, premium, currency, price in houses: + tick += 1 + + # create new house in new server + generated_house_id = create_house_entry(house_num=house_num, server_key=TO_SERVER_KEY, premium=premium, currency=currency, price=price) + if generated_house_id is not None and generated_house_id > 0: + houses_created += 1 + + # get house data from original house id + house_data = get_house_data(house_id=house_id) + if house_data is not None and len(house_data) > 0: + + house_data_found += len(house_data) + + for hotspot_id, hotspot_type, data in house_data: + create_house_data_entry(house_id=generated_house_id, hotspot_type=hotspot_type, data=data) + house_data_created += 1 + + if tick > MAX_QUERY_TICK: + tick = 0 + time.sleep(TICK_SLEEP) + break + +# commit query +db.commit() +cur.close() + +run_time = time.time() - start_time +print('Script is now complete! (' + str(run_time) + ' secs)') +print('Number of houses found: ' + str(len(houses))) +print('Number of houses created: ' + str(houses_created)) +print('Number of house data found: ' + str(house_data_found)) +print('Number of house data created: ' + str(house_data_created)) + +# close the connection +db.close() \ No newline at end of file diff --git a/core-master@6ef85bb745a/setup/script/data_mine.py b/core-master@6ef85bb745a/setup/script/data_mine.py new file mode 100644 index 0000000..f075d05 --- /dev/null +++ b/core-master@6ef85bb745a/setup/script/data_mine.py @@ -0,0 +1,141 @@ +#!/usr/bin/python + +# local imports + +# python modules +import MySQLdb +import time +import sys + +DB_HOST = "localhost" +DB_USER = "root" +DB_PASS = "" +DB_NAME = "" +QUERY = ''' SELECT backpackContents, name FROM gtm1; ''' +SELECT_COL = 'backpackContents' + +# open MySQL connection +db = MySQLdb.connect(host=DB_HOST, user=DB_USER, passwd=DB_PASS, db=DB_NAME) + +def get_largest_data(query, select_col): + ''' + Mine the data and determine the largest value for the given query. + + Args: + query: The query to run + select_col: The column to select + + Returns: + The largest data entry for the given query. + ''' + + largest = 0 + name = None + backpack_data = None + + # grab cursor + cur = db.cursor() + cur.execute(query) + + # commit query + db.commit() + + result = [] + for tup in cur: + x = tup[0] + + size_x = utf8len(str(x)) + if size_x >= largest: + largest = size_x + print(largest) + name = str(tup[1]) + backpackContents = str(x) + + temp = {} + temp[name] = backpackContents + result.append(temp) + + cur.close() + + return result + +def utf8len(s): + ''' + Get the length of a given string. + + Args: + s - the string in question + + Returns: + The length of the string . + ''' + return len(s.encode('utf-8')) + +def get_len_by_sys(s): + ''' + Get the length of a given string according to the sys module. + + Args: + s - the string in question + + Returns: + The length of the string. + ''' + return sys.getsizeof(s) + +def insert_data(name, backpack): + ''' + Insert data into a test column to see if it fits. + + Args: + name - the name of the user to insert fake data for + ''' + + largest = 0 + name = None + + # grab cursor + cur = db.cursor() + query = ''' SELECT uuid, backpackContents FROM gtm1 WHERE name=%s''' + data = [str(name)] + cur.execute(query, data) + + uuid = None + for tup in cur: + uuid = str(tup[0]) + + uuid = "0xDD" + + # grab cursor + cur = db.cursor() + query = ''' INSERT IGNORE INTO backpack_test (uuid, backpack) VALUES (%s, %s)''' + data = (uuid, backpack) + cur.execute(query, data) + + # commit query + db.commit() + cur.close() + + +######### +# BELOW IS THE ACTUAL SCRIPT LOGIC +######### + +print('Running script fix_house_data.py...' ) +print() +start_time = time.time() + +data_set = get_largest_data(query=QUERY, select_col=SELECT_COL) +#print(data_set) + +# for element in data_set: +# for k in element: +# print("k", k) +# insert_data(k, element[k]) + +run_time = time.time() - start_time + +print('Finished script in ' + str(run_time) + ' secs.') + +# close the connection +db.close() \ No newline at end of file diff --git a/core-master@6ef85bb745a/setup/script/fix_house_data.py b/core-master@6ef85bb745a/setup/script/fix_house_data.py new file mode 100644 index 0000000..d588b17 --- /dev/null +++ b/core-master@6ef85bb745a/setup/script/fix_house_data.py @@ -0,0 +1,213 @@ +#!/usr/bin/python + +# local imports + +# python modules +import MySQLdb +import time +import json + +DB_HOST = "localhost" +DB_USER = "root" +DB_PASS = "" +DB_NAME = "" + +# open MySQL connection +db = MySQLdb.connect(host=DB_HOST, user=DB_USER, passwd=DB_PASS, db=DB_NAME) + +# CREATE TABLE IF NOT EXISTS gtm_house ( +# id INT NOT NULL AUTO_INCREMENT, +# house_num INT NOT NULL, +# server_key VARCHAR(10) NOT NULL, +# premium TINYINT(1) NOT NULL DEFAULT 0, +# currency VARCHAR(10) NOT NULL, +# price INT NOT NULL, +# PRIMARY KEY (id), +# UNIQUE INDEX (house_num, server_key, premium) +# ); + +def get_premium_houses(): + ''' + Get all the premium houses that exist on the network. + + Returns: + A list of id where each id is the unique house id. + ''' + + # grab cursor + cur = db.cursor() + + query = ''' SELECT id FROM gtm_house WHERE premium=1 ORDER BY id DESC LIMIT 1000; ''' + cur.execute(query) + + # commit query + db.commit() + + result = [] + for tup in cur: + result.append(int(tup[0])) + + cur.close() + + return result + +# CREATE TABLE IF NOT EXISTS gtm_house_user ( +# house_id INT NOT NULL, +# uuid BINARY(16) NOT NULL, +# is_owner TINYINT(1) NOT NULL, +# PRIMARY KEY (house_id, uuid), +# INDEX(uuid), +# FOREIGN KEY (house_id) REFERENCES gtm_house(id) ON DELETE CASCADE +# ); + +def is_house_owned(house_id): + ''' + Get whether or not the house is owned by a player. + + Args: + house_id: The id of the house + + Return: + True of the house is owned by a player, False otherwise. + ''' + # grab cursor + cur = db.cursor() + + query = ''' SELECT COUNT(*) FROM gtm_house_user WHERE house_id=%s; ''' + data = (house_id) + cur.execute(query, [data]) + + # commit query + db.commit() + + num_users = 0 + for tup in cur: + num_users = int(tup[0]) + + cur.close() + + result = False + if num_users > 0: + result = True + + return result + +# CREATE TABLE IF NOT EXISTS gtm_house_data ( +# house_id INT NOT NULL, +# hotspot_id INT NOT NULL AUTO_INCREMENT, +# hotspot_type VARCHAR(5) NOT NULL, +# data BLOB DEFAULT NULL, +# PRIMARY KEY (hotspot_id), +# INDEX (house_id), +# FOREIGN KEY (house_id) REFERENCES gtm_house(id) ON DELETE CASCADE +# ); + +def get_house_data(house_id, hotspot_type): + ''' + Get the house data for the specified house id and the hotspot_type. + + Args: + house_id: The unique id for the house + hotspot_type: The type of hotspot data + + Returns: + A list of tuples in the form of (house_id, hotspot_id, hotspot_type, data). + ''' + # grab cursor + cur = db.cursor() + + query = ''' SELECT house_id, hotspot_id, hotspot_type, data FROM gtm_house_data WHERE house_id=%s AND hotspot_type=%s; ''' + data = (house_id, hotspot_type) + cur.execute(query, data) + + # commit query + db.commit() + + result = [] + for tup in cur: + result.append((int(tup[0]), int(tup[1]), str(tup[2]), str(tup[3]))) + + cur.close() + return result + +def update_house_data(house_id, hotspot_id, hotspot_type, data): + ''' + Updates the house data in the database. + + Args: + house_id: The id of the house + hotspot_id: The id of the hotspot + hotspot_type: The type of the hotspot + data: The data json object + ''' + # grab cursor + cur = db.cursor() + + query = ''' UPDATE gtm_house_data SET data=%s WHERE house_id=%s AND hotspot_id=%s AND hotspot_type=%s ''' + data = (str(data), int(house_id), int(hotspot_id), str(hotspot_type)) + cur.execute(query, data) + + # commit query + db.commit() + cur.close() + + +######### +# BELOW IS THE ACTUAL SCRIPT LOGIC +######### + +print('Running script fix_house_data.py...' ) +print() +start_time = time.time() + +# get all premium houses +premium_house_ids = get_premium_houses() +houses_changed = 0 +trash_data_changed = 0 +for house_id in premium_house_ids: + + # TODO re-enable + print('Running house_id #' + str(house_id)) + + # is the house owned + owned = is_house_owned(house_id=house_id) + + # has this data for this house been changed + changed = False + + if not owned: + + # get all TRASH data + trash_data_list = get_house_data(house_id=house_id, hotspot_type='TRASH') + if trash_data_list is not None and len(trash_data_list) > 0: + + # for each data + for hid, hotspot_id, hotspot_type, data in trash_data_list: + + # convert to json + json_data = json.loads(data) + if 'owned' in json_data and json_data['owned'] is True: + json_data['owned'] = False + + # convert back to string + new_data = json.dumps(json_data) + + # update new house data + update_house_data(house_id=hid, hotspot_id=hotspot_id, hotspot_type='TRASH', data=new_data) + + print('Changed owned trash for house_id #' + str(house_id)) + + # stats + trash_data_changed += 1 + if not changed: + changed = True + houses_changed += 1 + +run_time = time.time() - start_time +print('Number of initial premium houses = ' + str(len(premium_house_ids))) +print('Number of houses that were changed = ' + str(houses_changed)) +print('Number of data that were changed = ' + str(trash_data_changed)) +print('Finished script in ' + str(run_time) + ' secs.') + +# close the connection +db.close() \ No newline at end of file diff --git a/core-master@6ef85bb745a/setup/script/fix_user_data.py b/core-master@6ef85bb745a/setup/script/fix_user_data.py new file mode 100644 index 0000000..80b6ac7 --- /dev/null +++ b/core-master@6ef85bb745a/setup/script/fix_user_data.py @@ -0,0 +1,306 @@ +#!/usr/bin/python + +# local imports + +# python modules +import MySQLdb +import time +import json +import urllib2 +import base64 + +DB_HOST = "localhost" +DB_USER = "root" +DB_PASS = "" +DB_NAME = "" + +# open MySQL connection +db = MySQLdb.connect(host=DB_HOST, user=DB_USER, passwd=DB_PASS, db=DB_NAME) + +def request_api(username): + ''' + This will request the API server. + + Args: + username: The username to use to lookup the uuid. + + Returns: + The uuid for the user with the name username, otherwise None. + ''' + + api_url = "https://api.mojang.com/users/profiles/minecraft/{}".format(username) # This server can be pinged as many times as needed. + req = urllib2.Request(api_url) + try: + resp = urllib2.urlopen(req) + except urllib2.HTTPError as e: + if e.code == 404: + pass + # do something... + else: + pass + # ... + except urllib2.URLError as e: + pass + # Not an HTTP-specific error (e.g. connection refused) + # ... + else: + # 200 + body = resp.read() + + if body is not None and body is not '': + decoded_body = body.decode("utf-8") + api_load = json.loads(decoded_body) + + if 'id' in api_load: + return str(api_load['id']) + + return None + +def request_name(uuid): + ''' + This will request the names server. + + Args: + uuid: The uuid to use to get the name. + + Returns: + The last known name for the given uuid, if one exists, other None. + ''' + + name_url = "https://api.mojang.com/user/profiles/{}/names".format(uuid) # This server can be pinged as many times as needed. + + req = urllib2.Request(name_url) + try: + resp = urllib2.urlopen(req) + except urllib2.HTTPError as e: + if e.code == 404: + pass + # do something... + else: + pass + # ... + except urllib2.URLError as e: + pass + # Not an HTTP-specific error (e.g. connection refused) + # ... + else: + # 200 + body = resp.read() + + if body is not None and body is not '': + decoded_body = body.decode("utf-8") + name_load = json.loads(decoded_body) + + if len(name_load) > 0: + last_known_name = name_load[-1] + + if last_known_name is not None and 'name' in last_known_name: + return str(last_known_name['name']) + + return None + +# CREATE TABLE `user` ( +# `uuid` binary(16) NOT NULL, +# `name` varchar(16) NOT NULL, +# PRIMARY KEY (`uuid`), +# KEY `name` (`name`); + +def get_duplicate_users(): + ''' + Get a list of names where they have duplicate entries in the database. + + Returns: + A list of names where each name is a duplicate uuid, name pair in the database. + ''' + + # grab cursor + cur = db.cursor() + + query = ''' SELECT name, COUNT(*) FROM user GROUP BY name ORDER BY COUNT(*) DESC LIMIT 500; ''' + cur.execute(query) + + # commit query + db.commit() + + result = [] + for tup in cur: + name = str(tup[0]) + num = int(tup[1]) + + # only add to list those that have duplicates + if num > 1: + result.append(name) + + cur.close() + + return result + +def get_uuids(name): + ''' + Get a list of uuids for the given name. + + Returns: + A list of uuids for the given name. + ''' + + # grab cursor + cur = db.cursor() + + query = ''' SELECT HEX(uuid) FROM user WHERE name=%s; ''' + data = (name) + cur.execute(query, [data]) + + # commit query + db.commit() + + result = [] + for tup in cur: + uuid = str(tup[0]) + result.append(uuid) + + cur.close() + + return result + +def get_last_login(name): + ''' + Get last login information for this user. + + Args: + The name of the user to lookup. + + Returns: + TODO + ''' + + # grab cursor + cur = db.cursor() + + query = ''' SELECT uuid, lastname, last_login FROM users WHERE lastname=%s ORDER BY last_login DESC; ''' + data = (name) + cur.execute(query, [data]) + + # commit query + db.commit() + + result = [] + for tup in cur: + uuid = str(tup[0]) + lastname = str(tup[1]) + last_login = str(tup[2]) + + print(last_login) + + result.append((uuid, lastname, last_login)) + + cur.close() + + return result + +def update_name_for_user(uuid, name): + ''' + Updates the name record for the uuid. + + Args: + uuid: The uuid primary key that never changes + name: The name of the user to change for + ''' + + # grab cursor + cur = db.cursor() + + query = ''' UPDATE user SET name=%s WHERE uuid=UNHEX(%s); ''' + data = (str(name), str(uuid)) + cur.execute(query, data) + + # commit query + db.commit() + cur.close() + +def delete_user_record(uuid): + ''' + Deletes the user record from the database. + + Args: + uuid: The uuid primary key to delete. + ''' + + # grab cursor + cur = db.cursor() + + query = ''' DELETE FROM user WHERE uuid=UNHEX(%s); ''' + data = (str(uuid)) + cur.execute(query, [data]) + + # commit query + db.commit() + cur.close() + +######### +# BELOW IS THE ACTUAL SCRIPT LOGIC +######### + +print('Running script fix_user_data.py...' ) +print() +start_time = time.time() + +# get duplicate users +dup_users = get_duplicate_users() + +print('Found ' + str(len(dup_users)) + ' uuid/name pairs with duplicates.') + +# how many names were resolved by the mojang api +names_found = 0 +# how many names were not resolved by the mojang api +names_not_found = 0 +# how many user names were changed in the user table +user_names_changed = 0 + +# TODO remove +count = 0 +if dup_users is not None and len(dup_users) > 0: + for du in dup_users: + + # grab the uuids with this username + uuids = get_uuids(name=du) + if uuids is not None and len(uuids) > 0: + + for uid in uuids: + + # mojang api request for last known name + last_known_name = request_name(uuid=uid) + + # if we have a name for them + if last_known_name is not None: + print('Last known name for uuid=' + str(uid) + ' is ' + str(last_known_name)) + names_found = names_found + 1 + + update_name_for_user(uuid=uid, name=last_known_name) + user_names_changed = user_names_changed + 1 + + # else its an offline uuid + else: + print('Could not find last known name for uuid=' + str(uid)) + names_not_found = names_not_found + 1 + + delete_user_record(uuid=uid) + + count = count + 1 + if count > 50: + break + +# TEST CASES +#print(request_api(username='BlameStephen')) +#print(request_name(uuid='0bfd8917b6bf48088b12c59ec43e4260')) +#print(request_name(uuid='0FF3234F08D33344887FDB721202F9BB')) +#print(request_name(uuid='0BFD8917B6BF48088B12C59EC43E4260')) + +run_time = time.time() - start_time +print('Number of duplicate entries found = ' + str(len(dup_users))) +print('Number of names found = ' + str(names_found)) +print('Number of names NOT found = ' + str(names_not_found)) +print('Number of usernames changed = ' + str(user_names_changed)) +print('Finished script in ' + str(run_time) + ' secs.') + +# close the connection +db.close() \ No newline at end of file diff --git a/core-master@6ef85bb745a/setup/script/fix_user_table_foreign.py b/core-master@6ef85bb745a/setup/script/fix_user_table_foreign.py new file mode 100644 index 0000000..8b5439b --- /dev/null +++ b/core-master@6ef85bb745a/setup/script/fix_user_table_foreign.py @@ -0,0 +1,189 @@ +#!/usr/bin/python + +# local imports + +# python modules +import MySQLdb +import string +import time + +DB_HOST = "localhost" +DB_USER = "root" +DB_PASS = "" +DB_NAME = "" +# number of queries per interval +MAX_QUERY_TICK = 10000000 +# how long in seconds we sleep for +TICK_SLEEP = 1 + +QUERY_LARGE_SET = ''' SELECT HEX(uuid), name FROM gtm1; ''' +QUERY_SMALL_SET = ''' SELECT HEX(uuid), name FROM user; ''' +QUERY_FOREIGN_SET = ''' SELECT HEX(uuid) AS gu, G.name FROM gtm1 G WHERE G.uuid NOT IN (SELECT uuid FROM user);''' + +# open MySQL connection +db = MySQLdb.connect(host=DB_HOST, user=DB_USER, passwd=DB_PASS, db=DB_NAME) +# grab cursor +cur = db.cursor() + +# print out variables +print("MAX_QUERY_TICK = " + str(MAX_QUERY_TICK)) +print("TICK_SLEEP = " + str(TICK_SLEEP)) +print("QUERY_LARGE_SET = " + str(QUERY_LARGE_SET)) +print("QUERY_SMALL_SET = " + str(QUERY_SMALL_SET)) +print("QUERY_FOREIGN_SET = " + str(QUERY_FOREIGN_SET)) + +def get_foreign_users(): + ''' + Get all the users that exist in the gtm table but not in the user table. + + Return: + A list of pairs in the form of (uuid, name) for all the users. + ''' + + # grab cursor + #cur = db.cursor() + cur.execute(QUERY_FOREIGN_SET) + + users = [] + for tup in cur: + + uuid = str(tup[0]) + name = str(tup[1]) + + users.append((uuid, name)) + + # commit query + # db.commit() + # cur.close() + + return users + +def get_large_users(): + ''' + Get all the users known on the network for the specified gtm table. + + Return: + A list of pairs in the form of (uuid, name) for all the users. + ''' + + # grab cursor + #cur = db.cursor() + cur.execute(QUERY_LARGE_SET) + + users = [] + for tup in cur: + + uuid = str(tup[0]) + name = str(tup[1]) + + users.append((uuid, name)) + + # commit query + # db.commit() + # cur.close() + + return users + +def get_small_users(): + ''' + Get all the users known on the network for the user table. + + Return: + A list of users uuid for all the users. + ''' + + # grab cursor + #cur = db.cursor() + cur.execute(QUERY_SMALL_SET) + + users = [] + for tup in cur: + + uuid = str(tup[0]) + + users.append(uuid) + + # commit query + # db.commit() + # cur.close() + + return users + + +def create_user(uuid, name): + ''' + Create user information for the respective player. + + Args: + uuid: The uuid of the user + name: The name of the user + ''' + # grab cursor + # cur = db.cursor() + query = '''INSERT IGNORE INTO user VALUES (UNHEX(%s), %s) ON DUPLICATE KEY UPDATE name=VALUES(name);''' + data = (str(uuid), str(name)) + cur.execute(query, data) + + # commit query + # db.commit() + # cur.close() + +######### +# BELOW IS THE ACTUAL SCRIPT LOGIC +######### + +print('Running script...') +start_time = time.time() + +# limit the amount of queries to the database per interval +tick = 0 + +# get the large set of users (a list of tuples) +#large_users = get_large_users() + +# get the small set of users (a list of uuid) +#small_users = get_small_users() + +#creation_set = [] + +users_created = 0 + +# # for each user in gtm1 +# for uuid, name in large_users: +# tick += 1 + +# if uuid not in small_users: +# print('name', name) +# create_user(uuid=uuid, name=name) +# users_created += 1 + +# if tick > MAX_QUERY_TICK: +# tick = 0 +# time.sleep(TICK_SLEEP) + +foreign_users = get_foreign_users() + +# for each user in gtm1 +for uuid, name in foreign_users: + tick += 1 + + print('name', name) + create_user(uuid=uuid, name=name) + users_created += 1 + + if tick > MAX_QUERY_TICK: + tick = 0 + time.sleep(TICK_SLEEP) + +db.commit() +cur.close() + +# convert ranks + +run_time = time.time() - start_time +print('Script is now complete! (' + str(run_time) + ' secs)') +print('Number of users found in foreign set: ' + str(len(foreign_users))) +print('Number of users created: ' + str(users_created)) + +# close the connection +db.close() \ No newline at end of file diff --git a/core-master@6ef85bb745a/setup/script/mine_log.py b/core-master@6ef85bb745a/setup/script/mine_log.py new file mode 100644 index 0000000..5e07920 --- /dev/null +++ b/core-master@6ef85bb745a/setup/script/mine_log.py @@ -0,0 +1,259 @@ +#!/usr/bin/python + +# python modules +import json +import subprocess +import socket +import time +import datetime + +# pip modules +import requests + +FILE_NAME = '/var/log/auth.log' +USE_CURRENT_DATE = True + +SLACK_API_URL = 'https://hooks.slack.com/services/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' + +# maps fingerprint to name +FINGER_DICT = { + 'e3:a8:ef:d2:61:b1:13:8c:b0:e6:bc:aa:9c:3f:b0:90': 'Stephen', + '35:73:3c:fa:86:41:c2:28:e7:d2:4f:aa:38:62:6e:a5': 'Brad', + # brad macbook pro + 'dc:28:e9:c3:31:4b:7d:1b:fb:fe:c1:bb:5b:d9:d6:ab': 'Brad', + '1d:70:6b:a0:e4:89:ee:1f:63:4b:18:a4:92:07:e8:52': 'Mason', + # mason backup + '35:c9:a6:d4:06:e8:4a:fb:e4:a0:44:ec:36:bf:43:d6': 'Mason', + '33:ed:70:4e:02:3f:6f:a0:ff:e5:3c:f6:8f:67:fd:fb': 'Tim', + '8c:b8:40:b1:e9:ee:e8:7e:b2:d6:39:6f:24:5c:e3:f6': 'Jed', + '8b:ba:38:ff:e2:b1:28:b5:e1:6a:1c:24:8b:98:89:77': 'Liam', + '71:7f:fd:8b:cc:eb:db:98:98:62:3c:6a:06:8d:92:6f': 'Luke', + '47:cb:84:d1:6a:6e:94:a8:f7:b6:11:48:b5:72:8e:cf': 'Jesse', + # Jesse access + '76:c4:be:23:43:71:b4:d8:c8:3d:a3:a2:1b:bf:db:57': 'Jesse', + # Jesse backup + 'b7:1d:90:ac:25:20:c9:96:fb:3a:3c:9a:9e:8a:02:19': 'Jesse', +} + +# maps name to ip +NAME_DICT = { + 'Stephen': ['24.101.17.184', '24.112.212.17'], + 'Luke': ['90.240.15.159', '90.255.162.177', '90.255.175.1', '2.124.198.224'], + 'Mason': ['198.24.182.226', '24.253.105.169'], + 'Jed': ['150.143.79.210', '150.143.79.195'], + 'Brad': ['98.149.243.111'], + 'Tim': ['70.68.9.211'], + 'Jesse': ['95.97.205.201', '144.217.180.29', '162.208.95.194', '84.241.199.136', '139.162.217.42', '84.241.197.240', '12.217.236.130', '85.159.210.213'], +} + +class SlackAPI(object): + def __init__(self, api_url, headers, debug=False): + ''' + Args: + api_url: The URL for the API request + headers: The headers attached to this post request + debug: Boolean on whether we should print out debugging info + ''' + self.api_url = api_url + self.headers = headers + self.debug = debug + + def __str__(self): + ''' + Returns: + The string representation for this Message object. + ''' + return 'SlackAPI [api_url=' + str(self.api_url) + ', headers=' + str(self.headers) + ', debug=' + str(self.debug) + + def send_json(self, json_contents): + ''' + Send an arbitrary json object as a POST message to the specified URL. + + Args: + json: The dictionary representation that is being sent. + + Returns: + The response from the POST request, False if something happened. + ''' + try: + r = requests.post(self.api_url, data=json.dumps(json_contents), headers=self.headers) + print(r) + return r + except Exception as e: + print('Unknown exception occurred when trying to send ' + str(json) + ' for Message ' + str(self)) + print(e) + return False + + def send_message(self, contents, channel, username, icon_emoji): + ''' + Sends a POST request message with the given attributes. + + Args: + contents: The contents of the message as the 'text' field + channel: The channel to send the message + username: The username that is posting + icon_emoji: The emoji that the username has + + Returns: + The response from the POST request, False if something happened. + ''' + + # construct the JSON object + json_contents = {} + json_contents['text'] = contents + json_contents['channel'] = channel + json_contents['username'] = username + json_contents['icon_emoji'] = icon_emoji + + return self.send_json(json_contents) + +class Message(object): + def __init__(self): + + # initialize contents as a python dictionary + self.contents = {} + + # initialize attachments as a list + self.attachments = [] + + def add_attachment(self, data): + ''' + Adds the specified data as an attachment to the message. + + Args: + data: The data to add as an attachment + + Returns: + True if the attachment was added, False otherwise. + ''' + if type(data) is dict: + self.attachments.append(data) + return True + + return False + + def get_contents(self): + ''' + Get the contents of this message in terms of a Python dictionary. + + Returns: + The contents of this message. + ''' + c = self.contents + c['attachments'] = self.attachments + return c + +# Below is an example of how to use this module +# api_url = "https://hooks.slack.com/services/TOKEN" +# headers = {'content-type': 'application/json'} +# slack = SlackAPI(api_url=api_url, headers=headers, debug=True) +# slack.send_message(contents='Hello Slack!', channel='#general', username='TestAPIBot', icon_emoji=':smile:') + +# Mar 3 20:43:36 GTM-OVH-4 sshd[20268]: Accepted publickey for root from 198.24.182.226 port 53327 ssh2: RSA 35:c9:a6:d4:06:e8:4a:fb:e4:a0:44:ec:36:bf:43:d6 +# Mar 3 20:43:36 GTM-OVH-4 sshd[20268]: Accepted publickey for root from 198.24.182.226 port 53327 ssh2: RSA 35:c9:a6:d4:06:e8:4a:fb:e4:a0:44:ec:36:bf:43:d6 +# Mar 3 20:43:36 GTM-OVH-4 sshd[20268]: Accepted publickey for root from 198.24.182.226 port 53327 ssh2: RSA 35:c9:a6:d4:06:e8:4a:fb:e4:a0:44:ec:36:bf:43:d6 + +# maps ip to list of tuple (date_tuple) +UNKNOWN_LOGIN = {} +# maps unknown fingerprints to ips +UNKNOWN_FINGERPRINT = {} + +# grab the current time +current_time = datetime.date.today().strftime("%b %d") + +print('Running mine_log.py for ' + current_time) + +with open(FILE_NAME) as f: + lines = f.readlines() + + for line in lines: + + # strip new line away + #line = line.rstrip('\n') + line = " ".join(line.split()) + + if 'Accepted publickey for' in line: + + # split by space + parts = line.split(" ") + + # for i in range(0, len(parts)): + # print("index " + str(i) + " = " + str(parts[i])) + if parts is not None and len(parts) > 0: + date_str_full = str(parts[0]) + " " + str(parts[1]) + " " + str(parts[2]) + date_str_md = str(parts[0]) + " " + str(parts[1]) + user_str = str(parts[8]) + ip_str = str(parts[10]) + rsa_str = str(parts[15]) + + # if we want to use current date + if USE_CURRENT_DATE: + + # only parse lines from same date (month/day) + if current_time != date_str_md: + continue + + # have we seen this ip for this fingerprint + if rsa_str in FINGER_DICT: + name = FINGER_DICT[rsa_str] + + if name in NAME_DICT: + ip_list = NAME_DICT[name] + + if ip_str in ip_list: + pass + else: + # print(str(ip_str) + ' has logged in using ' + str(name) + '\'s RSA key!') + + result = None + if ip_str in UNKNOWN_LOGIN: + result = UNKNOWN_LOGIN[ip_str] + else: + result = [] + + data_tuple = (date_str_full, user_str, rsa_str, name) + result.append(data_tuple) + + UNKNOWN_LOGIN[ip_str] = result + else: + result = None + if ip_str in UNKNOWN_LOGIN: + result = UNKNOWN_LOGIN[ip_str] + else: + result = [] + + data_tuple = (date_str_full, user_str, rsa_str, name) + result.append(data_tuple) + + UNKNOWN_LOGIN[ip_str] = result + else: + # mark as UNKNOWN FINGERPRINT + UNKNOWN_FINGERPRINT[rsa_str] = ip_str + +local_ip = socket.gethostbyaddr(socket.gethostname()) +date = str(time.strftime("%c")) +SEND_MESSAGE = False + +contents = 'Box IP: ' + str(local_ip[0]) + ', Access Log for ' + str(date) + '\n' + +if len(UNKNOWN_LOGIN) > 0: + SEND_MESSAGE = True + + for key in UNKNOWN_LOGIN: + num_accesses = len(UNKNOWN_LOGIN[key]) + contents += 'Foreign IP (' + str(key) + ') x' + str(num_accesses) + ' conns using: ' + str(UNKNOWN_LOGIN[key][0][2]) + ' (' + str(UNKNOWN_LOGIN[key][0][3]) + ')' + contents += '\n' + +if len(UNKNOWN_FINGERPRINT) > 0: + SEND_MESSAGE = True + + contents += '\nThe following fingerprints are unknown: \n' + for key in UNKNOWN_FINGERPRINT: + contents += 'RSA (' + str(key) + ') with IP (' + str(UNKNOWN_FINGERPRINT[key]) + ')' + contents += '\n' + +if SEND_MESSAGE: + headers = {'content-type': 'application/json'} + slack = SlackAPI(api_url=SLACK_API_URL, headers=headers) + slack.send_message(contents=contents, channel='#important', username='Mine Log', icon_emoji=':closed_lock_with_key:') + diff --git a/core-master@6ef85bb745a/setup/script/python_script.sh b/core-master@6ef85bb745a/setup/script/python_script.sh new file mode 100644 index 0000000..f0c5d05 --- /dev/null +++ b/core-master@6ef85bb745a/setup/script/python_script.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +# print debug messages +echo "Script is $@" + +cd "/minecraft" +# run python script +python "$@" \ No newline at end of file diff --git a/core-master@6ef85bb745a/setup/script/slack_api.py b/core-master@6ef85bb745a/setup/script/slack_api.py new file mode 100644 index 0000000..96c1094 --- /dev/null +++ b/core-master@6ef85bb745a/setup/script/slack_api.py @@ -0,0 +1,112 @@ +#!/usr/bin/env python + +# python modules +import json +import subprocess + +# pip modules +import requests + +class SlackAPI(object): + def __init__(self, api_url, headers, debug=False): + ''' + Args: + api_url: The URL for the API request + headers: The headers attached to this post request + debug: Boolean on whether we should print out debugging info + ''' + self.api_url = api_url + self.headers = headers + self.debug = debug + + def __str__(self): + ''' + Returns: + The string representation for this Message object. + ''' + return 'SlackAPI [api_url=' + str(self.api_url) + ', headers=' + str(self.headers) + ', debug=' + str(self.debug) + + def send_json(self, json_contents): + ''' + Send an arbitrary json object as a POST message to the specified URL. + + Args: + json: The dictionary representation that is being sent. + + Returns: + The response from the POST request, False if something happened. + ''' + try: + r = requests.post(self.api_url, data=json.dumps(json_contents), headers=self.headers) + print(r) + return r + except Exception as e: + print('Unknown exception occurred when trying to send ' + str(json) + ' for Message ' + str(self)) + print(e) + return False + + def send_message(self, contents, channel, username, icon_emoji): + ''' + Sends a POST request message with the given attributes. + + Args: + contents: The contents of the message as the 'text' field + channel: The channel to send the message + username: The username that is posting + icon_emoji: The emoji that the username has + + Returns: + The response from the POST request, False if something happened. + ''' + + # construct the JSON object + json_contents = {} + json_contents['text'] = contents + json_contents['channel'] = channel + json_contents['username'] = username + json_contents['icon_emoji'] = icon_emoji + + return self.send_json(json_contents) + +class Message(object): + def __init__(self): + + # initialize contents as a python dictionary + self.contents = {} + + # initialize attachments as a list + self.attachments = [] + + def add_attachment(self, data): + ''' + Adds the specified data as an attachment to the message. + + Args: + data: The data to add as an attachment + + Returns: + True if the attachment was added, False otherwise. + ''' + if type(data) is dict: + self.attachments.append(data) + return True + + return False + + def get_contents(self): + ''' + Get the contents of this message in terms of a Python dictionary. + + Returns: + The contents of this message. + ''' + c = self.contents + c['attachments'] = self.attachments + return c + +# Below is an example of how to use this module +# api_url = "https://hooks.slack.com/services/TOKEN" +# headers = {'content-type': 'application/json'} +# slack = SlackAPI(api_url=api_url, headers=headers, debug=True) +# slack.send_message(contents='Hello Slack!', channel='#general', username='TestAPIBot', icon_emoji=':smile:') + diff --git a/core-master@6ef85bb745a/setup/script/stat_app.py b/core-master@6ef85bb745a/setup/script/stat_app.py new file mode 100644 index 0000000..2382ae3 --- /dev/null +++ b/core-master@6ef85bb745a/setup/script/stat_app.py @@ -0,0 +1,550 @@ +#!/usr/bin/python + +# local imports + +# python modules +import MySQLdb +import string +import time +import logging, logging.handlers +import os +import sys +import csv +import json +import slack_api + +# MySQL database creds +DB_HOST = "localhost" +DB_USER = "root" +DB_PASS = "" +DB_NAME = "bat" +# slack credentials +SLACK_API_URL = 'https://hooks.slack.com/services/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' +# The name of the network +NETWORK_NAME = 'Grand Theft Minecraft' +# the icon's url used in the bot that sends the response +ICON_URL = 'https://s3-us-west-2.amazonaws.com/slack-files2/avatars/2017-09-07/237267836001_e1d81f50852486fa452c_132.png' + +# slack hookup +SLACK_HEADERS = {'content-type': 'application/json'} +SLACK_SERVER = slack_api.SlackAPI(api_url=SLACK_API_URL, headers=SLACK_HEADERS) + +# set up the logger +LOG = logging.getLogger('stat_log') +LOG.setLevel(logging.DEBUG) +handler = logging.handlers.RotatingFileHandler("stats.log", backupCount=5) +handler.setFormatter(logging.Formatter('[%(asctime)s][%(levelname)s]: %(message)s')) +LOG.addHandler(handler) + +# open MySQL connection +db = MySQLdb.connect(host=DB_HOST, user=DB_USER, passwd=DB_PASS, db=DB_NAME) +gtmdb = MySQLdb.connect(host=DB_HOST, user=DB_USER, passwd=DB_PASS, db='users') +# grab cursor +cur = db.cursor() + +class StatApp(object): + + def __init__(self, file_name='network_stats.csv'): + + # internal data, generated by collect() + self.data = [] + self.dict_data = {} + self.file_name = file_name + + # the internal data folder for stats + self.internal_folder = '/minecraft/stats' + # the file directory + name, ex: /home/cache.txt used for caching data + self.cache_dir_and_file = self.internal_folder + '/cache.txt' + + # make sure the folder exists if it doesn't + if not os.path.exists(self.internal_folder): + os.makedirs(self.internal_folder) + + def collect(self): + ''' + Collects the stats that this app should handle. + ''' + + # collect the stats + default = self.collect_default() + spec = self.collect_specific() + if spec is None: + spec = [] + + self.data = default + spec + + # create the dict representation of this data + for k,v in self.data: + self.dict_data[k] = v + + # try: + # # optional call-back for after the data is collected + # self.on_collect() + # except Exception as e: + # err_msg = 'Error occurred in on_collect(). ' + str(e) + # print(err_msg) + # LOG.error(err_msg) + + + def collect_default(self): + ''' + Collects the default stats, like number of unique players. + + Returns: + A list of tuples, in the form of (category, value), as the default stats + we are collecting. + ''' + + # we'll store results in here + result = [] + + # grab default stats and add to result + result.append(("Total Unique Players", get_total_unique_players())) + result.append(("Active Users (1 day)", get_num_players_last_x_days(1))) + result.append(("Active Users (7 days)", get_num_players_last_x_days(7))) + result.append(("Active Users (30 days)", get_num_players_last_x_days(30))) + result.append(("New Users (1 day)", get_num_players_joined_x_days(1))) + result.append(("New Users (7 days)", get_num_players_joined_x_days(7))) + result.append(("New Users (30 days)", get_num_players_joined_x_days(30))) + + return result + + def collect_specific(self): + ''' + Collects the specific stats, different for each network. + + Returns: + A list of tuples, in the form of (category, value), as the stats + we are collecting. + ''' + + # we'll store results in here + result = [] + + # NOTE: this should be implemented for specific projects. + result.append(("Votes (1 day)", get_num_votes_x_days(1))) + result.append(("Votes (7 days)", get_num_votes_x_days(7))) + result.append(("Votes (30 days)", get_num_votes_x_days(30))) + + return result + + def save_to_csv(self): + ''' + Saves this object to the csv file. + ''' + + # if there is data to save + if self.data is not None and len(self.data) > 0: + + # sort into columns / values + columns = [] + values = [] + + columns.append('Time') + #values.append(str(time.ctime(time.time()))) + values.append(str(time.strftime('%Y-%b-%d'))) + columns.append('Day') + #values.append(str(time.ctime(time.time()))) + values.append(str(time.strftime('%A'))) + + for k,v in self.data: + columns.append(k) + values.append(v) + + # write to csv, generates headers if file doesn't exist + write_row_csv(self.internal_folder + '/' + str(self.file_name), columns, values) + + def save_to_file(self): + ''' + Writes the specified internal data of this factory to a file in the form of JSON. + ''' + + # if there is data to save + if self.data is not None and len(self.data) > 0: + + # build a dictionary of key/value + cache = {} + for k,v in self.data: + cache[k] = v + + # add the timestamp + cache['Time'] = str(time.ctime(time.time())) + + with open(self.internal_folder + '/cache.txt', 'wb') as outfile: + json.dump(cache, outfile) + + def notify_slack(self): + ''' + Send a message to slack about this object. + ''' + + # create a message + message = slack_api.Message() + + # add attachments + attachments = self.get_attachments() + if attachments is not None and len(attachments) > 0: + for a in attachments: + message.add_attachment(a) + + message_data = message.get_contents() + message_data['channel'] = '#important' + message_data['username'] = NETWORK_NAME + message_data['icon_emoji'] = ':bar_chart:' + + # send message to Slack + if SLACK_SERVER is not None: + SLACK_SERVER.send_json(message_data) + + def get_attachments(self): + ''' + Get the attachments for a message that are being sent to Slack. + + Returns: + A list of attachments that are to be added to the slack message. + ''' + + result = [] + + # get the default attachments and add to result + default = self.get_def_attachments() + if default is not None and len(default) > 0: + result = result + default + + # get specific attachments and add to result + specific = self.get_spec_attachments() + if specific is not None and len(specific) > 0: + result = result + specific + + return result + + def get_def_attachments(self): + ''' + Get the default attachments that are to be sent to Slack in the message. + + Returns: + A list of attachments, in the form of a dict, to be added the Slack message. + ''' + + total_unique_players = self.dict_data["Total Unique Players"] + active_user_1 = self.dict_data["Active Users (1 day)"] + active_user_7 = self.dict_data["Active Users (7 days)"] + active_user_30 = self.dict_data["Active Users (30 days)"] + new_user_1 = self.dict_data["New Users (1 day)"] + new_user_7 = self.dict_data["New Users (7 days)"] + new_user_30 = self.dict_data["New Users (30 days)"] + vote_1 = self.dict_data["Votes (1 day)"] + vote_7 = self.dict_data["Votes (7 days)"] + vote_30 = self.dict_data["Votes (30 days)"] + + old_data = None + # if cached stats file exists + if os.path.isfile(self.cache_dir_and_file): + with open(self.cache_dir_and_file) as data_file: + old_data = json.load(data_file) + + # these will be mutated if we have cached results from previous running of script + active_user_line1 = str(active_user_1) + new_user_line1 = str(new_user_1) + active_user_line7 = str(active_user_7) + new_user_line7 = str(new_user_7) + active_user_line30 = str(active_user_30) + new_user_line30 = str(new_user_30) + vote_line1 = str(vote_1) + vote_line7 = str(vote_7) + vote_line30 = str(vote_30) + + # if cached old_data, change the line data + if old_data is not None: + prev_active1 = int(old_data['Active Users (1 day)']) + prev_new1 = int(old_data['New Users (1 day)']) + prev_active7 = int(old_data['Active Users (7 days)']) + prev_new7 = int(old_data['New Users (7 days)']) + prev_active30 = int(old_data['Active Users (30 days)']) + prev_new30 = int(old_data['New Users (30 days)']) + prev_vote1 = int(old_data['Votes (1 day)']) + prev_vote7 = int(old_data['Votes (7 days)']) + prev_vote30 = int(old_data['Votes (30 days)']) + + # calculate change, expressed in % + active_change1 = "{0:.2f}".format(get_state_of_change(prev_active1, active_user_1)) + new_change1 = "{0:.2f}".format(get_state_of_change(prev_new1, new_user_1)) + active_change7 = "{0:.2f}".format(get_state_of_change(prev_active7, active_user_7)) + new_change7 = "{0:.2f}".format(get_state_of_change(prev_new7, new_user_7)) + active_change30 = "{0:.2f}".format(get_state_of_change(prev_active30, active_user_30)) + new_change30 = "{0:.2f}".format(get_state_of_change(prev_new30, new_user_30)) + vote_change1 = "{0:.2f}".format(get_state_of_change(prev_vote1, vote_1)) + vote_change7 = "{0:.2f}".format(get_state_of_change(prev_vote7, vote_7)) + vote_change30 = "{0:.2f}".format(get_state_of_change(prev_vote30, vote_30)) + + # active_change1 = int(round(get_state_of_change(prev_active1, active_user_1))) + # new_change1 = int(round(get_state_of_change(prev_new1, new_user_1))) + # active_change7 = int(round(get_state_of_change(prev_active7, active_user_7))) + # new_change7 = int(round(get_state_of_change(prev_new7, new_user_7))) + # active_change30 = int(round(get_state_of_change(prev_active30, active_user_30))) + # new_change30 = int(round(get_state_of_change(prev_new30, new_user_30))) + + active_user_line1 = str(active_user_1) + ' (' + str(active_change1) + '%)' + new_user_line1 = str(new_user_1) + ' (' + str(new_change1) + '%)' + active_user_line7 = str(active_user_7) + ' (' + str(active_change7) + '%)' + new_user_line7 = str(new_user_7) + ' (' + str(new_change7) + '%)' + active_user_line30 = str(active_user_30) + ' (' + str(active_change30) + '%)' + new_user_line30 = str(new_user_30) + ' (' + str(new_change30) + '%)' + vote_line1 = str(vote_1) + ' (' + str(vote_change1) + '%)' + vote_line7 = str(vote_7) + ' (' + str(vote_change7) + '%)' + vote_line30 = str(vote_30) + ' (' + str(vote_change30) + '%)' + + contents = {} + contents['title'] = 'User Report' + contents['color'] = 'good' + + # build the fields + fields = [] + f1 = {} + f1['title'] = 'Active (Last 7 days)' + f1['value'] = active_user_line7 + f1['short'] = True + f2 = {} + f2['title'] = 'Active (Last 30 days)' + f2['value'] = active_user_line30 + f2['short'] = True + f3 = {} + f3['title'] = 'New (Last 7 days)' + f3['value'] = new_user_line7 + f3['short'] = True + f4 = {} + f4['title'] = 'New (Last 30 days)' + f4['value'] = new_user_line30 + f4['short'] = True + f5 = {} + f5['title'] = 'Votes (Last 7 days)' + f5['value'] = vote_line7 + f5['short'] = True + f6 = {} + f6['title'] = 'Votes (Last 30 days)' + f6['value'] = vote_line30 + f6['short'] = True + f7 = {} + f7['title'] = 'Total Users' + f7['value'] = int(total_unique_players) + f7['short'] = True + + fields.append(f1) + fields.append(f2) + fields.append(f3) + fields.append(f4) + fields.append(f5) + fields.append(f6) + fields.append(f7) + contents['fields'] = fields + + if type(contents) is dict: + # general footer + contents['footer'] = str(NETWORK_NAME) + contents['footer_icon'] = str(ICON_URL) + # attach the timestamp + contents['ts'] = int(time.time()) + + result = [] + result.append(contents) + + return result + + def get_spec_attachments(self): + ''' + Optional implementation to get specific stats attachments to be sent to Slack. + + Returns: + A list of attachments, in the form of a dict, to add to the message to be sent to Slack. + ''' + pass + +def write_row_csv(fname, headers, data_row): + ''' + Writes the data to a csv file. + + Args: + fname: absolute name of the file, with directory + headers: list of strings representing the column headings + data_row: the data entry to write, as a list + ''' + + # if no file, generate headings + if not os.path.isfile(fname): + cw = csv.writer(open(fname, 'wb')) + cw.writerow(headers) + + # open csv writer with the append feature + cw = csv.writer(open(fname, 'ab')) + + # write the row + cw.writerow(data_row) + +def get_total_unique_players(): + ''' + Gets the total amount of players that have ever logged in. + ''' + query = '''SELECT COUNT(*) FROM BAT_players''' + cur.execute(query) + + count = 0 + for tup in cur: + count = int(tup[0]) + + # commit query + # db.commit() + + return count + +def get_num_players_last_x_days(day): + ''' + Args: + day - the amount of days to look back + + Gets the number of players that last logged on in the past day days. + ''' + query = '''SELECT COUNT(*) FROM BAT_players WHERE lastlogin >= (CURDATE() - INTERVAL %s DAY);''' + data = (day) + cur.execute(query, [data]) + + count = 0 + for tup in cur: + count = int(tup[0]) + + # # commit query + # db.commit() + + return count + +def get_num_players_joined_x_days(day): + ''' + Args: + day - the amount of days to look back + + Gets the number of players that joined the server in the past day days. + ''' + + cur = db.cursor() + query = '''SELECT COUNT(*) FROM BAT_players WHERE firstlogin >= (CURDATE() - INTERVAL %s DAY);''' + data = (day) + cur.execute(query, [data]) + + count = 0 + for tup in cur: + count = int(tup[0]) + + # commit query + # db.commit() + + return count + +def get_num_votes_x_days(day): + ''' + Args: + day - the amount of days to look back + + Gets the number of players that joined the server in the past day days. + ''' + + # grab cursor + cur = gtmdb.cursor() + query = '''SELECT COUNT(*) FROM log_user_vote WHERE creation >= (CURDATE() - INTERVAL %s DAY);''' + data = (day) + cur.execute(query, [data]) + + count = 0 + for tup in cur: + count = int(tup[0]) + + # commit query + # db.commit() + + return count + +def get_state_of_change(prev, new): + ''' + Calculates the percent of change from the previous to the new. + + Ex: If prev=50, and new=100, the state of change is (100-50)/50 * 100 = 100% + + Returns: + The percent state of change, so times 100. + ''' + + diff = int(new - prev) + change = 0 + if prev > 0: + change = float(diff) / float(prev) + + return change * 100.0 + +######### +# BELOW IS THE ACTUAL SCRIPT LOGIC +######### + +def command_help(): + print('You run this script by using: ') + print('- python stat_app.py run') + print('\nYou run and publish results to slack by: ') + print('- python stat_app.py publish') + print('\nYou can display test information, without writing it to files: ') + print('- python stat_app.py test') + +def command_test(): + print('Running script in test mode...') + LOG.debug('Running script in test mode...') + + # construct a new stats object + stat_obj = StatApp() + + # collect the stats information, and cache it inside the object + stat_obj.collect() + + if stat_obj.data is not None and len(stat_obj.data) > 0: + for k,v in stat_obj.data: + print(str(k) + ' -> ' + str(v)) + +def command_run(slack_post=False): + print('Running script in execute mode, slack_post=' + str(slack_post)) + LOG.debug('Running script in execute mode, slack_post=' + str(slack_post)) + + # construct a new stats object + stat_obj = StatApp() + + # collect the stats information, and cache it inside the object + stat_obj.collect() + LOG.debug('Data collected: ' + str(stat_obj.dict_data)) + + # write to csv + stat_obj.save_to_csv() + + if slack_post == True: + stat_obj.notify_slack() + + # save to file, we can use to retrieve previous day's information + stat_obj.save_to_file() + + print('Script has finished running. Look in ' + str(stat_obj.internal_folder)) + LOG.debug('Script has finished running. Look in ' + str(stat_obj.internal_folder)) + +if __name__ == '__main__': + + # execute from command line + if len(sys.argv) > 1: + command = str(sys.argv[1]).lower() + + if command == 'help': + command_help() + elif command == 'test': + command_test() + elif command == 'run': + command_run(slack_post=False) + elif command == 'publish': + command_run(slack_post=True) + +# commit query +db.commit() +cur.close() + +# close the connection +db.close() \ No newline at end of file diff --git a/core-master@6ef85bb745a/setup/script/transpose_gang.py b/core-master@6ef85bb745a/setup/script/transpose_gang.py new file mode 100644 index 0000000..e49c7db --- /dev/null +++ b/core-master@6ef85bb745a/setup/script/transpose_gang.py @@ -0,0 +1,383 @@ +#!/usr/bin/python + +# local imports + +# python modules +import MySQLdb +import string +import time + +DB_HOST = "localhost" +DB_USER = "root" +DB_PASS = "" +DB_NAME = "" +# number of queries per interval +MAX_QUERY_TICK = 10000000 +# how long in seconds we sleep for +TICK_SLEEP = 1 + +SERVER_KEY = "GTM0" +QUERY_GET_GANGS = '''SELECT name, leader, leaderName, description, maxMembers FROM gtm0_gangs;''' +QUERY_GET_GANG_RELATIONS = '''SELECT gang1, gang2, relation FROM gtm0_gangs_relations;''' +QUERY_GET_USER_GANG = '''SELECT uuid, gang, gangRank FROM gtm0 WHERE gang IS NOT NULL;''' + + +# open MySQL connection +db = MySQLdb.connect(host=DB_HOST, user=DB_USER, passwd=DB_PASS, db=DB_NAME) +# grab cursor +cur = db.cursor() + +# print out variables +print("MAX_QUERY_TICK = " + str(MAX_QUERY_TICK)) +print("TICK_SLEEP = " + str(TICK_SLEEP)) +print("SERVER_KEY = " + str(SERVER_KEY)) +print("QUERY_GET_GANGS = " + str(QUERY_GET_GANGS)) +print("QUERY_GET_GANG_RELATIONS = " + str(QUERY_GET_GANG_RELATIONS)) +print("QUERY_GET_USER_GANG = " + str(QUERY_GET_USER_GANG)) + +# CREATE TABLE IF NOT EXISTS gtm_gang( +# id INT NOT NULL AUTO_INCREMENT, +# server_key VARCHAR(10) NOT NULL, +# name VARCHAR(36) NOT NULL, +# owner BINARY(16) NOT NULL, +# description VARCHAR(255) NOT NULL, +# max_members INT(11) NOT NULL, +# PRIMARY KEY (id), +# INDEX (server_key), +# INDEX (name) +# ); + +# represents a gang +class Gang(object): + def __init__(self): + # id of the gang + self.id = -1 + # the server that this gang is for + self.server_key = None + # name of the gang + self.name = None + # uuid of the owner of the gang + self.owner = None + # description of the gang + self.description = None + # max members this gang can hold + self.max_members = 0 + + def __str__(self): + return 'id=' + str(self.id) + ", server_key=" + str(self.server_key) + ", name=" + str(self.name) + ", owner=" + str(self.owner) + ", description=" + str(self.description) + ", max_members=" + str(self.max_members) + +# CREATE TABLE IF NOT EXISTS gtm_gang_member( +# gang_id INT NOT NULL, +# uuid BINARY(16) NOT NULL, +# role SMALLINT(6) DEFAULT 1, +# PRIMARY KEY (gang_id, uuid), +# FOREIGN KEY (gang_id) REFERENCES gtm_gang(id) ON DELETE CASCADE +# ); + +# represents a gang member +class GangMember(object): + def __init__(self): + # the id of the gang + self.gang_id = -1 + # the name of the gang + self.gang_name = None + # uuid of the member + self.uuid = None + # role of the member + self.role = None + + def __str__(self): + return "gang_id=" + str(self.gang_id) + ", gang_name=" + str(self.gang_name) + ",uuid=" + str(self.uuid) + ", role=" + str(self.role) + +# CREATE TABLE IF NOT EXISTS gtm_gang_relation( +# gang_id INT NOT NULL, +# other_id INT NOT NULL, +# relation VARCHAR(10), +# PRIMARY KEY (gang_id, other_id), +# FOREIGN KEY (gang_id) REFERENCES gtm_gang(id) ON DELETE CASCADE, +# FOREIGN KEY (other_id) REFERENCES gtm_gang(id) ON DELETE CASCADE +# ); + +def get_gangs(): + ''' + Get all the gangs that belong in the specified table. + + Returns: + A list of dictionary objects that represent a gang. + ''' + + # # grab cursor + # cur = db.cursor() + cur.execute(QUERY_GET_GANGS) + + gangs = [] + for tup in cur: + g = Gang() + g.server_key = str(SERVER_KEY) + g.name = str(tup[0]) + g.owner = string.replace(str(tup[1]), "-", "") + g.description = str(tup[3]) + g.max_members = int(tup[4]) + gangs.append(g) + + # # commit query + # db.commit() + # cur.close() + + return gangs + +def create_gang(gang): + ''' + Create the new representation of the gang in the new table. + + Args: + gang: The gang object to create. + ''' + # # grab cursor + # cur = db.cursor() + query = '''INSERT INTO gtm_gang (server_key, name, owner, description, max_members) VALUES (%s, %s, UNHEX(%s), %s, %s);''' + data = (str(gang.server_key), str(gang.name), str(gang.owner), str(gang.description), int(gang.max_members)) + cur.execute(query, data) + + # # commit query + # db.commit() + # cur.close() + +def create_gang_member(gang_member): + ''' + Create the gang member representation in the database. + + Args: + gang_member: The member object to create + ''' + + # get the role of the member + rank = gang_member.role + # determine the role to change it to + role = 1 + + if rank is not None: + rank = str(rank).lower() + + if rank == 'member': + role = 1 + elif rank == 'trusted': + role = 2 + elif rank == 'coleader': + role = 5 + elif rank == 'leader': + role = 6 + + # # grab cursor + # cur = db.cursor() + query = '''INSERT INTO gtm_gang_member (gang_id, uuid, role) VALUES (%s, UNHEX(%s), %s);''' + data = (int(gang_member.gang_id), str(gang_member.uuid), int(role)) + cur.execute(query, data) + + # # commit query + # db.commit() + # cur.close() + +def create_gang_relation(gang1_id, gang2_id, relation): + ''' + Create the gang relation in the database. + + Args: + gang1_id: The id of the first gang + gang2_id: The id of the second gang + relation: The relationship they share + ''' + + # # grab cursor + # cur = db.cursor() + query = '''INSERT INTO gtm_gang_relation (gang_id, other_id, relation) VALUES (%s, %s, %s);''' + data = (int(gang1_id), int(gang2_id), str(relation)) + cur.execute(query, data) + + # # commit query + # db.commit() + # cur.close() + +def get_relations(): + ''' + Get a list of relation objects that need parsed. + + Returns: + A relation objects that need parsed, in the form of a tuple (gang1, gang2, relation). + ''' + + # # grab cursor + # cur = db.cursor() + cur.execute(QUERY_GET_GANG_RELATIONS) + + relations = [] + for tup in cur: + gang1 = str(tup[0]) + gang2 = str(tup[1]) + relation = str(tup[2]) + + relations.append((gang1, gang2, relation)) + + # # commit query + # db.commit() + # cur.close() + + return relations + +def get_users(): + ''' + Get a list of users and their respective gang member information. + + Returns: + A list of GangMember objects where each one represents information about a member of a gang. + ''' + + # # grab cursor + # cur = db.cursor() + cur.execute(QUERY_GET_USER_GANG) + + users = [] + for tup in cur: + gm = GangMember() + gm.uuid = string.replace(str(tup[0]), "-", "") + #print('gm.uuid', gm.uuid) + gm.gang_name = str(tup[1]) + #print('gm.gang_name', gm.gang_name) + gm.role = str(tup[2]) + #print('gm.role', gm.role) + users.append(gm) + + # # commit query + # db.commit() + # cur.close() + + return users + +def find_gang_id(server_key, gang_name): + ''' + Find the id of a gang by their gang name. + + Args: + server_key: The server key for the gang + name: The name of the gang to find + + Returns: + The id of the gang, if one exists, otherwise None. + ''' + + # # grab cursor + # cur = db.cursor() + query = ''' SELECT id FROM gtm_gang WHERE server_key=%s AND name=%s;''' + data = (str(server_key), str(gang_name)) + cur.execute(query, data) + + gang_id = None + for tup in cur: + if len(tup) > 0: + gang_id = int(tup[0]) + + # # commit query + # db.commit() + # cur.close() + + return gang_id + + +######### +# BELOW IS THE ACTUAL SCRIPT LOGIC +######### + +print('Running script...') +start_time = time.time() + +# limit the amount of queries to the database per interval +tick = 0 + +# get all the gangs in old tables +gangs = get_gangs() +gangs_created = 0 +for gang in gangs: + tick += 1 + # create relation in new table + try: + create_gang(gang) + gangs_created += 1 + except Exception as e: + print(e) + + if tick > MAX_QUERY_TICK: + tick = 0 + time.sleep(TICK_SLEEP) + + +# get all the old relations +relations = get_relations() +relations_created = 0 +for rel in relations: + tick += 1 + (gang1, gang2, relation) = rel + + # only do valid gangs + gang1_id = find_gang_id(SERVER_KEY, gang1) + if gang1_id is not None: + + gang2_id = find_gang_id(SERVER_KEY, gang2) + if gang2_id is not None: + try: + print("#" + str(relations_created) + " - Creating gang relation " + str(rel)) + # create relation in new table + create_gang_relation(gang1_id, gang2_id, relation) + relations_created += 1 + except Exception as e: + print(e) + + if tick > MAX_QUERY_TICK: + tick = 0 + time.sleep(TICK_SLEEP) + +# get all users in the old table +gang_members = get_users() +gang_members_created = 0 + +tick = 0 +for gm in gang_members: + tick += 1 + + # find the gang_id with the given name + gang_id = find_gang_id(SERVER_KEY, gm.gang_name) + if gang_id is not None: + gm.gang_id = gang_id + + try: + print("#" + str(gang_members_created) + " - creating gang member=" + str(gm)) + + # create new gang member + create_gang_member(gm) + gang_members_created += 1 + except Exception as e: + print(e) + + if tick > MAX_QUERY_TICK: + tick = 0 + time.sleep(TICK_SLEEP) + +# for unt in# print("failed to " + str(unt)) +# print(str(len(untranferred)) + " gang members were not found gang for") untranferred: + +# commit query +db.commit() +cur.close() + +run_time = time.time() - start_time +print('Script is now complete! (' + str(run_time) + ' secs)') +print('Number of gangs found: ' + str(len(gangs))) +print('Number of gangs transposed: ' + str(gangs_created)) +print() +print('Number of relations found: ' + str(len(relations))) +print('Number of relations transposed: ' + str(relations_created)) +print() +print('Number of gang members found: ' + str(len(gang_members))) +print('Number of gang members transposed: ' + str(gang_members_created)) + +# close the connection +db.close() \ No newline at end of file diff --git a/core-master@6ef85bb745a/setup/script/transpose_house.py b/core-master@6ef85bb745a/setup/script/transpose_house.py new file mode 100644 index 0000000..30077c3 --- /dev/null +++ b/core-master@6ef85bb745a/setup/script/transpose_house.py @@ -0,0 +1,232 @@ +#!/usr/bin/python + +# local imports + +# python modules +import MySQLdb +import string +import time + +DB_HOST = "localhost" +DB_USER = "root" +DB_PASS = "" +DB_NAME = "" +# number of queries per interval +MAX_QUERY_TICK = 1000000000 +# how long in seconds we sleep for +TICK_SLEEP = 1 + +SERVER_KEY = "GTM0" +QUERY_GET_REG_HOUSES = ''' SELECT uuid, houseId FROM gtm0_houses; ''' +QUERY_GET_REG_CHESTS = '''SELECT uuid, houseId, chestId, contents FROM gtm0_houses_chests; ''' + +# open MySQL connection +db = MySQLdb.connect(host=DB_HOST, user=DB_USER, passwd=DB_PASS, db=DB_NAME) +# grab cursor +cur = db.cursor() + +# print out variables +print("MAX_QUERY_TICK = " + str(MAX_QUERY_TICK)) +print("TICK_SLEEP = " + str(TICK_SLEEP)) +print("SERVER_KEY = " + str(SERVER_KEY)) +print("QUERY_GET_REG_HOUSES = " + str(QUERY_GET_REG_HOUSES)) +print("QUERY_GET_REG_CHESTS = " + str(QUERY_GET_REG_CHESTS)) + +def get_regular_houses(): + ''' + Get all the regular houses known on the network. + + Return: + A list of pairs in the form of (uuid, house_num) for all the regular houses. + ''' + + # # grab cursor + # cur = db.cursor() + cur.execute(QUERY_GET_REG_HOUSES) + + houses = [] + for tup in cur: + + uuid = string.replace(str(tup[0]), "-", "") + house_num = int(tup[1]) + + houses.append((uuid, house_num)) + + # commit query + # db.commit() + # cur.close() + + return houses + +def get_regular_chests(): + ''' + Get all the regular chests information on the network. + + Return: + A list of tuples in the form of (uuid, house_num, chest_id, contents) + that represent data for a chest. + ''' + + # # grab cursor + # cur = db.cursor() + cur.execute(QUERY_GET_REG_CHESTS) + + chests = [] + for tup in cur: + uuid = string.replace(str(tup[0]), "-", "") + house_num = int(tup[1]) + chest_id = int(tup[2]) + contents = str(tup[3]) + + chests.append((uuid, house_num, chest_id, contents)) + + # # commit query + # db.commit() + # cur.close() + + return chests + +def find_house_id(house_num, server_key, premium): + ''' + Find the id of the house that was generated by the database. + + Args: + house_num: The number of the house + server_key: The key of server that this house is for + premium: Whether or not this is a premium house + + Return: + A list of tuples in the form of (uuid, house_num, chest_id, contents) + that represent data for a chest. + ''' + + # grab cursor + # cur = db.cursor() + query = '''SELECT id FROM gtm_house WHERE house_num=%s AND server_key=%s AND premium=%s ''' + data = (int(house_num), str(server_key), bool(premium)) + cur.execute(query, data) + + house_id = None + for tup in cur: + if len(tup) > 0: + house_id = int(tup[0]) + + # # commit query + # db.commit() + # cur.close() + + return house_id + +# CREATE TABLE IF NOT EXISTS gtm_house_chest ( +# house_id INT NOT NULL, +# uuid BINARY(16) NOT NULL, +# chest_id INT NOT NULL, +# content BLOB DEFAULT NULL, +# PRIMARY KEY (house_id, uuid), +# INDEX(uuid), +# FOREIGN KEY (house_id) REFERENCES gtm_house(id) ON DELETE CASCADE +# ); + +def create_house_chest(house_id, uuid, chest_id, content): + ''' + Create chest information for the respective house. + + Args: + house_id: The id of the house + uuid: The uuid of the user for the respective house + chest_id: The id of the chest + content: The contents of the chest + ''' + # # grab cursor + # cur = db.cursor() + query = '''INSERT INTO gtm_house_chest (house_id, uuid, chest_id, content) VALUES (%s, UNHEX(%s), %s, %s);''' + data = (int(house_id), str(uuid), int(chest_id), str(content)) + cur.execute(query, data) + + # # commit query + # db.commit() + # cur.close() + +def create_house_user(house_id, uuid, is_owner): + ''' + Create a new house user record in the database for the specified house. + + Args: + house_id: The id of the house + uuid: The uuid of the user for the house + is_owner: Whether the user owns the house + ''' + + # # grab cursor + # cur = db.cursor() + + query = ''' INSERT INTO gtm_house_user (house_id, uuid, is_owner) VALUES (%s, UNHEX(%s), %s); ''' + data = (int(house_id), str(uuid), bool(is_owner)) + cur.execute(query, data) + + # # commit query + # db.commit() + # cur.close() + +######### +# BELOW IS THE ACTUAL SCRIPT LOGIC +######### + +print('Running script...') +start_time = time.time() + +# limit the amount of queries to the database per interval +tick = 0 + +houses = get_regular_houses() +houses_created = 0 +for uuid, house_num in houses: + tick += 1 + + # find generated house id + house_id = find_house_id(house_num=house_num, server_key=SERVER_KEY, premium=0) + if house_id is not None: + + # create the user in the house relation + create_house_user(house_id=house_id, uuid=uuid, is_owner=True) + houses_created += 1 + + if tick > MAX_QUERY_TICK: + tick = 0 + time.sleep(TICK_SLEEP) + +# get all the houses in old tables +chests = get_regular_chests() +chests_created = 0 +for uuid, house_num, chest_id, contents in chests: + tick += 1 + + # find generated house id + house_id = find_house_id(house_num=house_num, server_key=SERVER_KEY, premium=0) + if house_id is not None: + + try: + # create house data in new table + create_house_chest(house_id=house_id, uuid=uuid, chest_id=chest_id, content=contents) + chests_created += 1 + except Exception as e: + print(e) + print('Error for house_id=' + str(house_id) + ', uuid=' + str(uuid) + ', chest_id=' + str(chest_id)) + + if tick > MAX_QUERY_TICK: + tick = 0 + time.sleep(TICK_SLEEP) + +# commit query +db.commit() +cur.close() + +run_time = time.time() - start_time +print('Script is now complete! (' + str(run_time) + ' secs)') +print('Number of houses found: ' + str(len(houses))) +print('Number of houses transposed: ' + str(houses_created)) +print('Number of chests found: ' + str(len(chests))) +print('Number of chests transposed: ' + str(chests_created)) + +# close the connection +db.close() \ No newline at end of file diff --git a/core-master@6ef85bb745a/setup/script/transpose_house_yml.py b/core-master@6ef85bb745a/setup/script/transpose_house_yml.py new file mode 100644 index 0000000..926efa9 --- /dev/null +++ b/core-master@6ef85bb745a/setup/script/transpose_house_yml.py @@ -0,0 +1,333 @@ +#!/usr/bin/python + +# local imports + +# python modules +import yaml +import MySQLdb +import string +import time +import json + +DB_HOST = "localhost" +DB_USER = "root" +DB_PASS = "" +DB_NAME = "" +# number of queries per interval +MAX_QUERY_TICK = 10000000 +# how long in seconds we sleep for +TICK_SLEEP = 1 + +SERVER_KEY = "GTM0" +# mutated by script +PREMIUM = True + +# print out variables +print("MAX_QUERY_TICK = " + str(MAX_QUERY_TICK)) +print("TICK_SLEEP = " + str(TICK_SLEEP)) +print("SERVER_KEY = " + str(SERVER_KEY)) + +# open MySQL connection +db = MySQLdb.connect(host=DB_HOST, user=DB_USER, passwd=DB_PASS, db=DB_NAME) + +# CREATE TABLE IF NOT EXISTS gtm_house ( +# id INT NOT NULL AUTO_INCREMENT, +# house_num INT NOT NULL, +# server_key VARCHAR(10) NOT NULL, +# premium TINYINT(1) NOT NULL DEFAULT 0, +# currency VARCHAR(10) NOT NULL, +# price INT NOT NULL, +# PRIMARY KEY (id), +# UNIQUE INDEX (house_num, server_key, premium) +# ); + +def create_house(house_num, server_key, premium, currency, price): + ''' + Create the new representation of the house in the new table. + + Args: + house_num: The number id of the house + server_key: The server key, i.e. gtm1 + premium: Whether or not this is a premium house + currency: The currency for purchases + price: The cost of the purchase + + Return: + The id of the house that was just created. + ''' + + # grab cursor + cur = db.cursor() + + query = ''' INSERT INTO gtm_house (house_num, server_key, premium, currency, price) VALUES (%s, %s, %s, %s, %s); ''' + data = (int(house_num), str(server_key), bool(premium), str(currency), int(price)) + cur.execute(query, data) + + # commit query + db.commit() + + generated_house_id = cur.lastrowid + cur.close() + + return generated_house_id + +# CREATE TABLE IF NOT EXISTS gtm_house_data ( +# house_id INT NOT NULL, +# hotspot_id INT NOT NULL AUTO_INCREMENT, +# hotspot_type VARCHAR(5) NOT NULL, +# data BLOB DEFAULT NULL, +# PRIMARY KEY (hotspot_id), +# INDEX (house_id), +# FOREIGN KEY (house_id) REFERENCES gtm_house(id) ON DELETE CASCADE +# ); + +def create_house_data(house_id, hotspot_type, data): + ''' + Create a new house data record in the database for the given house. + + Args: + house_id: The id of the house + hotspot_type: The type of the hotspot + data: The data representation for the hotspot + ''' + + # grab cursor + cur = db.cursor() + + query = ''' INSERT INTO gtm_house_data (house_id, hotspot_type, data) VALUES (%s, %s, %s); ''' + data = (int(house_id), str(hotspot_type), str(data)) + cur.execute(query, data) + + # commit query + db.commit() + cur.close() + +# CREATE TABLE IF NOT EXISTS gtm_house_user ( +# house_id INT NOT NULL, +# uuid BINARY(16) NOT NULL, +# is_owner TINYINT(1) NOT NULL, +# PRIMARY KEY (house_id, uuid), +# INDEX(uuid), +# FOREIGN KEY (house_id) REFERENCES gtm_house(id) ON DELETE CASCADE +# ); + +def create_house_user(house_id, uuid, is_owner): + ''' + Create a new house user record in the database for the specified house. + + Args: + house_id: The id of the house + uuid: The uuid of the user for the house + is_owner: Whether the user owns the house + ''' + + # grab cursor + cur = db.cursor() + + query = ''' INSERT INTO gtm_house_user (house_id, uuid, is_owner) VALUES (%s, UNHEX(%s), %s); ''' + data = (int(house_id), str(uuid), bool(is_owner)) + cur.execute(query, data) + + # commit query + db.commit() + cur.close() + +def run_script(file_name): + ''' + Run the tranpose of the house script. + + Args: + file_name: The name of the file to read from. + ''' + + num_houses = 0 + houses_created = 0 + + # lets get a list of keys that we know about + with open(file_name, 'r') as stream: + try: + + # get the data + data = yaml.load(stream) + num_houses = len(data) + + for house_num in data: + + print('Running house #' + str(house_num)) + + # get the dict for the house data + house_data = data[house_num] + currency = None + price = None + owner = None + + # if 'blocks' not in house_data: + # continue + + if 'permits' in house_data: + price = int(house_data['permits']) + currency = "PERMIT" + elif 'price' in house_data: + price = int(house_data['price']) + currency = "MONEY" + + if 'owner' in house_data: + owner = string.replace(str(house_data['owner']), "-", "") + + # create the generic house data + generated_house_id = int(create_house(house_num=int(house_num), server_key=str(SERVER_KEY), premium=bool(PREMIUM), currency=currency, price=price)) + + # if valid generated house + if generated_house_id is not None and generated_house_id > 0: + + houses_created += 1 + + # if valid owner, add as a user + if owner is not None: + create_house_user(house_id=generated_house_id, uuid=owner, is_owner=True) + + # parse the guests of this house + if 'guests' in house_data: + for guest in house_data['guests']: + guest_uuid = string.replace(str(guest), "-", "") + create_house_user(house_id=generated_house_id, uuid=guest_uuid, is_owner=False) + + # parse the chests of this house + if 'chests' in house_data: + chest_data = house_data['chests'] + + # for each chest + for chest_id in chest_data: + + # a chest can have multiple locations + chest_loc1 = None + chest_loc2 = None + if 'loc1' in chest_data[chest_id]: + chest_loc1 = str(chest_data[chest_id]['loc1']) + if 'loc2' in chest_data[chest_id]: + chest_loc2 = str(chest_data[chest_id]['loc2']) + + # build the json for this object + chest_json = {} + chest_json['id'] = int(chest_id) + if chest_loc1 is not None: + chest_json['loc1'] = str(chest_loc1) + if chest_loc2 is not None: + chest_json['loc2'] = str(chest_loc2) + + # create chest entry + create_house_data(house_id=generated_house_id, hotspot_type="CHEST", data=str(json.dumps(chest_json))) + + if 'doors' in house_data: + door_data = house_data['doors'] + + for door_id in door_data: + + loc = None + insideLoc = None + outsideLoc = None + if 'location' in door_data[door_id]: + loc = str(door_data[door_id]['location']) + if 'insideLocation' in door_data[door_id]: + insideLoc = str(door_data[door_id]['insideLocation']) + if 'outsideLocation' in door_data[door_id]: + outsideLoc = str(door_data[door_id]['outsideLocation']) + + # build the json for this object + door_json = {} + door_json['id'] = int(door_id) + if loc is not None: + door_json['location'] = str(loc) + if insideLoc is not None: + door_json['insideLocation'] = str(insideLoc) + if outsideLoc is not None: + door_json['outsideLocation'] = str(outsideLoc) + + # create chest entry + create_house_data(house_id=generated_house_id, hotspot_type="DOOR", data=str(json.dumps(door_json))) + + if 'signs' in house_data: + sign_data = house_data['signs'] + + for sign_loc in sign_data: + sign_json = {} + sign_json['loc'] = str(sign_loc) + + # create sign entry + create_house_data(house_id=generated_house_id, hotspot_type="SIGN", data=str(json.dumps(sign_json))) + + if 'blocks' in house_data: + block_data = house_data['blocks'] + + for block_loc in block_data: + + block_info = None + if 'default' in block_data[block_loc]: + block_info = str(block_data[block_loc]['default']) + + # build the json for this object + block_json = {} + block_json['loc'] = str(block_loc) + if block_info is not None: + block_json['block_data'] = str(block_info) + + # create trashcan entry + create_house_data(house_id=generated_house_id, hotspot_type="BLOCK", data=str(json.dumps(block_json))) + + if 'trashcans' in house_data: + trash_data = house_data['trashcans'] + + for trashcan_id in trash_data: + + loc = None + owned = None + if 'loc' in trash_data[trashcan_id]: + loc = str(trash_data[trashcan_id]['loc']) + if 'owned' in trash_data[trashcan_id]: + owned = bool(trash_data[trashcan_id]['owned']) + + # build the json for this object + trash_json = {} + trash_json['id'] = int(trashcan_id) + if loc is not None: + trash_json['loc'] = str(loc) + if owned is not None: + trash_json['owned'] = bool(owned) + + # create trashcan entry + create_house_data(house_id=generated_house_id, hotspot_type="TRASH", data=str(json.dumps(trash_json))) + + else: + print('Unknown error occurred when trying to transpose data for id=' + str(house_num) + " and data=" + str(house_data)) + break + + except yaml.YAMLError as exc: + print(exc) + + print('Initial amount of houses: ' + str(num_houses)) + print('Number of houses transposed: ' + str(houses_created)) + + + +######### +# BELOW IS THE ACTUAL SCRIPT LOGIC +######### + +print('Running script for both houses.yml and premiumHouses.yml.' ) +print() +start_time = time.time() + +print('Running houses.yml...') +PREMIUM = False +run_script('houses.yml') +run_time = time.time() - start_time +print('Finished script for houses.yml in ' + str(run_time) + ' secs.') + +print('Running premiumHouses.yml...') +PREMIUM = True +run_script('premiumHouses.yml') +run_time = time.time() - start_time +print('Finished script for premiumHouses.yml in ' + str(run_time) + ' secs.') + +# close the connection +db.close() \ No newline at end of file diff --git a/core-master@6ef85bb745a/setup/script/transpose_user.py b/core-master@6ef85bb745a/setup/script/transpose_user.py new file mode 100644 index 0000000..b359216 --- /dev/null +++ b/core-master@6ef85bb745a/setup/script/transpose_user.py @@ -0,0 +1,115 @@ +#!/usr/bin/python + +# local imports + +# python modules +import MySQLdb +import string +import time + +DB_HOST = "localhost" +DB_USER = "root" +DB_PASS = "" +DB_NAME = "" +# number of queries per interval +MAX_QUERY_TICK = 10000000 +# how long in seconds we sleep for +TICK_SLEEP = 1 + +QUERY_GET_USERS = ''' SELECT uuid, lastname FROM users; ''' + +# open MySQL connection +db = MySQLdb.connect(host=DB_HOST, user=DB_USER, passwd=DB_PASS, db=DB_NAME) +# grab cursor +cur = db.cursor() + +# print out variables +print("MAX_QUERY_TICK = " + str(MAX_QUERY_TICK)) +print("TICK_SLEEP = " + str(TICK_SLEEP)) +print("QUERY_GET_USERS = " + str(QUERY_GET_USERS)) + +def get_users(): + ''' + Get all the users known on the network. + + Return: + A list of pairs in the form of (uuid, name) for all the users. + ''' + + # grab cursor + #cur = db.cursor() + cur.execute(QUERY_GET_USERS) + + users = [] + for tup in cur: + + uuid = string.replace(str(tup[0]), "-", "") + name = str(tup[1]) + + users.append((uuid, name)) + + # commit query + # db.commit() + # cur.close() + + return users + +# CREATE TABLE IF NOT EXISTS user( +# uuid BINARY(16) NOT NULL, +# name VARCHAR(16) NOT NULL, +# PRIMARY KEY (uuid), +# INDEX (name) +# ); + +def create_user(uuid, name): + ''' + Create user information for the respective player. + + Args: + uuid: The uuid of the user + name: The name of the user + ''' + # grab cursor + # cur = db.cursor() + query = '''INSERT IGNORE INTO user VALUES (UNHEX(%s), %s);''' + data = (str(uuid), str(name)) + cur.execute(query, data) + + # commit query + # db.commit() + # cur.close() + +######### +# BELOW IS THE ACTUAL SCRIPT LOGIC +######### + +print('Running script...') +start_time = time.time() + +# limit the amount of queries to the database per interval +tick = 0 + +users = get_users() +users_created = 0 +for uuid, name in users: + tick += 1 + + create_user(uuid=uuid, name=name) + users_created += 1 + + if tick > MAX_QUERY_TICK: + tick = 0 + time.sleep(TICK_SLEEP) + +db.commit() +cur.close() + +# convert ranks + +run_time = time.time() - start_time +print('Script is now complete! (' + str(run_time) + ' secs)') +print('Number of users found: ' + str(len(users))) +print('Number of users transposed: ' + str(users_created)) + +# close the connection +db.close() \ No newline at end of file diff --git a/core-master@6ef85bb745a/setup/script/transpose_user_ammo.py b/core-master@6ef85bb745a/setup/script/transpose_user_ammo.py new file mode 100644 index 0000000..757b7d5 --- /dev/null +++ b/core-master@6ef85bb745a/setup/script/transpose_user_ammo.py @@ -0,0 +1,155 @@ +#!/usr/bin/python + +# local imports + +# python modules +import MySQLdb +import string +import time + +DB_HOST = "localhost" +DB_USER = "root" +DB_PASS = "" +DB_NAME = "" +# number of queries per interval +MAX_QUERY_TICK = 10000000 +# how long in seconds we sleep for +TICK_SLEEP = 1 + +QUERY_GET_AMMO_GTM1 = ''' SELECT uuid, pistol, smg, shotgun, assault_rifle, mg, sniper, rocket, minigun FROM gtm1; ''' +QUERY_GET_AMMO_GTM2 = ''' SELECT uuid, pistol, smg, shotgun, assault_rifle, mg, sniper, rocket, minigun FROM gtm2; ''' +QUERY_GET_AMMO_GTM3 = ''' SELECT uuid, pistol, smg, shotgun, assault_rifle, mg, sniper, rocket, minigun FROM gtm3; ''' +QUERY_GET_AMMO_GTM4 = ''' SELECT uuid, pistol, smg, shotgun, assault_rifle, mg, sniper, rocket, minigun FROM gtm4; ''' +QUERY_GET_AMMO_GTM5 = ''' SELECT uuid, pistol, smg, shotgun, assault_rifle, mg, sniper, rocket, minigun FROM gtm5; ''' +QUERY_GET_AMMO_GTM6 = ''' SELECT uuid, pistol, smg, shotgun, assault_rifle, mg, sniper, rocket, minigun FROM gtm6; ''' +AMMO_QUERIES = [("GTM1", QUERY_GET_AMMO_GTM1), ("GTM2", QUERY_GET_AMMO_GTM2), ("GTM3", QUERY_GET_AMMO_GTM3), ("GTM4", QUERY_GET_AMMO_GTM4), ("GTM5", QUERY_GET_AMMO_GTM5), ("GTM6", QUERY_GET_AMMO_GTM6)] + + +# open MySQL connection +db = MySQLdb.connect(host=DB_HOST, user=DB_USER, passwd=DB_PASS, db=DB_NAME) +# grab cursor +cur = db.cursor() + +# print out variables +print("MAX_QUERY_TICK = " + str(MAX_QUERY_TICK)) +print("TICK_SLEEP = " + str(TICK_SLEEP)) +print("QUERY_GET_AMMO_GTM1 = " + str(QUERY_GET_AMMO_GTM1)) +print("QUERY_GET_AMMO_GTM2 = " + str(QUERY_GET_AMMO_GTM2)) +print("QUERY_GET_AMMO_GTM3 = " + str(QUERY_GET_AMMO_GTM3)) +print("QUERY_GET_AMMO_GTM4 = " + str(QUERY_GET_AMMO_GTM4)) +print("QUERY_GET_AMMO_GTM5 = " + str(QUERY_GET_AMMO_GTM5)) +print("QUERY_GET_AMMO_GTM6 = " + str(QUERY_GET_AMMO_GTM6)) + +def get_ammo(query): + ''' + Get all the ammo. + + Return: + A list of tuples in the form of (uuid, pistol, smg, shotgun, assault_rifle, mg, sniper, rocket, minigun) for all the users. + ''' + + # grab cursor + #cur = db.cursor() + cur.execute(query) + + user_ammo = [] + for tup in cur: + + uuid = string.replace(str(tup[0]), "-", "") + pistol = int(tup[1]) + smg = int(tup[2]) + shotgun = int(tup[3]) + assault_rifle = int(tup[4]) + mg = int(tup[5]) + sniper = int(tup[6]) + rocket = int(tup[7]) + minigun = int(tup[8]) + + user_ammo.append((uuid, pistol, smg, shotgun, assault_rifle, mg, sniper, rocket, minigun)) + + # commit query + # db.commit() + # cur.close() + + return user_ammo + +# CREATE TABLE IF NOT EXISTS user_ammo( +# uuid BINARY(16) NOT NULL, +# server_key VARCHAR(10) NOT NULL, +# ammo VARCHAR(16) NOT NULL, +# amount INT NOT NULL, +# PRIMARY KEY (uuid, server_key, ammo), +# FOREIGN KEY (uuid) REFERENCES user(uuid) ON DELETE CASCADE +# ); + +def create_user_ammo(uuid, server_key, ammo, amount): + ''' + Create user ammo information for the user. + + Args: + uuid: The uuid of the user + server_key: The server that this ammo is for + ammo: The ammo to store + amount: The amount of ammo to store + ''' + # grab cursor + # cur = db.cursor() + query = '''INSERT IGNORE INTO user_ammo VALUES (UNHEX(%s), %s, %s, %s);''' + data = (str(uuid), str(server_key), str(ammo), int(amount)) + cur.execute(query, data) + + # commit query + # db.commit() + # cur.close() + +######### +# BELOW IS THE ACTUAL SCRIPT LOGIC +######### + +print('Running script...') +start_time = time.time() + +# limit the amount of queries to the database per interval +tick = 0 + +num_ammo_records = 0 +num_ammo_records_created = 0 +for ammo_query in AMMO_QUERIES: + server_key, query = ammo_query + + ammo_record = get_ammo(query) + num_ammo_records += len(ammo_record) + for uuid, pistol, smg, shotgun, assault_rifle, mg, sniper, rocket, minigun in ammo_record: + tick += 1 + + create_user_ammo(uuid=uuid, server_key=str(server_key), ammo="PISTOL", amount=pistol) + num_ammo_records_created += 1 + create_user_ammo(uuid=uuid, server_key=str(server_key), ammo="SMG", amount=smg) + num_ammo_records_created += 1 + create_user_ammo(uuid=uuid, server_key=str(server_key), ammo="SHOTGUN", amount=shotgun) + num_ammo_records_created += 1 + create_user_ammo(uuid=uuid, server_key=str(server_key), ammo="ASSAULT_RIFLE", amount=assault_rifle) + num_ammo_records_created += 1 + create_user_ammo(uuid=uuid, server_key=str(server_key), ammo="MG", amount=mg) + num_ammo_records_created += 1 + create_user_ammo(uuid=uuid, server_key=str(server_key), ammo="SNIPER", amount=sniper) + num_ammo_records_created += 1 + create_user_ammo(uuid=uuid, server_key=str(server_key), ammo="ROCKET", amount=rocket) + num_ammo_records_created += 1 + create_user_ammo(uuid=uuid, server_key=str(server_key), ammo="MINIGUN", amount=minigun) + num_ammo_records_created += 1 + + if tick > MAX_QUERY_TICK: + tick = 0 + time.sleep(TICK_SLEEP) + +db.commit() +cur.close() + +run_time = time.time() - start_time +print('Script is now complete! (' + str(run_time) + ' secs)') +print('Number of user ammo records found: ' + str(num_ammo_records)) +print('Number of user ammo records transposed: ' + str(num_ammo_records_created)) + +# close the connection +db.close() \ No newline at end of file diff --git a/core-master@6ef85bb745a/setup/script/transpose_user_currency.py b/core-master@6ef85bb745a/setup/script/transpose_user_currency.py new file mode 100644 index 0000000..7d368f0 --- /dev/null +++ b/core-master@6ef85bb745a/setup/script/transpose_user_currency.py @@ -0,0 +1,180 @@ +#!/usr/bin/python + +# local imports + +# python modules +import MySQLdb +import string +import time + +DB_HOST = "localhost" +DB_USER = "root" +DB_PASS = "" +DB_NAME = "" +# number of queries per interval +MAX_QUERY_TICK = 10000000 +# how long in seconds we sleep for +TICK_SLEEP = 1 + +QUERY_GET_GLOBAL_CURR = ''' SELECT uuid, crowbars, tokens FROM users; ''' + +QUERY_GET_CURR_GTM1 = ''' SELECT uuid, money, permits FROM gtm1; ''' +QUERY_GET_CURR_GTM2 = ''' SELECT uuid, money, permits FROM gtm2; ''' +QUERY_GET_CURR_GTM3 = ''' SELECT uuid, money, permits FROM gtm3; ''' +QUERY_GET_CURR_GTM4 = ''' SELECT uuid, money, permits FROM gtm4; ''' +QUERY_GET_CURR_GTM5 = ''' SELECT uuid, money, permits FROM gtm5; ''' +QUERY_GET_CURR_GTM6 = ''' SELECT uuid, money, permits FROM gtm6; ''' +CURR_QUERIES = [("GTM1", QUERY_GET_CURR_GTM1), ("GTM2", QUERY_GET_CURR_GTM2), ("GTM3", QUERY_GET_CURR_GTM3), ("GTM4", QUERY_GET_CURR_GTM4), ("GTM5", QUERY_GET_CURR_GTM5), ("GTM6", QUERY_GET_CURR_GTM6)] + + +# open MySQL connection +db = MySQLdb.connect(host=DB_HOST, user=DB_USER, passwd=DB_PASS, db=DB_NAME) +# grab cursor +cur = db.cursor() + +# print out variables +print("MAX_QUERY_TICK = " + str(MAX_QUERY_TICK)) +print("TICK_SLEEP = " + str(TICK_SLEEP)) +print("QUERY_GET_GLOBAL_CURR = " + str(QUERY_GET_GLOBAL_CURR)) + +def get_global_currencies(): + ''' + Get all the user currencies known on the network. + + This will return multiple tuples per user. + + Return: + A list of tuples in the form of (uuid, crowbars, tokens) for all the users. + ''' + + # grab cursor + #cur = db.cursor() + cur.execute(QUERY_GET_GLOBAL_CURR) + + user_currencies = [] + for tup in cur: + + uuid = string.replace(str(tup[0]), "-", "") + crowbars = int(tup[1]) + tokens = int(tup[2]) + + user_currencies.append((uuid, crowbars, tokens)) + + # commit query + # db.commit() + # cur.close() + + return user_currencies + +def get_local_currencies(query): + ''' + Get all the local user currencies. + + Return: + A list of tuples in the form of (uuid, money, permits) for all the users. + ''' + + # grab cursor + #cur = db.cursor() + cur.execute(query) + + user_currencies = [] + for tup in cur: + + uuid = string.replace(str(tup[0]), "-", "") + money = int(tup[1]) + permits = int(tup[2]) + + user_currencies.append((uuid, money, permits)) + + # commit query + # db.commit() + # cur.close() + + return user_currencies + +# CREATE TABLE IF NOT EXISTS user_currency( +# uuid BINARY(16) NOT NULL, +# server_key VARCHAR(10) NOT NULL, +# currency VARCHAR(16) NOT NULL, +# amount INT NOT NULL, +# PRIMARY KEY (uuid, server_key), +# FOREIGN KEY (uuid) REFERENCES user(uuid) ON DELETE CASCADE +# ); + +def create_user_currency(uuid, server_key, currency, amount): + ''' + Create user currency information for the respective player. + + Args: + uuid: The uuid of the user + server_key: The server that this currency is for, or GLOBAL + currency: The currency to store + amount: The amount of currency to store + ''' + # grab cursor + # cur = db.cursor() + query = '''INSERT IGNORE INTO user_currency VALUES (UNHEX(%s), %s, %s, %s);''' + data = (str(uuid), str(server_key), str(currency), int(amount)) + cur.execute(query, data) + + # commit query + # db.commit() + # cur.close() + +######### +# BELOW IS THE ACTUAL SCRIPT LOGIC +######### + +print('Running script...') +start_time = time.time() + +# limit the amount of queries to the database per interval +tick = 0 + +global_currencies = get_global_currencies() +global_currencies_created = 0 +for uuid, crowbars, tokens in global_currencies: + tick += 1 + + create_user_currency(uuid=uuid, server_key="GLOBAL", currency="CROWBAR", amount=crowbars) + global_currencies_created += 1 + create_user_currency(uuid=uuid, server_key="GLOBAL", currency="TOKEN", amount=tokens) + global_currencies_created += 1 + + if tick > MAX_QUERY_TICK: + tick = 0 + time.sleep(TICK_SLEEP) + +num_local_currencies = 0 +num_local_currencies_created = 0 +for curr_query in CURR_QUERIES: + server_key, query = curr_query + + local_currencies = get_local_currencies(query) + num_local_currencies += len(local_currencies) + for uuid, money, permits in local_currencies: + tick += 1 + + create_user_currency(uuid=uuid, server_key=str(server_key), currency="MONEY", amount=money) + num_local_currencies_created += 1 + create_user_currency(uuid=uuid, server_key=str(server_key), currency="PERMIT", amount=permits) + num_local_currencies_created += 1 + + if tick > MAX_QUERY_TICK: + tick = 0 + time.sleep(TICK_SLEEP) + +db.commit() +cur.close() + +run_time = time.time() - start_time +print('Script is now complete! (' + str(run_time) + ' secs)') +print('Number of global user currencies found: ' + str(len(global_currencies))) +print('Number of global user currencies transposed: ' + str(global_currencies_created)) +print() +print('Number of local user currencies found: ' + str(num_local_currencies)) +print('Number of local user currencies transposed: ' + str(num_local_currencies_created)) + +# close the connection +db.close() \ No newline at end of file diff --git a/core-master@6ef85bb745a/setup/script/transpose_user_rank.py b/core-master@6ef85bb745a/setup/script/transpose_user_rank.py new file mode 100644 index 0000000..4b27830 --- /dev/null +++ b/core-master@6ef85bb745a/setup/script/transpose_user_rank.py @@ -0,0 +1,163 @@ +#!/usr/bin/python + +# local imports + +# python modules +import MySQLdb +import string +import time +import datetime + +DB_HOST = "localhost" +DB_USER = "root" +DB_PASS = "" +DB_NAME = "" +# number of queries per interval +MAX_QUERY_TICK = 10000000 +# how long in seconds we sleep for +TICK_SLEEP = 1 + +QUERY_GET_USER_RANKS = ''' SELECT uuid, userrank, trialRank, trialRankExpiry FROM users; ''' + +# open MySQL connection +db = MySQLdb.connect(host=DB_HOST, user=DB_USER, passwd=DB_PASS, db=DB_NAME) +# grab cursor +cur = db.cursor() + +# print out variables +print("MAX_QUERY_TICK = " + str(MAX_QUERY_TICK)) +print("TICK_SLEEP = " + str(TICK_SLEEP)) +print("QUERY_GET_USER_RANKS = " + str(QUERY_GET_USER_RANKS)) + +def get_user_ranks(): + ''' + Get all the user ranks known on the network. + + Return: + A list of pairs in the form of (uuid, rank) for all the users. + ''' + + # grab cursor + #cur = db.cursor() + cur.execute(QUERY_GET_USER_RANKS) + + ranks = [] + for tup in cur: + + uuid = string.replace(str(tup[0]), "-", "") + rank = str(tup[1]) + trial_rank = tup[2] + trial_rank_expire = long(tup[3]) + + ranks.append((uuid, rank, trial_rank, trial_rank_expire)) + + # commit query + # db.commit() + # cur.close() + + return ranks + +# CREATE TABLE IF NOT EXISTS user_profile( +# uuid BINARY(16) NOT NULL, +# server_key VARCHAR(10) NOT NULL, +# rank VARCHAR(10) NOT NULL, +# PRIMARY KEY (uuid, server_key), +# FOREIGN KEY (uuid) REFERENCES user(uuid) ON DELETE CASCADE +# ); + +def create_user_profile(uuid, server_key, rank): + ''' + Create user profile information for the respective player. + + Args: + uuid: The uuid of the user + server_key: The key of the server + rank: The user's rank for that server + ''' + # grab cursor + # cur = db.cursor() + query = '''INSERT IGNORE INTO user_profile VALUES (UNHEX(%s), %s, %s);''' + data = (str(uuid), str(server_key), str(rank)) + cur.execute(query, data) + + # commit query + # db.commit() + # cur.close() + +# CREATE TABLE IF NOT EXISTS user_trial_rank( +# uuid BINARY(16) NOT NULL, +# server_key VARCHAR(10) NOT NULL, +# rank VARCHAR(10) NOT NULL, +# creation TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, +# expire_at TIMESTAMP NOT NULL, +# PRIMARY KEY (uuid, server_key), +# FOREIGN KEY (uuid) REFERENCES user(uuid) ON DELETE CASCADE +# ); + +def create_user_trial_rank(uuid, server_key, rank, expire_at): + ''' + Create user trial rank information for the respective player. + + Args: + uuid: The uuid of the user + server_key: The key of the server + rank: The user's rank for that server + expire_at: When this rank expires + ''' + #print('expire_at', expire_at) + # convert from epoch time "1516038023138" (in msecs) to secs + expire_secs = expire_at // 1000 + #print('expire_secs', expire_secs) + # convert to time object (takes secs) + expire = datetime.datetime.fromtimestamp(expire_secs) + #print('expire', expire) + + # grab cursor + # cur = db.cursor() + query = '''INSERT IGNORE INTO user_trial_rank (uuid, server_key, rank, expire_at) VALUES (UNHEX(%s), %s, %s, %s);''' + data = (str(uuid), str(server_key), str(rank), expire) + cur.execute(query, data) + + # commit query + # db.commit() + # cur.close() + +######### +# BELOW IS THE ACTUAL SCRIPT LOGIC +######### + +print('Running script...') +start_time = time.time() + +# limit the amount of queries to the database per interval +tick = 0 + +ranks = get_user_ranks() +ranks_created = 0 +trial_ranks_created = 0 +for uuid, rank, trial_rank, trial_rank_expire in ranks: + tick += 1 + + # create the user rank + create_user_profile(uuid=uuid, server_key="GLOBAL", rank=rank) + ranks_created += 1 + + if trial_rank is not None: + create_user_trial_rank(uuid=uuid, server_key="GLOBAL", rank=trial_rank, expire_at=trial_rank_expire) + trial_ranks_created += 1 + + if tick > MAX_QUERY_TICK: + tick = 0 + time.sleep(TICK_SLEEP) + +db.commit() +cur.close() + +run_time = time.time() - start_time +print('Script is now complete! (' + str(run_time) + ' secs)') +print('Number of users ranks found: ' + str(len(ranks))) +print('Number of users ranks transposed: ' + str(ranks_created)) +print('Number of users trial ranks transposed: ' + str(trial_ranks_created)) + +# close the connection +db.close() \ No newline at end of file diff --git a/core-master@6ef85bb745a/setup/script/transpose_user_uuid.py b/core-master@6ef85bb745a/setup/script/transpose_user_uuid.py new file mode 100644 index 0000000..74e68da --- /dev/null +++ b/core-master@6ef85bb745a/setup/script/transpose_user_uuid.py @@ -0,0 +1,141 @@ +#!/usr/bin/python + +# local imports + +# python modules +import MySQLdb +import string +import time +import sys + +DB_HOST = "localhost" +DB_USER = "root" +DB_PASS = "" +DB_NAME = "" +# number of queries per interval +MAX_QUERY_TICK = 10000000 +# how long in seconds we sleep for +TICK_SLEEP = 1 + +QUERY_GET_OLD_UUID_GTM1 = ''' SELECT uuid FROM gtm1; ''' +QUERY_GET_OLD_UUID_GTM2 = ''' SELECT uuid FROM gtm2; ''' +QUERY_GET_OLD_UUID_GTM3 = ''' SELECT uuid FROM gtm3; ''' +QUERY_GET_OLD_UUID_GTM4 = ''' SELECT uuid FROM gtm4; ''' +QUERY_GET_OLD_UUID_GTM5 = ''' SELECT uuid FROM gtm5; ''' +QUERY_GET_OLD_UUID_GTM6 = ''' SELECT uuid FROM gtm6; ''' +GET_UUID_QUERIES = [("GTM1", QUERY_GET_OLD_UUID_GTM1), ("GTM2", QUERY_GET_OLD_UUID_GTM2), ("GTM3", QUERY_GET_OLD_UUID_GTM3), ("GTM4", QUERY_GET_OLD_UUID_GTM4), ("GTM5", QUERY_GET_OLD_UUID_GTM5), ("GTM6", QUERY_GET_OLD_UUID_GTM6)] + +QUERY_UPDATE_UUID_GTM1 = ''' UPDATE gtm1 SET new_uuid=UNHEX(%s) WHERE uuid=%s; ''' +QUERY_UPDATE_UUID_GTM2 = ''' UPDATE gtm2 SET new_uuid=UNHEX(%s) WHERE uuid=%s; ''' +QUERY_UPDATE_UUID_GTM3 = ''' UPDATE gtm3 SET new_uuid=UNHEX(%s) WHERE uuid=%s; ''' +QUERY_UPDATE_UUID_GTM4 = ''' UPDATE gtm4 SET new_uuid=UNHEX(%s) WHERE uuid=%s; ''' +QUERY_UPDATE_UUID_GTM5 = ''' UPDATE gtm5 SET new_uuid=UNHEX(%s) WHERE uuid=%s; ''' +QUERY_UPDATE_UUID_GTM6 = ''' UPDATE gtm6 SET new_uuid=UNHEX(%s) WHERE uuid=%s; ''' +UPDATE_UUID_QUERIES = {} +UPDATE_UUID_QUERIES['GTM1'] = QUERY_UPDATE_UUID_GTM1 +UPDATE_UUID_QUERIES['GTM2'] = QUERY_UPDATE_UUID_GTM2 +UPDATE_UUID_QUERIES['GTM3'] = QUERY_UPDATE_UUID_GTM3 +UPDATE_UUID_QUERIES['GTM4'] = QUERY_UPDATE_UUID_GTM4 +UPDATE_UUID_QUERIES['GTM5'] = QUERY_UPDATE_UUID_GTM5 +UPDATE_UUID_QUERIES['GTM6'] = QUERY_UPDATE_UUID_GTM6 + +# open MySQL connection +db = MySQLdb.connect(host=DB_HOST, user=DB_USER, passwd=DB_PASS, db=DB_NAME) +# grab cursor +cur = db.cursor() + +# print out variables +print("MAX_QUERY_TICK = " + str(MAX_QUERY_TICK)) +print("TICK_SLEEP = " + str(TICK_SLEEP)) +print("QUERY_GET_OLD_UUID_GTM1 = " + str(QUERY_GET_OLD_UUID_GTM1)) +print("QUERY_GET_OLD_UUID_GTM2 = " + str(QUERY_GET_OLD_UUID_GTM2)) +print("QUERY_GET_OLD_UUID_GTM3 = " + str(QUERY_GET_OLD_UUID_GTM3)) +print("QUERY_GET_OLD_UUID_GTM4 = " + str(QUERY_GET_OLD_UUID_GTM4)) +print("QUERY_GET_OLD_UUID_GTM5 = " + str(QUERY_GET_OLD_UUID_GTM5)) +print("QUERY_GET_OLD_UUID_GTM6 = " + str(QUERY_GET_OLD_UUID_GTM6)) + +def get_old_uuid(query): + ''' + Get all the old uuids. + + Return: + A list of tuples in the form of (old_uuid, new_uuid). + ''' + + # grab cursor + #cur = db.cursor() + cur.execute(query) + + uuid_list = [] + for tup in cur: + + old_uuid = str(tup[0]) + new_uuid = string.replace(str(tup[0]), "-", "") + + uuid_list.append((old_uuid, new_uuid)) + + # commit query + # db.commit() + # cur.close() + + return uuid_list + +def create_uuid(old_uuid, new_uuid, query): + ''' + Create newly formatted uuid. + + Args: + old_uuid: The old uuid, with hyphens. + new_uuid: The new uuid, without hyphens. + query: The query to use + ''' + + # grab cursor + # cur = db.cursor() + data = (str(new_uuid), str(old_uuid)) + cur.execute(query, data) + + # commit query + # db.commit() + # cur.close() + +######### +# BELOW IS THE ACTUAL SCRIPT LOGIC +######### + +print('Running script...') +start_time = time.time() + +# limit the amount of queries to the database per interval +tick = 0 + +num_uuid_records = 0 +num_uuid_records_created = 0 +for get_uuid_query in GET_UUID_QUERIES: + server_key, query = get_uuid_query + + uuid_list = get_old_uuid(query) + num_uuid_records += len(uuid_list) + for old_uuid, new_uuid in uuid_list: + tick += 1 + + # TODO test remove + print("old_uuid", old_uuid) + + create_uuid(old_uuid=old_uuid, new_uuid=new_uuid, query=UPDATE_UUID_QUERIES[server_key]) + num_uuid_records_created += 1 + + if tick > MAX_QUERY_TICK: + tick = 0 + time.sleep(TICK_SLEEP) + +db.commit() +cur.close() + +run_time = time.time() - start_time +print('Script is now complete! (' + str(run_time) + ' secs)') +print('Number of user uuids found: ' + str(num_uuid_records)) +print('Number of user ammo records transposed: ' + str(num_uuid_records_created)) + +# close the connection +db.close() \ No newline at end of file diff --git a/core-master@6ef85bb745a/setup/script/transpose_vice_cheatcode.py b/core-master@6ef85bb745a/setup/script/transpose_vice_cheatcode.py new file mode 100644 index 0000000..72bc954 --- /dev/null +++ b/core-master@6ef85bb745a/setup/script/transpose_vice_cheatcode.py @@ -0,0 +1,112 @@ +#!/usr/bin/python + +# local imports + +# python modules +import MySQLdb +import string +import time + +DB_HOST = "localhost" +DB_USER = "root" +DB_PASS = "" +DB_NAME = "" +# number of queries per interval +MAX_QUERY_TICK = 10000000 +# how long in seconds we sleep for +TICK_SLEEP = 1 + +QUERY_GET_USER_DATA = ''' SELECT uuid, cheatcodes FROM vice1 WHERE cheatcodes IS NOT NULL; ''' +#QUERY_GET_USER_DATA = ''' SELECT uuid, cheatcodes FROM vice1 WHERE cheatcodes IS NOT NULL AND name='Micatchu'; ''' +QUERY_UPDATE_USER_DATA = ''' UPDATE vice2 SET cheatcodes = %s WHERE uuid = %s AND cheatcodes IS NULL; ''' +#QUERY_UPDATE_USER_DATA = ''' UPDATE vice2 SET cheatcodes = %s WHERE uuid = %s; ''' + +# open MySQL connection +db = MySQLdb.connect(host=DB_HOST, user=DB_USER, passwd=DB_PASS, db=DB_NAME) +# grab cursor +cur = db.cursor() + +# print out variables +print("MAX_QUERY_TICK = " + str(MAX_QUERY_TICK)) +print("TICK_SLEEP = " + str(TICK_SLEEP)) +print("QUERY_GET_USER_DATA = " + str(QUERY_GET_USER_DATA)) +print("QUERY_UPDATE_USER_DATA = " + str(QUERY_UPDATE_USER_DATA)) + +def get_user_data(): + ''' + Get all the user data known on the network. + + Return: + A list of pairs in the form of (uuid, cheatcode) for all the users. + ''' + + # execute the query + cur.execute(QUERY_GET_USER_DATA) + + users = [] + for tup in cur: + + uuid = str(tup[0]) + cheatcodes = str(tup[1]) + + users.append((uuid, cheatcodes)) + + # commit query + # db.commit() + # cur.close() + + return users + +def update_user_data(uuid, cheatcodes): + ''' + Update user information for the respective user. + + Args: + uuid: The uuid of the user + cheatcodes: The cheatcodes for the user + ''' + # grab cursor + # cur = db.cursor() + data = (str(cheatcodes), str(uuid)) + cur.execute(QUERY_UPDATE_USER_DATA, data) + + # commit query + # db.commit() + # cur.close() + +######### +# BELOW IS THE ACTUAL SCRIPT LOGIC +######### + +print('Running script...') +start_time = time.time() + +# limit the amount of queries to the database per interval +tick = 0 + +users = get_user_data() +users_modified = 0 +for uuid, cheatcodes in users: + tick += 1 + + print(uuid) + print(cheatcodes) + update_user_data(uuid=uuid, cheatcodes=cheatcodes) + users_modified += 1 + + if tick > MAX_QUERY_TICK: + tick = 0 + time.sleep(TICK_SLEEP) + +db.commit() +cur.close() + +# convert ranks + +run_time = time.time() - start_time +print('Script is now complete! (' + str(run_time) + ' secs)') +print('Number of vice cheatcode user data found: ' + str(len(users))) +print('Number of vice cheatcode user data transposed: ' + str(users_modified)) + +# close the connection +db.close() \ No newline at end of file diff --git a/core-master@6ef85bb745a/setup/script/vote_sync.py b/core-master@6ef85bb745a/setup/script/vote_sync.py new file mode 100644 index 0000000..014c091 --- /dev/null +++ b/core-master@6ef85bb745a/setup/script/vote_sync.py @@ -0,0 +1,95 @@ +#!/usr/bin/python + +# local imports + +# python modules +import MySQLdb +import time +import json + +DB_HOST = "localhost" +DB_USER = "root" +DB_PASS = "" +DB_NAME = "" + +QUERY_GET_THIS_MONTHS_VOTES = ''' SELECT HEX(LUV.uuid), COUNT(*) FROM log_user_vote LUV WHERE YEAR(LUV.creation) = YEAR(CURRENT_DATE()) AND MONTH(LUV.creation) = MONTH(CURRENT_DATE()) GROUP by LUV.uuid ORDER BY COUNT(*); ''' +QUERY_RESET_USER_VOTE = ''' UPDATE votes SET monthlyVotes = 0; ''' +QUERY_UPDATE_USER_VOTE = ''' UPDATE votes SET monthlyVotes = %s WHERE uuid = %s; ''' + +# open MySQL connection +db = MySQLdb.connect(host=DB_HOST, user=DB_USER, passwd=DB_PASS, db=DB_NAME) +# grab cursor +cur = db.cursor() + +def get_this_months_votes(): + ''' + Get all the votes, and the respective amount for this month. + + Returns: + A list of tuples in the form of (uuid, num_votes) for each voter. + Note: uuid is in form of 795FA12992B943E8B408BADB830CEB0B + ''' + cur.execute(QUERY_GET_THIS_MONTHS_VOTES) + + result = [] + for tup in cur: + uuid = str(tup[0]) + num_votes = int(tup[1]) + result.append((uuid, num_votes)) + + return result + +def reset_user_votes(): + ''' + Resets all users votes for the votes table, in the monthlyVotes column. + ''' + cur.execute(QUERY_RESET_USER_VOTE) + +def update_vote(uuid, num_votes): + ''' + Updates the vote tally for the specified user. + + Args: + uuid: The uuid for the user in the form of 0ff3234f-08d3-3344-887f-db721202f9bb + num_votes: The number of votes for that user + ''' + data = (int(num_votes), str(uuid)) + cur.execute(QUERY_UPDATE_USER_VOTE, data) + +######### +# BELOW IS THE ACTUAL SCRIPT LOGIC +######### + +print('Running script vote_sync.py...' ) +print() +start_time = time.time() + +votes_month = get_this_months_votes() +num_users_updated = 0 +vote_tallied = 0 +if votes_month is not None and len(votes_month): + + # reset user votes + reset_user_votes() + + # for each user + for uuid, num_votes in votes_month: + lower_uuid = str(uuid).lower() + + # 8 4 4 4 12 + formatted_uuid = str(lower_uuid[0:8]) + '-' + str(lower_uuid[8:12]) + '-' + str(lower_uuid[12:16]) + '-' + str(lower_uuid[16:20]) + '-' + str(lower_uuid[20:32]) + + update_vote(uuid=formatted_uuid, num_votes=num_votes) + vote_tallied += num_votes + num_users_updated += 1 + +# commit query +db.commit() + +run_time = time.time() - start_time +print('Number of users updated = ' + str(num_users_updated)) +print('Number of votes tallied = ' + str(vote_tallied)) +print('Finished script in ' + str(run_time) + ' secs.') + +# close the connection +db.close() \ No newline at end of file diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/Core.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/Core.java new file mode 100644 index 0000000..ee0357e --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/Core.java @@ -0,0 +1,1318 @@ +package net.grandtheftmc.core; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.logging.Level; + +import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.CellType; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.bukkit.Bukkit; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.plugin.PluginManager; +import org.bukkit.plugin.java.JavaPlugin; +import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.scheduler.BukkitTask; + +import com.comphenix.protocol.ProtocolLibrary; +import com.comphenix.protocol.ProtocolManager; +import com.j0ach1mmall3.ultimatecosmetics.Main; +import com.sk89q.worldedit.bukkit.WorldEditPlugin; + +import io.sentry.SentryClient; +import net.buycraft.plugin.bukkit.BuycraftPlugin; +import net.buycraft.plugin.internal.okhttp3.OkHttpClient; +import net.grandtheftmc.ServerTypeId; +import net.grandtheftmc.core.achivements.AchievementCommand; +import net.grandtheftmc.core.alert.AlertManager; +import net.grandtheftmc.core.announcer.Announcer; +import net.grandtheftmc.core.announcer.AnnouncerCommand; +import net.grandtheftmc.core.anticheat.Anticheat; +import net.grandtheftmc.core.casino.coins.CoinManager; +import net.grandtheftmc.core.commands.BucksCommand; +import net.grandtheftmc.core.commands.BungeeCommand; +import net.grandtheftmc.core.commands.ChatFilterCommand; +import net.grandtheftmc.core.commands.ClearChatCommand; +import net.grandtheftmc.core.commands.ConfigCommand; +import net.grandtheftmc.core.commands.CooldownCommand; +import net.grandtheftmc.core.commands.CouponCreditsCommand; +import net.grandtheftmc.core.commands.CrateCommand; +import net.grandtheftmc.core.commands.CrowbarCommand; +import net.grandtheftmc.core.commands.DiscordCommand; +import net.grandtheftmc.core.commands.EditModeCommand; +import net.grandtheftmc.core.commands.EventTagCommand; +import net.grandtheftmc.core.commands.FacebookCommand; +import net.grandtheftmc.core.commands.ForumRankCommand; +import net.grandtheftmc.core.commands.GlobalMuteCommand; +import net.grandtheftmc.core.commands.IgnoreCommand; +import net.grandtheftmc.core.commands.InfoCommand; +import net.grandtheftmc.core.commands.ListCommand; +import net.grandtheftmc.core.commands.MaxPlayersCommand; +import net.grandtheftmc.core.commands.MessageCommand; +import net.grandtheftmc.core.commands.OpenMenuCommand; +import net.grandtheftmc.core.commands.PlaytimeCommand; +import net.grandtheftmc.core.commands.PrefsCommand; +import net.grandtheftmc.core.commands.RankCommand; +import net.grandtheftmc.core.commands.ReplyCommand; +import net.grandtheftmc.core.commands.RewardsCommand; +import net.grandtheftmc.core.commands.RulesCommand; +import net.grandtheftmc.core.commands.SaveCommand; +import net.grandtheftmc.core.commands.ServerCommand; +import net.grandtheftmc.core.commands.SocialSpyCommand; +import net.grandtheftmc.core.commands.SpankCommand; +import net.grandtheftmc.core.commands.StoreCommand; +import net.grandtheftmc.core.commands.TokensCommand; +import net.grandtheftmc.core.commands.TradeCommand; +import net.grandtheftmc.core.commands.TrialCommand; +import net.grandtheftmc.core.commands.TwitterCommand; +import net.grandtheftmc.core.commands.VotestreakCommand; +import net.grandtheftmc.core.commands.WhitelistCommand; +import net.grandtheftmc.core.currency.Currency; +import net.grandtheftmc.core.database.BaseDatabase; +import net.grandtheftmc.core.database.dao.MutexDAO; +import net.grandtheftmc.core.database.dao.ServerStatsDAO; +import net.grandtheftmc.core.editmode.BlockChange; +import net.grandtheftmc.core.editmode.BreakBlock; +import net.grandtheftmc.core.editmode.Craft; +import net.grandtheftmc.core.editmode.HangingBreak; +import net.grandtheftmc.core.editmode.Liquid; +import net.grandtheftmc.core.editmode.PlaceBlock; +import net.grandtheftmc.core.editmode.WorldManager; +import net.grandtheftmc.core.event.EventCommand; +import net.grandtheftmc.core.events.ServerSaveEvent; +import net.grandtheftmc.core.handlers.chat.ChatManager; +import net.grandtheftmc.core.inventory.CoreMenuHandler; +import net.grandtheftmc.core.leaderboards.LeaderBoardManager; +import net.grandtheftmc.core.listeners.Chat; +import net.grandtheftmc.core.listeners.ChunkLoad; +import net.grandtheftmc.core.listeners.CommandListener; +import net.grandtheftmc.core.listeners.Damage; +import net.grandtheftmc.core.listeners.HopperComponent; +import net.grandtheftmc.core.listeners.HungerChange; +import net.grandtheftmc.core.listeners.InventoryClick; +import net.grandtheftmc.core.listeners.Join; +import net.grandtheftmc.core.listeners.Leave; +import net.grandtheftmc.core.listeners.Login; +import net.grandtheftmc.core.listeners.Move; +import net.grandtheftmc.core.listeners.PetListener; +import net.grandtheftmc.core.listeners.PlaywireRecieve; +import net.grandtheftmc.core.listeners.Save; +import net.grandtheftmc.core.listeners.SignChange; +import net.grandtheftmc.core.listeners.SwapHandItems; +import net.grandtheftmc.core.listeners.Teleport; +import net.grandtheftmc.core.listeners.UserStateTransactionListener; +import net.grandtheftmc.core.listeners.WeatherChange; +import net.grandtheftmc.core.menus.MenuListener; +import net.grandtheftmc.core.menus.MenuManager; +import net.grandtheftmc.core.nametags.NametagCommand; +import net.grandtheftmc.core.nametags.NametagManager; +import net.grandtheftmc.core.npc.NPCManager; +import net.grandtheftmc.core.perms.PermsManager; +import net.grandtheftmc.core.playwire.PlaywireManager; +import net.grandtheftmc.core.redis.RedisFactory; +import net.grandtheftmc.core.redis.RedisManager; +import net.grandtheftmc.core.redis.listener.QueueListener; +import net.grandtheftmc.core.redis.listener.UserStateTransactionCheckListener; +import net.grandtheftmc.core.redis.listener.VoteNotificationListener; +import net.grandtheftmc.core.resourcepack.ResourcePackManager; +import net.grandtheftmc.core.servers.ServerManager; +import net.grandtheftmc.core.servers.ServerPingListener; +import net.grandtheftmc.core.servers.ServerType; +import net.grandtheftmc.core.stat.StatFactory; +import net.grandtheftmc.core.task.common.AntiAFK; +import net.grandtheftmc.core.task.common.BossBarTask; +import net.grandtheftmc.core.trading.TradeManager; +import net.grandtheftmc.core.tutorials.Help; +import net.grandtheftmc.core.tutorials.NextCommand; +import net.grandtheftmc.core.tutorials.TutorialCommand; +import net.grandtheftmc.core.tutorials.TutorialManager; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserDAO; +import net.grandtheftmc.core.users.UserManager; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.voting.VoteCommand; +import net.grandtheftmc.core.voting.VoteManager; +import net.grandtheftmc.core.voting.crates.CrateManager; +import net.grandtheftmc.core.voting.crates.listeners.CrateNearbyListener; +import net.grandtheftmc.core.voting.crates.listeners.CrateOpenListener; +import net.grandtheftmc.core.whitelist.WhitelistManager; +import net.grandtheftmc.jedis.JedisChannel; +import net.grandtheftmc.jedis.JedisManager; +import net.grandtheftmc.jedis.message.ServerQueueNotifyMessage; +import net.grandtheftmc.jedis.message.UserStateTransactionCheck; +import net.grandtheftmc.jedis.message.VoteNotificationMessage; + +public class Core extends JavaPlugin { + + // test commit + + public static final String GTM_VERSION = "2.4"; + public static final String VICE_VERSION = "2"; + public static final String CREATIVE_VERSION = "1.0"; + +// public static MySQL sql; + private static Core instance; + private WorldEditPlugin worldEdit; + private Main uc; + private ProtocolManager manager; + + private Settings settings; + + private ServerManager serverManager; + private UserManager userManager; + private PermsManager permsManager; + private NPCManager npcManager; + private WhitelistManager whitelistManager; + private VoteManager voteManager; + private Announcer announcer; + private TutorialManager tutorialManager; + private LeaderBoardManager leaderBoardManager; + private NametagManager nametagManager; + private CrateManager crateManager; + private AntiAFK antiAFK; + private WorldManager worldManager; +// private MySQLAsyncQueue mySQLAsyncQueue; + private BukkitTask mysqlAsyncTask; + private MenuManager menuManager; + private PlaywireManager playwireManager; + private CoinManager coinManager; + private static BuycraftPlugin bp; + private ChatManager chatManager; + public static ResourcePackManager resourcePackManager; + private TradeManager tradeManager; + private static JedisManager jedisManager; + private SentryClient sentryClient; + private AlertManager alertManager; + private CoreMenuHandler coreMenuHandler; + /** The boss bar task handler */ + private BossBarTask bossBarTask; + private static boolean enabled; + + private boolean restarting = false; + + private static final OkHttpClient okHttpClient = new OkHttpClient(); + + public static Core getInstance() { + return instance; + } + + public void setRestarting(boolean restarting) { + this.restarting = restarting; + } + + public boolean isRestarting(){ + return this.restarting; + } + + // public static MySQL getSQL() { +// return sql; +// } + + public static CoinManager getCoinManager() { + return Core.getInstance().coinManager; + } + + public static WorldEditPlugin getWorldEdit() { + return Core.getInstance().worldEdit; + } + + public static Main getUltimateCosmetics() { + return Core.getInstance().uc; + } + + public static ServerManager getServerManager() { + return Core.getInstance().serverManager; + } + + /** + * @deprecated Please just reference the singleton, {@link UserManager#getInstance()}. + */ + @Deprecated + public static UserManager getUserManager() { + return Core.getInstance().userManager; + } + + public static PermsManager getPermsManager() { + return Core.getInstance().permsManager; + } + + public static WhitelistManager getWhitelistManager() { + return Core.getInstance().whitelistManager; + } + + public static VoteManager getVoteManager() { + return Core.getInstance().voteManager; + } + + public static Announcer getAnnouncer() { + return Core.getInstance().announcer; + } + + public static Settings getSettings() { + return Core.getInstance().settings; + } + + public static OkHttpClient getOkHttpClient() { + return Core.getInstance().okHttpClient; + } + + public static TutorialManager getTutorialManager() { + return Core.getInstance().tutorialManager; + } + + public static NametagManager getNametagManager() { + return Core.getInstance().nametagManager; + } + + public static CrateManager getCrateManager() { + return Core.getInstance().crateManager; + } + + public static ProtocolManager getProtocolLib() { + return Core.getInstance().manager; + } + + public static AntiAFK getAntiAFK() { + return Core.getInstance().antiAFK; + } + + public static WorldManager getWorldManager() { + return Core.getInstance().worldManager; + } + + public static NPCManager getNPCManager() { + return Core.getInstance().npcManager; + } + + public static String name() { + return Core.getInstance().settings.name(); + } + +// public static MySQLAsyncQueue getMySQLAsyncQueue() { +// return Core.getInstance().mySQLAsyncQueue; +// } + + public static JedisManager getJedisManager() { + return jedisManager; + } + + public static void setJedisManager(JedisManager jmanager) { + jedisManager = jmanager; + } + + public SentryClient getSentryClient() { + return sentryClient; + } + + public static TradeManager getTradeManager() { + return Core.getInstance().tradeManager; + } + + public AlertManager getAlertManager() { + return alertManager; + } + + + public static void log(String s) { + Core.getInstance().getLogger().log(Level.INFO, s); + } + + public static void error(String s) { + Core.getInstance().getLogger().log(Level.SEVERE, s); + } + + public static boolean isCoreEnabled() { + return enabled; + } + + @Override + public void onEnable() { + + Bukkit.setWhitelist(false); + instance = this; + PluginManager plm = Bukkit.getPluginManager(); + + this.settings = new Settings(); + + this.manager = ProtocolLibrary.getProtocolManager(); + this.worldEdit = plm.getPlugin("WorldEdit") == null ? null : (WorldEditPlugin) plm.getPlugin("WorldEdit"); + this.uc = plm.getPlugin("UltimateCosmetics") == null ? null : (Main) plm.getPlugin("UltimateCosmetics"); + if (this.uc == null) { + Core.error("UltimateCosmetics not found. Disabling Cosmetics"); + this.settings.setLoadCosmetics(false); + } + this.load(); + bp = (BuycraftPlugin) Bukkit.getPluginManager().getPlugin("BuycraftX"); + this.worldManager = new WorldManager(); + this.serverManager = new ServerManager(); + this.userManager = UserManager.getInstance(); + this.permsManager = new PermsManager(); + this.whitelistManager = new WhitelistManager(); + this.voteManager = new VoteManager(this); + this.announcer = new Announcer(); + //this.playwireManager = new PlaywireManager().onEnable(this); + this.tutorialManager = new TutorialManager(); + this.leaderBoardManager = new LeaderBoardManager(); + this.nametagManager = new NametagManager(); + this.tradeManager = new TradeManager().onEnable(this); + this.crateManager = new CrateManager().onEnable(this); + this.coreMenuHandler = new CoreMenuHandler(this); + this.npcManager = new NPCManager().onEnable(this); + this.alertManager = new AlertManager().onEnable(this); + this.coinManager = new CoinManager().onEnable(this); + this.registerCommands(); + this.registerListeners(); + getServer().getMessenger().registerOutgoingPluginChannel(Core.getInstance(), "BungeeCord"); + +// EnjinCore.init(); + + ServerUtil.runTaskAsync(() -> { + String server = this.settings.getRedisConfig().getString("server"); + String password = this.settings.getRedisConfig().getString("password"); + int port = this.settings.getRedisConfig().getInt("port"); + + jedisManager = new JedisManager(); + + // init the module for the SERVER_QUEUE channel + jedisManager.initModule(new ServerTypeId(net.grandtheftmc.ServerType.valueOf(this.settings.getType().name().toUpperCase()), this.settings.getNumber()), JedisChannel.SERVER_QUEUE, server, port, password); + // init the module for the GLOBAL channel + jedisManager.initModule(new ServerTypeId(net.grandtheftmc.ServerType.valueOf(this.settings.getType().name().toUpperCase()), this.settings.getNumber()), JedisChannel.GLOBAL, server, port, password); + + // register listeners for redis payloads + Core.getJedisManager().getModule(JedisChannel.SERVER_QUEUE).registerListener(ServerQueueNotifyMessage.class, new QueueListener()); + Core.getJedisManager().getModule(JedisChannel.GLOBAL).registerListener(UserStateTransactionCheck.class, new UserStateTransactionCheckListener()); + Core.getJedisManager().getModule(JedisChannel.GLOBAL).registerListener(VoteNotificationMessage.class, new VoteNotificationListener()); + }); + + // register stat factory + StatFactory.init(this); + // TODO should probably only register this on hubs + StatFactory.getInstance().registerClientConnectionStat(getProtocolLib()); + +// this.sentryClient = Sentry.init("https://b92c7a1d7aa543d281784f682acd1679:297e39e8e563441498073d28479297be@sentry.io/210918"); +// this.sentryClient.setServerName(this.settings.getType().name() + "-" + this.settings.getNumber()); +// this.sentryClient +// try { +// Method setupUncaughtExc = this.sentryClient.getClass().getDeclaredMethod("setupUncaughtExceptionHandler"); +// setupUncaughtExc.setAccessible(true); +// setupUncaughtExc.invoke(this.sentryClient); +// } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { +// e.printStackTrace(); +// } +// System.out.println(this.sentryClient.toString()); +// +// Sentry.capture("This is the first capture test"); + + //Removed temp +// if(name().equalsIgnoreCase("gtm1")) { +// ScheduledExecutorService daily = Executors.newScheduledThreadPool(1); +// Long midnight = LocalDateTime.now().until(LocalDate.now().plusDays(1).atStartOfDay(), ChronoUnit.MINUTES); +// daily.scheduleAtFixedRate(new SaveDailyStatsRunnable(), midnight, TimeUnit.DAYS.toMinutes(1), TimeUnit.MINUTES); +// } + + new Anticheat(this); + BossBarTask bossBarTask = new BossBarTask(); + + // setup currencies + for (Currency currency : Currency.values()){ + + if (settings.isMainNetwork()){ + + // main network has some global currencies + switch(currency){ + case TOKEN: + case CROWBAR: + case COUPON_CREDIT: + case VOTE_TOKEN: + log("Setting " + currency.getId() + " as a GLOBAL currency."); + currency.setServerKey("GLOBAL"); + break; + case MONEY: + case PERMIT: + log("Setting " + currency.getId() + " as a SERVER currency."); + currency.setServerKey(name().toUpperCase()); + break; + } + } + else{ + + // sister network all currencies are server only + switch(currency){ + case TOKEN: + case CROWBAR: + case MONEY: + case PERMIT: + log("Setting " + currency.getId() + " as a SERVER currency."); + currency.setServerKey(name().toUpperCase()); + break; + } + } + } + + // setup ranks + for (UserRank ur : UserRank.values()){ + + if (settings.isMainNetwork()){ + switch(ur){ + default: + log("Setting " + ur.getName() + " as a GLOBAL rank."); + ur.setServerKey("GLOBAL"); + break; + } + } + else{ + switch(ur){ + case ADMIN: + case BUILDER: + case DEV: + case HELPOP: + case MANAGER: + case MOD: + case OWNER: + case SRMOD: + case YOUTUBER: + case BUILDTEAM: + log("Setting " + ur.getName() + " as a GLOBAL rank."); + ur.setServerKey("GLOBAL"); + break; + default: + log("Setting " + ur.getName() + " as a SERVER rank."); + ur.setServerKey(Core.name().toUpperCase()); + break; + } + } + } + + // remove all expired trial ranks + try (Connection conn = BaseDatabase.getInstance().getConnection()){ + UserDAO.removeAllExpiredTrialRanks(conn); + } + catch(Exception e){ + e.printStackTrace(); + } + + //Enable core. + enabled = true; + } + + @Override + public void onDisable() { + //Disable core. + enabled = false; + + Bukkit.setWhitelist(true); + Bukkit.getScheduler().cancelTasks(this); + this.save(true); + + for (JedisChannel channel : jedisManager.getJedisModules().keySet()) { + jedisManager.getModule(channel).disconnect(); + } + + //Components + if (this.announcer != null) this.announcer.onDisable(this); + if (this.worldManager != null) this.worldManager.onDisable(this); + if (this.chatManager != null) this.chatManager.onDisable(this); + if (this.leaderBoardManager != null) this.leaderBoardManager.onDisable(this); + if (this.menuManager != null) this.menuManager.onDisable(this); + if (this.nametagManager != null) this.nametagManager.onDisable(this); + if (this.permsManager != null) this.permsManager.onDisable(this); + if (resourcePackManager != null) resourcePackManager.onDisable(this); + if (this.antiAFK != null) this.antiAFK.onDisable(this); + if (this.tutorialManager != null) this.tutorialManager.onDisable(this); + if (this.crateManager != null) this.crateManager.onDisable(this); + if (this.voteManager != null) this.voteManager.onDisable(this); + if (this.whitelistManager != null) this.whitelistManager.onDisable(this); + if (this.alertManager != null) this.alertManager.onDisable(this); + if (this.npcManager !=null) this.npcManager.onDisable(this); + + for(Player player : Bukkit.getOnlinePlayers()) { + + // grab the user + User user = UserManager.getInstance().getUser(player.getUniqueId()).orElse(null); + if (user != null && user.isLocked()){ + try (Connection conn = BaseDatabase.getInstance().getConnection()){ + + // save the user + user.onSave(conn); + + // update stats + ServerStatsDAO.updatePlaytimeAndFirstlogin(conn, player, user); + + // set mutex to false + MutexDAO.setUserMutex(conn, user.getUUID(), false); + } + catch(Exception e){ + e.printStackTrace(); + } + } + } + shutdownRedis(); + + // TODO test remove + System.out.println("[Core] Shutting down MySQL DB pool..."); + + // shutdown mysql connection pool + BaseDatabase.getInstance().close(); +// Sentry.close(); +// this.sentryClient.closeConnection(); + } + + private void registerListeners() { + PluginManager pm = Bukkit.getPluginManager(); + pm.registerEvents(new Join(), this); + pm.registerEvents(new Leave(), this); + pm.registerEvents(new Login(this), this); + pm.registerEvents(new Move(), this); + pm.registerEvents(new PetListener(), this); + pm.registerEvents(new SignChange(), this); + pm.registerEvents(new MenuListener(), this); + pm.registerEvents(new HungerChange(), this); + pm.registerEvents(new WeatherChange(), this); + if (!Core.getWorldManager().getEditModeWorlds().isEmpty()) { + pm.registerEvents(new BlockChange(), this); + pm.registerEvents(new BreakBlock(), this); + pm.registerEvents(new PlaceBlock(), this); + pm.registerEvents(new Liquid(), this); + } + if (!Core.getSettings().canCraft()) { + pm.registerEvents(new Craft(), this); + } + if (!Core.getWorldManager().getEditModeWorlds().isEmpty() || !Core.getSettings().canInteractInventory()) { + pm.registerEvents(new InventoryClick(), this); + } + pm.registerEvents(new ChunkLoad(), this); + pm.registerEvents(new Chat(), this); + pm.registerEvents(new Teleport(), this); + pm.registerEvents(new CommandListener(), this); + pm.registerEvents(new HangingBreak(), this); + pm.registerEvents(new net.grandtheftmc.core.editmode.Damage(), this); + pm.registerEvents(new net.grandtheftmc.core.editmode.Interact(), this); + pm.registerEvents(new net.grandtheftmc.core.editmode.InventoryClick(), this); + pm.registerEvents(new ServerPingListener(), this); + pm.registerEvents(new SwapHandItems(), this); + pm.registerEvents(new Save(), this); + pm.registerEvents(new CrateOpenListener(), this); + + if (pm.getPlugin("NuVotifier") != null || pm.getPlugin("Votifier") != null) { + if (!settings.isSister()) pm.registerEvents(this.voteManager, this); + } + + pm.registerEvents(menuManager = new MenuManager(), this); + pm.registerEvents(new Damage(), this); + pm.registerEvents(new CrateNearbyListener(), this); + pm.registerEvents(new HopperComponent(), this); + pm.registerEvents(new PlaywireRecieve(), this); + pm.registerEvents(new UserStateTransactionListener(this), this); + this.getServer().getMessenger().registerOutgoingPluginChannel(this, "BungeeCord"); + } + + private void registerCommands() { + this.getCommand("config").setExecutor(new ConfigCommand()); + new EditModeCommand(); + this.getCommand("rank").setExecutor(new RankCommand()); + this.getCommand("bucks").setExecutor(new BucksCommand()); + this.getCommand("tokens").setExecutor(new TokensCommand()); + this.getCommand("whitelist").setExecutor(new WhitelistCommand()); + this.getCommand("announcer").setExecutor(new AnnouncerCommand()); + this.getCommand("message").setExecutor(new MessageCommand()); + this.getCommand("reply").setExecutor(new ReplyCommand()); + + if (!Core.getSettings().isSister()) { + this.getCommand("vote").setExecutor(new VoteCommand()); + this.getCommand("votestreak").setExecutor(new VotestreakCommand()); + } + + this.getCommand("tutorial").setExecutor(new TutorialCommand()); + this.getCommand("next").setExecutor(new NextCommand()); + this.getCommand("socialspy").setExecutor(new SocialSpyCommand()); +// this.getCommand("cosmetic").setExecutor(new CosmeticCommand()); + this.getCommand("nametag").setExecutor(new NametagCommand()); +// this.getCommand("petdata").setExecutor(new PetDataCommand()); + this.getCommand("prefs").setExecutor(new PrefsCommand()); + this.getCommand("rewards").setExecutor(new RewardsCommand()); + this.getCommand("ignore").setExecutor(new IgnoreCommand()); + this.getCommand("list").setExecutor(new ListCommand()); + this.getCommand("clearchat").setExecutor(new ClearChatCommand()); + this.getCommand("globalmute").setExecutor(new GlobalMuteCommand()); + this.getCommand("rules").setExecutor(new RulesCommand()); + this.getCommand("save").setExecutor(new SaveCommand()); + this.getCommand("playtime").setExecutor(new PlaytimeCommand()); + this.getCommand("info").setExecutor(new InfoCommand()); + this.getCommand("achievement").setExecutor(new AchievementCommand()); + this.getCommand("crowbar").setExecutor(new CrowbarCommand()); + this.getCommand("crate").setExecutor(new CrateCommand()); + this.getCommand("maxplayers").setExecutor(new MaxPlayersCommand()); + this.getCommand("chatfilter").setExecutor(new ChatFilterCommand()); + this.getCommand("forumrank").setExecutor(new ForumRankCommand()); + this.getCommand("store").setExecutor(new StoreCommand()); + this.getCommand("event").setExecutor(new EventCommand(this)); + new DiscordCommand(); + new FacebookCommand(); + new TwitterCommand(); + new SpankCommand(); + new ServerCommand(); + new CooldownCommand(); + new CouponCreditsCommand(); + new BungeeCommand(); + new TradeCommand(); + new OpenMenuCommand(); + new TrialCommand(); + new EventTagCommand(); + } + + private void load() { + this.getServer().getScheduler().scheduleSyncRepeatingTask(this, () -> { + Bukkit.getPluginManager().callEvent(new ServerSaveEvent()); + this.getLogger().info("ServerSaveEvent check"); + }, 18000L, 18000L); + this.settings.setCoreConfig(Utils.loadConfig("core")); + this.settings.setMySQLConfig(Utils.loadConfigFromMaster("mysql")); + this.settings.setServersConfig(Utils.loadConfig("servers")); + this.settings.setJoinSignsConfig(Utils.loadConfig("joinSigns")); + this.settings.setPermsConfig(Utils.loadConfig("perms")); + this.settings.setWhitelistConfig(Utils.loadConfig("whitelist")); + this.settings.setAnnouncerConfig(Utils.loadConfig("announcer")); + this.settings.setVotingConfig(Utils.loadConfig("voting")); + this.settings.setTokenShopConfig(Utils.loadConfig("tokenshop")); + this.settings.setTutorialsConfig(Utils.loadConfig("tutorials")); + this.settings.setLeaderBoardsConfig(Utils.loadConfig("leaderBoards")); + this.settings.setSocialSpyConfig(Utils.loadConfig("socialSpy")); + this.settings.setWorldsConfig(Utils.loadConfig("worlds")); + this.settings.setRewardsConfig(Utils.loadConfig("rewards")); + this.settings.setRulesConfig(Utils.loadConfig("rules")); + this.settings.setNametagsConfig(Utils.loadConfigFromMaster("nametags")); + this.settings.setHelpConfig(Utils.loadConfig("help")); + this.settings.setCratesConfig(Utils.loadConfig("crates")); + this.settings.setCrateRewardsConfig(Utils.loadConfig("craterewards")); + this.settings.setRedisConfig(Utils.loadConfig("redis")); + Utils.setMaxPlayers(this.settings.getCoreConfig().getInt("maxplayers")); + YamlConfiguration c = this.settings.getCoreConfig(); + + // New entries to support sister network. + this.settings.setSister(c.getBoolean("sister")); + this.settings.setNetworkName(c.getString("networkName")); + this.settings.setNetworkShortName(c.getString("networkShortName")); + this.settings.setNetworkIP(c.getString("networkIP")); + this.settings.setWebsiteLink(c.getString("websiteLink")); + this.settings.setStoreLink(c.getString("websiteStoreLink")); + this.settings.setServer_GTM_name(c.getString("server_GTA_name")); + this.settings.setServer_GTM_shortName(c.getString("server_GTA_shortName")); + + this.settings.setType(ServerType.getType(c.getString("serverType"))); + if (c.get("serverNumber") == null) this.settings.setNumber(0); + else this.settings.setNumber(c.getInt("serverNumber")); + if (c.getString("rankToJoin") != null) + this.settings.setRankToJoin(UserRank.getUserRankOrNull(c.getString("rankToJoin"))); + + this.loadMySQL(); + this.loadMenus(); + Help.loadHelpData(); + antiAFK = new AntiAFK(); + this.chatManager = new ChatManager(Utils.loadConfig("chatsettings")); + +// mySQLAsyncQueue = new MySQLAsyncQueue(); +// mysqlAsyncTask = Bukkit.getScheduler().runTaskTimerAsynchronously(this, mySQLAsyncQueue, 0L, 20L); + + loadRedis(); + } + + public void reload() { + +// mySQLAsyncQueue.run(); +// mysqlAsyncTask.cancel(); + + // TODO remove legacy code + BaseDatabase.getInstance().close(); + //sql.closeConnection(); + + shutdownRedis(); + + this.load(); + this.serverManager.loadJoinSigns(); + this.permsManager.loadPerms(); + this.whitelistManager.load(); + this.announcer.loadAnnouncements(); + this.announcer.startSchedule(); + + if (!settings.isSister()) { + this.voteManager.startSchedule(); + this.voteManager.loadLinksAndRewards(); + this.voteManager.loadTokenShop(); + } + + this.tutorialManager.load(); + this.leaderBoardManager.loadLeaderBoards(); + this.nametagManager.loadNametags(); + this.crateManager.load(); + this.crateManager.loadRewards(); + } + + public void save(boolean shutdown) { + this.serverManager.saveJoinSigns(shutdown); + this.permsManager.savePerms(shutdown); + this.whitelistManager.save(shutdown); + this.announcer.saveAnnouncements(shutdown); + this.tutorialManager.save(shutdown); + this.leaderBoardManager.saveLeaderBoards(shutdown); + this.crateManager.save(shutdown); + + if (!settings.isSister()) { + this.voteManager.save(shutdown); + } + } + + + private void loadRedis() { + String server = this.settings.getRedisConfig().getString("server"); + String password = this.settings.getRedisConfig().getString("password"); + int port = this.settings.getRedisConfig().getInt("port"); + Core.log("Attempting to connect to redis server (" + server + ":" + port + ")(pass=" + password + ")..."); + + Bukkit.getScheduler().runTaskAsynchronously(this, () -> { + +// Core.log("Initialising Redis connection pool..."); +// new RedisFactory(server, password, port, () -> { +// +// Core.log("Initialising Redis listener..."); +// new RedisListener(); +// }); + + + }); + + /* //THIS WORKS + + try { + jedis = new Jedis(server, port); + jedis.auth(password); + jedis.ping(); + getLogger().info("Connected to Redis server successfully."); + + redisManager = new RedisManager(); + + Bukkit.getScheduler().runTaskAsynchronously(this, () -> { + new RedisListener(); + }); + + getLogger().info("Redis listener registered."); + } catch (Exception e) { + getLogger().warning("Failed to connect to redis! Redis support is disabled."); + }*/ + + + + /* + +FutureTask task = new FutureTask(new Callable() { + public JedisPool call() + throws Exception { + //JedisPoolConfig config = new JedisPoolConfig(); + //config.setMaxTotal(8); + return new JedisPool(server, port); + //return new JedisPool(config, server, port, 0, password); + } + }); + + Bukkit.getScheduler().runTaskAsynchronously(this, task); + + try { + Core.log("Creating Jedis pool..."); + ClassLoader prev = Thread.currentThread().getContextClassLoader(); + Thread.currentThread().setContextClassLoader(Core.class.getClassLoader()); + this.pool = task.get(); + Thread.currentThread().setContextClassLoader(prev); + } catch (InterruptedException | ExecutionException e) { + throw new RuntimeException("Unable to create Redis pool", e); + } + + + try (Jedis rsc = pool.getResource()) { + Core.log("Pinging Redis..."); + rsc.auth(password); + rsc.ping(); + // If that worked + getLogger().log(Level.INFO, "Successfully connected to Redis."); + + redisManager = new RedisManager(); + new RedisListener(); + } catch (JedisConnectionException e) { + pool.destroy(); + pool = null; + athrow e; + }*/ + } + + private void shutdownRedis() { + if (RedisManager.redisEnabled()) { + RedisFactory.getPool().close(); + } + } + + private void loadMySQL() { + + // initialize sql with settings from config.yml (in mysql) column + YamlConfiguration c = this.settings.getMySQLConfig(); + + // TODO remove, as it's the old way of starting the sql settings + this.settings.setHost(c.getString("mysql.host")); + this.settings.setPort(c.getString("mysql.port")); + this.settings.setDatabase(c.getString("mysql.database")); + this.settings.setUser(c.getString("mysql.user")); + this.settings.setPassword(c.getString("mysql.password")); + +// sql = new MySQL(this.settings.getHost(), this.settings.getPort(), this.settings.getDatabase(), this.settings.getUser(), +// this.settings.getPassword()); +// sql.openConnection(); + + // two connection system for compatibility purposes + BaseDatabase.getInstance().init(c, "mysql"); + // TEST + try (Connection conn = BaseDatabase.getInstance().getConnection()){ + System.out.println("[Core] BaseDatabase grabbing connection..."); + try (ResultSet result = conn.prepareStatement("SELECT 1").executeQuery()){ + // empty on purpose + System.out.println("[Core] BaseDatabase works!"); + } + } + catch(Exception e){ + e.printStackTrace(); + } + + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("ALTER TABLE users " + + "ADD COLUMN `country` VARCHAR(32) NOT NULL DEFAULT 'NONE'," + + "ADD COLUMN `language` VARCHAR(8) NOT NULL DEFAULT 'NONE';")) { + + statement.execute(); + } + } catch (SQLException e) { +// e.printStackTrace(); Ignore + } + + new BukkitRunnable() { + @Override + public void run() { +// if (!Core.this.settings.loadCosmetics()) return; +// try (ResultSet rs = Core.sql.query("select * from cosmetics LIMIT 1;")) { +// ResultSetMetaData metaData = rs.getMetaData(); +// List columns = new ArrayList<>(); +// for (int i = 3; i <= metaData.getColumnCount(); i++) +// columns.add(metaData.getColumnName(i).toLowerCase()); +// for (CosmeticType type : CosmeticType.values()) { +// if (!columns.contains(type.toString().toLowerCase())) +// Core.sql.update("alter table cosmetics add column `" + type.toString().toLowerCase() + "` BOOLEAN not null default 0;"); +// if (!columns.contains("last:" + type.toString().toLowerCase())) +// Core.sql.update("alter table cosmetics add column `last:" + type.toString().toLowerCase() + "` VARCHAR(255);"); +// } +// for (Cosmetic c : Cosmetic.values()) { +// if (!columns.contains(c.getDBName())) { +// Core.sql.update("alter table cosmetics add column `" + c.getDBName() + "` BOOLEAN not null default 0;"); +// } +// } +// rs.close(); +// } catch (SQLException e) { +// Core.error("Error while altering Cosmetics table: "); +// e.printStackTrace(); +// } +// try (ResultSet rs = Core.sql.query("select * from nametags LIMIT 1;")) { +// ResultSetMetaData metaData = rs.getMetaData(); +// List columns = new ArrayList<>(); +// for (int i = 3; i <= metaData.getColumnCount(); i++) +// columns.add(metaData.getColumnName(i).toLowerCase()); +// Core.getNametagManager().getNametags().stream().filter(tag -> !columns.contains(tag.getName().toLowerCase())).forEach(tag -> Core.sql.update("alter table nametags add column " + tag.getName() + " BOOLEAN not null default 0;")); +// rs.close(); +// } catch (SQLException e) { +// Core.error("Error while altering Nametags table:"); +// e.printStackTrace(); +// } + } + }.runTaskAsynchronously(this); + } + + private void loadMenus() { + if (!Core.getSettings().isSister()) { + MenuManager.addMenu("vote", 54, "&e&lVoting Menu"); + } + MenuManager.addMenu("tokenshop", 54, "&e&lToken Shop"); + MenuManager.addMenu("buyshopitem", 54, "&e&lBuy Token Shop Item"); + MenuManager.addMenu("serverwarper", 54, "&e&lServer Warper"); + MenuManager.addMenu("gtmservers", 54, "&e&l" + Core.getSettings().getServer_GTM_shortName() + " Server Warper"); + MenuManager.addMenu("cosmetics", 54, "&6&lCosmetics"); + MenuManager.addMenu("buycosmetic", 54, "&6&lBuy Cosmetic"); + MenuManager.addMenu("nametags", 54, "&a&lNametags"); + MenuManager.addMenu("applynametag", 54, "&a&lApply Nametag"); + MenuManager.addMenu("buynametag", 54, "&a&lBuy Nametag"); + MenuManager.addMenu("chooseeventtag", 54, "&6&lChoose Event Tag"); + MenuManager.addMenu("prefs", 54, "&5&lPreferences"); + MenuManager.addMenu("rewards", 54, "&a&lRewards"); + MenuManager.addMenu("confirmcratereward", 54, "&e&lConfirm Accepting Reward"); + MenuManager.addMenu("confirmexpensivecrate", 54, "&e&lConfirm Opening Crate"); + MenuManager.addMenu("hubservers", 54, "&e&lHub Server Warper"); + MenuManager.addMenu("topvoters", 54, "&a&lTop Voters"); + MenuManager.addMenu("freecoupons", 54, "&a&lStore Coupons"); + + if (!Core.getSettings().isSister()) { + MenuManager.addMenu("topvoters", 54, "&a&lTop Voters"); + } + +// ServerType st = this.settings.getType(); +// for (CosmeticType type : CosmeticType.values()) +// if (type.isEnabled(st)) +// MenuManager.addMenu(type.toString().toLowerCase(), 54, type.getColoredDisplayName()); +// if (CosmeticType.BANNER.isEnabled(st)) +// MenuManager.addMenu("bannervariant", 54, CosmeticType.BANNER.getColoredDisplayName() + " Hat or Cape"); +// if (CosmeticType.BLOCK.isEnabled(st)) +// MenuManager.addMenu("blockvariant", 54, "&2&lBalloon or Block Pet"); +// if (CosmeticType.PARTICLE.isEnabled(st)) +// MenuManager.addMenu("particleshape", 54, CosmeticType.PARTICLE.getColoredDisplayName() + " Shape"); +// if (CosmeticType.PET.isEnabled(st)) { +// MenuManager.addMenu("petdata", 54, CosmeticType.PET.getColoredDisplayName() + " Data"); +// } + } + + public static BuycraftPlugin getBuycraftX() { + return bp; + } + public String getBuycraftSecret() { + return "74d7d741ff781080376cee2bd09635098a7b966e"; + } + + private static LinkedList getPastDataFromExcel(String fileName) throws IOException{ + FileInputStream excelFile = null; + try { + excelFile = new FileInputStream(new File(fileName)); + }catch (FileNotFoundException e) { + XSSFWorkbook workbook = new XSSFWorkbook(); + File f = new File(fileName); + f.createNewFile(); + FileOutputStream outputStream = new FileOutputStream(f); + workbook.write(outputStream); + workbook.close(); + return getPastDataFromExcel(fileName); + } + + XSSFWorkbook workbook = new XSSFWorkbook(excelFile); + XSSFSheet sheet = workbook.getSheet("Stats")==null ? workbook.createSheet("Stats") : workbook.getSheet("Stats"); + Iterator iterator = sheet.iterator(); + LinkedList pastData = new LinkedList(); + + while (iterator.hasNext()) { + Row currentRow = iterator.next(); + Iterator cellIterator = currentRow.iterator(); + StringBuilder sb = new StringBuilder(); + while (cellIterator.hasNext()) { + Cell currentCell = cellIterator.next(); + if (currentCell.getCellTypeEnum() == CellType.STRING) { + sb.append(currentCell.getStringCellValue() + "-"); + } else if (currentCell.getCellTypeEnum() == CellType.NUMERIC) { + sb.append(currentCell.getNumericCellValue() + "-"); + } + } + sb.deleteCharAt(sb.length()-1); + pastData.add(sb.toString()); + } + return pastData; + } + + public static void saveDataToExcel(String fileName, LinkedList pastData) throws IOException{ + int rowNum = 0; + FileInputStream excelFile = new FileInputStream(new File(fileName)); + XSSFWorkbook workbook = new XSSFWorkbook(excelFile); + XSSFSheet sheet = workbook.getSheet("Stats")==null ? workbook.createSheet("Stats") : workbook.getSheet("Stats"); + for(String entry : pastData) { + Row row = sheet.createRow(rowNum++); + int colNum = 0; + for (String s : entry.split("-")) { + Cell cell = row.createCell(colNum++); + cell.setCellValue(s); + } + } + + try { + FileOutputStream outputStream = new FileOutputStream(new File("stats.xlsx")); + workbook.write(outputStream); + workbook.close(); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + } + + /** + * Get the boss bar task that belongs to this Core plugin. + * + * @return The boss bar task handler. + */ + public BossBarTask getBossBarTask() { + return bossBarTask; + } + + +// public static class SaveDailyStatsRunnable implements Runnable { +// +// @Override +// public void run(){ +// new BukkitRunnable() { +// @Override +// public void run() { +// try { +// saveDailyStats(); +// Calendar calendar = Calendar.getInstance(); +// int day = calendar.get(Calendar.DAY_OF_WEEK); +// if(day == Calendar.MONDAY) { +// saveWeeklyStats(); +// } +// } catch (IOException | SQLException e) { +// e.printStackTrace(); +// } +// } +// }.runTaskAsynchronously(Core.getInstance()); +// +// } +// +// private void saveWeeklyStats() throws IOException, SQLException{ +// +// LinkedList pastData = getPastDataFromExcel("stats-weekly.xlsx"); +// +// double totalLogins = 0, totalNewPlayers = 0, totalNewPlayersLoginAgain = 0, totalPlayersPlayedBoth = 0, totalPlayersPlayedVice = 0, totalPlayersPlayedGTM = 0; +// ResultSet set = sql.prepareStatement("SELECT * FROM server_stats").executeQuery(); +// while(set.next()) { +// totalLogins++; +// long firstLogin = set.getLong("firstLogin"); +// long weeklyLogin = set.getLong("weeklyLoginTime"); +// if(System.currentTimeMillis() - firstLogin <= 1000*60*60*24*7) { +// totalNewPlayers++; +// if(weeklyLogin!=0 && weeklyLogin!=firstLogin) +// totalNewPlayersLoginAgain++; +// } +// String playedServers = set.getString("playedServers")!=null ? set.getString("playedServers").toLowerCase() : ""; +// if(playedServers.contains("vice") && playedServers.contains("gtm")) { +// totalPlayersPlayedBoth++; +// continue; +// } +// if(playedServers.contains("vice")) { +// totalPlayersPlayedVice++; +// } +// if(playedServers.contains("gtm")) { +// totalPlayersPlayedGTM++; +// } +// +// } +// pastData.add(new Date().toGMTString() + "-" + totalNewPlayersLoginAgain + "-" + totalPlayersPlayedBoth + "-" + totalPlayersPlayedVice + "-" + totalPlayersPlayedGTM + "-" + totalNewPlayers + "-" + totalLogins); +// +// saveDataToExcel("stats-weekly.xlsx", pastData); +// +// double avgLogins = 0, avgNewPlayers = 0, avgNewPlayersLoginAgain = 0, avgPlayersPlayedBoth = 0, avgPlayersPlayedVice = 0, avgPlayersPlayedGTM = 0; +// int maxSize = (pastData.size() > 4 ? 4 : pastData.size()); +// Collections.reverse(pastData); +// for(int i = 0; i fields = new ArrayList<>(); +// +// SlackField f1 = new SlackField(); +// f1.setTitle("New Players Who Logged In >1 Times (Last 7 days)"); +// f1.setValue(df.format(totalNewPlayersLoginAgain/totalNewPlayers*100) + "% (4 Week Average: " + df.format(avgNewPlayersLoginAgain/avgNewPlayers*100) + "%)"); +// f1.setShorten(false); +// fields.add(f1); +// +// SlackField f2 = new SlackField(); +// f2.setTitle("Players Who Logged Into JUST Vice (Last 7 days)"); +// f2.setValue(df.format(totalPlayersPlayedVice/totalLogins*100) + "% (4 Week Average: " + df.format(avgPlayersPlayedVice/avgLogins*100) + "%)"); +// f2.setShorten(false); +// fields.add(f2); +// +// SlackField f3 = new SlackField(); +// f3.setTitle("Players Who Logged Into JUST GTM (Last 7 days)"); +// f3.setValue(df.format(totalPlayersPlayedGTM/totalLogins*100) + "% (4 Week Average: " + df.format(avgPlayersPlayedGTM/avgLogins*100) + "%)");; +// f3.setShorten(false); +// fields.add(f3); +// +// SlackField f4 = new SlackField(); +// f4.setTitle("Players Who Logged Into BOTH Vice and GTM (Last 7 days)"); +// f4.setValue(df.format(totalPlayersPlayedBoth/totalLogins*100) + "% (4 Week Average: " + df.format(avgPlayersPlayedBoth/avgLogins*100) + "%)"); +// f4.setShorten(false); +// fields.add(f4); +// +// attachment.setFields(fields); +// msg.setAttachments(Arrays.asList(attachment)); +// msg.setText(" "); +// api.call(msg); +// +// sql.prepareStatement("update server_stats set playedServers = NULL;").executeUpdate(); +// sql.prepareStatement("update server_stats set weeklyLoginTime = " + System.currentTimeMillis() + ";").executeUpdate(); +// +// } +// +// private void saveDailyStats() throws IOException, SQLException{ +// +// for(Player p: Bukkit.getOnlinePlayers()) { +// User u = Core.getUserManager().getLoadedUser(p.getUniqueId()); +// long playTime = System.currentTimeMillis() - u.getLoginTime() + u.getDailyPlayTime(); +// PreparedStatement stmt = Core.sql.prepareStatement("UPDATE server_stats set dailyPlayTime=" + playTime + ", firstLogin=" + p.getFirstPlayed() + " WHERE uuid='" + p.getUniqueId() + "';"); +// stmt.execute(); +// u.setDailyPlayTime(0); +// u.setLoginTime(System.currentTimeMillis()); +// } +// +// LinkedList pastData = getPastDataFromExcel("stats.xlsx"); +// +// double dailyTotalLogins = 0, dailyPlaytime = 0, dailyNewPlayers = 0, dailyPlaytimeRanked = 0, dailyLoginsRanked = 0, dailyLoginsDefault = 0, dailyPlaytimeDefault = 0; +// ResultSet set = sql.prepareStatement("SELECT * FROM server_stats").executeQuery(); +// while(set.next()) { +// String uuid = set.getString("uuid"); +// if((System.currentTimeMillis() - set.getLong("firstLogin")<=1000*60*60*24)) +// dailyNewPlayers++; +// if(System.currentTimeMillis() - set.getLong("dailyLoginTime")<=1000*60*60*24) { +// dailyTotalLogins++; +// long playtime = set.getLong("dailyPlayTime"); +// dailyPlaytime += playtime; +// ResultSet rank = sql.prepareStatement("SELECT * FROM users where UUID='" + uuid + "';").executeQuery(); +// if(rank.next()) { +// UserRank userRank = UserRank.getUserRank(rank.getString("userrank")); +// if(userRank==UserRank.DEFAULT) { +// dailyLoginsDefault++; +// dailyPlaytimeDefault += playtime; +// } +// else { +// dailyLoginsRanked++; +// dailyPlaytimeRanked += playtime; +// } +// } +// } +// } +// set = sql.prepareStatement("SELECT * FROM users;").executeQuery(); +// +// double totalPlayers = 0; +// if(set.last()) +// totalPlayers = set.getRow(); +// +// dailyPlaytime /= dailyTotalLogins; +// dailyPlaytime /= 1000.0 * 60.0;//minutes +// +// dailyPlaytimeDefault /= dailyLoginsDefault; +// dailyPlaytimeDefault /= 1000.0 * 60.0; +// +// dailyPlaytimeRanked /= dailyLoginsRanked; +// dailyPlaytimeRanked /= 1000.0 * 60.0; +// +// pastData.add(new Date().toGMTString() + "-" + dailyTotalLogins + "-" + dailyNewPlayers + "-" + dailyPlaytime + "-" + dailyPlaytimeRanked + "-" + dailyPlaytimeDefault); +// //pastData.add(new Date().toGMTString() + "-" + cNewPlayers + "-" + cActivePlayers); +// +// saveDataToExcel("stats.xlsx", pastData); +// +// double avgNewPlayers = 0, avgActivePlayers = 0, avgPlayTime = 0, avgPlayTimeRanked = 0, avgPlayTimeDefault = 0; +// int maxSize = (pastData.size() > 7 ? 7 : pastData.size()); +// Collections.reverse(pastData); +// for(int i = 0; i fields = new ArrayList<>(); +// +// SlackField f1 = new SlackField(); +// f1.setTitle("Active Players (Last 24 hrs)"); +// f1.setValue(dailyTotalLogins + " (" + df.format((dailyTotalLogins-avgActivePlayers)/avgActivePlayers*100) + "% Change compared to 7 day average)"); +// f1.setShorten(false); +// fields.add(f1); +// +// SlackField f2 = new SlackField(); +// f2.setTitle("New Players (Last 24 hrs)"); +// f2.setValue(dailyNewPlayers + " (" + df.format((dailyNewPlayers-avgNewPlayers)/avgNewPlayers*100) + "% Change compared to 7 day average)"); +// f2.setShorten(false); +// fields.add(f2); +// +// SlackField f3 = new SlackField(); +// f3.setTitle("Average Playtime (Last 24 hrs)"); +// f3.setValue(df.format(dailyPlaytime) + "min (" + df.format((dailyPlaytime-avgPlayTime)/avgPlayTime*100) + "% Change compared to 7 day average)"); +// f3.setShorten(false); +// fields.add(f3); +// +// SlackField f4 = new SlackField(); +// f4.setTitle("Average Playtime for Ranked Users (Last 24 hrs)"); +// f4.setValue(df.format(dailyPlaytimeRanked) + "min (" + df.format((dailyPlaytimeRanked-avgPlayTimeRanked)/avgPlayTimeRanked*100) + "% Change compared to 7 day average)"); +// f4.setShorten(false); +// fields.add(f4); +// +// SlackField f5 = new SlackField(); +// f5.setTitle("Average Playtime for Default Users (Last 24 hrs)"); +// f5.setValue(df.format(dailyPlaytimeDefault) + "min (" + df.format((dailyPlaytimeDefault-avgPlayTimeDefault)/avgPlayTimeDefault*100) + "% Change compared to 7 day average)"); +// f5.setShorten(false); +// fields.add(f5); +// +// +// SlackField f6 = new SlackField(); +// f6.setTitle("Total Players"); +// f6.setValue(totalPlayers + ""); +// f6.setShorten(false); +// fields.add(f6); +// +// attachment.setFields(fields); +// msg.setAttachments(Arrays.asList(attachment)); +// msg.setText(" "); +// api.call(msg); +// +// sql.prepareStatement("update server_stats set dailyPlayTime = 0;").executeUpdate(); +// sql.prepareStatement("update server_stats set dailyLoginTime = " + System.currentTimeMillis() + ";").executeUpdate(); +// +// } +// } +} \ No newline at end of file diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/Lang.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/Lang.java new file mode 100644 index 0000000..4a4ef98 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/Lang.java @@ -0,0 +1,116 @@ +package net.grandtheftmc.core; + +import net.grandtheftmc.core.util.C; +import net.grandtheftmc.core.util.Utils; + +public enum Lang { + + NOPERM("&cYou don't have permission to execute this command!"), + CHRISTMAS("&a&lC&c&lH&a&lR&c&lI&a&lS&c&lT&a&lM&c&lA&a&lS&8&l> "), + NOTPLAYER("&cYou are not a player!"), + MSG(" &a&lMSG&8&l> "), + TRADE(" &2&lTRADE&8&l> "), + BUCKS(" &a&lBUCKS&8&l> "), + BUCKS_ADD(" &a&lBUCKS&8&l> &a&l+&a $&l"), + BUCKS_TAKE(" &a&lBUCKS&8&l> &c&l-&c $&l"), + TOKENS(" &e&lTOKENS&8&l> "), + TOKENS_ADD(" &e&lTOKENS&8&l> &e&l+ "), + TOKENS_TAKE(" &e&lTOKENS&8&l> &c&l- "), + MONEY(" &3&lMONEY&8&l> "), + MONEY_ADD(" &3&lMONEY&8&l> &a&l+&a $&l"), + MONEY_TAKE(" &3&lMONEY&8&l> &c&l-&c $&l"), + CROWBARS(" &9&lCROWBARS&8&l> "), + CROWBARS_ADD(" &9&lCROWBARS&8&l> &9&l+ "), + CROWBARS_TAKE(" &9&lCROWBARS&8&l> &c&l- "), + ATM(" &3&lATM&8&l> "), + BANK(" &3&lBANK&8&l> "), + BANK_ADD("&3&lBANK&8&l> &a&l+&a $&l"), + BANK_TAKE("&3&lBANK&8&l> &c&l-&c $&l"), + AMMO(" &c&lAMMO&8&l> "), + AMMO_ADD(" &c&lAMMO&8&l> &a&l+ "), + AMMO_TAKE(" &c&lAMMO&8&l> &c&l- "), + GTM(" &7&l" + Core.getSettings().getServer_GTM_shortName() + "&8&l> "), + CHEAT_CODES(" &2&lCHEATCODE&8&l> "), + PREFS(" &5&lPREFS&8&l> "), + AMMUNATION(" &9&lAMMU&4&lNATION&8&l> "), + WANTED(" &c&lWANTED&8&l> "), + TAXI(" &e&lTAXI&8&l> "), + WARP(" &e&lWARP&8&l> "), + SHOP(" &a&lSHOP&8&l> "), + TRASH_CAN(" &7&lTRASH CAN&8&l> "), + HEY(" &c&lHEY&8&l> "), + COMBATTAG(" &7&lCOMBATTAG&8&l> "), + GUARDPETS(" &c&lGUARD PETS&8&l> "), + BOUNTIES(" &5&lBOUNTIES&8&l> "), + VOTE(" &e&lVOTE&8&l> "), + TOKEN_SHOP(" &e&lTOKEN SHOP&8&l> "), + CRATES(" &6&lCRATES&8&l> "), + KITS(" &b&lKITS&8&l> "), + GAMEITEMS(" &a&lGAMEITEMS&8&l> "), + RANKUP(" &a&lRANKUP&8&l> "), + RANKS(" &a&lRANKS&8&l> "), + JOBS(" &3&lJOBS&8&l> "), + COP_MODE(" &3&lCOP MODE&8&l> "), + COPS(" &3&lCOPS&8&l> "), + COP(" &3&lCOP&8&l> "), + POLICE(" &3&lPOLICE&8&l> "), + BRIBE(" &3&lBRIBE&8&l> "), + HITMAN_MODE(" &8&lHITMAN MODE> "), + JAIL(" &c&lJAIL&8&l> "), + GPS(" &7&lGPS&8&l> "), + HOUSES(" &3&lHOUSES&8&l> "), + TUTORIALS(" &2&lTUTORIALS&8&l> "), + GANGS(" &a&lGANGS&8&l> "), + GANGCHAT(" &a&lGANGCHAT&8&l> "), + LOOTCRATES(" &e&lLOOTCRATES&8&l> "), + GLIDERS(" &c&lGLIDERS&8&l> "), + HUB("&6&lHUB&8&l> "), + SOCIALSPY(" &c&lSOCIALSPY&8&l> "), + VANISH(" &c&lVANISH&8&l> "), + SS(" &c&lSS&8&l> "), + SERVERS(" &6&lSERVERS&8&l> "), + COSMETICS(" &6&lCOSMETICS&8&l> "), + NAMETAGS(" &e&lNAMETAGS&8&l> "), + REWARDS(" &a&lREWARDS&8&l> "), + VEHICLES(" &4&lVEHICLES&8&l> "), + DEATH(" &c&lDEATH&8&l> "), + HEAD_AUCTION(" &e&lHEAD AUCTION&8&l> "), + ARMOR_UPGRADE(" &b&lARMOR UPGRADE&8&l> "), + ANTIAURA(" &c&lANTIAURA&8&l> "), + SAVE(" &c&lSAVE&8&l> "), + ACHIEVEMENT(" &c&lACHIEVEMENTS&8&l> "), + GTW(" &e&lGTW&8&l> "), + DRUGS(" &e&lDRUGS&8&L> "), + LOTTERY(" &e&lLOTTERY&8&l> "), + ANTISPAM(" &c&lANTISPAM&8&l> "), + ANTIAD(" &c&lANTIADVERT&8&l> "), + VICE(" &d&lVICE&8&l> "), + DISCORD(" &5&lDISCORD&8&l> "), + FACEBOOK(" &1&lFACEBOOK&8&l> "), + TWITTER(" &3&lTWITTER&8&l> "), + SPANK(" &d&lS&a&lP&e&lA&9&lN&b&lK&8&l>&7 "), + QUEUE(" &e&lQUEUE&8&l> "), + ALERTS(" &c&lALERTS&8&l>&7 "), + CASINO(" &9&lCASINO&8&l>&7 "), + ANTICHEAT(" " + C.RED + C.BOLD + "WATCHDAWG" + C.DARK_GRAY + C.BOLD + ">" + C.RESET + " "), + ; + + private final String s; + + Lang(String s) { + this.s = s; + } + + public String s() { + return Utils.f(this.s); + } + + @Override + public String toString() { + return Utils.f(this.s); + } + + public String f(String s) { + return Utils.f(this.s + s); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/Settings.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/Settings.java new file mode 100644 index 0000000..73e506e --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/Settings.java @@ -0,0 +1,592 @@ +package net.grandtheftmc.core; + +import java.util.ArrayList; +import java.util.List; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.GameMode; +import org.bukkit.configuration.file.YamlConfiguration; + +import net.grandtheftmc.core.servers.ServerType; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.util.Utils; + +public class Settings { + + private final List stopHungerChange = new ArrayList<>(); + private final List stopWeatherChange = new ArrayList<>(); + private final List stopChunkLoad = new ArrayList<>(); + private boolean stopLoadDefaultWorld; + private boolean deletePlayerDatFiles; + private GameMode defaultGameMode = GameMode.ADVENTURE; + private boolean joinLeaveMessagesEnabled; + private boolean useTeleportFix = true; + private boolean loadCosmetics; + private boolean serverWarperEnabled = true; + private boolean statsMenuEnabled = true; + private boolean useAnnouncer; + private boolean tokenShopEnabled; + private boolean canCraft; + private boolean canOpenChests; + private boolean canInteractInventory; + private boolean petsVulnerable; + private int maxPlayers = 300; + + private int number; + private ServerType type; + private UserRank rankToJoin; + + /** Whether or not this is the main Grand Theft Minecart network */ + private boolean sister = false; + + private String networkName = "Unknown", + networkShortName = "Unknown", + networkIP = "unknown.com", + websiteLink = "unknown.com", + storeLink = "store.unknown.com", + server_GTM_name = "null", + server_GTM_shortName = "null"; + + private String host = "error"; + private String port = "error"; + private String database = "error"; + private String user = "error"; + private String password = "error"; + + private YamlConfiguration coreConfig; + private YamlConfiguration mysqlConfig; + private YamlConfiguration serversConfig; + private YamlConfiguration joinSignsConfig; + private YamlConfiguration permsConfig; + private YamlConfiguration whitelistConfig; + private YamlConfiguration announcerConfig; + private YamlConfiguration votingConfig; + private YamlConfiguration tokenShopConfig; + private YamlConfiguration tutorialsConfig; + private YamlConfiguration leaderBoardsConfig; + private YamlConfiguration socialSpyConfig; + private YamlConfiguration worldsConfig; + private YamlConfiguration rewardsConfig; + private YamlConfiguration rulesConfig; + private YamlConfiguration nametagsConfig; + private YamlConfiguration helpConfig; + private YamlConfiguration cratesConfig; + private YamlConfiguration crateRewardsConfig; + private YamlConfiguration redisConfig; + + public boolean useEditMode() { + return true; + } + + public boolean isUseEditMode() { + return true; + } + + public void setUseEditMode(boolean useEditMode) { + } + + public boolean stopHungerChange(String world) { + return this.stopHungerChange.contains(world); + } + + public void setStopHungerChange(String world) { + if (!this.stopHungerChange.contains(world)) + this.stopHungerChange.add(world); + } + + public void removeStopHungerChange(String world) { + this.stopHungerChange.remove(world); + } + + public boolean stopWeatherChange(String world) { + return this.stopWeatherChange.contains(world); + } + + public void setStopWeatherChange(String world) { + if (!this.stopWeatherChange.contains(world)) + this.stopWeatherChange.add(world); + } + + public void removeStopWeatherChange(String world) { + this.stopWeatherChange.remove(world); + } + + public boolean stopChunkLoad(String world) { + return this.stopChunkLoad.contains(world); + } + + public void setStopChunkLoad(String world) { + if (!this.stopChunkLoad.contains(world)) + this.stopChunkLoad.add(world); + } + + public void removeStopChunkLoad(String world) { + this.stopChunkLoad.remove(world); + } + + public GameMode getDefaultGameMode() { + return this.defaultGameMode == null ? GameMode.ADVENTURE : this.defaultGameMode; + } + + public void setDefaultGameMode(GameMode g) { + this.defaultGameMode = g; + } + + public boolean getJoinLeaveMessagesEnabled() { + return this.joinLeaveMessagesEnabled; + } + + public void setJoinLeaveMessagesEnabled(boolean b) { + this.joinLeaveMessagesEnabled = b; + } + + public boolean getUseTeleportFix() { + return this.useTeleportFix; + } + + public void setUseTeleportFix(boolean b) { + this.useTeleportFix = b; + } + + public int getNumber() { + return this.number; + } + + public void setNumber(int number) { + this.number = number; + } + + public ServerType getType() { + return this.type; + } + + public void setType(ServerType type) { + this.type = type; + } + + public String getDisplayName() { + return Utils.f(this.type.getDisplayName() + " &a&l" + this.number); + } + + public String name() { + return this.type.getName() + this.number; + } + + public String getHost() { + return this.host; + } + + public void setHost(String host) { + this.host = host; + } + + public String getPort() { + return this.port; + } + + public void setPort(String port) { + this.port = port; + } + + public String getDatabase() { + return this.database; + } + + public void setDatabase(String database) { + this.database = database; + } + + public String getUser() { + return this.user; + } + + public void setUser(String user) { + this.user = user; + } + + public String getPassword() { + return this.password; + } + + public void setPassword(String password) { + this.password = password; + } + + public YamlConfiguration getCoreConfig() { + return this.coreConfig; + } + + public void setCoreConfig(YamlConfiguration c) { + this.coreConfig = c; + } + + public YamlConfiguration getRedisConfig() { + return this.redisConfig; + } + + public void setRedisConfig(YamlConfiguration c) { + this.redisConfig = c; + } + + public YamlConfiguration getMySQLConfig() { + return this.mysqlConfig; + } + + public void setMySQLConfig(YamlConfiguration c) { + this.mysqlConfig = c; + } + + public YamlConfiguration getServersConfig() { + return this.serversConfig; + } + + public void setServersConfig(YamlConfiguration c) { + this.serversConfig = c; + } + + public YamlConfiguration getJoinSignsConfig() { + return this.joinSignsConfig; + } + + public void setJoinSignsConfig(YamlConfiguration c) { + this.joinSignsConfig = c; + } + + public YamlConfiguration getPermsConfig() { + return this.permsConfig; + } + + public void setPermsConfig(YamlConfiguration c) { + this.permsConfig = c; + } + + public YamlConfiguration getWhitelistConfig() { + return this.whitelistConfig; + } + + public void setWhitelistConfig(YamlConfiguration c) { + this.whitelistConfig = c; + } + + public boolean stopLoadDefaultWorld() { + return this.stopLoadDefaultWorld; + } + + public void setStopLoadDefaultWorld(boolean b) { + this.stopLoadDefaultWorld = b; + } + + public boolean deletePlayerDatFiles() { + return this.deletePlayerDatFiles; + } + + public void setDeletePlayerDatFiles(boolean b) { + this.deletePlayerDatFiles = b; + } + + /* + * public boolean loadUserKits() { return loadUserKits; } + * + * public void setLoadUserKits(boolean loadUserKits) { this.loadUserKits = + * loadUserKits; } + * + * public boolean loadUserStats() { return loadUserStats; } + * + * public void setLoadUserStats(boolean loadUserStats) { this.loadUserStats + * = loadUserStats; } + */ + + public boolean serverWarperEnabled() { + return this.serverWarperEnabled; + } + + public void setServerWarperEnabled(boolean b) { + this.serverWarperEnabled = b; + } + + public YamlConfiguration getAnnouncerConfig() { + return this.announcerConfig; + } + + public void setAnnouncerConfig(YamlConfiguration announcerConfig) { + this.announcerConfig = announcerConfig; + } + + public boolean useAnnouncer() { + return this.useAnnouncer; + } + + public void setUseAnnouncer(boolean useAnnouncer) { + this.useAnnouncer = useAnnouncer; + } + + public YamlConfiguration getVotingConfig() { + return this.votingConfig; + } + + public void setVotingConfig(YamlConfiguration votingConfig) { + this.votingConfig = votingConfig; + } + + public boolean statsMenuEnabled() { + return this.statsMenuEnabled; + } + + public void setStatsMenuEnabled(boolean statsMenuEnabled) { + this.statsMenuEnabled = statsMenuEnabled; + } + + public boolean isTokenShopEnabled() { + return this.tokenShopEnabled; + } + + public void setTokenShopEnabled(boolean tokenShopEnabled) { + this.tokenShopEnabled = tokenShopEnabled; + } + + public YamlConfiguration getTokenShopConfig() { + return this.tokenShopConfig; + } + + public void setTokenShopConfig(YamlConfiguration tokenShopConfig) { + this.tokenShopConfig = tokenShopConfig; + } + + public YamlConfiguration getTutorialsConfig() { + return this.tutorialsConfig; + } + + public void setTutorialsConfig(YamlConfiguration tutorialsConfig) { + this.tutorialsConfig = tutorialsConfig; + } + + public boolean canCraft() { + return this.canCraft; + } + + public void setCanCraft(boolean canCraft) { + this.canCraft = canCraft; + } + + public boolean canOpenChests() { + return this.canOpenChests; + } + + public void setCanOpenChests(boolean canOpenChests) { + this.canOpenChests = canOpenChests; + } + + public boolean canInteractInventory() { + return this.canInteractInventory; + } + + public void setCanInteractInventory(boolean canInteractInventory) { + this.canInteractInventory = canInteractInventory; + } + + public YamlConfiguration getLeaderBoardsConfig() { + return this.leaderBoardsConfig; + } + + public void setLeaderBoardsConfig(YamlConfiguration leaderBoardsConfig) { + this.leaderBoardsConfig = leaderBoardsConfig; + } + + public boolean useHolographicDisplays() { + return Bukkit.getPluginManager().isPluginEnabled("HolographicDisplays"); + } + + public YamlConfiguration getSocialSpyConfig() { + return this.socialSpyConfig; + } + + public void setSocialSpyConfig(YamlConfiguration socialSpyConfig) { + this.socialSpyConfig = socialSpyConfig; + } + + public UserRank getRankToJoin() { + return this.rankToJoin; + } + + public void setRankToJoin(UserRank rankToJoin) { + this.rankToJoin = rankToJoin; + } + + public boolean isSister() { + return sister; + } + + public void setSister(boolean sister) { + this.sister = sister; + } + + public String getNetworkName() { + return networkName; + } + + public void setNetworkName(String networkName) { + this.networkName = ChatColor.translateAlternateColorCodes('&', networkName); + } + + public String getNetworkShortName() { + return networkShortName; + } + + public void setNetworkShortName(String networkShortName) { + this.networkShortName = ChatColor.translateAlternateColorCodes('&', networkShortName); + } + + public String getNetworkIP() { + return networkIP; + } + + public void setNetworkIP(String networkIP) { + this.networkIP = networkIP; + } + + public String getWebsiteLink() { + return websiteLink; + } + + public void setWebsiteLink(String websiteLink) { + this.websiteLink = websiteLink; + } + + public String getStoreLink() { + return storeLink; + } + + public void setStoreLink(String storeLink) { + this.storeLink = storeLink; + } + + public String getServer_GTM_name() { + return server_GTM_name; + } + + public void setServer_GTM_name(String server_GTM_name) { + this.server_GTM_name = ChatColor.translateAlternateColorCodes('&', server_GTM_name); + } + + public String getServer_GTM_shortName() { + return server_GTM_shortName; + } + + public void setServer_GTM_shortName(String server_GTM_shortName) { + this.server_GTM_shortName = ChatColor.translateAlternateColorCodes('&', server_GTM_shortName); + } + +// public void setServer_GTM_longName(String server_GTM_longName) { +// this.server_GTM_longName = server_GTM_longName; +// } +// +// public String getServer_GTM_longName() { +// return server_GTM_longName; +// } + + public boolean needRankToJoin() { + return this.rankToJoin != null; + } + + public YamlConfiguration getWorldsConfig() { + return this.worldsConfig; + } + + public void setWorldsConfig(YamlConfiguration worldsConfig) { + this.worldsConfig = worldsConfig; + } + + public boolean loadCosmetics() { + return this.loadCosmetics; + } + + public void setLoadCosmetics(boolean b) { + this.loadCosmetics = b; + } + + public boolean isPetsVulnerable() { + return this.petsVulnerable; + } + + public void setPetsVulnerable(boolean petsVulnerable) { + this.petsVulnerable = petsVulnerable; + } + + public YamlConfiguration getRewardsConfig() { + return this.rewardsConfig; + } + + public void setRewardsConfig(YamlConfiguration rewardsConfig) { + this.rewardsConfig = rewardsConfig; + } + + public YamlConfiguration getRulesConfig() { + return this.rulesConfig; + } + + public void setRulesConfig(YamlConfiguration rulesConfig) { + this.rulesConfig = rulesConfig; + } + + public YamlConfiguration getNametagsConfig() { + return this.nametagsConfig; + } + + public void setNametagsConfig(YamlConfiguration nametagsConfig) { + this.nametagsConfig = nametagsConfig; + } + + public YamlConfiguration getHelpConfig() { + return this.helpConfig; + } + + public void setHelpConfig(YamlConfiguration c) { + this.helpConfig = c; + } + + public YamlConfiguration getCratesConfig() { + return this.cratesConfig; + } + + public void setCratesConfig(YamlConfiguration c) { + this.cratesConfig = c; + } + + public YamlConfiguration getCrateRewardsConfig() { + return this.crateRewardsConfig; + } + + public void setCrateRewardsConfig(YamlConfiguration c) { + this.crateRewardsConfig = c; + } + + public int getMaxPlayers() { + return this.maxPlayers; + } + + public void setMaxPlayers(int maxPlayers) { + this.maxPlayers = maxPlayers; + } + + /** + * Whether or not this is the main grand theft minecart network. + *

+ * Note: This is really only used to flag this as the Main or Sister network. + *

+ * + * @return {@code true} if this is the main network, {@code false} otherwise. + */ + public boolean isMainNetwork() { + return !sister; + } + + /** + * Set whether or not this is the main grand theft minecart network. + * + * @param isMainNetwork - {@code true} if this is the main network, {@code false} if it's the sister network. + */ + public void setMainNetwork(boolean isMainNetwork) { + this.sister = !isMainNetwork; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/Utils.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/Utils.java new file mode 100644 index 0000000..8c46bf6 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/Utils.java @@ -0,0 +1,1068 @@ +package net.grandtheftmc.core; + +import java.io.File; +import java.io.IOException; +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.nio.file.Files; +import java.nio.file.StandardCopyOption; +import java.text.NumberFormat; +import java.time.LocalDate; +import java.time.Month; +import java.time.ZoneId; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.Date; +import java.util.LinkedHashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import java.util.Random; +import java.util.UUID; +import java.util.concurrent.ThreadLocalRandom; +import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Color; +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.World; +import org.bukkit.WorldCreator; +import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; +import org.bukkit.block.BlockState; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.entity.Creature; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.PlayerInventory; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.inventory.meta.LeatherArmorMeta; +import org.bukkit.inventory.meta.SkullMeta; +import org.bukkit.plugin.Plugin; +import org.bukkit.potion.PotionEffect; +import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.util.Vector; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.ProtocolManager; +import com.comphenix.protocol.events.ListenerPriority; +import com.comphenix.protocol.events.PacketAdapter; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.events.PacketEvent; +import com.j0ach1mmall3.jlib.inventory.CustomEnchantment; +import com.j0ach1mmall3.jlib.methods.ReflectionAPI; +import com.j0ach1mmall3.jlib.player.JLibPlayer; + +import net.grandtheftmc.core.boards.Board; +import net.grandtheftmc.core.boards.BoardType; +import net.grandtheftmc.core.database.dao.LogDAO; +import net.grandtheftmc.core.database.dao.ServerInfoDAO; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserDAO; +import net.grandtheftmc.core.util.C; +import net.grandtheftmc.core.util.DefaultFontInfo; +import net.grandtheftmc.core.util.TimeFormatter; +import net.grandtheftmc.core.util.Title; + +public final class Utils { + private static final Random RANDOM = new Random(); + private static final List DEBUGGERS = Arrays.asList("Presidentx", "j0ach1mmall3", "Duci13", "KwonShiYun"); + private static final Class BLOCK_POSITION_CLASS = ReflectionAPI.getNmsClass("BlockPosition"); + private static final Class TILE_ENTITY_CHEST_CLASS = ReflectionAPI.getNmsClass("TileEntityChest"); + private static final Class PACKET_PLAY_OUT_BLOCK_ACTION_CLASS = ReflectionAPI.getNmsClass("PacketPlayOutBlockAction"); + private static final Class BLOCK_CLASS = ReflectionAPI.getNmsClass("Block"); + private static final Enchantment GLOW; + + static { + CustomEnchantment customEnchantment = new CustomEnchantment("GTMCore_Glow", new ArrayList<>(), null, 0, 1); + customEnchantment.register(); + GLOW = customEnchantment.getEnchantment(); + } + + private Utils() { + } + + public static boolean isInteger(String s) { + try { + Integer.parseInt(s); + } catch (NumberFormatException e) { + return false; + } + return true; + } + + public static boolean returnTrue() { + return true; + } + + public static Random getRandom() { + return RANDOM; + } + + public static void broadcast(String string) { + Bukkit.broadcastMessage(f(string)); + } + + public static void broadcastExcept(Player player, String string) { + Bukkit.getOnlinePlayers().stream().filter(p -> !p.equals(player)).forEach(p -> p.sendMessage(Utils.f(string))); + } + + public static void m(int i) { + b(String.valueOf(i)); + } + + public static void b(String string) { + DEBUGGERS.stream().map(Bukkit::getPlayer).filter(p -> p != null).forEach(p -> p.sendMessage(string)); + Core.log(string); + } + + /** + * @param player The player whose line of sight we will use + * @param targetLocation The target location that is converted to a vector to form an angle with line of sight + * @return angle between entity's line of sight and the target vector + */ + public static double getAngleBetweenVectors(Player player, Location targetLocation) { + Vector lineOfSight = player.getEyeLocation().toVector(); + Vector target = targetLocation.toVector(); + target.setY(0); + lineOfSight.setY(0); + return lineOfSight.angle(target); + } + + public static List blocksFromTwoPoints(Location loc1, Location loc2) { + if (loc1 == null || loc2 == null) return null; + List blocks = new ArrayList<>(); + + int topBlockX = loc1.getBlockX() < loc2.getBlockX() ? loc2.getBlockX() : loc1.getBlockX(); + int bottomBlockX = loc1.getBlockX() > loc2.getBlockX() ? loc2.getBlockX() : loc1.getBlockX(); + + int topBlockY = loc1.getBlockY() < loc2.getBlockY() ? loc2.getBlockY() : loc1.getBlockY(); + int bottomBlockY = loc1.getBlockY() > loc2.getBlockY() ? loc2.getBlockY() : loc1.getBlockY(); + + int topBlockZ = loc1.getBlockZ() < loc2.getBlockZ() ? loc2.getBlockZ() : loc1.getBlockZ(); + int bottomBlockZ = loc1.getBlockZ() > loc2.getBlockZ() ? loc2.getBlockZ() : loc1.getBlockZ(); + + for (int x = bottomBlockX; x <= topBlockX; x++) { + for (int z = bottomBlockZ; z <= topBlockZ; z++) { + for (int y = bottomBlockY; y <= topBlockY; y++) { + blocks.add(loc1.getWorld().getBlockAt(x, y, z)); + } + } + } + + return blocks; + } + + public static Location getCenterOfBlock(Location loc) { + return loc.add(0.5, 0, 0.5); + } + + public static Location getCenterOfTwoBlocks(Location loc1, Location loc2) { + loc1 = getCenterOfBlock(loc1); + loc2 = getCenterOfBlock(loc2); + return new Location(loc1.getWorld(), (loc1.getX() + loc2.getX()) / 2, loc1.getY(), (loc1.getZ() + loc2.getZ()) / 2); + } + + public static Block getSecondHalfChest(Block block) { + Optional possibleChest = Stream.of(BlockFace.NORTH, BlockFace.EAST, BlockFace.SOUTH, BlockFace.WEST).map(block::getRelative).filter(b -> b.getType() == Material.CHEST || b.getType() == Material.TRAPPED_CHEST).findFirst(); + return possibleChest.isPresent() ? possibleChest.get() : null; + } + + public static void playDoorAnimation(Location location, boolean open) { + playDoorAnimation(location.getBlock().getState(), open); + } + + public static void playDoorAnimation(Player player, Location location, boolean open) { + playDoorAnimation(player, location.getBlock().getState(), open); + } + + public static void playDoorAnimation(BlockState state, boolean open) { + Bukkit.getOnlinePlayers().forEach(p -> playDoorAnimation(p, state, open)); + } + + @SuppressWarnings("deprecation") + public static void playDoorAnimation(Player player, BlockState state, boolean open) { + byte data = state.getRawData(); + byte b = data < 4 ? open ? (byte) (data + 4) : data : open ? data : (byte) (data - 4); + player.sendBlockChange(state.getLocation(), Material.IRON_DOOR_BLOCK, b); + } + + public static void playIronDoorAnimation(Player player, Location loc, boolean open) { + // TODO + } + + public static boolean putItemInInventoryRandomly(Inventory inv, ItemStack item) { + List list = new ArrayList<>(); + for (int i = 0; i < inv.getSize(); i++) { + if (inv.getItem(i) == null) list.add(i); + } + + if (list.isEmpty()) return false; + int i = list.get(RANDOM.nextInt(list.size())); + inv.setItem(i, item); + return true; + } + + public static String f(String string) { + return ChatColor.translateAlternateColorCodes('&', string); + } + + public static String fColor(String string) { + for (Character c : new Character[]{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}) { + if (string.contains("&" + c)) string = string.replace("&" + c, ChatColor.getByChar(c).toString()); + } + + return string; + } + + public static net.md_5.bungee.api.ChatColor getLastColor(String string) { + net.md_5.bungee.api.ChatColor chatColor = null; + for (Character c : new Character[]{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}) { + if (string.contains("&" + c)) { + chatColor = net.md_5.bungee.api.ChatColor.getByChar(c); + } + } + return chatColor; + } + + public static String deFormat(String string) { + return string.replace(ChatColor.COLOR_CHAR, '&'); + } + + public static String[] f(String[] array) { + if (array == null) return null; + for (int i = 0; i < array.length; i++) { + array[i] = Utils.f(array[i]); + } + + return array; + } + + public static String[] deFormat(String[] array) { + if (array == null) return null; + for (int i = 0; i < array.length; i++) { + array[i] = Utils.deFormat(array[i]); + } + + return array; + } + + public static Location blockLocationFromString(String string) { + if (string == null) return null; + String[] coords = string.split(","); + if (coords.length != 4) return null; + World world = Bukkit.getWorld(coords[0]); + if (world == null) return null; + int x; + int y; + int z; + try { + x = Integer.parseInt(coords[1]); + y = Integer.parseInt(coords[2]); + z = Integer.parseInt(coords[3]); + } catch (NumberFormatException e) { + return null; + } + + return new Location(world, x, y, z); + + } + + public static double round(double value) { + return new BigDecimal(value).setScale(2, RoundingMode.HALF_UP).doubleValue(); + } + + public static float round(float value) { + return new BigDecimal(value).setScale(2, RoundingMode.HALF_UP).floatValue(); + } + + public static String blockLocationToString(Location loc) { + if (loc == null) return null; + return loc.getWorld().getName() + ',' + loc.getBlockX() + ',' + loc.getBlockY() + ',' + loc.getBlockZ(); + } + + public static Location teleportLocationFromString(String string) { + if (string == null) return null; + String[] coords = string.split(","); + if (coords.length != 6) return null; + World world = Bukkit.getWorld(coords[0]); + double x; + double y; + double z; + float pitch; + float yaw; + try { + x = round(Double.parseDouble(coords[1])); + y = round(Double.parseDouble(coords[2])); + z = round(Double.parseDouble(coords[3])); + pitch = round(Float.parseFloat(coords[4])); + yaw = round(Float.parseFloat(coords[5])); + } catch (NumberFormatException e) { + return null; + } + + Location location = new Location(world, x, y, z); + location.setPitch(pitch); + location.setYaw(yaw); + return location; + } + + public static String teleportLocationToString(Location loc) { + if (loc == null) return null; + return loc.getWorld().getName() + ',' + round(loc.getX()) + ',' + round(loc.getY()) + ',' + round(loc.getZ()) + ',' + round(loc.getPitch()) + ',' + round(loc.getYaw()); + } + + public static void giveLobbyItems(Player player) { + if (player == null) return; + player.setHealth(20); + player.setMaxHealth(20); + player.setFoodLevel(20); + player.setGameMode(GameMode.SURVIVAL); + PlayerInventory inv = player.getInventory(); + inv.clear(); + player.getInventory().setHeldItemSlot(4); + + inv.setItem(0, createItem(Material.COMPASS, "&e&lServer Warper &7&lRight Click")); + inv.setItem(4, createItem(Material.ENDER_CHEST, "&6&lCosmetics &7&lRight Click")); + // inv.setItem(6, createItem(Material.NETHER_STAR, "&d&lStats &7&lRight Click")); + inv.setItem(7, createItem(Material.EXP_BOTTLE, "&a&lRewards &7&lRight Click")); + inv.setItem(8, createItem(Material.REDSTONE_COMPARATOR, "&5&lPreferences &7&lRight Click")); + + player.getActivePotionEffects().clear(); + inv.setArmorContents(null); + player.updateInventory(); + + } + + public static void sendLobbyJoinMessage(Player p, User user) { + p.sendMessage(new String[]{"", "", "", "", "", "", "", "", ""}); + String[] header = Core.getAnnouncer().getHeader(); + if (header != null && header.length > 0) ; + p.sendMessage(f(Core.getAnnouncer().getHeader())); + p.sendMessage(new String[]{"", + Utils.fc("Welcome, " + user.getColoredName(p) + "&r to the &7&l" + Core.getSettings().getNetworkShortName() + " &6&lHub&r!"), + Utils.fc("&e&l&oGTA in Minecraft!"), "", Utils.fc("&e&lSTORE &r&n" + Core.getSettings().getStoreLink()), + Utils.fc("&a&lSITE &r&n" + Core.getSettings().getWebsiteLink()), "", Utils.fc("&7Use the &eserver warper&7 to play!")}); + String[] footer = Core.getAnnouncer().getFooter(); + if (footer != null && footer.length > 0) ; + p.sendMessage(f(Core.getAnnouncer().getFooter())); + } + + public static void setInvisible(Player player, boolean b) { + Bukkit.getOnlinePlayers().stream().filter(p -> !Objects.equals(player, p)).forEach(p -> { + if (b) + p.hidePlayer(player); + else + p.showPlayer(player); + }); + } + + public static List f(List lore) { + return lore.stream().map(Utils::f).collect(Collectors.toList()); + } + + public static ItemStack createItem(Material material, String name, int amnt, String... lore) { + return createItem(material, name, toList(lore), amnt); + } + + public static ItemStack createItem(Material material, String name, List lore, int amnt) { + ItemStack item = new ItemStack(material); + if (amnt > 0) + item.setAmount(amnt); + if (name != null || lore != null) { + ItemMeta meta = item.getItemMeta(); + if (name != null) + meta.setDisplayName(Utils.f(name)); + if (lore != null) + meta.setLore(f(lore)); + item.setItemMeta(meta); + } + return item; + } + + public static ItemStack createItem(Material material, int durability, String name, String... lore) { + return createItem(material, durability, name, toList(lore)); + } + + public static ItemStack createItem(Material material, int durability, String name, List lore) { + ItemStack item = new ItemStack(material); + if (durability > 0) + item.setDurability((short) durability); + if (name != null || lore != null) { + ItemMeta meta = item.getItemMeta(); + if (name != null) + meta.setDisplayName(Utils.f(name)); + if (lore != null) + meta.setLore(f(lore)); + item.setItemMeta(meta); + } + return item; + } + + public static ItemStack createItem(Material material, int durability, String name, int amnt, String... lore) { + return createItem(material, durability, name, toList(lore), amnt); + } + + public static ItemStack createItem(Material material, int durability, String name, List lore, int amnt) { + ItemStack item = new ItemStack(material); + if (amnt > 0) + item.setAmount(amnt); + if (durability > 0) + item.setDurability((short) durability); + if (name != null || lore != null) { + ItemMeta meta = item.getItemMeta(); + if (name != null) + meta.setDisplayName(Utils.f(name)); + if (lore != null) + meta.setLore(f(lore)); + item.setItemMeta(meta); + } + return item; + } + + public static ItemStack createItem(Material material, String name, String... lore) { + return createItem(material, name, toList(lore)); + } + + public static ItemStack createItem(Material material, String name, List lore) { + ItemStack item = new ItemStack(material); + + if (name != null || lore != null) { + ItemMeta meta = item.getItemMeta(); + if (name != null) + meta.setDisplayName(Utils.f(name)); + if (lore != null) + meta.setLore(f(lore)); + item.setItemMeta(meta); + } + return item; + } + + public static ItemStack createItem(Material material, String name) { + ItemStack item = new ItemStack(material); + if (name != null) { + ItemMeta meta = item.getItemMeta(); + if (name != null) + meta.setDisplayName(Utils.f(name)); + item.setItemMeta(meta); + } + return item; + } + + public static ItemStack createItem(Material material, int durability, String name) { + ItemStack item = new ItemStack(material); + if (durability > 0) + item.setDurability((short) durability); + if (name != null) { + ItemMeta meta = item.getItemMeta(); + if (name != null) + meta.setDisplayName(Utils.f(name)); + item.setItemMeta(meta); + } + return item; + } + + public static ItemStack setArmorColor(ItemStack item, int red, int green, int blue) { + return setArmorColor(item, Color.fromRGB(red, green, blue)); + } + + public static ItemStack setArmorColor(ItemStack item, Color color) { + if (!(item.getItemMeta() instanceof LeatherArmorMeta)) + return item; + LeatherArmorMeta meta = (LeatherArmorMeta) item.getItemMeta(); + meta.setColor(color); + item.setItemMeta(meta); + return item; + } + + public static ItemStack setSkullOwner(ItemStack item, String owner) { + item.setDurability((short) 3); + SkullMeta meta = (SkullMeta) item.getItemMeta(); + meta.setOwner(owner); + item.setItemMeta(meta); + return item; + } + + public static void hidePlayersTo(Player player) { + Bukkit.getOnlinePlayers().stream().filter(p -> !Objects.equals(p, player)).forEach(player::hidePlayer); + } + + public static void showPlayersTo(Player player) { + Bukkit.getOnlinePlayers().stream().filter(p -> !Objects.equals(p, player)).forEach(player::showPlayer); + } + + public static void sendTitle(Player player, Title title) { + sendTitle(player, title.getTitle(), title.getSubtitle(), title.getFadeIn(), title.getStay(), + title.getFadeOut()); + } + + public static void sendTitle(Title title) { + sendTitle(title.getTitle(), title.getSubtitle(), title.getFadeIn(), title.getStay(), title.getFadeOut()); + } + + public static void sendTitle(String title, String subTitle, int fadeIn, int stay, int fadeOut) { + for (Player p : Bukkit.getOnlinePlayers()) + sendTitle(p, title, subTitle, fadeIn, stay, fadeOut); + } + + public static void sendTitle(Player player, String title, String subtitle, int fadeIn, int stay, int fadeOut) { + new JLibPlayer(player).sendTitle(fadeIn, fadeOut, stay, Utils.f(title)); + if (subtitle != null) + new JLibPlayer(player).sendSubTitle(fadeIn, fadeOut, stay, Utils.f(subtitle)); + } + + public static void sendActionBar(Player pl, String msg) { + //new JLibPlayer(pl).sendActionBar(msg); + Utils.sendActionBar(pl, msg); + } + + public static void sendActionBar(String msg) { +// for (Player p : Bukkit.getOnlinePlayers()) +// sendActionBar(p, msg); + Utils.sendActionBar(msg); + } + + public static void updateHubScoreboard(Player player, User user) { + String rank = "No Rank"; + if (user.isSpecial()) + rank = user.getUserRank().getColoredNameBold(); + Board board = new Board("lobby", Core.getSettings().getType().getScoreboardHeader(), BoardType.KEY_VALUE); + board.addValue("a", "Bucks", String.valueOf(user.getBucks())); + board.addValue("e", "Tokens", String.valueOf(user.getTokens())); + board.addValue("6", "Rank", rank); + board.addValue("6", "Server IP", user.getServerJoinAddress() != null ? user.getServerJoinAddress() : Core.getSettings().getNetworkIP()); + board.updateFor(player, user); + } + + public static List toList(String[] array) { + List ls = new ArrayList<>(); + if (array == null) + return ls; + Collections.addAll(ls, array); + return ls; + } + + public static ItemStack[] toArray(List list) { + ItemStack[] items = new ItemStack[list.size()]; + for (int i = 0; i < list.size(); i++) + items[i] = list.get(i); + return items; + } + + public static String[] stringsToArray(List list) { + if (list == null) + return null; + String[] l = new String[list.size()]; + l = list.toArray(l); + return l; + } + + public static boolean calculateChance(double i) { + return ThreadLocalRandom.current().nextDouble(101) <= i; + } + + public static void sendToServer(Player player, String server) { + Core.getServerManager().sendToServer(player, server); + } + + public static void stopEntityTracking(Player player) { + player.getLocation().getWorld().getLivingEntities().stream().filter(e -> e instanceof Creature).forEach(e -> { + Creature c = (Creature) e; + if (c.getTarget() instanceof Player && c.getTarget().equals(player)) + c.setTarget(null); + }); + } + + public static void setFlyMode(Player player, boolean b) { + player.setAllowFlight(b); + player.setFlying(b); + } + + public static Location randomLocation(Location location, double d) { + double x = location.getX() + (RANDOM.nextDouble() * d) - (d / 2); + double z = location.getZ() + (RANDOM.nextDouble() * d) - (d / 2); + return new Location(location.getWorld(), x, location.getY(), z, location.getYaw(), location.getPitch()); + } + + public static int randomNumber(int start, int end) { + return RANDOM.nextInt(end - start + 1) + start; + } + + public static int randomNumber(int end) { + return RANDOM.nextInt(end + 1); + } + + public static void copyWorld(String name) { + try { + Core.log("Copying world " + "/home/mcservers/development/master/maps/" + name + " to " + Bukkit.getWorldContainer().getCanonicalPath() + '/' + name); + File source = new File("/home/mcservers/development/master/maps/" + name); + File dest = new File(name); + Files.delete(dest.toPath()); + Files.copy(source.toPath(), dest.toPath(), StandardCopyOption.REPLACE_EXISTING); + Core.log("Finished copying world " + name); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public static World loadWorld(String name) { + copyWorld(name); + World world = Bukkit.getWorld(name); + if (world == null) { + WorldCreator creator = new WorldCreator(name); + creator.environment(World.Environment.NORMAL); + world = creator.createWorld(); + } + return world; + } + + public static YamlConfiguration loadConfigFile(File file) { + YamlConfiguration c = new YamlConfiguration(); + try { + if (!file.exists()) + file.createNewFile(); + c.load(file); + } catch (IOException | InvalidConfigurationException e1) { + e1.printStackTrace(); + } + return c; + } + + public static YamlConfiguration loadConfig(String src) { + return loadConfigFile(new File(src + ".yml")); + } + + public static YamlConfiguration loadConfigFromMaps(String src) { + return loadConfigFile(new File("/home/mcservers/development/master/maps/" + src + ".yml")); + } + + public static YamlConfiguration loadConfigFromMaster(String src) { + return loadConfigFile(new File("/home/mcservers/development/master/" + src + ".yml")); + } + + public static YamlConfiguration loadConfigFromPlugin(String src, String plugin) { + try { + return loadConfigFile(new File(Bukkit.getWorldContainer().getCanonicalPath() + '/' + plugin, src + ".yml")); + } catch (IOException e) { + e.printStackTrace(); + } + return null; + } + + public static void saveConfigFile(YamlConfiguration c, File file) { + try { + if (!file.exists()) + file.createNewFile(); + c.save(file); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public static void saveConfig(YamlConfiguration c, String src) { + saveConfigFile(c, new File(src + ".yml")); + } + + public static void deletePlayerDatFiles(String world) { + File file = new File(Bukkit.getWorldContainer() + "/" + world + "/playerdata"); + if (file.isDirectory()) + for (File f : file.listFiles()) + f.delete(); + } + + public static void kaching(Player player) { + player.playSound(player.getLocation(), Sound.BLOCK_WOODEN_DOOR_CLOSE, 2, 1); + UUID uuid = player.getUniqueId(); + new BukkitRunnable() { + @Override + public void run() { + Player player = Bukkit.getPlayer(uuid); + if (player != null) + player.playSound(player.getLocation(), Sound.ENTITY_ARROW_HIT_PLAYER, 0.3F, 1); + + } + }.runTaskLater(Core.getInstance(), 5); + + } + + public static String timeInMillisToText(Long millis) { + return timeInSecondsToText(millis / 1000); + } + + + public static String formatMoney(double money) { + return NumberFormat.getCurrencyInstance(Locale.US).format(money > 1000000 ? (money / 1000000) : money) + (money > 1000000 ? " mil" : ""); + } + + public static String numberFormat(int num) { + return NumberFormat.getCurrencyInstance(Locale.US).format(num); + } + + public static String numberFormat(double num) { + return NumberFormat.getCurrencyInstance(Locale.US).format(num); + } + + public static int getAmountInInv(Player player, ItemStack stack) { + int amnt = 0; + Inventory inventory = player.getInventory(); + for (ItemStack item : inventory.getContents()) { + if (item != null && item.isSimilar(stack)) + amnt += item.getAmount(); + } + return amnt; + } + + public static boolean giveItems(Player player, ItemStack... items) { + Map hm = player.getInventory().addItem(items); + if (hm.isEmpty()) + return false; + World w = player.getWorld(); + Location loc = player.getLocation(); + for (ItemStack item : hm.values()) + w.dropItemNaturally(loc, item); + return true; + } + + public static void takeItems(Player player, int amount, ItemStack stack) { + int toRemove = amount; + Inventory inventory = player.getInventory(); + for (int i = 0; i < inventory.getSize(); i++) { + ItemStack item = inventory.getItem(i); + if (item != null && item.isSimilar(stack)) { + if (toRemove >= item.getAmount()) { + toRemove -= item.getAmount(); + inventory.setItem(i, null); + } else { + item.setAmount(item.getAmount() - toRemove); + return; + } + + } + } + } + + public static String fc(String s) { + s = Utils.f(s); + int messagePxSize = 0; + boolean previousCode = false; + boolean isBold = false; + + for (char c : s.toCharArray()) { + if (c == '§') { + previousCode = true; + } else if (previousCode) { + previousCode = false; + isBold = c == 'l' || c == 'L'; + } else { + DefaultFontInfo dFI = DefaultFontInfo.getDefaultFontInfo(c); + messagePxSize += isBold ? dFI.getBoldLength() : dFI.getLength(); + messagePxSize++; + } + } + + int halvedMessageSize = messagePxSize / 2; + int toCompensate = 154 - halvedMessageSize; + int spaceLength = DefaultFontInfo.SPACE.getLength() + 1; + int compensated = 0; + StringBuilder sb = new StringBuilder(); + while (compensated < toCompensate) { + sb.append(' '); + compensated += spaceLength; + } + return sb + s; + } + + public static String[] fc(String[] array) { + if (array == null) + return null; + String[] a = new String[array.length]; + for (int i = 0; i < array.length; i++) + a[i] = Utils.fc(array[i]); + return a; + } + + public static Map sort(Map unsortMap) { + List> list = new LinkedList<>(unsortMap.entrySet()); + Collections.sort(list, (o1, o2) -> o1.getValue().compareTo(o2.getValue())); + Map sortedMap = new LinkedHashMap<>(); + for (Map.Entry entry : list) + sortedMap.put(entry.getKey(), entry.getValue()); + return sortedMap; + } + + public static void clearPotionEffects(Player player) { + for (PotionEffect e : player.getActivePotionEffects()) + player.removePotionEffect(e.getType()); + } + + public static String getCardinalDirection(Location location) { + double rotation = location.getYaw() % 360; + if (rotation < 0) + rotation += 360.0; + if (rotation >= 0 && rotation < 22.5) + return "S"; + else if (rotation >= 22.5 && rotation < 67.5) + return "SW"; + else if (rotation >= 67.5 && rotation < 112.5) + return "W"; + else if (rotation >= 112.5 && rotation < 157.5) + return "NW"; + else if (rotation >= 157.5 && rotation < 202.5) + return "N"; + else if (rotation >= 202.5 && rotation < 247.5) + return "NE"; + else if (rotation >= 247.5 && rotation < 292.5) + return "E"; + else if (rotation >= 292.5 && rotation < 337.5) + return "SE"; + else if (rotation >= 337.5 && rotation < 360.0) + return "S"; + return null; + + } + + public static Location getInFrontOf(Location location) { + String s = getCardinalDirection(location); + switch (s) { + case "N": + return location.add(0, 0, -2); + case "NE": + return location.add(2, 0, -2); + case "E": + return location.add(2, 0, 0); + case "SE": + return location.add(2, 0, 2); + case "S": + return location.add(0, 0, 2); + case "SW": + return location.add(-2, 0, 2); + case "W": + return location.add(-2, 0, 0); + case "NW": + return location.add(-2, 0, -2); + default: + return location; + } + } + + public static void playChestAnimation(Location loc, boolean open) { + Bukkit.getOnlinePlayers().forEach(p -> playChestAnimation(p, loc, open)); + } + + public static void playChestAnimation(Player player, Location loc, boolean open) { + try { + Object world = ReflectionAPI.getHandle((Object) loc.getWorld()); + Object position = BLOCK_POSITION_CLASS.getConstructor(double.class, double.class, double.class).newInstance(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()); + Object tileChest = world.getClass().getMethod("getTileEntity", BLOCK_POSITION_CLASS).invoke(world, position); + Object packet = PACKET_PLAY_OUT_BLOCK_ACTION_CLASS.getConstructor(BLOCK_POSITION_CLASS, BLOCK_CLASS, int.class, int.class).newInstance(position, tileChest.getClass().getMethod("getBlock").invoke(tileChest), 1, open ? 1 : 0); + ReflectionAPI.sendPacket(player, packet); + } catch (Exception e) { + Core.error("An error occured while playing a chest animation"); + e.printStackTrace(); + } + } + + public static ItemStack addGlow(ItemStack item) { + item.addUnsafeEnchantment(GLOW, 1); + return item; + } + + public static void insertLogLater(UUID uuid, String name, String action, String type, String reward, double amount, double price) { + new BukkitRunnable() { + @Override + public void run() { + Utils.insertLog(uuid, name, action, type, reward, amount, price); + } + }.runTaskAsynchronously(Core.getInstance()); + } + + public static void insertLog(UUID uuid, String name, String action, String type, String reward, double amount, double price) { + boolean result = LogDAO.insertLog(uuid, name, action, type, reward, amount, price); + if(!result) Core.error("Error while logging uuid " + uuid + " name " + name + " action " + action + " reward " + reward + " amount " + amount + " price " + price); + +// try (PreparedStatement st = Core.sql.prepareStatement("insert into logs(uuid, name, action, type, reward, amount, price, server) values (?,?,?,?,?,?,?,?);")) { +// st.setString(1, uuid.toString()); +// st.setString(2, name); +// st.setString(3, action); +// st.setString(4, type); +// st.setString(5, reward); +// st.setDouble(6, amount); +// st.setDouble(7, price); +// st.setString(8, Core.name()); +// st.execute(); +// st.close(); +// } catch (SQLException e) { +// Core.error("Error while logging uuid " + uuid + " name " + name + " action " + action + " reward " + reward + " amount " + amount + " price " + price); +// } + } + + public static Collection getOfflineStaff() { +// Collection staff = new ArrayList<>(); +// try (ResultSet resultSet = Core.getSQL().query("SELECT lastname FROM users WHERE userrank IN ( 'HELPOP', 'MOD', 'ADMIN', 'DEV' );")) { +// while (resultSet.next()) { +// staff.add(resultSet.getString("lastname")); +// } +// resultSet.close(); +// } catch (Exception exception) { +// +// } +// return staff; + return ServerInfoDAO.getOnlineStaff(); + } + + public static TimeFormatter timeFormatter(TimeUnit timeUnit, Long time) { + return new TimeFormatter(timeUnit, time); + } + + public static boolean isBanned(String uuid) { +// try (ResultSet rs = Core.sql.query("select * from BAT_ban where UUID='" + uuid + "';")) { +// if (rs.next()) { +// if (rs.getBoolean("ban_state")) { +// rs.close(); +// return true; +// } +// } +// rs.close(); +// } catch (SQLException e) { +// e.printStackTrace(); +// } +// return false; + return UserDAO.isUserBanned(uuid); + } + + /** + * Apply these item flags to ItemStack + * + * @param itemStack - the ItemStack to apply these flags to + * @param flags - the flags to apply + **/ + public static void applyItemFlags(ItemStack itemStack, ItemFlag... flags) { + ItemMeta itemMeta = itemStack.getItemMeta(); + + itemMeta.setUnbreakable(true); + itemMeta.addItemFlags(flags); + + itemMeta.addItemFlags(flags); + itemStack.setItemMeta(itemMeta); + } + + /** + * Clone ItemStack, apply flags and return new copy. + * + * @param itemStack the ItemStack to apply these flags to + * @param flags the flags to apply + * @return cloned ItemStack with itemflags + **/ + public static ItemStack addItemFlags(ItemStack itemStack, ItemFlag... flags) { + ItemStack stack = itemStack.clone(); + ItemMeta itemMeta = stack.getItemMeta(); + + itemMeta.setUnbreakable(true); + itemMeta.addItemFlags(flags); + + itemMeta.addItemFlags(flags); + stack.setItemMeta(itemMeta); + return stack; + } + + public static Month getMonth() { + Date date = new Date(); + LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); + return localDate.getMonth(); + } + + public static int getDay() { + Date date = new Date(); + LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); + return localDate.getDayOfMonth(); + } + + public static void setMaxPlayers(int maxPlayers) { + String bukkitversion = Bukkit.getServer().getClass().getPackage() + .getName().substring(23); + Object playerlist = null; + try { + playerlist = Class.forName("org.bukkit.craftbukkit." + bukkitversion + ".CraftServer") + .getDeclaredMethod("getHandle", null).invoke(Bukkit.getServer(), null); + Field maxplayers = playerlist.getClass().getSuperclass() + .getDeclaredField("maxPlayers"); + maxplayers.setAccessible(true); + maxplayers.set(playerlist, maxPlayers); + } catch (IllegalAccessException | InvocationTargetException | + NoSuchMethodException | + ClassNotFoundException | + NoSuchFieldException exception) { + exception.printStackTrace(); + } + Core.getSettings().setMaxPlayers(maxPlayers); + Core.getSettings().getCoreConfig().set("maxplayers", maxPlayers); + Utils.saveConfig(Core.getSettings().getCoreConfig(), "core"); + } + + public static void startEnchantmentShineRemover(ProtocolManager lib, Plugin owner){ + lib.addPacketListener(new PacketAdapter(owner, ListenerPriority.NORMAL, PacketType.Play.Server.ENTITY_EQUIPMENT, PacketType.Play.Server.WINDOW_ITEMS){ + @Override + public void onPacketSending(PacketEvent event){ + PacketContainer packet = event.getPacket(); + if(packet.getType()==PacketType.Play.Server.ENTITY_EQUIPMENT){ + removeEnchantments(packet.getItemModifier().read(0)); + } + else if(packet.getType()==PacketType.Play.Server.WINDOW_ITEMS){ + for(ItemStack is : packet.getItemArrayModifier().read(0)){ + if(is!=null) + removeEnchantments(is); + } + } + } + }); + } + + private static void removeEnchantments(ItemStack stack) { + if(stack==null) + return; + Object[] copy = stack.getEnchantments().keySet().toArray(); + + for (Object enchantment : copy) { + stack.removeEnchantment((Enchantment) enchantment); + } + } + + public static String timeInSecondsToText(long timer) { + return timeInSecondsToText(timer, C.WHITE, C.WHITE, C.WHITE); + } + + public static String timeInSecondsToText(long timer, String numberColor, String textColor, String splitterColor) { + StringBuilder sb = new StringBuilder(); + List units = Arrays.asList(TimeUnit.values()); + Collections.reverse(units); + int counter = 0; + for(TimeUnit u : units) { + if (counter >= 2) + break; + long time = u.convert(timer, TimeUnit.SECONDS); + if (time >= 1) { + sb.append(numberColor + time + textColor + " " + (time == 1 ? u.toString().toLowerCase().substring(0, u.toString().length()-1) : u.toString().toLowerCase()) + splitterColor + (counter == 1 ? "" : ", ")); + counter++; + timer -= TimeUnit.SECONDS.convert(time, u); + } + } + return sb.toString(); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/achivements/Achievement.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/achivements/Achievement.java new file mode 100644 index 0000000..1055416 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/achivements/Achievement.java @@ -0,0 +1,72 @@ +package net.grandtheftmc.core.achivements; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.util.Utils; + +import java.util.Optional; + +public enum Achievement { + + Hobo("Hobo", "&7&lHobo", "&7Join " + Core.getSettings().getServer_GTM_shortName() + " for the first time!", "&7&l"), + CRIMINAL("Criminal", "&e&lCriminal", "&7Rankup to CRIMINAL!", "&e&l"), + HOMIE("Homie", "&e&lHomie", "&7Rankup to &e&lHOMIE&7!", "&e&l"), + THUG("Thug", "&e&lThug", "&7Rankup to &e&lTHUG&7!", "&e&l"), + GANGSTER("Gangster", "&a&lGangster", "&7Rankup to &e&lGANGSTER&7!", "&a&l"), + MUGGER("Mugger", "&e&lMugger", "&7Rankup to &e&lMUGGER&7!", "&e&l"), + HUNTER("Hunter", "&e&lHunter", "&7Rankup to &e&lHUNTER&7!", "&e&l"), + DEALER("Dealer", "&e&lDealer", "&7Rankup to &e&lDEALER&7!", "&e&l"), + PIMP("Pimp", "&d&lPimp", "&7Rankup to &d&lPIMP&7!", "&d&l"), + MOBSTER("Mobster", "&e&lMobster", "&7Rankup to &e&lMOBSTER&7!", "&e&l"), + GODFATHER("Godfather", "&e&lGodfather", "&7Rankup to &1&lGODFATHER&7!", "&e&l"), + GTM_God(Core.getSettings().getServer_GTM_shortName() + "God", "&4&l" + Core.getSettings().getServer_GTM_name() + " God", "&7Have &a1000 &7or more hours total playtime!", "&4&l"), + Psychopath("Psychopath", "&c&lPsychopath", "&7Have &a10000 &7or more total kills", "&c&l"), + Witness("Witness", "&e&lWitness", "&7Witness &4&lPresidentx &7online!", "&e&l"), + Memelord("Memelord", "&e&lMemelord", "&7Own the rare Haramabe pet!", "&e&l"); + + private String shortName; + private String title; + private String description; + private String color; + + Achievement(String shortName, String title, String description, String color) { + this.shortName = shortName; + this.title = title; + this.description = description; + this.color = color; + } + + public static Optional getAchivement(String search) { + search = search.toLowerCase(); + for(Achievement achievement : Achievement.values()) { + if(achievement.getShortName().toLowerCase().contains(search) || achievement.getTitle().toLowerCase().contains(search)) { + return Optional.ofNullable(achievement); + } + } + return Optional.empty(); + } + + public static Optional getAchivementExact(String search) { + for (Achievement achievement : Achievement.values()) { + if (achievement.getShortName().equalsIgnoreCase(search) || achievement.getTitle().equalsIgnoreCase(search)) { + return Optional.ofNullable(achievement); + } + } + return Optional.empty(); + } + + public String getShortName() { + return this.shortName; + } + + public String getTitle() { + return this.title; + } + + public String getDescription() { + return this.description; + } + + public String getColor() { + return Utils.f(color); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/achivements/AchievementCommand.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/achivements/AchievementCommand.java new file mode 100644 index 0000000..4c2d9b7 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/achivements/AchievementCommand.java @@ -0,0 +1,138 @@ +package net.grandtheftmc.core.achivements; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserRank; +import org.apache.commons.lang.StringUtils; +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.ArrayList; +import java.util.Collection; + +public class AchievementCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command c, String lbl, String[] args) { + if (args.length == 0) { + s.sendMessage(Lang.ACHIEVEMENT.f("&7&lAchievements Help")); + s.sendMessage(Utils.f("&a/achievement &7locked List all Achievements that are still locked")); + s.sendMessage(Utils.f("&a/achievement &7unlocked List all Achievements you have unlocked")); + s.sendMessage(Utils.f("&a/achievement &7shown List your current shown Achievement")); + s.sendMessage(Utils.f("&a/achievement &7setshown &a &7Set your shown achievement")); + return true; + } + String string; + switch (args[0].toLowerCase()) { + case "locked": { + if (!(s instanceof Player)) { + s.sendMessage(Lang.NOTPLAYER.toString()); + return true; + } + Player player = (Player) s; + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + Collection achievements = new ArrayList<>(); + for (Achievement achievement : Achievement.values()) { + if (user.getUnlockedAchievements().contains(achievement)) continue; + achievements.add(achievement.getColor() + achievement.getShortName() + " &7- " + achievement.getDescription()); + } + string = StringUtils.join(achievements, " \n"); + player.sendMessage(Utils.f("&aLocked achievements: \n" + string)); + return true; + } + case "unlocked": { + if (!(s instanceof Player)) { + s.sendMessage(Lang.NOTPLAYER.toString()); + return true; + } + Player player = (Player) s; + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + Collection t = new ArrayList<>(); + user.getUnlockedAchievements().forEach(achievement -> t.add(achievement.getTitle())); + string = StringUtils.join(t, "&7, &a"); + player.sendMessage(Utils.f("&7Unlocked achievements: &a" + string)); + return true; + } + case "shown": { + if (!(s instanceof Player)) { + s.sendMessage(Lang.NOTPLAYER.toString()); + return true; + } + Player player = (Player) s; + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + player.sendMessage(Lang.ACHIEVEMENT.f("&7Shown Achievement: &a" + user.getShownAchievement().getTitle())); + return true; + } + case "setshown": { + if (!(s instanceof Player)) { + s.sendMessage(Lang.NOTPLAYER.toString()); + return true; + } + Player player = (Player) s; + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + if (args.length != 2) { + player.sendMessage(Utils.f("&aUsage: &7/achievement &asetshown [achievement]")); + return true; + } + if (Achievement.getAchivement(args[1]).isPresent()) { + Achievement achievement = Achievement.getAchivement(args[1]).get(); + if (!user.getUnlockedAchievements().contains(achievement)) { + player.sendMessage(Lang.ACHIEVEMENT.f("&cYou have not unlocked that Achievement yet!")); + } else { + user.setShownAchievement(Achievement.getAchivement(args[1]).get()); + player.sendMessage(Utils.f("&7Your shown Achievement has been set to &a" + achievement.getTitle() + "&7!")); + user.updateNameTag(player); + } + } else { + player.sendMessage(Lang.ACHIEVEMENT.f("&cAchievement not found!")); + } + return true; + } + case "give": + if (s instanceof Player) { + Player player = (Player) s; + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + if (!user.isRank(UserRank.ADMIN)) { + player.sendMessage(Lang.NOPERM.s()); + return true; + } + } + if (args.length != 3) { + s.sendMessage(Utils.f("&aUsage: &7/achievement give [player] [achievement]")); + return true; + } + if (Bukkit.getPlayer(args[1]) != null) { + Player target = Bukkit.getPlayer(args[1]); + User targetUser = Core.getUserManager().getLoadedUser(target.getUniqueId()); + if (Achievement.getAchivement(args[2]).isPresent()) { + Achievement achievement = Achievement.getAchivement(args[2]).get(); + if (targetUser.hasAchievement(achievement)) { + s.sendMessage(Lang.ACHIEVEMENT.f("&7Player already has achievement &a" + achievement.getShortName())); + } else { + targetUser.addAchievement(achievement); + s.sendMessage(Lang.ACHIEVEMENT.f("&7Achievement &a" + + achievement.getShortName() + " &7given to &a" + target.getName())); + } + } else { + s.sendMessage(Lang.ACHIEVEMENT.f("&cAchievement not found!")); + } + } else { + s.sendMessage(Lang.ACHIEVEMENT.f("&cPlayer not found!")); + } + return true; + default: + s.sendMessage(Lang.ACHIEVEMENT.f("&7&lAchievements Help")); + s.sendMessage(Utils.f("&a/achievement &7locked - List all Achievements that are still locked")); + s.sendMessage(Utils.f("&a/achievement &7unlocked - List all Achievements you have unlocked")); + s.sendMessage(Utils.f("&a/achievement &7shown - List your current shown Achievement")); + s.sendMessage(Utils.f("&a/achievement &7setshown &a &7- Set your shown achievement")); + return true; + } + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/alert/Alert.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/alert/Alert.java new file mode 100644 index 0000000..599cc75 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/alert/Alert.java @@ -0,0 +1,117 @@ +package net.grandtheftmc.core.alert; + +import net.grandtheftmc.core.alert.type.AlertShowType; +import net.grandtheftmc.core.alert.type.AlertType; + +import java.sql.Timestamp; + +/** + * Created by Luke Bingham on 10/09/2017. + */ +public interface Alert { + + int getUniqueIdentifier(); + void setUniqueIdentifier(int id); + + /** + * Get the player who created this Alert. + * + * @return + */ + String getPlayer(); + + /** + * Set the player who created this Alert. + * + * @param name + */ + void setPlayer(String name); + + /** + * Get the name of the Alert. + * + * @return + */ + String getName(); + + /** + * Get the Alert description. + * If POLL, This will be the 'question'. + * + * @return + */ + String getDescription(); + + /** + * Get the Alert description. + * If POLL, This will be the 'question'. + * + * @param desc + */ + void setDescription(String desc); + + /** + * Get the url of the image shown on the map. + * + * @return + */ + String getImageUrl(); + + /** + * Get the ShowType of this Alert. + * + * @return + */ + AlertShowType getShowType(); + + /** + * Get the AlertType of this specific Alert. + * + * @return + */ + AlertType getAlertType(); + + /** + * Get the Link that the Alert shows when interacted with. + * + * @return + */ + String getLink(); + + /** + * This Timestamp is when the Alert has or should begin. + * + * @return + */ + Timestamp getStart(); + + /** + * This Timestamp is when the Alert will end. + * + * @return + */ + Timestamp getEnd(); + + /** + * Is the Alert disabled or not started yet. + * + * @return + */ + boolean isDisabled(); + + /** + * Is the current time greater than the ending Timestamp. + * + * @return + */ + boolean hasExpired(); + + /** + * Has the Alert started? + * + * @return + */ + boolean hasStarted(); + + boolean isInProgress(); +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/alert/AlertCreateStage.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/alert/AlertCreateStage.java new file mode 100644 index 0000000..df42885 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/alert/AlertCreateStage.java @@ -0,0 +1,9 @@ +package net.grandtheftmc.core.alert; + +/** + * Created by Luke Bingham on 11/09/2017. + */ +public enum AlertCreateStage { + NAME, DESC, IMAGE, LINK, + ; +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/alert/AlertEntry.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/alert/AlertEntry.java new file mode 100644 index 0000000..10141a8 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/alert/AlertEntry.java @@ -0,0 +1,190 @@ +package net.grandtheftmc.core.alert; + +import net.grandtheftmc.core.alert.type.AlertShowType; +import net.grandtheftmc.core.alert.type.AlertType; + +import java.sql.Timestamp; + +/** + * Created by Luke Bingham on 10/09/2017. + */ +public class AlertEntry implements Alert { + + private int uniqueId; + private final String name, imageUrl; + private final AlertShowType showType; + private final AlertType alertType; + private final Timestamp start, end; + + private boolean disabled; + private String link, player, description = "none"; + private String addon; + + public AlertEntry(String name, String imageUrl, AlertShowType showType, AlertType alertType, Timestamp start, Timestamp end, boolean disabled) { + this.name = name; + this.imageUrl = imageUrl; + this.showType = showType; + this.alertType = alertType; + this.start = start; + this.end = end; + this.disabled = disabled; + } + + public AlertEntry(String name, String imageUrl, AlertShowType showType, AlertType alertType, String link, Timestamp start, Timestamp end, boolean disabled) { + this(name, imageUrl, showType, alertType, start, end, disabled); + this.link = link; + } + + @Override + public int getUniqueIdentifier() { + return this.uniqueId; + } + + @Override + public void setUniqueIdentifier(int id) { + this.uniqueId = id; + } + + /** + * Get the player who created this Alert. + * + * @return + */ + @Override + public String getPlayer() { + return this.player; + } + + /** + * Set the player who created this Alert. + * + * @param name + * @return + */ + @Override + public void setPlayer(String name) { + this.player = name; + } + + /** + * Get the name of the Alert. + * + * @return + */ + @Override + public String getName() { + return this.name; + } + + /** + * Get the Alert description. + * If POLL, This will be the 'question'. + * + * @return + */ + @Override + public String getDescription() { + return this.description; + } + + /** + * Get the Alert description. + * If POLL, This will be the 'question'. + * + * @param desc + */ + @Override + public void setDescription(String desc) { + this.description = desc; + } + + /** + * Get the url of the image shown on the map. + * + * @return + */ + @Override + public String getImageUrl() { + return this.imageUrl; + } + + /** + * Get the ShowType of this Alert. + * + * @return + */ + @Override + public AlertShowType getShowType() { + return this.showType; + } + + /** + * Get the AlertType of this specific Alert. + * + * @return + */ + @Override + public AlertType getAlertType() { + return this.alertType; + } + + /** + * Get the Link that the Alert shows when interacted with. + * + * @return + */ + @Override + public String getLink() { + return this.link; + } + + /** + * This Timestamp is when the Alert has or should begin. + * + * @return + */ + @Override + public Timestamp getStart() { + return this.start; + } + + /** + * This Timestamp is when the Alert will end. + * + * @return + */ + @Override + public Timestamp getEnd() { + return this.end; + } + + /** + * Is the Alert disabled or not started yet. + * + * @return + */ + @Override + public boolean isDisabled() { + return this.disabled; + } + + /** + * Is the current time greater than the ending Timestamp. + * + * @return + */ + @Override + public boolean hasExpired() { + return System.currentTimeMillis() > this.end.getTime(); + } + + @Override + public boolean hasStarted() { + return System.currentTimeMillis() >= this.start.getTime(); + } + + @Override + public boolean isInProgress() { + return !hasExpired() && hasStarted(); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/alert/AlertManager.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/alert/AlertManager.java new file mode 100644 index 0000000..9a2fafa --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/alert/AlertManager.java @@ -0,0 +1,160 @@ +package net.grandtheftmc.core.alert; + +import com.google.common.collect.Lists; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.alert.command.AlertCommand; +import net.grandtheftmc.core.alert.type.AlertShowType; +import net.grandtheftmc.core.alert.type.AlertType; +import net.grandtheftmc.core.database.dao.AlertsDAO; +import net.grandtheftmc.core.util.Callback; +import net.grandtheftmc.core.util.Component; +import net.grandtheftmc.core.util.ServerUtil; +import org.bukkit.entity.Player; + +import java.util.List; +import java.util.Optional; +import java.util.UUID; +import java.util.stream.Collectors; + +/** + * Created by Luke Bingham on 10/09/2017. + */ +public class AlertManager implements Component { + + private final List alerts; + private final List polls; +// private final MySQL mySQL; + + public AlertManager() { +// this.mySQL = mySQL; + this.alerts = Lists.newArrayList(); + this.polls = Lists.newArrayList(); + new AlertCommand(Core.getInstance(), this); + } + + @Override + public final AlertManager onEnable(Core plugin) { + this.reload(this::log); + return this; + } + + @Override + public final AlertManager onDisable(Core plugin) { + if(this.alerts != null && !this.alerts.isEmpty()) + this.alerts.clear(); + + return this; + } + + public List getAlerts() { + return this.alerts; + } + + public List getAvailableAlerts() { + return this.alerts.stream().filter(Alert::isInProgress).collect(Collectors.toList()); + } + + public Optional getAvailableAlertById(int id) { + return this.alerts.stream().filter(a -> a.isInProgress() && a.getUniqueIdentifier() == id).findFirst(); + } + + public Optional getAlertById(int id) { + return this.alerts.stream().filter(a -> a.getUniqueIdentifier() == id).findFirst(); + } + + public Optional getAlertById(String image) { + return this.alerts.stream().filter(a -> a.getImageUrl().equals(image)).findFirst(); + } + + public final AlertManager reload(Callback callback) { + this.alerts.clear(); + this.polls.clear(); + + ServerUtil.runTaskAsync(() -> { + createTable(); + + Optional[]> optional = AlertsDAO.fetchAllAlerts(); + if(!optional.isPresent()) return; + this.alerts.addAll(optional.get()[0]); + this.polls.addAll(optional.get()[1]); + + callback.call(true); + }); + + return this; + } + + private void createTable() { +// String query = "CREATE TABLE IF NOT EXISTS `alerts` " + +// "(" + +// "`id` int NOT NULL AUTO_INCREMENT," + +// "`name` varchar(255) NOT NULL," + +// "`description` varchar(255) DEFAULT 'none'," + +// "`image` varchar(255)," + +// "`link` varchar(255)," + +// "`showType` varchar(32) NOT NULL," + +// "`type` varchar(32) NOT NULL," + +// "`disabled` varchar(6)," + +// "`start` timestamp NOT NULL," + +// "`end` timestamp NOT NULL," + +// "`player` varchar(32) NOT NULL," + +// "`addon` longtext," + +// "PRIMARY KEY (`id`)" + +// ");"; +// PreparedStatement statement = this.mySQL.prepareStatement(query); +// statement.execute(); +// statement.close(); + AlertsDAO.createAlertsTable(); + +// String query2 = "CREATE TABLE IF NOT EXISTS `alert_users` " + +// "(" + +// "`uuid` varchar(36) NOT NULL," + +// "`id` int NOT NULL," + +// "`complete` varchar(6) NOT NULL," + +// "`input` longtext" + +// ");"; +// PreparedStatement statement2 = this.mySQL.prepareStatement(query2); +// statement2.execute(); +// statement2.close(); + AlertsDAO.createAlertUserTable(); + } + + public void insertAlert(Alert alert, Callback callback) { + if(alert.getAlertType() == AlertType.POLL) return; + ServerUtil.runTaskAsync(() -> callback.call(AlertsDAO.insertAlert(alert))); + } + + public void updateAlert(Alert alert, Callback callback) { + if(alert.getAlertType() == AlertType.POLL) return; + + ServerUtil.runTaskAsync(() -> callback.call(AlertsDAO.updateAlert(alert))); + } + + public void alertShown(Player player, Alert alert, Callback callback) { + if(player == null) return; + if(alert == null) return; + if(alert.getAlertType() == AlertType.POLL) return; + if(alert.getShowType() == AlertShowType.REPEAT) return; + + ServerUtil.runTaskAsync(() -> callback.call(AlertsDAO.insertAlertUser(player, alert))); + } + + public void deleteAlert(Player player, Alert alert, Callback callback) { + if(player == null || alert == null) { + callback.call(false); + return; + } + + ServerUtil.runTaskAsync(() -> callback.call(AlertsDAO.deleteAlert(alert))); + } + + /** + * This is ran on no thread, handle that yourself! + * + * @param uuid + * @param callback + */ + public void getAvailableAlertsForPlayer(UUID uuid, Callback> callback) { + callback.call(AlertsDAO.fetchAlertsForPlayer(this, uuid).orElse(Lists.newArrayList())); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/alert/command/AlertCommand.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/alert/command/AlertCommand.java new file mode 100644 index 0000000..e44f9e2 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/alert/command/AlertCommand.java @@ -0,0 +1,73 @@ +package net.grandtheftmc.core.alert.command; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.Utils; +import net.grandtheftmc.core.alert.Alert; +import net.grandtheftmc.core.alert.AlertEntry; +import net.grandtheftmc.core.alert.AlertManager; +import net.grandtheftmc.core.alert.type.AlertShowType; +import net.grandtheftmc.core.alert.type.AlertType; +import net.grandtheftmc.core.alert.ui.AlertsMenu; +import net.grandtheftmc.core.commands.CoreCommand; +import net.grandtheftmc.core.commands.RankedCommand; +import net.grandtheftmc.core.users.UserRank; +import org.bukkit.entity.Player; + +import java.sql.Timestamp; + +/** + * Created by Luke Bingham on 10/09/2017. + */ +public class AlertCommand extends CoreCommand implements RankedCommand { + + private final Core core; + private final AlertManager alertManager; + + /** + * Construct a new command. + */ + public AlertCommand(Core core, AlertManager alertManager) { + super( + "alerts", + "View all Alerts or create a new one." + ); + this.core = core; + this.alertManager = alertManager; + } + + /** + * This method is fired when the command is executed. + * + * @param sender sender type of the command + * @param args command arguments + */ + @Override + public void execute(Player sender, String[] args) { + if(args.length >= 1) { + if(args[0].equalsIgnoreCase("reload")) { + long start = System.currentTimeMillis(); + this.alertManager.reload(obj -> { + if (obj) { + sender.sendMessage(Lang.ALERTS.f("Successfully reloaded. (" + (System.currentTimeMillis() - start) + "ms)")); + } else { + sender.sendMessage(Lang.ALERTS.f("An error occurred while reloading!")); + } + }); + return; + } + } + + new AlertsMenu(this.alertManager).openInventory(sender); + } + + /** + * Get the required rank to use said command. + * + * @return UserRank + */ + @Override + public UserRank requiredRank() { + return UserRank.ADMIN; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/alert/component/AlertCreateHandler.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/alert/component/AlertCreateHandler.java new file mode 100644 index 0000000..fb59008 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/alert/component/AlertCreateHandler.java @@ -0,0 +1,38 @@ +package net.grandtheftmc.core.alert.component; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.alert.AlertCreateStage; +import net.grandtheftmc.core.alert.ui.AlertCreationMenu; +import net.grandtheftmc.core.util.Component; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.player.AsyncPlayerChatEvent; + +/** + * Created by Luke Bingham on 11/09/2017. + */ +public class AlertCreateHandler implements Component { + + private final String user; + private final AlertCreateStage stage; + private final AlertCreationMenu menu; + + public AlertCreateHandler(String user, AlertCreateStage stage, AlertCreationMenu menu) { + this.user = user; + this.stage = stage; + this.menu = menu; + } + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) + public void onChat(AsyncPlayerChatEvent event) { + if(!event.getPlayer().getName().equals(user)) return; + event.setCancelled(true); + + if(stage == AlertCreateStage.NAME) menu.setName(event.getMessage()); + if(stage == AlertCreateStage.DESC) menu.setDescription(event.getMessage()); + if(stage == AlertCreateStage.IMAGE) menu.setImageUrl(event.getMessage()); + if(stage == AlertCreateStage.LINK) menu.setLink(event.getMessage()); + + menu.refresh(); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/alert/type/AlertShowType.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/alert/type/AlertShowType.java new file mode 100644 index 0000000..96d6247 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/alert/type/AlertShowType.java @@ -0,0 +1,16 @@ +package net.grandtheftmc.core.alert.type; + +/** + * Created by Luke Bingham on 10/09/2017. + */ +public enum AlertShowType { + ONCE, + REPEAT, + ; + + public AlertShowType next() { + if(this == ONCE) return REPEAT; + if(this == REPEAT) return ONCE; + return ONCE; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/alert/type/AlertType.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/alert/type/AlertType.java new file mode 100644 index 0000000..75e07f9 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/alert/type/AlertType.java @@ -0,0 +1,28 @@ +package net.grandtheftmc.core.alert.type; + +/** + * Created by Luke Bingham on 10/09/2017. + */ +public enum AlertType { + NEWS(true), + SALE(false), + + POLL(false), + ; + + private final boolean enabled; + + AlertType(boolean enabled) { + this.enabled = enabled; + } + + public boolean isEnabled() { + return this.enabled; + } + + public AlertType next() { + if(this == NEWS) return SALE; + if(this == SALE) return NEWS; + return NEWS; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/alert/ui/AlertCreationMenu.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/alert/ui/AlertCreationMenu.java new file mode 100644 index 0000000..942bcf8 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/alert/ui/AlertCreationMenu.java @@ -0,0 +1,276 @@ +package net.grandtheftmc.core.alert.ui; + +import com.google.common.collect.Lists; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.Utils; +import net.grandtheftmc.core.alert.Alert; +import net.grandtheftmc.core.alert.AlertCreateStage; +import net.grandtheftmc.core.alert.AlertEntry; +import net.grandtheftmc.core.alert.AlertManager; +import net.grandtheftmc.core.alert.component.AlertCreateHandler; +import net.grandtheftmc.core.alert.type.AlertShowType; +import net.grandtheftmc.core.alert.type.AlertType; +import net.grandtheftmc.core.inventory.CoreMenu; +import net.grandtheftmc.core.inventory.CoreMenuFlag; +import net.grandtheftmc.core.inventory.button.ClickableItem; +import net.grandtheftmc.core.util.C; +import net.grandtheftmc.core.util.factory.ItemFactory; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.HandlerList; +import org.bukkit.inventory.ItemFlag; + +import java.sql.Timestamp; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.Optional; + +/** + * Created by Luke Bingham on 11/09/2017. + */ +public class AlertCreationMenu extends CoreMenu { + + private final AlertManager alertManager; + private final Player user; + + private boolean newEntry = true; + + private String name = "none", imageUrl = "none"; + private AlertShowType showType = AlertShowType.ONCE; + private AlertType alertType = AlertType.NEWS; + private long startTime = -1, expireTime = -1; + private boolean disabled = true; + private String link = "none", playerName = "none", description = "none"; + + private AlertCreateHandler handler = null; + + /** + * Construct a new Menu. + */ + public AlertCreationMenu(AlertManager alertManager, Player player) { + super( + 6, + "Alert Setup Wizard", + CoreMenuFlag.RESET_CURSOR_ON_OPEN + ); + this.alertManager = alertManager; + this.user = player; + + this.playerName = player.getName(); + this.startTime = System.currentTimeMillis(); + this.expireTime = System.currentTimeMillis(); + refresh(); + } + + /** + * Construct a new Menu. + */ + public AlertCreationMenu(AlertManager alertManager, String name, String imageUrl, String link, String description, AlertShowType showType, AlertType type, long startTime, long expireTime, boolean disabled, Player player) { + super( + 6, + "Alert Setup Wizard", + CoreMenuFlag.RESET_CURSOR_ON_OPEN + ); + this.alertManager = alertManager; + this.user = player; + this.name = name; + this.imageUrl = imageUrl; + this.link = link; + this.description = description; + this.showType = showType; + this.alertType = type; + this.startTime = startTime; + this.expireTime = expireTime; + this.disabled = disabled; + + this.newEntry = false; + + this.playerName = player.getName(); + this.startTime = System.currentTimeMillis(); + this.expireTime = System.currentTimeMillis(); + refresh(); + } + + public void refresh() { + if(this.handler != null) { + HandlerList.unregisterAll(this.handler); + this.handler = null; + } + + addItem(new ClickableItem(10, new ItemFactory(Material.NAME_TAG).setName("Name").setLore(C.GREEN + this.name).build(), (player, clickType) -> { + player.closeInventory(); + player.sendMessage(Lang.ALERTS.f("Enter a name for the Alert.")); + Bukkit.getPluginManager().registerEvents(this.handler = new AlertCreateHandler(player.getName(), AlertCreateStage.NAME, this), Core.getInstance()); + })); + + addItem(new ClickableItem(12, new ItemFactory(Material.BOOK).setName("Description").setLore(getDescription()).build(), (player, clickType) -> { + player.closeInventory(); + player.sendMessage(Lang.ALERTS.f("Enter a description for the Alert. (split with '~ln')")); + Bukkit.getPluginManager().registerEvents(this.handler = new AlertCreateHandler(player.getName(), AlertCreateStage.DESC, this), Core.getInstance()); + })); + + addItem(new ClickableItem(14, new ItemFactory(Material.PAINTING).setName("Image URL").setLore(C.GREEN + this.imageUrl).build(), (player, clickType) -> { + player.closeInventory(); + player.sendMessage(Lang.ALERTS.f("Enter a Image URL for the Alert.")); + Bukkit.getPluginManager().registerEvents(this.handler = new AlertCreateHandler(player.getName(), AlertCreateStage.IMAGE, this), Core.getInstance()); + })); + + addItem(new ClickableItem(16, new ItemFactory(Material.COMPASS).setName("Redirect Link").setLore(C.GREEN + this.link).build(), (player, clickType) -> { + player.closeInventory(); + player.sendMessage(Lang.ALERTS.f("Enter a redirect link for the Alert.")); + Bukkit.getPluginManager().registerEvents(this.handler = new AlertCreateHandler(player.getName(), AlertCreateStage.LINK, this), Core.getInstance()); + })); + + addItem(new ClickableItem(20, new ItemFactory(Material.SIGN).setName("Alert Type").setLore(C.GREEN + this.alertType.name(), " ", C.GRAY + "Click to change").build(), (player, clickType) -> { + this.alertType = this.alertType.next(); + refresh(); + })); + + addItem(new ClickableItem(22, new ItemFactory(this.showType == AlertShowType.ONCE ? Material.REDSTONE : Material.REDSTONE_COMPARATOR).setName("Show Type").setLore(C.GREEN + this.showType.name(), " ", C.GRAY + "Click to change").build(), (player, clickType) -> { + this.showType = this.showType.next(); + refresh(); + })); + + addItem(new ClickableItem(24, new ItemFactory(this.disabled ? Material.MAGMA_CREAM : Material.SLIME_BALL).setName("Disabled").setLore("" + (this.disabled ? C.RED : C.GREEN) + this.disabled, " ", C.GRAY + "Click to change").build(), (player, clickType) -> { + this.disabled = !this.disabled; + refresh(); + })); + + addItem(new ClickableItem(38, new ItemFactory(Material.WATCH).setName("Start").setLore(C.GRAY + new Timestamp(this.startTime).toString()).build(), (player, clickType) -> { + new AlertTimeEditor(this, false, user); + })); + + addItem(new ClickableItem(42, new ItemFactory(Material.WATCH).setName("Expire").setLore(C.GRAY + new Timestamp(this.expireTime).toString()).build(), (player, clickType) -> { + new AlertTimeEditor(this, true, user); + })); + + addItem(new ClickableItem(49, createAlertItem().build(), (player, clickType) -> refresh())); + + if(!name.equals("none") && !imageUrl.equals("none") && !link.equals("none") && !playerName.equals("none") && !description.equals("none")) { + if (newEntry) { + addItem(new ClickableItem(53, new ItemFactory(Material.ARROW).setName(C.GREEN + "Finish").build(), (player, clickType) -> { + long s = System.currentTimeMillis(); + AlertEntry alert = new AlertEntry(name, imageUrl, showType, alertType, link, new Timestamp(this.startTime), new Timestamp(this.expireTime), disabled); + alert.setDescription(description); + alert.setPlayer(playerName); + player.closeInventory(); + alertManager.insertAlert(alert, obj -> { + if (obj) { + player.sendMessage(Lang.ALERTS.f("New Alert entry has been added! (" + (System.currentTimeMillis() - s) + "ms)")); + } else { + player.sendMessage(Lang.ALERTS.f("An error occurred while adding entry!")); + } + }); + })); + } + else { + addItem(new ClickableItem(53, new ItemFactory(Material.ARROW).setName(C.GREEN + "Finish").build(), (player, clickType) -> { + long s = System.currentTimeMillis(); + AlertEntry alert = new AlertEntry(name, imageUrl, showType, alertType, link, new Timestamp(this.startTime), new Timestamp(this.expireTime), disabled); + alert.setDescription(description); + alert.setPlayer(playerName); + player.closeInventory(); + alertManager.updateAlert(alert, obj -> { + if (obj) { + player.sendMessage(Lang.ALERTS.f("Alert " + alert.getUniqueIdentifier() + " has been updated! (" + (System.currentTimeMillis() - s) + "ms)")); + } else { + player.sendMessage(Lang.ALERTS.f("An error occurred while updating entry!")); + } + }); + })); + } + } + + if(!newEntry) { + addItem(new ClickableItem(45, new ItemFactory(Material.FERMENTED_SPIDER_EYE).setName(C.RED + "Delete Alert").build(), (player, clickType) -> { + Optional optional = this.alertManager.getAlertById(this.imageUrl); + long s = System.currentTimeMillis(); + optional.ifPresent(alert -> this.alertManager.deleteAlert(player, alert, obj -> { + if (obj) { + player.sendMessage(Lang.ALERTS.f("Alert #" + alert.getUniqueIdentifier() + " has deleted! (" + (System.currentTimeMillis() - s) + "ms)")); + } else { + player.sendMessage(Lang.ALERTS.f("An error occurred while deleting entry!")); + } + new AlertsMenu(this.alertManager).openInventory(player); + })); + })); + } + + openInventory(user); + } + + public void setName(String name) { + this.name = name; + } + + public void setDescription(String description) { + this.description = description; + } + + public void setImageUrl(String imageUrl) { + this.imageUrl = imageUrl; + } + + public void setLink(String link) { + this.link = link; + } + + public void addTime(boolean expire, long add) { + if(expire) this.expireTime += add; + else this.startTime += add; + } + + public void takeTime(boolean expire, long take) { + if(expire) this.expireTime -= take; + else this.startTime -= take; + } + + public long getTime(boolean expire) { + return expire ? this.expireTime : this.startTime; + } + + private ItemFactory createAlertItem() { + byte data = 14; + + if(!name.equals("none") && !imageUrl.equals("none") && !link.equals("none") && !playerName.equals("none") && !description.equals("none")) + data = 5; + + ItemFactory factory = new ItemFactory(Material.STAINED_CLAY, data); + factory.setName(this.getNameByByte(name, data)); + List lore = Lists.newArrayList(); + lore.addAll(this.getDescription()); + lore.addAll(Arrays.asList(" ", C.GRAY + "Status" + C.WHITE + ": " + (disabled ? C.RED + "Disabled" : C.GREEN + "Enabled"), " ")); + lore.addAll(Arrays.asList( + C.WHITE + "Start", " " + C.GRAY + new Timestamp(this.startTime).toString(), + " ", + C.WHITE + "Expire", " " + C.GRAY + new Timestamp(this.expireTime).toString(), + " ", + C.WHITE + "Created by", " " + C.GRAY + playerName + )); + factory.setLore(lore); + factory.addFlags(ItemFlag.HIDE_ATTRIBUTES); + return factory; + } + + private String getNameByByte(String name, byte data) { + if(data == 5) return C.GREEN + C.BOLD + name; + if(data == 14) return C.RED + C.BOLD + name; + return C.YELLOW + C.BOLD + name; + } + + private List getDescription() { + if(description.equalsIgnoreCase("none")) + return Collections.singletonList(" "); + + List desc = Lists.newArrayList(); + for(String line : description.split("~ln")) { + desc.add(C.DARK_GRAY + line); + } + desc.add(" "); + + return desc; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/alert/ui/AlertTimeEditor.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/alert/ui/AlertTimeEditor.java new file mode 100644 index 0000000..77fbed4 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/alert/ui/AlertTimeEditor.java @@ -0,0 +1,94 @@ +package net.grandtheftmc.core.alert.ui; + +import net.grandtheftmc.core.inventory.CoreMenu; +import net.grandtheftmc.core.inventory.button.ClickableItem; +import net.grandtheftmc.core.util.C; +import net.grandtheftmc.core.util.factory.ItemFactory; +import org.bukkit.Material; +import org.bukkit.entity.Player; + +import java.sql.Timestamp; + +/** + * Created by Luke Bingham on 12/09/2017. + */ +public class AlertTimeEditor extends CoreMenu { + + private final AlertCreationMenu menu; + private final Player user; + + private int days = 0; + private int hours = 0; + private int minutes = 0; + private int seconds = 0; + + /** + * Construct a new Menu. + */ + public AlertTimeEditor(AlertCreationMenu menu, boolean s, Player user) { + super(6, s ? "Alert Expire Time" : "Alert Start Time"); + this.menu = menu; + this.user = user; + + update(s); + } + + protected void update(boolean expire) { + addItem(new ClickableItem(10, new ItemFactory(Material.LONG_GRASS, (byte) 2).setName(C.GREEN + "+1 Day").build(), (player, clickType) -> { + this.days += 1; + menu.addTime(expire, 86400000); + update(expire); + })); + addItem(new ClickableItem(11, new ItemFactory(Material.DOUBLE_PLANT).setName(days + " Days").build(), (player, clickType) -> {})); + addItem(new ClickableItem(12, new ItemFactory(Material.HOPPER).setName(C.RED + "-1 Day").build(), (player, clickType) -> { + this.days -= 1; + menu.takeTime(expire, 86400000); + update(expire); + })); + + addItem(new ClickableItem(14, new ItemFactory(Material.LONG_GRASS, (byte) 2).setName(C.GREEN + "+1 Hour").build(), (player, clickType) -> { + this.hours += 1; + menu.addTime(expire, 3600000); + update(expire); + })); + addItem(new ClickableItem(15, new ItemFactory(Material.DOUBLE_PLANT).setName(hours + " Hours").build(), (player, clickType) -> {})); + addItem(new ClickableItem(16, new ItemFactory(Material.HOPPER).setName(C.RED + "-1 Hour").build(), (player, clickType) -> { + this.hours -= 1; + menu.takeTime(expire, 3600000); + update(expire); + })); + + addItem(new ClickableItem(28, new ItemFactory(Material.LONG_GRASS, (byte) 2).setName(C.GREEN + "+1 Minute").build(), (player, clickType) -> { + this.minutes += 1; + menu.addTime(expire, 60000); + update(expire); + })); + addItem(new ClickableItem(29, new ItemFactory(Material.DOUBLE_PLANT).setName(minutes + " Minutes").build(), (player, clickType) -> {})); + addItem(new ClickableItem(30, new ItemFactory(Material.HOPPER).setName(C.RED + "-1 Minute").build(), (player, clickType) -> { + this.minutes -= 1; + menu.takeTime(expire, 60000); + update(expire); + })); + + addItem(new ClickableItem(32, new ItemFactory(Material.LONG_GRASS, (byte) 2).setName(C.GREEN + "+1 Second").build(), (player, clickType) -> { + this.seconds += 1; + menu.addTime(expire, 1000); + update(expire); + })); + addItem(new ClickableItem(33, new ItemFactory(Material.DOUBLE_PLANT).setName(seconds + " Seconds").build(), (player, clickType) -> {})); + addItem(new ClickableItem(34, new ItemFactory(Material.HOPPER).setName(C.RED + "-1 Second").build(), (player, clickType) -> { + this.seconds -= 1; + menu.takeTime(expire, 1000); + update(expire); + })); + + addItem(new ClickableItem(49, new ItemFactory(Material.WATCH).setName(new Timestamp(menu.getTime(expire)).toString()).build(), (player, clickType) -> update(expire))); + + addItem(new ClickableItem(44, new ItemFactory(Material.ARROW).setName(C.RED + "Back").build(), (player, clickType) -> { + player.closeInventory(); + menu.refresh(); + })); + + this.openInventory(user); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/alert/ui/AlertsMenu.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/alert/ui/AlertsMenu.java new file mode 100644 index 0000000..63834b6 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/alert/ui/AlertsMenu.java @@ -0,0 +1,134 @@ +package net.grandtheftmc.core.alert.ui; + +import com.google.common.collect.Lists; +import net.grandtheftmc.core.alert.Alert; +import net.grandtheftmc.core.alert.AlertManager; +import net.grandtheftmc.core.inventory.CoreMenu; +import net.grandtheftmc.core.inventory.CoreMenuFlag; +import net.grandtheftmc.core.inventory.button.ClickableItem; +import net.grandtheftmc.core.inventory.button.MenuItem; +import net.grandtheftmc.core.util.C; +import net.grandtheftmc.core.util.factory.ItemFactory; +import org.bukkit.Material; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +/** + * Created by Luke Bingham on 10/09/2017. + */ +public class AlertsMenu extends CoreMenu { + + /** + * Construct a new Menu. + */ + public AlertsMenu(AlertManager alertManager) { + this(1, alertManager); + } + + private AlertsMenu(int page, AlertManager alertManager) { + super( + 6, + "Alerts (page " + page + ")", + CoreMenuFlag.RESET_CURSOR_ON_OPEN + ); + + /** + * SOLID_RED = Disabled. + * SOLID_YELLOW = Expired. + * SOLID_GREEN = Active. + */ + +// for(int slot : super.getEdgeSlots(super.getRows())) +// super.addItem(new MenuItem(slot, new ItemFactory(Material.STAINED_GLASS_PANE, (byte) 7).setName(" ").build(), false)); + + addItem(new ClickableItem(49, new ItemFactory(Material.BOOK_AND_QUILL).setName(C.AQUA + "Create Alert").build(), (player, clickType) -> { + player.closeInventory(); + new AlertCreationMenu(alertManager, player); + })); + + int[] middle = {10,11,12,13,14,15,16, 19,20,21,22,23,24,25, 28,29,30,31,32,33,34}; + int perPage = middle.length, pages = 1, x = alertManager.getAlerts().size(), z = 0; + if(x / perPage > 0) pages = x / perPage; + if(x % perPage > 0) pages += 1; + if(page > pages) return; + for(int i = ((page * perPage) - perPage); i < (page * perPage); i += 1) { + if(i >= x) { + //Fill in the blank spaces. +// for(int j = z; j < perPage; j += 1) { +// addItem(null); +// } + break; + } + Alert alert = alertManager.getAlerts().get(i); + addItem(new ClickableItem(middle[z++], createAlertItem(alert).build(), (player, clickType) -> { + player.sendMessage("#" + alert.getUniqueIdentifier()); + new AlertCreationMenu(alertManager, alert.getName(), alert.getImageUrl(), alert.getLink(), alert.getDescription(), alert.getShowType(), alert.getAlertType(), alert.getStart().getTime(), alert.getEnd().getTime(), alert.isDisabled(), player).openInventory(player); + })); + } + + if (page < pages) { + addItem(new ClickableItem(52, new ItemStack(Material.ARROW), (player, clickType) -> new AlertsMenu(page + 1, alertManager).openInventory(player))); + } + + if (page > 1) { + addItem(new ClickableItem(46, new ItemStack(Material.ARROW), (player, clickType) -> new AlertsMenu(page - 1, alertManager).openInventory(player))); + } + } + + private ItemFactory createAlertItem(Alert alert) { + byte data = 5; + String status = ""; + if(alert.isInProgress()) { + data = 5; + status = C.GREEN + "Active"; + } + if(alert.hasExpired()) { + data = 4; + status = C.YELLOW + "Expired"; + } + if(alert.isDisabled()) { + data = 14; + status = C.RED + "Disabled"; + } + ItemFactory factory = new ItemFactory(Material.STAINED_CLAY, data); + factory.setName(this.getNameByByte(alert.getName(), data)); + List lore = Lists.newArrayList(); + lore.addAll(this.getDescription(alert)); + lore.addAll(Arrays.asList(" ", C.GRAY + "Status" + C.WHITE + ": " + status, " ")); + lore.addAll(Arrays.asList( + C.WHITE + (alert.hasStarted() ? "Started at" : (alert.hasExpired() ? "Started at" : "Starts at")), " " + C.GRAY + alert.getStart().toString(), + " ", + C.WHITE + (alert.hasExpired() ? "Expired" : "Expires at"), " " + C.GRAY + alert.getEnd().toString(), + " ", + C.WHITE + "Created by", " " + C.GRAY + alert.getPlayer(), + " ", + C.WHITE + "Shift " + C.GRAY + "&" + C.WHITE + " Right Click " + C.GRAY + "to edit" + )); + factory.setLore(lore); + factory.addFlags(ItemFlag.HIDE_ATTRIBUTES); + return factory; + } + + private String getNameByByte(String name, byte data) { + if(data == 5) return C.GREEN + C.BOLD + name; + if(data == 14) return C.RED + C.BOLD + name; + return C.YELLOW + C.BOLD + name; + } + + public List getDescription(Alert alert) { + if(alert.getDescription().equalsIgnoreCase("none")) + return Collections.singletonList(" "); + + List desc = Lists.newArrayList(); + for(String line : alert.getDescription().split("~ln")) { + desc.add(C.DARK_GRAY + line); + } + desc.add(" "); + + return desc; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/animation/Animation.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/animation/Animation.java new file mode 100644 index 0000000..39d1241 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/animation/Animation.java @@ -0,0 +1,19 @@ +package net.grandtheftmc.core.animation; + +import net.grandtheftmc.core.animation.step.AStep; + +public interface Animation { + + AStep[] getSteps(); + + boolean isAsynchronous(); + + void addStep(AStep step); + + void start(); + + /** + * This method will stop all animations. + */ + void stop(); +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/animation/CoreAnimation.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/animation/CoreAnimation.java new file mode 100644 index 0000000..2281d55 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/animation/CoreAnimation.java @@ -0,0 +1,93 @@ +package net.grandtheftmc.core.animation; + +import com.avaje.ebeaninternal.server.el.ElSetValue; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.animation.event.AnimationFinishEvent; +import net.grandtheftmc.core.animation.step.AStep; +import org.bukkit.Bukkit; +import org.bukkit.scheduler.BukkitRunnable; + +public class CoreAnimation implements Animation { + + private final AStep[] aSteps; + private final boolean async; + + private int size = 0, current = 0; + private BukkitRunnable task = null; + + /** + * Construct a new Animation. + * + * @param steps + */ + public CoreAnimation(boolean async, AStep... steps) { + this.async = async; + this.aSteps = steps; + this.size = steps.length; + } + + /** + * Construct a new Animation. + */ + public CoreAnimation(boolean async, int steps) { + this.async = async; + this.aSteps = new AStep[steps]; + } + + @Override + public AStep[] getSteps() { + return this.aSteps; + } + + @Override + public boolean isAsynchronous() { + return this.async; + } + + @Override + public void addStep(AStep step) { + this.aSteps[this.size++] = step; + } + + @Override + public void start() { + if(this.task != null) return; + + this.task = new BukkitRunnable() { + private long ticks = 0; + @Override public void run() { + AStep step = aSteps[current]; + if(ticks >= step.getEndingTime()) { + if(current >= (aSteps.length - 1)) { + ticks = 0; + stop(); + + AnimationFinishEvent event = new AnimationFinishEvent(CoreAnimation.this); + Bukkit.getPluginManager().callEvent(event); + return; + } + + step.getEnd().end(); + aSteps[current++].getStart().start(); + } + } + }; + + if(this.async) this.task.runTaskTimerAsynchronously(Core.getInstance(), 0L, 1L); + else this.task.runTaskTimer(Core.getInstance(), 0L, 1L); + } + + /** + * This method will stop all animations. + */ + @Override + public void stop() { + if(this.task == null) return; + this.task.cancel(); + + this.aSteps[this.current].getEnd().end(); + current = 0; + + this.task = null; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/animation/event/AnimationFinishEvent.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/animation/event/AnimationFinishEvent.java new file mode 100644 index 0000000..c3957b1 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/animation/event/AnimationFinishEvent.java @@ -0,0 +1,18 @@ +package net.grandtheftmc.core.animation.event; + +import net.grandtheftmc.core.animation.Animation; +import net.grandtheftmc.core.events.CoreEvent; + +public class AnimationFinishEvent extends CoreEvent { + + private final Animation animation; + + public AnimationFinishEvent(Animation animation) { + super(false); + this.animation = animation; + } + + public Animation getAnimation() { + return this.animation; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/animation/step/AStep.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/animation/step/AStep.java new file mode 100644 index 0000000..013a564 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/animation/step/AStep.java @@ -0,0 +1,32 @@ +package net.grandtheftmc.core.animation.step; + +public class AStep { + + private final long endingTime; + private final AStepStart start; + private final AStepEnd end; + + /** + * Construct a new Animation Step. + * + * @param start - Starting action + * @param end - Ending action + */ + public AStep(long endingTime, AStepStart start, AStepEnd end) { + this.endingTime = endingTime; + this.start = start; + this.end = end; + } + + public long getEndingTime() { + return this.endingTime; + } + + public AStepStart getStart() { + return this.start; + } + + public AStepEnd getEnd() { + return this.end; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/animation/step/AStepEnd.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/animation/step/AStepEnd.java new file mode 100644 index 0000000..0a1dcc3 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/animation/step/AStepEnd.java @@ -0,0 +1,9 @@ +package net.grandtheftmc.core.animation.step; + +public interface AStepEnd { + + /** + * This will run when the AnimationStep ends. + */ + void end(); +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/animation/step/AStepStart.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/animation/step/AStepStart.java new file mode 100644 index 0000000..7d6ce65 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/animation/step/AStepStart.java @@ -0,0 +1,9 @@ +package net.grandtheftmc.core.animation.step; + +public interface AStepStart { + + /** + * This will run when the AnimationStep first starts. + */ + void start(); +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/announcer/Announcement.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/announcer/Announcement.java new file mode 100644 index 0000000..7bdbc68 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/announcer/Announcement.java @@ -0,0 +1,29 @@ +package net.grandtheftmc.core.announcer; + +public class Announcement { + + private int id; + private String[] lines; + + public Announcement(int id, String[] lines) { + this.id = id; + this.lines = lines; + } + + public int getId() { + return this.id; + } + + public void setId(int id) { + this.id = id; + } + + public String[] getLines() { + return this.lines.clone(); + } + + public void setLines(String[] lines) { + this.lines = lines; + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/announcer/Announcer.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/announcer/Announcer.java new file mode 100644 index 0000000..f14ade7 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/announcer/Announcer.java @@ -0,0 +1,185 @@ +package net.grandtheftmc.core.announcer; + +import java.util.ArrayList; +import java.util.List; + +import org.bukkit.Bukkit; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitRunnable; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.users.Pref; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserManager; +import net.grandtheftmc.core.util.Component; +import net.grandtheftmc.core.util.Utils; + +public class Announcer implements Component { + + private List announcements = new ArrayList<>(); + private int delay = 60; + private boolean random = true; + private String[] header = new String[] { "Header: error" }; + private String[] footer = new String[] { "Footer: error" }; + private int taskId = -1; + private int id = -1; + + public Announcer() { + this.loadAnnouncements(); + this.startSchedule(); + } + + @Override + public Announcer onDisable(Core plugin) { + this.announcements.clear(); + return this; + } + + public void loadAnnouncements() { + YamlConfiguration c = Core.getSettings().getAnnouncerConfig(); + this.announcements = new ArrayList<>(); + try { + Core.getSettings().setUseAnnouncer(c.getBoolean("enable")); + this.delay = c.getInt("delay"); + this.random = c.getBoolean("random"); + this.header = Utils.stringsToArray(c.getStringList("header")); + this.footer = Utils.stringsToArray(c.getStringList("footer")); + int i = 0; + if (c.get("announcements") != null) + for (String key : c.getConfigurationSection("announcements").getKeys(false)) { + String[] array = Utils.stringsToArray(c.getStringList("announcements." + key)); + if (array != null) { + this.announcements.add(new Announcement(i, array)); + i++; + } + } + } + catch (Exception e) { + Core.log("An error has occured while launching the announcer: "); + e.printStackTrace(); + } + } + + public void saveAnnouncements(boolean shutdown) { + YamlConfiguration c = Core.getSettings().getAnnouncerConfig(); + + c.set("enable", Core.getSettings().useAnnouncer()); + c.set("delay", this.delay); + c.set("random", this.random); + c.set("header", this.header); + c.set("footer", this.footer); + int i = 0; + if (c.getConfigurationSection("announcements") != null) + for (String key : c.getConfigurationSection("announcements").getKeys(false)) + c.set(key, null); + for (Announcement an : this.announcements) { + c.set("announcements." + i, an.getLines()); + i++; + } + + Utils.saveConfig(c, "announcer"); + } + + public void startSchedule() { + if (!Core.getSettings().useAnnouncer()) + return; + if (this.taskId != -1) + Bukkit.getScheduler().cancelTask(this.taskId); + + this.taskId = new BukkitRunnable() { + @Override + public void run() { + Announcer.this.broadcastAnnouncement(); + } + + }.runTaskTimer(Core.getInstance(), this.delay * 20L, this.delay * 20L).getTaskId(); + } + + private void broadcastAnnouncement() { + Announcement an = this.pickAnnouncement(); + if (an == null) + return; + String[] header = Utils.f(this.header); + String[] lines = Utils.fc(an.getLines()); + String[] footer = Utils.f(this.footer); + for (Player player : Bukkit.getOnlinePlayers()) { + + User user = UserManager.getInstance().getUser(player.getUniqueId()).orElse(null); + if (user != null) { + + if (!user.getPref(Pref.ANNOUNCEMENTS) || user.isInTutorial()) + continue; + if (header != null) + player.sendMessage(header); + player.sendMessage(lines); + if (footer != null) + player.sendMessage(footer); + } + } + } + + private Announcement pickAnnouncement() { + if (this.announcements.isEmpty()) + return null; + if (this.random) + return this.announcements.get(Utils.getRandom().nextInt(this.announcements.size())); + this.id += 1; + if (this.id >= this.announcements.size()) + this.id = 0; + return this.announcements.get(this.id); + } + + public Announcement addAnnouncement(String[] lines) { + Announcement an = new Announcement(this.getUnusedId(), lines); + this.announcements.add(an); + return an; + } + + public void removeAnnouncement(int id) { + Announcement an = this.getAnnouncement(id); + if (an != null) + this.announcements.remove(id); + } + + private int getUnusedId() { + for (int i = 0;; i++) + if (this.getAnnouncement(this.id) == null) + return i; + } + + public Announcement getAnnouncement(int id) { + for (Announcement an : this.announcements) + if (an.getId() == id) + return an; + return null; + } + + public String[] getHeader() { + return this.header; + } + + public String[] getFooter() { + return this.footer; + } + + public List getAnnouncements() { + return this.announcements; + } + + public int getTaskId() { + return this.taskId; + } + + public void setTaskId(int taskId) { + this.taskId = taskId; + } + + public int getId() { + return this.id; + } + + public void setId(int id) { + this.id = id; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/announcer/AnnouncerCommand.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/announcer/AnnouncerCommand.java new file mode 100644 index 0000000..2cb396c --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/announcer/AnnouncerCommand.java @@ -0,0 +1,134 @@ +package net.grandtheftmc.core.announcer; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.util.Utils; +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.List; + +public class AnnouncerCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command c, String lbl, String[] args) { + if (!s.isOp()) { + s.sendMessage(Utils.f("&cYou do not have permission to execute this command!")); + return true; + } + if (args.length == 0) { + s.sendMessage(Utils.f("&a/announcer add ")); + s.sendMessage(Utils.f("&a/announcer remove ")); + s.sendMessage(Utils.f("&a/announcer reload")); + s.sendMessage(Utils.f("&a/announcer save")); + s.sendMessage(Utils.f("&a/announcer show ")); + s.sendMessage(Utils.f("&a/announcer list")); + s.sendMessage(Utils.f("&a/announcer test ")); + s.sendMessage(Utils.f("&a/announcer say ")); + return true; + } + switch (args[0].toLowerCase()) { + case "add": { + if (args.length < 2) { + s.sendMessage(Utils.f("&c/announcer add ")); + return true; + } + String text = args[1]; + for (int i = 2; i < args.length; i++) + text = text + ' ' + args[i]; + String[] lines = text.split("#"); + Announcement an = Core.getAnnouncer().addAnnouncement(lines); + s.sendMessage(Utils.f("&7An announcement with ID &a" + an.getId() + " was created!")); + + return true; + } + case "remove": + if (args.length < 2) { + s.sendMessage(Utils.f("/announcer remove ")); + return true; + } + try { + int id = Integer.parseInt(args[1]); + if (Core.getAnnouncer().getAnnouncement(id) == null) { + s.sendMessage(Utils.f("&cThat announcement does not exist!")); + return true; + } + s.sendMessage(Utils.f("&7An announcement with ID &a" + id + " was created!")); + Core.getAnnouncer().removeAnnouncement(id); + } catch (NumberFormatException e) { + s.sendMessage(Utils.f("&cThat is not an ID!")); + } + return true; + case "reload": + Core.getSettings().setAnnouncerConfig(Utils.loadConfig("announcer")); + Core.getAnnouncer().loadAnnouncements(); + Core.getAnnouncer().startSchedule(); + s.sendMessage(Utils.f("&7The announcer config was reloaded!")); + return true; + case "save": + Core.getAnnouncer().saveAnnouncements(false); + s.sendMessage(Utils.f("&7The announcer config was saved!")); + return true; + case "show": { + if (args.length < 2) { + s.sendMessage(Utils.f("&c/announcer show ")); + return true; + } + int id; + try { + id = Integer.parseInt(args[1]); + } catch (NumberFormatException e) { + s.sendMessage(Utils.f("&cThe ID must be a number!")); + return true; + } + Announcer a = Core.getAnnouncer(); + Announcement an = a.getAnnouncement(id); + s.sendMessage(Utils.f(a.getHeader())); + s.sendMessage(Utils.fc(an.getLines())); + s.sendMessage(Utils.f(a.getFooter())); + return true; + + } + case "list": + Announcer a = Core.getAnnouncer(); + List ann = a.getAnnouncements(); + if (ann.isEmpty()) { + s.sendMessage(Utils.f("&aThere are no announcements!")); + return true; + } + String st = "&aAnnouncements&7: &a" + ann.get(0).getId(); + for (int i = 1; i < ann.size(); i++) + st = st + "&7, &a" + ann.get(i).getId(); + s.sendMessage(Utils.f(st)); + return true; + case "test": { + if (args.length < 2) { + s.sendMessage(Utils.f("&c/announcer test ")); + return true; + } + String text = args[1]; + for (int i = 2; i < args.length; i++) + text = text + ' ' + args[i]; + s.sendMessage(Utils.fc(text)); + return true; + } + case "say": + if (args.length < 2) { + s.sendMessage(Utils.f("&c/announcer say ")); + return true; + } + String text = args[1]; + for (int i = 2; i < args.length; i++) + text = text + ' ' + args[i]; + Utils.broadcast(text); + return true; + default: + s.sendMessage(Utils.f("/announcer add ")); + s.sendMessage(Utils.f("/announcer remove ")); + s.sendMessage(Utils.f("/announcer list")); + return true; + } + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/Anticheat.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/Anticheat.java new file mode 100644 index 0000000..65ded92 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/Anticheat.java @@ -0,0 +1,101 @@ +package net.grandtheftmc.core.anticheat; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.ProtocolLibrary; +import com.comphenix.protocol.ProtocolManager; +import com.comphenix.protocol.events.ListenerPriority; +import com.comphenix.protocol.events.PacketAdapter; +import com.comphenix.protocol.events.PacketEvent; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.anticheat.check.CheckManager; +import net.grandtheftmc.core.anticheat.component.AnticheatComponent; +import net.grandtheftmc.core.anticheat.data.ClientData; +import net.grandtheftmc.core.anticheat.data.ClientHandler; +import net.grandtheftmc.core.anticheat.inspect.InspectCommand; +import net.grandtheftmc.core.anticheat.report.ReportManager; +import net.grandtheftmc.core.anticheat.trigger.MovementTrigger; +import net.grandtheftmc.core.util.C; +import org.bukkit.Bukkit; +import org.bukkit.GameMode; + +public class Anticheat { + + private static final String NAME = "WatchDawg"; + + private final ClientHandler clientHandler; + private final CheckManager checkManager; + + public Anticheat(Core core) { + this.checkManager = new CheckManager(); + new AnticheatComponent(core, this); + ReportManager reportManager = new ReportManager(core, this); + this.clientHandler = new ClientHandler(this, reportManager); + new InspectCommand(); + + ProtocolManager manager = ProtocolLibrary.getProtocolManager(); + + manager.addPacketListener(new PacketAdapter(core, ListenerPriority.NORMAL, PacketType.Play.Client.FLYING) { + public void onPacketReceiving(PacketEvent event) { + if(event.getPlayer().getGameMode() == GameMode.CREATIVE || event.getPlayer().getGameMode() == GameMode.SPECTATOR) return; + if (clientHandler.getClientData(event.getPlayer()) == null) return; + + if (event.getPacketType().equals(PacketType.Play.Client.FLYING)) { + ClientData data = getClientHandler().getClientData(event.getPlayer()); + MovementTrigger trigger = new MovementTrigger(data, null, null, true); + data.addToEventQueue(trigger); + } + } + }); + +// manager.addPacketListener(new PacketAdapter(core, ListenerPriority.NORMAL, PacketType.Play.Client.ARM_ANIMATION) { +// public void onPacketReceiving(PacketEvent event) { +// if(clientHandler.getClientData(event.getPlayer()) == null) return; +// +// if (event.getPacketType().equals(PacketType.Play.Client.ARM_ANIMATION)) { +// ClientData checkPlayer = clientHandler.getClientData(event.getPlayer()); +// CombatTrigger trigger = new CombatTrigger(checkPlayer, null, CombatTrigger.FightAction.SWING); +// checkPlayer.addToEventQueue(trigger); +// } +// } +// }); +// +// manager.addPacketListener(new PacketAdapter(core, ListenerPriority.NORMAL, PacketType.Play.Client.USE_ENTITY) { +// public void onPacketReceiving(PacketEvent event) { +// if(clientHandler.getClientData(event.getPlayer()) == null) return; +// +// if (event.getPacketType().equals(PacketType.Play.Client.USE_ENTITY)) { +// Player targetEntity = null; +// int entityId = event.getPacket().getIntegers().getValues().get(0); +// +// for (Entity e : event.getPlayer().getWorld().getEntities()) { +// if (e.getEntityId() == entityId) { +// if (e instanceof Player) targetEntity = (Player) e; +// else targetEntity = null; +// } +// } +// +// if (targetEntity != null) { +// ClientData checkPlayer = clientHandler.getClientData(event.getPlayer()); +// ClientData targetPlayer = clientHandler.getClientData(targetEntity); +// if (Math.abs(checkPlayer.lastSwingTime - System.currentTimeMillis()) < 100) { +// CombatTrigger trigger = new CombatTrigger(checkPlayer, targetPlayer, CombatTrigger.FightAction.HIT); +// checkPlayer.addToEventQueue(trigger); +// } +// } +// } +// } +// }); + } + + public ClientHandler getClientHandler() { + return clientHandler; + } + + public CheckManager getCheckManager() { + return checkManager; + } + + public static void log(String log) { + Bukkit.getConsoleSender().sendMessage(C.GOLD + NAME + C.AQUA + " " + log); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/Severity.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/Severity.java new file mode 100644 index 0000000..90994d2 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/Severity.java @@ -0,0 +1,7 @@ +package net.grandtheftmc.core.anticheat; + +public enum Severity { + + LOW, MEDIUM, HIGH; + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/check/CheatType.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/check/CheatType.java new file mode 100644 index 0000000..0c9dc45 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/check/CheatType.java @@ -0,0 +1,63 @@ +package net.grandtheftmc.core.anticheat.check; + +public class CheatType { + + private final int identifier; + private final String name; + private final TriggerType triggerType; + private final Type type; + + public CheatType(int identifier, String name, TriggerType triggerType, Type type) { + this.identifier = identifier; + this.name = name; + this.triggerType = triggerType; + this.type = type; + } + + public int getIdentifier() { + return identifier; + } + + public String getName() { + return name; + } + + public Type getType() { + return type; + } + + public TriggerType getTriggerType() { + return triggerType; + } + + private static interface ITriggerType {} + + public static class Movement implements ITriggerType { + public static final CheatType FLIGHT = new CheatType(1, "Flight", TriggerType.MOVEMENT, Type.FLIGHT); + public static final CheatType SPEED = new CheatType(2, "Speed", TriggerType.MOVEMENT, Type.SPEED); + public static final CheatType JESUS = new CheatType(3, "Jesus", TriggerType.MOVEMENT, Type.JESUS); + } + + public static class Combat implements ITriggerType { + + } + + public enum TriggerType { + MOVEMENT, + COMBAT, + ; + } + + public enum Type { + FLIGHT(Movement.class), + SPEED(Movement.class), + JESUS(Movement.class), + ; + + private Class trigger; + + Type(Class trigger) { + this.trigger = trigger; + } + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/check/Check.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/check/Check.java new file mode 100644 index 0000000..b74fa0f --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/check/Check.java @@ -0,0 +1,20 @@ +package net.grandtheftmc.core.anticheat.check; + +import net.grandtheftmc.core.anticheat.trigger.Trigger; + +public class Check { + + protected String name; + + public Check(String name) { + this.name = name; + } + + public String getName() { + return name; + } + + public double analyse(Trigger trigger) { + return 0D; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/check/CheckManager.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/check/CheckManager.java new file mode 100644 index 0000000..11ca4e9 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/check/CheckManager.java @@ -0,0 +1,43 @@ +package net.grandtheftmc.core.anticheat.check; + +import com.google.common.collect.Lists; +import net.grandtheftmc.core.anticheat.check.movement.SpeedCheck; +import net.grandtheftmc.core.anticheat.check.movement.VelocityCheck; +import net.grandtheftmc.core.anticheat.trigger.Trigger; + +import java.util.List; + +public class CheckManager { + + private final List checks = Lists.newArrayList(); + + public CheckManager() { + + //Movement + this.checks.add(new SpeedCheck()); + this.checks.add(new VelocityCheck()); + + //Combat +// this.checks.add(new KillAuraCheck()); +// this.checks.add(new FrequencyCheck()); +// this.checks.add(new ImprobableCheck()); +// this.checks.add(new NoSwingCheck()); +// this.checks.add(new ReachCheck()); +// this.checks.add(new SwingCheck()); + } + + public List getChecks() { + return checks; + } + + public double check(Trigger trigger) { + double lvl = 0D; + for(Check check : this.checks) { + double violation = check.analyse(trigger); + if(violation > 0) { + lvl += violation; + } + } + return lvl; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/check/movement/SpeedCheck.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/check/movement/SpeedCheck.java new file mode 100644 index 0000000..f2c84fe --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/check/movement/SpeedCheck.java @@ -0,0 +1,211 @@ +package net.grandtheftmc.core.anticheat.check.movement; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.anticheat.Severity; +import net.grandtheftmc.core.anticheat.check.CheatType; +import net.grandtheftmc.core.anticheat.check.Check; +import net.grandtheftmc.core.anticheat.data.ClientData; +import net.grandtheftmc.core.anticheat.event.MovementCheatEvent; +import net.grandtheftmc.core.anticheat.trigger.MovementTrigger; +import net.grandtheftmc.core.anticheat.trigger.Trigger; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; + +public class SpeedCheck extends Check { + + public SpeedCheck() { + super("Speed"); + } + + public double getMaxSpeed(MovementTrigger trigger) { + double speed = 0.30D;//0.29D + //SPRINT 0.561208202072919 1.3x faster + //SNEAK 0.12951234466191863 0.3x faster + //SPDI 0.5180519387595268 1.2x faster + //SPDII 0.6044049676671079 1.4x faster + + if (trigger.getData().getPlayer().getWalkSpeed() > 0.2F) + speed *= (trigger.getData().getPlayer().getWalkSpeed() * 5); + + for (PotionEffect potionEffect : trigger.getData().getPlayer().getActivePotionEffects()) { + if (potionEffect.getType().equals(PotionEffectType.SPEED)) { + int amp = potionEffect.getAmplifier() + 1; + speed = (speed * (1.3 * amp)); + + //Speed potions >4 tend to false positive; give an extra bit of running speed + if (amp > 3) speed *= 1.8; + } + } + + if (trigger.isSneaking()) speed *= 0.3; + + //Players under blocks can rapidly press space to achieve very fast speeds + for (int x = -2; x < 2; x++) { + for (int z = -2; z < 2; z++) { + Location plo = trigger.getTo().clone().add(x, 2.55, z); + + if (!plo.getBlock().getType().equals(Material.AIR)) { + speed *= 3; + } + } + } + + boolean d = false; + for (int x = -2; x < 2; x++) { + for (int z = -2; z < 2; z++) { + Location plo = trigger.getTo().clone().add(x, -1, z); + + if (plo.getBlock().getType().equals(Material.ICE)) { + d = true; + speed *= 3; + } + } + } + + for (int x = -2; x < 2; x++) { + for (int z = -2; z < 2; z++) { + Location plo = trigger.getTo().clone().add(x, -2, z); + + if (!d) { + if (plo.getBlock().getType().equals(Material.ICE)) { + speed *= 3; + } + } + } + } + + if (trigger.getData().justJumped) { + if (trigger.getData().jumpTicks == 0) + speed *= 1.45; + + trigger.getData().justJumped = false; + } + + //Sprint-jumping values + double jumpVals[] = {2.11, 1.64, 1.57, 1.51, 1.43}; + if (trigger.getData().jumpTicks > 0) { + if (trigger.getData().jumpTicks <= 3) { + speed *= jumpVals[trigger.getData().jumpTicks + 1]; + } + } + + //Account for server-side velocities + double xV = Math.abs(trigger.getxV()); + double zV = Math.abs(trigger.getzV()); + + double sD = ((xV + zV) / 0.44); + if (sD > 0) speed += speed * sD; + + return speed; + } + + @Override + public double analyse(Trigger trigger) { + double vL = 0; + + if (trigger instanceof MovementTrigger) { + ClientData data = trigger.getData(); + + if (data.sLastPacketTime == 0) + data.sLastPacketTime = trigger.getTimeCreated(); + + double lag = Math.abs(data.sLastPacketTime - trigger.getTimeCreated()); + data.sLastPacketTime = trigger.getTimeCreated(); + + if (!((MovementTrigger) trigger).isFlying()) { + + //If the player teleported, can fly, or is in a vehicle, don't flag them and reset their locations + if ((Math.abs(trigger.getData().timeSinceLastTeleport - System.currentTimeMillis()) < 2000) || data.getPlayer().getAllowFlight() || data.getPlayer().getVehicle() != null) { + data.xBefore = ((MovementTrigger) trigger).getTo().getX(); + data.zBefore = ((MovementTrigger) trigger).getTo().getZ(); + data.xCurrent = data.xBefore; + data.zCurrent = data.zBefore; + } else { + data.xBefore = data.xCurrent; + data.xCurrent = ((MovementTrigger) trigger).getTo().getX(); + data.zBefore = data.zCurrent; + data.zCurrent = ((MovementTrigger) trigger).getTo().getZ(); + + + double sLag = lag / 2; + if (sLag < 50 && sLag > 0) sLag = 50; + + //Depending on how long they haven't sent a packet, add the theoretical max speed the player could go at that moment to a buffer + //(Not sending packets for 1 second is lag, allow them to move ~6 or so blocks) + if (Math.abs(data.xBefore - data.xCurrent) > 0) + data.maxDistanceBufferX += (sLag / 50) * this.getMaxSpeed((MovementTrigger) trigger); + + if (Math.abs(data.zBefore - data.zCurrent) > 0) + data.maxDistanceBufferZ += (sLag / 50) * this.getMaxSpeed((MovementTrigger) trigger); + + //If the player isn't currently spamming packets to catch up on lag + if (lag > 0) { + data.maxDistanceBufferX -= Math.abs(data.xBefore - data.xCurrent); + data.maxDistanceBufferZ -= Math.abs(data.zBefore - data.zCurrent); + + //TODO: This is kinda exploitable; the player can go faster to go get allowed to go further for a longer distance... + //If the player is going slower than the maximum speed, subtracting from the buffer isnt an issue, so lower the buffer so that they can't speed up a lot after racking up a buffer + // if(Math.abs(player.xBefore - player.xCurrent) < this.getMaxSpeed((MovementEvent) e)) { + data.maxDistanceBufferX *= 0.95; + // } + // if(Math.abs(player.zBefore - player.zCurrent) < this.getMaxSpeed((MovementEvent) e)) { + data.maxDistanceBufferZ *= 0.95; + // } + + //The player shouldn't be able to teleport more than 200 blocks... or go an insane speed for a long-er amount of time. Lower it drastically... + //The player would have to lag for ~40 seconds to get this amount of buffer, or an attempt to bypass, which neither are possible in vanilla + if (data.maxDistanceBufferX > 200) data.maxDistanceBufferX *= 0.1; + if (data.maxDistanceBufferZ > 200) data.maxDistanceBufferZ *= 0.1; + + //When the buffer is lower than 0 (faster speed than average) + if (data.maxDistanceBufferX < -0.1) { + data.sBuffer += 10; + data.maxDistanceBufferX = -0.1; + + if (data.sBuffer > 30) { + data.sBuffer = 30; + vL += 1; + + MovementCheatEvent event = new MovementCheatEvent<>(data, CheatType.Movement.SPEED, this.getMaxSpeed((MovementTrigger) trigger)); + Bukkit.getPluginManager().callEvent(event); + if(event.isCancelled()) return vL; + + data.setDetectedHack(CheatType.Movement.SPEED); + data.setDetectedHackAttribute("X"); + data.setDetectedHackBanMessage("SPEED_X"); + data.lastSeverity = Severity.MEDIUM; + return vL; + } + } + + if (data.maxDistanceBufferZ < -0.1) { + data.sBuffer += 10; + data.maxDistanceBufferZ = -0.1; + + if (data.sBuffer > 30) { + data.sBuffer = 30; + vL += 1; + + MovementCheatEvent event = new MovementCheatEvent<>(data, CheatType.Movement.SPEED, this.getMaxSpeed((MovementTrigger) trigger)); + Bukkit.getPluginManager().callEvent(event); + if(event.isCancelled()) return vL; + + data.setDetectedHack(CheatType.Movement.SPEED); + data.setDetectedHackAttribute("Z"); + data.setDetectedHackBanMessage("SPEED_Z"); + data.lastSeverity = Severity.MEDIUM; + return vL; + } + } + + } + } + } + } + + return vL; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/check/movement/VelocityCheck.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/check/movement/VelocityCheck.java new file mode 100644 index 0000000..df1ab70 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/check/movement/VelocityCheck.java @@ -0,0 +1,147 @@ +package net.grandtheftmc.core.anticheat.check.movement; + +import net.grandtheftmc.core.anticheat.Severity; +import net.grandtheftmc.core.anticheat.check.CheatType; +import net.grandtheftmc.core.anticheat.check.Check; +import net.grandtheftmc.core.anticheat.data.ClientData; +import net.grandtheftmc.core.anticheat.event.MovementCheatEvent; +import net.grandtheftmc.core.anticheat.trigger.MovementTrigger; +import net.grandtheftmc.core.anticheat.trigger.Trigger; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; + +public class VelocityCheck extends Check { + + public VelocityCheck() { + super("Velocity"); + } + + @Override + public double analyse(Trigger trigger) { + double vL = 0; + + if (trigger instanceof MovementTrigger) { + MovementTrigger mTrigger = (MovementTrigger) trigger; + + if (!mTrigger.isFlying()) { + ClientData data = trigger.getData(); + + double dif = Math.abs(mTrigger.getyV() - mTrigger.getyD()); + if (dif > 0.8) { + + if (!data.getPlayer().getAllowFlight()) { + if (Math.abs(data.timeSinceLastTeleport - System.currentTimeMillis()) > 2000) { + //Lagging players + jump boost == false positives... + boolean jumpBoost = false; + for (PotionEffect potionEffect : trigger.getData().getPlayer().getActivePotionEffects()) { + if (potionEffect.getType().equals(PotionEffectType.JUMP)) { + jumpBoost = true; + } + } + + //TODO: Recreate the check to NOT false positive, but still have lag compensation + if (!jumpBoost) { + //If the player should be falling, and the player isn't going down, flag them after a while + if (mTrigger.getyD() == 0.0D) { + data.hovertime += 1; + } else { + if (data.hovertime >= 0) {//TODO > + data.hovertime -= 1; + } + } + + if (data.hovertime > 15) { + data.hovertime = 5; + vL += 3; + + data.setDetectedHack(CheatType.Movement.FLIGHT); + data.setDetectedHackAttribute("Hover"); + data.lastSeverity = Severity.LOW; + return vL; + } + + + if (mTrigger.getyD() > 0) { + data.vBuffer += 1; + + if (mTrigger.getyD() > 0.8) { + data.vBuffer += 3; + } + + //Stairs seem to not register with bukkit very well; exempt them if they're around stairs by 0.5 blocks + boolean check = true; + for (double xC = -0.5; xC < 0.5; xC += 0.1) { + for (double zC = -0.5; zC < 0.5; zC += 0.1) { + String block = data.getPlayer().getLocation().clone().add(xC, -1, zC).getBlock().getType().name(); + + if (block.contains("STAIR") || block.contains("STEP")) { + check = false; + data.hovertime = 0; + data.vBuffer = 0; + } + } + } + + if (check) { + if (data.vBuffer > 5) { + data.vBuffer = 5; + vL += 6; + + Block block = data.getPlayer().getLocation().clone().add(0, -0.5, 0).getBlock(); + if (block.getType() == Material.STATIONARY_LAVA + || block.getType() == Material.LAVA + || block.getType() == Material.STATIONARY_WATER + || block.getType() == Material.WATER) { + MovementCheatEvent event = new MovementCheatEvent(data, CheatType.Movement.JESUS); + Bukkit.getPluginManager().callEvent(event); + if(event.isCancelled()) return vL; + + data.setDetectedHack(CheatType.Movement.JESUS); + data.setDetectedHackBanMessage("WATER_WALK"); + data.setDetectedHackAttribute("*"); + data.lastSeverity = Severity.MEDIUM; + return vL; + } else { + if (mTrigger.isOnground()) { + MovementCheatEvent event = new MovementCheatEvent(data, CheatType.Movement.FLIGHT); + Bukkit.getPluginManager().callEvent(event); + if(event.isCancelled()) return vL; + + data.setDetectedHack(CheatType.Movement.FLIGHT); + data.setDetectedHackBanMessage("FLY_STEP"); + data.setDetectedHackAttribute("*"); + data.lastSeverity = Severity.MEDIUM; + return vL; + } else { + MovementCheatEvent event = new MovementCheatEvent(data, CheatType.Movement.FLIGHT); + Bukkit.getPluginManager().callEvent(event); + if(event.isCancelled()) return vL; + + data.setDetectedHack(CheatType.Movement.FLIGHT); + data.setDetectedHackBanMessage("FLY"); + data.setDetectedHackAttribute("*"); + data.lastSeverity = Severity.MEDIUM; + return vL; + } + } + } + } + } + } + } + } + } else { + if (data.vBuffer > 0) { + data.vBuffer -= 1; + } + } + } + } + + return vL; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/component/AnticheatComponent.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/component/AnticheatComponent.java new file mode 100644 index 0000000..05f8a94 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/component/AnticheatComponent.java @@ -0,0 +1,76 @@ +package net.grandtheftmc.core.anticheat.component; + +import org.bukkit.Bukkit; +import org.bukkit.GameMode; +import org.bukkit.event.EventHandler; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerMoveEvent; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.anticheat.Anticheat; +import net.grandtheftmc.core.anticheat.data.ClientData; +import net.grandtheftmc.core.anticheat.trigger.MovementTrigger; +import net.grandtheftmc.core.util.Component; +import net.grandtheftmc.core.util.ServerUtil; + +public class AnticheatComponent implements Component { + + private final Anticheat anticheat; + + public AnticheatComponent(Core core, Anticheat anticheat) { + this.anticheat = anticheat; + Bukkit.getPluginManager().registerEvents(this, core); + } + + @EventHandler(ignoreCancelled = true) + protected final void onPlayerMove(PlayerMoveEvent event) { + if(event.getPlayer().getGameMode() == GameMode.CREATIVE || event.getPlayer().getGameMode() == GameMode.SPECTATOR) return; + if (event.getFrom().getX() == event.getTo().getX() && event.getFrom().getZ() == event.getTo().getZ() && event.getFrom().getY() == event.getTo().getY()) return; + + ClientData data = anticheat.getClientHandler().getClientData(event.getPlayer()); + if (data == null) return; + + ServerUtil.runTaskAsync(() -> { + + // due another check just in case it takes too long to run + if (data != null){ + MovementTrigger trigger = new MovementTrigger(data, event.getFrom(), event.getTo(), false); + data.addToEventQueue(trigger); + data.readQueue(); + } + }); + } + + @EventHandler + protected final void onPlayerJoin(PlayerJoinEvent event) { +// Anticheat.getInstance().getClientHandler().addClientData(event.getPlayer()); + } + +// @EventHandler +// protected final void onUse(PlayerInteractEvent event) { +// if(event.getAction() == Action.RIGHT_CLICK_AIR) { +// ClientData data = Anticheat.getInstance().getClientHandler().getClientData(event.getPlayer()); +// CombatTrigger trigger = new CombatTrigger(data, null, CombatTrigger.FightAction.RIGHT_CLICK); +// data.addToEventQueue(trigger); +// data.readQueue(); +// } +// +// else if(event.getAction() == Action.LEFT_CLICK_AIR) { +// ClientData data = Anticheat.getInstance().getClientHandler().getClientData(event.getPlayer()); +// CombatTrigger trigger = new CombatTrigger(data, null, CombatTrigger.FightAction.LEFT_CLICK); +// data.addToEventQueue(trigger); +// data.readQueue(); +// } +// } +// +// @EventHandler +// protected final void onHit(EntityDamageByEntityEvent e) { +// if (!(e.getDamager() instanceof Player)) return; +// +// ClientData playerData = Anticheat.getInstance().getClientHandler().getClientData((Player) e.getDamager()); +// ClientData targetData = e.getEntity() instanceof Player ? Anticheat.getInstance().getClientHandler().getClientData((Player) e.getEntity()) : null; +// CombatTrigger trigger = new CombatTrigger(playerData, targetData, CombatTrigger.FightAction.BUKKIT_HIT); +// playerData.addToEventQueue(trigger); +// playerData.readQueue(); +// } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/data/ClientData.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/data/ClientData.java new file mode 100644 index 0000000..d0cc720 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/data/ClientData.java @@ -0,0 +1,387 @@ +package net.grandtheftmc.core.anticheat.data; + +import com.google.common.collect.Maps; +import net.grandtheftmc.core.anticheat.Anticheat; +import net.grandtheftmc.core.anticheat.Severity; +import net.grandtheftmc.core.anticheat.check.CheatType; +import net.grandtheftmc.core.anticheat.trigger.MovementTrigger; +import net.grandtheftmc.core.anticheat.trigger.Trigger; +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.craftbukkit.v1_12_R1.entity.CraftPlayer; +import org.bukkit.entity.Player; + +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +public class ClientData { + + public Map queuedEvents = new ConcurrentHashMap<>(); + public HashMap countEvent = Maps.newHashMap(); + + private CheatType detectedHack = null; + private String detectedHackAttribute; + private String detectedHackBanMessage; + public Severity lastSeverity; + + + private int CPS; + private int Hits; + private int Misses; + private double lastReachDistance; + + public double vL; + public double autoBanVL; + + private final Player player; + private final Anticheat anticheat; + + public ClientData(Player player, Anticheat anticheat) { + this.player = player; + this.anticheat = anticheat; + } + + public Player getPlayer() { + return this.player; + } + + private double lastViolationTime; + public double lastAttackTime; + + public void readQueue() { + int maxChecks = 100; + + if (Math.abs(System.currentTimeMillis() - lastAttackTime) > 2000) { + this.Hits = 0; + this.Misses = 0; + } + + double newVL = 0.0D; + + + for (Trigger trigger : this.queuedEvents.keySet()) { + if (maxChecks < 0) break; + maxChecks -= 1; + +// if (trigger instanceof CombatTrigger) { +// if (((CombatTrigger) trigger).getAction().equals(CombatTrigger.FightAction.HIT)) { +// this.lastAttackTime = trigger.getTimeCreated(); +// this.Hits += 1; +// if (this.Misses > 0) { +// this.Misses -= 1; +// } +// } +// +// if (((CombatTrigger) trigger).getAction().equals(CombatTrigger.FightAction.SWING)) { +// this.Misses += 1; +// } +// } + + double vL = this.anticheat.getCheckManager().check(trigger); + if (vL > 0) newVL += vL; + + this.queuedEvents.remove(trigger); + } + + if (newVL == 0.0D) { + if (Math.abs(lastViolationTime - System.currentTimeMillis()) > 1500) + this.vL *= 0.99D; + + if (Math.abs(lastViolationTime - System.currentTimeMillis()) > 2500) + this.autoBanVL *= 0.8D; + } else { + lastViolationTime = System.currentTimeMillis(); + this.vL += newVL; + } + + double maxVL = 20;/*Aeron.getAPI().getConfig().getDoubleValue("core.MaxVL");*/ + if (this.vL > maxVL) { + this.anticheat.getClientHandler().notifyCheck(this); + this.vL = maxVL / 2; + } + +// double maxAutoBanVL = Aeron.getAPI().getConfig().getDoubleValue("AutoBan.MaxVL"); +// if (this.autoBanVL > maxAutoBanVL) { +// this.autoBanVL = 0; +// if (Aeron.getAPI().getConfig().getBooleanValue("AutoBan.Enabled")) { +// if (!autoBanning) { +// int delay = Aeron.getAPI().getConfig().getIntegerValue("AutoBan.Delay"); +// this.autoBanTime = System.currentTimeMillis() + (delay * 1000); +// this.autoBanning = true; +// api.getPlayerDataHandler().notifyAutoBan(this); +// } +// } else { +// api.getPlayerDataHandler().notifyAdminsCustom(this.getPlayer().getName() + " would have been auto-banned."); +// } +// } + } + + public double autoBanTime = -1; + public boolean autoBanning; + + public void addToEventQueue(Trigger trigger) { + if (trigger instanceof MovementTrigger) { + MovementTrigger mTrigger = (MovementTrigger) trigger; + + this.addEvent(mTrigger); + +// if(!mTrigger.isFlying()) { +// if(this.autoBanning) { +// if(System.currentTimeMillis() > this.autoBanTime) { +// if(this.autoBanTime != -1) { +// String banReason = Aeron.getAPI().getConfig().getStringValue("AutoBan.BanMessage").replace("&", "�").replace("%reason%", this.getDetectedHackBanMessage()); +// Timestamp curTime = new Timestamp(new Date().getTime()); +// Aeron.getAPI().getPlayerDataHandler().notifyAdminsCustom("�8[�l�cSloth�8] �c" + this.getPlayer().getName() + " �6has been banned."); +// Aeron.getAPI().getLogger().log("autobans.log", curTime + ": " + this.getPlayer().getName() + " should have been automatically banned. (" + this.getDetectedHackBanMessage() + ")", true); +// Aeron.getAPI().getPlugin().getServer().dispatchCommand(Aeron.getAPI().getPlugin().getServer().getConsoleSender(), "ban " + this.getPlayer().getName() + " " + banReason); +// autoBanning = false; +// this.autoBanTime = -1; +// } +// } +// } +// } + } + this.queuedEvents.put(trigger, false); + } + + private MovementTrigger[] recording = new MovementTrigger[30]; + + public double lastSwingTime; + public double lastEnderpearlTime; + private ClientData lastTarget; + public double timeSinceLastTeleport; + public double lastRightClickTime; + public int clicks; + public int cpsPackets; + public double reachBuffer; + public float aimbotLastCamera; + public float aimbotBuffer; + public int aimbotHits; + public Location aimbotPreviousTargetLocation; + public int aimbotVL; + public double swingBuffer; + public double swingLastCamera; + public double noSwingLastSwingTime; + public int aimbotDetections; + public int swingVL; + public double aimbotDelta; + public double xSpeed; + public double zSpeed; + public double lastX, lastY, lastZ; + public World lastWorld; + public float lastYaw; + public float lastPitch; + public double improbableLastBukkitHitTime; + public double improbableLastDifference; + public double improbableLastFullDifference; + public int jumpTicks; + public boolean justJumped; + public double xBefore; + public double zBefore; + public double xCurrent; + public double zCurrent; + public double sLastPacketTime; + public double maxDistanceBufferX; + public double maxDistanceBufferZ; + public int sBuffer; + public int hovertime; + public int vBuffer; + + public double lastDifficulty; + + public boolean difficultyChanged; + + public int morepacketsPackets; + + public double lastPacketTime; + + public double mpDelay; + + + public void addEvent(MovementTrigger e) { + if (!e.isFlying()) { + boolean needsShifted = true; + for (int i = 0; i < recording.length; i++) { + if (recording[i] == null) { + recording[i] = e; + needsShifted = false; + break; + } + } + + if (needsShifted) { + for (int i = 0; i < recording.length; i++) { + if (i != recording.length - 1) { + recording[i] = recording[i + 1]; + } else { + recording[i] = e; + } + } + } + } + } + + public int getPing() { + return ((CraftPlayer) this.getPlayer().getPlayer()).getHandle().ping; + } + + public Map getQueuedEvents() { + return queuedEvents; + } + + public void setQueuedEvents(Map queuedEvents) { + this.queuedEvents = queuedEvents; + } + + public CheatType getDetectedHack() { + return detectedHack; + } + + public void setDetectedHack(CheatType detectedHack) { + if (this.detectedHack != null && detectedHack.getName().equalsIgnoreCase(this.detectedHack.getName())) return; + this.detectedHack = detectedHack; + addCount(detectedHack); + } + + public void resetDetection() { + this.detectedHack = null; + } + + public String getDetectedHackAttribute() { + return detectedHackAttribute; + } + + public void setDetectedHackAttribute(String detectedHackAttribute) { + this.detectedHackAttribute = detectedHackAttribute; + } + + public String getDetectedHackBanMessage() { + return detectedHackBanMessage; + } + + public void setDetectedHackBanMessage(String detectedHackBanMessage) { + this.detectedHackBanMessage = detectedHackBanMessage; + } + + public Severity getLastSeverity() { + return lastSeverity; + } + + public void setLastSeverity(Severity lastSeverity) { + this.lastSeverity = lastSeverity; + } + + public double getvL() { + return vL; + } + + public void setvL(double vL) { + this.vL = vL; + } + + public double getAutoBanVL() { + return autoBanVL; + } + + public void setAutoBanVL(double autoBanVL) { + this.autoBanVL = autoBanVL; + } + + public MovementTrigger[] getRecording() { + return recording; + } + + public void setRecording(MovementTrigger[] recording) { + this.recording = recording; + } + + public int getCPS() { + return CPS; + } + + public void setCPS(int cPS) { + CPS = cPS; + } + + public int getHits() { + return Hits; + } + + public void setHits(int hits) { + Hits = hits; + } + + public int getMisses() { + return Misses; + } + + public void setMisses(int misses) { + Misses = misses; + } + + public double getLastReachDistance() { + return lastReachDistance; + } + + public void setLastReachDistance(double lastReachDistance) { + this.lastReachDistance = lastReachDistance; + } + + public void setLastTarget(ClientData target) { + this.lastTarget = target; + } + + public double getLastSwingTime() { + return lastSwingTime; + } + + public void setLastSwingTime(double lastSwingTime) { + this.lastSwingTime = lastSwingTime; + } + + public double getLastEnderpearlTime() { + return lastEnderpearlTime; + } + + public void setLastEnderpearlTime(double lastEnderpearlTime) { + this.lastEnderpearlTime = lastEnderpearlTime; + } + + public ClientData getLastTarget() { + return lastTarget; + } + + public double getAutoBanTime() { + return autoBanTime; + } + + public void setAutoBanTime(double autoBanTime) { + this.autoBanTime = autoBanTime; + } + + public boolean isAutoBanning() { + return autoBanning; + } + + public void setAutoBanning(boolean autoBanning) { + this.autoBanning = autoBanning; + } + + public double getTimeSinceLastTeleport() { + return timeSinceLastTeleport; + } + + public void setTimeSinceLastTeleport(double timeSinceLastTeleport) { + this.timeSinceLastTeleport = timeSinceLastTeleport; + } + + private void addCount(CheatType key) { + countEvent.putIfAbsent(key.getType(), 0); + countEvent.put(key.getType(), countEvent.get(key.getType()) + 1); + } + + public int getCount(CheatType key) { + return countEvent.getOrDefault(key.getType(), 1); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/data/ClientHandler.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/data/ClientHandler.java new file mode 100644 index 0000000..08f8fd3 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/data/ClientHandler.java @@ -0,0 +1,91 @@ +package net.grandtheftmc.core.anticheat.data; + +import java.util.HashMap; +import java.util.UUID; + +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; + +import com.google.common.collect.Maps; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.Utils; +import net.grandtheftmc.core.anticheat.Anticheat; +import net.grandtheftmc.core.anticheat.check.CheatType; +import net.grandtheftmc.core.anticheat.report.ReportManager; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserManager; +import net.grandtheftmc.core.util.ServerUtil; +import net.md_5.bungee.api.chat.BaseComponent; +import net.md_5.bungee.api.chat.ClickEvent; +import net.md_5.bungee.api.chat.HoverEvent; +import net.md_5.bungee.api.chat.TextComponent; + +public class ClientHandler { + + private final HashMap players = Maps.newHashMap(); + + public HashMap getPlayers() { + return this.players; + } + private final Anticheat anticheat; + private final ReportManager reportManager; + + public ClientHandler(Anticheat anticheat, ReportManager reportManager) { + this.anticheat = anticheat; + this.reportManager = reportManager; + } + + public ClientData addClientData(Player player) { + players.putIfAbsent(player.getUniqueId(), new ClientData(player, this.anticheat)); + return players.get(player.getUniqueId()); + } + + public ClientData getClientData(Player player) { + return players.getOrDefault(player.getUniqueId(), null); + } + + public void removeClientData(UUID uuid) { + this.players.remove(uuid); + } + + /** + * Notify staff when a client is hacking. + * + * @param client + */ + public void notifyCheck(ClientData client) { + CheatType cheatType = client.getDetectedHack(); + int count = client.getCount(cheatType); + double cps = client.getCPS(); + int hits = client.getHits(); + int misses = client.getMisses(); + double lrd = client.getLastReachDistance(); + int lag = client.getPing(); + int reports = this.reportManager.getReports(client.getPlayer()); + Player player = client.getPlayer(); + +// DecimalFormat f = new DecimalFormat("##.00"); +// lrd = Double.parseDouble(f.format(lrd)); + + BaseComponent[] components = TextComponent.fromLegacyText(Lang.ANTICHEAT.s() + Utils.f("&c" + player.getName() + "&7 has triggered &c" + cheatType.getName().toUpperCase() + "&7 event! &fx&l" + count + "&7")); + for (BaseComponent c : components) { + c.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, TextComponent.fromLegacyText(Utils.f("&7Reports&f: &c&l" + reports + "\n&7Ping&f: &a&l" + lag + "\n\n" + "&7&oClick to inspect")))); + c.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/inspect " + player.getName())); + } + + ServerUtil.runTask(() -> { + if(count % 10 == 0) { + for (User user : UserManager.getInstance().getUsers()) { + if (!user.isStaff()){ + continue; + } + + Bukkit.getPlayer(user.getUUID()).spigot().sendMessage(components); + } + } + + client.resetDetection(); + }); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/event/CombatCheatEvent.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/event/CombatCheatEvent.java new file mode 100644 index 0000000..6b2ae71 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/event/CombatCheatEvent.java @@ -0,0 +1,4 @@ +package net.grandtheftmc.core.anticheat.event; + +public class CombatCheatEvent { +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/event/MovementCheatEvent.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/event/MovementCheatEvent.java new file mode 100644 index 0000000..6c0622f --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/event/MovementCheatEvent.java @@ -0,0 +1,53 @@ +package net.grandtheftmc.core.anticheat.event; + +import net.grandtheftmc.core.anticheat.check.CheatType; +import net.grandtheftmc.core.anticheat.data.ClientData; +import net.grandtheftmc.core.events.CoreEvent; +import org.bukkit.event.Cancellable; + +public final class MovementCheatEvent extends CoreEvent implements Cancellable { + + private final ClientData playerData; + private final CheatType cheatType; + private T obj; + private boolean cancelled; + + /** + * Construct a new Event + */ + public MovementCheatEvent(ClientData playerData, CheatType cheatType) { + super(true); + this.playerData = playerData; + this.cheatType = cheatType; + } + + /** + * Construct a new Event + */ + public MovementCheatEvent(ClientData playerData, CheatType cheatType, T obj) { + this(playerData, cheatType); + this.obj = obj; + } + + public ClientData getPlayerData() { + return this.playerData; + } + + public CheatType getCheatType() { + return this.cheatType; + } + + public T getObj() { + return this.obj; + } + + @Override + public boolean isCancelled() { + return this.cancelled; + } + + @Override + public void setCancelled(boolean b) { + this.cancelled = b; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/inspect/InspectCommand.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/inspect/InspectCommand.java new file mode 100644 index 0000000..8a648a0 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/inspect/InspectCommand.java @@ -0,0 +1,34 @@ +package net.grandtheftmc.core.anticheat.inspect; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.commands.CoreCommand; +import net.grandtheftmc.core.users.User; +import org.bukkit.entity.Player; + +public class InspectCommand extends CoreCommand { + + /** + * Construct a new command. + */ + public InspectCommand() { + super("inspect", "Inspect a hacker."); + } + + /** + * This method is fired when the command is executed. + * + * @param sender sender type of the command + * @param args command arguments + */ + @Override + public void execute(Player sender, String[] args) { + User user = Core.getUserManager().getLoadedUser(sender.getUniqueId()); + if(!user.isStaff()) { + sender.sendMessage(Lang.NOPERM.s()); + return; + } + sender.performCommand("gm3staff true"); + sender.performCommand("tp " + args[0]); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/report/ReportCommand.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/report/ReportCommand.java new file mode 100644 index 0000000..f6b2e2c --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/report/ReportCommand.java @@ -0,0 +1,62 @@ +package net.grandtheftmc.core.anticheat.report; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.commands.CoreCommand; +import net.grandtheftmc.core.users.User; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; + +public class ReportCommand extends CoreCommand { + + private final ReportManager reportManager; + + /** + * Construct a new command. + */ + public ReportCommand(ReportManager reportManager) { + super("report", "Report a player if you think they're hacking."); + this.reportManager = reportManager; + } + + /** + * This method is fired when the command is executed. + * + * @param sender sender type of the command + * @param args command arguments + */ + @Override + public void execute(Player sender, String[] args) { + if(sender == null) return; + + if(args.length < 2) { + sender.sendMessage(Lang.ANTICHEAT.f("&cIncorrect arguments!")); + sender.sendMessage(Lang.ANTICHEAT.f("&7Usage: /report <&fplayer&7> <&freason&7>")); + return; + } + + Player victim = Bukkit.getPlayer(args[0]); + if (victim == null) { + sender.sendMessage(Lang.ANTICHEAT.f("&cPlayer cannot be found.")); + return; + } + + User user = Core.getUserManager().getLoadedUser(victim.getUniqueId()); + if(user == null) { + sender.sendMessage(Lang.ANTICHEAT.f("&cPlayer cannot be found.")); + return; + } + + if(user.isStaff()) { + sender.sendMessage(Lang.ANTICHEAT.f("&cYou cannot report staff members.")); + return; + } + + StringBuilder reason = new StringBuilder(""); + for(int i = 1; i < args.length; i++) + reason.append(args[i]).append(" "); + reason.setLength(reason.length() - 1); + + reportManager.report(sender, victim, reason.toString()); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/report/ReportDAO.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/report/ReportDAO.java new file mode 100644 index 0000000..f022e3c --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/report/ReportDAO.java @@ -0,0 +1,112 @@ +package net.grandtheftmc.core.anticheat.report; + +import net.grandtheftmc.core.database.BaseDatabase; +import net.grandtheftmc.core.servers.ServerType; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.SQLException; +import java.util.Optional; +import java.util.UUID; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class ReportDAO { + + /** + * A {@link Pattern} used to identify and/or split full UUIDs + */ + public static final Pattern PATTERN_UUID = Pattern.compile("^[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}$", Pattern.CASE_INSENSITIVE); + /** + * A {@link Pattern} used to identify and/or split trimmed UUIDs + */ + public static final Pattern PATTERN_TRIMMED_UUID = Pattern.compile("^([a-z0-9]{8})([a-z0-9]{4})([a-z0-9]{4})([a-z0-9]{4})([a-z0-9]{12})$", Pattern.CASE_INSENSITIVE); + + + public static void createLogTable() { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("CREATE TABLE IF NOT EXIST `report_logs`(" + + "`reporter` BINARY(16) NOT NULL," + + "`reporterName` BINARY(16) NOT NULL," + + "`timeReported` BIGINT NOT NULL," + + "`reason` VARCHAR(32) NOT NULL," + + "`victim` BINARY(16) NOT NULL," + + "`victimName` BINARY(16) NOT NULL," + + "`serverType` VARCHAR(10) NOT NULL," + + "`serverId` INT NOT NULL," + + "INDEX(`reporterName`,`victim`,`victimName`,`serverType`,`serverId`)" + + ");")) { + statement.execute(); + } + } catch (SQLException e) { + e.printStackTrace(); + } + } + + public static void insertReport(UUID reporterUniqueId, UUID victimUniqueId, String reporterName, String victimName, String reason, long timeReported, ServerType serverType, int serverId) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("INSERT INTO `report_logs`(" + + "`reporter`,`reporterName`,`timeReported`,`reason`,`victim`,`victimName`,`serverType`,`serverId`) VALUES(?,?,?,?,?,?,?,?);")) { + statement.setString(1, reporterUniqueId.toString().replaceAll("-", "")); + statement.setString(2, reporterName); + statement.setLong(3, timeReported); + statement.setString(4, reason); + statement.setString(5, victimUniqueId.toString().replaceAll("-", "")); + statement.setString(6, victimName); + statement.setString(6, serverType.name()); + statement.setInt(6, serverId); + + statement.execute(); + } + } catch (SQLException e) { + e.printStackTrace(); + } + } + + /** + * Create a UUID safely from a {@link String}. + * + * @param string The {@link String} to deserialize into an {@link UUID} object. + * @return {@link Optional#empty()} if the provided {@link String} is illegal, otherwise an {@link Optional} + * containing the deserialized {@link UUID} object. + */ + private Optional createUUID(String string) { + if (string == null) { + return Optional.empty(); + } + + UUID result = null; + + try { + // Is it a valid UUID? + if (!PATTERN_UUID.matcher(string).matches()) { + // Un-trim UUID if it is trimmed + Matcher matcher = PATTERN_TRIMMED_UUID.matcher(string); + if (matcher.matches()) { + StringBuilder sb = new StringBuilder(); + + for (int i = 1; i <= matcher.groupCount(); i++) { + if (i != 1) { + sb.append("-"); + } + + sb.append(matcher.group(i)); + } + + string = sb.toString(); + } else { + // Invalid UUID + string = null; + } + } + + if (string != null) { + result = UUID.fromString(string); + } + } catch (IllegalArgumentException ignored) { + // Useless data passed + } + + return Optional.ofNullable(result); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/report/ReportManager.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/report/ReportManager.java new file mode 100644 index 0000000..353eee4 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/report/ReportManager.java @@ -0,0 +1,141 @@ +package net.grandtheftmc.core.anticheat.report; + +import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; + +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.player.PlayerQuitEvent; + +import com.google.common.base.Preconditions; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.Utils; +import net.grandtheftmc.core.anticheat.Anticheat; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserManager; +import net.grandtheftmc.core.util.C; +import net.grandtheftmc.core.util.Component; + +public class ReportManager implements Component { + +// public final HashMap cache = Maps.newHashMap(); +// +// public PlayerReportData getPlayerReportData(UUID uniqueId) { +// if(!cache.containsKey(uniqueId)) { +// PlayerReportData playerReportData = new PlayerReportData(uniqueId); +// cache.put(uniqueId, playerReportData); +// } +// return null; +// } + + private static final long counter; + private static final long reportCooldown, watchTime; + private static final ConcurrentHashMap storedData; + + static { + counter = 20*60; + reportCooldown = 1000 * 60 * 5; + watchTime = 1000 * 60 * 5; + storedData = new ConcurrentHashMap<>(); + } + + private Anticheat anticheat; + + public ReportManager(Core core, Anticheat anticheat) { + this.anticheat = anticheat; + Bukkit.getPluginManager().registerEvents(this, core); + new ReportCommand(this); + + Bukkit.getScheduler().runTaskTimerAsynchronously(Core.getInstance(), () -> { + for(UUID uuid : storedData.keySet()) { + Data data = storedData.get(uuid); + if(data.timeReported != -1 && System.currentTimeMillis() - data.timeReported >= watchTime) { + data.timeReported = -1; + anticheat.getClientHandler().removeClientData(uuid); + System.out.println("Removed " + uuid.toString()); + } + } + }, counter, counter); + } + + public int getReports(Player player) { + Preconditions.checkNotNull(player); + if(!storedData.containsKey(player.getUniqueId())) return 0; + return storedData.get(player.getUniqueId()).reports; + } + + public void report(Player player, Player target, String reason) { + Preconditions.checkNotNull(player); + Preconditions.checkNotNull(target); + + storedData.computeIfAbsent(player.getUniqueId(), k -> new Data()); + storedData.computeIfAbsent(target.getUniqueId(), k -> new Data()); + + Data pd = storedData.getOrDefault(player.getUniqueId(), null); + Preconditions.checkNotNull(pd); + if (pd.lastReport > -1 && System.currentTimeMillis() - pd.lastReport < reportCooldown) { + long difference = 300 - ((System.currentTimeMillis() - pd.lastReport) / 1000); + player.sendMessage(Lang.ANTICHEAT.f("&cPlease wait " + Utils.timeInSecondsToText(difference, C.DARK_RED, C.RED, C.WHITE) + " &cto report again.")); + return; + } + pd.lastReport = System.currentTimeMillis(); + player.sendMessage(Lang.ANTICHEAT.f("Reported " + target.getName() + " for '" + reason + "'")); + player.sendMessage(Lang.ANTICHEAT.f("Note that false reporting is punishable.")); + + Data td = storedData.getOrDefault(target.getUniqueId(), null); + Preconditions.checkNotNull(td); + td.timeReported = System.currentTimeMillis(); + td.reports += 1; + + anticheat.getClientHandler().addClientData(target); + + for (User user : UserManager.getInstance().getUsers()) { + if (!user.isStaff()){ + continue; + } + Bukkit.getPlayer(user.getUUID()).sendMessage(Lang.ANTICHEAT.f("&c" + target.getName() + "&7 has been reported by &c" + player.getName() + "&7 for '&f" + reason + "&7'")); + } + } + + public class Data { + private long lastReport = -1, timeReported = -1; + private int reports = 0; + + public long getLastReport() { + return lastReport; + } + + public long getTimeReported() { + return timeReported; + } + + public int getReports() { + return reports; + } + + public void setLastReport(long lastReport) { + this.lastReport = lastReport; + } + + public void setTimeReported(long timeReported) { + this.timeReported = timeReported; + } + + public void addReports(int value) { + this.reports += value; + } + + @Override + public String toString() { + return "ReportManager.Data [ {lastReport:" + lastReport + "}, {timeReported:" + timeReported + "}, {reports:" + reports + "} ];"; + } + } + + @EventHandler + protected final void onPlayerQuit(PlayerQuitEvent event) { + storedData.remove(event.getPlayer().getUniqueId()); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/report/data/PlayerReportData.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/report/data/PlayerReportData.java new file mode 100644 index 0000000..19edd73 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/report/data/PlayerReportData.java @@ -0,0 +1,40 @@ +package net.grandtheftmc.core.anticheat.report.data; + +import com.google.common.collect.Lists; + +import java.util.List; +import java.util.UUID; + +public final class PlayerReportData { + + private final List reports; + + private UUID uniqueId; + private long lastReport = -1; + + public PlayerReportData(UUID uniqueId) { + this.uniqueId = uniqueId; + this.reports = Lists.newArrayList(); + } + + public List getReports() { + return reports; + } + + public void addReport(ReportData reportData) { + reports.add(reportData); + lastReport = System.currentTimeMillis(); + } + + public boolean canReport() { + return (System.currentTimeMillis() - lastReport) > (1000 * 60 * 5); + } + + public long getIssuedReports() { + return reports.stream().filter(r -> !r.isPersonal(uniqueId)).count(); + } + + public long getPersonalReports() { + return reports.stream().filter(r -> r.isPersonal(uniqueId)).count(); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/report/data/ReportData.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/report/data/ReportData.java new file mode 100644 index 0000000..7e2b2fc --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/report/data/ReportData.java @@ -0,0 +1,61 @@ +package net.grandtheftmc.core.anticheat.report.data; + +import net.grandtheftmc.core.servers.ServerType; + +import java.util.UUID; + +public final class ReportData { + + private final UUID reporterUniqueId, victimUniqueId; + private final String reporterName, victimName, reason; + private final long timeReported; + private final ServerType serverType; + private final int serverId; + + public ReportData(UUID reporterUniqueId, UUID victimUniqueId, String reporterName, String victimName, String reason, long timeReported, ServerType serverType, int serverId) { + this.reporterUniqueId = reporterUniqueId; + this.victimUniqueId = victimUniqueId; + this.reporterName = reporterName; + this.victimName = victimName; + this.reason = reason; + this.timeReported = timeReported; + this.serverType = serverType; + this.serverId = serverId; + } + + public boolean isPersonal(UUID uuid) { + return this.victimUniqueId.equals(uuid); + } + + public UUID getReporterUniqueId() { + return reporterUniqueId; + } + + public UUID getVictimUniqueId() { + return victimUniqueId; + } + + public String getReporterName() { + return reporterName; + } + + public String getVictimName() { + return victimName; + } + + public String getReason() { + return reason; + } + + public long getTimeReported() { + return timeReported; + } + + public ServerType getServerType() { + return serverType; + } + + public int getServerId() { + return serverId; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/trigger/MovementTrigger.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/trigger/MovementTrigger.java new file mode 100644 index 0000000..437ac26 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/trigger/MovementTrigger.java @@ -0,0 +1,93 @@ +package net.grandtheftmc.core.anticheat.trigger; + +import net.grandtheftmc.core.anticheat.data.ClientData; +import org.bukkit.Location; + +public class MovementTrigger extends Trigger { + + private boolean flying; + private Location from, to; + + /** Distance */ + private double xD, yD, zD; + + /** Velocity */ + private double xV, yV, zV; + + private boolean sprinting, sneaking, onground; + + /** + * Construct new Trigger. + */ + public MovementTrigger(ClientData data, Location from, Location to, boolean flying) { + super(data, System.currentTimeMillis()); + + this.flying = flying; + if (!flying) { + this.from = from; + this.to = to; + + this.xD = to.getX() - from.getX(); + this.yD = to.getY() - from.getY(); + this.zD = to.getZ() - from.getZ(); + + data.xSpeed = xD; + data.zSpeed = zD; + + data.lastX = to.getX(); + data.lastY = to.getY(); + data.lastZ = to.getZ(); + data.lastWorld = to.getWorld(); + data.lastYaw = to.getYaw(); + data.lastPitch = to.getPitch(); + + this.xV = data.getPlayer().getVelocity().getX(); + this.yV = data.getPlayer().getVelocity().getY(); + this.zV = data.getPlayer().getVelocity().getZ(); + + this.sprinting = data.getPlayer().isSprinting(); + this.sneaking = data.getPlayer().isSneaking(); + this.onground = data.getPlayer().isOnGround(); + } + } + + public boolean isSneaking() { + return sneaking; + } + + public boolean isFlying() { + return flying; + } + + public boolean isOnground() { + return onground; + } + + public Location getTo() { + return to; + } + + public double getxD() { + return xD; + } + + public double getyD() { + return yD; + } + + public double getzD() { + return zD; + } + + public double getxV() { + return xV; + } + + public double getyV() { + return yV; + } + + public double getzV() { + return zV; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/trigger/Trigger.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/trigger/Trigger.java new file mode 100644 index 0000000..fa02f69 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/trigger/Trigger.java @@ -0,0 +1,25 @@ +package net.grandtheftmc.core.anticheat.trigger; + +import net.grandtheftmc.core.anticheat.data.ClientData; + +public class Trigger { + + private ClientData data; + private double timeCreated; + + /** + * Construct new Trigger. + */ + public Trigger(ClientData data, double timeCreated) { + this.data = data; + this.timeCreated = timeCreated; + } + + public double getTimeCreated() { + return timeCreated; + } + + public ClientData getData() { + return data; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/util/DummyIdentity.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/util/DummyIdentity.java new file mode 100644 index 0000000..adfd19d --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/util/DummyIdentity.java @@ -0,0 +1,87 @@ +package net.grandtheftmc.core.anticheat.util; + +import org.bukkit.Bukkit; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; +import java.util.UUID; +import java.util.concurrent.ThreadLocalRandom; + +public class DummyIdentity { + + public UUID uuid; + public String name; + public EntityType type = EntityType.PLAYER; + + public boolean isAlreadyOnline; + public boolean visible; + + public static class Generator { + private static Random rnd = ThreadLocalRandom.current(); + + private static char[] chars = new char[]{'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', + 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', + 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', + '-', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'}; + + public static String generateName() { + int length = 9 + rnd.nextInt(5); + return "§c" + getRandomString(length - 2); + } + + private static String getRandomString(int length) { + StringBuilder sb = new StringBuilder(length); + for (int i = 0; i < length; i += 1) { + sb.append(chars[rnd.nextInt(chars.length)]); + } + return sb.toString(); + } + + public static DummyIdentity generateRandomIdentity() { + DummyIdentity id = new DummyIdentity(); + + id.name = generateName(); + id.uuid = UUID.randomUUID(); + id.isAlreadyOnline = false; + id.type = EntityType.PLAYER; + + return id; + } + + public static DummyIdentity generateIdentityForPlayer(Player p) { + DummyIdentity id = new DummyIdentity(); + + if (Bukkit.getOnlinePlayers().size() == 1) + id = generateRandomIdentity(); + else { + List onlinePlayers = new ArrayList<>(Bukkit.getOnlinePlayers()); + onlinePlayers.remove(p); + + Player idPlayer = onlinePlayers.get(rnd.nextInt(onlinePlayers.size())); + + id.name = idPlayer.getName(); + id.uuid = idPlayer.getUniqueId(); + id.isAlreadyOnline = true; + } + + id.visible = true; + + return id; + } + + public static DummyIdentity generateIdentityForPlayer(Player p, Entity attacked) { + DummyIdentity id = generateRandomIdentity(); + if (attacked.getType() == EntityType.PLAYER) + id = generateIdentityForPlayer(p); + else { + id.type = attacked.getType(); + } + + return id; + } + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/util/DummyPacketGen.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/util/DummyPacketGen.java new file mode 100644 index 0000000..aeec46e --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/util/DummyPacketGen.java @@ -0,0 +1,119 @@ +package net.grandtheftmc.core.anticheat.util; + +import com.comphenix.protocol.wrappers.*; +import net.grandtheftmc.core.wrapper.packet.out.*; +import org.bukkit.Location; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.util.Vector; + +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +public class DummyPacketGen { + + public static WrapperPlayServerNamedEntitySpawn getIdentityPlayerSpawnPacket(DummyIdentity id, int entityId, Location loc) { + WrapperPlayServerNamedEntitySpawn spawnPacket = new WrapperPlayServerNamedEntitySpawn(); + + spawnPacket.setEntityID(entityId); + spawnPacket.setPlayerUUID(id.uuid); + + spawnPacket.setPosition(new Vector(loc.getX(), loc.getY(), loc.getZ())); + spawnPacket.setYaw(loc.getYaw()); + spawnPacket.setPitch(loc.getPitch()); + + WrappedDataWatcher meta = new WrappedDataWatcher(); + spawnPacket.setMetadata(meta); + + return spawnPacket; + } + + public static WrapperPlayServerSpawnEntityLiving getIdentityNotPlayerSpawnPacket(DummyIdentity id, int entityId, Location loc) { + WrapperPlayServerSpawnEntityLiving spawnPacket = new WrapperPlayServerSpawnEntityLiving(); + + spawnPacket.setEntityID(entityId); + spawnPacket.setUniqueId(id.uuid); + spawnPacket.setType(id.type); + + spawnPacket.setX(loc.getX()); + spawnPacket.setY(loc.getY()); + spawnPacket.setZ(loc.getZ()); + spawnPacket.setYaw(loc.getYaw()); + spawnPacket.setPitch(loc.getPitch()); + spawnPacket.setHeadPitch(loc.getPitch()); + + WrappedDataWatcher meta = new WrappedDataWatcher(); + //if(!id.visible) + // meta.setObject(0, (byte) 0x20); + spawnPacket.setMetadata(meta); + + return spawnPacket; + } + + public static void sendSpawnPacket(Player p, DummyIdentity id, int entityId, Location loc) { + if (id.type == EntityType.PLAYER) { + getIdentityPlayerSpawnPacket(id, entityId, loc).sendPacket(p); + } else { + getIdentityNotPlayerSpawnPacket(id, entityId, loc).sendPacket(p); + } + } + + public static WrapperPlayServerEntityTeleport getTeleportPacket(int entityId, Location loc) { + WrapperPlayServerEntityTeleport packet = new WrapperPlayServerEntityTeleport(); + packet.setEntityID(entityId); + packet.setX(loc.getX()); + packet.setY(loc.getY()); + packet.setZ(loc.getZ()); + packet.setPitch(loc.getPitch()); + packet.setYaw(loc.getYaw()); + + return packet; + } + + public static WrapperPlayServerRelEntityMoveLook getRelativeMovementPacket(int entityId, Vector movement) { + WrapperPlayServerRelEntityMoveLook packet = new WrapperPlayServerRelEntityMoveLook(); + packet.setEntityID(entityId); + packet.setDx(movement.getX()); + packet.setDy(movement.getY()); + packet.setDz(movement.getZ() * 32); + packet.setOnGround(true); + packet.setYaw(0); + packet.setPitch(0); + return packet; + } + + public static WrapperPlayServerPlayerInfo getInfoAddPacket(UUID playerUUID, String playerName) { + WrapperPlayServerPlayerInfo infoPacket = new WrapperPlayServerPlayerInfo(); + infoPacket.setAction(EnumWrappers.PlayerInfoAction.ADD_PLAYER); + + WrappedGameProfile profile = new WrappedGameProfile(playerUUID, playerName); + PlayerInfoData data = new PlayerInfoData(profile, 23, EnumWrappers.NativeGameMode.SURVIVAL, WrappedChatComponent.fromText(playerName)); + List dataList = new ArrayList<>(); + dataList.add(data); + + infoPacket.setData(dataList); + return infoPacket; + } + + public static WrapperPlayServerPlayerInfo getInfoRemovePacket(UUID playerUUID, String playerName) { + WrapperPlayServerPlayerInfo infoPacket = new WrapperPlayServerPlayerInfo(); + infoPacket.setAction(EnumWrappers.PlayerInfoAction.REMOVE_PLAYER); + + WrappedGameProfile profile = new WrappedGameProfile(playerUUID, playerName); + PlayerInfoData data = new PlayerInfoData(profile, 23, EnumWrappers.NativeGameMode.SURVIVAL, WrappedChatComponent.fromText(playerName)); + List dataList = new ArrayList<>(); + dataList.add(data); + + infoPacket.setData(dataList); + return infoPacket; + } + + public static WrapperPlayServerEntityDestroy getDestroyPacket(int entityId) { + WrapperPlayServerEntityDestroy destroyPacket = new WrapperPlayServerEntityDestroy(); + + destroyPacket.setEntityIds(new int[]{entityId}); + + return destroyPacket; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/util/DummyPlayer.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/util/DummyPlayer.java new file mode 100644 index 0000000..57a40af --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/anticheat/util/DummyPlayer.java @@ -0,0 +1,86 @@ +package net.grandtheftmc.core.anticheat.util; + +import com.google.common.collect.Maps; +import org.bukkit.Location; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; + +import java.util.Map; +import java.util.UUID; + +public class DummyPlayer { + + private int entityID; + private Map prevPlayerBotLocations; + + public DummyPlayer(int entityID) { + this.entityID = entityID; + prevPlayerBotLocations = Maps.newHashMap(); + } + + public void setEntityID(int entityID) { + this.entityID = entityID; + } + + public int getEntityID() { + return entityID; + } + + + public void spawnForPlayerWithIdentity(final Player p, final Location location, final DummyIdentity identity) { + if (!identity.isAlreadyOnline && identity.type == EntityType.PLAYER) + sendBotInfo(p, identity); + //DummyPacketGen.getIdentityPlayerSpawnPacket(identity, entityID, location).sendPacket(p); + DummyPacketGen.sendSpawnPacket(p, identity, entityID, location); + } + + public void sendBotInfo(Player p, DummyIdentity id) { + DummyPacketGen.getInfoAddPacket(id.uuid, id.name).sendPacket(p); + } + + public void destroyForPlayer(Player p) { + DummyPacketGen.getDestroyPacket(entityID).sendPacket(p); + } + + public void despawnTablistForPlayer(Player p, DummyIdentity identity) { + if (identity.type == EntityType.PLAYER) + DummyPacketGen.getInfoRemovePacket(identity.uuid, identity.name).sendPacket(p); + } + + public void moveTo(Player p, Location loc) { + UUID pUUID = p.getUniqueId(); + if (prevPlayerBotLocations.containsKey(pUUID)) { + Location prevLoc = prevPlayerBotLocations.get(pUUID); + + double deltaX = loc.getX() - prevLoc.getX(); + double deltaY = loc.getY() - prevLoc.getY(); + double deltaZ = loc.getZ() - prevLoc.getZ(); + double dist = deltaX * deltaX + deltaY * deltaY + deltaZ * deltaZ; + + if (dist > 4) + DummyPacketGen.getTeleportPacket(entityID, loc).sendPacket(p); + else + DummyPacketGen.getTeleportPacket(entityID, loc).sendPacket(p); + } else + DummyPacketGen.getTeleportPacket(entityID, loc).sendPacket(p); + + prevPlayerBotLocations.put(p.getUniqueId(), loc); + + } + + public void moveAround(Player p, double angle, double distance) { + moveTo(p, getAroundPos(p, angle, distance)); + } + + public static Location getAroundPos(Player p, double angle, double distance) { + Location loc = p.getLocation().clone(); + double realAngle = angle + 90; + + float deltaX = (float) (distance * Math.cos(Math.toRadians(loc.getYaw() + realAngle))); + float deltaZ = (float) (distance * Math.sin(Math.toRadians(loc.getYaw() + realAngle))); + + loc.add(deltaX, -0.1, deltaZ); + + return loc; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/boards/Board.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/boards/Board.java new file mode 100644 index 0000000..9fa678c --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/boards/Board.java @@ -0,0 +1,208 @@ +package net.grandtheftmc.core.boards; + +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.users.User; +import org.bukkit.entity.Player; +import org.bukkit.scoreboard.*; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class Board { + + private String name; + + private String header; + + private BoardType type; + + private List boardValues = new ArrayList<>(); + + private List list = new ArrayList<>(); + + private List scores = new ArrayList<>(); + + public Board(String name, String header, List values) { + this.name = name; + this.header = header; + this.boardValues = values; + this.type = BoardType.KEY_VALUE; + } + + public Board(String name, String header, String[] lines) { + this.name = name; + this.header = header; + this.list = Arrays.asList(lines); + this.type = BoardType.LIST; + } + + public Board(String name, List scores, String header) { + this.name = name; + this.header = header; + this.scores = scores; + this.type = BoardType.SCORES; + } + + public Board(String name, String header, BoardType type) { + this.name = name; + this.header = header; + this.type = type; + } + + public String getName() { + return this.name; + } + + public void setName(String name) { + this.name = name; + } + + public String getHeader() { + return this.header; + } + + public void setHeader(String header) { + this.header = header; + } + + public BoardType getType() { + return this.type; + } + + public void setType(BoardType type) { + this.type = type; + } + + public List getBoardValues() { + return this.boardValues; + } + + public void setBoardValues(List boardValues) { + this.boardValues = boardValues; + } + + public List getList() { + return this.list; + } + + public void setList(List list) { + this.list = list; + } + + public List getScores() { + return this.scores; + } + + public void setScores(List scores) { + this.scores = scores; + } + + public Board addValue(String color, String name, String value) { + this.boardValues.add(new BoardValue(color, name, value)); + return this; + } + + public Board addScore(String name, int score) { + this.scores.add(new BoardScore(name, score)); + return this; + } + + public Board addLine(String line) { + this.list.add(line); + return this; + } + + public void updateFor(Player player, User user) { + List scores = new ArrayList<>(); + switch (this.type) { + case KEY_VALUE: { + int currentLine = 15; + int n = 5; + for (BoardValue value : this.boardValues) { + scores.add(new BoardScore("&" + n--, currentLine--)); + scores.add(new BoardScore('&' + value.getColor() + "&l" + value.getName(), currentLine--)); + scores.add(new BoardScore(' ' + value.getValue(), currentLine--)); + } + } + break; + case LIST: + int currentLine = 15; + for (String line : this.list) { + scores.add(new BoardScore(line, currentLine)); + currentLine--; + } + break; + case SCORES: + scores = this.scores; + break; + } + this.updateFor(player, user, scores); + } + + private void updateFor(Player player, User user, List scores) { + Scoreboard scoreboard = user.getScoreboard(); + Objective obj = scoreboard.getObjective(player.getName()); + if (obj == null) + obj = scoreboard.registerNewObjective(player.getName(), "dummy"); + for (String s : scoreboard.getEntries()) + if (obj.getScore(s).isScoreSet()) + scoreboard.resetScores(s); + obj.setDisplaySlot(DisplaySlot.SIDEBAR); + obj.setDisplayName(Utils.f(this.header)); + List playerNames = new ArrayList<>(); + for (BoardScore boardScore : scores) { + int lineNumber = boardScore.getScore(); + + String originalLine = boardScore.getName(); + String originalTeamPrefix = ""; + String originalPlayerName; + + if (originalLine.length() > 32) { + originalTeamPrefix = originalLine.substring(0, 16); + originalPlayerName = originalLine.substring(16, 32); + } else if (originalLine.length() > 16) { + originalTeamPrefix = originalLine.substring(0, originalLine.length() - 16); + originalPlayerName = originalLine.substring(originalLine.length() - 16, originalLine.length()); + } else { + originalPlayerName = originalLine; + } + String line; + String teamPrefix = originalTeamPrefix; + String playerName = originalPlayerName; + int t = 0; + while (playerNames.contains(playerName)) { + line = originalTeamPrefix + originalPlayerName; + if (line.length() > 30) + line = line.substring(0, 30); + line = line + '&' + t; + t++; + if (line.length() > 32) { + teamPrefix = line.substring(0, 16); + playerName = line.substring(16, 32); + } else if (line.length() > 16) { + teamPrefix = line.substring(0, line.length() - 16); + playerName = line.substring(line.length() - 16, line.length()); + } else { + playerName = line; + } + } + + playerNames.add(playerName); + Score score = obj.getScore(Utils.f(playerName)); + if (!teamPrefix.isEmpty()) { + Team team = scoreboard.getTeam(playerName); + if (team == null) + team = scoreboard.registerNewTeam(playerName); + team.setPrefix(Utils.f(teamPrefix)); + team.setSuffix(""); + team.addEntry(Utils.f(playerName)); +// team.setNameTagVisibility(NameTagVisibility.NEVER); + } + score.setScore(lineNumber); + } + + player.setScoreboard(scoreboard); + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/boards/BoardScore.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/boards/BoardScore.java new file mode 100644 index 0000000..e477141 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/boards/BoardScore.java @@ -0,0 +1,29 @@ +package net.grandtheftmc.core.boards; + +public class BoardScore { + + private String name; + private int score; + + public BoardScore(String name, int currentLine) { + this.name = name; + this.score = currentLine; + } + + public String getName() { + return this.name; + } + + public void setName(String name) { + this.name = name; + } + + public int getScore() { + return this.score; + } + + public void setScore(int i) { + this.score = i; + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/boards/BoardType.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/boards/BoardType.java new file mode 100644 index 0000000..4d76f26 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/boards/BoardType.java @@ -0,0 +1,7 @@ +package net.grandtheftmc.core.boards; + +public enum BoardType { + KEY_VALUE, + LIST, + SCORES +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/boards/BoardValue.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/boards/BoardValue.java new file mode 100644 index 0000000..556f470 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/boards/BoardValue.java @@ -0,0 +1,35 @@ +package net.grandtheftmc.core.boards; + +public class BoardValue { + + private String color; + private String name; + private String value; + + public BoardValue(String color, String name, String value) { + this.color = color; + this.name = name; + this.value = value; + } + + public String getName() { + return this.name; + } + + public void setName(String name) { + this.name = name; + } + public String getValue() { + return this.value; + } + public void setValue(String value) { + this.value = value; + } + public String getColor() { + return this.color; + } + public void setColor(String color) { + this.color = color; + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/Casino.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/Casino.java new file mode 100644 index 0000000..752b7d5 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/Casino.java @@ -0,0 +1,44 @@ +package net.grandtheftmc.core.casino; + +import net.grandtheftmc.core.casino.game.CasinoGame; +import net.grandtheftmc.core.util.NMSVersion; +import net.grandtheftmc.core.util.title.NMSTitle; + +import java.util.List; + +public interface Casino { + + /** + * Get the currently available Casino Games. + * + * @return + */ + List getGames(); + + /** + * Remove casino game from the list of valid games. + * + * @param game - Casino Game + */ + void removeGame(CasinoGame game); + + /** + * Remove all current casino games. + */ + void removeAllGames(); + + /** + * Add a casino game to the list of valid games. + * + * @param game - Casino Game + */ + void addGame(CasinoGame game); + + NMSTitle getTitle(); + + void refreshAll(); + + NMSVersion getVersion(); + + void enabledAllGames(); +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/CoreCasino.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/CoreCasino.java new file mode 100644 index 0000000..d94f91b --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/CoreCasino.java @@ -0,0 +1,144 @@ +package net.grandtheftmc.core.casino; + +import com.google.common.collect.Lists; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.casino.coins.CoinManager; +import net.grandtheftmc.core.casino.game.CasinoGame; +import net.grandtheftmc.core.casino.game.component.CasinoGameComponent; +import net.grandtheftmc.core.util.Component; +import net.grandtheftmc.core.util.NMSVersion; +import net.grandtheftmc.core.util.title.NMSTitle; +import org.bukkit.Bukkit; +import org.bukkit.entity.ArmorStand; +import org.bukkit.entity.Entity; +import org.bukkit.event.HandlerList; +import org.bukkit.plugin.java.JavaPlugin; +import org.bukkit.scheduler.BukkitRunnable; + +import java.util.List; + +public class CoreCasino implements Casino { + + private final List games; + private final NMSTitle title; + private final NMSVersion nmsVersion; + private final CoinManager coinManager; + + public CoreCasino(T plugin, NMSTitle title, NMSVersion version) { + this.games = Lists.newArrayList(); + this.coinManager = new CoinManager(); + this.nmsVersion = version; + Bukkit.getPluginManager().registerEvents(new CasinoGameComponent(this), plugin); + this.title = title; + + new BukkitRunnable() { + @Override public void run() { + refreshIndex(); + } + }.runTaskTimer(plugin, 20*10, 20*10); + } + + public CoinManager getCoinManager() { + return this.coinManager; + } + + /** + * Add a casino game to the list of valid games. + * + * @param game - Casino Game + */ + @Override + public void addGame(CasinoGame game) { + if (game instanceof Component) + Bukkit.getPluginManager().registerEvents((Component) game, Core.getInstance()); + + this.games.add(game); + } + + + + @Override + public NMSTitle getTitle() { + return this.title; + } + + @Override + public void refreshAll() { + this.games.forEach(game -> { + if(!game.isInProgress()) { + game.disable(); + game.enable(); + } + }); + } + + private void refreshIndex() { + for(CasinoGame game : this.games) { + if(!game.getOriginLocation().getChunk().isLoaded()) game.getOriginLocation().getChunk().load(); + for (Entity entity : game.getOriginLocation().getWorld().getEntities()) { + if(game.isClicked(entity)) continue; + if (entity instanceof ArmorStand && entity.getLocation().distance(game.getOriginLocation()) < 0.7) { + entity.remove(); + } + } + } + } + + @Override + public NMSVersion getVersion() { + return this.nmsVersion; + } + + @Override + public void enabledAllGames() { + for(CasinoGame game : this.games) { + if(!game.getOriginLocation().getChunk().isLoaded()) game.getOriginLocation().getChunk().load(); + for (Entity entity : game.getOriginLocation().getWorld().getEntities()) { + if (entity instanceof ArmorStand && entity.getLocation().distance(game.getOriginLocation()) < 20) { + entity.remove(); + } + } + } + + this.games.forEach(CasinoGame::enable); + } + + /** + * Remove casino game from the list of valid games. + * + * @param game - Casino Game + */ + @Override + public void removeGame(CasinoGame game) { + if (game instanceof Component) + HandlerList.unregisterAll((Component) game); + + this.games.remove(game); + game.disable(); + } + + /** + * Remove all current casino games. + */ + @Override + public void removeAllGames() { + this.games.forEach(game -> { + if (game instanceof Component) HandlerList.unregisterAll((Component) game); + game.disable(); + }); + + this.getGames().clear(); + } + + + + /** + * Get the currently available Casino Games. + * + * @return + */ + @Override + public List getGames() { + return this.games; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/coins/ChipAmount.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/coins/ChipAmount.java new file mode 100644 index 0000000..ec33a43 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/coins/ChipAmount.java @@ -0,0 +1,57 @@ +package net.grandtheftmc.core.casino.coins; + +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import java.util.Optional; +import java.util.stream.Stream; + +/** + * Created by Timothy Lampen on 2017-11-12. + */ +public enum ChipAmount { + EIGHT_HUNDRED(ChatColor.LIGHT_PURPLE + "800", 800), + THREE_HUNDRED(ChatColor.BLUE + "300", 300), + HUNDRED(ChatColor.GREEN + "100", 100), + FIFTY(ChatColor.YELLOW + "50", 50), + TEN(ChatColor.GOLD + "10", 10), + ONE(ChatColor.RED + "1", 1); + + + private int amount; + private String prefix; + ChipAmount(String prefix, int amount){ + this.amount = amount; + this.prefix = prefix; + } + + public int getAmount() { + return amount; + } + + public String getPrefix() { + return this.prefix; + } + + public static Optional getChipAmount(String name) { + if(name==null) + return Optional.empty(); + return Stream.of(ChipAmount.values()).filter(c -> name.contains(c.prefix)).findFirst(); + } + + public ItemStack getItemStack(){ + ItemStack is = new ItemStack(Material.DIAMOND_SWORD); + ItemMeta im = is.getItemMeta(); + String disp = this.prefix; + is.setDurability((short)1002); + disp += ChatColor.GRAY + " Casino Coins"; + im.setUnbreakable(true); + im.addItemFlags(ItemFlag.HIDE_UNBREAKABLE); + im.setDisplayName(disp); + is.setItemMeta(im); + return is; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/coins/CoinManager.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/coins/CoinManager.java new file mode 100644 index 0000000..072b390 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/coins/CoinManager.java @@ -0,0 +1,155 @@ +package net.grandtheftmc.core.casino.coins; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.Utils; +import net.grandtheftmc.core.util.Component; +import net.grandtheftmc.core.util.ServerUtil; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.scheduler.BukkitRunnable; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * Created by Timothy Lampen on 2017-11-12. + */ +public class CoinManager implements Component{ + + private long lastResetTime = System.currentTimeMillis(); + private double currentMultiplier = 1.0; + private static final int baseCoinSellPrice = 150, baseCoinBuyPrice = 200; + private int soldCoins = 0; + + @Override + public CoinManager onEnable(Core plugin){ + new BukkitRunnable() { + @Override + public void run() { + Utils.insertLog(null, "Casino", "resetMultipler", "CHIPS", currentMultiplier + " cMulti", currentMultiplier, 0); + setCurrentMultiplier(1); + resetSoldCoins(); + Bukkit.broadcastMessage(Lang.CASINO.f("&aThe casino chip prices have been reset!")); + } + }.runTaskTimer(Core.getInstance(), 20*60*60, 20*60*60); + return this; + } + + public int getBaseCoinBuyPrice() { + return baseCoinBuyPrice; + } + + public int getBaseCoinSellPrice() { + return baseCoinSellPrice; + } + + public void addSoldCoins(int coins){ + soldCoins += coins; + if(soldCoins>=1000) { + setCurrentMultiplier(currentMultiplier + .1); + soldCoins = 0; + } + } + + private synchronized void resetSoldCoins(){ + this.soldCoins = 0; + } + + public synchronized double getCurrentMultiplier(){ + return currentMultiplier; + } + + private synchronized void setCurrentMultiplier(double d){ + currentMultiplier = d; + } + + public void giveCasinoChips(Player player, final int amount){ + ServerUtil.runTaskAsync(new BukkitRunnable() { + @Override + public void run() { + int dynamicAmount = amount; + dynamicAmount += getTotalCasinoChips(player); + for(ItemStack is : player.getInventory().getContents()) { + if(is==null) + continue; + if(isCasinoChip(is)) + player.getInventory().removeItem(is); + } + HashMap items = new HashMap<>(); + for(ChipAmount chip : ChipAmount.values()) { + while (dynamicAmount >= chip.getAmount()) { + ItemStack coin = chip.getItemStack(); + if (items.containsKey(coin)) + items.put(coin, items.get(coin) + 1); + else + items.put(coin, 1); + dynamicAmount -= chip.getAmount(); + } + } + List convertedItems = new ArrayList(); + items.entrySet().forEach(entry -> { + ItemStack key = entry.getKey(); + key.setAmount(entry.getValue()); + convertedItems.add(key); + }); + ServerUtil.runTask(new BukkitRunnable() { + @Override + public void run() { + for(ItemStack is : convertedItems) + Utils.giveItems(player, is); + } + }); + } + }); + + } + + public int getTotalCasinoChips(Player player) { + int amt = 0; + for(ItemStack is : player.getInventory().getContents()) { + if(is==null) + continue; + if(isCasinoChip(is)) { + ChipAmount chip = ChipAmount.getChipAmount(is.getItemMeta().getDisplayName()).get(); + amt += chip.getAmount()*is.getAmount(); + } + } + return amt; + } + + public boolean isCasinoChip(ItemStack is){ + if(is==null) + return false; + return is.getType()==Material.DIAMOND_SWORD && is.getDurability()==1002; + } + + public boolean removeCasinoChips(Player player, int amount) { + if(!hasCasinoChips(player, amount)) + return false; + int newTotal = getTotalCasinoChips(player)-amount; + for(ItemStack is : player.getInventory().getContents()) { + if(!isCasinoChip(is)) + continue; + player.getInventory().removeItem(is); + } + giveCasinoChips(player, newTotal); + return true; + } + + public boolean hasCasinoChips(Player player, int amount){ + int invAmount = 0; + for(ItemStack is : player.getInventory().getContents()) { + if(!isCasinoChip(is)) + continue; + ChipAmount chip = ChipAmount.getChipAmount(is.getItemMeta().getDisplayName()).get(); + invAmount += chip.getAmount()*is.getAmount(); + } + return invAmount>=amount; + } + + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/coins/VendorMenu.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/coins/VendorMenu.java new file mode 100644 index 0000000..30722ce --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/coins/VendorMenu.java @@ -0,0 +1,102 @@ +package net.grandtheftmc.core.casino.coins; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.Utils; +import net.grandtheftmc.core.inventory.CoreMenu; +import net.grandtheftmc.core.inventory.CoreMenuFlag; +import net.grandtheftmc.core.inventory.button.ClickableItem; +import net.grandtheftmc.core.inventory.button.MenuItem; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.util.factory.ItemFactory; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import java.text.DecimalFormat; +import java.util.Arrays; + +/** + * Created by Timothy Lampen on 2017-11-12. + */ +public class VendorMenu extends CoreMenu{ + + public VendorMenu() { + super(1, ChatColor.GRAY + "Buy or Sell Casino Chips", CoreMenuFlag.CLOSE_ON_NULL_CLICK); + + ItemStack[] stacks = new ItemStack[]{ + new ItemFactory(Material.CHEST).setName(ChatColor.GREEN + "Buy Casino Chips").build(), + new ItemFactory(Material.CHEST).setName(ChatColor.RED + "Sell Casino Chips").build() + }; + + addItem(new ClickableItem(3, stacks[0], (player, clickType) -> { + new BuyChipMenu().openInventory(player); + })); + + addItem(new ClickableItem(5, stacks[1], (player, clickType) -> { + new SellChipMenu().openInventory(player); + })); + } + + private class SellChipMenu extends CoreMenu{ + + private SellChipMenu() { + super(1, ChatColor.RED + "Sell Casino Chips"); + int currentSlot = 2; + ChipAmount[] values = ChipAmount.values(); + for(int i = values.length -1; i>= 0; i--){ + ChipAmount chip = values[i]; + ItemStack is = chip.getItemStack(); + ItemMeta im = is.getItemMeta(); + im.setLore(Arrays.asList(ChatColor.GRAY + "Sell Price: $" + ChatColor.GREEN + Utils.formatMoney(chip.getAmount()*Core.getCoinManager().getBaseCoinSellPrice()))); + is.setItemMeta(im); + addItem(new ClickableItem(currentSlot, is, (player, clickType) -> { + if(Core.getCoinManager().hasCasinoChips(player, chip.getAmount())){ + Core.getCoinManager().removeCasinoChips(player, chip.getAmount()); + Core.getUserManager().getLoadedUser(player.getUniqueId()).addMoney(Core.getCoinManager().getBaseCoinSellPrice()*chip.getAmount()); + } + else + player.sendMessage(Lang.CASINO.f("&cYou do not have enough chips to sell!")); + })); + currentSlot++; + } + } + } + + private class BuyChipMenu extends CoreMenu { + private BuyChipMenu() { + super(1, ChatColor.GREEN + "Buy Casino Chips"); + int currentSlot = 1; + ChipAmount[] values = ChipAmount.values(); + for (int i = values.length - 1; i >= 0; i--) { + if (currentSlot == 4) { + currentSlot++; + } + ChipAmount chip = values[i]; + ItemStack is = chip.getItemStack(); + ItemMeta im = is.getItemMeta(); + im.setLore(Arrays.asList(ChatColor.GRAY + "Cost: $" + ChatColor.GREEN + Utils.formatMoney(Math.round(chip.getAmount() * Core.getCoinManager().getBaseCoinBuyPrice() * Core.getCoinManager().getCurrentMultiplier())))); + is.setItemMeta(im); + addItem(new ClickableItem(currentSlot, is, (player, clickType) -> { + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + if (user.hasMoney((int) Math.round(chip.getAmount() * Core.getCoinManager().getBaseCoinBuyPrice() * Core.getCoinManager().getCurrentMultiplier()))) { + Core.getCoinManager().giveCasinoChips(player, chip.getAmount()); + Core.getCoinManager().addSoldCoins(chip.getAmount()); + user.takeMoney(chip.getAmount() * Core.getCoinManager().getBaseCoinBuyPrice() * Core.getCoinManager().getCurrentMultiplier()); + } else + player.sendMessage(Lang.CASINO.f("&7You need $&b" + chip.getAmount() * Core.getCoinManager().getBaseCoinBuyPrice() * Core.getCoinManager().getCurrentMultiplier()) + " &7to buy these chips!"); + player.closeInventory(); + new BuyChipMenu().openInventory(player); + })); + currentSlot++; + } + ItemStack is = new ItemStack(Material.REDSTONE); + ItemMeta im = is.getItemMeta(); + DecimalFormat df = new DecimalFormat("#.#"); + im.setDisplayName(ChatColor.GRAY + "Current Cost Multiplier: " + ChatColor.GOLD + df.format(Core.getCoinManager().getCurrentMultiplier()) + ChatColor.GRAY + "x"); + is.setItemMeta(im); + addItem(new MenuItem(4, is, false)); + } + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/game/CasinoGame.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/game/CasinoGame.java new file mode 100644 index 0000000..e6765e4 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/game/CasinoGame.java @@ -0,0 +1,75 @@ +package net.grandtheftmc.core.casino.game; + +import net.grandtheftmc.core.casino.Casino; +import org.bukkit.Location; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; + +public interface CasinoGame { + + /** + * Identifier of the casino game. + * @return + */ + int getIdentifier(); + + /** + * Name of the casino game. + * @return + */ + String getName(); + + /** + * Version of the casino game. + * @return + */ + String getVersion(); + + /** + * Get the current state of the casino game. + * @return + */ + CasinoGameState getState(); + + /** + * Set the current state of the casino game. + * @param state + */ + void setState(CasinoGameState state); + + /** + * This method will run when the Game is added
+ * To the list of valid games in Casino. + */ + void enable(); + + /** + * This method will run when the Game is removed
+ * From the list of valid games in Casino. + */ + void disable(); + + /** + * This is used so the Handler knows, + * which slot machine was interacted with. + * + * @param entity + * @return + */ + boolean isClicked(Entity entity); + + /** + * This will be used when a casino game is won. + * + * @param type + */ + void announce(Player player, int type, int reward); + + boolean isInProgress(); + + Casino getCasino(); + + boolean registered(); + + Location getOriginLocation(); +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/game/CasinoGameAttribute.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/game/CasinoGameAttribute.java new file mode 100644 index 0000000..7520434 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/game/CasinoGameAttribute.java @@ -0,0 +1,26 @@ +package net.grandtheftmc.core.casino.game; + +import java.lang.annotation.*; + +@Documented +@Target({ ElementType.TYPE }) +@Retention(RetentionPolicy.RUNTIME) +public @interface CasinoGameAttribute { + /** + * Identifier of the casino game. + * @return + */ + int id(); + + /** + * Name of the casino game. + * @return + */ + String name(); + + /** + * Version of the casino game. + * @return + */ + String version(); +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/game/CasinoGameState.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/game/CasinoGameState.java new file mode 100644 index 0000000..de82fc8 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/game/CasinoGameState.java @@ -0,0 +1,6 @@ +package net.grandtheftmc.core.casino.game; + +public enum CasinoGameState { + IDLE, BUSY, + ; +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/game/CasinoRunnable.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/game/CasinoRunnable.java new file mode 100644 index 0000000..ff09479 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/game/CasinoRunnable.java @@ -0,0 +1,8 @@ +package net.grandtheftmc.core.casino.game; + +import org.bukkit.entity.Player; + +public interface CasinoRunnable { + + void start(Player player); +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/game/CoreCasinoGame.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/game/CoreCasinoGame.java new file mode 100644 index 0000000..6ac283c --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/game/CoreCasinoGame.java @@ -0,0 +1,53 @@ +package net.grandtheftmc.core.casino.game; + +import net.grandtheftmc.core.casino.Casino; +import net.grandtheftmc.core.casino.game.event.CasinoGameStateChangeEvent; +import org.bukkit.Bukkit; + +@CasinoGameAttribute(id = 0, name = "Casino Game", version = "1.0") +public abstract class CoreCasinoGame implements CasinoGame { + + protected final Casino casino; + private CasinoGameState gameState; + + /** + * Construct a new Casino Game + */ + public CoreCasinoGame(Casino casino) { + this.casino = casino; + this.gameState = CasinoGameState.IDLE; + } + + @Override + public int getIdentifier() { + return this.getClass().getAnnotation(CasinoGameAttribute.class).id(); + } + + @Override + public String getName() { + return this.getClass().getAnnotation(CasinoGameAttribute.class).name(); + } + + @Override + public String getVersion() { + return this.getClass().getAnnotation(CasinoGameAttribute.class).version(); + } + + @Override + public CasinoGameState getState() { + return this.gameState; + } + + @Override + public void setState(CasinoGameState state) { + CasinoGameStateChangeEvent event = new CasinoGameStateChangeEvent(this, this.gameState, state); + Bukkit.getPluginManager().callEvent(event); + + this.gameState = state; + } + + @Override + public Casino getCasino() { + return this.casino; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/game/bet/CasinoBet.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/game/bet/CasinoBet.java new file mode 100644 index 0000000..ba98046 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/game/bet/CasinoBet.java @@ -0,0 +1,12 @@ +package net.grandtheftmc.core.casino.game.bet; + +import org.bukkit.entity.Player; + +public interface CasinoBet { + + CasinoBetType getBetType(); + + void start(Player player, SlotMachineBet bet); + + void openMenu(Player player); +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/game/bet/CasinoBetType.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/game/bet/CasinoBetType.java new file mode 100644 index 0000000..a1d29d0 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/game/bet/CasinoBetType.java @@ -0,0 +1,7 @@ +package net.grandtheftmc.core.casino.game.bet; + +public enum CasinoBetType { + TOKENS, + MONEY, + ; +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/game/bet/SlotMachineBet.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/game/bet/SlotMachineBet.java new file mode 100644 index 0000000..313b68e --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/game/bet/SlotMachineBet.java @@ -0,0 +1,28 @@ +package net.grandtheftmc.core.casino.game.bet; + +import net.grandtheftmc.core.casino.coins.ChipAmount; + +public enum SlotMachineBet { + TINY("Tiny Roller", ChipAmount.TEN), + SMALL("Small Roller",ChipAmount.FIFTY), + HIGH("High Roller",ChipAmount.HUNDRED), + INSANE("Insane Roller",ChipAmount.THREE_HUNDRED), + ALL_IN("All In!",ChipAmount.EIGHT_HUNDRED), + ; + + private final String name; + private final ChipAmount cost; + + SlotMachineBet(String name, ChipAmount cost) { + this.name = name; + this.cost = cost; + } + + public String getName() { + return name; + } + + public ChipAmount getCost() { + return this.cost; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/game/component/CasinoGameComponent.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/game/component/CasinoGameComponent.java new file mode 100644 index 0000000..bc09602 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/game/component/CasinoGameComponent.java @@ -0,0 +1,102 @@ +package net.grandtheftmc.core.casino.game.component; + +import com.google.common.collect.Maps; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.Utils; +import net.grandtheftmc.core.casino.Casino; +import net.grandtheftmc.core.casino.game.CasinoGame; +import net.grandtheftmc.core.casino.game.CasinoRunnable; +import net.grandtheftmc.core.casino.game.bet.CasinoBet; +import net.grandtheftmc.core.casino.game.event.CasinoGameEndEvent; +import net.grandtheftmc.core.casino.game.event.CasinoGameStartEvent; +import net.grandtheftmc.core.util.Component; +import org.bukkit.event.EventHandler; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.entity.EntityDeathEvent; +import org.bukkit.event.player.PlayerArmorStandManipulateEvent; +import org.bukkit.event.player.PlayerInteractAtEntityEvent; +import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.plugin.java.JavaPlugin; + +import java.util.HashMap; +import java.util.Optional; +import java.util.UUID; + +public class CasinoGameComponent implements Component { + + private final HashMap game_users; + private final Casino casino; + + public CasinoGameComponent(Casino casino) { + this.casino = casino; + this.game_users = Maps.newHashMap(); + } + + @Override + public CasinoGameComponent onEnable(T plugin) { + return this; + } + + @Override + public CasinoGameComponent onDisable(T plugin) { + return this; + } + + @EventHandler + protected final void onArmorStandClick(PlayerArmorStandManipulateEvent event) { + if(event.getPlayer() == null || event.getRightClicked() == null) return; + if(!event.getRightClicked().getWorld().getName().equals("spawn")) return; + + Optional optional = casino.getGames().stream().filter(game -> game.isClicked(event.getRightClicked())).findFirst(); + if(!optional.isPresent()) return; + + event.setCancelled(true); + } + + @EventHandler + protected final void onMachineInteract(PlayerInteractAtEntityEvent event) { + if(event.getPlayer() == null || event.getRightClicked() == null) return; + Optional optional = casino.getGames().stream().filter(game -> game.isClicked(event.getRightClicked())).findFirst(); + if(!optional.isPresent()) return; + + if(this.game_users.containsKey(event.getPlayer().getUniqueId())) { + this.casino.getTitle().sendTitle(event.getPlayer(), Utils.f("&9&lCASINO"), Utils.f("&cYou cannot use multiple Casino games at once!"), 1*20, 2*20, 1*20); + return; + } + + if(optional.get() instanceof CasinoBet) { + ((CasinoBet) optional.get()).openMenu(event.getPlayer()); + return; + } + + if(optional.get() instanceof CasinoRunnable) { + ((CasinoRunnable) optional.get()).start(event.getPlayer()); + } + } + + @EventHandler + protected final void onPlayerQuit(PlayerQuitEvent event) { + game_users.remove(event.getPlayer().getUniqueId()); + } + + @EventHandler + protected final void onCasinoGameEnd(CasinoGameEndEvent event) { + game_users.remove(event.getPlayer().getUniqueId()); + } + + @EventHandler + protected final void onCasinoGameStart(CasinoGameStartEvent event) { + game_users.putIfAbsent(event.getPlayer().getUniqueId(), event.getGame()); + } + +// @EventHandler +// protected final void onEntityDeath(EntityDamageEvent event) { +// if(event.getEntity() == null) return; +// +// Optional optional = casino.getGames().stream().filter(game -> game.isClicked(event.getEntity())).findFirst(); +// if(!optional.isPresent()) return; +// +// if(optional.get().registered()) +// event.setCancelled(true); +// } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/game/event/CasinoGameEndEvent.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/game/event/CasinoGameEndEvent.java new file mode 100644 index 0000000..bc68db4 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/game/event/CasinoGameEndEvent.java @@ -0,0 +1,28 @@ +package net.grandtheftmc.core.casino.game.event; + +import net.grandtheftmc.core.casino.game.CasinoGame; +import net.grandtheftmc.core.events.CoreEvent; +import org.bukkit.entity.Player; + +public class CasinoGameEndEvent extends CoreEvent { + + private final CasinoGame game; + private final Player player; + + /** + * Construct a new Event + */ + public CasinoGameEndEvent(CasinoGame game, Player player) { + super(false); + this.game = game; + this.player = player; + } + + public CasinoGame getGame() { + return game; + } + + public Player getPlayer() { + return player; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/game/event/CasinoGameStartEvent.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/game/event/CasinoGameStartEvent.java new file mode 100644 index 0000000..ad5b3db --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/game/event/CasinoGameStartEvent.java @@ -0,0 +1,28 @@ +package net.grandtheftmc.core.casino.game.event; + +import net.grandtheftmc.core.casino.game.CasinoGame; +import net.grandtheftmc.core.events.CoreEvent; +import org.bukkit.entity.Player; + +public class CasinoGameStartEvent extends CoreEvent { + + private final CasinoGame game; + private final Player player; + + /** + * Construct a new Event + */ + public CasinoGameStartEvent(CasinoGame game, Player player) { + super(false); + this.game = game; + this.player = player; + } + + public CasinoGame getGame() { + return game; + } + + public Player getPlayer() { + return player; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/game/event/CasinoGameStateChangeEvent.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/game/event/CasinoGameStateChangeEvent.java new file mode 100644 index 0000000..837b291 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/game/event/CasinoGameStateChangeEvent.java @@ -0,0 +1,45 @@ +package net.grandtheftmc.core.casino.game.event; + +import net.grandtheftmc.core.casino.game.CasinoGame; +import net.grandtheftmc.core.casino.game.CasinoGameState; +import net.grandtheftmc.core.events.CoreEvent; + +public class CasinoGameStateChangeEvent extends CoreEvent { + + private final CasinoGame casinoGame; + private final CasinoGameState from, to; + + /** + * Construct a new Event + */ + public CasinoGameStateChangeEvent(CasinoGame casinoGame, CasinoGameState from, CasinoGameState to) { + super(false); + this.casinoGame = casinoGame; + this.from = from; + this.to = to; + } + + /** + * Get the casino game. + * @return + */ + public CasinoGame getCasinoGame() { + return casinoGame; + } + + /** + * Get the previous casino game state. + * @return + */ + public CasinoGameState getFrom() { + return from; + } + + /** + * Get the new casino game state. + * @return + */ + public CasinoGameState getTo() { + return to; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/slot/CasinoSpinData.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/slot/CasinoSpinData.java new file mode 100644 index 0000000..3f6f2e6 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/slot/CasinoSpinData.java @@ -0,0 +1,120 @@ +package net.grandtheftmc.core.casino.slot; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.casino.game.CasinoGameAttribute; +import net.grandtheftmc.core.util.AngleUtil; +import org.bukkit.Location; +import org.bukkit.Sound; +import org.bukkit.entity.ArmorStand; +import org.bukkit.entity.EntityType; +import org.bukkit.metadata.FixedMetadataValue; +import org.bukkit.util.EulerAngle; + +public class CasinoSpinData { + + private final ArmorStand armorStand; + private final int id; + private final SlotWheelType wheelType; + private long ticks = 0, maxTicks = 100; + private double speed = 100; + private SpinState spinState = SpinState.SPINNING; + private float pitch = 0.25f; + + public CasinoSpinData(SlotMachine machine, Location location, int id, SlotWheelType wheelType, double defaultAngle) { + this.armorStand = (ArmorStand) location.getWorld().spawnEntity(location.clone(), EntityType.ARMOR_STAND); + this.armorStand.setCustomName(machine.getClass().getAnnotation(CasinoGameAttribute.class).id() + ";" + id); + this.armorStand.setCustomNameVisible(false); + if(id == 2) { + this.armorStand.setArms(true); + this.armorStand.getEquipment().setItemInOffHand(machine.getMachine(true)); + this.armorStand.setLeftArmPose(new EulerAngle(0, 0, 0)); + } + + this.armorStand.setCanPickupItems(false); + this.armorStand.setGravity(false); + this.armorStand.setBasePlate(false); + this.armorStand.setVisible(false); + this.armorStand.setInvulnerable(true); + this.armorStand.setRemoveWhenFarAway(false); + this.armorStand.setMarker(false); + this.armorStand.setMetadata("SLOT_MACHINE", new FixedMetadataValue(Core.getInstance(), machine)); + + this.wheelType = wheelType; + this.armorStand.setHelmet(wheelType.getModel()); + this.armorStand.getLocation().setPitch(90); + this.id = id; + + this.armorStand.setHeadPose(new EulerAngle(AngleUtil.getRadianFromDegree(defaultAngle), 0, 0)); + } + + public ArmorStand getArmorStand() { + return this.armorStand; + } + + public int getId() { + return this.id; + } + + public SlotWheelType getWheelType() { + return this.wheelType; + } + + public double getSpeed() { + return this.speed; + } + + public void setSpeed(double speed) { + this.speed = speed; + } + + public long getTicks() { + return this.ticks; + } + + public void setTicks(long tick) { + this.ticks = tick; + } + + public SpinState getSpinState() { + return this.spinState; + } + + public void setSpinState(SpinState spinState) { + this.spinState = spinState; + } + + public long getMaxTicks() { + return this.maxTicks; + } + + public void spin(boolean forward) { + if(this.armorStand == null) return; + EulerAngle c = this.armorStand.getHeadPose(); + this.armorStand.setHeadPose(new EulerAngle(Math.toRadians(Math.toDegrees(c.getX()) + (forward ? speed : -speed)), 0, 0)); + } + + public void playNote() { + Location l = this.armorStand.getEyeLocation(); + if(this.wheelType == SlotWheelType.THREE && this.speed <= 40) { + if(this.pitch >= 1.0) + this.pitch += 0.1f; + else + this.pitch += 0.25f; + l.getWorld().playSound(l, Sound.BLOCK_NOTE_PLING, 0.8f, this.pitch); + return; + } + + if(this.pitch >= 1.0) + this.pitch = 0.25f; + this.pitch += 0.25f; + l.getWorld().playSound(l, Sound.BLOCK_NOTE_PLING, 0.8f, this.pitch); + } + + protected void reset() { + this.ticks = 0; + this.maxTicks = 100; + this.speed = 100; + this.pitch = 0.1f; + this.spinState = SpinState.SPINNING; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/slot/SlotItem.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/slot/SlotItem.java new file mode 100644 index 0000000..316638c --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/slot/SlotItem.java @@ -0,0 +1,25 @@ +package net.grandtheftmc.core.casino.slot; + +public enum SlotItem { + DILDO("Dildo", new int[]{0, 2, 20}), + MDMA("MDMA", new int[]{0, 2, 5}), + LSD("LSD", new int[]{0, 2, 10}), + SEVEN("7", new int[]{0, 2, 500}), + CHERRY("Cherry", new int[]{1, 4, 35}); + + private String name; + private int[] reward; + + SlotItem(String name, int[] reward) { + this.name = name; + this.reward = reward; + } + + public String getName() { + return name; + } + + public int[] getReward() { + return reward; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/slot/SlotMachine.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/slot/SlotMachine.java new file mode 100644 index 0000000..58b6b7e --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/slot/SlotMachine.java @@ -0,0 +1,550 @@ +package net.grandtheftmc.core.casino.slot; + +import com.gmail.filoghost.holographicdisplays.api.Hologram; +import com.gmail.filoghost.holographicdisplays.api.HologramsAPI; +import com.google.common.collect.Lists; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.casino.Casino; +import net.grandtheftmc.core.casino.game.CasinoGameAttribute; +import net.grandtheftmc.core.casino.game.CasinoRunnable; +import net.grandtheftmc.core.casino.game.CoreCasinoGame; +import net.grandtheftmc.core.casino.game.bet.CasinoBet; +import net.grandtheftmc.core.casino.game.bet.CasinoBetType; +import net.grandtheftmc.core.casino.game.bet.SlotMachineBet; +import net.grandtheftmc.core.casino.game.event.CasinoGameEndEvent; +import net.grandtheftmc.core.casino.game.event.CasinoGameStartEvent; +import net.grandtheftmc.core.casino.slot.menu.SlotMachineBetMenu; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.util.AngleUtil; +import net.grandtheftmc.core.util.C; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.util.factory.FireworkFactory; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.core.util.title.NMSTitle; +import net.grandtheftmc.core.wrapper.packet.out.WrapperPlayServerEntityDestroy; +import org.bukkit.*; +import org.bukkit.block.BlockFace; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Item; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; +import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.scheduler.BukkitTask; + +import java.util.List; +import java.util.Random; + +@CasinoGameAttribute(id = 1, name = "Slot Machine", version = "1.0.0-BETA") +public class SlotMachine extends CoreCasinoGame implements CasinoRunnable, CasinoBet { + + private static final BlockFace[] AXIS = { BlockFace.NORTH, BlockFace.EAST, BlockFace.SOUTH, BlockFace.WEST }; + private final Random random; + + private Hologram hologram; + private final Location originLocation; + private CasinoSpinData[] spinData; + private SlotReward[] rewards; + private boolean running; + private BukkitTask task; + private boolean registered = true; + + public SlotMachine(Casino casino, Location location) { + super(casino); + + this.task = null; + this.random = new Random(); + this.rewards = new SlotReward[3]; + this.running = false; + this.originLocation = location; + } + + public Hologram getHologram() { + return this.hologram; + } + + public boolean isRunning() { + return this.running; + } + + /** + * This method will run when the Game is added
+ * To the list of valid games in Casino. + */ + @Override + public void enable() { + if(!originLocation.getChunk().isLoaded()) + originLocation.getChunk().load(); + + this.spinData = new CasinoSpinData[] { + new CasinoSpinData(this, this.getNextOffset(this.originLocation.clone(), 0.475, true), 1, SlotWheelType.ONE, getRandomNumber()), + new CasinoSpinData(this, this.originLocation.clone(), 2, SlotWheelType.TWO, getRandomNumber()), + new CasinoSpinData(this, this.getNextOffset(this.originLocation.clone(), -0.475, true), 3, SlotWheelType.THREE, getRandomNumber()) + }; + + this.hologram = HologramsAPI.createHologram(Core.getInstance(), this.originLocation.clone().add(0, 3.5, 0)); + this.hologram.appendTextLine(Utils.f("&e&lClick to play!")); + this.hologram.getVisibilityManager().setVisibleByDefault(true); + this.hologram.getVisibilityManager().resetVisibilityAll(); + } + + /** + * This method will run when the Game is removed
+ * From the list of valid games in Casino. + */ + @Override + public void disable() { + this.registered = false; + if(this.hologram != null) this.hologram.delete(); + if(this.spinData != null) { + for (CasinoSpinData aSpinData : this.spinData) + aSpinData.getArmorStand().remove(); + } + + resetStands(true); + } + + /** + * This is used so the Handler knows, + * which slot machine was interacted with. + * + * @param entity + * @return + */ + @Override + public boolean isClicked(Entity entity) { + if(this.spinData != null) { + for (CasinoSpinData aSpinData : this.spinData) { + if (aSpinData == null || aSpinData.getArmorStand() == null) continue; + if (entity.getUniqueId().equals(aSpinData.getArmorStand().getUniqueId())) + return true; + } + } + + return false; + } + + @Override + public boolean isInProgress() { + return this.running; + } + + @Override + public boolean registered() { + return this.registered; + } + + @Override + public Location getOriginLocation() { + return this.originLocation.clone(); + } + + @Override + public void start(Player player) { + this.start(player, SlotMachineBet.TINY); + } + + public void resetStands(boolean shutdown) { + if (shutdown) { + this.hologram.delete(); + for (CasinoSpinData data : spinData) { + data.getArmorStand().remove(); + } + } + else { + this.hologram.getVisibilityManager().setVisibleByDefault(true); + this.hologram.getVisibilityManager().resetVisibilityAll(); + } + } + + @Override + public CasinoBetType getBetType() { + return CasinoBetType.TOKENS; + } + + public void pre(Player player) { + if (this.running) return; + + this.running = true; + CasinoGameStartEvent startEvent = new CasinoGameStartEvent(this, player); + Bukkit.getPluginManager().callEvent(startEvent); + this.originLocation.getWorld().spawnParticle(Particle.VILLAGER_HAPPY, this.originLocation, 100, 1.2, 1, 1.2); + this.hologram.clearLines(); + + CasinoSpinData[] old = this.spinData.clone(); + + this.spinData = new CasinoSpinData[] { + new CasinoSpinData(this, this.getNextOffset(this.originLocation.clone(), 0.475, true), 1, SlotWheelType.ONE, getRandomNumber()), + new CasinoSpinData(this, this.originLocation.clone(), 2, SlotWheelType.TWO, getRandomNumber()), + new CasinoSpinData(this, this.getNextOffset(this.originLocation.clone(), -0.475, true), 3, SlotWheelType.THREE, getRandomNumber()) + }; + + if(old != null) { + for(CasinoSpinData data : old) { + WrapperPlayServerEntityDestroy wrappedPacket = new WrapperPlayServerEntityDestroy(); + wrappedPacket.setEntityIds(new int[] {data.getArmorStand().getEntityId()}); + wrappedPacket.sendPacket(player); + data.getArmorStand().remove(); + } + old[0] = null; + old[1] = null; + old[2] = null; + old = null; + } + + this.spinData[1].getArmorStand().getEquipment().setItemInOffHand(this.getMachine(false)); + } + + @Override + public void start(Player player, SlotMachineBet bet) { + if (this.task != null) return; + + this.pre(player); + boolean[] b = {false, false, false}; + + task = new BukkitRunnable() { + @Override public void run() { + + for(int i = 0; i < spinData.length; i++) { + CasinoSpinData data = spinData[i]; + + if(data.getSpinState() == SpinState.END) { + if (data.getId() == 3) { + + SlotReward rewardOne = rewards[0]; + SlotReward rewardTwo = rewards[1]; + SlotReward rewardThree = rewards[2]; + + if(rewardOne == null || rewardTwo == null || rewardThree == null) + continue; + + int wonAmount = getReward(player, bet, rewardOne, rewardTwo, rewardThree); + if(wonAmount > 0) { + ServerUtil.runTask(() -> { + if (player != null && player.isOnline()) { + Core.getCoinManager().giveCasinoChips(player, wonAmount); + } + + hologram.clearLines(); + hologram.appendTextLine(C.GREEN + C.BOLD + "$" + wonAmount); + + ServerUtil.runTaskAsync(() -> { + if (player == null || !player.isOnline()) return; + Utils.insertLog(player.getUniqueId(), "casino_slot", "CHIPS", bet.getCost().getAmount() + " Chips","" + wonAmount, 0, bet.getCost().getAmount()); + }); + }); + } + + new BukkitRunnable() { + @Override public void run() { + resetStands(false); + + if (SlotMachine.this.task != null) + task.cancel(); + + task = null; + rewards = new SlotReward[3]; + spinData[1].getArmorStand().getEquipment().setItemInOffHand(getMachine(true)); + + if (player != null && player.isOnline()) { + NMSTitle.sendTitle(player, " ", " ", 20, 20, 20); + CasinoGameEndEvent endEvent = new CasinoGameEndEvent(SlotMachine.this, player); + Bukkit.getPluginManager().callEvent(endEvent); + } + + hologram.clearLines(); + hologram.appendTextLine(Utils.f("&e&lClick to play!")); + + for (CasinoSpinData aSpinData : spinData) + aSpinData.reset(); + + running = false; + } + }.runTaskLater(Core.getInstance(), 20*5); + this.cancel(); + break; + } + continue; + } + + data.setTicks(data.getTicks() + 1); + + if((i == 0 && !b[i]) || (i == 1 && (b[i-1] && !b[i])) || (i == 2 && (b[i-1] && !b[i]))) { + if ((data.getTicks() % 5 == 0)) { + if (data.getSpeed() - 4.5 > 0) data.setSpeed(data.getSpeed() - 4.5); + else b[i] = true; + + if(player != null && player.isOnline()) { + originLocation.getWorld().playSound(originLocation, Sound.BLOCK_WOOD_BUTTON_CLICK_ON, 0.3f, 1f); + data.playNote(); + } + } + } + + if(data.getSpinState() == SpinState.SPINNING) { + if(b[i] && (Math.abs(AngleUtil.getDegreesFromRadians(data.getArmorStand().getHeadPose().getX()) % 30) <= 10)) { + data.setSpinState(SpinState.STOPPING); + } + data.spin(true); + continue; + } + + if(data.getSpinState() == SpinState.STOPPING) { + SlotReward reward = data.getWheelType().getRewardByAngle(AngleUtil.getDegreesFromRadians(data.getArmorStand().getHeadPose().getX())); + if (reward != null) { + rewards[i] = reward; + int finalI = i; + ServerUtil.runTask(() -> { + hologram.appendTextLine(Utils.f("&f&l" + (finalI +1) + ". &7" + reward.getRewardItem().getName())); + originLocation.getWorld().playSound(originLocation, Sound.BLOCK_NOTE_BASS, 0.75f, 1f); + }); + } + + data.setSpinState(SpinState.END); + } + } + } + }.runTaskTimerAsynchronously(Core.getInstance(), 10, 1); + } + + @Override + public void openMenu(Player player) { + new SlotMachineBetMenu(this).openInventory(player); + } + + private Location getNextOffset(Location current, double offset, boolean b) { + double yaw = Math.toRadians(current.getYaw()) + (Math.PI / 2); + double x = current.getX() + offset * (b ? Math.sin(yaw) : Math.cos(yaw)); + double z = current.getZ() + offset * (b ? Math.cos(yaw) : Math.sin(yaw)); + return new Location(current.getWorld(), x, current.getY(), z, current.getYaw(), current.getPitch()); + } + + protected ItemStack getMachine(boolean idle) { + ItemStack machineItem = new ItemFactory(Material.DIAMOND_SWORD).setDurability(idle ? (short)820 : (short)821).build(); + Utils.applyItemFlags(machineItem, ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE); + return machineItem; + } + + private int getRandomNumber() { + int x = this.random.nextInt(73); + return x*5; + } + + private int getReward(Player player, SlotMachineBet bet, SlotReward one, SlotReward two, SlotReward three) { + //announce(player, jackpotType, winAmount); + int combinedAmount = 0; + SlotItem I = one.getRewardItem(), II = two.getRewardItem(), III = three.getRewardItem(); + if(I == II && II == III) { + if(I == SlotItem.SEVEN) {//JACKPOT + combinedAmount += I.getReward()[2] * bet.getCost().getAmount(); + this.announce(player, 1, combinedAmount); + } + else if(I == SlotItem.CHERRY) {//DEMI JACKPOT + combinedAmount += I.getReward()[2] * bet.getCost().getAmount(); + this.announce(player, 2, combinedAmount); + } + else {//3 IN A ROW + combinedAmount += I.getReward()[2] * bet.getCost().getAmount(); + this.announce(player, 3, combinedAmount); + } + return combinedAmount; + } + + if(I == II) { + combinedAmount += I.getReward()[1] * bet.getCost().getAmount(); + if(III == SlotItem.CHERRY) + combinedAmount += III.getReward()[0] * bet.getCost().getAmount(); + this.announce(player, 4, combinedAmount); + return combinedAmount; + } + + if(I == III) { + combinedAmount += I.getReward()[1] * bet.getCost().getAmount(); + if(II == SlotItem.CHERRY) + combinedAmount += II.getReward()[0] * bet.getCost().getAmount(); + this.announce(player, 4, combinedAmount); + return combinedAmount; + } + + if(II == III) { + combinedAmount += I.getReward()[1] * bet.getCost().getAmount(); + if(I == SlotItem.CHERRY) + combinedAmount += I.getReward()[0] * bet.getCost().getAmount(); + this.announce(player, 4, combinedAmount); + return combinedAmount; + } + + boolean cherry = false; + if(I == SlotItem.CHERRY) { + combinedAmount += I.getReward()[0] * bet.getCost().getAmount(); + cherry = true; + } + if(II == SlotItem.CHERRY) { + combinedAmount += II.getReward()[0] * bet.getCost().getAmount(); + cherry = true; + } + if(III == SlotItem.CHERRY) { + combinedAmount += III.getReward()[0] * bet.getCost().getAmount(); + cherry = true; + } + + if(cherry) { + this.announce(player, 5, combinedAmount); + return combinedAmount; + } + + this.announce(player, 0, combinedAmount); + return combinedAmount; + } + + /** + * This will be used when a casino game is won. + * + * @param type + */ + @Override + public void announce(Player player, int type, int reward) { + ServerUtil.runTask(() -> { + Location l = this.originLocation.clone(); + String r = reward + " Chips"; + switch (type) { + case 0: + if (reward > 0) { + NMSTitle.sendTitle(player, Utils.f("&9&lCASINO"), Utils.f("&fYou have won &a" + r + "&f!"), 3 * 20, 3 * 20, 1 * 20); + this.originLocation.getWorld().spawnParticle(Particle.VILLAGER_HAPPY, l.getX(), l.getY() + 1, l.getZ(), 100, 1.2, 1, 1.2); + this.originLocation.getWorld().playSound(l, Sound.ENTITY_PLAYER_LEVELUP, 0.5f, 1f); + } else { + this.originLocation.getWorld().spawnParticle(Particle.VILLAGER_ANGRY, l.getX(), l.getY() + 1, l.getZ(), 100, 1.2, 1, 1.2); + NMSTitle.sendTitle(player, Utils.f("&9&lCASINO"), Utils.f("&fUnlucky, You haven't won anything this time!"), 3 * 20, 3 * 20, 1 * 20); + this.originLocation.getWorld().playSound(l, Sound.ENTITY_PIG_DEATH, 0.5f, 1f); + } + break; + + case 1://JACKPOT + this.originLocation.getWorld().spawnParticle(Particle.VILLAGER_HAPPY, l.getX(), l.getY() + 1, l.getZ(), 200, 1.2, 1, 1.2); + this.originLocation.getWorld().playSound(l, Sound.ITEM_TOTEM_USE, 0.5f, 1f); + NMSTitle.sendTitle(player, Utils.f("&c&lJACKPOT"), Utils.f("&fYou have won &a" + r + "&f!"), 3 * 20, 3 * 20, 1 * 20); + Bukkit.broadcastMessage(Lang.CASINO.f(player.getName() + " has won the Slot Machine Jackpot of &a" + r + "&7!")); + new FireworkFactory(this.originLocation.clone().add(0, 1, 0)).setPower(0).setColor(Color.RED).setFadeColor(Color.WHITE).setFlicker(true).setTrail(true).setType(FireworkEffect.Type.BALL_LARGE).build(); + new FireworkFactory(this.originLocation.clone().add(0, 2, 0)).setPower(0).setColor(Color.RED).setFadeColor(Color.WHITE).setFlicker(true).setTrail(true).setType(FireworkEffect.Type.BALL).build(); + + new BukkitRunnable() { + private List items = Lists.newArrayList(); + private int ticks = 0; + + @Override + public void run() { + if (ticks >= 20) { + this.cancel(); + this.items.forEach(Entity::remove); + this.items.clear(); + return; + } + + if (player != null && player.isOnline()) { + Item item = getMoneyItem(); + item.getLocation().getWorld().playSound(item.getLocation(), Sound.ENTITY_ITEM_PICKUP, 0.5f, 1.5f); +// item.setVelocity(new Vector()); +// double xMod = random.nextBoolean() ? -(1 + random.nextDouble()) : (1 + random.nextDouble()), zMod = random.nextBoolean() ? -(1 + random.nextDouble()) : (1 + random.nextDouble()); +// item.setVelocity(new Vector(item.getLocation().getX() + xMod, item.)); + item.setVelocity(item.getLocation().toVector().subtract(player.getLocation().toVector()).normalize().multiply(1.4)); + this.items.add(item); + } + + ticks += 1; + } + }.runTaskTimer(Core.getInstance(), 0, 2); + + break; + + case 2://DEMI JACKPOT + this.originLocation.getWorld().spawnParticle(Particle.VILLAGER_HAPPY, l.getX(), l.getY() + 1, l.getZ(), 200, 1.2, 1, 1.2); + this.originLocation.getWorld().playSound(l, Sound.ITEM_TOTEM_USE, 0.5f, 1f); + NMSTitle.sendTitle(player, Utils.f("&9&lCASINO"), Utils.f("&fYou have won &a" + r + "&f!"), 3 * 20, 3 * 20, 1 * 20); + new FireworkFactory(this.originLocation.clone().add(0, 1, 0)).setPower(0).setColor(Color.RED).setFadeColor(Color.WHITE).setFlicker(true).setTrail(true).setType(FireworkEffect.Type.BALL).build(); + + new BukkitRunnable() { + private List items = Lists.newArrayList(); + private int ticks = 0; + + @Override + public void run() { + if (ticks >= 30) { + this.cancel(); + this.items.forEach(Entity::remove); + this.items.clear(); + return; + } + + if (player != null && player.isOnline()) { + Item item = getMoneyItem(); + item.getLocation().getWorld().playSound(item.getLocation(), Sound.ENTITY_ITEM_PICKUP, 0.5f, 1.5f); + item.setVelocity(item.getLocation().toVector().subtract(player.getLocation().toVector()).normalize().multiply(1.4)); + this.items.add(item); + } + + ticks += 1; + } + }.runTaskTimer(Core.getInstance(), 0, 2); + + break; + + case 3://3 IN A ROW + this.originLocation.getWorld().spawnParticle(Particle.VILLAGER_HAPPY, l.getX(), l.getY() + 1, l.getZ(), 200, 1.2, 1, 1.2); + this.originLocation.getWorld().playSound(l, Sound.ITEM_TOTEM_USE, 0.5f, 1f); + NMSTitle.sendTitle(player, Utils.f("&9&lCASINO"), Utils.f("&fYou have won &a" + r + "&f!"), 3 * 20, 3 * 20, 1 * 20); + new FireworkFactory(this.originLocation.clone().add(0, 1, 0)).setPower(0).setColor(Color.GREEN).setFadeColor(Color.WHITE).setFlicker(true).setTrail(true).setType(FireworkEffect.Type.BALL).build(); + + new BukkitRunnable() { + private List items = Lists.newArrayList(); + private int ticks = 0; + + @Override + public void run() { + if (ticks >= 15) { + this.cancel(); + this.items.forEach(Entity::remove); + this.items.clear(); + return; + } + + if (player != null && player.isOnline()) { + Item item = getMoneyItem(); + item.getLocation().getWorld().playSound(item.getLocation(), Sound.ENTITY_ITEM_PICKUP, 0.5f, 1.5f); + item.setVelocity(item.getLocation().toVector().subtract(player.getLocation().toVector()).normalize().multiply(1.4)); + this.items.add(item); + } + + ticks += 1; + } + }.runTaskTimer(Core.getInstance(), 0, 2); + break; + + case 4://WIN, 2 IN A ROW + this.originLocation.getWorld().spawnParticle(Particle.VILLAGER_HAPPY, l.getX(), l.getY() + 1, l.getZ(), 200, 1.2, 1, 1.2); + this.originLocation.getWorld().playSound(l, Sound.ITEM_TOTEM_USE, 0.5f, 1f); + NMSTitle.sendTitle(player, Utils.f("&9&lCASINO"), Utils.f("&fYou have won &a" + r + "&f!"), 3 * 20, 3 * 20, 1 * 20); + break; + + case 5://CHERRY + this.originLocation.getWorld().spawnParticle(Particle.VILLAGER_HAPPY, l.getX(), l.getY() + 1, l.getZ(), 200, 1.2, 1, 1.2); + this.originLocation.getWorld().playSound(l, Sound.ITEM_TOTEM_USE, 0.5f, 1f); + NMSTitle.sendTitle(player, Utils.f("&9&lCASINO"), Utils.f("&fYou have won &a" + r + "&f!"), 3 * 20, 3 * 20, 1 * 20); + break; + } + }); + } + + private BlockFace yawToDirection() { + return AXIS[Math.round(this.originLocation.getYaw() / 90f) & 0x3]; + } + + private Item getMoneyItem() { + ItemStack stack = new ItemFactory(Material.PAPER).setName(random.nextInt(999999) + "").build(); + Item item = this.originLocation.getWorld().dropItem(this.getNextOffset(this.originLocation.clone().add(0, 1.4, 0), 0.4, false), stack); + item.setPickupDelay(Integer.MAX_VALUE); + return item; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/slot/SlotReward.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/slot/SlotReward.java new file mode 100644 index 0000000..6b6bc76 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/slot/SlotReward.java @@ -0,0 +1,25 @@ +package net.grandtheftmc.core.casino.slot; + +public class SlotReward { + private final SlotItem slotItem; + private final int id; + private final int[] angle; + + public SlotReward(SlotItem slotItem, int id, int... angle) { + this.slotItem = slotItem; + this.id = id; + this.angle = angle; + } + + public SlotItem getRewardItem() { + return slotItem; + } + + public int getId() { + return id; + } + + public int[] getAngle() { + return angle; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/slot/SlotWheelType.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/slot/SlotWheelType.java new file mode 100644 index 0000000..9dc0cea --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/slot/SlotWheelType.java @@ -0,0 +1,107 @@ +package net.grandtheftmc.core.casino.slot; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.servers.ServerType; +import net.grandtheftmc.core.util.Utils; +import org.bukkit.Material; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +public enum SlotWheelType { + + ONE(817, new SlotReward[] { + new SlotReward(SlotItem.SEVEN, 4, 345, 0, 15),//0 + new SlotReward(SlotItem.CHERRY, 5, 15, 30, 45),//30 + new SlotReward(SlotItem.LSD, 6, 45, 60, 75),//60 + new SlotReward(SlotItem.MDMA, 7, 75, 90, 105),//90 + new SlotReward(SlotItem.LSD, 8, 105, 120, 135),//120 + new SlotReward(SlotItem.CHERRY, 9, 135, 150, 165),//150 + new SlotReward(SlotItem.DILDO, 10, 165, 180, 195),//180 + new SlotReward(SlotItem.MDMA, 11, 195, 210, 225),//210 + new SlotReward(SlotItem.LSD, 12, 225, 240, 255),//240 + new SlotReward(SlotItem.DILDO, 1, 255, 270, 285),//270 + new SlotReward(SlotItem.MDMA, 2, 285, 300, 315),//300 + new SlotReward(SlotItem.LSD, 3, 315, 330, 345),//330 + }), + + TWO(818, new SlotReward[] { + new SlotReward(SlotItem.CHERRY, 4, 345, 0, 15),//0 + new SlotReward(SlotItem.SEVEN, 5, 15, 30, 45),//30 + new SlotReward(SlotItem.MDMA, 6, 45, 60, 75),//60 + new SlotReward(SlotItem.LSD, 7, 75, 90, 105),//90 + new SlotReward(SlotItem.DILDO, 8, 105, 120, 135),//120 + new SlotReward(SlotItem.MDMA, 9, 135, 150, 165),//150 + new SlotReward(SlotItem.LSD, 10, 165, 180, 195),//180 + new SlotReward(SlotItem.DILDO, 11, 195, 210, 225),//210 + new SlotReward(SlotItem.LSD, 12, 225, 240, 255),//240 + new SlotReward(SlotItem.CHERRY, 1, 255, 270, 285),//270 + new SlotReward(SlotItem.MDMA, 2, 285, 300, 315),//300 + new SlotReward(SlotItem.LSD, 3, 315, 330, 345),//330 + }), + + THREE(819, new SlotReward[] { + new SlotReward(SlotItem.CHERRY, 4, 345, 0, 15),//0 + new SlotReward(SlotItem.LSD, 5, 15, 30, 45),//30 + new SlotReward(SlotItem.MDMA, 6, 45, 60, 75),//60 + new SlotReward(SlotItem.DILDO, 7, 75, 90, 105),//90 + new SlotReward(SlotItem.CHERRY, 8, 105, 120, 135),//120 + new SlotReward(SlotItem.LSD, 9, 135, 150, 165),//150 + new SlotReward(SlotItem.MDMA, 10, 165, 180, 195),//180 + new SlotReward(SlotItem.DILDO, 11, 195, 210, 225),//210 + new SlotReward(SlotItem.LSD, 12, 225, 240, 255),//240 + new SlotReward(SlotItem.MDMA, 1, 255, 270, 285),//270 + new SlotReward(SlotItem.LSD, 2, 285, 300, 315),//300 + new SlotReward(SlotItem.SEVEN, 3, 315, 330, 345),//330 + }), + ; + + private int durability; + private SlotReward[] slotRewards; + + SlotWheelType(int durability, SlotReward[] slotRewards) { + this.durability = durability; + this.slotRewards = slotRewards; + } + + public int getDurability() { + return durability; + } + + public SlotReward[] getSlotRewards() { + return slotRewards; + } + + public SlotReward getRewardByAngle(double angle) { + + if (this.slotRewards.length < 1) { + return null; + } + + for(SlotReward reward : this.slotRewards) { + if ((angle >= 0 && angle < 15 ) || (angle >= 345 && angle < 360)) + return reward; + + if (angle >= reward.getAngle()[0] && angle < reward.getAngle()[2]) { + return reward; + } + } + + return null; + } + + public ItemStack getModel() { + ItemStack model = new ItemStack(Material.DIAMOND_SWORD); + ItemMeta modelMeta = model.getItemMeta(); + + model.setDurability((short) (durability)); + + if(Core.getSettings().getType() == ServerType.VICE) modelMeta.setUnbreakable(true); + else modelMeta.spigot().setUnbreakable(true); + modelMeta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE); + + model.setItemMeta(modelMeta); + + return model; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/slot/SpinState.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/slot/SpinState.java new file mode 100644 index 0000000..1deb5e4 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/slot/SpinState.java @@ -0,0 +1,5 @@ +package net.grandtheftmc.core.casino.slot; + +public enum SpinState { + SPINNING, STOPPING, END, ; +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/slot/menu/SlotMachineBetMenu.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/slot/menu/SlotMachineBetMenu.java new file mode 100644 index 0000000..46c07a6 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/slot/menu/SlotMachineBetMenu.java @@ -0,0 +1,62 @@ +package net.grandtheftmc.core.casino.slot.menu; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.Utils; +import net.grandtheftmc.core.casino.coins.ChipAmount; +import net.grandtheftmc.core.casino.game.CasinoGame; +import net.grandtheftmc.core.casino.game.bet.CasinoBet; +import net.grandtheftmc.core.casino.game.bet.SlotMachineBet; +import net.grandtheftmc.core.inventory.CoreMenu; +import net.grandtheftmc.core.inventory.CoreMenuFlag; +import net.grandtheftmc.core.inventory.button.ClickableItem; +import net.grandtheftmc.core.inventory.button.IMenuClickAction; +import net.grandtheftmc.core.util.C; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.core.util.title.NMSTitle; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; + +public class SlotMachineBetMenu extends CoreMenu { + + private final CasinoGame game; + + public SlotMachineBetMenu(CasinoGame game) { + super(3, "Place your bet", CoreMenuFlag.CLOSE_ON_NULL_CLICK, CoreMenuFlag.RESET_CURSOR_ON_OPEN); + this.game = game; + + addItem(new ClickableItem(11, ChipAmount.TEN.getItemStack(), (player, clickType) -> this.proceed(player, SlotMachineBet.TINY))); + addItem(new ClickableItem(12, ChipAmount.FIFTY.getItemStack(), (player, clickType) -> this.proceed(player, SlotMachineBet.SMALL))); + addItem(new ClickableItem(13, ChipAmount.HUNDRED.getItemStack(), (player, clickType) -> this.proceed(player, SlotMachineBet.HIGH))); + addItem(new ClickableItem(14, ChipAmount.THREE_HUNDRED.getItemStack(), (player, clickType) -> this.proceed(player, SlotMachineBet.INSANE))); + addItem(new ClickableItem(15, ChipAmount.EIGHT_HUNDRED.getItemStack(), (player, clickType) -> this.proceed(player, SlotMachineBet.ALL_IN))); + + + addItem(new ClickableItem(26, new ItemFactory(Material.GOLD_INGOT).setName(C.YELLOW + C.BOLD + "Rewards").setLore("", C.GRAY + "Click to see the roll rewards!").build(), new IMenuClickAction(){ + + @Override + public void onClick(Player player, ClickType clickType) { + new SlotRewardMenu().openInventory(player); + } + })); + } + + private void proceed(Player player, SlotMachineBet bet) { + player.closeInventory(); + if(game.isInProgress()) { + NMSTitle.sendTitle(player, "", Utils.f("&cThis Casino Game is in progress"), 1*20, 2*20, 1*20); + player.sendMessage(Lang.CASINO.f("This Casino Game is in progress.")); + return; + } + + if(!Core.getCoinManager().hasCasinoChips(player, bet.getCost().getAmount())) { + NMSTitle.sendTitle(player, "", Utils.f("&cYou cannot afford this bet"), 1*20, 2*20, 1*20); + player.sendMessage(Lang.CASINO.f("You cannot afford that bet, You have " + Core.getCoinManager().getTotalCasinoChips(player) + " chips.")); + return; + } + + Core.getCoinManager().removeCasinoChips(player, bet.getCost().getAmount()); + ((CasinoBet) game).start(player, bet); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/slot/menu/SlotRewardMenu.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/slot/menu/SlotRewardMenu.java new file mode 100644 index 0000000..444d052 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/casino/slot/menu/SlotRewardMenu.java @@ -0,0 +1,27 @@ +package net.grandtheftmc.core.casino.slot.menu; + +import org.bukkit.Material; + +import net.grandtheftmc.core.inventory.CoreMenu; +import net.grandtheftmc.core.inventory.button.MenuItem; +import net.grandtheftmc.core.util.C; +import net.grandtheftmc.core.util.factory.ItemFactory; + +public class SlotRewardMenu extends CoreMenu { + + /** + * Create a new SlotRewardMenu that tells players the rewards for winning. + */ + public SlotRewardMenu() { + super(3, "Rewards"); + + addItem(new MenuItem(10, new ItemFactory(Material.GOLD_INGOT).setName(C.WHITE + C.BOLD + "Roll 3x " + C.GOLD + C.BOLD + "'7's").setLore("", C.WHITE + "Reward: " + C.YELLOW + "$75,000-$60,000,000").build(), false)); + addItem(new MenuItem(11, new ItemFactory(Material.GOLD_INGOT).setName(C.WHITE + C.BOLD + "Roll 3x " + C.GOLD + C.BOLD + "'Cherry's").setLore("", C.WHITE + "Reward: " + C.YELLOW + "$15,000-$12,000,000").build(), false)); + addItem(new MenuItem(12, new ItemFactory(Material.GOLD_INGOT).setName(C.WHITE + C.BOLD + "Roll 3x " + C.GOLD + C.BOLD + "'Dildos's").setLore("", C.WHITE + "Reward: " + C.YELLOW + "$7,500-$2,400,000").build(), false)); + addItem(new MenuItem(13, new ItemFactory(Material.GOLD_INGOT).setName(C.WHITE + C.BOLD + "Roll 3x " + C.GOLD + C.BOLD + "'LSD's").setLore("", C.WHITE + "Reward: " + C.YELLOW + "$1,500-$1,200,000").build(), false)); + addItem(new MenuItem(14, new ItemFactory(Material.GOLD_INGOT).setName(C.WHITE + C.BOLD + "Roll 3x " + C.GOLD + C.BOLD + "'MDMA's").setLore("", C.WHITE + "Reward: " + C.YELLOW + "$750-$600,000").build(), false)); + addItem(new MenuItem(15, new ItemFactory(Material.GOLD_INGOT).setName(C.WHITE + C.BOLD + "Roll 2 " + C.GOLD + C.BOLD + "'Identicals").setLore("", C.WHITE + "Reward: " + C.YELLOW + "$450-$360,000").build(), false)); + addItem(new MenuItem(16, new ItemFactory(Material.GOLD_INGOT).setName(C.WHITE + C.BOLD + "Per " + C.GOLD + C.BOLD + "Cherry").setLore("", C.WHITE + "Reward: " + C.YELLOW + "$300-$240,000").build(), false)); + } +} + diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/BucksCommand.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/BucksCommand.java new file mode 100644 index 0000000..0786cef --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/BucksCommand.java @@ -0,0 +1,200 @@ +package net.grandtheftmc.core.commands; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.events.UpdateEvent; +import net.grandtheftmc.core.events.UpdateEvent.UpdateReason; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserDAO; +import net.grandtheftmc.core.users.UserManager; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.core.util.Utils; +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.UUID; + +public class BucksCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command cmd, String lbl, String[] args) { + UserManager um = Core.getUserManager(); + if (args.length == 0) { + if (!(s instanceof Player)) { + s.sendMessage(Lang.NOTPLAYER.s()); + return true; + } + s.sendMessage( + Utils.f("&7You have &a" + um.getLoadedUser(((Player) s).getUniqueId()).getBucks() + " Bucks&7!")); + return true; + } + if (s instanceof Player) { + User u = um.getLoadedUser(((Player) s).getUniqueId()); + if (!u.isAdmin()) { + s.sendMessage(Utils.f("&cYou do not have permission to execute this command!")); + return true; + } + } + switch (args[0].toLowerCase()) { + case "give": { + if (args.length != 3) { + s.sendMessage(Utils.f("&c/bucks give ")); + return true; + } + int amnt; + try { + amnt = Integer.parseInt(args[2]); + } catch (NumberFormatException e) { + s.sendMessage(Utils.f("&cThe amount must be a numerical value!")); + return true; + } + Player player = Bukkit.getPlayer(args[1]); + if (player != null) { + User user = um.getLoadedUser(player.getUniqueId()); + user.addBucks(amnt); + s.sendMessage(Utils.f("&7You gave &a$" + amnt + "&7 to &a" + player.getName())); + Bukkit.getPluginManager().callEvent(new UpdateEvent(player, UpdateReason.BUCKS)); + return true; + } +// Core.getSQL().updateAsyncLater("update users set bucks=bucks+" + amnt + " where lastname='" + args[1] + "';"); + ServerUtil.runTaskAsync(() -> UserDAO.addUserBucksByName(args[1], amnt)); + s.sendMessage(Utils.f("&cThat player is not online, so the bucks have been forcibly updated in the database.")); + return true; + } + case "giveuuid": { + if (args.length != 3) { + s.sendMessage(Utils.f("&c/bucks give ")); + return true; + } + int amnt; + try { + amnt = Integer.parseInt(args[2]); + } catch (NumberFormatException e) { + s.sendMessage(Utils.f("&cThe amount must be a numerical value!")); + return true; + } + UUID uuid = UUID.fromString(args[1]); + Player player = Bukkit.getPlayer(uuid); + if (player != null) { + User user = um.getLoadedUser(uuid); + user.addBucks(amnt); + s.sendMessage(Utils.f("&7You gave &a$" + amnt + "&7 to &a" + player.getName())); + Bukkit.getPluginManager().callEvent(new UpdateEvent(player, UpdateReason.BUCKS)); + return true; + } +// Core.getSQL().updateAsyncLater("update users set bucks=bucks+" + amnt + " where uuid='" + uuid + "';"); + ServerUtil.runTaskAsync(() -> UserDAO.addUserBucks(uuid, amnt)); + s.sendMessage(Utils.f("&7You gave &a$" + amnt + "&7 to &a" + uuid + "&7.")); + return true; + } + case "take": { + if (args.length != 3) { + s.sendMessage(Utils.f("&c/bucks take ")); + return true; + } + int amnt; + try { + amnt = Integer.parseInt(args[2]); + } catch (NumberFormatException e) { + s.sendMessage(Utils.f("&cThe amount must be a numerical value!")); + return true; + } + Player player = Bukkit.getPlayer(args[1]); + if (player != null) { + User user = um.getLoadedUser(player.getUniqueId()); + user.takeBucks(amnt); + s.sendMessage(Utils.f("&7You took &a$" + amnt + "&7 to &a" + player.getName())); + Bukkit.getPluginManager().callEvent(new UpdateEvent(player, UpdateReason.BUCKS)); + return true; + } +// Core.getSQL().updateAsyncLater("update users set bucks=bucks-" + amnt + " where lastname='" + args[1] + "';"); + ServerUtil.runTaskAsync(() -> UserDAO.subtractUserBucksByName(args[1], amnt)); + s.sendMessage(Utils.f("&cThat player is not online, so the bucks have been forcibly updated in the database.")); + return true; + } + case "set": { + if (args.length != 3) { + s.sendMessage(Utils.f("&c/bucks set ")); + return true; + } + int amnt; + try { + amnt = Integer.parseInt(args[2]); + } catch (NumberFormatException e) { + s.sendMessage(Utils.f("&cThe amount must be a numerical value!")); + return true; + } + Player player = Bukkit.getPlayer(args[1]); + if (player != null) { + User user = um.getLoadedUser(player.getUniqueId()); + user.setBucks(amnt); + s.sendMessage(Utils.f("&7You set &a" + player.getName() + "&7's Bucks to &a$" + amnt + "&7.")); + Bukkit.getPluginManager().callEvent(new UpdateEvent(player, UpdateReason.BUCKS)); + return true; + } +// Core.getSQL().updateAsyncLater("update users set bucks=" + amnt + " where lastname='" + args[1] + "';"); + ServerUtil.runTaskAsync(() -> UserDAO.updateUserBucksByName(args[1], amnt)); + s.sendMessage(Utils.f("&cThat player is not online, so the bucks have been forcibly updated in the database.")); + return true; + } + case "balance": + if (args.length != 2) { + s.sendMessage(Utils.f("/bucks balance ")); + return true; + } + UUID sender = ((Player) s).getUniqueId(); + String name = args[1]; + Player player = Bukkit.getPlayer(args[1]); + if (player != null) { + User user = um.getLoadedUser(player.getUniqueId()); + s.sendMessage(Utils.f("&7The player &a" + player.getName() + "&7 has &a$" + user.getBucks() + " Bucks&7.")); + return true; + } + s.sendMessage(Utils.f("&cThat player is not online, so hold on a second while we gather the information from the database.")); + + ServerUtil.runTaskAsync(() -> { + int value = UserDAO.fetchUserBucksByName(name); + + ServerUtil.runTask(() -> { + if(value == -1) Bukkit.getPlayer(sender).sendMessage(Utils.f("&cThat player does not exist in the database!")); + else Bukkit.getPlayer(sender).sendMessage(Utils.f("&7The player &a" + name + "&7 has &a$" + value + " Bucks&7.")); + }); + }); + +// new BukkitRunnable() { +// @Override +// public void run() { +//// ResultSet rs = Core.getSQL().query("select bucks from users where lastname='" + name + "';"); +// int i; +// try { +// i = rs.next() ? rs.getInt("bucks") : -1; +// rs.close(); +// } catch (SQLException e) { +// e.printStackTrace(); +// return; +// } +// new BukkitRunnable() { +// @Override +// public void run() { +// if (i == -1) +// Bukkit.getPlayer(sender) +// .sendMessage(Utils.f("&cThat player does not exist in the database!")); +// else +// Bukkit.getPlayer(sender).sendMessage( +// Utils.f("&7The player &a" + name + "&7 has &a$" + i + " Bucks&7.")); +// } +// }.runTask(Core.getInstance()); +// } +// }.runTaskAsynchronously(Core.getInstance()); + default: + s.sendMessage(Utils.f("&c/bucks balance ")); + s.sendMessage(Utils.f("&c/bucks set ")); + s.sendMessage(Utils.f("&c/bucks give ")); + s.sendMessage(Utils.f("&c/bucks take ")); + return true; + } + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/BungeeCommand.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/BungeeCommand.java new file mode 100644 index 0000000..333a663 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/BungeeCommand.java @@ -0,0 +1,54 @@ +package net.grandtheftmc.core.commands; + +import com.google.common.collect.Iterables; +import com.google.common.io.ByteArrayDataOutput; +import com.google.common.io.ByteStreams; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import org.bukkit.Bukkit; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +/** + * Created by Timothy Lampen on 2017-09-04. + */ +public class BungeeCommand extends CoreCommand { + public BungeeCommand() { + super("bungeecommand", "to do bungeecommands on a bukkit server"); + } + + @Override + public void execute(CommandSender sender, String[] args) { + if(!sender.isOp()) { + sender.sendMessage(Lang.NOPERM.f("")); + return; + } + if(args.length==0) { + sender.sendMessage(Utils.f("&7/bungeecommand &e- Executes the selected command on the bungee server.")); + return; + } + StringBuilder sb = new StringBuilder(); + for(int i = 0; i onlinePlayers = Bukkit.getOnlinePlayers(); + if (!(s instanceof Player)) { + for (int i = 0; i < 300; i++) + onlinePlayers + .stream() + .filter(target -> !target.hasPermission("clearchat.staff")) + .forEach(target -> target.sendMessage("")); + s.sendMessage(Lang.GTM.f("&7Chat Cleared!")); + return true; + } + Player player = (Player) s; + if (!player.hasPermission("clearchat.staff")) { + player.sendMessage(Lang.NOPERM.toString()); + return true; + } + for (int i = 0; i < 300; i++) + onlinePlayers + .stream() + .filter(target -> !target.hasPermission("clearchat.staff")) + .forEach(target -> target.sendMessage("")); + Bukkit.broadcastMessage(Utils.f(IconConverter.convertInput("&7Chat has been cleared, sorry for the inconvenience &r:pig:"))); + return true; + } +} \ No newline at end of file diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/ConfigCommand.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/ConfigCommand.java new file mode 100644 index 0000000..a3229a2 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/ConfigCommand.java @@ -0,0 +1,40 @@ +package net.grandtheftmc.core.commands; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.util.Utils; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; + +public class ConfigCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command c, String lbl, String[] args) { + if (!s.isOp()) { + s.sendMessage(Utils.f("&cYou do not have permission to execute this command!")); + return true; + } + if (args.length == 0) { + s.sendMessage(Utils.f("/config reload - Reload the config. Beware: this will delete changes made since the last save/restart!")); + s.sendMessage(Utils.f("/config save - Save the config. Beware: this will delete changes made in the config since the last reload/restart")); + return true; + } + switch (args[0].toLowerCase()) { + case "reload": { + Core.getInstance().reload(); + s.sendMessage(Utils.f("Reloaded the config.")); + return true; + } + case "save": { + Core.getInstance().save(false); + s.sendMessage(Utils.f("Saved the config.")); + return true; + } + default: + s.sendMessage(Utils.f("/config reload - Reload the config. Beware: this will delete changes made since the last save/restart!")); + s.sendMessage(Utils.f("/config save - Save the config. Beware: this will delete changes made in the config since the last reload/restart")); + return true; + } + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/CooldownCommand.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/CooldownCommand.java new file mode 100644 index 0000000..8d1f5e5 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/CooldownCommand.java @@ -0,0 +1,66 @@ +package net.grandtheftmc.core.commands; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.users.CooldownPayload; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.util.Utils; +import org.bukkit.Bukkit; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +/** + * Created by Timothy Lampen on 2017-08-26. + */ +public class CooldownCommand extends CoreCommand { + + + public CooldownCommand() { + super("cooldown", "changes cooldowns for a player"); + } + + @Override + public void execute(CommandSender sender, String[] args) { + if(args.length==0) { + sender.sendMessage(Utils.f("&e/cooldown remove ")); + sender.sendMessage(Utils.f("&e/cooldown list ")); + return; + } + if(sender instanceof Player && !Core.getUserManager().getLoadedUser(((Player)sender).getUniqueId()).getUserRank().isHigherThan(UserRank.ADMIN)) { + sender.sendMessage(Lang.NOPERM.f("")); + return; + } + switch (args[0].toLowerCase()) { + case "list": { + Player target = Bukkit.getPlayer(args[1]); + if(target==null){ + sender.sendMessage(Lang.HEY.f("&7That player is currently not online!")); + return; + } + User user = Core.getUserManager().getLoadedUser(target.getUniqueId()); + for(CooldownPayload cd : user.getCooldowns()) { + sender.sendMessage(Utils.f("&a" + cd.getId() + " &cExpire: " + cd.getExpireTime())); + } + break; + } + case "remove" : { + Player target = Bukkit.getPlayer(args[2]); + if(target==null){ + sender.sendMessage(Lang.HEY.f("&7That player is currently not online!")); + return; + } + String id = args[1].toLowerCase(); + User user = Core.getUserManager().getLoadedUser(target.getUniqueId()); + if(!user.isOnCooldown(id)){ + sender.sendMessage(Lang.HEY.f("&7That player isn't on a cooldown for that ID")); + return; + } + user.removeCooldown(id); + sender.sendMessage(Lang.HEY.f("&7You have removed the cooldown for &b" + target.getName() + " &7with id &e" + id)); + target.sendMessage(Lang.HEY.f("&7The cooldown &e" + id + " &7has been removed from your player.")); + break; + } + } + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/CoreCommand.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/CoreCommand.java new file mode 100644 index 0000000..ae2d7b9 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/CoreCommand.java @@ -0,0 +1,124 @@ +package net.grandtheftmc.core.commands; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.users.User; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandMap; +import org.bukkit.command.CommandSender; +import org.bukkit.command.defaults.BukkitCommand; +import org.bukkit.entity.Player; + +import java.lang.reflect.Field; +import java.util.Arrays; + +/** + * Created by Luke Bingham on 06/07/2017. + */ +public abstract class CoreCommand extends BukkitCommand { + + private static CommandMap commandMap = null; + + private String noPermission = ChatColor.RED + "You don't have permission to use this!"; + private final String description; + private String[] aliases; + + /** + * Construct a new command. + * + * @param command command label + * @param description command description + * @param aliases command aliases + */ + public CoreCommand(String command, String description, String... aliases) { + super(command); + this.description = description; + this.aliases = aliases; + + register(); + } + + /** + * Construct a new command. + * + * @param command command label + * @param description command description + */ + public CoreCommand(String command, String description) { + super(command); + this.description = description; + + register(); + } + + @Override + public boolean execute(CommandSender commandSender, String s, String[] strings) { + if(commandSender instanceof Player && this instanceof RankedCommand) { + User u = Core.getUserManager().getLoadedUser(((Player) commandSender).getUniqueId()); + if(u.getUserRank().hasRank(((RankedCommand) this).requiredRank())) + execute((Sender) commandSender, strings); + else + sendNoPermission((Sender) commandSender); + return true; + } + + execute((Sender) commandSender, strings); + return true; + } + + /** + * This method is fired when the command is executed. + * + * @param sender sender type of the command + * @param args command arguments + */ + public abstract void execute(Sender sender, String[] args); + + private void register() { + if (commandMap != null) { + if(this.aliases != null && this.aliases.length > 0) + setAliases(Arrays.asList(this.aliases)); + setDescription(this.description); + commandMap.register(super.getName(), this); + return; + } + + try { + Field field = Bukkit.getServer().getClass().getDeclaredField("commandMap"); + field.setAccessible(true); + commandMap = (CommandMap) field.get(Bukkit.getServer()); + + if(this.aliases != null && this.aliases.length > 0) + setAliases(Arrays.asList(this.aliases)); + setDescription(this.description); + + commandMap.register(super.getName(), this); + } + catch (Exception e) { + e.printStackTrace(); + } + } + + public String getCommand() { + return super.getName(); + } + + @Override + public String getDescription() { + return description; + } + + /** + * This string is displayed the user
+ * when they don't have the required rank. + * + * @param input permission input + */ + public void setNoPermissionMessage(String input) { + this.noPermission = ChatColor.translateAlternateColorCodes('&', input); + } + + public void sendNoPermission(Sender sender) { + sender.sendMessage(this.noPermission); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/CouponCreditsCommand.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/CouponCreditsCommand.java new file mode 100644 index 0000000..5cacf86 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/CouponCreditsCommand.java @@ -0,0 +1,56 @@ +package net.grandtheftmc.core.commands; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserRank; +import org.bukkit.Bukkit; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +/** + * Created by Timothy Lampen on 12/7/2017. + */ +public class CouponCreditsCommand extends CoreCommand implements RankedCommand { + public CouponCreditsCommand() { + super("couponcredits", "Commands dealing with coupon credits"); + } + + @Override + public void execute(CommandSender sender, String[] args) { + if(args.length<3) { + sender.sendMessage("&7-/couponcredits give "); + return; + } + Player target = Bukkit.getPlayer(args[1]); + if(target==null) { + sender.sendMessage(Lang.REWARDS.f("&7That player is not currently online!")); + return; + } + switch (args[0].toLowerCase()) {//in case we have to add more functionality + case "give": { + int amt = 0; + try { + amt = Integer.parseInt(args[2]); + }catch (NumberFormatException nfe) { + sender.sendMessage(Lang.REWARDS.f("&6" + args[2] + " &7is not a number.")); + return; + } + User user = Core.getUserManager().getLoadedUser(target.getUniqueId()); + user.setCouponCredits(user.getCouponCredits()+amt); + target.sendMessage(Lang.REWARDS.f("&7Thanks for watching the ad! Here are &a" + amt + " &7coupon credits!")); + return; + } + } + } + + /** + * Get the required rank to use said command. + * + * @return UserRank + */ + @Override + public UserRank requiredRank() { + return UserRank.DEV; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/CrateCommand.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/CrateCommand.java new file mode 100644 index 0000000..d314144 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/CrateCommand.java @@ -0,0 +1,126 @@ +package net.grandtheftmc.core.commands; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.voting.crates.Crate; +import net.grandtheftmc.core.voting.crates.listeners.CrateOpenListener; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; + +import java.util.Optional; + +/** + * Created by Timothy Lampen on 2017-04-24. + */ +public class CrateCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender sender, Command cmd, String s, String[] args) { + if (!(sender instanceof Player)) { + sender.sendMessage(Lang.CRATES.f("&7Error: You have to be a player to execute this command!")); + return false; + } + + Player player = (Player) sender; + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + if(!user.getUserRank().isHigherThan(UserRank.ADMIN)) { + player.sendMessage(Lang.VOTE.f("&cYou do not have access to this command.")); + } + if(args.length==0 || args[0].equalsIgnoreCase("help")) { + if(user.getUserRank().isHigherThan(UserRank.ADMIN)){ + sender.sendMessage(Utils.f("&7/crate add - Creates a crate at your feet location with the specified amount of stars.")); + sender.sendMessage(Utils.f("&7/crate remove - Removes the crate that you are currently looking towards. &4/&7Uses your location so be very close to the crate&4/")); + sender.sendMessage(Utils.f("&7/crate load - Loads the rewards and crates from the config file.")); + sender.sendMessage(Utils.f("&7/crate save - Saves the rewards and crates to the config file.")); + sender.sendMessage(Utils.f("&7/crate open - Opens a specific crate at spawn.")); + } + else { + sender.sendMessage(Utils.f("&7/crate open - Opens a specific crate at spawn.")); + } + return true; + + } + if (!user.getUserRank().isHigherThan(UserRank.ADMIN) && !args[0].equalsIgnoreCase("open")) { + sender.sendMessage(Lang.CRATES.f("&7You do not have permission to execute this command.")); + return false; + } + switch (args[0].toLowerCase()) { + case "add": { + if (args.length != 2) { + sender.sendMessage(Lang.CRATES.f("&7/crate add ")); + return false; + } + if (!Utils.isInteger(args[1])) { + sender.sendMessage(Lang.CRATES.f("&7Error: The argument is not an integer!")); + return false; + } + int stars = Integer.parseInt(args[1]); + player.sendMessage(Lang.CRATES.f("&7You have created a new vote crate with " + stars + " stars!")); + Core.getCrateManager().addCrate(new Crate(player.getLocation(), stars)); + return true; + } + case "load": + Core.getSettings().setCratesConfig(Utils.loadConfig("crates")); + Core.getSettings().setCrateRewardsConfig(Utils.loadConfig("craterewards")); + Core.getCrateManager().loadCrates(); + Core.getCrateManager().loadRewards(); + player.sendMessage(Lang.CRATES.f("&7You have loaded crates & crate rewards.")); + return true; + case "save": + Core.getCrateManager().save(false); + player.sendMessage(Lang.CRATES.f("&7You have saved crates.")); + return true; + case "remove": + int amountRemoved = 0; + Crate crate; + for (Entity e : player.getNearbyEntities(1, 1, 1)) { + if (e.getType() == EntityType.ARMOR_STAND) { + if (Core.getCrateManager().getCrate((LivingEntity) e).isPresent()) { + crate = Core.getCrateManager().getCrate((LivingEntity) e).get(); + Core.getCrateManager().removeCrate(crate); + amountRemoved += 1; + } else { + ((LivingEntity) e).setHealth(0); + e.remove(); + } + } + } + player.sendMessage(Lang.CRATES.f("&7You have removed " + amountRemoved + " crates.")); + return true; + case "open": { + if(args.length != 2) { + sender.sendMessage(Lang.CRATES.f("&7/crate open ")); + return false; + } + if(!Utils.isInteger(args[1])) { + sender.sendMessage(Lang.CRATES.f("&7Error: The argument is not an integer!")); + return false; + } + int stars = Integer.parseInt(args[1]); + Optional optCrate = Core.getCrateManager().getCrates().stream().filter(c -> c.getCrateStars().getStars()==stars).findFirst(); + if(!optCrate.isPresent()) { + sender.sendMessage(Lang.CRATES.f("&7Unable to find crate with that amount of stars!")); + return false; + } + player.openInventory(CrateOpenListener.generateCratePreview(user, optCrate.get().getCrateStars()));//i know this is horrible but its only suppose to be temp. + user.setSelectedCrate(optCrate.get()); + return true; + } + default: + sender.sendMessage(Utils.f("&7/crate open - Creates a crate at your feet location with the specified amount of stars.")); + sender.sendMessage(Utils.f("&7/crate add - Creates a crate at your feet location with the specified amount of stars.")); + sender.sendMessage(Utils.f("&7/crate remove - Removes the crate that you are currently looking towards.")); + sender.sendMessage(Utils.f("&7/crate load - Loads the rewards and crates from the config file.")); + sender.sendMessage(Utils.f("&7/crate save - Saves the rewards and crates to the config file.")); + return false; + } + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/CrowbarCommand.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/CrowbarCommand.java new file mode 100644 index 0000000..2e05952 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/CrowbarCommand.java @@ -0,0 +1,318 @@ +package net.grandtheftmc.core.commands; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.users.UserDAO; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.events.UpdateEvent; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserManager; +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitRunnable; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.UUID; + +/** + * Created by Timothy Lampen on 2017-04-24. + */ +public class CrowbarCommand implements CommandExecutor { + + @Override + @SuppressWarnings("deprecation") + public boolean onCommand(CommandSender s, Command cmd, String lbl, String[] args) { + UserManager um = Core.getUserManager(); + if (args.length == 0) { + if (!(s instanceof Player)) { + s.sendMessage(Lang.NOTPLAYER.s()); + return true; + } + s.sendMessage( + Utils.f("&7You have &e" + um.getLoadedUser(((Player) s).getUniqueId()).getCrowbars() + " &7Crowbars!")); + return true; + } + if (s instanceof Player) { + User u = um.getLoadedUser(((Player) s).getUniqueId()); + if (!u.isAdmin() && !args[0].equalsIgnoreCase("balance")) { + s.sendMessage(Utils.f("&cYou do not have permission to execute this command!")); + return true; + } + } + switch (args[0].toLowerCase()) { + case "give": { + if (args.length != 3) { + s.sendMessage(Utils.f("&c/crowbar give ")); + return true; + } + int amnt; + try { + amnt = Integer.parseInt(args[2]); + } catch (NumberFormatException e) { + s.sendMessage(Utils.f("&cThe amount must be a numerical value!")); + return true; + } + Player player = Bukkit.getPlayer(args[1]); + if (player != null) { + User user = um.getLoadedUser(player.getUniqueId()); + user.addCrowbars(amnt); + user.insertLog(player, "giveCrowbarsCommand", "CROWBARS", amnt + " Crowbars", amnt, 0); + Bukkit.getPluginManager().callEvent(new UpdateEvent(player, UpdateEvent.UpdateReason.CROWBARS)); + s.sendMessage(Utils.f("&7You gave &e" + amnt + " Crowbars&7 to &a" + player.getName())); + return true; + } +// Core.getSQL().updateAsyncLater("update users set crowbars=crowbars+" + amnt + " where lastname='" + args[1] + "';"); + + ServerUtil.runTaskAsync(() -> { + UUID uuid = UserDAO.getUuidByName(args[1]); + UserDAO.addUserCrowbars(uuid, amnt); +// UUID uuid = UserDAO.getUuidByName(args[1]); + + if(uuid == null) Core.log("Error while logging giveCrowbarsCommand for uuid " + uuid + ", name " + args[1] + ", amnt " + amnt); + else Utils.insertLog(uuid, args[1], "giveCrowbarsCommand", "CROWBARS", amnt + " Crowbars", amnt, 0); + }); + + s.sendMessage(Utils.f("&cThat player is not online, so the crowbars have been forcibly updated in the database.")); +// new BukkitRunnable() { +// @Override +// public void run() { +// ResultSet rs = Core.getSQL().query("select uuid,lastname from users where lastname='" + args[1] + "';"); +// UUID uuid = null; +// String name = args[1]; +// try { +// if (rs.next()) { +// uuid = UUID.fromString(rs.getString("uuid")); +// name = rs.getString("lastname"); +// } +// rs.close(); +// } catch (SQLException e) { +// e.printStackTrace(); +// } +// if (uuid == null) { +// Core.log("Error while logging giveCrowbarsCommand for uuid " + uuid + ", name " + name + ", amnt " + amnt); +// } else Utils.insertLog(uuid, name, "giveCrowbarsCommand", "CROWBARS", amnt + " Crowbars", amnt, 0); +// +// } +// }.runTaskAsynchronously(Core.getInstance()); + return true; + } + case "giveuuid": { + if (args.length != 3) { + s.sendMessage(Utils.f("&c/crowbars give ")); + return true; + } + int amnt; + try { + amnt = Integer.parseInt(args[2]); + } catch (NumberFormatException e) { + s.sendMessage(Utils.f("&cThe amount must be a numerical value!")); + return true; + } + UUID uuid = UUID.fromString(args[1]); + Player player = Bukkit.getPlayer(uuid); + if (player != null) { + User user = um.getLoadedUser(uuid); + user.addCrowbars(amnt); + user.insertLog(player, "giveCrowbarsCommand", "CROWBARS", amnt + " Crowbars", amnt, 0); + Bukkit.getPluginManager().callEvent(new UpdateEvent(player, UpdateEvent.UpdateReason.CROWBARS)); + s.sendMessage(Utils.f("&7You gave &e" + amnt + " Crowbars&7 to &a" + player.getName())); + return true; + } +// Core.getSQL().updateAsyncLater("update users set crowbars=crowbars+" + amnt + " where uuid='" + uuid + "';"); + + ServerUtil.runTaskAsync(() -> { + UserDAO.addUserCrowbars(uuid, amnt); + String name = UserDAO.getNameByUuid(uuid); + + if(name == null) Core.log("Error while logging giveCrowbarsCommand for uuid " + uuid + ", name " + name + ", amnt " + amnt); + else Utils.insertLog(uuid, name, "giveCrowbarsCommand", "CROWBARS", amnt + " Crowbars", amnt, 0); + }); + + s.sendMessage(Utils.f("&cThat player is not online, so the crowbars have been forcibly updated in the database.")); +// new BukkitRunnable() { +// @Override +// public void run() { +// ResultSet rs = Core.getSQL().query("select lastname from users where uuid='" + args[1] + "';"); +// String name = null; +// try { +// if (rs.next()) { +// name = rs.getString("lastname"); +// } +// rs.close(); +// } catch (SQLException e) { +// e.printStackTrace(); +// } +// if (name == null) { +// Core.log("Error while logging giveCrowbarsCommand for uuid " + uuid + ", name " + name + ", amnt " + amnt); +// } else Utils.insertLog(uuid, name, "giveCrowbarsCommand", "CROWBARS", amnt + " Crowbars", amnt, 0); +// +// } +// }.runTaskAsynchronously(Core.getInstance()); + return true; + } + case "take": { + if (args.length != 3) { + s.sendMessage(Utils.f("&c/crowbars take ")); + return true; + } + int amnt; + try { + amnt = Integer.parseInt(args[2]); + } catch (NumberFormatException e) { + s.sendMessage(Utils.f("&cThe amount must be a numerical value!")); + return true; + } + Player player = Bukkit.getPlayer(args[1]); + if (player != null) { + User user = um.getLoadedUser(player.getUniqueId()); + user.takeCrowbars(amnt); + user.insertLog(player, "takeCrowbarsCommand", "CROWBARS", amnt + " Crowbars", -amnt, 0); + Bukkit.getPluginManager().callEvent(new UpdateEvent(player, UpdateEvent.UpdateReason.CROWBARS)); + s.sendMessage(Utils.f("&7You took &e" + amnt + " Crowbars&7 to &a" + player.getName())); + return true; + } +// Core.getSQL().updateAsyncLater("update users set crowbars=crowbars-" + amnt + " where lastname='" + args[1] + "';"); + + ServerUtil.runTaskAsync(() -> { + UUID uuid = UserDAO.getUuidByName(args[1]); + UserDAO.subtractUserCrowbars(uuid, amnt); + + if(uuid == null) Core.log("Error while logging takeCrowbarsCommand for uuid " + uuid + ", name " + args[1] + ", amnt " + -amnt); + else Utils.insertLog(uuid, args[1], "takeCrowbarsCommand", "CROWBARS", amnt + " Crowbars", -amnt, 0); + }); + + s.sendMessage(Utils.f("&cThat player is not online, so the crowbars have been forcibly updated in the database.")); +// new BukkitRunnable() { +// @Override +// public void run() { +// ResultSet rs = Core.getSQL().query("select uuid,lastname from users where lastname='" + args[1] + "';"); +// UUID uuid = null; +// String name = args[1]; +// try { +// if (rs.next()) { +// uuid = UUID.fromString(rs.getString("uuid")); +// name = rs.getString("lastname"); +// } +// rs.close(); +// } catch (SQLException e) { +// e.printStackTrace(); +// } +// if (uuid == null) { +// Core.log("Error while logging takeCrowbarsCommand for uuid " + uuid + ", name " + name + ", amnt " + -amnt); +// } else Utils.insertLog(uuid, name, "takeCrowbarsCommand", "CROWBARS", amnt + " Crowbars", -amnt, 0); +// +// } +// }.runTaskAsynchronously(Core.getInstance()); + return true; + } + case "set": { + if (args.length != 3) { + s.sendMessage(Utils.f("&c/crowbars set ")); + return true; + } + int amnt; + try { + amnt = Integer.parseInt(args[2]); + } catch (NumberFormatException e) { + s.sendMessage(Utils.f("&cThe amount must be a numerical value!")); + return true; + } + Player player = Bukkit.getPlayer(args[1]); + if (player != null) { + User user = um.getLoadedUser(player.getUniqueId()); + user.setCrowbars(amnt); + user.insertLog(player, "setCrowbarsCommand", "CROWBARS", amnt + " Crowbars", amnt, 0); + Bukkit.getPluginManager().callEvent(new UpdateEvent(player, UpdateEvent.UpdateReason.CROWBARS)); + s.sendMessage(Utils.f("&7You set &a" + player.getName() + "&7's Crowbars to &e" + amnt + "&7.")); + return true; + } +// Core.getSQL().updateAsyncLater("update users set crowbars=" + amnt + " where lastname='" + args[1] + "';"); + + ServerUtil.runTaskAsync(() -> { + UUID uuid = UserDAO.getUuidByName(args[1]); + UserDAO.updateUserCrowbars(uuid, amnt); + + if(uuid == null) Core.log("Error while logging setCrowbarsCommand for uuid " + uuid + ", name " + args[1] + ", amnt " + amnt); + else Utils.insertLog(uuid, args[1], "setCrowbarsCommand", "CROWBARS", amnt + " Crowbars", amnt, 0); + }); + + s.sendMessage(Utils.f("&cThat player is not online, so the crowbars have been forcibly updated in the database.")); +// new BukkitRunnable() { +// @Override +// public void run() { +// ResultSet rs = Core.getSQL().query("select uuid,lastname from users where lastname='" + args[1] + "';"); +// UUID uuid = null; +// String name = args[1]; +// try { +// if (rs.next()) { +// uuid = UUID.fromString(rs.getString("uuid")); +// name = rs.getString("lastname"); +// } +// rs.close(); +// } catch (SQLException e) { +// e.printStackTrace(); +// } +// if (uuid == null) { +// Core.log("Error while logging setCrowbarsCommand for uuid " + uuid + ", name " + name + ", amnt " + amnt); +// } else Utils.insertLog(uuid, name, "setCrowbarsCommand", "CROWBARS", amnt + " Crowbars", amnt, 0); +// +// } +// }.runTaskAsynchronously(Core.getInstance()); + return true; + } + case "balance": + if (args.length != 2) { + s.sendMessage(Utils.f("/crowbars balance ")); + return true; + } + UUID sender = ((Player) s).getUniqueId(); + String name = args[1]; + Player player = Bukkit.getPlayer(args[1]); + if (player != null) { + User user = um.getLoadedUser(player.getUniqueId()); + s.sendMessage( + Utils.f("&7The player &a" + player.getName() + "&7 has &a" + user.getCrowbars() + " Crowbars&7.")); + return true; + } + s.sendMessage(Utils.f("&cThat player is not online, so hold on a second while we gather the information from the database.")); + + ServerUtil.runTaskAsync(() -> { + UUID uuid = UserDAO.getUuidByName(args[1]); + int value = UserDAO.getUserCrowbars(uuid); + ServerUtil.runTask(() -> { + if (value == -1) Bukkit.getPlayer(sender).sendMessage(Utils.f("&cThat player does not exist in the database!")); + else Bukkit.getPlayer(sender).sendMessage(Utils.f("&7The player &a" + name + "&7 has &e" + value + " Crowbars&7.")); + }); + }); + +// Bukkit.getScheduler().scheduleAsyncDelayedTask(Core.getInstance(), () -> { +// ResultSet rs = Core.getSQL().query("select crowbars from users where lastname='" + name + "';"); +// int i; +// try { +// i = rs.next() ? rs.getInt("bucks") : -1; +// rs.close(); +// } catch (SQLException e) { +// e.printStackTrace(); +// return; +// } +// Bukkit.getScheduler().scheduleSyncDelayedTask(Core.getInstance(), () -> { +// if (i == -1) +// Bukkit.getPlayer(sender).sendMessage(Utils.f("&cThat player does not exist in the database!")); +// else +// Bukkit.getPlayer(sender).sendMessage(Utils.f("&7The player &a" + name + "&7 has &e" + i + " Crowbars&7.")); +// }); +// }); + default: + s.sendMessage(Utils.f("&c/crowbars balance [player]")); + s.sendMessage(Utils.f("&c/crowbars set ")); + s.sendMessage(Utils.f("&c/crowbars give ")); + s.sendMessage(Utils.f("&c/crowbars take ")); + return true; + } + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/DiscordCommand.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/DiscordCommand.java new file mode 100644 index 0000000..9a663b4 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/DiscordCommand.java @@ -0,0 +1,20 @@ +package net.grandtheftmc.core.commands; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class DiscordCommand extends CoreCommand { + + public DiscordCommand() { + super("discord", "Get the invite link to Discord."); + } + + @Override + public void execute(Player sender, String[] args) { + sender.sendMessage(Lang.DISCORD.f("&7Discord Invite link: &9" + (Core.getSettings().isSister() ? "https://discord.gg/ZtpMZ6g" : "https://discord.gg/4P6DVKZ"))); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/EditModeCommand.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/EditModeCommand.java new file mode 100644 index 0000000..0da18d9 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/EditModeCommand.java @@ -0,0 +1,111 @@ +package net.grandtheftmc.core.commands; + +import java.util.UUID; + +import org.bukkit.Bukkit; +import org.bukkit.GameMode; +import org.bukkit.entity.Player; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.util.Utils; + +public class EditModeCommand extends CoreCommand implements RankedCommand { + + /** + * Construct a new command. + */ + public EditModeCommand() { + super("editmode", "A staff command for allowing map editing."); + super.setNoPermissionMessage(Utils.f("&cYou do not have permission to execute this command!")); + } + + /** + * This method is fired when the command is executed. + * + * @param sender sender type of the command + * @param args command arguments + */ + @Override + public void execute(Player sender, String[] args) { + if (args.length >= 1) { + if (Bukkit.getPlayer(args[0]) != null) { + Player target = Bukkit.getPlayer(args[0]); + User u = Core.getUserManager().getLoadedUser(target.getUniqueId()); + if (u.hasEditMode()) { + u.setEditMode(false); + target.setGameMode(Core.getSettings().getDefaultGameMode()); + } else { + u.setEditMode(true); + target.setGameMode(GameMode.CREATIVE); + } + + sender.sendMessage(Utils.f("You " + (u.hasEditMode() ? "enabled" : "disabled") + " editmode for " + u.getColoredName(target))); + return; + } + } + + UUID uuid = sender.getUniqueId(); + User u = Core.getUserManager().getLoadedUser(uuid); + + boolean mode = !u.hasEditMode(); + u.setEditMode(mode); + sender.setGameMode(mode ? GameMode.CREATIVE : Core.getSettings().getDefaultGameMode()); + + sender.sendMessage(Utils.f("&a&lEDITMODE&7&l> &fYou " + (mode ? "enabled" : "disabled") + " edit mode.")); + } + + /** + * Get the required rank to use said command. + * + * @return UserRank + */ + @Override + public UserRank requiredRank() { + //return UserRank.ADMIN; + return UserRank.BUILDER; + } + + // @Override +// public boolean onCommand(CommandSender s, Command cmd, String label, String[] args) { +// if (!(s instanceof Player)) { +// if (args.length == 1) { +// if (Bukkit.getPlayer(args[0]) != null) { +// Player target = Bukkit.getPlayer(args[0]); +// User u = Core.getUserManager().getLoadedUser(target.getUniqueId()); +// if (u.hasEditMode()) { +// u.setEditMode(false); +// target.setGameMode(Core.getSettings().getDefaultGameMode()); +// } else { +// u.setEditMode(true); +// target.setGameMode(GameMode.CREATIVE); +// } +// s.sendMessage(Utils.f("You " + (u.hasEditMode() ? "enabled" : "disabled") + +// " editmode for " + u.getColoredName(target))); +// return true; +// } +// } +// s.sendMessage(Utils.f("&cYou are not a player!")); +// return true; +// } +// Player player = (Player) s; +// UUID uuid = ((Player) s).getUniqueId(); +// User u = Core.getUserManager().getLoadedUser(uuid); +// if (!u.isAdmin() && !s.hasPermission("editmode")) { +// s.sendMessage(Utils.f("&cYou do not have permission to execute this command!")); +// u.setEditMode(false); +// return true; +// } +// boolean mode = !u.hasEditMode(); +// u.setEditMode(mode); +// if (mode) { +// player.setGameMode(GameMode.CREATIVE); +// } else { +// player.setGameMode(Core.getSettings().getDefaultGameMode()); +// } +// +// s.sendMessage(Utils.f("&a&lEDITMODE&7&l> &fYou " + (mode ? "enabled" : "disabled") + " edit mode.")); +// return true; +// } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/EventTagCommand.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/EventTagCommand.java new file mode 100644 index 0000000..c91ea60 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/EventTagCommand.java @@ -0,0 +1,157 @@ +package net.grandtheftmc.core.commands; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.Utils; +import net.grandtheftmc.core.users.eventtag.EventTag; +import net.grandtheftmc.core.users.UserDAO; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.users.eventtag.EventTagDAO; +import net.grandtheftmc.core.users.eventtag.TagVisibility; +import net.grandtheftmc.core.util.ServerUtil; +import org.bukkit.Bukkit; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.Set; +import java.util.UUID; + +/** + * Created by Timothy Lampen on 1/4/2018. + */ +public class EventTagCommand extends CoreCommand { + public EventTagCommand() { + super("eventtag", "Commands dealing with the cosmetic tag system.", "tag", "tags"); + } + + @Override + public void execute(CommandSender sender, String[] args) { + if(sender instanceof Player) { + Player player = (Player)sender; + if(!Core.getUserManager().getLoadedUser(player.getUniqueId()).getUserRank().isHigherThan(UserRank.ADMIN)) + return; + } + + if(args.length==0){ + sender.sendMessage(Utils.f("&c/eventtag setvis - &7Sets the visibility of the specified tag. 0 = everyone, 1 = people who have unlocked it, 2 = no one.")); + sender.sendMessage(Utils.f("&c/eventtag refresh - &7Refreshes the visibility cache.")); + sender.sendMessage(Utils.f("&c/eventtag give - &7Gives the specified player the specified tag.")); + sender.sendMessage(Utils.f("&c/eventtag remove - &7Removes specified tag from the player.")); + sender.sendMessage(Utils.f("&c/eventtag list - &7Lists all the eventtags that the specified player has")); + sender.sendMessage(Utils.f("&c/eventtag avaliable - &7Lists all avaliable event tags.")); + sender.sendMessage(Utils.f("&4&lNote that players may have to relog for the changes to take place.")); + return; + } + + if(args[0].equalsIgnoreCase("avaliable")) { + for(EventTag tag : EventTag.values()) { + sender.sendMessage(Utils.f("&6Name: &a" + tag.toString() + " &6Visibility: &a" + EventTagDAO.getTagVisibility(tag))); + } + return; + } + if(args[0].equalsIgnoreCase("refresh")) { + ServerUtil.runTaskAsync(EventTagDAO::refreshTagVisiblity); + sender.sendMessage(Lang.REWARDS.f("&aYou have refreshed the local tag visibility cache.")); + return; + } + if(args[0].equalsIgnoreCase("setvis")) { + if(args.length!=3) { + sender.sendMessage(Utils.f("&c/eventtag setvis - &7Sets the visibility of the specified tag. 0 = everyone, 1 = people who have unlocked it, 2 = no one.")); + return; + } + EventTag tag; + try { + tag = EventTag.valueOf(args[1].toUpperCase()); + }catch (IllegalArgumentException iae) { + sender.sendMessage(Lang.REWARDS.f("&cThat event tag does not exist. Do the command /eventtag avaliable to view all event tags.")); + return; + } + + TagVisibility vis; + try { + vis = TagVisibility.fromID(Integer.parseInt(args[2])); + }catch (NumberFormatException nfe) { + sender.sendMessage(Lang.REWARDS.f("&a" + args[2] + " &cis not a number!")); + return; + } + + if(vis==null) { + sender.sendMessage(Lang.REWARDS.f("&a" + args[2] + " &cis not an id for visibility!")); + return; + } + ServerUtil.runTaskAsync(() -> { + EventTagDAO.setVisibility(tag, vis); + EventTagDAO.refreshTagVisiblity(); + }); + sender.sendMessage(Lang.REWARDS.f("&aYou have set the visibility of &6" + tag + " &ato &6" + vis)); + return; + } + + UUID targetUUID; + if(Bukkit.getPlayer(args[1])!=null) + targetUUID = Bukkit.getPlayer(args[1]).getUniqueId(); + else + targetUUID = UserDAO.getUuidByName(args[1]); + if(targetUUID==null) { + sender.sendMessage(Lang.REWARDS.f("&cThe requested player cannot be found online or in the database. If trying to select player that is offline, the name is case-sensitive.")); + return; + } + + if(args[0].equalsIgnoreCase("list")) { + if(args.length!=2){ + sender.sendMessage(Utils.f("&c/eventtag remove - &7Removes specified tag from the player.")); + return; + } + sender.sendMessage(Lang.REWARDS.f("&7Compiling list...")); + ServerUtil.runTaskAsync(() -> { + sender.sendMessage(Lang.REWARDS.f("&7Event Tags For &a" + args[1])); + Set tags = UserDAO.fetchReadablePlayerTags(targetUUID); + for(String t: tags) { + sender.sendMessage(Utils.f(t)); + } + }); + return; + } + + + try { + EventTag.valueOf(args[2].toUpperCase()); + }catch (IllegalArgumentException iae) { + sender.sendMessage(Lang.REWARDS.f("&cThat event tag does not exist. Do the command /eventtag avaliable to view all event tags.")); + return; + } + EventTag tag = EventTag.valueOf(args[2].toUpperCase()); + + + + switch (args[0].toLowerCase()) { + case "give": + if(args.length!=3) { + sender.sendMessage(Utils.f("&c/eventtag give - &7Gives the specified player the specified tag.")); + return; + } + ServerUtil.runTaskAsync(() -> { + UserDAO.addPlayerTag(targetUUID, tag); + }); + sender.sendMessage(Lang.REWARDS.f("&aYou have given the player the specified tag. The player will have to relog for the changes to take effect.")); + break; + case "remove": + if(args.length!=3) { + sender.sendMessage(Utils.f("&c/eventtag remove - &7Removes specified tag from the player.")); + return; + } + ServerUtil.runTaskAsync(() -> { + UserDAO.removePlayerTag(targetUUID, tag); + }); + sender.sendMessage(Lang.REWARDS.f("&cYou have removed the player the specified tag. The player will have to relog for the changes to take effect.")); + break; + default: + sender.sendMessage(Utils.f("&c/eventtag give - &7Gives the specified player the specified tag.")); + sender.sendMessage(Utils.f("&c/eventtag remove - &7Removes specified tag from the player.")); + sender.sendMessage(Utils.f("&c/eventtag list - &7Lists all the eventtags that the specified player has")); + sender.sendMessage(Utils.f("&c/eventtag avaliable - &7Lists all avaliable event tags.")); + sender.sendMessage(Utils.f("&4&lNote that players may have to relog for the changes to take place.")); + break; + } + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/ExampleCommand.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/ExampleCommand.java new file mode 100644 index 0000000..90ebe0d --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/ExampleCommand.java @@ -0,0 +1,50 @@ +package net.grandtheftmc.core.commands; + +import net.grandtheftmc.core.users.UserRank; +import org.bukkit.entity.Player; + +/** + * Created by Luke Bingham on 06/07/2017. + */ +public class ExampleCommand extends CoreCommand implements RankedCommand { + + // (Q) How to register this command? + // (A) Simply call the constructor in onEnable + //new ExampleCommand(); + + /** + * Construct a new command. + */ + public ExampleCommand() { + super( + "example", //Command + "Description here", //Description + "ex1", "ex2" //Aliases + ); + + setNoPermissionMessage("&c&lError&f: &7You cannot use this command!"); + } + + /** + * This method is fired when the command is executed. + * + * @param sender sender type of the command + * @param args command arguments + */ + @Override + public void execute(Player sender, String[] args) { + if(args.length <= 0) { + sender.sendMessage("Hey, It works!"); + } + } + + /** + * Get the required rank to use said command. + * + * @return UserRank + */ + @Override + public UserRank requiredRank() { + return UserRank.DEV; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/FacebookCommand.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/FacebookCommand.java new file mode 100644 index 0000000..08a1fdc --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/FacebookCommand.java @@ -0,0 +1,18 @@ +package net.grandtheftmc.core.commands; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import org.bukkit.entity.Player; + +public class FacebookCommand extends CoreCommand { + + public FacebookCommand() { + super("facebook", "Get the link to our official Facebook page."); + } + + @Override + public void execute(Player sender, String[] args) { + if (Core.getSettings().isSister()) return; + sender.sendMessage(Lang.FACEBOOK.f("&7Here is the link to our official Facebook page! &9https://www.facebook.com/Grandtheftminecart/")); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/ForumRankCommand.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/ForumRankCommand.java new file mode 100644 index 0000000..4e4a9dc --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/ForumRankCommand.java @@ -0,0 +1,61 @@ +package net.grandtheftmc.core.commands; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.enjin.EnjinCache; +import net.grandtheftmc.core.enjin.EnjinCore; +import net.grandtheftmc.core.enjin.data.EnjinResponse; +import net.grandtheftmc.core.enjin.data.EnjinResult; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserRank; +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class ForumRankCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command c, String l, String[] args) { + if (s instanceof Player) { + User u = Core.getUserManager().getLoadedUser(((Player) s).getUniqueId()); + if (!u.isRank(UserRank.MANAGER)) { + s.sendMessage(Utils.f("&cYou do not have permission to execute this command!")); + return true; + } + } + + if (args.length == 2 && l.equalsIgnoreCase("forumrank")) { + String playername = args[0], targetRank = args[1]; + + //We can set his rank, add a forum update for Enjin. + EnjinCore.tagUser(playername, targetRank, new EnjinResponse() { + @Override + public void callback(EnjinResult response, String user, String tag) { + if (response.equals(EnjinResult.SUCCESS)) { + s.sendMessage(ChatColor.GREEN + "Enjin forum rank set successfully (" + user + " -> " + tag + ")"); + } else { + s.sendMessage(ChatColor.RED + "Failed to update Enjin form rank (" + user + " -> " + tag + "). Reason = " + response.toString() + "."); + + //try listing valid tags. + StringBuilder valTags = new StringBuilder(); + for (String r : EnjinCache.getTagNames()) { + valTags.append(r).append(", "); + } + + //Remove trailing ", " + valTags.setLength(valTags.length() - 2); + + s.sendMessage(Utils.f("&cValid Tags: " + valTags.toString())); + } + } + }); + + return true; + } else { + s.sendMessage(Utils.f("&c/forumrank ")); + return false; + } + } +} \ No newline at end of file diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/GlobalMuteCommand.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/GlobalMuteCommand.java new file mode 100644 index 0000000..6d55cfe --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/GlobalMuteCommand.java @@ -0,0 +1,32 @@ +package net.grandtheftmc.core.commands; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserRank; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class GlobalMuteCommand implements CommandExecutor { + public static boolean chatMuted; + + @Override + public boolean onCommand(CommandSender s, Command c, String l, String[] args) { + if (!(s instanceof Player)) { + chatMuted = !chatMuted; + s.sendMessage(Lang.GTM.f("&7Chat has been &a" + (chatMuted ? "muted&7!" : "unmuted&7!"))); + return true; + } + Player player = (Player) s; + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + if (!user.isRank(UserRank.SRMOD)) { + player.sendMessage(Lang.NOPERM.toString()); + return true; + } + chatMuted = !chatMuted; + player.sendMessage(Lang.GTM.f("&7Chat has been &a" + (chatMuted ? "muted&7!" : "unmuted&7!"))); + return true; + } +} \ No newline at end of file diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/IgnoreCommand.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/IgnoreCommand.java new file mode 100644 index 0000000..08819b8 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/IgnoreCommand.java @@ -0,0 +1,66 @@ +package net.grandtheftmc.core.commands; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserRank; +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +/** + * Created by Liam on 2/10/2016. + */ +public class IgnoreCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command cmd, String lbl, String[] args) { + if (!(s instanceof Player)) { + s.sendMessage(Lang.NOTPLAYER.s()); + return true; + } + Player player = (Player) s; + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + if (lbl.equalsIgnoreCase("ignored") || args.length == 0 || (args.length > 0 && args[0].equalsIgnoreCase("list"))) { + if (user.getIgnored().isEmpty()) { + s.sendMessage(Lang.GTM.f("&7You are not ignoring any players!")); + return true; + } + s.sendMessage(Lang.GTM.f("&7You are ignoring the following players:")); + String st = ""; + for (String name : user.getIgnored()) + st += "&a" + name + "&7, "; + if (st.endsWith("&7, ")) + st = st.substring(0, st.length() - 4); + s.sendMessage(Utils.f(st)); + return true; + } + if (args[0].equalsIgnoreCase("clear")) { + user.getIgnored().clear(); + user.updateIgnored(); + s.sendMessage(Lang.MSG.f("&7You are no longer ignoring anyone!")); + return true; + } + Player target = Bukkit.getPlayer(args[0]); + if (target == null) { + s.sendMessage(Utils.f(Lang.MSG + "&7That player is not online!")); + return true; + } + if (Core.getUserManager().getLoadedUser(target.getUniqueId()).isRank(UserRank.HELPOP)) { + player.sendMessage(Lang.GTM.f("&7You may not ignore staff!")); + return true; + } + if (user.isIgnored(target.getName())) { + user.removeIgnored(target.getName()); + player.sendMessage(Lang.GTM.f("&7You are no longer ignoring &a" + Core.getUserManager().getLoadedUser(target.getUniqueId()).getColoredName(target) + "&7!")); + return true; + } + user.addIgnored(target.getName()); + player.sendMessage(Lang.GTM.f("&7You ignored &a" + Core.getUserManager().getLoadedUser(target.getUniqueId()).getColoredName(target) + "&7!")); + return true; + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/InfoCommand.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/InfoCommand.java new file mode 100644 index 0000000..3693331 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/InfoCommand.java @@ -0,0 +1,42 @@ +package net.grandtheftmc.core.commands; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.tutorials.Help; +import org.apache.commons.lang3.StringUtils; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class InfoCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command c, String l, String[] args) { + if (!(s instanceof Player)) { + s.sendMessage(Lang.NOTPLAYER.s()); + return true; + } + Player player = (Player) s; + if(args.length == 1) { + if (args[0].equalsIgnoreCase("list")) { + String topics = StringUtils.join(Help.getHelpData().keySet(), "&7, &c"); + player.sendMessage(Lang.GTM.f("&7Topics: &c" + topics)); + return true; + } + if(Help.getHelpMessage(args[0]).isPresent()) { + player.sendMessage(Core.getAnnouncer().getHeader()); + for(String msg : Help.getHelpMessage(args[0]).get()) { + player.sendMessage(Utils.f(msg)); + } + player.sendMessage(Core.getAnnouncer().getFooter()); + } else { + player.sendMessage(Lang.HEY.f("&7Sorry! We don't have any information on that subject. \n&7Ask a staff member directly with /help ")); + } + } else { + player.sendMessage(Lang.HEY.f("&7You must specify what you need help with! \n&7Example: &c/how permits")); + } + return true; + } +} \ No newline at end of file diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/ListCommand.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/ListCommand.java new file mode 100644 index 0000000..3e0d5d3 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/ListCommand.java @@ -0,0 +1,44 @@ +package net.grandtheftmc.core.commands; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserRank; +import org.apache.commons.lang.StringUtils; +import org.bukkit.Bukkit; +import org.bukkit.GameMode; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; + +import java.util.ArrayList; +import java.util.Collection; + +public class ListCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command c, String l, String[] args) { + Collection defaultPlayers = new ArrayList<>(); + Collection donators = new ArrayList<>(); + Bukkit.getOnlinePlayers().forEach(online -> { + User targetUser = Core.getUserManager().getLoadedUser(online.getUniqueId()); + if (online.getGameMode() == GameMode.CREATIVE || online.getGameMode() == GameMode.SPECTATOR || online.isOp()) + return; + if (targetUser.isRank(UserRank.VIP)) { + donators.add(online.getDisplayName()); + } else { + defaultPlayers.add(online.getDisplayName()); + } + }); + String list = StringUtils.join(donators, "&7, ") + "&7," + StringUtils.join(defaultPlayers, "&7, "); + if (donators.isEmpty() && defaultPlayers.isEmpty()) { + s.sendMessage(Lang.GTM.f("&7There are no players online!")); + } else { + s.sendMessage(Lang.GTM.f("&7There are &a" + Bukkit.getOnlinePlayers().size() + " &7players online" + + " out of a maximum of &a" + Bukkit.getMaxPlayers() + "&7!")); + s.sendMessage(Utils.f("&7" + list)); + } + return true; + } +} \ No newline at end of file diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/MaxPlayersCommand.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/MaxPlayersCommand.java new file mode 100644 index 0000000..dfb39c2 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/MaxPlayersCommand.java @@ -0,0 +1,40 @@ +package net.grandtheftmc.core.commands; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserRank; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class MaxPlayersCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender commandSender, Command command, String s, String[] strings) { + if (commandSender instanceof Player) { + User u = Core.getUserManager().getLoadedUser(((Player) commandSender).getUniqueId()); + if (!u.getUserRank().isHigherThan(UserRank.ADMIN)) { + commandSender.sendMessage(Lang.NOPERM.s()); + return true; + } + } + if (strings.length != 1) { + commandSender.sendMessage(Lang.GTM.f("&7Usage: &a/maxplayers [number]")); + return true; + } + int players; + try { + players = Integer.parseInt(strings[0]); + } catch (NumberFormatException exception) { + commandSender.sendMessage(Lang.GTM.f("&cThat is not a valid number!")); + return true; + } + Utils.setMaxPlayers(players); + commandSender.sendMessage(Lang.GTM.f("&aYou successfully set the number of max players!")); + return true; + } + +} \ No newline at end of file diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/MessageCommand.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/MessageCommand.java new file mode 100644 index 0000000..d16ba62 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/MessageCommand.java @@ -0,0 +1,74 @@ +package net.grandtheftmc.core.commands; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.handlers.chat.ChatManager; +import net.grandtheftmc.core.users.Pref; +import net.grandtheftmc.core.users.User; +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class MessageCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command cmd, String lbl, String[] args) { + if (args.length < 2) { + s.sendMessage(Utils.f("&c/" + lbl + " ")); + return true; + } + Player target = Bukkit.getPlayer(args[0]); + if (target == null) { + s.sendMessage(Utils.f(Lang.MSG + "&7That player is not online!")); + return true; + } + User targetUser = Core.getUserManager().getLoadedUser(target.getUniqueId()); + if ((targetUser.isIgnored(s.getName()) || !targetUser.getPref(Pref.MESSAGES)) && !s.hasPermission("core.bypassmessages")) { + s.sendMessage(Utils.f(Lang.MSG + "&7That player has disabled PM's!")); + return true; + } + String message = args[1]; + for (int i = 2; i < args.length; i++) { + message = message + ' ' + args[i]; + } + String senderName; + if (s instanceof Player) { + Player player = (Player) s; + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + senderName = user.getColoredName(player); + user.setLastMessage(target.getUniqueId()); + targetUser.setLastMessage(player.getUniqueId()); + } else { + senderName = "&6&l" + s.getName(); + targetUser.setLastMessage(null); + } + for (String text : message.split(" ")) { + if (ChatManager.getAdHandler().matchesAdvertisement(text)) { + s.sendMessage(Lang.GTM.f("&7URL prohibited. Please do not attempt to advertise.")); + return true; + } + } + if (targetUser.isVanished(target) && !s.hasPermission("core.bypassmessages")) { + s.sendMessage(Utils.f(Lang.MSG + "&7That player is not online!")); + target.sendMessage(Utils.f(Lang.MSG + "&7[" + senderName + "&7 -> me] &f") + message); + return true; + } + if (s instanceof Player) { + User senderUser = Core.getUserManager().getLoadedUser(((Player) s).getUniqueId()); + Integer cooldown = senderUser.isSpecial() ? 4 : 5; + if (ChatManager.getRepeatHandler().canChatAgain(senderUser.getUUID(), message)) { + ChatManager.getRepeatHandler().addRecentMessage(senderUser.getUUID(), message, cooldown); + } else { + s.sendMessage(Lang.GTM.f("&7Please wait a few seconds before repeating that message.")); + return true; + } + } + target.sendMessage(Utils.f(Lang.MSG + "&7[" + senderName + "&7 -> me] &f") + message); + s.sendMessage(Utils.f(Lang.MSG + "&7[me -> " + targetUser.getColoredName(target) + "&7] &f") + message); + return true; + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/OpenMenuCommand.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/OpenMenuCommand.java new file mode 100644 index 0000000..1cb34a4 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/OpenMenuCommand.java @@ -0,0 +1,32 @@ +package net.grandtheftmc.core.commands; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.menus.Menu; +import net.grandtheftmc.core.menus.MenuManager; +import org.bukkit.entity.Player; + +/** + * Created by Timothy Lampen on 2017-12-25. + */ +public class OpenMenuCommand extends CoreCommand { + public OpenMenuCommand() { + super("openmenu", "to open known menu names"); + } + + @Override + public void execute(Player player, String[] args) { + if(!player.isOp()) + return; + if(args.length!=1){ + player.sendMessage(Lang.ALERTS.f("&c/openmenu ")); + return; + } + String name = args[0]; + Menu menu = MenuManager.getMenu(name); + if(menu==null) { + player.sendMessage(Lang.ALERTS.f("&cThat menu does not exist!")); + return; + } + menu.openFor(player); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/PlaytimeCommand.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/PlaytimeCommand.java new file mode 100644 index 0000000..8c03fe3 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/PlaytimeCommand.java @@ -0,0 +1,140 @@ +package net.grandtheftmc.core.commands; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.util.Playtime; +import net.grandtheftmc.core.util.TimeFormatter; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.SkullMeta; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.concurrent.TimeUnit; + +public class PlaytimeCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command c, String l, String[] args) { + if(Playtime.playtime.isEmpty()) { + s.sendMessage("No data!"); + return true; + } + if(!(s instanceof Player)) { + for (Map.Entry entrySet : Playtime.playtime.entrySet()) { + TimeFormatter tf = Utils.timeFormatter(TimeUnit.MILLISECONDS, entrySet.getValue()); + s.sendMessage(Utils.f("&a&lPlaytime of &c&l" + tf.getHours() + "h &a" + tf.getMinutes() + "m")); + } + s.sendMessage(Utils.f("&7&lAnyone not listed here has not been online since the last server reboot.")); + } else { + Player player = (Player) s; + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + if(!player.hasPermission("gtmcore.playtime")) { + player.sendMessage(Lang.NOPERM.f("&7You do not have permission to use this command.")); + return true; + } + Inventory inv = Bukkit.createInventory(null, 54, Utils.f("&e&lRecent Playtime")); + + ItemStack grayGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 7, "&a"); + ItemStack whiteGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 0, "&a"); + + int[] offlineSlots = {0, 9, 18, 27, 36, 45, 8, 17, 26, 35, 44, 53}; + int[] whiteSlots = {1, 10, 19, 28, 37, 46, 7, 16, 25, 34, 43, 52}; + int[] graySlots = {2, 3, 4, 5, 6, 11, 12, 13, 14, 15, 20, 21, 22, 23, 24, + 29, 30, 31, 32, 33, 38, 39, 40, 41, 42, 47, 48, 49, 50, 51}; + int[] skullSlots = {11, 12, 13, 14, 15, 20, 21, 22, 23, 24, + 29, 30, 31, 32, 33, 38, 39, 40, 41, 42}; + + ArrayList skulls = new ArrayList<>(); + ArrayList offlineSkulls = new ArrayList<>(); + + for (Map.Entry entrySet : Playtime.playtime.entrySet()) { + String name = Bukkit.getPlayer(entrySet.getKey()) != null ? + "&a&l" + entrySet.getKey() : "&c&l" + entrySet.getKey(); + ItemStack skull = Utils.createItem(Material.SKULL_ITEM, 3, Utils.f(name)); + SkullMeta meta = (SkullMeta)skull.getItemMeta(); + + List lore = new ArrayList<>(); + TimeFormatter tf = Utils.timeFormatter(TimeUnit.MILLISECONDS, entrySet.getValue()); + lore.add(Utils.f("&7Playtime: &a" + tf.getHours() + "h " + tf.getMinutes() + "m")); + + meta.setOwner(entrySet.getKey()); + meta.setLore(lore); + + skull.setItemMeta(meta); + + skulls.add(skull); + } + + Collection offlineStaff = Utils.getOfflineStaff(); + offlineStaff.removeIf(offlinePlayer -> Playtime.playtime.containsKey(offlinePlayer)); + + for(String offline : offlineStaff) { + String name = "&8&l" + offline; + ItemStack skull = Utils.createItem(Material.SKULL_ITEM, 3, Utils.f(name)); + SkullMeta meta = (SkullMeta)skull.getItemMeta(); + + List lore = new ArrayList<>(); + if(Bukkit.getPlayer(offline) != null) { + meta.setDisplayName(Utils.f("&a&l" + offline)); + Player target = Bukkit.getPlayer(offline); + User coreUser = Core.getUserManager().getLoadedUser(target.getUniqueId()); + TimeFormatter tf = Utils.timeFormatter(TimeUnit.MILLISECONDS, System.currentTimeMillis() - coreUser.getJoinTime()); + lore.add(Utils.f("&7Playtime: &a" + tf.getHours() + "h " + tf.getMinutes() + "m")); + } else { + lore.add(Utils.f("&7Playtime: &4&lNONE - HAS NOT BEEN ONLINE")); + } + + meta.setOwner(offline); + meta.setLore(lore); + + skull.setItemMeta(meta); + + if(Bukkit.getPlayer(offline) == null) { + offlineSkulls.add(skull); + } else { + skulls.add(skull); + } + } + + for(int skullSlot : skullSlots) { + if(inv.firstEmpty() == -1) break; + if(skulls.isEmpty()) break; + if(inv.getItem(skullSlot) != null && inv.getItem(skullSlot).getType() == Material.SKULL) continue; + ItemStack skull = skulls.stream().findFirst().get(); + inv.setItem(skullSlot, skull); + skulls.remove(skulls.stream().findFirst().get()); + } + + for(int skullSlot : offlineSlots) { + if(inv.firstEmpty() == -1) break; + if(offlineSkulls.isEmpty()) break; + if(inv.getItem(skullSlot) != null && inv.getItem(skullSlot).getType() == Material.SKULL) continue; + ItemStack skull = offlineSkulls.stream().findFirst().get(); + inv.setItem(skullSlot, skull); + offlineSkulls.remove(offlineSkulls.stream().findFirst().get()); + } + + for(int whiteSlot : whiteSlots) + inv.setItem(whiteSlot, whiteGlass); + + for(int graySlot : graySlots) { + if(inv.getItem(graySlot) != null) continue; + inv.setItem(graySlot, grayGlass); + } + + player.openInventory(inv); + } + return true; + } +} \ No newline at end of file diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/PrefsCommand.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/PrefsCommand.java new file mode 100644 index 0000000..9d13687 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/PrefsCommand.java @@ -0,0 +1,23 @@ +package net.grandtheftmc.core.commands; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.menus.MenuManager; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class PrefsCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command c, String lbl, String[] args) { + if (!(s instanceof Player)) { + s.sendMessage(Lang.NOTPLAYER.s()); + return true; + } + Player player = (Player) s; + MenuManager.openMenu(player, "prefs"); + return true; + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/RankCommand.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/RankCommand.java new file mode 100644 index 0000000..698eb92 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/RankCommand.java @@ -0,0 +1,410 @@ +package net.grandtheftmc.core.commands; + +import java.sql.Connection; +import java.util.List; +import java.util.UUID; + +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.command.ConsoleCommandSender; +import org.bukkit.entity.Player; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.database.BaseDatabase; +import net.grandtheftmc.core.events.UpdateEvent; +import net.grandtheftmc.core.perms.PermsManager; +import net.grandtheftmc.core.perms.RankPerms; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserDAO; +import net.grandtheftmc.core.users.UserManager; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.core.util.Utils; + +public class RankCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command c, String l, String[] args) { + if (s instanceof Player) { + User u = Core.getUserManager().getLoadedUser(((Player) s).getUniqueId()); + if (!u.isRank(UserRank.ADMIN)) { + s.sendMessage(Utils.f("&cYou do not have permission to execute this command!")); + return true; + } + } + if (args.length == 0) { + s.sendMessage(Utils.f("&c/rank set [serverKey]")); + s.sendMessage(Utils.f("&c/rank remove [serverKey]")); + s.sendMessage(Utils.f("&c/rank upgrade ")); + s.sendMessage(Utils.f("&c/rank addperm ")); + s.sendMessage(Utils.f("&c/rank delperm ")); + s.sendMessage(Utils.f("&c/rank listperms ")); + s.sendMessage(Utils.f("&c/rank player addperm ")); + s.sendMessage(Utils.f("&c/rank player delperm ")); + s.sendMessage(Utils.f("&c/rank player listperms ")); + s.sendMessage(Utils.f("&c/rank reload")); + s.sendMessage(Utils.f("&c/rank save")); + return true; + } + + UserManager um = Core.getUserManager(); + PermsManager pm = Core.getPermsManager(); + switch (args[0].toLowerCase()) { + case "reload": + Core.getSettings().setPermsConfig(Utils.loadConfig("perms")); + Core.getPermsManager().loadPerms(); + s.sendMessage(Utils.f("&7The perms config was reloaded!")); + return true; + case "save": + Core.getPermsManager().savePerms(false); + s.sendMessage(Utils.f("&7The perms config was saved!")); + return true; + case "set": { + if (args.length < 3 || args.length > 4) { + s.sendMessage(Utils.f("&c/rank set [serverKey]")); + return true; + } + + UserRank rank = UserRank.getUserRankOrNull(args[2]); + if (rank == null) { + String msg = Lang.RANKS + "&7There is no rank with the name &a" + args[2] + "&7! Valid ranks: "; + for (UserRank r : UserRank.getUserRanks()) + msg = msg + "&a" + r.getColoredName() + "&7, "; + if (msg.endsWith("&7, ")) + msg = msg.substring(0, msg.length() - 4); + msg += "&7."; + s.sendMessage(Utils.f(msg)); + return true; + } + + if (s instanceof Player) { + User u = Core.getUserManager().getLoadedUser(((Player) s).getUniqueId()); + if (rank.isHigherThan(UserRank.HELPOP) && !u.isRank(UserRank.MANAGER)) { + s.sendMessage(Utils.f("&cYou do not have permission to set that userrank")); + return true; + } + } + +// EnjinCore.tagUser(args[1], rank.getName(), new EnjinResponse() { +// @Override +// public void callback(EnjinResult response, String user, String tag) { +// if (response.equals(EnjinResult.SUCCESS)) { +// s.sendMessage(ChatColor.GREEN + "Enjin forum rank set successfully (" + user + " -> " + tag + ")"); +// } else { +// s.sendMessage(ChatColor.RED + "Failed to update Enjin form rank (" + user + " -> " + tag + "). Reason = " + response.toString() + "."); +// } +// } +// }); + + // determine server we are setting + String server = rank.getServerKey(); + if (args.length == 4){ + server = args[3]; + } + final String serverKey = server; + + Player player = Bukkit.getPlayer(args[1]); + if (player == null) { +// Core.getSQL().updateAsyncLater("update users set userrank='" + rank.getName() + "' where lastname='" + args[1] + "';"); + ServerUtil.runTaskAsync(() -> { + UUID uuid = UserDAO.getUuidByName(args[1]); + if (uuid != null){ + try (Connection conn = BaseDatabase.getInstance().getConnection()){ + UserDAO.saveRank(conn, serverKey, uuid, rank); + } + catch(Exception e){ + e.printStackTrace(); + } + } + + }); + s.sendMessage(Utils.f(Lang.RANKS + "&7That player is not online, so his rank has been forcibly updated in the database.")); + return true; + } + + User u = um.getLoadedUser(player.getUniqueId()); + + // specifying server key + u.setUserRank(rank, serverKey); + s.sendMessage(Utils.f(Lang.RANKS + u.getColoredName(player) + " &7is now a &a" + u.getUserRank().getColoredNameBold() + "&7!")); + Bukkit.getPluginManager().callEvent(new UpdateEvent(player, UpdateEvent.UpdateReason.RANK)); + return true; + } + case "remove": { + if (args.length < 3 || args.length > 4) { + s.sendMessage(Utils.f("&c/rank remove [serverKey]")); + return true; + } + + UserRank rank = UserRank.getUserRankOrNull(args[2]); + if (rank == null) { + String msg = Lang.RANKS + "&7There is no rank with the name &a" + args[2] + "&7! Valid ranks: "; + for (UserRank r : UserRank.getUserRanks()) + msg = msg + "&a" + r.getColoredName() + "&7, "; + if (msg.endsWith("&7, ")) + msg = msg.substring(0, msg.length() - 4); + msg += "&7."; + s.sendMessage(Utils.f(msg)); + return true; + } + + if (s instanceof Player) { + User u = Core.getUserManager().getLoadedUser(((Player) s).getUniqueId()); + if (rank.isHigherThan(UserRank.HELPOP) && !u.isRank(UserRank.MANAGER)) { + s.sendMessage(Utils.f("&cYou do not have permission to set that userrank")); + return true; + } + } + + // determine server we are setting + String server = rank.getServerKey(); + if (args.length == 4){ + server = args[3]; + } + final String serverKey = server; + + Player player = Bukkit.getPlayer(args[1]); + if (player == null) { + ServerUtil.runTaskAsync(() -> { + UUID targetUUID = UserDAO.getUuidByName(args[1]); + if (targetUUID != null){ + try (Connection conn = BaseDatabase.getInstance().getConnection()){ + UserDAO.deleteRank(conn, serverKey, targetUUID, rank); + } + catch(Exception e){ + e.printStackTrace(); + } + } + }); + s.sendMessage(Utils.f(Lang.RANKS + "&7That player is not online, so his rank has been forcibly updated in the database.")); + return true; + } + + User u = um.getLoadedUser(player.getUniqueId()); + + // a removal causes them to set back to default + u.setUserRank(UserRank.DEFAULT, serverKey); + s.sendMessage(Utils.f(Lang.RANKS + u.getColoredName(player) + " &7is now a &a" + u.getUserRank().getColoredNameBold() + "&7!")); + Bukkit.getPluginManager().callEvent(new UpdateEvent(player, UpdateEvent.UpdateReason.RANK)); + return true; + } + case "upgrade": { + if (!(s instanceof ConsoleCommandSender)) { + s.sendMessage(Utils.f("&cThis command can only be executed from the console!")); + return true; + } + if (args.length != 4) { + s.sendMessage(Utils.f("&c/rank upgrade ")); + return true; + } + UserRank from = UserRank.getUserRankOrNull(args[2]); + UserRank to = UserRank.getUserRankOrNull(args[3]); + if (from == null || to == null) { + String msg = Lang.RANKS + "&7There is no rank with the name &a" + (from == null ? args[2] : args[3]) + "&7! Valid ranks: "; + for (UserRank r : UserRank.getUserRanks()) + msg = msg + "&a" + r.getColoredName() + "&7, "; + if (msg.endsWith("&7, ")) + msg = msg.substring(0, msg.length() - 4); + msg += "&7."; + s.sendMessage(Utils.f(msg)); + return true; + } + Player player = Bukkit.getPlayer(args[1]); + if (player == null) { +// Core.getSQL().updateAsyncLater("update users set userrank='" + to.getName() + "' where lastname='" + args[1] + "' and userrank='" + from.getName() + "';"); + ServerUtil.runTaskAsync(() -> UserDAO.updateRankByNameAndRank(args[1], from, to)); + s.sendMessage(Utils.f(Lang.RANKS + "&7That player is not online, so his rank has been forcibly updated in the database.")); + return true; + } + User u = um.getLoadedUser(player.getUniqueId()); + if (u.getUserRankNonTrial() != from) { + s.sendMessage(Lang.RANKS.f("&7That player does not have the rank " + from.getColoredNameBold() + "&7!")); + return true; + } + u.setUserRank(to); + Bukkit.getPluginManager().callEvent(new UpdateEvent(player, UpdateEvent.UpdateReason.RANK)); + s.sendMessage(Utils.f(Lang.RANKS + u.getColoredName(player) + " &7is now a &a" + u.getUserRank().getColoredNameBold() + "&7!")); + return true; + } + case "addperm": { + if (s instanceof Player) { + User u = Core.getUserManager().getLoadedUser(((Player) s).getUniqueId()); + if (!u.isRank(UserRank.MANAGER)) { + s.sendMessage(Utils.f("&cYou do not have permission to execute this command!")); + return true; + } + } + if (args.length != 3) { + s.sendMessage(Utils.f("&c/rank addperm ")); + return true; + } + UserRank rank = UserRank.getUserRankOrNull(args[1]); + if (rank == null) { + String msg = Lang.RANKS + "&7There is no rank with the name &a" + args[2] + "&7! Valid ranks: "; + for (UserRank r : UserRank.getUserRanks()) + msg = msg + "&a" + r.getColoredNameBold() + "&7, "; + if (msg.endsWith("&7, ")) + msg = msg.substring(0, msg.length() - 4); + msg += "&7."; + s.sendMessage(Utils.f(msg)); + return true; + } + pm.getRankPerms(rank).addPerm(args[2]); + s.sendMessage(Utils.f(Lang.RANKS + "&7The rank &a" + rank.getColoredNameBold() + "&7 now has the permission &a" + args[2] + "&7!")); + return true; + } + case "delperm": { + if (s instanceof Player) { + User u = Core.getUserManager().getLoadedUser(((Player) s).getUniqueId()); + if (!u.isRank(UserRank.MANAGER)) { + s.sendMessage(Utils.f("&cYou do not have permission to execute this command!")); + return true; + } + } + if (args.length != 3) { + s.sendMessage(Utils.f("&c/rank delperm ")); + return true; + } + UserRank rank = UserRank.getUserRankOrNull(args[1]); + if (rank == null) { + String msg = Lang.RANKS + "&7There is no rank with the name &a" + args[2] + "&7! Valid ranks: "; + for (UserRank r : UserRank.getUserRanks()) + msg = msg + "&a" + r.getColoredNameBold() + "&7, "; + if (msg.endsWith("&7, ")) + msg = msg.substring(0, msg.length() - 4); + msg += "&7."; + s.sendMessage(Utils.f(msg)); + return true; + } + pm.getRankPerms(rank).removePerm(args[2]); + s.sendMessage(Utils.f(Lang.RANKS + "&7You removed the permission &a" + args[2] + " &7from the rank " + rank.getColoredNameBold() + "&7!")); + return true; + } + case "listperms": { + if (args.length != 2) { + s.sendMessage(Utils.f("&c/rank listperms ")); + return true; + } + UserRank rank = UserRank.getUserRankOrNull(args[1]); + if (rank == null) { + String msg = Lang.RANKS + "&7There is no rank with the name &a" + args[2] + "&7! Valid ranks: "; + for (UserRank r : UserRank.getUserRanks()) + msg = msg + "&a" + r.getColoredNameBold() + "&7, "; + if (msg.endsWith("&7, ")) + msg = msg.substring(0, msg.length() - 4); + msg += "&7."; + s.sendMessage(Utils.f(msg)); + return true; + } + RankPerms rankPerms = pm.getRankPerms(rank); + if (rankPerms == null || rankPerms.getPerms().isEmpty()) { + s.sendMessage(Utils.f(Lang.RANKS + "&7The rank " + rank.getColoredNameBold() + "&7 has no permissions.")); + return true; + } + List perms = rankPerms.getPerms(); + String msg1 = "&7The rank " + rank.getColoredNameBold() + " &7has the following permissions: "; + String msg2 = ""; + for (String perm : perms) + msg2 = msg2 + "&a" + perm + "&7, "; + if (msg2.endsWith("&7, ")) + msg2 = msg2.substring(0, msg2.length() - 4); + msg2 += "&7."; + s.sendMessage(Utils.f(Lang.RANKS + msg1)); + s.sendMessage(Utils.f(msg2)); + return true; + } + case "player": + if (args.length == 1) { + s.sendMessage(Utils.f("&c/rank player addperm ")); + s.sendMessage(Utils.f("&c/rank player delperm ")); + s.sendMessage(Utils.f("&c/rank player listperms ")); + return true; + } + switch (args[1].toLowerCase()) { + case "addperm": { + if (s instanceof Player) { + User u = Core.getUserManager().getLoadedUser(((Player) s).getUniqueId()); + if (!u.isRank(UserRank.MANAGER)) { + s.sendMessage(Utils.f("&cYou do not have permission to execute this command!")); + return true; + } + } + if (args.length != 4) { + s.sendMessage(Utils.f("&c/rank player addperm ")); + return true; + } + Player player = Bukkit.getPlayer(args[2]); + if (player == null) { + s.sendMessage(Utils.f(Lang.RANKS + "&7That player is not online!")); + return true; + } + pm.addPerm(player.getUniqueId(), args[3]); + s.sendMessage(Utils.f(Lang.RANKS + "&7You added the perm &a" + args[3] + "&7 to the player &a" + player.getName() + '.')); + return true; + } + case "delperm": { + if (s instanceof Player) { + User u = Core.getUserManager().getLoadedUser(((Player) s).getUniqueId()); + if (!u.isRank(UserRank.MANAGER)) { + s.sendMessage(Utils.f("&cYou do not have permission to execute this command!")); + return true; + } + } + if (args.length != 4) { + s.sendMessage(Utils.f("&c/rank player delperm ")); + return true; + } + Player player = Bukkit.getPlayer(args[2]); + if (player == null) { + s.sendMessage(Utils.f(Lang.RANKS + "&7That player is not online!")); + return true; + } + pm.removePerm(player.getUniqueId(), args[3]); + s.sendMessage(Utils.f(Lang.RANKS + "&7You removed the perm &a" + args[3] + "&7 from the player &a" + player.getName() + '.')); + return true; + } + case "listperms": + if (args.length != 3) { + s.sendMessage(Utils.f("&c/rank player listperms ")); + return true; + } + Player player = Bukkit.getPlayer(args[2]); + if (player == null) { + s.sendMessage(Utils.f("&7That player is not online!")); + return true; + } + User u = um.getLoadedUser(player.getUniqueId()); + List perms = pm.getPerms(player.getUniqueId()); + if (perms == null || perms.isEmpty()) { + s.sendMessage(Utils.f(Lang.RANKS + "&7The player &a" + player.getName() + "&7 has no permissions.")); + return true; + } + s.sendMessage(Utils.f(Lang.RANKS + "&7The player &a" + u.getColoredName(player) + " &7has the following permissions: ")); + String msg2 = ""; + for (String perm : perms) + msg2 = msg2 + "&7" + perm + "&7, "; + if (msg2.endsWith("&7, ")) + msg2 = msg2.substring(0, msg2.length() - 4); + msg2 += "&7."; + s.sendMessage(Utils.f(msg2)); + s.sendMessage(Utils.f(Lang.RANKS + "&7The player also has all the perms from the rank &a" + u.getUserRank().getColoredNameBold() + "&7.")); + return true; + } + default: + s.sendMessage(Utils.f("&c/rank set ")); + s.sendMessage(Utils.f("&c/rank upgrade ")); + s.sendMessage(Utils.f("&c/rank addperm ")); + s.sendMessage(Utils.f("&c/rank delperm ")); + s.sendMessage(Utils.f("&c/rank listperms ")); + s.sendMessage(Utils.f("&c/rank player addperm ")); + s.sendMessage(Utils.f("&c/rank player delperm ")); + s.sendMessage(Utils.f("&c/rank player listperms ")); + s.sendMessage(Utils.f("&c/rank reload")); + s.sendMessage(Utils.f("&c/rank save")); + return true; + } + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/RankedCommand.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/RankedCommand.java new file mode 100644 index 0000000..73b2455 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/RankedCommand.java @@ -0,0 +1,16 @@ +package net.grandtheftmc.core.commands; + +import net.grandtheftmc.core.users.UserRank; + +/** + * Created by Luke Bingham on 06/07/2017. + */ +public interface RankedCommand { + + /** + * Get the required rank to use said command. + * + * @return UserRank + */ + UserRank requiredRank(); +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/ReplyCommand.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/ReplyCommand.java new file mode 100644 index 0000000..3c1e1ee --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/ReplyCommand.java @@ -0,0 +1,49 @@ +package net.grandtheftmc.core.commands; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.users.Pref; +import net.grandtheftmc.core.users.User; +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class ReplyCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command cmd, String lbl, String[] args) { + if (args.length == 0) { + s.sendMessage(Utils.f("&c/" + lbl + " ")); + return true; + } + if (!(s instanceof Player)) { + s.sendMessage(Lang.NOTPLAYER.s()); + return true; + } + Player player = (Player) s; + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + Player target = Bukkit.getPlayer(user.getLastMessage()); + User targetUser = target == null ? null : Core.getUserManager().getLoadedUser(target.getUniqueId()); + if (target == null || (targetUser.isVanished(target) && !s.hasPermission("core.bypassmessages"))) { + s.sendMessage(Lang.MSG.f("&7You have no one to reply to!")); + return true; + } + if ((targetUser.isIgnored(s.getName()) || !targetUser.getPref(Pref.MESSAGES)) && + !s.hasPermission("core.bypassmessages")) { + s.sendMessage(Utils.f(Lang.MSG + "&7That player has disabled PM's!")); + return true; + } + String message = args[0]; + for (int i = 1; i < args.length; i++) + message = message + ' ' + args[i]; + target.sendMessage(Utils.f(Lang.MSG + "&7[" + user.getColoredName(player) + "&7 -> me] &f") + message); + s.sendMessage(Utils.f(Lang.MSG + "&7[me -> " + targetUser.getColoredName(target) + "&7] &f" + message)); + user.setLastMessage(target.getUniqueId()); + targetUser.setLastMessage(player.getUniqueId()); + return true; + } + +} \ No newline at end of file diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/RewardCommand.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/RewardCommand.java new file mode 100644 index 0000000..c8b0678 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/RewardCommand.java @@ -0,0 +1,71 @@ +package net.grandtheftmc.core.commands; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.redis.RedisManager; +import net.grandtheftmc.core.redis.data.DataType; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserRank; +import org.bukkit.Bukkit; +import org.bukkit.OfflinePlayer; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +public class RewardCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command c, String l, String[] args) { + if (s instanceof Player) { + User u = Core.getUserManager().getLoadedUser(((Player) s).getUniqueId()); + if (!u.isRank(UserRank.MANAGER)) { + s.sendMessage(Utils.f("&cYou do not have permission to execute this command!")); + return true; + } + } + + if (args.length != 2) { + s.sendMessage(Utils.f("&c/reward ")); + return true; + } + + //Continute to execute + String target = args[1]; + + UUID targetUUID = null; + + try { + //try parse from string + targetUUID = UUID.fromString(target); + } catch (Exception e){ + //do nothing, if UUID is null we send the string. + } + + if (targetUUID == null) { + //Try obtain uuid externally + OfflinePlayer op = Bukkit.getOfflinePlayer(target); + if (op != null) { + targetUUID = op.getUniqueId(); + } + } + + if (targetUUID == null) { + //Still failed to find a uuid, so stop + s.sendMessage(Utils.f("&cFailed to find a UUID for '" + target + "', rewards cannot be given.")); + return true; + } + + + //Publish reward notification on redis channel. + Map data = new HashMap(); + data.put("target", targetUUID.toString()); + RedisManager.publishMessage(DataType.REWARD_NOTIFY, data); + + return true; + } +} \ No newline at end of file diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/RewardsCommand.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/RewardsCommand.java new file mode 100644 index 0000000..0f765ed --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/RewardsCommand.java @@ -0,0 +1,23 @@ +package net.grandtheftmc.core.commands; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.menus.MenuManager; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +/** + * Created by Liam on 21/09/2016. + */ +public class RewardsCommand implements CommandExecutor { + @Override + public boolean onCommand(CommandSender s, Command c, String lbl, String[] args) { + if (!(s instanceof Player)) { + s.sendMessage(Lang.NOTPLAYER.s()); + return true; + } + MenuManager.openMenu((Player) s, "rewards"); + return true; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/RulesCommand.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/RulesCommand.java new file mode 100644 index 0000000..1666cd4 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/RulesCommand.java @@ -0,0 +1,28 @@ +package net.grandtheftmc.core.commands; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.ArrayList; +import java.util.List; + +public class RulesCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command c, String l, String[] args) { + if (!(s instanceof Player)) { + s.sendMessage(Lang.NOTPLAYER.toString()); + return true; + } + Player player = (Player) s; + List rules = new ArrayList<>(); + Core.getSettings().getRulesConfig().getStringList("rules").forEach(rule -> rules.add(ChatColor.translateAlternateColorCodes('&', rule))); + player.sendMessage(rules.toArray(new String[rules.size()])); + return true; + } +} \ No newline at end of file diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/SaveCommand.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/SaveCommand.java new file mode 100644 index 0000000..d755a9f --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/SaveCommand.java @@ -0,0 +1,29 @@ +package net.grandtheftmc.core.commands; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.events.ServerSaveEvent; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserRank; +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class SaveCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command c, String l, String[] args) { + if (s instanceof Player) { + User user = Core.getUserManager().getLoadedUser(((Player) s).getUniqueId()); + if(!user.isRank(UserRank.ADMIN)) { + return true; + } + } + ServerSaveEvent saveEvent = new ServerSaveEvent(); + Bukkit.getPluginManager().callEvent(saveEvent); + s.sendMessage(Lang.SAVE.f("&fSave Event called.")); + return true; + } +} \ No newline at end of file diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/ServerCommand.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/ServerCommand.java new file mode 100644 index 0000000..baa81d0 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/ServerCommand.java @@ -0,0 +1,31 @@ +package net.grandtheftmc.core.commands; + +import net.grandtheftmc.core.menus.MenuManager; +import net.grandtheftmc.core.servers.menu.GTMTranzitMenu; +import net.grandtheftmc.core.servers.menu.TranzitMenu; +import org.bukkit.entity.Player; + +/** + * Created by Luke Bingham on 20/08/2017. + */ +public class ServerCommand extends CoreCommand { + + /** + * Construct a new command. + */ + public ServerCommand() { + super("server", "Travel to different servers.", "serv"); + } + + /** + * This method is fired when the command is executed. + * + * @param sender sender type of the command + * @param args command arguments + */ + @Override + public void execute(Player sender, String[] args) { + MenuManager.openMenu(sender, "serverwarper"); +// new TranzitMenu(new GTMTranzitMenu()).openInventory(sender); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/SocialSpyCommand.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/SocialSpyCommand.java new file mode 100644 index 0000000..a1c80bb --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/SocialSpyCommand.java @@ -0,0 +1,50 @@ +package net.grandtheftmc.core.commands; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.users.Pref; +import net.grandtheftmc.core.users.User; +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.UUID; + +public class SocialSpyCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command cmd, String label, String[] args) { + if (!(s instanceof Player)) { + s.sendMessage(Utils.f("&cYou are not a player!")); + return true; + } + Player player = (Player) s; + UUID uuid = player.getUniqueId(); + User u = Core.getUserManager().getLoadedUser(uuid); + if (!Pref.SOCIALSPY.isEnabled(player, u, Core.getSettings().getType())) { + s.sendMessage(Utils.f("&cYou do not have permission to execute this command!")); + if (u.getPref(Pref.SOCIALSPY)) + u.setPref(player, Pref.SOCIALSPY, false); + return true; + } + boolean mode; + if (args.length == 1) { + if(Bukkit.getPlayer(args[0]) != null) { + Player target = Bukkit.getPlayer(args[0]); + u = Core.getUserManager().getLoadedUser(target.getUniqueId()); + u.setPref(target, Pref.SOCIALSPY, false); + player.sendMessage(Lang.SOCIALSPY.f("&7You have disabled the socialspy of " + u.getColoredName(target))); + } else { + player.sendMessage(Lang.SOCIALSPY.f("&7Invalid arguments! Use /socialspy (to toggle it for yourself) or /socialspy ")); + } + } else { + mode = !u.getPref(Pref.SOCIALSPY); + u.setPref(player, Pref.SOCIALSPY, mode); + s.sendMessage(Lang.SOCIALSPY.f("&7You " + (mode ? "enabled" : "disabled") + " socialspy.")); + } + return true; + } +} \ No newline at end of file diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/SpankCommand.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/SpankCommand.java new file mode 100644 index 0000000..c86e2a0 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/SpankCommand.java @@ -0,0 +1,76 @@ +package net.grandtheftmc.core.commands; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.users.Pref; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserRank; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; + +import java.util.concurrent.TimeUnit; + +/** + * Created by ThatAbstractWolf on 2017-08-04. + */ +public class SpankCommand extends CoreCommand { + + public SpankCommand() { + super("spank", "Spank them all!"); + } + + @Override + public void execute(Player player, String[] args) { + + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + + if (player.getUniqueId().toString().equals("293af3b1-1cc7-47cb-bf50-d5318ea35def")) { + player.sendMessage(Lang.SPANK.f("Hey there bb, no spanking for you! ;)")); + return; + } + + if (user.getLastSpanked() == 0L || System.currentTimeMillis() >= user.getLastSpanked()) { + + if (user.isRank(UserRank.SUPREME)) { + + if (args.length == 1) { + + Player spanking = Bukkit.getPlayer(args[0]); + + if (spanking == null) { + player.sendMessage(Lang.SPANK.f("You can't spank that player, they're not around this server :(")); + return; + } + + if (spanking == player) { + player.sendMessage(Lang.SPANK.f("Ohh you're dirty.. but not dirty enough to spank yourself. :(")); + return; + } + + for (Player all : Bukkit.getOnlinePlayers()) { + + User allUser = Core.getUserManager().getLoadedUser(all.getUniqueId()); + + if (!allUser.getPref(Pref.MESSAGES) && !all.equals(player)) { + continue; + } + + if (allUser.getIgnored().contains(player.getName())) { + continue; + } + + all.sendMessage(Lang.SPANK.f("Daddy &d&l" + player.getName() + " &7spanked &b&l" + spanking.getName() + " &7:o")); + } + + user.setLastSpanked(System.currentTimeMillis() + 60000L); + } else { + player.sendMessage(Lang.SPANK.f("/spank ")); + } + } else { + player.sendMessage(Lang.SPANK.f("&7You must be " + UserRank.SUPREME.getColoredNameBold() + " &7to spank! ;)")); + } + } else { + player.sendMessage(Lang.SPANK.f("You cannot use spank yet! Please wait &d" + TimeUnit.MILLISECONDS.toSeconds(user.getLastSpanked() - System.currentTimeMillis()) + " &7seconds.")); + } + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/StoreCommand.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/StoreCommand.java new file mode 100644 index 0000000..c13d865 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/StoreCommand.java @@ -0,0 +1,16 @@ +package net.grandtheftmc.core.commands; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; + +public class StoreCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command cmd, String label, String[] args) { + s.sendMessage(Lang.GTM.f("&7You can find the donation store at &e" + Core.getSettings().getStoreLink())); + return true; + } +} \ No newline at end of file diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/TokensCommand.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/TokensCommand.java new file mode 100644 index 0000000..c8086af --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/TokensCommand.java @@ -0,0 +1,314 @@ +package net.grandtheftmc.core.commands; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.users.UserDAO; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.events.UpdateEvent; +import net.grandtheftmc.core.events.UpdateEvent.UpdateReason; +import net.grandtheftmc.core.menus.MenuManager; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserManager; +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitRunnable; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.UUID; + +public class TokensCommand implements CommandExecutor { + @Override + @SuppressWarnings("deprecation") + public boolean onCommand(CommandSender s, Command cmd, String lbl, String[] args) { + UserManager um = Core.getUserManager(); + if (args.length == 0) { + if (!(s instanceof Player)) { + s.sendMessage(Lang.NOTPLAYER.s()); + return true; + } + s.sendMessage(Utils.f("&7You have &e" + um.getLoadedUser(((Player) s).getUniqueId()).getTokens() + " Tokens&7!")); + return true; + } + if (s instanceof Player) { + if ("shop".equalsIgnoreCase(args[0])) { + MenuManager.openMenu((Player) s, "tokenshop"); + return true; + } + User u = um.getLoadedUser(((Player) s).getUniqueId()); + if (!u.isAdmin()) { + s.sendMessage(Utils.f("&cYou do not have permission to execute this command!")); + return true; + } + } + switch (args[0].toLowerCase()) { + case "give": { + if (args.length != 3) { + s.sendMessage(Utils.f("&c/tokens give ")); + return true; + } + int amnt; + try { + amnt = Integer.parseInt(args[2]); + } catch (NumberFormatException e) { + s.sendMessage(Utils.f("&cThe amount must be a numerical value!")); + return true; + } + Player player = Bukkit.getPlayer(args[1]); + if (player != null) { + User user = um.getLoadedUser(player.getUniqueId()); + user.addTokens(amnt); + user.insertLog(player, "giveTokensCommand", "TOKENS", amnt + " Tokens", amnt, 0); + Bukkit.getPluginManager().callEvent(new UpdateEvent(player, UpdateReason.TOKENS)); + s.sendMessage(Utils.f("&7You gave &e" + amnt + " Tokens&7 to &a" + player.getName())); + return true; + } +// Core.getSQL().updateAsyncLater("update users set tokens=tokens+" + amnt + " where lastname='" + args[1] + "';"); + s.sendMessage(Utils.f("&cThat player is not online, so the tokens have been forcibly updated in the database.")); + + ServerUtil.runTaskAsync(() -> { + UUID uuid = UserDAO.getUuidByName(args[1]); + UserDAO.addUserTokens(uuid, amnt); + + if(uuid == null) Core.log("Error while logging giveTokensCommand for uuid " + uuid + ", name " + args[1] + ", amnt " + amnt); + else Utils.insertLog(uuid, args[1], "giveTokensCommand", "TOKENS", amnt + " Tokens", amnt, 0); + }); + +// new BukkitRunnable() { +// @Override +// public void run() { +// UUID uuid = null; +// String name = args[1]; +// try (ResultSet rs = Core.getSQL().query("select uuid,lastname from users where lastname='" + args[1] + "';")) { +// if (rs.next()) { +// uuid = UUID.fromString(rs.getString("uuid")); +// name = rs.getString("lastname"); +// } +// rs.close(); +// } catch (SQLException e) { +// e.printStackTrace(); +// } +// if (uuid == null) { +// Core.log("Error while logging giveTokensCommand for uuid " + uuid + ", name " + name + ", amnt " + amnt); +// } else Utils.insertLog(uuid, name, "giveTokensCommand", "TOKENS", amnt + " Tokens", amnt, 0); +// +// } +// }.runTaskAsynchronously(Core.getInstance()); + return true; + } + case "giveuuid": { + if (args.length != 3) { + s.sendMessage(Utils.f("&c/tokens give ")); + return true; + } + int amnt; + try { + amnt = Integer.parseInt(args[2]); + } catch (NumberFormatException e) { + s.sendMessage(Utils.f("&cThe amount must be a numerical value!")); + return true; + } + UUID uuid = UUID.fromString(args[1]); + Player player = Bukkit.getPlayer(uuid); + if (player != null) { + User user = um.getLoadedUser(uuid); + user.addTokens(amnt); + user.insertLog(player, "giveTokensCommand", "TOKENS", amnt + " Tokens", amnt, 0); + Bukkit.getPluginManager().callEvent(new UpdateEvent(player, UpdateReason.TOKENS)); + s.sendMessage(Utils.f("&7You gave &e" + amnt + " Tokens&7 to &a" + player.getName())); + return true; + } +// Core.getSQL().updateAsyncLater("update users set tokens=tokens+" + amnt + " where uuid='" + uuid + "';"); + ServerUtil.runTaskAsync(() -> { + UserDAO.addUserTokens(uuid, amnt); + String name = UserDAO.getNameByUuid(uuid); + + if(name == null) Core.log("Error while logging giveTokensCommand for uuid " + uuid + ", name " + name + ", amnt " + amnt); + else Utils.insertLog(uuid, name, "giveTokensCommand", "TOKENS", amnt + " Tokens", amnt, 0); + }); + + s.sendMessage(Utils.f("&cThat player is not online, so the tokens have been forcibly updated in the database.")); +// new BukkitRunnable() { +// @Override +// public void run() { +// String name = null; +// try (ResultSet rs = Core.getSQL().query("select lastname from users where uuid='" + args[1] + "';")) { +// if (rs.next()) { +// name = rs.getString("lastname"); +// } +// rs.close(); +// } catch (SQLException e) { +// e.printStackTrace(); +// } +// if (name == null) { +// Core.log("Error while logging giveTokensCommand for uuid " + uuid + ", name " + name + ", amnt " + amnt); +// } else Utils.insertLog(uuid, name, "giveTokensCommand", "TOKENS", amnt + " Tokens", amnt, 0); +// +// } +// }.runTaskAsynchronously(Core.getInstance()); + return true; + } + case "take": { + if (args.length != 3) { + s.sendMessage(Utils.f("&c/tokens take ")); + return true; + } + int amnt; + try { + amnt = Integer.parseInt(args[2]); + } catch (NumberFormatException e) { + s.sendMessage(Utils.f("&cThe amount must be a numerical value!")); + return true; + } + Player player = Bukkit.getPlayer(args[1]); + if (player != null) { + User user = um.getLoadedUser(player.getUniqueId()); + user.takeTokens(amnt); + user.insertLog(player, "takeTokensCommand", "TOKENS", amnt + " Tokens", -amnt, 0); + Bukkit.getPluginManager().callEvent(new UpdateEvent(player, UpdateReason.TOKENS)); + s.sendMessage(Utils.f("&7You took &e" + amnt + " Tokens&7 from &a" + player.getName())); + return true; + } +// Core.getSQL().updateAsyncLater("update users set tokens=tokens-" + amnt + " where lastname='" + args[1] + "';"); + ServerUtil.runTaskAsync(() -> { +// UserDAO.subtractUserBucksByName(args[1], amnt); + UUID uuid = UserDAO.getUuidByName(args[1]); + UserDAO.subtractUserTokens(uuid, amnt); + + if(uuid == null) Core.log("Error while logging takeTokensCommand for uuid " + uuid + ", name " + args[1] + ", amnt " + -amnt); + else Utils.insertLog(uuid, args[1], "takeTokensCommand", "TOKENS", amnt + " Tokens", -amnt, 0); + }); + + s.sendMessage(Utils.f("&cThat player is not online, so the tokens have been forcibly updated in the database.")); +// new BukkitRunnable() { +// @Override +// public void run() { +// UUID uuid = null; +// String name = args[1]; +// try (ResultSet rs = Core.getSQL().query("select uuid,lastname from users where lastname='" + args[1] + "';")) { +// if (rs.next()) { +// uuid = UUID.fromString(rs.getString("uuid")); +// name = rs.getString("lastname"); +// } +// rs.close(); +// } catch (SQLException e) { +// e.printStackTrace(); +// } +// if (uuid == null) { +// Core.log("Error while logging takeTokensCommand for uuid " + uuid + ", name " + name + ", amnt " + -amnt); +// } else Utils.insertLog(uuid, name, "takeTokensCommand", "TOKENS", amnt + " Tokens", -amnt, 0); +// +// } +// }.runTaskAsynchronously(Core.getInstance()); + return true; + } + case "set": { + if (args.length != 3) { + s.sendMessage(Utils.f("&c/tokens set ")); + return true; + } + int amnt; + try { + amnt = Integer.parseInt(args[2]); + } catch (NumberFormatException e) { + s.sendMessage(Utils.f("&cThe amount must be a numerical value!")); + return true; + } + Player player = Bukkit.getPlayer(args[1]); + if (player != null) { + User user = um.getLoadedUser(player.getUniqueId()); + user.setTokens(amnt); + user.insertLog(player, "setTokensCommand", "TOKENS", amnt + " Tokens", amnt, 0); + Bukkit.getPluginManager().callEvent(new UpdateEvent(player, UpdateReason.TOKENS)); + s.sendMessage(Utils.f("&7You set &a" + player.getName() + "&7's Tokens to &e" + amnt + "&7.")); + return true; + } +// Core.getSQL().updateAsyncLater("update users set tokens=" + amnt + " where lastname='" + args[1] + "';"); + ServerUtil.runTaskAsync(() -> { +// UserDAO.updateUserTokensByName(args[1], amnt); + UUID uuid = UserDAO.getUuidByName(args[1]); + UserDAO.updateUserTokens(uuid, amnt); + + if(uuid == null) Core.log("Error while logging setTokensCommand for uuid " + uuid + ", name " + args[1] + ", amnt " + -amnt); + else Utils.insertLog(uuid, args[1], "setTokensCommand", "TOKENS", amnt + " Tokens", amnt, 0); + }); + + s.sendMessage(Utils.f("&cThat player is not online, so the tokens have been forcibly updated in the database.")); +// new BukkitRunnable() { +// @Override +// public void run() { +// UUID uuid = null; +// String name = args[1]; +// try (ResultSet rs = Core.getSQL().query("select uuid,lastname from users where lastname='" + args[1] + "';")) { +// if (rs.next()) { +// uuid = UUID.fromString(rs.getString("uuid")); +// name = rs.getString("lastname"); +// } +// rs.close(); +// } catch (SQLException e) { +// e.printStackTrace(); +// } +// if (uuid == null) { +// Core.log("Error while logging setTokensCommand for uuid " + uuid + ", name " + name + ", amnt " + amnt); +// } else Utils.insertLog(uuid, name, "setTokensCommand", "TOKENS", amnt + " Tokens", amnt, 0); +// +// } +// }.runTaskAsynchronously(Core.getInstance()); + return true; + } + case "balance": + if (args.length != 2) { + s.sendMessage(Utils.f("/tokens balance ")); + return true; + } + UUID sender = ((Player) s).getUniqueId(); + String name = args[1]; + Player player = Bukkit.getPlayer(args[1]); + if (player != null) { + User user = um.getLoadedUser(player.getUniqueId()); + s.sendMessage( + Utils.f("&7The player &a" + player.getName() + "&7 has &a" + user.getTokens() + " Tokens&7.")); + return true; + } + s.sendMessage(Utils.f("&cThat player is not online, so hold on a second while we gather the information from the database.")); + + ServerUtil.runTaskAsync(() -> { + UUID uuid = UserDAO.getUuidByName(args[1]); + int value = UserDAO.getUserTokens(uuid); + ServerUtil.runTask(() -> { + if (value == -1) Bukkit.getPlayer(sender).sendMessage(Utils.f("&cThat player does not exist in the database!")); + else Bukkit.getPlayer(sender).sendMessage(Utils.f("&7The player &a" + name + "&7 has &e" + value + " Tokens&7.")); + }); + }); + +// Bukkit.getScheduler().scheduleAsyncDelayedTask(Core.getInstance(), () -> { +// int i; +// try (ResultSet rs = Core.getSQL().query("select tokens from users where lastname='" + name + "';")) { +// i = rs.next() ? rs.getInt("tokens") : -1; +// rs.close(); +// } catch (SQLException e) { +// e.printStackTrace(); +// return; +// } +// Bukkit.getScheduler().scheduleSyncDelayedTask(Core.getInstance(), () -> { +// if (i == -1) +// Bukkit.getPlayer(sender) +// .sendMessage(Utils.f("&cThat player does not exist in the database!")); +// else +// Bukkit.getPlayer(sender).sendMessage( +// Utils.f("&7The player &a" + name + "&7 has &e" + i + " Tokens&7.")); +// }); +// }); + default: + s.sendMessage(Utils.f("&c/tokens balance ")); + s.sendMessage(Utils.f("&c/tokens set ")); + s.sendMessage(Utils.f("&c/tokens give ")); + s.sendMessage(Utils.f("&c/tokens take ")); + return true; + } + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/TradeCommand.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/TradeCommand.java new file mode 100644 index 0000000..e7ad2f3 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/TradeCommand.java @@ -0,0 +1,117 @@ +package net.grandtheftmc.core.commands; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.GameMode; +import org.bukkit.entity.Player; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.trading.TradeManager; + +/** + * Created by Timothy Lampen on 11/1/2017. + */ +public class TradeCommand extends CoreCommand { + public TradeCommand() { + super("trade", "trade with other players", "tradeplayer"); + } + + @Override + public void execute(Player player, String[] args) { + if(args.length==0){ + player.sendMessage(Lang.TRADE.f("&7/trade &6- sends a trade request to the target player")); + return; + } + TradeManager tm = Core.getInstance().getTradeManager(); + + if (!tm.isEnabled()){ + player.sendMessage(ChatColor.RED + "Trading is currently disabled!"); + return; + } + + switch (args[0].toLowerCase()) { + case "accept": { + if(!tm.getPendingTrade(player.getUniqueId()).isPresent()) { + player.sendMessage(Lang.TRADE.f("&7You do not have any pending trade requests.")); + return; + } + Player origin = Bukkit.getPlayer(tm.getPendingTrade(player.getUniqueId()).get().getValue()); + if(origin == null) { + player.sendMessage(Lang.TRADE.f("&7The player who sent you the request is no longer online.")); + tm.removePendingTrade(player.getUniqueId()); + return; + } + if(Core.getTradeManager().getTrade(player).isPresent() || Core.getTradeManager().getTrade(origin).isPresent()) { + player.sendMessage(Lang.TRADE.f("&7You cannot trade with this player since they are already in a trade!")); + tm.removePendingTrade(player.getUniqueId()); + return; + } + if(player.getGameMode() != GameMode.SURVIVAL && player.getGameMode() != GameMode.ADVENTURE) { + player.sendMessage(Lang.TRADE.f("&7You cannot accept trades while spectating.")); + return; + } + if(origin.getGameMode() != GameMode.SURVIVAL && origin.getGameMode() != GameMode.ADVENTURE) { + player.sendMessage(Lang.TRADE.f("&7This player cannot accept trades just yet.")); + return; + } + if(!player.getWorld().getName().equals(origin.getWorld().getName()) || player.getLocation().distance(origin.getLocation())>10) { + player.sendMessage(Lang.TRADE.f("&7You cannot trade with this player because they are too far away!")); + tm.removePendingTrade(player.getUniqueId()); + return; + } + tm.removePendingTrade(player.getUniqueId()); + Core.getTradeManager().startTrade(origin, player); + return; + } + case "deny": { + if(!tm.getPendingTrade(player.getUniqueId()).isPresent()) { + player.sendMessage(Lang.TRADE.f("&7You do not have any pending trade requests.")); + return; + } + Player origin = Bukkit.getPlayer(tm.getPendingTrade(player.getUniqueId()).get().getValue()); + if(origin == null) { + player.sendMessage(Lang.TRADE.f("&7The player who sent you the request is no longer online.")); + return; + } + tm.removePendingTrade(player.getUniqueId()); + origin.sendMessage(Lang.TRADE.f("&7The player whom you sent the request to has declined it.")); + player.sendMessage(Lang.TRADE.f("&7You have declined the trade request.")); + return; + } + } + Player target = Bukkit.getPlayer(args[0]); + if(target==null) { + player.sendMessage(Lang.TRADE.f("&7That player is currently not online.")); + return; + } + + if(player.getGameMode() != GameMode.SURVIVAL && player.getGameMode() != GameMode.ADVENTURE) { + player.sendMessage(Lang.TRADE.f("&7You cannot request to trade while spectating.")); + return; + } + + if(target.getGameMode() != GameMode.SURVIVAL && target.getGameMode() != GameMode.ADVENTURE) { + player.sendMessage(Lang.TRADE.f("&7This player cannot accept trades just yet.")); + return; + } + + if(!target.getWorld().getName().equals(player.getWorld().getName())) { + player.sendMessage(Lang.TRADE.f("&7This player out of range..")); + return; + } + + if(target.getLocation().distance(player.getLocation()) > 10) { + player.sendMessage(Lang.TRADE.f("&7This player out of range..")); + return; + } + + if(target.equals(player)) { + player.sendMessage(Lang.TRADE.f("&7You cannot trade yourself.")); + return; + } + tm.addPendingTrade(player.getUniqueId(), target.getUniqueId()); + player.sendMessage(Lang.TRADE.f("&7You have sent a trade request to &6" + target.getName() + "&7.")); + target.sendMessage(Lang.TRADE.f("&7You have recieved a trade request from &6" + player.getName() + "&7. Please use '&a/trade accept&7' or '&c/trade deny&7' to respond.")); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/TrialCommand.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/TrialCommand.java new file mode 100644 index 0000000..7dcf72c --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/TrialCommand.java @@ -0,0 +1,34 @@ +package net.grandtheftmc.core.commands; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.util.C; +import org.bukkit.entity.Player; + +/** + * Created by Timothy Lampen on 2017-11-06. + */ +public class TrialCommand extends CoreCommand { + public TrialCommand() { + super("trial", "displays the amount of time left for your trial rank"); + } + + @Override + public void execute(Player player, String[] args) { + if(args.length==0 || !args[0].equalsIgnoreCase("time")) { + player.sendMessage(Lang.SHOP.f("&6/trial time &7- displays the amount of time remaining for your trial rank.")); + return; + } + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + if(user.getTrialRankExpiry()==0) { + player.sendMessage(Lang.SHOP.f("&7You do not have a trial rank!")); + return; + } + + long timeLeft = user.getTrialRankExpiry()-System.currentTimeMillis(); + player.sendMessage(Lang.SHOP.f("&7You have &6" + Utils.timeInMillisToText(timeLeft, C.GOLD, C.GRAY, C.GRAY) + " &7until your trial rank expires.")); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/TwitterCommand.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/TwitterCommand.java new file mode 100644 index 0000000..53d5baf --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/TwitterCommand.java @@ -0,0 +1,18 @@ +package net.grandtheftmc.core.commands; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import org.bukkit.entity.Player; + +public class TwitterCommand extends CoreCommand { + + public TwitterCommand() { + super("twitter", "Get the link to our official Twitter page."); + } + + @Override + public void execute(Player sender, String[] args) { + if (Core.getSettings().isSister()) return; + sender.sendMessage(Lang.TWITTER.f("&7Here is the link to our official Twitter page! &9https://twitter.com/grandtheft_mc/")); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/VotestreakCommand.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/VotestreakCommand.java new file mode 100644 index 0000000..46627cd --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/VotestreakCommand.java @@ -0,0 +1,68 @@ +package net.grandtheftmc.core.commands; + +import java.sql.Connection; +import java.util.UUID; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.database.BaseDatabase; +import net.grandtheftmc.core.database.dao.VoteDAO; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserDAO; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.util.ServerUtil; + +public class VotestreakCommand implements CommandExecutor { + @Override + public boolean onCommand(CommandSender s, Command c, String lbl, String[] args) { + if (!(s instanceof Player)) { + s.sendMessage(Lang.NOTPLAYER.s()); + return true; + } + Player player = (Player) s; + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + if (!user.isRank(UserRank.ADMIN)) { + player.sendMessage(Lang.NOPERM.s()); + return true; + } + if (args.length != 3) { + player.sendMessage(Lang.VOTE.f("&7/votestreak set &a ")); + return true; + } + switch (args[0]) { + case "set": + String target = args[1]; + int streak = 0; + try { + streak = Integer.valueOf(args[2]); + } + catch (NumberFormatException exception) { + } + + int finalStreak = streak; + + player.sendMessage(Lang.VOTE.f("&cAttempt to update manually...")); + ServerUtil.runTaskAsync(() -> { + try (Connection conn = BaseDatabase.getInstance().getConnection()){ + + UUID uuid = UserDAO.getUUID(conn, target); + if (uuid != null){ + VoteDAO.setVoteStreak(conn, uuid, finalStreak); + } + } + catch(Exception e){ + e.printStackTrace(); + } + }); + + return true; + default: + return true; + } + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/WhitelistCommand.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/WhitelistCommand.java new file mode 100644 index 0000000..89e74ab --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/commands/WhitelistCommand.java @@ -0,0 +1,127 @@ +package net.grandtheftmc.core.commands; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.whitelist.WhitelistManager; +import net.grandtheftmc.core.whitelist.WhitelistedUser; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.List; +import java.util.stream.Collectors; + +public class WhitelistCommand implements CommandExecutor { + + void unsafeMethod() { + throw new UnsupportedOperationException("You shouldn't call this!"); + } + + @Override + public boolean onCommand(CommandSender s, Command c, String lbl, String[] args) { + if (s instanceof Player) { + User u = Core.getUserManager().getLoadedUser(((Player) s).getUniqueId()); + if (!u.isAdmin()) { + s.sendMessage(Utils.f("&cYou do not have permission to execute this command!")); + return true; + } + +// unsafeMethod(); + } + if (args.length == 0) { + s.sendMessage(Utils.f("&c/whitelist add/remove ")); + s.sendMessage(Utils.f("&c/whitelist on/off")); + s.sendMessage(Utils.f("&c/whitelist list")); + return true; + } + WhitelistManager wm = Core.getWhitelistManager(); + switch (args[0].toLowerCase()) { + case "add": + if (args.length != 2) { + s.sendMessage(Utils.f("&c/whitelist add ")); + return true; + } + wm.whitelist(args[1]); + s.sendMessage(Utils.f("The player &a" + args[1] + " &fwas added to the whitelist.")); + return true; + case "remove": + if (args.length != 2) { + s.sendMessage(Utils.f("&c/whitelist remove ")); + return true; + } + wm.unwhitelist(args[1]); + s.sendMessage(Utils.f("The player &a" + args[1] + " &fwas removed from the whitelist.")); + return true; + case "on": + if (args.length != 1) { + s.sendMessage(Utils.f("&c/whitelist on")); + return true; + } + wm.setEnabled(true); + s.sendMessage(Utils.f("The whitelist was enabled.")); + return true; + case "off": + if (args.length != 1) { + s.sendMessage(Utils.f("&c/whitelist off")); + return true; + } + wm.setEnabled(false); + s.sendMessage(Utils.f("The whitelist was disabled.")); + return true; + case "list": { + if (args.length != 1) { + s.sendMessage(Utils.f("&c/whitelist list")); + return true; + } + List whitelist = wm.getWhitelistedUsers().stream().map(WhitelistedUser::getName).collect(Collectors.toList()); + + if (whitelist.isEmpty()) { + s.sendMessage("There are no whitelisted players!"); + return true; + } + String msg = "Whitelisted players: "; + for (String string : whitelist) + msg = msg + string + ", "; + if (msg.endsWith(", ")) + msg = msg.substring(0, msg.length() - 2); + s.sendMessage(Utils.f(msg)); + return true; + } + case "bypassrank": + if (args.length != 2) { + s.sendMessage(Utils.f("&c/whitelist bypassRank ")); + return true; + } + if ("none".equalsIgnoreCase(args[1])) { + wm.setBypassRank(null); + s.sendMessage(Utils.f("The whitelist can no longer be bypassed with a UserRank.")); + return true; + } + UserRank rank = UserRank.getUserRankOrNull(args[1]); + if (rank == null) { + String msg = Lang.RANKS + "&7There is no rank with the name &a" + args[2] + "&7! Valid ranks: "; + for (UserRank r : UserRank.getUserRanks()) + msg = msg + "&a" + r.getColoredName() + "&7, "; + if (msg.endsWith("&7, ")) + msg = msg.substring(0, msg.length() - 4); + msg += "&7."; + s.sendMessage(Utils.f(msg)); + return true; + } + wm.setBypassRank(rank); + s.sendMessage(Utils.f("&7Players with UserRank " + rank.getColoredNameBold() + "&7 can now bypass the whitelist.")); + return true; + default: + s.sendMessage(Utils.f("&c/whitelist add/remove ")); + s.sendMessage(Utils.f("&c/whitelist on/off")); + s.sendMessage(Utils.f("&c/whitelist list")); + return true; + } + + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/currency/Currency.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/currency/Currency.java new file mode 100644 index 0000000..02fb64a --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/currency/Currency.java @@ -0,0 +1,120 @@ +package net.grandtheftmc.core.currency; + +import java.util.Optional; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.util.Identifiable; + +public enum Currency implements Identifiable { + + CROWBAR("CROWBAR", "crowbar", "crowbars"), + TOKEN("TOKEN", "token", "tokens"), + MONEY("MONEY", "money", "money"), + PERMIT("PERMIT", "permit", "permits"), + COUPON_CREDIT("COUPON_CREDIT", "coupon credit", "coupon credits"), + VOTE_TOKEN("VOTE_TOKEN", "vote token", "vote tokens"); + + /** The id of the currency */ + private final String id; + /** The singular form for the currency */ + private final String singular; + /** The plural form for the currency */ + private final String plural; + /** The server_key that this currency is for */ + private String serverKey; + + /** + * Construct a new currency enum constant. + * + * @param id - the id of the currency + * @param singular - the singular representation for this currency + * @param plural - the plurarl representation for this currency + */ + Currency(String id, String singular, String plural) { + this.id = id; + this.singular = singular; + this.plural = plural; + } + + /** + * {@inheritDoc} + */ + @Override + public String getId() { + return id; + } + + /** + * Get the currency id representation as a singular id. + *

+ * Note: "coin" is now "coin" + *

+ * + * @return The currency id representation as a singular id. + */ + public String asSingular() { + return singular; + } + + /** + * Get the currency id representation as a plural id. + *

+ * Note: "coin" is now "coins" + *

+ * + * @return The currency id representation as a plural id. + */ + public String asPlural() { + return plural; + } + + /** + * Get the server key that this currency is for. + *

+ * Note: This must be set by the plugin or project for each currency. + *

+ * + * @return If a currency is a global one, "GLOBAL" is returned, or if it's a + * per server currency, the server will be returned, i.e. "GTM1". + */ + public String getServerKey() { + + // if not set, assume per server + if (serverKey == null || serverKey.isEmpty()){ + return Core.name().toUpperCase(); + } + + return serverKey; + } + + /** + * Set the server key that this currency is for. + *

+ * Note: This must be set by the plugin or project for each currency. + *

+ * If a currency is a global currency, set this as "GLOBAL". If a currency is per server, set this as the name of the server, "GTM1". + * + * @param serverKey - the server key for this currency + */ + public void setServerKey(String serverKey) { + this.serverKey = serverKey; + } + + /** + * Get the specified currency based off the id. + * + * @param id - the id of the currency + * + * @return The specified currency based off the id, if one exists, otherwise + * empty. + */ + public static Optional fromID(String id) { + for (Currency c : values()) { + if (c.getId().equalsIgnoreCase(id)) { + return Optional.of(c); + } + } + + return Optional.empty(); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/currency/Purse.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/currency/Purse.java new file mode 100644 index 0000000..d3be804 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/currency/Purse.java @@ -0,0 +1,160 @@ +package net.grandtheftmc.core.currency; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import net.grandtheftmc.core.currency.component.CurrencySource; +import net.grandtheftmc.core.currency.trans.CurrencyTransaction; + +public class Purse { + + /** Maps currency to amount of that currency */ + private Map currencyToAmount; + /** List of currency transactions to log */ + private List trans; + + /** + * Construct a new Purse to hold currencies. + */ + public Purse() { + this.currencyToAmount = new HashMap<>(); + this.trans = new ArrayList<>(); + } + + /** + * Register this currency to the purse. + * + * @param currency - the currency to register + * @result {@code true} if the currency was registered, {@code false} if it + * already exists. + */ + public boolean registerCurrency(Currency currency) { + if (!currencyToAmount.containsKey(currency)) { + currencyToAmount.put(currency, 0); + return true; + } + + return false; + } + + /** + * Get the balance of the specified currency. + * + * @param currency - the currency to get the balance of + * + * @return The amount of the currency currently within this purse, if it + * exists, otherwise -1. + */ + public int getBalance(Currency currency) { + if (currencyToAmount.containsKey(currency)) { + return currencyToAmount.get(currency); + } + + return -1; + } + + /** + * Deposit the selected currency in the purse. + * + * @param source - the reason for the deposit + * @param currency - the currency to deposit + * @param amount - the amount to deposit + * + * @return The new balance for the currency, if it exists, otherwise -1. + */ + public int deposit(CurrencySource source, Currency currency, int amount) { + + if (currencyToAmount.containsKey(currency)) { + int initial = currencyToAmount.get(currency); + + if (initial + amount < Integer.MAX_VALUE) { + currencyToAmount.put(currency, initial + amount); + } + else { + currencyToAmount.put(currency, Integer.MAX_VALUE); + } + + int newBal = currencyToAmount.get(currency); + + // log transaction + trans.add(new CurrencyTransaction(currency, source, amount, true)); + + return newBal; + } + + return -1; + } + + /** + * Withdraw the selected currency from the purse. + * + * @param source - the reason for the withdraw + * @param currency - the currency to withdraw + * @param amount - the amount to withdraw + * + * @return The new balance for the currency, if it exists, otherwise -1. If + * we cannot withdraw that amount, we will set the balance to 0. + */ + public int withdraw(CurrencySource source, Currency currency, int amount) { + + if (currencyToAmount.containsKey(currency)) { + int initial = currencyToAmount.get(currency); + int newValue = initial - amount; + + if (newValue >= 0) { + currencyToAmount.put(currency, newValue); + } + else { + currencyToAmount.put(currency, 0); + } + + // log transaction + trans.add(new CurrencyTransaction(currency, source, -1 * amount, false)); + + return currencyToAmount.get(currency); + } + + return -1; + } + + /** + * Sets the selected currency to the specified amount. + * + * @param currency - the currency to set + * @param value - the value to set the currency at + * + * @return {@code true} if the currency was set to the specified amount, + * {@code} false otherwise. + */ + public boolean set(Currency currency, int value) { + + if (currencyToAmount.containsKey(currency)) { + currencyToAmount.put(currency, value); + return true; + } + + return false; + } + + /** + * Get all the currencies that this Purse knows about. + * + * @return An unmodifiable map of all the currencies this purse knows about. + */ + public Map getCurrencies() { + return Collections.unmodifiableMap(currencyToAmount); + } + + /** + * Get a list of currency transactions that this purse has kept track of. + * + * @return An unmodifiable list of currency transactions that this purse has + * kept track of. + */ + public List getTransactionLog() { + return Collections.unmodifiableList(trans); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/currency/component/CurrencySource.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/currency/component/CurrencySource.java new file mode 100644 index 0000000..d54a76d --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/currency/component/CurrencySource.java @@ -0,0 +1,68 @@ +package net.grandtheftmc.core.currency.component; + +import java.util.Optional; + +/** + * This class should be treated as a static enum constant, where you can define + * currency source here, or create new Objects later. + * + * When this class is used in transaction history, it will log the source + * (type), and the reason (if one exists). + */ +public class CurrencySource { + + public static final CurrencySource CUSTOM = new CurrencySource(new Source("CUSTOM")); + public static final CurrencySource VOTE = new CurrencySource(new Source("VOTE")); + public static final CurrencySource KILL_PLAYER = new CurrencySource(new Source("KILL_PLAYER")); + public static final CurrencySource KILL_ENTITY = new CurrencySource(new Source("KILL_ENTITY")); + + /** The source for the currency */ + private final Source source; + /** The reason for the currency transaction */ + private final String reason; + + /** + * Construct a new CurrencySource. + * + * @param source - the source for the currency + * @param reason - the reason for the transaction. + */ + public CurrencySource(Source source, String reason) { + this.source = source; + this.reason = reason; + } + + /** + * Construct a new CurrencySource. + *

+ * Wrapper around {@link #CurrencySource(Source, String)}. + *

+ * + * @param source - the source for the currency + */ + public CurrencySource(Source source) { + this(source, null); + } + + /** + * Get the source of the currency. + * + * @return The source of the currency. + */ + public Source getSource() { + return source; + } + + /** + * Get the reason for the transaction. + * + * @return The reason for this currency to be given, if one exists. + */ + public Optional getReason() { + if (reason == null || reason.isEmpty()) { + return Optional.empty(); + } + + return Optional.of(reason); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/currency/component/Source.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/currency/component/Source.java new file mode 100644 index 0000000..ce001d5 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/currency/component/Source.java @@ -0,0 +1,31 @@ +package net.grandtheftmc.core.currency.component; + +import net.grandtheftmc.core.util.Identifiable; + +public class Source implements Identifiable { + + /** The id of the source */ + private final String id; + + /** + * Construct a new Source object. + *

+ * This is useful in conjunction with CurrencySource to determine the reason + * for a currency transaction. + * + * @param id - the id of the source + */ + public Source(String id) { + this.id = id; + } + + /** + * Get the id of the source. + * + * @return The id of the source. + */ + @Override + public String getId() { + return id; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/currency/trans/CurrencyTransaction.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/currency/trans/CurrencyTransaction.java new file mode 100644 index 0000000..7c99a09 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/currency/trans/CurrencyTransaction.java @@ -0,0 +1,71 @@ +package net.grandtheftmc.core.currency.trans; + +import net.grandtheftmc.core.currency.Currency; +import net.grandtheftmc.core.currency.component.CurrencySource; + +public class CurrencyTransaction { + + /** The currency involved */ + private final Currency currency; + /** The source of the transaction */ + private final CurrencySource source; + /** The amount involved */ + private final int amount; + /** Whether it was a deposit */ + private final boolean deposit; + + /** + * Construct a new CurrencyTransaction. + *

+ * This is used to log currency transfers in a player's purse. + *

+ * + * @param currency - the currency involved in the transaction + * @param source - the source of the currency + * @param amount - the amount of the currency + * @param deposit - what type of transaction this was + */ + public CurrencyTransaction(Currency currency, CurrencySource source, int amount, boolean deposit) { + this.currency = currency; + this.source = source; + this.amount = amount; + this.deposit = deposit; + } + + /** + * Get the currency involved in the transaction. + * + * @return The currency involved in the transaction. + */ + public Currency getCurrency() { + return currency; + } + + /** + * Get the source of the currency. + * + * @return The source of the currency. + */ + public CurrencySource getSource() { + return source; + } + + /** + * Get the amount of the currency in the transaction. + * + * @return The amount of currency in the transaction. + */ + public int getAmount() { + return amount; + } + + /** + * Get whether or not this is a deposit. + * + * @return {@code true} if the transaction was a deposit, {@code false} if + * it was a withdraw. + */ + public boolean isDeposit() { + return deposit; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/data/CompactLoc.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/data/CompactLoc.java new file mode 100644 index 0000000..d36ada6 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/data/CompactLoc.java @@ -0,0 +1,46 @@ +package net.grandtheftmc.core.data; + +import org.bukkit.Location; + +/** + * Created by Adam on 13/06/2017. + */ +public class CompactLoc { + + /* + Use this class as a quick and lightweight way of comparing player locations. + */ + + private final int x, z; + //If player has moved at least 1 block we mark them as not being afk. + private final static int threshold = 1; + + public CompactLoc(int x, int z) { + this.x = x; + this.z = z; + } + + public CompactLoc(Location l) { + this.x = l.getBlockX(); + this.z = l.getBlockZ(); + } + + public int getX() { + return x; + } + + public int getZ() { + return z; + } + + /** + * Check whether a CompactLoc is different from another within a configured range. + * @param loc The location to compare with. + * @return True if the distance between locations > threshold. + */ + public boolean differs(CompactLoc loc) { + //Keep it quick and simple. + int diff = Math.abs(loc.getX() - x) + Math.abs(loc.getZ() - z); + return diff >= threshold; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/BaseDatabase.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/BaseDatabase.java new file mode 100644 index 0000000..cf3ca8e --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/BaseDatabase.java @@ -0,0 +1,53 @@ +package net.grandtheftmc.core.database; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.SQLException; + +/** + * A generic database handler that acts as a singleton so we can reference it + * anywhere. + * + * @author sbahr + */ +public class BaseDatabase extends DatabaseHandler { + + /** Singleton instance for this class */ + private static BaseDatabase instance; + + /** + * Private constructor as singleton's cannot be instantiated. + */ + private BaseDatabase() { + // Note: DatabaseHandler doesn't have a constructor for a reason + } + + /** + * Get the singleton instance of this class. + *

+ * This allows you to call {@link #getConnection()}. + *

+ * + * @return The instance of this database. + */ + public static BaseDatabase getInstance() { + if (instance == null) { + instance = new BaseDatabase(); + } + + return instance; + } + + public static boolean runCustomQuery(String query) { + try (Connection connection = getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement(query)) { + statement.execute(); + } + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + + return true; + } +} \ No newline at end of file diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/DatabaseHandler.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/DatabaseHandler.java new file mode 100644 index 0000000..8ce4074 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/DatabaseHandler.java @@ -0,0 +1,241 @@ +package net.grandtheftmc.core.database; + +import java.io.PrintWriter; +import java.sql.Connection; +import java.sql.SQLException; + +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.plugin.Plugin; + +import com.zaxxer.hikari.HikariDataSource; + +import net.grandtheftmc.core.database.component.Database; +import net.grandtheftmc.core.database.component.DatabaseCredentials; + +/** + * A generic database handler that holds a HikariCP data source so we can have + * multiple database connection. + * + * Note: This should be init() with either the Plugin/Config path to load + * settings, or can be init() with just database credentials, which uses default + * HikariCP settings. + * + * @author sbahr + */ +public class DatabaseHandler implements Database { + + /** The default MySQL driver */ + private static final String DEFAULT_MYSQL_DRIVER = "com.mysql.jdbc.Driver"; + /** The database credentials */ + private DatabaseCredentials dbCreds; + /** Data source connection pool from HikariCP */ + private HikariDataSource hikariSource = new HikariDataSource(); + + // NOTE: HikariCP performs best at fixed pool size, minIdle=maxConns + // https://github.com/brettwooldridge/HikariCP + + /** How many minimum idle connections should we always have (2) */ + protected int minIdle = 2; + /** How many max connections should exist in pool (2) */ + protected int maxPoolSize = 2; + /** How long, in millis, we stop waiting for new connection (15 secs) */ + protected int connectionTimeoutMs = 15 * 1000; + /** How long, in millis, before connections timeout (45 secs) */ + protected int idleTimeoutMs = 45 * 1000; + /** How long, in millis, this connection can be alive for (30 mins) */ + protected int maxLifetimeMs = 30 * 60 * 1000; + /** How long, in millis, can a connection be gone from a pool (4 secs) */ + protected int leakDetectionThresholdMs = 4 * 1000; + /** The ping alive query */ + protected String connectionTestQuery = "SELECT 1"; + /** Should the connection cache prepared statements */ + protected boolean cachePreparedStatements = true; + /** Number of prepared statements to cache per connection */ + protected int preparedStatementCache = 250; + /** Max number of prepared statements to have */ + protected int maxPreparedStatementCache = 2048; + /** The log writer for Hikari */ + protected PrintWriter logWriter = new PrintWriter(System.out); + + /** + * Initialize the handler with the specified database credentials. + *

+ * Sets up the configuration for the connection pool and default settings. + *

+ * + * @param dbCreds - the credentials for the database + * @param driver - the driver class + */ + public void init(DatabaseCredentials dbCreds, String driver) { + this.dbCreds = dbCreds; + + // set the driver name for the connection driver + hikariSource.setDriverClassName(driver); + + // assume host/port combo together, or could just be without port + String connURL = dbCreds.getHost(); + + // if a port is defined + if (dbCreds.getPort() > 0) { + connURL = dbCreds.getHost() + ":" + dbCreds.getPort(); + } + + // set the jdbc url, note the character encoding + // https://stackoverflow.com/questions/3040597/jdbc-character-encoding + hikariSource.setJdbcUrl("jdbc:mysql://" + connURL + "/" + dbCreds.getName() + "?characterEncoding=UTF-8"); + + // set user/pass + hikariSource.setUsername(dbCreds.getUser()); + hikariSource.setPassword(dbCreds.getPass()); + + /** General conf settings for hikari */ + // works best when minIdle=maxPoolSize + hikariSource.setMinimumIdle(minIdle); + hikariSource.setMaximumPoolSize(maxPoolSize); + + // how long to wait, for a new connection + hikariSource.setConnectionTimeout(connectionTimeoutMs); + // how long before idle connection is destroyed + hikariSource.setIdleTimeout(idleTimeoutMs); + // how long can a connection exist + hikariSource.setMaxLifetime(maxLifetimeMs); + // how long connection is away from a pool before saying uh oh + hikariSource.setLeakDetectionThreshold(leakDetectionThresholdMs); + // test query to confirm alive + hikariSource.setConnectionTestQuery(connectionTestQuery); + // should we cache prepared statements + hikariSource.addDataSourceProperty("cachePrepStmts", "" + cachePreparedStatements); + // the size of the prepared statement cache + hikariSource.addDataSourceProperty("prepStmtCacheSize", "" + preparedStatementCache); + // the maximum cache limit + hikariSource.addDataSourceProperty("prepStmtCacheSqlLimit", "" + maxPreparedStatementCache); + + // MUST set log writer + try { + hikariSource.setLogWriter(new PrintWriter(System.out)); + } + catch (SQLException e) { + e.printStackTrace(); + } + } + + /** + * Initialize the database handler given the credentials. + * + * @param credentials - the login details to this database + */ + protected void init(DatabaseCredentials credentials) { + this.init(credentials, DEFAULT_MYSQL_DRIVER); + } + + /** + * Load the settings for HikariCP from the plugin config and stores them + * locally in the object, then initializes the database handler. + * + * @param plugin - the owning plugin + * @param path - the path to load settings from + */ + public void init(Plugin plugin, String path) { + + // grab plugin file configuration + FileConfiguration config = plugin.getConfig(); + + String host = config.getString(path + ".host", "localhost"); + int port = config.getInt(path + ".port", 3306); + String dbName = config.getString(path + ".database", "hyphenical"); + String username = config.getString(path + ".user", "user"); + String password = config.getString(path + ".password", "pass123"); + + // connection stats + int minIdle = config.getInt(path + ".min-idle", 2); + int maxConns = config.getInt(path + ".max-conn", 2); + + // save db credentials + config.set(path + ".host", host); + config.set(path + ".port", port); + config.set(path + ".database", dbName); + config.set(path + ".user", username); + config.set(path + ".password", password); + + // save the config + plugin.saveConfig(); + + // load local fields + this.minIdle = minIdle < 0 ? 1 : minIdle; + this.maxPoolSize = maxConns < 1 ? 1 : maxConns; + + // create database credentials + DatabaseCredentials creds = new DatabaseCredentials(host, port, dbName, username, password); + // initialize hikari cp + init(creds); + } + + /** + * Load the settings for HikariCP from the yaml config and stores them + * locally in the object, then initializes the database handler. + * + * @param config - the yaml configuration + * @param path - the path to load settings from + */ + public void init(YamlConfiguration config, String path) { + + String host = config.getString(path + ".host", "localhost"); + int port = config.getInt(path + ".port", 3306); + String dbName = config.getString(path + ".database", "hyphenical"); + String username = config.getString(path + ".user", "user"); + String password = config.getString(path + ".password", "pass123"); + + // connection stats + int minIdle = config.getInt(path + ".min-idle", 2); + int maxConns = config.getInt(path + ".max-conn", 2); + + // load local fields + this.minIdle = minIdle < 0 ? 1 : minIdle; + this.maxPoolSize = maxConns < 1 ? 1 : maxConns; + + // create database credentials + DatabaseCredentials creds = new DatabaseCredentials(host, port, dbName, username, password); + // initialize hikari cp + init(creds); + } + + /** + * Close HikariCP connection pool, and all the connections. + *

+ * Note: This should be called whenever the plugin turns off! + *

+ */ + public void close() { + if (hikariSource != null && !hikariSource.isClosed()) { + hikariSource.close(); + } + } + + /** + * {@inheritDoc} + */ + @Override + public DatabaseCredentials getCredentials() { + return dbCreds; + } + + /** + * {@inheritDoc} + */ + @Override + public Connection getConnection() { + if (hikariSource != null) { + try { + Connection conn = hikariSource.getConnection(); + return conn; + } + catch (Exception e) { + System.out.println("[DatabaseHandler] Unable to grab a connection from the connection pool!"); + e.printStackTrace(); + } + } + + return null; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/component/Database.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/component/Database.java new file mode 100644 index 0000000..0df910d --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/component/Database.java @@ -0,0 +1,26 @@ +package net.grandtheftmc.core.database.component; + +import java.sql.Connection; + +/** + * An interface that represents a database (and it's credentials). + * + * @author sbahr + */ +public interface Database { + + /** + * Get the credentials for the database. + * + * @return The credentials for the database. + */ + DatabaseCredentials getCredentials(); + + /** + * Get the connection for the database. + * + * @return The connection for the database. + */ + Connection getConnection(); + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/component/DatabaseCredentials.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/component/DatabaseCredentials.java new file mode 100644 index 0000000..6481439 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/component/DatabaseCredentials.java @@ -0,0 +1,112 @@ +package net.grandtheftmc.core.database.component; + +/** + * Represents an immutable data object containing information about a connection + * to the database. + * + * @author sbahr + */ +public class DatabaseCredentials { + + /** The host of the db, ex: example.com */ + private final String host; + /** The port associated, ex: 3306 */ + private final int port; + /** The name of the database to use, ex: test_db */ + private final String dbName; + /** The name of the user that has access to the db, ex: user123 */ + private final String dbUser; + /** The password for the user, ex: pass123 */ + private final String dbPass; + + /** + * Construct a new DatabaseCredentials object. + * + * @param host - the host of the db, ex: example.com + * @param port - the port for the db, ex: 3306 + * @param dbName - the name of the db to use, ex: test_db + * @param dbUser - the user of the db, ex: user123 + * @param dbPass - the pass for the user, ex: pass123 + */ + public DatabaseCredentials(String host, int port, String dbName, String dbUser, String dbPass) { + this.host = host; + this.port = port; + this.dbName = dbName; + this.dbUser = dbUser; + this.dbPass = dbPass; + } + + /** + * Construct a new DatabaseCredentials object. + *

+ * The port for the host is not defined as an argument and either should be + * supplied in the host argument or use a different constructor. If no port + * is defined, we'll use the default port. + *

+ * + * @param host - the host of the db, ex: example.com + * @param dbName - the name of the db to use, ex: test_db + * @param dbUser - the user of the db, ex: user123 + * @param dbPass - the pass for the user, ex: pass123 + */ + public DatabaseCredentials(String host, String dbName, String dbUser, String dbPass) { + this(host, -1, dbName, dbUser, dbPass); + } + + /** + * Get the host associated with this database credentials. + *

+ * The host URL, ex: www.example.com + *

+ * + * @return The host URL for the database. + */ + public final String getHost() { + return host; + } + + /** + * Get the port number for the database. + *

+ * The port number could be irrelevant if defined in {@link #getHost()}. If + * the port number is -1, use the default port. + *

+ * + * @return The port number for the database. + */ + public final int getPort() { + return port; + } + + /** + * Get the name of the database that we are using. + *

+ * This is the name of the database, as there can be multiple databases + * within one database. + *

+ * + * @return The name of the database we are using. + */ + public final String getName() { + return dbName; + } + + /** + * Get the username of the user that has access to the database. + * + * @return The name for the user that has access to this database. + */ + public final String getUser() { + return dbUser; + } + + /** + * Get the password of the user that has access to the database. + * + * @return The password, associated with the user, that has access to this + * database. + */ + public final String getPass() { + return dbPass; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/dao/AlertsDAO.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/dao/AlertsDAO.java new file mode 100644 index 0000000..93a4943 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/dao/AlertsDAO.java @@ -0,0 +1,221 @@ +package net.grandtheftmc.core.database.dao; + +import com.google.common.collect.Lists; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.alert.Alert; +import net.grandtheftmc.core.alert.AlertEntry; +import net.grandtheftmc.core.alert.AlertManager; +import net.grandtheftmc.core.alert.type.AlertShowType; +import net.grandtheftmc.core.alert.type.AlertType; +import net.grandtheftmc.core.database.BaseDatabase; +import org.bukkit.entity.Player; + +import java.sql.*; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; +import java.util.UUID; + +public class AlertsDAO { + + public static boolean createAlertsTable() { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("CREATE TABLE IF NOT EXISTS `alerts`(" + + "`id` int NOT NULL AUTO_INCREMENT," + + "`name` varchar(255) NOT NULL," + + "`description` varchar(255) DEFAULT 'none'," + + "`image` varchar(255)," + + "`link` varchar(255)," + + "`showType` varchar(32) NOT NULL," + + "`type` varchar(32) NOT NULL," + + "`disabled` varchar(6)," + + "`start` timestamp NOT NULL," + + "`end` timestamp NOT NULL," + + "`player` varchar(32) NOT NULL," + + "`addon` longtext," + + "PRIMARY KEY (`id`));")) { + statement.execute(); + } + } catch (SQLException e) { + Core.error("[AlertsDAO:createAlertsTable()] SQLException occurred"); + e.printStackTrace(); + return false; + } + + return true; + } + + public static boolean createAlertUserTable() { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("CREATE TABLE IF NOT EXISTS `alert_users`(" + + "`uuid` varchar(36) NOT NULL," + + "`id` int NOT NULL," + + "`complete` varchar(6) NOT NULL," + + "`input` longtext);")) { + statement.execute(); + } + } catch (SQLException e) { + Core.error("[AlertsDAO:createAlertUserTable()] SQLException occurred"); + e.printStackTrace(); + return false; + } + + return true; + } + + public static Optional[]> fetchAllAlerts() { + List[] alertList = new ArrayList[2];//0=alerts, 1=polls + alertList[0] = Lists.newArrayList(); + alertList[1] = Lists.newArrayList(); + + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("SELECT * FROM `alerts`;")) { + try (ResultSet result = statement.executeQuery()) { + while (result.next()) { + int id = result.getInt("id"); + String name = result.getString("name"); + String player = result.getString("player"); + AlertType type; + AlertShowType showType; + try { + type = AlertType.valueOf(result.getString("type")); + showType = AlertShowType.valueOf(result.getString("showType")); + } catch (Exception e) { + continue; + } + String link = result.getString("link"), desc = result.getString("description"); + Timestamp start = result.getTimestamp("start"), end = result.getTimestamp("end"); + boolean disabled = Boolean.parseBoolean(result.getString("disabled")); + + if (type == AlertType.POLL) { + AlertEntry entry = new AlertEntry(name, null, showType, type, link, start, end, disabled); + entry.setUniqueIdentifier(id); + entry.setDescription(desc); + entry.setPlayer(player); + alertList[1].add(entry); + continue; + } + + String image = result.getString("image"); + AlertEntry entry = new AlertEntry(name, image, showType, type, link, start, end, disabled); + entry.setUniqueIdentifier(id); + entry.setDescription(desc); + entry.setPlayer(player); + alertList[0].add(entry); + } + } + } + } catch (SQLException e) { + Core.error("[AlertsDAO:createAlertUserTable()] SQLException occurred"); + e.printStackTrace(); + return Optional.empty(); + } + + return Optional.of(alertList); + } + + public static boolean insertAlert(Alert alert) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("INSERT INTO `alerts` (`name`,`description`,`image`,`link`,`showType`,`type`,`disabled`,`start`,`end`,`player`,`addon`) VALUES(?,?,?,?,?,?,?,?,?,?,?);")) { + statement.setString(1, alert.getName()); + statement.setString(2, alert.getDescription()); + statement.setString(3, alert.getImageUrl()); + statement.setString(4, alert.getLink()); + statement.setString(5, alert.getShowType().name()); + statement.setString(6, alert.getAlertType().name()); + statement.setString(7, String.valueOf(alert.isDisabled())); + statement.setTimestamp(8, alert.getStart()); + statement.setTimestamp(9, alert.getEnd()); + statement.setString(10, alert.getPlayer()); + statement.setString(11, "views:0"); + statement.execute(); + } + } catch (SQLException e) { + Core.error("[AlertsDAO:insertAlert(alert)] SQLException occurred"); + e.printStackTrace(); + return false; + } + + return true; + } + + public static boolean insertAlertUser(Player player, Alert alert) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("INSERT INTO `alert_users` (`uuid`,`id`,`complete`,`input`) VALUES(?,?,?,?);")) { + statement.setString(1, player.getUniqueId().toString()); + statement.setInt(2, alert.getUniqueIdentifier()); + statement.setString(3, "true"); + statement.setString(4, "none"); + statement.execute(); + } + } catch (SQLException e) { + Core.error("[AlertsDAO:insertAlertUser(player,alert)] SQLException occurred"); + e.printStackTrace(); + return false; + } + + return true; + } + + public static boolean updateAlert(Alert alert) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE `alerts` SET `name`=?,`description`=?,`image`=?,`link`=?,`showType`=?,`type`=?,`disabled`=?,`start`=?,`end`=?,`player`=?,`addon`=? WHERE `id`=?;")) { + statement.setString(1, alert.getName()); + statement.setString(2, alert.getDescription()); + statement.setString(3, alert.getImageUrl()); + statement.setString(4, alert.getLink()); + statement.setString(5, alert.getShowType().name()); + statement.setString(6, alert.getAlertType().name()); + statement.setString(7, String.valueOf(alert.isDisabled())); + statement.setTimestamp(8, alert.getStart()); + statement.setTimestamp(9, alert.getEnd()); + statement.setString(10, alert.getPlayer()); + statement.setString(11, "views:0"); + statement.setInt(12, alert.getUniqueIdentifier()); + statement.execute(); + } + } catch (SQLException e) { + Core.error("[AlertsDAO:updateAlert(alert)] SQLException occurred"); + e.printStackTrace(); + return false; + } + + return true; + } + + public static boolean deleteAlert(Alert alert) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("DELETE FROM `alerts` WHERE `id`=?;")) { + statement.setInt(1, alert.getUniqueIdentifier()); + statement.execute(); + } + } catch (SQLException e) { + Core.error("[AlertsDAO:deleteAlert(alert)] SQLException occurred"); + e.printStackTrace(); + return false; + } + + return true; + } + + public static Optional> fetchAlertsForPlayer(AlertManager alertManager, UUID uuid) { + List list = alertManager.getAvailableAlerts(); + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("SELECT `id` FROM `alert_users` WHERE `uuid`=?;")) { + statement.setString(1, uuid.toString()); + try (ResultSet result = statement.executeQuery()) { + while(result.next()) { + int id = result.getInt("id"); + alertManager.getAvailableAlertById(id).ifPresent(list::remove); + } + } + } + } catch (SQLException e) { + Core.error("[AlertsDAO:fetchAlertsForPlayer(uuid)] SQLException occurred"); + e.printStackTrace(); + return Optional.empty(); + } + + return Optional.of(list); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/dao/CurrencyDAO.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/dao/CurrencyDAO.java new file mode 100644 index 0000000..a704ebf --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/dao/CurrencyDAO.java @@ -0,0 +1,282 @@ +package net.grandtheftmc.core.database.dao; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.currency.Currency; +import net.grandtheftmc.core.currency.trans.CurrencyTransaction; + +public class CurrencyDAO { + + /** + * Get the amount of the specified currency for the specified uuid on the + * given serverKey. + * + * @param conn - the database connection thread + * @param serverKey - the key of server to lookup the currency for + * @param uuid - the uuid of the of the user + * @param currency - the currency to retrieve + * + * @return The amount of the specified currency the user has, if found, + * otherwise 0. + */ + public static Integer getCurrency(Connection conn, String serverKey, UUID uuid, Currency currency) { + + String query = "SELECT amount FROM user_currency WHERE uuid=UNHEX(?) AND server_key=? AND currency=?;"; + + try (PreparedStatement ps = conn.prepareStatement(query)) { + ps.setString(1, uuid.toString().replaceAll("-", "")); + ps.setString(2, serverKey); + ps.setString(3, currency.getId()); + + try (ResultSet result = ps.executeQuery()) { + if (result.next()) { + return result.getInt("amount"); + } + } + } + catch (SQLException exc) { + Core.log("[CurrencyDAO] Error attempting to getCurrency() for serverKey=" + serverKey + ", uuid=" + uuid.toString() + ", currency=" + currency.getId()); + exc.printStackTrace(); + } + + return 0; + } + + /** + * Save the specified currency/amount for the specified user. + * + * @param conn - the database connection thread + * @param serverKey - the server key + * @param uuid - the uuid of the user + * @param currency - the currency to save + * @param balance - the balance of the currency + * + * @return {@code true} if the currency was saved, {@code false} otherwise. + */ + public static boolean saveCurrency(Connection conn, String serverKey, UUID uuid, Currency currency, int balance){ + + String query = "INSERT IGNORE INTO user_currency (uuid, server_key, currency, amount) VALUES (UNHEX(?), ?, ?, ?) ON DUPLICATE KEY UPDATE amount = VALUES(amount);"; + + try (PreparedStatement ps = conn.prepareStatement(query)) { + ps.setString(1, uuid.toString().replaceAll("-", "")); + ps.setString(2, serverKey); + ps.setString(3, currency.getId()); + ps.setInt(4, balance); + + ps.executeUpdate(); + return true; + } + catch (SQLException exc) { + Core.log("[CurrencyDAO] Error attempting to saveCurrency() for serverKey=" + serverKey + ", uuid=" + uuid.toString() + ", currency=" + currency.getId() + ", amount=" + balance); + exc.printStackTrace(); + return false; + } + } + + /** + * Increments the specified currency/amount for the specified user. + * + * @param conn - the database connection thread + * @param serverKey - the server key + * @param uuid - the uuid of the user + * @param currency - the currency to save + * @param numToAdd - the number to add + * + * @return {@code true} if the currency was incremented, {@code false} otherwise. + * + * @deprecated - This only exists for compatibility purposes, and is not safe without mutex contention. + */ + @Deprecated + public static boolean addCurrency(Connection conn, String serverKey, UUID uuid, Currency currency, int numToAdd){ + + String query = "UPDATE user_currency SET amount=amount + ? WHERE uuid=UNHEX(?) AND server_key=? AND currency=?;"; + + try (PreparedStatement ps = conn.prepareStatement(query)) { + ps.setInt(1, numToAdd); + ps.setString(2, uuid.toString().replaceAll("-", "")); + ps.setString(3, serverKey); + ps.setString(4, currency.getId()); + + ps.executeUpdate(); + return true; + } + catch (SQLException exc) { + Core.log("[CurrencyDAO] Error attempting to addCurrency() for serverKey=" + serverKey + ", uuid=" + uuid.toString() + ", currency=" + currency.getId() + ", numToAdd=" + numToAdd); + exc.printStackTrace(); + return false; + } + } + + /** + * Creates the specified currency entry for the specified user. + *

+ * This is so they have a value to save to, and should be checked when a user logs in. + *

+ * + * @param conn - the database connection thread + * @param serverKey - the server key + * @param uuid - the uuid of the user + * @param currency - the currency to save + * + * @return {@code true} if the currency was created, {@code false} otherwise. + */ + public static boolean createCurrency(Connection conn, String serverKey, UUID uuid, Currency currency){ + + String existQuery = "SELECT currency FROM user_currency WHERE uuid=UNHEX(?) AND server_key=? AND currency=?"; + + boolean exists = false; + try (PreparedStatement ps = conn.prepareStatement(existQuery)) { + ps.setString(1, uuid.toString().replaceAll("-", "")); + ps.setString(2, serverKey); + ps.setString(3, currency.getId()); + + try (ResultSet result = ps.executeQuery()){ + if (result.next()){ + String c = result.getString("currency"); + if (c != null){ + exists = true; + } + } + } + } + catch (SQLException exc) { + Core.log("[CurrencyDAO] Error attempting to createCurrency(EXIST) for serverKey=" + serverKey + ", uuid=" + uuid.toString() + ", currency=" + currency.getId()); + exc.printStackTrace(); + return false; + } + + if (!exists){ + String query = "INSERT IGNORE INTO user_currency (uuid, server_key, currency, amount) VALUES (UNHEX(?), ?, ?, ?);"; + + try (PreparedStatement ps = conn.prepareStatement(query)) { + ps.setString(1, uuid.toString().replaceAll("-", "")); + ps.setString(2, serverKey); + ps.setString(3, currency.getId()); + ps.setInt(4, 0); + + ps.executeUpdate(); + + // currency was created, so return true + return true; + } + catch (SQLException exc) { + Core.log("[CurrencyDAO] Error attempting to createCurrency(CREATE) for serverKey=" + serverKey + ", uuid=" + uuid.toString() + ", currency=" + currency.getId()); + exc.printStackTrace(); + return false; + } + } + + return false; + } + + /** + * Get all the currencies for the specified user on the specified serverKey. + * + * @param conn - the database connection thread + * @param serverKey - the key of the server to lookup + * @param uuid - the uuid of the user to lookup + * + * @return A mapping of Currency to Integer where the currency is the unique + * lookup and the Integer is how much of that currency the player + * has. + */ + public static Map getAllCurrencies(Connection conn, String serverKey, UUID uuid) { + + Map currencies = new HashMap<>(); + + String query = "SELECT currency, amount FROM user_currency WHERE uuid=UNHEX(?) AND server_key=?;"; + + try (PreparedStatement ps = conn.prepareStatement(query)) { + ps.setString(1, uuid.toString().replaceAll("-", "")); + ps.setString(2, serverKey); + + try (ResultSet result = ps.executeQuery()) { + while (result.next()) { + + Currency curr = Currency.fromID(result.getString("currency")).orElse(null); + if (curr != null) { + int amount = result.getInt("amount"); + + currencies.put(curr, amount); + } + } + } + } + catch (SQLException exc) { + Core.log("[CurrencyDAO] Error attempting to getAllCurrencies() for serverKey=" + serverKey + ", uuid=" + uuid.toString()); + exc.printStackTrace(); + } + + return currencies; + } + + /** + * Saves all the currencies specified to the database for the given user. + * + * @param conn - the database connection thread + * @param serverKey - the server key to save for + * @param uuid - the uuid of the user + * @param currencies - the currencies to save + */ + public static void saveCurrencies(Connection conn, String serverKey, UUID uuid, Map currencies) { + + for (Currency currency : currencies.keySet()){ + + int balance = currencies.get(currency); + + String query = "INSERT IGNORE INTO user_currency (uuid, server_key, currency, amount) VALUES (UNHEX(?), ?, ?, ?) ON DUPLICATE KEY UPDATE amount = VALUES(amount);"; + + try (PreparedStatement ps = conn.prepareStatement(query)) { + ps.setString(1, uuid.toString().replaceAll("-", "")); + ps.setString(2, serverKey); + ps.setString(3, currency.getId()); + ps.setInt(4, balance); + + ps.executeUpdate(); + } + catch (SQLException exc) { + Core.log("[CurrencyDAO] Error attempting to saveCurrencies() for serverKey=" + serverKey + ", uuid=" + uuid.toString() + ", currency=" + currency.getId() + ", amount=" + balance); + exc.printStackTrace(); + } + } + } + + /** + * Logs the specified currency transactions to the database. + * + * @param conn - the database connection thread + * @param serverKey - the server key + * @param uuid - the uuid of the player saving their transaction + * @param trans - the list of transactions to save + */ + public static void logCurrencyTransaction(Connection conn, String serverKey, UUID uuid, List trans){ + + for (CurrencyTransaction t : trans){ + String query = "INSERT INTO log_currency_transaction (uuid, server_key, currency, amount, source, reason) VALUES (UNHEX(?), ?, ?, ?, ?, ?);"; + + try (PreparedStatement ps = conn.prepareStatement(query)){ + ps.setString(1, uuid.toString().replaceAll("-", "")); + ps.setString(2, serverKey); + ps.setString(3, t.getCurrency().getId()); + ps.setInt(4, t.getAmount()); + ps.setString(5, t.getSource().getSource().getId()); + ps.setString(6, t.getSource().getReason().isPresent() ? t.getSource().getReason().get() : ""); + + ps.executeUpdate(); + } + catch(SQLException exc){ + Core.log("[CurrencyDAO] Error logging currency transaction for server_key=" + serverKey + ", uuid=" + uuid.toString() + ", transaction=" + t.toString()); + exc.printStackTrace(); + } + } + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/dao/ExampleDAO.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/dao/ExampleDAO.java new file mode 100644 index 0000000..7197d47 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/dao/ExampleDAO.java @@ -0,0 +1,205 @@ +package net.grandtheftmc.core.database.dao; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; +import java.util.UUID; + +import org.bukkit.Bukkit; +import org.bukkit.plugin.Plugin; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.database.BaseDatabase; +import net.grandtheftmc.core.servers.Server; +import net.grandtheftmc.core.servers.ServerType; +import net.grandtheftmc.core.users.UserRank; + +/** + * Serves as an example of how DAOs should work. + * + * @author sbahr + */ +public class ExampleDAO { + + /** + * Example usage when running on a sync thread. + */ + public static void exampleUsageInCodeSync() { + + try (Connection conn = BaseDatabase.getInstance().getConnection()) { + ExampleDAO.setName(conn, UUID.randomUUID(), "HeyThere"); + } + catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * Example usage when wanting to update something async, not needing result + * return. + * + * @param plugin - the plugin instance + */ + public static void exampleUsageInCodeAsyncUpdate(Plugin plugin) { + + // this will update the username off main thread + Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> { + + try (Connection conn = BaseDatabase.getInstance().getConnection()) { + ExampleDAO.setName(conn, UUID.randomUUID(), "HeyThere"); + } + catch (Exception e) { + e.printStackTrace(); + } + }); + } + + /** + * Example usage when wanting an async fetch of information. + * + * @param plugin - the plugin instance + */ + public static void exampleUsageInCodeAsyncFetch(Plugin plugin) { + + // this will update the username off main thread + Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> { + + // build result OUTSIDE of try/with resource so connection + // closes + List servers = new ArrayList<>(); + try (Connection conn = BaseDatabase.getInstance().getConnection()) { + servers.addAll(ExampleDAO.getServers(conn)); + } + catch (Exception e) { + e.printStackTrace(); + } + + // if we need to get back on sync + Bukkit.getScheduler().runTask(plugin, () -> { + + if (!servers.isEmpty()){ + servers.forEach(s -> { + Bukkit.broadcastMessage("Server name: " + s.getName()); + }); + } + }); + }); + } + + /** + * Sets the name of a specified uuid. + * + * @param conn - the database connection thread + * @param uuid - the uuid of the user to set the name for + * @param name - the new name to set + * + * @return {@code true} if the query successfully ran, {@code false} + * otherwise. + */ + public static boolean setName(Connection conn, UUID uuid, String name) { + + String query = "UPDATE user SET name=? WHERE uuid=UNHEX(?);"; + + try (PreparedStatement ps = conn.prepareStatement(query)) { + ps.setString(1, name); + ps.setString(2, uuid.toString().replaceAll("-", "")); + ps.executeUpdate(); + return true; + } + catch (SQLException exc) { + Core.log("[ExampleDAO] Unable to execute setName() for uuid=" + uuid.toString() + " and name=" + name); + exc.printStackTrace(); + } + + return false; + } + + /** + * Delete from the database the specified user. + * + * @param conn - the database connection thread + * @param uuid - the uuid of the user to delete + * + * @return {@code true} if the query ran, {@code false} otherwise. + */ + public static boolean deleteUser(Connection conn, UUID uuid) { + + String query = "DELETE FROM user WHERE uuid=UNHEX(?);"; + + try (PreparedStatement ps = conn.prepareStatement(query)) { + ps.setString(1, uuid.toString().replaceAll("-", "")); + ps.executeUpdate(); + + return true; + } + catch (SQLException exc) { + Core.log("[ExampleDAO] Unable to execute deleteUser() for uuid=" + uuid.toString()); + exc.printStackTrace(); + } + + return false; + } + + /** + * Get a list of servers that are active in the database. + * + * @param conn - the database connection thread + * + * @return A list of servers that were located in the database. + */ + public static List getServers(Connection conn) { + + List servers = new ArrayList<>(); + String query = "SELECT * FROM servers"; + + try (PreparedStatement ps = conn.prepareStatement(query)) { + + try (ResultSet result = ps.executeQuery()) { + while (result.next()) { + Server server = new Server(result.getString("name"), ServerType.getType(result.getString("type")), result.getInt("number"), result.getString("ip"), result.getInt("port"), UserRank.getUserRankOrNull(result.getString("rankToJoin"))); + servers.add(server); + } + } + } + catch (SQLException exc) { + Core.log("[ExampleDAO] Unable to execute getServers()"); + exc.printStackTrace(); + } + + return servers; + } + + /** + * Get the server object given the specified server id, or server number. + * + * @param conn - the database connection thread + * @param serverID - the id of the server to get + * + * @return The server, if one was found. + */ + public static Optional getServer(Connection conn, int serverID) { + + String query = "SELECT * FROM servers WHERE number=?;"; + + try (PreparedStatement ps = conn.prepareStatement(query)) { + ps.setInt(1, serverID); + + try (ResultSet result = ps.executeQuery()) { + if (result.next()) { + Server server = new Server(result.getString("name"), ServerType.getType(result.getString("type")), result.getInt("number"), result.getString("ip"), result.getInt("port"), UserRank.getUserRankOrNull(result.getString("rankToJoin"))); + return Optional.of(server); + } + } + } + catch (SQLException exc) { + Core.log("[ExampleDAO] Unable to execute getServers()"); + exc.printStackTrace(); + } + + return Optional.empty(); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/dao/LogDAO.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/dao/LogDAO.java new file mode 100644 index 0000000..263b424 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/dao/LogDAO.java @@ -0,0 +1,35 @@ +package net.grandtheftmc.core.database.dao; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.database.BaseDatabase; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.SQLException; +import java.util.UUID; + +public class LogDAO { + + public static boolean insertLog(UUID uuid, String name, String action, String type, String reward, double amount, double price) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("INSERT INTO `logs`(`uuid`,`name`,`action`,`type`,`reward`,`amount`,`price`,`server`) VALUES(?,?,?,?,?,?,?,?);")) { + statement.setString(1, uuid.toString()); + statement.setString(2, name); + statement.setString(3, action); + statement.setString(4, type); + statement.setString(5, reward); + statement.setDouble(6, amount); + statement.setDouble(7, price); + statement.setString(8, Core.name()); + + statement.execute(); + } + } catch (SQLException e) { + Core.error("[UserDAO:insertLog()] SQLException occurred"); + e.printStackTrace(); + return false; + } + + return true; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/dao/MutexDAO.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/dao/MutexDAO.java new file mode 100644 index 0000000..bd80e0c --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/dao/MutexDAO.java @@ -0,0 +1,68 @@ +package net.grandtheftmc.core.database.dao; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.UUID; + +import net.grandtheftmc.core.util.debug.Log; + +public class MutexDAO { + + /** + * Get the user's mutex. + *

+ * If this returns true, then the user's mutex is already lent out to + * someone else. If this returns false, then the user's mutex is not yet + * occupied. + * + * @param conn - the database connection thread + * @param uuid - the uuid of the user + * + * @return {@code true} if the user's mutex is already taken, {@code false} + * if the user's mutex is empty. + */ + public static boolean getUserMutex(Connection conn, UUID uuid) { + + boolean mutex = false; + + String query = "SELECT mutex FROM user WHERE uuid=UNHEX('" + uuid.toString().replaceAll("-", "") + "')"; + + try (ResultSet result = conn.createStatement().executeQuery(query)) { + if (result.next()) { + mutex = result.getBoolean("mutex"); + } + } + catch (SQLException exc) { + Log.error("Core", "Error executing getUserMutex() for user identified by " + uuid.toString()); + exc.printStackTrace(); + } + + return mutex; + } + + /** + * Updates the user's mutex. + * + * @param conn - the database connection thread + * @param uuid - the uuid of the user + * @param mutex - {@code true} if we still want to occupy the mutex, + * {@code false} otherwise. + */ + public static void setUserMutex(Connection conn, UUID uuid, boolean mutex) { + + String query = "UPDATE user SET mutex=? WHERE uuid=UNHEX('" + uuid.toString().replaceAll("-", "") + "')"; + + try (PreparedStatement statement = conn.prepareStatement(query)) { + statement.setBoolean(1, mutex); + + statement.executeUpdate(); + } + catch (SQLException exc) { + Log.error("Core", "Error executing setUserMutex() for user identified by " + uuid.toString()); + exc.printStackTrace(); + } + } +} + diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/dao/OldVoteDAO.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/dao/OldVoteDAO.java new file mode 100644 index 0000000..80c9d1f --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/dao/OldVoteDAO.java @@ -0,0 +1,439 @@ +package net.grandtheftmc.core.database.dao; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.List; +import java.util.Optional; +import java.util.UUID; + +import com.google.common.collect.Lists; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.database.BaseDatabase; +import net.grandtheftmc.core.users.UserRank; + +public class OldVoteDAO { + + public static Optional> fetchRelevantVoters() { + List list = Lists.newArrayList(); + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("SELECT `uuid` FROM `votes` WHERE `monthlyVotes`>0 ORDER BY `monthlyVotes` DESC;")) { + try (ResultSet result = statement.executeQuery()) { + while (result.next()) { + list.add(result.getString("uuid")); + } + } + } + } catch (SQLException e) { + Core.error("[VoteDAO:getRelevantVoters()] SQLException occurred"); + e.printStackTrace(); + return Optional.empty(); + } + + return Optional.of(list); + } + + public static boolean updateMonthlyVotes(UUID uuid, int amount) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE `votes` SET `monthlyVotes`=? WHERE `uuid`=?;")) { + statement.setInt(1, amount); + statement.setString(2, uuid.toString()); + statement.execute(); + } + } catch (SQLException e) { + Core.error("[UserDAO:updateMonthlyVotes(uuid,amount)] SQLException occurred"); + e.printStackTrace(); + return false; + } + + return true; + } + + public static boolean updateTotalVotes(UUID uuid, int amount) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE `votes` SET `totalVotes`=? WHERE `uuid`=?;")) { + statement.setInt(1, amount); + statement.setString(2, uuid.toString()); + statement.execute(); + } + } catch (SQLException e) { + Core.error("[UserDAO:updateTotalVotes(uuid,amount)] SQLException occurred"); + e.printStackTrace(); + return false; + } + + return true; + } + + public static boolean updateLastVote(UUID uuid, String voteSite, long timestamp) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE `votes` SET " + voteSite + "=? WHERE `uuid`=?;")) { + statement.setLong(1, timestamp); + statement.setString(2, uuid.toString()); + statement.execute(); + } + } catch (SQLException e) { + Core.error("[UserDAO:updateLastVote(uuid,voteSite,timestamp)] SQLException occurred"); + e.printStackTrace(); + return false; + } + + return true; + } + + public static boolean updateUserVotes(UUID uuid, int amount) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE `users` SET `votes`=? WHERE `uuid`=?;")) { + statement.setInt(1, amount); + statement.setString(2, uuid.toString()); + statement.execute(); + } + } catch (SQLException e) { + Core.error("[UserDAO:updateUserVotes(uuid,amount)] SQLException occurred"); + e.printStackTrace(); + return false; + } + + return true; + } + + public static boolean updateUserVotesByName(String name, int amount) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE `users` SET `votes`=? WHERE `lastname`=?;")) { + statement.setInt(1, amount); + statement.setString(2, name); + statement.execute(); + } + } catch (SQLException e) { + Core.error("[UserDAO:updateUserVotes(uuid,amount)] SQLException occurred"); + e.printStackTrace(); + return false; + } + + return true; + } + + public static boolean updateUserVoteStreak(UUID uuid, int voteStreak) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE `users` SET `voteStreak`=? WHERE `uuid`=?;")) { + statement.setInt(1, voteStreak); + statement.setString(2, uuid.toString()); + statement.execute(); + } + } catch (SQLException e) { + Core.error("[UserDAO:updateUserVoteStreak(uuid,voteStreak)] SQLException occurred"); + e.printStackTrace(); + return false; + } + + return true; + } + + public static boolean updateUserLastVoteStreak(UUID uuid, long lastVoteStreak) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE `users` SET `lastVoteStreak`=? WHERE `uuid`=?;")) { + statement.setLong(1, lastVoteStreak); + statement.setString(2, uuid.toString()); + statement.execute(); + } + } catch (SQLException e) { + Core.error("[UserDAO:updateUserLastVoteStreak(uuid,lastVoteStreak)] SQLException occurred"); + e.printStackTrace(); + return false; + } + + return true; + } + + public static boolean updateUserLastVoteStreakByName(String name, long lastVoteStreak) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE `users` SET `lastVoteStreak`=? WHERE `lastname`=?;")) { + statement.setLong(1, lastVoteStreak); + statement.setString(2, name); + statement.execute(); + } + } catch (SQLException e) { + Core.error("[UserDAO:updateUserLastVoteStreakByName(name,lastVoteStreak)] SQLException occurred"); + e.printStackTrace(); + return false; + } + + return true; + } + + public static boolean updateUserDailyStreak(UUID uuid, int dailyStreak) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE `users` SET `dailyStreak`=? WHERE `uuid`=?;")) { + statement.setInt(1, dailyStreak); + statement.setString(2, uuid.toString()); + statement.execute(); + } + } catch (SQLException e) { + Core.error("[UserDAO:updateUserDailyStreak(uuid,dailyStreak)] SQLException occurred"); + e.printStackTrace(); + return false; + } + + return true; + } + + public static boolean updateUserDailyStreakByName(String name, int dailyStreak) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE `users` SET `dailyStreak`=? WHERE `lastname`=?;")) { + statement.setInt(1, dailyStreak); + statement.setString(2, name); + statement.execute(); + } + } catch (SQLException e) { + Core.error("[UserDAO:updateUserDailyStreakByName(name,dailyStreak)] SQLException occurred"); + e.printStackTrace(); + return false; + } + + return true; + } + + public static boolean updateUserDaily(UUID uuid, int dailyStreak, long lastDailyReward) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE `users` SET `dailyStreak`=?, `lastDailyReward`=? WHERE `uuid`=?;")) { + statement.setInt(1, dailyStreak); + statement.setLong(2, lastDailyReward); + statement.setString(3, uuid.toString()); + statement.execute(); + } + } catch (SQLException e) { + Core.error("[UserDAO:updateUserDaily(uuid,dailyStreak,lastDailyReward)] SQLException occurred"); + e.printStackTrace(); + return false; + } + + return true; + } + + public static boolean updateUserLastDailyReward(UUID uuid, long lastDailyReward) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE `users` SET `lastDailyReward`=? WHERE `uuid`=?;")) { + statement.setLong(1, lastDailyReward); + statement.setString(2, uuid.toString()); + statement.execute(); + } + } catch (SQLException e) { + Core.error("[UserDAO:updateUserLastDailyReward(uuid,lastDailyReward)] SQLException occurred"); + e.printStackTrace(); + return false; + } + + return true; + } + + public static boolean updateUserLastDailyRewardByName(String name, long lastDailyReward) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE `users` SET `lastDailyReward`=? WHERE `lastname`=?;")) { + statement.setLong(1, lastDailyReward); + statement.setString(2, name); + statement.execute(); + } + } catch (SQLException e) { + Core.error("[UserDAO:updateUserLastDailyRewardByName(name,lastDailyReward)] SQLException occurred"); + e.printStackTrace(); + return false; + } + + return true; + } + + public static boolean deleteLastMonthsVoters() { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("TRUNCATE TABLE `last_months_voters`;")) { + statement.execute(); + } + } catch (SQLException e) { + Core.error("[UserDAO:deleteLastMonthsVoters()] SQLException occurred"); + e.printStackTrace(); + return false; + } + + return true; + } + + public static Optional getTopTenVoters() { + VoteUser[] voteUsers = new VoteUser[10]; + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("SELECT U.name AS voter_name, HEX(LUV.uuid), COUNT(*) AS total_votes FROM log_user_vote LUV, user U WHERE U.uuid=LUV.uuid AND YEAR(LUV.creation) = YEAR(CURRENT_DATE()) AND MONTH(LUV.creation) = MONTH(CURRENT_DATE()) GROUP by LUV.uuid ORDER BY COUNT(*) DESC LIMIT 10;")) { + try (ResultSet result = statement.executeQuery()) { + int i = 0; + while(result.next()) { + voteUsers[i] = new VoteUser(i + 1, result.getInt("total_votes"), result.getString("voter_name")); + i += 1; + } + + return Optional.of(voteUsers); + } + } + } catch (SQLException e) { + Core.error("[UserDAO:getTopTenVoters()] SQLException occurred"); + e.printStackTrace(); + return Optional.empty(); + } + } + + public static Optional getLastMonthsVoters() { + VoteUser[] voteUsers = new VoteUser[10]; + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("SELECT * FROM `last_months_voters` ORDER BY `slot` DESC LIMIT 10;")) { + try (ResultSet result = statement.executeQuery()) { + while(result.next()) { + int slot = result.getInt("slot"); + voteUsers[slot - 1] = new VoteUser(slot, result.getString("name")); + } + + return Optional.of(voteUsers); + } + } + } catch (SQLException e) { + Core.error("[UserDAO:getLastMonthsVoters()] SQLException occurred"); + e.printStackTrace(); + return Optional.empty(); + } + } + + public static Optional getTopVoter() { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("SELECT * FROM `votes` ORDER BY `votes`.`monthlyVotes` DESC LIMIT 1;")) { + try (ResultSet result = statement.executeQuery()) { + if (result.next()) { + return Optional.of(new VoteUser(1, result.getInt("monthlyVotes"), result.getString("name"))); + } + } + } + } catch (SQLException e) { + Core.error("[UserDAO:getTopVoter()] SQLException occurred"); + e.printStackTrace(); + return Optional.empty(); + } + + return Optional.empty(); + } + + public static boolean updateVoteStreakByName(String name, int streak) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE `users` SET `voteStreak`=? WHERE `lastname`=?;")) { + statement.setInt(1, streak); + statement.setString(2, name); + statement.execute(); + } + } catch (SQLException e) { + Core.error("[UserDAO:updateVoteStreakByName(name,streak)] SQLException occurred"); + e.printStackTrace(); + return false; + } + + return true; + } + + public static Optional fetchRandomVoteStreaker(int minStreak) { + //"SELECT * FROM users WHERE voteStreak >20 ORDER BY RAND() LIMIT 1;" + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("SELECT * FROM `users` WHERE `voteStreak`>? ORDER BY RAND() LIMIT 1;")) { + statement.setInt(1, minStreak); + try (ResultSet result = statement.executeQuery()) { + if (result.next()) { + return Optional.of(new VoteUser(UUID.fromString(result.getString("uuid")), + result.getString("name"), + result.getInt("voteStreak"), + UserRank.getUserRank(result.getString("userrank")))); + } + } + } + } catch (SQLException e) { + Core.error("[UserDAO:fetchRandomVoteStreaker(minStreak)] SQLException occurred"); + e.printStackTrace(); + return Optional.empty(); + } + + return Optional.empty(); + } + + /** + * Logs a user vote into the database for storage purposes. + * + * @param conn - the database connection thread + * @param voter - the uuid of the voter + * @param amount - the amount their vote is worth, as some can have higher values + * @param serviceID - the id of the service that they voted on + * + * @return {@code true} if the user vote was logged, {@code false} otherwise. + */ + public static boolean logUserVote(Connection conn, UUID voter, int amount, int serviceID){ + + String query = "INSERT INTO log_user_vote (uuid, amount, service_id) VALUES (UNHEX(?), ?, ?);"; + + try (PreparedStatement ps = conn.prepareStatement(query)){ + ps.setString(1, voter.toString().replace("-", "")); + ps.setInt(2, amount); + ps.setInt(3, serviceID); + + ps.executeUpdate(); + } + catch(SQLException e){ + Core.log("[VoteDAO] Error logging vote for voter uuid=" + voter.toString() + ", amount=" + amount + ", serviceID=" + serviceID); + e.printStackTrace(); + return false; + } + + return true; + } + + public static class VoteUser { + private int possition, votes; + private String name; + + private UUID uuid; + private int streak; + private UserRank rank; + + public VoteUser(int possition, int votes, String name) { + this.possition = possition; + this.votes = votes; + this.name = name; + } + + public VoteUser(int possition, String name) { + this.possition = possition; + this.name = name; + } + + public VoteUser(UUID uuid, String name, int streak, UserRank rank) { + this.uuid = uuid; + this.name = name; + this.streak = streak; + this.rank = rank; + } + + public int getPossition() { + return possition; + } + + public int getVotes() { + return votes; + } + + public String getName() { + return name; + } + + public UUID getUuid() { + return uuid; + } + + public int getStreak() { + return streak; + } + + public UserRank getRank() { + return rank; + } + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/dao/ServerInfoDAO.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/dao/ServerInfoDAO.java new file mode 100644 index 0000000..a3cfafb --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/dao/ServerInfoDAO.java @@ -0,0 +1,85 @@ +package net.grandtheftmc.core.database.dao; + +import com.google.common.collect.Lists; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.database.BaseDatabase; +import net.grandtheftmc.core.servers.Server; +import net.grandtheftmc.core.servers.ServerType; +import net.grandtheftmc.core.users.UserRank; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.Optional; + +public class ServerInfoDAO { + + public static Optional> fetchAllServers() { + List servers = Lists.newArrayList(); + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("SELECT * FROM `servers`;")) { + try (ResultSet result = statement.executeQuery()) { + while (result.next()) { + servers.add(new Server(result.getString("name"), ServerType.getType(result.getString("type")), + result.getInt("number"), result.getString("ip"), result.getInt("port"), + UserRank.getUserRankOrNull(result.getString("rankToJoin")))); + } + } + } + } catch (SQLException e) { + Core.error("[ServerInfoDAO:fetchAllServers()] SQLException occurred"); + e.printStackTrace(); + return Optional.empty(); + } + + return Optional.of(servers); + } + + public static boolean updateServerInfo(String name, ServerType type, int number, int onlinePlayers, int maxPlayers, String map, String gameState, int round, UserRank rankToJoin) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE `servers` SET " + + "`type`=?,`number`=?,`onlinePlayers`=?,`maxPlayers`=?,`map`=?,`gameState`=?,`round`=?,`rankToJoin`=?,`lastCheck`=? WHERE `name`=?;")) { + statement.setString(1, type.name()); + statement.setInt(2, number); + statement.setInt(3, onlinePlayers); + statement.setInt(4, maxPlayers); + statement.setString(5, map); + statement.setString(6, gameState); + statement.setInt(7, round); + statement.setString(8, rankToJoin == null ? "DEFAULT" : rankToJoin.name()); + statement.setLong(9, System.currentTimeMillis()); + statement.setString(10, name); + statement.execute(); + } + } catch (SQLException e) { + Core.error("[ServerInfoDAO:updateServerInfo(...)] SQLException occurred"); + e.printStackTrace(); + return false; + } + + return true; + } + + public static Collection getOnlineStaff() { + Collection collection = Lists.newArrayList(); + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("SELECT `lastname` FROM `users` WHERE `userrank` IN ('HELPOP','MOD','ADMIN','DEV');")) { + try (ResultSet result = statement.executeQuery()) { + while (result.next()) { + collection.add(result.getString("lastname")); + } + } + } + } catch (SQLException e) { + Core.error("[ServerInfoDAO:getOnlineStaff()] SQLException occurred"); + e.printStackTrace(); + return Lists.newArrayList(); + } + + return collection; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/dao/ServerStatsDAO.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/dao/ServerStatsDAO.java new file mode 100644 index 0000000..c0e698c --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/dao/ServerStatsDAO.java @@ -0,0 +1,235 @@ +package net.grandtheftmc.core.database.dao; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.database.BaseDatabase; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserDAO; +import net.grandtheftmc.core.users.UserRank; +import org.bukkit.entity.Player; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.Date; +import java.util.Optional; +import java.util.UUID; + +public class ServerStatsDAO { + + public static boolean reset(boolean daily) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement(!daily ? "UPDATE `server_stats` SET `playedServers`=NULL,`weeklyLoginTime`=?;" : "UPDATE `server_stats` SET `dailyPlayTime`=0,`dailyLoginTime`=?;")) { + statement.setLong(1, System.currentTimeMillis()); + statement.execute(); + } + } catch (SQLException e) { + Core.error("[ServerStatsDAO:reset(daily)] SQLException occurred"); + e.printStackTrace(); + return false; + } + + return true; + } + + public static Optional fetchWeeklyStats() { + WeeklyStatsData data = new WeeklyStatsData(); + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("SELECT * FROM `server_stats`;")) { + try (ResultSet result = statement.executeQuery()) { + while (result.next()) { + data.totalLogins += 1; + long firstLogin = result.getLong("firstLogin"); + long weeklyLogin = result.getLong("weeklyLoginTime"); + if ((System.currentTimeMillis() - firstLogin) <= (1000 * 60 * 60 * 24 * 7)) { + data.totalNewPlayers += 1; + if (weeklyLogin != 0 && weeklyLogin != firstLogin) { + data.totalNewPlayersLoginAgain += 1; + } + } + + String playedServers = result.getString("playedServers") == null ? result.getString("playedServers") : ""; + if (playedServers.contains("vice") && playedServers.contains("gtm")) { + data.totalPlayersPlayedBoth += 1; + continue; + } + + if (playedServers.contains("vice")) + data.totalPlayersPlayedVice += 1; + + if (playedServers.contains("gtm")) + data.totalPlayersPlayedGTM += 1; + } + + data.setData(new Date().toGMTString() + "-" + data.totalNewPlayersLoginAgain + "-" + data.totalPlayersPlayedBoth + "-" + data.totalPlayersPlayedVice + "-" + data.totalPlayersPlayedGTM + "-" + data.totalNewPlayers + "-" + data.totalLogins); + } + } + } catch (SQLException e) { + Core.error("[ServerStatsDAO:fetchWeeklyStats] SQLException occurred"); + e.printStackTrace(); + return Optional.empty(); + } + + return Optional.of(data); + } + + public static Optional fetchDailyStats() { + DailyStatsData data = new DailyStatsData(); + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("SELECT * FROM `server_stats`;")) { + try (ResultSet result = statement.executeQuery()) { + while (result.next()) { + String uuid = result.getString("uuid"); + + if((System.currentTimeMillis() - result.getLong("firstLogin")) <= 1000 * 60 * 60 * 24) + data.dailyNewPlayers++; + + if((System.currentTimeMillis() - result.getLong("dailyLoginTime")) <= 1000 * 60 * 60 * 24) { + data.dailyTotalLogins++; + long playtime = result.getLong("dailyPlayTime"); + data.dailyPlaytime += playtime; + + UserRank rank = UserDAO.fetchUserRank(UUID.fromString(uuid)); + if(rank == UserRank.DEFAULT) { + data.dailyLoginsDefault++; + data.dailyPlaytimeDefault += playtime; + } + else { + data.dailyLoginsRanked++; + data.dailyPlaytimeRanked += playtime; + } + } + } + + + } + } + } catch (SQLException e) { + Core.error("[ServerStatsDAO:fetchDailyStats] SQLException occurred"); + e.printStackTrace(); + return Optional.empty(); + } + + return Optional.of(data); + } + + public static void updatePlaytimeAndFirstlogin(Connection connection, Player player, User user) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE `server_stats` set `dailyPlayTime`=?,`firstLogin`=? WHERE `uuid`=?;")) { + statement.setLong(1, System.currentTimeMillis() - user.getLoginTime() + user.getDailyPlayTime()); + statement.setLong(2, player.getFirstPlayed()); + statement.setString(3, player.getUniqueId().toString()); + statement.execute(); + } catch (SQLException e) { + Core.error("[ServerStatsDAO:updatePlaytimeAndFirstlogin(player,user)] SQLException occurred"); + e.printStackTrace(); + } + } + + + + public static class WeeklyStatsData { + private String data; + private double totalLogins = 0, totalNewPlayers = 0, totalNewPlayersLoginAgain = 0, totalPlayersPlayedBoth = 0, totalPlayersPlayedVice = 0, totalPlayersPlayedGTM = 0; + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public double getTotalLogins() { + return totalLogins; + } + + public double getTotalNewPlayers() { + return totalNewPlayers; + } + + public double getTotalNewPlayersLoginAgain() { + return totalNewPlayersLoginAgain; + } + + public double getTotalPlayersPlayedBoth() { + return totalPlayersPlayedBoth; + } + + public double getTotalPlayersPlayedVice() { + return totalPlayersPlayedVice; + } + + public double getTotalPlayersPlayedGTM() { + return totalPlayersPlayedGTM; + } + } + + public static class DailyStatsData { + private String data; + private double dailyTotalLogins = 0, dailyPlaytime = 0, dailyNewPlayers = 0, dailyPlaytimeRanked = 0, dailyLoginsRanked = 0, dailyLoginsDefault = 0, dailyPlaytimeDefault = 0; + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public double getDailyTotalLogins() { + return dailyTotalLogins; + } + + public void setDailyTotalLogins(double dailyTotalLogins) { + this.dailyTotalLogins = dailyTotalLogins; + } + + public void setDailyPlaytime(double dailyPlaytime) { + this.dailyPlaytime = dailyPlaytime; + } + + public void setDailyNewPlayers(double dailyNewPlayers) { + this.dailyNewPlayers = dailyNewPlayers; + } + + public void setDailyPlaytimeRanked(double dailyPlaytimeRanked) { + this.dailyPlaytimeRanked = dailyPlaytimeRanked; + } + + public void setDailyLoginsRanked(double dailyLoginsRanked) { + this.dailyLoginsRanked = dailyLoginsRanked; + } + + public void setDailyLoginsDefault(double dailyLoginsDefault) { + this.dailyLoginsDefault = dailyLoginsDefault; + } + + public void setDailyPlaytimeDefault(double dailyPlaytimeDefault) { + this.dailyPlaytimeDefault = dailyPlaytimeDefault; + } + + public double getDailyPlaytime() { + return dailyPlaytime; + } + + public double getDailyNewPlayers() { + return dailyNewPlayers; + } + + public double getDailyPlaytimeRanked() { + return dailyPlaytimeRanked; + } + + public double getDailyLoginsRanked() { + return dailyLoginsRanked; + } + + public double getDailyLoginsDefault() { + return dailyLoginsDefault; + } + + public double getDailyPlaytimeDefault() { + return dailyPlaytimeDefault; + } + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/dao/VoteDAO.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/dao/VoteDAO.java new file mode 100644 index 0000000..4f4a4c9 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/dao/VoteDAO.java @@ -0,0 +1,445 @@ +package net.grandtheftmc.core.database.dao; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Timestamp; +import java.util.Optional; +import java.util.UUID; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.util.debug.Log; +import net.grandtheftmc.core.voting.VoteRecord; +import net.grandtheftmc.core.voting.VoteSite; + +public class VoteDAO { + + /** + * Creates an empty user vote record in the database. + * + * @param conn - the database connection thread + * @param uuid - the uuid of the user to create the record for + * + * @return {@code true} if the record was created, {@code false} otherwise. + */ + public static boolean createUserVoteRecord(Connection conn, UUID uuid) { + + String query = "INSERT IGNORE INTO user_vote (uuid) VALUES (UNHEX(?));"; + + try (PreparedStatement ps = conn.prepareStatement(query)) { + ps.setString(1, uuid.toString().replaceAll("-", "")); + + ps.executeUpdate(); + } + catch (SQLException exc) { + exc.printStackTrace(); + return false; + } + + return true; + } + + /** + * Obtain a read only version of the user's vote record. + *

+ * Note: If the vote record does not exist, create a new empty one for them. + *

+ * + * @param conn - the database connection thread + * @param uuid - the uuid of the user to get their vote record + * + * @return The VoteRecord for the specified user. + */ + public static VoteRecord getUserVoteRecord(Connection conn, UUID uuid) { + + String query = "SELECT streak, total_votes, max_streak, last_vote, site_one, site_two, site_three, site_four, site_five FROM user_vote WHERE uuid=UNHEX(?);"; + + try (PreparedStatement ps = conn.prepareStatement(query)) { + ps.setString(1, uuid.toString().replaceAll("-", "")); + + try (ResultSet result = ps.executeQuery()) { + + // if vote record + if (result.next()) { + + int streak = result.getInt("streak"); + int totalVotes = result.getInt("total_votes"); + int maxStreak = result.getInt("max_streak"); + Timestamp lastVote = result.getTimestamp("last_vote"); + Timestamp siteOne = result.getTimestamp("site_one"); + Timestamp siteTwo = result.getTimestamp("site_two"); + Timestamp siteThree = result.getTimestamp("site_three"); + Timestamp siteFour = result.getTimestamp("site_four"); + Timestamp siteFive = result.getTimestamp("site_five"); + + VoteRecord vr = new VoteRecord(uuid, totalVotes, streak, maxStreak, lastVote); + vr.setVoteTimestamp(VoteSite.ONE, siteOne); + vr.setVoteTimestamp(VoteSite.TWO, siteTwo); + vr.setVoteTimestamp(VoteSite.THREE, siteThree); + vr.setVoteTimestamp(VoteSite.FOUR, siteFour); + vr.setVoteTimestamp(VoteSite.FIVE, siteFive); + + return vr; + } + else { + + // create an empty record for them + createUserVoteRecord(conn, uuid); + } + } + } + catch (SQLException exc) { + exc.printStackTrace(); + } + + return new VoteRecord(uuid); + } + + /** + * Updates the player's total votes, incrementing it by one. + * + * @param conn - the database connection thread + * @param uuid - the uuid of the user to increment their total votes + * + * @return {@code true} if their total votes was successfully updated, + * {@code false} otherwise. + */ + public static boolean incrementTotalVotes(Connection conn, UUID uuid) { + + String query = "UPDATE user_vote SET total_votes=total_votes+1 WHERE uuid=UNHEX(?);"; + + try (PreparedStatement ps = conn.prepareStatement(query)) { + ps.setString(1, uuid.toString().replaceAll("-", "")); + + ps.executeUpdate(); + return true; + } + catch (SQLException exc) { + exc.printStackTrace(); + } + + return false; + } + + /** + * Updates the player's vote streak, incrementing it by one. + *

+ * Note: This also updates their last vote timestamp. + *

+ * + * @param conn - the database connection thread + * @param uuid - the uuid of the user to increment their vote streak + * + * @return {@code true} if their vote streak was successfully updated, + * {@code false} otherwise. + */ + public static boolean incrementVoteStreak(Connection conn, UUID uuid) { + + String query = "UPDATE user_vote SET streak=streak+1, last_vote=CURRENT_TIMESTAMP WHERE uuid=UNHEX(?);"; + + try (PreparedStatement ps = conn.prepareStatement(query)) { + ps.setString(1, uuid.toString().replaceAll("-", "")); + + ps.executeUpdate(); + return true; + } + catch (SQLException exc) { + exc.printStackTrace(); + } + + return false; + } + + /** + * Updates the player's vote streak to the specified amount. + * + * @param conn - the database connection thread + * @param uuid - the uuid of the user to update + * @param voteStreak - the vote streak amount to set it to + * + * @return {@code true} if their vote streak was successfully updated, + * {@code false} otherwise. + */ + public static boolean setVoteStreak(Connection conn, UUID uuid, int voteStreak) { + + String query = "UPDATE user_vote SET streak=? WHERE uuid=UNHEX(?);"; + + try (PreparedStatement ps = conn.prepareStatement(query)) { + ps.setInt(1, voteStreak); + ps.setString(2, uuid.toString().replaceAll("-", "")); + + ps.executeUpdate(); + return true; + } + catch (SQLException exc) { + exc.printStackTrace(); + } + + return false; + } + + /** + * Resets the vote streak of the specified user. + * + * @param conn - the database connection thread + * @param uuid - the uuid of the user to reset their vote streak + * + * @return {@code true} if the vote streak was reset, {@code false} + * otherwise. + */ + public static boolean resetVoteStreak(Connection conn, UUID uuid) { + + String query = "UPDATE user_vote SET streak=0 WHERE uuid=UNHEX(?);"; + + try (PreparedStatement ps = conn.prepareStatement(query)) { + ps.setString(1, uuid.toString().replaceAll("-", "")); + + ps.executeUpdate(); + return true; + } + catch (SQLException exc) { + exc.printStackTrace(); + } + + return false; + } + + /** + * Updates the max streak that this user has. + * + * @param conn - the database connection + * @param uuid - the uuid of the user + * @param maxStreak - the max streak that this user has + * + * @return {@code true} if the query ran, {@code false} otherwise. + */ + public static boolean updateMaxStreak(Connection conn, UUID uuid, int maxStreak) { + + String query = "UPDATE user_vote SET max_streak=? WHERE uuid=UNHEX(?);"; + + try (PreparedStatement ps = conn.prepareStatement(query)) { + ps.setInt(1, maxStreak); + ps.setString(2, uuid.toString().replaceAll("-", "")); + + ps.executeUpdate(); + return true; + } + catch (SQLException exc) { + exc.printStackTrace(); + } + + return false; + + } + + /** + * Update the vote site timestamp for the specified uuid. + * + * @param conn - the database connection + * @param uuid - the uuid of the user + * @param voteSite - the vote site to update + * + * @return {@code true} if the query ran, {@code false} otherwise. + */ + public static boolean updateVoteSiteTimestamp(Connection conn, UUID uuid, VoteSite voteSite) { + + String query = null; + + switch (voteSite) { + case ONE: + query = "UPDATE user_vote SET site_one=CURRENT_TIMESTAMP WHERE uuid=UNHEX(?);"; + break; + case TWO: + query = "UPDATE user_vote SET site_two=CURRENT_TIMESTAMP WHERE uuid=UNHEX(?);"; + break; + case THREE: + query = "UPDATE user_vote SET site_three=CURRENT_TIMESTAMP WHERE uuid=UNHEX(?);"; + break; + case FOUR: + query = "UPDATE user_vote SET site_four=CURRENT_TIMESTAMP WHERE uuid=UNHEX(?);"; + break; + case FIVE: + query = "UPDATE user_vote SET site_five=CURRENT_TIMESTAMP WHERE uuid=UNHEX(?);"; + break; + default: + Log.error("VoteDAO", "Unhandled vote site when updated timestamp, this could duplicate votes! Fix immediately."); + return false; + } + + if (query != null){ + try (PreparedStatement ps = conn.prepareStatement(query)) { + ps.setString(1, uuid.toString().replaceAll("-", "")); + + ps.executeUpdate(); + return true; + } + catch (SQLException exc) { + exc.printStackTrace(); + } + } + + return false; + + } + + /** + * Logs a user vote into the database for storage purposes. + * + * @param conn - the database connection thread + * @param voter - the uuid of the voter + * @param amount - the amount their vote is worth, as some can have higher + * values + * @param serviceID - the id of the service that they voted on + * + * @return {@code true} if the user vote was logged, {@code false} + * otherwise. + */ + public static boolean logUserVote(Connection conn, UUID voter, int amount, int serviceID) { + + String query = "INSERT INTO log_user_vote (uuid, amount, service_id) VALUES (UNHEX(?), ?, ?);"; + + try (PreparedStatement ps = conn.prepareStatement(query)) { + ps.setString(1, voter.toString().replace("-", "")); + ps.setInt(2, amount); + ps.setInt(3, serviceID); + + ps.executeUpdate(); + } + catch (SQLException e) { + Core.log("[VoteDAO] Error logging vote for voter uuid=" + voter.toString() + ", amount=" + amount + ", serviceID=" + serviceID); + e.printStackTrace(); + return false; + } + + return true; + } + + /** + * Get the top voters for this month. + *

+ * If the specified amount is 10, that is the top 10 voters. + * + * Note: This mines the log_user_vote table and the result should be cached as it's a complicated query. + *

+ * + * @param conn - the database connection thread + * @param amount - the number of top voters to get + * + * @return The vote records for the top amount voters. + */ + public static Optional getTopVoters(Connection conn, int amount) { + VoteUser[] voteUsers = new VoteUser[amount]; + + String query = "SELECT U.name AS voter_name, HEX(LUV.uuid), COUNT(*) AS total_votes FROM log_user_vote LUV, user U WHERE U.uuid=LUV.uuid AND YEAR(LUV.creation) = YEAR(CURRENT_DATE()) AND MONTH(LUV.creation) = MONTH(CURRENT_DATE()) GROUP by LUV.uuid ORDER BY COUNT(*) DESC LIMIT ?;"; + + try (PreparedStatement ps = conn.prepareStatement(query)) { + ps.setInt(1, amount); + + try (ResultSet result = ps.executeQuery()) { + int i = 0; + while(result.next()) { + voteUsers[i] = new VoteUser(i + 1, result.getInt("total_votes"), result.getString("voter_name")); + i += 1; + } + + return Optional.of(voteUsers); + } + } + catch (SQLException e) { + Core.error("[UserDAO:getTopVoters()] SQLException occurred"); + e.printStackTrace(); + return Optional.empty(); + } + } + + /** + * Get the top voters for LAST month. + *

+ * If the specified amount is 10, that is the top 10 voters. + * + * Note: This mines the log_user_vote table and the result should be cached as it's a complicated query. + *

+ * + * @param conn - the database connection thread + * @param amount - the number of top voters to get + * + * @return The vote records for the top amount voters for LAST month. + */ + public static Optional getLastTopVoters(Connection conn, int amount) { + VoteUser[] voteUsers = new VoteUser[amount]; + + String query = "SELECT U.name AS voter_name, HEX(LUV.uuid), COUNT(*) AS total_votes FROM log_user_vote LUV, user U WHERE U.uuid=LUV.uuid AND YEAR(LUV.creation) = YEAR(CURRENT_DATE() - INTERVAL 1 MONTH) AND MONTH(LUV.creation) = MONTH(CURRENT_DATE() - INTERVAL 1 MONTH) GROUP by LUV.uuid ORDER BY COUNT(*) DESC LIMIT ?;"; + + try (PreparedStatement ps = conn.prepareStatement(query)) { + ps.setInt(1, amount); + + try (ResultSet result = ps.executeQuery()) { + int i = 0; + while(result.next()) { + voteUsers[i] = new VoteUser(i + 1, result.getInt("total_votes"), result.getString("voter_name")); + i += 1; + } + + return Optional.of(voteUsers); + } + } + catch (SQLException e) { + Core.error("[UserDAO:getLastTopVoters()] SQLException occurred"); + e.printStackTrace(); + return Optional.empty(); + } + } + + public static class VoteUser { + private int possition, votes; + private String name; + + private UUID uuid; + private int streak; + private UserRank rank; + + public VoteUser(int possition, int votes, String name) { + this.possition = possition; + this.votes = votes; + this.name = name; + } + + public VoteUser(int possition, String name) { + this.possition = possition; + this.name = name; + } + + public VoteUser(UUID uuid, String name, int streak, UserRank rank) { + this.uuid = uuid; + this.name = name; + this.streak = streak; + this.rank = rank; + } + + public int getPossition() { + return possition; + } + + public int getVotes() { + return votes; + } + + public String getName() { + return name; + } + + public UUID getUuid() { + return uuid; + } + + public int getStreak() { + return streak; + } + + public UserRank getRank() { + return rank; + } + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/mutex/Lockable.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/mutex/Lockable.java new file mode 100644 index 0000000..50fce43 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/mutex/Lockable.java @@ -0,0 +1,36 @@ +package net.grandtheftmc.core.database.mutex; + +public interface Lockable { + + /** + * Get the lock state of this object. + * + * @return {@code true} if this object is locked, {@code false} otherwise. + */ + boolean isLocked(); + + /** + * Sets the lock state of this object. + * + * @param locked - {@code true} if the object is locked, {@code false} + * otherwise. + */ + void setLocked(boolean locked); + + /** + * Attempt to lock this object. + * + * @return {@code true} if the object was successfully locked. {@code false} + * if the object was already locked. + */ + boolean lock(); + + /** + * Attempt to unlock this object. + * + * @return {@code true} if the object was successfully unlocked. + * {@code false} if the object was already unlocked. + */ + boolean unlock(); + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/mutex/Mutexable.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/mutex/Mutexable.java new file mode 100644 index 0000000..849ee80 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/mutex/Mutexable.java @@ -0,0 +1,72 @@ +package net.grandtheftmc.core.database.mutex; + +public abstract class Mutexable implements Lockable { + + /** The lock of this Mutex */ + private boolean lock; + + /** + * Construct a new Mutexable which holds a lock. + */ + public Mutexable() { + this.lock = false; + } + + /** + * Get the lock state of this object. + * + * @return {@code true} if this object is locked, {@code false} otherwise. + */ + @Override + public synchronized boolean isLocked() { + return lock; + } + + /** + * Sets the lock state of this object. + * + * @param locked - {@code true} if the object is locked, {@code false} + * otherwise. + */ + @Override + public synchronized void setLocked(boolean locked) { + this.lock = locked; + } + + /** + * Attempt to lock this object. + * + * @return {@code true} if the object was successfully locked. {@code false} + * if the object was already locked. + */ + @Override + public synchronized boolean lock() { + + boolean result = false; + + if (!lock) { + lock = true; + result = true; + } + + return result; + } + + /** + * Attempt to unlock this object. + * + * @return {@code true} if the object was successfully unlocked. + * {@code false} if the object was already unlocked. + */ + @Override + public synchronized boolean unlock() { + boolean result = false; + + if (lock) { + lock = false; + result = true; + } + + return result; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/mutex/common/LoadUserTask.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/mutex/common/LoadUserTask.java new file mode 100644 index 0000000..d0f6324 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/mutex/common/LoadUserTask.java @@ -0,0 +1,63 @@ +package net.grandtheftmc.core.database.mutex.common; + +import java.sql.Connection; + +import org.bukkit.plugin.Plugin; + +import net.grandtheftmc.core.database.BaseDatabase; +import net.grandtheftmc.core.database.dao.MutexDAO; +import net.grandtheftmc.core.database.mutex.task.LoadMutexTask; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.util.debug.Log; + +public abstract class LoadUserTask extends LoadMutexTask { + + /** The user reference */ + private User user; + + /** + * Constructs a new LoadUserTask, which attempts to load a user, + * asynchronously. + * + * @param plugin - the owning plugin + * @param user - the user being loaded + */ + public LoadUserTask(Plugin plugin, User user) { + super(plugin, user); + this.user = user; + + // run async + execute(true); + } + + /** + * {@inheritDoc} + */ + @Override + protected boolean fetchMutex() { + try (Connection conn = BaseDatabase.getInstance().getConnection()) { + return MutexDAO.getUserMutex(conn, user.getUUID()); + } + catch (Exception e) { + e.printStackTrace(); + } + + // else not free + return true; + } + + /** + * {@inheritDoc} + */ + @Override + public void syncMutex() { + // TODO remove + Log.info("TEST-LoadUserTask", "Setting " + user.getUUID() + "'s mutex to " + user.isLocked()); + try (Connection conn = BaseDatabase.getInstance().getConnection()) { + MutexDAO.setUserMutex(conn, user.getUUID(), user.isLocked()); + } + catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/mutex/common/SaveUserTask.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/mutex/common/SaveUserTask.java new file mode 100644 index 0000000..27ae417 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/mutex/common/SaveUserTask.java @@ -0,0 +1,47 @@ +package net.grandtheftmc.core.database.mutex.common; + +import java.sql.Connection; + +import org.bukkit.plugin.Plugin; + +import net.grandtheftmc.core.database.BaseDatabase; +import net.grandtheftmc.core.database.dao.MutexDAO; +import net.grandtheftmc.core.database.mutex.task.SaveMutexTask; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.util.debug.Log; + +public abstract class SaveUserTask extends SaveMutexTask { + + /** The user reference */ + private User user; + + /** + * Constructs a new SaveUserTask, which attempts to save the user, + * asynchronously. + * + * @param plugin - the owning plugin + * @param user - the user being saved + */ + public SaveUserTask(Plugin plugin, User user) { + super(plugin, user); + this.user = user; + + // run async + execute(true); + } + + /** + * {@inheritDoc} + */ + @Override + public void syncMutex() { + // TODO remove + Log.info("TEST-SaveUserTask", "Setting " + user.getUUID() + "'s mutex to " + user.isLocked()); + try (Connection conn = BaseDatabase.getInstance().getConnection()) { + MutexDAO.setUserMutex(conn, user.getUUID(), user.isLocked()); + } + catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/mutex/event/AsyncMutexLoadEvent.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/mutex/event/AsyncMutexLoadEvent.java new file mode 100644 index 0000000..9a4f5e7 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/mutex/event/AsyncMutexLoadEvent.java @@ -0,0 +1,55 @@ +package net.grandtheftmc.core.database.mutex.event; + +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +import net.grandtheftmc.core.database.mutex.Mutexable; + +public class AsyncMutexLoadEvent extends Event { + + /** List of handlers for this event. */ + private static final HandlerList HANDLERS = new HandlerList(); + /** The mutexable object that was loaded */ + private final Mutexable mutexable; + + /** + * Construct a new AsyncMutexLoadEvent. + *

+ * This is used as a notification to the server that a mutexable was loaded. + *

+ * This event occurs before LoadMutexTask#onLoadComplete() is called. + * + * @param mutexable - the mutexable that was loaded + */ + public AsyncMutexLoadEvent(Mutexable mutexable) { + super(true); + this.mutexable = mutexable; + } + + /** + * Get the mutexable that was loaded in this event. + * + * @return The mutexable involved in the event. + */ + public Mutexable getMutexable() { + return mutexable; + } + + /** + * {@inheritDoc} + */ + @Override + public HandlerList getHandlers() { + return HANDLERS; + } + + /** + * Get the handlers involved in the event. + * + * @return The handlers for this event. + */ + public static HandlerList getHandlerList() { + return HANDLERS; + } +} + diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/mutex/event/AsyncMutexSaveEvent.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/mutex/event/AsyncMutexSaveEvent.java new file mode 100644 index 0000000..1570260 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/mutex/event/AsyncMutexSaveEvent.java @@ -0,0 +1,54 @@ +package net.grandtheftmc.core.database.mutex.event; + +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +import net.grandtheftmc.core.database.mutex.Mutexable; + +public class AsyncMutexSaveEvent extends Event { + + /** List of handlers for this event. */ + private static final HandlerList HANDLERS = new HandlerList(); + /** The mutexable object that was saved */ + private final Mutexable mutexable; + + /** + * Construct a new AsyncMutexSaveEvent. + *

+ * This is used as a notification to the server that a mutexable was saved. + *

+ * This event occurs before SaveMutexTask#onLoadComplete() is called. + * + * @param mutexable - the mutexable that was saved + */ + public AsyncMutexSaveEvent(Mutexable mutexable) { + super(true); + this.mutexable = mutexable; + } + + /** + * Get the mutexable that was saved in this event. + * + * @return The mutexable involved in the event. + */ + public Mutexable getMutexable() { + return mutexable; + } + + /** + * {@inheritDoc} + */ + @Override + public HandlerList getHandlers() { + return HANDLERS; + } + + /** + * Get the handlers involved in the event. + * + * @return The handlers for this event. + */ + public static HandlerList getHandlerList() { + return HANDLERS; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/mutex/event/MutexLoadCompleteEvent.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/mutex/event/MutexLoadCompleteEvent.java new file mode 100644 index 0000000..53a4d3c --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/mutex/event/MutexLoadCompleteEvent.java @@ -0,0 +1,52 @@ +package net.grandtheftmc.core.database.mutex.event; + +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +import net.grandtheftmc.core.database.mutex.Mutexable; + +public class MutexLoadCompleteEvent extends Event { + + /** List of handlers for this event. */ + private static final HandlerList HANDLERS = new HandlerList(); + /** The mutexable object that was completely loaded */ + private final Mutexable mutexable; + + /** + * Construct a new MutexLoadCompleteEvent. + *

+ * This is used as an optional event fire, AFTER + * LoadMutexTask#onLoadComplete() is called. + * + * @param mutexable - the mutexable that was completely loaded + */ + public MutexLoadCompleteEvent(Mutexable mutexable) { + this.mutexable = mutexable; + } + + /** + * Get the mutexable that was completely loaded in this event. + * + * @return The mutexable involved in the event. + */ + public Mutexable getMutexable() { + return mutexable; + } + + /** + * {@inheritDoc} + */ + @Override + public HandlerList getHandlers() { + return HANDLERS; + } + + /** + * Get the handlers involved in the event. + * + * @return The handlers for this event. + */ + public static HandlerList getHandlerList() { + return HANDLERS; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/mutex/event/MutexSaveCompleteEvent.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/mutex/event/MutexSaveCompleteEvent.java new file mode 100644 index 0000000..b334027 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/mutex/event/MutexSaveCompleteEvent.java @@ -0,0 +1,52 @@ +package net.grandtheftmc.core.database.mutex.event; + +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +import net.grandtheftmc.core.database.mutex.Mutexable; + +public class MutexSaveCompleteEvent extends Event { + + /** List of handlers for this event. */ + private static final HandlerList HANDLERS = new HandlerList(); + /** The mutexable object that was completely saved */ + private final Mutexable mutexable; + + /** + * Construct a new MutexSaveCompleteEvent. + *

+ * This is used as an optional event fire, AFTER + * SaveMutexTask#onSaveComplete() is called. + * + * @param mutexable - the mutexable that was completely saved + */ + public MutexSaveCompleteEvent(Mutexable mutexable) { + this.mutexable = mutexable; + } + + /** + * Get the mutexable that was completely saved in this event. + * + * @return The mutexable involved in the event. + */ + public Mutexable getMutexable() { + return mutexable; + } + + /** + * {@inheritDoc} + */ + @Override + public HandlerList getHandlers() { + return HANDLERS; + } + + /** + * Get the handlers involved in the event. + * + * @return The handlers for this event. + */ + public static HandlerList getHandlerList() { + return HANDLERS; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/mutex/task/LoadMutexTask.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/mutex/task/LoadMutexTask.java new file mode 100644 index 0000000..823539e --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/mutex/task/LoadMutexTask.java @@ -0,0 +1,170 @@ +package net.grandtheftmc.core.database.mutex.task; + +import org.apache.commons.lang.Validate; +import org.bukkit.Bukkit; +import org.bukkit.plugin.Plugin; + +import net.grandtheftmc.core.database.mutex.Mutexable; +import net.grandtheftmc.core.database.mutex.event.AsyncMutexLoadEvent; +import net.grandtheftmc.core.database.mutex.event.MutexLoadCompleteEvent; +import net.grandtheftmc.core.task.ExpirableTask; +import net.grandtheftmc.core.util.debug.Log; + +public abstract class LoadMutexTask extends ExpirableTask { + + /** The Mutexable object being manipulated */ + private Mutexable mutexable; + /** Whether or not we've requested to load */ + private boolean request; + + /** + * Construct a new LoadMutexTask, which loads a mutexable after grabbing the + * lock. + *

+ * This is a wrapper around + * {@link #LoadPlayerTask(Plugin, Mutexable, double, double, double)}, with + * a delay of 0.2 secs, an interval of 0.25 secs, and a length of 1.5 secs. + *

+ * Because there is a delay, after the delay is over, the task will execute + * as a 'starter' onInterval. + * + * @param plugin - the owning plugin + * @param mutexable - the mutexable to load + */ + public LoadMutexTask(Plugin plugin, Mutexable mutexable) { + this(plugin, mutexable, 0.2, 0.25, 1.5); + } + + /** + * Construct a new LoadMutexTask, which loads a mutexable after grabbing the + * lock. + * + * @param plugin - the owning plugin + * @param mutexable - the mutexable to load + * @param delay - the delay, in seconds, before trying to execute the task + * @param interval - the interval, in seconds, of repeating tries + * @param length - the length, in seconds, of the task + */ + public LoadMutexTask(Plugin plugin, Mutexable mutexable, double delay, double interval, double length) { + super(plugin, delay, interval, length); + Validate.notNull(mutexable); + this.mutexable = mutexable; + } + + /** + * Call-back for when the mutex of this task is available. + *

+ * Note: If the loading was successful, this method will automatically + * update the mutex state in the database. + * + * @return {@code true} if the load was successful, {@code false} otherwise. + */ + protected abstract boolean onLoad(); + + /** + * Optional call-back for when loading is complete. + */ + protected void onLoadComplete() { + }; + + /** + * Call-back for when the loading fails. + */ + protected abstract void onLoadFailure(); + + /** + * Fetches the mutex from the database. + * + * @return {@code true} if this mutex is taken by something else, + * {@code false} if the mutex is free. + */ + protected abstract boolean fetchMutex(); + + /** + * Syncs the Mutex with the database. + */ + public abstract void syncMutex(); + + @Override + protected void onInterval(double timeLeft) { + + try { + handleMutex(); + } + catch (Exception e) { + Log.info("Core", "Exception in onInterval() of LoadMutexTask()."); + e.printStackTrace(); + } + } + + @Override + protected void onDelayComplete() { + + // when delay is over, handle mutex + onInterval(getTimeLeft()); + } + + /** + * Call to {@link #onLoadFailure()}. + */ + @Override + protected void onExpire() { + onLoadFailure(); + } + + /** + * Handles the mutex interaction. + */ + private void handleMutex() { + + // TODO remove + long start = System.currentTimeMillis(); + + // fetch mutex from database + boolean mutex = fetchMutex(); + + // if not locked + if (!mutex) { + + // if we haven't sent a load request + if (!request) { + request = true; + + // cancel this task + cancel(); + + // TODO remove + Log.info("TEST-LoadMutexTask", "Mutex is available (" + start + ") for " + mutexable.toString() + " (" + (System.currentTimeMillis() - start) + " msecs)"); + + boolean result = onLoad(); + // TODO remove + Log.info("TEST-LoadMutexTask", "Did onLoad complete for " + mutexable.toString() + "? " + result + " (" + (System.currentTimeMillis() - start) + " msecs)"); + if (result) { + + // lock and sync to db + mutexable.lock(); + syncMutex(); + + // call bukkit event to say it was loaded + Bukkit.getPluginManager().callEvent(new AsyncMutexLoadEvent(mutexable)); + + // optional call-back + onLoadComplete(); + + // schedule a sync load complete event + Bukkit.getScheduler().runTask(getPlugin(), () -> { + Bukkit.getPluginManager().callEvent(new MutexLoadCompleteEvent(mutexable)); + }); + } + else { + onLoadFailure(); + } + } + } + else { + // TODO remove + Log.info("TEST-LoadMutexTask", "Mutex is locked (" + start + "), will retry for " + mutexable.toString() + " (" + (System.currentTimeMillis() - start) + " msecs)"); + } + } +} + diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/mutex/task/SaveMutexTask.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/mutex/task/SaveMutexTask.java new file mode 100644 index 0000000..3d24b33 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/database/mutex/task/SaveMutexTask.java @@ -0,0 +1,155 @@ +package net.grandtheftmc.core.database.mutex.task; + +import org.apache.commons.lang.Validate; +import org.bukkit.Bukkit; +import org.bukkit.plugin.Plugin; + +import net.grandtheftmc.core.database.mutex.Mutexable; +import net.grandtheftmc.core.database.mutex.event.AsyncMutexSaveEvent; +import net.grandtheftmc.core.database.mutex.event.MutexSaveCompleteEvent; +import net.grandtheftmc.core.task.ExpirableTask; +import net.grandtheftmc.core.util.debug.Log; + +public abstract class SaveMutexTask extends ExpirableTask { + + /** The Mutexable object being manipulated */ + private Mutexable mutexable; + /** Whether or not we've requested to save */ + private boolean request; + + /** + * Construct a new SaveMutexTask, which saves a mutexable. + *

+ * This is a wrapper around + * {@link #SavePlayerTask(Plugin, Mutexable, double, double, double)}, with + * a delay of 0.05 secs, an interval of 0.25 secs, and a length of 1 sec. + *

+ * Because there is a delay, after the delay is over, the task will execute + * as a 'starter' onInterval. + * + * + * @param plugin - the owning plugin + * @param mutexable - the mutexable to save + */ + public SaveMutexTask(Plugin plugin, Mutexable mutexable) { + this(plugin, mutexable, 0.05, 0.25, 1); + } + + /** + * Construct a new SaveMutexTask, which saves a mutexable. + * + * @param plugin - the owning plugin + * @param mutexable - the mutexable to load + * @param delay - the delay, in seconds, before trying to execute the task + * @param interval - the interval, in seconds, of repeating tries + * @param length - the length, in seconds, of the task + */ + public SaveMutexTask(Plugin plugin, Mutexable mutexable, double delay, double interval, double length) { + super(plugin, delay, interval, length); + Validate.notNull(mutexable); + this.mutexable = mutexable; + } + + /** + * Call-back for when the mutex of this task is available. + *

+ * Note: If the savings was successful, this method will automatically + * update the mutex state in the database. + * + * @return {@code true} if the save was successful, {@code false} otherwise. + */ + protected abstract boolean onSave(); + + /** + * Optional Call-back for when saving is complete. + */ + protected void onSaveComplete() { + }; + + /** + * Call-back for when the saving fails. + */ + protected abstract void onSaveFailure(); + + /** + * Syncs the Mutex with the database. + */ + public abstract void syncMutex(); + + @Override + protected void onInterval(double timeLeft) { + + try { + handleMutex(); + } + catch (Exception e) { + Log.info("Core", "Exception in onInterval() of SaveMutexTask()."); + e.printStackTrace(); + } + } + + @Override + protected void onDelayComplete() { + + // when delay is over, handle mutex + onInterval(getTimeLeft()); + } + + @Override + protected void onExpire() { + onSaveFailure(); + } + + /** + * Handles the mutex interaction. + */ + private void handleMutex() { + + // TODO remove + long start = System.currentTimeMillis(); + + // if mutex is locked + if (mutexable.isLocked()) { + + // if not sent a save request + if (!request) { + request = true; + + // cancel this task + cancel(); + + // TODO remove + Log.info("TEST-SaveMutexTask", "Mutex is unique(" + start + ") for " + mutexable.toString()); + + boolean result = onSave(); + // TODO remove + Log.info("TEST-SaveMutexTask", "Did onSave complete for " + mutexable.toString() + "? " + result + " (" + (System.currentTimeMillis() - start) + " msecs)"); + if (result) { + + // unlock the mutex and sync it to db + mutexable.unlock(); + syncMutex(); + + // call bukkit event to say it was saved + Bukkit.getPluginManager().callEvent(new AsyncMutexSaveEvent(mutexable)); + + // optional call-back + onSaveComplete(); + + // schedule a sync save complete event + Bukkit.getScheduler().runTask(getPlugin(), () -> { + Bukkit.getPluginManager().callEvent(new MutexSaveCompleteEvent(mutexable)); + }); + } + else { + onSaveFailure(); + } + } + } + else { + // TODO remove + Log.info("TEST-SaveMutexTask", "Mutex not locked(" + start + "), will retry for " + mutexable.toString() + " (" + (System.currentTimeMillis() - start) + " msecs)"); + } + } +} + diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/editmode/BlockChange.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/editmode/BlockChange.java new file mode 100644 index 0000000..d262733 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/editmode/BlockChange.java @@ -0,0 +1,91 @@ +package net.grandtheftmc.core.editmode; + +import org.bukkit.Material; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.block.BlockBurnEvent; +import org.bukkit.event.block.BlockFadeEvent; +import org.bukkit.event.block.BlockFormEvent; +import org.bukkit.event.block.BlockFromToEvent; +import org.bukkit.event.block.BlockIgniteEvent; +import org.bukkit.event.block.BlockIgniteEvent.IgniteCause; +import org.bukkit.event.block.BlockPhysicsEvent; +import org.bukkit.event.block.BlockSpreadEvent; +import org.bukkit.event.block.LeavesDecayEvent; +import org.bukkit.event.entity.EntityExplodeEvent; +import org.bukkit.event.player.PlayerInteractEvent; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.users.User; + +public class BlockChange implements Listener { + + @EventHandler + public void blockChange(BlockFromToEvent e) { + if (Core.getWorldManager().usesEditMode(e.getBlock().getWorld().getName())) + e.setCancelled(true); + } + + @EventHandler + public void onBurn(BlockBurnEvent e) { + if (Core.getWorldManager().usesEditMode(e.getBlock().getWorld().getName())) + e.setCancelled(true); + + } + + @EventHandler + public void onExplode(EntityExplodeEvent e) { + if (Core.getWorldManager().usesEditMode(e.getLocation().getWorld().getName())) { + e.blockList().clear(); + } + } + + @EventHandler + public void onIgnite(BlockIgniteEvent e) { + if (Core.getWorldManager().usesEditMode(e.getBlock().getWorld().getName())) { + if (e.getCause() == IgniteCause.FLINT_AND_STEEL) { + User u = Core.getUserManager().getLoadedUser(e.getPlayer().getUniqueId()); + if (!u.hasEditMode()) + e.setCancelled(true); + } else + e.setCancelled(true); + } + } + + // @EventHandler This event disables redstone and stuff + public void onBlockPhysics(BlockPhysicsEvent e) { + if (Core.getWorldManager().usesEditMode(e.getBlock().getWorld().getName())) + e.setCancelled(true); + } + + @EventHandler + public void onLeavesDecay(LeavesDecayEvent e) { + if (Core.getWorldManager().usesEditMode(e.getBlock().getWorld().getName())) + e.setCancelled(true); + } + + @EventHandler + public void noUproot(PlayerInteractEvent event) { + if (Core.getWorldManager().usesEditMode(event.getPlayer().getWorld().getName()) && event.getAction() == Action.PHYSICAL && event.getClickedBlock().getType() == Material.SOIL) + event.setCancelled(true); + } + + @EventHandler + public void onBlockForm(BlockFormEvent e) { + if (Core.getWorldManager().usesEditMode(e.getBlock().getWorld().getName())) + e.setCancelled(true); + } + + @EventHandler + public void onBlockSpread(BlockSpreadEvent e) { + if (Core.getWorldManager().usesEditMode(e.getBlock().getWorld().getName())) + e.setCancelled(true); + } + + @EventHandler + public void onBlockFade(BlockFadeEvent e) { + if (Core.getWorldManager().usesEditMode(e.getBlock().getWorld().getName())) e.setCancelled(true); + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/editmode/BreakBlock.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/editmode/BreakBlock.java new file mode 100644 index 0000000..c7dc975 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/editmode/BreakBlock.java @@ -0,0 +1,18 @@ +package net.grandtheftmc.core.editmode; + +import net.grandtheftmc.core.Core; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockBreakEvent; + +public class BreakBlock implements Listener { + + + @EventHandler(priority = EventPriority.HIGHEST) + public void onBreak(BlockBreakEvent e) { + if (Core.getWorldManager().usesEditMode(e.getBlock().getWorld().getName()) && !Core.getUserManager().getLoadedUser(e.getPlayer().getUniqueId()).hasEditMode()) { + e.setCancelled(true); + } + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/editmode/Craft.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/editmode/Craft.java new file mode 100644 index 0000000..9e59d16 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/editmode/Craft.java @@ -0,0 +1,17 @@ +package net.grandtheftmc.core.editmode; + +import net.grandtheftmc.core.Core; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.CraftItemEvent; + +public class Craft implements Listener { + + @EventHandler + public void onCraft(CraftItemEvent e) { + if (Core.getSettings().canCraft()) return; + e.setResult(null); + e.setCancelled(true); + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/editmode/Damage.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/editmode/Damage.java new file mode 100644 index 0000000..37726c0 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/editmode/Damage.java @@ -0,0 +1,54 @@ +package net.grandtheftmc.core.editmode; + +import net.grandtheftmc.core.Core; +import org.bukkit.Material; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.inventory.ItemStack; + +public class Damage implements Listener { + + @EventHandler + public void onDamage(EntityDamageEvent e) { + //Faster to check a boolean first than comparing entities. + if (Core.getWorldManager().usesEditMode(e.getEntity().getWorld().getName()) + && e.getEntity().getType() == EntityType.ARMOR_STAND + && (e.getCause() == EntityDamageEvent.DamageCause.BLOCK_EXPLOSION + || e.getCause() == EntityDamageEvent.DamageCause.ENTITY_EXPLOSION)) + e.setCancelled(true); + } + + @EventHandler + public void onDamage(EntityDamageByEntityEvent e) { + if (!Core.getWorldManager().usesEditMode(e.getEntity().getWorld().getName())) + return; + + Entity entity = e.getEntity(); + switch (entity.getType()) { + case ITEM_FRAME: + if (e.getDamager() instanceof Player + && Core.getUserManager().getLoadedUser(e.getDamager().getUniqueId()).hasEditMode()) + break; + e.setCancelled(true); + return; + case ARMOR_STAND: + if (e.getDamager() instanceof Player + && Core.getUserManager().getLoadedUser(e.getDamager().getUniqueId()).hasEditMode()) { + ItemStack item = ((Player) e.getDamager()).getInventory().getItemInMainHand(); + if (item != null && item.getType() == Material.DIAMOND_SWORD && entity.isInvulnerable()) + entity.remove(); + break; + } + + e.setCancelled(true); + return; + default: + } + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/editmode/HangingBreak.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/editmode/HangingBreak.java new file mode 100644 index 0000000..eb461f1 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/editmode/HangingBreak.java @@ -0,0 +1,37 @@ +package net.grandtheftmc.core.editmode; + +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.hanging.HangingBreakByEntityEvent; +import org.bukkit.event.hanging.HangingBreakEvent; + +import net.grandtheftmc.core.Core; + +public class HangingBreak implements Listener { + + @EventHandler + public void onEntityDeath(HangingBreakEvent e) { + if (Core.getWorldManager().usesEditMode(e.getEntity().getWorld().getName()) && e.getCause() == HangingBreakEvent.RemoveCause.EXPLOSION) + e.setCancelled(true); + } + + @EventHandler + public void onHangingBreak(HangingBreakByEntityEvent e) { + if (!Core.getWorldManager().usesEditMode(e.getEntity().getWorld().getName())) + return; + Entity hanging = e.getEntity(); + switch (hanging.getType()) { + case ITEM_FRAME: + case PAINTING: + Entity remover = e.getRemover(); + if (remover instanceof Player + && Core.getUserManager().getLoadedUser(remover.getUniqueId()).hasEditMode()) + return; + e.setCancelled(true); + return; + default: + } + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/editmode/Interact.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/editmode/Interact.java new file mode 100644 index 0000000..ef5a83c --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/editmode/Interact.java @@ -0,0 +1,104 @@ +package net.grandtheftmc.core.editmode; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.users.User; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.event.Cancellable; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.player.PlayerInteractAtEntityEvent; +import org.bukkit.event.player.PlayerInteractEntityEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.ItemStack; + +import java.util.UUID; + +public class Interact implements Listener { + + @EventHandler + public void onInteractEntity(PlayerInteractEntityEvent e) { + Player player = e.getPlayer(); + Entity en = e.getRightClicked(); + if (Core.getWorldManager().usesEditMode(en.getWorld().getName())) + checkTypes(e, player.getUniqueId(), en.getType()); + } + + @EventHandler + public void onInteractAtEntity(PlayerInteractAtEntityEvent e) { + Player player = e.getPlayer(); + Entity en = e.getRightClicked(); + if (Core.getWorldManager().usesEditMode(en.getWorld().getName())) + checkTypes(e, player.getUniqueId(), en.getType()); + } + + private void checkTypes(Cancellable e, UUID u, EntityType et) { + switch (et) { + case PAINTING: + case ITEM_FRAME: + case ARMOR_STAND: + if (!Core.getUserManager().getLoadedUser(u).hasEditMode()) + e.setCancelled(true); + return; + } + } + + @EventHandler + public void onInteract(PlayerInteractEvent e) { + Player player = e.getPlayer(); + if (!Core.getWorldManager().usesEditMode(player.getWorld().getName()) || e.getAction() != Action.RIGHT_CLICK_BLOCK) + return; + User u = Core.getUserManager().getLoadedUser(player.getUniqueId()); + ItemStack item = player.getInventory().getItemInMainHand(); + if (item != null) { + switch (item.getType()) { + case ITEM_FRAME: + case WATER_BUCKET: + case LAVA_BUCKET: + + if (!u.hasEditMode()) + e.setCancelled(true); + break; + case BUCKET: + switch (e.getClickedBlock().getType()) { + case WATER: + case STATIONARY_WATER: + case LAVA: + case STATIONARY_LAVA: + if (!u.hasEditMode()) + e.setCancelled(true); + default: + break; + } + default: + break; + } + } + + switch (e.getClickedBlock().getType()) { + case CHEST: + case TRAPPED_CHEST: + case DROPPER: + case HOPPER: + case FURNACE: + case BURNING_FURNACE: + case BREWING_STAND: + if (!Core.getSettings().canOpenChests() && !u.hasEditMode()) + e.setCancelled(true); + break; + + case FLOWER_POT: + if (!u.hasEditMode()) { + e.setCancelled(true); + e.getClickedBlock().getState().update(); + } + break; + + default: + break; + } + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/editmode/InventoryClick.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/editmode/InventoryClick.java new file mode 100644 index 0000000..079f463 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/editmode/InventoryClick.java @@ -0,0 +1,23 @@ +package net.grandtheftmc.core.editmode; + +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.users.User; + +public class InventoryClick implements Listener { + + //@EventHandler idk why this is here ~ Tim. + public void onClick(InventoryClickEvent e) { + Player player = (Player) e.getWhoClicked(); + User u = Core.getUserManager().getLoadedUser(player.getUniqueId()); + if (Core.getWorldManager().usesEditMode(player.getWorld().getName()) && !u.hasEditMode()) { + e.setCancelled(false); + } + + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/editmode/Liquid.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/editmode/Liquid.java new file mode 100644 index 0000000..7515c3b --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/editmode/Liquid.java @@ -0,0 +1,24 @@ +package net.grandtheftmc.core.editmode; + +import net.grandtheftmc.core.Core; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerBucketEmptyEvent; +import org.bukkit.event.player.PlayerBucketFillEvent; + +public class Liquid implements Listener { + + @EventHandler + public void onFillBucket(PlayerBucketFillEvent e) { + if (Core.getWorldManager().usesEditMode(e.getBlockClicked().getWorld().getName()) && !Core.getUserManager().getLoadedUser(e.getPlayer().getUniqueId()).hasEditMode()) { + e.setCancelled(true); + } + } + + @EventHandler + public void onEmptyBucket(PlayerBucketEmptyEvent e) { + if (Core.getWorldManager().usesEditMode(e.getBlockClicked().getWorld().getName()) && !Core.getUserManager().getLoadedUser(e.getPlayer().getUniqueId()).hasEditMode()) { + e.setCancelled(true); + } + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/editmode/PlaceBlock.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/editmode/PlaceBlock.java new file mode 100644 index 0000000..cbecd79 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/editmode/PlaceBlock.java @@ -0,0 +1,19 @@ +package net.grandtheftmc.core.editmode; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.users.User; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockPlaceEvent; + +public class PlaceBlock implements Listener { + + @EventHandler + public void onPlace(BlockPlaceEvent e) { + Player player = e.getPlayer(); + if (Core.getWorldManager().usesEditMode(player.getWorld().getName()) && !Core.getUserManager().getLoadedUser(player.getUniqueId()).hasEditMode()) { + e.setCancelled(true); + } + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/editmode/WorldConfig.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/editmode/WorldConfig.java new file mode 100644 index 0000000..309e486 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/editmode/WorldConfig.java @@ -0,0 +1,66 @@ +package net.grandtheftmc.core.editmode; + +public class WorldConfig { + + + private String world; + private boolean editMode; + private RestrictedType type; + private String restricted; + + public WorldConfig(String world, boolean editMode) { + this.world = world; + this.editMode = editMode; + this.type = RestrictedType.NONE; + } + + public WorldConfig(String world, boolean editMode, RestrictedType type, String restricted) { + this.world = world; + this.editMode = editMode; + this.type = type; + this.restricted = restricted; + } + + public String getWorld() { + return this.world; + } + + public void setWorld(String world) { + this.world = world; + } + + public boolean isEditMode() { + return this.editMode; + } + + public void setEditMode(boolean editMode) { + this.editMode = editMode; + } + + public RestrictedType getType() { + return this.type; + } + + public void setType(RestrictedType type) { + this.type = type; + } + + public String getRestricted() { + return this.restricted; + } + + public void setRestricted(String restricted) { + this.restricted = restricted; + } + + public boolean isRestricted() { + return this.type != RestrictedType.NONE; + } + + public enum RestrictedType { + USERRANK, + RESTRICTED, + GAMERANK, + NONE; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/editmode/WorldManager.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/editmode/WorldManager.java new file mode 100644 index 0000000..cfe09f8 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/editmode/WorldManager.java @@ -0,0 +1,105 @@ +package net.grandtheftmc.core.editmode; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.util.Component; +import org.bukkit.Bukkit; +import org.bukkit.World; +import org.bukkit.WorldCreator; +import org.bukkit.WorldType; +import org.bukkit.configuration.file.YamlConfiguration; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * Created by Liam on 26/07/2017. + */ +public class WorldManager implements Component { + + private final HashMap worldConfigs = new HashMap<>(); + + public WorldManager() { + this.loadWorlds(); + } + + @Override + public WorldManager onDisable(Core plugin) { + this.worldConfigs.clear(); + return this; + } + + private void loadWorlds() { + YamlConfiguration c = Core.getSettings().getWorldsConfig(); + this.worldConfigs.clear(); + if (c.getKeys(false).isEmpty()) + for (World world : Bukkit.getWorlds()) + this.worldConfigs.put(world.getName(), new WorldConfig(world.getName(), true)); + if (c.get("worlds") != null) { + for (World world : Bukkit.getWorlds()) + this.worldConfigs.put(world.getName(), new WorldConfig(world.getName(), true)); + for (String s : c.getStringList("worlds")) { + this.worldConfigs.put(s, new WorldConfig(s, true)); + if (Bukkit.getWorld(s) == null) + new WorldCreator(s).createWorld(); + } + c.getStringList("worlds").stream().filter(s -> Bukkit.getWorld(s) == null).forEach(s -> new WorldCreator(s).createWorld()); + return; + } + for (String s : c.getKeys(false)) { + boolean editMode = c.getBoolean(s + ".editMode", true); + if (Bukkit.getWorld(s) == null) { + WorldCreator wc = new WorldCreator(s); + if (c.get(s + ".worldType") != null) + wc.type(WorldType.valueOf(c.getString(s + ".worldType"))); + if (c.get(s + ".seed") != null) + wc.seed(c.getLong(s + ".seed")); + if (c.get(s + ".environment") != null) + wc.environment(World.Environment.valueOf(c.getString(s + ".environment"))); + if (c.get(s + ".generator") != null) + wc.generator(c.getString(s + ".generator")); + if (c.get(s + ".generatorSettings") != null) + wc.generatorSettings(c.getString(s + ".generatorSettings")); + if (c.get(s + ".generateStructures") != null) + wc.generateStructures(c.getBoolean(s + ".generateStructures")); + wc.createWorld(); + } + WorldConfig.RestrictedType type = c.get(s + ".restrictedType") == null ? WorldConfig.RestrictedType.NONE : WorldConfig.RestrictedType.valueOf(c.getString(s + ".restrictedType")); + String restricted = c.getString(s + ".restricted"); + this.worldConfigs.put(s, new WorldConfig(s, editMode, type, restricted)); + + + } + } + + public List getEditModeWorlds() { + List list = new ArrayList<>(); + this.worldConfigs.values().stream().filter(WorldConfig::isEditMode).forEach(w -> list.add(w.getWorld())); + return list; + + } + + public void addEditModeWorlds(String... worlds) { + for (String str : worlds) { + if (this.worldConfigs.containsKey(str)) this.worldConfigs.get(str).setEditMode(true); + this.worldConfigs.put(str, new WorldConfig(str, true)); + } + } + +// public void setEditModeWorlds(List editModeWorlds) { +// this.editModeWorlds = editModeWorlds; +// } + + public boolean usesEditMode(String world) { + return this.worldConfigs.get(world).isEditMode(); + } + + public HashMap getWorldConfigs() { + return this.worldConfigs; + } + + public WorldConfig getWorldConfig(String s) { + return this.worldConfigs.getOrDefault(s, new WorldConfig(s, true, WorldConfig.RestrictedType.RESTRICTED, null)); + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/enjin/EnjinCache.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/enjin/EnjinCache.java new file mode 100644 index 0000000..78ed0c8 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/enjin/EnjinCache.java @@ -0,0 +1,96 @@ +package net.grandtheftmc.core.enjin; + +import net.grandtheftmc.core.Core; +import org.json.JSONObject; + +import java.util.*; + +/** + * Created by Adam on 10/06/2017. + */ +public class EnjinCache { + + /* + Want to avoid calling get-users and get-tags all the time so store a cache. + */ + + //Map a users name to their enjin ID + private static Map userIDs = new HashMap<>(); + + //Map a tag name to its id + private static Map tagIDs = new HashMap<>(); + + /** + * Cache the entire list of users. + */ + protected static void cacheAll() { + //CLear any existing + tagIDs.clear(); + userIDs.clear(); + + //Cache users + JSONObject json = HTTPInterface.post("http://www.grandtheftmc.net/api/get-users", ""); + if(json==null) { + Core.error("Couldn't cache enjin users as website didnt respond"); + return; + } + Iterator it = json.keys(); + while (it.hasNext()) { + int id = Integer.parseInt(it.next()); + String name = json.getJSONObject(Integer.toString(id)).getString("username"); + userIDs.put(name.toLowerCase(), id); + } + + //Cache tags + json = HTTPInterface.post("http://www.grandtheftmc.net/api/get-tags", ""); + + JSONObject tags = json.getJSONObject("tags"); + it = tags.keys(); + while (it.hasNext()) { + int tagID = Integer.parseInt(it.next()); + String tagName = tags.getJSONObject(Integer.toString(tagID)).getString("name"); + tagIDs.put(tagName.toLowerCase(), tagID); + } + } + + /** + * Attempt to get the user ID of a user. + * + * @param username The users username + * @return + */ + protected static Optional getUserID(String username) { + Optional ret = Optional.empty(); + + if (userIDs.containsKey(username.toLowerCase())) { + ret = Optional.of(userIDs.get(username.toLowerCase())); + } + + return ret; + } + + /** + * Attempt to get the tag ID associated with a tag. + * + * @param tag + * @return + */ + protected static Optional getTagID(String tag) { + Optional ret = Optional.empty(); + + if (tagIDs.containsKey(tag.toLowerCase())) { + ret = Optional.of(tagIDs.get(tag.toLowerCase())); + } + + return ret; + } + + /** + * Return a set of valid tags. + * + * @return + */ + public static Set getTagNames() { + return tagIDs.keySet(); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/enjin/EnjinCore.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/enjin/EnjinCore.java new file mode 100644 index 0000000..7fc93d2 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/enjin/EnjinCore.java @@ -0,0 +1,73 @@ +package net.grandtheftmc.core.enjin; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.enjin.data.EnjinResponse; +import net.grandtheftmc.core.enjin.data.EnjinResult; +import org.bukkit.Bukkit; +import org.json.JSONObject; + +import java.util.Optional; + +/** + * Created by Adam on 10/06/2017. + */ +public class EnjinCore { + + public static void init(){ + EnjinCache.cacheAll(); + } + + /** + * Attempt to a tag a user on Enjin, EnjinResponse class allows for a callback as this function is asynchronous. + * @param username The username of the user. + * @param tag The tag we wish to associate with them. + * @param resp The response callback function. + */ + public static void tagUser(String username, String tag, final EnjinResponse resp) { + Bukkit.getScheduler().runTaskAsynchronously(Core.getInstance(), () -> { + //Attempt to associate username with a userID + + Optional userID = EnjinCache.getUserID(username); + Optional tagID = EnjinCache.getTagID(tag); + + if (!userID.isPresent() || !tagID.isPresent()) { + //try to update the cache + EnjinCache.cacheAll(); + //Try to obtain the user ID and tagID again + userID = EnjinCache.getUserID(username); + tagID = EnjinCache.getTagID(username); + + if (!userID.isPresent()) { + Core.getInstance().getLogger().warning("Failed to set tag (" + tag + ") for user" + + " (" + username + ") as the USER ID could not be found in the Enjin database."); + resp.callback(EnjinResult.FAIL_USERID, username, tag); + return; + } + + if (!tagID.isPresent()) { + Core.getInstance().getLogger().warning("Failed to set tag (" + tag + ") for user" + + " (" + username + ") as the TAG ID could not be found in the Enjin database."); + resp.callback(EnjinResult.FAIL_TAGID, username, tag); + return; + } + } + + //Build our JSON object + JSONObject obj = new JSONObject(); + obj.put("jsonrpc", "2.0"); + obj.put("method", "Tags.tagUser"); + + JSONObject sub = new JSONObject(); + sub.put("api_key", "4e2846cb945359f54777f27348c2ea9720a78ece7e05e225"); + sub.put("user_id", userID.get()); + sub.put("tag_id", tagID.get()); + + obj.put("params", sub); + JSONObject jsonOut = HTTPInterface.post("http://www.grandtheftmc.net/api/v1/api.php", obj.toString()); + + //if the object is null we know something went wrong, otherwise it should be an empty JSON + resp.callback(jsonOut == null ? EnjinResult.FAIL_OTHER : EnjinResult.SUCCESS, username, tag); + + }); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/enjin/HTTPInterface.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/enjin/HTTPInterface.java new file mode 100644 index 0000000..011d16a --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/enjin/HTTPInterface.java @@ -0,0 +1,64 @@ +package net.grandtheftmc.core.enjin; + +import org.json.JSONObject; +import sun.net.www.http.HttpClient; + +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.Iterator; + +/** + * Created by Adam on 10/06/2017. + */ +public class HTTPInterface { + + /** + * Send a HTTP POST request to the specified url, with the body content. + * + * @param u URL to POST to. + * @param body Body of the POST request. + */ + public static JSONObject post(String u, String body) { + try { + URL url = new URL(u); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + + conn.setDoOutput(true); + conn.setRequestMethod("POST"); + conn.addRequestProperty("Content-Type", "application/json"); + conn.setRequestProperty("Content-Length", Integer.toString(body.length())); + conn.getOutputStream().write(body.getBytes("UTF8")); + conn.getOutputStream().flush(); + conn.getOutputStream().close(); + + int responseCode = conn.getResponseCode(); + + BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream())); + String inputLine; + StringBuffer response = new StringBuffer(); + + while ((inputLine = in.readLine()) != null) { + response.append(inputLine); + } + in.close(); + + //System.out.println("Response code = " + responseCode); + //System.out.println("Response = " + response.toString()); + + if(response.toString().length() > 0) { + JSONObject json = new JSONObject(response.toString()); + return json; + } else { + return new JSONObject(); + } + + } catch (Exception e) { + e.printStackTrace(); + } + + return null; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/enjin/data/EnjinResponse.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/enjin/data/EnjinResponse.java new file mode 100644 index 0000000..f4c4f1e --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/enjin/data/EnjinResponse.java @@ -0,0 +1,10 @@ +package net.grandtheftmc.core.enjin.data; + +/** + * Created by Adam on 10/06/2017. + */ +public abstract class EnjinResponse { + + public abstract void callback(EnjinResult response, String user, String tag); + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/enjin/data/EnjinResult.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/enjin/data/EnjinResult.java new file mode 100644 index 0000000..10e0dca --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/enjin/data/EnjinResult.java @@ -0,0 +1,12 @@ +package net.grandtheftmc.core.enjin.data; + +/** + * Created by Adam on 10/06/2017. + */ +public enum EnjinResult { + + SUCCESS, + FAIL_USERID, + FAIL_TAGID, + FAIL_OTHER; +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/event/BaseEvent.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/event/BaseEvent.java new file mode 100644 index 0000000..6412481 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/event/BaseEvent.java @@ -0,0 +1,136 @@ +package net.grandtheftmc.core.event; + +import java.util.logging.Level; + +import org.bukkit.Bukkit; +import org.bukkit.plugin.Plugin; + +/** + * Implementation of the interface Event, with basic handles for an event. + * + * @author sbahr + */ +public abstract class BaseEvent implements Event { + + /** The owning plugin */ + private final Plugin plugin; + /** The identification for this event */ + private final String id; + /** The state of this event */ + private EventState state; + /** The time the event started in millis */ + private long startTimeMillis; + /** The time the event is supposed to end, in millis */ + private long endTimeMillis; + + /** + * Construct a new BaseEvent. + *

+ * This is the implementation of a generic event. + * + * @param plugin - the owning plugin + * @param id - the id to call this event + * @param startTime - the time, in millis since epoch, that this event starts + * @param endTime - the time, in millis since epoch, that this event ends + */ + public BaseEvent(Plugin plugin, String id, long startTime, long endTime) { + this.plugin = plugin; + this.id = id; + this.startTimeMillis = startTime; + this.endTimeMillis = endTime; + + // initialize + init(); + } + + /** + * {@inheritDoc} + */ + @Override + public void init() { + Bukkit.getLogger().log(Level.INFO, "Initializing event=" + getId()); + + setState(EventState.CONSTRUCTED); + + // call on init for implementation + onInit(); + } + + /** + * {@inheritDoc} + */ + @Override + public void start() { + Bukkit.getLogger().log(Level.INFO, "Starting event=" + getId()); + + setState(EventState.ENABLED); + + // call on start for implementation + onStart(); + } + + /** + * {@inheritDoc} + */ + @Override + public void end() { + Bukkit.getLogger().log(Level.INFO, "Ending event=" + getId()); + + setState(EventState.DISABLED); + + // call on end for implementation + onEnd(); + } + + /** + * {@inheritDoc} + */ + @Override + public EventState getState() { + return state; + } + + /** + * {@inheritDoc} + */ + @Override + public void setState(EventState eventState) { + this.state = eventState; + } + + /** + * Get the start time of this event. + * + * @return The start time of this event. + */ + public long getStartTime() { + return startTimeMillis; + } + + /** + * Get the end time of this event. + * + * @return The end time of this event. + */ + public long getEndTime() { + return endTimeMillis; + } + + /** + * Get the owning plugin. + * + * @return The owning plugin for this event. + */ + @Override + public final Plugin getPlugin() { + return plugin; + } + + /** + * {@inheritDoc} + */ + @Override + public String getId() { + return id; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/event/Event.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/event/Event.java new file mode 100644 index 0000000..55b8935 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/event/Event.java @@ -0,0 +1,57 @@ +package net.grandtheftmc.core.event; + +import net.grandtheftmc.core.util.Identifiable; +import net.grandtheftmc.core.util.PluginAssociated; + +/** + * Interface representation of an event, something like Halloween, or Easter. + * + * @author sbahr + */ +public interface Event extends Identifiable, PluginAssociated { + + /** + * Initialize the event. + */ + void init(); + + /** + * Optional call-back for when the event is initialized. + */ + void onInit(); + + /** + * Start the event. + */ + void start(); + + /** + * Optional call-back for when the event starts. + */ + void onStart(); + + /** + * End the event. + */ + void end(); + + /** + * Optional call-back for when the event ends. + */ + void onEnd(); + + /** + * Get the state of this event. + * + * @return The state of this event. + */ + EventState getState(); + + /** + * Set the state of this event. + * + * @param eventState - the new state + */ + void setState(EventState eventState); + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/event/EventCommand.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/event/EventCommand.java new file mode 100644 index 0000000..b0aebb6 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/event/EventCommand.java @@ -0,0 +1,245 @@ +package net.grandtheftmc.core.event; + +import java.sql.Connection; +import java.sql.Timestamp; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.plugin.Plugin; +import org.json.simple.JSONObject; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.database.BaseDatabase; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserRank; + +public class EventCommand implements CommandExecutor { + + /** The owning plugin */ + private Plugin plugin; + + /** + * Construct a new EventCommand. + *

+ * This command is used to schedule events in the future. + *

+ * + * @param plugin - the owning plugin + */ + public EventCommand(Plugin plugin) { + this.plugin = plugin; + } + + @Override + public boolean onCommand(CommandSender s, Command c, String l, String[] args) { + + if (s instanceof Player) { + Player player = (Player) s; + + // get the user + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + if (!user.isRank(UserRank.ADMIN)) { + player.sendMessage(Lang.NOPERM.toString()); + return true; + } + + if (args.length > 0) { + + switch (args[0].toLowerCase()) { + case "schedule": + handleScheduleCommand(player, args); + return true; + case "clear": + handleClearCommand(player, args); + return true; + case "help": + handleHelpCommand(player); + return true; + } + } + + handleHelpCommand(player); + return true; + } + + return true; + } + + /** + * Handles the executing of the help subcommand. + * + * @param player - the player executing the command + */ + protected void handleHelpCommand(Player player) { + + // event schedule server_key halloween 10-29-17 + // event schedule server_key halloween 10-22-17 10-29-17 + // event clear all + // event clear server_key halloween + + player.sendMessage(ChatColor.GRAY + "--- " + ChatColor.GOLD + "Event Scheduling" + ChatColor.GRAY + " ---"); + player.sendMessage(ChatColor.WHITE + "/event schedule [serverKey] [eventType] [end_date]" + ChatColor.GRAY + " Schedules event for given server, starting now and ending on endDate."); + player.sendMessage(ChatColor.GRAY + "Example usage: " + ChatColor.WHITE + "/event schedule " + Core.getSettings().getServer_GTM_shortName() + "1 HALLOWEEN 2017-10-31.10:00:00"); + player.sendMessage(""); + + player.sendMessage(ChatColor.WHITE + "/event schedule [serverKey] [eventType] [endDate] [startDate]" + ChatColor.GRAY + " Schedules event for given server, with the startDate / endDate."); + player.sendMessage(""); + + player.sendMessage(ChatColor.WHITE + "/event clear all" + ChatColor.GRAY + " Clear all events across all servers."); + player.sendMessage(""); + + player.sendMessage(ChatColor.WHITE + "/event clears [serverKey]" + ChatColor.GRAY + " Clear the event for the given serverKey."); + player.sendMessage(""); + } + + /** + * Handles the executing of the schedule subcommand. + * + * @param player - the player executing the command + * @param args - the args + */ + protected void handleScheduleCommand(Player player, String[] args) { + + // event schedule [serverKey] [eventType] [end_date] + if (args.length == 4) { + String serverKey = args[1]; + EventType eventType = EventType.fromID(args[2]).orElse(null); + Timestamp endDate = getTimestamp(args[3]); + + if (eventType == null){ + player.sendMessage(ChatColor.RED + "Invalid event type. Please try one of the following: "); + for (EventType et : EventType.values()){ + player.sendMessage(ChatColor.RED + "- " + ChatColor.WHITE + et.getId()); + } + return; + } + + if (endDate == null){ + player.sendMessage(ChatColor.RED + "Invalid end date as it must be in the form of " + ChatColor.WHITE + "2017-10-31.10:00:00"); + return; + } + + player.sendMessage(ChatColor.YELLOW + "Attempting to register event " + ChatColor.WHITE + eventType.getId() + ChatColor.YELLOW + " for " + ChatColor.WHITE + serverKey + ChatColor.YELLOW + " ending on " + ChatColor.WHITE + endDate.toString()); + + // TODO add extra data support here + JSONObject data = new JSONObject(); + + // async update + Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> { + try (Connection conn = BaseDatabase.getInstance().getConnection()) { + EventDAO.scheduleEvent(conn, serverKey, eventType, data, endDate); + } + catch (Exception e) { + e.printStackTrace(); + } + }); + } + // event schedule [serverKey] [eventType] [endDate] [startDate] + else if (args.length == 5) { + String serverKey = args[1]; + EventType eventType = EventType.fromID(args[2]).orElse(null); + Timestamp endDate = getTimestamp(args[3]); + Timestamp startDate = getTimestamp(args[4]); + + if (eventType == null){ + player.sendMessage(ChatColor.RED + "Invalid event type. Please try one of the following: "); + for (EventType et : EventType.values()){ + player.sendMessage(ChatColor.RED + "- " + ChatColor.WHITE + et.getId()); + } + return; + } + + if (endDate == null){ + player.sendMessage(ChatColor.RED + "Invalid end date as it must be in the form of " + ChatColor.WHITE + "2017-10-31.10:00:00"); + return; + } + + if (startDate == null){ + player.sendMessage(ChatColor.RED + "Invalid start date as it must be in the form of " + ChatColor.WHITE + "2017-10-31.10:00:00"); + return; + } + + player.sendMessage(ChatColor.YELLOW + "Attempting to register event " + ChatColor.WHITE + eventType.getId() + ChatColor.YELLOW + " for " + ChatColor.WHITE + serverKey + ChatColor.YELLOW + " ending on " + ChatColor.WHITE + endDate.toString() + ChatColor.YELLOW + " and starting on " + ChatColor.WHITE + startDate.toString()); + + // TODO add extra data support here + JSONObject data = new JSONObject(); + + // async update + Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> { + try (Connection conn = BaseDatabase.getInstance().getConnection()) { + EventDAO.scheduleEvent(conn, serverKey, eventType, data, startDate, endDate); + } + catch (Exception e) { + e.printStackTrace(); + } + }); + } + } + + /** + * Handles the executing of the clear subcommand. + * + * @param player - the player executing the command + * @param args - the args + */ + protected void handleClearCommand(Player player, String[] args) { + + // /event clear [serverKey] + if (args.length == 2) { + + String serverKey = args[1]; + + if (serverKey.equalsIgnoreCase("all")) { + player.sendMessage(ChatColor.YELLOW + "Attempting to clear ALL events..."); + + // async update + Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> { + try (Connection conn = BaseDatabase.getInstance().getConnection()) { + EventDAO.clearAllActiveEvents(conn); + } + catch (Exception e) { + e.printStackTrace(); + } + }); + } + else { + + player.sendMessage(ChatColor.YELLOW + "Attempting to clear the event for server=" + ChatColor.WHITE + serverKey); + + // async update + Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> { + try (Connection conn = BaseDatabase.getInstance().getConnection()) { + EventDAO.clearActiveEvent(conn, serverKey); + } + catch (Exception e) { + e.printStackTrace(); + } + }); + } + } + } + + /** + * Get the timestamp from the given text. + * + * @param text - the input text + * @return The timestamp from the given text, if one exists + */ + protected Timestamp getTimestamp(String text){ + + // our input is 2017-10-31.10:00:00 + String[] parts = text.split("\\."); + + if (parts.length == 2){ + // replaces . with space + return Timestamp.valueOf(parts[0] + " " + parts[1]); + } + + return null; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/event/EventDAO.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/event/EventDAO.java new file mode 100644 index 0000000..304c6a2 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/event/EventDAO.java @@ -0,0 +1,183 @@ +package net.grandtheftmc.core.event; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Timestamp; +import java.util.Optional; + +import org.json.simple.JSONObject; +import org.json.simple.parser.JSONParser; + +import net.grandtheftmc.core.Core; + +/** + * Data access object for event specific data. + * + * @author sbahr + */ +public class EventDAO { + + /** + * Get the active event that the specified key as. + *

+ * For example, a serverKey would be "gtm1", and if there is an active event + * for this server, it will return the event type that is active. + * + * @param conn - the database connection thread + * @param serverKey - the key of the server to lookup the event for + * + * @return The event data that is currently active for the specified event. + */ + public static Optional getActiveEvent(Connection conn, String serverKey) { + + String query = "SELECT * FROM event WHERE server_key=?;"; + + try (PreparedStatement ps = conn.prepareStatement(query)) { + ps.setString(1, serverKey); + + try (ResultSet result = ps.executeQuery()) { + + if (result.next()){ + EventType eventType = EventType.fromID(result.getString("event_type")).orElse(null); + + // convert string to json object + JSONParser parser = new JSONParser(); + JSONObject json = (JSONObject) parser.parse(result.getString("data")); + + Timestamp startTime = result.getTimestamp("start_time"); + Timestamp endTime = result.getTimestamp("end_time"); + + return Optional.of(new EventData(serverKey, eventType, json, startTime, endTime)); + + } + } + } + catch (Exception exc) { + Core.log("[EventDAO] Error executing getActiveEvent() for serverKey=" + serverKey); + exc.printStackTrace(); + } + + return Optional.empty(); + } + + /** + * Schedules an event at the specified start/end time for the given server. + * + * @param conn - the database connection thread + * @param serverKey - the server key for the server to schedule the event on + * @param eventType - the type of the event to run + * @param data - the data associated with the event + * @param startTime - the start time of the event + * @param endTime - the end time of the event + * + * @return {@code true} if the query ran, {@code false} otherwise. + */ + public static boolean scheduleEvent(Connection conn, String serverKey, EventType eventType, JSONObject data, Timestamp startTime, Timestamp endTime) { + + String query = "INSERT INTO event (server_key, event_type, data, start_time, end_time) VALUES (?, ?, ?, ?, ?);"; + + try (PreparedStatement ps = conn.prepareStatement(query)) { + ps.setString(1, serverKey); + ps.setString(2, eventType.getId()); + ps.setString(3, data.toJSONString()); + ps.setTimestamp(4, startTime); + ps.setTimestamp(5, endTime); + + ps.executeUpdate(); + return true; + } + catch (SQLException exc) { + Core.log("[EventDAO] Error executing scheduleEvent() for serverKey=" + serverKey + " and eventType=" + eventType); + exc.printStackTrace(); + + return false; + } + } + + /** + * Schedules an event at the specified start/end time for the given server. + *

+ * Note: This uses a default start time according to the current timestamp. + *

+ * + * @param conn - the database connection thread + * @param serverKey - the server key for the server to schedule the event on + * @param eventType - the type of the event to run + * @param data - the data associated with the event + * @param endTime - the end time of the event + * + * @return {@code true} if the query ran, {@code false} otherwise. + */ + public static boolean scheduleEvent(Connection conn, String serverKey, EventType eventType, JSONObject data, Timestamp endTime) { + + String query = "INSERT INTO event (server_key, event_type, data, start_time, end_time) VALUES (?, ?, ?, CURRENT_TIMESTAMP, ?);"; + + try (PreparedStatement ps = conn.prepareStatement(query)) { + ps.setString(1, serverKey); + ps.setString(2, eventType.getId()); + ps.setString(3, data.toJSONString()); + ps.setTimestamp(4, endTime); + + ps.executeUpdate(); + return true; + } + catch (SQLException exc) { + Core.log("[EventDAO] Error executing scheduleEvent() for serverKey=" + serverKey + " and eventType=" + eventType); + exc.printStackTrace(); + + return false; + } + } + + /** + * Clears the active event for the specified server key. + * + * @param conn - the database connection thread + * @param serverKey - the key of the serverup to clear the event for + * + * @return {@code true} if the query ran, {@code false} otherwise. + */ + public static boolean clearActiveEvent(Connection conn, String serverKey) { + + String query = "DELETE FROM event WHERE server_key=?;"; + + try (PreparedStatement ps = conn.prepareStatement(query)) { + ps.setString(1, serverKey); + + ps.executeUpdate(); + return true; + } + catch (SQLException exc) { + Core.log("[EventDAO] Error executing clearActiveEvent() for serverKey=" + serverKey); + exc.printStackTrace(); + + return false; + } + } + + /** + * Clear all the active events, regardless of server id. + * + * @param conn - the database connection thread + * + * @return {@code true} if the query ran, {@code false} otherwise. + */ + public static boolean clearAllActiveEvents(Connection conn) { + + String query = "DELETE FROM event;"; + + try (PreparedStatement ps = conn.prepareStatement(query)) { + ps.executeUpdate(); + return true; + } + catch (SQLException exc) { + Core.log("[EventDAO] Error executing clearAllActiveEvents()"); + exc.printStackTrace(); + + return false; + } + } +} + diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/event/EventData.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/event/EventData.java new file mode 100644 index 0000000..cbb173e --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/event/EventData.java @@ -0,0 +1,96 @@ +package net.grandtheftmc.core.event; + +import java.sql.Timestamp; + +import org.json.simple.JSONObject; + +/** + * Data object for events, like halloween, easter, etc. Typically read from the + * database. + * + * @author sbahr + */ +public class EventData { + + /** The key of the server for this event */ + private final String serverKey; + /** The event type for this data */ + private final EventType eventType; + /** The JSON data for this event */ + private final JSONObject data; + /** The start time for this event */ + private final Timestamp startTime; + /** The end time for this event */ + private final Timestamp endTime; + + /** + * Create the event data for this event. + * + * @param serverKey - the server key for this event, typically something + * like "gtm1" + * @param eventType - the type of the event to do + * @param jsonData - the attached json data associated with this event + * @param startTime - the start time for this event + * @param endTime - the end time for this event + */ + public EventData(String serverKey, EventType eventType, JSONObject jsonData, Timestamp startTime, Timestamp endTime) { + this.serverKey = serverKey; + this.eventType = eventType; + this.data = jsonData; + this.startTime = startTime; + this.endTime = endTime; + } + + /** + * Get the server key for this event. + *

+ * This is typically something like "gtm1". + *

+ * + * @return The server key for this event. + */ + public String getServerKey() { + return serverKey; + } + + /** + * Get the type of the event. + * + * @return The type of the event for this event data. + */ + public EventType getEventType() { + return eventType; + } + + /** + * Get the associated data for this event. + *

+ * This can be attached attributes, or values to help make this event + * dynamic. + *

+ * + * @return The associated data for this event. + */ + public JSONObject getData() { + return data; + } + + /** + * Get the start time for this event. + * + * @return The start time for this event. + */ + public Timestamp getStartTime() { + return startTime; + } + + /** + * Get the end time for this event. + * + * @return The end time for this event. + */ + public Timestamp getEndTime() { + return endTime; + } +} + diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/event/EventManager.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/event/EventManager.java new file mode 100644 index 0000000..3b2ab4d --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/event/EventManager.java @@ -0,0 +1,275 @@ +package net.grandtheftmc.core.event; + +import java.sql.Connection; +import java.util.Optional; + +import org.bukkit.Bukkit; +import org.bukkit.plugin.Plugin; +import org.bukkit.scheduler.BukkitTask; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.database.BaseDatabase; + +/** + * An event manager, which should be subclassed and init() should be overloaded to create the new init class for this manager. + * + * @author sbahr + */ +public class EventManager { + + /** How often we tick with the sync task (20 ticks) */ + protected static long TICK_INTERVAL = 20; + + /** The instance of this class */ + protected static EventManager instance; + /** Whether or not this manager was initialized */ + protected static boolean initialized; + + /** The owning plugin */ + protected Plugin plugin; + /** The server key for this manager */ + protected String serverKey; + /** The active event */ + protected Event event; + // deprecated due to not needing multiple events + // /** Maps the event id to the event */ + //private Map idToEvent; + + /** + * Construct a new EventManager. + *

+ * This handles and stores all events. + * + * @param plugin - the owning plugin + * @param serverKey - the server key for this manager + */ + protected EventManager(Plugin plugin, String serverKey) { + this.plugin = plugin; + this.serverKey = serverKey; + //this.idToEvent = new HashMap<>(); + + Core.log("[EventManager] Constructed EventManager... Listening on serverKey=" + serverKey); + } + + /** + * Initialize the manager. + * + * @param plugin - the owning plugin + * @param serverKey - the key of this server instance + */ + public static void init(Plugin plugin, String serverKey) { + + // create singleton instance + instance = new EventManager(plugin, serverKey); + initialized = true; + + // start sync task + instance.getSyncTask(); + } + + /** + * Get the instance of this manager. + * + * @return The singleton instance for this manager. + * + * @throws IllegalStateException if the manager was never initialized with + * {@link #init(Plugin)}. + */ + public static EventManager getInstance() throws IllegalStateException { + if (instance == null) { + if (!initialized) { + throw new IllegalStateException("The EventManager was never initialized by the owning plugin! This is a severe error and should be fixed. Please call EventManager.init() first!"); + } + } + + return instance; + } + +// /** +// * Adds the specified event to the manager. +// * +// * @param event - the event to add +// * +// * @return {@code true} if the event was added, {@code false} otherwise. +// * @deprecated - this is for multiple event handling +// */ +// @Deprecated +// public boolean addEvent(Event event) { +// if (!idToEvent.containsKey(event.getId())) { +// idToEvent.put(event.getId(), event); +// return true; +// } +// +// return false; +// } + +// /** +// * Get the event from the manager with the specified id. +// * +// * @param id - the id of the event to get +// * +// * @return The event, with the given id, if one exists. +// * @deprecated - this is for multiple event handling +// */ +// @Deprecated +// public Optional getEvent(String id) { +// if (idToEvent.containsKey(id)) { +// return Optional.of(idToEvent.get(id)); +// } +// +// return Optional.empty(); +// } + +// /** +// * Remove the event from the manager with the specified id. +// * +// * @param id - the id of the event to remove +// * +// * @return The event, with the given id, if one exists, and was successfully +// * removed. +// * @deprecated - this is for multiple event handling +// */ +// @Deprecated +// public Optional removeEvent(String id) { +// if (idToEvent.containsKey(id)) { +// return Optional.of(idToEvent.remove(id)); +// } +// +// return Optional.empty(); +// } + + /** + * Get the active event from this manager, if one exists. + * + * @return The active event, if one exists. + */ + public Optional getEvent() { + return Optional.ofNullable(event); + } + + /** + * Get the sync task for this event manager. + *

+ * This fetches the database to learn about new events. + *

+ * + * @return The sync task for this event manager. + */ + public BukkitTask getSyncTask() { + return Bukkit.getScheduler().runTaskTimer(getPlugin(), () -> { + + // if we have an active event + if (getEvent().isPresent()){ + Event current = getEvent().get(); + if (current != null && current instanceof BaseEvent){ + BaseEvent baseEvent = (BaseEvent) current; + + // if the event is over + if (System.currentTimeMillis() > baseEvent.getEndTime()){ + + // end the event and nullify + baseEvent.end(); + this.event = null; + + // async clear active event + Bukkit.getScheduler().runTaskAsynchronously(getPlugin(), () -> { + try (Connection conn = BaseDatabase.getInstance().getConnection()){ + EventDAO.clearActiveEvent(conn, serverKey); + } + catch(Exception e){ + e.printStackTrace(); + } + }); + } + } + } + + // async fetch + Bukkit.getScheduler().runTaskAsynchronously(getPlugin(), () -> { + + EventData eventData = null; + try (Connection conn = BaseDatabase.getInstance().getConnection()){ + eventData = EventDAO.getActiveEvent(conn, serverKey).orElse(null); + } + catch(Exception e){ + e.printStackTrace(); + } + + final EventData event = eventData; + Bukkit.getScheduler().runTask(getPlugin(), () -> { + + // if we have an event in the database + if (event != null){ + + // do we have a current event + Event current = getEvent().orElse(null); + if (current == null){ + + // construct and start the event + BaseEvent baseEvent = constructEvent(getPlugin(), event).orElse(null); + + if(baseEvent == null) + return; + this.event = baseEvent; + this.event.start(); + } + } + else{ + + // do we have a current event + Event current = getEvent().orElse(null); + + if (current != null){ + current.end(); + + // null the event + this.event = null; + } + } + + }); + }); + + }, 0, TICK_INTERVAL); + } + + /** + * {@inheritDoc} + */ + public Plugin getPlugin() { + return plugin; + } + + /** + * Construct a BaseEvent object based off the event data. + * + * @param plugin - the owning plugin + * @param data - the data bound for the event + * + * @return The BaseEvent object that was constructed, if one exists. + */ + public Optional constructEvent(Plugin plugin, EventData data){ + + BaseEvent event = null; + switch(data.getEventType()){ + // TODO add more CORE events here + default: + break; + } + + return Optional.ofNullable(event); + } + +// /** +// * Get all the events this manager knows about. +// * +// * @return An unmodifiable collection of all the events the manager knows +// * about. +// * @deprecated - this is for multiple event handling +// */ +// @Deprecated +// public Collection getEvents() { +// return Collections.unmodifiableCollection(idToEvent.values()); +// } +} + diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/event/EventState.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/event/EventState.java new file mode 100644 index 0000000..9ae74d3 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/event/EventState.java @@ -0,0 +1,21 @@ +package net.grandtheftmc.core.event; + +public enum EventState { + + /** + * When the event is constructed, usually by a constructor. + */ + CONSTRUCTED, + + /** + * When the event is enabled. + */ + ENABLED, + + /** + * When the event is disabled. + */ + DISABLED; + +} + diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/event/EventType.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/event/EventType.java new file mode 100644 index 0000000..da0ba4a --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/event/EventType.java @@ -0,0 +1,50 @@ +package net.grandtheftmc.core.event; + +import java.util.Optional; + +public enum EventType { + + HALLOWEEN("HALLOWEEN"), + CHRISTMAS("CHRISTMAS"), + EASTER("EASTER"), + ; + + /** The ID of the event type */ + private final String id; + + /** + * Create a new event type constant. + * + * @param id - the id of the event + */ + EventType(String id) { + this.id = id; + } + + /** + * Get the ID of the event. + * + * @return The id of the event. + */ + public final String getId() { + return id; + } + + /** + * Get the event type from the specified id. + * + * @param id - the id of the event + * + * @return The event type with the specified id, if one exists. + */ + public static Optional fromID(String id) { + for (EventType et : values()) { + if (et.getId().equalsIgnoreCase(id)) { + return Optional.of(et); + } + } + + return Optional.empty(); + } +} + diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/events/ChatEvent.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/events/ChatEvent.java new file mode 100644 index 0000000..fe6d398 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/events/ChatEvent.java @@ -0,0 +1,64 @@ +package net.grandtheftmc.core.events; + +import net.md_5.bungee.api.chat.TextComponent; +import org.bukkit.entity.Player; +import org.bukkit.event.Cancellable; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +import java.util.Set; + +public class ChatEvent extends Event implements Cancellable { + private static final HandlerList HANDLER_LIST = new HandlerList(); + + private final Player sender; + private TextComponent textComponent; + private Set recipients; + + private boolean cancelled; + + public ChatEvent(Player sender, TextComponent textComponent, Set recipients) { + this.sender = sender; + this.textComponent = textComponent; + this.recipients = recipients; + } + + public Player getSender() { + return this.sender; + } + + public TextComponent getTextComponent() { + return this.textComponent; + } + + public void setTextComponent(TextComponent textComponent) { + this.textComponent = textComponent; + } + + public Set getRecipients() { + return this.recipients; + } + + public void setRecipients(Set recipients) { + this.recipients = recipients; + } + + @Override + public boolean isCancelled() { + return this.cancelled; + } + + @Override + public void setCancelled(boolean cancel) { + this.cancelled = cancel; + } + + @Override + public HandlerList getHandlers() { + return HANDLER_LIST; + } + + public static HandlerList getHandlerList() { + return HANDLER_LIST; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/events/CoreEvent.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/events/CoreEvent.java new file mode 100644 index 0000000..b1908f3 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/events/CoreEvent.java @@ -0,0 +1,27 @@ +package net.grandtheftmc.core.events; + +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +/** + * Created by Luke Bingham on 06/07/2017. + */ +public class CoreEvent extends Event { + private static final HandlerList handlers = new HandlerList(); + + /** + * Construct a new Event + */ + public CoreEvent(boolean async) { + super(async); + } + + @Override + public final HandlerList getHandlers() { + return handlers; + } + + public static HandlerList getHandlerList() { + return handlers; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/events/DisplayNameUpdateEvent.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/events/DisplayNameUpdateEvent.java new file mode 100644 index 0000000..be7b4e8 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/events/DisplayNameUpdateEvent.java @@ -0,0 +1,59 @@ +package net.grandtheftmc.core.events; + +import org.bukkit.entity.Player; +import org.bukkit.event.HandlerList; +import org.bukkit.event.player.PlayerEvent; + +public class DisplayNameUpdateEvent extends PlayerEvent { + private static final HandlerList HANDLER_LIST = new HandlerList(); + + private String rankPrefix; + private String prefix; + private String nameColor; + private String suffix; + + public DisplayNameUpdateEvent(Player player) { + super(player); + } + + public String getPrefix() { + return this.prefix; + } + + public void setPrefix(String prefix) { + this.prefix = prefix; + } + + public String getSuffix() { + return this.suffix; + } + + public void setSuffix(String suffix) { + this.suffix = suffix; + } + + public String getRankPrefix() { + return this.rankPrefix; + } + + public void setRankPrefix(String rankPrefix) { + this.rankPrefix = rankPrefix; + } + + public String getNameColor() { + return this.nameColor; + } + + public void setNameColor(String nameColor) { + this.nameColor = nameColor; + } + + @Override + public HandlerList getHandlers() { + return HANDLER_LIST; + } + + public static HandlerList getHandlerList() { + return HANDLER_LIST; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/events/GetPermsEvent.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/events/GetPermsEvent.java new file mode 100644 index 0000000..b7800d5 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/events/GetPermsEvent.java @@ -0,0 +1,40 @@ +package net.grandtheftmc.core.events; + +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +public class GetPermsEvent extends Event { + private static final HandlerList HANDLER_LIST = new HandlerList(); + + private final UUID uuid; + private final List perms = new ArrayList<>(); + + public GetPermsEvent(UUID uuid) { + this.uuid = uuid; + } + + public UUID getUUID() { + return this.uuid; + } + + public void addPerm(String perm) { + if(perm != null && !this.perms.contains(perm)) this.perms.add(perm); + } + + public List getPerms() { + return this.perms; + } + + @Override + public HandlerList getHandlers() { + return HANDLER_LIST; + } + + public static HandlerList getHandlerList() { + return HANDLER_LIST; + } +} \ No newline at end of file diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/events/ItemStackEvent.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/events/ItemStackEvent.java new file mode 100644 index 0000000..922e2ec --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/events/ItemStackEvent.java @@ -0,0 +1,45 @@ +package net.grandtheftmc.core.events; + +import org.bukkit.event.Cancellable; +import org.bukkit.inventory.ItemStack; + +/** + * Created by Luke Bingham on 06/08/2017. + */ +public class ItemStackEvent extends CoreEvent implements Cancellable { + + private boolean b; + private ItemStack itemStack; + private boolean clickOnly; + + /** + * Construct a new Event + */ + public ItemStackEvent(ItemStack itemStack) { + super(false); + this.itemStack = itemStack; + this.clickOnly = false; + } + + public ItemStack getItemStack() { + return itemStack; + } + + public boolean isClickOnly() { + return clickOnly; + } + + public void setClickOnly(boolean clickOnly) { + this.clickOnly = clickOnly; + } + + @Override + public boolean isCancelled() { + return b; + } + + @Override + public void setCancelled(boolean b) { + this.b = b; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/events/MoneyEvent.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/events/MoneyEvent.java new file mode 100644 index 0000000..a07fc97 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/events/MoneyEvent.java @@ -0,0 +1,94 @@ +package net.grandtheftmc.core.events; + +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +import java.util.UUID; + +public class MoneyEvent extends Event { + private static final HandlerList HANDLER_LIST = new HandlerList(); + + private UUID uuid; + private MoneyEventType type; + private double amount; + private double balance; + private boolean successful; + + public MoneyEvent(UUID uuid) { + this.uuid = uuid; + this.type = MoneyEventType.BALANCE; + } + + public MoneyEvent(UUID uuid, double amount) { + this.uuid = uuid; + if (amount < 0) { + this.amount = -amount; + this.type = MoneyEventType.TAKE; + } else { + this.amount = amount; + this.type = MoneyEventType.ADD; + } + } + + public MoneyEvent(UUID uuid, MoneyEventType type, double amount) { + this.uuid = uuid; + this.type = type; + this.amount = amount; + } + + public UUID getUUID() { + return this.uuid; + } + + public void setUUID(UUID uuid) { + this.uuid = uuid; + } + + public MoneyEventType getType() { + return this.type; + } + + public void setType(MoneyEventType type) { + this.type = type; + } + + public double getAmount() { + return this.amount; + } + + public void setAmount(double amount) { + this.amount = amount; + } + + public double getBalance() { + return this.balance; + } + + public void setBalance(double d) { + this.balance = d; + } + + // TODO please fix spelling (http://www.dictionary.com/browse/successful) + public boolean isSuccessfull() { + return this.successful; + } + + public void setSuccessfull() { + this.successful = true; + } + + @Override + public HandlerList getHandlers() { + return HANDLER_LIST; + } + + public static HandlerList getHandlerList() { + return HANDLER_LIST; + } + + public enum MoneyEventType { + TAKE, + ADD, + BALANCE + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/events/NametagUpdateEvent.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/events/NametagUpdateEvent.java new file mode 100644 index 0000000..af915c5 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/events/NametagUpdateEvent.java @@ -0,0 +1,65 @@ +package net.grandtheftmc.core.events; + +import org.bukkit.entity.Player; +import org.bukkit.event.HandlerList; +import org.bukkit.event.player.PlayerEvent; + +public class NametagUpdateEvent extends PlayerEvent { + private static final HandlerList HANDLER_LIST = new HandlerList(); + + private String prefix; + private String nameColor; + private String suffix; + // private int value; + // private String belowName; + + public NametagUpdateEvent(Player player) { + super(player); + } + + public String getPrefix() { + return this.prefix; + } + + public void setPrefix(String prefix) { + this.prefix = prefix; + } + + public String getSuffix() { + return this.suffix; + } + + public void setSuffix(String suffix) { + this.suffix = suffix; + } + + /* + * + * public int getValue() { return value; } + * + * public void setValue(int value) { this.value = value; } + * + * public String getBelowName() { return belowName; } + * + * public void setBelowName(String belowName) { this.belowName = belowName; + * + * } + */ + + public String getNameColor() { + return this.nameColor; + } + + public void setNameColor(String nameColor) { + this.nameColor = nameColor; + } + + @Override + public HandlerList getHandlers() { + return HANDLER_LIST; + } + + public static HandlerList getHandlerList() { + return HANDLER_LIST; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/events/PlayerFActionEvent.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/events/PlayerFActionEvent.java new file mode 100644 index 0000000..0bd2c0c --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/events/PlayerFActionEvent.java @@ -0,0 +1,40 @@ +package net.grandtheftmc.core.events; + +import org.bukkit.entity.Player; +import org.bukkit.event.Cancellable; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +public class PlayerFActionEvent extends Event implements Cancellable { + private static final HandlerList HANDLERS = new HandlerList(); + + private final Player player; + private boolean cancelled; + + public PlayerFActionEvent(Player player) { + this.player = player; + } + + public Player getPlayer() { + return this.player; + } + + @Override + public boolean isCancelled() { + return cancelled; + } + + @Override + public void setCancelled(boolean cancelled) { + this.cancelled = cancelled; + } + + @Override + public HandlerList getHandlers() { + return HANDLERS; + } + + public static HandlerList getHandlerList() { + return HANDLERS; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/events/PlayerSwitchWorldEvent.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/events/PlayerSwitchWorldEvent.java new file mode 100644 index 0000000..180f9cf --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/events/PlayerSwitchWorldEvent.java @@ -0,0 +1,61 @@ +package net.grandtheftmc.core.events; + +import net.grandtheftmc.core.editmode.WorldConfig; +import org.bukkit.Location; +import org.bukkit.entity.Player; +import org.bukkit.event.Cancellable; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +public class PlayerSwitchWorldEvent extends Event implements Cancellable { + private static final HandlerList HANDLERS = new HandlerList(); + + private final Player player; + + private final Location from; + private final Location to; + private final WorldConfig toWorldConfig; + private boolean cancelled; + + public PlayerSwitchWorldEvent(Player player, Location from, Location to, WorldConfig toWorldConfig) { + this.player = player; + this.from = from; + this.to = to; + this.toWorldConfig = toWorldConfig; + } + + public Player getPlayer() { + return this.player; + } + + @Override + public boolean isCancelled() { + return this.cancelled; + } + + @Override + public void setCancelled(boolean cancelled) { + this.cancelled = cancelled; + } + + public Location getFrom() { + return this.from; + } + + public Location getTo() { + return this.to; + } + + public WorldConfig getToWorldConfig() { + return this.toWorldConfig; + } + + @Override + public HandlerList getHandlers() { + return HANDLERS; + } + + public static HandlerList getHandlerList() { + return HANDLERS; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/events/RequestEvent.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/events/RequestEvent.java new file mode 100644 index 0000000..0eab9d0 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/events/RequestEvent.java @@ -0,0 +1,54 @@ +package net.grandtheftmc.core.events; + +import org.bukkit.entity.Player; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +import java.util.Collection; +import java.util.HashMap; + +public class RequestEvent extends Event { + private static final HandlerList HANDLER_LIST = new HandlerList(); + + private Collection players; + private String type; + private HashMap result; + + public RequestEvent(Collection players, String type) { + this.players = players; + this.type = type; + } + + public String getType() { + return this.type; + } + + public void setType(String type) { + this.type = type; + } + + public HashMap getResult() { + return this.result; + } + + public void setResult(HashMap result) { + this.result = result; + } + + public Collection getPlayers() { + return this.players; + } + + public void setPlayers(Collection players) { + this.players = players; + } + + @Override + public HandlerList getHandlers() { + return HANDLER_LIST; + } + + public static HandlerList getHandlerList() { + return HANDLER_LIST; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/events/RewardEvent.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/events/RewardEvent.java new file mode 100644 index 0000000..d72316d --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/events/RewardEvent.java @@ -0,0 +1,46 @@ +package net.grandtheftmc.core.events; + +import net.grandtheftmc.core.voting.Reward; +import org.bukkit.entity.Player; +import org.bukkit.event.HandlerList; +import org.bukkit.event.player.PlayerEvent; + +/** + * Created by Liam on 16/11/2016. + */ +public class RewardEvent extends PlayerEvent { + private static final HandlerList HANDLER_LIST = new HandlerList(); + + private Reward reward; + private boolean successful; + + public RewardEvent(Player player, Reward reward) { + super(player); + this.reward = reward; + } + + public Reward getReward() { + return this.reward; + } + + public void setReward(Reward reward) { + this.reward = reward; + } + + public boolean isSuccessful() { + return this.successful; + } + + public void setSuccessfull(boolean successful) { + this.successful = successful; + } + + @Override + public HandlerList getHandlers() { + return HANDLER_LIST; + } + + public static HandlerList getHandlerList() { + return HANDLER_LIST; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/events/ServerSaveEvent.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/events/ServerSaveEvent.java new file mode 100644 index 0000000..cbe4795 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/events/ServerSaveEvent.java @@ -0,0 +1,21 @@ +package net.grandtheftmc.core.events; + +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +public class ServerSaveEvent extends Event { + private static final HandlerList HANDLER_LIST = new HandlerList(); + + public ServerSaveEvent() { + + } + + @Override + public HandlerList getHandlers() { + return HANDLER_LIST; + } + + public static HandlerList getHandlerList() { + return HANDLER_LIST; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/events/TutorialEvent.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/events/TutorialEvent.java new file mode 100644 index 0000000..ad06202 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/events/TutorialEvent.java @@ -0,0 +1,84 @@ +package net.grandtheftmc.core.events; + +import net.grandtheftmc.core.tutorials.Tutorial; +import net.grandtheftmc.core.users.User; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.event.HandlerList; +import org.bukkit.event.player.PlayerEvent; + +public class TutorialEvent extends PlayerEvent { + private static final HandlerList HANDLER_LIST = new HandlerList(); + + private Player player; + private User user; + private Tutorial tutorial; + private TutorialEventType type; + private String cancelMessage; + + public TutorialEvent(Player player, User user, Tutorial tutorial, TutorialEventType type) { + super(player); + this.user = user; + this.tutorial = tutorial; + this.type = type; + } + + public User getUser() { + return this.user; + } + + public void setUser(User user) { + this.user = user; + } + + public Tutorial getTutorial() { + return this.tutorial; + } + + public void setTutorial(Tutorial tutorial) { + this.tutorial = tutorial; + } + + public TutorialEventType getType() { + return this.type; + } + + public void setType(TutorialEventType type) { + this.type = type; + } + + public boolean isCancelled() { + return this.cancelMessage != null; + } + + public void setCancelled(String cancelMessage) { + this.cancelMessage = cancelMessage; + } + + public String getCancelMessage() { + return this.cancelMessage; + } + + public TutorialEvent call() { + Bukkit.getPluginManager().callEvent(this); + return this; + } + + @Override + public HandlerList getHandlers() { + return HANDLER_LIST; + } + + public static HandlerList getHandlerList() { + return HANDLER_LIST; + } + + public enum TutorialEventType { + PRE_START, + START, + SLIDE, + END, + QUIT + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/events/UpdateEvent.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/events/UpdateEvent.java new file mode 100644 index 0000000..24a75e0 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/events/UpdateEvent.java @@ -0,0 +1,52 @@ +package net.grandtheftmc.core.events; + +import net.grandtheftmc.core.users.Pref; +import org.bukkit.entity.Player; +import org.bukkit.event.HandlerList; +import org.bukkit.event.player.PlayerEvent; + +public class UpdateEvent extends PlayerEvent { + private static final HandlerList HANDLER_LIST = new HandlerList(); + + private final UpdateReason reason; + private Pref pref; + + public UpdateEvent(Player player, UpdateReason reason) { + super(player); + this.reason = reason; + } + + public UpdateEvent(Player player, Pref pref) { + super(player); + this.reason = UpdateReason.PREF; + this.pref = pref; + } + + public UpdateReason getReason() { + return this.reason; + } + + public Pref getPref() { + return this.pref; + } + + @Override + public HandlerList getHandlers() { + return HANDLER_LIST; + } + + public static HandlerList getHandlerList() { + return HANDLER_LIST; + } + + public enum UpdateReason { + BOARD, + BUCKS, + MONEY, + TOKENS, + OTHER, + RANK, + CROWBARS, + PREF + } +} \ No newline at end of file diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/giftcard/Balance.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/giftcard/Balance.java new file mode 100644 index 0000000..eb9cdb7 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/giftcard/Balance.java @@ -0,0 +1,23 @@ +package net.grandtheftmc.core.giftcard; + +/** + * Created by Timothy Lampen on 1/5/2018. + */ +public class Balance { + + private String starting; + private String remaining; + private String currency; + + public String getCurrency() { + return currency; + } + + public String getRemaining() { + return remaining; + } + + public String getStarting() { + return starting; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/giftcard/Data.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/giftcard/Data.java new file mode 100644 index 0000000..ee164d5 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/giftcard/Data.java @@ -0,0 +1,32 @@ +package net.grandtheftmc.core.giftcard; + +import com.google.gson.annotations.SerializedName; + +/** + * Created by Timothy Lampen on 1/5/2018. + */ +public class Data { + + private Double id; + private String code; + private Balance balance; + + @SerializedName("void") + private Boolean _void; + + public Balance getBalance() { + return balance; + } + + public Boolean get_void() { + return _void; + } + + public Double getId() { + return id; + } + + public String getCode() { + return code; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/giftcard/Giftcard.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/giftcard/Giftcard.java new file mode 100644 index 0000000..f816ae8 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/giftcard/Giftcard.java @@ -0,0 +1,12 @@ +package net.grandtheftmc.core.giftcard; + +/** + * Created by Timothy Lampen on 1/5/2018. + */ +public class Giftcard { + private Data data; + + public Data getData() { + return data; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/giftcard/GiftcardAPI.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/giftcard/GiftcardAPI.java new file mode 100644 index 0000000..3e9a141 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/giftcard/GiftcardAPI.java @@ -0,0 +1,138 @@ +package net.grandtheftmc.core.giftcard; + +import com.google.gson.Gson; +import net.buycraft.plugin.internal.okhttp3.FormBody; +import net.buycraft.plugin.internal.okhttp3.Request; +import net.buycraft.plugin.internal.okhttp3.Response; +import net.buycraft.plugin.internal.okhttp3.ResponseBody; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.util.HTTPUtil; +import net.grandtheftmc.core.util.ServerUtil; + +import java.io.IOException; + +/** + * Created by Luke Bingham on 28/08/2017. + */ +public class GiftcardAPI { + private static final Gson GSON = new Gson(); + + /** + * @param callback called when the task is completed. Returns the code of the giftcard just created. + */ + public static void postGiftCard(final double amount, net.grandtheftmc.core.util.Callback callback) { + ServerUtil.runTaskAsync(() -> { + try { + Response response = Core.getOkHttpClient().newCall( + new Request.Builder().url("https://plugin.buycraft.net/gift-cards") + .addHeader("X-Buycraft-Secret", Core.getInstance().getBuycraftSecret()) + .addHeader("Accept", "application/json") + .addHeader("User-Agent", "BuycraftX") + .post(new FormBody.Builder().add("amount", String.valueOf(amount)).build()) + .build() + ).execute(); + + try(ResponseBody responseBody = response.body()) { + if(response.isSuccessful()) { + String body = responseBody.string(); + Giftcard card = GSON.fromJson(body, Giftcard.class); + callback.call(card); + return; + } + callback.call(null); + } + } catch (IOException e) { + callback.call(null); + e.printStackTrace(); + } + }); + } + + public static void getGiftCard(final int id, net.grandtheftmc.core.util.Callback callback) { + ServerUtil.runTaskAsync(() -> { + try { + Response response = Core.getOkHttpClient().newCall( + new Request.Builder().url("https://plugin.buycraft.net/gift-cards/" + id) + .addHeader("X-Buycraft-Secret", Core.getInstance().getBuycraftSecret()) + .addHeader("Accept", "application/json") + .addHeader("User-Agent", "BuycraftX") + .get() + .build() + ).execute(); + + try (ResponseBody responseBody = response.body()) { + if (response.isSuccessful()) { + String body = responseBody.string(); + callback.call(HTTPUtil.transform(body, GiftcardAPI.class)); + return; + } + + callback.call(null); + } + } catch (IOException e) { + callback.call(null); + e.printStackTrace(); + } + }); + } + + public static void topupGiftCard(final int id, final double amount, net.grandtheftmc.core.util.Callback callback) { + ServerUtil.runTaskAsync(() -> { + try { + Response response = Core.getOkHttpClient().newCall( + new Request.Builder().url("https://plugin.buycraft.net/gift-cards/" + id) + .addHeader("X-Buycraft-Secret", Core.getInstance().getBuycraftSecret()) + .addHeader("Accept", "application/json") + .addHeader("User-Agent", "BuycraftX") + .post(new FormBody.Builder().add("amount", String.valueOf(amount)).build()) + .build() + ).execute(); + + try (ResponseBody responseBody = response.body()) { + if (response.isSuccessful()) { + String body = responseBody.string(); + callback.call(HTTPUtil.transform(body, GiftcardAPI.class)); + return; + } + + callback.call(null); + } + } catch (IOException e) { + callback.call(null); + e.printStackTrace(); + } + }); + } + + /** + * GiftCards cannot be removed from the API, + * So to 'delete' them we set them as VOID. + */ + public static void voidGiftCard(final int id, net.grandtheftmc.core.util.Callback callback) { + ServerUtil.runTaskAsync(() -> { + try { + Response response = Core.getOkHttpClient().newCall( + new Request.Builder().url("https://plugin.buycraft.net/gift-cards/" + id) + .addHeader("X-Buycraft-Secret", Core.getInstance().getBuycraftSecret()) + .addHeader("Accept", "application/json") + .addHeader("User-Agent", "BuycraftX") + .delete() + .build() + ).execute(); + + try (ResponseBody responseBody = response.body()) { + if (response.isSuccessful()) { + String body = responseBody.string(); + callback.call(HTTPUtil.transform(body, GiftcardAPI.class)); + return; + } + + callback.call(null); + } + } catch (IOException e) { + callback.call(null); + e.printStackTrace(); + } + }); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/gui/ConfirmationMenu.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/gui/ConfirmationMenu.java new file mode 100644 index 0000000..b11887c --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/gui/ConfirmationMenu.java @@ -0,0 +1,313 @@ +package net.grandtheftmc.core.gui; + +import java.util.ArrayList; +import java.util.List; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.entity.HumanEntity; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.HandlerList; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.plugin.Plugin; + +public class ConfirmationMenu implements Listener { + + /** The owning plugin */ + private Plugin plugin; + /** The item that represents what the confirmation is about */ + private ItemStack infoItem; + /** The item that represents the confirm item */ + private ItemStack confirmItem; + /** The item that represents the deny item */ + private ItemStack denyItem; + /** The GUI involved */ + private Inventory gui; + + /** Whether or not this inventory has been destroyed */ + private boolean destroyed; + + /** + * Create a generic confirmation menu, where the handling of the + * confirm/deny item can be per project specific. + *

+ * Note: Typically you would want to override + * {@link #onConfirm(InventoryClickEvent, Player)} and + * {@link #onDeny(InventoryClickEvent, Player)}. + *

+ * + * @param plugin - the owning plugin + * @param infoItem - the item that holds the info + * @param confirmItem - the confirm item + * @param denyItem - the deny item + */ + public ConfirmationMenu(Plugin plugin, ItemStack infoItem, ItemStack confirmItem, ItemStack denyItem) { + this.plugin = plugin; + this.infoItem = infoItem; + this.confirmItem = confirmItem; + this.denyItem = denyItem; + this.gui = createGUI(); + + // register this as an event + Bukkit.getPluginManager().registerEvents(this, plugin); + } + + /** + * Create a generic confirmation menu, where the handling of the + * confirm/deny item can be per project specific. + *

+ * Note: Typically you would want to override + * {@link #onConfirm(InventoryClickEvent, Player)} and + * {@link #onDeny(InventoryClickEvent, Player)}. + *

+ * Wrapper around + * {@link #ConfirmationMenu(Plugin, ItemStack, ItemStack, ItemStack)}. + * + * @param plugin - the owning plugin + * @param infoItem - the item that holds the info + */ + public ConfirmationMenu(Plugin plugin, ItemStack infoItem) { + this(plugin, infoItem, getYesItem(), getNoItem()); + } + + /** + * Opens the menu for the specified player. + * + * @param p - the player viewing the menu. + */ + public void open(Player p) { + + if (gui != null) { + p.openInventory(gui); + + // optional call-back + onOpen(); + } + } + + /** + * Close the confirmation menu. + */ + public void close() { + if (gui != null) { + + List viewers = new ArrayList<>(); + viewers.addAll(gui.getViewers()); + + // close all the viewers + viewers.forEach(v -> v.closeInventory()); + } + + // optional call-back + onClose(); + + if (!destroyed) { + + // destroy the menu + destroy(); + } + } + + /** + * Destroy this menu, marking it for garbage collection, and unregistering + * it as a Listener. + */ + private void destroy() { + + // optional call-back + onDestroy(); + + plugin = null; + infoItem = null; + confirmItem = null; + denyItem = null; + gui = null; + + // unregister the event + HandlerList.unregisterAll(this); + + destroyed = true; + } + + /** + * Optional call-back to be filled by superclass. This is called when the + * menu is opened. + */ + protected void onOpen() { + } + + /** + * Optional call-back to be filled by superclass. This is called when the + * menu is closed. + */ + protected void onClose() { + } + + /** + * Optional call-back to be filled by superclass. This is called when the + * menu is destroyed. + */ + protected void onDestroy() { + } + + /** + * Optional call-back to be filled by superclass. This is called when the + * confirm button is clicked by the user. + * + * @param e - the click event + * @param p - the player who clicked + */ + protected void onConfirm(InventoryClickEvent e, Player p) { + } + + /** + * Optional call-back to be filled by superclass. This is called when the + * deny button is clicked by the user. + * + * @param e - the click event + * @param p - the player who clicked + */ + protected void onDeny(InventoryClickEvent e, Player p) { + } + + /** + * Creates the GUI for the confirmation menu. + * + * @return The GUI that was created for this menu. + */ + private Inventory createGUI() { + + Inventory gui = plugin.getServer().createInventory(null, 9 * 3, " " + ChatColor.BOLD + ChatColor.UNDERLINE + "Are you sure?"); + + // page item + gui.setItem(4, infoItem); + + // set yes items + gui.setItem(10, confirmItem); + gui.setItem(11, confirmItem); + gui.setItem(12, confirmItem); + + // set no items + gui.setItem(14, denyItem); + gui.setItem(15, denyItem); + gui.setItem(16, denyItem); + + for (int i = 0; i < gui.getSize(); i++) { + + // populate whitespace + if (gui.getItem(i) == null) { + gui.setItem(i, getMenuBorder()); + } + } + + return gui; + } + + /** + * Handles the confirmation menu interaction. + * + * @param e - the inventory click event + * @param p - the player involved in the event + * + * @return {@code true} if the menu should be closed, {@code false} + * otherwise. + */ + private boolean handleConfirmation(InventoryClickEvent e, Player p) { + + ItemStack is = e.getCurrentItem(); + + if (is != null && is.hasItemMeta() && is.getItemMeta().hasDisplayName()) { + + if (is.isSimilar(confirmItem)) { + onConfirm(e, p); + return true; + } + else if (is.isSimilar(denyItem)) { + onDeny(e, p); + return true; + } + } + + return false; + } + + /** + * Listens in on inventory clicks. + * + * @param e - the event + */ + @EventHandler + public void onInventoryInteract(InventoryClickEvent e) { + Player p = (Player) e.getWhoClicked(); + Inventory inven = e.getInventory(); + + if (inven.equals(gui)) { + e.setCancelled(true); + + if (e.isLeftClick() || e.isRightClick() || e.isShiftClick()) { + if (e.getCurrentItem() != null && e.getRawSlot() < inven.getSize()) { + + boolean success = handleConfirmation(e, p); + if (success) { + + // close the inventory + close(); + } + } + } + } + } + + /** + * Get the itemstack representation for a generic YES item. + * + * @return The itemstack representation for a generic YES item. + */ + private static ItemStack getYesItem(){ + String displayName = ChatColor.GREEN + "Yes"; + + ItemStack is = new ItemStack(Material.WOOL, 1, (short) 13); + ItemMeta im = is.getItemMeta(); + im.setDisplayName(displayName); + is.setItemMeta(im); + + return is; + } + + /** + * Get the itemstack representation for a generic NO item. + * + * @return The itemstack representation for a generic NO item. + */ + private static ItemStack getNoItem(){ + String displayName = ChatColor.RED + "No"; + + ItemStack is = new ItemStack(Material.WOOL, 1, (short) 14); + ItemMeta im = is.getItemMeta(); + im.setDisplayName(displayName); + is.setItemMeta(im); + + return is; + } + + /** + * Get the generic representation of a menu border. + * + * @return The menu border for this menu. + */ + private static ItemStack getMenuBorder() { + ItemStack is = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 7); + ItemMeta im = is.getItemMeta(); + im.setDisplayName(""); + is.setItemMeta(im); + + return is; + } +} + diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/handlers/Handler.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/handlers/Handler.java new file mode 100644 index 0000000..49ba8ae --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/handlers/Handler.java @@ -0,0 +1,5 @@ +package net.grandtheftmc.core.handlers; + +public interface Handler { + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/handlers/chat/ChatAdHandler.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/handlers/chat/ChatAdHandler.java new file mode 100644 index 0000000..bdeb8eb --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/handlers/chat/ChatAdHandler.java @@ -0,0 +1,27 @@ +package net.grandtheftmc.core.handlers.chat; + +import java.util.regex.Pattern; + +public class ChatAdHandler { + private final String addressRegex; + private final String domainRegex; + + public ChatAdHandler() { + this.addressRegex = "^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." + + "([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." + + "([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." + + "([01]?\\d\\d?|2[0-4]\\d|25[0-5])$"; + this.domainRegex = "^((?!-)[A-Za-z0-9-]{1,63}(? lastChats; + + public ChatCooldownHandler() { + this.lastChats = new HashMap<>(); + } + + public boolean canChatAgain(UUID uuid, int cooldown) { + if (!lastChats.containsKey(uuid)) return true; + if (System.currentTimeMillis() >= this.lastChats.get(uuid)) { + this.lastChats.remove(uuid); + return true; + } + return false; + } + + public void setCanChatAgain(UUID uuid, Long timestamp) { + this.lastChats.put(uuid, timestamp); + } + + protected Map getLastChats() { + return lastChats; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/handlers/chat/ChatManager.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/handlers/chat/ChatManager.java new file mode 100644 index 0000000..8fc7ed3 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/handlers/chat/ChatManager.java @@ -0,0 +1,52 @@ +package net.grandtheftmc.core.handlers.chat; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.util.Component; +import org.bukkit.configuration.file.YamlConfiguration; + +public class ChatManager implements Component { + private static ChatSettings chatSettings; + + private static ChatCooldownHandler cooldownHandler; + private static ChatRepeatHandler repeatHandler; + private static ChatAdHandler adHandler; + + public ChatManager(YamlConfiguration config) { + chatSettings = new ChatSettings(config); + cooldownHandler = new ChatCooldownHandler(); + repeatHandler = new ChatRepeatHandler(); + adHandler = new ChatAdHandler(); + } + + @Override + public ChatManager onDisable(Core plugin) { + chatSettings.getDomainWhitelist().clear(); + cooldownHandler.getLastChats().clear(); + repeatHandler.getRecentMessages().clear(); + return this; + } + + public static ChatSettings getSettings() { + return chatSettings; + } + + public static ChatCooldownHandler getCooldownHandler() { + return cooldownHandler; + } + + public static ChatRepeatHandler getRepeatHandler() { + return repeatHandler; + } + + public static ChatAdHandler getAdHandler() { + return adHandler; + } + + public static int getDefaultChatCooldown() { + return chatSettings.getDefaultChatCooldown(); + } + + public static int getVipChatCooldown() { + return chatSettings.getVipChatCooldown(); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/handlers/chat/ChatRepeatHandler.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/handlers/chat/ChatRepeatHandler.java new file mode 100644 index 0000000..b7b6df6 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/handlers/chat/ChatRepeatHandler.java @@ -0,0 +1,42 @@ +package net.grandtheftmc.core.handlers.chat; + +import net.grandtheftmc.core.Core; +import org.bukkit.scheduler.BukkitRunnable; + +import java.util.*; + +public class ChatRepeatHandler { + private Map> recentMessages; + + public ChatRepeatHandler() { + this.recentMessages = new HashMap<>(); + } + + public boolean canChatAgain(UUID uuid, String message) { + if (this.recentMessages.getOrDefault(uuid, new ArrayList<>()).contains(message)) { + return false; + } else { + for (String string : this.recentMessages.getOrDefault(uuid, new ArrayList<>())) { + if(message.contains(string)) return false; + } + } + return true; + } + + public void addRecentMessage(UUID uuid, String message, int cooldown) { + List messages = this.recentMessages.getOrDefault(uuid, new ArrayList<>()); + messages.add(message); + this.recentMessages.put(uuid, messages); + new BukkitRunnable() { + @Override + public void run() { + messages.remove(message); + recentMessages.put(uuid, messages); + } + }.runTaskLaterAsynchronously(Core.getInstance(), cooldown * 20); + } + + protected Map> getRecentMessages() { + return recentMessages; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/handlers/chat/ChatSettings.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/handlers/chat/ChatSettings.java new file mode 100644 index 0000000..9937b9b --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/handlers/chat/ChatSettings.java @@ -0,0 +1,52 @@ +package net.grandtheftmc.core.handlers.chat; + +import org.bukkit.configuration.file.YamlConfiguration; + +import java.util.Collection; + +public class ChatSettings { + private YamlConfiguration config; + + private Collection domainWhitelist; + private int defaultChatCooldown; + private int vipChatCooldown; + + public ChatSettings(YamlConfiguration chatSettingsConfig) { + this.config = chatSettingsConfig; + this.loadSettings(); + } + + public void loadSettings() { + this.defaultChatCooldown = this.config.getInt("default-chat-delay"); + this.vipChatCooldown = this.config.getInt("vip-chat-delay"); + this.domainWhitelist = this.config.getStringList("domain-whitelist"); + } + + public YamlConfiguration getConfig() { + return this.config; + } + + public void setConfig(YamlConfiguration config) { + this.config = config; + } + + public Collection getDomainWhitelist() { + return domainWhitelist; + } + + public int getDefaultChatCooldown() { + return defaultChatCooldown; + } + + public void setDefaultChatCooldown(int defaultChatCooldown) { + this.defaultChatCooldown = defaultChatCooldown; + } + + public int getVipChatCooldown() { + return vipChatCooldown; + } + + public void setVipChatCooldown(int vipChatCooldown) { + this.vipChatCooldown = vipChatCooldown; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/inventory/CoreMenu.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/inventory/CoreMenu.java new file mode 100644 index 0000000..460c1f1 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/inventory/CoreMenu.java @@ -0,0 +1,282 @@ +package net.grandtheftmc.core.inventory; + +import com.google.common.collect.Maps; +import net.grandtheftmc.core.inventory.button.ClickableItem; +import net.grandtheftmc.core.inventory.button.MenuItem; +import net.grandtheftmc.core.util.Utils; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryCloseEvent; +import org.bukkit.event.inventory.InventoryType; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.InventoryHolder; +import org.bukkit.inventory.ItemStack; + +import java.util.HashMap; + +/** + * Created by Luke Bingham on 05/07/2017. + */ +public abstract class CoreMenu implements InventoryHolder, IMenuButtonHandler { + + private final HashMap mapItems; +// private final List items; + private Inventory inventory; + + private final int rows; + private final String title; + private CoreMenuFlag[] menuFlags; + protected boolean selfHandle = false; + + /** + * Construct a new Menu. + */ + public CoreMenu(int rows, String title, CoreMenuFlag... menuFlags) { + this(rows, title); + this.menuFlags = menuFlags; + if(hasFlag(CoreMenuFlag.PHONE_LAYOUT)) { + this.inventory = Bukkit.createInventory(this, 54, title); + setPhoneDefaults(); + } + } + + /** + * Construct a new Menu. + */ + public CoreMenu(int rows, String title) { + if(rows <= 0 || rows >= 7) { + throw new IndexOutOfBoundsException("Menu rows out of bounds, choose value between 1 - 6"); + } + + this.mapItems = Maps.newHashMap(); + + this.rows = rows; + this.title = Utils.f(title); + this.inventory = Bukkit.createInventory(this, rows * 9, title); + + } + + /** + * Construct a new Menu. + */ + public CoreMenu(String title, int rows, InventoryType type, CoreMenuFlag... menuFlags) { + this.mapItems = Maps.newHashMap(); + + this.rows = rows; + this.title = title; + this.inventory = Bukkit.createInventory(this, type, title); + this.menuFlags = menuFlags; + } + + public void setSelfHandle(boolean b) { + this.selfHandle = b; + } + + @Override + public final Inventory getInventory() { + return this.inventory; + } + + public boolean isSelfHandle() { + return selfHandle; + } + + public void selfHandle(InventoryClickEvent event) { + CoreMenu menu = (CoreMenu) event.getInventory().getHolder(); + Player player = (Player) event.getWhoClicked(); + + MenuItem item = menu.getMenuItem(event.getRawSlot()); + if(item == null) return; + + if(!item.isAllowingPickup()) + event.setCancelled(true); + + if(item instanceof ClickableItem) { + event.setCancelled(true); + ((ClickableItem) item).getClickAction().onClick(player, event.getClick()); + } + } + + private void setPhoneDefaults() { + ItemStack whiteGlass = Utils.createItem(Material.STAINED_GLASS_PANE, "&a"); + ItemStack grayGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 7, "&a"); + ItemStack blackGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 15, "&a"); + ItemStack lightGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 8, "&a"); + for (int i : new int[]{1, 10, 19, 28, 37, 46, 7, 16, 25, 34, 43, 52}) addItem(new MenuItem(i, whiteGlass, false)); + for (int i : new int[]{2, 3, 4, 5, 6}) addItem(new MenuItem(i, blackGlass, false)); + for (int i : new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 38, 39, 40, 41, 42, 47, 48, 49, 50, 51}) addItem(new MenuItem(i, grayGlass, false)); + for (int i : new int[]{0, 8, 9, 17, 18, 26, 27, 35, 36, 44, 45, 53}) addItem(new MenuItem(i, lightGlass, false)); + } + + /** + * Open the inventory to the specified player. + * + * @param player Specified Player + */ + public void openInventory(Player player) { + if(hasFlag(CoreMenuFlag.RESET_CURSOR_ON_OPEN)) player.closeInventory(); + player.openInventory(this.inventory); + } + + public final boolean hasFlag(CoreMenuFlag menuFlag) { + if(this.menuFlags == null || this.menuFlags.length == 0) return false; + boolean result = false; + for(int i = 0; i < this.menuFlags.length; i++) { + if(this.menuFlags[i] == menuFlag) { + result = true; + break; + } + } + return result; + } + + /** + * This should be overwritten for menus which require the usage of this. + */ + public void onClose(InventoryCloseEvent event){ + + } + + /** + * This should be overwritten for menu which require the usage of this. If selfHandle = true then this is not triggered. + * This is done before the handling of the Clickable / MenuItems. + * Cancelling this event WILLNOT cancel the handling of the Clickable / Menuitems. + */ + public void onClick(InventoryClickEvent event){ + + } + + /** + * This is called on every interaction. + * + * @param menu + */ + public void onInteract(CoreMenu menu) { + + } + + /** + * Add an item to the inventory. + * + * @param menuItem + */ + @Override + public void addItem(MenuItem menuItem) { + this.inventory.setItem(menuItem.getIndex(), menuItem.getItemStack()); +// this.items.add(menuItem); + this.mapItems.put(menuItem.getIndex(), menuItem); + } + + @Override + public void deleteItem(int index) { + this.inventory.setItem(index, null); + this.mapItems.remove(index); + } + + /** + * Check if the inventory contains a specific item. + * + * @param itemStack Item to search for + * @return true if item is found + */ + @Override + public boolean containsItem(ItemStack itemStack) { +// return this.items.stream().anyMatch(item -> item.getItemStack().equals(itemStack)); + return this.mapItems.values().stream().anyMatch(item -> item.getItemStack().equals(itemStack)); + } + + /** + * Check if the inventory slot is in use. + * + * @param index slot index + * @return found status + */ + @Override + public boolean containsItem(int index) { + return this.inventory.getItem(index) != null; + } + + /** + * Get the MenuItem from an input ItemStack. + * + * @param itemStack Item to search for + * @return MenuItem version of the found ItemStack + */ + @Override + public MenuItem getMenuItem(ItemStack itemStack) { +// return this.items.stream().filter(item -> item.getItemStack().equals(itemStack)).findFirst().orElse(null); + return this.mapItems.values().stream().filter(item -> item.getItemStack().equals(itemStack)).findFirst().orElse(null); + } + + /** + * Get the MenuItem from an index input. + * + * @param index slot to search + * @return MenuItem version of the found ItemStack + */ + @Override + public MenuItem getMenuItem(int index) { + return this.mapItems.getOrDefault(index, null); +// return this.mapItems.values().stream().filter(item -> item.getIndex() == index).findFirst().orElse(null); + } + + /** + * Get the amount of rows in the inventory. + * + * @return amount of rows + */ + public final int getRows() { + return rows; + } + + /** + * Get the display title of the inventory ui. + * + * @return display title + */ + public final String getTitle() { + return title; + } + + /** + * Get the flags assigned to said inventory. + * + * @return array of menu flags + */ + public final CoreMenuFlag[] getMenuFlags() { + return menuFlags; + } + + protected int[] getEdgeSlots(int rows) { + switch (rows) { + case 1: + return new int[] {}; + case 2: + return new int[] {}; + case 3: + return new int[] {0,1,2,3,4,5,6,7,8, 9,17, 18,19,20,21,22,23,24,25,26}; + case 4: + return new int[] {0,1,2,3,4,5,6,7,8, 9,17, 18,26, 27,28,29,30,31,32,33,34,35}; + case 5: + return new int[] {0,1,2,3,4,5,6,7,8, 9,17, 18,26, 27,35, 36,37,38,39,40,41,42,43,44}; + case 6: + return new int[] {0,1,2,3,4,5,6,7,8, 9,17, 18,26, 27,35, 36,44, 45,46,47,48,49,50,51,52,53}; + } + + return new int[]{}; + } + + public boolean isSlotBlocked(int slot) { + for (int i : this.mapItems.keySet()) { + if (i != slot) continue; + MenuItem item = this.mapItems.get(i); + if (!item.isAllowingPickup()) { + return true; + } + } + + return false; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/inventory/CoreMenuFlag.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/inventory/CoreMenuFlag.java new file mode 100644 index 0000000..58d3d30 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/inventory/CoreMenuFlag.java @@ -0,0 +1,32 @@ +package net.grandtheftmc.core.inventory; + +/** + * Created by Luke Bingham on 05/07/2017. + */ +public enum CoreMenuFlag { + + /** + * When a user clicks outside of the inventory ui, + * the menu will close. + * + * ! This does not account for empty slots. ! + */ + CLOSE_ON_NULL_CLICK, + + /** + * When a user opens the specific inventory, + * the cursor will be reset back to its + * default position. (X:Center - Y:Bottom) + * + * ! This only accounts for opening ! + */ + RESET_CURSOR_ON_OPEN, + + /** + * If you would like the inventory to have + * the same layout as the phone. + * + * This overrides the size parameter (the size can be set to anything) + */ + PHONE_LAYOUT +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/inventory/CoreMenuHandler.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/inventory/CoreMenuHandler.java new file mode 100644 index 0000000..17dcdd2 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/inventory/CoreMenuHandler.java @@ -0,0 +1,89 @@ +package net.grandtheftmc.core.inventory; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.inventory.button.ClickableItem; +import net.grandtheftmc.core.inventory.button.MenuItem; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryCloseEvent; +import org.bukkit.event.inventory.InventoryDragEvent; +import org.bukkit.inventory.ItemStack; + +/** + * Created by Luke Bingham on 05/07/2017. + */ +public class CoreMenuHandler implements Listener {//TODO, Implement Component + + public CoreMenuHandler(Core plugin) { + Bukkit.getPluginManager().registerEvents(this, plugin); + } + + @EventHandler + public void onDrag(InventoryDragEvent event){ + if(event.getInventory().getHolder() == null) return; + if(!(event.getInventory().getHolder() instanceof CoreMenu)) return; + if(!(event.getWhoClicked() instanceof Player)) return; + + CoreMenu menu = (CoreMenu) event.getInventory().getHolder(); + + boolean blocked = false; + for (int slot : event.getRawSlots()) { + if (menu.isSlotBlocked(slot)) { + blocked = true; + break; + } + } + + menu.onInteract(menu); + + event.setCancelled(blocked); + } + + @EventHandler + protected void onInventoryClick(InventoryClickEvent event) { + if(event.getInventory().getHolder() == null) return; + if(!(event.getInventory().getHolder() instanceof CoreMenu)) return; + if(!(event.getWhoClicked() instanceof Player)) return; + + CoreMenu menu = (CoreMenu) event.getInventory().getHolder(); + + Player player = (Player) event.getWhoClicked(); + ItemStack clicked = event.getCurrentItem(); + + if(clicked == null && menu.hasFlag(CoreMenuFlag.CLOSE_ON_NULL_CLICK)) { + player.closeInventory(); + return; + } + + menu.onInteract(menu); + + if(menu.isSelfHandle()) { + menu.selfHandle(event); + return; + } + menu.onClick(event); + MenuItem item = menu.getMenuItem(event.getRawSlot()); + if(item == null) return; + + if(!item.isAllowingPickup()) + event.setCancelled(true); + if(item instanceof ClickableItem) { + ((ClickableItem) item).getClickAction().onClick(player, event.getClick()); + } + } + + @EventHandler + protected void onInventoryClose(InventoryCloseEvent event) { + if(event.getInventory().getHolder() == null) + return; + if(!(event.getInventory().getHolder() instanceof CoreMenu)) + return; + if(!(event.getPlayer() instanceof Player)) + return; + CoreMenu menu = (CoreMenu) event.getInventory().getHolder(); + menu.onClose(event); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/inventory/IMenuButtonHandler.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/inventory/IMenuButtonHandler.java new file mode 100644 index 0000000..90f84e9 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/inventory/IMenuButtonHandler.java @@ -0,0 +1,54 @@ +package net.grandtheftmc.core.inventory; + +import net.grandtheftmc.core.inventory.button.MenuItem; +import org.bukkit.inventory.ItemStack; + +/** + * Created by Luke Bingham on 05/07/2017. + */ +public interface IMenuButtonHandler { + + /** + * Add an item to the inventory. + */ + void addItem(MenuItem menuItem); + + /** + * Delete an item from the inventory. + */ + void deleteItem(int index); + + /** + * Check if the inventory contains a specific item. + * + * @param itemStack Item to search for + * @return true if item is found + */ + boolean containsItem(ItemStack itemStack); + + /** + * Check if the inventory slot is in use. + * + * @param index slot index + * @return found status + */ + boolean containsItem(int index); + + /** + * Get the MenuItem from an input ItemStack. + * + * @param itemStack Item to search for + * @return MenuItem version of the found ItemStack + */ + MenuItem getMenuItem(ItemStack itemStack); + + /** + * Get the MenuItem from an index input. + * + * @param index slot to search + * @return MenuItem version of the found ItemStack + */ + MenuItem getMenuItem(int index); + + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/inventory/button/ClickableItem.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/inventory/button/ClickableItem.java new file mode 100644 index 0000000..dbc8732 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/inventory/button/ClickableItem.java @@ -0,0 +1,42 @@ +package net.grandtheftmc.core.inventory.button; + +import org.bukkit.inventory.ItemStack; + +/** + * Created by Luke Bingham on 05/07/2017. + */ +public class ClickableItem extends MenuItem { + + private IMenuClickAction clickAction; + + /** + * Construct a new MenuItem + * + * @param index menu slot index + * @param itemStack menu itemstack + */ + public ClickableItem(int index, ItemStack itemStack, IMenuClickAction clickAction) { + super(index, itemStack, false); + this.clickAction = clickAction; + } + + /** + * Construct a new MenuItem + * + * @param index menu slot index + * @param itemStack menu itemstack + */ + public ClickableItem(int index, ItemStack itemStack, boolean allowPickup, IMenuClickAction clickAction) { + super(index, itemStack, allowPickup); + this.clickAction = clickAction; + } + + public ClickableItem(int index, ItemStack itemStack, IMenuClickAction clickAction, boolean pickup) { + super(index, itemStack, pickup); + this.clickAction = clickAction; + } + + public IMenuClickAction getClickAction() { + return clickAction; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/inventory/button/IMenuClickAction.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/inventory/button/IMenuClickAction.java new file mode 100644 index 0000000..e2dc7fc --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/inventory/button/IMenuClickAction.java @@ -0,0 +1,18 @@ +package net.grandtheftmc.core.inventory.button; + +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; + +/** + * Created by Luke Bingham on 05/07/2017. + */ +public interface IMenuClickAction { + + /** + * This is fired when an item is interacted with. + * + * @param player Player who interacted + * @param clickType interaction type + */ + void onClick(Player player, ClickType clickType); +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/inventory/button/MenuItem.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/inventory/button/MenuItem.java new file mode 100644 index 0000000..07eef10 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/inventory/button/MenuItem.java @@ -0,0 +1,55 @@ +package net.grandtheftmc.core.inventory.button; + +import org.bukkit.inventory.ItemStack; + +/** + * Created by Luke Bingham on 05/07/2017. + */ +public class MenuItem { + + private final int index; + private final ItemStack itemStack; + + private final boolean allowPickup; + + /** + * Construct a new MenuItem + * + * @param index menu slot index + * @param itemStack menu itemstack + * @param allowPickup movable status + */ + public MenuItem(int index, ItemStack itemStack, boolean allowPickup) { + this.index = index; + this.itemStack = itemStack; + this.allowPickup = allowPickup; + } + + /** + * Get the index of the set item. + * + * @return index + */ + public final int getIndex() { + return index; + } + + /** + * Get the ItemStack of the set item. + * + * @return itemstack + */ + public final ItemStack getItemStack() { + return itemStack; + } + + /** + * If true, the item can be moved. + * If false, the item is stationary. + * + * @return movable status + */ + public final boolean isAllowingPickup() { + return allowPickup; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/inventory/example/ExampleUI.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/inventory/example/ExampleUI.java new file mode 100644 index 0000000..8fff399 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/inventory/example/ExampleUI.java @@ -0,0 +1,41 @@ +package net.grandtheftmc.core.inventory.example; + +import net.grandtheftmc.core.inventory.CoreMenu; +import net.grandtheftmc.core.inventory.CoreMenuFlag; +import net.grandtheftmc.core.inventory.button.ClickableItem; +import net.grandtheftmc.core.inventory.button.MenuItem; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.inventory.ItemStack; + +/** + * Created by Luke Bingham on 05/07/2017. + */ +public class ExampleUI extends CoreMenu { + + /** + * Construct a new Menu. + */ + public ExampleUI() { + //Without MenuFlags + super(6, "Example Interface"); + + //With MenuFlags + //super(6, "Example Interface", CoreMenuFlag.CLOSE_ON_NULL_CLICK, CoreMenuFlag.RESET_CURSOR_ON_OPEN); + + + //new MenuItem(index, itemstack, allowPickup) + addItem(new MenuItem(0, new ItemStack(Material.APPLE), false)); + + //new ClickableItem(index, itemstack, menuClickAction) + addItem(new ClickableItem(1, new ItemStack(Material.ENDER_PEARL, 4), (player, clickType) -> { + player.sendMessage("You clicked the Ender pearl... nice! (" + clickType.name() + ")"); + })); + + //done. + } + + //How to open this menu. + //new ExampleUI().openInventory(player); +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/inventory/types/PaginationMenu.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/inventory/types/PaginationMenu.java new file mode 100644 index 0000000..82fc892 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/inventory/types/PaginationMenu.java @@ -0,0 +1,36 @@ +package net.grandtheftmc.core.inventory.types; + +import net.grandtheftmc.core.inventory.CoreMenu; +import net.grandtheftmc.core.inventory.CoreMenuFlag; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +/** + * Created by Timothy Lampen on 1/22/2018. + * @deprecated in progress. + */ +public abstract class PaginationMenu extends CoreMenu { + + protected final ItemStack[] items = getItems(); + public PaginationMenu(String title, CoreMenuFlag... menuFlags) { + super(6, title, menuFlags); + } + + public PaginationMenu(String title){ + super(6, title); + } + + /** + * Open the inventory to the specified player. + * + * @param player Specified Player + */ + public void openInventory(Player player, int page) { + if(hasFlag(CoreMenuFlag.RESET_CURSOR_ON_OPEN)) player.closeInventory(); + + } + + protected abstract ItemStack[] getItems(); + + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/leaderboards/LeaderBoard.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/leaderboards/LeaderBoard.java new file mode 100644 index 0000000..444a7cb --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/leaderboards/LeaderBoard.java @@ -0,0 +1,118 @@ +package net.grandtheftmc.core.leaderboards; + +import com.gmail.filoghost.holographicdisplays.api.Hologram; +import com.gmail.filoghost.holographicdisplays.api.HologramsAPI; +import com.gmail.filoghost.holographicdisplays.api.line.TextLine; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.util.Utils; +import org.bukkit.Location; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class LeaderBoard { + + private String name; + private String displayName; + private Location location; + private final int lines; + private String table; + private String column; + + private Hologram hologram; + private final List textLines = new ArrayList<>(); + + private final Map cache; + + public LeaderBoard(String name, String displayName, String table, String column, Location location, int lines) { + this.name = name; + this.displayName = displayName; + this.location = location; + this.lines = lines; + this.cache = new HashMap<>(); + } + + public String getName() { + return this.name; + } + + public void setName(String name) { + this.name = name; + } + + public Location getLocation() { + return this.location; + } + + public void setLocation(Location location) { + this.location = location; + } + + public String getDisplayName() { + return this.displayName; + } + + public void setDisplayName(String displayName) { + this.displayName = displayName; + } + + public Hologram getHologram() { + return this.hologram; + } + + public void setHologram(Hologram hologram) { + this.hologram = hologram; + } + + public void create() { + this.hologram = HologramsAPI.createHologram(Core.getInstance(), this.location); + this.hologram.appendTextLine(Utils.f(this.displayName + " Leaderboard")); + this.hologram.appendTextLine(""); + this.textLines.clear(); + for (int i = 0; i < this.lines; i++) { + this.textLines.add(this.hologram.appendTextLine("")); + } + } + + protected void delete() { + this.hologram.delete(); + this.textLines.clear(); + } + + public void update() { + /* + try { + ResultSet rs = Core.getSQL().query( + "select name, " + this.column + " from " + this.table + " order by " + this.column + " desc limit " + this.lines + ';'); + this.cache.clear(); + while (rs.next()) + this.cache.put(rs.getString("name"), rs.getDouble(this.column)); + + } catch (SQLException e) { + e.printStackTrace(); + } + new BukkitRunnable() { + @Override + public void run() { + int i = 0; + for (Map.Entry stringDoubleEntry : LeaderBoard.this.cache.entrySet()) { + LeaderBoard.this.textLines.get(0).setText("&6&l#" + (i + 1) + "&7: &a&l" + stringDoubleEntry.getKey() + "&7 with &a&l" + LeaderBoard.this.cache.get(stringDoubleEntry.getKey())); + i++; + if (i >= LeaderBoard.this.lines) + break; + } + } + }.runTask(Core.getInstance());*/ + } + + public String getTable() { + return this.table; + } + + public String getColumn() { + return this.column; + } + +} \ No newline at end of file diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/leaderboards/LeaderBoardManager.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/leaderboards/LeaderBoardManager.java new file mode 100644 index 0000000..d4d3826 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/leaderboards/LeaderBoardManager.java @@ -0,0 +1,67 @@ +package net.grandtheftmc.core.leaderboards; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.util.Component; +import org.bukkit.configuration.file.YamlConfiguration; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +public class LeaderBoardManager implements Component { + + private int taskId = -1; + + private final List leaderBoards = new ArrayList<>(); + + public LeaderBoardManager() { + if (!Core.getSettings().useHolographicDisplays()) + return; + //this.loadLeaderBoards(); + //this.startSchedule(); + } + + @Override + public LeaderBoardManager onDisable(Core plugin) { + if(this.leaderBoards==null || this.leaderBoards.size()==0) + return this; + this.leaderBoards.forEach(LeaderBoard::delete); + this.leaderBoards.clear(); + return this; + } + + private void startSchedule() { + /* + if (this.taskId > 0) + Bukkit.getScheduler().cancelTask(this.taskId); + this.taskId = new BukkitRunnable() { + @Override + public void run() { + LeaderBoardManager.this.leaderBoards.forEach(LeaderBoard::update); + } + }.runTaskTimerAsynchronously(Core.getInstance(), 100, 100).getTaskId();*/ + } + + public void loadLeaderBoards() { + YamlConfiguration c = Core.getSettings().getLeaderBoardsConfig(); + this.leaderBoards.addAll(c.getKeys(false).stream().map(name -> new LeaderBoard(name, c.getString(name + ".displayName"), c.getString(name + ".table"), + c.getString(name + ".column"), Utils.teleportLocationFromString(c.getString(name + ".location")), + c.getInt(name + ".lines"))).collect(Collectors.toList())); + } + + public void saveLeaderBoards(boolean shutdown) { + YamlConfiguration c = Core.getSettings().getLeaderBoardsConfig(); + for (String s : c.getKeys(false)) + c.set(s, null); + for (LeaderBoard board : this.leaderBoards) { + String name = board.getName(); + c.set(name + ".displayName", board.getDisplayName()); + c.set(name + ".table", board.getTable()); + c.set(name + ".column", board.getColumn()); + c.set(name + ".location", Utils.teleportLocationToString(board.getLocation())); + } + Utils.saveConfig(c, "leaderBoards"); + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/Chat.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/Chat.java new file mode 100644 index 0000000..fb28b83 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/Chat.java @@ -0,0 +1,134 @@ +package net.grandtheftmc.core.listeners; + +import java.util.ArrayList; +import java.util.UUID; +import java.util.concurrent.TimeUnit; +import java.util.regex.Pattern; + +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.server.TabCompleteEvent; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.commands.GlobalMuteCommand; +import net.grandtheftmc.core.events.ChatEvent; +import net.grandtheftmc.core.handlers.chat.ChatManager; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.util.IconConverter; +import net.grandtheftmc.core.util.Utils; +import net.md_5.bungee.api.ChatColor; +import net.md_5.bungee.api.chat.TextComponent; + +public class Chat implements Listener { + + private final Pattern pattern; + + public Chat() { + this.pattern = Pattern.compile("^\\\\/(?:about|bukkit:about|minecraft:about|ver|bukkit:ver|version|bukkit:version).*$"); + } + + @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) + public void onChat(AsyncPlayerChatEvent e) { + + // grab event variables + Player player = e.getPlayer(); + UUID uuid = player.getUniqueId(); + String msg = e.getMessage(); + + User u = Core.getUserManager().getUser(player.getUniqueId()).orElse(null); + if (u == null || u.isInTutorial()) { + e.setCancelled(true); + return; + } + + for (Player p : new ArrayList<>(e.getRecipients())) { + User pu = Core.getUserManager().getUser(p.getUniqueId()).orElse(null); + if (pu == null || pu.isInTutorial() || pu.isIgnored(player.getName())){ + e.getRecipients().remove(p); + } + } + if (u.isRank(UserRank.VIP)) { + for (String word : msg.split(" ")) { + if (word.startsWith(":") && word.endsWith(":")) { + msg = IconConverter.convertInput(msg); + } + } + } + if (!u.isRank(UserRank.MOD)) { + if (GlobalMuteCommand.chatMuted) { + e.setCancelled(true); + player.sendMessage(Lang.GTM.f("&7Chat has been muted! Please wait")); + return; + } + } + u.updateDisplayName(player); + TextComponent textComponent; + if (u.isSpecial()) { + e.setMessage(u.isAdmin() ? Utils.f(msg) : Utils.fColor(msg)); + e.setFormat(Utils.f("%s&f %s")); + textComponent = new TextComponent(Utils.f(player.getDisplayName() + "&f ") + e.getMessage()); + } else { + e.setFormat(Utils.f("%s&7 " + "%s")); + textComponent = new TextComponent(Utils.f(player.getDisplayName() + "&7 ") + e.getMessage()); + textComponent.setColor(ChatColor.GRAY); + } + ChatEvent chatEvent; + try { + chatEvent = new ChatEvent(player, textComponent, e.getRecipients()); + Bukkit.getPluginManager().callEvent(chatEvent); + } catch (NullPointerException exception) { + exception.printStackTrace(); + return; + } + if (chatEvent.isCancelled()) { + e.setCancelled(true); + return; + } + textComponent = chatEvent.getTextComponent(); + if (u.getUUID() != null && !u.isStaff()) { + for (String text : e.getMessage().split(" ")) { + if (ChatManager.getAdHandler().matchesAdvertisement(text)) { + player.sendMessage(Lang.GTM.f("&7URL prohibited. Please do not attempt to advertise.")); + Bukkit.getOnlinePlayers() + .stream() + .filter(target -> Core.getUserManager() + .getLoadedUser(target.getUniqueId()) + .isRank(UserRank.HELPOP)) + .forEach(target -> target.sendMessage(Lang.ANTIAD.f(u.getColoredName(player) + + " &cattempted to advertise &a''" + e.getMessage() + "''"))); + e.setCancelled(true); + return; + } + } + int cooldown = u.isSpecial() ? ChatManager.getVipChatCooldown() : ChatManager.getDefaultChatCooldown(); + if (ChatManager.getCooldownHandler().canChatAgain(uuid, cooldown)) { + ChatManager.getCooldownHandler().setCanChatAgain(uuid, System.currentTimeMillis() + TimeUnit.SECONDS.toMillis(cooldown)); + } else { + player.sendMessage(Lang.GTM.f("&7You are sending messages too fast, please slow down.")); + e.setCancelled(true); + return; + } + cooldown = u.isSpecial() ? 3 : 5; + if (ChatManager.getRepeatHandler().canChatAgain(uuid, e.getMessage())) { + ChatManager.getRepeatHandler().addRecentMessage(uuid, e.getMessage(), cooldown); + } else { + player.sendMessage(Lang.GTM.f("&7Please wait a few seconds before repeating that message.")); + e.setCancelled(true); + return; + } + } + for (Player target : chatEvent.getRecipients()) target.spigot().sendMessage(textComponent); + e.getRecipients().clear(); + } + + @EventHandler + protected void onTabComplete(TabCompleteEvent event) { + event.setCancelled(this.pattern.matcher(ChatColor.stripColor(event.getBuffer())).find()); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/ChunkLoad.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/ChunkLoad.java new file mode 100644 index 0000000..eb819e5 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/ChunkLoad.java @@ -0,0 +1,18 @@ +package net.grandtheftmc.core.listeners; + +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.world.ChunkLoadEvent; + +import net.grandtheftmc.core.Core; + +public class ChunkLoad implements Listener { + + @SuppressWarnings("deprecation") + @EventHandler + public void onChunkLoad(ChunkLoadEvent e) { + if ((Core.getSettings().stopChunkLoad(e.getWorld().getName()) && e.isNewChunk()) || (Core.getSettings().stopLoadDefaultWorld() && "world".equals(e.getWorld().getName()))) + e.getChunk().unload(false,false); + } + +} \ No newline at end of file diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/CommandListener.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/CommandListener.java new file mode 100644 index 0000000..b568fdb --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/CommandListener.java @@ -0,0 +1,201 @@ +package net.grandtheftmc.core.listeners; + +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.List; + +import org.bukkit.Bukkit; +import org.bukkit.Server; +import org.bukkit.command.SimpleCommandMap; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerChatTabCompleteEvent; +import org.bukkit.event.player.PlayerCommandPreprocessEvent; +import org.bukkit.event.server.ServerCommandEvent; +import org.bukkit.plugin.SimplePluginManager; +import org.bukkit.scheduler.BukkitRunnable; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.users.Pref; +import net.grandtheftmc.core.users.UserManager; +import net.grandtheftmc.core.util.Utils; +import net.md_5.bungee.api.ChatMessageType; +import net.md_5.bungee.api.chat.TextComponent; + +public class CommandListener implements Listener { + private SimpleCommandMap cmdMap; + private List socialSpyCmds = new ArrayList<>(); + + public CommandListener() { + try { + this.cmdMap = this.getCommandMap(Core.getInstance().getServer()); + } catch (IllegalArgumentException | IllegalAccessException | NoSuchFieldException | SecurityException e) { + e.printStackTrace(); + } + this.loadSocialSpy(); + } + + private void loadSocialSpy() { + YamlConfiguration c = Core.getSettings().getSocialSpyConfig(); + this.socialSpyCmds = c.getStringList("commands"); + } + + @EventHandler(priority = EventPriority.HIGHEST) + public void onServerCommand(ServerCommandEvent event) { + String[] split = event.getCommand().split(" "); + switch (split[0].toLowerCase()){ + case "restart": + case "stop": + event.setCancelled(true); + Core.getInstance().setRestarting(true); + if(Core.getSettings().getNumber() <= 0 || (split.length>1 && split[1].equalsIgnoreCase("force"))) { + Bukkit.shutdown(); + return; + } + shutdownSequence(); + return; + } + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onPlayerCommandPreprocess(PlayerCommandPreprocessEvent e) { + Player player = e.getPlayer(); + switch (e.getMessage()) { + case "/bankcraft deposit all": + case "/bc deposit all": + case "/bank deposit all": + player.sendMessage(Utils.f("&c/bankcraft deposit ")); + return; + default: + break; + } + String[] split = e.getMessage().replaceFirst("/", "").split(" "); + String cmd = split[0].toLowerCase(); + if (this.socialSpyCmds != null && this.socialSpyCmds.contains(cmd)){ + UserManager.getInstance().getUsers().stream().filter(user -> user.getPref(Pref.SOCIALSPY)).forEach(user -> { + Player p = Bukkit.getPlayer(user.getUUID()); + if (p != null){ + p.sendMessage(Lang.SS.f("&r" + player.getName() + ": " + e.getMessage())); + } + }); + } + switch (cmd) { + case "who": { + e.setCancelled(true); + player.sendMessage(Utils.f("&7Unknown command: \"&a" + e.getMessage() + "&7\".")); + return; + } + case "me": + e.setCancelled(true); + player.sendMessage(Utils.f("&7Unknown command: \"&a" + e.getMessage() + "&7\".")); + return; + case "buy": + case "donate": + case "purchase": + e.setCancelled(true); + player.performCommand("/store"); + return; + case "restart": + case "stop": + e.setCancelled(true); + if (!player.isOp()) { + player.sendMessage(Utils.f("&cYou do not have permission to execute this command!")); + return; + } + Core.getInstance().setRestarting(true); + if(Core.getSettings().getNumber() <= 0 || (split.length>1 && split[1].equalsIgnoreCase("force"))) { + Bukkit.shutdown(); + return; + } + shutdownSequence(); + return; + case "minecraft:tell": + case "minecraft:msg": + case "minecraft:w": + case "bukkit:tell": + case "bukkit:msg": + case "bukkit:w": + case "bukkit:version": + case "version": + case "ver": + case "about": + case "bukkit:me": + case "minecraft:me": + case "plugins": + case "pl": + case "bukkit:plugins": + case "bukkit:pl": + case "?": + case "bukkit:?": + case "bukkit:help": + case "minecraft:?": + case "save-on": + case "save-all": + e.setCancelled(true); + player.sendMessage(Utils.f("&cbit.ly/FreeCookiesOn" + Core.getSettings().getServer_GTM_shortName())); + return; + default: + if (this.isCmdRegistered(cmd)) + return; + e.getPlayer().sendMessage(Utils.f("&7Unknown command: \"&a" + e.getMessage() + "&7\".")); + e.setCancelled(true); + } + } + + @EventHandler + public void onTabComplete(PlayerChatTabCompleteEvent e) { + if (!e.getChatMessage().startsWith("/")) return; + String[] args = e.getChatMessage().split(" "); + if (args.length == 1 && args[0].length() < 5) e.getTabCompletions().clear(); + } + + private SimpleCommandMap getCommandMap(Server svr) throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException { + if (svr.getPluginManager() instanceof SimplePluginManager) { + Field f = SimplePluginManager.class.getDeclaredField("commandMap"); + f.setAccessible(true); + return (SimpleCommandMap) f.get(svr.getPluginManager()); + } else { + return null; + } + } + + private void shutdownSequence(){ + Core.error("[Stop] Stop sequence started..."); + Core.error("[Stop] Blocking player requests to join..."); + new BukkitRunnable() { + int counter = 60; + @Override + public void run() { + if(counter<=0) { + for(Player player : Bukkit.getOnlinePlayers()) { + player.kickPlayer(Lang.ALERTS.f("&cThe server is restarting!")); + } + Core.error("[Stop] Players have been kicked, stopping server in 20 seconds."); + new BukkitRunnable() { + @Override + public void run() { + Bukkit.shutdown(); + } + }.runTaskLater(Core.getInstance(), 400); + cancel(); + return; + } + if(counter % 5 == 0){ + Core.error("[Stop] Kicking players in " + counter + " seconds"); + } + for(Player player : Bukkit.getOnlinePlayers()) { + player.spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText(Lang.ALERTS.f("&6The server will stop in &4" + counter + "&6s"))); + } + counter--; + } + }.runTaskTimer(Core.getInstance(), 0,20); + } + + private boolean isCmdRegistered(String name) { + return this.cmdMap.getCommand(name) != null; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/Damage.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/Damage.java new file mode 100644 index 0000000..b67d8a4 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/Damage.java @@ -0,0 +1,30 @@ +package net.grandtheftmc.core.listeners; + +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityDamageEvent; + +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserManager; + +public class Damage implements Listener { + + @EventHandler + public void entityDamageEvent(EntityDamageEvent event) { + + // ignore non player entities + if (!(event.getEntity() instanceof Player)){ + return; + } + + Player player = (Player) event.getEntity(); + + User user = UserManager.getInstance().getUser(player.getUniqueId()).orElse(null); + if (user != null){ + if (user.isInTutorial()){ + event.setCancelled(true); + } + } + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/HopperComponent.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/HopperComponent.java new file mode 100644 index 0000000..87617a8 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/HopperComponent.java @@ -0,0 +1,36 @@ +package net.grandtheftmc.core.listeners; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.util.Component; +import org.bukkit.Material; +import org.bukkit.entity.Item; +import org.bukkit.event.EventHandler; +import org.bukkit.event.inventory.InventoryPickupItemEvent; +import org.bukkit.event.inventory.InventoryType; + +/** + * Created by Luke Bingham on 26/08/2017. + */ +public class HopperComponent implements Component { + + @EventHandler + protected final void onHopperPickup(InventoryPickupItemEvent event) { + if(event.getInventory() == null && event.getInventory().getType() != InventoryType.HOPPER) return; + if(event.getItem() == null && (event.getItem().getItemStack().getType() != Material.DIAMOND_SWORD && event.getItem().getItemStack().getType() != Material.FLINT_AND_STEEL)) + return; + + Item item = event.getItem(); + + if(event.getItem().getItemStack().getType() == Material.DIAMOND_SWORD) { + if(item.getItemStack().getDurability() <= 751 || item.getItemStack().getDurability() >= 800) { + event.setCancelled(true); + return; + } + } + + if(event.getItem().getItemStack().getType() == Material.FLINT_AND_STEEL) { + event.setCancelled(true); + return; + } + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/HungerChange.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/HungerChange.java new file mode 100644 index 0000000..e2bd881 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/HungerChange.java @@ -0,0 +1,17 @@ +package net.grandtheftmc.core.listeners; + +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.FoodLevelChangeEvent; + +import net.grandtheftmc.core.Core; + +public class HungerChange implements Listener { + + @EventHandler + public void onHungerChange(FoodLevelChangeEvent e) { + if (Core.getSettings().stopHungerChange(e.getEntity().getWorld().getName())) { + e.setFoodLevel(20); + } + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/InventoryClick.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/InventoryClick.java new file mode 100644 index 0000000..ff266ae --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/InventoryClick.java @@ -0,0 +1,42 @@ +package net.grandtheftmc.core.listeners; + +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.users.User; +import org.bukkit.event.inventory.InventoryType; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; + +public class InventoryClick implements Listener { + + @EventHandler + public void onClick(InventoryClickEvent e) { + Player player = (Player) e.getWhoClicked(); + Inventory inv = e.getInventory(); + if(inv != null && (inv.getType() == InventoryType.CHEST || + inv.getType() == InventoryType.ENDER_CHEST || + inv.getType().name().equals("SHULKER_BOX") || + inv.getType() == InventoryType.DISPENSER || + inv.getType() == InventoryType.DROPPER || + inv.getType() == InventoryType.HOPPER)) { + ItemStack selected = e.isShiftClick() ? e.getCurrentItem() : e.getCursor(); + if(selected != null && selected.getType().toString().contains("SHULKER_BOX")){ + e.setCancelled(true); + return; + } + } + /* if (!Core.getSettings().useEditMode()) { + return; + } + User u = Core.getUserManager().getLoadedUser(player.getUniqueId()); + if (u.hasEditMode()) { + if (e.isCancelled()) { + e.setCancelled(false); + } + }*/ + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/Join.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/Join.java new file mode 100644 index 0000000..dcaf23f --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/Join.java @@ -0,0 +1,177 @@ +package net.grandtheftmc.core.listeners; + +import java.sql.Connection; +import java.sql.SQLException; + +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerJoinEvent; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.database.BaseDatabase; +import net.grandtheftmc.core.database.dao.MutexDAO; +import net.grandtheftmc.core.database.mutex.common.LoadUserTask; +import net.grandtheftmc.core.nametags.NametagManager; +import net.grandtheftmc.core.transaction.state.user.UserStateTransaction; +import net.grandtheftmc.core.users.Pref; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserDAO; +import net.grandtheftmc.core.users.UserManager; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.util.NMSUtil; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.core.util.Utils; + +public class Join implements Listener { + + /** + * Listens in on player join events. + *

+ * Note: This is LOW so that events can listen in BEFORE or AFTER this event + * is called since the player will be added to the container. + *

+ * + * @param event - the event + */ + @EventHandler(priority = EventPriority.LOW) + public void onJoin(PlayerJoinEvent event) { + + // grab event variables + Player player = event.getPlayer(); + + // create a new user + User user = new User(player.getUniqueId(), player.getName()); + + // NOTE: This is called on an async thread + new LoadUserTask(Core.getInstance(), user) { + + @Override + protected boolean onLoad() { + try (Connection conn = BaseDatabase.getInstance().getConnection()) { + + // execute a data check to create new entries if needed + user.dataCheck(); + + // load the user + user.onLoad(conn); + } + catch (SQLException e) { + e.printStackTrace(); + return false; + } + + return true; + } + + @Override + protected void onLoadFailure() { + // Back to main thread + Bukkit.getScheduler().runTask(getPlugin(), () -> { + player.kickPlayer("[Core] Load failure; contact staff if this issue persists."); + + // TODO this is to reset mutex issues + Bukkit.getScheduler().runTaskAsynchronously(getPlugin(), () -> { + try (Connection conn = BaseDatabase.getInstance().getConnection()){ + MutexDAO.setUserMutex(conn, player.getUniqueId(), false); + } + catch(Exception e){ + e.printStackTrace(); + } + }); + }); + } + + @Override + protected void onLoadComplete() { + + // add to the container + UserManager.getInstance().addUser(user); + + try (Connection conn = BaseDatabase.getInstance().getConnection()){ + // check for user state transactions + UserStateTransaction.process(conn, getPlugin(), player, Core.getSettings().getType().getName(), Core.getSettings().getNumber()); + } + catch (Exception e){ + e.printStackTrace(); + } + + // Back to main thread + Bukkit.getScheduler().runTask(plugin, () -> { + + // can update name or other things on thread + // like teleport them + + // make sure still online + Player player = Bukkit.getPlayer(user.getUUID()); + if (player != null) { + + // bind bukkit player object to user object + user.setPerms(player); + + // update nametag + NametagManager.updateNametag(player); + NametagManager.updateNametagsTo(player, user); + + // update display name + user.updateDisplayName(player); + + if (user.dailyStreakExpired()) + player.sendMessage(Lang.REWARDS.f("&7Your Daily Reward Streak has expired! Claim it once every 24h to build up your streak!")); + else if (user.canClaimDailyReward()) + player.sendMessage(Lang.REWARDS.f("&7Your Daily Reward is waiting for you! Claim it once every 24h to build up your streak!")); + if (user.voteStreakExpired()) + player.sendMessage(Lang.VOTE.f("&7Your Vote Streak has expired! Vote once every 24h to build up your streak!")); + else if (user.getVoteRecord().getStreak() > 0 && user.canVoteStreak()) + player.sendMessage(Lang.VOTE.f("&7Remember to vote to raise your Vote Streak! Vote on all &e5 &7sites for maximum rewards! You currently have a &a&l" + user.getDoubleVoteChance() + "&a%&7 chance to get a Double Vote&7!")); + if (user.isSpecial() && user.canClaimMonthlyReward()) + player.sendMessage(Lang.REWARDS.f("&7Thank you for being a loyal supporter of " + Core.getSettings().getServer_GTM_shortName() + "! Your monthly reward of &e&l" + user.getUserRank().getMonthlyTokens() + " Tokens&7 is waiting for you!")); + + // if trial rank, let them know they can buy it + UserRank trial = user.getTrialRank(); + if (trial != null) { + player.sendMessage(Lang.RANKS.f("&7You are currently on the &a&lfree " + trial.getColoredNameBold() + "&7 trial! You can buy it permanently for &a$&l" + trial.getPrice() + "&7 at &a&l" + Core.getSettings().getStoreLink() + "&7!")); + } + + // if at least help op, set join time + if (user.isRank(UserRank.HELPOP)) { + user.setJoinTime(System.currentTimeMillis()); + } + + if (user.getPref(Pref.ANNOUNCEMENTS)) { + + // TODO this should be loaded during the loading of + // the user + // as its being called for each login anyways + ServerUtil.runTaskAsync(() -> { + if (UserDAO.isLastMonthsVoteWinner(player.getName())) { + Bukkit.getScheduler().runTask(getPlugin(), () -> { + player.sendMessage(Lang.VOTE.f("&7You have won store credit for being a top voter! Please visit the store to claim your prize!. (You can turn this notification off by toggling the annoucements pref)")); + }); + } + }); + } + } + }); + } + }; + } + + @EventHandler(priority = EventPriority.HIGHEST) + public void onJoinMonitor(PlayerJoinEvent e) { + + // grab event variables + Player p = e.getPlayer(); + + // send join title + NMSUtil.sendTabTitle(p, Core.getSettings().getDisplayName(), Utils.f("&aCheck out our site at &6&l" + Core.getSettings().getWebsiteLink() + "&a!")); + // set join message + e.setJoinMessage(Core.getSettings().getJoinLeaveMessagesEnabled() ? Utils.f(p.getDisplayName() + " &ejoined the game!") : null); + + // for all players online, show them this player + e.getPlayer().getWorld().getEntitiesByClass(Player.class).forEach(target -> e.getPlayer().showPlayer(target)); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/Leave.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/Leave.java new file mode 100644 index 0000000..706d746 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/Leave.java @@ -0,0 +1,96 @@ +package net.grandtheftmc.core.listeners; + +import java.sql.Connection; +import java.sql.SQLException; + +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerQuitEvent; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.database.BaseDatabase; +import net.grandtheftmc.core.database.dao.ServerStatsDAO; +import net.grandtheftmc.core.database.mutex.common.SaveUserTask; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserManager; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.util.Playtime; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.util.debug.Log; + +public class Leave implements Listener { + + /** + * Listens in on player quit events. + *

+ * Note: This is HIGH so that events can listen in BEFORE or AFTER this + * event is called since the player will be removed from the container. + *

+ * + * @param event - the event + */ + @EventHandler(priority = EventPriority.HIGH) + public void onLeave(PlayerQuitEvent event) { + + // grab event variables + Player p = event.getPlayer(); + + // update Move listener + Move.logout(p.getUniqueId()); + + // grab the user + User coreUser = UserManager.getInstance().getUser(p.getUniqueId()).orElse(null); + if (coreUser != null) { + + // if they are help op + if (coreUser.isRank(UserRank.HELPOP)) { + coreUser.setLeaveTime(System.currentTimeMillis()); + Long playtime = coreUser.getLeaveTime() - coreUser.getJoinTime(); + if (Playtime.playtime.containsKey(p.getName())) { + playtime = Playtime.playtime.get(p.getName()) + coreUser.getLeaveTime() - coreUser.getJoinTime(); + } + Playtime.playtime.put(p.getName(), playtime); + } + + // if quit messages are enabled + event.setQuitMessage(Core.getSettings().getJoinLeaveMessagesEnabled() ? Utils.f(p.getDisplayName() + " &eleft the game!") : null); + coreUser.removePerms(p); + + ServerUtil.runTaskAsync(() -> { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + ServerStatsDAO.updatePlaytimeAndFirstlogin(connection, p, coreUser); + } + catch (SQLException ex) { + ex.printStackTrace(); + } + }); + } + + // REMOVE from local container and save + User removedUser = UserManager.getInstance().removeUser(p.getUniqueId()).orElse(null); + if (removedUser != null) { + + new SaveUserTask(Core.getInstance(), removedUser) { + @Override + protected boolean onSave() { + try (Connection conn = BaseDatabase.getInstance().getConnection()) { + removedUser.onSave(conn); + } + catch (SQLException e) { + e.printStackTrace(); + } + + return true; + } + + @Override + protected void onSaveFailure() { + Log.error("Core", "Unhandled exception while saving " + removedUser.getName()); + } + }; + } + } +} \ No newline at end of file diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/Login.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/Login.java new file mode 100644 index 0000000..2651207 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/Login.java @@ -0,0 +1,221 @@ +package net.grandtheftmc.core.listeners; + +import java.sql.Connection; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.player.AsyncPlayerPreLoginEvent; +import org.bukkit.event.player.PlayerLoginEvent; +import org.bukkit.plugin.Plugin; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.ProtocolLibrary; +import com.comphenix.protocol.ProtocolManager; +import com.comphenix.protocol.events.ListenerPriority; +import com.comphenix.protocol.events.PacketAdapter; +import com.comphenix.protocol.events.PacketEvent; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.database.BaseDatabase; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserDAO; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.util.PluginAssociated; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.whitelist.WhitelistManager; +import net.grandtheftmc.core.whitelist.WhitelistedUser; + +public class Login implements PluginAssociated, Listener { + + /** The owning plugin */ + private Plugin plugin; + /** Maps uuid to user rank */ + private Map uuidToRank; + + /** + * Construct a new Login. + *

+ * This is a listener that handles login related events. + *

+ * + * @param plugin - the owning plugin + */ + public Login(Plugin plugin) { + this.plugin = plugin; + this.uuidToRank = new HashMap<>(); + + ProtocolManager manager = ProtocolLibrary.getProtocolManager(); + manager.addPacketListener(new PacketAdapter(Core.getInstance(), ListenerPriority.NORMAL, PacketType.Play.Client.SETTINGS) { + @Override + public void onPacketReceiving(PacketEvent event) { + String locale = event.getPacket().getStrings().read(0); + User user = Core.getUserManager().getLoadedUser(event.getPlayer().getUniqueId()); + if (user == null) + return; + + if (user.getLanguage() != null && user.getLanguage().equals(locale)) + return; + user.setLanguage(locale); + } + }); + + // every 60 secs clear the cache map + Bukkit.getScheduler().runTaskTimerAsynchronously(getPlugin(), () -> { + uuidToRank.clear(); + }, 0, 20L * 60); + } + + /** + * Listens in on the async pre login event. + * + * @param event - the event + */ + @EventHandler(priority = EventPriority.LOW) + public void onAsyncPlayerPreLogin(AsyncPlayerPreLoginEvent event) { + + // if the server is restarting + if (Core.getInstance().isRestarting()) { + event.setKickMessage(Lang.ALERTS.f("&cThe server is restarting!")); + event.disallow(org.bukkit.event.player.AsyncPlayerPreLoginEvent.Result.KICK_OTHER, "&cThe server is currently restarting!"); + return; + } + + // if the core plugin isn't enabled + if (!Core.getInstance().isEnabled()) { + event.setKickMessage(Lang.ALERTS.f("&cWaiting on core...")); + event.disallow(org.bukkit.event.player.AsyncPlayerPreLoginEvent.Result.KICK_OTHER, "&cWaiting on core..."); + return; + } + + // grab event variables + UUID uuid = event.getUniqueId(); + + // if required rank to join + if (Core.getSettings().needRankToJoin()) { + + // find the required rank to join + UserRank requiredRank = Core.getSettings().getRankToJoin(); + UserRank userRank = UserRank.DEFAULT; + + // if cached rank + if (uuidToRank.containsKey(uuid)) { + userRank = uuidToRank.get(uuid); + } + // fetch from database + else { + + // grab the user rank + try (Connection conn = BaseDatabase.getInstance().getConnection()) { + userRank = UserDAO.getHighestRank(conn, uuid); + } + catch (Exception e) { + e.printStackTrace(); + } + + // add to cache + uuidToRank.put(uuid, userRank); + } + + // if they do not have the required rank OR HIGHER + if (!userRank.isHigherThan(requiredRank) && userRank != requiredRank) { + event.disallow(AsyncPlayerPreLoginEvent.Result.KICK_WHITELIST, Utils.f("&cSorry, this game is for " + requiredRank.getColoredNameBold() + " &c and up only! Go to " + Core.getSettings().getStoreLink() + " to purchase a rank!")); + } + } + } + + /** + * Listens in the player login event. + * + * @param event - the event + */ + @EventHandler + public void onPlayerLogin(PlayerLoginEvent event) { + + // grab event variables + Player player = event.getPlayer(); + + if (Core.getInstance().isRestarting()) { + event.setKickMessage(Lang.ALERTS.f("&cThe server is restarting!")); + event.setResult(PlayerLoginEvent.Result.KICK_OTHER); + return; + } + + // if the core plugin isn't enabled + if (!Core.getInstance().isEnabled()) { + event.setKickMessage(Lang.ALERTS.f("&cWaiting on core...")); + event.disallow(PlayerLoginEvent.Result.KICK_OTHER, "&cWaiting on core..."); + return; + } + + // if whitelist is enabled + WhitelistManager wm = Core.getWhitelistManager(); + if (wm.isEnabled()) { + + // grab the specified user + WhitelistedUser wu = wm.getWhitelistedUser(player.getUniqueId()); + + // if not found, try by name + if (wu == null){ + wu = wm.getWhitelistedUser(player.getName()); + } + + // if we found the user, set the name/uuid + if (wu != null) { + wu.setName(player.getName()); + wu.setUuid(player.getUniqueId()); + + // allow them to join + return; + } + + // if whitelist manager exists and there is no bypass rank specified + if (wm != null && wm.getBypassRank() == null) { + event.disallow(PlayerLoginEvent.Result.KICK_WHITELIST, Utils.f("&cYou are not whitelisted on this server!")); + } + else { + + // find the required rank to join from whitelist + UserRank requiredRank = wm.getBypassRank(); + UserRank userRank = UserRank.DEFAULT; + + // if cached rank + if (uuidToRank.containsKey(player.getUniqueId())) { + userRank = uuidToRank.get(player.getUniqueId()); + } + // fetch from database + else { + + // grab the user rank + try (Connection conn = BaseDatabase.getInstance().getConnection()) { + userRank = UserDAO.getHighestRank(conn, player.getUniqueId()); + } + catch (Exception e) { + e.printStackTrace(); + } + } + + // if higher than whitelist rank + if (userRank.hasRank(requiredRank)) { + event.disallow(PlayerLoginEvent.Result.KICK_WHITELIST, Utils.f("&cSorry, this game is for " + wm.getBypassRank().getColoredNameBold() + "&c and up only! Go to " + Core.getSettings().getStoreLink() + " to purchase a rank!")); + } + } + } + } + + /** + * Get the owning plugin for this listener. + * + * @return The owning plugin for this listener. + */ + @Override + public Plugin getPlugin() { + return plugin; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/Move.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/Move.java new file mode 100644 index 0000000..c504bb0 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/Move.java @@ -0,0 +1,169 @@ +package net.grandtheftmc.core.listeners; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.UUID; + +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerMoveEvent; +import org.bukkit.util.Vector; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.data.CompactLoc; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserRank; + +public class Move implements Listener { + + //Used to compare locations for AFKers + private static Map playerLocations = new HashMap<>(); + + //Remove player the AFK tracker. + public static void logout(UUID u) { + playerLocations.remove(u); + } + + public Move(){ + //Run every 30 seconds + Bukkit.getScheduler().runTaskTimer(Core.getInstance(), () -> { + for (Player p : Bukkit.getOnlinePlayers()) { + CompactLoc last = playerLocations.get(p.getUniqueId()); + + if (last == null) { + //Register them + playerLocations.put(p.getUniqueId(), new CompactLoc(p.getLocation())); + } else { + //Compare the difference + CompactLoc current = new CompactLoc(p.getLocation()); + + if (current.differs(last)) { + //we can try to update the afk list as they have moved. + User u = Core.getUserManager().getLoadedUser(p.getUniqueId()); + if(!u.hasTrialRank() && !u.isRank(UserRank.VIP)){ + Core.getAntiAFK().refreshAfk(p); + } + } + + playerLocations.put(p.getUniqueId(), current); + } + } + }, 0L, 20 * 30); + } + + //Store a list of players opening crates who shouldn't be affected + private static Set excludeCrate = new HashSet<>(); + //Store a list of active crate openings to scan, use a list because it's quicker to iterate + private static List activeCrates = new ArrayList<>(); + + public static void setOpening(UUID u, Location l) { + excludeCrate.add(u); + activeCrates.add(l); + activeWorldHashcodes.add(l.getWorld().hashCode()); + //Bukkit.broadcastMessage(ChatColor.GREEN + Bukkit.getPlayer(u).getName() + " opening crate, added to exclusion list."); + } + + public static void stopOpening(UUID u, Location l) { + excludeCrate.remove(u); + activeCrates.remove(l); + + //do we need to remove it from the active hashset? + for (Location acl : activeCrates) { + if (acl.getWorld().hashCode() == l.getWorld().hashCode()) { + //there is stil lan active crate with this world stored so we can't remove it + return; + } + } + + activeWorldHashcodes.remove(l.getWorld().hashCode()); + //Bukkit.broadcastMessage(ChatColor.RED + Bukkit.getPlayer(u).getName() + " STOPPED opening crate, REMOVED from exclusion list."); + } + + //All active crates are present in this hashset + private static Set activeWorldHashcodes = new HashSet<>(); + + @EventHandler + public void onMoveOptimised(PlayerMoveEvent e) { + Location to = e.getTo(), from = e.getFrom(); + + if (to.getBlockX() == from.getBlockX() && to.getBlockY() == from.getBlockY() && to.getBlockZ() == from.getBlockZ()) { + //Player has not moved block + return; + } + + Player player = e.getPlayer(); + //Hashmap lookup so this is fast enough. + User u = Core.getUserManager().getLoadedUser(player.getUniqueId()); + + //Better ways to refresh afk than on move, this has been moved to a scheduler task above ^. + //if (!u.hasTrialRank() && !u.isRank(UserRank.VIP)) Core.getAntiAFK().refreshAfk(player); + + if (u != null && u.isInTutorial()) { + e.setTo(e.getFrom()); + //Don't allow them to move. + return; + } + + //player.sendMessage("HC (spawn/curWorld) = (" + spawnWorldHashCode + "/" + player.getWorld().hashCode() + ")"); + + if (activeWorldHashcodes.isEmpty() || !activeWorldHashcodes.contains(player.getWorld().hashCode()) || activeCrates.isEmpty()) { + //Comparing integer hashcodes is faster than strings. + //Also return if no crates are being opened. + //Crates only opened in spawn world, so if they dont match exit + return; + } + + //Crates must not be empty, a crate is being opened. Check if we can exclude the player first + if (excludeCrate.contains(player.getUniqueId())) { + //player.sendMessage("You are on the exclusion list, not checked!"); + return; + } + + //Otherwise do a scan + for (Location l : activeCrates) { + if (player.getLocation().getWorld().hashCode() != l.getWorld().hashCode()) { + //Only compare locations in the same world. + //player.sendMessage("Not in same world as crate."); + continue; + } + + /* + Now remember, that for most players they won't actually be near the crates that are being opened. + + So we can speed up the comparison by doing some quick eliminations as calculating the distance is expensive. + + Do quick checks on the x, y, z to determine if the player is nearby. + */ + if (Math.abs(l.getBlockX() - player.getLocation().getBlockX()) >= 6 || + Math.abs(l.getBlockZ() - player.getLocation().getBlockZ()) >= 6 || + Math.abs(l.getBlockY() - player.getLocation().getBlockY()) >= 6) { + //Player can't be within 5 units of the crate if distance between two is >= 5. + //Check y first as this is the least likely to differ. + //player.sendMessage("Outside of active crate range."); + return; + } + + if (player.getLocation().distance(l) < 7) { + //They must be in range, so lets push them back + //Removed .clone() it's unnecessary. + //player.sendMessage("THROWING AWAY"); + Vector ce = l.toVector(); + Vector toThrow = player.getLocation().toVector(); + double x = toThrow.getX() - ce.getX(); + double z = toThrow.getZ() - ce.getZ(); + //Multiplication by 1 achieves nothing so remove that also. + Vector v = new Vector(x, 1, z).normalize(); + player.setVelocity(v); + } + + } + + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/PetListener.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/PetListener.java new file mode 100644 index 0000000..3f85853 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/PetListener.java @@ -0,0 +1,35 @@ +package net.grandtheftmc.core.listeners; + +/*import com.dsh105.echopet.api.EchoPetAPI; +import com.dsh105.echopet.compat.api.entity.IPet; +import com.dsh105.echopet.compat.api.event.PetInteractEvent; +import net.grandtheftmc.core.Core; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority;*/ +import org.bukkit.event.Listener; + +/** + * Created by Liam on 11/09/2016. + */ +public class PetListener implements Listener { + + /*@EventHandler(priority = EventPriority.LOW) + public void onPetInteract(PetInteractEvent e) { + Player player = e.getPlayer(); + IPet pet = e.getPet(); + PetInteractEvent.Action i = e.getAction(); + if (i == PetInteractEvent.Action.LEFT_CLICK) { + if (pet.getOwner().equals(player)) { + pet.ownerRidePet(true); + e.setCancelled(true); + } else e.setCancelled(!Core.getSettings().isPetsVulnerable()); + } else if (i == PetInteractEvent.Action.RIGHT_CLICK) { + if (!pet.getOwner().equals(player)) return; + e.setCancelled(true); + if (player.isSneaking()) pet.ownerRidePet(true); + else EchoPetAPI.getAPI().openPetDataMenu(player, false); + } + }*/ + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/PlaywireRecieve.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/PlaywireRecieve.java new file mode 100644 index 0000000..8de3afd --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/PlaywireRecieve.java @@ -0,0 +1,55 @@ +package net.grandtheftmc.core.listeners; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.playwire.events.AsyncPlaywireRecieveEvent; +import net.grandtheftmc.core.users.User; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.event.Listener; + +import java.util.UUID; + +/** + * Created by Timothy Lampen on 2017-12-06. + */ +public class PlaywireRecieve implements Listener { + + /** + * Disabled, done through command instead. + */ + //@EventHandler + public void onRecieve(AsyncPlaywireRecieveEvent event){ + UUID uuid = event.getUUID(); + if(Bukkit.getPlayer(uuid)==null) + return;//since this event would trigger ALL cores on ALL servers, a listener should only give rewards to people on the one server. + Player player = Bukkit.getPlayer(uuid); + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + + switch (event.getType()) { + case COUNTED: {//when the player has watched the video + user.setCouponCredits(user.getCouponCredits()+2); + player.sendMessage(Lang.REWARDS.f("&7Thanks for watching the ad! Here are &a2 &7coupon credits!")); + break; + } + case UNCOUNTED: {//when the player has watched too many videos in a certain time limit (not set by us, set by playwire) + break; + } + case BLOCKED: {//when the player blocks an ad with ad block + break; + } + case UNFILLED: {//when there is no ad to show the player + break; + } + case PING: {//when the playwire server is pinged + break; + } + case CONFIRM_SUBSCRIPTION: {//when the playwire channel is subscribed to (onEnable) + break; + } + case WELCOME: {//when the player opens the webpage (a guess) + break; + } + } + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/Save.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/Save.java new file mode 100644 index 0000000..af018f0 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/Save.java @@ -0,0 +1,17 @@ +package net.grandtheftmc.core.listeners; + +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.events.ServerSaveEvent; +import net.grandtheftmc.core.users.UserManager; + +public class Save implements Listener { + + @EventHandler + public void serverSaveEvent(ServerSaveEvent event) { + Core.getInstance().save(false); + UserManager.getInstance().getUsers().forEach(user -> user.updateAchievements()); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/SignChange.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/SignChange.java new file mode 100644 index 0000000..744ef35 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/SignChange.java @@ -0,0 +1,41 @@ +package net.grandtheftmc.core.listeners; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.users.User; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.SignChangeEvent; + +import java.util.UUID; + +public class SignChange implements Listener { + + @EventHandler + public void onSignChange(SignChangeEvent e) { + Player player = e.getPlayer(); + UUID uuid = player.getUniqueId(); + User u = Core.getUserManager().getLoadedUser(uuid); + if (Core.getWorldManager().usesEditMode(player.getWorld().getName()) && !u.hasEditMode()) { + e.setCancelled(true); + return; + } + if (u.isSpecial()) + for (int i = 0; i < 4; i++) { + e.setLine(i, Utils.f(e.getLine(i))); + } + /* + if (e.getBlock().getType() != Material.WALL_SIGN) return; + String line = ChatColor.stripColor(e.getLine(0)); + if (!line.startsWith("[") || !line.endsWith("]")) return; + String serverName = ChatColor.stripColor(e.getLine(0)).replace("[", "").replace("]", "").toLowerCase(); + ServerManager sm = Core.getServerManager(); + Server server = sm.getServer(serverName); + if (server == null) { + server = new Server(serverName, null, -1, null, -1, true, 0, 0, null, null, 0, null, Collections.singletonList(e.getBlock().getLocation())); + sm.getServers().add(server); + } else server.getJoinSigns().add(e.getBlock().getLocation()); + e.getPlayer().sendMessage(Utils.f("You added a join sign for server " + server.getName() + '.'));*/ + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/SwapHandItems.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/SwapHandItems.java new file mode 100644 index 0000000..a15bc03 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/SwapHandItems.java @@ -0,0 +1,20 @@ +package net.grandtheftmc.core.listeners; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.events.PlayerFActionEvent; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerSwapHandItemsEvent; + +public class SwapHandItems implements Listener { + + @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = false) + public void onPlayerSwapHandItems(PlayerSwapHandItemsEvent event) { + Player player = event.getPlayer(); + PlayerFActionEvent playerFActionEvent = new PlayerFActionEvent(player); + Core.getInstance().getServer().getPluginManager().callEvent(playerFActionEvent); + if (playerFActionEvent.isCancelled()) event.setCancelled(true); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/Teleport.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/Teleport.java new file mode 100644 index 0000000..d30e057 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/Teleport.java @@ -0,0 +1,112 @@ +package net.grandtheftmc.core.listeners; + +import java.util.Objects; + +import org.bukkit.Bukkit; +import org.bukkit.World; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerTeleportEvent; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.events.PlayerSwitchWorldEvent; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserManager; +import net.grandtheftmc.core.users.UserRank; + +public class Teleport implements Listener { + + + @EventHandler + public void onTeleport(PlayerTeleportEvent event) { + + // grab event variables + World fromWorld = event.getFrom().getWorld(); + World toWorld = event.getTo().getWorld(); + + if (!Objects.equals(fromWorld.getName(), toWorld.getName())) { + PlayerSwitchWorldEvent e = new PlayerSwitchWorldEvent(event.getPlayer(), event.getFrom(), event.getTo(), Core.getWorldManager().getWorldConfig(event.getTo().getWorld().getName())); + switch (e.getToWorldConfig().getType()) { + case USERRANK: + + // grab the user + User user = UserManager.getInstance().getUser(event.getPlayer().getUniqueId()).orElse(null); + if (user != null){ + UserRank requiredRank = UserRank.getUserRank(e.getToWorldConfig().getRestricted()); + + if (!user.isRank(requiredRank)){ + event.setCancelled(true); + } + } + + break; + case RESTRICTED: + e.setCancelled(true); + break; + default: + break; + } + Bukkit.getPluginManager().callEvent(e); + if (e.isCancelled()) event.setCancelled(true); + } + if (event.getCause() == PlayerTeleportEvent.TeleportCause.SPECTATE) { + event.setCancelled(true); + } + } + + /* + * // Try increasing this. May be dependent on lag. private final int + * TELEPORT_FIX_DELAY = 15; // ticks + * + * @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + * public void onPlayerTeleport(PlayerTeleportEvent event) { if + * (!Core.getSettings().getUseTeleportFix()) return; + * + * final Player player = event.getPlayer(); final int visibleDistance = + * Bukkit.getServer().getViewDistance() * 16; + * Bukkit.getScheduler().scheduleSyncDelayedTask(Core.getInstance(), new + * Runnable() { + * + * @Override public void run() { updateEntities(getPlayersWithin(player, + * visibleDistance)); } }, TELEPORT_FIX_DELAY); } + * + * public void updateEntities(List observers) { // Refresh every + * single player for (Player player : observers) updateEntity(player, + * observers); + * + * } + * + * public void updateEntity(Entity entity, List observers) { + * + * World world = entity.getWorld(); WorldServer worldServer = + * ReflectionAPI.getHandle(world); + * + * EntityTracker tracker = worldServer.tracker; EntityTrackerEntry entry = + * (EntityTrackerEntry) tracker.trackedEntities.get(entity.getEntityId()); + * + * List nmsPlayers = getNmsPlayers(observers); + * + * // Force Minecraft to resend packets to the affected clients + * entry.trackedPlayers.removeAll(nmsPlayers); + * entry.scanPlayers(nmsPlayers); } + * + * private List getNmsPlayers(List players) { + * List nsmPlayers = new ArrayList(); + * + * for (Player bukkitPlayer : players) { CraftPlayer craftPlayer = + * (CraftPlayer) bukkitPlayer; nsmPlayers.add(craftPlayer.getHandle()); } + * + * return nsmPlayers; } + * + * private List getPlayersWithin(Player player, int distance) { + * List res = new ArrayList(); int d2 = distance * distance; + * + * for (Player p : Bukkit.getOnlinePlayers()) { if (p.getWorld() == + * player.getWorld() && + * p.getLocation().distanceSquared(player.getLocation()) <= d2) { + * res.add(p); } } + * + * return res; } + */ + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/UpdateListener.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/UpdateListener.java new file mode 100644 index 0000000..6f1635c --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/UpdateListener.java @@ -0,0 +1,7 @@ +package net.grandtheftmc.core.listeners; + +/** + * Created by Liam on 16/10/2016. + */ +public class UpdateListener { +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/UserStateTransactionListener.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/UserStateTransactionListener.java new file mode 100644 index 0000000..6f0d85d --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/UserStateTransactionListener.java @@ -0,0 +1,83 @@ +package net.grandtheftmc.core.listeners; + +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.plugin.Plugin; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.currency.Currency; +import net.grandtheftmc.core.currency.component.CurrencySource; +import net.grandtheftmc.core.transaction.state.user.UserStateTransactionEvent; +import net.grandtheftmc.core.users.Pref; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserManager; +import net.grandtheftmc.core.util.PluginAssociated; +import net.grandtheftmc.core.util.json.JSONParser; + +public class UserStateTransactionListener implements Listener, PluginAssociated { + + /** The owning plugin */ + private final Plugin plugin; + + /** + * Create a UserStateTransactionListener that will listen and handle all user state transaction events. + * + * @param plugin - the owning plugin + */ + public UserStateTransactionListener(Plugin plugin){ + this.plugin = plugin; + } + + /** + * Listens in on user state transaction events. + * + * @param event - the event + */ + @EventHandler + public void onUserStateTransaction(UserStateTransactionEvent event){ + + Player player = event.getPlayer(); + JSONParser parser = new JSONParser(event.getTransaction().getPayload()); + + // get the type of the payload + if (parser.hasKey("type")){ + String type = parser.getString("type"); + + switch(type.toLowerCase()){ + case "currency": + Currency curr = Currency.fromID(parser.getString("currency")).orElse(null); + int amount = parser.getInt("amount"); + + if (curr != null && amount != 0){ + User coreUser = UserManager.getInstance().getUser(player.getUniqueId()).orElse(null); + if (coreUser != null){ + + // custom source unless vote token + CurrencySource source = CurrencySource.CUSTOM; + if (curr == Currency.VOTE_TOKEN){ + source = CurrencySource.VOTE; + } + + int result = coreUser.getPurse().deposit(source, curr, amount); + event.setProcessed(true); + + // if autoclaim votes + if (curr == Currency.VOTE_TOKEN && coreUser.getPref(Pref.AUTO_CLAIM_VOTE_REWARD)){ + Core.getVoteManager().spendAllVotes(player, coreUser); + } + } + } + break; + } + } + } + + /** + * {@inheritDoc} + */ + @Override + public Plugin getPlugin() { + return plugin; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/WeatherChange.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/WeatherChange.java new file mode 100644 index 0000000..d0505a8 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/listeners/WeatherChange.java @@ -0,0 +1,19 @@ +package net.grandtheftmc.core.listeners; + +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.weather.WeatherChangeEvent; + +import net.grandtheftmc.core.Core; + +public class WeatherChange implements Listener { + @EventHandler + public void onWeatherChange(WeatherChangeEvent e) { + if (Core.getSettings().stopWeatherChange(e.getWorld().getName())) { + if (e.toWeatherState()) { + e.setCancelled(true); + } + } + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/menus/Menu.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/menus/Menu.java new file mode 100644 index 0000000..6ec2e6d --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/menus/Menu.java @@ -0,0 +1,55 @@ +package net.grandtheftmc.core.menus; + +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.event.Listener; +import org.bukkit.inventory.Inventory; + +import net.grandtheftmc.core.util.Utils; + +public class Menu implements Listener { + + private final String name; + private final String displayName; + private final int size; + private Inventory inventory; + + public Menu(String name, int size, String displayName) { + this.name = name; + this.displayName = displayName; + this.size = size; + } + + public String getName() { + return this.name; + } + + public String getDisplayName() { + return this.displayName; + } + + public int getSize() { + return this.size; + } + + public void openFor(Player player) { + MenuOpenEvent event = new MenuOpenEvent(player, this); + Bukkit.getPluginManager().callEvent(event); + if(!event.isCancelled()) { + Inventory inv = Bukkit.createInventory(null, size, Utils.f(this.displayName)); + inv.setContents(event.getContents()); + player.openInventory(inv); + this.inventory = inv; + } + } + + public Inventory getInventory() { + return this.inventory; + } + + public void openFor(Player... p) { + for (Player player : p) { + this.openFor(player); + } + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/menus/MenuClickEvent.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/menus/MenuClickEvent.java new file mode 100644 index 0000000..d95c813 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/menus/MenuClickEvent.java @@ -0,0 +1,62 @@ +package net.grandtheftmc.core.menus; + + +import org.bukkit.entity.Player; +import org.bukkit.event.HandlerList; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.player.PlayerEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; + +public class MenuClickEvent extends PlayerEvent { + private static final HandlerList HANDLER_LIST = new HandlerList(); + + private final Menu menu; + private final Inventory inv; + private final int slot; + private final ItemStack item; + private final InventoryClickEvent event; + + public MenuClickEvent(Player player, Menu menu, Inventory inv, int slot, ItemStack item, InventoryClickEvent event) { + super(player); + this.menu = menu; + this.inv = inv; + this.slot = slot; + this.item = item; + this.event = event; + } + + public Menu getMenu() { + return this.menu; + } + + public int getSlot() { + return this.slot; + } + + public ItemStack getItem() { + return this.item; + } + + public Inventory getInv() { + return this.inv; + } + + public InventoryClickEvent getInventoryClickEvent() { + return this.event; + } + + public ClickType getClickType() { + return this.event.getClick(); + } + + @Override + public HandlerList getHandlers() { + return HANDLER_LIST; + } + + public static HandlerList getHandlerList() { + return HANDLER_LIST; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/menus/MenuCloseEvent.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/menus/MenuCloseEvent.java new file mode 100644 index 0000000..07b01b9 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/menus/MenuCloseEvent.java @@ -0,0 +1,29 @@ +package net.grandtheftmc.core.menus; + +import org.bukkit.entity.Player; +import org.bukkit.event.HandlerList; +import org.bukkit.event.player.PlayerEvent; + +public class MenuCloseEvent extends PlayerEvent { + private static final HandlerList HANDLER_LIST = new HandlerList(); + + private final Menu menu; + + public MenuCloseEvent(Player player, Menu menu) { + super(player); + this.menu = menu; + } + + public Menu getMenu() { + return this.menu; + } + + @Override + public HandlerList getHandlers() { + return HANDLER_LIST; + } + + public static HandlerList getHandlerList() { + return HANDLER_LIST; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/menus/MenuListener.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/menus/MenuListener.java new file mode 100644 index 0000000..210e418 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/menus/MenuListener.java @@ -0,0 +1,1561 @@ +package net.grandtheftmc.core.menus; + +import java.math.RoundingMode; +import java.text.DecimalFormat; +import java.time.YearMonth; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.UUID; +import java.util.stream.Collectors; + +import org.bukkit.Material; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.inventory.meta.SkullMeta; + +import net.grandtheftmc.ServerTypeId; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.database.dao.VoteDAO; +import net.grandtheftmc.core.giftcard.GiftcardAPI; +import net.grandtheftmc.core.nametags.NametagManager; +import net.grandtheftmc.core.playwire.PlaywireManager; +import net.grandtheftmc.core.servers.Server; +import net.grandtheftmc.core.servers.ServerManager; +import net.grandtheftmc.core.servers.ServerType; +import net.grandtheftmc.core.users.Pref; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.users.eventtag.EventTag; +import net.grandtheftmc.core.users.eventtag.EventTagDAO; +import net.grandtheftmc.core.users.eventtag.TagVisibility; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.voting.Reward; +import net.grandtheftmc.core.voting.RewardPack; +import net.grandtheftmc.core.voting.ShopItem; +import net.grandtheftmc.core.voting.VoteManager; +import net.grandtheftmc.core.voting.VoteReward; +import net.grandtheftmc.core.voting.crates.Crate; +import net.grandtheftmc.core.voting.crates.CrateReward; +import net.grandtheftmc.jedis.JedisChannel; +import net.grandtheftmc.jedis.JedisModule; +import net.grandtheftmc.jedis.message.ServerQueueMessage; +import net.md_5.bungee.api.ChatColor; +import net.md_5.bungee.api.chat.ClickEvent; +import net.md_5.bungee.api.chat.TextComponent; + +@SuppressWarnings("NestedSwitchStatement") +public class MenuListener implements Listener { + + @EventHandler + public void onOpenMenu(MenuOpenEvent e) { + Menu menu = e.getMenu(); + Player player = e.getPlayer(); + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); +// CosmeticType cosmeticType = CosmeticType.getType(menu.getName()); + /*if (Core.getSettings().loadCosmetics() && cosmeticType != null && cosmeticType.isEnabled(Core.getSettings().getType())) { + this.setPhoneDefaults(e); + int[] slots = new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 38, 39, 40, 41, 42}; + List cosmetics = cosmeticType.getCosmetics(user); + for (int i = 0; i < slots.length && i < cosmetics.size(); i++) { + Cosmetic cos = cosmetics.get(i); + e.setItem(slots[i], cos.getMenuItem(user)); + } + e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the cosmetics menu!")); + e.setItem(49, Utils.createItem(cosmeticType.getMaterial(), "&6&lCosmetics: " + cosmeticType.getDisplayName(), "&7Page 1")); + if (cosmetics.size() > 20) + e.setItem(50, Utils.createItem(Material.ARROW, "&6&lNext Page", "&7Page 2")); + e.setItem(51, Utils.createItem(Material.WEB, "&c&lRemove Cosmetic", "&7Click to remove your current " + cosmeticType.toString().charAt(0) + cosmeticType.toString().substring(1).toLowerCase())); + return; + }*/ + switch (menu.getName()) { + case "freecoupons": { + this.setPhoneDefaults(e); + DecimalFormat df = new DecimalFormat("#.##"); + df.setRoundingMode(RoundingMode.FLOOR); + ItemStack is = new ItemStack(Material.PAPER); + is.addUnsafeEnchantment(Enchantment.ARROW_DAMAGE, 1); + ItemMeta im = is.getItemMeta(); + im.addItemFlags(ItemFlag.HIDE_ENCHANTS); + im.setDisplayName(ChatColor.translateAlternateColorCodes('&', "&6Your Ad Credits:&b " + user.getCouponCredits())); + im.setLore(Arrays.asList(ChatColor.translateAlternateColorCodes('&', "&7Click to get the credit link"))); + is.setItemMeta(im); + + e.setItem(13, is); + e.setItem(21, Utils.createItem(Material.GOLD_NUGGET, "&6Convert &b50 &6Credits:", "&a$0.10")); + e.setItem(22, Utils.createItem(Material.GOLD_INGOT, "&6Convert &b100 &6Credits:", "&a$0.20")); + e.setItem(23, Utils.createItem(Material.GOLD_BLOCK, "&6Convert &b500 &6Credits:", "&a$1.00")); + e.setItem(31, Utils.createItem(Material.DIAMOND, "&6Convert &bAll &6Credits:", "&a$" + (df.format(user.getCouponCredits()/500.0)))); + e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Click to return to the rewards menu!")); + break; + } + case "chooseeventtag": { + this.setPhoneDefaults(e); + int[] slots = new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24,29,30,31,32,33}; + int selector = 0; + for(EventTag t : EventTag.values()) { + TagVisibility v = EventTagDAO.getTagVisibility(t); + if(v==TagVisibility.NO_ONE) + continue; + boolean unlocked = user.getUnlockedTags().contains(t); + if(v==TagVisibility.THOSE_WHO_HAVE_IT_UNLOCKED && !unlocked) + continue; + + int slot = slots[selector]; + boolean activated = user.getEquipedTag() == t; + if(unlocked) { + e.setItem(slot, Utils.createItem(Material.NAME_TAG, t.getBoldName(), "&6&lStatus: " + (activated ? "&a&lOn" : "&c&lOff"))); + } + else + e.setItem(slot, Utils.createItem(Material.NAME_TAG, t.getBoldName(), "&6&lStatus: &4&lLOCKED")); + selector++; + } + + e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Click to return to your account!")); + return; + } + case "topvoters": { + this.setPhoneDefaults(e); + + e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Click to return to the vote menu!")); + + int[] slots = new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24}; + + ServerUtil.runTaskAsync(() -> { + VoteDAO.VoteUser[] topVoters = Core.getInstance().getVoteManager().getTopVoters(); + if (topVoters == null) return; + + List items = new ArrayList<>(); + + for (VoteDAO.VoteUser voteUser : topVoters) { + ItemStack is = Utils.createItem(Material.SKULL_ITEM, 3, "&7#&6" + voteUser.getPossition() + "&7 " + voteUser.getName()); + SkullMeta im = (SkullMeta) is.getItemMeta(); + im.setOwner(voteUser.getName()); + List lore = new ArrayList<>(); + lore.add(Utils.f("&6Votes: &a&l" + voteUser.getVotes())); + String reward = null; + switch (voteUser.getPossition()) { + case 1: + reward = "&6Expected Prize: &a$&l100 Store Credit"; + break; + case 2: + case 3: + reward = "&6Expected Prize: &a$&l50 Store Credit"; + break; + case 4: + case 5: + reward = "&6Expected Prize: &a$&l25 Store Credit"; + break; + } + if (reward != null) lore.add(Utils.f(reward)); + im.setLore(lore); + is.setItemMeta(im); + items.add(is); + } + + ServerUtil.runTask(() -> { + for (int i = 0; i < items.size(); i++) + e.getMenu().getInventory().setItem(slots[i], items.get(i)); + + player.updateInventory(); + }); + }); + +// new BukkitRunnable() { +// @Override +// public void run() { +// try { +// ResultSet rs = Core.sql.prepareStatement("SELECT * FROM votes ORDER BY `votes`.`monthlyVotes` DESC LIMIT 10;").executeQuery(); +// int counter = 1; +// List items = new ArrayList<>(); +// while (rs.next()) { +// String name = rs.getString("name"); +// int votes = rs.getInt("monthlyVotes"); +// ItemStack is = Utils.createItem(Material.SKULL_ITEM, 3, "&7#&6" + counter + "&7 " + name); +// SkullMeta im = (SkullMeta)is.getItemMeta(); +// im.setOwner(name); +// List lore = new ArrayList<>(); +// lore.add(Utils.f("&6Votes: &a&l" + votes)); +// String reward = null; +// switch (counter) { +// case 1: +// reward = "&6Expected Prize: &a$&l100 Store Credit"; +// break; +// case 2: +// case 3: +// reward = "&6Expected Prize: &a$&l50 Store Credit"; +// break; +// case 4: +// case 5: +// reward = "&6Expected Prize: &a$&l25 Store Credit"; +// break; +// } +// if(reward!=null) { +// lore.add(Utils.f(reward)); +// } +// im.setLore(lore); +// is.setItemMeta(im); +// items.add(is); +// counter++; +// } +// new BukkitRunnable() { +// @Override +// public void run() { +// for(int i = 0; i < items.size(); i++) { +// e.getMenu().getInventory().setItem(slots[i], items.get(i)); +// } +// player.updateInventory(); +// } +// }.runTask(Core.getInstance()); +// } catch (SQLException e1) { +// e1.printStackTrace(); +// } +// } +// }.runTaskAsynchronously(Core.getInstance()); + } + case "confirmcratereward": { + Crate crate = user.getSelectedCrate(); + CrateReward reward = user.getConfirmingCrateReward(); + if (crate == null || reward == null) { + player.closeInventory(); + return; + } + List confirmLore = new ArrayList<>(reward.getRewardPack().get().stream().map(Reward::getDisplayName).collect(Collectors.toList())); + this.setConfirmDefaults(e, "&a&lClick to accept this reward:", "&c&lClick to cancel this reward and get refunded: &9&l" + crate.getCrateStars().getStars() + " crowbars&c&l.", confirmLore, null); + return; + } + case "confirmexpensivecrate": + Crate crate = user.getSelectedCrate(); + this.setConfirmDefaults(e, "&a&lClick to spend &9&l" + crate.getCrateStars().getCrowbars() + " Crowbar" + (crate.getCrateStars().getCrowbars() == 1 ? "" : "s") + "&a&l to open this " + crate.getCrateStars().getDisplayName() + "&7.", "&c&lCancel opening this " + crate.getCrateStars().getType() + "&7."); + return; + case "cosmetics": + return; + /*if (!Core.getSettings().loadCosmetics()) return; + this.setPhoneDefaults(e); + List types = Arrays.stream(new CosmeticType[]{CosmeticType.BLOCK, CosmeticType.HAT, CosmeticType.MORPH, CosmeticType.PARTICLE, CosmeticType.PET}).filter(t -> t.isEnabled(Core.getSettings().getType())).collect(Collectors.toList()); + int[] slots = types.size() > 6 ? new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 38, 39, 40, 41, 42} : new int[]{11, 13, 15, 29, 31, 33}; + for (int i = 0; i < types.size(); i++) { + CosmeticType t = types.get(i); + e.setItem(slots[i], Utils.createItem(t.getMaterial(), t.getColoredDisplayName(), t.getDescription())); + } + e.setItem(49, Utils.createItem(Material.ENDER_CHEST, "&6&lCosmetics", "&7Click to select a cosmetic type!")); + //e.setItem(51, Utils.createItem(Material.NAME_TAG, "&a&lNametags", "&7Click to apply nametags!")); + return;*/ + case "buycosmetic": + return; + /*Cosmetic c = user.getBuyingCosmetic(); + if (c == null || user.hasCosmetic(c) || c.getTokens() < 0 || !user.hasTokens(c.getTokens())) return; + this.setConfirmDefaults(e, "&a&lBuy " + c.getColoredDisplayName() + ' ' + c.getType().toString().charAt(0) + c.getType().toString().substring(1).toLowerCase() + " &a&lfor &e&l" + c.getTokens() + " Tokens", "&c&lCancel"); + return;*/ + case "petinfo": + this.setPhoneDefaults(e); + e.setItem(11, Utils.createItem(Material.CHEST, 3, "&c&lPet Data", "&7Click customize your pet!")); + e.setItem(15, Utils.createItem(Material.BANNER, "&c&lPet Name", "&7Click to change your pet's name!")); + e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Click to return to the pet menu!")); + e.setItem(49, Utils.createItem(Material.LEASH, "&c&lGuard Pet Customizer", "&7Customize your friendly follower!")); + return; + /*case "petdata": { + this.setPhoneDefaults(e); + IPet pet = EchoPetAPI.getAPI().getPet(player); + if (pet == null) { + player.closeInventory(); + return; + } + List list = pet.getPetType().getAllowedDataTypes(); + int[] slots = new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 38, 39, 40, 41, 42}; + Iterator it = list.iterator(); + for (int i = 0; i < 20; i++) { + if (!it.hasNext()) break; + PetData data = it.next(); + String name = "&c&l"; + for (String s : data.toString().split("_")) + name += s.charAt(0) + s.substring(1).toLowerCase() + ' '; + if (name.endsWith(" ")) name = name.substring(0, name.length() - 1); + e.setItem(slots[i], Utils.createItem(Material.INK_SACK, pet.getPetData().contains(data) ? 10 : 8, name)); + } + e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Click to return to the pet customizer!")); + e.setItem(49, Utils.createItem(Material.CHEST, "&c&lGuard Pet Data", "&7Customize your friendly follower!")); + return; + }*/ +// case "bannervariant": +// this.setPhoneDefaults(e); +// e.setItem(11, Utils.createItem(Material.SKULL_ITEM, 3, "&4&lBanner Hat", "&7Click to put the banner on your head!")); +// e.setItem(15, Utils.createItem(Material.BANNER, "&4&lBanner Cape", "&7Click to wear the banner on your back!")); +// e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Click to return to the banner menu!")); +// e.setItem(49, Utils.createItem(CosmeticType.BANNER.getMaterial(), CosmeticType.BANNER.getDisplayName() + " Hat or Cape", "&7Click to select where to equip the banner!")); +// return; +// case "blockvariant": +// this.setPhoneDefaults(e); +// e.setItem(11, Utils.createItem(Material.LEASH, "&2&lBalloon", "&7Click to get the block on a piece of string!")); +// e.setItem(15, Utils.createItem(Material.MONSTER_EGG, 3, "&2&lBlock Pet", "&7Click to get the block to follow you as a pet!")); +// e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Click to return to the blocks menu!")); +// e.setItem(49, Utils.createItem(CosmeticType.BANNER.getMaterial(), "&2&lBalloon or Block Pet", "&7Click to select how the block should follow you!")); +// return; +// case "particleshape": { +// this.setPhoneDefaults(e); +// int[] slots = new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 38, 39, 40, 41, 42}; +// Cosmetic.ParticleShape[] a = Cosmetic.ParticleShape.values(); +// for (int i = 0; i < slots.length && i < a.length; i++) { +// Cosmetic.ParticleShape shape = a[i]; +// e.setItem(slots[i], Utils.createItem(Material.INK_SACK, i, "&a&l" + shape.getDisplayName(), "&7Click to select this shape!")); +// } +// e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Click to return to the particles menu!")); +// e.setItem(49, Utils.createItem(CosmeticType.PARTICLE.getMaterial(), "&a&lParticle Shape", "&7Click to select the particles' shape!")); +// return; +// } +// case "nametags": { +// this.setPhoneDefaults(e); +// List list = Core.getNametagManager().getNametags(user); +// int[] slots = new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 38, 39, 40, 41, 42}; +// Iterator it = list.iterator(); +// for (int i = 0; i < 20; i++) { +// if (!it.hasNext()) break; +// Nametag tag = it.next(); +// e.setItem(slots[i], Utils.createItem(Material.NAME_TAG, tag.getDisplayName(), user.hasNametag(tag) ? "&7Click to apply this nametag!" : "&7Price: &e&l" + tag.getPrice() + " Tokens")); +// } +// e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the cosmetics menu!")); +// e.setItem(49, Utils.createItem(Material.CHEST, "&a&lNametags", "&7Select a nametag to apply to a pet!", "&7Soon, you will be able to apply nametags to", "&7your player character, vehicles and weapons.", "&7Page 1")); +// if (list.size() > 20) +// e.setItem(50, Utils.createItem(Material.ARROW, "&a&lNext Page", "&7Page 2")); +// +// e.setItem(51, Utils.createItem(Material.WEB, "&c&lRemove Nametag", "&7Click to remove a nametag from a pet.")); +// return; +// } +// case "buynametag": { +// Nametag tag = user.getBuyingNametag(); +// if (tag == null || !user.hasTokens(tag.getPrice())) return; +// this.setConfirmDefaults(e, "&a&lBuy " + tag.getDisplayName() + "&a&l for &e&l" + tag.getPrice() + " Token" + (tag.getPrice() == 1 ? "" : "s"), "&c&lCancel"); +// return; +// } +// case "applynametag": +// this.setPhoneDefaults(e); +// Nametag tag = user.getActivatingNametag(); +// if (tag == null || !user.hasNametag(tag)) return; +// Cosmetic pet = user.getLastPet(player); +// if (pet == null) +// e.setItem(11, Utils.createItem(Material.LEASH, "&c&lGuard Pet", "&7You have no pet to name!")); +// else e.setItem(11, pet.getMenuItem(user)); +// e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lCancel", "&7Return to the nametags menu!")); +// e.setItem(49, Utils.createItem(Material.NAME_TAG, tag.getDisplayName(), "&7Please select what you would like to name.")); +// return; + case "prefs": { + this.setPhoneDefaults(e); + User u = Core.getUserManager().getLoadedUser(player.getUniqueId()); + ServerType type = Core.getSettings().getType(); + int[] slots = new int[]{11, 12, 13, 14, 15, 29, 30, 31, 32, 33}; + + int i = 0; + for (Pref pref : Pref.values()) + if (pref.isEnabled(player, u, type)) { + boolean b = u.getPref(pref); + ItemStack achievementItem = Utils.createItem(pref.getMaterial(), pref.getMaterialData(), + (b ? "&a" : "&c") + "&l" + pref.getDisplayName(), "&7Click to " + (b ? "disable." : "enable.")); + Utils.applyItemFlags(achievementItem, ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE); + e.setItem(slots[i], achievementItem); + e.setItem(slots[i] + 9, Utils.createItem(Material.INK_SACK, b ? 10 : 8, (b ? "&a" : "&c") + "&l" + pref.getDisplayName(), "&7Click to " + (b ? "disable." : "enable."))); + i++; + } + e.setItem(49, Utils.createItem(Material.REDSTONE_COMPARATOR, "&5&lPreferences", "&7Toggle your " + (Core.getSettings().isSister() ? "stuff" : "shit") + "!")); + return; + } + case "rewards": { + this.setPhoneDefaults(e); + + if(!Core.getSettings().isSister()) { + e.setItem(11, Utils.createItem(Material.DOUBLE_PLANT, "&e&lVote", user.getVotes(), "&7Earn awesome rewards!", "", "&7Total Votes: &e&l" + user.getVotes(), "", "&7Vote to get more rewards!")); + e.setItem(20, Utils.createItem(Material.INK_SACK, user.getVotes() > 0 ? 10 : 8, "&e&lVote Streak", user.getVoteRecord().getStreak() > 64 ? 64 : user.getVoteRecord().getStreak(), + "&7Vote at least once a day to", "&7increase your streak! ", "&7Every day gives you an extra 5%", "&7chance to get a double reward!", "&7Vote on all &e4 &7sites for maximum rewards!", + "", "&7Current Streak: &a&l" + user.getVoteRecord().getStreak(), "&7Double Reward Chance: &a&l" + user.getDoubleVoteChance() + '%', "", + user.canVoteStreak() ? "&7Vote &a&lnow&7 to raise your streak!" : "&7Time Left: &c&l" + Utils.timeInMillisToText(user.getTimeUntilVoteStreak().isPresent() ? user.getTimeUntilVoteStreak().get().getTime() : 0))); + + e.setItem(22, Utils.createItem(Material.PAPER, "&a&lFree Store Giftcards", "&7Earn free store giftcards by", "&7watching ads! ")); + } + + UserRank rank = user.getUserRankNonTrial().isHigherThan(UserRank.SUPREME) ? UserRank.SUPREME : user.getUserRankNonTrial(); + boolean canClaimMonthly = user.canClaimMonthlyReward(); + if (rank == UserRank.DEFAULT) { + List lore = new ArrayList<>(Arrays.asList("&7Buy a &6&lDonor Rank&7 at", "&a&n" + Core.getSettings().getStoreLink(), "", "&7to get monthly &e&lTokens&7!", "")); + for (UserRank r : new UserRank[]{UserRank.VIP, UserRank.PREMIUM, UserRank.ELITE, UserRank.SPONSOR, UserRank.SUPREME}) + lore.add(r.getColoredNameBold() + "&7: &e&l" + r.getMonthlyTokens() + " Tokens"); + Map> monthly = Core.getVoteManager().getMonthlyRewards(); + if (!monthly.isEmpty()) { + lore.add(""); + lore.add("&7Extra rewards:"); + for (Map.Entry> userRankListEntry : monthly.entrySet()) { + lore.addAll(userRankListEntry.getValue().stream().map(r -> rank.getColoredNameBold() + "&7: " + r.getDisplayName()).collect(Collectors.toList())); + } + } + e.setItem(13, Utils.createItem(Material.COAL, "&c&lDonor Reward", lore)); + } else { + List lore = new ArrayList<>(Arrays.asList("&7As a donator you are entitled to", "&e&l" + rank.getMonthlyTokens() + " Tokens&7 every month!", "&7Upgrade your rank for more!", "", + canClaimMonthly ? "&aClick to claim!" : "&7Next Reward: &c&l" + Utils.timeInMillisToText(user.getTimeUntilMonthlyReward()))); + Map> monthly = Core.getVoteManager().getMonthlyRewards(); + if (monthly.containsKey(rank)) { + lore.add(""); + lore.add("&7Extra rewards:"); + lore.addAll(monthly.get(rank).stream().map(RewardPack::getDisplayName).collect(Collectors.toList())); + } + e.setItem(13, Utils.createItem(canClaimMonthly ? rank.getMaterial() : Material.COAL, rank.getColoredNameBold() + " Reward", + lore)); + } + List lore = new ArrayList<>(Arrays.asList("&7Come back every day to claim:", "&e&l2 Tokens")); + lore.addAll(Core.getVoteManager().getDailyRewards().stream().map(RewardPack::getDisplayName).collect(Collectors.toList())); + lore.add(""); + lore.add(user.canClaimDailyReward() ? "&aClick to claim!" : "&7Next Reward: &c&l" + Utils.timeInMillisToText(user.getTimeUntilDailyReward())); + e.setItem(15, Utils.createItem(Material.NETHER_STAR, "&a&lDaily Reward", lore)); + lore = new ArrayList<>(Arrays.asList("&7Claim your reward daily to", "&7increase your streak! ", "&7Every day gives you an extra 5%", "&7chance to increase your reward to:", "&e&l5 Tokens")); + lore.addAll(Core.getVoteManager().getLuckyDailyRewards().stream().map(RewardPack::getDisplayName).collect(Collectors.toList())); + lore.add(""); + lore.add("&7Current Streak: &a&l" + user.getDailyStreak()); + lore.add("&7Lucky Chance: &a&l" + user.getLuckyDailyChance() + '%'); + lore.add(""); + lore.add(user.canClaimDailyReward() ? "&7Claim &a&lnow&7 to raise your streak!" : "&7Next Reward: &c&l" + Utils.timeInMillisToText(user.getTimeUntilDailyReward())); + e.setItem(24, Utils.createItem(Material.INK_SACK, user.canClaimDailyReward() ? 10 : 8, "&a&lDaily Reward Streak", lore, user.getDailyStreak() > 64 ? 64 : user.getDailyStreak())); + e.setItem(49, Utils.createItem(Material.EXP_BOTTLE, "&a&lRewards", "&7Click to claim your rewards!")); + return; + } + case "vote": { + this.setPhoneDefaults(e); + int[] slots = new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33}; + VoteManager vm = Core.getVoteManager(); + int i = 0; + for (VoteReward reward : vm.getChanceVoteRewards()) { + List l = new ArrayList<>(); + l.add(""); + l.add(Utils.f("&7Chance: &a&l" + reward.getChance() + "&a%")); + if (reward.getRewardPack().get().size() > 1) { + l.add(Utils.f("&7Contains rewards:")); + l.addAll(reward.getRewardPack().get().stream().map(r -> Utils.f(r.getDisplayName())).collect(Collectors.toList())); + } + l.add(""); + ItemStack item = reward.getItem(); + ItemMeta meta = item.getItemMeta(); + meta.setDisplayName(Utils.f(reward.getDisplayName())); + meta.setLore(l); + item.setItemMeta(meta); + Utils.applyItemFlags(item, ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE); + e.setItem(slots[i], item); + i++; + } + // + +// new BukkitRunnable() { +// @Override +// public void run() { +// Optional voteUser = VoteDAO.getTopVoter(); +// if(!voteUser.isPresent()) return; +// +// ItemStack is = Utils.createItem(Material.SKULL_ITEM, 3, "&e&lThis Month's Top Voters", "&7The top voters of the month can win up to &a$&l100 Store Credit&7!"); +// SkullMeta meta = (SkullMeta) is.getItemMeta(); +// meta.setOwner(voteUser.get().getName()); +// is.setItemMeta(meta); +// +// ServerUtil.runTask(() -> { +// e.getMenu().getInventory().setItem(39, is); +// player.updateInventory(); +// }); +// +// ItemStack item = Utils.createItem(Material.SKULL_ITEM, 3, "&e&lLast Month's Top Voters"); +// SkullMeta im = (SkullMeta) item.getItemMeta(); +// List lore = new ArrayList<>(); +// +// Optional optional = VoteDAO.getLastMonthsVoters(); +// if(!optional.isPresent()) return; +// +// for(VoteDAO.VoteUser voter : optional.get()) { +// im.setOwner(voter.getName()); +// lore.add(Utils.f("&7#&6" + voter.getPossition() + "&7 " + voter.getName())); +// } +// +// im.setLore(lore); +// item.setItemMeta(im); +// +// ServerUtil.runTask(() -> { +// e.getMenu().getInventory().setItem(41, item); +// player.updateInventory(); +// }); +// } +// }.runTaskAsynchronously(Core.getInstance()); + + ServerUtil.runTaskAsync(() -> { + VoteDAO.VoteUser[] topVoters = Core.getInstance().getVoteManager().getTopVoters(); + if(topVoters == null || topVoters.length == 0) return; + + // get the first place guy + VoteDAO.VoteUser topVoter = topVoters[0]; + + ItemStack is = Utils.createItem(Material.SKULL_ITEM, 3, "&e&lThis Month's Top Voters", "&7The top voters of the month can win up to &a$&l100 Store Credit&7!"); + SkullMeta meta = (SkullMeta) is.getItemMeta(); + meta.setOwner(topVoter.getName()); + is.setItemMeta(meta); + + ServerUtil.runTask(() -> { + e.getMenu().getInventory().setItem(39, is); + player.updateInventory(); + }); + + ItemStack item = Utils.createItem(Material.SKULL_ITEM, 3, "&e&lLast Month's Top Voters"); + SkullMeta im = (SkullMeta) item.getItemMeta(); + List lore = new ArrayList<>(); + + VoteDAO.VoteUser[] lastMonthsVoters = Core.getInstance().getVoteManager().getLastTopVoters(); + if(lastMonthsVoters == null || lastMonthsVoters.length == 1) return; + + for(VoteDAO.VoteUser voter : lastMonthsVoters) { + if (voter != null){ + im.setOwner(voter.getName()); + lore.add(Utils.f("&7#&6" + voter.getPossition() + "&7 " + voter.getName())); + } + } + + im.setLore(lore); + item.setItemMeta(im); + + ServerUtil.runTask(() -> { + e.getMenu().getInventory().setItem(41, item); + player.updateInventory(); + }); + }); + + // + + ItemStack is = new ItemStack(Material.SKULL_ITEM, 1, (short) 3); + SkullMeta im = (SkullMeta) is.getItemMeta(); + YearMonth lastMonthStr = YearMonth.now(); + DateTimeFormatter monthFormatter = DateTimeFormatter.ofPattern("MMMM"); + im.setDisplayName(Utils.f("&e&lYour Votes")); + im.setLore(Arrays.asList(Utils.f("&eTotal Votes Ever: &7" + lastMonthStr.format(monthFormatter)), Utils.f("&eVotes: &7" + user.getVoteRecord().getTotalVotes()))); + im.setOwner(player.getName()); + is.setItemMeta(im); + e.setItem(40, is); + + + e.setItem(i > 9 ? 38 : 29, Utils.createItem(Material.EMPTY_MAP, + "&e&lVote Link", "&7Click to go to the voting webpage!", "", "&a&nvote.grandtheftmc.net")); + List lore = new ArrayList<>(Arrays.asList("&7With every vote you are guaranteed", + "&7to receive these items:")); + lore.addAll(vm.getGuaranteedVoteRewards().stream().map(r -> "&7" + r.getDisplayName()).collect(Collectors.toList())); + lore.addAll(Arrays.asList("&7Get lucky and receive extra rare rewards!", "", "&7Votes: &e&l" + user.getVotes(), "")); + + if (user.getVotes() > 1) + lore.addAll(Arrays.asList("&aRight click to claim all votes!", "&aLeft click to claim 1 vote!")); + else lore.add(user.getVotes() == 1 ? "&aClick to claim your rewards!" : "&7Vote on all &e4 &7sites for maximum rewards!"); + e.setItem(i > 9 ? 40 : 31, Utils.createItem(Material.CHEST, "&e&lVoting Rewards", lore)); + e.setItem(i > 9 ? 42 : 33, Utils.addItemFlags(Utils.createItem(Material.FLINT_AND_STEEL, 45, + "&9&lCrowbars: " + user.getCrowbars(), "&7Crowbars are used to open crates.", "", + "&7&oFind crates at spawn near the teleporter!"), ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE)); + // TODO figure out if this removes durability bar + + e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the rewards menu!")); + lore = new ArrayList<>(Arrays.asList("&7Earn awesome rewards!", "", "&7Votes: &e&l" + user.getVotes(), "")); + if (user.getVotes() > 1) + lore.addAll(Arrays.asList("&aRight click to claim all votes!", "&aLeft click to claim 1 vote!")); + else lore.add(user.getVotes() == 1 ? "&aClick to claim your rewards!" : "&7Vote on all &e4 &7sites for maximum rewards!"); + e.setItem(49, Utils.createItem(Material.DOUBLE_PLANT, "&e&lVote", lore, user.getVotes())); + e.setItem(51, + Utils.createItem(Material.BOOK_AND_QUILL, "&e&lToken Shop", "&7Buy amazing items with your tokens!")); + return; + } + case "tokenshop": { + this.setPhoneDefaults(e); + List items = Core.getVoteManager().getShopItems(); + int[] slots = new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 38, 39, 40, 41, 42}; + Iterator it = items.iterator(); + for (int i = 0; i < 20; i++) { + if (!it.hasNext()) + break; + ShopItem item = it.next(); + ItemStack stack = item.getItem().clone(); + ItemMeta meta = stack.getItemMeta(); + meta.setDisplayName(Utils.f("&3&l" + item.getName())); + meta.setLore(Arrays.asList("", + Utils.f("&7Price: &" + (user.hasTokens(item.getPrice()) ? "e" : "c") + "&l" + item.getPrice() + (item.getPrice() == 1 ? " Token" : " Tokens")))); + stack.setItemMeta(meta); + e.setItem(slots[i], stack); + } + e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the voting menu!")); + e.setItem(49, Utils.createItem(Material.BOOK_AND_QUILL, "&e&lToken Shop", "&7Page 1")); + if (items.size() > 20) + e.setItem(50, Utils.createItem(Material.ARROW, "&e&lNext Page", "&7Page 2")); + return; + } + case "buyshopitem": + ShopItem item = user.getBuyingShopItem(); + if (item == null || !user.hasTokens(item.getPrice())) return; + this.setConfirmDefaults(e, "&a&lBuy " + item.getName() + "&a&l for &e&l" + item.getPrice() + " Token" + (item.getPrice() == 1 ? "" : "s"), "&c&lCancel"); + return; + case "serverwarper": + if (!Core.getSettings().serverWarperEnabled()) + return; + this.setPhoneDefaults(e); + List lore = Arrays.stream(new String[]{"gtm1", "gtm2", "gtm3", "gtm4", "gtm5", "gtm6"}).map(st -> Core.getServerManager().getServer(st)).filter(Objects::nonNull).map(s -> Utils.f("&7&lGTM &a&l" + s.getNumber() + "&7: " + (s.isOffline() ? "&c&lOffline" : "&a" + s.getOnlinePlayers() + "&7/&a" + s.getMaxPlayers()))).collect(Collectors.toList()); + lore.add(Utils.f("&0")); + lore.add(ServerType.GTM.getDescription()); + e.setItem(11, Utils.createItem(ServerType.GTM.getIcon(), ServerType.GTM.getDisplayName(), lore)); + + if (!Core.getSettings().isSister()) { + this.addServerIcon(e, "creative1", 15); + // this.addServerIcon(e, "hub1", 47); + this.addServerIcon(e, "vice1", 13); + } + + e.setItem(49, Utils.createItem(Material.COMPASS, "&e&lServer Warper", "&7Click to join a server!")); + break; + case "gtmservers": + if (!Core.getSettings().serverWarperEnabled()) + return; + this.setPhoneDefaults(e); + int[] slots = new int[]{11, 13, 15, 29, 31, 33}; + List gtmServers = Core.getServerManager().getServers(ServerType.GTM); + Iterator it = gtmServers.iterator(); + for (int i = 0; i < slots.length && it.hasNext(); i++) { + Server server = it.next(); + this.addServerIcon(e, server, server.getType(), slots[i]); + } + e.setItem(49, Utils.createItem(Material.COMPASS, "&e&lServer Warper", "&7Click to join a server!")); + e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Go back to the server warper!")); + break; + + case "hubservers": + + if (!Core.getSettings().serverWarperEnabled()) + return; + + this.setPhoneDefaults(e); + int[] hubSlots = new int[]{11, 13, 15, 20, 22, 24, 29, 31, 33, 38, 40, 42}; + List gtmHubServers = Core.getServerManager().getServers(ServerType.HUB); + Iterator serverIterator = gtmHubServers.iterator(); + for (int i = 0; i < hubSlots.length && serverIterator.hasNext(); i++) { + Server server = serverIterator.next(); + this.addServerIcon(e, server, server.getType(), hubSlots[i]); + } + e.setItem(49, Utils.createItem(Material.COMPASS, "&e&lHub Warper", "&7Click to join a server!")); + e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Go back to the server warper!")); + return; + } + + } + + public void addServerIcon(MenuOpenEvent e, String server, int slot) { + Server s = Core.getServerManager().getServer(server); + this.addServerIcon(e, s, s == null ? ServerType.NONE : s.getType(), slot); + } + + public void addServerIcon(MenuOpenEvent e, Server s, ServerType type, int slot) { + String lore = ""; + if (type == ServerType.GTM && s.getNumber() == 4) + lore = "&8&lEpicStun &4&lCommunity &e&lServer &8&l(German/Deutsch)"; + e.setItem(slot, Utils.createItem(type.getIcon(), + type.getDisplayName() + (s == null ? "" : " &a&l" + s.getNumber()), + s == null || s.isOffline() ? "&c&lOffline!" + : "&a" + s.getOnlinePlayers() + "&7/&a" + s.getMaxPlayers(), + "", Utils.f(lore), type.getDescription())); + } + + @EventHandler + public void onClickMenu(MenuClickEvent e) { + Menu menu = e.getMenu(); + Player player = e.getPlayer(); + UUID uuid = player.getUniqueId(); + ItemStack item = e.getItem(); + Inventory inv = e.getInv(); + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + if (item == null) return; +// CosmeticType cosmeticType = CosmeticType.getType(menu.getName()); +// if (Core.getSettings().loadCosmetics() && cosmeticType != null) { +// switch (item.getType()) { +// case ARROW: +// int page = Integer.parseInt(ChatColor.stripColor(item.getItemMeta().getLore().get(0)).replace("Page ", "")); +// this.setPhoneDefaults(inv); +// int[] slots = new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 38, 39, 40, 41, 42}; +// List cosmetics = cosmeticType.getCosmetics(user); +// for (int i = 0; i < slots.length && (page - 1) * 20 + i < cosmetics.size(); i++) { +// Cosmetic cos = cosmetics.get((page - 1) * 20 + i); +// inv.setItem(slots[i], cos.getMenuItem(user)); +// } +// inv.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the cosmetics menu!")); +// if (page > 1) +// inv.setItem(48, Utils.createItem(Material.ARROW, "&6&lPrevious Page", "&7Page " + (page - 1))); +// inv.setItem(49, Utils.createItem(cosmeticType.getMaterial(), "&6&lCosmetics: " + cosmeticType.getDisplayName(), "&7Page " + page)); +// if (cosmetics.size() > (20 * page)) +// inv.setItem(50, Utils.createItem(Material.ARROW, "&6&lNext Page", "&7Page " + (page + 1))); +// inv.setItem(51, Utils.createItem(Material.WEB, "&c&lRemove Cosmetic", "&7Click to remove your current " + cosmeticType.toString().charAt(0) + cosmeticType.toString().substring(1).toLowerCase())); +// return; +// case REDSTONE: +// MenuManager.openMenu(player, "cosmetics"); +// return; +// case WEB: +// switch (cosmeticType) { +// /*case PET: +// IPet pet = EchoPetAPI.getAPI().getPet(player); +// if (pet != null) { +// player.sendMessage(Lang.GUARDPETS.f("&7You removed your " + pet.getPetName() + "&7!")); +// EchoPetAPI.getAPI().removePet(player, false, false); +// Core.getUserManager().getLoadedUser(uuid).removeLastCosmetic(cosmeticType); +// return; +// } +// user.removeLastCosmetic(cosmeticType); +// player.sendMessage(Lang.GUARDPETS.f("&7You currently do not have a Pet activated!")); +// return;*/ +// default: +// Set set = Core.getUltimateCosmetics().getApi().getCosmetics(player); +// Iterator it = set.iterator(); +// for (int i = 0; i < set.size() && it.hasNext(); i++) { +// com.j0ach1mmall3.ultimatecosmetics.api.Cosmetic c = it.next(); +// if ((cosmeticType == CosmeticType.GADGET && Cosmetic.getGadgetByIdentifier(c.getCosmeticStorage().getIdentifier()) != null) || c.getCosmeticStorage().getIdentifier().startsWith(cosmeticType.toString().toLowerCase())) +// c.remove(Core.getUltimateCosmetics()); +// } +// user.removeLastCosmetic(cosmeticType); +// player.sendMessage(Lang.COSMETICS.f("&7You removed all cosmetics from the category " + cosmeticType.getDisplayName() + "&7!")); +// return; +// } +// default: +// Cosmetic cos = item.hasItemMeta() && item.getItemMeta().hasDisplayName() ? cosmeticType.getCosmeticFromDisplayName(item.getItemMeta().getDisplayName()) : null; +// if (cos == null) return; +// if (!user.hasCosmetic(cos)) { +// if (cos.getTokens() < 0 || !user.hasTokens(cos.getTokens())) { +// player.sendMessage(Lang.COSMETICS.f("&7You don't have access to this cosmetic! Buy cosmetics at &a&lstore.grandtheftmc.net&7!")); +// return; +// } +// user.setBuyingCosmetic(cos); +// MenuManager.openMenu(player, "buycosmetic"); +// return; +// } +// switch (cosmeticType) { +// case BANNER: +// case BLOCK: +// case PARTICLE: +// user.setActivatingCosmetic(cos); +// MenuManager.openMenu(player, cosmeticType == CosmeticType.BANNER ? "bannervariant" : cosmeticType == CosmeticType.BLOCK ? "blockvariant" : "particleshape"); +// return; +// case PET: +// player.closeInventory(); +// cos.activate(user, player); +// MenuManager.openMenu(player, "petinfo"); +// return; +// default: +// player.closeInventory(); +// cos.activate(user, player); +// return; +// } +// } +// } + switch (menu.getName()) { + case "freecoupons": { + int credits = 0; + switch (item.getType()) { + case PAPER: { + TextComponent m0 = new TextComponent(); + m0.addExtra(Lang.REWARDS.f("")); + + TextComponent m1 = new TextComponent("[Click Here For Free Credits]"); + m1.setColor(ChatColor.BLUE); + m1.setBold(true); + m1.setClickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL, PlaywireManager.getPlaywireLink(player.getUniqueId()))); + + + player.spigot().sendMessage(m0, m1); + player.closeInventory(); + return; + } + case GOLD_NUGGET: { + credits = 50; + break; + } + case GOLD_INGOT: { + credits = 100; + break; + } + case GOLD_BLOCK: { + credits = 500; + break; + } + case DIAMOND: { + credits = user.getCouponCredits(); + break; + } + case REDSTONE: { + MenuManager.openMenu(player, "rewards"); + return; + } + } + + if(user.getCouponCredits() { + if(obj==null || user.getCouponCredits() list = Core.getNametagManager().getNametags(user); +// int[] slots = new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 38, 39, 40, 41, 42}; +// Iterator it = list.iterator(); +// for (int i = (page - 1) * 20; i < 20 * page; i++) { +// if (!it.hasNext()) +// break; +// Nametag tag = it.next(); +// inv.setItem(slots[i], Utils.createItem(Material.NAME_TAG, tag.getDisplayName(), user.hasNametag(tag) ? "&7Click to apply this nametag!" : "&7Price: &e&l" + tag.getPrice() + " Tokens")); +// } +// inv.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the cosmetics menu!")); +// if (page > 1) +// inv.setItem(48, Utils.createItem(Material.ARROW, "&a&lPrevious Page", "&7Page " + (page - 1))); +// inv.setItem(49, Utils.createItem(Material.CHEST, "&a&lNametags", "&7Select a nametag to apply to a pet!", "&7Soon, you will be able to apply nametags to", "&7your player character, vehicles and weapons.", "&7Page " + page)); +// if (list.size() > (20 * page)) +// inv.setItem(50, Utils.createItem(Material.ARROW, "&a&lNext Page", "&7Page " + (page + 1))); +// inv.setItem(51, Utils.createItem(Material.WEB, "&c&lRemove Nametag", "&7Click to remove a nametag from a pet.")); +// return; +// case REDSTONE: +// MenuManager.openMenu(player, "cosmetics"); +// return; +// default: +// Nametag tag = item.hasItemMeta() && item.getItemMeta().hasDisplayName() ? Core.getNametagManager().getNametagFromDisplayName(item.getItemMeta().getDisplayName()) : null; +// if (tag == null) return; +// if (user.hasNametag(tag)) { +// user.setActivatingNametag(tag); +// MenuManager.openMenu(player, "applynametag"); +// return; +// } +// if (!user.hasTokens(tag.getPrice())) { +// player.sendMessage(Lang.NAMETAGS.f("&7You do not have the &e&l" + tag.getPrice() + " Token " + (tag.getPrice() == 1 ? "" : "s") + "&7!")); +// return; +// } +// user.setBuyingNametag(tag); +// MenuManager.openMenu(player, "buynametag"); +// return; +// } +// case "buynametag": +// switch (item.getType()) { +// case STAINED_GLASS_PANE: +// switch (item.getDurability()) { +// case 5: +// User u = Core.getUserManager().getLoadedUser(uuid); +// Nametag tag = u.getBuyingNametag(); +// u.setBuyingNametag(null); +// if (tag == null) { +// player.closeInventory(); +// player.sendMessage(Lang.NAMETAGS.f("&7You are not buying a nametag!")); +// return; +// } +// player.closeInventory(); +// if (tag.getPrice() > 0 && !u.hasTokens(tag.getPrice())) { +// player.sendMessage( +// Lang.TOKEN_SHOP.f("&7You do not have the &e&l" + tag.getPrice() + " Tokens&7 to pay for this nametag!")); +// +// return; +// } +// player.sendMessage( +// Lang.TOKEN_SHOP.f("&7You bought &a" + tag.getDisplayName() + "&7 for &e&l" + tag.getPrice() + " Token" + (tag.getPrice() == 1 ? "" : "s") + "&7!")); +// u.takeTokens(tag.getPrice()); +// u.giveNametag(tag); +// u.insertLog(player, "buyNametag", Reward.RewardType.NAMETAG.toString(), tag.getName(), 1, tag.getPrice()); +// UpdateEvent ev = new UpdateEvent(player, UpdateEvent.UpdateReason.TOKENS); +// Bukkit.getPluginManager().callEvent(ev); +// return; +// case 14: +// Core.getUserManager().getLoadedUser(uuid).setBuyingShopItem(null); +// MenuManager.openMenu(player, "nametags"); +// return; +// default: +// return; +// } +// default: +// return; +// } +// case "applynametag": +// switch (item.getType()) { +// case REDSTONE: +// MenuManager.openMenu(player, "nametags"); +// return; +// default: +// Nametag tag = user.getActivatingNametag(); +// if (tag == null) { +// MenuManager.openMenu(player, "nametags"); +// return; +// } +// +// if (item.hasItemMeta() && item.getItemMeta().hasDisplayName()) { +// Cosmetic pet = user.getLastPet(player); +// if (pet != null && CosmeticType.PET.getCosmeticFromDisplayName(item.getItemMeta().getDisplayName()) == pet) { +// user.setPetNametag(player, pet, tag); +// player.sendMessage(Lang.NAMETAGS.f("&7You have renamed your pet to " + tag.getDisplayName() + "&7!")); +// player.closeInventory(); +// return; +// } +// } +// return; +// } + case "rewards": + switch (item.getType()) { + case PAPER: { + if(Core.getSettings().isSister()) + return; + MenuManager.openMenu(player, "freecoupons"); + return; + } + case DOUBLE_PLANT: + MenuManager.openMenu(player, "vote"); + return; + case NETHER_STAR: + Core.getVoteManager().claimDaily(player, Core.getUserManager().getLoadedUser(uuid)); + return; + case INK_SACK: + switch (ChatColor.stripColor(item.getItemMeta().getDisplayName())) { + case "Vote Streak": + MenuManager.openMenu(player, "vote"); + return; + case "Daily Reward Streak": + Core.getVoteManager().claimDaily(player, Core.getUserManager().getLoadedUser(uuid)); + return; + default: + return; + } + case EXP_BOTTLE: + if (user.canClaimDailyReward()) + Core.getVoteManager().claimDaily(player, user); + if (user.canClaimMonthlyReward()) + Core.getVoteManager().claimMonthly(player, user); + if (user.getVotes() > 0) + Core.getVoteManager().spendVote(player, user); + default: + if (item.getType() == Material.COAL || UserRank.getUserRank(item.getType()) != null) + Core.getVoteManager().claimMonthly(player, Core.getUserManager().getLoadedUser(uuid)); + return; + } + case "prefs": + switch (item.getType()) { + case REDSTONE: + MenuManager.openMenu(player, "account"); + return; + default: + if (!item.hasItemMeta() || !item.getItemMeta().hasDisplayName()) + return; + User u = Core.getUserManager().getLoadedUser(uuid);// + Pref pref = Pref.getPrefByDisplayName(ChatColor.stripColor(item.getItemMeta().getDisplayName())); + if (pref == null) return; + if (!pref.isEnabled(player, u, Core.getSettings().getType())) { + player.sendMessage(Lang.PREFS.f("&7You can't use this pref!")); + return; + } + u.togglePref(player, pref); + player.sendMessage(Lang.PREFS + .f("&7You turned " + (u.getPref(pref) ? "&a&lon" : "&c&loff") + "&7 " + pref.getDisplayName() + '!')); + MenuManager.updateMenu(player, "prefs"); + return; + } + case "topvoters": { + switch (item.getType()) { + case REDSTONE: + MenuManager.openMenu(player, "vote"); + return; + } + } + case "vote": + switch (item.getType()) { + case SKULL_ITEM: + if (e.getSlot() == 39) + MenuManager.openMenu(player, "topvoters"); + return; + case CHEST: + case EMPTY_MAP: + player.closeInventory(); + player.sendMessage(Utils.f(Lang.VOTE + "&7Vote for the server at &a&n" + Core.getVoteManager().getVoteLink() + "&7!")); + return; + case BOOK_AND_QUILL: + MenuManager.openMenu(player, "tokenshop"); + return; + case DOUBLE_PLANT: + if (user.getVotes() == 0) { + player.closeInventory(); + player.sendMessage(Utils.f(Lang.VOTE + "&7Vote for the server at &a&n" + Core.getVoteManager().getVoteLink() + "&7 to claim rewards!")); + return; + } + if (user.getVotes() > 1 && (e.getClickType() == ClickType.RIGHT || e.getClickType() == ClickType.SHIFT_RIGHT)) + Core.getVoteManager().spendAllVotes(player, user); + else + Core.getVoteManager().spendVote(player, user); + return; + case REDSTONE: + MenuManager.openMenu(player, "rewards"); + return; + default: + return; + } + case "tokenshop": + switch (item.getType()) { + case ARROW: + int page = Integer + .parseInt(ChatColor.stripColor(item.getItemMeta().getLore().get(0)).replace("Page ", "")); + this.setPhoneDefaults(inv); + List items = Core.getVoteManager().getShopItems(); + int[] slots = new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 38, 39, 40, 41, + 42}; + Iterator it = items.iterator(); + for (int i = (page - 1) * 20; i < 20 * page; i++) { + if (!it.hasNext()) + break; + ShopItem shopItem = it.next(); + ItemStack stack = shopItem.getItem().clone(); + ItemMeta meta = stack.getItemMeta(); + meta.setDisplayName(Utils.f(shopItem.getName())); + meta.setLore(Arrays.asList("", + Utils.f("&7Price: &" + (Core.getUserManager().getLoadedUser(uuid).hasTokens(shopItem.getPrice()) ? "e" : "c") + "&l" + shopItem.getPrice() + (shopItem.getPrice() == 1 ? " Token" : " Tokens")))); + stack.setItemMeta(meta); + inv.setItem(slots[i], stack); + } + inv.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the voting menu!")); + if (page > 1) + inv.setItem(48, Utils.createItem(Material.ARROW, "&e&lPrevious Page", "&7Page " + (page - 1))); + inv.setItem(49, Utils.createItem(Material.BOOK_AND_QUILL, "&e&lToken Shop", "&7Page " + page)); + if (items.size() > (20 * page)) + inv.setItem(50, Utils.createItem(Material.ARROW, "&e&lNext Page", "&7Page " + (page + 1))); + return; + case REDSTONE: + MenuManager.openMenu(player, "vote"); + return; + default: + ShopItem shopItem = Core.getVoteManager().getShopItem(item.getItemMeta().getDisplayName()); + if (shopItem != null) { + if (!user.hasTokens(shopItem.getPrice())) { + player.sendMessage(Lang.TOKEN_SHOP.f("&7You do not have &e&l" + shopItem.getPrice() + " Token" + (shopItem.getPrice() == 1 ? "" : "s") + "&7!")); + return; + } + user.setBuyingShopItem(shopItem); + MenuManager.openMenu(player, "buyshopitem"); + return; + } + return; + } + case "buyshopitem": + switch (item.getType()) { + case STAINED_GLASS_PANE: + switch (item.getDurability()) { + case 5: + User u = Core.getUserManager().getLoadedUser(uuid); + ShopItem shopItem = u.getBuyingShopItem(); + u.setBuyingShopItem(null); + if (shopItem == null) { + player.closeInventory(); + player.sendMessage(Lang.TOKEN_SHOP.f("&7You are not buying a token shop item!")); + return; + } + player.closeInventory(); + shopItem.buy(player, Core.getUserManager().getLoadedUser(uuid)); + return; + case 14: + Core.getUserManager().getLoadedUser(uuid).setBuyingShopItem(null); + MenuManager.openMenu(player, "tokenshop"); + return; + default: + return; + } + default: + return; + } + case "serverwarper": + if (!Core.getSettings().serverWarperEnabled()) + return; + ServerManager sm = Core.getServerManager(); + switch (item.getType()) { + case REDSTONE: + sm.sendToServer(player, "hub1"); +// Core.getJedisManager().getModule(JedisChannel.SERVER_QUEUE).sendMessage( +// new ServerQueueMessage(player.getUniqueId(), user.getUserRank().name(), new ServerTypeId(net.grandtheftmc.ServerType.HUB, 1)), +// new ServerTypeId(net.grandtheftmc.ServerType.OPERATOR, -1) +// ); + return; + + case MINECART: + MenuManager.openMenu(player, "gtmservers"); + MenuManager.openMenu(player, "gtmservers"); + return; + + case GOLD_BLOCK: +// sm.sendToServer(player, "creative1"); + Core.getJedisManager().getModule(JedisChannel.SERVER_QUEUE).sendMessage( + new ServerQueueMessage(player.getUniqueId(), user.getUserRank().name(), new ServerTypeId(net.grandtheftmc.ServerType.CREATIVE, 1)), + new ServerTypeId(net.grandtheftmc.ServerType.OPERATOR, -1) + ); + return; + + case ELYTRA: + sm.sendToServer(player, "gliders1"); + return; + + case CHEST: + sm.sendToServer(player, "legacygtm"); + return; + + case SUGAR: +// sm.sendToServer(player, "vice1"); + Core.getJedisManager().getModule(JedisChannel.SERVER_QUEUE).sendMessage( + new ServerQueueMessage(player.getUniqueId(), user.getUserRank().name(), new ServerTypeId(net.grandtheftmc.ServerType.VICE, 1)), + new ServerTypeId(net.grandtheftmc.ServerType.OPERATOR, -1) + ); + default: + break; + } + case "gtmservers": + if (!Core.getSettings().serverWarperEnabled()) return; + + switch (item.getType()) { + case REDSTONE: + MenuManager.openMenu(player, "serverwarper"); + return; + + case MINECART: + String name = item.hasItemMeta() ? item.getItemMeta().hasDisplayName() ? ChatColor.stripColor(item.getItemMeta().getDisplayName()).replace(Core.getSettings().getServer_GTM_name() + " ", "") : null : null; + if (name == null) return; + int number; + try { + number = Integer.parseInt(name); + } catch (NumberFormatException ex) { + return; + } + + JedisModule module = Core.getJedisManager().getModule(JedisChannel.SERVER_QUEUE); + if (module == null) { + Core.getServerManager().sendToServer(player, "gtm" + number); + return; + } + + module.sendMessage( + new ServerQueueMessage(player.getUniqueId(), user.getUserRank().name(), new ServerTypeId(net.grandtheftmc.ServerType.GTM, number)), + new ServerTypeId(net.grandtheftmc.ServerType.OPERATOR, -1) + ); + return; + + default: + break; + } + + + case "hubservers": + if (!Core.getSettings().serverWarperEnabled()) + return; + switch (item.getType()) { + case REDSTONE: + + if (ChatColor.stripColor(item.getItemMeta().getDisplayName()).equalsIgnoreCase("Back")) { + MenuManager.openMenu(player, "serverwarper"); + } else { + String name = item.hasItemMeta() ? item.getItemMeta().hasDisplayName() ? ChatColor.stripColor(item.getItemMeta().getDisplayName()).replace("Hub ", "") : null : null; + if (name == null) + return; + + int number; + try { + number = Integer.parseInt(name); + } catch (NumberFormatException ex) { + return; + } + +// Core.getServerManager().sendToServer(player, "hub" + number); + Core.getJedisManager().getModule(JedisChannel.SERVER_QUEUE).sendMessage( + new ServerQueueMessage(player.getUniqueId(), user.getUserRank().name(), new ServerTypeId(net.grandtheftmc.ServerType.HUB, number)), + new ServerTypeId(net.grandtheftmc.ServerType.OPERATOR, -1) + ); + } + return; + } + } + } + + @EventHandler + public void onClose(MenuCloseEvent e) { + Player player = e.getPlayer(); + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + Crate crate = user.getSelectedCrate(); + String s = e.getMenu().getName().toLowerCase(); + if (Objects.equals(s, "confirmcratereward") && user.getSelectedCrate() != null) { + user.setConfirmingCrateReward(null); + user.setSelectedCrate(null); + user.addCrowbars(crate.getCrateStars().getCrowbars()); + player.sendMessage(Lang.CRATES.f("&7You have opted to not recieve the crate rewards.")); + } + } + + + public void setPhoneDefaults(MenuOpenEvent e) { + ItemStack whiteGlass = Utils.createItem(Material.STAINED_GLASS_PANE, "&a"); + ItemStack grayGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 7, "&a"); + ItemStack blackGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 15, "&a"); + ItemStack lightGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 8, "&a"); + for (int i : new int[]{1, 10, 19, 28, 37, 46, 7, 16, 25, 34, 43, 52}) e.setItem(i, whiteGlass); + for (int i : new int[]{2, 3, 4, 5, 6}) e.setItem(i, blackGlass); + for (int i : new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 38, 39, 40, 41, 42, 47, 48, + 49, 50, 51}) + e.setItem(i, grayGlass); + for (int i : new int[]{0, 8, 9, 17, 18, 26, 27, 35, 36, 44, 45, 53}) e.setItem(i, lightGlass); + } + + public void setPhoneDefaults(Inventory inv) { + ItemStack whiteGlass = Utils.createItem(Material.STAINED_GLASS_PANE, "&a"); + ItemStack grayGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 7, "&a"); + ItemStack blackGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 15, "&a"); + ItemStack lightGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 8, "&a"); + for (int i : new int[]{1, 10, 19, 28, 37, 46, 7, 16, 25, 34, 43, 52}) inv.setItem(i, whiteGlass); + for (int i : new int[]{2, 3, 4, 5, 6}) inv.setItem(i, blackGlass); + for (int i : new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 38, 39, 40, 41, 42, 47, 48, + 49, 50, 51}) + inv.setItem(i, grayGlass); + for (int i : new int[]{0, 8, 9, 17, 18, 26, 27, 35, 36, 44, 45, 53}) inv.setItem(i, lightGlass); + } + + public void setGPSDefaults(MenuOpenEvent e) { + ItemStack whiteGlass = Utils.createItem(Material.STAINED_GLASS_PANE, "&a"); + ItemStack grayGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 7, "&a"); + ItemStack blackGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 15, "&a"); + ItemStack lightGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 8, "&a"); + + for (int i : new int[]{0, 8, 9, 17, 18, 26, 27, 35, 36, 44, 45, 53}) e.setItem(i, lightGlass); + for (int i : new int[]{0, 9, 18, 27, 36, 45, 8, 17, 26, 35, 44, 53}) e.setItem(i, whiteGlass); + for (int i : new int[]{1, 2, 3, 4, 5, 6, 7}) e.setItem(i, blackGlass); + for (int i : new int[]{10, 11, 12, 13, 14, 15, 16, 19, 20, 21, 22, 23, 24, 25, 28, 29, 30, 31, 32, 33, 34, 37, + 38, 39, 40, 41, 42, 43, 46, 47, 48, 49, 50, 51, 52}) + e.setItem(i, grayGlass); + } + + public void setGPSDefaults(Inventory inv) { + ItemStack whiteGlass = Utils.createItem(Material.STAINED_GLASS_PANE, "&a"); + ItemStack grayGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 7, "&a"); + ItemStack blackGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 15, "&a"); + ItemStack lightGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 8, "&a"); + + for (int i : new int[]{0, 8, 9, 17, 18, 26, 27, 35, 36, 44, 45, 53}) inv.setItem(i, lightGlass); + for (int i : new int[]{0, 9, 18, 27, 36, 45, 8, 17, 26, 35, 44, 53}) + inv.setItem(i, whiteGlass); + for (int i : new int[]{1, 2, 3, 4, 5, 6, 7}) + inv.setItem(i, blackGlass); + for (int i : new int[]{10, 11, 12, 13, 14, 15, 16, 19, 20, 21, 22, 23, 24, 25, 28, 29, 30, 31, 32, 33, 34, 37, + 38, 39, 40, 41, 42, 43, 46, 47, 48, 49, 50, 51, 52}) + inv.setItem(i, grayGlass); + } + + private void setConfirmDefaults(MenuOpenEvent e) { + this.setConfirmDefaults(e, "&a&lConfirm", "&c&lCancel"); + } + + private void setConfirmDefaults(MenuOpenEvent e, String confirmMessage, String cancelMessage) { + ItemStack whiteGlass = Utils.createItem(Material.STAINED_GLASS_PANE, "&a"); + ItemStack grayGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 7, "&a"); + ItemStack blackGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 15, "&a"); + ItemStack lightGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 8, "&a"); + ItemStack greenGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 5, confirmMessage); + ItemStack redGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 14, cancelMessage); + for (int i : new int[]{1, 10, 19, 28, 37, 46, 7, 16, 25, 34, 43, 52}) e.setItem(i, whiteGlass); + for (int i : new int[]{2, 3, 4, 5, 6}) e.setItem(i, blackGlass); + for (int i : new int[]{13, 22, 31, 40, 49,}) e.setItem(i, grayGlass); + for (int i : new int[]{0, 8, 9, 17, 18, 26, 27, 35, 36, 44, 45, 53}) e.setItem(i, lightGlass); + for (int i : new int[]{11, 12, 20, 21, 29, 30, 38, 39, 47, 48}) e.setItem(i, greenGlass); + for (int i : new int[]{14, 15, 23, 24, 32, 33, 41, 42, 50, 51}) e.setItem(i, redGlass); + } + + private void setConfirmDefaults(MenuOpenEvent e, String confirmMessage, String cancelMessage, List confirmLore, List cancelLore) { + ItemStack whiteGlass = Utils.createItem(Material.STAINED_GLASS_PANE, "&a"); + ItemStack grayGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 7, "&a"); + ItemStack lightGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 8, "&a"); + ItemStack blackGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 15, "&a"); + ItemStack greenGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 5, confirmMessage, confirmLore == null ? new ArrayList<>() : confirmLore); + ItemStack redGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 14, cancelMessage, cancelLore == null ? new ArrayList<>() : cancelLore); + for (int i : new int[]{1, 10, 19, 28, 37, 46, 7, 16, 25, 34, 43, 52}) e.setItem(i, whiteGlass); + for (int i : new int[]{2, 3, 4, 5, 6}) e.setItem(i, blackGlass); + for (int i : new int[]{13, 22, 31, 40, 49,}) e.setItem(i, grayGlass); + for (int i : new int[]{0, 8, 9, 17, 18, 26, 27, 35, 36, 44, 45, 53}) e.setItem(i, lightGlass); + for (int i : new int[]{11, 12, 20, 21, 29, 30, 38, 39, 47, 48}) e.setItem(i, greenGlass); + for (int i : new int[]{14, 15, 23, 24, 32, 33, 41, 42, 50, 51}) e.setItem(i, redGlass); + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/menus/MenuManager.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/menus/MenuManager.java new file mode 100644 index 0000000..240b859 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/menus/MenuManager.java @@ -0,0 +1,93 @@ +package net.grandtheftmc.core.menus; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.util.Component; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryCloseEvent; +import org.bukkit.inventory.InventoryView; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +public class MenuManager implements Component { + private static final List MENUS = new ArrayList<>(); + + public static void openMenu(Player player, String menuName) { + Menu menu = getMenu(menuName); + if (menu == null) + return; + menu.openFor(player); + } + + @Override + public MenuManager onDisable(Core plugin) { + MENUS.clear(); + return this; + } + + public static void updateMenu(Player player, String menuName) { + InventoryView view = player.getOpenInventory(); + if (view == null) + return; + Menu menu = getMenu(menuName); + if (menu == null || !Objects.equals(Utils.f(menu.getDisplayName()), view.getTitle())) + return; + MenuOpenEvent event = new MenuOpenEvent(player, menu); + Bukkit.getPluginManager().callEvent(event); + if (!event.isCancelled()) { + view.getTopInventory().setContents(event.getContents()); + player.updateInventory(); + } + } + + public static void updateMenu(String menuName) { + for (Player player : Bukkit.getOnlinePlayers()) + updateMenu(player, menuName); + } + + public static Menu getMenu(String menuName) { + return MENUS.stream().filter(menu -> menu.getName().equalsIgnoreCase(menuName)).findFirst().orElse(null); + } + + public static Menu getMenuFromTitle(String title) { + return MENUS.stream().filter(menu -> Utils.f(menu.getDisplayName()).equalsIgnoreCase(title)).findFirst().orElse(null); + } + + public static List getMenus() { + return MENUS; + } + + public static void addMenu(Menu menu) { + MENUS.add(menu); + } + + public static void addMenu(String name, int size, String title) { + MENUS.add(new Menu(name, size, title)); + } + + @EventHandler + public void onInventoryClick(InventoryClickEvent e) { + Menu menu = getMenuFromTitle(e.getInventory().getTitle()); + if (menu == null || e.getClickedInventory() == null || !Objects.equals(e.getClickedInventory(), e.getInventory())) + return; + e.setCancelled(true); + Player p = (Player) e.getWhoClicked(); + if (Core.getUserManager().getLoadedUser(p.getUniqueId()).isInTutorial()) return; + MenuClickEvent event = new MenuClickEvent(p, menu, e.getClickedInventory(), e.getSlot(), e.getCurrentItem(), e); + Bukkit.getPluginManager().callEvent(event); + } + + @EventHandler + public void onInventoryClose(InventoryCloseEvent e) { + Menu menu = getMenuFromTitle(e.getInventory().getTitle()); + if (menu == null) return; + Player player = (Player) e.getPlayer(); + MenuCloseEvent event = new MenuCloseEvent(player, menu); + Bukkit.getPluginManager().callEvent(event); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/menus/MenuOpenEvent.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/menus/MenuOpenEvent.java new file mode 100644 index 0000000..aeefb2a --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/menus/MenuOpenEvent.java @@ -0,0 +1,57 @@ +package net.grandtheftmc.core.menus; + +import org.bukkit.entity.Player; +import org.bukkit.event.Cancellable; +import org.bukkit.event.HandlerList; +import org.bukkit.event.player.PlayerEvent; +import org.bukkit.inventory.ItemStack; + +public class MenuOpenEvent extends PlayerEvent implements Cancellable{ + private static final HandlerList HANDLER_LIST = new HandlerList(); + + private final Menu menu; + private ItemStack[] contents; + private boolean cancelled = false; + + public MenuOpenEvent(Player player, Menu menu) { + super(player); + this.menu = menu; + this.contents = new ItemStack[menu.getSize()]; + } + + public Menu getMenu() { + return this.menu; + } + + public ItemStack[] getContents() { + return this.contents; + } + + public void setContents(ItemStack[] contents) { + this.contents = contents; + } + + public Menu setItem(int i, ItemStack item) { + if (i >= 0 && i < this.contents.length) + this.contents[i] = item; + return this.menu; + } + @Override + public HandlerList getHandlers() { + return HANDLER_LIST; + } + + public static HandlerList getHandlerList() { + return HANDLER_LIST; + } + + @Override + public boolean isCancelled() { + return cancelled; + } + + @Override + public void setCancelled(boolean b) { + this.cancelled = b; + } +} \ No newline at end of file diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/nametags/Nametag.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/nametags/Nametag.java new file mode 100644 index 0000000..8e13cf2 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/nametags/Nametag.java @@ -0,0 +1,37 @@ +package net.grandtheftmc.core.nametags; + +import net.grandtheftmc.core.util.Utils; + +/** + * Created by Liam on 17/11/2016. + */ +public class Nametag { + + private final String name; + private final String displayName; + private final int price; + + Nametag(String name, String displayName, int price) { + this.name = name; + this.displayName = displayName; + this.price = price; + } + + public String getName() { + return this.name; + } + + public String getDisplayName() { + return Utils.f(this.displayName); + } + + public int getPrice() { + return this.price; + } + + @Override + public String toString() { + return this.name; + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/nametags/NametagCommand.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/nametags/NametagCommand.java new file mode 100644 index 0000000..110863f --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/nametags/NametagCommand.java @@ -0,0 +1,103 @@ +package net.grandtheftmc.core.nametags; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.menus.MenuManager; +import net.grandtheftmc.core.users.User; +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + + +/** + * Created by Liam on 17/11/2016. + */ +public class NametagCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command cmd, String lbl, String[] args) { + if (Core.getSettings().loadCosmetics() && args.length == 0 && s instanceof Player) { + MenuManager.openMenu((Player) s, "nametags"); + return true; + } + if (!s.hasPermission("command.nametag")) { + s.sendMessage(Lang.NOPERM.s()); + return true; + } + if (args.length == 0) { + s.sendMessage(Lang.NAMETAGS.f("&7/nametag list")); + s.sendMessage(Lang.NAMETAGS.f("&7/nametag give ")); + s.sendMessage(Lang.NAMETAGS.f("&7/nametag remove ")); + s.sendMessage(Lang.NAMETAGS.f("&7/nametag reload")); + return true; + } + switch (args[0].toLowerCase()) { + case "list": { + String msg = ""; + for (Nametag t : Core.getNametagManager().getNametags()) + msg += "&a" + t.toString().toLowerCase() + "&7, "; + if (msg.endsWith("&7, ")) + msg.substring(0, msg.length() - 4); + s.sendMessage(Lang.NAMETAGS.f("&7List of &e&lNametags&7:")); + s.sendMessage(Utils.f(msg)); + return true; + } + case "give": { + if (args.length != 3) { + s.sendMessage(Utils.f("&c/nametag give ")); + return true; + } + Nametag tag = Core.getNametagManager().getNametag(args[2]); + if (tag == null) { + s.sendMessage(Lang.NAMETAGS.f("&7That is not a nametag! Do &a/nametag list&7 to see a list!")); + return true; + } + Player player = Bukkit.getPlayer(args[1]); + if (player == null) { +// Core.sql.updateAsyncLater("update nametags set `" + tag + "`=true where name='" + args[1] + "';"); + s.sendMessage(Lang.NAMETAGS.f("&7That player is not online, so his nametags have been updated directly in the database!")); + return true; + } + User u = Core.getUserManager().getLoadedUser(player.getUniqueId()); + u.giveNametag(tag); + s.sendMessage(Lang.NAMETAGS.f("&7You gave nametag &a" + tag.getDisplayName() + "&7 to player " + u.getColoredName(player) + "&7!")); + return true; + } + case "remove": + if (args.length != 3) { + s.sendMessage(Utils.f("&c/nametag remove ")); + return true; + } + Nametag tag = Core.getNametagManager().getNametag(args[2]); + if (tag == null) { + s.sendMessage(Lang.NAMETAGS.f("&7That is not a nametag! Do &a/nametag list&7 to see a list!")); + return true; + } + Player player = Bukkit.getPlayer(args[1]); + if (player == null) { +// Core.sql.updateAsyncLater("update nametags set `" + tag + "`=false where name='" + args[1] + "';"); + s.sendMessage(Lang.NAMETAGS.f("&7That player is not online, so his nametags have been updated directly in the database!")); + return true; + } + User u = Core.getUserManager().getLoadedUser(player.getUniqueId()); + u.takeNametag(tag); + s.sendMessage(Lang.NAMETAGS.f("&7You removed nametag &a" + tag.getDisplayName() + "&7 from player " + u.getColoredName(player) + "&7!")); + return true; + case "reload": + Core.getSettings().setNametagsConfig(Utils.loadConfigFromMaster("nametags")); + Core.getNametagManager().loadNametags(); + s.sendMessage(Utils.f("&7The nametags config was reloaded!")); + return true; + default: + s.sendMessage(Lang.NAMETAGS.f("&7/nametag list")); + s.sendMessage(Lang.NAMETAGS.f("&7/nametag give ")); + s.sendMessage(Lang.NAMETAGS.f("&7/nametag remove ")); + s.sendMessage(Lang.NAMETAGS.f("&7/nametag reload")); + return true; + } + + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/nametags/NametagManager.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/nametags/NametagManager.java new file mode 100644 index 0000000..43143e1 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/nametags/NametagManager.java @@ -0,0 +1,173 @@ +package net.grandtheftmc.core.nametags; + +import java.util.ArrayList; +import java.util.List; + +import org.bukkit.Bukkit; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.scoreboard.Scoreboard; +import org.bukkit.scoreboard.Team; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.events.NametagUpdateEvent; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserManager; +import net.grandtheftmc.core.util.Component; +import net.grandtheftmc.core.util.Utils; + +public class NametagManager implements Component { + + private final List nametags = new ArrayList<>(); + + public NametagManager() { + this.loadNametags(); + } + + @Override + public NametagManager onDisable(Core plugin) { + this.nametags.clear(); + return this; + } + + public static void updateNametag(Player player) { + + // if invalid player + if (player == null || !player.isOnline()){ + return; + } + // create nametag update event + NametagUpdateEvent event = new NametagUpdateEvent(player); + + User user = UserManager.getInstance().getUser(player.getUniqueId()).orElse(null); + if (user != null){ + + if (user.isSpecial()){ + event.setPrefix(user.getUserRank().getTabPrefix()); + } + + // call nametag update event + Bukkit.getPluginManager().callEvent(event); + + String prefix = event.getPrefix() == null ? "&r" : event.getPrefix() + (event.getNameColor() == null ? " &r" : ' ' + event.getNameColor()); + String suffix = event.getSuffix() == null ? "" : ' ' + event.getSuffix(); + + for (Player p : Bukkit.getOnlinePlayers()) { + User u = UserManager.getInstance().getUser(p.getUniqueId()).orElse(null); + if (u != null){ + + Scoreboard board = u.getScoreboard(); + Team team = board.getTeam(player.getName()); + if (team == null) + team = board.registerNewTeam(player.getName()); + team.setPrefix(Utils.f(prefix)); + team.setSuffix(Utils.f(suffix.length() > 16 ? suffix.substring(0,16) : suffix)); + team.addEntry(player.getName()); + /*if (event.getBelowName() != null) { + Objective obj = board.getObjective(event.getBelowName()); + if (obj == null) + obj = board.registerNewObjective(event.getBelowName(), "dummy"); + obj.setDisplaySlot(DisplaySlot.BELOW_NAME); + obj.setDisplayName(event.getBelowName()); + obj.getScore(player.getName()).setScore(event.getValue()); + }*/ + p.setScoreboard(board); + } + } + } + } + + public static void updateNametagsTo(Player player, User user) { + if (player == null || !player.isOnline() || user == null){ + return; + } + + // grab scoreboard + Scoreboard board = user.getScoreboard(); + + // for all other players + for (Player p : Bukkit.getOnlinePlayers()) { + + // create nametag update event + NametagUpdateEvent event = new NametagUpdateEvent(p); + + // grab user object + User u = UserManager.getInstance().getUser(p.getUniqueId()).orElse(null); + if (u != null){ + + if (u.isSpecial()){ + event.setPrefix(u.getUserRank().getTabPrefix()); + } + + + // call event + Bukkit.getPluginManager().callEvent(event); + + String prefix = event.getPrefix() == null ? "&r" : event.getPrefix() + (event.getNameColor() == null ? " &r" : ' ' + event.getNameColor()); + String suffix = event.getSuffix() == null ? "" : ' ' + event.getSuffix(); + + Team team = board.getTeam(p.getName()); + if (team == null){ + team = board.registerNewTeam(p.getName()); + } + team.setPrefix(Utils.f(prefix)); + team.setSuffix(Utils.f(suffix.length() > 16 ? suffix.substring(0,16) : suffix)); + team.addEntry(p.getName()); + /*if (event.getBelowName() != null) { + Objective obj = board.getObjective(event.getBelowName()); + if (obj == null) + obj = board.registerNewObjective(event.getBelowName(), "dummy"); + obj.setDisplaySlot(DisplaySlot.BELOW_NAME); + obj.setDisplayName(event.getBelowName()); + obj.getScore(p.getName()).setScore(event.getValue()); + }*/ + } + } + player.setScoreboard(board); + } + + public void loadNametags() { + YamlConfiguration c = Core.getSettings().getNametagsConfig(); + this.nametags.clear(); + for (String s : c.getKeys(false)) { + try { + String displayName = c.getString(s + ".displayName"); + int price = c.getInt(s + ".price"); + this.nametags.add(new Nametag(s, displayName, price)); + } catch (Exception e) { + Core.log("Error loading nametag: " + s); + e.printStackTrace(); + } + } + } + + public List getNametags() { + return this.nametags; + } + + public List getNametags(User user) { + List list = new ArrayList<>(); + List list2 = new ArrayList<>(); + for (Nametag tag : this.nametags) + if (user.hasNametag(tag)) list.add(tag); + else list2.add(tag); + list.addAll(list2); + return list; + + } + + public Nametag getNametag(String s) { + for (Nametag t : this.nametags) + if (t.getName().equalsIgnoreCase(s)) + return t; + return null; + } + + public Nametag getNametagFromDisplayName(String s) { + for (Nametag t : this.nametags) + if (t.getDisplayName().equalsIgnoreCase(s)) + return t; + return null; + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/neural/NeuralNetTools.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/neural/NeuralNetTools.java new file mode 100644 index 0000000..9f99a16 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/neural/NeuralNetTools.java @@ -0,0 +1,73 @@ +package net.grandtheftmc.core.neural; + +public class NeuralNetTools { + public static double[] createArray(int size, double init_value) { + if (size < 1) { + return null; + } + double[] ar = new double[size]; + for (int i = 0; i < size; i++) { + ar[i] = init_value; + } + return ar; + } + + public static double[] createRandomArray(int size, double lower_bound, double upper_bound) { + if (size < 1) { + return null; + } + double[] ar = new double[size]; + for (int i = 0; i < size; i++) { + ar[i] = randomValue(lower_bound, upper_bound); + } + return ar; + } + + public static double[][] createRandomArray(int sizeX, int sizeY, double lower_bound, double upper_bound) { + if (sizeX < 1 || sizeY < 1) { + return null; + } + double[][] ar = new double[sizeX][sizeY]; + for (int i = 0; i < sizeX; i++) { + ar[i] = createRandomArray(sizeY, lower_bound, upper_bound); + } + return ar; + } + + public static double randomValue(double lower_bound, double upper_bound) { + return Math.random() * (upper_bound - lower_bound) + lower_bound; + } + + public static Integer[] randomValues(int lowerBound, int upperBound, int amount) { + lowerBound--; + if (amount > (upperBound - lowerBound)) return null; + + Integer[] values = new Integer[amount]; + for (int i = 0; i < amount; i++) { + int n = (int) (Math.random() * (upperBound - lowerBound + 1) + lowerBound); + while (containsValue(values, n)) + n = (int) (Math.random() * (upperBound - lowerBound + 1) + lowerBound); + values[i] = n; + } + return values; + } + + public static > boolean containsValue(T[] ar, T value) { + for (T anAr : ar) { + if (anAr != null && value.compareTo(anAr) == 0) { + return true; + } + } + return false; + } + + public static int indexOfHighestValue(double[] values) { + int index = 0; + for (int i = 1; i < values.length; i++) { + if (values[i] > values[index]) { + index = i; + } + } + return index; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/neural/NeuralNetwork.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/neural/NeuralNetwork.java new file mode 100644 index 0000000..56db226 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/neural/NeuralNetwork.java @@ -0,0 +1,221 @@ +package net.grandtheftmc.core.neural; + +import net.grandtheftmc.core.neural.parser.NeuralAttribute; +import net.grandtheftmc.core.neural.parser.NeuralNode; +import net.grandtheftmc.core.neural.parser.NeuralParser; +import net.grandtheftmc.core.neural.parser.NeuralParserTools; + +import java.io.*; +import java.util.Arrays; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class NeuralNetwork { + + private double[][] output; + private double[][][] weights; + private double[][] bias; + + private double[][] errorSignal; + private double[][] outputDerivative; + + /** + * Neurons in a layer + */ + private final int[] layerSizes; + + private final int inputSize, outputSize, networkSize; + + public NeuralNetwork(int... layerSizes) { + this.layerSizes = layerSizes; + this.inputSize = layerSizes[0]; + this.networkSize = layerSizes.length; + this.outputSize = layerSizes[this.networkSize - 1]; + + this.output = new double[this.networkSize][]; + this.weights = new double[this.networkSize][][]; + this.bias = new double[this.networkSize][]; + + this.errorSignal = new double[this.networkSize][]; + this.outputDerivative = new double[this.networkSize][]; + + for (int i = 0; i < this.networkSize; i++) { + this.output[i] = new double[layerSizes[i]]; + this.errorSignal[i] = new double[layerSizes[i]]; + this.outputDerivative[i] = new double[layerSizes[i]]; + this.bias[i] = NeuralNetTools.createRandomArray(layerSizes[i], -0.5, 0.7); + if (i > 0) this.weights[i] = NeuralNetTools.createRandomArray(layerSizes[i], layerSizes[i - 1], -1, 1); + } + } + + public double[] calculate(double... input) { + if (input.length != this.inputSize) return null; + this.output[0] = input; + for (int layer = 1; layer < this.networkSize; layer++) { + for (int neuron = 0; neuron < this.layerSizes[layer]; neuron++) { + double x = this.bias[layer][neuron]; + for (int prevNeuron = 0; prevNeuron < this.layerSizes[layer - 1]; prevNeuron++) + x += this.output[layer - 1][prevNeuron] * this.weights[layer][neuron][prevNeuron]; + this.output[layer][neuron] = sigmoid(x); + this.outputDerivative[layer][neuron] = this.output[layer][neuron] * (1 - this.output[layer][neuron]); + } + } + return this.output[this.networkSize - 1]; + } + + public void train(NeuralTrainSet set, int loops, int batchSize) { + if (set.INPUT_SIZE != this.inputSize || set.OUTPUT_SIZE != this.outputSize) return; + for (int i = 0; i < loops; i++) { + NeuralTrainSet batch = set.extractBatch(batchSize); + for (int x = 0; x < batchSize; x++) + this.train(batch.getInput(x), batch.getOutput(x), 0.3); + System.out.println(MSE(batch)); + } + } + + private double sigmoid(double x) { + return 1d / (1 + Math.exp(-x)); + } + + public void train(double[] input, double[] target, double eta) { + if (input.length != this.inputSize || target.length != this.outputSize) return; + calculate(input); + backpropError(target); + updateWeights(eta); + } + + public void backpropError(double[] target) { + for (int neuron = 0; neuron < this.layerSizes[this.networkSize - 1]; neuron++) + this.errorSignal[this.networkSize - 1][neuron] = (this.output[this.networkSize - 1][neuron] - target[neuron]) * this.outputDerivative[this.networkSize - 1][neuron]; + + for (int layer = this.networkSize - 2; layer > 0; layer--) { + for (int neuron = 0; neuron < this.layerSizes[layer]; neuron++) { + double x = 0; + for (int nextNeuron = 0; nextNeuron < this.layerSizes[layer + 1]; nextNeuron++) + x += this.weights[layer + 1][nextNeuron][neuron] * this.errorSignal[layer + 1][nextNeuron]; + this.errorSignal[layer][neuron] = x * this.outputDerivative[layer][neuron]; + } + } + } + + public void updateWeights(double eta) { + for (int layer = 1; layer < this.networkSize; layer++) { + for (int neuron = 0; neuron < this.layerSizes[layer]; neuron++) { + double delta = -eta * this.errorSignal[layer][neuron]; + this.bias[layer][neuron] += delta; + + for (int prevNeuron = 0; prevNeuron < this.layerSizes[layer - 1]; prevNeuron++) + this.weights[layer][neuron][prevNeuron] += delta * this.output[layer - 1][prevNeuron]; + } + } + } + + public double MSE(double[] input, double[] target) { + if (input.length != this.inputSize || target.length != this.outputSize) return 0; + calculate(input); + double v = 0; + for (int i = 0; i < target.length; i++) + v += (target[i] - this.output[this.networkSize - 1][i]) * (target[i] - this.output[this.networkSize - 1][i]); + return v / (2d * target.length); + } + + public double MSE(NeuralTrainSet set) { + double v = 0; + for (int i = 0; i < set.size(); i++) + v += MSE(set.getInput(i), set.getOutput(i)); + return v / set.size(); + } + + public static void main1(String[] args) { + NeuralNetwork network = new NeuralNetwork(4, 3, 3, 2); + + +// double[] input = new double[] { 0.1, 0.2, 0.3, 0.4 }; +// double[] target = new double[] { 0.9, 0.1 }; +// +// for(int i = 0; i < 1000; i++) { +// network.train(input, target, 0.3); +// } +// +// System.out.println(Arrays.toString(network.calculate(input))); + + + NeuralTrainSet trainSet = new NeuralTrainSet(4, 2); + trainSet.addData(new double[]{0.1, 0.2, 0.3, 0.4}, new double[]{0.9, 0.1}); + trainSet.addData(new double[]{0.9, 0.8, 0.7, 0.6}, new double[]{0.1, 0.9}); + trainSet.addData(new double[]{0.3, 0.8, 0.1, 0.4}, new double[]{0.3, 0.7}); + trainSet.addData(new double[]{0.9, 0.8, 0.1, 0.2}, new double[]{0.7, 0.3}); + + network.train(trainSet, 10000, 4); + + for (int i = 0; i < 4; i++) { + double[] result = network.calculate(trainSet.getInput(i)); + System.out.println(Arrays.toString(result)); + for (int x = 0; x < result.length; x++) { + System.out.println("Goal(" + i + "," + x + "): " + trainSet.getOutput(i)[x]); + System.out.println("Result(" + i + "," + x + "): " + result[x]); + System.out.println("Percent: " + network.getPercentDifference(trainSet.getOutput(i)[x], result[x]) + "%"); + System.out.println(); + } + System.out.println(); + System.out.println(); + } + } + + public static void main(String[] args) { +// NeuralNetwork network = new NeuralNetwork(4,3,2); +// network.save("res/test.txt"); + + NeuralNetwork network = NeuralNetwork.load("res/test.txt"); + System.out.println(Arrays.toString(network.layerSizes)); + } + + public double getPercentDifference(double goal, double result) { + return 100 - Math.abs(((goal - result) / goal) * 100d); + } + + public void save(String fileName) { + NeuralParser parser = new NeuralParser(); + parser.create(fileName); + NeuralNode root = parser.getContent(); + NeuralNode network = new NeuralNode("network"); + NeuralNode layers = new NeuralNode("layers"); + network.addAttribute(new NeuralAttribute("sizes", Arrays.toString(this.layerSizes))); + network.addChild(layers); + root.addChild(network); + + for (int layer = 1; layer < this.networkSize; layer++) { + NeuralNode node = new NeuralNode("" + layer); + layers.addChild(node); + NeuralNode nodeWeights = new NeuralNode("weights"); + NeuralNode nodeBiases = new NeuralNode("biases"); + node.addChild(nodeWeights); + node.addChild(nodeBiases); + nodeBiases.addAttribute("values", Arrays.toString(this.bias[layer])); + + for (int we = 0; we < this.weights[layer].length; we++) + nodeWeights.addAttribute("" + we, Arrays.toString(this.weights[layer][we])); + } + + parser.close(); + } + + public static NeuralNetwork load(String fileName) { + NeuralParser parser = new NeuralParser(); + parser.load(fileName); + String sizes = parser.getValue(new String[]{"network"}, "sizes"); + int[] si = NeuralParserTools.parseIntArray(sizes); + NeuralNetwork network = new NeuralNetwork(si); + + for (int i = 1; i < network.networkSize; i++) { + network.bias[i] = NeuralParserTools.parseDoubleArray(parser.getValue(new String[]{"network", "layers", (i + ""), "biases"}, "values")); + + for (int n = 0; n < network.layerSizes[i]; n++) + network.weights[i][n] = NeuralParserTools.parseDoubleArray(parser.getValue(new String[]{"network", "layers", (i + ""), "weights"}, "" + n)); + } + + parser.close(); + return network; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/neural/NeuralTrainSet.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/neural/NeuralTrainSet.java new file mode 100644 index 0000000..17ab12a --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/neural/NeuralTrainSet.java @@ -0,0 +1,90 @@ +package net.grandtheftmc.core.neural; + +import java.util.ArrayList; +import java.util.Arrays; + +public class NeuralTrainSet { + + public final int INPUT_SIZE; + public final int OUTPUT_SIZE; + + //double[][] <- index1: 0 = input, 1 = output || index2: index of element + private ArrayList data = new ArrayList<>(); + + public NeuralTrainSet(int INPUT_SIZE, int OUTPUT_SIZE) { + this.INPUT_SIZE = INPUT_SIZE; + this.OUTPUT_SIZE = OUTPUT_SIZE; + } + + public void addData(double[] in, double[] expected) { + if (in.length != INPUT_SIZE || expected.length != OUTPUT_SIZE) return; + data.add(new double[][]{in, expected}); + } + + public NeuralTrainSet extractBatch(int size) { + if (size > 0 && size <= this.size()) { + NeuralTrainSet set = new NeuralTrainSet(INPUT_SIZE, OUTPUT_SIZE); + Integer[] ids = NeuralNetTools.randomValues(0, this.size() - 1, size); + for (Integer i : ids) set.addData(this.getInput(i), this.getOutput(i)); + return set; + } else return this; + } + + public static void main(String[] args) { + NeuralTrainSet set = new NeuralTrainSet(3, 2); + + for (int i = 0; i < 8; i++) { + double[] a = new double[3]; + double[] b = new double[2]; + for (int k = 0; k < 3; k++) { + a[k] = (double) ((int) (Math.random() * 10)) / (double) 10; + if (k < 2) b[k] = (double) ((int) (Math.random() * 10)) / (double) 10; + } + set.addData(a, b); + } + + System.out.println(set); + System.out.println(set.extractBatch(3)); + } + + public String toString() { + StringBuilder s = new StringBuilder("TrainSet [" + INPUT_SIZE + " ; " + OUTPUT_SIZE + "]\n"); + int index = 0; + for (double[][] r : data) { + s.append(index) + .append(": ") + .append(Arrays.toString(r[0])) + .append(" | ") + .append(Arrays.toString(r[1])) + .append("\n"); + index++; + } + return s.toString(); + } + + public int size() { + return data.size(); + } + + public double[] getInput(int index) { + return index >= 0 && index < size() ? data.get(index)[0] : null; +// if (index >= 0 && index < size()) +// return data.get(index)[0]; +// else return null; + } + + public double[] getOutput(int index) { + return index >= 0 && index < size() ? data.get(index)[1] : null; +// if (index >= 0 && index < size()) +// return data.get(index)[1]; +// else return null; + } + + public int getINPUT_SIZE() { + return INPUT_SIZE; + } + + public int getOUTPUT_SIZE() { + return OUTPUT_SIZE; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/neural/mnist/Mnist.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/neural/mnist/Mnist.java new file mode 100644 index 0000000..dad3fd6 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/neural/mnist/Mnist.java @@ -0,0 +1,77 @@ +package net.grandtheftmc.core.neural.mnist; + +import net.grandtheftmc.core.neural.NeuralNetTools; +import net.grandtheftmc.core.neural.NeuralNetwork; +import net.grandtheftmc.core.neural.NeuralTrainSet; + +import java.io.File; + +/** + * Created by Luecx on 10.08.2017. + */ +public class Mnist { + + public static void main(String[] args) { +// NeuralNetwork network = new NeuralNetwork(784, 50, 10); +// trainData(network, createTrainSet(0,100), 1000, 100, 100, "res/mnist1.txt"); + + NeuralNetwork network = NeuralNetwork.load("res/mnist1.txt"); + testTrainSet(network, createTrainSet(0,50000), 1000); + } + + public static NeuralTrainSet createTrainSet(int start, int end) { + NeuralTrainSet set = new NeuralTrainSet(28 * 28, 10); + try { + String path = new File("").getAbsolutePath(); + MnistImageFile m = new MnistImageFile(path + "/res/trainImage.idx3-ubyte", "rw"); + MnistLabelFile l = new MnistLabelFile(path + "/res/trainLabel.idx1-ubyte", "rw"); + for(int i = start; i <= end; i++) { + if(i % 100 == 0){ + System.out.println("prepared: " + i); + } + + double[] input = new double[28 * 28]; + double[] output = new double[10]; + + output[l.readLabel()] = 1d; + for(int j = 0; j < 28*28; j++){ + input[j] = (double)m.read() / (double)256; + } + + set.addData(input, output); + m.next(); + l.next(); + } + } catch (Exception e) { + e.printStackTrace(); + } + + return set; + } + + public static void trainData(NeuralNetwork net,NeuralTrainSet set, int epochs, int loops, int batch_size, String outputFile) { + for(int e = 0; e < epochs;e++) { + net.train(set, loops, batch_size); + System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>> "+ e+ " <<<<<<<<<<<<<<<<<<<<<<<<<<"); + + net.save(outputFile); + } + } + + public static void testTrainSet(NeuralNetwork net, NeuralTrainSet set, int printSteps) { + int correct = 0; + for(int i = 0; i < set.size(); i++) { + + double highest = NeuralNetTools.indexOfHighestValue(net.calculate(set.getInput(i))); + double actualHighest = NeuralNetTools.indexOfHighestValue(set.getOutput(i)); + if(highest == actualHighest) { + + correct ++ ; + } + if(i % printSteps == 0) { + System.out.println(i + ": " + (double)correct / (double) (i + 1)); + } + } + System.out.println("Testing finished, RESULT: " + correct + " / " + set.size()+ " -> " + (double)correct / (double)set.size() +" %"); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/neural/mnist/MnistDbFile.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/neural/mnist/MnistDbFile.java new file mode 100644 index 0000000..590afad --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/neural/mnist/MnistDbFile.java @@ -0,0 +1,112 @@ +package net.grandtheftmc.core.neural.mnist; + + + +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.RandomAccessFile; + +/** + * MNIST database file containing entries that can represent image or label + * data. Extends the standard random access file with methods for navigating + * over the entries. The file format is basically idx with specific header + * information. This includes a magic number for determining the type of stored + * entries, count of entries. + */ +public abstract class MnistDbFile extends RandomAccessFile { + private int count; + + + /** + * Creates new instance and reads the header information. + * + * @param name + * the system-dependent filename + * @param mode + * the access mode + * @throws IOException + * @throws FileNotFoundException + * @see RandomAccessFile + */ + public MnistDbFile(String name, String mode) throws IOException { + super(name, mode); + if (getMagicNumber() != readInt()) { + throw new RuntimeException("This MNIST DB file " + name + " should start with the number " + getMagicNumber() + "."); + } + count = readInt(); + } + + /** + * MNIST DB files start with unique integer number. + * + * @return integer number that should be found in the beginning of the file. + */ + protected abstract int getMagicNumber(); + + /** + * The current entry index. + * + * @return long + * @throws IOException + */ + public long getCurrentIndex() throws IOException { + return (getFilePointer() - getHeaderSize()) / getEntryLength() + 1; + } + + /** + * Set the required current entry index. + * + * @param curr + * the entry index + */ + public void setCurrentIndex(long curr) { + try { + if (curr < 0 || curr > count) { + throw new RuntimeException(curr + " is not in the range 0 to " + count); + } + seek(getHeaderSize() + (curr - 1) * getEntryLength()); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + public int getHeaderSize() { + return 8; // two integers + } + + /** + * Number of bytes for each entry. + * Defaults to 1. + * + * @return int + */ + public int getEntryLength() { + return 1; + } + + /** + * Move to the next entry. + * + * @throws IOException + */ + public void next() throws IOException { + if (getCurrentIndex() < count) { + skipBytes(getEntryLength()); + } + } + + /** + * Move to the previous entry. + * + * @throws IOException + */ + public void prev() throws IOException { + if (getCurrentIndex() > 0) { + seek(getFilePointer() - getEntryLength()); + } + } + + public int getCount() { + return count; + } +} \ No newline at end of file diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/neural/mnist/MnistImageFile.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/neural/mnist/MnistImageFile.java new file mode 100644 index 0000000..492e05f --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/neural/mnist/MnistImageFile.java @@ -0,0 +1,101 @@ +package net.grandtheftmc.core.neural.mnist; + + +import java.io.FileNotFoundException; +import java.io.IOException; + +/** + * + * MNIST database image file. Contains additional header information for the + * number of rows and columns per each entry. + * + */ +public class MnistImageFile extends MnistDbFile { + private int rows; + private int cols; + + /** + * Creates new MNIST database image file ready for reading. + * + * @param name + * the system-dependent filename + * @param mode + * the access mode + * @throws IOException + * @throws FileNotFoundException + */ + public MnistImageFile(String name, String mode) throws FileNotFoundException, IOException { + super(name, mode); + + // read header information + rows = readInt(); + cols = readInt(); + } + + /** + * Reads the image at the current position. + * + * @return matrix representing the image + * @throws IOException + */ + public int[][] readImage() throws IOException { + int[][] dat = new int[getRows()][getCols()]; + for (int i = 0; i < getCols(); i++) { + for (int j = 0; j < getRows(); j++) { + dat[i][j] = readUnsignedByte(); + } + } + return dat; + } + + /** + * Move the cursor to the next image. + * + * @throws IOException + */ + public void nextImage() throws IOException { + super.next(); + } + + /** + * Move the cursor to the previous image. + * + * @throws IOException + */ + public void prevImage() throws IOException { + super.prev(); + } + + @Override + protected int getMagicNumber() { + return 2051; + } + + /** + * Number of rows per image. + * + * @return int + */ + public int getRows() { + return rows; + } + + /** + * Number of columns per image. + * + * @return int + */ + public int getCols() { + return cols; + } + + @Override + public int getEntryLength() { + return cols * rows; + } + + @Override + public int getHeaderSize() { + return super.getHeaderSize() + 8; // to more integers - rows and columns + } +} \ No newline at end of file diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/neural/mnist/MnistImageLoader.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/neural/mnist/MnistImageLoader.java new file mode 100644 index 0000000..1b3411f --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/neural/mnist/MnistImageLoader.java @@ -0,0 +1,67 @@ +package net.grandtheftmc.core.neural.mnist; + +import java.awt.AlphaComposite; +import java.awt.Color; +import java.awt.Graphics2D; +import java.awt.Image; +import java.awt.RenderingHints; +import java.awt.image.BufferedImage; +import java.io.File; + +import javax.imageio.ImageIO; + +public class MnistImageLoader { + + public static BufferedImage loadImage(String path) throws Exception{ + return resize(ImageIO.read(new File(path)),28,28); + } + + public static BufferedImage resize(BufferedImage img, int newW, int newH) { + Image tmp = img.getScaledInstance(newW, newH, Image.SCALE_SMOOTH); + BufferedImage dimg = new BufferedImage(newW, newH, BufferedImage.TYPE_INT_ARGB); + + Graphics2D g2d = dimg.createGraphics(); + g2d.drawImage(tmp, 0, 0, null); + g2d.dispose(); + + return dimg; +} + + public static int[][] bufferedImageToArray(BufferedImage img) { + int[][] arr = new int[img.getWidth()][img.getHeight()]; + + for(int i = 0; i < img.getWidth(); i++) + for(int j = 0; j < img.getHeight(); j++) + arr[i][j] = img.getRGB(i, j); + + return arr; + } + + public static int[][] bufferedImageRedToArray(BufferedImage img) { + int[][] arr = new int[img.getWidth()][img.getHeight()]; + + for(int i = 0; i < img.getWidth(); i++) + for(int j = 0; j < img.getHeight(); j++) + arr[i][j] = new Color(img.getRGB(i, j)).getRed(); + + return arr; + } + + public static double[] intArrayToDoubleArray(int[][] i) { + double[] ar = new double[i.length * i[0].length]; + for(int j = 0 ; j < i.length; j ++){ + for(int n = 0; n < i[0].length; n++){ + ar[j * i.length + n] = (double)i[n][j] / (double)256; + } + } + return ar; + } + + public static double[] invert(double[] ar) { + for(int j = 0 ; j < ar.length; j ++){ + ar[j] = 0.9999-ar[j]; + } + return ar; + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/neural/mnist/MnistLabelFile.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/neural/mnist/MnistLabelFile.java new file mode 100644 index 0000000..0d76aa1 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/neural/mnist/MnistLabelFile.java @@ -0,0 +1,49 @@ +package net.grandtheftmc.core.neural.mnist; + +import java.io.FileNotFoundException; +import java.io.IOException; + + +/** + * + * MNIST database label file. + * + */ +public class MnistLabelFile extends MnistDbFile { + + /** + * Creates new MNIST database label file ready for reading. + * + * @param name + * the system-dependent filename + * @param mode + * the access mode + * @throws IOException + * @throws FileNotFoundException + */ + public MnistLabelFile(String name, String mode) throws IOException { + super(name, mode); + } + + /** + * Reads the integer at the current position. + * + * @return integer representing the label + * @throws IOException + */ + public int readLabel() throws IOException { + return readUnsignedByte(); + } + + /** Read the specified number of labels from the current position*/ + public int[] readLabels(int num) throws IOException { + int[] out = new int[num]; + for( int i=0; i childs = new ArrayList<>(); + private ArrayList attributes = new ArrayList<>(); + + public NeuralNode(String name) { + this.name = name; + } + + public boolean addAttribute(NeuralAttribute att) { + if (att != null) { + if (this.containsAttribute(att)) return false; + attributes.add(att); + return true; + } + return false; + } + + public boolean addAttribute(String att, String value) { + return this.addAttribute(new NeuralAttribute(att, value)); + } + + public boolean addChild(String name) { + return this.addChild(new NeuralNode(name)); + } + + public boolean addChild(NeuralNode n) { + if (n != null) { + if (this.containsChild(n)) return false; + childs.add(n); + return true; + } + return false; + } + + public NeuralNode getChild(String child) { + for (NeuralNode r : childs) { + if (r.getName().equals(child)) { + return r; + } + } + return null; + } + + public NeuralAttribute getAttribute(String key) { + for (NeuralAttribute r : attributes) { + if (r.getName().equals(key)) return r; + } + return null; + } + + public void setAttribute(String att, String value) { + if (this.getAttribute(att) != null) { + this.getAttribute(att).setValue(value); + } + } + + public boolean removeAttribute(String att) { + return this.removeAttribute(new NeuralAttribute(att, "")); + } + + public boolean removeChild(String child) { + return this.removeChild(new NeuralNode(child)); + } + + public boolean removeAttribute(NeuralAttribute att) { + int index = 0; + for (NeuralAttribute r : attributes) { + if (r.equals(att)) { + childs.remove(index); + return true; + } + index++; + } + return false; + } + + public boolean removeChild(NeuralNode child) { + int index = 0; + for (NeuralNode r : childs) { + if (child.equals(r)) { + childs.remove(index); + return true; + } + index++; + } + return false; + } + + public boolean containsAttribute(NeuralAttribute s) { + for (NeuralAttribute r : attributes) { + if (r.equalAttribute(s)) { + return true; + } + } + return false; + } + + public boolean containsChild(NeuralNode s) { + for (NeuralNode r : childs) { + if (s.equals(r)) { + return true; + } + } + return false; + } + + public static NeuralNode parse(String c) { + String[] lines = c.split("[;>]"); + NeuralNode n = new NeuralNode(lines[0].substring(1, lines[0].length())); + + int i = 1; + while (i < lines.length - 1) { + String currentLine = lines[i].trim(); + + String nodeName = ""; + if (currentLine.startsWith("<")) { + nodeName = currentLine.substring(1); + String batch = ""; + while (!lines[i].trim().startsWith("" + "\n"; + + for (NeuralAttribute at : attributes) + res += at.toParse(spacesLeft + 4) + "\n"; + + for (NeuralNode n : childs) + res += n.toParse(spacesLeft + 4); + + res += NeuralParserTools.createSpaces(spacesLeft) + "" + "\n"; + return res; + } + + public String getName() { + return this.name; + } + + public ArrayList getChilds() { + return this.childs; + } + + public boolean equals(Object o) { + if (o.getClass() != this.getClass()) return false; + if (!Objects.equals(((NeuralNode) o).getName(), this.getName())) return false; + return true; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/neural/parser/NeuralParser.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/neural/parser/NeuralParser.java new file mode 100644 index 0000000..3e5aa17 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/neural/parser/NeuralParser.java @@ -0,0 +1,86 @@ +package net.grandtheftmc.core.neural.parser; + +import java.io.*; + +public class NeuralParser { + + private NeuralNode mainContent; + private String fileName; + + public void load(String file) { + this.fileName = file; + StringBuilder data = new StringBuilder(""); + try (BufferedReader reader = new BufferedReader(new FileReader(file))) { + String line; + while ((line = reader.readLine()) != null) + if (!line.trim().equals("")) data.append(line); + + data.append(""); + this.generateNodes(data.toString()); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public void create(String fileName) { + this.fileName = fileName; + this.mainContent = new NeuralNode("mainContent"); + } + + private void generateNodes(String data) { + mainContent = NeuralNode.parse(data); + } + + public NeuralNode getContent() { + return mainContent; + } + + public String getValue(String[] keys, String attr) { + NeuralNode curr = mainContent; + for (String k : keys) { + curr = curr.getChild(k); + if (curr == null) { + return null; + } + } + return curr.getAttribute(attr).getValue(); + } + + public void setValue(String[] keys, String attr, String value) { + NeuralNode curr = mainContent; + for (String k : keys) { + curr = curr.getChild(k); + if (curr == null) return; + } + if (curr.containsAttribute(new NeuralAttribute(attr, ""))) + curr.setAttribute(attr, value); + else curr.addAttribute(attr, value); + } + + public void addNode(String[] keys, NeuralNode n) { + NeuralNode curr = mainContent; + for (String k : keys) { + curr = curr.getChild(k); + if (curr == null) return; + } + curr.addChild(n); + } + + public void addNode(String[] keys, String node) { + NeuralNode curr = mainContent; + for (String k : keys) { + curr = curr.getChild(k); + if (curr == null) return; + } + curr.addChild(new NeuralNode(node)); + } + + public void close() { + try (PrintWriter out = new PrintWriter(fileName)) { + for (NeuralNode n : mainContent.getChilds()) + out.print(n.toParse(0)); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/neural/parser/NeuralParserTools.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/neural/parser/NeuralParserTools.java new file mode 100644 index 0000000..91b344e --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/neural/parser/NeuralParserTools.java @@ -0,0 +1,52 @@ +package net.grandtheftmc.core.neural.parser; + +public class NeuralParserTools { + + public static int parseInt(String code) { + return Integer.parseInt(code); + } + + public static float parseFloat(String code) { + return Float.parseFloat(code); + } + + public static double parseDouble(String code) { + return Double.parseDouble(code); + } + + public static int[] parseIntArray(String code) { + code = code.substring(1, code.length() - 1); + String[] data = code.split(","); + int[] d = new int[data.length]; + for (int i = 0; i < d.length; i++) + d[i] = Integer.parseInt(data[i].trim()); + return d; + } + + public static double[] parseDoubleArray(String code) { + code = code.substring(1, code.length() - 1); + String[] data = code.split(","); + double[] d = new double[data.length]; + for (int i = 0; i < d.length; i++) + d[i] = Double.parseDouble(data[i].trim()); + return d; + } + + public static float[] parseFloatArray(String code) { + code = code.substring(1, code.length() - 1); + String[] data = code.split(","); + float[] d = new float[data.length]; + for (int i = 0; i < d.length; i++) + d[i] = Float.parseFloat(data[i].trim()); + return d; + } + + public static String createSpaces(int amount) { + StringBuilder res = new StringBuilder(); + for (int i = 0; i < amount; i++) + res.append(" "); + return res.toString(); + } + + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/npc/CoreNPC.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/npc/CoreNPC.java new file mode 100644 index 0000000..390c9e6 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/npc/CoreNPC.java @@ -0,0 +1,312 @@ +package net.grandtheftmc.core.npc; + +import java.util.List; + +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.entity.Ageable; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.entity.Zombie; + +import com.gmail.filoghost.holographicdisplays.api.Hologram; +import com.gmail.filoghost.holographicdisplays.api.HologramsAPI; +import com.google.common.collect.Lists; +import com.mojang.authlib.properties.Property; + +import net.citizensnpcs.api.CitizensAPI; +import net.citizensnpcs.api.event.DespawnReason; +import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.npc.skin.SkinnableEntity; +import net.citizensnpcs.trait.Age; +import net.citizensnpcs.trait.Controllable; +import net.citizensnpcs.trait.Gravity; +import net.citizensnpcs.trait.LookClose; +import net.citizensnpcs.trait.SkinLayers; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.util.ServerUtil; + +/** + * Created by Timothy Lampen on 1/13/2018. + * + * @apiNote When you implements one of the interfaces you still have to set the targetable / damageable / collidable / etc traits using this class. + * @apiNote When making changes to the NPC entity such as it's location, rather do NPC#teleport than Entity#teleport. + */ +public abstract class CoreNPC { + + private final NPC npc; + private final int id; + private final Location startingLoc; + private final Hologram hologram; + private final EntityType type; + + /** + * @apiNote default constructor for the CoreNPC, does generateNewNPC after it is completed. + */ + public CoreNPC(Location loc, EntityType type, String displayName) { + this(loc, type, displayName, null); + } + + /** + * @apiNote if you use this constructor, you cannot TP the entity expect for the first, original location. If functionality is required, talk to teddeh to implement negative slime shit. + */ + public CoreNPC(Location loc, EntityType type, String... lines) { + this.type = type; + + if (!loc.getChunk().isLoaded()) + loc.getChunk().load(); + + //Remove left over NPC's if any. + List toRemove = Lists.newArrayList(); + CitizensAPI.getNPCRegistry().forEach(citizensNPC -> { + if (citizensNPC.getEntity() != null && citizensNPC.getEntity().getLocation() != null) { + if (citizensNPC.getEntity().getLocation().distance(loc) < 1) { + toRemove.add(citizensNPC); + } + } + }); + + for (NPC remove : toRemove) { + try { remove.despawn(); } catch (Exception e) {} + try { remove.destroy(); } catch (Exception e) {} + } + + if (lines.length == 1) { + this.npc = CitizensAPI.getNPCRegistry().createNPC(type, ChatColor.translateAlternateColorCodes('&', lines[0])); + this.hologram = null; + } + else { + this.npc = CitizensAPI.getNPCRegistry().createNPC(type, ""); + this.hologram = HologramsAPI.createHologram(Core.getInstance(), loc.clone().add(0, 2.575, 0)); + for (String s : lines) + this.hologram.appendTextLine(ChatColor.translateAlternateColorCodes('&', s)); + } + + this.startingLoc = loc.clone(); + this.id = this.npc.getId(); + this.npc.spawn(loc); + + generateNewNPC(); + Core.getNPCManager().registerCoreNPC(this); + } + + public Location getStartingLoc() { + return this.startingLoc; + } + + public int getID() { + return this.id; + } + + /** + * @apiNote delete the dispStand and NPC (not clear from MySQL) + */ + public void delete() { + if (hologram != null) + hologram.delete(); + + if (this.npc != null) { + this.npc.despawn(DespawnReason.PLUGIN); + this.npc.destroy(); + + if (npc != null && npc.getEntity() != null){ + this.npc.getEntity().remove(); + } + } + } + + /** + * @param damageable whether or not the entity can be damaged + * @apiNote default state is false + */ + protected void setDamageable(boolean damageable) { + this.npc.data().setPersistent(NPC.DEFAULT_PROTECTED_METADATA, !damageable); + } + + /** + * @param targetable whether or not other mobs will target this entity. + * @apiNote default is true + */ + protected void setTargetable(boolean targetable) { + this.npc.data().setPersistent(NPC.TARGETABLE_METADATA, targetable); + } + + /** + * @param layer the layer that will be set on the entity. + * @param turnedOn whether or not the layer is turned on or off. + * @return if the method was successful. + * @apiNote default all true. + */ + protected boolean setSkinLayer(SkinLayers.Layer layer, boolean turnedOn) { + if (!(this.npc.getEntity() instanceof Player)) + return false; + + SkinLayers trait = this.npc.getTrait(SkinLayers.class); + trait.setVisible(layer, turnedOn); + return true; + } + + + /** + * @param option the path finding option. (AVOID_WATER = boolean, others are integers) + * @param o the object of the option (boolean or int) + */ + protected void setPathfindingOption(PathfindOption option, Object o) { + switch (option) { + case AVOID_WATER: + npc.getNavigator().getDefaultParameters().avoidWater((boolean) o); + break; + case ATTACK_RANGE: + npc.getNavigator().getDefaultParameters().attackRange((int) o); + break; + case DISTANCE_MARGIN: + npc.getNavigator().getDefaultParameters().distanceMargin((int) o); + break; + case STATIONARY_TICKS: + npc.getNavigator().getDefaultParameters().stationaryTicks((int) o); + break; + } + } + + /** + * @param passive if the player should (true) or not attack nearby entities. + * @apiNote default stat is true + */ + protected void setPassive(boolean passive) { + this.npc.data().setPersistent(NPC.DAMAGE_OTHERS_METADATA, !passive); + } + + /** + * @param lookClose whether or not the entity should look at nearby players. + * @return true if changes were made. + * @apiNote default state is false + */ + protected boolean setLookClose(boolean lookClose) { + LookClose trait = npc.getTrait(LookClose.class); + + while (trait.toggle() != lookClose) + trait.toggle(); + return true; + } + + /** + * @param gravity whether or not the entity should have gravity. + * @return true if changes were made to the entity. + * @apiNote default state is true + */ + protected boolean setGravity(boolean gravity) { + Gravity trait = this.npc.getTrait(Gravity.class); + + if (trait.hasGravity() == gravity) + return false; + trait.toggle(); + return true; + } + + /** + * @param color the color that you want to surround the entity (player). + * @return true if the method was successful. + * @apiNote default state is not glowing + * @deprecated seems not to be able to change color from white. + */ + @Deprecated + protected boolean setGlowing(ChatColor color) { + if (!(this.npc.getEntity() instanceof Player)) + return false; + if (color == null) { + this.npc.data().remove(NPC.GLOWING_COLOR_METADATA); + this.npc.data().remove(NPC.GLOWING_METADATA); + return true; + } + + this.npc.data().setPersistent(NPC.GLOWING_METADATA, true); + this.npc.data().setPersistent(NPC.GLOWING_COLOR_METADATA, color.name()); + + return true; + } + + /** + * @param rideable whether or not the npc is rideable + * @apiNote default state is false. + */ + protected void setRideable(boolean rideable) { + if (!this.npc.hasTrait(Controllable.class)) + npc.addTrait(Controllable.class); + Controllable trait = this.npc.getTrait(Controllable.class); + + trait.setEnabled(rideable); + } + + /** + * @param collideable whether or not the entity is collideable + * @apiNote default state is false. + * @apiNote sets the collidability of the entity + */ + protected void setCollideable(boolean collideable) { + this.npc.data().setPersistent(NPC.COLLIDABLE_METADATA, collideable); + } + + /** + * @param age the tick age of the entity, 0 = adult, -24000 = baby. + * @param passiveAging whether or not the npc will age over time (true = it will age). + * @return true if it was successful. + * @apiNote default state is adult (0). + * @apiNote the npc must implement Ageable or be a Zombie + */ + protected boolean setAge(int age, boolean passiveAging) { + if (!this.npc.isSpawned() || (!(npc.getEntity() instanceof Ageable) && !(npc.getEntity() instanceof Zombie))) + return false; + + Age trait = this.npc.getTrait(Age.class); + trait.setAge(age); + + while (trait.toggle() == passiveAging) + trait.toggle();//there is no set state method :( + return true; + } + + /** + * @param textureValue the base64 encoded value of the image. + * @param textureSignature the base64 encoded signature of the image. + * @apiNote allows the ability to set a player's skin to one that is not linked to a specific player. Use mineskin.org + */ + protected boolean setSkin(String textureValue, String textureSignature) { + if (this.npc.getEntity().getType() != EntityType.PLAYER) { + return false; + } + ((SkinnableEntity) getNPC().getEntity()).getProfile().getProperties().removeAll("textures"); + ((SkinnableEntity) getNPC().getEntity()).getProfile().getProperties().put("textures", new Property("textures", textureValue, textureSignature)); + return true; + } + + /** + * @param playerName the name of the player whose skin you want to set the NPC to + * @param snapshot if the skin should update if the player selected changes their skin (snapshot = true means no update) + * @apiNote the entity type has to be implementing SkinnableEntity (ex. player) + */ + protected boolean setSkin(String playerName, boolean snapshot) { + if (this.type != EntityType.PLAYER) { + ServerUtil.debug("not skinnable"); + return false; + } + this.npc.data().setPersistent(NPC.PLAYER_SKIN_UUID_METADATA, playerName); + this.npc.data().setPersistent(NPC.PLAYER_SKIN_USE_LATEST, !snapshot); + + if (this.npc.isSpawned()) + ((SkinnableEntity) this.npc.getEntity()).setSkinName(playerName); + return true; + } + + /** + * @apiNote used to add the clothes and such of the npc; + */ + protected abstract void generateNewNPC(); + + /** + * @return the npc entity of this class. + */ + public NPC getNPC() { + return npc; + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/npc/NPCDAO.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/npc/NPCDAO.java new file mode 100644 index 0000000..6b68aff --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/npc/NPCDAO.java @@ -0,0 +1,69 @@ +package net.grandtheftmc.core.npc; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.database.BaseDatabase; +import org.bukkit.Location; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; + +/** + * Created by Timothy Lampen on 1/14/2018. + */ +public class NPCDAO { + + public static boolean loadNPCs() { + String query = "SELECT * FROM npc_record WHERE server_key = ?;"; + try (Connection c = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement s = c.prepareStatement(query)) { + s.setString(1, Core.name()); + try (ResultSet set = s.executeQuery()) { + while (set.next()) { + String reference = set.getString("reference"); + String serializedLoc = set.getString("location"); + ServerUtil.runTask(() -> Core.getNPCManager().load(reference, Utils.teleportLocationFromString(serializedLoc))); + } + } + } + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + return true; + } + + public static boolean clearRecords(){ + String delete = "DELETE FROM npc_record WHERE server_key = ?";//incase an npc was deleted from the list, you don't want to load it in again. + try (Connection c = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement s = c.prepareStatement(delete)){ + s.setString(1, Core.name()); + s.execute(); + } + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + return true; + } + + public static boolean saveNPC(String reference, Location loc) { + + String add = "INSERT INTO npc_record(server_key, reference, location) VALUES (?,?,?);"; + try (Connection c = BaseDatabase.getInstance().getConnection()){ + try(PreparedStatement s = c.prepareStatement(add)) { + s.setString(1, Core.name()); + s.setString(2, reference); + s.setString(3, Utils.teleportLocationToString(loc)); + s.execute(); + } + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + return true; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/npc/NPCManager.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/npc/NPCManager.java new file mode 100644 index 0000000..a947969 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/npc/NPCManager.java @@ -0,0 +1,182 @@ +package net.grandtheftmc.core.npc; + +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; +import java.util.HashSet; +import java.util.Set; + +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.world.ChunkUnloadEvent; +import org.bukkit.scheduler.BukkitRunnable; + +import net.citizensnpcs.api.event.NPCCollisionEvent; +import net.citizensnpcs.api.event.NPCCombustByBlockEvent; +import net.citizensnpcs.api.event.NPCCombustByEntityEvent; +import net.citizensnpcs.api.event.NPCDamageByBlockEvent; +import net.citizensnpcs.api.event.NPCDamageByEntityEvent; +import net.citizensnpcs.api.event.NPCDeathEvent; +import net.citizensnpcs.api.event.NPCLeftClickEvent; +import net.citizensnpcs.api.event.NPCPushEvent; +import net.citizensnpcs.api.event.NPCRightClickEvent; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.npc.interfaces.ClickableNPC; +import net.grandtheftmc.core.npc.interfaces.CollideableNPC; +import net.grandtheftmc.core.npc.interfaces.CombustableNPC; +import net.grandtheftmc.core.npc.interfaces.DamageableNPC; +import net.grandtheftmc.core.util.Component; +import net.grandtheftmc.core.voting.crates.events.CrateNearbyPlayerEvent; + +/** + * Created by Timothy Lampen on 1/13/2018. + */ +public class NPCManager implements Component { + + private final Set npcs = new HashSet<>(); + + @Override + public NPCManager onEnable(Core plugin) { + Bukkit.getPluginManager().registerEvents(this, plugin); + +// ServerUtil.runTaskLaterAsync(NPCDAO::loadNPCs, 20 * 10); + + new BukkitRunnable() { + @Override + public void run() { + + npcs.forEach(npc -> { + + for (Entity nearby : npc.getStartingLoc().getWorld().getNearbyEntities(npc.getStartingLoc(), 0.4, 1, 0.4)) { + + if (nearby instanceof Player) { + Player nearbyPlayer = (Player) nearby; + if (!Bukkit.getOnlinePlayers().contains(nearby)) continue; + + CrateNearbyPlayerEvent event = new CrateNearbyPlayerEvent(nearbyPlayer, null); + + if (event.isCancelled()) { + return; + } + + Bukkit.getPluginManager().callEvent(event); + } + } + }); + } + }.runTaskTimerAsynchronously(Core.getInstance(), 0L, 5); + return this; + } + + @Override + public NPCManager onDisable(Core plugin) { + NPCDAO.clearRecords(); + + for (CoreNPC npc : npcs){ + + try{ + // sync so it must run (before server shutdown), attempt to save + NPCDAO.saveNPC(npc.getClass().getName(), npc.getStartingLoc()); + System.out.println("NPC Removed! " + npc.getID()); + npc.delete(); + } + catch(Exception e){ + e.printStackTrace(); + } + } + return this; + } + + /** + * @param e the entity of the npc that you wish to delete. + */ + public void deleteNPC(Entity e) { + Set copy = new HashSet<>(this.npcs); + copy.stream().filter(npc -> npc.getNPC().isSpawned() && npc.getNPC().getEntity().equals(e)).forEach(npc -> { + npc.delete(); + this.npcs.remove(npc); + }); + } + + /** + * @param referenceName the class name of the entity at the location @param loc + * @param loc the location of the reference. + */ + public void load(String referenceName, Location loc) { + + if (!loc.getChunk().isLoaded()) + loc.getChunk().load(); + + try { + Class c = Class.forName(referenceName); + Constructor con = c.getConstructor(Location.class); + Object o = con.newInstance(loc); + Core.log("Successfully loaded " + referenceName + " at" + loc); + } catch (ClassNotFoundException | NoSuchMethodException | InstantiationException | InvocationTargetException | IllegalAccessException e) { + Core.log("Unable to load " + referenceName + " at " + loc); + e.printStackTrace(); + } + } + + /** + * @param npc the npc that is being added. + */ + public void registerCoreNPC(CoreNPC npc) { + this.npcs.add(npc); + } + + @EventHandler + public void onChunkUnload(ChunkUnloadEvent event) { + if (this.npcs.stream().anyMatch(npc -> npc.getNPC().isSpawned() && npc.getStartingLoc().getChunk().equals(event.getChunk()))) { + event.setCancelled(true); + } + } + + + @EventHandler + public void onPush(NPCPushEvent event) { + this.npcs.stream().filter(npc -> npc instanceof CollideableNPC).filter(npc -> npc.getID() == event.getNPC().getId()).forEach(npc -> ((CollideableNPC) npc).onPush(event)); + } + + @EventHandler + public void onCollide(NPCCollisionEvent event) { + this.npcs.stream().filter(npc -> npc instanceof CollideableNPC).filter(npc -> npc.getID() == event.getNPC().getId()).forEach(npc -> ((CollideableNPC) npc).onCollide(event)); + } + + @EventHandler + public void onDeath(NPCDeathEvent event) { + this.npcs.stream().filter(npc -> npc instanceof DamageableNPC).filter(npc -> npc.getID() == event.getNPC().getId()).forEach(npc -> ((DamageableNPC) npc).onDeath(event)); + } + + @EventHandler + public void onDamageBlock(NPCDamageByBlockEvent event) { + this.npcs.stream().filter(npc -> npc instanceof DamageableNPC).filter(npc -> npc.getID() == event.getNPC().getId()).forEach(npc -> ((DamageableNPC) npc).onDamageByBlock(event)); + } + + @EventHandler + public void onDamageEntity(NPCDamageByEntityEvent event) { + this.npcs.stream().filter(npc -> npc instanceof DamageableNPC).filter(npc -> npc.getID() == event.getNPC().getId()).forEach(npc -> ((DamageableNPC) npc).onDamageByEntity(event)); + } + + @EventHandler + public void onCombustBlock(NPCCombustByBlockEvent event) { + this.npcs.stream().filter(npc -> npc instanceof CombustableNPC).filter(npc -> npc.getID() == event.getNPC().getId()).forEach(npc -> ((CombustableNPC) npc).onCombustByBlock(event)); + } + + @EventHandler + public void onCombustEntity(NPCCombustByEntityEvent event) { + this.npcs.stream().filter(npc -> npc instanceof CombustableNPC).filter(npc -> npc.getID() == event.getNPC().getId()).forEach(npc -> ((CombustableNPC) npc).onCombustByEntity(event)); + } + + @EventHandler + public void onRightClick(NPCRightClickEvent event) { + this.npcs.stream().filter(npc -> npc instanceof ClickableNPC).filter(npc -> npc.getID() == event.getNPC().getId()).forEach(npc -> ((ClickableNPC) npc).onRightClick(event)); + } + + @EventHandler + public void onLeftClick(NPCLeftClickEvent event) { + this.npcs.stream().filter(npc -> npc instanceof ClickableNPC).filter(npc -> npc.getID() == event.getNPC().getId()).forEach(npc -> ((ClickableNPC) npc).onLeftClick(event)); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/npc/PathfindOption.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/npc/PathfindOption.java new file mode 100644 index 0000000..18098ad --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/npc/PathfindOption.java @@ -0,0 +1,11 @@ +package net.grandtheftmc.core.npc; + +/** + * Created by Timothy Lampen on 1/14/2018. + */ +public enum PathfindOption { + AVOID_WATER, + ATTACK_RANGE, + DISTANCE_MARGIN, + STATIONARY_TICKS +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/npc/example/ExampleNPC.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/npc/example/ExampleNPC.java new file mode 100644 index 0000000..0080a61 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/npc/example/ExampleNPC.java @@ -0,0 +1,40 @@ +package net.grandtheftmc.core.npc.example; + +import net.citizensnpcs.api.event.NPCLeftClickEvent; +import net.citizensnpcs.api.event.NPCRightClickEvent; +import net.grandtheftmc.core.npc.CoreNPC; +import net.grandtheftmc.core.npc.interfaces.ClickableNPC; +import net.grandtheftmc.core.util.ServerUtil; +import org.bukkit.Location; +import org.bukkit.entity.EntityType; + +/** + * Created by Timothy Lampen on 1/14/2018. + */ +public class ExampleNPC extends CoreNPC implements ClickableNPC { + /** + * @param loc + * @apiNote default constructor for the CoreNPC, does generateNewNPC after it is completed. + */ + public ExampleNPC(Location loc) { + super(loc, EntityType.PLAYER, "Example"); + } + + + @Override + protected void generateNewNPC() { + ServerUtil.debug("overriden method"); + setSkin("TimLampen", true); + setLookClose(true); + } + + @Override + public void onRightClick(NPCRightClickEvent event) { + event.getClicker().sendMessage("hey dud"); + } + + @Override + public void onLeftClick(NPCLeftClickEvent event) { + + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/npc/interfaces/ClickableNPC.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/npc/interfaces/ClickableNPC.java new file mode 100644 index 0000000..4279b34 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/npc/interfaces/ClickableNPC.java @@ -0,0 +1,15 @@ +package net.grandtheftmc.core.npc.interfaces; + +import net.citizensnpcs.api.event.NPCLeftClickEvent; +import net.citizensnpcs.api.event.NPCRightClickEvent; + +/** + * Created by Timothy Lampen on 1/13/2018. + */ +public interface ClickableNPC { + + void onRightClick(NPCRightClickEvent event); + + void onLeftClick(NPCLeftClickEvent event); + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/npc/interfaces/CollideableNPC.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/npc/interfaces/CollideableNPC.java new file mode 100644 index 0000000..e56ec18 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/npc/interfaces/CollideableNPC.java @@ -0,0 +1,14 @@ +package net.grandtheftmc.core.npc.interfaces; + +import net.citizensnpcs.api.event.NPCCollisionEvent; +import net.citizensnpcs.api.event.NPCPushEvent; + +/** + * Created by Timothy Lampen on 1/14/2018. + */ +public interface CollideableNPC { + + void onCollide(NPCCollisionEvent event); + + void onPush(NPCPushEvent event); +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/npc/interfaces/CombustableNPC.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/npc/interfaces/CombustableNPC.java new file mode 100644 index 0000000..8e8df58 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/npc/interfaces/CombustableNPC.java @@ -0,0 +1,14 @@ +package net.grandtheftmc.core.npc.interfaces; + +import net.citizensnpcs.api.event.NPCCombustByBlockEvent; +import net.citizensnpcs.api.event.NPCCombustByEntityEvent; + +/** + * Created by Timothy Lampen on 1/14/2018. + */ +public interface CombustableNPC { + + void onCombustByBlock(NPCCombustByBlockEvent event); + + void onCombustByEntity(NPCCombustByEntityEvent event); +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/npc/interfaces/DamageableNPC.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/npc/interfaces/DamageableNPC.java new file mode 100644 index 0000000..f4674e8 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/npc/interfaces/DamageableNPC.java @@ -0,0 +1,17 @@ +package net.grandtheftmc.core.npc.interfaces; + +import net.citizensnpcs.api.event.NPCDamageByBlockEvent; +import net.citizensnpcs.api.event.NPCDamageByEntityEvent; +import net.citizensnpcs.api.event.NPCDeathEvent; + +/** + * Created by Timothy Lampen on 1/13/2018. + */ +public interface DamageableNPC { + + void onDeath(NPCDeathEvent event); + + void onDamageByEntity(NPCDamageByEntityEvent event); + + void onDamageByBlock(NPCDamageByBlockEvent event); +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/perms/PermsManager.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/perms/PermsManager.java new file mode 100644 index 0000000..4a15366 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/perms/PermsManager.java @@ -0,0 +1,158 @@ +package net.grandtheftmc.core.perms; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.events.GetPermsEvent; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserManager; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.util.Component; +import org.bukkit.Bukkit; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; + +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +public class PermsManager implements Component { + + private final List userPerms = new ArrayList<>(); + private List rankPerms = new ArrayList<>(); + + public PermsManager() { + this.loadPerms(); + } + + @Override + public PermsManager onDisable(Core plugin) { + this.userPerms.forEach(e -> e.onDisable(plugin)); + this.rankPerms.forEach(e -> e.onDisable(plugin)); + + this.userPerms.clear(); + this.rankPerms.clear(); + return this; + } + + public RankPerms getRankPerms(UserRank rank) { + for (RankPerms p : this.rankPerms) + if (p.getRank() == rank) + return p; + return null; + } + + public UserPerms getUserPerms(UUID uuid) { + for (UserPerms u : this.userPerms) + if (u.getUUID().equals(uuid)) + return u; + return null; + } + + public List getPerms(UUID uuid) { + List perms = new ArrayList<>(); + UserPerms u = this.getUserPerms(uuid); + if (u != null) + perms.addAll(u.getPerms()); + GetPermsEvent e = new GetPermsEvent(uuid); + Bukkit.getPluginManager().callEvent(e); + perms.addAll(e.getPerms()); + return perms; + } + + public List getAllPerms(UserRank ur, UUID uuid) { + List perms = new ArrayList<>(); + for (UserRank r : UserRank.getUserRanks()) { + perms.addAll(this.getRankPerms(r).getPerms()); + if (r == ur) + break; + } + perms.addAll(this.getPerms(uuid)); + return perms; + + } + + public void loadPerms() { + this.rankPerms = new ArrayList<>(); + FileConfiguration c = Core.getSettings().getPermsConfig(); + if (c == null) + return; + for (UserRank rank : UserRank.getUserRanks()) { + List ls = c.getStringList("ranks." + rank.getName().toLowerCase()); + RankPerms perms = new RankPerms(rank, ls == null ? new ArrayList<>() : ls); + this.rankPerms.add(perms); + + } + if (c.getConfigurationSection("players") != null) + for (String s : c.getConfigurationSection("players").getKeys(false)) { + UUID uuid = UUID.fromString(s); + if (uuid == null) + break; + List ls = c.getStringList("players." + s); + UserPerms perms = new UserPerms(uuid, ls); + this.userPerms.add(perms); + } + for (Player p : Bukkit.getOnlinePlayers()) + this.updatePerms(p.getUniqueId()); + + } + + public void savePerms(boolean shutdown) { + YamlConfiguration c = Core.getSettings().getPermsConfig(); + for (String s : c.getKeys(false)) c.set(s, null); + for (RankPerms rank : this.rankPerms) + c.set("ranks." + rank.getRank().getName().toLowerCase(), rank.getPerms()); + for (UserPerms user : this.userPerms) + c.set("players." + user.getUUID(), this.getPerms(user.getUUID())); + Utils.saveConfig(c, "perms"); + } + + public boolean hasPerm(UserRank ur, String perm) { + for (String p : this.getRankPerms(ur).getPerms()) + if (p.equalsIgnoreCase(perm)) + return true; + return false; + + } + + public boolean hasPerm(UUID uuid, String perm) { + return this.getPerms(uuid).stream().anyMatch(p -> p.equalsIgnoreCase(perm)); + } + + public void addPerm(UUID uuid, String perm) { + UserPerms user = this.getUserPerms(uuid); + if (user == null) { + user = new UserPerms(uuid); + this.userPerms.add(user); + } + user.addPerm(perm); + this.savePerms(false); + } + + public void removePerm(UUID uuid, String perm) { + UserPerms user = this.getUserPerms(uuid); + if (user != null) + user.removePerm(perm); + this.savePerms(false); + } + + public void updatePerms(UserRank ur) { + UserManager um = Core.getUserManager(); + for (Player p : Bukkit.getOnlinePlayers()) { + User u = um.getLoadedUser(p.getUniqueId()); + if (u != null) + if (ur == u.getUserRank()) + u.setPerms(p); + } + this.savePerms(false); + } + + public void updatePerms(UUID uuid) { + Player player = Bukkit.getPlayer(uuid); + if (player == null) + return; + User u = Core.getUserManager().getLoadedUser(uuid); + u.setPerms(player); + this.savePerms(false); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/perms/RankPerms.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/perms/RankPerms.java new file mode 100644 index 0000000..1829c18 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/perms/RankPerms.java @@ -0,0 +1,59 @@ +package net.grandtheftmc.core.perms; + +import java.util.ArrayList; +import java.util.List; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.util.Component; + +public class RankPerms implements Component { + + private UserRank rank; + private List perms = new ArrayList<>(); + + public RankPerms(UserRank rank, List perms) { + this.rank = rank; + if (perms != null) + this.perms = perms; + } + + @Override + public RankPerms onDisable(Core plugin) { + this.perms.clear(); + return this; + } + + public RankPerms(UserRank rank) { + this.rank = rank; + } + + public UserRank getRank() { + return this.rank; + } + + public void setRank(UserRank rank) { + this.rank = rank; + } + + public List getPerms() { + return this.perms; + } + + public void setPerms(List perms) { + this.perms = perms; + Core.getPermsManager().updatePerms(this.rank); + } + + public void addPerm(String perm) { + if (!this.perms.contains(perm)) + this.perms.add(perm.toLowerCase()); + Core.getPermsManager().updatePerms(this.rank); + } + + public void removePerm(String perm) { + this.perms.remove(perm); + Core.getPermsManager().updatePerms(this.rank); + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/perms/UserPerms.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/perms/UserPerms.java new file mode 100644 index 0000000..7051905 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/perms/UserPerms.java @@ -0,0 +1,59 @@ +package net.grandtheftmc.core.perms; + +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.util.Component; + +public class UserPerms implements Component { + + private UUID uuid; + private List perms; + + public UserPerms(UUID uuid, List perms) { + this.uuid = uuid; + this.perms = perms; + } + + public UserPerms(UUID uuid) { + this.uuid = uuid; + this.perms = new ArrayList<>(); + } + + @Override + public UserPerms onDisable(Core plugin) { + this.perms.clear(); + return this; + } + + public UUID getUUID() { + return this.uuid; + } + + public void setUUID(UUID uuid) { + this.uuid = uuid; + } + + public List getPerms() { + return this.perms; + } + + public void setPerms(List perms) { + this.perms = perms; + Core.getPermsManager().updatePerms(this.uuid); + } + + public void addPerm(String perm) { + if (!this.perms.contains(perm)) + this.perms.add(perm.toLowerCase()); + Core.getPermsManager().updatePerms(this.uuid); + } + + public void removePerm(String perm) { + this.perms.remove(perm); + Core.getPermsManager().updatePerms(this.uuid); + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/playwire/PlaywireManager.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/playwire/PlaywireManager.java new file mode 100644 index 0000000..7f5ab07 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/playwire/PlaywireManager.java @@ -0,0 +1,63 @@ +package net.grandtheftmc.core.playwire; + +import com.neovisionaries.ws.client.WebSocket; +import com.neovisionaries.ws.client.WebSocketFactory; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.playwire.listeners.WSListener; +import net.grandtheftmc.core.util.Component; +import org.bukkit.scheduler.BukkitRunnable; +import org.json.JSONObject; + +import java.util.UUID; + +/** + * Created by Timothy Lampen on 2017-12-07. + */ +public class PlaywireManager implements Component{ +/** + * This package has been disabled for now. + */ + + private WebSocket websocket; + private static String URI = "rewards.grandtheftmc.net"; + private static String TOKEN = "NotAToken", ID = "70"; + + @Override + public PlaywireManager onEnable(Core plugin) { + new BukkitRunnable() { + public void run() { + if(websocket==null || !websocket.isOpen()) { + openWebSocket(URI, TOKEN); + registerChannel("ServerNotificationChannel"); + } + } + }.runTaskTimerAsynchronously(Core.getInstance(), 0, 1000); + return this; + } + + private void openWebSocket(String uri, String serverToken) { + String endpoint = "wss://" + uri + "/cable?token=" + serverToken; + try { + websocket = new WebSocketFactory().createSocket(endpoint); + websocket.addListener(new WSListener()); + websocket.connect(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + private void registerChannel(String channelName) { + JSONObject channelSubscribe = new JSONObject(); + channelSubscribe.put("command", "subscribe"); + channelSubscribe.put("identifier", new JSONObject().put("channel", channelName).toString()); + websocket.sendText(channelSubscribe.toString()); + } + + /** + * @param uuid the uuid of the player. + * @return the link that the player goes to to watch the ad. + */ + public static String getPlaywireLink(UUID uuid) { + return "http://" + URI + "/?server_id=" + ID + "&player_uuid=" + uuid; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/playwire/SocketMessage.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/playwire/SocketMessage.java new file mode 100644 index 0000000..b87e6f9 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/playwire/SocketMessage.java @@ -0,0 +1,49 @@ +package net.grandtheftmc.core.playwire; + + +import org.json.JSONArray; +import org.json.JSONObject; + +import java.util.UUID; + +/** + * Created by Timothy Lampen on 2017-12-06. + */ +public class SocketMessage extends JSONObject { + + public SocketMessage(String message) { + super(message); + } + + public String getState() { + return getMessage().getJSONObject("data").getJSONObject("attributes").getString("aasm-state"); + } + + public UUID getPlayerUUID() { + return UUID.fromString(getJSONObjectBy(getMessage().getJSONArray("included"), "type", "players").getJSONObject("attributes").getString("uuid")); + } + + public boolean hasType() { + return has("type"); + } + + public String getType() { + return getString("type"); + } + + private JSONObject getMessage() + { + return getJSONObject("message"); + } + + private JSONObject getJSONObjectBy(JSONArray jsonArray, String key, String value) { + for(int i = 0; i> map) throws Exception { + System.out.println("[playwire-ads] Websocket Connected"); + } + + public void onDisconnected(WebSocket webSocket, WebSocketFrame webSocketFrame, WebSocketFrame webSocketFrame1, boolean b) throws Exception { + System.out.println("[playwire-ads] Websocket Disconnected!"); + } + + public void onTextMessage(WebSocket webSocket, String text) throws Exception { + SocketMessage message = new SocketMessage(text); + String compare = message.hasType() ? message.getType().toUpperCase() : message.getState().toUpperCase(); + SocketMessageType type = SocketMessageType.valueOf(compare); + + AsyncPlaywireRecieveEvent event = new AsyncPlaywireRecieveEvent(message.getPlayerUUID(), type); + Bukkit.getPluginManager().callEvent(event); + } + + public void onError(WebSocket webSocket, WebSocketException e) throws Exception { + System.out.println("[playwire-ads] ========================================"); + System.out.println("[playwire-ads] WebsocketException: " + e); + System.out.println("[playwire-ads] ========================================"); + } + + public void onFrame(WebSocket webSocket, WebSocketFrame webSocketFrame) throws Exception { + + } + + public void onContinuationFrame(WebSocket webSocket, WebSocketFrame webSocketFrame) throws Exception { + + } + + public void onTextFrame(WebSocket webSocket, WebSocketFrame webSocketFrame) throws Exception { + + } + + public void onBinaryFrame(WebSocket webSocket, WebSocketFrame webSocketFrame) throws Exception { + + } + + public void onCloseFrame(WebSocket webSocket, WebSocketFrame webSocketFrame) throws Exception { + + } + + public void onPingFrame(WebSocket webSocket, WebSocketFrame webSocketFrame) throws Exception { + + } + + public void onPongFrame(WebSocket webSocket, WebSocketFrame webSocketFrame) throws Exception { + + } + + public void onBinaryMessage(WebSocket webSocket, byte[] bytes) throws Exception { + + } + + public void onSendingFrame(WebSocket webSocket, WebSocketFrame webSocketFrame) throws Exception { + + } + + public void onFrameSent(WebSocket webSocket, WebSocketFrame webSocketFrame) throws Exception { + + } + + public void onFrameUnsent(WebSocket webSocket, WebSocketFrame webSocketFrame) throws Exception { + + } + + public void onThreadCreated(WebSocket webSocket, ThreadType threadType, Thread thread) throws Exception { + + } + + public void onThreadStarted(WebSocket webSocket, ThreadType threadType, Thread thread) throws Exception { + + } + + public void onThreadStopping(WebSocket webSocket, ThreadType threadType, Thread thread) throws Exception { + + } + + public void onFrameError(WebSocket webSocket, WebSocketException e, WebSocketFrame webSocketFrame) throws Exception { + + } + + public void onMessageError(WebSocket webSocket, WebSocketException e, List list) throws Exception { + + } + + public void onMessageDecompressionError(WebSocket webSocket, WebSocketException e, byte[] bytes) throws Exception { + + } + + public void onTextMessageError(WebSocket webSocket, WebSocketException e, byte[] bytes) throws Exception { + + } + + public void onSendError(WebSocket webSocket, WebSocketException e, WebSocketFrame webSocketFrame) throws Exception { + + } + + public void onUnexpectedError(WebSocket webSocket, WebSocketException e) throws Exception { + + } + + public void handleCallbackError(WebSocket webSocket, Throwable throwable) throws Exception { + + } + + public void onSendingHandshake(WebSocket webSocket, String s, List list) throws Exception { + + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/redis/RedisFactory.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/redis/RedisFactory.java new file mode 100644 index 0000000..7dc0190 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/redis/RedisFactory.java @@ -0,0 +1,31 @@ +package net.grandtheftmc.core.redis; + +import net.grandtheftmc.core.Core; +import redis.clients.jedis.Jedis; +import redis.clients.jedis.JedisPool; +import redis.clients.jedis.JedisPoolConfig; + +/** + * Created by Adam on 16/06/2017. + */ +public class RedisFactory { + + private static JedisPool pool; + + public RedisFactory(String server, String passwd, int port, Runnable onCreate){ + JedisPoolConfig config = new JedisPoolConfig(); + config.setMaxTotal(8); + config.setMinIdle(2); + config.setMaxIdle(4); + config.setBlockWhenExhausted(false); + this.pool = new JedisPool(config, server, port, 0, passwd); + + //Callback + onCreate.run(); + } + + public static JedisPool getPool(){ + return pool; + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/redis/RedisListener.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/redis/RedisListener.java new file mode 100644 index 0000000..045a04c --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/redis/RedisListener.java @@ -0,0 +1,129 @@ +package net.grandtheftmc.core.redis; + +import java.util.UUID; + +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.json.JSONObject; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.redis.data.DataType; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.voting.Reward; +import redis.clients.jedis.Jedis; +import redis.clients.jedis.JedisPubSub; +import redis.clients.jedis.exceptions.JedisConnectionException; + +/** + * Created by Adam on 14/06/2017. + */ +public class RedisListener { + + public RedisListener() { + try { + //Jedis e = Core.getInstance().getJedis(); + Jedis e = RedisFactory.getPool().getResource(); + + e.subscribe(new JedisPubSub() { + @Override + public void onMessage(String channel, String message) { + super.onMessage(channel, message); + + if (!channel.equalsIgnoreCase(RedisManager.channel)) { + //Only listen for messages on our channel. + return; + } + + JSONObject serialized = new JSONObject(message); + String dt = serialized.getString("datatype"); + DataType type = DataType.valueOf(dt); + + if (type == null) { + Core.log("Unknown datatype (" + dt + ") received on channel=" + RedisManager.channel + ", ignoring."); + return; + } + + if (type.equals(DataType.REWARD_NOTIFY)) { + + String targetPlayer = serialized.getString("target"); + + Player target = null; + + //Check for player from their UUID + if ((target = Bukkit.getPlayer(UUID.fromString(targetPlayer))) == null) { + //target is not on this server + return; + } + + //Notify them of the rewards they have waiting + target.sendMessage(Utils.f("&aYou have rewards waiting to be claimed! /rewards")); + } + } + }, RedisManager.channel); + } catch (JedisConnectionException e) { + Core.log("Unable to connect to Jedis!!"); + e.printStackTrace(); + } + } + + private String getDisplayName(Reward.RewardType type, String val) { + switch (type) { + case ITEMS: + break; + case BUCKS: + return "&a&l" + val + " Bucks"; + case MONEY: + return "&a$&l" + val; + case TOKENS: + int i = Integer.parseInt(val); + return "&a&l" + i + "&e&l Token" + (i > 1 ? "s" : ""); + case NAMETAG: + return "&e&l" + val; + case RANK: + UserRank rank = UserRank.valueOf(val); + return rank.getColor() + "&lPermanent " + rank.getColoredNameBold(); + case TRIAL_RANK: + String[] args = val.split(","); + rank = UserRank.valueOf(args[0]); + i = Integer.parseInt(args[1]); + return "&a&l" + i + " day" + (i > 1 ? "s " : " ") + rank.getColoredNameBold() + "&a&l Trial"; + case CUSTOM: + break; +// case COSMETIC: +// if (val.equalsIgnoreCase("random-any")) { +// args = val.split(","); +// int minTokens = Integer.parseInt(args[0]), maxTokens = Integer.parseInt(args[1]); +// return "&e&lRandom Cosmetic " + +// "&7(&e" + (maxTokens > 0 ? minTokens + '-' + maxTokens : "min " + minTokens) + " tokens&7)"; +// } else if (val.equalsIgnoreCase("random-specific")) { +// +// args = val.split(","); +// int minTokens = Integer.parseInt(args[0]), maxTokens = Integer.parseInt(args[1]); +// CosmeticType ct = CosmeticType.valueOf(args[2]); +// return '&' + ct.getColor() + "&lRandom " + ct.getColoredDisplayNameSingle() +// + " &7(&e" + (maxTokens > 0 ? minTokens + '-' + maxTokens : "min " + minTokens) + " tokens&7)"; +// } else { +// +// CosmeticType ct = CosmeticType.valueOf(val); +// return ct.getColoredDisplayName(); +// } + /* return this.cosmetic == null ? this.cosmeticType == null ? "&e&lRandom Cosmetic " + + "&7(&e" + (this.maxTokens > 0 ? this.minTokens + '-' + this.maxTokens : "min " + this.minTokens) + " tokens&7)" : + '&' + this.cosmeticType.getColor() + "&lRandom " + this.cosmeticType.getColoredDisplayNameSingle() + + " &7(&e" + (this.maxTokens > 0 ? this.minTokens + '-' + this.maxTokens : "min " + this.minTokens) + " tokens&7)" : + this.cosmetic.getColoredDisplayName();*/ + case PERMISSION: + return val; + case CROWBARS: + i = Integer.parseInt(val); + return "&9&l" + i + " Crowbar" + (i > 1 ? "s" : ""); + case COMMAND: + break; + case ACHIEVEMENT: + return val; + + } + return val; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/redis/RedisManager.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/redis/RedisManager.java new file mode 100644 index 0000000..fc68869 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/redis/RedisManager.java @@ -0,0 +1,43 @@ +package net.grandtheftmc.core.redis; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.redis.data.DataType; +import org.json.JSONObject; +import redis.clients.jedis.Jedis; +import redis.clients.jedis.exceptions.JedisConnectionException; + +import java.util.Map; + +/** + * Created by Adam on 14/06/2017. + */ +public class RedisManager { + + public static final String channel = "gtmcore_msgs"; + + public static boolean publishMessage(DataType type, Map data) { + + try { + //Jedis e = Core.getInstance().getJedis(); + //Core.log("Publishing channel=" + channel + ". msg=" + serialized); + + JSONObject obj = new JSONObject(); + obj.put("datatype", type.name()); + data.keySet().forEach(key -> obj.put(key, data.get(key))); + + Jedis jedis = RedisFactory.getPool().getResource(); + jedis.publish(channel, obj.toString()); + jedis.close(); + return true; + } catch (JedisConnectionException e) { + Core.log("Unable to connect to Jedis!!"); + e.printStackTrace(); + } + + return false; + } + + public static boolean redisEnabled(){ + return RedisFactory.getPool() != null; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/redis/data/DataType.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/redis/data/DataType.java new file mode 100644 index 0000000..8586a0e --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/redis/data/DataType.java @@ -0,0 +1,15 @@ +package net.grandtheftmc.core.redis.data; + +public enum DataType { + + //Declares when a player has received some rewards (if live on the server to notify them) + //Can contain multiple reward notifications, checks are done on MySQL + REWARD_NOTIFY("rewards"), + VOTE_NOTIFY("vote_notify"); + + private final String identifier; + + DataType(String identifier) { + this.identifier = identifier; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/redis/listener/QueueListener.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/redis/listener/QueueListener.java new file mode 100644 index 0000000..836ed6a --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/redis/listener/QueueListener.java @@ -0,0 +1,24 @@ +package net.grandtheftmc.core.redis.listener; + +import net.grandtheftmc.ServerTypeId; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.jedis.JMessageListener; +import net.grandtheftmc.jedis.message.ServerQueueNotifyMessage; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; + +public class QueueListener implements JMessageListener { + + @Override + public void onReceive(ServerTypeId serverTypeId, ServerQueueNotifyMessage serverQueueNotifyMessage) { + if(!Core.isCoreEnabled()) return; + ServerUtil.runTask(() -> { + Player player = Bukkit.getPlayer(serverQueueNotifyMessage.getUniqueId()); + if (player == null) return; + + player.sendMessage(Lang.QUEUE.f("&7You're #" + serverQueueNotifyMessage.getPossition() + " in the Queue for joining, " + serverQueueNotifyMessage.getTargetServer().getServerType().name() + "-" + serverQueueNotifyMessage.getTargetServer().getId())); + }); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/redis/listener/UserStateTransactionCheckListener.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/redis/listener/UserStateTransactionCheckListener.java new file mode 100644 index 0000000..4f783d1 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/redis/listener/UserStateTransactionCheckListener.java @@ -0,0 +1,64 @@ +package net.grandtheftmc.core.redis.listener; + +import java.sql.Connection; + +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; + +import net.grandtheftmc.ServerTypeId; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.database.BaseDatabase; +import net.grandtheftmc.core.transaction.state.user.UserStateTransaction; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserManager; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.jedis.JMessageListener; +import net.grandtheftmc.jedis.message.UserStateTransactionCheck; + +public class UserStateTransactionCheckListener implements JMessageListener { + + @Override + public void onReceive(ServerTypeId serverTypeId, UserStateTransactionCheck userStateMessage) { + + // ignore if core is not setup + if (!Core.isCoreEnabled()) + return; + + // run on sync + ServerUtil.runTask(() -> { + + // grab the player + Player player = Bukkit.getPlayer(userStateMessage.getUUID()); + + // if no player online, skip, user state transactions will be + // handled + if (player == null) { + return; + } + + // grab the core user + User coreUser = UserManager.getInstance().getUser(userStateMessage.getUUID()).orElse(null); + if (coreUser != null) { + + // make sure they are mutex locked + if (coreUser.isLocked()) { + + // async fetch + Bukkit.getScheduler().runTaskAsynchronously(Core.getInstance(), () -> { + + try (Connection conn = BaseDatabase.getInstance().getConnection()) { + // check for user state transactions + UserStateTransaction.process(conn, Core.getInstance(), player, Core.getSettings().getType().getName(), Core.getSettings().getNumber()); + } + catch (Exception e) { + e.printStackTrace(); + } + }); + } + } + + // TODO test remove + Core.log("[UserStateTransactionCheckListener][DEBUG] Received user state transaction check for " + userStateMessage.getUUID().toString()); + }); + } +} \ No newline at end of file diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/redis/listener/VoteNotificationListener.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/redis/listener/VoteNotificationListener.java new file mode 100644 index 0000000..5baaa47 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/redis/listener/VoteNotificationListener.java @@ -0,0 +1,52 @@ +package net.grandtheftmc.core.redis.listener; + +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; + +import net.grandtheftmc.ServerTypeId; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.core.voting.events.PlayerVoteEvent; +import net.grandtheftmc.jedis.JMessageListener; +import net.grandtheftmc.jedis.message.VoteNotificationMessage; + +public class VoteNotificationListener implements JMessageListener { + + @Override + public void onReceive(ServerTypeId serverTypeId, VoteNotificationMessage voteMessage) { + + // ignore if core is not setup + if (!Core.isCoreEnabled()) + return; + + // run on sync + ServerUtil.runTask(() -> { + + // TODO remove as its a test + Core.log("[VoteNotificationListener][DEBUG] Received vote notification for " + voteMessage.getUUID().toString()); + + // grab the player + Player player = Bukkit.getPlayer(voteMessage.getUUID()); + + // if no player online, skip, user state transactions will be + // handled + if (player == null) { + return; + } + + // create the voter in the vote manager + Core.getVoteManager().createVoter(player.getName()); + + // fire vote event, null params for legacy purposes + PlayerVoteEvent voteEvent = new PlayerVoteEvent(player.getUniqueId(), null, null, null); + Bukkit.getPluginManager().callEvent(voteEvent); + + player.sendMessage(Lang.VOTE.f("&7Thank you for &e&lvoting&7 for the server! Open the &e&lVote&7 menu to claim your prize!")); + + if (voteMessage != null) { + player.sendMessage(voteMessage.getMessage().replaceAll("&", "§")); + } + }); + } +} \ No newline at end of file diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/resourcepack/RSPack_1_12.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/resourcepack/RSPack_1_12.java new file mode 100644 index 0000000..9a7931a --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/resourcepack/RSPack_1_12.java @@ -0,0 +1,57 @@ +package net.grandtheftmc.core.resourcepack; + +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitRunnable; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; + +import net.grandtheftmc.core.Core; + +/** + * Created by Luke Bingham on 07/08/2017. + */ +public class RSPack_1_12 implements ResourcePackReceiving { + + /** + * {@inheritDoc} + */ + @Override + public void onReceiving(ResourcePackManager manager, PacketContainer packet, Player player) { + + if (packet.getType().equals(PacketType.Play.Client.RESOURCE_PACK_STATUS)) { + + ResourcePackEvent.ResourceStatus[] resourceStatus = { ResourcePackEvent.ResourceStatus.NO_RESPONSE }; + net.minecraft.server.v1_12_R1.PacketPlayInResourcePackStatus.EnumResourcePackStatus status = packet.getSpecificModifier(net.minecraft.server.v1_12_R1.PacketPlayInResourcePackStatus.EnumResourcePackStatus.class).read(0); + + switch (status) { + case SUCCESSFULLY_LOADED: + // manager.sendLoaded(player); + resourceStatus[0] = ResourcePackEvent.ResourceStatus.SUCCESSFULLY_LOADED; + break; + case DECLINED: + manager.sendDeclined(player); + resourceStatus[0] = ResourcePackEvent.ResourceStatus.DECLINED; + break; + case FAILED_DOWNLOAD: + manager.sendFailed(player); + resourceStatus[0] = ResourcePackEvent.ResourceStatus.FAILED_DOWNLOAD; + break; + case ACCEPTED: + // manager.sendLoading(player); + resourceStatus[0] = ResourcePackEvent.ResourceStatus.ACCEPTED; + break; + } + + // run notification event 3 seconds later + new BukkitRunnable() { + @Override + public void run() { + ResourcePackEvent event = new ResourcePackEvent(player, resourceStatus[0]); + Bukkit.getPluginManager().callEvent(event); + } + }.runTaskLater(Core.getInstance(), 3 * 20); + } + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/resourcepack/ResourcePack.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/resourcepack/ResourcePack.java new file mode 100644 index 0000000..c09775c --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/resourcepack/ResourcePack.java @@ -0,0 +1,42 @@ +package net.grandtheftmc.core.resourcepack; + +/** + * Created by Luke Bingham on 06/08/2017. + */ +public class ResourcePack { + + /** The URL for the pack */ + private final String pack; + /** The 20 byte hash that identifies the pack */ + private final String hash; + + /** + * Create a new ResourcePack. + * + * @param pack - the pack url + * @param hash - the hash associated with the pack + */ + public ResourcePack(String pack, String hash) { + this.pack = pack; + this.hash = hash; + } + + /** + * Get the url for the pack. + * + * @return The URL for the pack. + */ + public String getPack() { + return pack; + } + + /** + * Get the id hash in US-ASCII characters and should be encoded as per RFC + * 1738. + * + * @return The hash for the pack. + */ + public String getHash() { + return hash; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/resourcepack/ResourcePackEvent.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/resourcepack/ResourcePackEvent.java new file mode 100644 index 0000000..b53f4d7 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/resourcepack/ResourcePackEvent.java @@ -0,0 +1,50 @@ +package net.grandtheftmc.core.resourcepack; + +import org.bukkit.entity.Player; + +import net.grandtheftmc.core.events.CoreEvent; + +/** + * Created by Luke Bingham on 07/08/2017. + */ +public class ResourcePackEvent extends CoreEvent { + + /** The player involved in the event */ + private final Player player; + /** The resource status constant associated with the event */ + private final ResourceStatus status; + + /** + * Construct a new Event + */ + public ResourcePackEvent(Player player, ResourceStatus status) { + super(false); + this.player = player; + this.status = status; + } + + /** + * Get the player involved in the event. + * + * @return The player involved in the event. + */ + public Player getPlayer() { + return player; + } + + /** + * Get the status of the resource pack involved in the event/ + * + * @return The status of the resource pack. + */ + public ResourceStatus getStatus() { + return this.status; + } + + /** + * Enum constant payloads that are received by the player client. + */ + public enum ResourceStatus { + SUCCESSFULLY_LOADED, DECLINED, FAILED_DOWNLOAD, ACCEPTED, NO_RESPONSE; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/resourcepack/ResourcePackManager.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/resourcepack/ResourcePackManager.java new file mode 100644 index 0000000..1dce929 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/resourcepack/ResourcePackManager.java @@ -0,0 +1,227 @@ +package net.grandtheftmc.core.resourcepack; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.HashMap; + +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.plugin.Plugin; +import org.bukkit.plugin.java.JavaPlugin; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.ProtocolLibrary; +import com.comphenix.protocol.events.ListeningWhitelist; +import com.comphenix.protocol.events.PacketEvent; +import com.comphenix.protocol.events.PacketListener; +import com.comphenix.protocol.injector.GamePhase; +import com.google.common.collect.Maps; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.database.BaseDatabase; +import net.grandtheftmc.core.util.Callback; +import net.grandtheftmc.core.util.Component; +import net.grandtheftmc.core.util.NMSVersion; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.util.title.NMSTitle; + +/** + * Created by Luke Bingham on 06/08/2017. + */ +public class ResourcePackManager implements Component, PacketListener { + + /** Mapping of versions to associated resource packs */ + private final HashMap resourcePacks; + /** Interface implementation of receiving client handling per version */ + private final ResourcePackReceiving recoursePackReceiving; + /** NMS title to display to user */ + private final NMSTitle nmsTitle; + + /** + * Construct a new ResourcePackManager. + * + * @param plugin - the owning plugin + * @param resourcePackReceiving - the interface handler for handling of the + * resource pack + * @param nmsTitle - the title object to send + */ + public ResourcePackManager(final JavaPlugin plugin, final ResourcePackReceiving recoursePackReceiving, final NMSTitle nmsTitle) { + this.resourcePacks = Maps.newHashMap(); + this.recoursePackReceiving = recoursePackReceiving; + this.nmsTitle = nmsTitle; + + Bukkit.getPluginManager().registerEvents(this, plugin); + ProtocolLibrary.getProtocolManager().addPacketListener(this); + } + + /** + * {@inheritDoc} + */ + @Override + public ResourcePackManager onDisable(Core plugin) { + this.resourcePacks.clear(); + return this; + } + + /** + * Get the resource pack with the associated version. + * + * @param version - the client version + * + * @return The resource pack that is associated with the specified version. + */ + public ResourcePack getResourcePack(NMSVersion version) { + return this.resourcePacks.getOrDefault(version, null); + } + + /** + * Set the resource pack and version key/pair. + * + * @param version - the version key + * @param resourcePack - the resource pack value + */ + public void setResourcePack(NMSVersion version, ResourcePack resourcePack) { + this.resourcePacks.put(version, resourcePack); + } + + /** + * Get whether or not, via the callback, if we can send the resource pack to + * the specified player. + * + * @param player - the player in question + * @param callback - the callback object + */ + public void canSendPack(Player player, Callback callback) { + ServerUtil.runTaskAsync(() -> { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("SELECT last_pack FROM user_respack WHERE uuid=UNHEX(?);")) { + statement.setString(1, player.getUniqueId().toString().replaceAll("-", "")); + + try (ResultSet result = statement.executeQuery()) { + if (result.next()) { + String pack = result.getString(1); + if (!pack.equals(Core.getSettings().getType().name())) { + callback.call(true); + + try (PreparedStatement update = connection.prepareStatement("UPDATE user_respack SET last_pack=? WHERE uuid=UNHEX(?);")) { + update.setString(1, Core.getSettings().getType().name()); + update.setString(2, player.getUniqueId().toString().replaceAll("-", "")); + + update.execute(); + } + return; + } + } + else { + callback.call(true); + try (PreparedStatement insert = connection.prepareStatement("INSERT INTO user_respack (uuid, last_pack) VALUES (UNHEX(?), ?);")) { + insert.setString(1, player.getUniqueId().toString().replaceAll("-", "")); + insert.setString(2, Core.getSettings().getType().name()); + + insert.execute(); + } + return; + } + } + } + } + catch (SQLException e) { + e.printStackTrace(); + } + + callback.call(false); + }); + } + + /** + * Display a declined message. + * + * @param player - the player getting the message + */ + protected void sendDeclined(Player player) { + player.sendMessage(""); + player.sendMessage(""); + player.sendMessage(Utils.f("&4▀&c▔&4▀&c▔&4▀&c▔&4▀&c▔&4▀&c▔&4▀&c▔&4▀&c▔&4▀&c▔&4▀&c▔&4▀&c▔&4▀&c▔&4▀&c▔&4▀&c▔&4▀&c▔&4▀&c▔&4▀&c▔&4▀&c▔&4▀")); + player.sendMessage(""); + player.sendMessage(Utils.f(" &c&lRESPACK&4&l> &7Please go into your client's server list and make sure &aServer Resource Packs&7 is set to &aenabled&7.")); + player.sendMessage(""); + player.sendMessage(Utils.f("&4▀&c▔&4▀&c▔&4▀&c▔&4▀&c▔&4▀&c▔&4▀&c▔&4▀&c▔&4▀&c▔&4▀&c▔&4▀&c▔&4▀&c▔&4▀&c▔&4▀&c▔&4▀&c▔&4▀&c▔&4▀&c▔&4▀&c▔&4▀")); + +// player.sendMessage(Lang.VICE.f("&7Download the server resource pack here: &a" + url)); +// player.sendMessage(Lang.VICE.f("&7or automatically apply it later using &a/respack")); + NMSTitle.sendTitle(player, Utils.f("&c&lDownload denied!"), Utils.f("&7Please check your server resourcepack settings."), 0, 2 * 20, 1 * 20); + } + + /** + * Display a failed message. + * + * @param player - the player getting the message + */ + protected void sendFailed(Player player) { + player.sendMessage(Utils.f(" &a&lRESPACK&8&l> &cThe Resource Pack Failed to download..")); + player.sendMessage(Utils.f(" &a&lRESPACK&8&l> &cMake sure you're using an official minecraft build.")); +// player.sendMessage(Lang.VICE.f("&7Download the server resource pack here: &a" + url)); +// player.sendMessage(Lang.VICE.f("&7or automatically apply it later using &a/respack")); + NMSTitle.sendTitle(player, Utils.f("&4&lRESOURCE PACK"), Utils.f("&cThe Resource Pack Failed to download!"), 0, 2 * 20, 1 * 20); + } + + /** + * Display a loading title. + * + * @param player - the player getting the title + */ + protected void sendLoading(Player player) { + NMSTitle.sendTitle(player, Utils.f("&4&lRESOURCE PACK"), Utils.f("&fThis could freeze your client for a few seconds."), 0, 2 * 20, 1 * 20); + } + + /** + * Display a loading complete title. + * + * @param player - the player getting the title + */ + protected void sendLoaded(Player player) { + NMSTitle.sendTitle(player, Utils.f("&4&lRESOURCE PACK"), Utils.f("&fLoading complete!"), 0, 2 * 20, 1 * 20); + } + + /** + * {@inheritDoc} + */ + @Override + public void onPacketSending(PacketEvent packetEvent) { + } + + /** + * {@inheritDoc} + */ + @Override + public void onPacketReceiving(PacketEvent packetEvent) { + recoursePackReceiving.onReceiving(this, packetEvent.getPacket(), packetEvent.getPlayer()); + } + + /** + * {@inheritDoc} + */ + @Override + public ListeningWhitelist getSendingWhitelist() { + return ListeningWhitelist.EMPTY_WHITELIST; + } + + /** + * {@inheritDoc} + */ + @Override + public ListeningWhitelist getReceivingWhitelist() { + return ListeningWhitelist.newBuilder().normal().gamePhase(GamePhase.PLAYING).types(PacketType.Play.Client.RESOURCE_PACK_STATUS).build(); + } + + /** + * {@inheritDoc} + */ + @Override + public Plugin getPlugin() { + return Core.getInstance(); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/resourcepack/ResourcePackReceiving.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/resourcepack/ResourcePackReceiving.java new file mode 100644 index 0000000..d41ad4d --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/resourcepack/ResourcePackReceiving.java @@ -0,0 +1,20 @@ +package net.grandtheftmc.core.resourcepack; + +import org.bukkit.entity.Player; + +import com.comphenix.protocol.events.PacketContainer; + +/** + * Created by Luke Bingham on 07/08/2017. + */ +public interface ResourcePackReceiving { + + /** + * Callback for when a packet is received. + * + * @param manager - the resource pack manager container + * @param packet - the packet container being sent + * @param player - the player involved in the event + */ + void onReceiving(ResourcePackManager manager, PacketContainer packet, Player player); +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/sentry/CustomExceptionHandler.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/sentry/CustomExceptionHandler.java new file mode 100644 index 0000000..4304b1e --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/sentry/CustomExceptionHandler.java @@ -0,0 +1,27 @@ +package net.grandtheftmc.core.sentry; + +import io.sentry.Sentry; +import io.sentry.event.EventBuilder; +import net.grandtheftmc.core.Core; + +import java.io.*; + +/** + * Created by Luke Bingham on 31/08/2017. + */ +public class CustomExceptionHandler implements Thread.UncaughtExceptionHandler { + +// private Thread.UncaughtExceptionHandler defaultUEH; + + public CustomExceptionHandler() { +// this.defaultUEH = Thread.getDefaultUncaughtExceptionHandler(); + } + + public void uncaughtException(Thread t, Throwable e) { + System.out.println(t.getName() + " threw an exception: " + e.getLocalizedMessage()); + Core.getInstance().getSentryClient().sendEvent(new EventBuilder()); + +// Sentry.capture(e.getMessage()); +// defaultUEH.uncaughtException(t, e); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/servers/PingHandler.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/servers/PingHandler.java new file mode 100644 index 0000000..d6ce27e --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/servers/PingHandler.java @@ -0,0 +1,51 @@ +package net.grandtheftmc.core.servers; + +import com.j0ach1mmall3.jlib.integration.pinger.PingResponse; +import com.j0ach1mmall3.jlib.integration.pinger.PingResponse.Players; +import com.j0ach1mmall3.jlib.storage.database.CallbackHandler; + +public class PingHandler implements CallbackHandler { + + private final Server server; + + public PingHandler(Server server) { + this.server = server; + } + + @Override + public void callback(PingResponse resp) { + this.server.setLastUpdate(System.currentTimeMillis()); + if (resp == null) { + // Utils.b("Updating OFFLINE server " + this.server.getName() + " with ip " + this.server.getIp() + ':' + this.server.getPort()); + this.server.setOffline(true); + return; + } + this.server.setOffline(false); + Players players = resp.getPlayers(); + this.server.setOnlinePlayers(players.getOnline()); + this.server.setMaxPlayers(players.getMax()); + String desc = resp.getDescription().getText(); + String[] a = desc.split(","); + if (a.length > 0) + for (String s : a) { + String[] array = s.split(":"); + if (array.length != 2) + continue; + switch (array[0]) { + case "map": + this.server.setMap(array[1]); + break; + case "gameState": + this.server.setGameState(array[1]); + break; + case "round": + this.server.setRound(Integer.parseInt(array[1])); + break; + default: + break; + } + } + this.server.updateJoinSigns(); + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/servers/Server.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/servers/Server.java new file mode 100644 index 0000000..725e239 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/servers/Server.java @@ -0,0 +1,244 @@ +package net.grandtheftmc.core.servers; + +import com.j0ach1mmall3.jlib.integration.pinger.Pinger; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.users.UserRank; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.block.BlockState; +import org.bukkit.block.Sign; + +import java.util.ArrayList; +import java.util.List; + +public class Server { + private String name; + private ServerType type; + private int number; + private int onlinePlayers; + private int maxPlayers; + private String map; + private String gameState; + private List joinSigns = new ArrayList<>(); + private int round; + private UserRank rankToJoin; + private boolean offline; + private String ip; + private int port; + private long lastUpdate; + + public Server(String name, ServerType type, int number, String ip, int port, UserRank rankToJoin) { + this.name = name; + this.type = type; + this.number = number; + this.ip = ip; + this.port = port; + this.rankToJoin = rankToJoin; + } + + public Server(String name, ServerType type, int number, String ip, int port, boolean offline, int onlinePlayers, + int maxPlayers, String map, String gameState, int round, UserRank rankToJoin, List joinSigns) { + this.name = name; + this.type = type; + this.number = number; + this.ip = ip; + this.port = port; + this.offline = offline; + this.onlinePlayers = onlinePlayers; + this.maxPlayers = maxPlayers; + this.map = map; + this.gameState = gameState; + this.round = round; + this.rankToJoin = rankToJoin; + this.joinSigns = joinSigns; + this.lastUpdate = System.currentTimeMillis(); + } + + public void ping() { + if (this.ip == null || this.port <= 0) { + Core.log("Server '" + this.name + "' does not have an ip/port configured in the database!"); + return; + } + Pinger pinger = new Pinger(this.ip, this.port); + pinger.ping(Core.getInstance(), new PingHandler(this)); + } + + public void updateJoinSigns() { + if (this.joinSigns.isEmpty()) + return; + String line0 = null; + String line1 = null; + String line2 = null; + String line3 = null; + if (this.offline) { + line0 = "&4&l█████████"; + line1 = "&cRestarting..."; + line2 = "&c&l" + this.name.toUpperCase(); + line3 = "&4&l█████████"; + } else if (this.gameState == null) { + line0 = (this.isFull() ? "&c&l" : "&a&l") + '[' + this.name.toUpperCase() + ']'; + line1 = this.map == null ? "" : "&7" + this.map; + line2 = (this.isFull() ? "&c" : "&7") + this.onlinePlayers + " / " + this.maxPlayers; + line3 = "&a&lLobby"; + } else + switch (this.gameState.toLowerCase()) { + case "none": + case "lobby": + line0 = (this.isFull() ? "&c&l" : "&a&l") + '[' + this.name.toUpperCase() + ']'; + line1 = this.map == null ? "" : "&7" + this.map; + line2 = (this.isFull() ? "&c" : "&7") + this.onlinePlayers + " / " + this.maxPlayers; + line3 = "&a&lLobby"; + break; + case "ingame": + line0 = (this.isFull() ? "&c&l" : "&8&l") + '[' + this.name.toUpperCase() + ']'; + line1 = this.map == null ? "" : "&7" + this.map; + line2 = (this.isFull() ? "&c" : "&7") + this.onlinePlayers + " / " + this.maxPlayers; + line3 = "&8&lRound " + this.round; + break; + + case "end": + line0 = "&c&l[" + this.name.toUpperCase() + ']'; + line1 = this.map == null ? "" : "&7" + this.map; + line2 = (this.isFull() ? "&c" : "&7") + this.onlinePlayers + " / " + this.maxPlayers; + line3 = "&c&lEnding"; + break; + } + for (Location loc : new ArrayList<>(this.joinSigns)) { + BlockState state = loc.getBlock().getState(); + if (state.getType() == Material.SIGN_POST || state.getType() == Material.WALL_SIGN) { + Sign sign = (Sign) state; + sign.setLine(0, line0); + sign.setLine(1, line1); + sign.setLine(2, line2); + sign.setLine(3, line3); + } + } + } + + public String getName() { + return this.name; + } + + public void setName(String name) { + this.name = name; + } + + public int getOnlinePlayers() { + return this.onlinePlayers; + } + + public void setOnlinePlayers(int onlinePlayers) { + this.onlinePlayers = onlinePlayers; + + } + + public int getMaxPlayers() { + return this.maxPlayers; + } + + public void setMaxPlayers(int maxPlayers) { + this.maxPlayers = maxPlayers; + } + + public String getMap() { + return this.map; + } + + public void setMap(String map) { + this.map = map; + + } + + public String getGameState() { + return this.gameState; + } + + public void setGameState(String gameState) { + this.gameState = gameState; + + } + + public List getJoinSigns() { + return this.joinSigns; + } + + public void setJoinSigns(List joinSigns) { + this.joinSigns = joinSigns; + } + + public int getRound() { + return this.round; + } + + public void setRound(int round) { + this.round = round; + + } + + public boolean isOffline() { + return this.offline; + } + + public void setOffline(boolean offline) { + this.offline = offline; + + } + + public boolean isFull() { + return this.onlinePlayers >= this.maxPlayers; + } + + public String getIp() { + return this.ip; + } + + public void setIp(String ip) { + this.ip = ip; + } + + public int getPort() { + return this.port; + } + + public void setPort(int port) { + this.port = port; + } + + public ServerType getType() { + return this.type; + } + + public void setType(ServerType type) { + this.type = type; + } + + public int getNumber() { + return this.number; + } + + public void setNumber(int number) { + this.number = number; + + } + + public UserRank getRankToJoin() { + return this.rankToJoin; + } + + public void setRankToJoin(UserRank rankToJoin) { + this.rankToJoin = rankToJoin; + } + + public boolean needsRankToJoin() { + return this.rankToJoin != null; + } + + public void setLastUpdate(long l) { + this.lastUpdate = l; + } + + public long getLastUpdate() { + return this.lastUpdate; + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/servers/ServerManager.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/servers/ServerManager.java new file mode 100644 index 0000000..953c69e --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/servers/ServerManager.java @@ -0,0 +1,165 @@ +package net.grandtheftmc.core.servers; + +import com.google.common.io.ByteArrayDataOutput; +import com.google.common.io.ByteStreams; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Settings; +import net.grandtheftmc.core.database.dao.ServerInfoDAO; +import net.grandtheftmc.core.menus.MenuManager; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.core.util.Utils; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitRunnable; + +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +public class ServerManager { + public List servers = new ArrayList<>(); + + private String map; + private String gameState; + private int round; + + public ServerManager() { + this.loadServers(); + this.loadJoinSigns(); + this.updateThisServer(); + this.startSchedule(); + } + + private int taskId = -1; + + public void sendToServer(Player player, String server) { + ByteArrayDataOutput out = ByteStreams.newDataOutput(); + out.writeUTF("Connect"); + out.writeUTF(server); + player.sendPluginMessage(Core.getInstance(), "BungeeCord", out.toByteArray()); + + } + + public void updateThisServer() { + Settings settings = Core.getSettings(); +// Core.getSQL().updateAsyncLater("update servers set type='" + settings.getType() + "',number=" +// + settings.getNumber() + ",onlinePlayers=" + Bukkit.getOnlinePlayers().size() + ",maxPlayers=" +// + Bukkit.getMaxPlayers() + ",map='" + this.map + "',gameState='" + this.gameState + "',round=" + this.round +// + ",rankToJoin='" + (settings.getRankToJoin() == null ? null : settings.getRankToJoin().toString()) +// + "',lastCheck=" + System.currentTimeMillis() + " where name='" + Core.name() + "';"); + ServerUtil.runTaskAsync(() -> ServerInfoDAO.updateServerInfo(Core.name(), settings.getType(), settings.getNumber(), Bukkit.getOnlinePlayers().size(), Bukkit.getMaxPlayers(), this.map, this.gameState, this.round, settings.getRankToJoin())); + + Server server = this.getServer(Core.name()); + if (server == null) + return; + server.setMap(this.map); + server.setGameState(this.gameState); + server.setRound(this.round); + server.setOnlinePlayers(Bukkit.getOnlinePlayers().size()); + server.setMaxPlayers(Bukkit.getMaxPlayers()); + server.setOffline(false); + server.updateJoinSigns(); + } + + public void loadServers() { + ServerUtil.runTaskAsync(() -> { + Optional> optional = ServerInfoDAO.fetchAllServers(); + if(!optional.isPresent()) return; + ServerUtil.runTask(() -> ServerManager.this.servers = new ArrayList<>(optional.get())); + }); + } + + public void startSchedule() { + if (this.taskId != -1) + Bukkit.getScheduler().cancelTask(this.taskId); + this.taskId = new BukkitRunnable() { + @Override + public void run() { + ServerManager.this.updateThisServer(); + Core.getServerManager().getServers().stream().filter(server -> !server.getName().equals(Core.name())).forEach(Server::ping); + if (Core.getSettings().serverWarperEnabled()) + MenuManager.updateMenu("serverwarper"); + } + }.runTaskTimer(Core.getInstance(), 100, 100).getTaskId(); + + } + + public List getServers() { + return this.servers; + } + + public List getServers(ServerType type) { + return this.servers.stream().filter(server -> server.getType() == type).collect(Collectors.toList()); + } + + public Server getServer(String name) { + for (Server server : this.servers) + if (server.getName().equalsIgnoreCase(name)) + return server; + return null; + } + + public Server getServer(String ip, int port) { + for (Server server : this.servers) + if (server.getIp().equals(ip) && server.getPort() == port) + return server; + return null; + } + + public void loadJoinSigns() { + YamlConfiguration c = Core.getSettings().getJoinSignsConfig(); + for (String s : c.getKeys(false)) { + Server server = this.getServer(s); + if (server == null) + break; + List locs = new ArrayList<>(); + for (String l : c.getStringList(s)) { + Location loc = Utils.blockLocationFromString(l); + if (l != null) + locs.add(loc); + } + server.setJoinSigns(locs); + } + } + + public void saveJoinSigns(boolean shutdown) { + YamlConfiguration c = Core.getSettings().getJoinSignsConfig(); + for (String key : c.getKeys(false)) + c.set(key, null); + this.servers.stream().filter(server -> !server.getJoinSigns().isEmpty()).forEach(server -> c.set(server.getName(), server.getJoinSigns().stream().map(Utils::blockLocationToString).collect(Collectors.toList()))); + Utils.saveConfig(c, "joinSigns"); + } + + public void removeJoinSign(Location location) { + this.servers.stream().filter(server -> server.getJoinSigns().contains(location)).forEach(server -> server.getJoinSigns().remove(location)); + } + + public String getMap() { + return this.map; + } + + public void setMap(String map) { + this.map = map; + } + + public String getGameState() { + return this.gameState; + } + + public void setGameState(String gameState) { + this.gameState = gameState; + } + + public int getRound() { + return this.round; + } + + public void setRound(int round) { + this.round = round; + } + + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/servers/ServerPingListener.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/servers/ServerPingListener.java new file mode 100644 index 0000000..069127d --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/servers/ServerPingListener.java @@ -0,0 +1,16 @@ +package net.grandtheftmc.core.servers; + +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.server.ServerListPingEvent; + +import net.grandtheftmc.core.Core; + +public class ServerPingListener implements Listener { + + @EventHandler + public void onPing(ServerListPingEvent e) { + ServerManager sm = Core.getServerManager(); + e.setMotd("map=" + sm.getMap() + ",gameState=" + sm.getGameState() + ",round=" + sm.getRound()); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/servers/ServerType.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/servers/ServerType.java new file mode 100644 index 0000000..a13b542 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/servers/ServerType.java @@ -0,0 +1,59 @@ +package net.grandtheftmc.core.servers; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.util.Utils; +import org.bukkit.Material; + +import java.util.Arrays; + +public enum ServerType { + + NONE("&c&lERROR", " &c&lERROR ", Material.REDSTONE_BLOCK, "&7Error"), + HUB("&6&lHub", " &7&l" + Core.getSettings().getNetworkShortName() + " &6&lHub ", Material.REDSTONE, "&7Go back to the lobby!"), + GTM("&7&l" + Core.getSettings().getServer_GTM_name(), " &7&l" + Core.getSettings().getServer_GTM_name() + " ", Material.MINECART, "&7GTA in Minecraft!"), + LEGACY("&7&l" + Core.getSettings().getServer_GTM_name() + " &c&lLegacy", "&7&l" + Core.getSettings().getServer_GTM_shortName() + " &c&lLegacy", Material.CHEST, "&7To the good old days!"), + CREATIVE("&6&lCreative", " &6&lCreative ", Material.GOLD_BLOCK, "&7Infinite plots to build anything you want!"), + GLIDERS("&c&lGlider Assault", " &c&lGlider Assault ", Material.ELYTRA, "&7Free for All with weapons and gliders!"), + VICE("&d&lVice&7&lMC", "&d&lVice&7&lMC", Material.SUGAR, "&7Drug Cartels in Minecraft!"); + + private final String displayName; + private final String scoreboardHeader; + private final Material icon; + private final String description; + + ServerType(String displayName, String scoreboardHeader, Material icon, String description) { + this.scoreboardHeader = scoreboardHeader; + this.displayName = displayName; + this.icon = icon; + this.description = description; + } + + public static ServerType getType(String string) { + return Arrays.stream(getAll()).filter(type -> type.toString().equalsIgnoreCase(string)).findFirst().orElse(NONE); + } + + private static ServerType[] getAll() { + return ServerType.class.getEnumConstants(); + } + + public String getName() { + return this.toString().toLowerCase(); + } + + public String getScoreboardHeader() { + return this.scoreboardHeader; + } + + public String getDisplayName() { + return this.displayName; + } + + public Material getIcon() { + return this.icon; + } + + public String getDescription() { + return this.description; + } +} + diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/servers/menu/GTMTranzitMenu.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/servers/menu/GTMTranzitMenu.java new file mode 100644 index 0000000..c6b2dca --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/servers/menu/GTMTranzitMenu.java @@ -0,0 +1,140 @@ +package net.grandtheftmc.core.servers.menu; + +import org.bukkit.Material; +import org.bukkit.entity.HumanEntity; +import org.bukkit.entity.Player; + +import net.grandtheftmc.ServerTypeId; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.inventory.CoreMenu; +import net.grandtheftmc.core.inventory.CoreMenuFlag; +import net.grandtheftmc.core.inventory.button.ClickableItem; +import net.grandtheftmc.core.inventory.button.MenuItem; +import net.grandtheftmc.core.servers.Server; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.util.C; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.core.util.StringUtil; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.core.wrapper.packet.out.WrapperPlayServerSetCooldown; +import net.grandtheftmc.jedis.JedisChannel; +import net.grandtheftmc.jedis.JedisModule; +import net.grandtheftmc.jedis.message.ServerQueueMessage; + +public class GTMTranzitMenu extends CoreMenu { + + private int[] edgeInOrder = null; + private int[] colours = null; + + /** + * Construct a new Menu. + */ + public GTMTranzitMenu() { + super(6, StringUtil.getCenteredMenuText(Core.getSettings().getServer_GTM_shortName() + " Server Travel"), CoreMenuFlag.CLOSE_ON_NULL_CLICK, CoreMenuFlag.RESET_CURSOR_ON_OPEN); + + this.edgeInOrder = new int[]{0, 9, 18, 27, 36, 45, 46, 47, 48, 49, 50, 51, 52, 53, 44, 35, 26, 17, 8, 7, 6, 5, 4, 3, 2, 1}; + this.colours = new int[]{13, 4, 1, 14, 6, 2, 10, -1, -1, 11, 9, 3, 5, 13, 4, 1, 14, 6, 2, 10, -1, -1, 11, 9, 3, 5}; + + this.refreshEdge(); + this.refreshButtons(); + } + + public void refreshEdge() { + for (int i = 0; i < this.edgeInOrder.length; i++) { + if (this.colours[i] < 0) { + super.deleteItem(this.edgeInOrder[i]); + continue; + } + +// super.addItem(new MenuItem(this.edgeInOrder[i], new ItemStack(Material.STAINED_GLASS_PANE, 1, (byte) this.colours[i]), false)); + super.addItem(new MenuItem(this.edgeInOrder[i], new ItemFactory(Material.STAINED_GLASS_PANE, (byte) this.colours[i]).setName(C.WHITE).build(), false)); + } + + ServerUtil.runTaskAsync(() -> { + WrapperPlayServerSetCooldown cooldown = new WrapperPlayServerSetCooldown(); + cooldown.setItem(Material.STAINED_GLASS_PANE); + cooldown.setTicks(500); + try { + HumanEntity[] viewers = this.getInventory().getViewers().toArray(new HumanEntity[this.getInventory().getViewers().size()]); + for (HumanEntity player : viewers) + cooldown.sendPacket((Player) player); + } catch (Exception e) { + } + }); + } + + public void rotate() { + int[] arr = new int[this.colours.length]; + for (int i = 0; i < this.colours.length; i++) { + if (i == this.colours.length - 1) { + arr[0] = this.colours[i]; + continue; + } + + arr[i + 1] = this.colours[i]; + } + + this.colours = arr; + } + + public void refreshButtons() { + int[] slots = {20, 24, 29, 22, 31, 33}; + for (int i = 1; i < (Core.getSettings().isSister() ? 3 : 7); i++) { + Server gtm = Core.getServerManager().getServer("gtm" + i); + boolean online = gtm != null && !gtm.isOffline(); + + Material material = !online ? Material.EXPLOSIVE_MINECART : Material.MINECART; + String displayName = " " + C.RESET + C.WHITE + C.BOLD + (gtm != null ? gtm.getNumber() : 0) + C.RESET + C.GRAY + " v" + Core.GTM_VERSION; + if (Core.getSettings().isSister()) { + if (i == 1) displayName = (!online ? C.RED : C.GREEN) + C.BOLD + "Capital City" + displayName; + else if (i == 2) displayName = (!online ? C.RED : C.GREEN) + C.BOLD + "Sandy Shores" + displayName; + } else { + if (i == 1) + displayName = (!online ? C.RED : C.GREEN) + C.BOLD + "GTM" + C.WHITE + C.BOLD + " MineSantos" + C.RESET + C.GRAY + " v" + Core.GTM_VERSION; + else if (i == 4) + displayName = (!online ? C.RED : C.GREEN) + C.BOLD + "GTM" + C.WHITE + C.BOLD + " Sanktburg" + C.RESET + C.GRAY + " v" + Core.GTM_VERSION; + else + displayName = (!online ? C.RED : C.GREEN) + C.BOLD + "GTM" + displayName; + } + + ItemFactory item = new ItemFactory(material).setName(displayName).setLore(getGtmLore(gtm)); + addItem(new ClickableItem(slots[i - 1], item.build(), (player, clickType) -> { + if (!online) return; + + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + + JedisModule module = Core.getJedisManager().getModule(JedisChannel.SERVER_QUEUE); + if (module == null) { + Core.getServerManager().sendToServer(player, "gtm" + gtm.getNumber()); + return; + } + + module.sendMessage( + new ServerQueueMessage(player.getUniqueId(), user.getUserRank().name(), new ServerTypeId(net.grandtheftmc.ServerType.GTM, gtm.getNumber())), + new ServerTypeId(net.grandtheftmc.ServerType.OPERATOR, -1) + ); + })); + } + } + + protected String[] getGtmLore(Server server) { + boolean online = server != null && !server.isOffline(); + if (server!=null&&(server.getNumber() == 1 || server.getNumber() == 4)) { + String[] description = {C.DARK_GRAY + "Shoot enemies, drive tanks,", C.DARK_GRAY + "and buy penthouses in the", C.DARK_GRAY + "epic city!"}; + String id = C.GRAY + "Server Number " + C.LIGHT_PURPLE + C.BOLD + (server != null ? server.getNumber() : 0); + String playersOnline = C.GRAY + "Players online " + (!online ? C.RED + C.BOLD + "0" + C.GRAY + " / " + C.RED + C.BOLD + "0" + C.RESET : C.GREEN + C.BOLD + server.getOnlinePlayers() + C.GRAY + " / " + C.GREEN + C.BOLD + server.getMaxPlayers() + C.RESET); +// String onlineServers = C.GRAY + "Servers online " + (allOffline ? C.RED : C.GREEN) + C.BOLD + totalUsers[2]; + String[] language = {C.GRAY + "Favored Language", " " + (online && server.getNumber() == 4 ? C.YELLOW + C.BOLD + "GERMAN" : C.AQUA + C.BOLD + "ENGLISH")}; + String[][] version = { + {C.GRAY + "Recommended versions", C.GREEN + " 1.12" + C.WHITE + ", " + C.GREEN + "1.12.1" + C.WHITE + ", " + C.GREEN + "1.12.2"}, + {C.GRAY + "Supported versions", C.YELLOW + " 1.8.*" + C.WHITE + ", " + C.YELLOW + "1.9.*" + C.WHITE + ", " + C.YELLOW + "1.10.*" + C.WHITE + ", " + C.YELLOW + "1.11.*" + C.WHITE + ", " + C.YELLOW + "1.12.*"} + }; + String clickInfo = !online ? C.RED + C.ITALIC + "\u27A3 Offline for maintenance!" : C.WHITE + C.ITALIC + "\u27A3 Click to join server!"; +// String secret = C.DARK_GRAY + C.ITALIC + "/gtmlog to view updates"; + + return new String[]{description[0], description[1], description[2], "", id, "", playersOnline, "", language[0], language[1], "", version[0][0], version[0][1], "", version[1][0], version[1][1], "", clickInfo/*, "", secret*/}; + } else { + return new String[]{C.RED+ "This server will be",C.RED+"closed on September 20.",C.RED+"If you are a new player,",C.RED+"please choose a different server.",C.RED+"",C.RED+"If you are an existing player,",C.RED+"please read our post at",C.RED+"grandtheftmc.net",C.RED+"to transfer some of your",C.RED+"progress to another server."}; + } + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/servers/menu/TranzitMenu.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/servers/menu/TranzitMenu.java new file mode 100644 index 0000000..edad767 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/servers/menu/TranzitMenu.java @@ -0,0 +1,220 @@ +package net.grandtheftmc.core.servers.menu; + +import net.grandtheftmc.ServerType; +import net.grandtheftmc.ServerTypeId; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.inventory.CoreMenu; +import net.grandtheftmc.core.inventory.CoreMenuFlag; +import net.grandtheftmc.core.inventory.button.ClickableItem; +import net.grandtheftmc.core.inventory.button.MenuItem; +import net.grandtheftmc.core.servers.Server; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.util.C; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.core.util.StringUtil; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.core.wrapper.packet.out.WrapperPlayServerSetCooldown; +import net.grandtheftmc.jedis.JedisChannel; +import net.grandtheftmc.jedis.message.ServerQueueMessage; +import org.bukkit.Material; +import org.bukkit.entity.HumanEntity; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +import java.util.*; +import java.util.stream.Collectors; + +public class TranzitMenu extends CoreMenu { + + private int[] edgeInOrder = null; + private int[] colours = null; + + private GTMTranzitMenu gtmMenu; + + /** + * Construct a new Menu. + */ + public TranzitMenu(GTMTranzitMenu gtmMenu) { + super(6, StringUtil.getCenteredMenuText("Server Travel"), CoreMenuFlag.CLOSE_ON_NULL_CLICK, CoreMenuFlag.RESET_CURSOR_ON_OPEN); + this.gtmMenu = gtmMenu; + + this.edgeInOrder = new int[]{0, 9, 18, 27, 36, 45, 46, 47, 48, 49, 50, 51, 52, 53, 44, 35, 26, 17, 8, 7, 6, 5, 4, 3, 2, 1}; + this.colours = new int[]{13, 4, 1, 14, 6, 2, 10, -1, -1, 11, 9, 3, 5, 13, 4, 1, 14, 6, 2, 10, -1, -1, 11, 9, 3, 5}; + + this.refreshEdge(); + this.refreshButtons(); + } + + public void rotate() { + int[] arr = new int[this.colours.length]; + for (int i = 0; i < this.colours.length; i++) { + if (i == this.colours.length - 1) { + arr[0] = this.colours[i]; + continue; + } + + arr[i + 1] = this.colours[i]; + } + + this.colours = arr; + } + + public void refreshEdge() { + for (int i = 0; i < this.edgeInOrder.length; i++) { + if (this.colours[i] < 0) { + super.deleteItem(this.edgeInOrder[i]); + continue; + } + +// super.addItem(new MenuItem(this.edgeInOrder[i], new ItemStack(Material.STAINED_GLASS_PANE, 1, (byte) this.colours[i]), false)); + super.addItem(new MenuItem(this.edgeInOrder[i], new ItemFactory(Material.STAINED_GLASS_PANE, (byte) this.colours[i]).setName(C.WHITE).build(), false)); + } + + ServerUtil.runTaskAsync(() -> { + WrapperPlayServerSetCooldown cooldown = new WrapperPlayServerSetCooldown(); + cooldown.setItem(Material.STAINED_GLASS_PANE); + cooldown.setTicks(500); + try { + HumanEntity[] viewers = this.getInventory().getViewers().toArray(new HumanEntity[this.getInventory().getViewers().size()]); + for (HumanEntity player : viewers) + cooldown.sendPacket((Player) player); + } + catch (Exception e) {} + }); + } + + public void refreshButtons() { + refreshGTM(); + +// System.out.println(Core.getSettings().isSister()); + if (!Core.getSettings().isSister()) { +// System.out.println("RAN"); + refreshVice(); + refreshCreative(); + } + } + + private void refreshGTM() { + List gtmServers = Arrays.stream(Core.getSettings().isSister() ? new String[]{"gtm1","gtm2"} : new String[]{"gtm1", "gtm4","gtm2", "gtm3", "gtm5", "gtm6"}).map(st -> Core.getServerManager().getServer(st)).collect(Collectors.toList()); + boolean allOffline; + try { + allOffline = gtmServers.stream().filter(Server::isOffline).count() >= gtmServers.size(); + } catch (Exception e) { + allOffline = true; + } + + Material material = allOffline ? Material.EXPLOSIVE_MINECART : Material.MINECART; + String displayName = (allOffline ? C.RED : C.GREEN) + C.BOLD + Core.getSettings().getServer_GTM_name() + C.RESET + C.GRAY + " v" + Core.GTM_VERSION; + + ItemFactory item = new ItemFactory(material).setName(displayName).setLore(getGtmServersLore(gtmServers, allOffline)); + super.addItem(new ClickableItem(Core.getSettings().isSister() ? 22 : 31, item.build(), (player, clickType) -> { + player.closeInventory(); + gtmMenu.openInventory(player); + })); + } + + private void refreshVice() { + Server vice = Core.getServerManager().getServer("vice2"); + boolean Coffline = vice == null || vice.isOffline(); + + Material Cmaterial = Coffline ? Material.REDSTONE : Material.SUGAR; + String CdisplayName = (Coffline ? C.RED + C.BOLD + "ViceMC" : C.LIGHT_PURPLE + C.BOLD + "Vice" + C.WHITE + C.BOLD + "MC") + C.RESET + C.GRAY + " season " + Core.VICE_VERSION; + + ItemFactory Citem = new ItemFactory(Cmaterial).setName(CdisplayName).setLore(getViceLore(vice)); + addItem(new ClickableItem(24, Citem.build(), (player, clickType) -> { + if (Coffline) return; + + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + Core.getJedisManager().getModule(JedisChannel.SERVER_QUEUE).sendMessage( + new ServerQueueMessage(player.getUniqueId(), user.getUserRank().name(), new ServerTypeId(net.grandtheftmc.ServerType.VICE, 1)), + new ServerTypeId(net.grandtheftmc.ServerType.OPERATOR, -1) + ); + })); + } + + private void refreshCreative() { + Server creative = Core.getServerManager().getServer("creative1"); + boolean Coffline = creative == null || creative.isOffline(); + + Material Cmaterial = Coffline ? Material.REDSTONE_BLOCK : Material.GOLD_BLOCK; + String displayName = (Coffline ? C.RED + C.BOLD + "Creative" : C.GOLD + C.BOLD + "Creative") + C.RESET + C.GRAY + " v" + Core.CREATIVE_VERSION; + + ItemFactory item = new ItemFactory(Cmaterial).setName(displayName).setLore(getCreativeLore(creative)); + super.addItem(new ClickableItem(20, item.build(), (player, clickType) -> { + if (Coffline) return; + + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + Core.getJedisManager().getModule(JedisChannel.SERVER_QUEUE).sendMessage( + new ServerQueueMessage(player.getUniqueId(), user.getUserRank().name(), new ServerTypeId(ServerType.CREATIVE, 1)), + new ServerTypeId(net.grandtheftmc.ServerType.OPERATOR, -1) + ); + })); + } + +// public static void main(String[] args) { +// edgeInOrder = new int[]{0, 9, 18, 27, 36, 45, 46, 47, 48, 49, 50, 51, 52, 53, 44, 35, 26, 17, 8, 7, 6, 5, 4, 3, 2, 1}; +// colours = new int[]{13, 4, 1, 14, 6, 2, 10, -1, -1, 11, 9, 3, 5, 13, 4, 1, 14, 6, 2, 10, -1, -1, 11, 9, 3, 5}; +// +// System.out.println("#" + 0 + Arrays.toString(colours)); +// +// for (int i = 0; i < colours.length; i++) { +// rotate(); +// System.out.println("#" + (i+1) + Arrays.toString(colours)); +// } +// } + + private String[] getGtmServersLore(List gtmServers, boolean allOffline) { + int[] totalUsers = {0, 0, 0}; + if (!allOffline) { + gtmServers.stream().filter(server -> !server.isOffline()).forEach(server -> { + totalUsers[0] += server.getOnlinePlayers(); + totalUsers[1] += server.getMaxPlayers(); + totalUsers[2]++; + }); + } + + String[] description = {C.DARK_GRAY + "Shoot enemies, drive tanks,", C.DARK_GRAY + "and buy penthouses in the", C.DARK_GRAY + "epic city!"}; + String playersOnline = C.GRAY + "Players online " + (allOffline ? C.RED + C.BOLD + "0" + C.GRAY + " / " + C.RED + C.BOLD + "0" + C.RESET : C.GREEN + C.BOLD + totalUsers[0] + C.GRAY + " / " + C.GREEN + C.BOLD + totalUsers[1] + C.RESET); + String onlineServers = C.GRAY + "Servers online " + (allOffline ? C.RED : C.GREEN) + C.BOLD + totalUsers[2]; + String[][] version = { + {C.GRAY + "Recommended versions", C.GREEN + " 1.12" + C.WHITE + ", " + C.GREEN + "1.12.1" + C.WHITE + ", " + C.GREEN + "1.12.2"}, + {C.GRAY + "Supported versions", C.YELLOW + " 1.8.*" + C.WHITE + ", " + C.YELLOW + "1.9.*" + C.WHITE + ", " + C.YELLOW + "1.10.*" + C.WHITE + ", " + C.YELLOW + "1.11.*" + C.WHITE + ", " + C.YELLOW + "1.12.*"} + }; + String clickInfo = allOffline ? C.RED + C.ITALIC + "\u27A3 Offline for maintenance!" : C.WHITE + C.ITALIC + "\u27A3 Click to join a server!"; + String secret = C.DARK_GRAY + C.ITALIC + "/gtalog to view updates"; + + return new String[] {description[0], description[1], description[2], "", playersOnline, onlineServers, "", version[0][0], version[0][1], "", version[1][0], version[1][1], "", clickInfo, /*, "", secret*/}; + } + + private String[] getViceLore(Server server) { + boolean online = server != null && !server.isOffline(); + + String[] description = {C.DARK_GRAY + "Grow drugs, form cartels,", C.DARK_GRAY + "and become the next", C.DARK_GRAY + "Pablo Escabar!"}; + String playersOnline = C.GRAY + "Players online " + (!online ? C.RED + C.BOLD + "0" + C.GRAY + " / " + C.RED + C.BOLD + "0" + C.RESET : C.GREEN + C.BOLD + server.getOnlinePlayers() + C.GRAY + " / " + C.GREEN + C.BOLD + server.getMaxPlayers() + C.RESET); +// String onlineServers = C.GRAY + "Servers online " + (allOffline ? C.RED : C.GREEN) + C.BOLD + totalUsers[2]; + String[][] version = { + {C.GRAY + "Recommended versions", C.GREEN + " 1.12" + C.WHITE + ", " + C.GREEN + "1.12.1" + C.WHITE + ", " + C.GREEN + "1.12.2"}, + {C.GRAY + "Supported versions", C.YELLOW + " 1.8.*" + C.WHITE + ", " + C.YELLOW + "1.9.*" + C.WHITE + ", " + C.YELLOW + "1.10.*" + C.WHITE + ", " + C.YELLOW + "1.11.*" + C.WHITE + ", " + C.YELLOW + "1.12.*"} + }; + String clickInfo = !online ? C.RED + C.ITALIC + "\u27A3 Offline for maintenance!" : C.WHITE + C.ITALIC + "\u27A3 Click to join server!"; + String secret = C.DARK_GRAY + C.ITALIC + "/vicelog to view updates"; + + return new String[] {description[0], description[1], description[2], "", playersOnline, "", version[0][0], version[0][1], "", version[1][0], version[1][1], "", clickInfo, /*, "", secret*/}; + } + + private String[] getCreativeLore(Server server) { + boolean online = server != null && !server.isOffline(); + + String[] description = {C.DARK_GRAY + "Build to your hearts", C.DARK_GRAY + "content and help inspire", C.DARK_GRAY + "new updates to the network"}; + String playersOnline = C.GRAY + "Players online " + (!online ? C.RED + C.BOLD + "0" + C.GRAY + " / " + C.RED + C.BOLD + "0" + C.RESET : C.GREEN + C.BOLD + server.getOnlinePlayers() + C.GRAY + " / " + C.GREEN + C.BOLD + server.getMaxPlayers() + C.RESET); +// String onlineServers = C.GRAY + "Servers online " + (allOffline ? C.RED : C.GREEN) + C.BOLD + totalUsers[2]; + String[][] version = { + {C.GRAY + "Recommended versions", C.GREEN + " 1.10.*" + C.WHITE + ", " + C.GREEN + "1.11.*" + C.WHITE + ", " + C.GREEN + "1.12.*"}, + {C.GRAY + "Supported versions", C.YELLOW + " 1.8.*" + C.WHITE + ", " + C.YELLOW + "1.9.*" + C.WHITE + ", " + C.YELLOW + "1.10.*" + C.WHITE + ", " + C.YELLOW + "1.11.*" + C.WHITE + ", " + C.YELLOW + "1.12.*"} + }; + String clickInfo = !online ? C.RED + C.ITALIC + "\u27A3 Offline for maintenance!" : C.WHITE + C.ITALIC + "\u27A3 Click to join server!"; + String secret = C.DARK_GRAY + C.ITALIC + "/buildlog to view updates"; + + return new String[] {description[0], description[1], description[2], "", playersOnline, "", version[0][0], version[0][1], "", version[1][0], version[1][1], "", clickInfo, /*, "", secret*/}; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/stat/StatDAO.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/stat/StatDAO.java new file mode 100644 index 0000000..a04f053 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/stat/StatDAO.java @@ -0,0 +1,71 @@ +package net.grandtheftmc.core.stat; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.util.Optional; +import java.util.UUID; + +public class StatDAO { + + /** + * Create user join info record in the database. + * + * @param conn - the database connection thread + * @param uuid - the uuid of the user to create the record for + * @param serverJoinAddress - the server address they joined with + * + * @return {@code} true if the record was created, {@code false} otherwise. + */ + public static boolean createUserJoinInfo(Connection conn, UUID uuid, String serverJoinAddress) { + + // note: look at initial record is 2x serverJoinAddress, as it can be updated later + // with on update query + String query = "INSERT IGNORE INTO user_join_info (uuid, initial_server_address, last_server_address) VALUES (UNHEX(?), ?, ?) ON DUPLICATE KEY UPDATE last_server_address=VALUES(last_server_address), last_login=VALUES(last_login);"; + + try (PreparedStatement ps = conn.prepareStatement(query)) { + ps.setString(1, uuid.toString().replaceAll("-", "")); + ps.setString(2, serverJoinAddress); + ps.setString(3, serverJoinAddress); + + ps.executeUpdate(); + return true; + } + catch (Exception e) { + System.out.println("[StatDAO] An error occurred for createUserStat() for uuid=" + uuid + ", serverJoinAddress=" + serverJoinAddress); + e.printStackTrace(); + } + + return false; + } + + /** + * Get the join address the user. + * + * @param conn - the database connection thread + * @param uuid - the uuid of the user to lookup + * + * @return The string representation of the join address the user used to connect wtih, i.e. 'dev.mc-gtm.net', if one exists. + */ + public static Optional getUserJoinAddress(Connection conn, UUID uuid) { + + //String query = "SELECT last_server_address FROM user_join_info WHERE uuid=UNHEX(?);"; + String query = "SELECT initial_server_address FROM user_join_info WHERE uuid=UNHEX(?);"; + + try (PreparedStatement ps = conn.prepareStatement(query)) { + ps.setString(1, uuid.toString().replaceAll("-", "")); + + try (ResultSet result = ps.executeQuery()){ + if (result.next()){ + return Optional.of(result.getString("initial_server_address")); + } + } + } + catch (Exception e) { + System.out.println("[StatDAO] An error occurred for getUserJoinAddress() for uuid=" + uuid); + e.printStackTrace(); + } + + return Optional.empty(); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/stat/StatFactory.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/stat/StatFactory.java new file mode 100644 index 0000000..90b416d --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/stat/StatFactory.java @@ -0,0 +1,183 @@ +package net.grandtheftmc.core.stat; + +import java.sql.Connection; +import java.util.UUID; + +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.plugin.Plugin; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.ProtocolManager; +import com.comphenix.protocol.events.ListenerPriority; +import com.comphenix.protocol.events.PacketAdapter; +import com.comphenix.protocol.events.PacketEvent; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.database.BaseDatabase; +import net.grandtheftmc.core.util.UUIDUtil; +import net.minecraft.server.v1_12_R1.PacketHandshakingInSetProtocol; + +public class StatFactory { + + /** The instance of this factory */ + private static StatFactory instance; + /** Whether or not the stat factory was initialized */ + private static boolean initialized; + + /** The owning plugin */ + private Plugin plugin; + + /** + * Construct a new StatFactory. + *

+ * This represents a data structure that will collate and save statistical + * information. + * + * @param plugin - the owning plugin + */ + private StatFactory(Plugin plugin) { + this.plugin = plugin; + } + + /** + * Get the instance of this factory. + * + * @return The singleton instance for this factory. + * + * @throws IllegalStateException if the factory was never initialized with + * {@link #init(Plugin)}. + */ + public static StatFactory getInstance() throws IllegalStateException { + if (instance == null) { + if (!initialized) { + throw new IllegalStateException("The StatFactory was never initialized by the owning plugin! This is a severe error and should be fixed. Please call StatFactory.init() first!"); + } + } + + return instance; + } + + /** + * Initialize the manager. + * + * @param plugin - the owning plugin + */ + public static void init(Plugin plugin) { + + System.out.println("[StatFactory] Initializing stat factory..."); + + // create singleton instance + instance = new StatFactory(plugin); + initialized = true; + } + + /** + * Register the client connection stat listener. + *

+ * This is used to keep track of what IP players are connecting through. + *

+ * + * @param protocolManager - the protocol lib manager. + * + * @return {@code true} if the client was registered, {@code false} + * otherwise. + */ + public boolean registerClientConnectionStat(ProtocolManager protocolManager) { + if (!initialized) { + return false; + } + + System.out.println("[StatFactory] Registering client connection stat..."); + + protocolManager.addPacketListener(new PacketAdapter(plugin, ListenerPriority.NORMAL, PacketType.Handshake.Client.SET_PROTOCOL) { + + @Override + public void onPacketReceiving(PacketEvent event) { + + // confirm correct packet + if (event.getPacketType() == PacketType.Handshake.Client.SET_PROTOCOL) { + + Player p = event.getPlayer(); + if (p != null) { + + // get the handshake packet + PacketHandshakingInSetProtocol packet = (PacketHandshakingInSetProtocol) event.getPacket().getHandle(); + + // hostname field from packet is 255 bytes long + // in form of hostname: + // dev.mc-gtm.net24.101.17.184b50fd86cbcc642d0a5f87e975f5a817c + // THEN SOME RANDOM ASS JSON + String hostname = packet.hostname; + + // drop the JSON attached info + String[] parts = hostname.split("\\["); + if (parts.length > 1) { + + // in form of + // dev.mc-gtm.net24.100.10.100b50fd86cbcc642d0a5f87e975f5a817c + String playerInfo = parts[0]; + + // split on a regex of IP format + String[] playerParts = playerInfo.split("[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}"); + + if (playerParts.length > 1) { + + // IP the player CONNECTED TO + String connectedIP = playerParts[0]; + // player uuid + String trimmedUUID = playerParts[1]; + + // TODO remove debug + Core.log("[StatFactory][DEBUG] uuid=" + trimmedUUID + " conn using " + connectedIP); + + // if we correctly parsed the connected ip + if (connectedIP != null && !connectedIP.isEmpty()) { + + // if this is because of SRV records + if (connectedIP.contains("gtm-prox1") || connectedIP.contains("gtm-prox2")){ + connectedIP = "mc-gtm.net"; + } + if (connectedIP.contains("gtm-dream") || connectedIP.contains("dream.mc-gtm")){ + connectedIP = "dream.mc-gtm.net"; + } + if (connectedIP.contains("gtm-vicemc") || connectedIP.contains("vicemc.net")){ + connectedIP = "play.vicemc.net"; + } + + // if uuid is correctly parsed + if (trimmedUUID != null && !trimmedUUID.isEmpty()) { + + // remove escapes and whitespace + trimmedUUID = trimmedUUID.replace("\\", ""); + trimmedUUID = trimmedUUID.trim(); + + UUID userUUID = UUIDUtil.createUUID(trimmedUUID).orElse(null); + if (userUUID != null){ + + String finalConnectedIP = connectedIP; + + // TODO remove debug + Core.log("[StatFactory][DEBUG] Adding to db uuid=" + trimmedUUID + " conn using " + finalConnectedIP); + + Bukkit.getScheduler().runTaskAsynchronously(getPlugin(), () -> { + try (Connection conn = BaseDatabase.getInstance().getConnection()){ + StatDAO.createUserJoinInfo(conn, userUUID, finalConnectedIP); + } + catch(Exception e){ + e.printStackTrace(); + } + }); + } + } + } + } + } + } + } + } + }); + + return true; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/task/ExpirableTask.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/task/ExpirableTask.java new file mode 100644 index 0000000..86261de --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/task/ExpirableTask.java @@ -0,0 +1,161 @@ +package net.grandtheftmc.core.task; + +import org.bukkit.plugin.Plugin; + +/** + * Representation of an expirable {@link Task}. It will expire after a set + * length. Optionally can be dynamic or set-in-stone via locking the handler. + */ +public abstract class ExpirableTask extends RepeatingTask { + + /** Whether or not the task's time/length is locked. */ + private final boolean locked; + /** Overall length of the task in seconds. */ + private double length; + /** Current time in seconds left until the task expires. */ + private double timeLeft; + /** Whether or not this task has expired. */ + private boolean expired; + + /** + * Constructs a new ExpirableTask. Defaults to making multiExecution 'false' + * and locked to 'true'. + * + * @param plugin - Plugin handling the task. + * @param delay - Delay in seconds until the task begins execution. + * @param interval - Interval in seconds between executions. + * @param length - Overall length of the task in seconds (how long until + * expiration). + */ + public ExpirableTask(Plugin plugin, double delay, double interval, double length) { + this(plugin, false, delay, interval, length, true); + } + + /** + * Constructs a new ExpirableTask. Defaults to making multiExecution + * 'false'. + * + * @param plugin - Plugin handling the task. + * @param delay - Delay in seconds until the task begins execution. + * @param interval - Interval in seconds between executions. + * @param length - Overall length of the task in seconds (how long until + * expiration). + * @param locked - Whether or not to lock the tasks' time and length. + */ + public ExpirableTask(Plugin plugin, double delay, double interval, double length, boolean locked) { + this(plugin, false, delay, interval, length, locked); + } + + /** + * Constructs a new ExpirableTask. + * + * @param plugin - Plugin handling the task. + * @param multiExecution - Whether or not the task can be executed multiple + * times. + * @param delay - Delay in seconds until the task begins execution. + * @param interval - Interval in seconds between executions. + * @param length - Overall length of the task in seconds (how long until + * expiration). + * @param locked - Whether or not to lock the tasks' time and length. + */ + public ExpirableTask(Plugin plugin, boolean multiExecution, double delay, double interval, double length, boolean locked) { + super(plugin, multiExecution, delay, interval); + this.length = length; + this.timeLeft = length; + this.locked = locked; + } + + /** + * {@inheritDoc} + */ + @Override + protected final void onInterval() { + if (timeLeft > 0) { + onInterval(timeLeft); + timeLeft = timeLeft - interval; + return; + } + + cancel(); + expired = true; + onExpire(); + } + + /** + * Check to see if the TaskHandler's time/length is currently locked. + * + * @return {@code true} if the TaskHandler is locked, otherwise + * {@code false}. + */ + public boolean isLocked() { + return locked; + } + + /** + * Get the overall length of the task. + * + * @return {@code double} representing the task's overall length in seconds. + */ + public double getLength() { + return length; + } + + /** + * Set the length of the task. + * + * @param length - {@code double} to be set as the task's new length. + */ + public void setLength(double length) { + this.length = length; + } + + /** + * Get the current time left until the task expires. + * + * @return {@code double} representing the time left in seconds until + * expiration. + */ + public double getTimeLeft() { + return timeLeft; + } + + /** + * Set the time left until the task expires. + * + * @param timeLeft - {@code double}, in seconds, to be set as the task's new + * time left. + */ + public void setTimeLeft(double timeLeft) { + this.timeLeft = timeLeft; + } + + /** + * Checks to see if the task has expired. This differs from + * {@link #isCancelled()} since this checks for whether or not the time has + * actually depleted- properly expiring instead of possibly being cancelled + * somewhere during the task's execution. + * + * @return {@code true} if the time left for the task until expiration is 0, + * marking it as expired. Otherwise, if it is not, {@code false}. + */ + public boolean hasExpired() { + return expired; + } + + /** + * Optional call-back for when the task ends execution. + */ + protected void onExpire() { + } + + /** + * Call-back for when the task is run. This allows you to execute code + * according to its execution interval and it also supplies the current + * time-left. This is called by {@link #onInterval()}. + * + * @param timeLeft - {@code double} representing the time left, in seconds, + * until the task expires + */ + protected abstract void onInterval(double timeLeft); + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/task/RepeatingTask.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/task/RepeatingTask.java new file mode 100644 index 0000000..8a9a1ae --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/task/RepeatingTask.java @@ -0,0 +1,213 @@ +package net.grandtheftmc.core.task; + +import org.bukkit.Bukkit; +import org.bukkit.plugin.Plugin; + +/** + * Representation of a repeating {@link Task}. A task that repeats over + * and over infinitely at a set interval and optional initial delay. + */ +public abstract class RepeatingTask extends Task { + + /** The interval in seconds at which the task executes. */ + protected final double interval; + /** The initial delay in seconds until the task begins execution. */ + protected final double delay; + /** Whether or not the task is cancelled. */ + protected boolean cancelled; + /** Whether the task has begun execution */ + private boolean started; + /** Whether or not the delay has been completed if there was one. */ + private boolean delayCompleted; + /** Whether or not the task is currently paused. */ + private boolean paused; + /** The task's system epoch time in milliseconds. */ + private long epoch; + + /** + * Construct a new RepeatingTask, which is used to repeatedly run code. + * + * @param plugin - the owning plugin + * @param delay - the delay, in seconds, until the task executes + * @param interval - the interval, in seconds, between running the task + */ + public RepeatingTask(Plugin plugin, double delay, double interval) { + this(plugin, false, delay, interval); + } + + /** + * Construct a new RepeatingTask, which is used to repeatedly run code. + * + * @param plugin - the owning plugin + * @param multiExecution - whether this task can be stopped/ran multiple times + * @param delay - the delay, in seconds, until the task executes + * @param interval - the interval, in seconds, between running the task + */ + public RepeatingTask(Plugin plugin, boolean multiExecution, double delay, double interval) { + super(plugin, multiExecution); + this.delay = delay; + this.interval = interval; + this.epoch = System.currentTimeMillis(); + } + + /** + * {@inheritDoc} + */ + @Override + public void execute() { + execute(false); + } + + /** + * {@inheritDoc} + */ + @Override + public void execute(boolean runAsynchronously) { + if(!started || multiExecution) { + if(runAsynchronously) { + async = true; + id = Bukkit.getScheduler().runTaskTimerAsynchronously(plugin, this, 0L, 1L).getTaskId(); + } else { + id = Bukkit.getScheduler().scheduleSyncRepeatingTask(plugin, this, 0L, 1L); + } + } + } + + /** + * {@inheritDoc} + */ + @Override + public void run() { + if (cancelled) { + Bukkit.getScheduler().cancelTask(id); + onCancel(); + return; + } + + if (paused) { + return; + } + + if (!started) { + onStart(); + started = true; + } + + // The task's current system time in milliseconds. + long current = System.currentTimeMillis(); + + if (delay > 0) { + if (!delayCompleted) { + if (current >= epoch + (delay * 1000)) { + delayCompleted = true; + onDelayComplete(); + } + + return; + } + } + + if (current >= epoch + (interval * 1000)) { + epoch = current; + onInterval(); + } + } + + /** + * Check to see whether or not the task has started execution. + * + * @return {@code true} if it has started execution, otherwise {@code false} . + */ + public boolean hasStarted() { + return started; + } + + /** + * Check to see if the task's execution is currently paused. + * + * @return {@code true} if the task is paused, otherwise {@code false}. + */ + public boolean isPaused() { + return paused; + } + + /** + * Pause the task's execution if it already isn't. + */ + public void pause() { + if (!paused) { + paused = true; + onPause(); + } + } + + /** + * Resume the task if it is currently paused. + */ + public void resume() { + if (paused) { + paused = false; + onResume(); + } + } + + /** + * Check to see whether or not the task is cancelled. + * + * @return {@code true} if the task has been cancelled, otherwise + * {@code false}. + */ + public boolean isCancelled() { + return cancelled; + } + + /** + * Cancel the task's execution. + */ + public void cancel() { + cancelled = true; + } + + /** + * Get the interval in seconds between executions. + * + * @return {@code double} representing the interval between executions. + */ + public double getInterval() { + return interval; + } + + /** + * Optional call-back for when the task starts executing. + */ + protected void onStart() {} + + /** + * Optional call-back for when the task's execution has been delayed and the + * first interval begins. + */ + protected void onDelayComplete() {} + + /** + * Optional call-back for when the task's execution is paused. + */ + protected void onPause() {} + + /** + * Optional call-back for when the task's execution is resumed. + */ + protected void onResume() {} + + /** + * Optional call-back for when the task's execution is cancelled. + */ + protected void onCancel() {} + + /** + * Call-back for when the task is run at the appropriate interval. + */ + protected abstract void onInterval(); + +} + + diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/task/Task.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/task/Task.java new file mode 100644 index 0000000..f5b1aa3 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/task/Task.java @@ -0,0 +1,96 @@ +package net.grandtheftmc.core.task; + +import org.apache.commons.lang.Validate; +import org.bukkit.Bukkit; +import org.bukkit.plugin.Plugin; + +import net.grandtheftmc.core.util.PluginAssociated; + +/** + * Representation of a basic once off task. + */ +public abstract class Task implements PluginAssociated, Runnable { + + /** Plugin handling the task. */ + protected final Plugin plugin; + /** Can this task be executed multiple times */ + protected final boolean multiExecution; + /** Whether or not the task is asynchronous. */ + protected boolean async; + /** The task's id. */ + protected int id = -1; + /** Whether this task has {@link #execute()} */ + private boolean executed; + + /** + * Constructs a new Task. + * + * @param plugin - Plugin handling the task. + */ + public Task(Plugin plugin) { + this(plugin, false); + } + + /** + * Constructs a new Task. + * + * @param plugin - Plugin handling the task + * @param multiExecution - ability for it to be executed multiple times + */ + public Task(Plugin plugin, boolean multiExecution) { + Validate.notNull(plugin, "Plugin cannot be null!"); + this.plugin = plugin; + this.multiExecution = multiExecution; + } + + @Override + public Plugin getPlugin() { + return plugin; + } + + /** + * Check to see whether or not this task is asynchronous. This will + * always return {@code false} if the task has not been executed. + * + * @return {@code true} if the task is running asynchronously, otherwise + * {@code false}. + */ + public boolean isAsynchronous() { + return async; + } + + /** Starts the synchronous execution of the task. */ + public void execute() { + execute(false); + } + + /** + * Starts the specified (sync/async) execution of the task. + * + * @param runAsynchronously - whether or not to run this task asynchronously + */ + public void execute(boolean runAsynchronously) { + if (!executed || multiExecution) { + if (runAsynchronously) { + async = true; + id = Bukkit.getScheduler().runTaskAsynchronously(plugin, this).getTaskId(); + } + else { + id = Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, this); + } + + executed = true; + } + } + + /** + * Get the task's id. This is by default initialized to -1, so if it returns + * -1 it means the task has not been executed yet. + * + * @return Task id in the form of a {@code int}. + */ + protected int getTaskId() { + return id; + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/task/common/AntiAFK.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/task/common/AntiAFK.java new file mode 100644 index 0000000..03e6aab --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/task/common/AntiAFK.java @@ -0,0 +1,74 @@ +package net.grandtheftmc.core.task.common; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.util.Component; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.player.PlayerLoginEvent; + +import java.util.HashSet; +import java.util.Map; +import java.util.Set; +import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; +import java.util.concurrent.TimeUnit; + +public class AntiAFK implements Component { + private final ConcurrentMap afk; + private static final int AFK_MINUTES = 5; + + public AntiAFK() { + this.afk = new ConcurrentHashMap<>(); + Core.getInstance().getServer().getPluginManager().registerEvents(this, Core.getInstance()); + } + + @Override + public AntiAFK onDisable(Core plugin) { + this.afk.clear(); + return this; + } + + public void refreshAfk(Player player) { + afk.put(player.getUniqueId(), System.currentTimeMillis()); + } + + @EventHandler + public void on(PlayerLoginEvent event) { + + + User joining = Core.getUserManager().getLoadedUser(event.getPlayer().getUniqueId()); + if (Core.getInstance().getServer().getOnlinePlayers().size() >= Core.getInstance().getServer().getMaxPlayers()) { + Set toBeRemoved = new HashSet<>(); + boolean kick = false; + for (Map.Entry afkPlayers : afk.entrySet()) { + if (System.currentTimeMillis() > (afkPlayers.getValue() + TimeUnit.MINUTES.toMillis(AFK_MINUTES))) { + toBeRemoved.add(afkPlayers.getKey()); + } + } + for (UUID uuid : toBeRemoved) { + Player player = Bukkit.getPlayer(uuid); + if (player != null) { + User user = Core.getUserManager().getLoadedUser(uuid); + if (!user.isRank(UserRank.HELPOP) && user.isRank(UserRank.VIP) && !user.hasTrialRank()) continue; + kick = true; + afk.remove(uuid); + player.kickPlayer(Lang.GTM.f("&cYou were kicked for being afk!")); + } else { + if (afk.containsKey(uuid)) afk.remove(uuid); + } + } + toBeRemoved.clear(); + if (kick || joining.isRank(UserRank.PREMIUM)) { + event.allow(); + } else { + event.setKickMessage(Utils.f("&cSorry, this server is full! You must be &a&lPREMIUM+ &cto join full games!")); + } + } + } +} \ No newline at end of file diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/task/common/BossBarTask.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/task/common/BossBarTask.java new file mode 100644 index 0000000..1131b22 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/task/common/BossBarTask.java @@ -0,0 +1,74 @@ +package net.grandtheftmc.core.task.common; + +import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.scheduler.BukkitTask; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserManager; + +public class BossBarTask { + + /** Whether or not the task is enabled */ + private boolean enabled; + /** The task object held */ + private BukkitTask task; + + /** + * Construct a new BossBar task that will update boss bar info for all + * users. + */ + public BossBarTask() { + this.enabled = true; + constructTask(); + } + + /** + * Construct the runnable task and assign it. + */ + public void constructTask() { + this.task = new BukkitRunnable() { + @Override + public void run() { + for (User user : UserManager.getInstance().getUsers()) { + user.refreshBossBar(); + } + } + }.runTaskTimerAsynchronously(Core.getInstance(), 0, 1); + } + + /** + * Get whether or not the boss bar task is enabled. + * + * @return {@code true} if the boss bar task is enabled. + */ + public boolean isEnabled() { + return enabled; + } + + /** + * Set whether or not the boss bar task is enabled. + * + * @param enabled - {@code true} if the task is enabled. + */ + public void setEnabled(boolean enabled) { + this.enabled = enabled; + + // if disabling, cancel the task + if (!enabled) { + if (task != null) { + task.cancel(); + } + } + else { + + // if enabling and task exists, cancel + if (task != null) { + task.cancel(); + } + + // construct new task + constructTask(); + } + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/trading/TradeManager.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/trading/TradeManager.java new file mode 100644 index 0000000..2d2259b --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/trading/TradeManager.java @@ -0,0 +1,227 @@ +package net.grandtheftmc.core.trading; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; +import java.util.UUID; + +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.inventory.ItemStack; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.Utils; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.util.Component; +import net.grandtheftmc.core.util.ServerUtil; + +/** + * Created by Timothy Lampen on 11/1/2017. + */ +public class TradeManager implements Component, Listener{ + + /** Whether trading is enabled */ + private boolean enabled; + + @Override + public TradeManager onEnable(Core plugin) { + this.enabled = true; + Bukkit.getPluginManager().registerEvents(this, plugin); + return this; + } + + private final ArrayList activeTrades = new ArrayList<>(); + private final HashMap pendingTrades = new HashMap<>(); + + @EventHandler + public void onLeave(PlayerQuitEvent event) { + Player player = event.getPlayer(); + Optional tradeMenu = getTrade(player); + if(!tradeMenu.isPresent()) + return; + endTrade(tradeMenu.get(), false, true); + } + + @EventHandler + public void onChat(AsyncPlayerChatEvent event) { + Player player = event.getPlayer(); + Optional tradeMenu = getTrade(player); + String msg = event.getMessage(); + if(!tradeMenu.isPresent()) + return; + event.setCancelled(true); + if(msg.equalsIgnoreCase("cancel")) { + tradeMenu.get().updatePlayerSettingCustomAmt(player, false); + tradeMenu.get().openInventory(player); + return; + } + int amt; + try { + amt =Integer.parseInt(event.getMessage()); + }catch (NumberFormatException nfe) { + player.sendMessage(Lang.TRADE.f("&6" + msg + " &7is not a number. Please type a number or type '&ccancel&7' to return to the trade menu.")); + return; + } + if(amt <= 0) { + player.sendMessage(Lang.TRADE.f("&6" + msg + " &7 is not greater than 0. Please type a positive number or type '&ccancel&7' to return to the trade menu.")); + return; + } + tradeMenu.get().updatePlayerSettingCustomAmt(player, false); + tradeMenu.get().openInventory(player); + if(tradeMenu.get().getTrader().equals(player)) { + tradeMenu.get().setTraderMoney(TradingSlotType.SET_CUSTOM_AMOUNT, amt); + return; + } + tradeMenu.get().setTradeeMoney(TradingSlotType.SET_CUSTOM_AMOUNT, amt); + } + + /** + * @param player the player who is in the trade (the tradee or trader) + * @return the trademenu that is currently active. + */ + public Optional getTrade(Player player) { + return activeTrades.stream().filter(trade -> trade.getTrader().equals(player) || trade.getTradee().equals(player)).findFirst(); + } + + /** + * @param tradee the player being traded (the person who accepts the trade) + * @param trader the player who initiated the trade + */ + public void startTrade(Player trader, Player tradee){ + activeTrades.add(new TradeMenu(trader, tradee)); + } + + /** + * @param tradeMenu the trademenu that you want to end + * @param successful if the trade was done successfully + * Note that the player's inventories cannot be closed here because a loop could be made with the onClose event. + */ + public void endTrade(TradeMenu tradeMenu, boolean successful, boolean closeInventories) { + if(!successful) { + tradeMenu.getSlotPairs().get(TradingSlotType.TRADER_ITEM).forEach(slot -> { + ItemStack is = tradeMenu.getInventory().getItem(slot); + if(is==null || is.getType()==Material.AIR || is.getType()== Material.STAINED_GLASS_PANE) + return; + Utils.giveItems(tradeMenu.getTrader(), tradeMenu.getInventory().getItem(slot)); + }); + tradeMenu.getSlotPairs().get(TradingSlotType.TRADEE_ITEM).forEach(slot -> { + ItemStack is = tradeMenu.getInventory().getItem(slot); + if(is==null || is.getType()==Material.AIR || is.getType()== Material.STAINED_GLASS_PANE) + return; + Utils.giveItems(tradeMenu.getTradee(), tradeMenu.getInventory().getItem(slot)); + }); + tradeMenu.getTrader().getInventory().addItem(tradeMenu.getTrader().getItemOnCursor()); + tradeMenu.getTrader().setItemOnCursor(null); + tradeMenu.getTrader().sendMessage(Lang.TRADE.f("&7The trade has been cancelled.")); + + tradeMenu.getTradee().getInventory().addItem(tradeMenu.getTradee().getItemOnCursor()); + tradeMenu.getTradee().setItemOnCursor(null); + tradeMenu.getTradee().sendMessage(Lang.TRADE.f("&7The trade has been cancelled.")); + + ServerUtil.runTaskLater(() -> { + tradeMenu.getTradee().updateInventory(); + tradeMenu.getTrader().updateInventory(); + }, 1); + } + else{ + String fault = ""; + User traderUser = Core.getUserManager().getLoadedUser(tradeMenu.getTrader().getUniqueId()); + User tradeeUser = Core.getUserManager().getLoadedUser(tradeMenu.getTradee().getUniqueId()); + if(!(traderUser.getMoney() >= tradeMenu.getMoneyTrader())) { + fault = tradeMenu.getTrader().getName(); + } + if(!(tradeeUser.getMoney() >= tradeMenu.getMoneyTradee())) { + fault = tradeMenu.getTradee().getName(); + } + if(!fault.equals("")) {//it cancelled somehow + tradeMenu.getTradee().sendMessage(Lang.TRADE.f("&6" + fault + " &7does not have enough money to complete this trade,")); + return; + } + tradeMenu.getSlotPairs().get(TradingSlotType.TRADER_ITEM).forEach(slot -> { + ItemStack is = tradeMenu.getInventory().getItem(slot); + if(is==null || is.getType()==Material.AIR || is.getType()== Material.STAINED_GLASS_PANE) + return; + Utils.giveItems(tradeMenu.getTradee(), tradeMenu.getInventory().getItem(slot)); + }); + tradeMenu.getSlotPairs().get(TradingSlotType.TRADEE_ITEM).forEach(slot -> { + ItemStack is = tradeMenu.getInventory().getItem(slot); + if(is==null || is.getType()==Material.AIR || is.getType()== Material.STAINED_GLASS_PANE) + return; + Utils.giveItems(tradeMenu.getTrader(), tradeMenu.getInventory().getItem(slot)); + }); + if(tradeMenu.getMoneyTrader()>0) { + tradeeUser.addMoney(tradeMenu.getMoneyTrader()); + traderUser.takeMoney(tradeMenu.getMoneyTrader()); + Utils.insertLog(tradeeUser.getUUID(), tradeMenu.getTradee().getName(), "getTradeMoney", "TRADEMENU", "MONEY", tradeMenu.getMoneyTrader(), -1); + Utils.insertLog(traderUser.getUUID(), tradeMenu.getTrader().getName(), "giveTradeMoney", "TRADEMENU", "MONEY", tradeMenu.getMoneyTrader(), -1); + } + if(tradeMenu.getMoneyTradee()>0) { + traderUser.addMoney(tradeMenu.getMoneyTradee()); + tradeeUser.takeMoney(tradeMenu.getMoneyTradee()); + Utils.insertLog(tradeeUser.getUUID(), tradeMenu.getTradee().getName(), "giveTradeMoney", "TRADEMENU", "MONEY", tradeMenu.getMoneyTradee(), -1); + Utils.insertLog(traderUser.getUUID(), tradeMenu.getTrader().getName(), "getTradeMoney", "TRADEMENU", "MONEY", tradeMenu.getMoneyTradee(), -1); + } + tradeMenu.getTradee().playSound(tradeMenu.getTradee().getLocation(), Sound.ENTITY_PLAYER_LEVELUP, 10, 10); + tradeMenu.getTrader().playSound(tradeMenu.getTrader().getLocation(), Sound.ENTITY_PLAYER_LEVELUP, 10, 10); + } + this.activeTrades.remove(tradeMenu); + if(closeInventories) { + tradeMenu.getTradee().closeInventory(); + tradeMenu.getTrader().closeInventory(); + } + } + + /** + * @param origin the player who sent the request + * @param target the target player who was sent the request + */ + public void addPendingTrade(UUID origin, UUID target) { + this.pendingTrades.put(target, origin); + } + + /** + * @param target the target player who was sent the request + * @return the entry of the pending trade with sender (value) and target (key) + */ + public Optional> getPendingTrade(UUID target){ + return this.pendingTrades.entrySet().stream().filter(entry -> entry.getKey().equals(target)).findFirst(); + } + + /** + * @param target the target who was sent the request + */ + public void removePendingTrade(UUID target) { + if(this.pendingTrades.containsKey(target)) + this.pendingTrades.remove(target); + } + + public ArrayList getActiveTrades() { + return activeTrades; + } + + /** + * Get whether or not the trade manager is enabled. + * + * @return {@code true} if the trade manager is enabled, {@code false} otherwise. + */ + public boolean isEnabled() { + return enabled; + } + + /** + * Set whether the trade manager is enabled. + * + * @param enabled - {@code true} if the trade manager is enabled, {@code false} otherwise. + */ + public void setEnabled(boolean enabled) { + this.enabled = enabled; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/trading/TradeMenu.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/trading/TradeMenu.java new file mode 100644 index 0000000..bde387a --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/trading/TradeMenu.java @@ -0,0 +1,505 @@ +package net.grandtheftmc.core.trading; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.Utils; +import net.grandtheftmc.core.inventory.CoreMenu; +import net.grandtheftmc.core.inventory.button.ClickableItem; +import net.grandtheftmc.core.inventory.button.MenuItem; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.core.util.factory.ItemFactory; +import org.bukkit.Material; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryCloseEvent; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.scheduler.BukkitRunnable; + +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.LinkedList; + +/** + * Created by Timothy Lampen on 11/1/2017. + */ +public class TradeMenu extends CoreMenu{ + private final HashMap> slotPairs = new HashMap<>(); + private final Player trader, tradee; + private double moneyTrader = 0, moneyTradee = 0; + private TradingStatus status = TradingStatus.WAITING; + private boolean traderSettingCustomAmt = false, tradeeSettingCustomAmt = false; + + public TradeMenu(Player trader, Player tradee) { + super(6, generateTitle(trader.getName(), tradee.getName())); + loadSlotPairs(); + this.tradee = tradee; + this.trader = trader; + + this.slotPairs.get(TradingSlotType.NOTHING).forEach(slot -> { + addItem(generateDefaultItem(TradingSlotType.NOTHING, slot)); + }); + + this.slotPairs.get(TradingSlotType.ACCEPT).forEach(slot -> { + addItem(generateDefaultItem(TradingSlotType.ACCEPT, slot)); + }); + + this.slotPairs.get(TradingSlotType.DECLINE).forEach(slot -> { + addItem(generateDefaultItem(TradingSlotType.DECLINE, slot)); + }); + + addItem(generateDefaultItem(TradingSlotType.TRADER_MONEY)); + addItem(generateDefaultItem(TradingSlotType.TRADEE_MONEY)); + addItem(generateDefaultItem(TradingSlotType.ADD_HUNDRED)); + addItem(generateDefaultItem(TradingSlotType.ADD_THOUSAND)); + addItem(generateDefaultItem(TradingSlotType.ADD_TEN_THOUSAND)); + addItem(generateDefaultItem(TradingSlotType.SET_CUSTOM_AMOUNT)); + openInventory(trader); + openInventory(tradee); + } + + @Override + public void onClick(InventoryClickEvent event){ + ItemStack cursor = event.getCursor(); + ItemStack item = event.getCurrentItem(); + Player player = (Player)event.getWhoClicked(); + int slot = event.getSlot(); + + if(!Core.getTradeManager().getActiveTrades().contains(this)) + return; + if(!(event.getClick().toString().contains("LEFT") || event.getClick().toString().contains("RIGHT"))) { + event.setCancelled(true); + return; + } + if(cursor.getType()==Material.AIR && item.getType()==Material.AIR) + return; + if(event.getClickedInventory()==null) { + event.setCancelled(true); + return; + } + if(event.getClickedInventory().equals(player.getInventory())) { + if(!event.getClick().isShiftClick()) + return; + if(item==null|| item.getType()==Material.COMPASS || item.getType()== Material.WATCH || item.getType()==Material.CHEST) { + event.setCancelled(true); + return; + } + + if(player.equals(this.trader)) { + for(Integer i : this.slotPairs.get(TradingSlotType.TRADER_ITEM)) { + ItemStack is = event.getInventory().getItem(i); + if(is==null || is.getType()==Material.AIR) { + event.getInventory().setItem(i, item); + event.setCurrentItem(new ItemStack(Material.AIR)); + if(this.status == TradingStatus.ONE_ACCEPT) { + this.status = TradingStatus.WAITING; + int[] slots = new int[]{31,40,49}; + for(int ia : slots) + addItem(generateDefaultItem(TradingSlotType.NOTHING, ia)); + } + break; + } + } + this.trader.updateInventory(); + this.tradee.updateInventory(); + event.setCancelled(true); + } + else{ + for(Integer i : this.slotPairs.get(TradingSlotType.TRADEE_ITEM)) { + ItemStack is = event.getInventory().getItem(i); + if(is==null || is.getType()==Material.AIR) { + event.getInventory().setItem(i, item); + event.setCurrentItem(new ItemStack(Material.AIR)); + if(this.status == TradingStatus.ONE_ACCEPT) { + this.status = TradingStatus.WAITING; + int[] slots = new int[]{4,13,22}; + for(int ia : slots) + addItem(generateDefaultItem(TradingSlotType.NOTHING, ia)); + } + break; + } + } + this.trader.updateInventory(); + this.tradee.updateInventory(); + event.setCancelled(true); + } + } + else if(this.slotPairs.get(TradingSlotType.TRADER_ITEM).contains(slot)) { + Core.error("2"); + if(player.equals(this.trader)) { + if(this.status == TradingStatus.ONE_ACCEPT) { + this.status = TradingStatus.WAITING; + int[] slots = new int[]{31,40,49}; + for(int i : slots) + addItem(generateDefaultItem(TradingSlotType.NOTHING, i)); + ServerUtil.runTaskLater(() -> { + this.tradee.updateInventory(); + this.trader.updateInventory(); + }, 1); + } + } + else { + event.setCancelled(true); + } + } + else if(this.slotPairs.get(TradingSlotType.TRADEE_ITEM).contains(slot)) { + if(player.equals(this.tradee)) { + if(this.status == TradingStatus.ONE_ACCEPT) { + this.status = TradingStatus.WAITING; + int[] slots = new int[]{4,13,22}; + for(int i : slots) + addItem(generateDefaultItem(TradingSlotType.NOTHING, i)); + ServerUtil.runTaskLater(() -> { + this.tradee.updateInventory(); + this.trader.updateInventory(); + }, 1); + + } + } + else { + event.setCancelled(true); + + } + } + } + + @Override + public void onClose(InventoryCloseEvent event){ + Player player = (Player)event.getPlayer(); + if(!Core.getTradeManager().getActiveTrades().contains(this)) + return; + if(player.equals(trader)) { + if (!this.traderSettingCustomAmt) { + Core.getTradeManager().endTrade(this, false, false); + this.tradee.closeInventory(); + } + } + else { + if (!this.tradeeSettingCustomAmt) { + Core.getTradeManager().endTrade(this, false, false); + this.trader.closeInventory(); + } + } + } + + /** + * @param type the type of item in the inventory that was clicked + * @param amt the amount to set the trader's money to. + */ + public boolean setTraderMoney(TradingSlotType type, double amt){ + User user = Core.getUserManager().getLoadedUser(this.trader.getUniqueId()); + if(!user.hasMoney(amt)) { + addItem(new ClickableItem(this.slotPairs.get(type).get(0), new ItemFactory(Material.WOOL).setDurability((short)14).setName(Utils.f("&cYou do not have enough money!")).setLore(Utils.f("&7Click to try again")).build(), (player, clickType)-> { + addItem(generateDefaultItem(type)); + })); + return false; + } + this.moneyTrader = amt; + MenuItem menuItem = generateDefaultItem(TradingSlotType.TRADER_MONEY); + ItemStack is = menuItem.getItemStack().clone(); + ItemMeta im = is.getItemMeta(); + im.setDisplayName(Utils.f("&7+ &a" + Utils.formatMoney(amt))); + is.setItemMeta(im); + getInventory().setItem(menuItem.getIndex(), is); + tradee.updateInventory(); + trader.updateInventory(); + resetStatus(); + return true; + } + + /** + * @param type the type of item in the inventory that was clicked + * @param amt the amount to set the tradee's money to. + */ + public boolean setTradeeMoney(TradingSlotType type, double amt){ + User user = Core.getUserManager().getLoadedUser(this.tradee.getUniqueId()); + if(!user.hasMoney(amt)) { + addItem(new ClickableItem(this.slotPairs.get(type).get(0), new ItemFactory(Material.WOOL).setDurability((short)14).setName(Utils.f("&cYou do not have enough money!)")).setLore(Utils.f("&7Click to try again")).build(), (player, clickType)-> { + addItem(generateDefaultItem(type)); + })); + return false; + } + this.moneyTradee = amt; + MenuItem menuItem = generateDefaultItem(TradingSlotType.TRADEE_MONEY); + ItemStack is = menuItem.getItemStack().clone(); + ItemMeta im = is.getItemMeta(); + im.setDisplayName(Utils.f("&7+ &a" + Utils.formatMoney(amt))); + is.setItemMeta(im); + getInventory().setItem(menuItem.getIndex(), is); + resetStatus(); + return true; + } + + /** + * Used when a player edits the trade. + */ + private static final int[] DIVIDER_SLOTS = new int[]{4,13,22,31,40,49}; + public void resetStatus(){ + if(this.status == TradingStatus.ONE_ACCEPT) { + this.status = TradingStatus.WAITING; + for(int i : DIVIDER_SLOTS) + addItem(generateDefaultItem(TradingSlotType.NOTHING, i)); + this.tradee.updateInventory(); + this.trader.updateInventory(); + } + } + + /** + * @return a hashmap with the type of item in the inventory, and the slot(s) that correspond to that type of item. + */ + public HashMap> getSlotPairs() { + return this.slotPairs; + } + + /** + * @return the money the tradee has offered + */ + public double getMoneyTradee() { + return moneyTradee; + } + + /** + * @return the money the trader has offered + */ + public double getMoneyTrader() { + return moneyTrader; + } + + private MenuItem generateDefaultItem(TradingSlotType type){ + return generateDefaultItem(type, this.slotPairs.get(type).size()>1 ? -1: this.slotPairs.get(type).get(0)); + } + + private MenuItem generateStackableItem(ItemStack is, TradingSlotType type, int slot){ + switch (type) { + case TRADEE_ITEM: + return new ClickableItem(slot, is, (playerA, clickTypeA) -> { + new BukkitRunnable() { + @Override + public void run() { + if(!playerA.equals(tradee)) + return; + ServerUtil.debug("is tradee"); + ItemStack cursor = tradee.getItemOnCursor().clone(); + MenuItem item = getMenuItem(slot); + if(cursor==null || cursor.getType() == Material.AIR) { + ServerUtil.debug("cursor null, should put item in hand."); + playerA.setItemOnCursor(item.getItemStack()); + addItem(generateDefaultItem(TradingSlotType.TRADEE_EMPTY_ITEM, slot)); + } + else { + ServerUtil.debug("cursor not null, should stack / switch the items"); + stackItemsInTrade(cursor, item, playerA, type, slot); + } + ServerUtil.debug("updated the player's inventory."); + playerA.updateInventory(); + resetStatus(); + } + }.runTaskLater(Core.getInstance(), 1); + }); + case TRADER_ITEM: + return new ClickableItem(slot, is, (playerA, clickTypeA) -> { + new BukkitRunnable() { + @Override + public void run() { + if(!playerA.equals(trader)) + return; + ServerUtil.debug("is tradee"); + ItemStack cursor = trader.getItemOnCursor().clone(); + MenuItem item = getMenuItem(slot); + if(cursor==null || cursor.getType() == Material.AIR) { + ServerUtil.debug("cursor null, should put item in hand."); + playerA.setItemOnCursor(item.getItemStack()); + addItem(generateDefaultItem(TradingSlotType.TRADER_EMPTY_ITEM, slot)); + } + else { + ServerUtil.debug("cursor not null, should stack / switch the items"); + stackItemsInTrade(cursor, item, playerA, type, slot); + } + ServerUtil.debug("updated the player's inventory."); + playerA.updateInventory(); + resetStatus(); + } + }.runTaskLater(Core.getInstance(), 1); + }); + } + return null; + } + + private void stackItemsInTrade(ItemStack cursor, MenuItem item, Player playerA, TradingSlotType type, int slot) { + if(cursor.isSimilar(item.getItemStack())) { + ServerUtil.debug("they are similar"); + if(cursor.getAmount() + item.getItemStack().getAmount() <= 64) { + ServerUtil.debug("less than 64, just put them together"); + item.getItemStack().setAmount(item.getItemStack().getAmount() + cursor.getAmount()); + addItem(item); + playerA.setItemOnCursor(new ItemStack(Material.AIR)); + } + else { + ServerUtil.debug("more than 64, so just make the item 64, remove that amount from cursor"); + int needed = 64 - item.getItemStack().getAmount(); + cursor.setAmount(cursor.getAmount() - needed); + item.getItemStack().setAmount(64); + addItem(item); + playerA.setItemOnCursor(cursor); + } + } + else { + ServerUtil.debug("player is trying to pick the item up."); + playerA.setItemOnCursor(item.getItemStack()); + addItem(generateStackableItem(cursor, type, slot)); + } + } + + + /** + * @param type the type of item that is going to be generated + * @param slot the slot that the item will be placed into + */ + private MenuItem generateDefaultItem(TradingSlotType type, int slot){ + switch (type) { + /*case TRADER_ITEM: + return new ClickableItem(slot, new ItemFactory(Material.STAINED_GLASS_PANE).setDurability((short)8).setName(Utils.f("&6" + this.trader.getName() + "&7's side")).build(), (player, clickType) -> { + if(player.equals(this.trader)) { + if(this.trader.getItemOnCursor()==null || this.trader.getItemOnCursor().getType()==Material.AIR) + return; + ServerUtil.debug(player.getItemOnCursor().getType() + "/ " + getMenuItem(slot).getItemStack().getType() + " / 1"); + addItem(generateStackableItem(player.getItemOnCursor(), TradingSlotType.TRADER_ITEM, slot)); + this.trader.setItemOnCursor(new ItemStack(Material.AIR)); + resetStatus(); + player.updateInventory(); + } + }); + case TRADEE_EMPTY_ITEM: + return new ClickableItem(slot, new ItemFactory(Material.STAINED_GLASS_PANE).setDurability((short)8).setName(Utils.f("&6" + this.tradee.getName() + "&7's side")).build(), (player, clickType) -> { + if(player.equals(this.tradee)) { + if(this.tradee.getItemOnCursor()==null || this.tradee.getItemOnCursor().getType()==Material.AIR) + return; + ServerUtil.debug(player.getItemOnCursor().getType() + "/ " + getMenuItem(slot).getItemStack().getType() + " / 2"); + addItem(generateStackableItem(player.getItemOnCursor(), TradingSlotType.TRADEE_ITEM, slot)); + this.tradee.setItemOnCursor(new ItemStack(Material.AIR)); + resetStatus(); + player.updateInventory(); + } + });*/ + case NOTHING: + return new MenuItem(slot, new ItemFactory(Material.STAINED_GLASS_PANE).setDurability((short)15).setName(" ").setLore(Utils.f("&a< &6" + trader.getName() + " &b&l| &6" + tradee.getName() + " &a>")).build(), false); + case TRADEE_MONEY: + return new MenuItem(slot, new ItemFactory(Material.PAPER).setUnsafeEnchantment(Enchantment.LURE, 0).addFlags(ItemFlag.HIDE_ENCHANTS).setName(Utils.f("&7+ &a$0")).build(), false); + case TRADER_MONEY: + return new MenuItem(slot, new ItemFactory(Material.PAPER).setUnsafeEnchantment(Enchantment.LURE, 0).addFlags(ItemFlag.HIDE_ENCHANTS).setName(Utils.f("&7+ &a$0")).build(), false); + case ADD_HUNDRED: + return new ClickableItem(slot, new ItemFactory(Material.IRON_NUGGET).setName(Utils.f("&7Add &a$100")).build(), (player, clickType)-> { + if(player.equals(this.trader)) { + setTraderMoney(type, this.moneyTrader + 100); + return; + } + setTradeeMoney(type, this.moneyTradee + 100); + }); + case ADD_THOUSAND: + return new ClickableItem(slot, new ItemFactory(Material.GOLD_INGOT).setName(Utils.f("&7Add &a$1,000")).build(), (player, clickType)-> { + if(player.equals(this.trader)) { + setTraderMoney(type, this.moneyTrader + 1000); + return; + } + setTradeeMoney(type, this.moneyTradee + 1000); + }); + case ADD_TEN_THOUSAND: + return new ClickableItem(slot, new ItemFactory(Material.GOLD_BLOCK).setName(Utils.f("&7Add &a$10,000")).build(), (player, clickType)-> { + if(player.equals(this.trader)) { + setTraderMoney(type, this.moneyTrader + 10000); + return; + } + setTradeeMoney(type, this.moneyTradee + 10000); + }); + case SET_CUSTOM_AMOUNT: + return new ClickableItem(slot, new ItemFactory(Material.DIAMOND).setName(Utils.f("&6Custom Amount")).build(), (player, clickType)->{ + updatePlayerSettingCustomAmt(player, true); + player.closeInventory(); + player.sendMessage(Lang.TRADE.f("&7Please insert the amount of money you would like to add to the trade. Or type '&ccancel&7' to return to the trade screen.")); + }); + case DECLINE: + return new ClickableItem(slot, new ItemFactory(Material.WOOL).setDurability((short)14).setName(Utils.f("&cDecline the trade")).build(), (player, clickType) -> { + this.status = TradingStatus.DECLINED; + Core.getTradeManager().endTrade(this, false, true); + }); + case ACCEPT: + return new ClickableItem(slot, new ItemFactory(Material.WOOL).setDurability((short)5).setName(Utils.f("&aAccept the trade")).build(), (player, clickType)-> { + ItemStack newDivider = generateDefaultItem(TradingSlotType.NOTHING).getItemStack(); + newDivider.setDurability((short)5); + int[] slots = player.equals(trader) ? new int[]{4,13,22} : new int[]{31,40,49}; + for(int i : slots) + addItem(new MenuItem(i, newDivider, false)); + boolean fullyComplete = true; + for(int i : new int[]{4,13,22,31,40,49}) + if(getInventory().getItem(i).getDurability()==15) { + fullyComplete = false; + break; + } + if(fullyComplete) { + this.status = TradingStatus.ACCPETED; + Core.getTradeManager().endTrade(this, true, true); + } + else + this.status = TradingStatus.ONE_ACCEPT; + }); + } + return null; + } + + + + private void loadSlotPairs(){ + slotPairs.put(TradingSlotType.TRADER_ITEM, new LinkedList<>(Arrays.asList(0,1,2,3,9,10,11,12,18,19,20,21,27,28,29,30,36,37,38))); + slotPairs.put(TradingSlotType.TRADEE_ITEM, new LinkedList<>(Arrays.asList(5,6,7,8,14,15,16,17,23,24,25,26,32,33,34,35,41,42,43))); + slotPairs.put(TradingSlotType.TRADER_MONEY, new LinkedList<>(Collections.singletonList(39))); + slotPairs.put(TradingSlotType.TRADEE_MONEY,new LinkedList<>( Collections.singletonList(44))); + slotPairs.put(TradingSlotType.ADD_TEN_THOUSAND, new LinkedList<>(Collections.singletonList(47))); + slotPairs.put(TradingSlotType.ADD_HUNDRED, new LinkedList<>(Collections.singletonList(45))); + slotPairs.put(TradingSlotType.ADD_THOUSAND, new LinkedList<>(Collections.singletonList(46))); + slotPairs.put(TradingSlotType.SET_CUSTOM_AMOUNT, new LinkedList<>(Collections.singletonList(48))); + slotPairs.put(TradingSlotType.NOTHING, new LinkedList<>(Arrays.asList(4,13,22,31,40,49))); + slotPairs.put(TradingSlotType.ACCEPT, new LinkedList<>(Arrays.asList(50,51))); + slotPairs.put(TradingSlotType.DECLINE, new LinkedList<>(Arrays.asList(52,53))); + } + + /** + * @return the tradee in the trade + */ + public Player getTradee() { + return this.tradee; + } + + /** + * @return the trader in the trade + */ + public Player getTrader() { + return this.trader; + } + + /** + * @param player the player that is using the chat function + * @param bool if they are using the chat custom ammount function. + */ + public void updatePlayerSettingCustomAmt(Player player, boolean bool) { + if(player.equals(trader)) + this.traderSettingCustomAmt = bool; + else + this.tradeeSettingCustomAmt = bool; + } + + private static String generateTitle(String origin, String target){ + origin = origin.length() >= 13 ? origin.substring(0, 13) : origin; + StringBuilder sb = new StringBuilder(origin); + for(int i = origin.length() ; i<=13; i++){ + sb.append(" "); + } + sb.append(" | "); + target = target.length() >= 12 ? target.substring(0, 12) : target; + sb.append(target); + return sb.toString(); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/trading/TradingSlotType.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/trading/TradingSlotType.java new file mode 100644 index 0000000..83e71b0 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/trading/TradingSlotType.java @@ -0,0 +1,20 @@ +package net.grandtheftmc.core.trading; + +/** + * Created by Timothy Lampen on 11/1/2017. + */ +public enum TradingSlotType { + NOTHING, + TRADER_EMPTY_ITEM, + ADD_HUNDRED, + ADD_THOUSAND, + ADD_TEN_THOUSAND, + SET_CUSTOM_AMOUNT, + TRADEE_EMPTY_ITEM, + ACCEPT, + DECLINE, + TRADER_MONEY, + TRADEE_MONEY, + TRADEE_ITEM, + TRADER_ITEM +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/trading/TradingStatus.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/trading/TradingStatus.java new file mode 100644 index 0000000..4496116 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/trading/TradingStatus.java @@ -0,0 +1,11 @@ +package net.grandtheftmc.core.trading; + +/** + * Created by Timothy Lampen on 11/4/2017. + */ +public enum TradingStatus { + WAITING, + ONE_ACCEPT, + ACCPETED, + DECLINED +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/transaction/Transaction.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/transaction/Transaction.java new file mode 100644 index 0000000..713de58 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/transaction/Transaction.java @@ -0,0 +1,72 @@ +package net.grandtheftmc.core.transaction; + +import org.apache.commons.lang.builder.EqualsBuilder; +import org.apache.commons.lang.builder.HashCodeBuilder; + +public abstract class Transaction { + + /** The ID of the transaction */ + private final int id; + /** The creation of the transaction */ + private final long creation; + + /** + * Create a new Transaction. + * + * @param id - the id of the transaction + * @param creation - the timestamp in millis for the transaction + */ + public Transaction(int id, long creation) { + this.id = id; + this.creation = creation; + } + + /** + * Get the id of the transaction. + * + * @return The id of the transaction. + */ + public int getId() { + return id; + } + + /** + * Get the creation, in milliseconds, or the timestamp, for the transaction. + * + * @return The timestamp, in milliseconds, for this transaction. + */ + public long getCreation() { + return creation; + } + + /** + * {@inheritDoc} + */ + @Override + public boolean equals(Object o) { + if (this == o) + return true; + + if (o == null || getClass() != o.getClass()) + return false; + + Transaction that = (Transaction) o; + + return new EqualsBuilder() + .append(id, that.id) + .isEquals(); + } + + /** + * {@inheritDoc} + */ + @Override + public int hashCode() { + return new HashCodeBuilder(17, 37) + .append(id) + .toHashCode(); + } +} + + + diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/transaction/TransactionEvent.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/transaction/TransactionEvent.java new file mode 100644 index 0000000..5ffb845 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/transaction/TransactionEvent.java @@ -0,0 +1,48 @@ +package net.grandtheftmc.core.transaction; + +import org.bukkit.event.Event; + +public abstract class TransactionEvent extends Event { + + /** The transaction assigned to this event */ + private final T transaction; + /** Whether or not the transaction has been processed */ + private boolean processed = false; + + /** + * Construct a new TransactionEvent. + * + * @param transaction - the transaction to process + */ + public TransactionEvent(T transaction) { + this.transaction = transaction; + } + + /** + * Get the transaction involved in this event. + * + * @return The transaction involved in this event. + */ + public T getTransaction() { + return transaction; + } + + /** + * Get whether or not this transaction was processed. + * + * @return {@code true} if transaction was processed, {@code false} + * otherwise. + */ + public boolean isProcessed() { + return processed; + } + + /** + * Set whether or not the transaction has been processed. + * + * @param processed - {@code true} if it was processed + */ + public void setProcessed(boolean processed) { + this.processed = processed; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/transaction/state/StateTransaction.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/transaction/state/StateTransaction.java new file mode 100644 index 0000000..c8514ec --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/transaction/state/StateTransaction.java @@ -0,0 +1,71 @@ +package net.grandtheftmc.core.transaction.state; + +import org.apache.commons.lang.builder.HashCodeBuilder; +import org.json.simple.JSONObject; + +import net.grandtheftmc.core.transaction.Transaction; + +public abstract class StateTransaction extends Transaction { + + /** The payload involved in this transaction */ + private final JSONObject payload; + /** The time to process the transaction at */ + private final long processAt; + + /** + * Create a new StateTransaction. + *

+ * This is used to represent a JSON object that be parsed to do something + * with. + * + * @param id - the id of the transaction + * @param payload - the payload json involved in this transaction + * @param creation - the creation timestamp + * @param processAt - the process timestamp + */ + public StateTransaction(int id, JSONObject payload, long creation, long processAt) { + super(id, creation); + this.payload = payload; + this.processAt = processAt; + } + + /** + * Get the payload involved in this transaction. + * + * @return The payload involved in this transaction. + */ + public JSONObject getPayload() { + return payload; + } + + /** + * Get the time, in milliseconds, to process the transaction. + * + * @return The time to process the transaction. + */ + public long getProcessAt() { + return processAt; + } + + /** + * {@inheritDoc} + */ + @Override + public boolean equals(Object o) { + if (this == o) + return true; + + if (o == null || getClass() != o.getClass()) + return false; + + return super.equals(o); + } + + /** + * {@inheritDoc} + */ + @Override + public int hashCode() { + return new HashCodeBuilder(19, 37).append(getId()).toHashCode(); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/transaction/state/StateTransactionEvent.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/transaction/state/StateTransactionEvent.java new file mode 100644 index 0000000..d13e7c1 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/transaction/state/StateTransactionEvent.java @@ -0,0 +1,15 @@ +package net.grandtheftmc.core.transaction.state; + +import net.grandtheftmc.core.transaction.TransactionEvent; + +public abstract class StateTransactionEvent extends TransactionEvent { + + /** + * Create a new StateTransactionEvent. + * + * @param transaction - the transaction involved in the event + */ + public StateTransactionEvent(T transaction) { + super(transaction); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/transaction/state/user/UserStateTransaction.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/transaction/state/user/UserStateTransaction.java new file mode 100644 index 0000000..125de6a --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/transaction/state/user/UserStateTransaction.java @@ -0,0 +1,163 @@ +package net.grandtheftmc.core.transaction.state.user; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.UUID; + +import org.apache.commons.lang.builder.HashCodeBuilder; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.plugin.Plugin; +import org.json.simple.JSONObject; + +import net.grandtheftmc.core.database.BaseDatabase; +import net.grandtheftmc.core.transaction.state.StateTransaction; +import net.grandtheftmc.core.util.debug.Log; +import net.grandtheftmc.core.util.json.JSONParser; + +public class UserStateTransaction extends StateTransaction { + + /** The owner of the transaction */ + private final UUID uuid; + + /** + * Construct a new UserStateTransaction. + *

+ * This is a way of scheduling new state changes for a user at a different + * time. Specific examples would be allow us to give a currency/rank in the + * future for the specified player. + * + * @param id - the ID of the transaction + * @param uuid - the UUID of the user for this transaction + * @param payload - the payload contents for this transaction + * @param creation - the time that this transaction was created + * @param processAt - the time that this transaction should be processed + */ + public UserStateTransaction(int id, UUID uuid, JSONObject payload, long creation, long processAt) { + super(id, payload, creation, processAt); + this.uuid = uuid; + } + + /** + * Get the UUID of player that owns this transaction. + * + * @return The UUID of the player that owns this transaction. + */ + public UUID getUUID() { + return uuid; + } + + @Override + public boolean equals(Object o) { + if (this == o) + return true; + + if (o == null || getClass() != o.getClass()) + return false; + + return super.equals(o); + } + + @Override + public int hashCode() { + return new HashCodeBuilder(13, 37).append(getId()).toHashCode(); + } + + /** + * Process the specified transactions for the given player. + *

+ * This will collect all the transactions for that player, regardless of + * server type/id, and filter them to call only the correct ones. + *

+ * This will remove transactions if they were successfully processed. + *

+ * Note: Please call this method on an async thread! For more details see + * {@link #process(Connection, Plugin, Player, ServerType, int)}; + * + * @param plugin - the owning plugin + * @param player - the player to check transactions for + * @param serverType - the type of server we are checking the transactions + * for + * @param serverNum - the ID of the server we are checking the transactions + * for + */ + public static void process(Plugin plugin, Player player, String serverType, int serverNum) { + try (Connection conn = BaseDatabase.getInstance().getConnection()) { + process(conn, plugin, player, serverType, serverNum); + } + catch (SQLException e) { + e.printStackTrace(); + } + } + + /** + * Process the specified transactions for the given player. + *

+ * This will collect all the transactions for that player, regardless of + * server type/id, and filter them to call only the correct ones. + *

+ * This will remove transactions if they were successfully processed. + *

+ * Note: Please call this method on an async thread! + * + * @param conn - the database connection thread + * @param plugin - the owning plugin + * @param player - the player we are processing the transactions for + * @param serverType - the type of server we are checking the transactions + * for + * @param serverNum - the ID of the server we are checking the transactions + * for + */ + public static void process(Connection conn, Plugin plugin, Player player, String serverType, int serverNum) { + + UserStateTransactionDAO.getUserStateTransactions(conn, player.getUniqueId()).forEach((id, transaction) -> { + JSONParser payload = new JSONParser(transaction.getPayload()); + + // Only run on correct server + JSONParser server = payload.parseObject("server"); + if (server.hasKey("type")) { + + // Validate correct server type + if (!serverType.equalsIgnoreCase(server.getString("type"))) { + return; + } + + // Validate correct server number + if (server.hasKey("id")) { + if (serverNum != server.getInt("id")) { + return; + } + } + } + + // make sure we're on sync thread + Bukkit.getScheduler().runTaskLater(plugin, () -> { + + // call the processing of the event + UserStateTransactionEvent event = new UserStateTransactionEvent(player, transaction); + Bukkit.getPluginManager().callEvent(event); + + // Remove from transactions as processed + if (event.isProcessed()) { + + // async update + Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> { + try (Connection deleteConn = BaseDatabase.getInstance().getConnection()) { + boolean removed = UserStateTransactionDAO.removeUserStateTransaction(deleteConn, id); + if (removed){ + UserStateTransactionDAO.createLogUserStateTransaction(deleteConn, id, transaction); + } + } + catch (Exception e) { + Log.error("Core", "We were unable to delete a user state transaction id=" + id); + e.printStackTrace(); + } + }); + + Log.info("Core", "Successfully processed UserStateTransaction for name=" + player.getName() + ", payload=" + transaction.getPayload().toJSONString()); + } + }, 20L); + }); + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/transaction/state/user/UserStateTransactionDAO.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/transaction/state/user/UserStateTransactionDAO.java new file mode 100644 index 0000000..f4c45a6 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/transaction/state/user/UserStateTransactionDAO.java @@ -0,0 +1,248 @@ +package net.grandtheftmc.core.transaction.state.user; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +import org.json.simple.JSONObject; +import org.json.simple.parser.JSONParser; +import org.json.simple.parser.ParseException; + +import net.grandtheftmc.core.util.debug.Log; + +public class UserStateTransactionDAO { + + /** + * Get a mapping of (transaction id, transaction) for the specified user. + *

+ * Wrapper around + * {@link #getUserStateTransactions(Connection, UUID, boolean)}, only + * getting the active transactions to process. + * + * @param conn - the database connection thread + * @param uuid - the UUID of the user + * + * @return A mapping of (transaction id, transaction) where each is a state + * change that needs to be handled. + * + * @see UserStateTransactionDAO#getUserStateTransactions(Connection, UUID, + * boolean) + */ + public static Map getUserStateTransactions(Connection conn, UUID uuid) { + return getUserStateTransactions(conn, uuid, false); + } + + /** + * Get a mapping of (transaction id, transaction) for the specified user. + *

+ * Wrapper around + * {@link #getUserStateTransactions(Connection, UUID, boolean, boolean)}, + * only getting transactions that have not already been processed. + * + * @param conn - the database connection thread + * @param uuid - the UUID of the user + * @param includeDelayed - {@code true} if we should get all transactions, + * {@code false} if we should get only the ones that have + * exceeded the process time + * + * @return A mapping of (transaction id, transaction) where each is a state + * change that needs to be handled. + * + * @see UserStateTransactionDAO#getUserStateTransactions(Connection, UUID, + * boolean, boolean) + */ + public static Map getUserStateTransactions(Connection conn, UUID uuid, boolean includeDelayed) { + return getUserStateTransactions(conn, uuid, includeDelayed, false); + } + + /** + * Get a mapping of (transaction id, transaction) for the specified user. + * + * @param conn - the database connection thread + * @param uuid - the UUID of the user + * @param includeDelayed - {@code true} if we should get all transactions, + * {@code false} if we should get only the ones that have + * exceeded the process time + * @param alreadyProcessed - {@code true} if we should get already processed + * transactions as well, otherwise {@code false} + * + * @return A mapping of (transaction id, transaction) where each is a state + * change that needs to be handled. + */ + public static Map getUserStateTransactions(Connection conn, UUID uuid, boolean includeDelayed, boolean alreadyProcessed) { + Map transactions = new HashMap<>(); + + String query = "SELECT id, payload, creation, process_at FROM user_state_transaction WHERE uuid = UNHEX(?)"; + if (!includeDelayed) { + query += " AND process_at <= CURRENT_TIMESTAMP"; + } + + if (!alreadyProcessed) { + query += " AND processed = 0"; + } + + query += " ORDER BY creation ASC, process_at ASC;"; + + try (PreparedStatement statement = conn.prepareStatement(query)) { + statement.setString(1, uuid.toString().replaceAll("-", "")); + + try (ResultSet resultSet = statement.executeQuery()) { + while (resultSet.next()) { + int id = resultSet.getInt("id"); + + JSONObject payload; + try { + payload = (JSONObject) new JSONParser().parse(resultSet.getString("payload")); + } + catch (ParseException e) { + Log.error("UserStateTransaction", "Failed to load transaction: " + id); + e.printStackTrace(); + continue; + } + + long creation = resultSet.getTimestamp("creation").getTime(); + long processAt = resultSet.getTimestamp("process_at").getTime(); + + transactions.put(id, new UserStateTransaction(id, uuid, payload, creation, processAt)); + } + } + } + catch (SQLException e) { + Log.error("Core", "Unable to getUserStateTransactions() for uuid=" + uuid.toString() + ", includeDelayed=" + includeDelayed + ", alreadyProcessed=" + alreadyProcessed); + e.printStackTrace(); + } + + return transactions; + } + + /** + * Creates a user state transaction in the database. + * + * @param conn - the database connection thread + * @param uuid - the UUID of the user to create the transaction for + * @param payload - the payload information that should be parsed + * + * @return {@code true} if the transaction was successfully added, + * {@code false} otherwise. + */ + public static boolean addUserStateTransaction(Connection conn, UUID uuid, JSONObject payload) { + + String query = "INSERT INTO user_state_transaction (uuid, payload) VALUES (UNHEX(?), ?);"; + + try (PreparedStatement statement = conn.prepareStatement(query)) { + statement.setString(1, uuid.toString().replaceAll("-", "")); + statement.setString(2, payload.toJSONString()); + + statement.executeUpdate(); + return true; + } + catch (SQLException e) { + Log.error("Core", "Unable to addUserStateTransaction() for uuid=" + uuid.toString() + ", payload=" + payload.toJSONString()); + e.printStackTrace(); + } + + return false; + } + + /** + * Creates the required statement to put a user state transaction in the + * database + * + * @param conn - the database connection thread + * @param uuid - the UUID of the user to create the transaction for + * @param payload - the payload information that should be parsed + * + * @return An {@link ArrayList} containing the statements required to put a + * user state transaction in the database + */ + public static List collateSaveUserStateTransaction(Connection conn, UUID uuid, JSONObject payload) { + + String query = "INSERT INTO user_state_transaction (uuid, payload) VALUES (UNHEX(?), ?);"; + + // result set + List statements = new ArrayList<>(); + + try { + PreparedStatement statement = conn.prepareStatement(query); + + statement.setString(1, uuid.toString().replaceAll("-", "")); + statement.setString(2, payload.toJSONString()); + + statements.add(statement); + } + catch (SQLException e) { + Log.error("Core", "Unable to collateSaveUserStateTransaction() for uuid=" + uuid.toString() + ", payload=" + payload.toJSONString()); + e.printStackTrace(); + } + + return statements; + } + + /** + * Removes the specified transaction ID from the user state transaction + * table. + * + * @param conn - the database connection thread + * @param id - the ID of the transaction to remove + * + * @return {@code true} if the transaction was removed, {@code false} + * otherwise. + */ + public static boolean removeUserStateTransaction(Connection conn, int id) { + + String query = "DELETE FROM user_state_transaction WHERE id = ? LIMIT 1;"; + + try (PreparedStatement statement = conn.prepareStatement(query)) { + statement.setInt(1, id); + + statement.executeUpdate(); + return true; + } + catch (SQLException e) { + Log.error("Core", "Unable to removeUserStateTransaction() for id=" + id); + e.printStackTrace(); + } + + return false; + } + + /** + * Creates a log for the user state transaction. + *

+ * This is so that we know which logs were parsed. + * + * @param conn - the database connection thread + * @param id - the id of the transaction + * @param transaction - the transaction object + * + * @return {@code true} if the query was created, {@code false} otherwise. + */ + public static boolean createLogUserStateTransaction(Connection conn, int id, UserStateTransaction transaction) { + + String query = "INSERT INTO log_user_state_transaction (id, uuid, payload, creation, process_at) VALUES (?, UNHEX(?), ?, ?, ?);"; + + try (PreparedStatement statement = conn.prepareStatement(query)) { + statement.setInt(1, id); + statement.setString(2, transaction.getUUID().toString().replaceAll("-", "")); + statement.setString(3, transaction.getPayload().toJSONString()); + statement.setTimestamp(4, new Timestamp(transaction.getCreation())); + statement.setTimestamp(5, new Timestamp(transaction.getProcessAt())); + + statement.executeUpdate(); + return true; + } + catch (SQLException e) { + Log.error("UserStateTransaction", "Unable to createLogUserStateTransaction() for uuid=" + transaction.getUUID().toString() + ", payload=" + transaction.getPayload().toJSONString()); + e.printStackTrace(); + } + + return false; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/transaction/state/user/UserStateTransactionEvent.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/transaction/state/user/UserStateTransactionEvent.java new file mode 100644 index 0000000..6a89d2e --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/transaction/state/user/UserStateTransactionEvent.java @@ -0,0 +1,51 @@ +package net.grandtheftmc.core.transaction.state.user; + +import org.bukkit.entity.Player; +import org.bukkit.event.HandlerList; + +import net.grandtheftmc.core.transaction.state.StateTransactionEvent; + +public class UserStateTransactionEvent extends StateTransactionEvent { + + /** List of handlers for this event */ + private static final HandlerList HANDLERS = new HandlerList(); + /** The player to run the event for */ + private final Player player; + + /** + * Create a new UserStateTransaction event. + * + * @param player - the player involved in the event + * @param transaction - the transaction + */ + public UserStateTransactionEvent(Player player, UserStateTransaction transaction) { + super(transaction); + this.player = player; + } + + /** + * Get the player involved in the event. + * + * @return The player involved in the event. + */ + public Player getPlayer() { + return player; + } + + /** + * {@inheritDoc} + */ + @Override + public HandlerList getHandlers() { + return HANDLERS; + } + + /** + * Get the handlers involved in this event. + * + * @return The handlers involved in this event. + */ + public static HandlerList getHandlerList() { + return HANDLERS; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/tutorials/Help.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/tutorials/Help.java new file mode 100644 index 0000000..5d822db --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/tutorials/Help.java @@ -0,0 +1,29 @@ +package net.grandtheftmc.core.tutorials; + +import net.grandtheftmc.core.Core; +import org.bukkit.configuration.file.YamlConfiguration; + +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; + +public class Help { + private static Map> helpData = new HashMap<>(); + private static YamlConfiguration helpConfig = Core.getSettings().getHelpConfig(); + + public static void loadHelpData() { + helpData.clear(); + for(String key : helpConfig.getConfigurationSection("help").getKeys(true)) { + helpData.put(key.toLowerCase(), helpConfig.getStringList("help." + key)); + } + } + + public static Optional> getHelpMessage(String key) { + return Optional.ofNullable(helpData.get(key.toLowerCase())); + } + + public static Map> getHelpData() { + return helpData; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/tutorials/NextCommand.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/tutorials/NextCommand.java new file mode 100644 index 0000000..b71c865 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/tutorials/NextCommand.java @@ -0,0 +1,37 @@ +package net.grandtheftmc.core.tutorials; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.users.User; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.UUID; + +public class NextCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command c, String label, String[] args) { + if (!(s instanceof Player)) { + s.sendMessage(Utils.f("&cYou are not a player!")); + return true; + } + Player player = (Player) s; + UUID uuid = player.getUniqueId(); + User user = Core.getUserManager().getLoadedUser(uuid); + Tutorial tut = Core.getTutorialManager().getTutorial(user.getTutorial()); + if (tut == null) { + s.sendMessage(Lang.TUTORIALS.f("&7You are not in a tutorial!")); + return true; + } + if (tut.getSlide(user.getTutorialSlide()) != null && !tut.getSlide(user.getTutorialSlide()).isCanConfirm()) { + s.sendMessage(Lang.TUTORIALS.f("&7You can not skip this slide!")); + return true; + } + tut.playNextSlide(player, user); + return true; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/tutorials/Slide.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/tutorials/Slide.java new file mode 100644 index 0000000..57cb658 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/tutorials/Slide.java @@ -0,0 +1,222 @@ +package net.grandtheftmc.core.tutorials; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.menus.MenuManager; +import net.grandtheftmc.core.util.SoundEffect; +import net.grandtheftmc.core.util.Title; +import net.md_5.bungee.api.chat.ClickEvent; +import net.md_5.bungee.api.chat.ClickEvent.Action; +import net.md_5.bungee.api.chat.TextComponent; +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.entity.Player; + +import java.util.List; + +public class Slide { + + private boolean canConfirm; + private int delay; + private Location location; + private GameMode gameMode; + private String[] messages; + private boolean headerAndFooter; + private String actionBarMessage; + private Title title; + private List sounds; + private int slot; + private String menu; + + public Slide() { + } + + public Slide(boolean canConfirm, int delay, Location location, GameMode gameMode, String[] messages, boolean headerAndFooter, String actionBarMessage, Title title, List sounds, int slot, String menu) { + this.canConfirm = canConfirm; + this.delay = delay; + this.location = location; + this.gameMode = gameMode; + this.messages = messages; + this.headerAndFooter = headerAndFooter; + this.actionBarMessage = actionBarMessage; + this.title = title; + this.sounds = sounds; + this.slot = slot; + this.menu = menu; + } + + public void play(Player player) { + this.teleport(player); + this.sendSoundEffects(player); + this.sendMessages(player); + this.sendActionBarMessage(player); + this.sendTitle(player); + this.setGameMode(player); + if (this.menu != null) + MenuManager.openMenu(player, this.menu); + } + + public void teleport(Player player) { + if (this.location != null) + player.teleport(this.location); + if (this.slot >= 0 && this.slot <= 8) + player.getInventory().setHeldItemSlot(this.slot); + } + + public void sendMessages(Player player) { + if (this.headerAndFooter) { + player.sendMessage(new String[]{"", "", "", "", "", "", "", "",}); + player.sendMessage(Utils.f(Core.getAnnouncer().getHeader())); + } + if (this.messages != null && this.messages.length > 0) + player.sendMessage(Utils.fc(this.messages)); + if (this.canConfirm) { + TextComponent comp = new TextComponent(Utils.fc("&nClick to continue...")); + comp.setClickEvent(new ClickEvent(Action.RUN_COMMAND, "/next")); + player.spigot().sendMessage(comp); + } else + player.sendMessage(Utils.fc("Continuing in &a&l" + (this.delay / 20) + "&r seconds...")); + + if (this.headerAndFooter) + player.sendMessage(Utils.f(Core.getAnnouncer().getFooter())); + } + + public void sendActionBarMessage(Player player) { + if (this.actionBarMessage != null) + Utils.sendActionBar(player, this.actionBarMessage); + } + + public void sendTitle(Player player) { + if (this.title != null) + Utils.sendTitle(player, this.title); + } + + public void sendSoundEffects(Player player) { + if (this.sounds != null) + for (SoundEffect sound : this.sounds) + sound.play(player); + } + + public void setGameMode(Player player) { + if (this.gameMode != null) + player.setGameMode(this.gameMode); + } + + public Location getLocation() { + return this.location; + } + + public void setLocation(Location location) { + this.location = location; + } + + public String[] getMessages() { + return this.messages; + } + + public void setMessages(String[] messages) { + this.messages = messages; + } + + public void addMessage(String message) { + List msges = Utils.toList(this.messages); + msges.add(message); + this.messages = msges.toArray(new String[msges.size()]); + } + + public void addMessage(String message, int id) { + List msges = Utils.toList(this.messages); + msges.add(id, message); + this.messages = msges.toArray(new String[msges.size()]); + } + + public void removeMessage(int id) { + List msges = Utils.toList(this.messages); + msges.remove(id); + this.messages = msges.toArray(new String[msges.size()]); + } + + public String getActionBarMessage() { + return this.actionBarMessage; + } + + public void setActionBarMessage(String actionBarMessage) { + this.actionBarMessage = actionBarMessage; + } + + public Title getTitle() { + return this.title; + } + + public void setTitle(Title title) { + this.title = title; + } + + public boolean isCanConfirm() { + return this.canConfirm; + } + + public void setCanConfirm(boolean canConfirm) { + this.canConfirm = canConfirm; + } + + public int getDelay() { + return this.delay; + } + + public void setDelay(int delay) { + this.delay = delay; + } + + public List getSounds() { + return this.sounds; + } + + public void setSounds(List sounds) { + this.sounds = sounds; + } + + public SoundEffect getSound(int id) { + return this.sounds.get(id); + } + + public void addSound(SoundEffect e) { + this.sounds.add(e); + } + + public void removeSound(int id) { + this.sounds.remove(this.getSound(id)); + } + + public GameMode getGameMode() { + return this.gameMode; + } + + public void setGameMode(GameMode gameMode) { + this.gameMode = gameMode; + } + + public int getSlot() { + return this.slot; + } + + public void setSlot(int i) { + this.slot = i; + } + + public void setHeaderAndFooter(boolean headerAndFooter) { + this.headerAndFooter = headerAndFooter; + } + + public boolean getHeaderAndFooter() { + return this.headerAndFooter; + } + + public void setMenu(String menu) { + this.menu = menu; + } + + public String getMenu() { + return this.menu; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/tutorials/Tutorial.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/tutorials/Tutorial.java new file mode 100644 index 0000000..88ae3af --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/tutorials/Tutorial.java @@ -0,0 +1,175 @@ +package net.grandtheftmc.core.tutorials; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.events.TutorialEvent; +import net.grandtheftmc.core.events.TutorialEvent.TutorialEventType; +import net.grandtheftmc.core.users.User; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitRunnable; + +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +public class Tutorial { + + private String name; + private List slides; + private boolean invisible; + private boolean playersInvisible; + + public Tutorial(String name, List slides, boolean invisible, boolean playersInvisible) { + this.name = name; + this.slides = slides; + this.invisible = invisible; + this.playersInvisible = playersInvisible; + } + + public Tutorial(String name) { + this.name = name; + this.slides = new ArrayList<>(); + } + + public String getName() { + return this.name; + } + + public void setName(String name) { + this.name = name; + } + + public List getSlides() { + return this.slides; + } + + public void setSlides(List slides) { + this.slides = slides; + } + + public Slide getSlide(int id) { + if (this.slides.size() <= id) + return null; + return this.slides.get(id); + } + + public int addSlide(int id) { + Slide slide = new Slide(); + int i = id > this.slides.size() ? this.slides.size() : id; + this.slides.add(i, slide); + return i; + } + + public Slide addSlide() { + Slide slide = new Slide(); + this.slides.add(slide); + return slide; + } + + public void removeSlide(Slide slide) { + this.slides.remove(slide); + } + + public boolean isInvisible() { + return this.invisible; + } + + public void setInvisible(boolean invisible) { + this.invisible = invisible; + } + + public boolean isPlayersInvisible() { + return this.playersInvisible; + } + + public void setPlayersInvisible(boolean playersInvisible) { + this.playersInvisible = playersInvisible; + } + + public void setInvisible(Player player) { + if (this.invisible) + for (Player p : Bukkit.getOnlinePlayers()) { + p.hidePlayer(player); + if (this.playersInvisible) + player.hidePlayer(p); + } + } + + public void setVisible(Player player) { + if (this.invisible) + for (Player p : Bukkit.getOnlinePlayers()) { + p.showPlayer(player); + if (this.playersInvisible) + player.showPlayer(p); + } + } + + public void start(Player player, User user) { + TutorialEvent event = new TutorialEvent(player, user, this, TutorialEventType.PRE_START).call(); + if (event.isCancelled()) { + player.sendMessage(Lang.TUTORIALS.f(event.getCancelMessage())); + return; + } + if (user.isInTutorial()) { + player.sendMessage(Lang.TUTORIALS.f("&7You are in a tutorial already!")); + return; + } + event = new TutorialEvent(player, user, this, TutorialEventType.START).call(); + if (event.isCancelled()) { + player.sendMessage(Lang.TUTORIALS.f(event.getCancelMessage())); + return; + } + if (this.invisible || this.playersInvisible) { + for (Player p : Bukkit.getOnlinePlayers()) { + p.hidePlayer(player); + if (this.playersInvisible) player.hidePlayer(p); + } + } + user.setTutorial(this.name); + this.playNextSlide(player, user); + } + + public void playNextSlide(Player player, User user) { + user.setTutorialSlide(user.getTutorialSlide() + 1); + Slide slide = this.getSlide(user.getTutorialSlide()); + if (slide == null) { + new TutorialEvent(player, user, this, TutorialEventType.END).call(); + user.setTutorialSlide(-1); + user.setTutorial(null); + if (this.invisible || this.playersInvisible) { + for (Player p : Bukkit.getOnlinePlayers()) { + p.showPlayer(player); + if (this.playersInvisible) player.showPlayer(p); + } + } + player.sendMessage(Lang.TUTORIALS.f("&7Tutorial &a" + this.name + "&7 has ended!")); + return; + } + TutorialEvent event = new TutorialEvent(player, user, this, TutorialEventType.SLIDE).call(); + if (event.isCancelled()) { + player.sendMessage(Lang.TUTORIALS.f(event.getCancelMessage())); + user.setTutorialSlide(-1); + user.setTutorial(null); + return; + } + UUID uuid = player.getUniqueId(); + slide.play(player); + if (slide.getDelay() <= 0) { + slide.setCanConfirm(true); + return; + } + new BukkitRunnable() { + @Override + public void run() { + Player player = Bukkit.getPlayer(uuid); + if (player == null) return; + User user = Core.getUserManager().getLoadedUser(uuid); + Tutorial tutorial = Core.getTutorialManager().getTutorial(user.getTutorial()); + if (tutorial == null) return; + tutorial.playNextSlide(player, user); + } + }.runTaskLater(Core.getInstance(), slide.getDelay()); + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/tutorials/TutorialCommand.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/tutorials/TutorialCommand.java new file mode 100644 index 0000000..d9718c2 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/tutorials/TutorialCommand.java @@ -0,0 +1,987 @@ +package net.grandtheftmc.core.tutorials; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.menus.Menu; +import net.grandtheftmc.core.menus.MenuManager; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.util.SoundEffect; +import net.grandtheftmc.core.util.Title; +import org.bukkit.GameMode; +import org.bukkit.Sound; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.List; +import java.util.UUID; + +public class TutorialCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command c, String lbl, String[] args) { + if (!(s instanceof Player)) { + s.sendMessage(Utils.f("&cYou are not a player!")); + return true; + } + Player player = (Player) s; + UUID uuid = player.getUniqueId(); + User user = Core.getUserManager().getLoadedUser(uuid); + if (args.length == 0) { + if (!s.hasPermission("tutorials.admin")) { + if (Core.getTutorialManager().getTutorials().isEmpty()) { + s.sendMessage(Lang.TUTORIALS.f("&7There are no tutorials!")); + return true; + } + Tutorial t = Core.getTutorialManager().getTutorials().get(0); + if (t == null) { + s.sendMessage(Lang.TUTORIALS.f("&7There are no tutorials!")); + return true; + } + t.start(player, user); + return true; + } + s.sendMessage(Lang.TUTORIALS.f("&2&lHelp Command")); + s.sendMessage(Utils.f("&2/tutorial&7 start &a")); + s.sendMessage(Utils.f("&2/tutorial&7 nextslide")); + + s.sendMessage(Utils.f("&2/tutorial&7 info/add/remove/edit &a")); + s.sendMessage(Utils.f("&2/tutorial&7 list/stop")); + s.sendMessage(Utils.f("&2/tutorial&7 set name &a")); + s.sendMessage(Utils.f("&2/tutorial&7 set invisible &a")); + s.sendMessage(Utils.f("&2/tutorial&7 set playersInvisible &a")); + s.sendMessage(Utils.f("&2/tutorial&7 slide info &a")); + s.sendMessage(Utils.f("&2/tutorial&7 slide play &a")); + s.sendMessage(Utils.f("&2/tutorial&7 slide add &a[id]")); + s.sendMessage(Utils.f("&2/tutorial&7 slide remove &a")); + s.sendMessage(Utils.f("&2/tutorial&7 slide edit &a")); + s.sendMessage(Utils.f("&2/tutorial&7 slide canConfirm &a")); + s.sendMessage(Utils.f("&2/tutorial&7 slide delay &a")); + s.sendMessage(Utils.f("&2/tutorial&7 slide location")); + s.sendMessage(Utils.f("&2/tutorial&7 slide actionBarMessage &a")); + s.sendMessage(Utils.f("&2/tutorial&7 slide title &a")); + s.sendMessage(Utils.f("&2/tutorial&7 slide subtitle &a<subTitle>")); + s.sendMessage(Utils.f("&2/tutorial&7 slide timings &a<fadeIn> <stay> <fadeOut> ")); + s.sendMessage(Utils.f("&2/tutorial&7 slide gamemode &a<gameM-mode> ")); + s.sendMessage(Utils.f("&2/tutorial&7 slide message add &a<message> &a[id]")); + s.sendMessage(Utils.f("&2/tutorial&7 slide message remove &a<id>")); + s.sendMessage(Utils.f("&2/tutorial&7 slide headerAndFooter &a<boolean>")); + s.sendMessage(Utils.f("&2/tutorial&7 slide sound add &a<sound> [volume] [pitch] [delay]")); + s.sendMessage(Utils.f("&2/tutorial&7 slide sound remove &a<id>")); + s.sendMessage(Utils.f("&2/tutorial&7 slide slot &a<slot>")); + s.sendMessage(Utils.f("&2/tutorial&7 slide menu &a<menu>")); + s.sendMessage(Utils.f("&2/tutorial&7 load")); + s.sendMessage(Utils.f("&2/tutorial&7 save")); + return true; + } + switch (args[0].toLowerCase()) { + case "start": + if (args.length != 2) { + s.sendMessage(Utils.f("&c/tutorial start <name>")); + return true; + } + Tutorial tutorial = Core.getTutorialManager().getTutorial(args[1]); + if (tutorial == null) { + s.sendMessage(Utils.f(Lang.TUTORIALS + "&7That tutorial does not exist!")); + return true; + } + tutorial.start(player, Core.getUserManager().getLoadedUser(uuid)); + return true; + case "nextslide": + Tutorial tut = Core.getTutorialManager().getTutorial(user.getTutorial()); + if (tut == null) { + s.sendMessage(Lang.TUTORIALS.f("&7You are not in a tutorial!")); + return true; + } + if (tut.getSlide(user.getTutorialSlide()) != null && !tut.getSlide(user.getTutorialSlide()).isCanConfirm()) { + s.sendMessage(Lang.TUTORIALS.f("&7You can not skip this slide!")); + return true; + } + tut.playNextSlide(player, user); + return true; + } + if (!s.hasPermission("tutorials.admin")) + return true; + switch (args[0].toLowerCase()) { + case "load": + Core.getSettings().setTutorialsConfig(Utils.loadConfig("tutorials")); + Core.getTutorialManager().load(); + s.sendMessage(Lang.TUTORIALS.f("&7The tutorials config was reloaded!")); + return true; + case "save": + Core.getTutorialManager().save(false); + s.sendMessage(Lang.TUTORIALS.f("&7The tutorials config was saved!")); + return true; + case "info": { + if (args.length != 2) { + s.sendMessage(Utils.f("&c/tutorial info <name>")); + return true; + } + Tutorial tutorial = Core.getTutorialManager().getTutorial(args[1]); + if (tutorial == null) { + s.sendMessage(Utils.f(Lang.TUTORIALS + "&7That tutorial does not exist!")); + return true; + } + s.sendMessage(Lang.TUTORIALS.f("&2&lTutorial Info &a" + tutorial.getName())); + s.sendMessage(Utils.f("&2Invisible: &a" + tutorial.isInvisible())); + s.sendMessage(Utils.f("&2Players Invisible: &a" + tutorial.isPlayersInvisible())); + s.sendMessage(Utils.f("&2Slides: &a" + tutorial.getSlides().size())); + return true; + } + case "list": + int page = 1; + if (args.length > 1) + try { + page = Integer.parseInt(args[1]); + } catch (NumberFormatException ignored) { + } + int start = (page << 3) - 8; + int end = (page << 3) - 1; + List<Tutorial> tutorials = Core.getTutorialManager().getTutorials(start, end); + s.sendMessage(Lang.TUTORIALS.f("&2&lPage " + page + " &2&lTotal Tutorials: &a" + Core.getTutorialManager().getTutorials().size())); + for (Tutorial tut : tutorials) + s.sendMessage(Utils.f("&2&lTutorial: &a" + tut.getName() + " &2&lSlides: &a" + tut.getSlides().size())); + return true; + case "add": { + if (args.length != 2) { + s.sendMessage(Utils.f("&c/tutorial add <name>")); + return true; + } + if (Core.getTutorialManager().getTutorial(args[1]) != null) { + s.sendMessage(Lang.TUTORIALS.f("&7A tutorial with that name already exists!")); + return true; + } + Tutorial tut = new Tutorial(args[1]); + Core.getTutorialManager().addTutorial(tut); + user.setEditingTutorial(true); + user.setTutorial(tut.getName()); + user.setTutorialSlide(0); + s.sendMessage(Lang.TUTORIALS.f("&7You have added a tutorial with the name &a" + tut.getName() + "&7! You are now editing this tutorial.")); + return true; + } + case "remove": { + if (args.length != 2) { + s.sendMessage(Utils.f("&c/tutorial remove <name>")); + return true; + } + Tutorial tutorial = Core.getTutorialManager().getTutorial(args[1]); + if (tutorial == null) { + s.sendMessage(Utils.f(Lang.TUTORIALS + "&7That tutorial does not exist!")); + return true; + } + Core.getTutorialManager().removeTutorial(tutorial); + s.sendMessage(Lang.TUTORIALS.f("&7You have removed a tutorial with the name &a" + tutorial.getName() + "&7!")); + return true; + } + case "edit": { + if (args.length != 2) { + s.sendMessage(Utils.f("&c/tutorial info <name>")); + return true; + } + Tutorial tutorial = Core.getTutorialManager().getTutorial(args[1]); + if (tutorial == null) { + s.sendMessage(Utils.f(Lang.TUTORIALS + "&7That tutorial does not exist!")); + return true; + } + user.setEditingTutorial(true); + user.setTutorial(tutorial.getName()); + user.setTutorialSlide(0); + s.sendMessage(Lang.TUTORIALS.f("&7You are now editing tutorial &a" + tutorial.getName() + "&7!")); + return true; + } + case "stop": + user.setEditingTutorial(false); + user.setTutorial(null); + user.setTutorialSlide(-1); + s.sendMessage(Lang.TUTORIALS.f("&7You are no longer editing a tutorial!")); + return true; + case "set": + if (args.length == 1) { + s.sendMessage(Utils.f("&c/tutorial set name <name>")); + s.sendMessage(Utils.f("&c/tutorial set invisible <boolean>")); + s.sendMessage(Utils.f("&c/tutorial set playersInvisible <boolean>")); + return true; + } + String s1 = args[1].toLowerCase(); + if ("name:".equals(s1)) { + if (args.length != 3) { + s.sendMessage(Utils.f("&c/tutorial set name <name>")); + return true; + } + Tutorial tut = Core.getTutorialManager().getTutorial(user.getTutorial()); + if (tut == null || !user.isEditingTutorial()) { + s.sendMessage(Utils.f(Lang.TUTORIALS + "&7You are not editing any tutorial!")); + return true; + } + tut.setName(args[2]); + s.sendMessage(Lang.TUTORIALS.f("&7You set the name of your tutorial to &a" + tut.getName() + "&7!")); + return true; + } else if ("invisible".equals(s1)) { + if (args.length != 3) { + s.sendMessage(Utils.f("&c/tutorial set invisible <boolean>")); + return true; + } + Tutorial tut = Core.getTutorialManager().getTutorial(user.getTutorial()); + if (tut == null || !user.isEditingTutorial()) { + s.sendMessage(Utils.f(Lang.TUTORIALS + "&7You are not editing any tutorial!")); + return true; + } + boolean invisible; + if ("true".equalsIgnoreCase(args[2])) + invisible = true; + else if ("false".equalsIgnoreCase(args[2])) + invisible = false; + else { + player.sendMessage(Lang.TUTORIALS.f("&7Please specify true/false.")); + return true; + } + tut.setInvisible(invisible); + s.sendMessage(Lang.TUTORIALS.f("&7You will now be &a" + (invisible ? "invisible" : "visible") + "&7 during tutorial &a" + tut.getName() + "&7!")); + return true; + } else if ("playersinvisible".equals(s1)) { + if (args.length != 3) { + s.sendMessage(Utils.f("&c/tutorial set playersInvisible <boolean>")); + return true; + } + Tutorial tut = Core.getTutorialManager().getTutorial(user.getTutorial()); + if (tut == null || !user.isEditingTutorial()) { + s.sendMessage(Utils.f(Lang.TUTORIALS + "&7You are not editing any tutorial!")); + return true; + } + boolean invisible; + if ("true".equalsIgnoreCase(args[2])) + invisible = true; + else if ("false".equalsIgnoreCase(args[2])) + invisible = false; + else { + player.sendMessage(Lang.TUTORIALS.f("&7Please specify true/false.")); + return true; + } + tut.setPlayersInvisible(invisible); + s.sendMessage(Lang.TUTORIALS.f("&7You will&a" + (invisible ? " not" : "") + "&7be able to see players during tutorial &a" + tut.getName() + "&7!")); + return true; + } + case "slide": + if (args.length == 1) { + s.sendMessage(Utils.f("&2/tutorial&7 slide info &a<id>")); + s.sendMessage(Utils.f("&2/tutorial&7 slide play &a<id>")); + s.sendMessage(Utils.f("&2/tutorial&7 slide add &a[id]")); + s.sendMessage(Utils.f("&2/tutorial&7 slide remove &a<id>")); + s.sendMessage(Utils.f("&2/tutorial&7 slide edit &a<id>")); + s.sendMessage(Utils.f("&2/tutorial&7 slide canConfirm &a<boolean>")); + s.sendMessage(Utils.f("&2/tutorial&7 slide delay &a<ticks>")); + s.sendMessage(Utils.f("&2/tutorial&7 slide location")); + s.sendMessage(Utils.f("&2/tutorial&7 slide actionBarMessage &a<msg>")); + s.sendMessage(Utils.f("&2/tutorial&7 slide title &a<title>")); + s.sendMessage(Utils.f("&2/tutorial&7 slide subtitle &a<subTitle>")); + s.sendMessage(Utils.f("&2/tutorial&7 slide timings &a<fadeIn> <stay> <fadeOut> ")); + s.sendMessage(Utils.f("&2/tutorial&7 slide gamemode &a<gameM-mode> ")); + s.sendMessage(Utils.f("&2/tutorial&7 slide message add &a<message> &a[id]")); + s.sendMessage(Utils.f("&2/tutorial&7 slide message remove &a<id>")); + s.sendMessage(Utils.f("&2/tutorial&7 slide headerAndFooter &a<boolean>")); + s.sendMessage(Utils.f("&2/tutorial&7 slide sound add &a<sound> [volume] [pitch] [delay]")); + s.sendMessage(Utils.f("&2/tutorial&7 slide sound remove &a<id>")); + s.sendMessage(Utils.f("&2/tutorial&7 slide slot &a<slot>")); + s.sendMessage(Utils.f("&2/tutorial&7 slide menu &a<menu>")); + return true; + } + String s2 = args[1].toLowerCase(); + if ("info".equals(s2)) { + if (args.length != 4) { + s.sendMessage(Utils.f("&c/tutorial slide info <tutorial> <id>")); + return true; + } + Tutorial tutorial = Core.getTutorialManager().getTutorial(args[2]); + if (tutorial == null) { + s.sendMessage(Utils.f(Lang.TUTORIALS + "&7That tutorial does not exist!")); + return true; + } + int id; + try { + id = Integer.parseInt(args[3]); + } catch (NumberFormatException e) { + s.sendMessage(Utils.f(Lang.TUTORIALS.f("&7The ID must be a number!"))); + return true; + } + Slide slide = tutorial.getSlide(id); + if (slide == null) { + s.sendMessage(Lang.TUTORIALS.f("&7That slide does not exist!")); + return true; + } + s.sendMessage(Lang.TUTORIALS.f("&2&lTutorial &a" + tutorial.getName() + "&2&l Slide &a" + id)); + s.sendMessage(Utils.f("&2Can Confirm: &a" + slide.isCanConfirm())); + s.sendMessage(Utils.f("&2Delay: &a" + slide.getDelay())); + if (slide.getLocation() != null) + s.sendMessage(Utils.f("&2Location: &a" + Utils.teleportLocationToString(slide.getLocation()))); + if (slide.getGameMode() != null) + s.sendMessage(Utils.f("&2GameMode: &a" + slide.getGameMode())); + if (slide.getActionBarMessage() != null) + s.sendMessage(Utils.f("&2Action Bar Message: &a" + slide.getActionBarMessage())); + Title title = slide.getTitle(); + if (title != null) + s.sendMessage( + Utils.f("&2Title: &a" + title.getTitle() + ',' + title.getSubtitle() + ',' + title.getFadeIn() + ',' + title.getStay() + ',' + title.getFadeOut())); + if (slide.getSounds() != null) + for (SoundEffect sound : slide.getSounds()) { + s.sendMessage(Utils.f("&2Sound: &a" + sound.getSound() + " &2Volume: &a" + sound.getVolume() + " &2 Pitch: &a" + sound.getPitch() + " &2 Delay: &a" + + sound.getDelay())); + } + slide.sendMessages(player); + return true; + } else if ("play".equals(s2)) { + if (args.length != 3) { + s.sendMessage(Utils.f("&c/tutorial slide play <id>")); + return true; + } + Tutorial tut = Core.getTutorialManager().getTutorial(user.getTutorial()); + if (tut == null || !user.isEditingTutorial()) { + s.sendMessage(Utils.f(Lang.TUTORIALS + "&7You are not editing any tutorial!")); + return true; + } + int id; + try { + id = Integer.parseInt(args[2]); + } catch (NumberFormatException e) { + s.sendMessage(Utils.f(Lang.TUTORIALS.f("&7The ID must be a number!"))); + return true; + } + Slide slide = tut.getSlide(id); + if (slide == null) { + s.sendMessage(Lang.TUTORIALS.f("&7That slide does not exist!")); + return true; + } + slide.play(player); + return true; + } else if ("add".equals(s2)) { + if (args.length > 3) { + s.sendMessage(Utils.f("&c/tutorial slide add")); + return true; + } + Tutorial tut = Core.getTutorialManager().getTutorial(user.getTutorial()); + if (tut == null || !user.isEditingTutorial()) { + s.sendMessage(Utils.f(Lang.TUTORIALS + "&7You are not editing any tutorial!")); + return true; + } + if (args.length == 3) { + int id; + try { + id = Integer.parseInt(args[2]); + } catch (NumberFormatException e) { + s.sendMessage(Lang.TUTORIALS.f("&7The ID must be a number!")); + return true; + } + id = tut.addSlide(id); + user.setTutorialSlide(id); + s.sendMessage(Lang.TUTORIALS.f("&7You have added a slide with id &a" + id + "&7! You are now editing this slide.")); + return true; + } + tut.addSlide(); + int id = tut.getSlides().size() - 1; + user.setTutorialSlide(id); + s.sendMessage(Lang.TUTORIALS.f("&7You have added a slide with id &a" + id + "&7! You are now editing this slide.")); + return true; + } else if ("remove".equals(s2)) { + if (args.length != 3) { + s.sendMessage(Utils.f("&c/tutorial slide remove <id>")); + return true; + } + Tutorial tut = Core.getTutorialManager().getTutorial(user.getTutorial()); + if (tut == null || !user.isEditingTutorial()) { + s.sendMessage(Utils.f(Lang.TUTORIALS + "&7You are not editing any tutorial!")); + return true; + } + int id; + try { + id = Integer.parseInt(args[2]); + } catch (NumberFormatException e) { + s.sendMessage(Utils.f(Lang.TUTORIALS.f("&7The ID must be a number!"))); + return true; + } + Slide slide = tut.getSlide(id); + if (slide == null) { + s.sendMessage(Lang.TUTORIALS.f("&7That slide does not exist!")); + return true; + } + tut.removeSlide(slide); + s.sendMessage(Lang.TUTORIALS.f("&7You have removed a slide with id &a" + id + "&7!")); + return true; + } else if ("edit".equals(s2)) { + if (args.length != 3) { + s.sendMessage(Utils.f("&c/tutorial slide remove <id>")); + return true; + } + Tutorial tut = Core.getTutorialManager().getTutorial(user.getTutorial()); + if (tut == null || !user.isEditingTutorial()) { + s.sendMessage(Utils.f(Lang.TUTORIALS + "&7You are not editing any tutorial!")); + return true; + } + int id; + try { + id = Integer.parseInt(args[2]); + } catch (NumberFormatException e) { + s.sendMessage(Utils.f(Lang.TUTORIALS.f("&7The ID must be a number!"))); + return true; + } + Slide slide = tut.getSlide(id); + if (slide == null) { + s.sendMessage(Lang.TUTORIALS.f("&7That slide does not exist!")); + return true; + } + user.setTutorialSlide(id); + s.sendMessage(Lang.TUTORIALS.f("&7You are now editing a slide with id &a" + id + "&7!")); + return true; + } else if ("canconfirm".equals(s2)) { + if (args.length != 3) { + s.sendMessage(Utils.f("&c/tutorial slide canConfirm <boolean>")); + return true; + } + Tutorial tut = Core.getTutorialManager().getTutorial(user.getTutorial()); + if (tut == null || !user.isEditingTutorial()) { + s.sendMessage(Utils.f(Lang.TUTORIALS + "&7You are not editing any tutorial!")); + return true; + } + Slide slide = tut.getSlide(user.getTutorialSlide()); + if (slide == null) { + s.sendMessage(Lang.TUTORIALS.f("&7You are not editing any slide!")); + return true; + } + boolean b; + if ("true".equalsIgnoreCase(args[2])) + b = true; + else if ("false".equalsIgnoreCase(args[2])) + b = false; + else { + player.sendMessage(Lang.TUTORIALS.f("&7Please specify true/false.")); + return true; + } + slide.setCanConfirm(b); + s.sendMessage(Lang.TUTORIALS.f("&7Players can &a" + (b ? "now" : "no longer") + "&7 skip slide &a" + user.getTutorialSlide() + "&7!")); + return true; + } else if ("delay".equals(s2)) { + if (args.length != 3) { + s.sendMessage(Utils.f("&c/tutorial slide delay <ticks>")); + return true; + } + Tutorial tut = Core.getTutorialManager().getTutorial(user.getTutorial()); + if (tut == null || !user.isEditingTutorial()) { + s.sendMessage(Utils.f(Lang.TUTORIALS + "&7You are not editing any tutorial!")); + return true; + } + Slide slide = tut.getSlide(user.getTutorialSlide()); + if (slide == null) { + s.sendMessage(Lang.TUTORIALS.f("&7You are not editing any slide!")); + return true; + } + int delay; + try { + delay = Integer.parseInt(args[2]); + } catch (NumberFormatException e) { + s.sendMessage(Utils.f(Lang.TUTORIALS.f("&7The delay must be a number!"))); + return true; + } + if (delay < 0) { + s.sendMessage(Lang.TUTORIALS.f("&7The delay must be at least 0!")); + return true; + } + slide.setDelay(delay); + s.sendMessage(Lang.TUTORIALS.f("&7You set the delay to &a" + delay + "&7 for slide &a" + user.getTutorialSlide() + "&7!")); + return true; + } else if ("location".equals(s2) || "loc".equals(s2)) { + if (args.length != 2) { + s.sendMessage(Utils.f("&c/tutorial slide loc")); + return true; + } + Tutorial tut = Core.getTutorialManager().getTutorial(user.getTutorial()); + if (tut == null || !user.isEditingTutorial()) { + s.sendMessage(Utils.f(Lang.TUTORIALS + "&7You are not editing any tutorial!")); + return true; + } + Slide slide = tut.getSlide(user.getTutorialSlide()); + if (slide == null) { + s.sendMessage(Lang.TUTORIALS.f("&7You are not editing any slide!")); + return true; + } + slide.setLocation(player.getLocation()); + s.sendMessage(Lang.TUTORIALS.f("&7You set the location for slide &a" + user.getTutorialSlide() + "&7!")); + return true; + } else if ("actionbarmessage".equals(s2)) { + if (args.length < 3) { + s.sendMessage(Utils.f("&c/tutorial slide actionbarmessage <msg/none>")); + return true; + } + Tutorial tut = Core.getTutorialManager().getTutorial(user.getTutorial()); + if (tut == null || !user.isEditingTutorial()) { + s.sendMessage(Utils.f(Lang.TUTORIALS + "&7You are not editing any tutorial!")); + return true; + } + Slide slide = tut.getSlide(user.getTutorialSlide()); + if (slide == null) { + s.sendMessage(Lang.TUTORIALS.f("&7You are not editing any slide!")); + return true; + } + if ("none".equalsIgnoreCase(args[2])) { + s.sendMessage(Lang.TUTORIALS.f("&7You unset the ActionBar message for slide &a" + user.getTutorialSlide() + "&7!")); + slide.setActionBarMessage(null); + return true; + } + String message = args[2]; + for (int i = 3; i < args.length; i++) + message = message + ' ' + args[i]; + slide.setActionBarMessage(message); + slide.sendActionBarMessage(player); + s.sendMessage(Lang.TUTORIALS.f("&7You set the ActionBar message for slide &a" + user.getTutorialSlide() + "&7!")); + return true; + } else if ("title".equals(s2)) { + if (args.length < 3) { + s.sendMessage(Utils.f("&c/tutorial slide set title <title/none>")); + return true; + } + Tutorial tut = Core.getTutorialManager().getTutorial(user.getTutorial()); + if (tut == null || !user.isEditingTutorial()) { + s.sendMessage(Utils.f(Lang.TUTORIALS + "&7You are not editing any tutorial!")); + return true; + } + Slide slide = tut.getSlide(user.getTutorialSlide()); + if (slide == null) { + s.sendMessage(Lang.TUTORIALS.f("&7You are not editing any slide!")); + return true; + } + if ("none".equalsIgnoreCase(args[2])) { + slide.setTitle(null); + s.sendMessage(Lang.TUTORIALS.f("&7You unset the Title for slide &a" + user.getTutorialSlide() + "&7!")); + return true; + } + String message = args[2]; + for (int i = 3; i < args.length; i++) + message = message + ' ' + args[i]; + Title title = new Title(message, null, 20, 20, 20); + slide.setTitle(title); + s.sendMessage(Lang.TUTORIALS.f("&7You set the title for slide &a" + user.getTutorialSlide() + "&7!")); + title.play(player); + return true; + } else if ("subtitle".equals(s2)) { + if (args.length < 3) { + s.sendMessage(Utils.f("&c/tutorial slide subtitle <subtitle/none>")); + return true; + } + Tutorial tut = Core.getTutorialManager().getTutorial(user.getTutorial()); + if (tut == null || !user.isEditingTutorial()) { + s.sendMessage(Utils.f(Lang.TUTORIALS + "&7You are not editing any tutorial!")); + return true; + } + Slide slide = tut.getSlide(user.getTutorialSlide()); + if (slide == null) { + s.sendMessage(Lang.TUTORIALS.f("&7You are not editing any slide!")); + return true; + } + Title title = slide.getTitle(); + if (title == null) { + s.sendMessage(Lang.TUTORIALS.f("&7Please set the Title first!")); + return true; + } + if ("none".equalsIgnoreCase(args[2])) { + title.setSubtitle(null); + s.sendMessage(Lang.TUTORIALS.f("&7You unset the subtitle for slide &a" + user.getTutorialSlide() + "&7!")); + return true; + } + String message = args[2]; + for (int i = 3; i < args.length; i++) + message += ' ' + args[i]; + title.setSubtitle(message); + s.sendMessage(Lang.TUTORIALS.f("&7You set the subtitle for slide &a" + user.getTutorialSlide() + "&7!")); + title.play(player); + return true; + } else if ("gamemode".equals(s2)) { + if (args.length != 4) { + s.sendMessage(Utils.f("&c/tutorial slide gameMode <gameMode/none>")); + return true; + } + Tutorial tut = Core.getTutorialManager().getTutorial(user.getTutorial()); + if (tut == null || !user.isEditingTutorial()) { + s.sendMessage(Utils.f(Lang.TUTORIALS + "&7You are not editing any tutorial!")); + return true; + } + Slide slide = tut.getSlide(user.getTutorialSlide()); + if (slide == null) { + s.sendMessage(Lang.TUTORIALS.f("&7You are not editing any slide!")); + return true; + } + GameMode gameMode = null; + String s3 = args[2].toLowerCase(); + switch (s3) { + case "0": + case "survival": + case "s": + gameMode = GameMode.SURVIVAL; + + break; + case "1": + case "creative": + case "c": + gameMode = GameMode.CREATIVE; + + break; + case "2": + case "adventure": + case "a": + gameMode = GameMode.ADVENTURE; + + break; + case "3": + case "spectator": + gameMode = GameMode.SPECTATOR; + + break; + default: + s.sendMessage(Lang.TUTORIALS.f("&7You unset the gamemode for slide &a" + user.getTutorialSlide() + "&7!")); + slide.setGameMode(gameMode); + return true; + } + slide.setGameMode(gameMode); + s.sendMessage(Lang.TUTORIALS.f("&7You set the gamemode to &a" + gameMode + "&7 for slide &a" + user.getTutorialSlide() + "&7!")); + return true; + } else if ("timings".equals(s2)) { + if (args.length != 5) { + s.sendMessage(Utils.f("&c/tutorial slide timings <fadeIn> <stay> <fadeOut>")); + return true; + } + Tutorial tut = Core.getTutorialManager().getTutorial(user.getTutorial()); + if (tut == null || !user.isEditingTutorial()) { + s.sendMessage(Utils.f(Lang.TUTORIALS + "&7You are not editing any tutorial!")); + return true; + } + Slide slide = tut.getSlide(user.getTutorialSlide()); + if (slide == null) { + s.sendMessage(Lang.TUTORIALS.f("&7You are not editing any slide!")); + return true; + } + Title title = slide.getTitle(); + if (title == null) { + s.sendMessage(Lang.TUTORIALS.f("&7Please set the Title first!")); + return true; + } + try { + title.setFadeIn(Integer.parseInt(args[2])); + title.setStay(Integer.parseInt(args[3])); + title.setFadeOut(Integer.parseInt(args[4])); + } catch (NumberFormatException e) { + s.sendMessage(Lang.TUTORIALS.f("&7The values must be numbers!")); + return true; + } + s.sendMessage(Lang.TUTORIALS.f("&7You set the title timings for slide &a" + user.getTutorialSlide() + "&7!")); + title.play(player); + return true; + } else if ("headerandfooter".equals(s2)) { + if (args.length != 3) { + s.sendMessage(Utils.f("&c/tutorial slide headerandfooter <boolean>")); + return true; + } + Tutorial tut = Core.getTutorialManager().getTutorial(user.getTutorial()); + if (tut == null || !user.isEditingTutorial()) { + s.sendMessage(Utils.f(Lang.TUTORIALS + "&7You are not editing any tutorial!")); + return true; + } + Slide slide = tut.getSlide(user.getTutorialSlide()); + if (slide == null) { + s.sendMessage(Lang.TUTORIALS.f("&7You are not editing any slide!")); + return true; + } + boolean b; + if ("true".equalsIgnoreCase(args[2])) + b = true; + else if ("false".equalsIgnoreCase(args[2])) + b = false; + else { + player.sendMessage(Lang.TUTORIALS.f("&7Please specify true/false.")); + return true; + } + slide.setHeaderAndFooter(b); + s.sendMessage(Lang.TUTORIALS.f("You set header and footer to &a" + b + "&7 for slide &a" + user.getTutorialSlide() + "&7!")); + return true; + } else if ("message".equals(s2)) { + if (args.length == 2) { + s.sendMessage(Utils.f("&2/tutorial&7 slide message add &a<message>")); + s.sendMessage(Utils.f("&2/tutorial&7 slide message remove &a<id>")); + return true; + } + switch (args[2].toLowerCase()) { + case "add": { + if (args.length < 4) { + s.sendMessage(Utils.f("&c/tutorial slide message add <message>")); + return true; + } + Tutorial tut = Core.getTutorialManager().getTutorial(user.getTutorial()); + if (tut == null || !user.isEditingTutorial()) { + s.sendMessage(Utils.f(Lang.TUTORIALS + "&7You are not editing any tutorial!")); + return true; + } + Slide slide = tut.getSlide(user.getTutorialSlide()); + if (slide == null) { + s.sendMessage(Lang.TUTORIALS.f("&7You are not editing any slide!")); + return true; + } + String msg = args[3]; + for (int i = 4; i < args.length; i++) + msg = msg + ' ' + args[i]; + slide.addMessage(msg); + s.sendMessage(Lang.TUTORIALS.f("&7You added a message to slide &a" + user.getTutorialSlide() + "&7!")); + slide.sendMessages(player); + return true; + } + case "remove": + if (args.length != 4) { + s.sendMessage(Utils.f("&c/tutorial slide message remove <id>")); + return true; + } + Tutorial tut = Core.getTutorialManager().getTutorial(user.getTutorial()); + if (tut == null || !user.isEditingTutorial()) { + s.sendMessage(Utils.f(Lang.TUTORIALS + "&7You are not editing any tutorial!")); + return true; + } + Slide slide = tut.getSlide(user.getTutorialSlide()); + if (slide == null) { + s.sendMessage(Lang.TUTORIALS.f("&7You are not editing any slide!")); + return true; + } + int id; + try { + id = Integer.parseInt(args[3]); + } catch (NumberFormatException e) { + s.sendMessage(Utils.f(Lang.TUTORIALS.f("&7The ID must be a number!"))); + return true; + } + if (slide.getMessages().length <= id) { + s.sendMessage(Lang.TUTORIALS.f("&7There are only &a" + slide.getMessages().length + "&7 messages!")); + return true; + } + slide.removeMessage(id); + s.sendMessage(Lang.TUTORIALS.f("&7You removed a message from slide &a" + user.getTutorialSlide() + "&7!")); + slide.sendMessages(player); + return true; + } + + if (args.length == 2) { + s.sendMessage(Utils.f("&2/tutorial&7 slide sound add &a<sound> [volume] [pitch] [delay]")); + s.sendMessage(Utils.f("&2/tutorial&7 slide sound remove &a<id>")); + return true; + } + switch (args[2].toLowerCase()) { + case "add": { + if (args.length < 4 || args.length > 7) { + s.sendMessage(Utils.f("&c/tutorial slide sound add <sound> [volume] [pitch] [delay]")); + return true; + } + Tutorial tut = Core.getTutorialManager().getTutorial(user.getTutorial()); + if (tut == null || !user.isEditingTutorial()) { + s.sendMessage(Utils.f(Lang.TUTORIALS + "&7You are not editing any tutorial!")); + return true; + } + Slide slide = tut.getSlide(user.getTutorialSlide()); + if (slide == null) { + s.sendMessage(Lang.TUTORIALS.f("&7You are not editing any slide!")); + return true; + } + Sound sound = null; + for (Sound so : Sound.values()) + if (so.toString().equalsIgnoreCase(args[3])) { + sound = so; + break; + } + if (sound == null) { + s.sendMessage(Lang.TUTORIALS.f("&7That sound does not exist!")); + return true; + } + float volume = 1; + float pitch = 1; + int delay = 0; + if (args.length > 4) + try { + volume = Float.parseFloat(args[4]); + if (args.length > 5) + pitch = Float.parseFloat(args[5]); + if (args.length > 6) + delay = Integer.parseInt(args[6]); + } catch (NumberFormatException e) { + s.sendMessage(Utils.f(Lang.TUTORIALS.f("&7The volume, pitch and delay must be numbers!"))); + return true; + } + SoundEffect e = new SoundEffect(sound, volume, pitch, delay); + slide.addSound(e); + s.sendMessage(Lang.TUTORIALS.f("&7You added a sound to slide &a" + user.getTutorialSlide() + "&7!")); + e.play(player); + return true; + } + case "remove": + if (args.length != 4) { + s.sendMessage(Utils.f("&c/tutorial slide sound remove <id>")); + return true; + } + Tutorial tut = Core.getTutorialManager().getTutorial(user.getTutorial()); + if (tut == null || !user.isEditingTutorial()) { + s.sendMessage(Utils.f(Lang.TUTORIALS + "&7You are not editing any tutorial!")); + return true; + } + Slide slide = tut.getSlide(user.getTutorialSlide()); + if (slide == null) { + s.sendMessage(Lang.TUTORIALS.f("&7You are not editing any slide!")); + return true; + } + int id = -1; + try { + Integer.parseInt(args[3]); + } catch (NumberFormatException e) { + s.sendMessage(Utils.f(Lang.TUTORIALS.f("&7The ID must be a number!"))); + return true; + } + if (slide.getSounds().size() <= id) { + s.sendMessage(Lang.TUTORIALS.f("&7There are only &a" + slide.getSounds().size() + "&7 sounds!")); + return true; + } + slide.removeSound(id); + s.sendMessage(Lang.TUTORIALS.f("&7You removed a sound from slide &a" + user.getTutorialSlide() + "&7!")); + slide.sendSoundEffects(player); + return true; + } + } else if ("sound".equals(s2)) { + if (args.length == 2) { + s.sendMessage(Utils.f("&2/tutorial&7 slide sound add &a<sound> [volume] [pitch] [delay]")); + s.sendMessage(Utils.f("&2/tutorial&7 slide sound remove &a<id>")); + return true; + } + String s3 = args[2].toLowerCase(); + if ("add".equals(s3)) { + if (args.length < 4 || args.length > 7) { + s.sendMessage(Utils.f("&c/tutorial slide sound add <sound> [volume] [pitch] [delay]")); + return true; + } + Tutorial tut = Core.getTutorialManager().getTutorial(user.getTutorial()); + if (tut == null || !user.isEditingTutorial()) { + s.sendMessage(Utils.f(Lang.TUTORIALS + "&7You are not editing any tutorial!")); + return true; + } + Slide slide = tut.getSlide(user.getTutorialSlide()); + if (slide == null) { + s.sendMessage(Lang.TUTORIALS.f("&7You are not editing any slide!")); + return true; + } + Sound sound = null; + for (Sound so : Sound.values()) + if (so.toString().equalsIgnoreCase(args[3])) { + sound = so; + break; + } + if (sound == null) { + s.sendMessage(Lang.TUTORIALS.f("&7That sound does not exist!")); + return true; + } + float volume = 1; + float pitch = 1; + int delay = 0; + if (args.length > 4) + try { + volume = Float.parseFloat(args[4]); + if (args.length > 5) + pitch = Float.parseFloat(args[5]); + if (args.length > 6) + delay = Integer.parseInt(args[6]); + } catch (NumberFormatException e) { + s.sendMessage(Utils.f(Lang.TUTORIALS.f("&7The volume, pitch and delay must be numbers!"))); + return true; + } + SoundEffect e = new SoundEffect(sound, volume, pitch, delay); + slide.addSound(e); + s.sendMessage(Lang.TUTORIALS.f("&7You added a sound to slide &a" + user.getTutorialSlide() + "&7!")); + e.play(player); + return true; + } else if ("remove".equals(s3)) { + if (args.length != 4) { + s.sendMessage(Utils.f("&c/tutorial slide sound remove <id>")); + return true; + } + Tutorial tut = Core.getTutorialManager().getTutorial(user.getTutorial()); + if (tut == null || !user.isEditingTutorial()) { + s.sendMessage(Utils.f(Lang.TUTORIALS + "&7You are not editing any tutorial!")); + return true; + } + Slide slide = tut.getSlide(user.getTutorialSlide()); + if (slide == null) { + s.sendMessage(Lang.TUTORIALS.f("&7You are not editing any slide!")); + return true; + } + int id = -1; + try { + Integer.parseInt(args[3]); + } catch (NumberFormatException e) { + s.sendMessage(Utils.f(Lang.TUTORIALS.f("&7The ID must be a number!"))); + return true; + } + if (slide.getSounds().size() <= id) { + s.sendMessage(Lang.TUTORIALS.f("&7There are only &a" + slide.getSounds().size() + "&7 sounds!")); + return true; + } + slide.removeSound(id); + s.sendMessage(Lang.TUTORIALS.f("&7You removed a sound from slide &a" + user.getTutorialSlide() + "&7!")); + slide.sendSoundEffects(player); + return true; + } + } else if ("slot".equals(s2)) { + if (args.length != 3) { + s.sendMessage(Utils.f("&c/tutorial slide slot <slot>")); + return true; + } + Tutorial tut = Core.getTutorialManager().getTutorial(user.getTutorial()); + if (tut == null || !user.isEditingTutorial()) { + s.sendMessage(Utils.f(Lang.TUTORIALS + "&7You are not editing any tutorial!")); + return true; + } + Slide slide = tut.getSlide(user.getTutorialSlide()); + if (slide == null) { + s.sendMessage(Lang.TUTORIALS.f("&7You are not editing any slide!")); + return true; + } + int slot; + try { + slot = Integer.parseInt(args[2 + ]); + } catch (NumberFormatException e) { + s.sendMessage(Lang.TUTORIALS.f("&7The slot must be a number!")); + return true; + } + if (slot < 0 || slot > 8) { + s.sendMessage(Lang.TUTORIALS.f( + "&7The slot must be between 0 and 8!")); + return true; + } + slide.setSlot(slot); + s.sendMessage(Lang.TUTORIALS.f("&7You set the slot for slide &a" + user.getTutorialSlide() + "&7 to slot &a" + slot + "&7!")); + return true; + } else if ("menu".equals(s2)) { + if (args.length != 3) { + s.sendMessage(Utils.f("&c/tutorial slide menu <menu>")); + return true; + } + Tutorial tut = Core.getTutorialManager().getTutorial(user.getTutorial()); + if (tut == null || !user.isEditingTutorial()) { + s.sendMessage(Utils.f(Lang.TUTORIALS + "&7You are not editing any tutorial!")); + return true; + } + Slide slide = tut.getSlide(user.getTutorialSlide()); + if (slide == null) { + s.sendMessage(Lang.TUTORIALS.f("&7You are not editing any slide!")); + return true; + } + Menu menu = MenuManager.getMenu(args[2]); + if (menu == null) { + s.sendMessage(Lang.TUTORIALS.f("&7That menu does not exist!")); + return true; + } + slide.setMenu(menu.getName()); + s.sendMessage(Lang.TUTORIALS.f("&7You set the menu for slide &a" + user.getTutorialSlide() + "&7 to &a" + menu + "&7!")); + return true; + } + } + return true; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/tutorials/TutorialManager.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/tutorials/TutorialManager.java new file mode 100644 index 0000000..45c41c2 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/tutorials/TutorialManager.java @@ -0,0 +1,165 @@ +package net.grandtheftmc.core.tutorials; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.util.Component; +import net.grandtheftmc.core.util.SoundEffect; +import net.grandtheftmc.core.util.Title; +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.Sound; +import org.bukkit.configuration.file.YamlConfiguration; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class TutorialManager implements Component<TutorialManager, Core> { + + private List<Tutorial> tutorials = new ArrayList<>(); + private Map<String, Tutorial> mappedTuts = new HashMap<>(); + + public TutorialManager() { + this.load(); + } + + @Override + public TutorialManager onDisable(Core plugin) { + this.tutorials.forEach(t -> t.getSlides().clear()); + this.tutorials.clear(); + + mappedTuts.clear(); + return this; + } + + public List<Tutorial> getTutorials() { + return this.tutorials; + } + + public Tutorial getTutorial(String name) { + for (Tutorial tutorial : this.tutorials) + if (tutorial.getName().equalsIgnoreCase(name)) + return tutorial; + return null; + } + + public List<Tutorial> getTutorials(int start, int end) { + List<Tutorial> l = new ArrayList<>(); + for (int i = 0; i < this.tutorials.size(); i++) + if (i >= start && i <= end) + l.add(this.tutorials.get(i)); + return l; + } + + public void addTutorial(Tutorial tutorial) { + this.tutorials.add(tutorial); + } + + public void removeTutorial(Tutorial tutorial) { + this.tutorials.remove(tutorial); + } + + public void load() { + YamlConfiguration c = Core.getSettings().getTutorialsConfig(); + this.tutorials = new ArrayList<>(); + for (String name : c.getKeys(false)) { + try { + boolean invisible = c.get(name + ".invisible") != null && c.getBoolean(name + ".invisible"); + boolean playersInvisible = c.get(name + ".playersInvisible") != null && c.getBoolean(name + ".playersInvisible"); + List<Slide> slides = new ArrayList<>(); + if (c.get(name + ".slides") != null) + for (String s : c.getConfigurationSection(name + ".slides").getKeys(false)) { + boolean canConfirm = c.get(name + ".slides." + s + ".canConfirm") != null && c.getBoolean(name + ".slides." + s + ".canConfirm"); + int delay = c.get(name + ".slides." + s + ".delay") == null ? -1 : c.getInt(name + ".slides." + s + ".delay"); + Location location = Utils.teleportLocationFromString(c.getString(name + ".slides." + s + ".location")); + GameMode gameMode = c.get(name + ".slides." + s + ".gameMode") == null ? null : GameMode.valueOf(c.getString(name + ".slides." + s + ".gameMode")); + String actionBarMessage = c.getString(name + ".slides." + s + ".actionBarMessage"); + List<String> msges = c.getStringList(name + ".slides." + s + ".messages"); + String[] messages = c.get(name + ".slides." + s + ".messages") == null ? null : msges.toArray(new String[msges.size()]); + boolean headerAndFooter = c.getBoolean(name + ".slides." + s + ".headerAndFooter"); + Title title = null; + if (c.get(name + ".slides." + s + ".title") != null) { + String string = c.getString(name + ".slides." + s + ".title.title"); + String subtitle = c.getString(name + ".slides." + s + ".title.subtitle"); + int fadeIn = c.get(name + ".slides." + s + ".title.fadeIn") == null ? 0 : c.getInt(name + ".slides." + s + ".title.fadeIn"); + int stay = c.get(name + ".slides." + s + ".title.stay") == null ? 0 : c.getInt(name + ".slides." + s + ".title.stay"); + int fadeOut = c.get(name + ".slides." + s + ".title.fadeOut") == null ? 0 : c.getInt(name + ".slides." + s + ".title.fadeOut"); + title = new Title(string, subtitle, fadeIn, stay, fadeOut); + } + List<SoundEffect> sounds = new ArrayList<>(); + if (c.get(name + ".slides." + s + ".sounds") != null) { + for (String s2 : c.getConfigurationSection(name + ".slides." + s + ".sounds").getKeys(false)) { + Sound sound = c.get(name + ".slides." + s + ".sounds." + s2 + ".sound") == null ? null + : Sound.valueOf(c.getString(name + ".slides." + s + ".sounds." + s2 + ".sound")); + int volume = c.get(name + ".slides." + s + ".sounds." + s2 + ".volume") == null ? 1 : c.getInt(name + ".slides." + s + ".sounds." + s2 + ".volume"); + int pitch = c.get(name + ".slides." + s + ".sounds." + s2 + ".pitch") == null ? 1 : c.getInt(name + ".slides." + s + ".sounds." + s2 + ".pitch"); + int d = c.get(name + ".slides." + s + ".sounds." + s2 + ".delay") == null ? 1 : c.getInt(name + ".slides." + s + ".sounds." + s2 + ".delay"); + sounds.add(new SoundEffect(sound, volume, pitch, d)); + } + } + int slot = Integer.parseInt(c.getString(name + ".slides." + s + ".slot")); + String menu = c.getString(name + ".slides." + s + ".menu"); + slides.add(new Slide(canConfirm, delay, location, gameMode, messages, headerAndFooter, actionBarMessage, title, sounds, slot, menu)); + } + Tutorial t = new Tutorial(name, slides, invisible, playersInvisible); + this.tutorials.add(t); + this.mappedTuts.put(name.toLowerCase(), t); + } catch (Exception e) { + Core.log("Error while loading tutorial " + name + ");"); + e.printStackTrace(); + } + } + } + + public void save(boolean shutdown) { + YamlConfiguration c = Core.getSettings().getTutorialsConfig(); + for (String s : c.getKeys(false)) + c.set(s, null); + for (Tutorial tut : this.tutorials) { + try { + String name = tut.getName(); + c.set(name + ".invisible", tut.isInvisible()); + c.set(name + ".playersInvisible", tut.isPlayersInvisible()); + int i = 0; + for (Slide slide : tut.getSlides()) { + String path = name + ".slides." + i; + c.set(path + ".canConfirm", slide.isCanConfirm()); + c.set(path + ".delay", slide.getDelay()); + if (slide.getLocation() != null) + c.set(path + ".location", Utils.teleportLocationToString(slide.getLocation())); + c.set(path + ".gameMode", slide.getGameMode() == null ? null : slide.getGameMode().toString()); + c.set(path + ".actionBarMessage", slide.getActionBarMessage()); + List<String> messages = Utils.toList(slide.getMessages()); + c.set(path + ".messages", messages); + c.set(path + ".headerAndFooter", slide.getHeaderAndFooter()); + Title title = slide.getTitle(); + if (title != null) { + c.set(path + ".title.title", title.getTitle()); + c.set(path + ".title.subtitle", title.getSubtitle()); + c.set(path + ".title.fadeIn", title.getFadeIn()); + c.set(path + ".title.stay", title.getStay()); + c.set(path + ".title.fadeOut", title.getFadeOut()); + } + int i2 = 0; + if (slide.getSounds() != null) + for (SoundEffect s : slide.getSounds()) { + c.set(path + ".sounds." + i2 + ".sound", s.getSound().toString()); + c.set(path + ".sounds." + i2 + ".volume", s.getVolume()); + c.set(path + ".sounds." + i2 + ".pitch", s.getPitch()); + c.set(path + ".sounds." + i2 + ".delay", s.getDelay()); + i2++; + } + c.set(path + ".slot", slide.getSlot()); + c.set(path + ".menu", slide.getMenu()); + i++; + } + } catch (Exception e) { + Core.error("&7Eror while saving tutorial " + tut.getName()); + e.printStackTrace(); + } + } + Utils.saveConfig(c, "tutorials"); + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/users/CooldownDAO.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/users/CooldownDAO.java new file mode 100644 index 0000000..0f5b61f --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/users/CooldownDAO.java @@ -0,0 +1,110 @@ +package net.grandtheftmc.core.users; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.database.BaseDatabase; + +import java.sql.*; +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; + +/** + * Created by Timothy Lampen on 2/4/2018. + */ +public class CooldownDAO { + + public static Set<CooldownPayload> loadCooldowns(User user) { + Set<CooldownPayload> set = new HashSet<>(); + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + set.addAll(loadCooldown(connection, user.getUUID(), Core.name().toLowerCase())); + set.addAll(loadCooldown(connection, user.getUUID(), "global")); + + } catch (SQLException e) { + e.printStackTrace(); + } + return set; + } + + /** + * Load cooldown information for a user. + * + * @param conn - the database connection thread + * @param uuid - the uuid of the user + * @param serverKey - the server key identifier + * @return + */ + public static Set<CooldownPayload> loadCooldown(Connection conn, UUID uuid, String serverKey) { + + Set<CooldownPayload> set = new HashSet<>(); + + String query = "SELECT * FROM `user_cooldown` WHERE `uuid`=UNHEX(?) AND `server_key`=?"; + + try (PreparedStatement ps = conn.prepareStatement(query)) { + ps.setString(1, uuid.toString().replace("-", "")); + ps.setString(2, Core.name().toLowerCase()); + + try (ResultSet result = ps.executeQuery()) { + while (result.next()) { + String id = result.getString("id"); + + + Timestamp endTime = result.getTimestamp("endTime"); + if (endTime.getTime() <= System.currentTimeMillis()) { + continue; + } + + CooldownPayload payload = new CooldownPayload(id, endTime.getTime(), !serverKey.equals("global"), true); + set.add(payload); + } + } + } catch (Exception e) { + Core.log("[CooldownDAO] Error executing loadCooldown for uuid=" + uuid.toString() + ", serverKey=" + serverKey); + e.printStackTrace(); + } + + return set; + } + + public static void saveCooldowns(Connection connection, User user) { + try (PreparedStatement statement = connection.prepareStatement("DELETE FROM `user_cooldown` WHERE `uuid`=UNHEX(?) AND `server_key`=? OR `server_key`=?;")) { + statement.setString(1, user.getUUID().toString().replace("-", "")); + statement.setString(2, Core.name().toLowerCase()); + statement.setString(3, "global"); + statement.execute(); + + uploadCooldowns(connection, user); + + } catch (SQLException e) { + e.printStackTrace(); + } + } + + /** + * @apiNote for internal use only! + */ + private static void uploadCooldowns(Connection connection, User user) { + if (user.getCooldowns() == null) { + return; + } + + for (CooldownPayload payload : user.getCooldowns()) { + if (payload == null) { + continue; + } + + if (!payload.isSaveToMySQL()) { + continue; + } + + try (PreparedStatement statement = connection.prepareStatement("INSERT INTO `user_cooldown` (uuid,server_key,id,endTime) VALUES (UNHEX(?),?,?,?)")) { + statement.setString(1, user.getUUID().toString().replace("-", "")); + statement.setString(2, payload.isServerSpecific() ? Core.name().toLowerCase() : "global"); + statement.setString(3, payload.getId()); + statement.setTimestamp(4, payload.getExpireTime()); + statement.execute(); + } catch (SQLException e) { + e.printStackTrace(); + } + } + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/users/CooldownPayload.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/users/CooldownPayload.java new file mode 100644 index 0000000..3657fa4 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/users/CooldownPayload.java @@ -0,0 +1,35 @@ +package net.grandtheftmc.core.users; + +import java.sql.Timestamp; + +/** + * Created by Timothy Lampen on 2/4/2018. + */ +public class CooldownPayload { + private final String id; + private final Timestamp expireTime; + private final boolean saveToMySQL, serverSpecific; + + public CooldownPayload(String id, long expireTime, boolean serverSpecific, boolean saveToMySQL) { + this.id = id; + this.expireTime = new Timestamp(expireTime); + this.serverSpecific = serverSpecific; + this.saveToMySQL = saveToMySQL; + } + + public boolean isServerSpecific() { + return serverSpecific; + } + + public Timestamp getExpireTime() { + return expireTime; + } + + public String getId() { + return id; + } + + public boolean isSaveToMySQL() { + return saveToMySQL; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/users/Pref.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/users/Pref.java new file mode 100644 index 0000000..7673c76 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/users/Pref.java @@ -0,0 +1,97 @@ +package net.grandtheftmc.core.users; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.servers.ServerType; +import org.bukkit.Material; +import org.bukkit.entity.Player; + +public enum Pref { + + PLAYERS_SHOWN("playersShown", "Show Players", Material.EYE_OF_ENDER), + TP_REQUESTS("tpRequests", "Teleport Requests", Material.ENDER_PEARL), + ANNOUNCEMENTS("announcements", "Announcements", Material.EMPTY_MAP), + MESSAGES("messages", "Private Messages", Material.BOOK), + DEATH_MESSAGES("deathMessages", "Death Messages", Material.SKULL_ITEM), + USE_SCOREBOARD("useScoreboard", "Show Scoreboard", Material.DIAMOND), + SOCIALSPY("socialSpy", "SocialSpy", Material.NETHER_STAR), + TINT_HEALTH("tintHealth", "Tint Health", Material.INK_SACK, (byte) 1), + KEEP_COSMETICS("keepCosmetics", "Keep Cosmetics", Material.ENDER_CHEST), + SHOW_PARTICLES("showParticles", "Show Bullet Particles", Material.IRON_HOE), + AUTO_CLAIM_VOTE_REWARD("autoVoteClaim", "Auto Claim Vote Rewards", Material.FLINT_AND_STEEL, (byte) 45); + private final String dbName; + private final String displayName; + private final Material material; + private byte materialData = 0; + + Pref(String dbName, String displayName, Material material) { + this.dbName = dbName; + this.displayName = displayName; + this.material = material; + } + + Pref(String dbName, String displayName, Material material, Byte materialData) { + this.dbName = dbName; + this.displayName = displayName; + this.material = material; + this.materialData = materialData; + } + + public static Pref getPref(String dbName) { + for (Pref pref : Pref.values()) + if (pref.dbName.equalsIgnoreCase(dbName)) + return pref; + return null; + } + + public static Pref getPrefByDisplayName(String displayName) { + for (Pref pref : Pref.values()) + if (pref.displayName.equalsIgnoreCase(displayName)) + return pref; + return null; + } + + public String getDbName() { + return this.dbName; + } + + public String getDisplayName() { + return this.displayName; + } + + public Material getMaterial() { + return this.material; + } + + public Byte getMaterialData() { + return this.materialData; + } + + public boolean isEnabled(Player player, User u, ServerType type) { + switch (this) { + case PLAYERS_SHOWN: + return u.canTogglePlayers() && type == ServerType.HUB; + case TP_REQUESTS: + return type != ServerType.GLIDERS && type != ServerType.HUB; + case ANNOUNCEMENTS: + return !Core.getAnnouncer().getAnnouncements().isEmpty(); + case MESSAGES: + return true; + case DEATH_MESSAGES: + return type == ServerType.GLIDERS || type == ServerType.GTM; + case USE_SCOREBOARD: + return type != ServerType.CREATIVE; + case SOCIALSPY: + return player.hasPermission("socialspy") || u.isRank(UserRank.SRMOD); + case TINT_HEALTH: + return type == ServerType.GTM; + case KEEP_COSMETICS: + return type != ServerType.GLIDERS; + case SHOW_PARTICLES: + return type == ServerType.GTM; + case AUTO_CLAIM_VOTE_REWARD: + return type == ServerType.GTM; + default: + return false; + } + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/users/User.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/users/User.java new file mode 100644 index 0000000..b19a052 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/users/User.java @@ -0,0 +1,1454 @@ +package net.grandtheftmc.core.users; + +import java.sql.Connection; +import java.sql.Timestamp; +import java.text.DecimalFormat; +import java.time.LocalDateTime; +import java.time.temporal.ChronoUnit; +import java.util.ArrayList; +import java.util.EnumSet; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.Set; +import java.util.UUID; +import java.util.concurrent.TimeUnit; + +import org.apache.commons.lang3.StringUtils; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.boss.BarColor; +import org.bukkit.boss.BarStyle; +import org.bukkit.boss.BossBar; +import org.bukkit.entity.Player; +import org.bukkit.permissions.PermissionAttachment; +import org.bukkit.plugin.Plugin; +import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.scheduler.BukkitTask; +import org.bukkit.scoreboard.Scoreboard; +import org.bukkit.util.Vector; + +import com.earth2me.essentials.Essentials; +import com.j0ach1mmall3.ultimatecosmetics.api.storage.ParticleCosmeticStorage; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.achivements.Achievement; +import net.grandtheftmc.core.currency.Currency; +import net.grandtheftmc.core.currency.Purse; +import net.grandtheftmc.core.currency.component.CurrencySource; +import net.grandtheftmc.core.database.BaseDatabase; +import net.grandtheftmc.core.database.dao.CurrencyDAO; +import net.grandtheftmc.core.database.dao.OldVoteDAO; +import net.grandtheftmc.core.database.dao.VoteDAO; +import net.grandtheftmc.core.database.mutex.Mutexable; +import net.grandtheftmc.core.events.DisplayNameUpdateEvent; +import net.grandtheftmc.core.events.MoneyEvent; +import net.grandtheftmc.core.events.MoneyEvent.MoneyEventType; +import net.grandtheftmc.core.events.UpdateEvent; +import net.grandtheftmc.core.nametags.Nametag; +import net.grandtheftmc.core.nametags.NametagManager; +import net.grandtheftmc.core.servers.ServerType; +import net.grandtheftmc.core.users.eventtag.EventTag; +import net.grandtheftmc.core.users.eventtag.PreTagEquipEvent; +import net.grandtheftmc.core.users.targets.TrackedTarget; +import net.grandtheftmc.core.util.CoreLocation; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.util.time.TimeUtil; +import net.grandtheftmc.core.voting.ShopItem; +import net.grandtheftmc.core.voting.VoteRecord; +import net.grandtheftmc.core.voting.crates.Crate; +import net.grandtheftmc.core.voting.crates.CrateReward; + +public class User extends Mutexable { + + /** The uuid of the user */ + private final UUID uuid; + /** The name of the user */ + private final String name; + protected final EnumSet<Pref> prefs = EnumSet.noneOf(Pref.class); + // COSMETICS +// private final List<Cosmetic> cosmetics = new ArrayList<>(); +// private final EnumSet<CosmeticType> allCosmetics = EnumSet.noneOf(CosmeticType.class); +// private final Map<Cosmetic, EnumSet<PetData>> petDataPerms = new EnumMap<>(Cosmetic.class); +// private final Map<CosmeticType, String> lastCosmetics = new HashMap<>(); + private Set<CooldownPayload> cooldowns = null; + private final List<Nametag> nametags = new ArrayList<>(); + private Set<EventTag> unlockedTags = new HashSet<>(); + protected final Set<Achievement> unlockedAchievements = new HashSet<>(); + + /** The local rank of the user */ + protected UserRank ur; + /** The trial rank for the user */ + protected UserRank trialRank; + /** The global rank for the user */ + protected UserRank globalRank; + private EventTag equipedTag; + protected long trialRankExpiry; + + /** Holds currencies */ + private Purse purse; + /** Vote record for the user */ + private VoteRecord voteRecord; + + protected int bucks; //Currency + protected long dailyPlayTime; + private long loginTime = System.currentTimeMillis(); +// private Cosmetic activatingCosmetic; +// private Cosmetic buyingCosmetic; + private ShopItem buyingShopItem; + private int cosmeticVariant; + private ParticleCosmeticStorage.Shape particleShape; + //private EnumSet<PetData> petData = EnumSet.noneOf(PetData.class); + private Nametag petNametag; + private Nametag activatingNametag; + private Nametag buyingNametag; + // REWARDS + /** The daily reward streak */ + protected int dailyStreak; + protected long lastDailyReward; + private long lastSpanked = 0L; + protected String lastDonorReward; + private Crate selectedCrate; + private CrateReward confirmingCrateReward; + private long lastPlayersToggle; + private boolean editMode; + private String tutorial; + private int tutorialSlide; + private boolean editingTutorial; + private BossBar bossBar; + protected Achievement shownAchievement; + + private PermissionAttachment pa; + private final List<TrackedTarget> bossBarTargets = new ArrayList<>(); + private Scoreboard scoreboard; + private UUID lastMessage; + protected List<String> ignored = new ArrayList<>(); + private boolean hasMoved; + + private String language = "NONE"; + private CoreLocation location; + + private Long joinTime = 0L; + private Long leaveTime = 0L; + + /** The join address they used to connect to the server */ + private String serverJoinAddress; + + private BukkitTask updateTrackerTask; + + /** + * Construct a new user object. + * + * @param uuid - the uuid of the user + * @param name - the name of the user + */ + public User(UUID uuid, String name) { + this.uuid = uuid; + this.name = name; + this.purse = new Purse(); + + for (Currency curr : Currency.values()){ + purse.registerCurrency(curr); + } + } + + /** + * Called when we need to load data pertaining to the user. + * + * @param conn - the database connection thread + * + * @return {@code true} if the data was loaded, {@code false} otherwise. + */ + public boolean onLoad(Connection conn) { + + boolean result = false; + + result = UserDAO.fetchGeneralUser(this); + if(!result) return false; + + for (Currency curr : Currency.values()){ + switch(curr){ + case TOKEN: + case CROWBAR: + case COUPON_CREDIT: + case VOTE_TOKEN: + // grab currency based off serverKey + int amount = CurrencyDAO.getCurrency(conn, curr.getServerKey(), getUUID(), curr); + // set in the purse + getPurse().set(curr, amount); + + // TODO remove debug messages + Core.log("[User] uuid=" + uuid.toString() + ", curr=" + curr.getId() + ", amount=" + getPurse().getBalance(curr)); + break; + } + } + + result = UserDAO.fetchServerStats(this); + if(!result) return false; + + // load unlocked tags + this.unlockedTags = UserDAO.fetchAndEquipServerPlayerTags(this); + + // load cooldowns + this.cooldowns = CooldownDAO.loadCooldowns(this); + + // load their vote record + voteRecord = VoteDAO.getUserVoteRecord(conn, getUUID()); + + return result; + } + + /** + * Call when we need to save data pertaining to the user. + * + * @param conn - the database connection thread + * + * @return {@code true} if the data was saved, {@code false} otherwise. + */ + public boolean onSave(Connection conn) { + + // clear preferences + if (!this.prefs.isEmpty()) { + this.prefs.clear(); + } + + // clear nametags + if (!this.nametags.isEmpty()){ + this.nametags.clear(); + } + + // clear unlocked achievements + if (!this.unlockedAchievements.isEmpty()){ + this.unlockedAchievements.clear(); + } + + // clear ignore list + if (this.ignored != null && !this.ignored.isEmpty()){ + this.ignored.clear(); + } + + // save all the currencies + for (Currency curr : getPurse().getCurrencies().keySet()) { + + // only save + switch(curr){ + case TOKEN: + case CROWBAR: + case COUPON_CREDIT: + case VOTE_TOKEN: + int balance = getPurse().getBalance(curr); + + // TODO test remove + Core.log("[User][CurrencyTest] Saving user uuid=" + getUUID().toString() + ", currency=: " + curr.getId() + ", amt=" + balance); + CurrencyDAO.saveCurrency(conn, curr.getServerKey(), getUUID(), curr, balance); + break; + } + } + + // save cooldowns + CooldownDAO.saveCooldowns(conn, this); + + return true; + } + + public void dataCheck() { + + UserDAO.insertUser(getUUID(), getName()); + UserDAO.insertVoter(getUUID(), getName()); + + // if server is NOT Hub OR the default rank is global + // this means likely that all ranks are global, and therefore we should create + if (Core.getSettings().getType() != ServerType.HUB || UserRank.DEFAULT.getServerKey().equalsIgnoreCase("GLOBAL")){ + try (Connection conn = BaseDatabase.getInstance().getConnection()){ + + // create the users rank for this serverKey if they dont have one + UserDAO.createRank(conn, UserRank.DEFAULT.getServerKey(), uuid, UserRank.DEFAULT); + } + catch(Exception e){ + e.printStackTrace(); + } + } + + // insert currencies if not exists + for (Currency curr : Currency.values()){ + + // do not create currencies for HUB, if its a server currency + if (Core.getSettings().getType() == ServerType.HUB && (!curr.getServerKey().equalsIgnoreCase("GLOBAL"))){ + continue; + } + + // within because if one currency fails to create, we still wanna try others + try (Connection conn = BaseDatabase.getInstance().getConnection()){ + CurrencyDAO.createCurrency(conn, curr.getServerKey(), uuid, curr); + } + catch(Exception e){ + e.printStackTrace(); + } + } + } + + /** + * Get the uuid of the user. + * + * @return The uuid of the user. + */ + public UUID getUUID() { + return this.uuid; + } + + /** + * Get the name of the user. + * + * @return The name of the user. + */ + public String getName() { + return this.name; + } + + public Set<CooldownPayload> getCooldowns() { + return this.cooldowns; + } + + /** + * @param target The target that the bossbar will point to, can be made using a new TrackedEntity or Tracked Target + */ + public void addBossBarTarget(TrackedTarget target){ + this.bossBarTargets.add(target); + } + + /** + * @param target The target to remove from the bossbar + */ + public void removeBossBarTarget(TrackedTarget target){ + this.bossBarTargets.add(target); + } + + public void setEquipedTag(EventTag tag) { + PreTagEquipEvent tagEquipEvent = new PreTagEquipEvent(Bukkit.getPlayer(this.uuid), this.equipedTag, tag); + Bukkit.getPluginManager().callEvent(tagEquipEvent); + if (tagEquipEvent.isCancelled()) return; + + this.equipedTag = tag; + ServerUtil.runTaskAsync(() -> UserDAO.updatePlayerTags(getUUID(), tag)); + } + + public void giveEventTag(EventTag tag){ + if(!this.unlockedTags.contains(tag)) { + this.unlockedTags.add(tag); + ServerUtil.runTaskAsync(() -> UserDAO.addPlayerTag(getUUID(), tag)); + } + } + + public EventTag getEquipedTag() { + return this.equipedTag; + } + + /** + * @param loc the location of the target to remove from the bossbar + */ + public boolean removeBossBarTarget(Location loc){ + List<TrackedTarget> clone = new ArrayList<>(this.bossBarTargets); + Optional<TrackedTarget> optTarget = clone.stream().filter(target -> target.getLocation().equals(loc)).findFirst(); + if(optTarget.isPresent()) { + this.bossBarTargets.remove(optTarget.get()); + return true; + } + return false; + } + + public Set<EventTag> getUnlockedTags(){ + return this.unlockedTags; + } + + private int getBossBarSlotForTarget(Player player, Location target) { + Location clone = player.getEyeLocation().clone(); + clone.setPitch(0.0f); + clone.setY(target.getY()); + Vector dirToDestination = target.toVector().subtract(clone.toVector()); + Vector playerDirection = clone.getDirection(); + double angle = Math.toDegrees(dirToDestination.angle(playerDirection)); + if(angle >= 90) + return Integer.MAX_VALUE; + Location pointA = player.getLocation(); + Location pointB = player.getLocation().clone().add(player.getLocation().clone().getDirection().setY(0).normalize().multiply(100000)); + double signum = Math.signum((target.getBlockX()-pointA.getX()) * (pointB.getZ()-pointA.getZ()) - ((target.getBlockZ()-pointA.getZ()) * (pointB.getX() - pointA.getX()))); + + int posFromMiddle = (int)Math.round(angle/4.029); + + + return signum >= 0 ? 23 - posFromMiddle : 23 + posFromMiddle; + } + + public static final String EMPTY_BAR = " "; + public void refreshBossBar(){ + if(this.bossBar==null && this.bossBarTargets.size()==0) + return; + if(this.bossBar!=null && this.bossBarTargets.size()==0){ + this.bossBar.removeAll(); + return; + } + if(Bukkit.getPlayer(this.uuid)==null) { + this.updateTrackerTask.cancel(); + this.updateTrackerTask.cancel(); + return; + } + if(this.bossBar == null) { + this.bossBar = Bukkit.getServer().createBossBar("", BarColor.RED, BarStyle.SOLID); + refreshBossBar(); + return; + } + Player player = Bukkit.getPlayer(this.uuid); + if(!this.bossBar.getPlayers().contains(player)) + this.bossBar.addPlayer(player); + HashMap<Integer, String> placeholders = new HashMap<>(); + for (TrackedTarget target : this.bossBarTargets) { + if(!target.getLocation().getWorld().equals(player.getWorld())) + continue; + int slot = getBossBarSlotForTarget(player, target.getLocation()); + if(slot == Integer.MAX_VALUE) + continue; + placeholders.put(slot, getColorFromDistance(target.getLocation().distance(player.getLocation())) + "" + target.getPointer()); + } + if(placeholders.size()==0) { + this.bossBar.removeAll(); + return; + } + + StringBuilder sb = new StringBuilder(EMPTY_BAR); + for(Map.Entry<Integer, String> entry : placeholders.entrySet()) { + sb.replace(entry.getKey(), entry.getKey()+1, entry.getValue()); + } + + this.bossBar.setTitle(sb.toString()); + } + + private static ChatColor getColorFromDistance(double distance){ + if(distance<=10) + return ChatColor.GREEN; + else if(distance<=50) + return ChatColor.YELLOW; + else if(distance<=100) + return ChatColor.GOLD; + else + return ChatColor.RED; + } + + public long getLoginTime() { + return loginTime; + } + + // GETTING + + + public void setDailyPlayTime(long dailyPlayTime) { + this.dailyPlayTime = dailyPlayTime; + } + + public int getCouponCredits() { + return getPurse().getBalance(Currency.COUPON_CREDIT); + } + + public void setCouponCredits(int couponCredits) { + getPurse().set(Currency.COUPON_CREDIT, couponCredits); + } + + /** + * Get the highest rank of the user possible. + * <p> + * This will traverse all the ranks of the user, and returns the highest rank for this user. + * </p> + * + * @return The highest rank for this user. + */ + public UserRank getUserRank() { + + // if no user rank specified, set as default + if (this.ur == null){ + this.ur = UserRank.DEFAULT; + } + + // the highest found rank + UserRank highestRank = this.ur; + + // if they have a global rank, and it's HIGHER + if (this.globalRank != null && this.getGlobalRank().isHigherThan(highestRank)){ + highestRank = this.globalRank; + } + + // if they have a trial rank, and it's HIGHER + if (this.trialRank != null && this.hasTrialRank() && this.trialRank.isHigherThan(highestRank)){ + highestRank = this.trialRank; + } + + return highestRank; + } + + public void setLoginTime(long loginTime) { + this.loginTime = loginTime; + } + + /** + * Set the user's rank. + * + * @param ur - the new rank to set + */ + public void setUserRank(UserRank ur) { + Player player = Bukkit.getPlayer(this.uuid); + if (this.prefs.contains(Pref.SOCIALSPY) && UserRank.MOD.isHigherThan(ur)) + this.setPref(player, Pref.SOCIALSPY, false); + + // async save of rank, based on rank's serverKey + ServerUtil.runTaskAsync(() -> { + try (Connection conn = BaseDatabase.getInstance().getConnection()){ + UserDAO.saveRank(conn, ur.getServerKey(), uuid, ur); + } + catch(Exception e){ + e.printStackTrace(); + } + }); + + // if we're setting a global rank, set locally + if (ur.getServerKey().equalsIgnoreCase("GLOBAL")){ + this.globalRank = ur; + } + else{ + this.ur = ur; + } + + this.updateNameTag(player); + this.updateDisplayName(player); + this.setPerms(player); + } + + /** + * Set the user's rank. + * + * @param ur - the new rank to set + * @param serverKey - the rank on the server key + */ + public void setUserRank(UserRank ur, String serverKey) { + Player player = Bukkit.getPlayer(this.uuid); + if (this.prefs.contains(Pref.SOCIALSPY) && UserRank.MOD.isHigherThan(ur)) + this.setPref(player, Pref.SOCIALSPY, false); + + // async save of rank, based on rank's serverKey + ServerUtil.runTaskAsync(() -> { + try (Connection conn = BaseDatabase.getInstance().getConnection()){ + UserDAO.saveRank(conn, serverKey, uuid, ur); + } + catch(Exception e){ + e.printStackTrace(); + } + }); + + // if we're setting a global rank, set locally + if (serverKey.equalsIgnoreCase("GLOBAL")){ + this.globalRank = ur; + } + else{ + this.ur = ur; + } + + this.updateNameTag(player); + this.updateDisplayName(player); + this.setPerms(player); + } + + /** + * Get the rank of the user, without taking into consideration their trial rank. + * + * @return The rank of the user, without it being a trial. + */ + public UserRank getUserRankNonTrial() { + + // if no user rank specified, set as default + if (this.ur == null){ + this.ur = UserRank.DEFAULT; + } + + // the highest found rank + UserRank highestRank = this.ur; + + // if they have a global rank, and it's HIGHER + if (this.globalRank != null && this.getGlobalRank().isHigherThan(highestRank)){ + highestRank = this.globalRank; + } + + return highestRank; + } + + public boolean checkTrialRankExpiry() { + if (this.trialRank == null || this.trialRankExpiry > System.currentTimeMillis()) + return false; + Player player = Bukkit.getPlayer(this.uuid); + new BukkitRunnable() { + @Override + public void run() { + Player player = Bukkit.getPlayer(User.this.uuid); + if (player != null) + player.sendMessage(Lang.RANKS.f("&7Your &a&lfree " + User.this.trialRank.getColoredNameBold() + "&7 trial has expired! You can buy it permanently for &a$&l" + + User.this.trialRank.getPrice() + "&7 at &a&l" + Core.getSettings().getStoreLink() + "&7!")); + } + }.runTaskLater(Core.getInstance(), 20); + + ServerUtil.runTaskAsync(() -> UserDAO.updateUserTrialRank(this.uuid, null, 0)); + + this.trialRank = null; + this.trialRankExpiry = 0; + this.updateNameTag(player); + this.updateDisplayName(player); + this.setPerms(player); + return true; + } + + public boolean hasTrialRank() { + this.checkTrialRankExpiry(); + return this.trialRank != null; + } + + public UserRank getTrialRank() { + return this.hasTrialRank() ? this.trialRank : null; + } + + public void setTrialRank(UserRank trialRank, long trialRankExpiry) { + Player player = Bukkit.getPlayer(this.uuid); + if (this.prefs.contains(Pref.SOCIALSPY)) + this.setPref(player, Pref.SOCIALSPY, false); + + ServerUtil.runTaskAsync(() -> UserDAO.updateUserTrialRank(this.uuid, trialRank, trialRankExpiry)); + + this.trialRank = trialRank; + this.trialRankExpiry = trialRankExpiry; + this.updateNameTag(player); + this.updateDisplayName(player); + this.setPerms(player); + } + + public long getTrialRankExpiry() { + return this.trialRankExpiry; + } + + /** + * Get the global rank for this user. + * + * @return The global rank for this user, if one exists. + */ + public UserRank getGlobalRank(){ + return globalRank; + } + + /** + * Sets the global rank of the specified user. + * + * @param userRank - the rank to set their global rank to + */ + public void setGlobalRank(UserRank userRank){ + this.globalRank = userRank; + } + + public long getTimeUntilTrialRankExpires() { + return this.hasTrialRank() ? 0 : System.currentTimeMillis() - this.trialRankExpiry; + } + + public boolean isSpecial() { + return this.getUserRank() != UserRank.DEFAULT; + } + + public boolean isRank(UserRank rank) { + UserRank r = this.getUserRank(); + return r == rank || r.isHigherThan(rank); + } + + public boolean isPremium() { + return this.isRank(UserRank.PREMIUM); + } + + public boolean isStaff() { + return this.isRank(UserRank.HELPOP); + } + + public boolean isAdmin() { + return this.isRank(UserRank.ADMIN); + } + + /** + * Get the purse that holds the currency for this player. + * + * @return The purse that holds the currency for this player. + */ + public Purse getPurse() { + return purse; + } + + /** + * Get the vote record for this player. + * + * @return The vote record for this player. + */ + public VoteRecord getVoteRecord(){ + return voteRecord; + } + + /** + * Get the amonut of votes for this player. + * + * @return The amount of votes they have. + * @deprecated - This is used for compatibility purposes, please use {@link #getPurse()} instead. + */ + @Deprecated + public int getVotes() { + return getPurse().getBalance(Currency.VOTE_TOKEN); + } + + /** + * Remove a vote for this player. + * + * @deprecated - This is for compatibility purposes, please use {@link #getPurse()}. + */ + @Deprecated + public void removeVote() { + getPurse().withdraw(CurrencySource.CUSTOM, Currency.VOTE_TOKEN, 1); + } + + /** + * Get the chance this user has to get double rewards. + * + * @return The chance this user has to get double rewards. + */ + public int getDoubleVoteChance(){ + int chance = getVoteRecord().getStreak() * 5; + if (chance >= 100){ + return 100; + } + + return chance; + } + + /** + * Get whether or not the player's vote streak has expired. + * + * @return {@code true} if the vote streak has expired, {@code false} otherwise. + * + * @deprecated - Please do not rely on this method to exist in the future. + */ + @Deprecated + public boolean voteStreakExpired() { + + VoteRecord vr = getVoteRecord(); + + // if they never voted before + if (!vr.getLastVoted().isPresent()){ + return false; + } + + if (getVoteRecord().getStreak() > 0 && getVoteRecord().getLastVoted().get().getTime() + 172800000 < System.currentTimeMillis()) { + return true; + } + + return false; + } + + /** + * Get whether or not this user can increment their vote streak if they were to vote. + * + * @return {@code true} if they can extend their vote streak with another vote, {@code false} otherwise. + */ + public boolean canVoteStreak() { + + // get the last time they ever voted + Timestamp lastVoteEver = getVoteRecord().getLastVoted().orElse(null); + if (lastVoteEver != null){ + + Timestamp current = new Timestamp(System.currentTimeMillis()); + + // don't count same days as vote streak increment + boolean isDiff = TimeUtil.isDifferentDay(current, lastVoteEver); + if (isDiff) { + + // if voted within timeframe + int hoursDiff = TimeUtil.getDifferenceInHours(current, lastVoteEver); + if (hoursDiff <= 48) { + return true; + } + else { + return false; + } + } + + // if same day + return false; + } + + // never voted + return true; + } + + /** + * Get the timestamp for when the player can vote again to increment their vote streak. + * + * @return The timestamp for when the player can vote again, if present, otherwise empty and they can vote now. + */ + public Optional<Timestamp> getTimeUntilVoteStreak() { + + // get the last time they ever voted + Timestamp lastVoteEver = getVoteRecord().getLastVoted().orElse(null); + if (lastVoteEver != null){ + + Timestamp current = new Timestamp(System.currentTimeMillis()); + + // don't count same days as vote streak increment + boolean isDiff = TimeUtil.isDifferentDay(current, lastVoteEver); + if (isDiff) { + // can vote streak now + return Optional.empty(); + } + else{ + return Optional.of(new Timestamp(lastVoteEver.getNanos() + 86400000 - System.currentTimeMillis())); + } + } + + // can vote streak now + return Optional.empty(); + } + + public int getBucks() { + return this.bucks; + } + + public void setBucks(int amnt) { + ServerUtil.runTaskAsync(() -> UserDAO.updateUserBucks(this.uuid, amnt)); + this.bucks = amnt; + } + + public boolean hasBucks(int i) { + return this.bucks >= i; + } + + public void addBucks(int amnt) { + this.bucks += amnt; + ServerUtil.runTaskAsync(() -> UserDAO.updateUserBucks(this.uuid, this.bucks)); + } + + public void takeBucks(int amnt) { + this.bucks -= amnt; + ServerUtil.runTaskAsync(() -> UserDAO.updateUserBucks(this.uuid, this.bucks)); + } + + public long getLastSpanked() { + return lastSpanked; + } + + public void setLastSpanked(long lastSpanked) { + this.lastSpanked = lastSpanked; + } + + public int getTokens() { + return getPurse().getBalance(Currency.TOKEN); + //return this.tokens; + } + + public void setTokens(int amnt) { + getPurse().set(Currency.TOKEN, amnt); + } + + public boolean hasTokens(int i) { + return getPurse().getBalance(Currency.TOKEN) >= i; + } + + public void addTokens(int amnt) { + getPurse().set(Currency.TOKEN, getPurse().getBalance(Currency.TOKEN) + amnt); + } + + public void takeTokens(int amnt) { + getPurse().set(Currency.TOKEN, getPurse().getBalance(Currency.TOKEN) - amnt); + } + + public int getCrowbars() { + return getPurse().getBalance(Currency.CROWBAR); + } + + public void setCrowbars(int amnt) { + getPurse().set(Currency.CROWBAR, amnt); + } + + public boolean hasCrowbars(int i) { + return getPurse().getBalance(Currency.CROWBAR) >= i; + } + + public void addCrowbars(int amnt) { + getPurse().set(Currency.CROWBAR, getPurse().getBalance(Currency.CROWBAR) + amnt); + } + + public void takeCrowbars(int amnt) { + getPurse().set(Currency.CROWBAR, getPurse().getBalance(Currency.CROWBAR) - amnt); + } + + public double getMoney() { + MoneyEvent e = new MoneyEvent(this.uuid); + Bukkit.getPluginManager().callEvent(e); + return e.getBalance(); + } + + public boolean hasMoney(double i) { + return this.getMoney() >= i; + } + + public boolean addMoney(double amount) { + MoneyEvent e = new MoneyEvent(this.uuid, amount); + Bukkit.getPluginManager().callEvent(e); + return e.isSuccessfull(); + } + + public boolean takeMoney(double amount) { + MoneyEvent e = new MoneyEvent(this.uuid, MoneyEventType.TAKE, amount); + Bukkit.getPluginManager().callEvent(e); + return e.isSuccessfull(); + } + + public long getLastPlayersToggle() { + return this.lastPlayersToggle; + } + + public void setLastPlayersToggle(long lastPlayersToggle) { + this.lastPlayersToggle = lastPlayersToggle; + } + + public boolean canTogglePlayers() { + return this.lastPlayersToggle + 10000 < System.currentTimeMillis(); + } + + public boolean getPref(Pref pref) { + return this.prefs.contains(pref); + } + + public void togglePref(Player player, Pref pref) { + this.setPref(player, pref, !this.prefs.contains(pref)); + } + + public void setPref(Player player, Pref pref, boolean b) { + if (b && !this.prefs.contains(pref)) this.prefs.add(pref); + else if (!b) this.prefs.remove(pref); + + ServerUtil.runTaskAsync(() -> UserDAO.updateUserPref(this.uuid, pref, this.prefs.contains(pref))); + + Bukkit.getPluginManager().callEvent(new UpdateEvent(player, pref)); + } + + public ParticleCosmeticStorage.Shape getParticleShape() { + return this.particleShape; + } + + public void setParticleShape(ParticleCosmeticStorage.Shape shape) { + this.particleShape = shape; + } + + public int getCosmeticVariant() { + return this.cosmeticVariant; + } + + public void setCosmeticVariant(int i) { + this.cosmeticVariant = i; + } + + public boolean hasNametag(Nametag tag) { + return this.nametags.contains(tag); + } + + public void giveNametag(Nametag tag) { + if (!this.nametags.contains(tag)) this.nametags.add(tag); + ServerUtil.runTaskAsync(() -> UserDAO.updateUserNametag(this.uuid, tag.getName(), true)); + } + + public void takeNametag(Nametag tag) { + this.nametags.remove(tag); + ServerUtil.runTaskAsync(() -> UserDAO.updateUserNametag(this.uuid, tag.getName(), false)); + } + + public Nametag getActivatingNametag() { + return this.activatingNametag; + } + + public void setActivatingNametag(Nametag tag) { + this.activatingNametag = tag; + } + + public Nametag getBuyingNametag() { + return this.buyingNametag; + } + + public void setBuyingNametag(Nametag buyingNametag) { + this.buyingNametag = buyingNametag; + } + + public ShopItem getBuyingShopItem() { + return this.buyingShopItem; + } + + public void setBuyingShopItem(ShopItem buyingShopItem) { + this.buyingShopItem = buyingShopItem; + } + + public boolean dailyStreakExpired() { + if (this.dailyStreak > 0 && this.lastDailyReward + 172800000 < System.currentTimeMillis()) { + this.setDailyStreak(0); + this.setLastDailyReward(0); + return true; + } + return false; + } + + public int getDailyStreak() { + this.dailyStreakExpired(); + return this.dailyStreak; + } + + public long getDailyPlayTime() { + return dailyPlayTime; + } + + public void setDailyStreak(int dailyStreak) { + this.dailyStreak = dailyStreak; + ServerUtil.runTaskAsync(() -> OldVoteDAO.updateUserDailyStreak(this.uuid, this.dailyStreak)); + } + + public int getLuckyDailyChance() { + this.dailyStreakExpired(); + return this.dailyStreak >= 20 ? 100 : this.dailyStreak * 5; + } + + public void addDailyStreak(int i) { + this.lastDailyReward = System.currentTimeMillis(); + this.dailyStreak += i; + ServerUtil.runTaskAsync(() -> OldVoteDAO.updateUserDaily(this.uuid, this.dailyStreak, this.lastDailyReward)); + } + + public long getLastDailyReward() { + return this.lastDailyReward; + } + + public void setLastDailyReward(long l) { + this.lastDailyReward = l; + ServerUtil.runTaskAsync(() -> OldVoteDAO.updateUserLastDailyReward(this.uuid, this.lastDailyReward)); + } + + public void setLastDailyReward() { + this.setLastDailyReward(System.currentTimeMillis()); + } + + public boolean canClaimDailyReward() { + return this.lastDailyReward + 86400000 < System.currentTimeMillis(); + } + + public long getTimeUntilDailyReward() { + return this.lastDailyReward + 86400000 - System.currentTimeMillis(); + } + + public String getLastDonorReward() { + return this.lastDonorReward; + } + + public void setLastDonorReward() { + LocalDateTime now = LocalDateTime.now(); + this.lastDonorReward = now.getYear() + ":" + now.getMonthValue(); + ServerUtil.runTaskAsync(() -> UserDAO.updateUserLastDonorReward(this.uuid, this.lastDonorReward)); + } + + public boolean canClaimMonthlyReward() { + // if their highest rank is a default user + if (getUserRankNonTrial() == UserRank.DEFAULT) return false; + + if (this.lastDonorReward == null) return true; + String[] a + = this.lastDonorReward.split(":"); + if (a.length == 2) + try { + int year = Integer.parseInt(a[0]); + int month = Integer.parseInt(a[1]); + LocalDateTime time = LocalDateTime.now(); + return year < time.getYear() || month < time.getMonthValue(); + } catch (NumberFormatException ignored) { + } + return true; + } + + public long getTimeUntilMonthlyReward() { + if (this.canClaimMonthlyReward()) return 0; + LocalDateTime now = LocalDateTime.now(); + LocalDateTime next = now.getMonthValue() == 12 ? LocalDateTime.of(now.getYear() + 1, 1, 1, 0, 0) + : LocalDateTime.of(now.getYear(), now.getMonthValue() + 1, 1, 0, 0); + return ChronoUnit.MILLIS.between(now, next); + } + + public boolean hasEditMode() { + return this.editMode; + } + + public void setEditMode(boolean b) { + this.editMode = b; + if (!b && !this.isRank(UserRank.ADMIN)) { + Player player = Bukkit.getPlayer(this.uuid); + player.getInventory().iterator().forEachRemaining(itemStack -> player.getInventory().remove(itemStack)); + } + } + + public String getTutorial() { + return this.tutorial; + } + + public void setTutorial(String tutorial) { + this.tutorial = tutorial; + } + + public boolean isInTutorial() { + return this.tutorial != null; + } + + public int getTutorialSlide() { + return this.tutorialSlide; + } + + public void setTutorialSlide(int tutorialSlide) { + this.tutorialSlide = tutorialSlide; + } + + public boolean isEditingTutorial() { + return this.editingTutorial; + } + + public void setEditingTutorial(boolean editingTutorial) { + this.editingTutorial = editingTutorial; + } + + public Scoreboard getScoreboard() { + if (this.scoreboard == null) + this.scoreboard = Bukkit.getScoreboardManager().getNewScoreboard(); + return this.scoreboard; + } + + public void setScoreboard(Scoreboard scoreboard) { + this.scoreboard = scoreboard; + } + + // UTILS + + public void updateVisibility(Player p) { + if (p == null) + p = Bukkit.getPlayer(this.uuid); + if (this.isSpecial()) { + for (Player pl : Bukkit.getOnlinePlayers()) { + pl.showPlayer(p); + if (this.prefs.contains(Pref.PLAYERS_SHOWN)) p.showPlayer(pl); + else p.hidePlayer(pl); + } + return; + } + for (Player pl : Bukkit.getOnlinePlayers()) { + if (this.prefs.contains(Pref.PLAYERS_SHOWN)) p.showPlayer(pl); + else p.hidePlayer(pl); + User u = Core.getUserManager().getLoadedUser(pl.getUniqueId()); + if (u.getPref(Pref.PLAYERS_SHOWN)) pl.showPlayer(p); + else pl.hidePlayer(p); + } + } + + public void updateDisplayName(Player p) { + if (p == null) + return; + DisplayNameUpdateEvent event = new DisplayNameUpdateEvent(p); + UserRank rank = this.getUserRank(); + event.setPrefix(""); + event.setSuffix(""); + event.setRankPrefix(rank.getPrefix()); + event.setNameColor(rank.getColor()); + Bukkit.getPluginManager().callEvent(event); + if(this.equipedTag!=null) { + event.setPrefix(this.equipedTag.getBoldName()); + } + p.setDisplayName(Utils.f(event.getRankPrefix() + ' ' + event.getPrefix() + + (event.getPrefix().isEmpty() ? "" : " ") + event.getNameColor() + (this.isSpecial() ? "&l" : "") + + p.getName() + (event.getSuffix().isEmpty() ? "" : " ") + event.getSuffix())); + } + + public void updateFlyMode(Player p) { + if (p == null) + return; + if (!this.isSpecial()) + return; + p.setAllowFlight(true); + p.setFlying(true); + } + + public void setPerms(Player p) { + if (p == null) + p = Bukkit.getPlayer(this.uuid); + if (p == null) + return; + List<String> ls = Core.getPermsManager().getAllPerms(this.getUserRank(), this.uuid); + if (this.pa != null) + p.removeAttachment(this.pa); + this.pa = p.addAttachment(Core.getInstance()); + for (String s : ls) + if (s.startsWith("-")) this.pa.setPermission(s.substring(1), false); + else this.pa.setPermission(s, true); + + } + + public void removePerms(Player p) { + if (this.pa != null) + p.removeAttachment(this.pa); + this.pa = null; + } + + public void updateNameTag(Player p) { + NametagManager.updateNametag(p); + } + + public String getColoredName(Player player) { + return this.getUserRank().getColor() + (this.isSpecial() ? "&l" : "") + player.getName(); + } + + public UUID getLastMessage() { + return this.lastMessage; + } + + public void setLastMessage(UUID lastMessage) { + this.lastMessage = lastMessage; + } + + public boolean hasMoved() { + return this.hasMoved; + } + + public void setHasMoved() { + this.hasMoved = true; + } + + public void insertLog(Player player, String action, String type, String reward, double amount, double price) { + Utils.insertLogLater(player.getUniqueId(), player.getName(), action, type, reward, amount, price); + } + + public void updateIgnored() { + String s = ""; + for (String st : this.ignored) + s += st + ','; + if (s.endsWith(",")) + s = s.substring(0, s.length() - 1); + + String finalS = s; + ServerUtil.runTaskAsync(() -> UserDAO.updateUserIgnore(this.uuid, finalS)); + } + + public void addIgnored(String name) { + this.ignored.add(name); + this.updateIgnored(); + } + + public void removeIgnored(String name) { + this.ignored.remove(name); + this.updateIgnored(); + } + + public List<String> getIgnored() { + return this.ignored; + } + + public boolean isIgnored(String name) { + return this.ignored.contains(name); + } + + public boolean isVanished(Player player) { + Plugin plugin = Bukkit.getPluginManager().getPlugin("Essentials"); + return plugin != null && ((Essentials) plugin).getVanishedPlayers().contains(player.getName()); + } + + public Long getJoinTime() { + return this.joinTime; + } + + public void setJoinTime(Long joinTime) { + this.joinTime = joinTime; + } + + public Long getLeaveTime() { + return this.leaveTime; + } + + public void setLeaveTime(Long leaveTime) { + this.leaveTime = leaveTime; + } + + public void updateAchievements() { + if (this.unlockedAchievements.isEmpty()) return; + if (this.unlockedAchievements.size() > Achievement.values().length) return; + Set<String> temp = new HashSet<>(); + this.unlockedAchievements.forEach(achievement -> temp.add(achievement.getShortName())); + String s = StringUtils.join(temp, ","); + + ServerUtil.runTaskAsync(() -> UserDAO.updateUnlockedAchievements(this.uuid, s)); + + if (this.shownAchievement != null) { + ServerUtil.runTaskAsync(() -> UserDAO.updateShownAchievement(this.uuid, this.shownAchievement.getShortName())); + } + } + + public Set<Achievement> getUnlockedAchievements() { + return this.unlockedAchievements; + } + + public boolean hasAchievement(Achievement achievement) { + return this.unlockedAchievements.contains(achievement); + } + + public void addAchievement(Achievement achievement) { + boolean disabled = true; + if (disabled) return; // TODO + if (achievement == null) return; + if (hasAchievement(achievement)) return; + this.unlockedAchievements.add(achievement); + if (this.shownAchievement == null) this.setShownAchievement(achievement); + if (achievement.ordinal() > this.getShownAchievement().ordinal()) this.setShownAchievement(achievement); + this.updateAchievements(); + } + + public Achievement getShownAchievement() { + if (!this.unlockedAchievements.contains(this.shownAchievement)) this.addAchievement(this.shownAchievement); + return this.shownAchievement; + } + + public void setShownAchievement(Achievement achievement) { + if (achievement == null) return; + if (!this.unlockedAchievements.contains(achievement)) return; + this.shownAchievement = achievement; + ServerUtil.runTaskAsync(() -> UserDAO.updateShownAchievement(this.uuid, this.shownAchievement.getShortName())); + } + + public Crate getSelectedCrate() { + return this.selectedCrate; + } + + public void setSelectedCrate(Crate selectedCrate) { + this.selectedCrate = selectedCrate; + } + + public CrateReward getConfirmingCrateReward() { + return this.confirmingCrateReward; + } + + public void setConfirmingCrateReward(CrateReward c) { + this.confirmingCrateReward = c; + } + + /** + * @param length how long the cooldown is (in seconds) + * @param saveToMySQL if the cooldown should be saved to mySQL (if for more than 6 hours, it probably should) + * @param id the id of the cooldown + * @param serverSpecific if the cooldown should only effect the one server. + */ + public void addCooldown(String id, long length, boolean saveToMySQL, boolean serverSpecific){ + this.cooldowns.add(new CooldownPayload(id, (length*1000) + System.currentTimeMillis(), serverSpecific, saveToMySQL)); + } + + + /** + * @param type the type of thing the cooldown falls under + * @return true if the player still has a cooldown. + */ + public boolean isOnCooldown(String type){ + if(this.cooldowns==null) + return false; + Set<CooldownPayload> clone = this.cooldowns; + for(CooldownPayload obj : clone) { + if(obj.getId().equals(type)) { + if(System.currentTimeMillis()>=obj.getExpireTime().getTime()) { + this.cooldowns.remove(obj); + return false; + } + return true; + } + } + return false; + } + + public void removeCooldown(String type) { + Set<CooldownPayload> clone = this.cooldowns; + for(CooldownPayload o : clone) { + if(o.getId().equalsIgnoreCase(type)) { + this.cooldowns.remove(o); + } + } + } + + /** + * @param type the string identifier of the cooldown + * @return a String formated #.# displaying the seconds remaining until expire + */ + public String getFormattedCooldown(String type){ + DecimalFormat df = new DecimalFormat("#.#"); + Optional<CooldownPayload> optCD = this.cooldowns.stream().filter(obj -> obj.getId().equals(type)).findFirst(); + if(!optCD.isPresent()) { + Core.error("Tried to get formatted cooldown of " + type + " but the player " + this.getName() + " does not have a cooldown of that type!"); + return ChatColor.RED + "ERROR: Could not find your cooldown! Report this to an admin id: " + type; + } + long time = optCD.map(c -> c.getExpireTime().getTime()).orElse(0L); + time -= System.currentTimeMillis(); + time /= 1000; + String returnStr; + if(TimeUnit.SECONDS.toDays(time)>1) + returnStr = TimeUnit.SECONDS.toDays(time) + " day"; + else if(TimeUnit.SECONDS.toHours(time)>1) + returnStr = TimeUnit.SECONDS.toHours(time) + " hour"; + else if(TimeUnit.SECONDS.toMinutes(time)>1) + returnStr = TimeUnit.SECONDS.toMinutes(time) + " minute"; + else + returnStr = df.format(time) + " second"; + + return returnStr + (returnStr.equals("1") || returnStr.equals("1.0") ? "" : "s"); + } + + public long getCooldownTimeLeft(String type) { + Optional<CooldownPayload> optCD = this.cooldowns.stream().filter(obj -> obj.getId().equals(type)).findFirst(); + if(!optCD.isPresent()) { + Core.error("Tried to get formatted cooldown of " + type+ " but the player " + this.getName() + " does not have a cooldown of that type!"); + throw new NullPointerException(); + } + long time = optCD.map(c -> c.getExpireTime().getTime()).orElse(0L); + time -= System.currentTimeMillis(); + time /= 1000; + return time; + } + + public CoreLocation getLocation() { + return location; + } + + public String getLanguage() { + return language; + } + + public void setLanguage(String language) { + this.language = language; + } + + /** + * Get the address that the user used to join the server. + * + * @return The IP address that the user used to join the server. + */ + public String getServerJoinAddress() { + return serverJoinAddress; + } + + /** + * Set the address that the user used to join the server. + * + * @param joinAddress - the join IP address + */ + public void setServerJoinAddress(String joinAddress){ + this.serverJoinAddress = joinAddress; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/users/UserDAO.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/users/UserDAO.java new file mode 100644 index 0000000..3ed4a92 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/users/UserDAO.java @@ -0,0 +1,1891 @@ +package net.grandtheftmc.core.users; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; + +import javax.annotation.Nullable; + +import org.apache.commons.lang3.tuple.Pair; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.achivements.Achievement; +import net.grandtheftmc.core.currency.Currency; +import net.grandtheftmc.core.database.BaseDatabase; +import net.grandtheftmc.core.database.dao.CurrencyDAO; +import net.grandtheftmc.core.servers.ServerType; +import net.grandtheftmc.core.stat.StatDAO; +import net.grandtheftmc.core.users.eventtag.EventTag; +import net.grandtheftmc.core.users.eventtag.EventTagDAO; +import net.grandtheftmc.core.users.eventtag.TagVisibility; +import net.grandtheftmc.core.util.CoreLocation; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.core.util.UUIDUtil; + +public class UserDAO { + + /** + * This method will fetch all of the general user stats, + * - User Rank + * - Trial Rank + * - Trial Rank Expiry + * - Bucks + * - Tokens + * - Crowbars + * - Prefs + * - Votes + * - Vote Streak + * - Last Vote Streak + * - Daily Streak + * - Last Daily Reward + * - Last Donor Reward + * - Shown Achievements + * - Unlocked Achievements + * - Ignored + * + * @param user - user profile + * @return Whether the stats were fetched + */ + public static boolean fetchGeneralUser(User user) { + + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("SELECT * FROM `users` WHERE `uuid`=?;")) { + statement.setString(1, user.getUUID().toString()); + try (ResultSet result = statement.executeQuery()) { + while (result.next()) { + //user.ur = UserRank.getUserRank(result.getString("userrank")); + //user.trialRank = UserRank.getUserRankOrNull(result.getString("trialRank")); + //user.trialRankExpiry = result.getLong("trialRankExpiry"); + // TODO perhaps remove bucks, as its in users table but might be unused + user.bucks = result.getInt("bucks"); + // removed due to CurrencyDAO + //user.tokens = result.getInt("tokens"); + //user.crowbars = result.getInt("crowbars"); + user.prefs.clear(); + for (Pref pref : Pref.values()) + if (result.getBoolean(pref.getDbName())) + user.prefs.add(pref); + //user.couponCredits = result.getInt("couponCredits"); + user.dailyStreak = result.getInt("dailyStreak"); + user.lastDailyReward = result.getLong("lastDailyReward"); + user.lastDonorReward = result.getString("lastDonorReward"); + user.shownAchievement = Achievement.getAchivementExact(result.getString("shownAchievement")).orElse(Achievement.Hobo); + if (result.getString("unlockedAchievements") == null || result.getString("unlockedAchievements").equalsIgnoreCase("NULL")) { + user.addAchievement(Achievement.Hobo); + user.setShownAchievement(Achievement.Hobo); + } + String a = result.getString("unlockedAchievements"); + if (a != null) { + for (String string : a.split(",")) { + Achievement.getAchivementExact(string).ifPresent(user.unlockedAchievements::add); + } + } + String ignored = result.getString("ignored"); + user.ignored = new ArrayList<>(); + if (ignored != null) { + Collections.addAll(user.ignored, ignored.split(",")); + } + } + } + } + + // get global rank if there is one + UserRank globalRank = getRank(connection, "GLOBAL", user.getUUID()); + if (globalRank != null) { + user.globalRank = globalRank; + } + + // get server rank if there is one + UserRank serverRank = getRank(connection, Core.name().toUpperCase(), user.getUUID()); + if (serverRank != null) { + user.ur = serverRank; + } + + // get trial rank if there is one + // Note: We use the default's rank serverKey, as most settings will have per server + // or global ranks based off this rank. + Pair<UserRank, Timestamp> trialInfo = getTrialRank(connection, UserRank.DEFAULT.getServerKey(), user.getUUID()); + if (trialInfo != null) { + user.trialRank = trialInfo.getLeft(); + user.trialRankExpiry = trialInfo.getRight().getTime(); + } + + user.setServerJoinAddress(StatDAO.getUserJoinAddress(connection, user.getUUID()).orElse("mc.gtm.net")); + + // per request of prez, perhaps change down the road + if (Core.getInstance().getSettings().getType() == ServerType.VICE){ + user.setServerJoinAddress("play.vicemc.net"); + } + + } catch (SQLException e) { + Core.error("[UserDAO:fetchGeneralUser(user)] SQLException occurred"); + e.printStackTrace(); + return false; + } + + return true; + } + + /** + * This will insert the user to the 'users' database. + * + * @param uuid - Unique Identifier of the user + * @param name - Name of the user + * + * @return Whether the data was inserted + */ + public static boolean insertUser(UUID uuid, String name) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("INSERT INTO `users`(`uuid`,`lastname`) VALUES(?,?) ON DUPLICATE KEY UPDATE `lastname`=?;")) { + statement.setString(1, uuid.toString()); + statement.setString(2, name); + statement.setString(3, name); + statement.execute(); + } + try (PreparedStatement statement = connection.prepareStatement("INSERT INTO `user`(`uuid`,`name`) VALUES(UNHEX(?),?) ON DUPLICATE KEY UPDATE `name`=?;")) { + statement.setString(1, uuid.toString().replaceAll("-", "")); + statement.setString(2, name); + statement.setString(3, name); + statement.execute(); + } + } catch (SQLException e) { + Core.error("[UserDAO:insertUser(uuid,name)] SQLException occurred"); + e.printStackTrace(); + return false; + } + + return true; + } + + /** + * This will insert the user to the 'voters' database. + * + * @param uuid - Unique Identifier of the user + * @param name - Name of the user + * @return Whether the data was inserted + */ + public static boolean insertVoter(UUID uuid, String name) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("INSERT INTO `votes`(`uuid`,`name`) VALUES (?,?) ON DUPLICATE KEY UPDATE `name`=?;")) { + statement.setString(1, uuid.toString()); + statement.setString(2, name); + statement.setString(3, name); + statement.execute(); + } + } catch (SQLException e) { + Core.error("[UserDAO:insertVoter(uuid,name)] SQLException occurred"); + e.printStackTrace(); + return false; + } + + return true; + } + + /** + * Adds the player tag to the specified user. + * + * @param uuid - the uuid of the user to add the tag to + * @param tag - the tag that you are adding to the player + * + * @return true if the update was successful + */ + public static boolean addPlayerTag(UUID uuid, EventTag tag) { + + try (Connection connect = BaseDatabase.getInstance().getConnection()) { + + String query = "INSERT IGNORE INTO user_tag (uuid, server_key, tag, enabled) VALUES (UNHEX(?), ?, ?, ?);"; + + try (PreparedStatement statement = connect.prepareStatement(query)){ + statement.setString(1, uuid.toString().replaceAll("-", "")); + statement.setString(2, tag.isGlobal() ? "GLOBAL" : Core.name().toUpperCase()); + statement.setString(3, tag.toString()); + statement.setBoolean(4, false); + statement.execute(); + } + } catch (SQLException e) { + Core.error("[UserDAO:addPlayerTag(uuid, tag)] SQLException occurred"); + e.printStackTrace(); + return false; + } + return true; + } + + /** + * Adds the player tag to the specified user for the specified server key. + * + * @param uuid - the uuid of the user to add the tag to + * @param serverKey - the server key to add the tag for + * @param tag - the tag that you are adding to the player + * + * @return {@code true} if the update was successful, {@code false} otherwise. + */ + public static boolean addPlayerTag(UUID uuid, String serverKey, EventTag tag) { + + try (Connection connect = BaseDatabase.getInstance().getConnection()) { + + String query = "INSERT IGNORE INTO user_tag (uuid, server_key, tag, enabled) VALUES (UNHEX(?), ?, ?, ?);"; + + try (PreparedStatement statement = connect.prepareStatement(query)){ + statement.setString(1, uuid.toString().replaceAll("-", "")); + statement.setString(2, serverKey); + statement.setString(3, tag.toString()); + statement.setBoolean(4, false); + statement.execute(); + } + } catch (SQLException e) { + Core.error("[UserDAO:addPlayerTag(uuid, serverKey, tag)] SQLException occurred"); + e.printStackTrace(); + return false; + } + return true; + } + + /** + * Updates the player tags for the given user. + * + * @param uuid - the uuid of the user + * @param newEquipped the newly equipped tag + * + * @return true if the update was successful + */ + public static boolean updatePlayerTags(UUID uuid, EventTag newEquipped){ + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + + String disableQuery = "UPDATE user_tag SET enabled=0 WHERE uuid=UNHEX(?) AND (server_key=? OR server_key=?);"; + + try (PreparedStatement statement = connection.prepareStatement(disableQuery)) { + statement.setString(1, uuid.toString().replaceAll("-", "")); + statement.setString(2, "GLOBAL"); + statement.setString(3, Core.name().toUpperCase()); + statement.executeUpdate(); + } + + if(newEquipped!=null) { + + String equipQuery = "UPDATE user_tag SET enabled=1 WHERE uuid=UNHEX(?) AND tag=?;"; + + try (PreparedStatement statement = connection.prepareStatement(equipQuery)) { + statement.setString(1, uuid.toString().replaceAll("-", "")); + statement.setString(2, newEquipped.toString()); + statement.executeUpdate(); + } + } + + } catch (SQLException e) { + Core.error("[UserDAO:updatePlayerTags(user, equippedTag)] SQLException occurred"); + e.printStackTrace(); + return false; + } + + return true; + } + + /** + * @param uuid - the uuid of the player to remove from + * @param tag - the tag that must be removed. + * + * @return true if the method was successful. + */ + public static boolean removePlayerTag(UUID uuid, EventTag tag) { + try (Connection connection = BaseDatabase.getInstance().getConnection()){ + String removeQuery = "DELETE FROM user_tag WHERE uuid=UNHEX(?) AND tag=?"; + + try (PreparedStatement statement = connection.prepareStatement(removeQuery)) { + statement.setString(1, uuid.toString().replaceAll("-", "")); + statement.setString(2, tag.toString()); + statement.execute(); + } + + } catch (SQLException e) { + Core.error("[UserDAO:removePlayerTag(user, tag)] SQLException occurred"); + e.printStackTrace(); + return false; + } + return true; + } + + /** + * @param uuid - the uuid of the player + * @return a readable copy of the player's event tags. + */ + public static Set<String> fetchReadablePlayerTags(UUID uuid) { + Set<String> tags = new HashSet<>(); + try (Connection connect = BaseDatabase.getInstance().getConnection()) { + + String query = "SELECT * FROM user_tag WHERE uuid=UNHEX(?);"; + + try (PreparedStatement statement = connect.prepareStatement(query)){ + statement.setString(1, uuid.toString().replaceAll("-", "")); + try(ResultSet result = statement.executeQuery()) { + while (result.next()) { + EventTag tag = EventTag.valueOf(result.getString("tag")); + String serverKey = result.getString("server_key"); + tags.add("&b" + tag.toString() + " &7From Server: &6&l" + serverKey.toUpperCase()); + } + } + } + } catch (SQLException e) { + Core.error("[UserDAO:fetchPlayerTags(uuid)] SQLException occurred"); + e.printStackTrace(); + return null; + } + return tags; + } + + /** + * Get all the player tags for the given user. + * + * @param user - the user to get the tags of + * + * @return a set of all the unlocked tags a player has for their current server and globally. Also places the enabled tag into the enabled tag slot for the user + */ + public static Set<EventTag> fetchAndEquipServerPlayerTags(User user){ + Set<EventTag> tags = new HashSet<>(); + try (Connection connect = BaseDatabase.getInstance().getConnection()) { + + String query = "SELECT * FROM user_tag WHERE uuid=UNHEX(?) AND (server_key=? OR server_key=?);"; + + try (PreparedStatement statement = connect.prepareStatement(query)){ + statement.setString(1, user.getUUID().toString().replaceAll("-", "")); + statement.setString(2, "GLOBAL"); + statement.setString(3, Core.name().toUpperCase()); + try(ResultSet result = statement.executeQuery()) { + while (result.next()) { + EventTag tag = EventTag.valueOf(result.getString("tag")); + tags.add(tag); + if(result.getBoolean("enabled") && EventTagDAO.getTagVisibility(tag)!= TagVisibility.NO_ONE) + ServerUtil.runTask(() -> user.setEquipedTag(tag)); + } + } + } + } catch (SQLException e) { + Core.error("[UserDAO:fetchPlayerTags(uuid)] SQLException occurred"); + e.printStackTrace(); + return null; + } + return tags; + } + + /** + * @param uuid the uuid of the player + * @param credits the amount of credits to insert + */ + public static boolean updateCouponCredits(UUID uuid, int credits) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + CurrencyDAO.saveCurrency(connection, Currency.COUPON_CREDIT.getServerKey(), uuid, Currency.COUPON_CREDIT, credits); +// try (PreparedStatement statement = connection.prepareStatement("UPDATE `users` SET `couponCredits`=? WHERE `uuid`=?;")) { +// statement.setInt(1, credits); +// statement.setString(2, uuid.toString()); +// statement.execute(); +// } + } catch (SQLException e) { + Core.error("[UserDAO:updateCouponCredits(uuid,rank)] SQLException occurred"); + e.printStackTrace(); + return false; + } + + return true; + } + + + /** + * This method will fetch the server_stats related data.<br> + * (DailyPlayTime, PlayedServers, Etc..) + * + * @param user - user profile + * @return Whether the data were fetched + */ + public static boolean fetchServerStats(User user) { + long time = System.currentTimeMillis(); + + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("SELECT * FROM `server_stats` WHERE `uuid`=?;")) { + statement.setString(1, user.getUUID().toString()); + try (ResultSet result = statement.executeQuery()) { + if (result.next()) { + user.dailyPlayTime = result.getLong("dailyPlayTime"); + + try (PreparedStatement statement2 = connection.prepareStatement("UPDATE `server_stats` SET `dailyLoginTime`=?,`playedServers`=?,`weeklyLoginTime`=? WHERE `uuid`=?;")) { + statement2.setLong(1, time); + + String playedServers = result.getString("playedServers"); + if (playedServers == null) + playedServers = Core.name(); + if (!playedServers.toLowerCase().contains(Core.name().toLowerCase())) + playedServers += Core.name(); + statement2.setString(2, playedServers); + + long weeklyLoginTime = result.getLong("weeklyLoginTime"); + weeklyLoginTime = weeklyLoginTime == 0 ? time : weeklyLoginTime; + statement2.setLong(3, weeklyLoginTime); + + statement2.setString(4, user.getUUID().toString()); + statement2.execute(); + } + } else { + try (PreparedStatement statement2 = connection.prepareStatement("INSERT INTO `server_stats`(`uuid`,`firstLogin`,`dailyLoginTime`,`dailyPlayTime`,`playedServers`,`weeklyLoginTime`) VALUES(?,?,?,?,?,?);")) { + statement2.setString(1, user.getUUID().toString()); + statement2.setLong(2, 0); + statement2.setLong(3, time); + statement2.setLong(4, 0); + statement2.setString(5, Core.name()); + statement2.setLong(6, time); + + user.dailyPlayTime = 0; + statement2.execute(); + } + } + } + } + } catch (SQLException e) { + Core.error("[UserDAO:fetchServerStats(user)] SQLException occurred"); + e.printStackTrace(); + return false; + } + + return true; + } + + /** + * This will update the users rank in the database only. + * + * @param uuid - Unique Identifier of the user + * @param rank - Rank to update to + * @return Whether the data updated + * + * @deprecated - Please see {@link #saveRank(Connection, String, UUID, UserRank)} for how to update a user rank properly. This exists for compatibility purposes only. + */ + @Deprecated + public static boolean updateUserRank(UUID uuid, UserRank rank) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + return saveRank(connection, rank.getServerKey(), uuid, rank); + } catch (SQLException e) { + Core.error("[UserDAO:updateUserRank(uuid,rank)] SQLException occurred"); + e.printStackTrace(); + return false; + } + } + + /** + * This will update the trial rank data in 'user_trial_rank' table only. + * <p> + * Note: If a player has a trial rank, this will delete their old one and add the new one. + * </p> + * + * @param uuid - Unique Identifier of the user + * @param rank - Rank of the trial (can be null) + * @param expiry - Time in milliseconds of the expiry + * @return Whether the data updated + * + * @deprecated - Please see {@link #createTrialRank(Connection, String, UUID, UserRank, Timestamp)} for how to update a trial rank properly. This exists for compatibility purposes only. + */ + @Deprecated + public static boolean updateUserTrialRank(UUID uuid, @Nullable UserRank rank, long expiry) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + + // grab the trial data + Pair<UserRank, Timestamp> trialData = getTrialRank(connection, rank.getServerKey(), uuid); + if (trialData != null){ + // remove old data + removeTrialRank(connection, rank.getServerKey(), uuid); + } + + return createTrialRank(connection, rank.getServerKey(), uuid, rank, new Timestamp(expiry)); + } catch (SQLException e) { + Core.error("[UserDAO:updateUserTrialRank(uuid,rank,expiry)] SQLException occurred"); + e.printStackTrace(); + return false; + } + } + + /** + * This fetch the amount of bucks from 'users' only. + * + * @param uuid - Unique Identifier of the user + * @return Whether the data updated + * + * @deprecated - possibly unused as money is per server and this isn't a global currency. + */ + @Deprecated + public static int fetchUserBucks(UUID uuid) { + int bucks = 0; + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("SELECT `bucks` FROM `users` WHERE `uuid`=?;")) { + statement.setString(1, uuid.toString()); + try (ResultSet result = statement.executeQuery()) { + if(result.next()) { + bucks = result.getInt("bucks"); + } + } + } + } catch (SQLException e) { + Core.error("[UserDAO:fetchUserBucks(uuid,bucks)] SQLException occurred"); + e.printStackTrace(); + return -1; + } + + return bucks; + } + + /** + * This fetch the amount of bucks from 'users' only. + * + * @param name - Name of the user + * @return Whether the data updated + * + * + * @deprecated - possibly unused as money is per server and this isn't a global currency. + */ + @Deprecated + public static int fetchUserBucksByName(String name) { + int bucks = 0; + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("SELECT `bucks` FROM `users` WHERE `lastname`=?;")) { + statement.setString(1, name); + try (ResultSet result = statement.executeQuery()) { + if(result.next()) { + bucks = result.getInt("bucks"); + } + } + } + } catch (SQLException e) { + Core.error("[UserDAO:fetchUserBucksByName(name,bucks)] SQLException occurred"); + e.printStackTrace(); + return -1; + } + + return bucks; + } + + /** + * This will update the amount of bucks in 'users' only. + * + * @param uuid - Unique Identifier of the user + * @param bucks - Amount of bucks + * @return Whether the data updated + * + * @deprecated - possibly unused as money is per server and this isn't a global currency. + */ + @Deprecated + public static boolean updateUserBucks(UUID uuid, int bucks) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE `users` SET `bucks`=? WHERE `uuid`=?;")) { + statement.setInt(1, bucks); + statement.setString(2, uuid.toString()); + statement.execute(); + } + } catch (SQLException e) { + Core.error("[UserDAO:updateUserBucks(uuid,bucks)] SQLException occurred"); + e.printStackTrace(); + return false; + } + + return true; + } + + /** + * This will update the amount of bucks in 'users' only. + * + * @param name - Name of the user + * @param bucks - Amount of bucks + * @return Whether the data updated + * + * @deprecated - possibly unused as money is per server and this isn't a global currency. + */ + @Deprecated + public static boolean updateUserBucksByName(String name, int bucks) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE `users` SET `bucks`=? WHERE `lastname`=?;")) { + statement.setInt(1, bucks); + statement.setString(2, name); + statement.execute(); + } + } catch (SQLException e) { + Core.error("[UserDAO:updateUserBucksByName(name,bucks)] SQLException occurred"); + e.printStackTrace(); + return false; + } + + return true; + } + + /** + * This will update the amount of bucks in 'users' only. + * + * @param name - Name of the user + * @param bucks - Amount of bucks + * @return Whether the data updated + * + * @deprecated - possibly unused as money is per server and this isn't a global currency. + */ + @Deprecated + public static boolean addUserBucksByName(String name, int bucks) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE `users` SET `bucks`=bucks+? WHERE `lastname`=?;")) { + statement.setInt(1, bucks); + statement.setString(2, name); + statement.execute(); + } + } catch (SQLException e) { + Core.error("[UserDAO:addUserBucksByName(name,bucks)] SQLException occurred"); + e.printStackTrace(); + return false; + } + + return true; + } + + /** + * This will update the amount of bucks in 'users' only. + * + * @param uuid - Unique Identifier of the user + * @param bucks - Amount of bucks + * @return Whether the data updated + * + * @deprecated - possibly unused as money is per server and this isn't a global currency. + */ + @Deprecated + public static boolean addUserBucks(UUID uuid, int bucks) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE `users` SET `bucks`=bucks+? WHERE `uuid`=?;")) { + statement.setInt(1, bucks); + statement.setString(2, uuid.toString()); + statement.execute(); + } + } catch (SQLException e) { + Core.error("[UserDAO:addUserBucks(uuid,bucks)] SQLException occurred"); + e.printStackTrace(); + return false; + } + + return true; + } + + /** + * This will update the amount of bucks in 'users' only. + * + * @param name - Name of the user + * @param bucks - Amount of bucks + * @return Whether the data updated + * + * @deprecated - possibly unused as money is per server and this isn't a global currency. + */ + @Deprecated + public static boolean subtractUserBucksByName(String name, int bucks) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE `users` SET `bucks`=bucks-? WHERE `lastname`=?;")) { + statement.setInt(1, bucks); + statement.setString(2, name); + statement.execute(); + } + } catch (SQLException e) { + Core.error("[UserDAO:subtractUserBucksByName(name,bucks)] SQLException occurred"); + e.printStackTrace(); + return false; + } + + return true; + } + + /** + * This will update the amount of bucks in 'users' only. + * + * @param uuid - Unique Identifier of the user + * @param bucks - Amount of bucks + * @return Whether the data updated + * + * @deprecated - possibly unused as money is per server and this isn't a global currency. + */ + @Deprecated + public static boolean subtractUserBucks(UUID uuid, int bucks) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE `users` SET `bucks`=bucks-? WHERE `uuid`=?;")) { + statement.setInt(1, bucks); + statement.setString(2, uuid.toString()); + statement.execute(); + } + } catch (SQLException e) { + Core.error("[UserDAO:subtractUserBucks(uuid,bucks)] SQLException occurred"); + e.printStackTrace(); + return false; + } + + return true; + } + + /** + * This will update the amount of tokens in 'user_currency' table. + * + * @param uuid - Unique Identifier of the user + * @param tokens - Amount of tokens + * @return Whether the data updated + * + * @deprecated - Please see CurrencyDAO for how to use this global currency. + */ + @Deprecated + public static boolean updateUserTokens(UUID uuid, int tokens) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + CurrencyDAO.saveCurrency(connection, Currency.TOKEN.getServerKey(), uuid, Currency.TOKEN, tokens); + } catch (SQLException e) { + Core.error("[UserDAO:updateUserTokens(uuid,tokens)] SQLException occurred"); + e.printStackTrace(); + return false; + } + + return true; + } + + /** + * This will update the amount of tokens in 'user_currency' table. + * + * @param name - Name of the user + * @param tokens - Amount of tokens + * @return Whether the data updated + * + * @deprecated - Please see CurrencyDAO for how to use this global currency. + */ + @Deprecated + public static boolean updateUserTokensByName(String name, int tokens) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + UUID uuid = UserDAO.getUuidByName(name); + if (uuid != null){ + CurrencyDAO.saveCurrency(connection, Currency.TOKEN.getServerKey(), uuid, Currency.TOKEN, tokens); + } + } catch (SQLException e) { + Core.error("[UserDAO:updateUserTokensByName(name,tokens)] SQLException occurred"); + e.printStackTrace(); + return false; + } + + return true; + } + + /** + * This will add to the amount of tokens in 'user_currency' table. + * + * @param uuid - Unique Identifier of the user + * @param tokens - Amount of tokens + * @return Whether the data updated + * + * @deprecated - Please see CurrencyDAO for how to use this global currency. + */ + @Deprecated + public static boolean addUserTokens(UUID uuid, int tokens) { + + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + return CurrencyDAO.addCurrency(connection, Currency.TOKEN.getServerKey(), uuid, Currency.TOKEN, tokens); + } catch (SQLException e) { + Core.error("[UserDAO:addUserTokens(uuid,tokens)] SQLException occurred"); + e.printStackTrace(); + return false; + } + } + + /** + * This will add to the amount of tokens in 'user_currency' table. + * + * @param name - Name of the user + * @param tokens - Amount of tokens + * @return Whether the data updated + * + * @deprecated - Please see CurrencyDAO for how to use this global currency. + */ + @Deprecated + public static boolean addUserTokensByName(String name, int tokens) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + UUID uuid = UserDAO.getUuidByName(name); + if (uuid != null){ + return CurrencyDAO.addCurrency(connection, Currency.TOKEN.getServerKey(), uuid, Currency.TOKEN, tokens); + } + } catch (SQLException e) { + Core.error("[UserDAO:addUserTokens(name,tokens)] SQLException occurred"); + e.printStackTrace(); + return false; + } + + return true; + } + + /** + * This will subtract to the amount of tokens in 'user_currency' table. + * + * @param uuid - Unique Identifier of the user + * @param tokens - Amount of tokens + * @return Whether the data updated + * + * @deprecated - Please see CurrencyDAO for how to use this global currency. + */ + @Deprecated + public static boolean subtractUserTokens(UUID uuid, int tokens) { + + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + return CurrencyDAO.addCurrency(connection, Currency.TOKEN.getServerKey(), uuid, Currency.TOKEN, -1 * tokens); + } catch (SQLException e) { + Core.error("[UserDAO:subtractUserTokens(uuid,tokens)] SQLException occurred"); + e.printStackTrace(); + return false; + } + } + + /** + * This will subtract to the amount of tokens in 'user_currency' table. + * + * @param name - Name of the user + * @param tokens - Amount of tokens + * @return Whether the data updated + * + * @deprecated - Please see CurrencyDAO for how to use this global currency. + */ + @Deprecated + public static boolean subtractUserTokensByName(String name, int tokens) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + UUID uuid = UserDAO.getUuidByName(name); + if (uuid != null){ + return CurrencyDAO.addCurrency(connection, Currency.TOKEN.getServerKey(), uuid, Currency.TOKEN, -1 * tokens); + } + } catch (SQLException e) { + Core.error("[UserDAO:subtractUserTokensByName(name,tokens)] SQLException occurred"); + e.printStackTrace(); + return false; + } + + return true; + } + + /** + * This will subtract to the amount of tokens in 'user_currency' table. + * + * @param uuid - Unique Identifier of the user + * @return Whether the data updated + * + * @deprecated - Please see CurrencyDAO for how to use this global currency. + */ + @Deprecated + public static int getUserTokens(UUID uuid) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + return CurrencyDAO.getCurrency(connection, Currency.TOKEN.getServerKey(), uuid, Currency.TOKEN); + } catch (SQLException e) { + Core.error("[UserDAO:getUserTokens(uuid)] SQLException occurred"); + e.printStackTrace(); + return -1; + } + } + + /** + * This will subtract to the amount of tokens in 'user_currency' table. + * + * @param name - Name of the user + * @return Whether the data updated + * + * @deprecated - Please see CurrencyDAO for how to use this global currency. + */ + @Deprecated + public static int getUserTokensByName(String name) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + UUID uuid = UserDAO.getUuidByName(name); + if (uuid != null){ + return CurrencyDAO.getCurrency(connection, Currency.TOKEN.getServerKey(), uuid, Currency.TOKEN); + } + } catch (SQLException e) { + Core.error("[UserDAO:getUserTokensByName(name)] SQLException occurred"); + e.printStackTrace(); + } + + return -1; + } + + /** + * This will update the amount of crowbars in 'user_currency' table. + * + * @param uuid - Unique Identifier of the user + * @param crowbars - Amount of crowbars + * @return Whether the data updated + * + * @deprecated - Please see CurrencyDAO for how to use this global currency. + */ + @Deprecated + public static boolean updateUserCrowbars(UUID uuid, int crowbars) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + return CurrencyDAO.saveCurrency(connection, Currency.CROWBAR.getServerKey(), uuid, Currency.CROWBAR, crowbars); + } catch (SQLException e) { + Core.error("[UserDAO:updateUserCrowbars(uuid,crowbars)] SQLException occurred"); + e.printStackTrace(); + return false; + } + } + + /** + * This will update the amount of crowbars in 'user_currency' table. + * + * @param name - Name of the user + * @param crowbars - Amount of crowbars + * @return Whether the data updated + * + * @deprecated - Please see CurrencyDAO for how to use this global currency. + */ + @Deprecated + public static boolean updateUserCrowbarsByName(String name, int crowbars) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + + UUID uuid = UserDAO.getUuidByName(name); + if (uuid != null){ + return CurrencyDAO.saveCurrency(connection, Currency.CROWBAR.getServerKey(), uuid, Currency.CROWBAR, crowbars); + } + } catch (SQLException e) { + Core.error("[UserDAO:updateUserCrowbarsByName(name,crowbars)] SQLException occurred"); + e.printStackTrace(); + } + + return false; + } + + /** + * This will add to the amount of crowbars in 'user_currency' table. + * + * @param uuid - Unique Identifier of the user + * @param crowbars - Amount of crowbars + * @return Whether the data updated + * + * @deprecated - Please see CurrencyDAO for how to use this global currency. + */ + @Deprecated + public static boolean addUserCrowbars(UUID uuid, int crowbars) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + return CurrencyDAO.addCurrency(connection, Currency.CROWBAR.getServerKey(), uuid, Currency.CROWBAR, crowbars); + } catch (SQLException e) { + Core.error("[UserDAO:addUserCrowbars(uuid,crowbars)] SQLException occurred"); + e.printStackTrace(); + } + + return false; + } + + /** + * This will add to the amount of crowbars in 'user_currency' table. + * + * @param name - Name of the user + * @param crowbars - Amount of crowbars + * @return Whether the data updated + * + * @deprecated - Please see CurrencyDAO for how to use this global currency. + */ + @Deprecated + public static boolean addUserCrowbarsByName(String name, int crowbars) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + UUID uuid = UserDAO.getUuidByName(name); + if (uuid != null){ + return CurrencyDAO.addCurrency(connection, Currency.CROWBAR.getServerKey(), uuid, Currency.CROWBAR, crowbars); + } + } catch (SQLException e) { + Core.error("[UserDAO:addUserCrowbarsByName(name,crowbars)] SQLException occurred"); + e.printStackTrace(); + } + + return false; + } + + /** + * This will subtract to the amount of crowbars in 'user_currency' table. + * + * @param uuid - Unique Identifier of the user + * @param crowbars - Amount of crowbars + * @return Whether the data updated + * + * @deprecated - Please see CurrencyDAO for how to use this global currency. + */ + @Deprecated + public static boolean subtractUserCrowbars(UUID uuid, int crowbars) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + return CurrencyDAO.addCurrency(connection, Currency.CROWBAR.getServerKey(), uuid, Currency.CROWBAR, -1 * crowbars); + } catch (SQLException e) { + Core.error("[UserDAO:subtractUserCrowbars(uuid,crowbars)] SQLException occurred"); + e.printStackTrace(); + } + + return false; + } + + /** + * This will subtract to the amount of crowbars in 'user_currency' table. + * + * @param name - Name of the user + * @param crowbars - Amount of crowbars + * @return Whether the data updated + * + * @deprecated - Please see CurrencyDAO for how to use this global currency. + */ + @Deprecated + public static boolean subtractUserCrowbarsByName(String name, int crowbars) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + UUID uuid = UserDAO.getUuidByName(name); + if (uuid != null){ + return CurrencyDAO.addCurrency(connection, Currency.CROWBAR.getServerKey(), uuid, Currency.CROWBAR, -1 * crowbars); + } + } catch (SQLException e) { + Core.error("[UserDAO:subtractUserCrowbarsByName(name,crowbars)] SQLException occurred"); + e.printStackTrace(); + return false; + } + + return true; + } + + /** + * This will get the amount of crowbars in 'user_currency' table. + * + * @param uuid - Unique Identifier of the user + * @return Whether the data updated + * + * @deprecated - Please see CurrencyDAO for how to use this global currency. + */ + @Deprecated + public static int getUserCrowbars(UUID uuid) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + return CurrencyDAO.getCurrency(connection, Currency.CROWBAR.getServerKey(), uuid, Currency.CROWBAR); + } catch (SQLException e) { + Core.error("[UserDAO:getUserCrowbars(uuid,crowbars)] SQLException occurred"); + e.printStackTrace(); + return -1; + } + } + + /** + * This will get the amount of crowbars in 'user_currency' table. + * + * @param name - Name of the user + * @return Whether the data updated + * + * @deprecated - Please see CurrencyDAO for how to use this global currency. + */ + @Deprecated + public static int getUserCrowbarsByName(String name) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + UUID uuid = UserDAO.getUuidByName(name); + if (uuid != null){ + return CurrencyDAO.getCurrency(connection, Currency.CROWBAR.getServerKey(), uuid, Currency.CROWBAR); + } + } catch (SQLException e) { + Core.error("[UserDAO:getUserCrowbarsByName(name,crowbars)] SQLException occurred"); + e.printStackTrace(); + } + + return -1; + } + + public static boolean updateUserPref(UUID uuid, Pref pref, boolean status) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE `users` SET `" + pref.getDbName() + "`=? WHERE `uuid`=?;")) { + statement.setBoolean(1, status); + statement.setString(2, uuid.toString()); + statement.execute(); + } + } catch (SQLException e) { + Core.error("[UserDAO:updateUserPref(uuid,pref,status)] SQLException occurred"); + e.printStackTrace(); + return false; + } + + return true; + } + + public static boolean updateUserNametag(UUID uuid, String nametag, boolean add) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE `nametags` SET `" + nametag + "`=? WHERE `uuid`=?;")) { + statement.setInt(1, add ? 1 : 0); + statement.setString(2, uuid.toString()); + statement.execute(); + } + } catch (SQLException e) { + Core.error("[UserDAO:updateUserNametag(uuid,nametag,add)] SQLException occurred"); + e.printStackTrace(); + return false; + } + + return true; + } + + public static boolean updateUserLastDonorReward(UUID uuid, String lastDonorReward) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE `users` SET `lastDonorReward`=? WHERE `uuid`=?;")) { + statement.setString(1, lastDonorReward); + statement.setString(2, uuid.toString()); + statement.execute(); + } + } catch (SQLException e) { + Core.error("[UserDAO:updateUserLastDonorReward(uuid,lastDonorReward)] SQLException occurred"); + e.printStackTrace(); + return false; + } + + return true; + } + + public static boolean updateUserLastDonorRewardByName(String name, long lastDonorReward) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE `users` SET `lastDonorReward`=? WHERE `lastname`=?;")) { + statement.setLong(1, lastDonorReward); + statement.setString(2, name); + statement.execute(); + } + } catch (SQLException e) { + Core.error("[UserDAO:updateUserLastDonorReward(uuid,lastDonorReward)] SQLException occurred"); + e.printStackTrace(); + return false; + } + + return true; + } + + public static boolean updateUserIgnore(UUID uuid, String ignore) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE `users` SET `ignored`=? WHERE `uuid`=?;")) { + statement.setString(1, ignore); + statement.setString(2, uuid.toString()); + statement.execute(); + } + } catch (SQLException e) { + Core.error("[UserDAO:updateUserIgnore(uuid,ignore)] SQLException occurred"); + e.printStackTrace(); + return false; + } + + return true; + } + + public static boolean updateUnlockedAchievements(UUID uuid, String unlockedAchievements) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE `users` SET `unlockedAchievements`=? WHERE `uuid`=?;")) { + statement.setString(1, unlockedAchievements); + statement.setString(2, uuid.toString()); + statement.execute(); + } + } catch (SQLException e) { + Core.error("[UserDAO:updateUnlockedAchievements(uuid,unlockedAchievements)] SQLException occurred"); + e.printStackTrace(); + return false; + } + + return true; + } + + public static boolean updateShownAchievement(UUID uuid, String achievement) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE `users` SET `shownAchievement`=? WHERE `uuid`=?;")) { + statement.setString(1, achievement); + statement.setString(2, uuid.toString()); + statement.execute(); + } + } catch (SQLException e) { + Core.error("[UserDAO:updateShownAchievement(uuid,achievement)] SQLException occurred"); + e.printStackTrace(); + return false; + } + + return true; + } + + /** + * Note: This defaults to lookup the serverKey based on the serverKey of the "DEFAULT" rank. + * + * @deprecated - Please see {@link #getRank(Connection, String, UUID)} for how to get a user rank properly. This exists for compatibility purposes only. + */ + @Deprecated + public static UserRank fetchUserRank(UUID uuid) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + return getRank(connection, UserRank.DEFAULT.getServerKey(), uuid); + } catch (SQLException e) { + Core.error("[UserDAO:fetchUserRank(uuid)] SQLException occurred"); + e.printStackTrace(); + return UserRank.DEFAULT; + } + } + + public static int countUsers() { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("SELECT COUNT(1) AS rowcount FROM `users`;")) { + try (ResultSet result = statement.executeQuery()) { + if (result.next()) + return result.getInt("rowcount"); + } + } + } catch (SQLException e) { + Core.error("[UserDAO:countUsers()] SQLException occurred"); + e.printStackTrace(); + return 0; + } + + return 0; + } + + public static boolean isLastMonthsVoteWinner(String name) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("SELECT * FROM `last_months_voters` WHERE `name`=?;")) { + statement.setString(1, name); + try (ResultSet result = statement.executeQuery()) { + return result.next(); + } + } + } catch (SQLException e) { + Core.error("[UserDAO:isLastMonthsVoteWinner(name)] SQLException occurred"); + e.printStackTrace(); + return false; + } + } + + /** + * @deprecated - Please see {@link #saveRank(Connection, String, UUID, UserRank)} for how to save a user rank properly. This exists for compatibility purposes only. + */ + @Deprecated + public static boolean updateRankByName(String name, UserRank rank) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + + UUID uuid = getUuidByName(name); + if (uuid != null){ + return saveRank(connection, rank.getServerKey(), uuid, rank); + } + } catch (SQLException e) { + Core.error("[UserDAO:updateRankByName(name,rank)] SQLException occurred"); + e.printStackTrace(); + } + + return false; + } + + /** + * @deprecated - Please see {@link #saveRank(Connection, String, UUID, UserRank)} for how to save a user rank properly. This exists for compatibility purposes only. + */ + @Deprecated + public static boolean updateRankByNameAndRank(String name, UserRank from, UserRank to) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + + UUID uuid = getUuidByName(name); + if (uuid != null){ + // Note: This might not be the correct way of implementation for new system + return saveRank(connection, to.getServerKey(), uuid, to); + } + } catch (SQLException e) { + Core.error("[UserDAO:updateRankByNameAndRank(name,from,to)] SQLException occurred"); + e.printStackTrace(); + return false; + } + + return true; + } + + public static boolean isUserBanned(String uuid) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("SELECT * FROM `BAT_ban` WHERE `UUID`=?;")) { + statement.setString(1, uuid); + try (ResultSet result = statement.executeQuery()) { + return result.next() && result.getBoolean("ban_state"); + } + } + } catch (SQLException e) { + Core.error("[UserDAO:isUserBanned(uuid)] SQLException occurred"); + e.printStackTrace(); + return false; + } + } + + /** + * @deprecated due to database table changes, and therefore this method may not work. This method may not even be used. + */ + @Deprecated + public static boolean reset(String name) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE `users` SET `tokens`=0,`bucks`=0,`votes`=0,`voteStreak`=0,`lastVoteStreak`=0,`dailyStreak`=0,`lastDailyReward`=0,`lastDonorReward`=0 WHERE `lastname`=?;")) { + statement.setString(1, name); + statement.execute(); + } + } catch (SQLException e) { + Core.error("[UserDAO:reset(name)] SQLException occurred"); + e.printStackTrace(); + return false; + } + + return true; + } + + /** + * Get the UUID of a user based off their name. + * + * @param conn - the database connection thread + * @param name - the name of the user + * + * @return The UUID that was found for the given name, + * if more than one record exists, we return the first instance, + * and log an error message. If none are found, we return null. + */ + public static UUID getUUID(Connection conn, String name) { + + String query = "SELECT HEX(uuid) AS uuid FROM user WHERE name=?"; + UUID uuid = null; + + try (PreparedStatement ps = conn.prepareStatement(query)) { + ps.setString(1, name); + + try (ResultSet result = ps.executeQuery()) { + if (result.next()) { + + // change from HEX into UUID object + uuid = UUIDUtil.createUUID(result.getString("uuid")).orElse(null); + + // safe check to see if there's more than one result + if (result.next()) { + Core.error("[UserDAO:getUuidByName(name)] There exists more than one user with the name: " + name); + } + } + } + } + catch (SQLException e) { + Core.error("[UserDAO:getUuidByName(name)] SQLException occurred"); + e.printStackTrace(); + } + + return uuid; + } + + /** + * Get the UUID of a user based off their name. + * + * @param name - the name of the user + * + * @return The UUID that was found for the given name, + * if more than one record exists, we return the first instance, + * and log an error message. If none are found, we return null. + * @deprecated - Please use {@link #getUUID(Connection, String)} instead. + */ + @Deprecated + public static UUID getUuidByName(String name) { + + try (Connection conn = BaseDatabase.getInstance().getConnection()) { + return getUUID(conn, name); + } + catch (SQLException e) { + Core.error("[UserDAO:getUuidByName(name)] SQLException occurred"); + e.printStackTrace(); + } + + return null; + } + + /** + * Get the name of the user with the specified uuid. + * + * @param conn - the database connection thread + * @param uuid - the uuid of the user to get the name of + * + * @return The string representation of the name for the user with the given uuid. + */ + public static String getName(Connection conn, UUID uuid) { + + String query = "SELECT name FROM user WHERE uuid=UNHEX('" + uuid.toString().replaceAll("-", "") + "')"; + + try (ResultSet result = conn.createStatement().executeQuery(query)) { + if (result.next()) { + String username = result.getString(1); + return username; + } + } + catch (SQLException e) { + Core.error("[UserDAO:getNameByUuid(uuid)] SQLException occurred"); + e.printStackTrace(); + } + + return null; + } + + /** + * Get the name of the user with the specified uuid. + * + * @param uuid - the uuid of the user to get the name of + * + * @return The string representation of the name for the user with the given uuid. + * @deprecated - Please use {@link #getName(Connection, UUID)} instead. + */ + @Deprecated + public static String getNameByUuid(UUID uuid) { + + String query = "SELECT name FROM user WHERE uuid=UNHEX('" + uuid.toString().replaceAll("-", "") + "')"; + + try (Connection conn = BaseDatabase.getInstance().getConnection()) { + return getName(conn, uuid); + } + catch (SQLException e) { + Core.error("[UserDAO:getNameByUuid(uuid)] SQLException occurred"); + e.printStackTrace(); + } + + return null; + } + + public static boolean deleteFromByName(String name, String table) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("DELETE FROM `" + table + "` WHERE `name`=?;")) { + statement.setString(1, name); + statement.execute(); + } + } catch (SQLException e) { + Core.error("[UserDAO:deleteFromByName(name,table)] SQLException occurred"); + e.printStackTrace(); + return false; + } + + return true; + } + + public static boolean updateCountry(UUID uuid, String country) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE users SET `country`=? WHERE `uuid`=?;")) { + statement.setString(1, country); + statement.setString(2, uuid.toString()); + statement.execute(); + } + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + + return true; + } + + public static boolean updateUserLocation(UUID uuid, CoreLocation location) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("INSERT INTO user_location " + + "(uuid, country, city, country_code, isp, latitude, longitude, region, region_name, timezone, zip) " + + "VALUES " + + "(UNHEX(?), ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) " + + "ON DUPLICATE KEY UPDATE " + + "country = ?, " + + "city = ?, " + + "country_code = ?, " + + "isp = ?, " + + "latitude = ?, " + + "longitude = ?, " + + "region = ?, " + + "region_name = ?, " + + "timezone = ?, " + + "zip = ?" + + ";") + ) { + statement.setString(1, uuid.toString().replaceAll("-", "")); + statement.setString(2, trimToSize(location.getCountry(), 16)); + statement.setString(3, trimToSize(location.getCity(), 16)); + statement.setString(4, trimToSize(location.getCountryCode(), 6)); + statement.setString(5, trimToSize(location.getIsp(), 16)); + statement.setString(6, trimToSize(location.getLat(), 10)); + statement.setString(7, trimToSize(location.getLon(), 10)); + statement.setString(8, trimToSize(location.getRegion(), 8)); + statement.setString(9, trimToSize(location.getRegionName(), 16)); + statement.setString(10, trimToSize(location.getTimezone(), 16)); + statement.setString(11, trimToSize(location.getZip(), 10)); + statement.setString(12, trimToSize(location.getCountry(), 16)); + statement.setString(13, trimToSize(location.getCity(), 16)); + statement.setString(14, trimToSize(location.getCountryCode(), 5)); + statement.setString(15, trimToSize(location.getIsp(), 16)); + statement.setString(16, trimToSize(location.getLat(), 10)); + statement.setString(17, trimToSize(location.getLon(), 10)); + statement.setString(18, trimToSize(location.getRegion(), 8)); + statement.setString(19, trimToSize(location.getRegionName(), 16)); + statement.setString(20, trimToSize(location.getTimezone(), 16)); + statement.setString(21, trimToSize(location.getZip(), 10)); + + statement.execute(); + } + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + + return true; + } + + public static CoreLocation getUserLocation(UUID uuid) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("SELECT * FROM user_location WHERE uuid=UNHEX(?);")) { + statement.setString(1, uuid.toString().replaceAll("-", "")); + + try (ResultSet result = statement.executeQuery()) { + if (result.next()) { + CoreLocation location = new CoreLocation(); + location.setCountry(result.getString("country")); + location.setCountry(result.getString("city")); + location.setCountry(result.getString("country_code")); + location.setCountry(result.getString("isp")); + location.setCountry(result.getString("latitude")); + location.setCountry(result.getString("longitude")); + location.setCountry(result.getString("region")); + location.setCountry(result.getString("region_name")); + location.setCountry(result.getString("timezone")); + location.setCountry(result.getString("zip")); + } + } + } + } catch (SQLException e) { + e.printStackTrace(); + } + + return null; + } + + private static String trimToSize(String input, int size) { + if (input.length() <= size) return input; + return input.substring(0, size); + } + + public static boolean updateLanguage(UUID uuid, String language) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE users SET `language`=? WHERE `uuid`=?;")) { + statement.setString(1, language); + statement.setString(2, uuid.toString()); + statement.execute(); + } + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + + return true; + } + + public static String[] getCountryAndLanguage(UUID uuid) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("SELECT `country`,`language` FROM users WHERE `uuid`=?;")) { + statement.setString(1, uuid.toString()); + try (ResultSet result = statement.executeQuery()) { + if(result.next()) { + return new String[]{result.getString("country"), result.getString("language")}; + } + } + } + } catch (SQLException e) { + e.printStackTrace(); + } + + return null; + } + + /** + * Get the rank of the specified user on the given server_key. + * + * @param conn - the database connection thread + * @param serverKey - the server key + * @param uuid - the uuid of the user to get the rank for + * + * @return The rank of the user, if they have a rank, otherwise {@code null}. + */ + public static UserRank getRank(Connection conn, String serverKey, UUID uuid){ + + String query = "SELECT rank FROM user_profile WHERE uuid=UNHEX(?) AND server_key=?;"; + + try (PreparedStatement ps = conn.prepareStatement(query)){ + ps.setString(1, uuid.toString().replaceAll("-", "")); + ps.setString(2, serverKey); + + try (ResultSet result = ps.executeQuery()){ + if (result.next()){ + return UserRank.getUserRankOrNull(result.getString("rank")); + } + } + } + catch (SQLException exc) { + Core.log("[UserDAO] Error attempting to getRank() for serverKey=" + serverKey + ", uuid=" + uuid.toString()); + exc.printStackTrace(); + } + + return null; + } + + /** + * Get the highest rank we know about for this user on the global or server specific scale. + * <p> + * Note: This exists purely as a helper method and only should + * be suitable for if you read the method implementation. This + * makes two calls to getRank() with "GLOBAL" and the SERVERKEY + * of this plugin to determine which is higher. + * </p> + * + * @param conn - the database connection thread + * @param uuid - the uuid of the user + * + * @return The highest rank, if any were found, for the specified user uuid. + */ + public static UserRank getHighestRank(Connection conn, UUID uuid){ + + UserRank globalRank = getRank(conn, "GLOBAL", uuid); + UserRank localRank = getRank(conn, Core.name().toUpperCase(), uuid); + + UserRank highest = null; + + // init highest if we can + if (globalRank != null){ + highest = globalRank; + } + + // if local rank found + if (localRank != null){ + // if no highest yet, this is default highest + if (highest == null || localRank.isHigherThan(highest)){ + highest = localRank; + } + } + + return highest; + } + + /** + * Updates the rank of the user uuid in the database for the specified serverKey. + * <p> + * Note: The user rank must already exist for this to happen. + * </p> + * + * @param conn - the database connection thread + * @param serverKey - the server key + * @param uuid - the uuid of the user to save the rank for + * @param rank - the rank to save + * + * @return {@code true} if the query ran, {@code false} otherwise. + */ + public static boolean saveRank(Connection conn, String serverKey, UUID uuid, UserRank rank){ + + //String query = "UPDATE user_profile SET rank=? WHERE uuid=UNHEX(?) AND server_key=?;"; + String query = "INSERT IGNORE INTO user_profile (uuid, server_key, rank) VALUES (UNHEX(?), ?, ?) ON DUPLICATE KEY UPDATE rank=VALUES(rank);"; + + try (PreparedStatement ps = conn.prepareStatement(query)){ + ps.setString(1, uuid.toString().replaceAll("-", "")); + ps.setString(2, serverKey); + ps.setString(3, rank.getName()); + + ps.executeUpdate(); + return true; + } + catch (SQLException exc) { + Core.log("[UserDAO] Error attempting to saveRank() for serverKey=" + serverKey + ", uuid=" + uuid.toString() + ", rank=" + rank.getName()); + exc.printStackTrace(); + return false; + } + } + + /** + * Creates a new entry in the user_profile table for a user with the specified rank on the specified server key. + * + * @param conn - the database connection thread + * @param serverKey - the key of the server + * @param uuid - the uuid of the user + * @param rank - the rank for that user + * + * @return {@code true} if the create query ran, {@code false} otherwise. + */ + public static boolean createRank(Connection conn, String serverKey, UUID uuid, UserRank rank){ + + // if ANY rank exists already + boolean rankExists = false; + + String existQuery = "SELECT rank FROM user_profile WHERE uuid=UNHEX(?) AND server_key=?"; + try (PreparedStatement ps = conn.prepareStatement(existQuery)){ + ps.setString(1, uuid.toString().replaceAll("-", "")); + ps.setString(2, serverKey); + + try (ResultSet result = ps.executeQuery()){ + if (result.next()){ + UserRank ur = UserRank.getUserRankOrNull(result.getString("rank")); + if (ur != null){ + rankExists = true; + } + } + } + } + catch (SQLException exc) { + Core.log("[UserDAO] Error attempting to createRank(EXISTS) for serverKey=" + serverKey + ", uuid=" + uuid.toString() + ", rank=" + rank.getName()); + exc.printStackTrace(); + return false; + } + + // if it doesn't exist in db yet + if (!rankExists){ + + String query = "INSERT INTO user_profile (uuid, server_key, rank) VALUES (UNHEX(?), ?, ?);"; + + try (PreparedStatement ps = conn.prepareStatement(query)){ + ps.setString(1, uuid.toString().replaceAll("-", "")); + ps.setString(2, serverKey); + ps.setString(3, rank.getName()); + + ps.executeUpdate(); + return true; + } + catch (SQLException exc) { + Core.log("[UserDAO] Error attempting to createRank(CREATE) for serverKey=" + serverKey + ", uuid=" + uuid.toString() + ", rank=" + rank.getName()); + exc.printStackTrace(); + return false; + } + } + + return false; + } + + /** + * Deletes a rank entry for the specified user, on the specified server key, with the specified rank. + * <p> + * If they do not have the given rank on the specific server key, nothing will happen. + * </p> + * + * @param conn - the database connection thread + * @param serverKey - the key of the server + * @param uuid - the uuid of the user + * @param rank - the rank for that user + * + * @return {@code true} if the create query ran, {@code false} otherwise. + */ + public static boolean deleteRank(Connection conn, String serverKey, UUID uuid, UserRank rank){ + + String query = "DELETE FROM user_profile WHERE uuid=UNHEX(?) AND server_key=? AND rank=?;"; + + try (PreparedStatement ps = conn.prepareStatement(query)){ + ps.setString(1, uuid.toString().replaceAll("-", "")); + ps.setString(2, serverKey); + ps.setString(3, rank.getName()); + + ps.executeUpdate(); + return true; + } + catch (SQLException exc) { + Core.log("[UserDAO] Error attempting to deleteRank() for serverKey=" + serverKey + ", uuid=" + uuid.toString() + ", rank=" + rank.getName()); + exc.printStackTrace(); + return false; + } + } + + /** + * Get the trial rank for the specified user. + * + * @param conn - the database connection thread + * @param serverKey - the server key lookup + * @param uuid - the uuid of the user to lookup + * + * @return The pair that represents their trial rank, and when it expires, if one exists. + */ + public static Pair<UserRank, Timestamp> getTrialRank(Connection conn, String serverKey, UUID uuid){ + + String query = "SELECT rank, expire_at FROM user_trial_rank WHERE uuid=UNHEX(?) AND server_key=?;"; + + try (PreparedStatement ps = conn.prepareStatement(query)){ + ps.setString(1, uuid.toString().replaceAll("-", "")); + ps.setString(2, serverKey); + + try (ResultSet result = ps.executeQuery()){ + if (result.next()){ + UserRank trialRank = UserRank.getUserRankOrNull(result.getString("rank")); + if (trialRank != null){ + Timestamp expireAt = result.getTimestamp("expire_at"); + return Pair.of(trialRank, expireAt); + } + } + } + } + catch (SQLException exc) { + Core.log("[UserDAO] Error attempting to getTrialRank() for serverKey=" + serverKey + ", uuid=" + uuid.toString()); + exc.printStackTrace(); + } + + return null; + } + + public static void saveTrialRank(Connection conn, String serverKey, UUID uuid, UserRank trialRank, Timestamp expireAt){ + + // TODO is this even needed? + } + + /** + * Creates a trial rank record in the database for the specified user/serverKey combo. + * <p> + * Note: This query will fail if the user already has a trial rank in the database for that serverKey. + * </p> + * + * @param conn - the database connection thread + * @param serverKey - the server key to update + * @param uuid - the uuid of the user + * @param trialRank - the trial rank they have + * @param expireAt - when the rank expires + * + * @return {@code true} if the trial rank query ran, {@code false} otherwise. + */ + public static boolean createTrialRank(Connection conn, String serverKey, UUID uuid, UserRank trialRank, Timestamp expireAt){ + + String query = "INSERT INTO user_trial_rank (uuid, server_key, rank, expire_at) VALUES (UNHEX(?), ?, ?, ?);"; + + try (PreparedStatement ps = conn.prepareStatement(query)){ + ps.setString(1, uuid.toString().replaceAll("-", "")); + ps.setString(2, serverKey); + ps.setString(3, trialRank.getName()); + ps.setTimestamp(4, expireAt); + + ps.executeUpdate(); + return true; + } + catch (SQLException exc) { + Core.log("[UserDAO] Error attempting to createTrialRank() for serverKey=" + serverKey + ", uuid=" + uuid.toString() + ", trialRank=" + trialRank.getName() + ", expireAt=" + expireAt); + exc.printStackTrace(); + return false; + } + } + + /** + * Removes the trial rank for the specified uuid on the server key. + * + * @param conn - the database connection thread + * @param serverKey - the server key to delete it for + * @param uuid - the uuid of the user to remove + * + * @return {@code true} if the query ran, {@code false} otherwise. + */ + public static boolean removeTrialRank(Connection conn, String serverKey, UUID uuid){ + + String query = "DELETE FROM user_trial_rank WHERE uuid=UNHEX(?) AND server_key=?;"; + + try (PreparedStatement ps = conn.prepareStatement(query)){ + ps.setString(1, uuid.toString().replaceAll("-", "")); + ps.setString(2, serverKey); + + ps.executeUpdate(); + return true; + } + catch (SQLException exc) { + Core.log("[UserDAO] Error attempting to removeTrialRank() for serverKey=" + serverKey + ", uuid=" + uuid.toString()); + exc.printStackTrace(); + return false; + } + } + + /** + * Remove all expired trial ranks from the "user_trial_rank" table. + * <p> + * Note: This is a costly query if there are a lot of trial ranks, so we should run this periodically. + * </p> + * + * @param conn - the database connection thread + * + * @return {@code true} if the query ran, {@code false} otherwise. + */ + public static boolean removeAllExpiredTrialRanks(Connection conn){ + + String query = "DELETE FROM user_trial_rank WHERE expire_at < NOW();"; + + try (PreparedStatement ps = conn.prepareStatement(query)){ + ps.executeUpdate(); + return true; + } + catch (SQLException exc) { + Core.log("[UserDAO] Error attempting to removeAllExpiredTrialRanks()"); + exc.printStackTrace(); + return false; + } + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/users/UserManager.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/users/UserManager.java new file mode 100644 index 0000000..c15e24e --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/users/UserManager.java @@ -0,0 +1,194 @@ +package net.grandtheftmc.core.users; + +import java.util.Collection; +import java.util.Collections; +import java.util.Map; +import java.util.Optional; +import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; + +import net.grandtheftmc.core.Core; + +public class UserManager { + + /** Singleton of this class */ + private static UserManager instance; + /** Mapping of uuid to user objects */ + private final Map<UUID, User> users = new ConcurrentHashMap<>(); + + /** + * Private constructor since singletons cannot be initialized + */ + private UserManager() { + } + + /** + * Gets the instance of the singleton. + * + * @return The singleton of this class. + */ + public static UserManager getInstance() { + if (instance == null) { + instance = new UserManager(); + } + + return instance; + } + + /** + * Add a new user to the container. + * + * @param user - the user to add + * + * @return {@code true} if the user was successfully added, {@code false} if + * the user already exists. + */ + public boolean addUser(User user) { + if (!users.containsKey(user.getUUID())) { + // TODO debug remove + Core.log("[UserManager] Adding new user to UserManager, uuid=" + user.getUUID() + ", name=" + user.getName()); + users.put(user.getUUID(), user); + return true; + } + + return false; + } + + /** + * Get whether or not the container has a user with the specified uuid. + * + * @param uuid - the uuid to lookup + * + * @return {@code true} if the user exists already in the container, + * {@code false} otherwise. + */ + public boolean hasUser(UUID uuid) { + if (users.containsKey(uuid)) { + return true; + } + + return false; + } + + /** + * Get whether or not the container has a user with the specified name. + * + * @param name - the name to lookup + * + * @return {@code true} if the user exists already in the container, + * {@code false} otherwise. + */ + public boolean hasUser(String name) { + + for (User user : users.values()) { + if (user.getName().equalsIgnoreCase(name)) { + return true; + } + } + + return false; + } + + /** + * Get the user with the specified uuid from the container. + * + * @param uuid - the uuid to lookup + * + * @return The user with the specified uuid, if one exists, otherwise empty. + */ + public Optional<User> getUser(UUID uuid) { + if (users.containsKey(uuid)) { + return Optional.of(users.get(uuid)); + } + + return Optional.empty(); + } + + /** + * Get the user with the specified name from the container. + * + * @param name - the name to lookup + * + * @return The user with the specified name, if one exists, otherwise empty. + */ + public Optional<User> getUser(String name) { + for (User user : users.values()) { + if (user.getName().equalsIgnoreCase(name)) { + return Optional.of(user); + } + } + + return Optional.empty(); + } + + /** + * Removes the user with the specified uuid. + * + * @param uuid - the uuid of the user to remove + * + * @return The user that was removed, if one was found, otherwise empty. + */ + public Optional<User> removeUser(UUID uuid) { + if (users.containsKey(uuid)) { + // TODO debug remove + Core.log("[UserManager] Removing user from UserManager, uuid=" + uuid.toString()); + return Optional.of(users.remove(uuid)); + } + + return Optional.empty(); + } + + /** + * Removes the user with the specified name. + * + * @param name - the name of the user to remove + * + * @return The user that was removed, if one was found, otherwise empty. + */ + public Optional<User> removeUser(String name) { + + // lookup user + User user = getUser(name).orElse(null); + + if (user != null) { + if (users.containsKey(user.getUUID())) { + return Optional.of(users.remove(user.getUUID())); + } + } + + return Optional.empty(); + } + + /** + * Get all users in this container. + * + * @return {@link Collection} of {@link User}s inside this container. + */ + public Collection<User> getUsers() { + return Collections.unmodifiableCollection(users.values()); + } + + /** + * A wrapper around {@link Map#size()}. + * + * @return The size of the collection that contains the users. + */ + public int size() { + return users.size(); + } + + /** + * Get the user from this manager. + * + * @param uuid - the uuid of the user to lookup + * + * @return The user from this manager, if one is found. + * + * @deprecated - Please use {@link #getUser(UUID)}} instead as the result + * can be {@code null} + */ + @Deprecated + public User getLoadedUser(UUID uuid) { + return getUser(uuid).orElse(null); + } +} \ No newline at end of file diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/users/UserRank.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/users/UserRank.java new file mode 100644 index 0000000..7432b42 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/users/UserRank.java @@ -0,0 +1,315 @@ +package net.grandtheftmc.core.users; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.util.Utils; +import org.bukkit.Material; + +import java.util.Objects; + +public enum UserRank { + + DEFAULT("&8", "DEFAULT"), VIP("&6", "VIP"), PREMIUM("&a", "PREMIUM"), ELITE("&b", "ELITE"), SPONSOR("&5", "SPONSOR"), SUPREME("&c", "SUPREME"), YOUTUBER("&r", "YOUTUBER"), + BUILDTEAM("&3","BUILDTEAM"), HELPOP("&d", "HELPER"), MOD("&9", "MOD"), SRMOD("&9", "SRMOD"), BUILDER("&f", "BUILDER"), ADMIN("&c", "ADMIN"), DEV("&9", "DEV"), MANAGER("&4", "MANAGER"), OWNER("&4", "OWNER"); + + private final String color; + private final String displayName; + /** The server_key that this rank is for */ + private String serverKey; + + UserRank(String color, String displayName) { + this.color = color; + this.displayName = displayName; + } + + public static UserRank[] getUserRanks() { + return UserRank.class.getEnumConstants(); + } + + public static UserRank getUserRank(String name) { + if (name == null) + return UserRank.DEFAULT; + for (UserRank ur : getUserRanks()) + if (ur.getName().equalsIgnoreCase(name)) + return ur; + return UserRank.DEFAULT; + } + + public static UserRank getUserRankOrNull(String name) { + if (name == null) + return null; + for (UserRank ur : getUserRanks()) + if (ur.getName().equalsIgnoreCase(name)) + return ur; + return null; + } + + public static UserRank getUserRankExact(String name) { + if (name == null) + return null; + for (UserRank ur : getUserRanks()) + if (ur.getName().equalsIgnoreCase(name)) + return ur; + return null; + } + + public static UserRank getUserRank(Material type) { + if (type == null) + return null; + for (UserRank ur : getUserRanks()) + if (ur.getMaterial() == type) + return ur; + return null; + } + + public static UserRank[] getDonorRanks() { + return new UserRank[]{VIP, PREMIUM, ELITE, SPONSOR, SUPREME}; + } + + public String getName() { + return this.toString(); + } + + public String getColor() { + return this.color; + } + + public String getDisplayName(){ + return this.displayName; + } + + public String getColoredName() { + return Utils.f(this == UserRank.YOUTUBER ? "&rYOU&4TUBER" : this.color + this.getDisplayName()); + } + + public String getColoredNameBold() { + return Utils.f(this == UserRank.YOUTUBER ? "&r&lYOU&4&lTUBER" : this.color + "&l" + this.getDisplayName()); + } + + public String getTabPrefix() { + return Utils.f(this == UserRank.YOUTUBER ? "&r&lY&4&lT" : (this == UserRank.BUILDTEAM ? "&3&lBT" : this.color + "&l" + this.getDisplayName())); + } + + public String getPrefix() { + if (!Objects.equals(this.getName(), "DEFAULT")) + return Utils.f(' ' + this.getColoredNameBold() + "&8&l>"); + return ""; + } + + public UserRank getNext() { + boolean picknext = false; + for (UserRank u : getUserRanks()) { + if (picknext) + return u; + if (Objects.equals(u.getName(), this.getName())) + picknext = true; + } + return UserRank.DEFAULT; + } + + public boolean isHigherThan(UserRank rank) { + for (UserRank r : getUserRanks()) + if (r == this) + return false; + else if (r == rank) + return true; + return false; + + } + + public boolean hasRank(UserRank rank) { + return this.ordinal() >= rank.ordinal(); + } + + public double getBucksModifier() { + switch (this) { + case DEFAULT: + return 1; + case VIP: + return 1.5; + case PREMIUM: + return 2; + case ELITE: + return 2.5; + case SPONSOR: + return 3; + case SUPREME: + return 4; + default: + return 4; + } + } + + public int getNumberOfHomes(){ + switch (this) { + case DEFAULT: + return 1; + case VIP: + return 2; + case PREMIUM: + return 4; + case ELITE: + return 7; + case SPONSOR: + return 12; + case SUPREME: + return 20; + default: + return 20; + } + } + + public int getHomeTPCooldown(){ + switch (this) { + case DEFAULT: + return 10; + case VIP: + return 9; + case PREMIUM: + return 8; + case ELITE: + return 7; + case SPONSOR: + return 6; + case SUPREME: + return 5; + default: + return 5; + } + } + + public int getPrice() { + switch (this) { + case VIP: + return 10; + case PREMIUM: + return 25; + case ELITE: + return 50; + case SPONSOR: + return 100; + case SUPREME: + return 200; + default: + return -1; + } + } + + public Material getMaterial() { + switch (this) { + case DEFAULT: + return Material.IRON_INGOT; + case VIP: + return Material.GOLD_INGOT; + case PREMIUM: + return Material.EMERALD; + case ELITE: + return Material.DIAMOND; + case SPONSOR: + return Material.NETHER_BRICK_ITEM; + default: + return Material.CLAY_BRICK; + } + } + + public int getBackpackRows() { + switch (this) { + case DEFAULT: + return 2; + case VIP: + return 3; + case PREMIUM: + return 5; + case ELITE: + return 7; + case SPONSOR: + return 9; + default: + return 11; + } + } + + public int getCompassRadius() { + switch (this) { + case DEFAULT: + case VIP: + return 30; + case PREMIUM: + return 25; + case ELITE: + return 20; + case SPONSOR: + return 15; + default: + return 10; + } + } + + public int getMonthlyTokens() { + switch (this) { + case DEFAULT: + return 0; + case VIP: + return 100; + case PREMIUM: + return 250; + case ELITE: + return 500; + case SPONSOR: + return 1000; + default: + return 2000; + + } + } + + public int getPetRespawnDelay() { + switch (this) { + case DEFAULT: + return 900; + case VIP: + return 720; + case PREMIUM: + return 600; + case ELITE: + return 480; + case SPONSOR: + return 360; + default: + return 300; + } + } + + /** + * Get the server key that this rank is for. + * <p> + * Note: This must be set by the plugin or project for each rank. + * </p> + * + * @return If a rank is a global one, "GLOBAL" is returned, or if it's a + * per server rank, the server will be returned, i.e. "GTM1". + */ + public String getServerKey() { + + // if not set, assume per server + if (serverKey == null || serverKey.isEmpty()){ + return Core.name().toUpperCase(); + } + + return serverKey; + } + + /** + * Set the server key that this rank is for. + * <p> + * Note: This must be set by the plugin or project for each rank. + * </p> + * If a rank is a global rank, set this as "GLOBAL". If a rank is per server, set this as the name of the server, "GTM1". + * + * @param serverKey - the server key for this rank + */ + public void setServerKey(String serverKey) { + this.serverKey = serverKey; + } + + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/users/eventtag/EventTag.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/users/eventtag/EventTag.java new file mode 100644 index 0000000..6420ea5 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/users/eventtag/EventTag.java @@ -0,0 +1,47 @@ +package net.grandtheftmc.core.users.eventtag; + +import org.bukkit.ChatColor; + +/** + * Created by Timothy Lampen on 2017-12-16. + */ +public enum EventTag {//the names must have same characters in the same arrangement of the enum type. + FESTIVE("&b&lFestive", false), + XMAS("&2&lXMAS", false), + SNOWMAN("&r&lSnowman", false), + SANTA("&c&lSanta", false), + HOHOHO("&c&lH&2&lo&c&lH&2&lo&c&lH&2&lo", false), + NICE("&a&lNice", false), + NAUGHTY("&c&lNaughty", false), + HEART("&d&l❤❤❤", false), + SEXY("&d&lSexy", false), + STEAMY("&d&lSteamy", false), + HOT("&d&lHot", false), + DADDY("&5&lDaddy", false), + EGG("&c&lE&6&lG&e&lG", false); + + private final String disp; + private final boolean global; + EventTag(String disp, boolean global) { + this.global = global; + this.disp = ChatColor.translateAlternateColorCodes('&', disp); + } + + public String getBoldName() { + return this.disp; + } + + public boolean isGlobal() { + return global; + } + + public static EventTag getEventTagFromName(String name){ + name = ChatColor.stripColor(name); + + if(name.contains("❤❤❤"))//hard coded because it uses UTF-8 characters. + return EventTag.HEART; + + name = name.toUpperCase(); + return EventTag.valueOf(name); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/users/eventtag/EventTagDAO.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/users/eventtag/EventTagDAO.java new file mode 100644 index 0000000..6006740 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/users/eventtag/EventTagDAO.java @@ -0,0 +1,128 @@ +package net.grandtheftmc.core.users.eventtag; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.HashMap; + +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitRunnable; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.database.BaseDatabase; +import net.grandtheftmc.core.nametags.NametagManager; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserManager; +import net.grandtheftmc.core.util.ServerUtil; + +/** + * Created by Timothy Lampen on 1/7/2018. + */ +public class EventTagDAO { + + private static final HashMap<EventTag, TagVisibility> VISIBILITY = new HashMap<>(); + + /* + * Everything is static to maintain the pattern of DAO classes. + * Caches the results from the mysql for 15min, then updates. + */ + static { + new BukkitRunnable() { + @Override + public void run() { + refreshTagVisiblity(); + } + }.runTaskTimerAsynchronously(Core.getInstance(), 0, 20 * 60 * 15); + } + + /** + * @param tag - the tag that is being checked for visiblity + * @return the visibility of the tag according to the cached results. + */ + public static TagVisibility getTagVisibility(EventTag tag) { + if (VISIBILITY.containsKey(tag)) + return VISIBILITY.get(tag); + + //the tag was added to the plugin, but not to the actual database, so update the database with an entry. + ServerUtil.runTaskAsync(() -> { + addTagToDatabase(tag);//finally add it. + }); + return TagVisibility.EVERYONE; + } + + public static void setVisibility(EventTag tag, TagVisibility visibility) { + String query = "UPDATE tag_visibility set visibility = ? WHERE tag = ?"; + try (Connection c = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = c.prepareStatement(query)) { + statement.setInt(1, visibility.getID()); + statement.setString(2, tag.toString()); + statement.execute(); + } + } catch (SQLException e) { + e.printStackTrace(); + } + } + + /** + * @param tag - the tag that is not currently in the database but must be added. + */ + private static void addTagToDatabase(EventTag tag) { + String query = "INSERT IGNORE INTO tag_visibility(tag,visibility) VALUES (?,?);"; + try (Connection c = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = c.prepareStatement(query)) { + statement.setString(1, tag.toString()); + statement.setInt(2, TagVisibility.NO_ONE.getID()); + statement.execute(); + } + } catch (SQLException e) { + e.printStackTrace(); + } + } + + /** + * @apiNote refreshes the cache of tag visibility. + */ + public static void refreshTagVisiblity() { + String query = "SELECT * FROM tag_visibility;"; + try (Connection c = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = c.prepareStatement(query)) { + try (ResultSet set = statement.executeQuery()) { + HashMap<EventTag, TagVisibility> copy = new HashMap<>(); + while (set.next()) { + EventTag tag = EventTag.valueOf(set.getString("tag")); + TagVisibility v = TagVisibility.fromID(set.getInt("visibility")); + copy.put(tag, v); + } + + // get back on sync + ServerUtil.runTask(() -> { + VISIBILITY.clear(); + VISIBILITY.putAll(copy); + + // for all players + for (Player player : Bukkit.getOnlinePlayers()) { + + User user = UserManager.getInstance().getUser(player.getUniqueId()).orElse(null); + if (user != null){ + if (user.getEquipedTag() == null) + continue; + if (getTagVisibility(user.getEquipedTag()) == TagVisibility.NO_ONE) { + user.setEquipedTag(null); + user.updateDisplayName(player); + NametagManager.updateNametagsTo(player, user); + NametagManager.updateNametag(player); + player.sendMessage(Lang.REWARDS.f("&cYour current event tag was dequiped because it was disabled.")); + } + } + } + }); + } + } + } catch (SQLException e) { + e.printStackTrace(); + } + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/users/eventtag/PreTagEquipEvent.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/users/eventtag/PreTagEquipEvent.java new file mode 100644 index 0000000..4208b4e --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/users/eventtag/PreTagEquipEvent.java @@ -0,0 +1,45 @@ +package net.grandtheftmc.core.users.eventtag; + +import net.grandtheftmc.core.events.CoreEvent; +import org.bukkit.entity.Player; +import org.bukkit.event.Cancellable; + +public final class PreTagEquipEvent extends CoreEvent implements Cancellable { + + private final Player player; + private final EventTag from, to; + + private boolean cancel; + + /** + * Construct a new Event + */ + public PreTagEquipEvent(Player player, EventTag from, EventTag to) { + super(false); + this.player = player; + this.from = from; + this.to = to; + } + + public Player getPlayer() { + return player; + } + + public EventTag getFrom() { + return from; + } + + public EventTag getTo() { + return to; + } + + @Override + public boolean isCancelled() { + return cancel; + } + + @Override + public void setCancelled(boolean b) { + this.cancel = b; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/users/eventtag/TagVisibility.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/users/eventtag/TagVisibility.java new file mode 100644 index 0000000..b9c1e57 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/users/eventtag/TagVisibility.java @@ -0,0 +1,26 @@ +package net.grandtheftmc.core.users.eventtag; + +/** + * Created by Timothy Lampen on 1/7/2018. + */ +public enum TagVisibility { + EVERYONE(0), + THOSE_WHO_HAVE_IT_UNLOCKED(1), + NO_ONE(2); + + private int id; + TagVisibility(int id) { + this.id = id; + } + + public int getID() { + return this.id; + } + + public static TagVisibility fromID(int id) { + for(TagVisibility v : TagVisibility.values()) + if(v.getID()==id) + return v; + return null; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/users/targets/TrackedEntity.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/users/targets/TrackedEntity.java new file mode 100644 index 0000000..1a53a7a --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/users/targets/TrackedEntity.java @@ -0,0 +1,26 @@ +package net.grandtheftmc.core.users.targets; + +import org.bukkit.Location; +import org.bukkit.entity.Entity; + +/** + * Created by Timothy Lampen on 12/11/2017. + */ +public class TrackedEntity extends TrackedTarget{ + + public final Entity entity; + + public TrackedEntity(Entity entity) { + this.entity = entity; + } + + public TrackedEntity(Entity entity, char pointer) { + super(pointer); + this.entity = entity; + } + + @Override + public Location getLocation() { + return this.entity.getLocation().clone().add(0,1,0); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/users/targets/TrackedLocation.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/users/targets/TrackedLocation.java new file mode 100644 index 0000000..af97713 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/users/targets/TrackedLocation.java @@ -0,0 +1,24 @@ +package net.grandtheftmc.core.users.targets; + +import org.bukkit.Location; + +/** + * Created by Timothy Lampen on 12/11/2017. + */ +public class TrackedLocation extends TrackedTarget { + + private final Location loc; + public TrackedLocation (Location loc, char pointer){ + super(pointer); + this.loc = loc; + } + + public TrackedLocation (Location loc){ + this.loc = loc; + } + + @Override + public Location getLocation() { + return this.loc; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/users/targets/TrackedTarget.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/users/targets/TrackedTarget.java new file mode 100644 index 0000000..bde8a68 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/users/targets/TrackedTarget.java @@ -0,0 +1,23 @@ +package net.grandtheftmc.core.users.targets; + +import org.bukkit.Location; + +/** + * Created by Timothy Lampen on 12/11/2017. + */ +public abstract class TrackedTarget { + private char pointer; + public abstract Location getLocation(); + + public TrackedTarget(char pointer) { + this.pointer = pointer; + } + + public TrackedTarget() { + this.pointer = '▲'; + } + + public char getPointer(){ + return this.pointer; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/AngleUtil.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/AngleUtil.java new file mode 100644 index 0000000..1fe45e5 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/AngleUtil.java @@ -0,0 +1,12 @@ +package net.grandtheftmc.core.util; + +public class AngleUtil { + + public static double getRadianFromDegree(double degree) { + return Math.toRadians(degree); + } + + public static double getDegreesFromRadians(double radian) { + return Math.toDegrees(radian); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/Attribute.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/Attribute.java new file mode 100644 index 0000000..f595b87 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/Attribute.java @@ -0,0 +1,27 @@ +package net.grandtheftmc.core.util; + +/** + * Created by Liam on 27/10/2016. + */ +public enum Attribute { + MAX_HEALTH("generic.maxHealth"), + FOLLOW_RANGE("generic.followRange"), + KNOCKBACK_RESISTANCE("generic.knockbackResistance"), + MOVEMENT_SPEED("generic.movementSpeed"), + ATTACK_DAMAGE("generic.attackDamage"), ARMOR("generic.armor"), + ARMOR_THOUGHNESS("generic.armorToughness"), + ATTACK_SPEED("generic.attackSpeed"), + LUCK("generic.luck"), + JUMP_STRENGTH("horse.jumpStrength"), + SPAWN_REINFORCEMENTS("zombie.spawnReinforcements"); + + private final String name; + + Attribute(String name) { + this.name = name; + } + + public String getName() { + return this.name; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/AttributeModifier.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/AttributeModifier.java new file mode 100644 index 0000000..471bd13 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/AttributeModifier.java @@ -0,0 +1,80 @@ +package net.grandtheftmc.core.util; + +import org.bukkit.Bukkit; + +import java.lang.reflect.InvocationTargetException; +import java.util.UUID; + +public class AttributeModifier +{ + private String attribute; + private String name; + private String slot; + private int operation; + private double amount; + private UUID uuid; + + public AttributeModifier(Attribute attribute, String name, Slot slot, int operation, double amount, UUID uuid) + { + this.attribute = attribute.getName(); + this.name = name; + this.slot = slot.getName(); + this.operation = operation; + this.amount = amount; + this.uuid = uuid; + } + + @Deprecated + public AttributeModifier(String attribute, String name, String slot, int operation, double amount, UUID uuid) + { + this.attribute = attribute; + this.name = name; + this.slot = slot; + this.operation = operation; + this.amount = amount; + this.uuid = uuid; + } + + public AttributeModifier(Object modifier) + { + try + { + this.attribute = (String)modifier.getClass().getMethod("getString", new Class[] { String.class }).invoke(modifier, "AttributeName"); + this.name = (String)modifier.getClass().getMethod("getString", new Class[] { String.class }).invoke(modifier, "Name"); + this.slot = (String)modifier.getClass().getMethod("getString", new Class[] { String.class }).invoke(modifier, "Slot"); + this.operation = (Integer) modifier.getClass().getMethod("getInt", new Class[]{String.class}).invoke(modifier, "Operation"); + this.amount = (Double) modifier.getClass().getMethod("getDouble", new Class[]{String.class}).invoke(modifier, "Amount"); + this.uuid = new UUID((Long) modifier.getClass().getMethod("getLong", new Class[]{String.class}).invoke(modifier, "UUIDMost"), (Long) modifier.getClass().getMethod("getLong", new Class[]{String.class}).invoke(modifier, "UUIDLeast")); + } + catch (IllegalAccessException|IllegalArgumentException|InvocationTargetException|NoSuchMethodException|SecurityException e) + { + Bukkit.getLogger().info("[ItemAttributeAPI] Incompatible server version! Some methods can't be applied."); + } + } + + public Object getNBT() + { + try + { + Object data = ReflectionUtils.getNMSClass("NBTTagCompound").newInstance(); + if (data != null) + { + data.getClass().getMethod("setString", new Class[] { String.class, String.class }).invoke(data, "AttributeName", this.attribute); + data.getClass().getMethod("setString", new Class[] { String.class, String.class }).invoke(data, "Name", this.name); + data.getClass().getMethod("setString", new Class[] { String.class, String.class }).invoke(data, "Slot", this.slot); + data.getClass().getMethod("setInt", new Class[] { String.class, Integer.TYPE }).invoke(data, "Operation", this.operation); + data.getClass().getMethod("setDouble", new Class[] { String.class, Double.TYPE }).invoke(data, "Amount", this.amount); + data.getClass().getMethod("setLong", new Class[] { String.class, Long.TYPE }).invoke(data, "UUIDMost", this.uuid.getMostSignificantBits()); + data.getClass().getMethod("setLong", new Class[] { String.class, Long.TYPE }).invoke(data, "UUIDLeast", this.uuid.getLeastSignificantBits()); + return data; + } + Bukkit.getLogger().info("[ItemAttributeAPI] Incompatible Server version! Missing classes."); + return null; + } + catch (InstantiationException|IllegalAccessException|NoSuchMethodException|SecurityException|IllegalArgumentException|InvocationTargetException e) + { + Bukkit.getLogger().info("[ItemAttributeAPI] Incompatible server version! Some methods can't be applied."); + } + return null; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/C.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/C.java new file mode 100644 index 0000000..a2cf9a2 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/C.java @@ -0,0 +1,42 @@ +package net.grandtheftmc.core.util; + +import java.util.regex.Pattern; + +/** + * Created by Luke Bingham on 25/07/2017. + */ +public class C { + public static final char COLOR_CHAR = '\u00A7'; + + public static final String BOLD = COLOR_CHAR + "l"; + public static final String STRIKE = COLOR_CHAR + "m"; + public static final String UNDERLINE = COLOR_CHAR + "n"; + public static final String MAGIC = COLOR_CHAR + "k"; + public static final String ITALIC = COLOR_CHAR + "o"; + public static final String RESET = COLOR_CHAR + "r"; + + public static final String BLACK = COLOR_CHAR + "0"; + public static final String DARK_BLUE = COLOR_CHAR + "1"; + public static final String DARK_GREEN = COLOR_CHAR + "2"; + public static final String DARK_AQUA = COLOR_CHAR + "3"; + public static final String DARK_RED = COLOR_CHAR + "4"; + public static final String DARK_PURPLE = COLOR_CHAR + "5"; + public static final String GOLD = COLOR_CHAR + "6"; + public static final String GRAY = COLOR_CHAR + "7"; + public static final String DARK_GRAY = COLOR_CHAR + "8"; + public static final String BLUE = COLOR_CHAR + "9"; + public static final String GREEN = COLOR_CHAR + "a"; + public static final String AQUA = COLOR_CHAR + "b"; + public static final String RED = COLOR_CHAR + "c"; + public static final String LIGHT_PURPLE = COLOR_CHAR + "d"; + public static final String YELLOW = COLOR_CHAR + "e"; + public static final String WHITE = COLOR_CHAR + "f"; + + //Key colors + public static final String ERROR = RED, WARNING = YELLOW, INFO = GREEN, SUCCESS = GREEN; + + public static boolean isNumeral(String color) { + Pattern pattern = Pattern.compile("^(" + COLOR_CHAR + ")\\d$"); + return pattern.matcher(color).find(); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/Callback.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/Callback.java new file mode 100644 index 0000000..15f1019 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/Callback.java @@ -0,0 +1,8 @@ +package net.grandtheftmc.core.util; + +/** + * Created by Luke Bingham on 10/07/2017. + */ +public interface Callback<T> { + void call(T obj); +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/Component.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/Component.java new file mode 100644 index 0000000..00adfde --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/Component.java @@ -0,0 +1,41 @@ +package net.grandtheftmc.core.util; + +import org.bukkit.Bukkit; +import org.bukkit.event.Listener; +import org.bukkit.plugin.java.JavaPlugin; + +/** + * Created by Luke Bingham on 04/07/2017. + */ +public interface Component<T, E extends JavaPlugin> extends Listener { + + /** + * This will run when the plugin (E) is enabled. + * + * @param plugin The JavaPlugin + */ + default T onEnable(E plugin) { + return null; + } + + /** + * This will run when the plugin (E) is disabling. + * + * @param plugin The JavaPlugin + */ + default T onDisable(E plugin) { + return null; + } + + default void log(boolean enabled) { + StringBuilder log = new StringBuilder((enabled ? C.GREEN + "Component loaded" : C.RED + "Component disabled") + C.WHITE + ": " + C.YELLOW + getClass().getSimpleName() + C.GRAY); + int classLength = getClass().getSimpleName().length(), max = 30, difference = max - classLength; + for(int i = 0; i < difference; i++) log.append("."); + log.append(disableAble() ? C.GREEN : C.RED).append(String.valueOf(disableAble()).toUpperCase()); + Bukkit.getConsoleSender().sendMessage(log.toString()); + } + + default boolean disableAble() { + return true; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/CoreLocation.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/CoreLocation.java new file mode 100644 index 0000000..8f744b4 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/CoreLocation.java @@ -0,0 +1,155 @@ +package net.grandtheftmc.core.util; + +import com.google.gson.Gson; +import net.buycraft.plugin.internal.okhttp3.OkHttpClient; +import net.buycraft.plugin.internal.okhttp3.Request; +import net.buycraft.plugin.internal.okhttp3.Response; + +import java.io.IOException; +import java.util.Optional; + +public class CoreLocation { + private String region; + private String zip; + private String lon; + private String status; + private String query; + private String isp; + private String countryCode; + private String regionName; + private String as; + private String org; + private String city; + private String country; + private String timezone; + private String lat; + + public String getRegion() { + return region; + } + + public void setRegion(String region) { + this.region = region; + } + + public String getZip() { + return zip; + } + + public void setZip(String zip) { + this.zip = zip; + } + + public String getLon() { + return lon; + } + + public void setLon(String lon) { + this.lon = lon; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getQuery() { + return query; + } + + public void setQuery(String query) { + this.query = query; + } + + public String getIsp() { + return isp; + } + + public void setIsp(String isp) { + this.isp = isp; + } + + public String getCountryCode() { + return countryCode; + } + + public void setCountryCode(String countryCode) { + this.countryCode = countryCode; + } + + public String getRegionName() { + return regionName; + } + + public void setRegionName(String regionName) { + this.regionName = regionName; + } + + public String getAs() { + return as; + } + + public void setAs(String as) { + this.as = as; + } + + public String getOrg() { + return org; + } + + public void setOrg(String org) { + this.org = org; + } + + public String getCity() { + return city; + } + + public void setCity(String city) { + this.city = city; + } + + public String getCountry() { + return country; + } + + public void setCountry(String country) { + this.country = country; + } + + public String getTimezone() { + return timezone; + } + + public void setTimezone(String timezone) { + this.timezone = timezone; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + @Override + public String toString() { + return "ClassPojo [region = " + region + ", zip = " + zip + ", lon = " + lon + ", status = " + status + ", query = " + query + ", isp = " + isp + ", countryCode = " + countryCode + ", regionName = " + regionName + ", as = " + as + ", org = " + org + ", city = " + city + ", country = " + country + ", timezone = " + timezone + ", lat = " + lat + "]"; + } + + public static Optional<CoreLocation> getCountry(String ip) { + //http://ip-api.com/json/151.224.74.1 + OkHttpClient client = new OkHttpClient(); + Request request = new Request.Builder().url("http://ip-api.com/json/" + ip).build(); + try (Response response = client.newCall(request).execute()) { + return Optional.of(new Gson().fromJson(response.body().string(), CoreLocation.class)); + } catch (IOException e) { + e.printStackTrace(); + } + return Optional.empty(); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/DefaultFontInfo.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/DefaultFontInfo.java new file mode 100644 index 0000000..53984ea --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/DefaultFontInfo.java @@ -0,0 +1,129 @@ +package net.grandtheftmc.core.util; + +import java.util.Arrays; +import java.util.Optional; + +public enum DefaultFontInfo { + A_UPPER('A', 5), + A_LOWER('a', 5), + B_UPPER('B', 5), + B_LOWER('b', 5), + C_UPPER('C', 5), + C_LOWER('c', 5), + D_UPPER('D', 5), + D_LOWER('d', 5), + E_UPPER('E', 5), + E_LOWER('e', 5), + F_UPPER('F', 5), + F_LOWER('f', 4), + G_UPPER('G', 5), + G_LOWER('g', 5), + H_UPPER('H', 5), + H_LOWER('h', 5), + I_UPPER('I', 3), + I_LOWER('i', 1), + J_UPPER('J', 5), + J_LOWER('j', 5), + K_UPPER('K', 5), + K_LOWER('k', 4), + L_UPPER('L', 5), + L_LOWER('l', 1), + M_UPPER('M', 5), + M_LOWER('m', 5), + N_UPPER('N', 5), + N_LOWER('n', 5), + O_UPPER('O', 5), + O_LOWER('o', 5), + P_UPPER('P', 5), + P_LOWER('p', 5), + Q_UPPER('Q', 5), + Q_LOWER('q', 5), + R_UPPER('R', 5), + R_LOWER('r', 5), + S_UPPER('S', 5), + S_LOWER('s', 5), + T_UPPER('T', 5), + T_LOWER('t', 4), + U_UPPER('U', 5), + U_LOWER('u', 5), + V_UPPER('V', 5), + V_LOWER('v', 5), + W_UPPER('W', 5), + W_LOWER('w', 5), + X_UPPER('X', 5), + X_LOWER('x', 5), + Y_UPPER('Y', 5), + Y_LOWER('y', 5), + Z_UPPER('Z', 5), + Z_LOWER('z', 5), + NUM_1('1', 5), + NUM_2('2', 5), + NUM_3('3', 5), + NUM_4('4', 5), + NUM_5('5', 5), + NUM_6('6', 5), + NUM_7('7', 5), + NUM_8('8', 5), + NUM_9('9', 5), + NUM_0('0', 5), + EXCLAMATION_POINT('!', 1), + AT_SYMBOL('@', 6), + NUM_SIGN('#', 5), + DOLLAR_SIGN('$', 5), + PERCENT('%', 5), + UP_ARROW('^', 5), + AMPERSAND('&', 5), + ASTERISK('*', 5), + LEFT_PARENTHESIS('(', 4), + RIGHT_PERENTHESIS(')', 4), + MINUS('-', 5), + UNDERSCORE('_', 5), + PLUS_SIGN('+', 5), + EQUALS_SIGN('=', 5), + LEFT_CURL_BRACE('{', 4), + RIGHT_CURL_BRACE('}', 4), + LEFT_BRACKET('[', 3), + RIGHT_BRACKET(']', 3), + COLON(':', 1), + SEMI_COLON(';', 1), + DOUBLE_QUOTE('"', 3), + SINGLE_QUOTE('\'', 1), + LEFT_ARROW('<', 4), + RIGHT_ARROW('>', 4), + QUESTION_MARK('?', 5), + SLASH('/', 5), + BACK_SLASH('\\', 5), + LINE('|', 1), + TILDE('~', 5), + TICK('`', 2), + PERIOD('.', 1), + COMMA(',', 1), + SPACE(' ', 3), + DEFAULT('a', 4); + + private final char character; + private final int length; + + DefaultFontInfo(char character, int length) { + this.character = character; + this.length = length; + } + + public char getCharacter() { + return this.character; + } + + public int getLength() { + return this.length; + } + + public int getBoldLength() { + if (this == SPACE) return this.length; + return this.length + 1; + } + + public static DefaultFontInfo getDefaultFontInfo(char c) { + Optional<DefaultFontInfo> defaultFontInfo = Arrays.stream(values()).filter(d -> d.character == c).findFirst(); + return defaultFontInfo.orElse(DEFAULT); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/EntityUtil.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/EntityUtil.java new file mode 100644 index 0000000..ec0270f --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/EntityUtil.java @@ -0,0 +1,35 @@ +package net.grandtheftmc.core.util; + +import java.util.Arrays; +import java.util.List; + +import org.bukkit.World; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; + +public class EntityUtil { + + private final static List<EntityType> passiveEntitys = Arrays.asList(EntityType.BOAT, EntityType.MINECART, + EntityType.ITEM_FRAME, EntityType.ARMOR_STAND, EntityType.MINECART_CHEST, EntityType.MINECART_COMMAND, + EntityType.MINECART_FURNACE, EntityType.MINECART_HOPPER, EntityType.MINECART_MOB_SPAWNER, + EntityType.MINECART_TNT, EntityType.SHULKER, EntityType.SHULKER_BULLET, EntityType.AREA_EFFECT_CLOUD, + EntityType.DRAGON_FIREBALL, EntityType.FIREBALL, EntityType.FISHING_HOOK, EntityType.LIGHTNING, + EntityType.PRIMED_TNT, EntityType.WEATHER, EntityType.DROPPED_ITEM, EntityType.ARROW, + EntityType.LINGERING_POTION, EntityType.LEASH_HITCH, EntityType.ENDER_PEARL); + + public static Entity getEntityByEntityID(int entityID, World world) { + Entity result = null; + for (Entity en : world.getEntities()) + if (en.getEntityId() == entityID) + result = en; + return result; + } + + public static boolean isPassive(EntityType type) { + return passiveEntitys.contains(type); + } + + public static boolean isPassive(Entity entity) { + return isPassive(entity.getType()); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/HTTPUtil.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/HTTPUtil.java new file mode 100644 index 0000000..1a86fe8 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/HTTPUtil.java @@ -0,0 +1,18 @@ +package net.grandtheftmc.core.util; + +import com.google.gson.Gson; + +/** + * Created by Luke Bingham on 28/08/2017. + */ +public class HTTPUtil { + + private static final Gson GSON = new Gson(); + + /** + * Transform Json text to a class object. + */ + public static <T> T transform(String json, Class<T> clazz) { + return GSON.fromJson(json, clazz); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/IconConverter.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/IconConverter.java new file mode 100644 index 0000000..30e54b7 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/IconConverter.java @@ -0,0 +1,719 @@ +package net.grandtheftmc.core.util; + +import java.util.HashMap; +import java.util.Map; + +public class IconConverter { + + private static final String[] CHARACTER_NAME_LIST; + private static final Map<String, Character> CHARACTER_NAME_MAP; + private static final int UNICODE_OFFSET = 36864; + private static boolean escape; + + static { + CHARACTER_NAME_LIST = new String[]{ + "woodensword", "woodenpickaxe", "woodenshovel", "woodenaxe", "woodenhoe", + "stonesword", "stone pickaxe", "stoneshovel", "stoneaxe", "stonehoe", + "goldensword", "goldenpickaxe", "goldenshovel", "goldenaxe", "goldenhoe", "unused", + + "ironsword", "ironpickaxe", "ironshovel", "ironaxe", "ironhoe", + "diamondsword", "diamondpickaxe", "diamondshovel", "diamondaxe", "diamond hoe", + "bow", "bow1", "bow2", "bow3", "arrow", "quiver", + + "head", "body", "legs", "boots", + "whiteleathercap", "whiteleathertunic", "whiteleatherpants", "whiteleatherboots", + "blankleathercap", "blankleathertunic", "blankleatherpants", "blankleatherboots", + "leathercap", "leathertunic", "leatherpants", "leather boots", + + "chainhelmet", "chainchestplate", "chainleggings", "chainboots", + "goldenhelmet", "goldenchestplate", "goldenleggings", "goldenboots", + "ironhelmet", "ironchestplate", "ironleggings", "ironboots", + "diamondhelmet", "diamondchestplate", "diamondleggings", "diamondboots", + + "compasssouth", "compasssouthwest", "compasswest", "compassnorthwest", + "compassnorth", "compassnortheast", "compasseast", "compasssoutheast", + "clocknoon", "clockevening", "clockdusk", "clocknight", + "clockmidnight", "clockweehours", "clockdawn", "clockmorning", + + "fishingrod", "fishingrodcast", "carrotonastick", "flintandsteel", "shears", "lead", "name tag", + "iron horsearmor", "goldhorsearmor", "diamondhorsearmor", "saddle", + "minecart", "minecartwithchest", "minecartwithfurnace", "minecartwithhopper", "minecartwithtnt", + + "boat", "book", "bookandquill", "writtenbook", "enchantedbook", "map", "emptymap", + "bucket", "waterbucket", "lavabucket", "milk", + "snowball", "egg", "enderpearl", "eyeofender", "firecharge", + + "disc13", "disccat", "disc blocks", "disc chirp", "disc far", "disc mall", + "discmellohi", "disc stal", "disc strad", "disc ward", "disc 11", "disc wait", + "bottle o' enchanting", "firework", "firework star blank", "firework star spots", + + "firework star white", "firework star orange", "firework star magenta", "firework star light blue", + "firework star yellow", "firework star lime", "firework star pink", "firework star gray", + "firework star light gray", "firework star cyan", "firework star purple", "firework star blue", + "firework star brown", "firework star green", "firework star red", "firework star black", + + "bonemeal", "orange dye", "magenta dye", "light blue dye", "dandelion yellow", "lime dye", "pink dye", "gray dye", + "light gray dye", "cyan dye", "purple dye", "lapis lazuli", "cocoa beans", "cactus green", "rose red", "ink sac", + + "sign", "painting", "item frame", "flower pot", "wooden door", "iron door", "hopper", "brewing stand", + "cauldron", "bed", "repeater", "comparator", "redstone dust", "glowstone dust", "gunpowder", "sugar", + + "iron ingot", "gold ingot", "brick", "nether brick", "coal", "charcoal", "diamond", "ruby", "emerald", + "nether quartz", "flint", "gold nugget", "ghast tear", "nether star", "clay ball", "slimeball", + + "skeletonskull", "witherskeletonskull", "zombiehead", "head", "creeperhead", + "stick", "bone", "blazerod", "blazepowder", "magma cream", "leather", + "feather", "paper", "string", "fermentedspidereye", "spidereye", + + "seeds", "melon seeds", "pumpkin seeds", "netherwart", "sugarcane", "wheat", "carrot", "golden carrot", + "potato", "baked potato", "poisonous potato", "melon", "glistering melon", "apple", "golden apple", "rotten flesh", + + "rawporkchop", "porkchop", "rawbeef", "steak", "rawfish", "cookedfish", "rawchicken", "cookedchicken", + "bowl", "mushroomstew", "bread", "cookie", "cake", "pumpkinpie", "glassbottle", "waterbottle", + + "potionofregeneration", "splash potion of regeneration", "potion of swiftness", "splash potion of swiftness", + "potionoffire resistance", "splash potion of fire resistance", "potion of poison", "splash potion of poison", + "potionof healing", "splash potion of healing", "potion of night vision", "splash potion of night vision", + "potionof weakness", "splash potion of weakness", "potion of strength", "splash potion of strength", + + "potion of slowness", "splash potion of slowness", "potion of harming", "splash potion of harming", + "potion of invisibility", "splash potion of invisibility", "splash potion bottle", "potion liquid", + "potion of milk", "splash potion of milk", "white potion", "white splash potion", + "swiftness potion", "splash swiftness potion", "slowness potion", "splash slowness potion", + + "haste potion potion", "splash haste potion", "dullness potion", "splash dullness potion", + "strength potion", "splash strength potion", "health potion", "splash health potion", + "harm potion", "splash harm potion", "jump boost potion", "splash jump boost potion", + "nausea potion", "splash nausea potion", "regeneration potion", "splash regeneration potion", + + "resistance potion", "splash resistance potion", "fire resistance potion", "splash fire resistance potion", + "water breathing potion", "splash water breathing potion", "invisibility potion", "splash invisibility potion", + "blindness potion", "splash blindness potion", "night vision potion", "splash night vision potion", + "hungerpotion", "splash hunger potion", "weakness potion", "splash weakness potion", + "poisonpotion", "splash poison potion", "wither potion", "splash wither potion", + "healthboostpotion", "splash health boost potion", "absorption potion", "splash absorption potion", + "saturationpotion", "splash saturation potion", "splash mundane potion", + "spawnegg", "spawn egg spots", "white spawn egg", "spawn creeper", "spawn skeleton", + + "spawn spider", "spawn zombie", "spawn slime", "spawn ghast", "spawn zombie pigman", "spawn enderman", + "spawn cave spider", "spawn silverfish", "spawn blaze", "spawn magma cube", "spawn bat", "spawn witch", + "spawn pig", "spawn sheep", "spawn cow", "spawn chicken", + + "spawn squid", "spawn wolf", "spawn mooshroom", "spawn ocelot", "spawn horse", "spawn villager", + "spawn snow golem", "spawn iron golem", "spawn wither skeleton", "spawn wither", + "spawn human", "spawn tnt", "spawn spawner", "unused", "unused", "unused", + + "tfda wooden sword", "tfda wooden pickaxe", "tfda wooden shovel", "tfda wooden axe", "tfda wooden hoe", + "tfda stone sword", "tfda stone pickaxe", "tfda stone shovel", "tfda stone axe", "tfda stone hoe", + "tfda golden sword", "tfda golden pickaxe", "tfda golden shovel", "tfda golden axe", "tfda golden hoe", "unused", + + "tfda iron sword", "tfda iron pickaxe", "tfda iron shovel", "tfda iron axe", "tfda iron hoe", + "tfda diamond sword", "tfda diamond pickaxe", "tfda diamond shovel", "tfda diamond axe", "tfda diamond hoe", + "tfda fishing rod", "tfda fishing rod cast", "tfda carrot on a stick", "unused", "tfda wooden door", "tfda iron door", + + "tfda white leather cap", "tfda white leather tunic", "tfda white leather pants", "tfda white leather boots", + "tfda blank leather cap", "tfda blank leather tunic", "tfda blank leather pants", "tfda blank leather boots", + "tfda leather cap", "tfda leather tunic", "tfda leather pants", "tfda leather boots", + "tfda chain helmet", "tfda chain chestplate", "tfda chain leggings", "tfda chain boots", + + "tfda golden helmet", "tfda golden chestplate", "tfda golden leggings", "tfda golden boots", + "tfda iron helmet", "tfda iron chestplate", "tfda iron leggings", "tfda iron boots", + "tfda diamond helmet", "tfda diamond chestplate", "tfda diamond leggings", "tfda diamond boots", + "unused", "tfda gold nugget", "tfda gold ingot", "tfda golden apple", + + "tfda nether brick", "tfda nether quartz", "tfda zombie head", "tfda purple dye", + "unused", "unused", "unused", "unused", "old cocoa beans", "unused", "starfish", "seashell", + "custom disc dream", "custom disc ezusht", "custom disc friend", "custom disc ran", + + "oaksapling", "sprucesapling", "birchsapling", "junglesapling", "deadbush", "shrub", + "whitefern", "fern", "whitegrass", "grass", "whitestemattached", "stemattached", + "whitestem", "stem", "whitevines", "vines", + + "whitelilypad", "lilypad", "sugarcaneblock", "netherwart3", "netherwart2", "netherwart1", + "redmushroom", "brownmushroom", "rose", "cyanflower", "dandelion", + "unused", "unused", "iron bars", "glasspane", "cobweb", + + "wheat8", "wheat7", "wheat6", "wheat5", "wheat4", "wheat3", "wheat2", "wheat1", + "potatoes4", "potatoes3", "potatoes2", "potatoes1", "carrots4", "carrots3", "carrots2", "carrots1", + + "rail", "rail north-east", "powered rail", "powered powered rail", "detector rail", "powered detector rail", + "activator rail", "powered activator rail", "rail horizontal", "rail east-south", + "powered rail horizontal", "powered powered rail horizontal", + "detector rail horizontal", "powered detector rail horizontal", + "activator rail horizontal", "powered activator rail horizontal", + + "rail south-east", "raileast-north", "ladder", "ladderhorizontal", + "redstone", "redstone horizontal", "redstonevertical", + "tripwire", "tripwirehorizontal", "tripwirevertical", "tripwirecross", "tripwirehook", + "lever", "torch", "redstonetorch", "redstone torchoff", + + "fire0", "fire1", "fire2", "fire3", "fire4", "fire5", + "fireinside0", "fireinside1", "fireinside2", "fireinside3", "fireinside4", + "stationarywater", "flowingwater", "stationarylava", "flowinglava", "netherportal", + + "stationary water solid", "flowing water solid", "nether portal solid", + "break 0", "break 1", "break 2", "break 3", "break 4", "break 5", "break 6", "break 7", "break 8", "break 9", + "unused", "unused", "unused", + + "coal ore tile", "iron ore tile", "gold ore tile", "redstone ore tile", "diamond ore tile", + "lapis lazuli ore tile", "emerald ore tile", "cobblestone tile", "mossy cobblestone tile", + "stone tile", "stone bricks tile", "mossy stone bricks tile", "cracked stone bricks tile", + "chiseled stone bricks tile", "stone slab top tile", "stone slab side tile", + + "coal block tile", "iron block tile", "gold block tile", "redstone block tile", "diamond block tile", + "lapis lazuli block tile", "emerald block tile", "bedrock tile", "furnace tile", "burning furnace tile", + "furnace back tile", "furnace top tile", "dispenser tile", "dispenser top tile", "dropper tile", "dropper top tile", + + "piston tile", "piston head tile", "piston top tile", "repeater tile", "powered repeater tile", + "comparator tile", "powered comparator tile", "redstone lamp tile", "powered redstone lamp tile", + "daylight detector bottom tile", "daylight detector tile", "crafting table top tile", + "crafting table side tile", "crafting table tile", "jukebox tile", "note block tile", + + "dirt tile", "grass block tile", "snowy grass block tile", "mycelium tile", "farmland tile", "wet farmland tile", + "snow tile", "soul sand tile", "gravel tile", "sand tile", "sandstone tile", "smooth sandstone tile", + "chiseled sandstone tile", "sandstone top tile", "sandstone bottom tile", "end stone tile", + + "obsidian tile", "glowstone tile", "nether brick block tile", "netherrack tile", "nether quartz ore tile", + "quartz block tile", "quartz block bottom tile", "pillar quartz tile", "pillar quartz top tile", + "chiseled quartz tile", "chiseled quartz top tile", "oak log tile", "oak log top tile", "oak planks tile", + "bookshelf tile", "trapdoor tile", + + "pumpkin tile", "jack o' lantern tile", "pumkin side tile", "pumpkin top tile", "melon block tile", + "melon block top tile", "cactus tile", "mushroom stem tile", "mushroom brown tile", "mushroom red tile", + "mushroom pores tile", "hay bale tile", "sponge tile", "ice tile", "tnt tile", "spawner tile", + + "enchantment table top tile", "enchantment table side tile", "end portal frame tile", "end portal frame side tile", + "cake top tile", "cake side tile", "cake side eaten tile", "command block tile", "unused", "unused", + "unused", "unused", "beacon crystal tile", "item frame back tile", "painting back tile", "static tile", + + "tfda bedrock tile", "summoning brick tile", "corrupt brick side tile", "corrupt brick top tile", + "tfda redstone ore tile", "corrupt runes tile", "tfda netherbrick tile", "tfda netherrack", + "tfda obsidian tile", "air glyph tile", "water glyph tile", "earth glyph tile", "fire glyph tile", + "tfda glowstone tile", "tfda cobblestone tile", "cracked icy bricks tile", + + "light blue cloth tile", "green cloth tile", "yellow cloth tile", "purple cloth tile", + "glowing red cloth tile", "red cloth tile", "tfda coal block tile", "tfda redstone block tile", + "tfda lapis lazuli block tile", "tfda hardened clay tile", "tfda snow tile", "tfda snowy grass block tile", + "tfda mycelium tile", "tfda ice tile", "tfda tnt tile", "tfda sponge tile", + + "tfda chiseled sandstone tile", "tfda bricks tile", "tfda daylight detector bottom tile", + "tfda daylight detector tile", "tfda bookshelf tile", "tfda cactus tile", + "unused", "unused", "unused", "unused", "unused", "unused", "unused", "unused", "unused", "unused", + + "creeper", "chargedcreeper", "skeleton", "wither skeleton", "spider", "zombie", "zombie villager", "slime", + "ghast", "firingghast", "zombiepigman", "enderman", "cavespider", "silverfish", "blaze", "magma cube", + + "bat", "witch", "unused", "pig", "sheep", "cow", "chicken", "squid", "wolf", "dog", "angry wolf", + "mooshroom", "ocelot", "black cat", "ginger cat", "siamese cat", + + "horse", "donkey", "mule", "skeletonhorse", "zombiehorse", "villager", "human", "snow golem", + "irongolem", "unused", "enderdragon", "wither", "witherprotected", "unused", "witherskull", "bluewitherskull", + + "rideable minecart", "chest minecart", "furnace minecart", "hopper minecart", "tnt minecart", + "spawner minecart", "boat entity", "sign front", "sign back", "chest tile", "trapped chest tile", + "ender chest tile", "christmas chest tile", "doublechest", "trapped doublechest", "christmas doublechest", + + "ender crystal shell", "ender crystal gem 1", "ender crystal gem 2", "ender crystal gem 3", + "ender crystal gem 4", "ender crystal gem 5", "ender crystal gem 6", "ender crystal 1", + "ender crystal 2", "ender crystal 3", "ender crystal 4", "ender crystal 5", "ender crystal 6", + "beacon beam", "arrow entity", "item frame entity", + + "painting kebab", "painting aztec", "painting alban", "painting aztec2", "painting bomb", "painting plant", + "painting wasteland", "painting pool", "painting courbet", "painting sea", "painting sunset", + "painting creebet", "painting wanderer", "painting graham", "painting skeleton", "painting donkeykong", + + "painting match", "painting bust", "painting stage", "painting void", "painting skullandroses", + "painting wither", "painting fighters", "painting pointer", "painting pigscene", "painting flaming skull", + "unused", "unused", "unused", "unused", "unused", "unused", + + "xp orb 1", "xp orb 2", "xp orb 3", "xp orb 4", "xp orb 5", "xp orb 6", "xp orb 7", "xp orb 8", + "xp orb 9", "xp orb 10", "xp orb 11", "unused", "unused", "unused", "unused", "unused", + + "inventory slot", "button", "button disabled", "button highlighted", "delete slot", + "gui arrow", "gui blocked arrow", "gui complete arrow", "gui burning", "gui burning full", + "gui plus", "gui integral", "gui delete", "gui potion", "gui green check", "gui red x", + + "hammer", "hammer and anvil", "abacus", "broken shovel", "right button", "right button highlighted", + "right button disabled", "left button", "left button highlighted", "left button disabled", + "up button", "down button", "gui language", "realms off", "realms on", "realms none", + + "white gui arrow", "white gui burning", "white gui plus", "white gui integral", "white gui delete", + "white gui potion", "white gui check", "white gui x", "gui circle", "gui cursor", + "connection5", "connection4", "connection3", "connection2", "connection1", "connection0", + + "connecting1", "connecting2", "connecting3", "connecting4", "connecting5", + "hotbar slot", "hotbar cursor", "selected hotbar slot", "gui 1", "gui 2", "gui 3", "gui 4", "gui 5", + "gui !!!", "unused", "unused", + + "messages highlighted", "messages", "1 message highlighted", "2 messages highlighted", + "3 messages highlighted", "4 messages highlighted", "5 messages highlighted", "!!! messages highlighted", + "1 message", "2 messages", "3 messages", "4 messages", "5 messages", "!!! messages", "heart container", "healing heart container", + + "heart", "halfheart", "poisonheart", "halfpoisonheart", "witherheart", "halfwitherheart", + "mob heart", "half mob heart", "hardcore heart", "hardcore half heart", + "hardcore poison heart", "hardcore half poison heart", "hardcore wither heart", "hardcore half wither heart", + "absorption heart", "half absorption heart", + + "light heart", "light half heart", "light poison heart", "light half poison heart", + "light wither heart", "light half wither heart", "light mob heart", "light half mob heart", + "light hardcore heart", "light hardcore half heart", "light hardcore poison heart", + "light hardcore half poison heart", "light hardcore wither heart", "light hardcore half wither heart", + "hardcore absorption heart", "hardcore half absorption heart", + + "healing heart", "healing half heart", "healing poison heart", "healing half poison heart", + "healing wither heart", "healing half wither heart", "healing mob heart", "healing half mob heart", + "healing hardcore heart", "healing hardcore half heart", "healing hardcore poison heart", + "healing hardcore half poison heart", "healing hardcore wither heart", "healing hardcore half wither heart", + "red heart container", "red wither heart", + + "armor point", "half armor point", "empty armor point", "air bubble", "half air bubble", + "reversed hunger point", "hunger container", "healing hunger container", "red hunger container", + "green hunger container", "brown hunger container", "unused", "unused", "unused", "unused", "unused", + + "hunger point", "half hunger point", "light hunger point", "light half hunger point", + "poison hunger point", "half poison hunger point", "light poison hunger point", + "light half poison hunger point", "healing hunger point", "healing half hunger point", + "healing poison hunger point", "healing half poison hunger point", "hunger hunger point", + "half hunger hunger point", "healing hunger hunger point", "healing half hunger hunger point", + + "swiftness", "slowness", "haste", "mining fatigue", "strength", "weakness", "poison", "regeneration", + "invisibility", "hunger", "jump boost", "nausea", "night vision", "blindness", "resistance", "fire resistance", + + "water breathing", "wither status", "absorption", "unused", "unused", "unused", "unused", "unused", + "unused", "unused", "unused", "unused", "unused", "unused", "unused", "unused", + + "tfda zombie", "tfda woman", "unused", "unused", "unused", "unused", "unused", "unused", "unused", + "unused", "unused", "unused", "unused", "unused", "tfda trapped chest tile", "tfda trapped doublechest", + + "tfda swiftness", "tfda slowness", "tfda regeneration", "tfda jump boost", "tfda nausea", + "tfda blindness", "tfda wither status", "unused", "unused", "unused", "unused", "unused", + "unused", "unused", "unused", "unused", + + "unused", "unused", "unused", "unused", "unused", "unused", "unused", "unused", + "unused", "unused", "unused", "unused", "unused", "unused", "unused", "unused", + + "map landmark", "map nether portal", "map end portal", "map portal", "map floating island", + "map basin", "map lake", "map lava lake", "map river", "map waterfall", "map cave", "map ravine", + "map dungeon", "map mineshaft", "map stronghold", "map village", + + "map desert well", "map desert temple", "map jungle temple", "map witch hut", "map nether fortress", + "map obsidian pillar", "map ender crystal", "map end exit portal", "map teleport altar", + "map estate agency", "map port", "map bank", "map bed", "map inn", "map chest", "map ender chest", + + "map crafting table", "map furnace", "map brewing stand", "map brewing stand and cauldron", + "map cauldron", "map enchantment table", "map anvil", "map anvil damaged", "map cake", "map cake eaten", + "map jukebox", "map map", "map beacon", "map fishing", "map wishing well", "map library", + + "map mine", "map stable", "map fountain", "map shop", "map trading", "map challenge", "map plot", + "map monument", "map gravestone", "map house", "map large house", "map shack", "map tower", + "map castle", "map treehouse", "map ruins", + + "map totem", "map danger", "map prohibited", "map farm", "map wheat", "map sugarcane", + "map cocoa beans", "map netherwart", "map tree", "map melon", "map pumpkin", "map cactus", + "map carrot", "map potato", "map animal farm", "map pig farm", + + "map sheep farm", "map cow farm", "map chicken farm", "map horse farm", "map mooshroom farm", + "map squid farm", "map snow golem farm", "map forest", "map desert", "map plains", "map swamp", + "map jungle", "map taiga", "map tundra", "map mountains", "map mushroom island", + + "mapspawner", "mapzombiespawner", "mapskeletonspawner", "mapspiderspawner", "mapcavespiderspawner", + "mapblaze spawner", "mapsilverfishspawner", "mapendermanspawner", "mappigspawner", + "pigmob", "sheepmob", "cowmob", "chickenmob", "horsemob", "donkeymob", "mulemob", + + "map grinder", "map zombie grinder", "map skeleton grinder", "map spider grinder", "map cave spider grinder", + "map blaze grinder", "map silverfish grinder", "map enderman grinder", "map pig grinder", + "skeleton horse mob", "zombie horse mob", "mooshroom mob", "squid mob", "wolf mob", "dog mob", "angry wolf mob", + + "map xp grinder", "map zombie xp grinder", "map skeleton xp grinder", "map spider xp grinder", + "map cave spider xp grinder", "map blaze xp grinder", "map silverfish xp grinder", "map enderman xp grinder", + "map pig xp grinder", "ocelotmob", "blackcatmob", "gingercatmob", "siamesecatmob", "batmob", + "farmermob", "butchermob", + + "blacksmithmob", "librarianmob", "priestmob", "villagermob", "humanmob", "snowgolemmob", + "iron golemmob", "enderdragonmob", "withermob", "witherprotectedmob", "creepermob", + "chargedcreepermob", "skeletonmob", "witherskeletonmob", "spidermob", "zombiemob", + + "zombievillagermob", "slimemob", "ghastmob", "firingghastmob", "zombiepigmanmob", "endermanmob", + "cavespidermob", "silverfishmob", "blazemob", "magmacubemob", "witchmob", + "unused", "unused", "unused", "unused", "unused", + + "amenity hidden chest", "amenity multi chest", "amenity hidden trapped chest", "amenity return portal", + "amenity floor plan map", "amenity map", "amenity secrets map", "amenity wastebasket", + "amenity fountain of life", "amenity key portal", "amenity xp bank", "amenity alchemic circle", + "amenity meeting chamber", "amenity item spawn", "amenity heaven's door", "amenity hell's door", + + "amenity buying trader", "amenity gear trader", "amenity food/material trader", "amenity food/mat/pot trader", + "amenity omni trader", "map tfda zombie spawner", "map tfda zombie grinder", "map tfda zombie xp grinder", + "unused", "unused", "unused", "unused", "unused", "unused", "map christmas chest", "map trapped chest", + + "tfda zombie mob", "tfda woman mob", "unused", "unused", "unused", "unused", "unused", "unused", + "unused", "unused", "unused", "unused", "unused", "unused", "unused", "unused", + + "white sword", "white pickaxe", "white shovel", "white axe", "white hoe", "white bow", "white arrow", + "white helmet", "white chestplate", "white leggings", "white boots", + "white fishing rod", "white lead", "white name tag", "white horse armor", "white saddle", + + "white minecart", "white minecart with chest", "white boat", "white book", "white empty map", "white map", + "white bucket", "white egg", "white ender pearl", "white eye of ender", "white fire charge", "white disc", + "white bottle o' enchanting", "white firework", "white firework star blank", "white firework star", + + "white orange dye", "white magenta dye", "white light blue dye", "white dandelion yellow", + "white light gray dye", "white cyan dye", "white lapis lazuli", "white cocoa beans", "white cactus green", + "white rose red", "white ink sac", "white sign", "white painting", "white item frame", "white door", "white hopper", + + "white bed", "white redstone dust", "white iron ingot", "white coal", "white charcoal", "white diamond", + "white ruby", "white emerald", "white nether quartz", "white flint", "white gold nugget", + "white ghast tear", "white nether star", "white clay ball", "white slimeball", "unused", + + "white skeleton skull", "white wither skeleton skull", "white zombie head", "white head", "white creeper head", + "white stick", "white blaze rod", "white blaze powder", "white magma cream", "white leather", + "white paper", "white fermented spider eye", "white spider eye", "unused", "unused", "unused", + + "white seeds", "white melon seeds", "white pumpkin seeds", "white netherwart", "white sugarcane", + "white wheat", "white carrot", "white golden carrot", "white potato", "white baked potato", "white poisonous potato", + "white melon", "white glistering melon", "white apple", "white golden apple", "white rotten flesh", + + "white raw porkchop", "white porkchop", "white raw beef", "white steak", "white raw fish", + "white cooked fish", "white raw chicken", "white cooked chicken", "white bowl", "white mushroom stew", + "white bread", "white cookie", "white cake", "white pumpkin pie", "unused", "unused", + + "tfda white helmet", "tfda white chestplate", "tfda white leggings", "tfda white boots", + "tfda white nether quartz", "tfda white zombie head", "tfda white purple dye", "old white cocoa beans", + "unused", "unused", "unused", "unused", "unused", "unused", "white starfish", "white seashell", + + "white oak sapling", "white spruce sapling", "white birch sapling", "white jungle sapling", + "white sugarcane block", "white netherwart 3", "white netherwart 2", "white netherwart 1", + "white red mushroom", "white brown mushroom", "white rose", "white dandelion", + "white iron bars", "white wheat block", "white potatoes", "white carrots", + + "white rail", "white rail horizontal", "white ladder", "white ladder horizontal", + "white lever", "white torch", "white shrub", + "unused", "unused", "unused", "unused", "unused", "unused", "unused", "unused", "unused", + + "white fire", "white stationary water", "white flowing water", "white stationary lava", + "white flowing lava", "white nether portal", "white stationary water solid", + "white flowing water solid", "white nether portal solid", "white ore tile", "white stone tile", + "white stone bricks tile", "white cracked stone bricks tile", "white chiseled stone bricks tile", + "white stone slab top tile", "white stone slab side tile", + + "white furnace top tile", "white coal block tile", "white iron block tile", "white gold block tile", + "white redstone block tile", "white lapis lazuli block tile", "white emerald block tile", + "white bedrock tile", "white redstone lamp tile", "white powered redstone lamp tile", + "white daylight detector bottom tile", "white daylight detector tile", + "white jukebox tile", "white note block tile", "white dirt tile", "white grass block tile", + + "white mycelium tile", "white farmland tile", "white snow tile", "white soul sand tile", "white gravel tile", + "white sand tile", "white sandstone tile", "white smooth sandstone tile", "white chiseled sandstone tile", + "white sandstone top tile", "white sandstone bottom tile", "white end stone tile", + "white obsidian tile", "white glowstone tile", "white nether brick block tile", "white netherrack tile", + + "white oak log tile", "white oak log top tile", "white oak planks tile", "white pumpkin tile", + "white jack o' lantern tile", "white pumkin side tile", "white pumpkin top tile", "white melon block tile", + "white melon block top tile", "white tnt tile", "white spawner tile", "white command block tile", + "white beacon crystal tile", "white item frame back tile", "white painting back tile", "white static tile", + + "tfda white coal block tile", "tfda white redstone block tile", "tfda white lapis lazuli block tile", + "tfda white hardened clay tile", "unused", "unused", "unused", "tfda white snowy grass block tile", + "tfda white snow tile", "unused", "unused", "unused", "unused", "unused", + "tfda white chiseled sandstone tile", "tfda white bricks tile", + + "white boat entity", "white sign front", "white sign back", "white chest tile", "white trapped chest tile", + "white ender chest tile", "white christmas chest tile", "white doublechest", "white trapped doublechest", + "white christmas doublechest", "unused", "unused", "unused", "unused", + "tfda white trapped chest tile", "tfda white trapped doublechest", + + "white ender crystal shell", "white ender crystal gem 1", "white ender crystal gem 2", + "white ender crystal gem 3", "white ender crystal gem 4", "white ender crystal gem 5", + "white ender crystal gem 6", "white ender crystal 1", "white ender crystal 2", "white ender crystal 3", + "white ender crystal 4", "white ender crystal 5", "white ender crystal 6", "white arrow entity", + "white wither skull", "white blue wither skull", + + "white zombie", "white zombie villager", "white witch", "white villager", "white human", "unused", + "white enderman", "white blaze", "unused", "white wither", "unused", "unused", "unused", "unused", + "tfda white zombie", "tfda white woman", + + "white gui blocked arrow", "white gui burning full", "white gui green check", "white gui red x", + "unused", "unused", "unused", "unused", + "white hammer", "white hammer and anvil", "white abacus", "white broken shovel", + "unused", "white realms off", "white realms on", "white realms none", + + "white connection 5", "white connection 4", "white connection 3", "white connection 2", "white connection 1", + "white connection 0", "white gui 1", "white gui 2", "white gui 3", "white gui 4", "white gui 5", + "white gui !!!", "unused", "unused", "unused", "unused", + + "white heart container", "white heart", "white half heart", "white poison heart", "white half poison heart", + "white mob heart", "white half mob heart", "white hardcore heart", "white hardcore half heart", + "white hardcore poison heart", "white hardcore half poison heart", "white absorption heart", + "white half absorption heart", "white light heart", "white light half heart", "unused", + + "white armor point", "white half armor point", "white empty armor point", "white air bubble", + "white half air bubble", "white reversed hunger point", "white hunger container", + "white hunger point", "white half hunger point", "white light hunger point", "white light half hunger point", + "white poison hunger point", "white half poison hunger point", "unused", "unused", "unused", + + "white swiftness", "white slowness", "white haste", "white mining fatigue", + "white strength", "white weakness", "white poison", "white regeneration", + "white invisibility", "white hunger", "white jump boost", "white nausea", + "white night vision", "white blindness", "white resistance", "white fire resistance", + + "white water breathing", "white wither status", "white absorption", "unused", "unused", "unused", + "unused", "unused", "unused", "tfda white swiftness", "tfda white slowness", "tfda white regeneration", + "tfda white jump boost", "tfda white nausea", "tfda white blindness", "tfda white wither status", + + "northarrow", "northeastarrow", "eastarrow", "southeastarrow", + "southarrow", "southwestarrow", "westarrow", "northwestarrow", + "unused", "unused", "unused", "unused", "unused", "unused", "unused", "unused", + + "symbol cycloid emblem aa", "symbol snub diamond twist aa", "symbol diamond twist aa", + "symbol astroid fractal aa", "symbol tight astroid twist aa", "symbol astroid twist aa", "unused", "unused", + "symbol cycloid emblem", "symbol snub diamond twist", "symbol diamond twist", "symbol astroid fractal", + "symbol tight astroid twist", "symbol astroid twist", "unused", "unused", + + "symbol astroid lace aa", "symbol astroid lace thin aa", "symbol astroid lace split aa", + "symbol astroid lace small split aa", "symbol ashndar aa", "symbol quest aa", "unused", "unused", + "symbol astroid lace", "symbol astroid lace thin", "symbol astroid lace split", + "symbol astroid lace small split", "symbol ashndar", "symbol quest", "unused", "unused", + + "symbol x tight aa", "symbol x tight even-odd aa", "symbol adventure aa", "symbol x even-odd aa", + "unused", "unused", "unused", "unused", + "symbol x tight", "symbol x tight even-odd", "symbol adventure", "symbol x even-odd", + "unused", "unused", "unused", "unused", + + "symbol corner pair aa", "symbol corner diamond aa", "symbol inverted corner diamond aa", + "symbol overlay rune aa", "symbol minigame aa", "unused", "unused", "unused", + "symbol corner pair", "symbol corner diamond", "symbol inverted corner diamond", + "symbol overlay rune", "symbol minigame", "unused", "unused", "unused", + + "quest icon", "ashndar icon", "adventure icon", "minigame icon", "unused", "unused", "unused", "unused", + "unused", "unused", "unused", "unused", "unused", "unused", "unused", "unused", + + "white quest icon", "white ashndar icon", "white adventure icon", "white minigame icon", "unused", "unused", + "unused", "unused", "unused", "unused", "unused", "unused", "unused", "unused", "unused", "unused", + + "air", "stone", "bedrock", "obsidian", "netherrack", "glowstone", "endstone", "ice", + "dirt", "grassblock", "mycelium", "sand", "gravel", "soulsand", "clay", "snowblock", + + "coalore", "ironore", "goldore", "redstoneore", "diamondore", "lapislazuliore", "emeraldore", + "netherquartzore", "unused", "coalblock", "ironblock", "goldblock", "redstoneblock", "diamondblock", + "lapislazuliblock", "emeraldblock", + + "cobblestone", "mossy cobblestone", "stone bricks", "mossy stone bricks", "cracked stone bricks", + "chiseled stone bricks", "bricks", "nether brick block", "sandstone", "smooth sandstone", + "chiseled sandstone", "quartz block", "pillar quartz", "chiseled quartz", "hardened clay", "glass", + + "whitestainedclay", "orangestainedclay", "magentastainedclay", "lightbluestainedclay", + "yellowstainedclay", "limestainedclay", "pinkstainedclay", "graystainedclay", + "lightgray stainedclay", "cyanstainedclay", "purplestainedclay", "bluestainedclay", + "brownstainedclay", "greenstainedclay", "redstainedclay", "blackstainedclay", + + "whitewool", "orangewool", "magentawool", "lightbluewool", + "yellowwool", "limewool", "pinkwool", "graywool", + "lightgraywool", "cyanwool", "purplewool", "bluewool", + "brownwool", "greenwool", "redwool", "blackwool", + + "whitecarpet", "orangecarpet", "magentacarpet", "lightbluecarpet", + "yellowcarpet", "limecarpet", "pinkcarpet", "graycarpet", + "lightgray carpet", "cyancarpet", "purplecarpet", "bluecarpet", + "browncarpet", "greencarpet", "redcarpet", "blackcarpet", + + "oaklog", "sprucelog", "birchlog", "junglelog", + "oakplanks", "spruceplanks", "birchplanks", "jungleplanks", + "oakleaves", "spruceleaves", "birchleaves", "jungleleaves", + "oakleaveshd", "spruceleaves hd", "birchleaveshd", "jungleleaveshd", + + "oakwoodstairs", "sprucewoodstairs", "birchwoodstairs", "junglewoodstairs", + "cobblestonestairs", "stonebrickstairs", "sandstonestairs", "brickstairs", "netherbrickstairs", + "quartzstairs", "unused", "pumpkin", "jackolantern", "melonblock", "cactus", "sponge", + + "oakwoodslab", "sprucewoodslab", "birchwoodslab", "junglewoodslab", + "cobblestoneslab", "stonebrickslab", "sandstoneslab", "brickslab", "netherbrickslab", "quartzslab", + "stoneslab", "cobblestonewall", "mossycobblestonewall", "fence", "netherbrickfence", "fencegate", + + "bookshelf", "crafting table", "furnace", "dispenser", "dropper", "piston", "sticky piston", + "note block", "jukebox", "redstone lamp", "tnt", "hay bale", "stone pressure plate", + "wooden pressure plate", "weighted pressure plate (light)", "weighted pressure plate (heavy)", + + "chest", "trapped chest", "ender chest", "enchantment table", "end portal frame", + "anvil", "slightly damaged anvil", "very damaged anvil", "trapdoor", "snow", "daylight detector", + "stone button", "wooden button", "enderdragonegg", "command block", "spawner", + + "doubleslab", "smooth stone doubleslab", "smooth sandstone doubleslab", "farmland", "wet farmland", + "furnace back", "lit redstone lamp", "error block", "cake block", "eaten cake block", + "nether portal block", "flipped nether portal block", "unused", + "flipped pumpkin", "flipped jack o' lantern", "uncarved pumpkin", + + "left oak log", "left spruce log", "left birch log", "left jungle log", + "right oak log", "right spruce log", "right birch log", "right jungle log", + "full bark oak log", "full bark spruce log", "full bark birch log", "full bark jungle log", + "left pillar quartz", "right pillar quartz", "left hay bale", "right hay bale", + + "mushroom pore", "mushroom stem", "mushroom full stem", + "brown mushroom left", "brown mushroom center", "brown mushroom right", "brown mushroom full block", + "red mushroom left", "red mushroom center", "red mushroom right", "red mushroom full block", + "unused", "locked chest", "glowingobsidian", "nether reactor", "stonecutter", + + "unused", "unused", "unused", "unused", "unused", "unused", "unused", "unused", + "unused", "unused", "unused", "unused", "unused", "unused", "unused", "unused", + + "unused", "unused", "unused", "unused", "unused", "unused", "unused", "unused", + "unused", "unused", "unused", "unused", "unused", "unused", "unused", "unused", + + "tfda bedrock", "tfda redstone ore", "corrupt bricks", "summoning brick", + "tfda obsidian", "tfda glowstone", "air glyph", "water glyph", "earth glyph", "fire glyph", + "unused", "tfda netherrack", "tfda ice", "tfda mycelium", "tfda snow block", "tfda snow", + + "tfda coal block", "tfda redstone block", "tfda lapis lazuli block", "cracked icy bricks", + "tfda chiseled sandstone", "tfda hardened clay", "tfda bookshelf", "tfda tnt", "tfda locked chest", + "tfda birch log", "tfda cactus", "tfda sponge", "icy brick fence", "tfda nether brick fence", "unused", "unused", + + "tfda white stained clay", "tfda light blue stained clay", "tfda lime stained clay", + "tfda pink stained clay", "tfda gray stained clay", "tfda light gray stained clay", "tfda cyan stained clay", + "tfda purple stained clay", "tfda blue stained clay", "tfda green stained clay", "tfda black stained clay", + "unused", "tfda cobblestone", "tfda bricks", "tfda nether brick block", "tfda spruce planks", + + "icy brick stairs", "tfda brick stairs", "tfda nether brick stairs", "tfda spruce wood stairs", + "icy brick slab", "tfda brick slab", "tfda nether brick slab", "tfda spruce wood slab", + "unused", "tfda orange wool", "glowing red cloth", "light blue cloth", "yellow cloth", + "purple cloth", "green cloth", "red cloth", + + "tfda orange carpet", "glowing red carpet", "tfda light blue carpet", "tfda yellow carptet", + "tfda purple carpet", "tfda green carpet", "tfda red carpet", "unused", + "unused", "unused", "unused", "unused", "unused", "unused", "unused", "unused", + + "white stone", "white bedrock", "white obsidian", "white netherrack", "white glowstone", + "white end stone", "white ice", "white dirt", "white sand", "white gravel", "white soul sand", + "white clay", "white snow block", "white ore", "unused", "unused", + + "white coal block", "white iron block", "white gold block", "white redstone block", + "white lapis lazuli block", "white emerald block", "white oak log", "white birch log", + "white jungle log", "white planks", "white oak leaves", "white spruce leaves", "white jungle leaves", + "white oak leaves hd", "white spruce leaves hd", "white jungle leaves hd", + + "white cobblestone", "white stone bricks", "white chiseled stone bricks", "white bricks", + "white nether brick block", "white sandstone", "white smooth sandstone", "white chiseled sandstone", + "white quartz block", "white pillar quartz", "white chiseled quartz", "white hardened clay", + "white glass", "white chest", "white ender chest", "white end portal frame", + + "white wood stairs", "white cobblestone stairs", "white stone brick stairs", "white sandstone stairs", + "white brick stairs", "white nether brick stairs", "white quartz stairs", "unused", + "white pumpkin", "white jack o' lantern", "white melon", "white cactus", "white sponge", + "white anvil", "white slightly damaged anvil", "white very damaged anvil", + + "white wood slab", "white cobblestone slab", "white stone brick slab", "white sandstone slab", + "white brick slab", "white nether brick slab", "white quartz slab", "white stone slab", + "white cobblestone wall", "white fence", "white netherbrick fence", "white fence gate", + "white snow", "white daylight detector", "white stone button", "white wooden button", + + "white bookshelf", "white crafting table", "white furnace", "white dispenser", "white dropper", + "white piston", "white note block", "white jukebox", "white redstone lamp", "white tnt", "white hay bale", + "white stone pressure plate", "white wooden pressure plate", "white weighted pressure plate (light)", + "white weighted pressure plate (heavy)", "white trapdoor", + + "white enderdragon egg", "white command block", "white spawner", "white doubleslab", + "white smooth stone doubleslab", "white smooth sandstone doubleslab", "white farmland", "white wet farmland", + "white furnace back", "white lit redstone lamp", "white error block", "white cake block", + "white eaten cake block", "white nether portal block", "white flipped nether portal block", "unused", + + "white left oak log", "white left birch log", "white left jungle log", + "white right oak log", "white right birch log", "white right jungle log", + "white full bark oak log", "white full bark birch log", "white full bark jungle log", + "white flipped pumpkin", "white flipped jack o' lantern", "white uncarved pumpkin", + "white left pillar quartz", "white right pillar quartz", "white left hay bale", "white right hay bale", + + "white mushroom pore", "white mushroom stem", "white mushroom full stem", "white brown mushroom left", + "white brown mushroom center", "white brown mushroom right", "white brown mushroom full block", + "white red mushroom left", "white red mushroom center", "white red mushroom right", + "white red mushroom full block", "unused", "white locked chest", + "white glowing obsidian", "white nether reactor", "white stonecutter", + + "tfda white bedrock", "tfda white redstone ore", "tfda white obsidian", "tfda white glowstone", + "white air glyph", "white water glyph", "white earth glyph", "white fire glyph", + "unused", "tfda white ice", "tfda white mycelium", "white cracked icy bricks", + "tfda white chiseled sandstone", "tfda white hardened clay", "tfda white cobblestone", "tfda white bricks", + + "white glowing red cloth", "white light blue cloth", "white yellow cloth", + "white purple cloth", "white green cloth", "white red cloth", + "white glowing red carpet", "tfda white light blue carpet", "tfda white yellow carptet", + "tfda white purple carpet", "tfda white green carpet", "tfda white red carpet", + "white icy brick fence", "tfda white trapped chest", "unused", "unused", + + "glowing nether star", "glowing bottle o' enchanting", "glowing golden apple", "glowing enchanted book", + "glowing written book", "unused", "unused", "unused", "celestial magic powder", "arcane magic powder", + "aetheric magic powder", "sagittan magic powder", "tenacious magic powder", "lithe magic powder", + "unearthly magic powder", "divine magic powder", + + "tfda clock noon", "tfda clock sunset", "tfda clock sunrise", "tfda clock midnight", + "unused", "unused", "unused", "unused", + "unused", "unused", "unused", "unused", "unused", "unused", "unused", "unused", + + "large north arrow", "large northeast arrow", "large east arrow", "large southeast arrow", + "large south arrow", "large southwest arrow", "large west arrow", "large northwest arrow", + "unused", "unused", "unused", "unused", "unused", "unused", "unused", "unused", + + "large symbol cycloid emblem aa", "large symbol snub diamond twist aa", "large symbol diamond twist aa", + "large symbol astroid fractal aa", "large symbol tight astroid twist aa", "large symbol astroid twist aa", + "unused", "unused", "large symbol cycloid emblem", "large symbol snub diamond twist", + "large symbol diamond twist", "large symbol astroid fractal", "large symbol tight astroid twist", + "large symbol astroid twist", "unused", "unused", + + "large symbol astroid lace aa", "large symbol astroid lace thin aa", "large symbol astroid lace split aa", + "large symbol astroid lace small split aa", "large symbol ashndar aa", "large symbol quest aa", "unused", + "unused", "large symbol astroid lace", "large symbol astroid lace thin", "large symbol astroid lace split", + "large symbol astroid lace small split", "large symbol ashndar", "large symbol quest", "unused", "unused", + + "large symbol x tight aa", "large symbol x tight even-odd aa", "large symbol adventure aa", "large symbol x even-odd aa", + "unused", "unused", "unused", "unused", + "large symbol x tight", "large symbol x tight even-odd", "large symbol adventure", "large symbol x even-odd", + "unused", "unused", "unused", "unused", + + "large symbol corner pair aa", "large symbol corner diamond aa", "large symbol inverted corner diamond aa", + "large symbol overlay rune aa", "large symbol minigame aa", "unused", "unused", "unused", + "large symbol corner pair", "large symbol corner diamond", "large symbol inverted corner diamond", + "large symbol overlay rune", "large symbol minigame", "unused", "unused", "unused", + + "large quest icon", "large ashndar icon", "large adventure icon", "large minigame icon", + "unused", "unused", "unused", "unused", + "unused", "unused", "unused", "unused", "unused", "unused", "unused", "unused", + + "large white quest icon", "large white ashndar icon", "large white adventure icon", + "large white minigame icon", "unused", "unused", + "unused", "unused", "unused", "unused", "unused", "unused", "unused", "unused", "unused", "unused"}; + + CHARACTER_NAME_MAP = new HashMap(); + for (int i = 0; i < CHARACTER_NAME_LIST.length; i++) { + CHARACTER_NAME_MAP.put(CHARACTER_NAME_LIST[i], (char) (i + UNICODE_OFFSET)); + } + } + + public static String convertInput(String inputText) { + StringBuilder newString = new StringBuilder(inputText.length()); + String[] tokens = inputText.split("[\\:\\}]"); + for (int i = 0; i < tokens.length; i++) { + if (i % 2 > 0) { + Character translatedChar = CHARACTER_NAME_MAP.get(tokens[i].toLowerCase()); + if (translatedChar == null) { + if (translatedChar == null) { + newString.append(':').append(tokens[i]).append(':'); + } else { + appendCharacter(newString, translatedChar); + } + } else { + appendCharacter(newString, translatedChar); + } + } else { + newString.append(tokens[i]); + } + } + return newString.toString(); + } + + private static void appendCharacter(StringBuilder string, Character character) { + if (escape) { + string.append("��f"); + } + string.append(character); + if (escape) { + string.append("��0"); + } + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/Identifiable.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/Identifiable.java new file mode 100644 index 0000000..5d5f34b --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/Identifiable.java @@ -0,0 +1,15 @@ +package net.grandtheftmc.core.util; + +/** + * This interface is especially useful for storing serialized objects in a map, + * and acts as a reminder to engineers to mark an object with an id. + */ +public interface Identifiable<T> { + + /** + * Get the identification for this object. + * + * @return The identification for this object. + */ + T getId(); +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/ImageRenderer.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/ImageRenderer.java new file mode 100644 index 0000000..67f2d7a --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/ImageRenderer.java @@ -0,0 +1,73 @@ +package net.grandtheftmc.core.util; + +import java.awt.Dimension; +import java.awt.Graphics2D; +import java.awt.image.BufferedImage; +import java.io.IOException; +import java.lang.ref.SoftReference; +import java.net.URL; +import java.util.HashMap; +import java.util.UUID; + +import javax.imageio.ImageIO; + +import com.google.common.collect.Maps; +import org.bukkit.ChatColor; +import org.bukkit.entity.Player; +import org.bukkit.map.MapCanvas; +import org.bukkit.map.MapRenderer; +import org.bukkit.map.MapView; + +/** + * Created by Luke Bingham on 12/09/2017. + */ +public class ImageRenderer extends MapRenderer { + + public static final HashMap<UUID, ImageRenderer> RENDERED_USERS = Maps.newHashMap(); + + // So fancy. + private BufferedImage cacheImage; + + public ImageRenderer(String url) throws IOException { + this.cacheImage = this.getImage(url); + } + + @Override + public void render(MapView view, MapCanvas canvas, Player player) { +// if(RENDERED_USERS.containsKey(player.getUniqueId())) return; + RENDERED_USERS.put(player.getUniqueId(), this); + + if (this.cacheImage != null) { + canvas.drawImage(0, 0, this.cacheImage); + } else { + player.sendMessage(ChatColor.RED + "Attempted to render the image, but the cached image was null!"); + } + } + + private BufferedImage getImage(String url) throws IOException { + boolean useCache = ImageIO.getUseCache(); + + // Temporarily disable cache, if it isn't already, + // so we can get the latest image. + ImageIO.setUseCache(false); + + BufferedImage image = resize(new URL(url), new Dimension(128, 128)); + // TODO find import for RenderUtils + //RenderUtils.resizeImage(image); + + // Renable it with the old value. + ImageIO.setUseCache(useCache); + + return image; + } + + private BufferedImage resize(final URL url, final Dimension size) throws IOException { + final BufferedImage image = ImageIO.read(url); + final BufferedImage resized = new BufferedImage(size.width, size.height, BufferedImage.TYPE_INT_ARGB); + final Graphics2D g = resized.createGraphics(); + g.drawImage(image, 0, 0, size.width, size.height, null); + g.dispose(); + return resized; + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/ItemAttributes.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/ItemAttributes.java new file mode 100644 index 0000000..e5d219c --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/ItemAttributes.java @@ -0,0 +1,112 @@ +package net.grandtheftmc.core.util; + + +import org.bukkit.Bukkit; +import org.bukkit.inventory.ItemStack; + +import java.lang.reflect.InvocationTargetException; +import java.util.ArrayList; +import java.util.List; + +public class ItemAttributes { + private Object modifiers; + + public ItemAttributes() { + try { + this.modifiers = ReflectionUtils.getNMSClass("NBTTagList").newInstance(); + if (this.modifiers == null) { + Bukkit.getLogger().info("[ItemAttributeAPI] Incompatible Server version! Missing classes."); + } + } catch (InstantiationException | IllegalAccessException e) { + Bukkit.getLogger().info("[ItemAttributeAPI] Incompatible server version! Some methods can't be applied."); + } + } + + public void addModifier(AttributeModifier modifier) { + if (this.modifiers != null) { + try { + this.modifiers.getClass().getMethod("add", new Class[]{ReflectionUtils.getNMSClass("NBTBase")}).invoke(this.modifiers, modifier.getNBT()); + } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e) { + Bukkit.getLogger().info("[ItemAttributeAPI] Incompatible server version! Some methods can't be applied."); + } + } + } + + public void removeModifier(int i) { + if (this.modifiers != null) { + try { + try { + this.modifiers.getClass().getMethod("a", new Class[]{Integer.TYPE}).invoke(this.modifiers, i); + } catch (NoSuchMethodException e) { + this.modifiers.getClass().getMethod("remove", new Class[]{Integer.TYPE}).invoke(this.modifiers, i); + } + } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e) { + Bukkit.getLogger().info("[ItemAttributeAPI] Incompatible server version! Some methods can't be applied."); + } + } + } + + public void removeModifier(AttributeModifier modifier) { + if (this.modifiers != null) { + try { + int size = (Integer) this.modifiers.getClass().getMethod("size", new Class[0]).invoke(this.modifiers); + for (int i = 0; i < size; i++) { + if (this.modifiers.getClass().getMethod("get", new Class[]{Integer.TYPE}).invoke(this.modifiers, new Object[]{Integer.valueOf(i)}).equals(modifier.getNBT())) { + try { + this.modifiers.getClass().getMethod("a", new Class[]{Integer.TYPE}).invoke(this.modifiers, i); + } catch (NoSuchMethodException e) { + this.modifiers.getClass().getMethod("remove", new Class[]{Integer.TYPE}).invoke(this.modifiers, i); + } + } + } + } catch (IllegalAccessException | InvocationTargetException | SecurityException | NoSuchMethodException e) { + Bukkit.getLogger().info("[ItemAttributeAPI] Incompatible server version! Some methods can't be applied."); + } + } + } + + public List<AttributeModifier> getModifiers() { + if (this.modifiers != null) { + try { + List<AttributeModifier> modifiers = new ArrayList(); + int size = (Integer) this.modifiers.getClass().getMethod("size", new Class[0]).invoke(this.modifiers); + for (int i = 0; i < size; i++) { + modifiers.add(new AttributeModifier(this.modifiers.getClass().getMethod("get", new Class[]{Integer.TYPE}).invoke(this.modifiers, i))); + } + return modifiers; + } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e) { + Bukkit.getLogger().info("[ItemAttributeAPI] Incompatible server version! Some methods can't be applied."); + return null; + } + } + return null; + } + + public ItemStack apply(ItemStack item) { + try { + Object itemNMS = ReflectionUtils.getCBClass("inventory.CraftItemStack").getMethod("asNMSCopy", new Class[]{ItemStack.class}).invoke(null, item); + itemNMS.getClass().getMethod("a", new Class[]{String.class, ReflectionUtils.getNMSClass("NBTBase")}).invoke(itemNMS, "AttributeModifiers", this.modifiers); + return (ItemStack) ReflectionUtils.getCBClass("inventory.CraftItemStack").getMethod("asBukkitCopy", new Class[]{ReflectionUtils.getNMSClass("ItemStack")}).invoke(null, itemNMS); + } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e) { + Bukkit.getLogger().info("[ItemAttributeAPI] Incompatible server version! Some methods can't be applied."); + } + return null; + } + + public void getFromStack(ItemStack item) { + try { + Object itemNMS = ReflectionUtils.getCBClass("inventory.CraftItemStack").getMethod("asNMSCopy", new Class[]{ItemStack.class}).invoke(null, item); + Object itemNMSTag = itemNMS.getClass().getMethod("getTag", new Class[0]).invoke(itemNMS); + this.modifiers = itemNMSTag.getClass().getMethod("getList", new Class[]{String.class, Integer.TYPE}).invoke(itemNMSTag, "AttributeModifiers", 10); + if (this.modifiers == null) { + this.modifiers = ReflectionUtils.getNMSClass("NBTTagList").newInstance(); + } + } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException | InstantiationException e) { + Bukkit.getLogger().info("[ItemAttributeAPI] Incompatible server version! Some methods can't be applied."); + } + } + + public String getVersion() { + return "1.1,Release"; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/ItemStackManager.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/ItemStackManager.java new file mode 100644 index 0000000..260e6fd --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/ItemStackManager.java @@ -0,0 +1,105 @@ +package net.grandtheftmc.core.util; + +import java.util.HashMap; + +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryType; +import org.bukkit.inventory.ItemStack; + +import com.google.common.collect.Maps; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.events.ItemStackEvent; + +/** + * Created by Luke Bingham on 06/08/2017. + */ +public class ItemStackManager implements Listener { + + public static final HashMap<Material, Integer> STACKABLES; + + static { + STACKABLES = Maps.newHashMap(); + new ItemStackManager(); + } + + public ItemStackManager() { + Bukkit.getPluginManager().registerEvents(this, Core.getInstance()); + } + + @EventHandler //TODO + protected final void onInventoryClick(InventoryClickEvent event) { + + if(event.isCancelled()) return; + if(event.getSlotType() == null) return; + boolean cursorStack = false; + if(event.getSlotType() == InventoryType.SlotType.RESULT) { + if(event.getRawSlot() == 0) { + return; + } + } + + ItemStack cursor = event.getCursor(), clicked = event.getCurrentItem(); + if(event.getClick() == ClickType.SHIFT_RIGHT || event.getClick() == ClickType.SHIFT_LEFT) { + ItemStackEvent stackEvent = new ItemStackEvent(clicked); + Bukkit.getPluginManager().callEvent(stackEvent); + + if(stackEvent.isClickOnly()) { + event.setCancelled(true); + ((Player) event.getWhoClicked()).updateInventory(); + return; + } + } + + // if one of the cursors or clicked is null, allow + if(cursor == null || clicked == null) return; + + // if they are not the same type, allow + if(cursor.getType() != clicked.getType()) return; + //if(!STACKABLES.containsKey(cursor.getType())) return; + if(cursor.getDurability() != clicked.getDurability()) return; + + ((Player) event.getWhoClicked()).updateInventory(); + if((clicked.getAmount() >= 64 || cursor.getAmount() >= 64) || (clicked.getAmount() + cursor.getAmount() > 64)) { + event.setCancelled(true); + return; + } + + if(!cursor.hasItemMeta() && !clicked.hasItemMeta()) { + ItemStackEvent stackEvent = new ItemStackEvent(clicked); + Bukkit.getPluginManager().callEvent(stackEvent); + + if(!stackEvent.isCancelled()) { + event.setCancelled(true); + if(!cursorStack) { + clicked.setAmount(clicked.getAmount() + cursor.getAmount()); + event.setCursor(new ItemStack(Material.AIR)); + } + ((Player) event.getWhoClicked()).updateInventory(); + } else event.setCancelled(true); + return; + } + + if(cursor.getItemMeta() == null || cursor.getItemMeta().getDisplayName() == null) return; + if(!cursor.getItemMeta().getDisplayName().equals(clicked.getItemMeta().getDisplayName())) + return; + + ItemStackEvent stackEvent = new ItemStackEvent(clicked); + Bukkit.getPluginManager().callEvent(stackEvent); + + if(!stackEvent.isCancelled()) { + event.setCancelled(true); + if(!cursorStack) { + clicked.setAmount(clicked.getAmount() + cursor.getAmount()); + event.setCursor(new ItemStack(Material.AIR)); + } + ((Player) event.getWhoClicked()).updateInventory(); + } else event.setCancelled(true); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/MathUtil.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/MathUtil.java new file mode 100644 index 0000000..202b234 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/MathUtil.java @@ -0,0 +1,28 @@ +package net.grandtheftmc.core.util; + +public class MathUtil { + + /** + * Get the percentage based on the distance between 'goal' and 'value' + * + * @param goal - Highest point + * @param value - Your input value (lower than 'goal') + * @return percentage + */ + public static double getPercentBetweenValues(double goal, double value) { + if(value >= goal) return 100.0; + return 100 - Math.abs(((goal - value) / goal) * 100); + } + + /** + * Get the percentage based on the distance between 'goal' and 'value' + * + * @param goal - Lowest point + * @param value - Your input value (higher than 'goal') + * @return percentage + */ + public static double getPercentBetweenValuesReverse(double goal, double value) { + if(goal >= value) return 100.0; + return 100 - Math.abs(((value - goal) / value) * 100); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/NMSUtil.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/NMSUtil.java new file mode 100644 index 0000000..3abf25c --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/NMSUtil.java @@ -0,0 +1,53 @@ +package net.grandtheftmc.core.util; + +import com.comphenix.protocol.wrappers.EnumWrappers; +import com.comphenix.protocol.wrappers.WrappedChatComponent; +import net.grandtheftmc.core.wrapper.packet.out.WrapperPlayServerPlayerListHeaderFooter; +import net.grandtheftmc.core.wrapper.packet.out.WrapperPlayServerWorldBorder; +import org.bukkit.entity.Player; + +public class NMSUtil { + + public static void sendTabTitle(Player player, String header, String footer) { +// org.bukkit.craftbukkit.v1_12_R1.entity.CraftPlayer craftplayer = (org.bukkit.craftbukkit.v1_12_R1.entity.CraftPlayer) player; +// net.minecraft.server.v1_12_R1.PlayerConnection connection = craftplayer.getHandle().playerConnection; +// net.minecraft.server.v1_12_R1.IChatBaseComponent JSONheader = net.minecraft.server.v1_12_R1.IChatBaseComponent.ChatSerializer.a("{\"text\": \"" + header + "\"}"); +// net.minecraft.server.v1_12_R1.IChatBaseComponent JSONfooter = net.minecraft.server.v1_12_R1.IChatBaseComponent.ChatSerializer.a("{\"text\": \"" + footer + "\"}"); +// net.minecraft.server.v1_12_R1.PacketPlayOutPlayerListHeaderFooter packet = new net.minecraft.server.v1_12_R1.PacketPlayOutPlayerListHeaderFooter(); +// try { +// Field headerField = packet.getClass().getDeclaredField("a"); +// headerField.setAccessible(true); +// headerField.set(packet, JSONheader); +// headerField.setAccessible(!headerField.isAccessible()); +// +// Field footerField = packet.getClass().getDeclaredField("b"); +// footerField.setAccessible(true); +// footerField.set(packet, JSONfooter); +// footerField.setAccessible(!footerField.isAccessible()); +// } catch (Exception ex) { +// ex.printStackTrace(); +// } +// connection.sendPacket(packet); + + WrapperPlayServerPlayerListHeaderFooter wrappedPacket = new WrapperPlayServerPlayerListHeaderFooter(); + wrappedPacket.setHeader(WrappedChatComponent.fromJson("{\"text\": \"" + header + "\"}")); + wrappedPacket.setFooter(WrappedChatComponent.fromJson("{\"text\": \"" + footer + "\"}")); + wrappedPacket.sendPacket(player); + } + + public static void setWorldBoarderTint(Player player, int percentage) { +// if (percentage < 0) percentage = 0; +// if (percentage > 100) percentage = 100; +// +// WrapperPlayServerWorldBorder wrappedPacket = new WrapperPlayServerWorldBorder(); +// wrappedPacket.setCenterX(player.getLocation().getX()); +// wrappedPacket.setCenterZ(player.getLocation().getZ()); +// wrappedPacket.setWarningDistance(5000000 + percentage * 2000000); +// wrappedPacket.setWarningTime(0); +// wrappedPacket.setAction(EnumWrappers.WorldBorderAction.INITIALIZE); +// wrappedPacket.setRadius(6.0E7D); +// wrappedPacket.setOldRadius(6.0E7D); +// wrappedPacket.setSpeed(0L); +// wrappedPacket.sendPacket(player); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/NMSVersion.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/NMSVersion.java new file mode 100644 index 0000000..80d99ae --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/NMSVersion.java @@ -0,0 +1,59 @@ +package net.grandtheftmc.core.util; + +import org.bukkit.entity.Player; + +import net.grandtheftmc.core.Core; +import us.myles.ViaVersion.api.Via; + +/** + * Created by Luke Bingham on 02/08/2017. + */ +public enum NMSVersion { + MC_1_8(47), + + MC_1_9(107), + MC_1_9_1(108), + MC_1_9_2(109), + MC_1_9_4(110), + + MC_1_10(210), + + MC_1_11(315), + MC_1_11_2(316), + + MC_1_12(335), + MC_1_12_1(338), + MC_1_12_2(340), + + MC_1_13(393), + MC_1_13_1(401), + + UNKNOWN(0); + ; + + private int protocol; + + private NMSVersion(int protocol) { + this.protocol = protocol; + } + + public int getProtocol() { + return protocol; + } + + public static NMSVersion getVersion(int id) { + for(NMSVersion version : values()) + if(version.protocol == id) return version; + return UNKNOWN; + } + + public static NMSVersion getVersion(Player player) { + int id = Via.getAPI().getPlayerVersion(player.getUniqueId()); + + Core.log("[NMSVersion][Resolve] Player " + player.getName() + " has version id=" + id); + + for(NMSVersion version : values()) + if(version.protocol == id) return version; + return UNKNOWN; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/NumeralUtil.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/NumeralUtil.java new file mode 100644 index 0000000..50461db --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/NumeralUtil.java @@ -0,0 +1,29 @@ +package net.grandtheftmc.core.util; + +import java.text.NumberFormat; +import java.util.Locale; + +/** + * Created by Luke Bingham on 01/08/2017. + */ +public class NumeralUtil { + /** + * If the given Number is, 29956 + * The returned state will be, 29,956.00 + */ + public static <T extends Number> String toCurrency(T number) { + return String.format("%,.2f", number); + } + + /** + * If the given Number is, 29956 + * If the symbol depends on the Locale. + * en_US = $ + * en_GB = £ + * + * The returned state will be, $29,956.00 + */ + public static <T extends Number> String toCurrency(T number, Locale locale) { + return NumberFormat.getCurrencyInstance(locale).format(number); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/PlayerAndIP.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/PlayerAndIP.java new file mode 100644 index 0000000..40080d2 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/PlayerAndIP.java @@ -0,0 +1,28 @@ +package net.grandtheftmc.core.util; + +import org.bukkit.entity.Player; + +public final class PlayerAndIP { + private final Player player; + private final String ip; + + private final CoreLocation coreLocation; + + public PlayerAndIP(Player player, String ip, CoreLocation coreLocation) { + this.player = player; + this.ip = ip; + this.coreLocation = coreLocation; + } + + public Player getPlayer() { + return player; + } + + public String getIp() { + return ip; + } + + public CoreLocation getCoreLocation() { + return coreLocation; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/Playtime.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/Playtime.java new file mode 100644 index 0000000..306a53d --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/Playtime.java @@ -0,0 +1,8 @@ +package net.grandtheftmc.core.util; + +import java.util.HashMap; +import java.util.Map; + +public class Playtime { + public static Map<String, Long> playtime = new HashMap<>(); +} \ No newline at end of file diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/PluginAssociated.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/PluginAssociated.java new file mode 100644 index 0000000..18cf169 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/PluginAssociated.java @@ -0,0 +1,19 @@ +package net.grandtheftmc.core.util; + +import org.bukkit.plugin.Plugin; + +/** + * Allows super classes to remind that an interface or object might need a + * plugin associated with it. + * + * @author sbahr + */ +public interface PluginAssociated<P extends Plugin> { + + /** + * Get the plugin that is associated with this object. + * + * @return The plugin associated with this object. + */ + P getPlugin(); +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/ReflectionUtils.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/ReflectionUtils.java new file mode 100644 index 0000000..fc1ab37 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/ReflectionUtils.java @@ -0,0 +1,63 @@ +package net.grandtheftmc.core.util; + +import org.bukkit.Bukkit; + +import java.lang.reflect.Field; + +public final class ReflectionUtils +{ + private ReflectionUtils() { + } + + public static Class<?> getNMSClass(String name) + { + try + { + return Class.forName("net.minecraft.server." + Bukkit.getServer().getClass().getName().split("\\.")[3] + '.' + name); + } + catch (ClassNotFoundException e) + { + Bukkit.getLogger().info("[Reflection] Can't find NMS Class! (net.minecraft.server." + Bukkit.getServer().getClass().getName().split("\\.")[3] + '.' + name + ')'); + } + return null; + } + + public static Class<?> getCBClass(String name) + { + try + { + return Class.forName("org.bukkit.craftbukkit." + Bukkit.getServer().getClass().getName().split("\\.")[3] + '.' + name); + } + catch (ClassNotFoundException e) + { + Bukkit.getLogger().info("[Reflection] Can't find CB Class! (org.bukkit.craftbukkit." + Bukkit.getServer().getClass().getName().split("\\.")[3] + '.' + name + ')'); + } + return null; + } + + public static <K, V> K setField(K obj, String field, V value) { + try { + Field f = obj.getClass().getDeclaredField(field); + if(!f.isAccessible()) f.setAccessible(true); + f.set(obj, value); + } catch (NoSuchFieldException | IllegalAccessException e) { + e.printStackTrace(); + } + return obj; + } + + public static <T, E> E getField(T obj, String field, Class<E> clazz) { + try { + Field f = obj.getClass().getDeclaredField(field); + if(!f.isAccessible()) f.setAccessible(true); + E e = (E) f.get(obj); + if(clazz.isInstance(e)) + return e; + } catch (NoSuchFieldException | IllegalAccessException e) { + e.printStackTrace(); + } + + return null; + } +} + diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/ServerUtil.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/ServerUtil.java new file mode 100644 index 0000000..cc2fba0 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/ServerUtil.java @@ -0,0 +1,33 @@ +package net.grandtheftmc.core.util; + +import net.grandtheftmc.core.Core; +import org.bukkit.Bukkit; + +/** + * Created by Luke Bingham on 29/08/2017. + */ +public class ServerUtil { + + private static final boolean DEBUG; + static { DEBUG = Core.getSettings().getNumber() <= 0; } + + public static void runTask(Runnable runnable) { + Bukkit.getScheduler().runTask(Core.getInstance(), runnable); + } + + public static void runTaskLater(Runnable runnable, long time) { + Bukkit.getScheduler().runTaskLater(Core.getInstance(), runnable, time); + } + + public static void runTaskAsync(Runnable runnable) { + Bukkit.getScheduler().runTaskAsynchronously(Core.getInstance(), runnable); + } + + public static void runTaskLaterAsync(Runnable runnable, long time) { + Bukkit.getScheduler().runTaskLaterAsynchronously(Core.getInstance(), runnable, time); + } + + public static void debug(String str) { + if(DEBUG) Bukkit.getConsoleSender().sendMessage(str); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/Similarity.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/Similarity.java new file mode 100644 index 0000000..99b89f3 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/Similarity.java @@ -0,0 +1,8 @@ +package net.grandtheftmc.core.util; + +/** + * Created by Luke Bingham on 21/07/2017. + */ +public interface Similarity<T> { + boolean isSimilar(T obj); +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/Slot.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/Slot.java new file mode 100644 index 0000000..d3d1639 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/Slot.java @@ -0,0 +1,25 @@ +package net.grandtheftmc.core.util; + +public enum Slot { + + MAIN_HAND("mainhand"), + OFF_HAND("offhand"), + FEET("feet"), + LEGS("legs"), + CHEST("chest"), + HEAD("head"); + private final String name; + + Slot(String name) { + this.name = name; + } + + /** + * Get the predefined, global and unique name of this slot. + * + * @return The name + */ + public String getName() { + return this.name; + } +} \ No newline at end of file diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/SoundEffect.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/SoundEffect.java new file mode 100644 index 0000000..a439097 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/SoundEffect.java @@ -0,0 +1,131 @@ +package net.grandtheftmc.core.util; + +import java.util.UUID; + +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitRunnable; + +import net.grandtheftmc.core.Core; + +public class SoundEffect { + + private Sound sound; + private float volume; + private float pitch; + private int delay; + + public SoundEffect(Sound sound, float volume, float pitch) { + this.sound = sound; + this.volume = volume; + this.pitch = pitch; + } + + public SoundEffect(Sound sound, float volume, float pitch, int delay) { + this.sound = sound; + this.volume = volume; + this.pitch = pitch; + this.delay = delay; + } + + public void play() { + if (this.hasDelay()) { + new BukkitRunnable() { + @Override + public void run() { + for (Player player : Bukkit.getOnlinePlayers()) + player.playSound(player.getLocation(), SoundEffect.this.sound, SoundEffect.this.volume, SoundEffect.this.pitch); + } + }.runTaskLater(Core.getInstance(), this.delay); + return; + } + for (Player player : Bukkit.getOnlinePlayers()) + player.playSound(player.getLocation(), this.sound, this.volume, this.pitch); + } + + public void play(Location location) { + if (this.hasDelay()) { + new BukkitRunnable() { + @Override + public void run() { + for (Player player : Bukkit.getOnlinePlayers()) + player.playSound(location, SoundEffect.this.sound, SoundEffect.this.volume, SoundEffect.this.pitch); + } + }.runTaskLater(Core.getInstance(), this.delay); + return; + } + for (Player player : Bukkit.getOnlinePlayers()) + player.playSound(location, this.sound, this.volume, this.pitch); + } + + public void play(Player player) { + UUID uuid = player.getUniqueId(); + if (this.hasDelay()) { + new BukkitRunnable() { + @Override + public void run() { + Player player = Bukkit.getPlayer(uuid); + if (player != null) + player.playSound(player.getLocation(), SoundEffect.this.sound, SoundEffect.this.volume, SoundEffect.this.pitch); + } + }.runTaskLater(Core.getInstance(), this.delay); + return; + } + player.playSound(player.getLocation(), this.sound, this.volume, this.pitch); + } + + public void play(Player player, Location location) { + UUID uuid = player.getUniqueId(); + if (this.hasDelay()) { + new BukkitRunnable() { + @Override + public void run() { + Player player = Bukkit.getPlayer(uuid); + if (player != null) + player.playSound(location, SoundEffect.this.sound, SoundEffect.this.volume, SoundEffect.this.pitch); + } + }.runTaskLater(Core.getInstance(), this.delay); + return; + } + player.playSound(location, this.sound, this.volume, this.pitch); + } + + public Sound getSound() { + return this.sound; + } + + public void setSound(Sound sound) { + this.sound = sound; + } + + public float getVolume() { + return this.volume; + } + + public void setVolume(float volume) { + this.volume = volume; + } + + public float getPitch() { + return this.pitch; + } + + public void setPitch(float pitch) { + this.pitch = pitch; + } + + public int getDelay() { + return this.delay; + } + + public void setDelay(int delay) { + this.delay = delay; + } + + public boolean hasDelay() { + return this.delay > 0; + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/State.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/State.java new file mode 100644 index 0000000..4d55e5c --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/State.java @@ -0,0 +1,23 @@ +package net.grandtheftmc.core.util; + +/** + * Created by Timothy Lampen on 8/21/2017. + */ +public enum State { + ON(1), + OFF(0), + LOCKED(-1); + + private final int num; + State(int num){ + this.num = num; + } + + public int toInt(){ + return num; + } + + public int getInt() { + return num; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/StringUtil.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/StringUtil.java new file mode 100644 index 0000000..a514c91 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/StringUtil.java @@ -0,0 +1,88 @@ +package net.grandtheftmc.core.util; + +import org.bukkit.ChatColor; +import org.bukkit.entity.Player; + +public class StringUtil { + + private final static int CENTER_PX = 154; + private final static int CENTER_MENU_PX = 80; + + public static void sendCenteredMessage(Player player, String message) { + if (message == null || message.equals("")) player.sendMessage(""); + message = ChatColor.translateAlternateColorCodes('&', message); + + int messagePxSize = 0; + boolean previousCode = false; + boolean isBold = false; + + for (char c : message.toCharArray()) { + if (c == '§') { + previousCode = true; continue; + } + + else if (previousCode) { + previousCode = false; + if (c == 'l' || c == 'L') { + isBold = true; continue; + } else isBold = false; + } + + else { + DefaultFontInfo dFI = DefaultFontInfo.getDefaultFontInfo(c); + messagePxSize += isBold ? dFI.getBoldLength() : dFI.getLength(); + messagePxSize++; + } + } + + int halvedMessageSize = messagePxSize / 2; + int toCompensate = CENTER_PX - halvedMessageSize; + int spaceLength = DefaultFontInfo.SPACE.getLength() + 1; + int compensated = 0; + StringBuilder sb = new StringBuilder(); + while (compensated < toCompensate) { + sb.append(" "); + compensated += spaceLength; + } + player.sendMessage(sb.toString() + message); + } + + public static String getCenteredMenuText(String message) { + message = ChatColor.translateAlternateColorCodes('&', message); + + int messagePxSize = 0; + boolean previousCode = false; + boolean isBold = false; + + for (char c : message.toCharArray()) { + if (c == '§') { + previousCode = true; continue; + } + + else if (previousCode) { + previousCode = false; + if (c == 'l' || c == 'L') { + isBold = true; continue; + } else isBold = false; + } + + else { + DefaultFontInfo dFI = DefaultFontInfo.getDefaultFontInfo(c); + messagePxSize += isBold ? dFI.getBoldLength() : dFI.getLength(); + messagePxSize++; + } + } + + int halvedMessageSize = messagePxSize / 2; + int toCompensate = CENTER_MENU_PX - halvedMessageSize; + int spaceLength = DefaultFontInfo.SPACE.getLength() + 1; + int compensated = 0; + StringBuilder sb = new StringBuilder(); + while (compensated < toCompensate) { + sb.append(" "); + compensated += spaceLength; + } + + return sb.toString() + message; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/TimeFormatter.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/TimeFormatter.java new file mode 100644 index 0000000..24260a8 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/TimeFormatter.java @@ -0,0 +1,45 @@ +package net.grandtheftmc.core.util; + +import java.util.concurrent.TimeUnit; + +public class TimeFormatter { + private final TimeUnit timeUnit; + private Long time; + + public TimeFormatter(TimeUnit timeUnit, Long time) { + this.timeUnit = timeUnit; + this.time = time; + } + + public Long getTime() { + return new Long(this.time); + } + + public void setTime(Long time) { + this.time = time; + } + + public TimeUnit getTimeUnit() { + return this.timeUnit; + } + + public Long getSeconds() { + return timeUnit.toSeconds(time) - (timeUnit.toMinutes(time) * 60); + } + + public Long getMinutes() { + return timeUnit.toMinutes(time) - (timeUnit.toHours(time) * 60); + } + + public Long getHours() { + return timeUnit.toHours(time) - (timeUnit.toDays(time) * 24); + } + + public Long getDays() { + return timeUnit.toDays(time); + } + + public Long getMillis() { + return timeUnit.toMillis(time); + } +} \ No newline at end of file diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/Title.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/Title.java new file mode 100644 index 0000000..1dcc943 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/Title.java @@ -0,0 +1,69 @@ +package net.grandtheftmc.core.util; + +import org.bukkit.entity.Player; + +public class Title { + + private String title; + private String subtitle; + private int fadeIn; + private int stay; + private int fadeOut; + + public Title(String title, String subtitle, int fadeIn, int stay, int fadeOut) { + this.title = title; + this.subtitle = subtitle; + this.fadeIn = fadeIn; + this.stay = stay; + this.fadeOut = fadeOut; + } + + public String getTitle() { + return this.title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getSubtitle() { + return this.subtitle; + } + + public void setSubtitle(String subtitle) { + this.subtitle = subtitle; + } + + public int getFadeIn() { + return this.fadeIn; + } + + public void setFadeIn(int fadeIn) { + this.fadeIn = fadeIn; + } + + public int getStay() { + return this.stay; + } + + public void setStay(int stay) { + this.stay = stay; + } + + public int getFadeOut() { + return this.fadeOut; + } + + public void setFadeOut(int fadeOut) { + this.fadeOut = fadeOut; + } + + public void play() { + Utils.sendTitle(this); + } + + public void play(Player player) { + Utils.sendTitle(player, this); + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/TopValue.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/TopValue.java new file mode 100644 index 0000000..d315eab --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/TopValue.java @@ -0,0 +1,55 @@ +package net.grandtheftmc.core.util; + +public class TopValue implements Identifiable<String>, Comparable<TopValue>{ + + /** The identifier of this top value*/ + private String id; + /** The amount for this value */ + private int amount; + + /** + * Construct a new TopValue, useful for sorting top scores. + * <p> + * The id can be any string, like a username or a uuid string. + * </p> + * + * @param id - the id for the top value + * @param amount - the amount of the value + */ + public TopValue(String id, int amount){ + this.id = id; + this.amount = amount; + } + + /** + * {@inheritDoc} + */ + @Override + public String getId() { + return id; + } + + /** + * Get the amount of this top value. + * + * @return The amount for this top value. + */ + public int getAmount(){ + return amount; + } + + /** + * {@inheritDoc} + */ + @Override + public int compareTo(TopValue o) { + if (this.amount > o.getAmount()){ + return 1; + } + else if (this.amount < o.getAmount()){ + return -1; + } + + return 0; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/TrigUtil.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/TrigUtil.java new file mode 100644 index 0000000..21d2f42 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/TrigUtil.java @@ -0,0 +1,17 @@ +package net.grandtheftmc.core.util; + +import org.bukkit.Location; + +public class TrigUtil { + + public static float wrapAngleTo180_float(float value) { + value %= 360.0F; + if (value >= 180.0F) value -= 360.0F; + if (value < -180.0F) value += 360.0F; + return value; + } + + public static double getDirection(Location from, Location to) { + return wrapAngleTo180_float((float) (Math.atan2(to.getZ() - from.getZ(), to.getX() - from.getX()) * 180.0D / Math.PI) - 90.0F); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/UUIDUtil.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/UUIDUtil.java new file mode 100644 index 0000000..1be0292 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/UUIDUtil.java @@ -0,0 +1,72 @@ +package net.grandtheftmc.core.util; + +import java.util.Optional; +import java.util.UUID; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * Created by Stephen + */ +public class UUIDUtil { + + /** + * A {@link Pattern} used to identify and/or split full UUIDs + */ + private static final Pattern PATTERN_UUID = Pattern.compile("^[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}$", Pattern.CASE_INSENSITIVE); + /** + * A {@link Pattern} used to identify and/or split trimmed UUIDs + */ + private static final Pattern PATTERN_TRIMMED_UUID = Pattern.compile("^([a-z0-9]{8})([a-z0-9]{4})([a-z0-9]{4})([a-z0-9]{4})([a-z0-9]{12})$", Pattern.CASE_INSENSITIVE); + + + /** + * Create a UUID safely from a {@link String}. + * + * @param string The {@link String} to deserialize into an {@link UUID} object. + * @return {@link Optional#empty()} if the provided {@link String} is illegal, otherwise an {@link Optional} + * containing the deserialized {@link UUID} object. + */ + public static Optional<UUID> createUUID(String string) { + + if (string == null) { + return Optional.empty(); + } + + UUID result = null; + + try { + // Is it a valid UUID? + if (!PATTERN_UUID.matcher(string).matches()) { + + // Un-trim UUID if it is trimmed + Matcher matcher = PATTERN_TRIMMED_UUID.matcher(string); + if (matcher.matches()) { + + StringBuilder sb = new StringBuilder(); + + for (int i = 1; i <= matcher.groupCount(); i++) { + if (i != 1) { + sb.append("-"); + } + + sb.append(matcher.group(i)); + } + + string = sb.toString(); + } else { + // Invalid UUID + string = null; + } + } + + if (string != null) { + result = UUID.fromString(string); + } + } catch (IllegalArgumentException ignored) { + // Useless data passed + } + + return Optional.ofNullable(result); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/Utils.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/Utils.java new file mode 100644 index 0000000..4c81759 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/Utils.java @@ -0,0 +1,1139 @@ +package net.grandtheftmc.core.util; + +import java.io.File; +import java.io.IOException; +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.nio.file.Files; +import java.nio.file.StandardCopyOption; +import java.text.NumberFormat; +import java.time.LocalDate; +import java.time.Month; +import java.time.ZoneId; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.Date; +import java.util.LinkedHashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import java.util.Random; +import java.util.UUID; +import java.util.concurrent.ThreadLocalRandom; +import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Color; +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.World; +import org.bukkit.WorldCreator; +import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; +import org.bukkit.block.BlockState; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.entity.Creature; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.PlayerInventory; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.inventory.meta.LeatherArmorMeta; +import org.bukkit.inventory.meta.SkullMeta; +import org.bukkit.plugin.Plugin; +import org.bukkit.potion.PotionEffect; +import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.util.Vector; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.ProtocolManager; +import com.comphenix.protocol.events.ListenerPriority; +import com.comphenix.protocol.events.PacketAdapter; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.events.PacketEvent; +import com.j0ach1mmall3.jlib.inventory.CustomEnchantment; +import com.j0ach1mmall3.jlib.methods.ReflectionAPI; +import com.j0ach1mmall3.jlib.player.JLibPlayer; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.boards.Board; +import net.grandtheftmc.core.boards.BoardType; +import net.grandtheftmc.core.database.dao.LogDAO; +import net.grandtheftmc.core.database.dao.ServerInfoDAO; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserDAO; +import net.md_5.bungee.api.ChatMessageType; +import net.md_5.bungee.api.chat.TextComponent; + +public final class Utils { + private static final Random RANDOM = new Random(); + private static final List<String> DEBUGGERS = Arrays.asList("Presidentx", "j0ach1mmall3", "Duci13", "KwonShiYun"); + private static final Class BLOCK_POSITION_CLASS = ReflectionAPI.getNmsClass("BlockPosition"); + private static final Class TILE_ENTITY_CHEST_CLASS = ReflectionAPI.getNmsClass("TileEntityChest"); + private static final Class PACKET_PLAY_OUT_BLOCK_ACTION_CLASS = ReflectionAPI.getNmsClass("PacketPlayOutBlockAction"); + private static final Class BLOCK_CLASS = ReflectionAPI.getNmsClass("Block"); + private static final Enchantment GLOW; + + static { + CustomEnchantment customEnchantment = new CustomEnchantment("GTMCore_Glow", new ArrayList<>(), null, 0, 1); + customEnchantment.register(); + GLOW = customEnchantment.getEnchantment(); + } + + private Utils() { + } + + public static boolean isInteger(String s) { + try { + Integer.parseInt(s); + } catch (NumberFormatException e) { + return false; + } + return true; + } + + public static boolean returnTrue() { + return true; + } + + public static Random getRandom() { + return RANDOM; + } + + public static void broadcast(String string) { + Bukkit.broadcastMessage(f(string)); + } + + public static void broadcastExcept(Player player, String string) { + Bukkit.getOnlinePlayers().stream().filter(p -> !p.equals(player)).forEach(p -> p.sendMessage(Utils.f(string))); + } + + public static ItemStack setLore(ItemStack is, String... lore){ + if(is==null) + return null; + List<String> l = new ArrayList<>(); + for(String s : lore){ + l.add(ChatColor.translateAlternateColorCodes('&', s)); + } + + ItemMeta im = is.getItemMeta(); + im.setLore(l); + is.setItemMeta(im); + return is; + } + + public static void m(int i) { + b(String.valueOf(i)); + } + + public static void b(String string) { + DEBUGGERS.stream().map(Bukkit::getPlayer).filter(p -> p != null).forEach(p -> p.sendMessage(string)); + Core.log(string); + } + + /** + * @param player The player whose line of sight we will use + * @param targetLocation The target location that is converted to a vector to form an angle with line of sight + * @return angle between entity's line of sight and the target vector + */ + public static double getAngleBetweenVectors(Player player, Location targetLocation) { + Vector lineOfSight = player.getEyeLocation().toVector(); + Vector target = targetLocation.toVector(); + target.setY(0); + lineOfSight.setY(0); + return lineOfSight.angle(target); + } + + public static List<Block> blocksFromTwoPoints(Location loc1, Location loc2) { + if (loc1 == null || loc2 == null) return null; + List<Block> blocks = new ArrayList<>(); + + int topBlockX = loc1.getBlockX() < loc2.getBlockX() ? loc2.getBlockX() : loc1.getBlockX(); + int bottomBlockX = loc1.getBlockX() > loc2.getBlockX() ? loc2.getBlockX() : loc1.getBlockX(); + + int topBlockY = loc1.getBlockY() < loc2.getBlockY() ? loc2.getBlockY() : loc1.getBlockY(); + int bottomBlockY = loc1.getBlockY() > loc2.getBlockY() ? loc2.getBlockY() : loc1.getBlockY(); + + int topBlockZ = loc1.getBlockZ() < loc2.getBlockZ() ? loc2.getBlockZ() : loc1.getBlockZ(); + int bottomBlockZ = loc1.getBlockZ() > loc2.getBlockZ() ? loc2.getBlockZ() : loc1.getBlockZ(); + + for (int x = bottomBlockX; x <= topBlockX; x++) { + for (int z = bottomBlockZ; z <= topBlockZ; z++) { + for (int y = bottomBlockY; y <= topBlockY; y++) { + blocks.add(loc1.getWorld().getBlockAt(x, y, z)); + } + } + } + + return blocks; + } + + public static Location getCenterOfBlock(Location loc) { + return loc.add(0.5, 0, 0.5); + } + + public static Location getCenterOfTwoBlocks(Location loc1, Location loc2) { + loc1 = getCenterOfBlock(loc1); + loc2 = getCenterOfBlock(loc2); + return new Location(loc1.getWorld(), (loc1.getX() + loc2.getX()) / 2, loc1.getY(), (loc1.getZ() + loc2.getZ()) / 2); + } + + public static Block getSecondHalfChest(Block block) { + Optional<Block> possibleChest = Stream.of(BlockFace.NORTH, BlockFace.EAST, BlockFace.SOUTH, BlockFace.WEST).map(block::getRelative).filter(b -> b.getType() == Material.CHEST || b.getType() == Material.TRAPPED_CHEST).findFirst(); + return possibleChest.isPresent() ? possibleChest.get() : null; + } + + public static void playDoorAnimation(Location location, boolean open) { + playDoorAnimation(location.getBlock().getState(), open); + } + + public static void playDoorAnimation(Player player, Location location, boolean open) { + playDoorAnimation(player, location.getBlock().getState(), open); + } + + public static void playDoorAnimation(BlockState state, boolean open) { + Bukkit.getOnlinePlayers().forEach(p -> playDoorAnimation(p, state, open)); + } + + @SuppressWarnings("deprecation") + public static void playDoorAnimation(Player player, BlockState state, boolean open) { + byte data = state.getRawData(); + byte b = data < 4 ? open ? (byte) (data + 4) : data : open ? data : (byte) (data - 4); + player.sendBlockChange(state.getLocation(), Material.IRON_DOOR_BLOCK, b); + } + + private static final TimeUnit[] TIME_UNITS = new TimeUnit[] {TimeUnit.DAYS, TimeUnit.HOURS, TimeUnit.MINUTES, TimeUnit.SECONDS}; + public static String formatMillisToTime(long time){ + int counter = 0; + StringBuilder sb = new StringBuilder(); + for(TimeUnit unit : TIME_UNITS) { + if(counter>=2) + break; + long amt = TimeUnit.MILLISECONDS.convert(time, unit); + if(amt>0) { + String strUnit = unit.toString().toLowerCase(); + strUnit = amt==1 ? strUnit.substring(0, strUnit.length()-1) : strUnit; + sb.append(amt + " " + strUnit + " "); + counter++; + } + } + return sb.toString().substring(0, sb.length()-1); + } + + public static void playIronDoorAnimation(Player player, Location loc, boolean open) { + // TODO + } + + public static boolean putItemInInventoryRandomly(Inventory inv, ItemStack item) { + List<Integer> list = new ArrayList<>(); + for (int i = 0; i < inv.getSize(); i++) { + if (inv.getItem(i) == null) list.add(i); + } + + if (list.isEmpty()) return false; + int i = list.get(RANDOM.nextInt(list.size())); + inv.setItem(i, item); + return true; + } + + public static String f(String string) { + return ChatColor.translateAlternateColorCodes('&', string); + } + + public static String fColor(String string) { + for (Character c : new Character[]{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}) { + if (string.contains("&" + c)) string = string.replace("&" + c, ChatColor.getByChar(c).toString()); + } + + return string; + } + + public static net.md_5.bungee.api.ChatColor getLastColor(String string) { + net.md_5.bungee.api.ChatColor chatColor = null; + for (Character c : new Character[]{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}) { + if (string.contains("&" + c)) { + chatColor = net.md_5.bungee.api.ChatColor.getByChar(c); + } + } + return chatColor; + } + + public static String deFormat(String string) { + return string.replace(ChatColor.COLOR_CHAR, '&'); + } + + public static String[] f(String[] array) { + if (array == null) return null; + for (int i = 0; i < array.length; i++) { + array[i] = Utils.f(array[i]); + } + + return array; + } + + public static String[] deFormat(String[] array) { + if (array == null) return null; + for (int i = 0; i < array.length; i++) { + array[i] = Utils.deFormat(array[i]); + } + + return array; + } + + public static Location blockLocationFromString(String string) { + if (string == null) return null; + String[] coords = string.split(","); + if (coords.length != 4) return null; + World world = Bukkit.getWorld(coords[0]); + if (world == null) return null; + int x; + int y; + int z; + try { + x = Integer.parseInt(coords[1]); + y = Integer.parseInt(coords[2]); + z = Integer.parseInt(coords[3]); + } catch (NumberFormatException e) { + return null; + } + + return new Location(world, x, y, z); + + } + + public static double round(double value) { + return new BigDecimal(value).setScale(2, RoundingMode.HALF_UP).doubleValue(); + } + + public static float round(float value) { + return new BigDecimal(value).setScale(2, RoundingMode.HALF_UP).floatValue(); + } + + public static String blockLocationToString(Location loc) { + if (loc == null) return null; + return loc.getWorld().getName() + ',' + loc.getBlockX() + ',' + loc.getBlockY() + ',' + loc.getBlockZ(); + } + + public static Location teleportLocationFromString(String string) { + if (string == null) return null; + String[] coords = string.split(","); + if (coords.length != 6) return null; + World world = Bukkit.getWorld(coords[0]); + double x; + double y; + double z; + float pitch; + float yaw; + try { + x = round(Double.parseDouble(coords[1])); + y = round(Double.parseDouble(coords[2])); + z = round(Double.parseDouble(coords[3])); + pitch = round(Float.parseFloat(coords[4])); + yaw = round(Float.parseFloat(coords[5])); + } catch (NumberFormatException e) { + return null; + } + + Location location = new Location(world, x, y, z); + location.setPitch(pitch); + location.setYaw(yaw); + return location; + } + + public static String teleportLocationToString(Location loc) { + if (loc == null) return null; + return loc.getWorld().getName() + ',' + round(loc.getX()) + ',' + round(loc.getY()) + ',' + round(loc.getZ()) + ',' + round(loc.getPitch()) + ',' + round(loc.getYaw()); + } + + public static void giveLobbyItems(Player player) { + if (player == null) return; + player.setHealth(20); + player.setMaxHealth(20); + player.setFoodLevel(20); + player.setGameMode(GameMode.SURVIVAL); + PlayerInventory inv = player.getInventory(); + inv.clear(); + player.getInventory().setHeldItemSlot(4); + + inv.setItem(0, createItem(Material.COMPASS, "&e&lServer Warper &7&lRight Click")); + inv.setItem(4, createItem(Material.ENDER_CHEST, "&6&lCosmetics &7&lRight Click")); + // inv.setItem(6, createItem(Material.NETHER_STAR, "&d&lStats &7&lRight Click")); + inv.setItem(7, createItem(Material.EXP_BOTTLE, "&a&lRewards &7&lRight Click")); + inv.setItem(8, createItem(Material.REDSTONE_COMPARATOR, "&5&lPreferences &7&lRight Click")); + + player.getActivePotionEffects().clear(); + inv.setArmorContents(null); + player.updateInventory(); + + } + + public static void sendLobbyJoinMessage(Player p, User user) { + p.sendMessage(new String[]{"", "", "", "", "", "", "", "", ""}); + String[] header = Core.getAnnouncer().getHeader(); + if (header != null && header.length > 0) ; + p.sendMessage(f(Core.getAnnouncer().getHeader())); + p.sendMessage(new String[]{"", + Utils.fc("Welcome, " + user.getColoredName(p) + "&r to the &7&l" + Core.getSettings().getNetworkShortName() + " &6&lHub&r!"), + Utils.fc("&e&l&oGTA in Minecraft!"), "", Utils.fc("&e&lSTORE &r&n" + Core.getSettings().getStoreLink()), + Utils.fc("&a&lSITE &r&n" + Core.getSettings().getWebsiteLink()), "", Utils.fc("&7Use the &eserver warper&7 to play!")}); + String[] footer = Core.getAnnouncer().getFooter(); + if (footer != null && footer.length > 0) ; + p.sendMessage(f(Core.getAnnouncer().getFooter())); + } + + public static void setInvisible(Player player, boolean b) { + Bukkit.getOnlinePlayers().stream().filter(p -> !Objects.equals(player, p)).forEach(p -> { + if (b) + p.hidePlayer(player); + else + p.showPlayer(player); + }); + } + + public static List<String> f(List<String> lore) { + return lore.stream().map(Utils::f).collect(Collectors.toList()); + } + + public static ItemStack createItem(Material material, String name, int amnt, String... lore) { + return createItem(material, name, toList(lore), amnt); + } + + public static ItemStack createItem(Material material, String name, List<String> lore, int amnt) { + ItemStack item = new ItemStack(material); + if (amnt > 0) + item.setAmount(amnt); + if (name != null || lore != null) { + ItemMeta meta = item.getItemMeta(); + if (name != null) + meta.setDisplayName(Utils.f(name)); + if (lore != null) + meta.setLore(f(lore)); + item.setItemMeta(meta); + } + return item; + } + + public static ItemStack createItem(Material material, int durability, String name, String... lore) { + return createItem(material, durability, name, toList(lore)); + } + + public static ItemStack createItem(Material material, int durability, String name, List<String> lore) { + ItemStack item = new ItemStack(material); + if (durability > 0) + item.setDurability((short) durability); + if (name != null || lore != null) { + ItemMeta meta = item.getItemMeta(); + if (name != null) + meta.setDisplayName(Utils.f(name)); + if (lore != null) + meta.setLore(f(lore)); + item.setItemMeta(meta); + } + return item; + } + + public static ItemStack createItem(Material material, int durability, String name, int amnt, String... lore) { + return createItem(material, durability, name, toList(lore), amnt); + } + + public static ItemStack createItem(Material material, int durability, String name, List<String> lore, int amnt) { + ItemStack item = new ItemStack(material); + if (amnt > 0) + item.setAmount(amnt); + if (durability > 0) + item.setDurability((short) durability); + if (name != null || lore != null) { + ItemMeta meta = item.getItemMeta(); + if (name != null) + meta.setDisplayName(Utils.f(name)); + if (lore != null) + meta.setLore(f(lore)); + item.setItemMeta(meta); + } + return item; + } + + public static ItemStack createItem(Material material, String name, String... lore) { + return createItem(material, name, toList(lore)); + } + + public static ItemStack createItem(Material material, String name, List<String> lore) { + ItemStack item = new ItemStack(material); + + if (name != null || lore != null) { + ItemMeta meta = item.getItemMeta(); + if (name != null) + meta.setDisplayName(Utils.f(name)); + if (lore != null) + meta.setLore(f(lore)); + item.setItemMeta(meta); + } + return item; + } + + public static ItemStack createItem(Material material, String name) { + ItemStack item = new ItemStack(material); + if (name != null) { + ItemMeta meta = item.getItemMeta(); + if (name != null) + meta.setDisplayName(Utils.f(name)); + item.setItemMeta(meta); + } + return item; + } + + public static ItemStack createItem(Material material, int durability, String name) { + ItemStack item = new ItemStack(material); + if (durability > 0) + item.setDurability((short) durability); + if (name != null) { + ItemMeta meta = item.getItemMeta(); + if (name != null) + meta.setDisplayName(Utils.f(name)); + item.setItemMeta(meta); + } + return item; + } + + public static ItemStack setArmorColor(ItemStack item, int red, int green, int blue) { + return setArmorColor(item, Color.fromRGB(red, green, blue)); + } + + public static ItemStack setArmorColor(ItemStack item, Color color) { + if (!(item.getItemMeta() instanceof LeatherArmorMeta)) + return item; + LeatherArmorMeta meta = (LeatherArmorMeta) item.getItemMeta(); + meta.setColor(color); + item.setItemMeta(meta); + return item; + } + + public static ItemStack setSkullOwner(ItemStack item, String owner) { + item.setDurability((short) 3); + SkullMeta meta = (SkullMeta) item.getItemMeta(); + meta.setOwner(owner); + item.setItemMeta(meta); + return item; + } + + public static void hidePlayersTo(Player player) { + Bukkit.getOnlinePlayers().stream().filter(p -> !Objects.equals(p, player)).forEach(player::hidePlayer); + } + + public static void showPlayersTo(Player player) { + Bukkit.getOnlinePlayers().stream().filter(p -> !Objects.equals(p, player)).forEach(player::showPlayer); + } + + public static void sendTitle(Player player, Title title) { + sendTitle(player, title.getTitle(), title.getSubtitle(), title.getFadeIn(), title.getStay(), + title.getFadeOut()); + } + + public static void sendTitle(Title title) { + sendTitle(title.getTitle(), title.getSubtitle(), title.getFadeIn(), title.getStay(), title.getFadeOut()); + } + + public static void sendTitle(String title, String subTitle, int fadeIn, int stay, int fadeOut) { + for (Player p : Bukkit.getOnlinePlayers()) + sendTitle(p, title, subTitle, fadeIn, stay, fadeOut); + } + + public static void sendTitle(Player player, String title, String subtitle, int fadeIn, int stay, int fadeOut) { + new JLibPlayer(player).sendTitle(fadeIn, fadeOut, stay, Utils.f(title)); + if (subtitle != null) + new JLibPlayer(player).sendSubTitle(fadeIn, fadeOut, stay, Utils.f(subtitle)); + } + + public static void sendActionBar(Player player, String message) { + //new JLibPlayer(pl).sendActionBar(msg); + + if (player == null || message == null) return; + String nmsVersion = Bukkit.getServer().getClass().getPackage().getName(); + nmsVersion = nmsVersion.substring(nmsVersion.lastIndexOf(".") + 1); + + //1.10 and up + if (!nmsVersion.startsWith("v1_9_R") && !nmsVersion.startsWith("v1_8_R")) { + player.spigot().sendMessage(ChatMessageType.ACTION_BAR, new TextComponent(message)); + return; + } + + //1.8.x and 1.9.x + try { + Class<?> craftPlayerClass = Class.forName("org.bukkit.craftbukkit." + nmsVersion + ".entity.CraftPlayer"); + Object craftPlayer = craftPlayerClass.cast(player); + + Class<?> ppoc = Class.forName("net.minecraft.server." + nmsVersion + ".PacketPlayOutChat"); + Class<?> packet = Class.forName("net.minecraft.server." + nmsVersion + ".Packet"); + Object packetPlayOutChat; + Class<?> chat = Class.forName("net.minecraft.server." + nmsVersion + (nmsVersion.equalsIgnoreCase("v1_8_R1") ? ".ChatSerializer" : ".ChatComponentText")); + Class<?> chatBaseComponent = Class.forName("net.minecraft.server." + nmsVersion + ".IChatBaseComponent"); + + Method method = null; + if (nmsVersion.equalsIgnoreCase("v1_8_R1")) method = chat.getDeclaredMethod("a", String.class); + + Object object = nmsVersion.equalsIgnoreCase("v1_8_R1") ? chatBaseComponent.cast(method.invoke(chat, "{'text': '" + message + "'}")) : chat.getConstructor(new Class[]{String.class}).newInstance(message); + packetPlayOutChat = ppoc.getConstructor(new Class[]{chatBaseComponent, Byte.TYPE}).newInstance(object, (byte) 2); + + Method handle = craftPlayerClass.getDeclaredMethod("getHandle"); + Object iCraftPlayer = handle.invoke(craftPlayer); + Field playerConnectionField = iCraftPlayer.getClass().getDeclaredField("playerConnection"); + Object playerConnection = playerConnectionField.get(iCraftPlayer); + Method sendPacket = playerConnection.getClass().getDeclaredMethod("sendPacket", packet); + sendPacket.invoke(playerConnection, packetPlayOutChat); + } catch (Exception ex) { + ex.printStackTrace(); + } + } + + public static void sendActionBar(String msg) { + for (Player p : Bukkit.getOnlinePlayers()) + sendActionBar(p, msg); + } + + public static void updateHubScoreboard(Player player, User user) { + String rank = "No Rank"; + if (user.isSpecial()) + rank = user.getUserRank().getColoredNameBold(); + Board board = new Board("lobby", Core.getSettings().getType().getScoreboardHeader(), BoardType.KEY_VALUE); + board.addValue("a", "Bucks", String.valueOf(user.getBucks())); + board.addValue("e", "Tokens", String.valueOf(user.getTokens())); + board.addValue("6", "Rank", rank); + board.addValue("6", "Server IP", user.getServerJoinAddress() != null ? user.getServerJoinAddress() : Core.getSettings().getNetworkIP()); + board.updateFor(player, user); + } + + public static List<String> toList(String[] array) { + List<String> ls = new ArrayList<>(); + if (array == null) + return ls; + Collections.addAll(ls, array); + return ls; + } + + public static ItemStack[] toArray(List<ItemStack> list) { + ItemStack[] items = new ItemStack[list.size()]; + for (int i = 0; i < list.size(); i++) + items[i] = list.get(i); + return items; + } + + public static String[] stringsToArray(List<String> list) { + if (list == null) + return null; + String[] l = new String[list.size()]; + l = list.toArray(l); + return l; + } + + public static boolean calculateChance(double i) { + return ThreadLocalRandom.current().nextDouble(101) <= i; + } + + public static void sendToServer(Player player, String server) { + Core.getServerManager().sendToServer(player, server); + } + + public static void stopEntityTracking(Player player) { + player.getLocation().getWorld().getLivingEntities().stream().filter(e -> e instanceof Creature).forEach(e -> { + Creature c = (Creature) e; + if (c.getTarget() instanceof Player && c.getTarget().equals(player)) + c.setTarget(null); + }); + } + + public static void setFlyMode(Player player, boolean b) { + player.setAllowFlight(b); + player.setFlying(b); + } + + public static Location randomLocation(Location location, double d) { + double x = location.getX() + (RANDOM.nextDouble() * d) - (d / 2); + double z = location.getZ() + (RANDOM.nextDouble() * d) - (d / 2); + return new Location(location.getWorld(), x, location.getY(), z, location.getYaw(), location.getPitch()); + } + + public static int randomNumber(int start, int end) { + return RANDOM.nextInt(end - start + 1) + start; + } + + public static int randomNumber(int end) { + return RANDOM.nextInt(end + 1); + } + + public static void copyWorld(String name) { + try { + Core.log("Copying world " + "/home/mcservers/development/master/maps/" + name + " to " + Bukkit.getWorldContainer().getCanonicalPath() + '/' + name); + File source = new File("/home/mcservers/development/master/maps/" + name); + File dest = new File(name); + Files.delete(dest.toPath()); + Files.copy(source.toPath(), dest.toPath(), StandardCopyOption.REPLACE_EXISTING); + Core.log("Finished copying world " + name); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public static World loadWorld(String name) { + copyWorld(name); + World world = Bukkit.getWorld(name); + if (world == null) { + WorldCreator creator = new WorldCreator(name); + creator.environment(World.Environment.NORMAL); + world = creator.createWorld(); + } + return world; + } + + public static YamlConfiguration loadConfigFile(File file) { + YamlConfiguration c = new YamlConfiguration(); + try { + if (!file.exists()) + file.createNewFile(); + c.load(file); + } catch (IOException | InvalidConfigurationException e1) { + e1.printStackTrace(); + } + return c; + } + + public static YamlConfiguration loadConfig(String src) { + return loadConfigFile(new File(src + ".yml")); + } + + public static YamlConfiguration loadConfigFromMaps(String src) { + return loadConfigFile(new File("/home/mcservers/development/master/maps/" + src + ".yml")); + } + + public static YamlConfiguration loadConfigFromMaster(String src) { + return loadConfigFile(new File("/home/mcservers/development/master/" + src + ".yml")); + } + + public static YamlConfiguration loadConfigFromPlugin(String src, String plugin) { + try { + return loadConfigFile(new File(Bukkit.getWorldContainer().getCanonicalPath() + '/' + plugin, src + ".yml")); + } catch (IOException e) { + e.printStackTrace(); + } + return null; + } + + public static void saveConfigFile(YamlConfiguration c, File file) { + try { + if (!file.exists()) + file.createNewFile(); + c.save(file); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public static void saveConfig(YamlConfiguration c, String src) { + saveConfigFile(c, new File(src + ".yml")); + } + + public static void deletePlayerDatFiles(String world) { + File file = new File(Bukkit.getWorldContainer() + "/" + world + "/playerdata"); + if (file.isDirectory()) + for (File f : file.listFiles()) + f.delete(); + } + + public static void kaching(Player player) { + player.playSound(player.getLocation(), Sound.BLOCK_WOODEN_DOOR_CLOSE, 2, 1); + UUID uuid = player.getUniqueId(); + new BukkitRunnable() { + @Override + public void run() { + Player player = Bukkit.getPlayer(uuid); + if (player != null) + player.playSound(player.getLocation(), Sound.ENTITY_ARROW_HIT_PLAYER, 0.3F, 1); + + } + }.runTaskLater(Core.getInstance(), 5); + + } + + public static String timeInMillisToText(long millis, String numberColor, String textColor, String splitterColor) { + return timeInSecondsToText(millis / 1000, numberColor, textColor, splitterColor); + } + + public static String timeInMillisToText(Long millis) { + return timeInSecondsToText(millis / 1000); + } + + + public static String formatMoney(double money) { + return NumberFormat.getCurrencyInstance(Locale.US).format(money > 1000000 ? (money / 1000000) : money) + (money > 1000000 ? " mil" : ""); + } + + public static String numberFormat(int num) { + return NumberFormat.getCurrencyInstance(Locale.US).format(num); + } + + public static String numberFormat(double num) { + return NumberFormat.getCurrencyInstance(Locale.US).format(num); + } + + public static int getAmountInInv(Player player, ItemStack stack) { + int amnt = 0; + Inventory inventory = player.getInventory(); + for (ItemStack item : inventory.getContents()) { + if (item != null && item.isSimilar(stack)) + amnt += item.getAmount(); + } + return amnt; + } + + public static boolean giveItems(Player player, ItemStack... items) { + Map<Integer, ItemStack> hm = player.getInventory().addItem(items); + if (hm.isEmpty()) + return false; + World w = player.getWorld(); + Location loc = player.getLocation(); + for (ItemStack item : hm.values()) + w.dropItemNaturally(loc, item); + return true; + } + + public static void takeItems(Player player, int amount, ItemStack stack) { + int toRemove = amount; + Inventory inventory = player.getInventory(); + for (int i = 0; i < inventory.getSize(); i++) { + ItemStack item = inventory.getItem(i); + if (item != null && item.isSimilar(stack)) { + if (toRemove >= item.getAmount()) { + toRemove -= item.getAmount(); + inventory.setItem(i, null); + } else { + item.setAmount(item.getAmount() - toRemove); + return; + } + + } + } + } + + public static String fc(String s) { + s = Utils.f(s); + int messagePxSize = 0; + boolean previousCode = false; + boolean isBold = false; + + for (char c : s.toCharArray()) { + if (c == '§') { + previousCode = true; + } else if (previousCode) { + previousCode = false; + isBold = c == 'l' || c == 'L'; + } else { + DefaultFontInfo dFI = DefaultFontInfo.getDefaultFontInfo(c); + messagePxSize += isBold ? dFI.getBoldLength() : dFI.getLength(); + messagePxSize++; + } + } + + int halvedMessageSize = messagePxSize / 2; + int toCompensate = 154 - halvedMessageSize; + int spaceLength = DefaultFontInfo.SPACE.getLength() + 1; + int compensated = 0; + StringBuilder sb = new StringBuilder(); + while (compensated < toCompensate) { + sb.append(' '); + compensated += spaceLength; + } + return sb + s; + } + + public static String[] fc(String[] array) { + if (array == null) + return null; + String[] a = new String[array.length]; + for (int i = 0; i < array.length; i++) + a[i] = Utils.fc(array[i]); + return a; + } + + public static Map<Player, Double> sort(Map<Player, Double> unsortMap) { + List<Map.Entry<Player, Double>> list = new LinkedList<>(unsortMap.entrySet()); + Collections.sort(list, (o1, o2) -> o1.getValue().compareTo(o2.getValue())); + Map<Player, Double> sortedMap = new LinkedHashMap<>(); + for (Map.Entry<Player, Double> entry : list) + sortedMap.put(entry.getKey(), entry.getValue()); + return sortedMap; + } + + public static void clearPotionEffects(Player player) { + for (PotionEffect e : player.getActivePotionEffects()) + player.removePotionEffect(e.getType()); + } + + public static String getCardinalDirection(Location location) { + double rotation = location.getYaw() % 360; + if (rotation < 0) + rotation += 360.0; + if (rotation >= 0 && rotation < 22.5) + return "S"; + else if (rotation >= 22.5 && rotation < 67.5) + return "SW"; + else if (rotation >= 67.5 && rotation < 112.5) + return "W"; + else if (rotation >= 112.5 && rotation < 157.5) + return "NW"; + else if (rotation >= 157.5 && rotation < 202.5) + return "N"; + else if (rotation >= 202.5 && rotation < 247.5) + return "NE"; + else if (rotation >= 247.5 && rotation < 292.5) + return "E"; + else if (rotation >= 292.5 && rotation < 337.5) + return "SE"; + else if (rotation >= 337.5 && rotation < 360.0) + return "S"; + return null; + + } + + public static Location getInFrontOf(Location location) { + String s = getCardinalDirection(location); + switch (s) { + case "N": + return location.add(0, 0, -2); + case "NE": + return location.add(2, 0, -2); + case "E": + return location.add(2, 0, 0); + case "SE": + return location.add(2, 0, 2); + case "S": + return location.add(0, 0, 2); + case "SW": + return location.add(-2, 0, 2); + case "W": + return location.add(-2, 0, 0); + case "NW": + return location.add(-2, 0, -2); + default: + return location; + } + } + + public static void playChestAnimation(Location loc, boolean open) { + Bukkit.getOnlinePlayers().forEach(p -> playChestAnimation(p, loc, open)); + } + + public static void playChestAnimation(Player player, Location loc, boolean open) { + try { + Object world = ReflectionAPI.getHandle((Object) loc.getWorld()); + Object position = BLOCK_POSITION_CLASS.getConstructor(double.class, double.class, double.class).newInstance(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()); + Object tileChest = world.getClass().getMethod("getTileEntity", BLOCK_POSITION_CLASS).invoke(world, position); + Object packet = PACKET_PLAY_OUT_BLOCK_ACTION_CLASS.getConstructor(BLOCK_POSITION_CLASS, BLOCK_CLASS, int.class, int.class).newInstance(position, tileChest.getClass().getMethod("getBlock").invoke(tileChest), 1, open ? 1 : 0); + ReflectionAPI.sendPacket(player, packet); + } catch (Exception e) { + Core.error("An error occured while playing a chest animation"); + e.printStackTrace(); + } + } + + public static ItemStack addGlow(ItemStack item) { + item.addUnsafeEnchantment(GLOW, 1); + return item; + } + + public static void insertLogLater(UUID uuid, String name, String action, String type, String reward, double amount, double price) { + ServerUtil.runTaskAsync(() -> insertLog(uuid, name, action, type, reward, amount, price)); +// new BukkitRunnable() { +// @Override +// public void run() { +// Utils.insertLog(uuid, name, action, type, reward, amount, price); +// } +// }.runTaskAsynchronously(Core.getInstance()); + } + + public static void insertLog(UUID uuid, String name, String action, String type, String reward, double amount, double price) { + boolean result = LogDAO.insertLog(uuid, name, action, type, reward, amount, price); + if(!result) Core.error("Error while logging uuid " + uuid + " name " + name + " action " + action + " reward " + reward + " amount " + amount + " price " + price); + +// try (PreparedStatement st = Core.sql.prepareStatement("insert into logs(uuid, name, action, type, reward, amount, price, server) values (?,?,?,?,?,?,?,?);")) { +// st.setString(1, uuid.toString()); +// st.setString(2, name); +// st.setString(3, action); +// st.setString(4, type); +// st.setString(5, reward); +// st.setDouble(6, amount); +// st.setDouble(7, price); +// st.setString(8, Core.name()); +// st.execute(); +// st.close(); +// } catch (SQLException e) { +// Core.error("Error while logging uuid " + uuid + " name " + name + " action " + action + " reward " + reward + " amount " + amount + " price " + price); +// } + } + + public static Collection<String> getOfflineStaff() { +// Collection<String> staff = new ArrayList<>(); +// try (ResultSet resultSet = Core.getSQL().query("SELECT lastname FROM users WHERE userrank IN ( 'HELPOP', 'MOD', 'ADMIN', 'DEV' );")) { +// while (resultSet.next()) { +// staff.add(resultSet.getString("lastname")); +// } +// resultSet.close(); +// } catch (Exception exception) { +// +// } + return ServerInfoDAO.getOnlineStaff(); + } + + public static TimeFormatter timeFormatter(TimeUnit timeUnit, Long time) { + return new TimeFormatter(timeUnit, time); + } + + public static boolean isBanned(String uuid) { +// try (ResultSet rs = Core.sql.query("select * from BAT_ban where UUID='" + uuid + "';")) { +// if (rs.next()) { +// if (rs.getBoolean("ban_state")) { +// rs.close(); +// return true; +// } +// } +// rs.close(); +// } catch (SQLException e) { +// e.printStackTrace(); +// } +// return false; + return UserDAO.isUserBanned(uuid); + } + + /** + * Apply these item flags to ItemStack + * + * @param itemStack - the ItemStack to apply these flags to + * @param flags - the flags to apply + **/ + public static void applyItemFlags(ItemStack itemStack, ItemFlag... flags) { + ItemMeta itemMeta = itemStack.getItemMeta(); + + itemMeta.setUnbreakable(true); + itemMeta.addItemFlags(flags); + + itemMeta.addItemFlags(flags); + itemStack.setItemMeta(itemMeta); + } + + /** + * Clone ItemStack, apply flags and return new copy. + * + * @param itemStack the ItemStack to apply these flags to + * @param flags the flags to apply + * @return cloned ItemStack with itemflags + **/ + public static ItemStack addItemFlags(ItemStack itemStack, ItemFlag... flags) { + ItemStack stack = itemStack.clone(); + ItemMeta itemMeta = stack.getItemMeta(); + + itemMeta.setUnbreakable(true); + itemMeta.addItemFlags(flags); + + itemMeta.addItemFlags(flags); + stack.setItemMeta(itemMeta); + return stack; + } + + public static Month getMonth() { + Date date = new Date(); + LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); + return localDate.getMonth(); + } + + public static int getDay() { + Date date = new Date(); + LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); + return localDate.getDayOfMonth(); + } + + public static void setMaxPlayers(int maxPlayers) { + String bukkitversion = Bukkit.getServer().getClass().getPackage() + .getName().substring(23); + Object playerlist = null; + try { + playerlist = Class.forName("org.bukkit.craftbukkit." + bukkitversion + ".CraftServer") + .getDeclaredMethod("getHandle", null).invoke(Bukkit.getServer(), null); + Field maxplayers = playerlist.getClass().getSuperclass() + .getDeclaredField("maxPlayers"); + maxplayers.setAccessible(true); + maxplayers.set(playerlist, maxPlayers); + } catch (IllegalAccessException | InvocationTargetException | + NoSuchMethodException | + ClassNotFoundException | + NoSuchFieldException exception) { + exception.printStackTrace(); + } + Core.getSettings().setMaxPlayers(maxPlayers); + Core.getSettings().getCoreConfig().set("maxplayers", maxPlayers); + Utils.saveConfig(Core.getSettings().getCoreConfig(), "core"); + } + + public static void startEnchantmentShineRemover(ProtocolManager lib, Plugin owner){ + lib.addPacketListener(new PacketAdapter(owner, ListenerPriority.NORMAL, PacketType.Play.Server.ENTITY_EQUIPMENT, PacketType.Play.Server.WINDOW_ITEMS){ + @Override + public void onPacketSending(PacketEvent event){ + PacketContainer packet = event.getPacket(); + if(packet.getType()==PacketType.Play.Server.ENTITY_EQUIPMENT){ + removeEnchantments(packet.getItemModifier().read(0)); + } + else if(packet.getType()==PacketType.Play.Server.WINDOW_ITEMS){ + for(ItemStack is : packet.getItemArrayModifier().read(0)){ + if(is!=null) + removeEnchantments(is); + } + } + } + }); + } + + private static void removeEnchantments(ItemStack stack) { + if(stack==null) + return; + Object[] copy = stack.getEnchantments().keySet().toArray(); + + for (Object enchantment : copy) { + stack.removeEnchantment((Enchantment) enchantment); + } + } + + public static String timeInSecondsToText(long timer) { + return timeInSecondsToText(timer, C.WHITE, C.WHITE, C.WHITE); + } + + public static String timeInSecondsToText(long timer, String numberColor, String textColor, String splitterColor) { + StringBuilder sb = new StringBuilder(); + List<TimeUnit> units = Arrays.asList(TimeUnit.values()); + Collections.reverse(units); + int counter = 0; + for(TimeUnit u : units) { + if (counter >= 2) + break; + long time = u.convert(timer, TimeUnit.SECONDS); + if (time >= 1) { + sb.append(numberColor + time + C.RESET + " " + textColor + (time == 1 ? u.toString().toLowerCase().substring(0, u.toString().length()-1) : u.toString().toLowerCase()) + C.RESET + splitterColor + (counter == 1 ? "" : ", ")); + counter++; + timer -= TimeUnit.SECONDS.convert(time, u); + } + } + return counter==1 ? sb.toString().substring(0, sb.length()-2) : sb.toString(); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/WeightedRandomCollection.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/WeightedRandomCollection.java new file mode 100644 index 0000000..b496e65 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/WeightedRandomCollection.java @@ -0,0 +1,91 @@ +package net.grandtheftmc.core.util; +/* + * Copyright (C) 2013-Current Carter Gale (Ktar5) <buildfresh@gmail.com> + * + * This file is part of gtm. + * + * gtm can not be copied and/or distributed without the express + * permission of the aforementioned owner. + */ + +import com.google.common.collect.Lists; + +import java.util.*; +import java.util.concurrent.ThreadLocalRandom; + +/** + * A utility collection created in order to simplify the selection of a random + * element based on its corresponding relative weight + * <p> + * "Relative weight" means that, for example, each "weight" is a lottery ticket thrown + * into the "total weight". We pick a random ticket, and then return that element. Thus, + * the higher the weight, the higher the chance it will be picked. + * + * @param <E> the type of element to be placed into this collection + */ +public class WeightedRandomCollection<E> { + private final NavigableMap<Double, E> map = new TreeMap<>(); + private E last; + private double total; + + /** + * Add an item to the random collection with the + * specified weight + * + * @param weight the weight (relative to the others) + * @param result the item that corresponds to this weight + */ + public WeightedRandomCollection<E> add(double weight, E result) { + if (weight <= 0) return this; + this.total += weight; + this.map.put(this.total, result); + this.last = result; + return this; + } + + public E last() { + return this.last; + } + + /** + * Return a set of all the values + * + * @return a set of all the values + */ + public Set<E> values() { + return new HashSet<>(this.map.values()); + } + + /** + * Returns #amount of unique elements chosen randomly for a lottery-type system + * + * @param amount the max amount of unique elements you want returned + * @return a list containing maximum #amount unique elements, unless there are + * less than that many elements in the collection + */ + public List<E> getUniqueElements(int amount) { + if (this.map.size() <= amount) { + return Lists.newArrayList(this.map.values()); + } + List<E> uniqueElements = new ArrayList<>(amount); + while (uniqueElements.size() < amount && uniqueElements.size() < this.map.size()) { + if (!uniqueElements.contains(this.next())) { + uniqueElements.add(this.last()); + } + } + return uniqueElements; + } + + /** + * Select a random item from the list based on the chance + * Uses a ThreadLocalRandom because Random sucks shit + * ThreadLocalRandom is faster + * + * @return a random element from the collection, selected based on its relative weight + */ + public E next() { + double value = ThreadLocalRandom.current().nextDouble() * this.total; + this.last = this.map.ceilingEntry(value).getValue(); + return this.last; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/debug/Log.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/debug/Log.java new file mode 100644 index 0000000..a6fa0d1 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/debug/Log.java @@ -0,0 +1,59 @@ +package net.grandtheftmc.core.util.debug; + +import java.util.logging.Level; + +import org.bukkit.Bukkit; + +public class Log { + + /** + * Log an error message. This will show up in the console as + * [SEVERE][prefix] [message] + * + * @param args - Arguments to log in an error message. + * @param prefix - Prefix of the plugin. ex: "Hyphenical" + */ + public static void error(String prefix, String... args) { + log(Level.SEVERE, prefix, args); + } + + /** + * Log an info message. This will show up in the console as [INFO][prefix] + * [message] + * + * @param args - Arguments to log with the prefix of "[INFO]". + * @param prefix - Prefix of the plugin. ex: "Hyphenical" + */ + public static void info(String prefix, String... args) { + log(Level.INFO, prefix, args); + } + + /** + * Log a warning message. This will show up in the console as + * [WARNING][prefix] [message] + * + * @param args - Arguments to log with the prefix of "[WARNING]" + * @param prefix - Prefix of the plugin. ex: "Hyphenical" + */ + public static void warning(String prefix, String... args) { + log(Level.WARNING, prefix, args); + } + + /** + * Logs the error message to Bukkit's logger. This will show up in the + * console as [LEVEL][PLUGIN] [message] + * + * @param level - level in which to log the arguments. + * @param prefix - prefix of the plugin name. + * @param args - arguments to log. + */ + private static void log(Level level, String prefix, String... args) { + StringBuffer buffer = new StringBuffer(); + + for (int i = 0; i < args.length; i++) { + buffer.append(args[i]); + } + + Bukkit.getLogger().log(level, String.format("[" + prefix + "] %s", buffer.toString())); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/factory/CloneableFactory.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/factory/CloneableFactory.java new file mode 100644 index 0000000..2391d29 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/factory/CloneableFactory.java @@ -0,0 +1,8 @@ +package net.grandtheftmc.core.util.factory; + +/** + * Created by Luke Bingham on 21/07/2017. + */ +public interface CloneableFactory<T> { + T clone(); +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/factory/Factory.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/factory/Factory.java new file mode 100644 index 0000000..9769e26 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/factory/Factory.java @@ -0,0 +1,9 @@ +package net.grandtheftmc.core.util.factory; + +/** + * Created by Luke Bingham on 21/07/2017. + */ +public abstract class Factory<T> { + protected T object; + public abstract T build(); +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/factory/FireworkFactory.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/factory/FireworkFactory.java new file mode 100644 index 0000000..5e3eddc --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/factory/FireworkFactory.java @@ -0,0 +1,66 @@ +package net.grandtheftmc.core.util.factory; + +import org.bukkit.Color; +import org.bukkit.FireworkEffect; +import org.bukkit.Location; +import org.bukkit.entity.Firework; +import org.bukkit.inventory.meta.FireworkMeta; + +public class FireworkFactory extends Factory<Firework> { + + private FireworkMeta meta; + + private boolean flicker = false, trail = false; + private Color color = Color.BLACK, fade = Color.WHITE; + private FireworkEffect.Type type = FireworkEffect.Type.BALL; + + public FireworkFactory(Location location) { + super.object = location.getWorld().spawn(location, Firework.class); + this.meta = super.object.getFireworkMeta(); + } + + public FireworkFactory setPower(int power) { + this.meta.setPower(power); + return this; + } + + public FireworkFactory setFlicker(boolean flicker) { + this.flicker = flicker; + return this; + } + + public FireworkFactory setTrail(boolean trail) { + this.trail = trail; + return this; + } + + public FireworkFactory setColor(Color color) { + this.color = color; + return this; + } + + public FireworkFactory setFadeColor(Color fade) { + this.fade = fade; + return this; + } + + public FireworkFactory setType(FireworkEffect.Type type) { + this.type = type; + return this; + } + + @Override + public Firework build() { + FireworkEffect effect = FireworkEffect.builder() + .flicker(this.flicker) + .withColor(this.color).withFade(this.fade) + .with(this.type) + .trail(this.trail) + .build(); + + this.meta.addEffect(effect); + super.object.setFireworkMeta(this.meta); + + return super.object; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/factory/ItemFactory.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/factory/ItemFactory.java new file mode 100644 index 0000000..4c39ab2 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/factory/ItemFactory.java @@ -0,0 +1,125 @@ +package net.grandtheftmc.core.util.factory; + +import org.bukkit.Material; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.inventory.meta.SkullMeta; + +import java.util.Arrays; +import java.util.LinkedList; +import java.util.List; +import java.util.Queue; + +/** + * Created by Luke Bingham on 21/07/2017. + */ +public class ItemFactory extends Factory<ItemStack> implements CloneableFactory<ItemFactory> { + + private ItemMeta itemMeta; + + public ItemFactory(Material material, byte data) { + this.object = new ItemStack(material, 1, data); + this.itemMeta = object.getItemMeta(); + } + + public ItemFactory(Material material, short data) { + this.object = new ItemStack(material, 1); + this.object.setDurability(data); + this.itemMeta = object.getItemMeta(); + } + + public ItemFactory(Material material) { + this(material, (byte) 0); + } + + public ItemFactory(ItemStack itemStack) { + this.object = itemStack; + this.itemMeta = itemStack.getItemMeta(); + } + + public final ItemFactory setAmount(int amount) { + if (amount > 64) amount = 64; + object.setAmount(amount); + return this; + } + + public final ItemFactory setName(String name) { + itemMeta.setDisplayName(name); + return this; + } + + public final ItemFactory setLore(List<String> lore) { + itemMeta.setLore(lore); + return this; + } + + public final ItemFactory setLore(Queue<String> lore) { + itemMeta.setLore((LinkedList<String>) lore); + return this; + } + + public final ItemFactory setLore(String... lore) { + itemMeta.setLore(Arrays.asList(lore)); + return this; + } + + public final ItemFactory setOwner(String name) { + if (object.getType().equals(Material.SKULL_ITEM)) { + SkullMeta meta = (SkullMeta) itemMeta; + meta.setOwner(name); + } + return this; + } + + public final ItemFactory setDurability(short durability) { + object.setDurability(durability); + return this; + } + + public final ItemStack build() { + object.setItemMeta(itemMeta); + return object; + } + + public final ItemFactory setData(byte data) { + object.setDurability(data); + return this; + } + + public final ItemFactory setUnsafeEnchantment(Enchantment enchantment, int level) { + object.addUnsafeEnchantment(enchantment, level); + return this; + } + + public final ItemFactory setEnchantment(Enchantment enchantment, int level) { + itemMeta.addEnchant(enchantment, level, true); + return this; + } + + public final ItemFactory addFlags(ItemFlag... flags) { + itemMeta.addItemFlags(flags); + return this; + } + +// public <T> ItemFactory setNBT(String key, T value) { +// net.minecraft.server.v1_8_R3.ItemStack nmsCopy = CraftItemStack.asNMSCopy(object); +// NBTTagCompound compoundTag = new NBTTagCompound(); +// nmsCopy.c(compoundTag); +// compoundTag.set(key, ); +// nmsCopy.f(compoundTag); +// } + + public ItemFactory setUnbreakable(boolean unbreakable) { + this.itemMeta.setUnbreakable(unbreakable); + return this; + } + + @Override + public final ItemFactory clone() { + ItemFactory clone = new ItemFactory(object.getType(), object.getData().getData()); + clone.itemMeta = this.itemMeta; + return clone; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/json/JSONBuilder.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/json/JSONBuilder.java new file mode 100644 index 0000000..d1846d1 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/json/JSONBuilder.java @@ -0,0 +1,50 @@ +package net.grandtheftmc.core.util.json; + +import org.json.simple.JSONObject; + +public class JSONBuilder { + + /** The json object being built */ + private final JSONObject jsonObject; + + /** + * Construct a new JSONBuilder, used to concatenate key/values into a valid + * JSON format. + */ + public JSONBuilder() { + this.jsonObject = new JSONObject(); + } + + /** + * Construct a new JSONBuilder, using an existing object. + * + * @param existing - the existing json object + */ + public JSONBuilder(JSONObject existing) { + this.jsonObject = existing; + } + + /** + * Set the key in the JSON to the specified value. + * + * @param key - the key to set + * @param value - the value to set + * + * @return This builder, in order to keep chaining. + */ + public JSONBuilder set(String key, Object value) { + jsonObject.put(key, value); + + return this; + } + + /** + * Creates the JSONObject from this builder. + * + * @return The JSONObject that was created from this builder. + */ + public JSONObject create() { + return jsonObject; + } +} + diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/json/JSONParser.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/json/JSONParser.java new file mode 100644 index 0000000..f31fccf --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/json/JSONParser.java @@ -0,0 +1,313 @@ +package net.grandtheftmc.core.util.json; + +import java.util.UUID; + +import org.json.simple.JSONArray; +import org.json.simple.JSONObject; + +public class JSONParser { + + /** The json object to parse */ + private final JSONObject jsonObject; + + /** + * Construct a new JSONParser, which is a utility tool to edit/grab keys. + * + * @param jsonObject - the json object to parse. + */ + public JSONParser(JSONObject jsonObject) { + this.jsonObject = jsonObject; + } + + /** + * Returns a new JSONParser, given the key specified can be converted to a + * JSONObject. + * + * @param key - the key attempting to parse + * + * @return A new JSONParser with the specified key as the new JSONObject in + * the parser. + */ + public JSONParser parseObject(String key) { + Object obj = jsonObject.get(key); + return new JSONParser(obj instanceof JSONObject ? (JSONObject) obj : new JSONObject()); + } + + /** + * Get whether or not this parser has the specified key. + * + * @param key - the key specified + * + * @return {@code true} if the parser has the specified key, {@code false} + * otherwise. + */ + public boolean hasKey(String key) { + return jsonObject.containsKey(key); + } + + /** + * Grab the key and convert it to a JSONObject. + * + * @param key - the key to grab + * + * @return The JSONObject that was retrieved. + */ + public JSONObject getObject(String key) { + return (JSONObject) jsonObject.get(key); + } + + /** + * Grab the key and convert it to a JSONArray. + * + * @param key - the key to grab + * + * @return The JSONArray that was retrieved. + */ + public JSONArray getJSONArray(String key) { + return (JSONArray) jsonObject.get(key); + } + + /** + * Grab the key and convert it to a String. + * + * @param key - the key to grab + * + * @return The String that was retrieved. + */ + public String getString(String key) { + return (String) jsonObject.get(key); + } + + /** + * Grab the key and convert it to an Int. + * <p> + * Note: If the value in the JSON is of a different type, values can be lost + * when casting. + * + * @param key - the key to grab + * + * @return The Int that was retrieved. + */ + public int getInt(String key) { + Object obj = jsonObject.get(key); + + if (obj instanceof Long) { + return ((Long) obj).intValue(); + } + else if (obj instanceof Double) { + return ((Double) obj).intValue(); + } + else if (obj instanceof Float) { + return ((Float) obj).intValue(); + } + else if (obj instanceof Short) { + return ((Short) obj).intValue(); + } + else if (obj instanceof Byte) { + return ((Byte) obj).intValue(); + } + + return (Integer) obj; + } + + /** + * Grab the key and convert it to a Long. + * <p> + * Note: If the value in the JSON is of a different type, values can be lost + * when casting. + * + * @param key - the key to grab + * + * @return The Long that was retrieved. + */ + public long getLong(String key) { + Object obj = jsonObject.get(key); + + if (obj instanceof Integer) { + return ((Integer) obj).longValue(); + } + else if (obj instanceof Double) { + return ((Double) obj).longValue(); + } + else if (obj instanceof Float) { + return ((Float) obj).longValue(); + } + else if (obj instanceof Short) { + return ((Short) obj).longValue(); + } + else if (obj instanceof Byte) { + return ((Byte) obj).longValue(); + } + + return (Long) obj; + } + + /** + * Grab the key and convert it to a Double. + * <p> + * Note: If the value in the JSON is of a different type, values can be lost + * when casting. + * + * @param key - the key to grab + * + * @return The Double that was retrieved. + */ + public double getDouble(String key) { + Object obj = jsonObject.get(key); + + if (obj instanceof Long) { + return ((Long) obj).doubleValue(); + } + else if (obj instanceof Integer) { + return ((Integer) obj).doubleValue(); + } + else if (obj instanceof Float) { + return ((Float) obj).doubleValue(); + } + else if (obj instanceof Short) { + return ((Short) obj).doubleValue(); + } + else if (obj instanceof Byte) { + return ((Byte) obj).doubleValue(); + } + + return (Double) obj; + } + + /** + * Grab the key and convert it to a Float. + * <p> + * Note: If the value in the JSON is of a different type, values can be lost + * when casting. + * + * @param key - the key to grab + * + * @return The Float that was retrieved. + */ + public float getFloat(String key) { + Object obj = jsonObject.get(key); + + if (obj instanceof Long) { + return ((Long) obj).floatValue(); + } + else if (obj instanceof Double) { + return ((Double) obj).floatValue(); + } + else if (obj instanceof Integer) { + return ((Integer) obj).floatValue(); + } + else if (obj instanceof Short) { + return ((Short) obj).floatValue(); + } + else if (obj instanceof Byte) { + return ((Byte) obj).floatValue(); + } + + return (Float) obj; + } + + /** + * Grab the key and convert it to a Short. + * <p> + * Note: If the value in the JSON is of a different type, values can be lost + * when casting. + * + * @param key - the key to grab + * + * @return The Short that was retrieved. + */ + public short getShort(String key) { + Object obj = jsonObject.get(key); + + if (obj instanceof Long) { + return ((Long) obj).shortValue(); + } + else if (obj instanceof Double) { + return ((Double) obj).shortValue(); + } + else if (obj instanceof Float) { + return ((Float) obj).shortValue(); + } + else if (obj instanceof Integer) { + return ((Integer) obj).shortValue(); + } + else if (obj instanceof Byte) { + return ((Byte) obj).shortValue(); + } + + return (Short) obj; + } + + /** + * Grab the key and convert it to a Byte. + * <p> + * Note: If the value in the JSON is of a different type, values can be lost + * when casting. + * + * @param key - the key to grab + * + * @return The Byte that was retrieved. + */ + public byte getByte(String key) { + Object obj = jsonObject.get(key); + + if (obj instanceof Long) { + return ((Long) obj).byteValue(); + } + else if (obj instanceof Double) { + return ((Double) obj).byteValue(); + } + else if (obj instanceof Float) { + return ((Float) obj).byteValue(); + } + else if (obj instanceof Integer) { + return ((Integer) obj).byteValue(); + } + else if (obj instanceof Byte) { + return ((Byte) obj).byteValue(); + } + + return (Byte) obj; + } + + /** + * Grab the key and convert it to a boolean. + * + * @param key - the key to grab + * + * @return The boolean that was retrieved. + */ + public boolean getBoolean(String key) { + return (Boolean) jsonObject.get(key); + } + + /** + * Grab the key and convert it to a UUID. + * + * @param key - the key to grab + * + * @return The UUID that was retrieved, if one exists. {@code null} if the + * value cannot be formatted to a UUID. + */ + public UUID getUUID(String key) { + try { + return UUID.fromString((String) jsonObject.get(key)); + } + catch (IllegalArgumentException ignored) { + } + + return null; + } + + /** + * Grab the key and convert it to an Object. + * + * @param key - the key to grab + * + * @return The Object that was retrieved. + */ + public Object get(String key) { + return jsonObject.get(key); + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/json/JSONUtil.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/json/JSONUtil.java new file mode 100644 index 0000000..7274eef --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/json/JSONUtil.java @@ -0,0 +1,45 @@ +package net.grandtheftmc.core.util.json; + +import org.json.simple.JSONObject; + +public class JSONUtil { + + /** + * Merges 2 JSONObjects together recursively, resulting in the target + * containing both + * <p> + * The source will take priority over the target and will overwrite data if + * conflict arises + * + * @param source The source (the object to merge in to target) + * @param target The target (this ends up as the resultant object) + */ + public static void deepMerge(JSONObject source, JSONObject target) { + for (Object key : source.keySet()) { + + Object value = source.get(key); + + if (!target.containsKey(key)) { + // Add source to target + target.put(key, value); + } + else if (value instanceof JSONObject) { + // Value is JSONObject, let's have a look at target value + Object targetValue = target.get(key); + if (targetValue instanceof JSONObject) { + // Target has a JSONObject, combine recursively + deepMerge((JSONObject) value, (JSONObject) targetValue); + } + else { + // Target and source incompatible, source takes priority + target.put(key, value); + } + } + else { + // Source replaces target + target.put(key, value); + } + } + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/nbt/CoreNbt.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/nbt/CoreNbt.java new file mode 100644 index 0000000..073eb41 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/nbt/CoreNbt.java @@ -0,0 +1,11 @@ +package net.grandtheftmc.core.util.nbt; + +/** + * Created by ThatAbstractWolf on 2017-08-04. + */ +public interface CoreNbt { + + Object getNBTTag(String key); + + boolean hasNBTTag(String key); +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/nbt/NBTUtil1_12_2.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/nbt/NBTUtil1_12_2.java new file mode 100644 index 0000000..7bfa503 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/nbt/NBTUtil1_12_2.java @@ -0,0 +1,64 @@ +package net.grandtheftmc.core.util.nbt; + +import net.minecraft.server.v1_12_R1.NBTBase; +import net.minecraft.server.v1_12_R1.NBTTagCompound; +import org.bukkit.craftbukkit.v1_12_R1.inventory.CraftItemStack; +import org.bukkit.inventory.ItemStack; + +/** + * Created by ThatAbstractWolf on 2017-08-04. + */ +public class NBTUtil1_12_2 implements CoreNbt { + + private ItemStack item; + + public NBTUtil1_12_2(ItemStack item) { + this.item = item; + } + + public ItemStack setNBTTag(String key, NBTBase base) { + + net.minecraft.server.v1_12_R1.ItemStack item = CraftItemStack.asNMSCopy(this.item); + + NBTTagCompound compound; + + if (item.getTag() == null) { + compound = new NBTTagCompound(); + } else { + compound = item.getTag(); + } + + compound.set(key, base); + item.setTag(compound); + + return CraftItemStack.asBukkitCopy(item); + } + + @Override + public Object getNBTTag(String key) { + + net.minecraft.server.v1_12_R1.ItemStack item = CraftItemStack.asNMSCopy(this.item); + + NBTTagCompound compound = item.getTag(); + + if (compound == null) { + return false; + } + + return compound.get(key); + } + + @Override + public boolean hasNBTTag(String key) { + + net.minecraft.server.v1_12_R1.ItemStack item = CraftItemStack.asNMSCopy(this.item); + + NBTTagCompound compound = item.getTag(); + + if (compound == null) { + return false; + } + + return compound.get(key) != null; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/particles/ParticleEffects.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/particles/ParticleEffects.java new file mode 100644 index 0000000..e7b73c9 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/particles/ParticleEffects.java @@ -0,0 +1,30 @@ +package net.grandtheftmc.core.util.particles; + +import com.comphenix.protocol.wrappers.EnumWrappers; +import net.grandtheftmc.core.wrapper.packet.out.WrapperPlayServerWorldParticles; +import org.bukkit.Location; +import org.bukkit.entity.Player; + +public class ParticleEffects { + + private WrapperPlayServerWorldParticles wrappedPacket; + + public ParticleEffects(EnumWrappers.Particle particle, Location loc, float xOffset, float yOffset, float zOffset, float speed, int count) { + float x = (float) loc.getX(); + float y = (float) loc.getY(); + float z = (float) loc.getZ(); + + this.wrappedPacket = new WrapperPlayServerWorldParticles() + .setParticleType(particle) + .setLongDistance(false) + .setX(x).setY(y).setZ(z) + .setOffsetX(xOffset).setOffsetY(yOffset).setOffsetZ(zOffset) + .setParticleData(speed) + .setNumberOfParticles(count) + .setData(new int[] {}); + } + + public void show(Player p) { + wrappedPacket.sendPacket(p); + } +} \ No newline at end of file diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/time/TimeUtil.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/time/TimeUtil.java new file mode 100644 index 0000000..89d6934 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/time/TimeUtil.java @@ -0,0 +1,242 @@ +package net.grandtheftmc.core.util.time; + +import java.sql.Timestamp; +import java.time.Instant; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; + +import org.apache.commons.lang.Validate; + +public class TimeUtil { + + /** + * The timezone to use for {@link LocalDateTime} instances created in this + * Util + */ + private static ZoneId CURRENT_TIMEZONE = ZoneId.systemDefault(); + + /** A standard formatting of DateTime */ + public static final DateTimeFormatter DATE_TIME_FORMAT = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss"); + + /** + * Set the timezone to use for {@link LocalDateTime} instances created in + * this Util + * + * @param zoneId The timezone + */ + public static void setCurrentTimezone(ZoneId zoneId) { + Validate.notNull(zoneId); + + CURRENT_TIMEZONE = zoneId; + } + + /** + * Converts a time in milliseconds to a LocalDateTime based on + * {@link #CURRENT_TIMEZONE} + * + * @param millis The time in milliseconds + * + * @return A {@link LocalDateTime} based on {@link #CURRENT_TIMEZONE} + */ + public static LocalDateTime getLocalDateTime(long millis) { + return getLocalDateTime(millis, CURRENT_TIMEZONE); + } + + /** + * Converts a time in milliseconds to a LocalDateTime based on the specified + * timezone + * + * @param millis The time in milliseconds + * @param zoneId The timezone to use + * + * @return A {@link LocalDateTime} based on the specified timezone + */ + public static LocalDateTime getLocalDateTime(long millis, ZoneId zoneId) { + return LocalDateTime.ofInstant(Instant.ofEpochMilli(millis), zoneId); + } + + /** + * Formats a time in milliseconds following the outline of + * {@link #DATE_TIME_FORMAT} and {@link #CURRENT_TIMEZONE} + * + * @param millis The time in milliseconds + * + * @return The time in a readable format + * + * @see #DATE_TIME_FORMAT + */ + public static String format(long millis) { + return DATE_TIME_FORMAT.format(getLocalDateTime(millis)); + } + + /** + * Converts time into a String representation of minutes:seconds based off + * the integer provided. + * + * @param time - Time to be converted. + * @return String in the format of minutes:seconds. + */ + public static String formatSeconds(int time) { + int minutes = time / 60; + int seconds = time - (minutes * 60); + + StringBuilder stringBuilder = new StringBuilder(); + + if (minutes < 10) { + stringBuilder.append("0"); + } + + stringBuilder.append(String.valueOf(minutes) + ":"); + + if (seconds < 10) { + stringBuilder.append("0"); + } + + stringBuilder.append(String.valueOf(seconds)); + return stringBuilder.toString(); + } + + /** + * Formats milliseconds to seconds to the given degree. + * + * @param millis - the milliseconds to format + * @param degrees - the number of decimal places to format to + * + * @return The formatted string that represents the seconds, from the + * specified milliseconds. + */ + public static String formatMillisToSecs(long millis, int degrees) { + double amount = millis / 1000.0; + return String.format("%." + degrees + "f", amount); + } + + /** + * Formats milliseconds to seconds to the tens decimal. + * <p> + * Wrapper around {@link #formatMillisToSecs(long, int)}. + * </p> + * + * @param millis - the milliseconds to format + * + * @return The formatted string that represents the seconds, from the + * specified milliseconds. + */ + public static String formatMillisToSecs(long millis) { + return formatMillisToSecs(millis, 1); + } + + /** + * Converts the amount of seconds to a time readable format. + * + * Wrapper around {@link #timeToString(long)}. + * + * 330 seconds is represented as "5m 30s". + * + * @param secs - the amount of seconds + * + * @return A string format of the representation of the time. + */ + public static String timeToString(int secs) { + return timeToString(secs * 1000L); + } + + /** + * Converts the amount of seconds to a time readable format. + * + * 86400000 is represented as "24h". + * + * @param msec - the amount of milliseconds + * + * @return A string format of the representation of the time. + */ + public static String timeToString(long msec) { + if (msec < 1000) { + return "0s"; + } + + StringBuilder text = new StringBuilder(); + + if (msec >= 86400000) { + text.append(msec / 86400000).append("d "); + msec %= 86400000; + } + + if (msec >= 3600000) { + text.append(msec / 3600000).append("h "); + msec %= 3600000; + } + + if (msec >= 60000) { + text.append(msec / 60000).append("m "); + msec %= 60000; + } + + if (msec >= 1000) { + text.append(msec / 1000).append("s "); + msec %= 1000; + } + + return text.toString().trim(); + } + + /** + * Get the string representation of the time between time1 and time2. + * + * Wrapper around {@link #timeToString(long)}. + * + * 86400000 is represented as "24h". + * + * @param t1 - the time in milliseconds + * @param t2 - the time in milliseconds + * + * @return The string representation of the time between t1 and t2. + */ + public static String getTimeBetween(long t1, long t2) { + return timeToString(Math.abs(t1 - t2)); + } + + /** + * Get whether or not the these are different day timestamp. + * + * @param ts - the first timestamp + * @param ts2 - the second timestamp + * + * @return {@code true} if the timestamps are different days. + */ + public static boolean isDifferentDay(Timestamp ts, Timestamp ts2) { + + // if same year, month, and day + if (ts.getYear() == ts2.getYear()) { + if (ts.getMonth() == ts2.getMonth()) { + if (ts.getDay() == ts2.getDay()) { + return false; + } + } + } + + return true; + } + + /** + * Get the difference in hours between the two timestamps. + * <p> + * Note: This returns the whole number of hours. + * + * @param current - the current timestamp + * @param last - the last timestamp + * + * @return The difference in hours between the current timestamp and the + * last timestamp. + */ + public static int getDifferenceInHours(Timestamp current, Timestamp last) { + + long diff = current.getTime() - last.getTime(); + long diffSeconds = diff / 1000; + long diffMinutes = diff / (60 * 1000); + long diffHours = diff / (60 * 60 * 1000); + + return (int) diffHours; + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/title/NMSTitle.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/title/NMSTitle.java new file mode 100644 index 0000000..b4079bf --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/util/title/NMSTitle.java @@ -0,0 +1,14 @@ +package net.grandtheftmc.core.util.title; + +import org.bukkit.entity.Player; + +/** + * Created by Luke Bingham on 07/08/2017. + */ +public class NMSTitle { + + @Deprecated //NMS code removed. + public static void sendTitle (Player player, String title, String subtitle, int fadein, int duration, int fadeout) { + player.sendTitle(title, subtitle, fadein, duration, fadeout); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/Reward.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/Reward.java new file mode 100644 index 0000000..d3c8f70 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/Reward.java @@ -0,0 +1,422 @@ +package net.grandtheftmc.core.voting; + +import java.util.Arrays; +import java.util.Date; +import java.util.List; + +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.achivements.Achievement; +import net.grandtheftmc.core.events.RewardEvent; +import net.grandtheftmc.core.events.UpdateEvent; +import net.grandtheftmc.core.nametags.Nametag; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.voting.events.RewardCheckEvent; +import net.grandtheftmc.core.voting.events.RewardGiveEvent; +import net.grandtheftmc.core.voting.events.RewardInfoEvent; + +public class Reward { + private final RewardType type; + private final String name; + + private ItemStack[] items; + private double amount = 1; + private String customType; + private String customName; + private List<String> customList; + private int minTokens; + private int maxTokens; + private UserRank rank; + private int days; + private Nametag nametag; + private Achievement achievement; + /** The skin id for the weapon */ + private short weaponSkinId; + /** The weapon star rating to give */ + private int stars; + + public Reward(String name, ItemStack[] items) { + this.name = name; + this.items = items; + this.type = RewardType.ITEMS; + } + + public Reward(String name, RewardType type, String customName){ + this.name = name; + this.type = type; + this.customName = customName; + } + + public Reward(String name, double amount, RewardType type) { + this.name = name; + this.amount = amount; + this.type = type; + } + + public Reward(String name, String customType, String customName, double amount) { + this.name = name; + this.type = RewardType.CUSTOM; + this.customType = customType; + this.customName = customName; + this.amount = amount; + } + + public Reward(String name, String customType, List<String> customList) { + this.name = name; + this.type = RewardType.CUSTOM; + this.customType = customType; + this.customList = customList; + } + + public Reward(String name, UserRank trialRank, int days) { + this.type = RewardType.TRIAL_RANK; + this.name = name; + this.rank = trialRank; + this.days = days; + } + + public Reward(String name, UserRank permanentRank) { + this.type = RewardType.RANK; + this.name = name; + this.rank = permanentRank; + } + + public Reward(String name, Nametag nametag) { + this.type = RewardType.NAMETAG; + this.name = name; + this.nametag = nametag; + } + + public Reward(String name, String customName, RewardType rewardType) { // FOR COMMANDS AND PERMISSIONS, {uuid} and {name} placeholders + this.type = rewardType; + this.name = name; + this.customName = customName; + } + + public Reward(String name, Achievement achievement) { + this.type = RewardType.ACHIEVEMENT; + this.name = name; + this.achievement = achievement; + } + + public Reward(String name, String customName, int stars, short weaponSkinID, RewardType rewardType) { // FOR COMMANDS AND PERMISSIONS, {uuid} and {name} placeholders + this.type = rewardType; + this.name = name; + this.customName = customName; + this.stars = stars; + this.weaponSkinId = weaponSkinID; + } + + public RewardType getType() { + return this.type; + } + + public String getName() { + return this.name; + } + + public String getDisplayName() { + switch (this.type) { + case ITEMS: + break; + case BUCKS: + return "&a&l" + (int) this.amount + " Bucks"; + case MONEY: + return "&a$&l" + (int) this.amount; + case TOKENS: + return "&a&l" + (int) this.amount + "&e&l Token" + (this.amount > 1 ? "s" : ""); + case NAMETAG: + return "&e&l" + this.nametag.getDisplayName(); + case RANK: + return this.rank.getColor() + "&lPermanent " + this.rank.getColoredNameBold(); + case TRIAL_RANK: + return "&a&l" + this.days + " day" + (this.days > 1 ? "s " : " ") + this.rank.getColoredNameBold() + "&a&l Trial"; + case CUSTOM: + break; +// case COSMETIC: +// return this.cosmetic == null ? this.cosmeticType == null ? "&e&lRandom Cosmetic " + +// "&7(&e" + (this.maxTokens > 0 ? this.minTokens + '-' + this.maxTokens : "min " + this.minTokens) + " tokens&7)" : +// '&' + this.cosmeticType.getColor() + "&lRandom " + this.cosmeticType.getColoredDisplayNameSingle() +// + " &7(&e" + (this.maxTokens > 0 ? this.minTokens + '-' + this.maxTokens : "min " + this.minTokens) + " tokens&7)" : +// this.cosmetic.getColoredDisplayName(); + case PERMISSION: + return this.name == null ? "&a&l" + this.customName : this.name; + case CROWBARS: + return "&9&l" + (int) this.amount + " Crowbar" + (this.amount > 1 ? "s" : ""); + case COMMAND: + break; + case ACHIEVEMENT: + return this.achievement.getTitle(); + case WEAPON: + case SKIN: + return "&9&l" + this.name; + + } + return this.name; + } + + public ItemStack[] getItems() { + return this.items; + } + + public double getAmount() { + return this.amount; + } + + public String getCustomType() { + return this.customType; + } + + public String getCustomName() { + return this.customName; + } + + public List<String> getCustomList() { + return this.customList; + } + + public int getMinTokens() { + return this.minTokens; + } + + public int getMaxTokens() { + return this.maxTokens; + } + + public UserRank getTrialRank() { + return this.rank; + } + + public UserRank getRank() { + return this.rank; + } + + public int getDays() { + return this.days; + } + + public Nametag getNametag() { + return this.nametag; + } + + public String getPermission() { + return this.customName; + } + + public short getWeaponSkinId() { + return weaponSkinId; + } + + public int getStars() { + return stars; + } + + public ItemStack getDisplayItem() { + switch (this.type) { + case ITEMS: + return this.items[0]; + case BUCKS: + case MONEY: + return new ItemStack(Material.PAPER, this.amount > 64 ? 64 : (int) this.amount); + case TOKENS: + return new ItemStack(Material.DOUBLE_PLANT, this.amount > 64 ? 64 : (int) this.amount); + case CROWBARS: + return Utils.addItemFlags(new ItemStack(Material.FLINT_AND_STEEL, this.amount > 64 ? 64 : (int) this.amount, (short) 45), ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ATTRIBUTES); +// case COSMETIC: +// return this.cosmeticType == null ? new ItemStack(Material.ENDER_CHEST) : this.cosmetic == null ? this.cosmeticType.getMenuItem() : this.cosmetic.getItem(); + case TRIAL_RANK: + return new ItemStack(this.rank.getMaterial(), this.days > 64 ? 64 : this.days); + case NAMETAG: + return new ItemStack(Material.NAME_TAG); + case RANK: + return new ItemStack(this.rank.getMaterial()); + default: + RewardInfoEvent rewardInfoEvent = new RewardInfoEvent(this, this.type, this.customName); + Bukkit.getPluginManager().callEvent(rewardInfoEvent); + return rewardInfoEvent.getDisplayItem(); + } + } + + public boolean hasReward(Player player, User user) { + switch (this.type) { +// case COSMETIC: +// return this.cosmetic == null ? this.cosmeticType == null ? Arrays.stream(CosmeticType.values()).allMatch(type -> type.getCosmetics().stream() +// .filter(c -> c.getTokens() > this.minTokens && (this.maxTokens <= 0 || c.getTokens() < this.maxTokens)).allMatch(user::hasCosmetic)) +// : this.cosmeticType.getCosmetics().stream().filter(c -> c.getTokens() > this.minTokens && (this.maxTokens <= 0 || c.getTokens() < this.maxTokens)).allMatch(user::hasCosmetic) +// : user.hasCosmetic(this.cosmetic); + case RANK: + return user.getUserRankNonTrial() == this.rank || user.getUserRankNonTrial().isHigherThan(this.rank); + case TRIAL_RANK: + return user.getUserRankNonTrial() == this.rank || user.getUserRank().isHigherThan(this.rank); + case NAMETAG: + return user.hasNametag(this.nametag); + case PERMISSION: + if (Core.getPermsManager().hasPerm(player.getUniqueId(), this.customName)) return true; + case ACHIEVEMENT: + return user.hasAchievement(this.achievement); + default: + RewardCheckEvent rewardCheckEvent = new RewardCheckEvent(player, this, this.type, this.customName); + Bukkit.getPluginManager().callEvent(rewardCheckEvent); + return rewardCheckEvent.getResult(); + } + } + + public void give(Player player, User user, boolean sendMessage) { + + switch (this.type) { + case ITEMS: + if (sendMessage) + player.sendMessage(Lang.REWARDS.f("&a" + this.getDisplayName())); + if (Utils.giveItems(player, this.items)) + player.sendMessage(Utils. + f(Lang.TOKEN_SHOP + "&7Your inventory was full so some items were dropped on the ground!")); + break; + case BUCKS: { + if (sendMessage) { + player.sendMessage(Lang.BUCKS_ADD.f(String.valueOf((int) this.amount))); + } + int amnt = (int) this.amount; + user.addBucks(amnt); + Bukkit.getPluginManager().callEvent(new UpdateEvent(player, UpdateEvent.UpdateReason.BUCKS)); + break; + } + case TOKENS: { + if (sendMessage) { + player.sendMessage(Lang.TOKENS_ADD.f(String.valueOf((int) this.amount))); + } + int amnt = (int) this.amount; + user.addTokens(amnt); + Bukkit.getPluginManager().callEvent(new UpdateEvent(player, UpdateEvent.UpdateReason.TOKENS)); + break; + } + case CROWBARS: + if (sendMessage) { + player.sendMessage(Lang.CROWBARS_ADD.f(String.valueOf((int) this.amount))); + } + int amnt = (int) this.amount; + user.addCrowbars(amnt); + Bukkit.getPluginManager().callEvent(new UpdateEvent(player, UpdateEvent.UpdateReason.CROWBARS)); + break; + case MONEY: + if (sendMessage) { + player.sendMessage(Lang.MONEY_ADD.f(String.valueOf(this.amount))); + } + if (!user.addMoney(this.amount)) { + Core.log(Lang.TOKEN_SHOP.f( + "&cOops " + player.getName() + "! Something went wrong with getting the reward:" + getCustomName() + "! Contact an admin with a screenshot of this message to get it. Time: " + new Date().toGMTString())); + } + Bukkit.getPluginManager().callEvent(new UpdateEvent(player, UpdateEvent.UpdateReason.MONEY)); + break; + case CUSTOM: + if (sendMessage) + player.sendMessage(Lang.REWARDS.f("&a" + this.getDisplayName())); + RewardEvent event = new RewardEvent(player, this); + Bukkit.getPluginManager().callEvent(event); + if (!event.isSuccessful()) + Core.log(Lang.TOKEN_SHOP.f( + "&cOops " + player.getName() + "! Something went wrong with getting the reward:" + getCustomName() + "! Contact an admin with a screenshot of this message to get it. Time: " + new Date().toGMTString())); + break; +// case COSMETIC: +// Cosmetic c = this.cosmetic; +// if (c == null) { +// if (this.cosmeticType == null) { +// List<Cosmetic> cosmetics = new ArrayList<>(); +// Arrays.stream(CosmeticType.values()).forEach(t -> cosmetics.addAll(t.getCosmetics().stream().filter(co -> !user.hasCosmetic(co) && co.getTokens() > 0 && co.getTokens() > this.minTokens && (this.maxTokens < 0 || co.getTokens() <= this.maxTokens)).collect(Collectors.toList()))); +// if (cosmetics.isEmpty()) { +// player.sendMessage(Lang.COSMETICS.f("Wow! You already own ALL cosmetics!")); +// break; +// } +// c = cosmetics.get(ThreadLocalRandom.current().nextInt(cosmetics.size())); +// } else { +// List<Cosmetic> cosmetics = this.cosmeticType.getCosmetics().stream().filter(co -> !user.hasCosmetic(co)).collect(Collectors.toList()); +// c = cosmetics.get(ThreadLocalRandom.current().nextInt(cosmetics.size())); +// if (c == null) { +// player.sendMessage(Lang.COSMETICS.f("Wow! You already own ALL " + this.cosmeticType.getDisplayName() + "s!")); +// break; +// } +// } +// } +// if (sendMessage) +// player.sendMessage(Lang.COSMETICS.f("&a" + this.getDisplayName() + this.cosmetic == null ? "&7: " + c.getColoredDisplayName() : "")); +// user.giveCosmetic(player, this.cosmetic); +// break; + case TRIAL_RANK: + if (user.hasTrialRank() && user.getTrialRank().isHigherThan(this.rank)) { + if (sendMessage) + player.sendMessage(Lang.RANKS.f("&7You already have a trial rank higher than the one you won (" + this.rank.getColoredNameBold() + "&7, &a" + this.days + "&7 days)!")); + return; + } + if (user.hasTrialRank() && user.getTrialRank() == this.rank) { + if (sendMessage) + player.sendMessage(Lang.RANKS.f("&a" + this.getDisplayName() + " &7(extended)")); + user.setTrialRank(this.rank, user.getTrialRankExpiry() + 86400000L * this.days); + Bukkit.getPluginManager().callEvent(new UpdateEvent(player, UpdateEvent.UpdateReason.RANK)); + } + if (sendMessage) + player.sendMessage(Lang.RANKS.f("&a" + this.getDisplayName())); + user.setTrialRank(this.rank, System.currentTimeMillis() + 86400000L * this.days); + Bukkit.getPluginManager().callEvent(new UpdateEvent(player, UpdateEvent.UpdateReason.RANK)); + break; + case NAMETAG: + if (sendMessage) + player.sendMessage(Lang.NAMETAGS.f("&a" + this.getDisplayName())); + user.giveNametag(this.nametag); + break; + case PERMISSION: + if (sendMessage) + player.sendMessage(Lang.REWARDS.f("&a" + this.getDisplayName())); + Core.getPermsManager().addPerm(player.getUniqueId(), this.customName); + break; + case RANK: + if (sendMessage) + player.sendMessage(Lang.RANKS.f("&a" + this.getDisplayName())); + user.setUserRank(this.rank); + Bukkit.getPluginManager().callEvent(new UpdateEvent(player, UpdateEvent.UpdateReason.RANK)); + break; + case COMMAND: + if (sendMessage) + player.sendMessage(Lang.REWARDS.f("&a" + this.getDisplayName())); + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), this.customName.replace("{name}", player.getName()).replace("{uuid}", player.getUniqueId().toString())); + break; + case ACHIEVEMENT: + if (sendMessage) { + player.sendMessage(Lang.REWARDS.f("&aACHIEVEMENT " + this.achievement.getTitle())); + } + user.addAchievement(this.achievement); + break; + case WEAPON: + case SKIN: + if (sendMessage) + player.sendMessage(Lang.REWARDS.f("&a" + this.getDisplayName())); + event = new RewardEvent(player, this); + Bukkit.getPluginManager().callEvent(event); + if (!event.isSuccessful()) + Core.log(Lang.REWARDS.f( + "&cOops " + player.getName() + "! Something went wrong with getting the reward:" + getCustomName() + "! Contact an admin with a screenshot of this message to get it. Time: " + new Date().toGMTString())); + break; + default: + RewardGiveEvent rewardGiveEvent = new RewardGiveEvent(player, this.type, this.customName); + Bukkit.getPluginManager().callEvent(rewardGiveEvent); + break; + } + } + + public enum RewardType { + ITEMS, BUCKS, TOKENS, MONEY, CUSTOM, COSMETIC, TRIAL_RANK, NAMETAG, PERMISSION, CROWBARS, RANK, COMMAND, ACHIEVEMENT, + VEHICLE, CHEATCODE, WEAPON, SKIN; + + public static RewardType fromString(String string) { + return Arrays.stream(RewardType.class.getEnumConstants()).filter(type -> type.toString().equalsIgnoreCase(string)).findFirst().orElse(null); + } + + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/RewardPack.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/RewardPack.java new file mode 100644 index 0000000..5de5421 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/RewardPack.java @@ -0,0 +1,67 @@ +package net.grandtheftmc.core.voting; + +import net.grandtheftmc.core.users.User; +import org.bukkit.entity.Player; + +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; + +/** + * Created by Liam on 23/04/2017. + */ +public class RewardPack { + + private final String name; + private final List<Reward> rewards; + private final String description; + + public RewardPack(Reward reward, String description) { + this.name = reward.getName(); + this.rewards = Collections.singletonList(reward); + this.description = description; + } + + public RewardPack(String name, List<Reward> rewards, String description) { + this.name = name; + this.rewards = rewards; + this.description = description; + } + + public List<Reward> get() { + return this.rewards; + } + + public String getName() { + return this.name; + } + + public String getDisplayName() { + return this.rewards.size() == 1 ? this.rewards.get(0).getDisplayName() : this.name; + } + + public String getDescription() { + // todo i want this shown in the crate rewards menu/tokenshop menu if not null + return this.description; + } + + public boolean hasAllRewards(Player player, User user) { + return this.rewards.stream().allMatch(r -> r.hasReward(player, user)); + } + + public boolean hasAnyReward(Player player, User user) { + return this.rewards.stream().anyMatch(r -> r.hasReward(player, user)); + } + + public int hasAnyRewardSize(Player player, User user) { + return this.rewards.stream().filter(r -> r.hasReward(player, user)).collect(Collectors.toList()).size(); + } + + public void give(Player player, User user, String action, double price, boolean sendMessage) { + for (Reward reward : this.rewards) + reward.give(player, user, sendMessage); + if (action != null) { + user.insertLog(player, action, this.rewards.size() > 1 ? "PACK" : this.rewards.size() == 1 ? this.rewards.get(0).getType().toString() : "ERROR", this.name, this.rewards.size() > 1 ? 1 : this.rewards.size() == 1 ? this.rewards.get(0).getAmount() : 1, price); + } + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/ShopItem.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/ShopItem.java new file mode 100644 index 0000000..297156d --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/ShopItem.java @@ -0,0 +1,53 @@ +package net.grandtheftmc.core.voting; + +import com.j0ach1mmall3.jlib.methods.Parsing; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.events.UpdateEvent; +import net.grandtheftmc.core.users.User; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +public class ShopItem { + + private final int price; + private final ItemStack item; + private final RewardPack pack; + + public ShopItem(String name, int price, String item, RewardPack pack) { + this.price = price; + this.item = Parsing.parseItemStack(item); + this.pack = pack; + } + + + public String getName() { + return this.pack.getName(); + } + + public int getPrice() { + return this.price; + } + + public ItemStack getItem() { + return this.item; + } + + public RewardPack getRewardPack() { + return this.pack; + } + + public void buy(Player player, User user) { + if (this.price > 0 && !user.hasTokens(this.price)) { + player.sendMessage( + Lang.TOKEN_SHOP.f("&7You do not have the &e&l" + this.price + " Tokens&7 to pay for this item!")); + return; + } + player.sendMessage( + Lang.TOKEN_SHOP.f("&7You bought &a" + this.pack.getName() + "&7 for &e&l" + this.price + " Token" + (this.price == 1 ? "" : "s") + "&7!")); + user.takeTokens(this.price); + this.pack.give(player, user, "buyShopItem", this.price, true); + UpdateEvent e = new UpdateEvent(player, UpdateEvent.UpdateReason.TOKENS); + Bukkit.getPluginManager().callEvent(e); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/VoteCommand.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/VoteCommand.java new file mode 100644 index 0000000..a4fe09d --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/VoteCommand.java @@ -0,0 +1,125 @@ +package net.grandtheftmc.core.voting; + +import java.sql.Timestamp; + +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.plugin.PluginManager; + +import com.vexsoftware.votifier.model.Vote; +import com.vexsoftware.votifier.model.VotifierEvent; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.menus.MenuManager; +import net.grandtheftmc.core.util.Utils; + +public class VoteCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command c, String lbl, String[] args) { + if (!(s instanceof Player)) { + s.sendMessage(Utils.f("&cYou are not a player!")); + return true; + } + Player player = (Player) s; + if (args.length == 0 || !s.isOp()) { + MenuManager.openMenu((Player) s, "vote"); + return true; + } + + switch (args[0].toLowerCase()) { + case "test": { + + // vote test [TWO] + + PluginManager pm = Bukkit.getPluginManager(); + if (pm.getPlugin("NuVotifier") == null && + pm.getPlugin("Votifier") == null) { + s.sendMessage(Lang.VOTE.f("&7This command is disabled!")); + return true; + } + + VoteSite site = VoteSite.TWO; + if (args.length == 2){ + site = VoteSite.valueOf(args[1]); + } + + Vote vote = new Vote(); + vote.setUsername(player.getName()); + vote.setServiceName(site.getName()); + vote.setAddress(site.getURL()); + vote.setTimeStamp(new Timestamp(System.currentTimeMillis()).toString()); + VotifierEvent event = new + VotifierEvent(vote); + Bukkit.getPluginManager().callEvent(event); + return true; + }// + case "reward": { + if (args.length != 2) { + s.sendMessage(Utils.f("&c/vote reward <reward>")); + return true; + } + VoteReward reward = Core.getVoteManager().getVoteReward(args[1]); + if (reward == null) { + s.sendMessage(Lang.VOTE.f("&7That vote reward does not exist!")); + return true; + } + s.sendMessage(Lang.VOTE.f("&7Executing vote reward "+reward.getDisplayName()+"&7:")); + reward.give(player,Core.getUserManager().getLoadedUser(player.getUniqueId())); + return true; + } + case "resetmonth": + case "resetmonthly": + player.sendMessage(Utils.f("&7This command does not currently work.")); +// player.sendMessage(Utils.f("&7This month's top voters:")); +// ServerUtil.runTaskAsync(() -> { +// VoteDAO.deleteLastMonthsVoters(); +// +// Optional<VoteDAO.VoteUser[]> optional = VoteDAO.getTopTenVoters(); +// if(!optional.isPresent()) { +// player.sendMessage(Utils.f("&cAn error occurred when fetching top voters :(")); +// return; +// } +// +// for(VoteDAO.VoteUser voteUser : optional.get()) { +// player.sendMessage(Utils.f("&7#&6" + voteUser.getPossition() + " &7" + voteUser.getName() + " with &6" + voteUser.getVotes() + " &7votes.")); +// } +// +// //Core.getVoteManager().resetMonthlyVotes(); +// Core.getVoteManager().setLastMonthlyReset(System.currentTimeMillis()); +// s.sendMessage(Lang.VOTE.f("&7Monthly vote count has been reset!")); +// }); + +// new BukkitRunnable() { +// @Override +// public void run() { +// try { +// int counter = 1; +// Core.sql.prepareStatement("TRUNCATE table last_months_voters;").execute(); +// ResultSet rs = Core.sql.prepareStatement("SELECT * FROM votes ORDER BY `votes`.`monthlyVotes` DESC LIMIT 10;").executeQuery(); +// while (rs.next()) { +// String name = rs.getString("name"); +// int votes = rs.getInt("monthlyVotes"); +// Core.sql.prepareStatement("INSERT INTO last_months_voters (slot, name) VALUES ('" + counter + "', '" + name + "');").execute(); +// player.sendMessage(Utils.f("&7#&6" + counter + " &7" + name + " with &6" + votes + " &7votes.")); +// counter++; +// } +// Core.getVoteManager().resetMonthlyVotes(); +// Core.getVoteManager().setLastMonthlyReset(System.currentTimeMillis()); +// s.sendMessage(Lang.VOTE.f("&7Monthly vote count has been reset!")); +// } catch (SQLException e) { +// e.printStackTrace(); +// } +// } +// }.runTaskAsynchronously(Core.getInstance()); + return true; + default: + return true; + } + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/VoteManager.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/VoteManager.java new file mode 100644 index 0000000..71ed2c5 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/VoteManager.java @@ -0,0 +1,946 @@ +package net.grandtheftmc.core.voting; + +import java.sql.Connection; +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.UUID; +import java.util.stream.Collectors; + +import org.bukkit.Bukkit; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.inventory.ItemStack; +import org.bukkit.plugin.Plugin; +import org.bukkit.scheduler.BukkitRunnable; +import org.json.simple.JSONObject; + +import com.j0ach1mmall3.jlib.methods.Parsing; +import com.vexsoftware.votifier.model.Vote; +import com.vexsoftware.votifier.model.VotifierEvent; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.achivements.Achievement; +import net.grandtheftmc.core.currency.Currency; +import net.grandtheftmc.core.database.BaseDatabase; +import net.grandtheftmc.core.database.dao.VoteDAO; +import net.grandtheftmc.core.events.UpdateEvent; +import net.grandtheftmc.core.menus.MenuManager; +import net.grandtheftmc.core.nametags.Nametag; +import net.grandtheftmc.core.servers.ServerType; +import net.grandtheftmc.core.transaction.state.user.UserStateTransactionDAO; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserDAO; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.util.Component; +import net.grandtheftmc.core.util.PluginAssociated; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.util.debug.Log; +import net.grandtheftmc.core.util.json.JSONBuilder; +import net.grandtheftmc.core.util.time.TimeUtil; +import net.grandtheftmc.jedis.JedisChannel; +import net.grandtheftmc.jedis.message.UserStateTransactionCheck; +import net.grandtheftmc.jedis.message.VoteNotificationMessage; +import net.md_5.bungee.api.ChatColor; + +/** +<<<<<<< HEAD + * + * @deprecated `voters` field is traversed everytime someone votes, and + * therefore if we have 10,000 voters in one day, just inserting a + * vote looks through 10,000 records. This should be stored as a + * HashMap. Also this data is never cleaned up. Why do we have it + * here? Player data should be read/write to the database and not + * handled. +======= + * @deprecated `voters` field is traversed everytime someone votes, and therefore if we have 10,000 voters in one day, just inserting a vote looks through 10,000 records. This should be stored as a HashMap. Also this data is never cleaned up. Why do we have it here? Player data should be read/write to the database and not handled. +>>>>>>> refs/heads/develop + */ +@Deprecated +public class VoteManager implements Component<VoteManager, Core>, PluginAssociated { + + /** The owning plugin */ + private final Plugin plugin; + /** List of voters that have been registered as "voted" */ + private final List<Voter> voters = new ArrayList<>(); + /** Possible vote rewards */ + private final List<VoteReward> voteRewards = new ArrayList<>(); + /** Possible daily rewards */ + private final List<RewardPack> dailyRewards = new ArrayList<>(); + /** Possible lucky daily rewards */ + private final List<RewardPack> luckyDailyRewards = new ArrayList<>(); + /** Rewards per user rank */ + private final Map<UserRank, List<RewardPack>> monthlyRewards = new HashMap<>(); + private final List<ShopItem> shopItems = new ArrayList<>(); + private String voteLink = "vote.grandtheftmc.net"; + private long lastMonthlyReset; + private int taskId = -1; + + /** The top voters, populated by a repeating task */ + private VoteDAO.VoteUser[] topVoters; + /** The last month top voters, populated by a repeating task */ + private VoteDAO.VoteUser[] lastTopVoters; + + /** + * Construct a new VoteManager. + * <p> + * This handles the receiving of votes and credits the user with rewards as user state transactions. + * + * Note: When a vote is received it also forwards a vote message via redis to all servers. + * Therefore only hub1 should really be getting any VotifierEvents. + * </p> + * + * @param plugin - the owning plugin + */ + public VoteManager(Plugin plugin) { + this.plugin = plugin; + this.loadLinksAndRewards(); + this.loadTokenShop(); + this.startSchedule(); + + // every 10 minutes + Bukkit.getScheduler().runTaskTimerAsynchronously(getPlugin(), () -> { + + // local cache result + VoteDAO.VoteUser[] topVotersLocal = null; + // local cache result + VoteDAO.VoteUser[] lastVotersLocal = null; + + try (Connection conn = BaseDatabase.getInstance().getConnection()){ + topVotersLocal = VoteDAO.getTopVoters(conn, 10).orElse(null); + lastVotersLocal = VoteDAO.getLastTopVoters(conn, 10).orElse(null); + } + catch(Exception e){ + e.printStackTrace(); + } + + final VoteDAO.VoteUser[] finalTopVoters = topVotersLocal; + final VoteDAO.VoteUser[] finalLastVoters = lastVotersLocal; + Bukkit.getScheduler().runTask(getPlugin(), () -> { + topVoters = finalTopVoters; + lastTopVoters = finalLastVoters; + }); + + } , 0L, 20 * 600L); + } + + /** + * {@inheritDoc} + */ + @Override + public VoteManager onDisable(Core plugin) { + if (!this.voters.isEmpty()) + this.voters.clear(); + if (!this.voteRewards.isEmpty()) + this.voteRewards.clear(); + if (!this.dailyRewards.isEmpty()) + this.dailyRewards.clear(); + if (!this.luckyDailyRewards.isEmpty()) + this.luckyDailyRewards.clear(); + if (!this.monthlyRewards.isEmpty()) + this.monthlyRewards.clear(); + if (!this.shopItems.isEmpty()) + this.shopItems.clear(); + return this; + } + + /** + * Start the schedule task of broadcasting votes every 5 minutes. + */ + public void startSchedule() { + if (this.taskId > 0) + Bukkit.getScheduler().cancelTask(this.taskId); + this.taskId = new BukkitRunnable() { + @Override + public void run() { + VoteManager.this.broadcastVoteMessage(); + } + }.runTaskTimer(Core.getInstance(), 300, 300).getTaskId(); + } + + /** + * Iterate through all the voters that this manager knows about and send notifications across the server. + */ + public void broadcastVoteMessage() { + + // if no voters to display + if (this.voters.isEmpty()) + return; + + // build the broadcast string + StringBuilder s = new StringBuilder(Lang.VOTE.s()); + + int size = this.voters.size(); + for (int i = 0; i < this.voters.size(); i++) { + Voter voter = this.voters.get(i); + s.append("&a").append(voter.getName()).append(voter.getVotes() > 1 ? " &7(&e" + voter.getVotes() + "&7)" : "&7"); + if (size - i == 1){ + s.append(" voted for the server and received awesome rewards! Do &a\"/vote\"&7 to find out more! Vote on all &e5 &7sites for maximum rewards!"); + } + else if (size - i == 2){ + s.append(" and "); + } + else{ + s.append(", "); + } + } + + // broadcast to the server + Utils.broadcast(s.toString()); + + // clear voters list + this.voters.clear(); + } + + /** + * Listens in on the Votifier events. + * <p> + * This event is on low so we can run it first. + * + * @param event - the event + */ + @EventHandler(priority = EventPriority.LOW) + public void onVotifierEvent(VotifierEvent event) { + + // grab event variables + Vote vote = event.getVote(); + String userName = vote.getUsername(); + + Log.info("VoteManager", "Received vote from " + vote.getServiceName() + " for user=" + userName); + + // get the site that they voted on + VoteSite voteSite = VoteSite.find(vote.getServiceName()).orElse(null); + + // if not a valid site, log message + if (voteSite == null){ + Log.info("VoteManager", "Voting site '" + vote.getServiceName() + "' not found in our database!"); + return; + } + + // async fetch + Bukkit.getScheduler().runTaskAsynchronously(getPlugin(), () -> { + + try (Connection conn = BaseDatabase.getInstance().getConnection()) { + + UUID uuid = UserDAO.getUUID(conn, userName); + if (uuid != null) { + + // grab the user vote record + VoteRecord vr = VoteDAO.getUserVoteRecord(conn, uuid); + + // check if this vote site has already been voted on + if (isVoteSiteCooldown(vr, voteSite, userName)){ + return; + } + + // handle the vote streak increment + handleVoteStreakIncrement(conn, vr); + + // add a total vote + VoteDAO.incrementTotalVotes(conn, uuid); + + // update the timestamp for this vote site + VoteDAO.updateVoteSiteTimestamp(conn, uuid, voteSite); + + int numVoteTokens = 1; + + // determine chance of getting higher streak + int rollChance = vr.getStreak() * 5; + if (rollChance >= 100){ + rollChance = 100; + } + + // what additional message to send along in the payload + String message = "&7Remember to vote daily to increase your vote streak for more rewards! &e&lCurrent Vote Streak&7: " + (vr.getStreak() + 1); + + // if double reward + if (Utils.calculateChance(rollChance)) { + numVoteTokens = 2; + message = "&7You got lucky and earned a &e&lDouble Vote&7! Chance: &a&l" + rollChance + "%"; + } + // if first three days of month + else if (new Timestamp(System.currentTimeMillis()).getDate() <= 3) { + numVoteTokens = 2; + message = "&7Vote rewards are doubled in the first three days of every month! Make sure to keep voting all month to build up your &e&lVote Streak&7!"; + } + + // log the vote to the database + VoteDAO.logUserVote(conn, vr.getOwner(), numVoteTokens, voteSite != null ? voteSite.getId() : -1); + + // create in the format of + // {"type": "currency", "uuid": "0xDD", "currency": "VotingTokens", "amount": 1} + JSONObject payload = new JSONBuilder().set("type", "currency").set("uuid", uuid.toString()).set("currency", Currency.VOTE_TOKEN.getId()).set("amount", numVoteTokens).create(); + UserStateTransactionDAO.addUserStateTransaction(conn, uuid, payload); + + // get the global messaging channel and send a vote message payload through + Core.getJedisManager().getModule(JedisChannel.GLOBAL).sendMessage(new VoteNotificationMessage(uuid, message)); + // get the global messaging channel and send a check user state payload through + Core.getJedisManager().getModule(JedisChannel.GLOBAL).sendMessage(new UserStateTransactionCheck(uuid)); + } + } + catch (Exception e) { + e.printStackTrace(); + } + }); + } + + /** + * Claim the daily reward for the given player. + * + * @param player - the player claiming the reward + * @param user - the user object representation for this player + */ + public void claimDaily(Player player, User user) { + if (Core.getSettings().getType() == ServerType.HUB) { + player.sendMessage(Lang.REWARDS.f("&7Please claim this reward on " + Core.getSettings().getServer_GTM_shortName() + " to receive extra money!")); + return; + } + if (!user.canClaimDailyReward()) { + player.sendMessage(Lang.REWARDS.f("&7You need to wait &c&l" + Utils.timeInMillisToText(user.getTimeUntilDailyReward()) + "&7 until you can claim your daily reward again!")); + return; + } + user.setLastDailyReward(); + if (Utils.calculateChance(user.getLuckyDailyChance())) { + player.sendMessage(Lang.REWARDS.f("&7You got lucky and earned a &e&lLucky Reward&7 of &e&l5 Tokens&7! Chance: &a%&l" + user.getLuckyDailyChance())); + user.addTokens(5); + for (RewardPack pack : this.luckyDailyRewards) { + pack.give(player, user, null, 0, true); + } + } + else { + player.sendMessage(Lang.REWARDS.f("&7You received &e&l2 Tokens&7 as a daily reward!")); + user.addTokens(2); + for (RewardPack pack : this.dailyRewards) { + pack.give(player, user, null, 0, true); + } + } + user.addDailyStreak(1); + MenuManager.updateMenu(player, "rewards"); + Bukkit.getPluginManager().callEvent(new UpdateEvent(player, UpdateEvent.UpdateReason.TOKENS)); + } + + /** + * Claim the monthly reward for the given player. + * + * @param player - the player claiming the reward + * @param user - the user object representation for this player + */ + public void claimMonthly(Player player, User user) { + + // If user rank specifically is DEFAULT (exclude trial) + if (user.getUserRankNonTrial() == UserRank.DEFAULT) { + player.sendMessage(Lang.REWARDS.f("&7Only donators can claim Donor Rewards! Buy a rank at &a&l" + Core.getSettings().getStoreLink() + "&7!")); + return; + } + + // If server type is HUB + if (Core.getSettings().getType() == ServerType.HUB) { + player.sendMessage(Lang.REWARDS.f("&7Please claim this reward on " + Core.getSettings().getServer_GTM_shortName() + " to receive extra money and exclusive items!")); + return; + } + + // If user cannot claim rewards + if (!user.canClaimMonthlyReward()) { + player.sendMessage(Lang.REWARDS.f("&7You need to wait &c&l" + Utils.timeInMillisToText(user.getTimeUntilMonthlyReward()) + "&7 until you can claim your donor reward again!")); + return; + } + + user.setLastDonorReward(); + UserRank rank = user.getUserRankNonTrial().isHigherThan(UserRank.SUPREME) ? UserRank.SUPREME : user.getUserRankNonTrial(); + int tokens = rank.getMonthlyTokens(); + user.addTokens(tokens); + user.insertLog(player, "claimDonorReward", rank.toString(), "tokens", tokens, 0); + if (this.monthlyRewards.containsKey(rank)) + for (RewardPack pack : this.monthlyRewards.get(rank)) { + player.sendMessage(Lang.REWARDS.f(pack.getDisplayName())); + pack.give(player, user, "claimDonorReward", 0, true); + } + player.sendMessage(Lang.REWARDS.f("&7You claimed &e&l" + tokens + " Tokens&7 from your " + rank.getColoredNameBold() + "&7 rank!")); + Utils.broadcastExcept(player, Lang.REWARDS.f(user.getColoredName(player) + "&7 claimed &e&l" + tokens + " Tokens&7 and a bunch of other cool items from their " + rank.getColoredNameBold() + "&7 rank!")); + MenuManager.updateMenu(player, "rewards"); + Bukkit.getPluginManager().callEvent(new UpdateEvent(player, UpdateEvent.UpdateReason.TOKENS)); + } + + /** + * Spend amount of votes for the given player + * + * @param player - the player claiming the reward + * @param user - the user object representation for this player + * @param amount - the amount of votes to spend + */ + public void spendVote(Player player, User user, int amount) { + if (Core.getSettings().getType() == ServerType.HUB) { + player.sendMessage(Lang.REWARDS.f("&7Please claim this reward on " + Core.getSettings().getServer_GTM_shortName() + " to receive extra money and rare rewards!")); + return; + } + if (user.getVotes() <= 0) { + player.sendMessage(Lang.VOTE.f("&7You don't have any votes left to claim!")); + return; + } + for (int i = 0; i < amount; i++) { + this.spendVote(player, user); + } + } + + /** + * Spend only one vote for the given player. + * + * @param player - the player claiming the reward + * @param user - the user object representation for this player + */ + public void spendVote(Player player, User user) { + if (Core.getSettings().getType() == ServerType.HUB) { + player.sendMessage(Lang.REWARDS.f("&7Please claim this reward on " + Core.getSettings().getServer_GTM_shortName() + " to receive extra money and rare rewards!")); + return; + } + if (user.getVotes() <= 0) { + player.sendMessage(Lang.VOTE.f("&7You don't have any votes left to claim!")); + return; + } + user.removeVote(); + player.sendMessage(Lang.VOTE.f("&7Thank you for voting! Here are your rewards:")); + for (VoteReward reward : this.voteRewards) + if (reward.getChance() == 100.0000 || Utils.calculateChance(reward.getChance())) + reward.give(player, user); + MenuManager.updateMenu(player, "vote"); + } + + /** + * Spend all the votes possible for the given player. + * + * @param player - the player claiming the reward + * @param user - the user object representation for this player + */ + public void spendAllVotes(Player player, User user) { + if (user.getVotes() <= 0) { + player.sendMessage(Lang.VOTE.f("&7You don't have any votes left to claim!")); + return; + } + for (int i = 0; i < user.getVotes(); i++) { + this.spendVote(player, user); + } + } + + /** + * Get the voter based off the username from the voters list. + * + * @param username - the username to lookup + * + * @return The voter, if one exists, otherwise {@code null} + */ + public Voter getVoter(String username) { + return this.voters.stream().filter(voter -> Objects.equals(voter.getName(), username)).findFirst().orElse(null); + } + + /** + * Create the voter in the voters list, if they don't already exist. + * + * @param username - the username for the voter + * + * @return The voter object. + */ + public Voter createVoter(String username) { + for (Voter voter : this.voters) + if (Objects.equals(voter.getName(), username)) + return voter; + Voter v = new Voter(username); + this.voters.add(v); + return v; + } + + /** + * Save the settings of the vote manager. + * <p> + * This will save the last reset timing to the voting.yml. + * + * @param shutdown - {@code true} if this is called via shutdown, {@code false} otherwise. + */ + public void save(boolean shutdown) { + if (Core.getSettings().getType() == ServerType.HUB) { + Core.getSettings().getVotingConfig().set("lastreset", this.lastMonthlyReset); + Utils.saveConfig(Core.getSettings().getVotingConfig(), "voting"); + } + } + + /** + * Load the rewards from the yml files. + */ + public void loadLinksAndRewards() { + this.voters.clear(); + YamlConfiguration c = Core.getSettings().getVotingConfig(); + if (c.get("votelink") != null) + this.voteLink = c.getString("votelink"); +// this.lastMonthlyReset = c.get("lastreset") == null ? 0 : c.getLong("lastreset"); +// if (Core.getSettings().getType() == ServerType.HUB) { +// if (this.lastMonthlyReset + TimeUnit.DAYS.toMillis(30) < System.currentTimeMillis()) { +// this.resetMonthlyVotes(); +// this.setLastMonthlyReset(System.currentTimeMillis()); +// } +// } + this.voteRewards.clear(); + if (c.get("rewards") != null) + for (String name : c.getConfigurationSection("rewards").getKeys(false)) { + try { + double chance = c.get("rewards." + name + ".chance") == null ? 100 : c.getDouble("rewards." + name + ".chance"); + String item = c.getString("rewards." + name + ".item"); + RewardPack pack = this.getRewardPack(c, name, "rewards." + name); + if (pack == null) + Core.error("Error while loading RewardPack for vote reward: " + name); + else + this.voteRewards.add(new VoteReward(pack, item, chance)); + } + catch (Exception ex) { + Core.error("Error while loading vote reward: " + name); + ex.printStackTrace(); + } + } + this.dailyRewards.clear(); + this.luckyDailyRewards.clear(); + this.monthlyRewards.clear(); + c = Core.getSettings().getRewardsConfig(); + if (c.get("daily") != null) + for (String name : c.getConfigurationSection("daily").getKeys(false)) { + try { + RewardPack pack = this.getRewardPack(c, name, "daily." + name); + if (pack == null) + Core.error("Error while loading RewardPack for daily reward: " + name); + else + this.dailyRewards.add(pack); + } + catch (Exception e) { + Core.error("Error while loading daily reward: " + name); + e.printStackTrace(); + } + } + if (c.get("luckyDaily") != null) + for (String name : c.getConfigurationSection("luckyDaily").getKeys(false)) { + try { + RewardPack pack = this.getRewardPack(c, name, "luckyDaily." + name); + if (pack == null) + Core.error("Error while loading RewardPack for luckyDaily reward: " + name); + else + this.luckyDailyRewards.add(pack); + } + catch (Exception e) { + Core.error("Error while loading luckyDaily reward: " + name); + e.printStackTrace(); + } + } + if (c.get("monthly") != null) + for (String rankName : c.getConfigurationSection("monthly").getKeys(false)) { + try { + UserRank rank = UserRank.getUserRankOrNull(rankName); + if (rank == null) { + Core.error("Error while loading monthly reward with invalid name: " + rankName); + continue; + } + List<RewardPack> packs = new ArrayList<>(); + for (String name : c.getConfigurationSection("monthly." + rankName).getKeys(false)) { + RewardPack pack = this.getRewardPack(c, name, "monthly." + rankName + '.' + name); + if (pack == null) + Core.error("Error while loading RewardPack for monthly reward for " + rank + ": " + name); + else + packs.add(pack); + } + if (packs.isEmpty()) + Core.log("Error while loading monthly reward for rank: " + rankName + " has no rewards"); + else + this.monthlyRewards.put(rank, packs); + } + catch (Exception e) { + Core.error("Error while loading monthly reward for rank: " + rankName); + e.printStackTrace(); + } + } + } + + /** + * Get the reward pack from the given yaml config with the given name and path. + * + * @param c - the yaml config to read from + * @param name - the name of the reward + * @param path - the path to look for the reward + * + * @return The reward pack, if one was found, otherwise {@code null}. + */ + public RewardPack getRewardPack(YamlConfiguration c, String name, String path) { + if (c.getString(path + ".list") == null) + return new RewardPack(this.getReward(c, name, path), c.getString(path + ".description")); + List<Reward> rewards = c.getConfigurationSection(path + ".list").getKeys(false).stream().map(s -> this.getReward(c, s, path + ".list." + s)).filter(Objects::nonNull).collect(Collectors.toList()); + if (rewards.isEmpty()) + return null; + if (rewards.size() == 1) + return new RewardPack(rewards.get(0), c.getString(path + ".description")); + return new RewardPack(name, rewards, c.getString(path + ".description")); + } + + /** + * Get the reward object from the given yaml config, name, and path. + * + * @param c - the yaml config + * @param name - the name of the reward + * @param path - the path to lookup + * + * @return The reward object, if one was found, otherwise {@code null}. + */ + public Reward getReward(YamlConfiguration c, String name, String path) { + Reward.RewardType type = Reward.RewardType.fromString(c.getString(path + ".type")); + String disp = Utils.f(name); + switch (type) { + case CHEATCODE: + return new Reward(disp, Reward.RewardType.CHEATCODE, c.getString(path + ".cheatcode")); + case BUCKS: + case TOKENS: + case MONEY: + case CROWBARS: + return new Reward(disp, c.getDouble(path + ".amount"), type); + case CUSTOM: + String customType = c.getString(path + ".customType"); + if (c.get(path + ".customList") != null) + return new Reward(disp, customType, c.getStringList(path + ".customList")); + return new Reward(disp, customType, c.getString(path + ".customName"), c.get(path + ".amount") == null ? 1 : c.getDouble(path + ".amount")); + case ITEMS: + List<ItemStack> items = c.getStringList(path + ".items").stream().map(Parsing::parseItemStack).collect(Collectors.toList()); + return new Reward(disp, Utils.toArray(items)); +// case COSMETIC: +// String ct = c.getString(path + ".cosmeticType"); +// CosmeticType cosmeticType = CosmeticType.getType(c.getString(path + ".cosmeticType")); +// if (ct == null) { +// int minTokens = c.get(path + ".minTokens") == null ? 0 : c.getInt(path + ".minTokens"); +// int maxTokens = c.get(path + ".maxTokens") == null ? -1 : c.getInt(path + ".maxTokens"); +// return new Reward(disp, null, minTokens, maxTokens); +// } +// if (cosmeticType == null) { +// Core.error("Error while loading vote reward " + name + "! The type is not a valid CosmeticType."); +// return null; +// } +// String co = c.getString(path + ".cosmetic"); +// if (co == null || "random".equalsIgnoreCase(co)) { +// int minTokens = c.get(path + ".minTokens") == null ? 0 : c.getInt(path + ".minTokens"); +// int maxTokens = c.get(path + ".maxTokens") == null ? -1 : c.getInt(path + ".maxTokens"); +// return new Reward(disp, cosmeticType, minTokens, maxTokens); +// } +// Cosmetic cos = cosmeticType.getCosmetic(co); +// if (cos == null) { +// Core.error("Error while loading vote reward " + name + "! The cosmetic is not a valid cosmetic of CosmeticType " + type + '!'); +// return null; +// } +// return new Reward(disp, cos); + + case TRIAL_RANK: { + UserRank rank = UserRank.getUserRankOrNull(c.getString(path + ".rank")); + if (rank == null) { + Core.error("Error while loading shop item " + name + "! The rank is not a valid UserRank!"); + return null; + } + int days = c.get(path + ".days") == null ? 1 : c.getInt(path + ".days"); + return new Reward(name, rank, days); + } + case NAMETAG: + Nametag tag = Core.getNametagManager().getNametag(c.getString(path + ".nametag")); + if (tag == null) { + Core.error("Error while loading shop item " + name + "! The nametag is not a valid Nametag!"); + return null; + } + return new Reward(disp, tag); + case PERMISSION: + String permission = c.getString(path + ".permission"); + if (permission == null) { + Core.error("Error while loading shop item " + name + "! The permission was not specified!"); + return null; + } + return new Reward(disp, permission, Reward.RewardType.PERMISSION); + case RANK: + UserRank rank = UserRank.getUserRankOrNull(c.getString(path + ".rank")); + if (rank == null) { + Core.error("Error while loading shop item " + name + "! The rank is not a valid UserRank!"); + return null; + } + return new Reward(name, rank); + case COMMAND: + String command = c.getString(path + ".command"); + if (command == null) { + Core.error("Error while loading shop item " + name + "! The command was not specified!"); + return null; + } + return new Reward(disp, command, Reward.RewardType.COMMAND); + case ACHIEVEMENT: + Achievement achievement = Achievement.valueOf(c.get(path + ".achievement") == null ? null : c.getString(path + ".achievement").toUpperCase()); + if (achievement == null) { + Core.error("Error while loading shop item " + name + "! The command was not specified!"); + return null; + } + return new Reward(disp, achievement); + case VEHICLE: + String vehicleIdentifier = c.getString(path + ".customName"); + return new Reward(disp, vehicleIdentifier, Reward.RewardType.VEHICLE); + case WEAPON: + String weaponName = c.getString(path + ".name"); + int stars = c.getInt(path + ".stars"); + short weaponSkinID = (short) c.getInt(path + ".weaponSkinId", 0); + return new Reward(weaponName, disp, stars, weaponSkinID, Reward.RewardType.WEAPON); + case SKIN: + return new Reward(name, Reward.RewardType.SKIN, c.getString(path + ".customName")); + } + return null; + } + + /** + * Load the token shop items from the token shop config. + */ + public void loadTokenShop() { + YamlConfiguration c = Core.getSettings().getTokenShopConfig(); + this.shopItems.clear(); + if (c.get("shopItems") != null) + for (String name : c.getConfigurationSection("shopItems").getKeys(false)) { + try { + int price = c.get("shopItems." + name + ".price") == null ? 1 : c.getInt("shopItems." + name + ".price"); + String item = c.get("shopItems." + name + ".item") == null ? "1" : c.getString("shopItems." + name + ".item"); + RewardPack pack = this.getRewardPack(c, name, "shopItems." + name); + if (pack == null) + Core.log("Error while loading RewardPack for tokenshop item: " + name); + else + this.shopItems.add(new ShopItem(name, price, item, pack)); + } + catch (Exception e) { + Core.error("Error while loading tokenshop item " + name); + e.printStackTrace(); + } + } + } + + /** + * Get the voting link. + * + * @return The full http link that users can click to go to vote. + */ + public String getVoteLink() { + return this.voteLink; + } + + /** + * Get the list of rewards that are possible for voting. + * + * @return The list of rewards for voting. + */ + public List<VoteReward> getVoteRewards() { + return this.voteRewards; + } + + /** + * Get the vote rewards they are guaranteed to get. + * + * @return The list of vote rewards they are guaranteed to receive. + */ + public List<VoteReward> getGuaranteedVoteRewards() { + return this.voteRewards.stream().filter(v -> v.getChance() == 100).collect(Collectors.toList()); + } + + /** + * Get the rewards that are based off chance. + * + * @return The possible rewards that they can get but must roll for the chance. + */ + public List<VoteReward> getChanceVoteRewards() { + return this.voteRewards.stream().filter(v -> v.getChance() != 100).collect(Collectors.toList()); + } + + /** + * Get the daily rewards. + * + * @return The list of daily rewards. + */ + public List<RewardPack> getDailyRewards() { + return this.dailyRewards; + } + + /** + * Get the lucky daily rewards. + * + * @return The list of daily rewards that are considered lucky. + */ + public List<RewardPack> getLuckyDailyRewards() { + return this.luckyDailyRewards; + } + + /** + * Get the monthly rewards. + * + * @return The monthly rewards mapped by key userrank. + */ + public Map<UserRank, List<RewardPack>> getMonthlyRewards() { + return this.monthlyRewards; + } + + /** + * Get the vote reward based off the given name. + * + * @param name - the name to lookup + * + * @return The vote reward with the given name, if one exists, otherwise {@code null} + */ + public VoteReward getVoteReward(String name) { + return this.voteRewards.stream().filter(reward -> reward.getName().equalsIgnoreCase(name)).findFirst().orElse(null); + } + + /** + * Get the shop items for the token shop. + * + * @return + */ + public List<ShopItem> getShopItems() { + return this.shopItems; + } + + /** + * Get the shop item based off the name. + * + * @param s - the name to lookup + * + * @return The shop item that was found with the given name, otherwise {@code null}. + */ + public ShopItem getShopItem(String s) { + return this.shopItems.stream().filter(item -> ChatColor.stripColor(Utils.f(item.getName())).equalsIgnoreCase(ChatColor.stripColor(s))).findFirst().orElse(null); + } + + /** + * Get the long representation of the timestamp of when the monthly reset occurred. + * + * @return The long timestamp of when the last monthly reset was. + */ + public Long getLastMonthlyReset() { + return this.lastMonthlyReset; + } + + /** + * Set the last monthly reset to the given long representation. + * + * @param time - the new last monthly reset. + */ + public void setLastMonthlyReset(Long time) { + this.lastMonthlyReset = time; + this.save(false); + } + + /** + * Get the owning plugin. + * + * @return The plugin that owns this manager. + */ + @Override + public Plugin getPlugin() { + return plugin; + } + + /** + * Get the locally cached result of the top voters. + * + * @return The top voters, in order, where element 1 is the first place top voter. + */ + public VoteDAO.VoteUser[] getTopVoters() { + return topVoters; + } + + /** + * Get the locally cached result of the last months top voters. + * + * @return The last top voters, in order, where element 1 is the first place top voter. + */ + public VoteDAO.VoteUser[] getLastTopVoters() { + return lastTopVoters; + } + + /** + * Check whether or not the specified vote record and the specified voteSite + * are on cooldown. + * + * @param vr - the vote record in question + * @param voteSite - the vote site that is attempting to be voted on + * @param userName - the name of the user doing the voting + * + * @return {@code true} if the vote site is on cooldown, {@code false} + * otherwise. + */ + protected boolean isVoteSiteCooldown(VoteRecord vr, VoteSite voteSite, String userName) { + + // ALL votes site cannot ensure valid votes + // VoteSite.FOUR is a 12 hour cooldown + // Ask Stephen for details, but there was a lot of data mining required + + // get the last voting time for THIS site + long lastVote = vr.getSiteTimestamps().get(voteSite) != null ? vr.getSiteTimestamps().get(voteSite).getTime() : 0; + long current = System.currentTimeMillis(); + + // VoteSite.FOUR is 12 hours, so lets check for 8 + if (voteSite.equals(VoteSite.FOUR)) { + + // if less 8 hours between the votes + if (current - lastVote < 28800000) { + Core.log("[VoteManager] Player '" + userName + "' has voted on site=" + voteSite.getName() + " #" + voteSite.getId() + " within the last 8 hours. Disregarding vote. Difference between now and last vote (in msec) is: " + (current - lastVote)); + return true; + } + } + // all others are 24 hours, but lets check for 16 + else { + // if less 16 hours between the votes + if (current - lastVote < 57600000) { + Core.log("[VoteManager] Player '" + userName + "' has voted on site=" + voteSite.getName() + " #" + voteSite.getId() + " within the last 16 hours. Disregarding vote. Difference between now and last vote (in msec) is: " + (current - lastVote)); + return true; + } + } + + return false; + } + + /** + * Handle whether or not to increment or reset the voting streak. + * + * @param conn - the database connection thread + * @param vr - the vote record + */ + protected void handleVoteStreakIncrement(Connection conn, VoteRecord vr) { + + // the uuid of the user + UUID uuid = vr.getOwner(); + + // have they voted EVER + if (vr.getLastVoted().isPresent()) { + + // determine if this is a different day + Timestamp lastVoted = vr.getLastVoted().get(); + Timestamp current = new Timestamp(System.currentTimeMillis()); + + // don't count same days as vote streak increment + boolean isDiff = TimeUtil.isDifferentDay(current, lastVoted); + if (isDiff) { + + // if voted within timeframe + int hoursDiff = TimeUtil.getDifferenceInHours(current, lastVoted); + if (hoursDiff <= 48) { + VoteDAO.incrementVoteStreak(conn, uuid); + } + else { + + int maxStreak = vr.getStreak(); + if (maxStreak > vr.getMaxStreak()) { + VoteDAO.updateMaxStreak(conn, uuid, maxStreak); + } + + // reset streak + VoteDAO.resetVoteStreak(conn, uuid); + VoteDAO.incrementVoteStreak(conn, uuid); + } + } + } + else { + // if never voted before, increment vote streak + VoteDAO.incrementVoteStreak(conn, uuid); + } + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/VoteRecord.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/VoteRecord.java new file mode 100644 index 0000000..a9102e3 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/VoteRecord.java @@ -0,0 +1,149 @@ +package net.grandtheftmc.core.voting; + +import java.sql.Timestamp; +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; +import java.util.UUID; + +/** + * Note: This class is designed as a read only response from the database. + */ +public class VoteRecord { + + /** Owner of the vote record */ + private final UUID owner; + /** The total amount of votes the user has */ + private final int totalVotes; + /** Current streak they are on */ + private final int streak; + /** Max streak they ever received */ + private final int maxStreak; + /** Timestamp for when they last voted */ + private final Timestamp lastVoted; + /** Maps VoteSite to when they last voted */ + private final Map<VoteSite, Timestamp> siteToLastVote; + + /** + * Create a new VoteRecord. + * <p> + * This holds all cumulative information about a player's votes, and is read + * from the database. + * + * @param owner - the owner of the vote record + * @param totalVotes - the total votes for the player + * @param streak - the current streak of voting + * @param maxStreak - the max streak that this player has + * @param lastVoted - the timestamp when the player last voted + */ + public VoteRecord(UUID owner, int totalVotes, int streak, int maxStreak, Timestamp lastVoted) { + this.owner = owner; + this.totalVotes = totalVotes; + this.streak = streak; + this.maxStreak = maxStreak; + this.lastVoted = lastVoted; + this.siteToLastVote = new HashMap<>(); + } + + /** + * Create a new VoteRecord. + * <p> + * This holds all cumulative information about a player's votes, and is read + * from the database. + * <p> + * Note: This has all null values, as the player has never voted before. + * + * @param owner - the owner of the vote record + */ + public VoteRecord(UUID owner) { + this(owner, 0, 0, 0, null); + } + + /** + * Get the UUID of the owner of this record. + * + * @return The UUID of the owner of this vote record. + */ + public UUID getOwner() { + return owner; + } + + /** + * Get the total votes the user has. + * + * @return The total number of votes the user has. + */ + public int getTotalVotes() { + return totalVotes; + } + + /** + * Get the voting streak that this record currently has. + * + * @return The streak that this record currently has. + */ + public int getStreak() { + return streak; + } + + /** + * Get the max streak for this voting record. + * + * @return The max streak for this voting record. + */ + public int getMaxStreak() { + return maxStreak; + } + + /** + * Get the timestamp of when this user last voted, in general. + * + * @return The timestamp of when this user last voted, if one exists. + */ + public Optional<Timestamp> getLastVoted() { + return Optional.ofNullable(lastVoted); + } + + /** + * Get the timestamp of the specified last vote site. + * + * @param voteSite - the site that was voted on + * + * @return The Timestamp for the site that was last voted, if it exists, + * otherwise {@code null}. + */ + public Timestamp getVoteTimestamp(VoteSite voteSite) { + if (siteToLastVote.containsKey(voteSite)) { + return siteToLastVote.get(voteSite); + } + + return null; + } + + /** + * Set the voting timestamp of the specified vote site and timestamp. + * + * @param voteSite - the site that was voted on + * @param timestamp - the timestamp that it was voted + */ + public void setVoteTimestamp(VoteSite voteSite, Timestamp timestamp) { + siteToLastVote.put(voteSite, timestamp); + } + + /** + * Get the mapping of vote site to timestamps. + * + * @return The mapping of each vote site to the last vote. + */ + public Map<VoteSite, Timestamp> getSiteTimestamps() { + return siteToLastVote; + } + + /** + * {@inheritDoc} + */ + @Override + public String toString() { + return "VoteRecord [owner=" + getOwner().toString() + ", streak=" + getStreak() + ", maxStreak=" + getMaxStreak() + ", lastVoted=" + lastVoted + "]"; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/VoteReward.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/VoteReward.java new file mode 100644 index 0000000..f0cbba9 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/VoteReward.java @@ -0,0 +1,52 @@ +package net.grandtheftmc.core.voting; + +import com.j0ach1mmall3.jlib.methods.Parsing; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.users.User; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +/** + * Created by Liam on 23/04/2017. + */ +public class VoteReward { + + private final ItemStack item; + private final RewardPack pack; + private final double chance; + + public VoteReward(RewardPack pack, String item, double chance) { + this.pack = pack; + this.item = item == null ? null : Parsing.parseItemStack(item); + this.chance = chance; + } + + public String getName() { + return this.pack.getName(); + } + + public ItemStack getItem() { + return this.item == null ? this.pack.get().get(0).getDisplayItem() : this.item; + } + + + public String getDisplayName() { + return this.pack.getDisplayName(); + } + + public RewardPack getRewardPack() { + return this.pack; + } + + public double getChance() { + return this.chance; + } + + public void give(Player player, User user) { + if (chance != 100) + Utils.broadcastExcept(player, Lang.VOTE.f(user.getColoredName(player) + "&7 won a rare reward while &e&lvoting&7: " + this.pack.getDisplayName() + "&7 (&a" + this.chance + "%)")); + this.pack.give(player, user, chance == 100 ? null : "voteReward", 0, true); + + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/VoteSite.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/VoteSite.java new file mode 100644 index 0000000..435ed7f --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/VoteSite.java @@ -0,0 +1,50 @@ +package net.grandtheftmc.core.voting; + +import java.util.Optional; + +public enum VoteSite { + ONE(1, "http://minecraft-mp.com/server/14659/vote/", "minecraft-mp.com"), + TWO(2, "http://minecraftservers.org/vote/102886", "minecraftservers.org"), + THREE(3, "http://minecraft-server-list.com/server/210232/vote/", "mcsl"), + FOUR(4, "http://topg.org/Minecraft/in-365133", "topg.org"), + FIVE(5, "https://topminecraftservers.org/vote/1822", "TopMinecraftServers"); + + /** The id of the vote site */ + private final int id; + /** The url for the vote site */ + private final String url; + /** The name for the vote site */ + private final String name; + + VoteSite(int id, String url, String name) { + this.id = id; + this.url = url; + this.name = name; + } + + public static Optional<VoteSite> find(String search) { + for (VoteSite voteSite : VoteSite.values()) { + if (voteSite.name.equalsIgnoreCase(search) + || voteSite.url.equalsIgnoreCase(search)) { + return Optional.of(voteSite); + } + } + return Optional.empty(); + } + + public int getId(){ + return this.id; + } + + public String getURL() { + return this.url; + } + + public String getName() { + return this.name; + } + + public int getImportance() { + return this.ordinal(); + } +} \ No newline at end of file diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/Voter.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/Voter.java new file mode 100644 index 0000000..614fcef --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/Voter.java @@ -0,0 +1,33 @@ +package net.grandtheftmc.core.voting; + +public class Voter { + + private final String name; + private int votes; + private long lastVote = -1; + + public Voter(String name) { + this.name = name; + } + + public String getName() { + return this.name; + } + + public int getVotes() { + return this.votes; + } + + public void addVote() { + this.votes++; + this.lastVote = System.currentTimeMillis(); + } + + public void setVotes(int i) { + this.votes = i; + } + +// public long getLastVote() { +// return this.lastVote; +// } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/crates/Crate.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/crates/Crate.java new file mode 100644 index 0000000..3d1a3ef --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/crates/Crate.java @@ -0,0 +1,853 @@ +package net.grandtheftmc.core.voting.crates; + +import com.gmail.filoghost.holographicdisplays.api.Hologram; +import com.gmail.filoghost.holographicdisplays.api.HologramsAPI; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.servers.ServerType; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.listeners.Move; +import net.grandtheftmc.core.menus.MenuManager; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.util.factory.ItemFactory; +import org.bukkit.*; +import org.bukkit.entity.*; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.FireworkMeta; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.metadata.FixedMetadataValue; +import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.util.Vector; +import us.myles.ViaVersion.api.Via; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.UUID; +import java.util.concurrent.ThreadLocalRandom; + +/** + * Created by Timothy Lampen on 2017-04-24. + */ +public class Crate { + + private final Location loc; + private final CrateStars rank; + private final Location selected; + private Hologram hologram; + private UUID openingCrate; + private ArmorStand gravityArmorStand, hologramArmorStand, stand; + private CrateReward determinedCrateReward; + private boolean finished; + private Item item; + + //@param loc should be a BLOCK location. + public Crate(Location loc, int stars) { + this.loc = loc; + this.selected = loc.clone().add(.5, 0, .5); + this.rank = CrateStars.getCrateStars(stars); + this.generate(); + } + + public CrateStars getCrateStars() { + return this.rank; + } + + public Location getLocation() { + return this.loc; + } + + private void generate() { + this.loc.getBlock().setType(Material.AIR); + this.hologram = HologramsAPI.createHologram(Core.getInstance(), this.loc.clone().add(0, this.rank.getHeight(), 0)); + this.hologram.appendTextLine(this.rank.getDisplayName()); + this.hologram.appendTextLine(this.rank.getStarsString()); + this.hologram.appendTextLine(Utils.f("&9&l" + this.rank.getCrowbars() + " Crowbar" + (this.rank.getCrowbars() == 1 ? "" : "s"))); + this.hologram.appendTextLine(Utils.f("&7Right click to see rewards!")); + + this.stand = (ArmorStand) this.loc.getWorld().spawnEntity(this.loc, EntityType.ARMOR_STAND); + this.stand.setVisible(false); + this.stand.setGravity(false); +// this.stand.setHelmet(new ItemStack(Material.DIAMOND_SWORD, 1, this.rank.getClosedHead())); + this.stand.setHelmet(new ItemFactory(Core.getSettings().getType() != ServerType.VICE ? Material.DIAMOND_SWORD : Material.DIAMOND_SWORD, (short) this.rank.getClosedHead()).setUnbreakable(true).build()); + this.stand.setRemoveWhenFarAway(false); + this.stand.setMetadata("CRATE", new FixedMetadataValue(Core.getInstance(), true)); + + //In the future we can use this to check how many armour stands are spawned in the world when the server starts up. + System.out.println("Crate count now spawned in world: " + loc.getWorld().getEntitiesByClass(ArmorStand.class).stream().filter(ent -> ent.hasMetadata("CRATE")).count()); + } + + public void startAnimation(Player player, User user) { + this.openingCrate = player.getUniqueId(); + + //Store as a crate being opened + if (rank.getStars() > 2) { + Move.setOpening(player.getUniqueId(), this.loc); + } + + // While the animation is playing, any players except 'player' should be bounced away from the crate + for (Entity e : this.loc.getWorld().getNearbyEntities(this.loc, 4, 4, 4)) { + if (e instanceof Player && !Objects.equals(e.getUniqueId(), player.getUniqueId())) { + e.setVelocity(e.getLocation().getDirection().setY(2).multiply(-2)); + } + } + + this.determinedCrateReward = Core.getCrateManager().determineCrateReward(player, user, this.rank); + ItemStack is = determinedCrateReward.getItem(); + ItemMeta im = is.getItemMeta(); + im.setDisplayName(determinedCrateReward.getDisplayName()); + is.setItemMeta(im); + + switch (rank.getStars()) { + case 1: + startAnimationFirst(player, stand.getLocation(), is); + break; + case 2: + startAnimationSecond(player, stand.getLocation(), is); + break; + case 3: + startAnimationThird(player, stand.getLocation(), is); + break; + case 4: + startAnimationFourth(player, stand.getLocation(), is); + break; + case 5: + startAnimationFifth(player, stand.getLocation(), is); + break; + case 6: + startAnimationThird(player, stand.getLocation(), is); + break; + } + + this.hologram.getVisibilityManager().setVisibleByDefault(false); + this.hologram.getVisibilityManager().resetVisibilityAll(); + //change to how long the animation is, or include with the ending of the animation + } + + public void activateReward() { + Player player = this.getOpeningCrate(); + CrateReward crateReward = this.determinedCrateReward; + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + user.setSelectedCrate(null); + if (crateReward.getRewardPack().hasAllRewards(player, user)) { + user.addCrowbars(this.rank.getCrowbars()); + player.sendMessage(Lang.CRATES.f("&7Sorry, it seems that you already won this package. Your crowbars have been returned. Feel free to try again.")); + return; + } + + if (crateReward.getRewardPack().hasAnyReward(player, user)) { + player.sendMessage(Lang.CRATES.f("&7You seem to have &a" + crateReward.getRewardPack().hasAnyRewardSize(player, user) + "&7/&a" + crateReward.getRewardPack().get().size() + "&7 rewards in this package already. You can chose between accepting the remaining rewards or having your crowbars returned.")); + user.setConfirmingCrateReward(crateReward); + MenuManager.openMenu(player, "confirmcratereward"); + return; + } + + player.sendMessage(Utils.f("&7You won the following reward" + (crateReward.getRewardPack().get().size() == 1 ? "" : "s") + " by opening this " + this.rank.getDisplayName() + "&7:")); + crateReward.give(player, user, this.rank); + user.insertLog(player, "CrateReward", "CRATE-" + this.getCrateStars().getStars(), crateReward.getName(), 1, this.getCrateStars().getCrowbars()); + } + + public void destroy() { + this.hologram.delete(); + this.stand.remove(); + + if (this.gravityArmorStand != null) + this.gravityArmorStand.remove(); + + if (this.hologramArmorStand != null) + this.hologramArmorStand.remove(); + + if (this.item != null) + this.item.remove(); + } + + public UUID getOpeningCrateUUID() { + return this.openingCrate; + } + + public Player getOpeningCrate() { + Player player = this.openingCrate == null ? null : Bukkit.getPlayer(this.openingCrate); + if (this.openingCrate != null && player == null) this.openingCrate = null; + return player; + } + + public boolean isBeingOpened() { + return this.getOpeningCrate() != null; + } + + public ArmorStand getStand() { + return this.stand; + } + + /* + * + * + * + * Crate Effects + * + * + * */ + + public void startAnimationFirst(Player player, Location location, ItemStack reward) { + this.gravityArmorStand = (ArmorStand) location.getWorld().spawnEntity(location.clone().subtract(0, 0.7, 0), EntityType.ARMOR_STAND); + this.gravityArmorStand.setGravity(false); + this.gravityArmorStand.setVisible(false); + play(player, "VILLAGER_HAPPY", location, 0.5F, 0F, 0.5F, 0.1F, 40); + + new BukkitRunnable() { + @Override + public void run() { + startAnimation(player, stand.getLocation().clone().add(0, 1, 0), new Callback<Location>() { + @Override + public void execute(Location response) { +// stand.setHelmet(new ItemStack(Material.DIAMOND_SWORD, 1, Crate.this.rank.getOpenHead())); + stand.setHelmet(new ItemFactory(Core.getSettings().getType() != ServerType.VICE ? Material.DIAMOND_SWORD : Material.DIAMOND_SWORD, (short) Crate.this.rank.getOpenHead()).setUnbreakable(true).build()); + final Item b = response.clone().getWorld().dropItem(response.clone().add(0, 1, 0), reward); + b.setVelocity(new Vector(0, 0.2, 0)); + b.setTicksLived(8000); + b.setPickupDelay(Integer.MAX_VALUE); + + new BukkitRunnable() { + @Override + public void run() { + gravityArmorStand.setPassenger(b); + hologramArmorStand = (ArmorStand) b.getLocation().getWorld().spawnEntity(b.getLocation().clone().add(0, -2.3, 0), EntityType.ARMOR_STAND); + hologramArmorStand.setMetadata("crateItemDisplay", new FixedMetadataValue(Core.getInstance(), true)); + hologramArmorStand.setCustomName(Utils.f(reward.getItemMeta().getDisplayName())); + hologramArmorStand.setCustomNameVisible(true); + hologramArmorStand.setGravity(false); + hologramArmorStand.setVisible(false); + Crate.this.activateReward(); + + new BukkitRunnable() { + @Override + public void run() { + resetAnimationFirst(b); + } + }.runTaskLater(Core.getInstance(), 100); + } + }.runTaskLater(Core.getInstance(), 11); + + player.playSound(player.getLocation(), Sound.BLOCK_ANVIL_USE, 1, 1); + player.playSound(player.getLocation(), Sound.ENTITY_PLAYER_LEVELUP, 1, 1); + } + }); + } + }.runTaskLater(Core.getInstance(), 30); + } + + public void resetAnimationFirst(Item item) { + this.hologramArmorStand.remove(); + this.gravityArmorStand.remove(); + item.remove(); +// this.stand.setHelmet(new ItemStack(Material.DIAMOND_SWORD, 1, this.rank.getClosedHead())); + this.stand.setHelmet(new ItemFactory(Core.getSettings().getType() != ServerType.VICE ? Material.DIAMOND_SWORD : Material.DIAMOND_SWORD, (short) this.rank.getClosedHead()).setUnbreakable(true).build()); + this.openingCrate = null; + this.hologram.getVisibilityManager().setVisibleByDefault(true); + this.hologram.getVisibilityManager().resetVisibilityAll(); + } + + public void startAnimationSecond(final Player player, final Location location, final ItemStack reward) { + gravityArmorStand = (ArmorStand) location.getWorld().spawnEntity(location.clone().subtract(0, 0.6, 0), EntityType.ARMOR_STAND); + gravityArmorStand.setGravity(false); + gravityArmorStand.setVisible(false); + play(player, "VILLAGER_HAPPY", location, 0.5F, 0F, 0.5F, 0.1F, 40); + + new BukkitRunnable() { + int times = 0; + + @Override + public void run() { + if (times == 5) { + cancel(); + new BukkitRunnable() { + @Override + public void run() { +// stand.setHelmet(new ItemStack(Material.DIAMOND_SWORD, 1, Crate.this.rank.getOpenHead())); + stand.setHelmet(new ItemFactory(Core.getSettings().getType() != ServerType.VICE ? Material.DIAMOND_SWORD : Material.DIAMOND_SWORD, (short) Crate.this.rank.getOpenHead()).setUnbreakable(true).build()); + final Item b = location.clone().getWorld().dropItem(location.clone().add(0, 1, 0), reward); + b.setVelocity(new Vector(0, 0.2, 0)); + b.setTicksLived(8000); + b.setPickupDelay(Integer.MAX_VALUE); + + new BukkitRunnable() { + @Override + public void run() { + gravityArmorStand.setPassenger(b); + hologramArmorStand = (ArmorStand) b.getLocation().getWorld().spawnEntity(b.getLocation().clone().add(0, -2.2, 0), EntityType.ARMOR_STAND); + hologramArmorStand.setMetadata("crateItemDisplay", new FixedMetadataValue(Core.getInstance(), true)); + hologramArmorStand.setCustomName(Utils.f(reward.getItemMeta().getDisplayName())); + hologramArmorStand.setCustomNameVisible(true); + hologramArmorStand.setGravity(false); + hologramArmorStand.setVisible(false); + Crate.this.activateReward(); + new BukkitRunnable() { + @Override + public void run() { + resetAnimationSecond(b); + } + }.runTaskLater(Core.getInstance(), 100); + } + }.runTaskLater(Core.getInstance(), 11); + + player.playSound(player.getLocation(), Sound.BLOCK_ANVIL_USE, 1, 1); + player.playSound(player.getLocation(), Sound.ENTITY_PLAYER_LEVELUP, 1, 1); + } + }.runTask(Core.getInstance()); + } + + play(player, "SMOKE_LARGE", location, 0.3F, 0.1F, 0.3F, 0.1F, 50); + player.playSound(player.getLocation(), Sound.BLOCK_GRAVEL_FALL, 1, 1); + player.playSound(player.getLocation(), Sound.BLOCK_ANVIL_BREAK, 1, 1); + player.playSound(player.getLocation(), Sound.BLOCK_GRASS_BREAK, 1, 1); + + if (ThreadLocalRandom.current().nextInt(2) == 1) { + player.playSound(player.getLocation(), Sound.BLOCK_GRASS_BREAK, 1, 1); + player.playSound(player.getLocation(), Sound.BLOCK_GRAVEL_FALL, 1, 1); + } else { + player.playSound(player.getLocation(), Sound.BLOCK_ANVIL_BREAK, 1, 1); + player.playSound(player.getLocation(), Sound.BLOCK_GRASS_BREAK, 1, 1); + } + + times++; + } + }.runTaskTimerAsynchronously(Core.getInstance(), 0, 10); + } + + public void resetAnimationSecond(Item item) { + this.hologramArmorStand.remove(); + this.gravityArmorStand.remove(); + item.remove(); +// this.stand.setHelmet(new ItemStack(Material.DIAMOND_SWORD, 1, this.rank.getClosedHead())); + this.stand.setHelmet(new ItemFactory(Core.getSettings().getType() != ServerType.VICE ? Material.DIAMOND_SWORD : Material.DIAMOND_SWORD, (short) this.rank.getClosedHead()).setUnbreakable(true).build()); + this.openingCrate = null; + this.hologram.getVisibilityManager().setVisibleByDefault(true); + this.hologram.getVisibilityManager().resetVisibilityAll(); + } + + public void startAnimationThird(final Player player, final Location location, ItemStack reward) { + gravityArmorStand = (ArmorStand) location.getWorld().spawnEntity(location.clone().subtract(0, 0.8, 0), EntityType.ARMOR_STAND); + gravityArmorStand.setGravity(false); + gravityArmorStand.setVisible(false); + play(player, "VILLAGER_HAPPY", location, 0.5F, 0F, 0.5F, 0.1F, 40); + new BukkitRunnable() { + int times = 0; + + @Override + public void run() { + if (times == 4) { + cancel(); + new BukkitRunnable() { + @Override + public void run() { + play(player, "EXPLOSION_NORMAL", location, 0.2F, 0F, 0.2F, 0.1F, 70); +// stand.setHelmet(new ItemStack(Material.DIAMOND_SWORD, 1, Crate.this.rank.getOpenHead())); + stand.setHelmet(new ItemFactory(Core.getSettings().getType() != ServerType.VICE ? Material.DIAMOND_SWORD : Material.DIAMOND_SWORD, (short) Crate.this.rank.getOpenHead()).setUnbreakable(true).build()); + item = location.clone().getWorld().dropItem(location.clone().add(0, 0.2, 0), reward); + item.setVelocity(new Vector(0, 0, 0)); + item.setTicksLived(8000); + item.setPickupDelay(Integer.MAX_VALUE); + gravityArmorStand.setPassenger(item); + Crate.this.activateReward(); + new BukkitRunnable() { + @Override + public void run() { + hologramArmorStand = (ArmorStand) item.getLocation().getWorld().spawnEntity(item.getLocation().clone().add(0, -1.3, 0), EntityType.ARMOR_STAND); + hologramArmorStand.setMetadata("crateItemDisplay", new FixedMetadataValue(Core.getInstance(), true)); + hologramArmorStand.setCustomName(Utils.f(reward.getItemMeta().getDisplayName())); + hologramArmorStand.setCustomNameVisible(true); + hologramArmorStand.setGravity(false); + hologramArmorStand.setVisible(false); + new BukkitRunnable() { + @Override + public void run() { + resetCrateThird(player); + } + }.runTaskLater(Core.getInstance(), 20 * 7); + } + }.runTaskLater(Core.getInstance(), 8); + player.playSound(player.getLocation(), Sound.BLOCK_ANVIL_USE, 1, 1); + player.playSound(player.getLocation(), Sound.ENTITY_PLAYER_LEVELUP, 1, 1); + } + }.runTask(Core.getInstance()); + } + + play(player, "CLOUD", location, 0.2F, 0.1F, 0.2F, 0.1F, 2); + play(player, "SMOKE_NORMAL", location, 0.2F, 0.1F, 0.2F, 0.1F, 20); + if (ThreadLocalRandom.current().nextInt(2) == 1) { + player.playSound(player.getLocation(), Sound.BLOCK_GRASS_BREAK, 1, 1); + player.playSound(player.getLocation(), Sound.BLOCK_ANVIL_BREAK, 1, 1); + } else { + player.playSound(player.getLocation(), Sound.ENTITY_BLAZE_BURN, 1, 1); + player.playSound(player.getLocation(), Sound.ENTITY_BLAZE_HURT, 1, 1); + } + times++; + } + }.runTaskTimerAsynchronously(Core.getInstance(), 0, 10); + } + + public void resetCrateThird(final Player player) { + new BukkitRunnable() { + int times = 0; + + @Override + public void run() { + if (times == 3) { + Move.stopOpening(Crate.this.openingCrate, Crate.this.loc); + Crate.this.openingCrate = null; + cancel(); + item.remove(); + Crate.this.hologram.getVisibilityManager().setVisibleByDefault(true); + Crate.this.hologram.getVisibilityManager().resetVisibilityAll(); + gravityArmorStand.remove(); + hologramArmorStand.remove(); +// stand.setHelmet(new ItemStack(Material.DIAMOND_SWORD, 1, (short) 14)); + stand.setHelmet(new ItemFactory(Core.getSettings().getType() != ServerType.VICE ? Material.DIAMOND_SWORD : Material.DIAMOND_SWORD, (short) Crate.this.getCrateStars().getClosedHead()).setUnbreakable(true).build()); + } + + if (ThreadLocalRandom.current().nextInt(2) == 1) { + play(player, "SLIME", item.getLocation().clone().add(0, 0.2, 0), 0.2F, 0F, 0.2F, 0.1F, 40); + play(player, "CLOUD", item.getLocation().add(0, -0.2, 0), 0.3F, 0F, 0.3F, 0.1F, 40); + } else { + play(player, "CRIT", item.getLocation().clone().add(0, 0.2, 0), 0.2F, 0F, 0.2F, 0.1F, 40); + play(player, "SMOKE_NORMAL", item.getLocation().add(0, -0.2, 0), 0.3F, 0F, 0.3F, 0.1F, 40); + } + + if (ThreadLocalRandom.current().nextInt(2) == 1) { + player.playSound(player.getLocation(), Sound.BLOCK_NOTE_PLING, 1, 1); + player.playSound(player.getLocation(), Sound.ENTITY_PLAYER_ATTACK_SWEEP, 1, 1); + } else { + player.playSound(player.getLocation(), Sound.ENTITY_EXPERIENCE_BOTTLE_THROW, 1, 1); + player.playSound(player.getLocation(), Sound.BLOCK_SLIME_HIT, 1, 1); + } + + times++; + } + }.runTaskTimerAsynchronously(Core.getInstance(), 0, 20); + } + + public void startAnimationFourth(final Player player, final Location location, ItemStack reward) { + gravityArmorStand = (ArmorStand) location.getWorld().spawnEntity(location.clone().subtract(0, 0.6, 0), EntityType.ARMOR_STAND); + gravityArmorStand.setGravity(false); + gravityArmorStand.setVisible(false); + play(player, "VILLAGER_HAPPY", location, 0.5F, 0F, 0.5F, 0.1F, 40); + if (selected != null) { + player.playSound(player.getLocation(), Sound.BLOCK_ANVIL_BREAK, 1, 1); + player.playSound(player.getLocation(), Sound.ENTITY_BLAZE_HURT, 1, 1); + new BukkitRunnable() { + int times = 0; + + @Override + public void run() { + if (times == 3) { + new BukkitRunnable() { + @Override + public void run() { + play(player, "EXPLOSION_HUGE", location, 0.2F, 0F, 0.2F, 0.1F, 1); +// stand.setHelmet(new ItemStack(Material.DIAMOND_SWORD, 1, Crate.this.rank.getOpenHead())); + stand.setHelmet(new ItemFactory(Core.getSettings().getType() != ServerType.VICE ? Material.DIAMOND_SWORD : Material.DIAMOND_SWORD, (short) Crate.this.rank.getOpenHead()).setUnbreakable(true).build()); + item = location.clone().getWorld().dropItem(location.clone().add(0, 0.2, 0), reward); + item.setVelocity(new Vector(0, 0, 0)); + item.setTicksLived(8000); + item.setPickupDelay(Integer.MAX_VALUE); + gravityArmorStand.setPassenger(item); + Crate.this.activateReward(); + hologramArmorStand = (ArmorStand) item.getLocation().getWorld().spawnEntity(item.getLocation().clone().add(0, -0.4, 0), EntityType.ARMOR_STAND); + hologramArmorStand.setMetadata("crateItemDisplay", new FixedMetadataValue(Core.getInstance(), true)); + hologramArmorStand.setCustomName(Utils.f(reward.getItemMeta().getDisplayName())); + hologramArmorStand.setCustomNameVisible(true); + hologramArmorStand.setGravity(false); + hologramArmorStand.setVisible(false); + new BukkitRunnable() { + + @Override + public void run() { + resetCrateFourth(player); + } + }.runTaskLater(Core.getInstance(), 20 * 7); + player.playSound(player.getLocation(), Sound.ENTITY_BLAZE_HURT, 1, 1); + player.playSound(player.getLocation(), Sound.ENTITY_PLAYER_LEVELUP, 1, 1); + } + }.runTaskLater(Core.getInstance(), 20); + cancel(); + } + + if (times <= 2) { +// stand.setHelmet(new ItemStack(Material.DIAMOND_SWORD, 1, (short) 17)); + stand.setHelmet(new ItemFactory(Core.getSettings().getType() != ServerType.VICE ? Material.DIAMOND_SWORD : Material.DIAMOND_SWORD, Core.getSettings().getType() != ServerType.VICE ? (short) 17 : (short) 809).setUnbreakable(true).build()); + } else if (times == 3) { + // stand.setHelmet(new ItemStack(Material.DIAMOND_SWORD, 1, (short)18));//TODO: Change back to 18 once it comes in + } + + player.playSound(player.getLocation(), Sound.BLOCK_NOTE_HAT, 1, 1); + times++; + } + }.runTaskTimerAsynchronously(Core.getInstance(), 0, 20); + } + } + + public void resetCrateFourth(final Player player) { + new BukkitRunnable() { + int times = 0; + + @Override + public void run() { + if (times == 3) { + Move.stopOpening(Crate.this.openingCrate, Crate.this.loc); + Crate.this.openingCrate = null; + cancel(); + item.remove(); + gravityArmorStand.remove(); + hologramArmorStand.remove(); + Crate.this.hologram.getVisibilityManager().setVisibleByDefault(true); + Crate.this.hologram.getVisibilityManager().resetVisibilityAll(); +// stand.setHelmet(new ItemStack(Material.DIAMOND_SWORD, 1, Crate.this.rank.getClosedHead())); + stand.setHelmet(new ItemFactory(Core.getSettings().getType() != ServerType.VICE ? Material.DIAMOND_SWORD : Material.DIAMOND_SWORD, (short) Crate.this.rank.getClosedHead()).setUnbreakable(true).build()); + } + if (ThreadLocalRandom.current().nextInt(2) == 1) { + play(player, "SLIME", item.getLocation().clone().add(0, 0.2, 0), 0.2F, 0F, 0.2F, 0.1F, 40); + play(player, "CLOUD", item.getLocation().add(0, -0.2, 0), 0.3F, 0F, 0.3F, 0.1F, 40); + } else { + play(player, "CRIT", item.getLocation().clone().add(0, 0.2, 0), 0.2F, 0F, 0.2F, 0.1F, 40); + play(player, "SMOKE_NORMAL", item.getLocation().add(0, -0.2, 0), 0.3F, 0F, 0.3F, 0.1F, 40); + } + if (ThreadLocalRandom.current().nextInt(2) == 1) { + player.playSound(player.getLocation(), Sound.BLOCK_NOTE_PLING, 1, 1); + player.playSound(player.getLocation(), Sound.ENTITY_PLAYER_ATTACK_SWEEP, 1, 1); + } else { + player.playSound(player.getLocation(), Sound.ENTITY_EXPERIENCE_BOTTLE_THROW, 1, 1); + player.playSound(player.getLocation(), Sound.BLOCK_SLIME_HIT, 1, 1); + } + times++; + } + }.runTaskTimerAsynchronously(Core.getInstance(), 0, 20); + } + + public void startAnimationFifth(final Player player, final Location location, ItemStack reward) { + gravityArmorStand = (ArmorStand) location.getWorld().spawnEntity(location.clone().subtract(0, 1.2, 0), EntityType.ARMOR_STAND); + gravityArmorStand.setGravity(false); + gravityArmorStand.setVisible(false); + play(player, "VILLAGER_HAPPY", location, 0.5F, 0F, 0.5F, 0.1F, 40); + if (selected != null) { + new BukkitRunnable() { + int times = 0; + + @Override + public void run() { + if (finished) { + cancel(); + } + play(player, "CLOUD", location, 0.2F, 0.1F, 0.2F, 0.1F, 2); + } + }.runTaskTimerAsynchronously(Core.getInstance(), 0, 10); +// stand.setHelmet(new ItemStack(Material.DIAMOND_SWORD, 1, (short) 21)); + this.stand.setHelmet(new ItemFactory(Core.getSettings().getType() != ServerType.VICE ? Material.DIAMOND_SWORD : Material.DIAMOND_SWORD, Core.getSettings().getType() != ServerType.VICE ? (short) 21 : (short) 813).setUnbreakable(true).build()); + launchBills(5, 20, location, 1); + launchFireworks(location, 8, 8); + new BukkitRunnable() { + @Override + public void run() { + launchBills(15, 20, location, 2); + new BukkitRunnable() { + @Override + public void run() { + launchBills(25, 20, location, 3); + new BukkitRunnable() { + int times = 0; + @Override + public void run() { + if (times == 5) { + stand.setHelmet(new ItemStack(Material.DIAMOND_SWORD, 1, Crate.this.rank.getOpenHead())); + stand.setHelmet(new ItemFactory(Core.getSettings().getType() != ServerType.VICE ? Material.DIAMOND_SWORD : Material.DIAMOND_SWORD, (short) Crate.this.rank.getOpenHead()).setUnbreakable(true).build()); + cancel(); + finished = true; + item = location.clone().getWorld().dropItem(location.clone().add(0, 0.2, 0), reward); + item.setVelocity(new Vector(0, 0.2, 0)); + item.setTicksLived(8000); + item.setPickupDelay(Integer.MAX_VALUE); + gravityArmorStand.setPassenger(item); + Crate.this.activateReward(); + new BukkitRunnable() { + @Override + public void run() { + hologramArmorStand = (ArmorStand) item.getLocation().getWorld().spawnEntity(item.getLocation().clone().add(0, -1.6, 0), EntityType.ARMOR_STAND); + hologramArmorStand.setMetadata("crateItemDisplay", new FixedMetadataValue(Core.getInstance(), true)); + hologramArmorStand.setCustomName(Utils.f(reward.getItemMeta().getDisplayName())); + hologramArmorStand.setCustomNameVisible(true); + hologramArmorStand.setGravity(false); + hologramArmorStand.setVisible(false); + new BukkitRunnable() { + @Override + public void run() { + resetCrateFifth(player); + } + }.runTaskLater(Core.getInstance(), 20 * 5); + } + }.runTaskLater(Core.getInstance(), 8); + player.playSound(player.getLocation(), Sound.BLOCK_ANVIL_USE, 1, 1); + player.playSound(player.getLocation(), Sound.ENTITY_PLAYER_LEVELUP, 1, 1); + } else { + launchBills(5, 20, location, 3); + } + if (times <= 2) { +// stand.setHelmet(new ItemStack(Material.DIAMOND_SWORD, 1, (short) 22)); + stand.setHelmet(new ItemFactory(Core.getSettings().getType() != ServerType.VICE ? Material.DIAMOND_SWORD : Material.DIAMOND_SWORD, Core.getSettings().getType() != ServerType.VICE ? (short) 22 : (short) 814).setUnbreakable(true).build()); + + } else if (times <= 4) { +// stand.setHelmet(new ItemStack(Material.DIAMOND_SWORD, 1, (short) 23)); + stand.setHelmet(new ItemFactory(Core.getSettings().getType() != ServerType.VICE ? Material.DIAMOND_SWORD : Material.DIAMOND_SWORD, Core.getSettings().getType() != ServerType.VICE ? (short) 23 : (short) 815).setUnbreakable(true).build()); + } + times++; + } + }.runTaskTimer(Core.getInstance(), 0, 20); + + new BukkitRunnable() { + @Override + public void run() { + play(player, "EXPLOSION_HUGE", location, 0.2F, 0.1F, 0.2F, 0.1F, 1); + launchFireworks(location, 8, 8); + } + }.runTaskLater(Core.getInstance(), 60); + } + }.runTaskLater(Core.getInstance(), 10); + } + }.runTaskLater(Core.getInstance(), 10); + } + } + + public void resetCrateFifth(final Player player) { + new BukkitRunnable() { + int times = 0; + + @Override + public void run() { + if (times == 3) { + cancel(); + Move.stopOpening(Crate.this.openingCrate, Crate.this.loc); + Crate.this.openingCrate = null; + item.remove(); + gravityArmorStand.remove(); + hologramArmorStand.remove(); + Crate.this.hologram.getVisibilityManager().setVisibleByDefault(true); + Crate.this.hologram.getVisibilityManager().resetVisibilityAll(); +// stand.setHelmet(new ItemStack(Material.DIAMOND_SWORD, 1, (short) 20)); + stand.setHelmet(new ItemFactory(Core.getSettings().getType() != ServerType.VICE ? Material.DIAMOND_SWORD : Material.DIAMOND_SWORD, (short) Crate.this.getCrateStars().getClosedHead()).setUnbreakable(true).build()); + } + if (ThreadLocalRandom.current().nextInt(2) == 1) { + play(player, "SLIME", item.getLocation().clone().add(0, 0.2, 0), 0.2F, 0F, 0.2F, 0.1F, 40); + play(player, "CLOUD", item.getLocation().add(0, -0.2, 0), 0.3F, 0F, 0.3F, 0.1F, 40); + } else { + play(player, "CRIT", item.getLocation().clone().add(0, 0.2, 0), 0.2F, 0F, 0.2F, 0.1F, 40); + play(player, "SMOKE_NORMAL", item.getLocation().add(0, -0.2, 0), 0.3F, 0F, 0.3F, 0.1F, 40); + } + if (ThreadLocalRandom.current().nextInt(2) == 1) { + player.playSound(player.getLocation(), Sound.BLOCK_NOTE_PLING, 1, 1); + player.playSound(player.getLocation(), Sound.ENTITY_PLAYER_ATTACK_SWEEP, 1, 1); + } else { + player.playSound(player.getLocation(), Sound.ENTITY_EXPERIENCE_BOTTLE_THROW, 1, 1); + player.playSound(player.getLocation(), Sound.BLOCK_SLIME_HIT, 1, 1); + } + times++; + } + }.runTaskTimerAsynchronously(Core.getInstance(), 0, 20); + } + + public void startAnimationSixth(final Player player, final Location location, ItemStack reward) { + gravityArmorStand = (ArmorStand) location.getWorld().spawnEntity(location.clone().subtract(0, 0.8, 0), EntityType.ARMOR_STAND); + gravityArmorStand.setGravity(false); + gravityArmorStand.setVisible(false); + play(player, "VILLAGER_HAPPY", location, 0.5F, 0F, 0.5F, 0.1F, 40); + new BukkitRunnable() { + int times = 0; + + @Override + public void run() { + if (times == 4) { + cancel(); + new BukkitRunnable() { + @Override + public void run() { + play(player, "EXPLOSION_NORMAL", location, 0.2F, 0F, 0.2F, 0.1F, 70); +// stand.setHelmet(new ItemStack(Material.DIAMOND_SWORD, 1, Crate.this.rank.getOpenHead())); + stand.setHelmet(new ItemFactory(Core.getSettings().getType() != ServerType.VICE ? Material.DIAMOND_SWORD : Material.DIAMOND_SWORD, (short) Crate.this.rank.getOpenHead()).setUnbreakable(true).build()); + item = location.clone().getWorld().dropItem(location.clone().add(0, 0.2, 0), reward); + item.setVelocity(new Vector(0, 0, 0)); + item.setTicksLived(8000); + item.setPickupDelay(Integer.MAX_VALUE); + gravityArmorStand.setPassenger(item); + Crate.this.activateReward(); + new BukkitRunnable() { + @Override + public void run() { + hologramArmorStand = (ArmorStand) item.getLocation().getWorld().spawnEntity(item.getLocation().clone().add(0, -1.3, 0), EntityType.ARMOR_STAND); + hologramArmorStand.setMetadata("crateItemDisplay", new FixedMetadataValue(Core.getInstance(), true)); + hologramArmorStand.setCustomName(Utils.f(reward.getItemMeta().getDisplayName())); + hologramArmorStand.setCustomNameVisible(true); + hologramArmorStand.setGravity(false); + hologramArmorStand.setVisible(false); + new BukkitRunnable() { + @Override + public void run() { + resetCrateThird(player); + } + }.runTaskLater(Core.getInstance(), 20 * 7); + } + }.runTaskLater(Core.getInstance(), 8); + player.playSound(player.getLocation(), Sound.BLOCK_ANVIL_USE, 1, 1); + player.playSound(player.getLocation(), Sound.ENTITY_PLAYER_LEVELUP, 1, 1); + } + }.runTask(Core.getInstance()); + } + + play(player, "CLOUD", location, 0.2F, 0.1F, 0.2F, 0.1F, 2); + play(player, "SMOKE_NORMAL", location, 0.2F, 0.1F, 0.2F, 0.1F, 20); + if (ThreadLocalRandom.current().nextInt(2) == 1) { + player.playSound(player.getLocation(), Sound.BLOCK_GRASS_BREAK, 1, 1); + player.playSound(player.getLocation(), Sound.BLOCK_ANVIL_BREAK, 1, 1); + } else { + player.playSound(player.getLocation(), Sound.ENTITY_BLAZE_BURN, 1, 1); + player.playSound(player.getLocation(), Sound.ENTITY_BLAZE_HURT, 1, 1); + } + times++; + } + }.runTaskTimerAsynchronously(Core.getInstance(), 0, 10); + } + + public void resetCrateSixth(final Player player) { + new BukkitRunnable() { + int times = 0; + + @Override + public void run() { + if (times == 3) { + Move.stopOpening(Crate.this.openingCrate, Crate.this.loc); + Crate.this.openingCrate = null; + cancel(); + item.remove(); + Crate.this.hologram.getVisibilityManager().setVisibleByDefault(true); + Crate.this.hologram.getVisibilityManager().resetVisibilityAll(); + gravityArmorStand.remove(); + hologramArmorStand.remove(); +// stand.setHelmet(new ItemStack(Material.DIAMOND_SWORD, 1, (short) 14)); + stand.setHelmet(new ItemFactory(Core.getSettings().getType() != ServerType.VICE ? Material.DIAMOND_SWORD : Material.DIAMOND_SWORD, (short) Crate.this.getCrateStars().getClosedHead()).setUnbreakable(true).build()); + } + + if (ThreadLocalRandom.current().nextInt(2) == 1) { + play(player, "SLIME", item.getLocation().clone().add(0, 0.2, 0), 0.2F, 0F, 0.2F, 0.1F, 40); + play(player, "CLOUD", item.getLocation().add(0, -0.2, 0), 0.3F, 0F, 0.3F, 0.1F, 40); + } else { + play(player, "CRIT", item.getLocation().clone().add(0, 0.2, 0), 0.2F, 0F, 0.2F, 0.1F, 40); + play(player, "SMOKE_NORMAL", item.getLocation().add(0, -0.2, 0), 0.3F, 0F, 0.3F, 0.1F, 40); + } + + if (ThreadLocalRandom.current().nextInt(2) == 1) { + player.playSound(player.getLocation(), Sound.BLOCK_NOTE_PLING, 1, 1); + player.playSound(player.getLocation(), Sound.ENTITY_PLAYER_ATTACK_SWEEP, 1, 1); + } else { + player.playSound(player.getLocation(), Sound.ENTITY_EXPERIENCE_BOTTLE_THROW, 1, 1); + player.playSound(player.getLocation(), Sound.BLOCK_SLIME_HIT, 1, 1); + } + + times++; + } + }.runTaskTimerAsynchronously(Core.getInstance(), 0, 20); + } + + public void launchBills(int bills, final long despawnTime, Location location, final int maxLaunchRange) { + final Location launch = location.clone().add(0, 0.1, 0); + final ItemStack paper = new ItemStack(Material.PAPER); + for (int i = 0; i < bills; i++) { + new BukkitRunnable() { + + @Override + public void run() { + final Item item = launch.getWorld().dropItemNaturally(launch.clone(), paper); + item.setPickupDelay(Integer.MAX_VALUE); + item.getVelocity().multiply(maxLaunchRange).setY(0.6); + launch.getWorld().playSound(launch.clone(), Sound.ENTITY_EGG_THROW, 1, 1); + new BukkitRunnable() { + + @Override + public void run() { + item.remove(); + } + }.runTaskLater(Core.getInstance(), despawnTime); + } + + }.runTaskLater(Core.getInstance(), 10 * i); + } + } + + public void launchFireworks(Location center, int radius, int pointAmounts) { + List<Location> pointsToLaunch = getCircle(center, radius, pointAmounts); + for (Location launch : pointsToLaunch) { + Firework fw = (Firework) center.getWorld().spawnEntity(launch, EntityType.FIREWORK); + FireworkMeta fwm = fw.getFireworkMeta(); + int shape = ThreadLocalRandom.current().nextInt(4) + 1; + FireworkEffect.Type type = FireworkEffect.Type.BALL; + if (shape == 1) type = FireworkEffect.Type.BALL; + if (shape == 2) type = FireworkEffect.Type.BALL_LARGE; + if (shape == 3) type = FireworkEffect.Type.BURST; + if (shape == 4) type = FireworkEffect.Type.CREEPER; + if (shape == 5) type = FireworkEffect.Type.STAR; + Color color = (ThreadLocalRandom.current().nextInt(2) == 1) ? Color.RED : Color.ORANGE; + FireworkEffect effect = FireworkEffect.builder().flicker(ThreadLocalRandom.current().nextBoolean()).withColor(color).withFade(Color.AQUA).with(type).trail(ThreadLocalRandom.current().nextBoolean()).build(); + fwm.addEffect(effect); + fwm.setPower(1); + fw.setFireworkMeta(fwm); + } + } + + public void startAnimation(final Player player, final Location location, final Callback<Location> callback) { + if (selected != null) { + new BukkitRunnable() { + int times = 0; + + @Override + public void run() { + if (times == 4) { + cancel(); + new BukkitRunnable() { + + @Override + public void run() { + callback.execute(location); + } + }.runTask(Core.getInstance()); + } + play(player, "SMOKE_NORMAL", location, 0.2F, 0.1F, 0.2F, 0.1F, 70); + if (ThreadLocalRandom.current().nextInt(2) == 1) { + player.playSound(player.getLocation(), Sound.ENTITY_CREEPER_HURT, 1, 1); + player.playSound(player.getLocation(), Sound.BLOCK_ANVIL_BREAK, 1, 1); + } else { + player.playSound(player.getLocation(), Sound.ENTITY_BLAZE_BURN, 1, 1); + player.playSound(player.getLocation(), Sound.BLOCK_ANVIL_BREAK, 1, 1); + } + times++; + } + }.runTaskTimerAsynchronously(Core.getInstance(), 0, 10); + } + } + + public ArrayList<Location> getCircle(Location center, double radius, int amount) { + World world = center.getWorld(); + double increment = (2 * Math.PI) / amount; + ArrayList<Location> locations = new ArrayList<Location>(); + for (int i = 0; i < amount; i++) { + double angle = i * increment; + double x = center.getX() + (radius * Math.cos(angle)); + double z = center.getZ() + (radius * Math.sin(angle)); + locations.add(new Location(world, x, center.getY(), z)); + } + return locations; + } + + public void play(Player p, String effect, Location loc, float xOffset, float yOffset, float zOffset, float speed, int amount) { + p.getWorld().spawnParticle(Particle.valueOf(effect), loc, amount, xOffset, yOffset, zOffset, speed); + } + + public interface Callback<T> { + void execute(T response); + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/crates/CrateManager.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/crates/CrateManager.java new file mode 100644 index 0000000..4c657bd --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/crates/CrateManager.java @@ -0,0 +1,273 @@ +package net.grandtheftmc.core.voting.crates; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import java.util.Set; +import java.util.stream.Collectors; + +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.World; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.ArmorStand; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Item; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitRunnable; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.util.Component; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.util.WeightedRandomCollection; +import net.grandtheftmc.core.voting.RewardPack; +import net.grandtheftmc.core.voting.crates.events.CrateNearbyPlayerEvent; + + +/** + * Created by Liam on 25/04/2017. + */ +public class CrateManager implements Component<CrateManager, Core> { + + private final Set<Crate> crates = new HashSet<>(); + private final Map<CrateStars, List<CrateReward>> rewards = new HashMap<>(); + private final Map<CrateStars, Double> totalWeights = new HashMap<>(); + + private int taskId = -1; + + // TODO crate locations, etc etc + + // public CrateManager() { + // this.load(); + // } + + public void load() { + this.loadRewards(); + this.loadCrates(); + this.startSchedule(); + } + + /** + * This will run when the plugin (T) is enabled. + * + * @param plugin The JavaPlugin + */ + @Override + public CrateManager onEnable(Core plugin) { + World world = Bukkit.getWorld("spawn"); + if (world == null) return this; + Core.log("Removing ArmorStand Crate Entities"); + + world.getEntitiesByClass(ArmorStand.class).stream().filter(ent -> ent.getHelmet() != null && ent.getHelmet().getType() == Material.FLINT_AND_STEEL && ent.hasMetadata("CRATE")).forEach(entity -> { + entity.getNearbyEntities(2, 2, 2).stream().filter(nearby -> nearby instanceof ArmorStand).forEach(Entity::remove); + entity.remove(); + }); + + load(); + return this; + } + + /** + * This will run when the plugin (T) is disabling. + * + * @param plugin The JavaPlugin + */ + @Override + public CrateManager onDisable(Core plugin) { + World world = Bukkit.getWorld("spawn"); + if (world == null) return this; + + Core.log("Removing ArmorStand Crate Entities."); + if (!this.crates.isEmpty()) { + this.crates.forEach(crate -> { + + if (crate.isBeingOpened()) { + + switch (crate.getCrateStars().getStars()){ + case 1: + crate.getLocation().getWorld().getNearbyEntities(crate.getLocation(), 1, 3, 1).stream().filter(ent -> ent instanceof Item).forEach(item -> crate.resetAnimationFirst((Item) item)); + break; + case 2: + crate.getLocation().getWorld().getNearbyEntities(crate.getLocation(), 1, 3, 1).stream().filter(ent -> ent instanceof Item).forEach(item -> crate.resetAnimationSecond((Item) item)); + break; + case 3: + Bukkit.getOnlinePlayers().forEach(crate::resetCrateThird); + break; + case 4: + Bukkit.getOnlinePlayers().forEach(crate::resetCrateFourth); + break; + case 5: + Bukkit.getOnlinePlayers().forEach(crate::resetCrateFifth); + break; + case 6: + Bukkit.getOnlinePlayers().forEach(crate::resetCrateThird); + break; + } + } + + crate.destroy(); + }); + + this.crates.clear(); + } + + if (!this.rewards.isEmpty()) this.rewards.clear(); + if (!this.totalWeights.isEmpty()) this.totalWeights.clear(); + return this; + } + + public void loadCrates() { + Core.log("Loading crates..."); + YamlConfiguration c = Core.getSettings().getCratesConfig(); + for (Crate crate : this.crates) crate.destroy(); + this.crates.clear(); + + for (String s : c.getKeys(false)) { + try { + Location loc = Utils.teleportLocationFromString(c.getString(s + ".loc")); + for(Entity en : loc.getWorld().getEntities()) { + if(en instanceof ArmorStand && en.getLocation().distance(loc) < 2) + en.remove(); + } + + int stars = c.getInt(s + ".stars"); + this.crates.add(new Crate(loc, stars)); + } catch (Exception e) { + Core.error("There was an error while loading Crate with id " + s); + e.printStackTrace(); + } + } + Core.log("Finished loading crates!"); + } + + public void loadRewards() { + YamlConfiguration c = Core.getSettings().getCrateRewardsConfig(); + this.rewards.clear(); + for (String s : c.getKeys(false)) { + CrateStars stars; + double totalWeight = 0; + try { + stars = CrateStars.getCrateStars(Integer.parseInt(s)); + } catch (NumberFormatException e) { + Core.error("There was an error while loading Crate Rewards for crate with " + s + " star(s)"); + e.printStackTrace(); + continue; + } + List<CrateReward> packs = new ArrayList<>(); + for (String name : c.getConfigurationSection(s).getKeys(false)) { + try { + String item = c.getString(s + '.' + name + ".item"); + double weight = c.get(s + '.' + name + ".weight") == null ? 1 : c.getDouble(s + '.' + name + ".weight"); + boolean announce = c.get(s + '.' + name + ".announce") != null && c.getBoolean(s + '.' + name + ".announce"); + RewardPack pack = Core.getVoteManager().getRewardPack(c, name, s + '.' + name); + if (pack == null) Core.error("Error while loading RewardPack for crate reward: " + name); + else { + packs.add(new CrateReward(pack, item, weight, announce)); + totalWeight += weight; + } + } catch (Exception e) { + Core.error("There was an error while loading Crate Reward " + name + " for crate with " + s + " star(s)"); + e.printStackTrace(); + } + } + this.totalWeights.put(stars, totalWeight); + this.rewards.put(stars, packs); + } + } + + public void save(boolean shutdown) { + YamlConfiguration c = Core.getSettings().getCratesConfig(); + for (String s : c.getKeys(false)) c.set(s, null); + int i = 0; + for (Crate crate : this.crates) { + c.set(i + ".loc", Utils.teleportLocationToString(crate.getLocation())); + c.set(i + ".stars", crate.getCrateStars().getStars()); + i++; + } + Utils.saveConfig(c, "crates"); + + if (shutdown) { + crates.forEach(Crate::destroy); + } + } + + public CrateReward determineCrateReward(Player player, User user, CrateStars rank) { + WeightedRandomCollection<CrateReward> rewards = new WeightedRandomCollection<>(); + this.getRewards(rank).stream().filter(r -> !r.getRewardPack().hasAllRewards(player, user)).collect(Collectors.toList()).forEach(r -> rewards.add(r.getWeight(), r)); + + return rewards.next(); + } + + public Optional<Crate> getCrate(LivingEntity entity) { + return entity == null ? null : this.crates.stream().filter(crate -> Objects.equals(crate.getLocation(), entity.getLocation())).findFirst(); + } + + public void addCrate(Crate crate) { + this.crates.add(crate); + } + + public boolean removeCrate(Crate crate) { + if (this.crates.contains(crate)) { + crate.destroy(); + this.crates.remove(crate); + return true; + } + return false; + } + + public void startSchedule() { + if (this.taskId != -1) { + Bukkit.getScheduler().cancelTask(this.taskId); + } + + this.taskId = new BukkitRunnable() { + @Override + public void run() { + + getCrates().forEach(create -> { + + for (Entity nearby : create.getStand().getNearbyEntities(0.4, 1, 0.4)) { + + if (nearby instanceof Player) { + Player nearbyPlayer = (Player) nearby; + + CrateNearbyPlayerEvent event = new CrateNearbyPlayerEvent(nearbyPlayer, create); + + if (event.isCancelled()) { + return; + } + + Bukkit.getPluginManager().callEvent(event); + } + } + }); + } + }.runTaskTimerAsynchronously(Core.getInstance(), 0L, 5).getTaskId(); + } + + /** + * @return the next id of the list of crates( used to remove a crate) + */ + public int getNextAvaliableCrateID() { + return this.crates.size(); + } + + public List<CrateReward> getRewards(CrateStars rank) { + return this.rewards.containsKey(rank) ? this.rewards.get(rank) : new ArrayList<>(); + } + + public Set<Crate> getCrates() { + return this.crates; + } + + public double getTotalWeight(CrateStars stars) { + return this.totalWeights.get(stars); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/crates/CrateReward.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/crates/CrateReward.java new file mode 100644 index 0000000..a77a0a7 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/crates/CrateReward.java @@ -0,0 +1,55 @@ +package net.grandtheftmc.core.voting.crates; + +import com.j0ach1mmall3.jlib.methods.Parsing; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.voting.RewardPack; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; + +/** + * Created by Liam on 25/04/2017. + */ +public class CrateReward { + + private final ItemStack item; + private final RewardPack pack; + private final double weight; + private final boolean announce; + + public CrateReward(RewardPack pack, String item, double weight, boolean announce) { + this.pack = pack; + this.item = item == null ? null : Utils.addItemFlags(Parsing.parseItemStack(item), ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ATTRIBUTES); + this.weight = weight; + this.announce = announce; + } + + public String getName() { + return this.pack.getName(); + } + + public ItemStack getItem() { + return this.item == null ? this.pack.get().get(0).getDisplayItem() : this.item; + } + + public String getDisplayName() { + return this.pack.getDisplayName(); + } + + public RewardPack getRewardPack() { + return this.pack; + } + + public double getWeight() { + return this.weight; + } + + public void give(Player player, User user, CrateStars rank) { + if (this.announce) + Utils.broadcastExcept(player, Lang.CRATES.f(user.getColoredName(player) + "&7 won a rare reward while opening a " + rank.getDisplayName() + "&7: " + this.pack.getDisplayName() + "&7!")); + this.pack.give(player, user, this.announce ? null : "crateReward", rank.getCrowbars(), true); + + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/crates/CrateStars.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/crates/CrateStars.java new file mode 100644 index 0000000..9c3717b --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/crates/CrateStars.java @@ -0,0 +1,80 @@ +package net.grandtheftmc.core.voting.crates; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.servers.ServerType; +import net.grandtheftmc.core.util.Utils; + +/** + * Created by Liam on 24/04/2017. + */ +public enum CrateStars { + + + ONE(1, 1, "&6"), + TWO(2, 5, "&a"), + THREE(3, 50, "&b"), + FOUR(4, 250, "&5"), + FIVE(5, 1000, "&c"), + SIX(6, 45, null); + + private final int stars; + private final int crowbars; + private final String color; + + + CrateStars(int stars, int crowbars, String color) { + this.stars = stars; + this.crowbars = crowbars; + this.color = color; + } + + public int getStars() { + return this.stars; + } + + public int getCrowbars() { + return this.crowbars; + } + + public String getColor() { + return this.color; + } + + public String getDisplayName() { + return this.stars == 6 ? Utils.f("&c&lSkin Crate") : Utils.f( this.color + "&l" + this.stars + " Star " + (this.stars == 5 ? "Briefcase" : this.stars >= 3 ? "Vault" : "Crate")); + } + + public String getStarsString() { + return new String[]{"✩✩✩✩✩", "✮✩✩✩✩", "✮✮✩✩✩", "✮✮✮✩✩", "✮✮✮✮✩", "✮✮✮✮✮", ""}[this.stars]; + } + + public short getOpenHead() { + return Core.getSettings().getType() != ServerType.VICE ? new short[]{0, 803, 805, 807, 811, 816, 824}[this.stars] : new short[]{0, 803, 805, 807, 811, 816, 824}[this.stars]; + } + + public double getHeight(){ + return new double[]{0, 2, 2, 2.5, 3.75, 1.5, 2}[this.stars]; + } + + public short getClosedHead() { + return Core.getSettings().getType() != ServerType.VICE ? new short[]{0, 802, 804, 806, 808, 812, 823}[this.stars] : new short[]{0, 802, 804, 806, 808, 812, 823}[this.stars]; + } + + public static CrateStars getCrateStars(int stars) { + return CrateStars.values()[stars - 1]; + } + + public String getType(){ + switch (this.stars){ + case 1: + case 2: + return "Crate"; + case 3: + case 4: + return "Vault"; + case 5: + return "Briefcase"; + } + return "Crate"; + } +} \ No newline at end of file diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/crates/events/CrateNearbyPlayerEvent.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/crates/events/CrateNearbyPlayerEvent.java new file mode 100644 index 0000000..8857f67 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/crates/events/CrateNearbyPlayerEvent.java @@ -0,0 +1,55 @@ +package net.grandtheftmc.core.voting.crates.events; + +import net.grandtheftmc.core.voting.crates.Crate; +import org.bukkit.entity.Player; +import org.bukkit.event.Cancellable; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +/** + * Created by ThatAbstractWolf on 2017-08-08. + */ +public class CrateNearbyPlayerEvent extends Event implements Cancellable { + + private static final HandlerList HANDLER_LIST = new HandlerList(); + + private boolean cancelled; + + private final Player player; + private final Crate crate; + + public CrateNearbyPlayerEvent(Player player, Crate crate) { + + this.player = player; + this.crate = crate; + + this.cancelled = false; + } + + public Player getPlayer() { + return player; + } + + public Crate getCrate() { + return crate; + } + + @Override + public boolean isCancelled() { + return cancelled; + } + + @Override + public void setCancelled(boolean cancelled) { + this.cancelled = cancelled; + } + + @Override + public HandlerList getHandlers() { + return HANDLER_LIST; + } + + public static HandlerList getHandlerList() { + return HANDLER_LIST; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/crates/events/CrateOpenEvent.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/crates/events/CrateOpenEvent.java new file mode 100644 index 0000000..8fd78c6 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/crates/events/CrateOpenEvent.java @@ -0,0 +1,35 @@ +package net.grandtheftmc.core.voting.crates.events; + +import net.grandtheftmc.core.voting.Reward; +import net.grandtheftmc.core.voting.crates.Crate; +import org.bukkit.entity.Player; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; +import org.bukkit.event.player.PlayerEvent; + +/** + * Created by Timothy Lampen on 2017-04-28. + */ +public class CrateOpenEvent extends PlayerEvent { + private static final HandlerList HANDLER_LIST = new HandlerList(); + + private final Crate crate; + + public CrateOpenEvent(Player player, Crate crate) { + super(player); + this.crate = crate; + } + + public Crate getCrate() { + return crate; + } + + @Override + public HandlerList getHandlers() { + return HANDLER_LIST; + } + + public static HandlerList getHandlerList() { + return HANDLER_LIST; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/crates/listeners/CrateNearbyListener.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/crates/listeners/CrateNearbyListener.java new file mode 100644 index 0000000..2c75e98 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/crates/listeners/CrateNearbyListener.java @@ -0,0 +1,28 @@ +package net.grandtheftmc.core.voting.crates.listeners; + +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; + +import net.grandtheftmc.core.voting.crates.events.CrateNearbyPlayerEvent; +import org.bukkit.util.Vector; + +/** + * Created by ThatAbstractWolf on 2017-08-08. + */ +public class CrateNearbyListener implements Listener { + + @EventHandler + public void playerNearCrate(CrateNearbyPlayerEvent event) { + + Player player = event.getPlayer(); + + if (event.getCrate() != null && event.getCrate().isBeingOpened() && event.getCrate().getOpeningCrateUUID().equals(player.getUniqueId())) return; + + Vector velocity = player.getLocation().getDirection(); + + velocity.setY(0.2); + + player.setVelocity(velocity.multiply(-0.3)); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/crates/listeners/CrateOpenListener.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/crates/listeners/CrateOpenListener.java new file mode 100644 index 0000000..6e6fb63 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/crates/listeners/CrateOpenListener.java @@ -0,0 +1,168 @@ +package net.grandtheftmc.core.voting.crates.listeners; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.menus.MenuManager; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.voting.crates.Crate; +import net.grandtheftmc.core.voting.crates.CrateReward; +import net.grandtheftmc.core.voting.crates.CrateStars; +import net.grandtheftmc.core.voting.crates.events.CrateOpenEvent; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.player.PlayerInteractAtEntityEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.List; + +public class CrateOpenListener implements Listener { + + @EventHandler + public void onCrateOpen(CrateOpenEvent event) { + Crate crate = event.getCrate(); + CrateStars stars = crate.getCrateStars(); + Player player = event.getPlayer(); + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + if (crate.isBeingOpened()) { + player.sendMessage(Lang.CRATES.f("&7This crate is already being opened!")); + return; + } + if (user.getCrowbars() == -1) { + user.setCrowbars(5); + player.sendMessage(Lang.CRATES.f("&7You are using crates for the first time! You have been given &9&l5 Crowbars&7 as a welcome gift. Use them to buy five &6&l1 Star Crates&7 or one &a&l2 Star Crate&7! You can earn more crowbars by &e&lvoting&7!")); + return; + } + player.openInventory(generateCratePreview(user, stars)); + Core.getUserManager().getLoadedUser(player.getUniqueId()).setSelectedCrate(crate); + } + + @EventHandler + public void onInteract(InventoryClickEvent event) { + Player player = (Player) event.getWhoClicked(); + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + ItemStack item = event.getCurrentItem(); + Inventory inv = event.getClickedInventory(); + Crate crate = user.getSelectedCrate(); + if (inv == null || !ChatColor.stripColor(inv.getTitle()).contains(" Rewards")) { + return; + } + + event.setCancelled(true); + + if (crate == null) { + user.setSelectedCrate(null); + player.closeInventory(); + player.sendMessage(Lang.CRATES.f("&7Unable to find selected crate while in crate menu. Crate==" + crate + ". Report this error to an admin immediately.")); + return; + } + + if (crate.isBeingOpened()) { + user.setSelectedCrate(null); + player.closeInventory(); + player.sendMessage(Lang.CRATES.f("&7This " + crate.getCrateStars().getType().toLowerCase() + " is already being opened!")); + return; + } + + if (item.getType() != Material.FLINT_AND_STEEL) return; + + if (!user.hasCrowbars(crate.getCrateStars().getCrowbars())) { + user.setSelectedCrate(null); + player.closeInventory(); + player.sendMessage(Lang.CRATES.f("&7You do not have enough crowbars to open this " + crate.getCrateStars().getType().toLowerCase() + "! You need &9&l" + crate.getCrateStars().getCrowbars() + " Crowbar" + (crate.getCrateStars().getCrowbars() == 1 ? "" : "s") + "&7!")); + return; + } + + if (crate.getCrateStars().getStars() >= 4) { + MenuManager.openMenu(player, "confirmexpensivecrate"); + return; + } + + player.closeInventory(); + user.takeCrowbars(crate.getCrateStars().getCrowbars()); + crate.startAnimation(player, user); + } + + @EventHandler + protected final void onEntityInteract(PlayerInteractAtEntityEvent event) { + if (event.getRightClicked() == null) return; + if (event.getRightClicked().getType() != EntityType.ARMOR_STAND) return; + if (!event.getRightClicked().hasMetadata("CRATE")) return; + + Core.getCrateManager().getCrate((LivingEntity) event.getRightClicked()).ifPresent(crate -> { + CrateOpenEvent openEvent = new CrateOpenEvent(event.getPlayer(), crate); + Bukkit.getPluginManager().callEvent(openEvent); + }); + } + + private static int getDisplayCaseSize(CrateStars rank) {//TODO: use actual math to figure this out. + int items = rank == null ? 63:Core.getCrateManager().getRewards(rank).size(); + if (items <= 7) + return 27; + if (items <= 14) + return 36; + if (items <= 21) + return 45; + if (items <= 28) + return 54; + return 63; + } + + public static Inventory generateCratePreview(User user, CrateStars crateStars){ + List<CrateReward> rewards = Core.getCrateManager().getRewards(crateStars); + int totalRows = getDisplayCaseSize(crateStars) / 9; + int currentRewardIndex = 0; + Inventory inv = Bukkit.createInventory(null, totalRows * 9, Utils.f("&e&l" + crateStars.getType() + " Rewards")); + DecimalFormat df = new DecimalFormat("#.##"); + for (int row = 0; row < totalRows; row++) { + for (int slot = 0; slot < 9; slot++) { + if (row == totalRows - 1 && slot == 4) { + ItemStack is = Utils.addItemFlags(Utils.createItem(Material.FLINT_AND_STEEL, 45, + Utils.f("&9&lCosts " + crateStars.getCrowbars() + " Crowbar" + (crateStars.getCrowbars()==1 ? "" : "s")), user.getCrowbars() > 64 ? 64 : user.getCrowbars() + , "&7You have &a&l" + user.getCrowbars() + " &7Crowbar" + (crateStars.getCrowbars() == 1 ? "" : "s"), "", + "&7Click to open the " + crateStars.getDisplayName() + "&7!")); + ItemMeta im = is.getItemMeta(); + im.addItemFlags(ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ATTRIBUTES); + is.setItemMeta(im); + inv.setItem(row * 9 + 4, is); + } else if (row == 0 || row == totalRows - 1 || slot == 0 || slot == 8) { + inv.setItem(row * 9 + slot, Utils.createItem(Material.STAINED_GLASS_PANE, 7, " ")); + } else if (currentRewardIndex < rewards.size()) { + CrateReward reward = rewards.get(currentRewardIndex); + ItemStack is = rewards.get(currentRewardIndex).getItem().clone(); + ItemMeta im = is.getItemMeta(); + im.setDisplayName(Utils.f(reward.getDisplayName())); + List<String> lore = new ArrayList<>(); + lore.add(Utils.f("&7Chance: &a&l" + df.format(reward.getWeight() / Core.getCrateManager().getTotalWeight(crateStars) * 100) + "&a%")); + if (reward.getRewardPack().get().size() > 1) { + lore.add(""); + lore.add(Utils.f("&7Contains:")); + reward.getRewardPack().get().forEach(item -> lore.add(Utils.f(item.getDisplayName()))); + } + if (reward.getRewardPack().getDescription() != null && !reward.getRewardPack().getDescription().isEmpty()) { + lore.add(""); + lore.add(Utils.f("&7" + reward.getRewardPack().getDescription())); + } + im.setLore(lore); + is.setItemMeta(im); + inv.setItem(row * 9 + slot, is); + currentRewardIndex += 1; + } + } + } + return inv; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/events/PlayerVoteEvent.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/events/PlayerVoteEvent.java new file mode 100644 index 0000000..9300032 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/events/PlayerVoteEvent.java @@ -0,0 +1,59 @@ +package net.grandtheftmc.core.voting.events; + +import org.bukkit.event.Cancellable; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +import java.util.UUID; + +public class PlayerVoteEvent extends Event implements Cancellable { + private static final HandlerList handlers = new HandlerList(); + + private final UUID uuid; + private final String timestamp; + private final String address; + private final String serviceName; + private boolean cancelled; + + public PlayerVoteEvent(UUID uuid, String timestamp, String address, String serviceName) { + this.uuid = uuid; + this.timestamp = timestamp; + this.address = address; + this.serviceName = serviceName; + } + + public UUID getUUID() { + return uuid; + } + + public String getTimestamp() { + return timestamp; + } + + public String getAddress() { + return address; + } + + public String getServiceName() { + return serviceName; + } + + @Override + public boolean isCancelled() { + return this.cancelled; + } + + @Override + public void setCancelled(boolean cancelled) { + this.cancelled = cancelled; + } + + @Override + public HandlerList getHandlers() { + return handlers; + } + + public static HandlerList getHandlerList() { + return handlers; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/events/RewardCheckEvent.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/events/RewardCheckEvent.java new file mode 100644 index 0000000..9604994 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/events/RewardCheckEvent.java @@ -0,0 +1,51 @@ +package net.grandtheftmc.core.voting.events; + +import org.bukkit.entity.Player; +import org.bukkit.event.HandlerList; + +import net.grandtheftmc.core.voting.Reward; + +public class RewardCheckEvent extends RewardEvent { + private static final HandlerList HANDLER_LIST = new HandlerList(); + + private final Player player; + private final String identifier; + private boolean result; + + public RewardCheckEvent(Player player, Reward.RewardType rewardType, String identifier) { + super(rewardType); + this.player = player; + this.identifier = identifier; + } + + public RewardCheckEvent(Player player, Reward reward, Reward.RewardType rewardType, String identifier) { + super(reward, rewardType); + this.player = player; + this.identifier = identifier; + } + + public static HandlerList getHandlerList() { + return HANDLER_LIST; + } + + public Player getPlayer() { + return this.player; + } + + public String getIdentifier() { + return identifier; + } + + public boolean getResult() { + return result; + } + + public void setResult(boolean result) { + this.result = result; + } + + @Override + public HandlerList getHandlers() { + return HANDLER_LIST; + } +} \ No newline at end of file diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/events/RewardEvent.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/events/RewardEvent.java new file mode 100644 index 0000000..baf861c --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/events/RewardEvent.java @@ -0,0 +1,42 @@ +package net.grandtheftmc.core.voting.events; + +import org.bukkit.event.Cancellable; +import org.bukkit.event.Event; + +import net.grandtheftmc.core.voting.Reward; +import net.grandtheftmc.core.voting.Reward.RewardType; + +public abstract class RewardEvent extends Event implements Cancellable { + + /** The reward involve in this event */ + private Reward reward; + private Reward.RewardType rewardType; + private boolean cancelled; + + protected RewardEvent(Reward reward, RewardType rewardType) { + this.reward = reward; + this.rewardType = rewardType; + } + + protected RewardEvent(Reward.RewardType rewardType) { + this.rewardType = rewardType; + } + + public Reward getReward() { + return reward; + } + + public Reward.RewardType getRewardType() { + return rewardType; + } + + @Override + public boolean isCancelled() { + return this.cancelled; + } + + @Override + public void setCancelled(boolean cancelled) { + this.cancelled = cancelled; + } +} \ No newline at end of file diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/events/RewardGiveEvent.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/events/RewardGiveEvent.java new file mode 100644 index 0000000..9762187 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/events/RewardGiveEvent.java @@ -0,0 +1,42 @@ +package net.grandtheftmc.core.voting.events; + +import org.bukkit.entity.Player; +import org.bukkit.event.HandlerList; + +import net.grandtheftmc.core.voting.Reward; + +public final class RewardGiveEvent extends RewardEvent { + private static final HandlerList HANDLER_LIST = new HandlerList(); + + private final Player player; + private final String identifier; + + public RewardGiveEvent(Player player, Reward.RewardType rewardType, String identifier) { + super(rewardType); + this.player = player; + this.identifier = identifier; + } + + public RewardGiveEvent(Player player, Reward reward, Reward.RewardType rewardType, String identifier) { + super(reward, rewardType); + this.player = player; + this.identifier = identifier; + } + + public static HandlerList getHandlerList() { + return HANDLER_LIST; + } + + public Player getPlayer() { + return this.player; + } + + public String getIdentifier() { + return identifier; + } + + @Override + public HandlerList getHandlers() { + return HANDLER_LIST; + } +} \ No newline at end of file diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/events/RewardInfoEvent.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/events/RewardInfoEvent.java new file mode 100644 index 0000000..b72a7ab --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/voting/events/RewardInfoEvent.java @@ -0,0 +1,46 @@ +package net.grandtheftmc.core.voting.events; + +import org.bukkit.Material; +import org.bukkit.event.HandlerList; +import org.bukkit.inventory.ItemStack; + +import net.grandtheftmc.core.voting.Reward; + +public class RewardInfoEvent extends RewardEvent { + private static final HandlerList HANDLER_LIST = new HandlerList(); + private final String identifier; + private ItemStack displayItem; + + public RewardInfoEvent(Reward.RewardType rewardType, String identifier) { + super(rewardType); + this.displayItem = new ItemStack(Material.BARRIER); + this.identifier = identifier; + } + + public RewardInfoEvent(Reward reward, Reward.RewardType rewardType, String identifier) { + super(reward, rewardType); + this.displayItem = new ItemStack(Material.BARRIER); + this.identifier = identifier; + } + + public static HandlerList getHandlerList() { + return HANDLER_LIST; + } + + public ItemStack getDisplayItem() { + return displayItem; + } + + public void setDisplayItem(ItemStack displayItem) { + this.displayItem = displayItem; + } + + public String getIdentifier() { + return identifier; + } + + @Override + public HandlerList getHandlers() { + return HANDLER_LIST; + } +} \ No newline at end of file diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/whitelist/WhitelistManager.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/whitelist/WhitelistManager.java new file mode 100644 index 0000000..f214692 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/whitelist/WhitelistManager.java @@ -0,0 +1,122 @@ +package net.grandtheftmc.core.whitelist; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.util.Component; +import org.bukkit.Bukkit; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.scheduler.BukkitScheduler; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.UUID; +import java.util.stream.Collectors; + +public class WhitelistManager implements Component<WhitelistManager, Core> { + + private final List<WhitelistedUser> whitelistedUsers = new ArrayList<>(); + private boolean enabled; + private UserRank bypassRank; + + public WhitelistManager() { + this.load(); + this.startSchedule(); + } + + @Override + public WhitelistManager onDisable(Core plugin) { + if(!this.whitelistedUsers.isEmpty()) + this.whitelistedUsers.clear(); + return this; + } + + public void whitelist(String name) { + if (this.isWhitelisted(name)) + return; + WhitelistedUser wu = new WhitelistedUser(null, name); + this.whitelistedUsers.add(wu); + } + + public void unwhitelist(String name) { + WhitelistedUser wu = this.getWhitelistedUser(name); + if (wu != null) + this.whitelistedUsers.remove(wu); + + } + + private boolean isWhitelisted(String name) { + return this.getWhitelistedUser(name) != null; + } + + public void updateUUID(String name, UUID uuid) { + WhitelistedUser wu = this.getWhitelistedUser(name); + wu.setUuid(uuid); + } + + public boolean isEnabled() { + return this.enabled; + } + + public void setEnabled(boolean en) { + this.enabled = en; + } + + public List<WhitelistedUser> getWhitelistedUsers() { + return this.whitelistedUsers; + } + + public WhitelistedUser getWhitelistedUser(String name) { + return this.whitelistedUsers.stream().filter(wu -> wu.getName().equalsIgnoreCase(name)).findFirst().orElse(null); + } + + public WhitelistedUser getWhitelistedUser(UUID uuid) { + return this.whitelistedUsers.stream().filter(wu -> Objects.equals(uuid, wu.getUuid())).findFirst().orElse(null); + } + + public void save(boolean shutdown) { + YamlConfiguration c = Core.getSettings().getWhitelistConfig(); + for (String key : c.getKeys(false)) + c.set(key, null); + List<String> whitelistedNames = new ArrayList<>(); + c.set("enabled", this.enabled); + c.set("bypassRank", this.bypassRank == null ? null : this.bypassRank.getName()); + for (WhitelistedUser wu : this.whitelistedUsers) { + if (wu.getUuid() == null) { + whitelistedNames.add(wu.getName()); + continue; + } + c.set("whitelist." + wu.getUuid(), wu.getName()); + } + c.set("whitelistedNames", whitelistedNames); + Utils.saveConfig(c, "whitelist"); + + } + + public void load() { + YamlConfiguration c = Core.getSettings().getWhitelistConfig(); + if (c.get("enabled") != null) + this.enabled = c.getBoolean("enabled"); + if (c.get("bypassRank") != null) this.bypassRank = UserRank.getUserRankOrNull(c.getString("bypassRank")); + if (c.get("whitelistedNames") != null) + this.whitelistedUsers.addAll(c.getStringList("whitelistedNames").stream().map(s -> new WhitelistedUser(null, s)).collect(Collectors.toList())); + if (c.get("whitelist") != null) + this.whitelistedUsers.addAll(c.getConfigurationSection("whitelist").getKeys(false).stream().map(uuidString -> new WhitelistedUser(UUID.fromString(uuidString), c.getString("whitelist." + uuidString))).collect(Collectors.toList())); + Utils.saveConfig(c, "whitelist"); + + } + + public void startSchedule() { + BukkitScheduler sched = Bukkit.getScheduler(); + sched.scheduleSyncRepeatingTask(Core.getInstance(), () -> Core.getWhitelistManager().save(false), 72000, 72000); + } + + public UserRank getBypassRank() { + return this.bypassRank; + } + + public void setBypassRank(UserRank bypassRank) { + this.bypassRank = bypassRank; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/whitelist/WhitelistedUser.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/whitelist/WhitelistedUser.java new file mode 100644 index 0000000..2c2eaf1 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/whitelist/WhitelistedUser.java @@ -0,0 +1,31 @@ +package net.grandtheftmc.core.whitelist; + +import java.util.UUID; + +public class WhitelistedUser { + + private UUID uuid; + private String name; + + public WhitelistedUser(UUID uuid, String name) { + this.uuid = uuid; + this.name = name; + } + + public UUID getUuid() { + return this.uuid; + } + + public void setUuid(UUID uuid) { + this.uuid = uuid; + } + + public String getName() { + return this.name; + } + + public void setName(String name) { + this.name = name; + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/Wrapper.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/Wrapper.java new file mode 100644 index 0000000..1ad9864 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/Wrapper.java @@ -0,0 +1,7 @@ +package net.grandtheftmc.core.wrapper; + +/** + * Created by Luke Bingham on 15/09/2017. + */ +public interface Wrapper { +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/entity/AbstractEntity.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/entity/AbstractEntity.java new file mode 100644 index 0000000..8598c9a --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/entity/AbstractEntity.java @@ -0,0 +1,19 @@ +package net.grandtheftmc.core.wrapper.entity; + +import net.grandtheftmc.core.wrapper.Wrapper; + +/** + * Created by Luke Bingham on 15/09/2017. + */ +public abstract class AbstractEntity<T extends CoreEntity> implements Wrapper { + + /** + * (!) + * + * DON'T USE THIS, STILL TRYING TO FIND THE BEST WAY TO WRAP ENTITIES. + * + * (!) + */ + + public abstract T getCoreEntity(); +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/entity/CoreEntity.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/entity/CoreEntity.java new file mode 100644 index 0000000..f220e92 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/entity/CoreEntity.java @@ -0,0 +1,7 @@ +package net.grandtheftmc.core.wrapper.entity; + +/** + * Created by Luke Bingham on 15/09/2017. + */ +public interface CoreEntity { +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/entity/pig/CorePig.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/entity/pig/CorePig.java new file mode 100644 index 0000000..e7c3bd2 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/entity/pig/CorePig.java @@ -0,0 +1,13 @@ +package net.grandtheftmc.core.wrapper.entity.pig; + +import net.grandtheftmc.core.wrapper.entity.CoreEntity; + +/** + * Created by Luke Bingham on 15/09/2017. + */ +public interface CorePig extends CoreEntity { + + void setEntityName(String name); + + void setEntityNameVisible(boolean visible); +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/entity/pig/CorePig_1_12.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/entity/pig/CorePig_1_12.java new file mode 100644 index 0000000..0c4db4e --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/entity/pig/CorePig_1_12.java @@ -0,0 +1,24 @@ +package net.grandtheftmc.core.wrapper.entity.pig; + +import org.bukkit.World; +import org.bukkit.craftbukkit.v1_12_R1.CraftWorld; + +/** + * Created by Luke Bingham on 15/09/2017. + */ +public class CorePig_1_12 extends net.minecraft.server.v1_12_R1.EntityPig implements CorePig { + + public CorePig_1_12(World world) { + super(((CraftWorld) world).getHandle()); + } + + @Override + public void setEntityName(String name) { + //TODO Set entity name + } + + @Override + public void setEntityNameVisible(boolean visible) { + //TODO set entity name visible + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/entity/pig/WrappedPig.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/entity/pig/WrappedPig.java new file mode 100644 index 0000000..1730368 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/entity/pig/WrappedPig.java @@ -0,0 +1,20 @@ +package net.grandtheftmc.core.wrapper.entity.pig; + +import net.grandtheftmc.core.wrapper.entity.AbstractEntity; + +/** + * Created by Luke Bingham on 15/09/2017. + */ +public class WrappedPig extends AbstractEntity<CorePig> { + + private CorePig corePig; + + public WrappedPig(CorePig pig) { + this.corePig = pig; + } + + @Override + public CorePig getCoreEntity() { + return this.corePig; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/AbstractPacket.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/AbstractPacket.java new file mode 100644 index 0000000..fbf1c90 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/AbstractPacket.java @@ -0,0 +1,87 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet; + +import java.lang.reflect.InvocationTargetException; + +import net.grandtheftmc.core.wrapper.Wrapper; +import org.bukkit.entity.Player; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.ProtocolLibrary; +import com.comphenix.protocol.events.PacketContainer; +import com.google.common.base.Objects; + +public abstract class AbstractPacket implements Wrapper { + // The packet we will be modifying + protected PacketContainer handle; + + /** + * Constructs a new strongly typed wrapper for the given packet. + * + * @param handle - handle to the raw packet data. + * @param type - the packet type. + */ + protected AbstractPacket(PacketContainer handle, PacketType type) { + // Make sure we're given a valid packet + if (handle == null) + throw new IllegalArgumentException("Packet handle cannot be NULL."); + if (!Objects.equal(handle.getType(), type)) + throw new IllegalArgumentException(handle.getHandle() + " is not a packet of type " + type); + + this.handle = handle; + } + + /** + * Retrieve a handle to the raw packet data. + * + * @return Raw packet data. + */ + public PacketContainer getHandle() { + return handle; + } + + /** + * Send the current packet to the given receiver. + * + * @param receiver - the receiver. + * @throws RuntimeException If the packet cannot be sent. + */ + public void sendPacket(Player receiver) { + try { + ProtocolLibrary.getProtocolManager().sendServerPacket(receiver, getHandle()); + } catch (InvocationTargetException e) { + throw new RuntimeException("Cannot send packet.", e); + } + } + + /** + * Simulate receiving the current packet from the given sender. + * + * @param sender - the sender. + * @throws RuntimeException if the packet cannot be received. + */ + public void receivePacket(Player sender) { + try { + ProtocolLibrary.getProtocolManager().recieveClientPacket(sender, getHandle()); + } catch (Exception e) { + throw new RuntimeException("Cannot recieve packet.", e); + } + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/ChunkPacketProcessor.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/ChunkPacketProcessor.java new file mode 100644 index 0000000..d62c3fd --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/ChunkPacketProcessor.java @@ -0,0 +1,388 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet; + +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.World.Environment; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.reflect.StructureModifier; + +/** + * Used to process a chunk. + * + * @author Kristian + */ +public class ChunkPacketProcessor { + /** + * Contains the offset of the different block data in a chunk packet. + * + * @author Kristian + */ + public static class ChunkOffsets { + private int blockIdOffset; + private int dataOffset; + private int lightOffset; + private int skylightOffset; + private int extraOffset; + + private ChunkOffsets(int blockIdOffset, int dataOffset, + int lightOffset, int skylightOffset, int extraOffset) { + this.blockIdOffset = blockIdOffset; + this.dataOffset = dataOffset; + this.lightOffset = lightOffset; + this.skylightOffset = skylightOffset; + this.extraOffset = extraOffset; + } + + private void incrementIdIndex() { + blockIdOffset += ChunkPacketProcessor.BLOCK_ID_LENGHT; + dataOffset += ChunkPacketProcessor.BYTES_PER_NIBBLE_PART; + dataOffset += ChunkPacketProcessor.BYTES_PER_NIBBLE_PART; + + if (skylightOffset >= 0) { + skylightOffset += ChunkPacketProcessor.BYTES_PER_NIBBLE_PART; + } + } + + private void incrementExtraIndex() { + if (extraOffset >= 0) { + extraOffset += ChunkPacketProcessor.BYTES_PER_NIBBLE_PART; + } + } + + /** + * Retrieve the starting index of the block ID data. + * <p> + * This will be 4096 bytes in lenght, one byte for each block in the + * 16x16x16 chunklet. + * + * @return The starting location of the block ID data. + */ + public int getBlockIdOffset() { + return blockIdOffset; + } + + /** + * Retrieve the starting index of the meta data (4 bit per block). + * <p> + * This will be 2048 bytes in lenght, one nibblet for each block in the + * 16x16x16 chunklet. + * + * @return The starting location of the block meta data. + */ + public int getDataOffset() { + return dataOffset; + } + + /** + * Retrieve the starting index of the torch light data (4 bit per + * block). + * <p> + * This will be 2048 bytes in lenght, one nibblet for each block in the + * 16x16x16 chunklet. + * + * @return The starting location of the torch light data. + */ + public int getLightOffset() { + return lightOffset; + } + + /** + * Retrieve the starting index of the skylight data (4 bit per block). + * <p> + * This will be 2048 bytes in lenght if the skylight data exists (see + * {@link #hasSkylightOffset()}), no bytes if not. + * + * @return The starting location of the skylight data. + */ + public int getSkylightOffset() { + return skylightOffset; + } + + /** + * Determine if the current chunklet contains skylight data. + * + * @return TRUE if it does, FALSE otherwise. + */ + public boolean hasSkylightOffset() { + return skylightOffset >= 0; + } + + /** + * Retrieve the extra 4 bits in each block ID, if necessary. + * <p> + * This will be 2048 bytes in lenght if the extra data exists, no bytes + * if not. + * + * @return The starting location of the extra data. + */ + public int getExtraOffset() { + return extraOffset; + } + + /** + * Determine if the current chunklet contains any extra block ID data. + * + * @return TRUE if it does, FALSE otherwise. + */ + public boolean hasExtraOffset() { + return extraOffset > 0; + } + } + + /** + * Process the content of a single 16x16x16 chunklet in a 16x256x16 chunk. + * + * @author Kristian + */ + public interface ChunkletProcessor { + /** + * Process a given chunklet (16x16x16). + * + * @param origin - the block with the lowest x, y and z coordinate in + * the chunklet. + * @param data - the data array. + * @param offsets - the offsets with the data for the given chunklet. + */ + public void processChunklet(Location origin, byte[] data, + ChunkOffsets offsets); + + /** + * Process the biome array for a chunk (16x256x16). + * <p> + * This method will not be called if the chunk is missing biome + * information. + * + * @param origin - the block with the lowest x, y and z coordinate in + * the chunk. + * @param data - the data array. + * @param biomeIndex - the starting index of the biome data (256 bytes + * in lenght). + */ + public void processBiomeArray(Location origin, byte[] data, + int biomeIndex); + } + + // Useful Minecraft constants + protected static final int BYTES_PER_NIBBLE_PART = 2048; + protected static final int CHUNK_SEGMENTS = 16; + protected static final int NIBBLES_REQUIRED = 4; + + public static final int BLOCK_ID_LENGHT = 4096; + public static final int DATA_LENGHT = 2048; + public static final int BIOME_ARRAY_LENGTH = 256; + + private int chunkX; + private int chunkZ; + private int chunkMask; + private int extraMask; + private int chunkSectionNumber; + private int extraSectionNumber; + private boolean hasContinous = true; + + private int startIndex; + private int size; + + private byte[] data; + private World world; + + private ChunkPacketProcessor() { + // Use factory methods + } + + /** + * Construct a chunk packet processor from a givne MAP_CHUNK packet. + * + * @param packet - the map chunk packet. + * @return The chunk packet processor. + */ + public static ChunkPacketProcessor fromMapPacket(PacketContainer packet, + World world) { + if (!packet.getType().equals(PacketType.Play.Server.MAP_CHUNK)) + throw new IllegalArgumentException(packet + + " must be a MAP_CHUNK packet."); + + StructureModifier<Integer> ints = packet.getIntegers(); + StructureModifier<byte[]> byteArray = packet.getByteArrays(); + + // Create an info objects + ChunkPacketProcessor processor = new ChunkPacketProcessor(); + processor.world = world; + processor.chunkX = ints.read(0); // packet.a; + processor.chunkZ = ints.read(1); // packet.b; + processor.chunkMask = ints.read(2); // packet.c; + processor.extraMask = ints.read(3); // packet.d; + processor.data = byteArray.read(1); // packet.inflatedBuffer; + processor.startIndex = 0; + + if (packet.getBooleans().size() > 0) { + processor.hasContinous = packet.getBooleans().read(0); + } + return processor; + } + + /** + * Construct an array of chunk packet processors from a given MAP_CHUNK_BULK + * packet. + * + * @param packet - the map chunk bulk packet. + * @return The chunk packet processors. + */ + // The MAP_CHUNK_BULK packet no longer exists + /* + * public static ChunkPacketProcessor[] fromMapBulkPacket(PacketContainer + * packet, World world) { + * if (!packet.getType().equals(PacketType.Play.Server.MAP_CHUNK_BULK)) + * throw new IllegalArgumentException(packet + + * " must be a MAP_CHUNK_BULK packet."); + * StructureModifier<int[]> intArrays = packet.getIntegerArrays(); + * StructureModifier<byte[]> byteArrays = packet.getByteArrays(); + * int[] x = intArrays.read(0); // packet.c; + * int[] z = intArrays.read(1); // packet.d; + * ChunkPacketProcessor[] processors = new ChunkPacketProcessor[x.length]; + * int[] chunkMask = intArrays.read(2); // packet.a; + * int[] extraMask = intArrays.read(3); // packet.b; + * int dataStartIndex = 0; + * for (int chunkNum = 0; chunkNum < processors.length; chunkNum++) { + * // Create an info objects + * ChunkPacketProcessor processor = new ChunkPacketProcessor(); + * processors[chunkNum] = processor; + * processor.world = world; + * processor.chunkX = x[chunkNum]; + * processor.chunkZ = z[chunkNum]; + * processor.chunkMask = chunkMask[chunkNum]; + * processor.extraMask = extraMask[chunkNum]; + * processor.hasContinous = true; // Always true + * processor.data = byteArrays.read(1); //packet.buildBuffer; + * // Check for Spigot + * if (processor.data == null || processor.data.length == 0) { + * processor.data = + * packet.getSpecificModifier(byte[][].class).read(0)[chunkNum]; + * } else { + * processor.startIndex = dataStartIndex; + * } + * dataStartIndex += processor.size; + * } + * return processors; + * } + */ + + /** + * Begin processing the current chunk with the provided processor. + * + * @param processor - the processor that will process the chunk. + */ + public void process(ChunkletProcessor processor) { + // Compute chunk number + for (int i = 0; i < CHUNK_SEGMENTS; i++) { + if ((chunkMask & (1 << i)) > 0) { + chunkSectionNumber++; + } + if ((extraMask & (1 << i)) > 0) { + extraSectionNumber++; + } + } + + int skylightCount = getSkylightCount(); + + // The total size of a chunk is the number of blocks sent (depends on the number of sections) multiplied by the + // amount of bytes per block. This last figure can be calculated by adding together all the data parts: + // For any block: + // * Block ID - 8 bits per block (byte) + // * Block metadata - 4 bits per block (nibble) + // * Block light array - 4 bits per block + // If 'worldProvider.skylight' is TRUE + // * Sky light array - 4 bits per block + // If the segment has extra data: + // * Add array - 4 bits per block + // Biome array - only if the entire chunk (has continous) is sent: + // * Biome array - 256 bytes + // + // A section has 16 * 16 * 16 = 4096 blocks. + size = + BYTES_PER_NIBBLE_PART + * ((NIBBLES_REQUIRED + skylightCount) + * chunkSectionNumber + extraSectionNumber) + + (hasContinous ? BIOME_ARRAY_LENGTH : 0); + + if ((getOffset(2) - startIndex) > data.length) { + return; + } + + // Make sure the chunk is loaded + if (isChunkLoaded(world, chunkX, chunkZ)) { + translate(processor); + } + } + + /** + * Retrieve the number of 2048 byte segments per chunklet. + * <p< + * This is usually one for The Overworld, and zero for both The End and The + * Nether. + * + * @return Number of skylight byte segments. + */ + protected int getSkylightCount() { + // There's no sun/moon in the end or in the nether, so Minecraft doesn't sent any skylight information + // This optimization was added in 1.4.6. Note that ideally you should get this from the "f" (skylight) field. + return world.getEnvironment() == Environment.NORMAL ? 1 : 0; + } + + private int getOffset(int nibbles) { + return startIndex + + (nibbles * chunkSectionNumber * ChunkPacketProcessor.BYTES_PER_NIBBLE_PART); + } + + private void translate(ChunkletProcessor processor) { + // Loop over 16x16x16 chunks in the 16x256x16 column + int current = 4; + ChunkOffsets offsets = + new ChunkOffsets(getOffset(0), getOffset(2), getOffset(3), + getSkylightCount() > 0 ? getOffset(current++) : -1, + extraSectionNumber > 0 ? getOffset(current++) : -1); + + for (int i = 0; i < 16; i++) { + // If the bitmask indicates this chunk is sent + if ((chunkMask & 1 << i) > 0) { + // The lowest block (in x, y, z) in this chunklet + Location origin = + new Location(world, chunkX << 4, i * 16, chunkZ << 4); + + processor.processChunklet(origin, data, offsets); + offsets.incrementIdIndex(); + } + if ((extraMask & 1 << i) > 0) { + offsets.incrementExtraIndex(); + } + } + + if (hasContinous) { + processor.processBiomeArray(new Location(world, chunkX << 4, 0, + chunkZ << 4), data, startIndex + size - BIOME_ARRAY_LENGTH); + } + } + + private boolean isChunkLoaded(World world, int x, int z) { + return world.isChunkLoaded(x, z); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperHandshakingClientSetProtocol.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperHandshakingClientSetProtocol.java new file mode 100644 index 0000000..6741f21 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperHandshakingClientSetProtocol.java @@ -0,0 +1,119 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.in; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.PacketType.Protocol; +import com.comphenix.protocol.events.PacketContainer; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperHandshakingClientSetProtocol extends AbstractPacket { + public static final PacketType TYPE = + PacketType.Handshake.Client.SET_PROTOCOL; + + public WrapperHandshakingClientSetProtocol() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperHandshakingClientSetProtocol(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Protocol Version. + * <p> + * Notes: (4 as of 1.7.2) + * + * @return The current Protocol Version + */ + public int getProtocolVersion() { + return handle.getIntegers().read(0); + } + + /** + * Set Protocol Version. + * + * @param value - new value. + */ + public void setProtocolVersion(int value) { + handle.getIntegers().write(0, value); + } + + /** + * Retrieve Server Address (hostname or IP). + * <p> + * Notes: localhost + * + * @return The current Server Address (hostname or IP) + */ + public String getServerAddressHostnameOrIp() { + return handle.getStrings().read(0); + } + + /** + * Set Server Address (hostname or IP). + * + * @param value - new value. + */ + public void setServerAddressHostnameOrIp(String value) { + handle.getStrings().write(0, value); + } + + /** + * Retrieve Server Port. + * <p> + * Notes: 25565 + * + * @return The current Server Port + */ + public int getServerPort() { + return handle.getIntegers().read(1); + } + + /** + * Set Server Port. + * + * @param value - new value. + */ + public void setServerPort(int value) { + handle.getIntegers().write(1, value); + } + + /** + * Retrieve Next state. + * <p> + * Notes: 1 for status, 2 for login + * + * @return The current Next state + */ + public Protocol getNextState() { + return handle.getProtocols().read(0); + } + + /** + * Set Next state. + * + * @param value - new value. + */ + public void setNextState(Protocol value) { + handle.getProtocols().write(0, value); + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperLoginClientEncryptionBegin.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperLoginClientEncryptionBegin.java new file mode 100644 index 0000000..847a087 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperLoginClientEncryptionBegin.java @@ -0,0 +1,73 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.in; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperLoginClientEncryptionBegin extends AbstractPacket { + public static final PacketType TYPE = + PacketType.Login.Client.ENCRYPTION_BEGIN; + + public WrapperLoginClientEncryptionBegin() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperLoginClientEncryptionBegin(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Shared Secret. + * + * @return The current Shared Secret + */ + public byte[] getSharedSecret() { + return handle.getByteArrays().read(0); + } + + /** + * Set Shared Secret. + * + * @param value - new value. + */ + public void setSharedSecret(byte[] value) { + handle.getByteArrays().write(0, value); + } + + /** + * Retrieve Verify Token. + * + * @return The current Verify Token + */ + public byte[] getVerifyToken() { + return handle.getByteArrays().read(1); + } + + /** + * Set Verify Token. + * + * @param value - new value. + */ + public void setVerifyToken(byte[] value) { + handle.getByteArrays().write(1, value); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperLoginClientStart.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperLoginClientStart.java new file mode 100644 index 0000000..5f0f5bf --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperLoginClientStart.java @@ -0,0 +1,55 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.in; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.wrappers.WrappedGameProfile; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperLoginClientStart extends AbstractPacket { + public static final PacketType TYPE = PacketType.Login.Client.START; + + public WrapperLoginClientStart() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperLoginClientStart(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Profile. + * + * @return The current Profile + */ + public WrappedGameProfile getProfile() { + return handle.getGameProfiles().read(0); + } + + /** + * Set Name. + * + * @param value - new value. + */ + public void setProfile(WrappedGameProfile value) { + handle.getGameProfiles().write(0, value); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientAbilities.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientAbilities.java new file mode 100644 index 0000000..4f93825 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientAbilities.java @@ -0,0 +1,84 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.in; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperPlayClientAbilities extends AbstractPacket { + public static final PacketType TYPE = PacketType.Play.Client.ABILITIES; + + public WrapperPlayClientAbilities() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayClientAbilities(PacketContainer packet) { + super(packet, TYPE); + } + + public boolean isInvulnurable() { + return handle.getBooleans().read(0); + } + + public void setInvulnurable(boolean value) { + handle.getBooleans().write(0, value); + } + + public boolean isFlying() { + return handle.getBooleans().read(1); + } + + public void setFlying(boolean value) { + handle.getBooleans().write(1, value); + } + + public boolean canFly() { + return handle.getBooleans().read(2); + } + + public void setCanFly(boolean value) { + handle.getBooleans().write(2, value); + } + + public boolean canInstantlyBuild() { + return handle.getBooleans().read(3); + } + + public void setCanInstantlyBuild(boolean value) { + handle.getBooleans().write(3, value); + } + + public float getFlyingSpeed() { + return handle.getFloat().read(0); + } + + public void setFlyingSpeed(float value) { + handle.getFloat().write(0, value); + } + + public float getWalkingSpeed() { + return handle.getFloat().read(1); + } + + public void setWalkingSpeed(float value) { + handle.getFloat().write(1, value); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientAdvancements.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientAdvancements.java new file mode 100644 index 0000000..9e31df6 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientAdvancements.java @@ -0,0 +1,78 @@ +/** + * This file is part of PacketWrapper. + * Copyright (C) 2012-2015 Kristian S. Strangeland + * Copyright (C) 2015 dmulloy2 + * + * PacketWrapper is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * PacketWrapper 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 General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with PacketWrapper. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.in; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.wrappers.MinecraftKey; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperPlayClientAdvancements extends AbstractPacket { + + public static final PacketType TYPE = PacketType.Play.Client.ADVANCEMENTS; + + public WrapperPlayClientAdvancements() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayClientAdvancements(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Action. + * <p> + * Notes: 0: Opened tab, 1: Closed screen + * @return The current Action + */ + public Status getAction() { + return handle.getEnumModifier(Status.class, 0).readSafely(0); + } + + /** + * Set Action. + * @param value - new value. + */ + public void setAction(Status value) { + handle.getEnumModifier(Status.class, 0).writeSafely(0, value); + } + /** + * Retrieve Tab ID. + * <p> + * Notes: only present if action is Opened tab + * @return The current Tab ID + */ + public MinecraftKey getTabId() { + return handle.getMinecraftKeys().readSafely(0); + } + + /** + * Set Tab ID. + * @param value - new value. + */ + public void setTabId(MinecraftKey value) { + handle.getMinecraftKeys().writeSafely(0, value); + } + + public enum Status { + OPENED_TAB, + CLOSED_SCREEN; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientArmAnimation.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientArmAnimation.java new file mode 100644 index 0000000..b5bf1b9 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientArmAnimation.java @@ -0,0 +1,36 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.in; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperPlayClientArmAnimation extends AbstractPacket { + public static final PacketType TYPE = PacketType.Play.Client.ARM_ANIMATION; + + public WrapperPlayClientArmAnimation() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayClientArmAnimation(PacketContainer packet) { + super(packet, TYPE); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientAutoRecipe.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientAutoRecipe.java new file mode 100644 index 0000000..f31a822 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientAutoRecipe.java @@ -0,0 +1,65 @@ +/** + * This file is part of PacketWrapper. + * Copyright (C) 2012-2015 Kristian S. Strangeland + * Copyright (C) 2015 dmulloy2 + * + * PacketWrapper is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * PacketWrapper 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 General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with PacketWrapper. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.in; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperPlayClientAutoRecipe extends AbstractPacket { + + public static final PacketType TYPE = PacketType.Play.Client.AUTO_RECIPE; + + public WrapperPlayClientAutoRecipe() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayClientAutoRecipe(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Window ID. + * <p> + * Notes: the window id. + * @return The current Window ID + */ + public int getWindowId() { + return handle.getIntegers().read(0); + } + + /** + * Set Window ID. + * @param value - new value. + */ + public void setWindowId(int value) { + handle.getIntegers().write(0, value); + } + + // Modifier for recipe can be created upon request + + public boolean isMakeAll() { + return handle.getBooleans().read(0); + } + + public void setMakeAll(boolean value) { + handle.getBooleans().write(0, value); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientBlockDig.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientBlockDig.java new file mode 100644 index 0000000..13da8e6 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientBlockDig.java @@ -0,0 +1,87 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.in; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.wrappers.BlockPosition; +import com.comphenix.protocol.wrappers.EnumWrappers.Direction; +import com.comphenix.protocol.wrappers.EnumWrappers.PlayerDigType; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperPlayClientBlockDig extends AbstractPacket { + public static final PacketType TYPE = PacketType.Play.Client.BLOCK_DIG; + + public WrapperPlayClientBlockDig() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayClientBlockDig(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Location. + * <p> + * Notes: block position + * + * @return The current Location + */ + public BlockPosition getLocation() { + return handle.getBlockPositionModifier().read(0); + } + + /** + * Set Location. + * + * @param value - new value. + */ + public void setLocation(BlockPosition value) { + handle.getBlockPositionModifier().write(0, value); + } + + public Direction getDirection() { + return handle.getDirections().read(0); + } + + public void setDirection(Direction value) { + handle.getDirections().write(0, value); + } + + /** + * Retrieve Status. + * <p> + * Notes: the action the player is taking against the block (see below) + * + * @return The current Status + */ + public PlayerDigType getStatus() { + return handle.getPlayerDigTypes().read(0); + } + + /** + * Set Status. + * + * @param value - new value. + */ + public void setStatus(PlayerDigType value) { + handle.getPlayerDigTypes().write(0, value); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientBlockPlace.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientBlockPlace.java new file mode 100644 index 0000000..3fc367a --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientBlockPlace.java @@ -0,0 +1,54 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.in; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.wrappers.EnumWrappers.Hand; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperPlayClientBlockPlace extends AbstractPacket { + public static final PacketType TYPE = PacketType.Play.Client.BLOCK_PLACE; + + public WrapperPlayClientBlockPlace() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayClientBlockPlace(PacketContainer packet) { + super(packet, TYPE); + } + + public Hand getHand() { + return handle.getHands().read(0); + } + + public void setHand(Hand value) { + handle.getHands().write(0, value); + } + + public long getTimestamp() { + return handle.getLongs().read(0); + } + + public void setTimestamp(long value) { + handle.getLongs().write(0, value); + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientBoatMove.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientBoatMove.java new file mode 100644 index 0000000..593978d --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientBoatMove.java @@ -0,0 +1,54 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.in; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperPlayClientBoatMove extends AbstractPacket { + + public static final PacketType TYPE = PacketType.Play.Client.BOAT_MOVE; + + public WrapperPlayClientBoatMove() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayClientBoatMove(PacketContainer packet) { + super(packet, TYPE); + } + + public boolean getLeftOar() { + return handle.getBooleans().read(0); + } + + public void setLeftOar(boolean value) { + handle.getBooleans().write(0, value); + } + + public boolean getRightOar() { + return handle.getBooleans().read(1); + } + + public void setRightOar(boolean value) { + handle.getBooleans().write(1, value); + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientChat.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientChat.java new file mode 100644 index 0000000..c185d0d --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientChat.java @@ -0,0 +1,55 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.in; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperPlayClientChat extends AbstractPacket { + public static final PacketType TYPE = PacketType.Play.Client.CHAT; + + public WrapperPlayClientChat() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayClientChat(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Message. + * + * @return The current Message + */ + public String getMessage() { + return handle.getStrings().read(0); + } + + /** + * Set Message. + * + * @param value - new value. + */ + public void setMessage(String value) { + handle.getStrings().write(0, value); + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientClientCommand.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientClientCommand.java new file mode 100644 index 0000000..acb95b8 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientClientCommand.java @@ -0,0 +1,58 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.in; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.wrappers.EnumWrappers.ClientCommand; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperPlayClientClientCommand extends AbstractPacket { + public static final PacketType TYPE = PacketType.Play.Client.CLIENT_COMMAND; + + public WrapperPlayClientClientCommand() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayClientClientCommand(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Action ID. + * <p> + * Notes: see below + * + * @return The current Action ID + */ + public ClientCommand getAction() { + return handle.getClientCommands().read(0); + } + + /** + * Set Action ID. + * + * @param value - new value. + */ + public void setAction(ClientCommand value) { + handle.getClientCommands().write(0, value); + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientCloseWindow.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientCloseWindow.java new file mode 100644 index 0000000..dd32d28 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientCloseWindow.java @@ -0,0 +1,57 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.in; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperPlayClientCloseWindow extends AbstractPacket { + public static final PacketType TYPE = PacketType.Play.Client.CLOSE_WINDOW; + + public WrapperPlayClientCloseWindow() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayClientCloseWindow(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Window id. + * <p> + * Notes: this is the id of the window that was closed. 0 for inventory. + * + * @return The current Window id + */ + public int getWindowId() { + return handle.getIntegers().read(0); + } + + /** + * Set Window id. + * + * @param value - new value. + */ + public void setWindowId(int value) { + handle.getIntegers().write(0, value); + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientCustomPayload.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientCustomPayload.java new file mode 100644 index 0000000..f780630 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientCustomPayload.java @@ -0,0 +1,104 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.in; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.utility.MinecraftReflection; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperPlayClientCustomPayload extends AbstractPacket { + public static final PacketType TYPE = PacketType.Play.Client.CUSTOM_PAYLOAD; + + public WrapperPlayClientCustomPayload() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayClientCustomPayload(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Channel. + * <p> + * Notes: name of the "channel" used to send the data. + * + * @return The current Channel + */ + public String getChannel() { + return handle.getStrings().read(0); + } + + /** + * Set Channel. + * + * @param value - new value. + */ + public void setChannel(String value) { + handle.getStrings().write(0, value); + } + + /** + * Retrieve payload contents as a raw Netty buffer + * + * @return Payload contents as a Netty buffer + */ + public ByteBuf getContentsBuffer() { + return (ByteBuf) handle.getModifier().withType(ByteBuf.class).read(0); + } + + /** + * Retrieve payload contents + * + * @return Payload contents as a byte array + */ + public byte[] getContents() { + ByteBuf buffer = getContentsBuffer(); + byte[] array = new byte[buffer.readableBytes()]; + buffer.readBytes(array); + return array; + } + + /** + * Update payload contents with a Netty buffer + * + * @param content - new payload content + */ + public void setContentsBuffer(ByteBuf contents) { + if (MinecraftReflection.is(MinecraftReflection.getPacketDataSerializerClass(), contents)) { + handle.getModifier().withType(ByteBuf.class).write(0, contents); + } else { + Object serializer = MinecraftReflection.getPacketDataSerializer(contents); + handle.getModifier().withType(ByteBuf.class).write(0, serializer); + } + } + + /** + * Update payload contents with a byte array + * + * @param content - new payload content + */ + public void setContents(byte[] content) { + setContentsBuffer(Unpooled.copiedBuffer(content)); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientEnchantItem.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientEnchantItem.java new file mode 100644 index 0000000..8416c77 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientEnchantItem.java @@ -0,0 +1,78 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.in; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperPlayClientEnchantItem extends AbstractPacket { + public static final PacketType TYPE = PacketType.Play.Client.ENCHANT_ITEM; + + public WrapperPlayClientEnchantItem() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayClientEnchantItem(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Window ID. + * <p> + * Notes: the ID sent by Open Window + * + * @return The current Window ID + */ + public int getWindowId() { + return handle.getIntegers().read(0); + } + + /** + * Set Window ID. + * + * @param value - new value. + */ + public void setWindowId(byte value) { + handle.getIntegers().write(0, (int) value); + } + + /** + * Retrieve Enchantment. + * <p> + * Notes: the position of the enchantment on the enchantment table window, + * starting with 0 as the topmost one. + * + * @return The current Enchantment + */ + public int getEnchantment() { + return handle.getIntegers().read(1); + } + + /** + * Set Enchantment. + * + * @param value - new value. + */ + public void setEnchantment(int value) { + handle.getIntegers().write(1, value); + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientEntityAction.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientEntityAction.java new file mode 100644 index 0000000..0870a6d --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientEntityAction.java @@ -0,0 +1,122 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.in; + +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; +import org.bukkit.World; +import org.bukkit.entity.Entity; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.events.PacketEvent; +import com.comphenix.protocol.wrappers.EnumWrappers.PlayerAction; + +public class WrapperPlayClientEntityAction extends AbstractPacket { + public static final PacketType TYPE = PacketType.Play.Client.ENTITY_ACTION; + + public WrapperPlayClientEntityAction() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayClientEntityAction(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Entity ID. + * <p> + * Notes: entity's ID + * + * @return The current Entity ID + */ + public int getEntityID() { + return handle.getIntegers().read(0); + } + + /** + * Set Entity ID. + * + * @param value - new value. + */ + public void setEntityID(int value) { + handle.getIntegers().write(0, value); + } + + /** + * Retrieve the entity of the painting that will be spawned. + * + * @param world - the current world of the entity. + * @return The spawned entity. + */ + public Entity getEntity(World world) { + return handle.getEntityModifier(world).read(0); + } + + /** + * Retrieve the entity of the painting that will be spawned. + * + * @param event - the packet event. + * @return The spawned entity. + */ + public Entity getEntity(PacketEvent event) { + return getEntity(event.getPlayer().getWorld()); + } + + /** + * Retrieve Action ID. + * <p> + * Notes: the ID of the action, see below. + * + * @return The current Action ID + */ + public PlayerAction getAction() { + return handle.getPlayerActions().read(0); + } + + /** + * Set Action ID. + * + * @param value - new value. + */ + public void setAction(PlayerAction value) { + handle.getPlayerActions().write(0, value); + } + + /** + * Retrieve Jump Boost. + * <p> + * Notes: horse jump boost. Ranged from 0 -> 100. + * + * @return The current Jump Boost + */ + public int getJumpBoost() { + return handle.getIntegers().read(1); + } + + /** + * Set Jump Boost. + * + * @param value - new value. + */ + public void setJumpBoost(int value) { + handle.getIntegers().write(1, value); + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientFlying.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientFlying.java new file mode 100644 index 0000000..07a44a5 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientFlying.java @@ -0,0 +1,57 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.in; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperPlayClientFlying extends AbstractPacket { + public static final PacketType TYPE = PacketType.Play.Client.FLYING; + + public WrapperPlayClientFlying() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayClientFlying(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve On Ground. + * <p> + * Notes: true if the client is on the ground, False otherwise + * + * @return The current On Ground + */ + public boolean getOnGround() { + return handle.getBooleans().read(0); + } + + /** + * Set On Ground. + * + * @param value - new value. + */ + public void setOnGround(boolean value) { + handle.getBooleans().write(0, value); + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientHeldItemSlot.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientHeldItemSlot.java new file mode 100644 index 0000000..b490059 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientHeldItemSlot.java @@ -0,0 +1,57 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.in; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperPlayClientHeldItemSlot extends AbstractPacket { + public static final PacketType TYPE = PacketType.Play.Client.HELD_ITEM_SLOT; + + public WrapperPlayClientHeldItemSlot() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayClientHeldItemSlot(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Slot. + * <p> + * Notes: the slot which the player has selected (0-8) + * + * @return The current Slot + */ + public int getSlot() { + return handle.getIntegers().read(0); + } + + /** + * Set Slot. + * + * @param value - new value. + */ + public void setSlot(int value) { + handle.getIntegers().write(0, value); + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientKeepAlive.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientKeepAlive.java new file mode 100644 index 0000000..dece266 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientKeepAlive.java @@ -0,0 +1,55 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.in; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperPlayClientKeepAlive extends AbstractPacket { + public static final PacketType TYPE = PacketType.Play.Client.KEEP_ALIVE; + + public WrapperPlayClientKeepAlive() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayClientKeepAlive(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Keep Alive ID. + * + * @return The current Keep Alive ID + */ + public int getKeepAliveId() { + return handle.getIntegers().read(0); + } + + /** + * Set Keep Alive ID. + * + * @param value - new value. + */ + public void setKeepAliveId(int value) { + handle.getIntegers().write(0, value); + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientLook.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientLook.java new file mode 100644 index 0000000..70ca611 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientLook.java @@ -0,0 +1,97 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.in; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperPlayClientLook extends AbstractPacket { + public static final PacketType TYPE = PacketType.Play.Client.LOOK; + + public WrapperPlayClientLook() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayClientLook(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Yaw. + * <p> + * Notes: absolute rotation on the X Axis, in degrees + * + * @return The current Yaw + */ + public float getYaw() { + return handle.getFloat().read(0); + } + + /** + * Set Yaw. + * + * @param value - new value. + */ + public void setYaw(float value) { + handle.getFloat().write(0, value); + } + + /** + * Retrieve Pitch. + * <p> + * Notes: absolute rotation on the Y Axis, in degrees + * + * @return The current Pitch + */ + public float getPitch() { + return handle.getFloat().read(1); + } + + /** + * Set Pitch. + * + * @param value - new value. + */ + public void setPitch(float value) { + handle.getFloat().write(1, value); + } + + /** + * Retrieve On Ground. + * <p> + * Notes: true if the client is on the ground, False otherwise + * + * @return The current On Ground + */ + public boolean getOnGround() { + return handle.getBooleans().read(0); + } + + /** + * Set On Ground. + * + * @param value - new value. + */ + public void setOnGround(boolean value) { + handle.getBooleans().write(0, value); + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientPosition.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientPosition.java new file mode 100644 index 0000000..9b1c85c --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientPosition.java @@ -0,0 +1,118 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.in; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperPlayClientPosition extends AbstractPacket { + public static final PacketType TYPE = PacketType.Play.Client.POSITION; + + public WrapperPlayClientPosition() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayClientPosition(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve X. + * <p> + * Notes: absolute position + * + * @return The current X + */ + public double getX() { + return handle.getDoubles().read(0); + } + + /** + * Set X. + * + * @param value - new value. + */ + public void setX(double value) { + handle.getDoubles().write(0, value); + } + + /** + * Retrieve FeetY. + * <p> + * Notes: absolute feet position, normally HeadY - 1.62. Used to modify the + * players bounding box when going up stairs, crouching, etc… + * + * @return The current FeetY + */ + public double getY() { + return handle.getDoubles().read(1); + } + + /** + * Set FeetY. + * + * @param value - new value. + */ + public void setY(double value) { + handle.getDoubles().write(1, value); + } + + /** + * Retrieve Z. + * <p> + * Notes: absolute position + * + * @return The current Z + */ + public double getZ() { + return handle.getDoubles().read(2); + } + + /** + * Set Z. + * + * @param value - new value. + */ + public void setZ(double value) { + handle.getDoubles().write(2, value); + } + + /** + * Retrieve On Ground. + * <p> + * Notes: true if the client is on the ground, False otherwise + * + * @return The current On Ground + */ + public boolean getOnGround() { + return handle.getBooleans().read(0); + } + + /** + * Set On Ground. + * + * @param value - new value. + */ + public void setOnGround(boolean value) { + handle.getBooleans().write(0, value); + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientPositionLook.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientPositionLook.java new file mode 100644 index 0000000..ab1b1a6 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientPositionLook.java @@ -0,0 +1,158 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.in; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperPlayClientPositionLook extends AbstractPacket { + public static final PacketType TYPE = PacketType.Play.Client.POSITION_LOOK; + + public WrapperPlayClientPositionLook() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayClientPositionLook(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve X. + * <p> + * Notes: absolute position + * + * @return The current X + */ + public double getX() { + return handle.getDoubles().read(0); + } + + /** + * Set X. + * + * @param value - new value. + */ + public void setX(double value) { + handle.getDoubles().write(0, value); + } + + /** + * Retrieve Feet Y. + * <p> + * Notes: absolute feet position. Is normally HeadY - 1.62. Used to modify + * the players bounding box when going up stairs, crouching, etc… + * + * @return The current FeetY + */ + public double getY() { + return handle.getDoubles().read(1); + } + + /** + * Set Feet Y. + * + * @param value - new value. + */ + public void setY(double value) { + handle.getDoubles().write(1, value); + } + + /** + * Retrieve Z. + * <p> + * Notes: absolute position + * + * @return The current Z + */ + public double getZ() { + return handle.getDoubles().read(2); + } + + /** + * Set Z. + * + * @param value - new value. + */ + public void setZ(double value) { + handle.getDoubles().write(2, value); + } + + /** + * Retrieve Yaw. + * <p> + * Notes: absolute rotation on the X Axis, in degrees + * + * @return The current Yaw + */ + public float getYaw() { + return handle.getFloat().read(0); + } + + /** + * Set Yaw. + * + * @param value - new value. + */ + public void setYaw(float value) { + handle.getFloat().write(0, value); + } + + /** + * Retrieve Pitch. + * <p> + * Notes: absolute rotation on the Y Axis, in degrees + * + * @return The current Pitch + */ + public float getPitch() { + return handle.getFloat().read(1); + } + + /** + * Set Pitch. + * + * @param value - new value. + */ + public void setPitch(float value) { + handle.getFloat().write(1, value); + } + + /** + * Retrieve On Ground. + * <p> + * Notes: true if the client is on the ground, False otherwise + * + * @return The current On Ground + */ + public boolean getOnGround() { + return handle.getBooleans().read(0); + } + + /** + * Set On Ground. + * + * @param value - new value. + */ + public void setOnGround(boolean value) { + handle.getBooleans().write(0, value); + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientRecipeDisplayed.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientRecipeDisplayed.java new file mode 100644 index 0000000..476b5ec --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientRecipeDisplayed.java @@ -0,0 +1,67 @@ +/** + * This file is part of PacketWrapper. + * Copyright (C) 2012-2015 Kristian S. Strangeland + * Copyright (C) 2015 dmulloy2 + * + * PacketWrapper is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * PacketWrapper 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 General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with PacketWrapper. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.in; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperPlayClientRecipeDisplayed extends AbstractPacket { + public static final PacketType TYPE = PacketType.Play.Client.RECIPE_DISPLAYED; + + public WrapperPlayClientRecipeDisplayed() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayClientRecipeDisplayed(PacketContainer packet) { + super(packet, TYPE); + } + + public Status getStatus() { + return handle.getEnumModifier(Status.class, 0).readSafely(0); + } + + public void setStatus(Status value) { + handle.getEnumModifier(Status.class, 0).writeSafely(0, value); + } + + // Modifier for recipe can be created upon request + + public boolean isBookOpen() { + return handle.getBooleans().read(0); + } + + public void setBookOpen(boolean value) { + handle.getBooleans().write(0, value); + } + + public boolean isFilterActive() { + return handle.getBooleans().read(1); + } + + public void setFilterActive(boolean value) { + handle.getBooleans().write(1, value); + } + + public enum Status { + SHOWN, + SETTINGS; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientResourcePackStatus.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientResourcePackStatus.java new file mode 100644 index 0000000..8be39c8 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientResourcePackStatus.java @@ -0,0 +1,59 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.in; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.wrappers.EnumWrappers.ResourcePackStatus; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperPlayClientResourcePackStatus extends AbstractPacket { + public static final PacketType TYPE = + PacketType.Play.Client.RESOURCE_PACK_STATUS; + + public WrapperPlayClientResourcePackStatus() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayClientResourcePackStatus(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Result. + * <p> + * Notes: successfully loaded: 0, Declined: 1, Failed download: 2, Accepted: + * 3 + * + * @return The current Result + */ + public ResourcePackStatus getResult() { + return handle.getResourcePackStatus().read(0); + } + + /** + * Set Result. + * + * @param value - new value. + */ + public void setResult(ResourcePackStatus value) { + handle.getResourcePackStatus().write(0, value); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientSetCreativeSlot.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientSetCreativeSlot.java new file mode 100644 index 0000000..22d31b6 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientSetCreativeSlot.java @@ -0,0 +1,78 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.in; + +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; +import org.bukkit.inventory.ItemStack; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; + +public class WrapperPlayClientSetCreativeSlot extends AbstractPacket { + public static final PacketType TYPE = + PacketType.Play.Client.SET_CREATIVE_SLOT; + + public WrapperPlayClientSetCreativeSlot() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayClientSetCreativeSlot(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Slot. + * <p> + * Notes: inventory slot + * + * @return The current Slot + */ + public int getSlot() { + return handle.getIntegers().read(0); + } + + /** + * Set Slot. + * + * @param value - new value. + */ + public void setSlot(int value) { + handle.getIntegers().write(0, value); + } + + /** + * Retrieve Clicked item. + * + * @return The current Clicked item + */ + public ItemStack getClickedItem() { + return handle.getItemModifier().read(0); + } + + /** + * Set Clicked item. + * + * @param value - new value. + */ + public void setClickedItem(ItemStack value) { + handle.getItemModifier().write(0, value); + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientSettings.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientSettings.java new file mode 100644 index 0000000..3cf6de1 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientSettings.java @@ -0,0 +1,138 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.in; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.wrappers.EnumWrappers.ChatVisibility; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperPlayClientSettings extends AbstractPacket { + public static final PacketType TYPE = PacketType.Play.Client.SETTINGS; + + public WrapperPlayClientSettings() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayClientSettings(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Locale. + * <p> + * Notes: en_GB + * + * @return The current Locale + */ + public String getLocale() { + return handle.getStrings().read(0); + } + + /** + * Set Locale. + * + * @param value - new value. + */ + public void setLocale(String value) { + handle.getStrings().write(0, value); + } + + /** + * Retrieve View distance. + * <p> + * Notes: client-side render distance(chunks) + * + * @return The current View distance + */ + public int getViewDistance() { + return handle.getIntegers().read(0); + } + + /** + * Set View distance. + * + * @param value - new value. + */ + public void setViewDistance(byte value) { + handle.getIntegers().write(0, (int) value); + } + + /** + * Retrieve Chat flags. + * <p> + * Notes: chat settings. See notes below. + * + * @return The current Chat flags + */ + public ChatVisibility getChatFlags() { + return handle.getChatVisibilities().read(0); + } + + /** + * Set Chat flags. + * + * @param value - new value. + */ + public void setChatFlags(ChatVisibility value) { + handle.getChatVisibilities().write(0, value); + } + + /** + * Retrieve Chat colours. + * <p> + * Notes: "Colours" multiplayer setting + * + * @return The current Chat colours + */ + public boolean getChatColours() { + return handle.getBooleans().read(0); + } + + /** + * Set Chat colours. + * + * @param value - new value. + */ + public void setChatColours(boolean value) { + handle.getBooleans().write(0, value); + } + + /** + * Retrieve Displayed skin parts. + * <p> + * Notes: skin parts. See note below + * + * @return The current Displayed skin parts + */ + public int getDisplayedSkinParts() { + return handle.getIntegers().read(1); + } + + /** + * Set Displayed skin parts. + * + * @param value - new value. + */ + public void setDisplayedSkinParts(int value) { + handle.getIntegers().write(1, value); + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientSpectate.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientSpectate.java new file mode 100644 index 0000000..42c822b --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientSpectate.java @@ -0,0 +1,57 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.in; + +import java.util.UUID; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperPlayClientSpectate extends AbstractPacket { + public static final PacketType TYPE = PacketType.Play.Client.SPECTATE; + + public WrapperPlayClientSpectate() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayClientSpectate(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Target Player. + * + * @return The current Target Player + */ + public UUID getTargetPlayer() { + return handle.getUUIDs().read(0); + } + + /** + * Set Target Player. + * + * @param value - new value. + */ + public void setTargetPlayer(UUID value) { + handle.getUUIDs().write(0, value); + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientSteerVehicle.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientSteerVehicle.java new file mode 100644 index 0000000..589eb81 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientSteerVehicle.java @@ -0,0 +1,93 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.in; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperPlayClientSteerVehicle extends AbstractPacket { + public static final PacketType TYPE = PacketType.Play.Client.STEER_VEHICLE; + + public WrapperPlayClientSteerVehicle() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayClientSteerVehicle(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Sideways. + * <p> + * Notes: positive to the left of the player + * + * @return The current Sideways + */ + public float getSideways() { + return handle.getFloat().read(0); + } + + /** + * Set Sideways. + * + * @param value - new value. + */ + public void setSideways(float value) { + handle.getFloat().write(0, value); + } + + /** + * Retrieve Forward. + * <p> + * Notes: positive forward + * + * @return The current Forward + */ + public float getForward() { + return handle.getFloat().read(1); + } + + /** + * Set Forward. + * + * @param value - new value. + */ + public void setForward(float value) { + handle.getFloat().write(1, value); + } + + public boolean isJump() { + return handle.getBooleans().read(0); + } + + public void setJump(boolean value) { + handle.getBooleans().write(0, value); + } + + public boolean isUnmount() { + return handle.getBooleans().read(1); + } + + public void setUnmount(boolean value) { + handle.getBooleans().write(1, value); + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientTabComplete.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientTabComplete.java new file mode 100644 index 0000000..a7158a1 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientTabComplete.java @@ -0,0 +1,95 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.in; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.wrappers.BlockPosition; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperPlayClientTabComplete extends AbstractPacket { + public static final PacketType TYPE = PacketType.Play.Client.TAB_COMPLETE; + + public WrapperPlayClientTabComplete() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayClientTabComplete(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Text. + * + * @return The current Text + */ + public String getText() { + return handle.getStrings().read(0); + } + + /** + * Set Text. + * + * @param value - new value. + */ + public void setText(String value) { + handle.getStrings().write(0, value); + } + + /** + * Retrieve Has Position. + * + * @return The current Has Position + */ + public BlockPosition getHasPosition() { + return handle.getBlockPositionModifier().read(0); + } + + /** + * Set Has Position. + * + * @param value - new value. + */ + public void setHasPosition(BlockPosition value) { + handle.getBlockPositionModifier().write(0, value); + } + + /** + * Retrieve Looked at block. + * <p> + * Notes: the position of the block being looked at. Only sent if the + * previous field is true + * + * @return The current Looked at block + */ + public BlockPosition getLookedAtBlock() { + return handle.getBlockPositionModifier().read(0); + } + + /** + * Set Looked at block. + * + * @param value - new value. + */ + public void setLookedAtBlock(BlockPosition value) { + handle.getBlockPositionModifier().write(0, value); + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientTeleportAccept.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientTeleportAccept.java new file mode 100644 index 0000000..37ff4df --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientTeleportAccept.java @@ -0,0 +1,59 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.in; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperPlayClientTeleportAccept extends AbstractPacket { + + public static final PacketType TYPE = + PacketType.Play.Client.TELEPORT_ACCEPT; + + public WrapperPlayClientTeleportAccept() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayClientTeleportAccept(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Teleport ID. + * <p> + * Notes: the ID given by the Player Position And Look packet + * + * @return The current Teleport ID + */ + public int getTeleportId() { + return handle.getIntegers().read(0); + } + + /** + * Set Teleport ID. + * + * @param value - new value. + */ + public void setTeleportId(int value) { + handle.getIntegers().write(0, value); + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientTransaction.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientTransaction.java new file mode 100644 index 0000000..18a5383 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientTransaction.java @@ -0,0 +1,98 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.in; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperPlayClientTransaction extends AbstractPacket { + public static final PacketType TYPE = PacketType.Play.Client.TRANSACTION; + + public WrapperPlayClientTransaction() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayClientTransaction(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Window ID. + * <p> + * Notes: the id of the window that the action occurred in. + * + * @return The current Window ID + */ + public int getWindowId() { + return handle.getIntegers().read(0); + } + + /** + * Set Window ID. + * + * @param value - new value. + */ + public void setWindowId(byte value) { + handle.getIntegers().write(0, (int) value); + } + + /** + * Retrieve Action number. + * <p> + * Notes: every action that is to be accepted has a unique number. This + * field corresponds to that number. + * + * @return The current Action number + */ + public short getActionNumber() { + return handle.getShorts().read(0); + } + + /** + * Set Action number. + * + * @param value - new value. + */ + public void setActionNumber(short value) { + handle.getShorts().write(0, value); + } + + /** + * Retrieve Accepted. + * <p> + * Notes: whether the action was accepted. + * + * @return The current Accepted + */ + public boolean getAccepted() { + return handle.getBooleans().read(0); + } + + /** + * Set Accepted. + * + * @param value - new value. + */ + public void setAccepted(boolean value) { + handle.getBooleans().write(0, value); + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientUpdateSign.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientUpdateSign.java new file mode 100644 index 0000000..6c46d43 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientUpdateSign.java @@ -0,0 +1,80 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.in; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.wrappers.BlockPosition; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperPlayClientUpdateSign extends AbstractPacket { + public static final PacketType TYPE = PacketType.Play.Client.UPDATE_SIGN; + + public WrapperPlayClientUpdateSign() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayClientUpdateSign(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Location. + * <p> + * Notes: block Coordinates + * + * @return The current Location + */ + public BlockPosition getLocation() { + return handle.getBlockPositionModifier().read(0); + } + + /** + * Set Location. + * + * @param value - new value. + */ + public void setLocation(BlockPosition value) { + handle.getBlockPositionModifier().write(0, value); + } + + /** + * Retrieve this sign's lines of text. + * + * @return The current lines + */ + public String[] getLines() { + return handle.getStringArrays().read(0); + } + + /** + * Set this sign's lines of text. + * + * @param value - Lines, must be 4 elements long + */ + public void setLines(String[] value) { + if (value == null) + throw new IllegalArgumentException("value cannot be null!"); + if (value.length != 4) + throw new IllegalArgumentException("value must have 4 elements!"); + + handle.getStringArrays().write(0, value); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientUseEntity.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientUseEntity.java new file mode 100644 index 0000000..8e6e2ed --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientUseEntity.java @@ -0,0 +1,118 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.in; + +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; +import org.bukkit.World; +import org.bukkit.entity.Entity; +import org.bukkit.util.Vector; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.events.PacketEvent; +import com.comphenix.protocol.wrappers.EnumWrappers.EntityUseAction; + +public class WrapperPlayClientUseEntity extends AbstractPacket { + public static final PacketType TYPE = PacketType.Play.Client.USE_ENTITY; + + public WrapperPlayClientUseEntity() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayClientUseEntity(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve entity ID of the target. + * + * @return The current entity ID + */ + public int getTargetID() { + return handle.getIntegers().read(0); + } + + /** + * Retrieve the entity that was targeted. + * + * @param world - the current world of the entity. + * @return The targeted entity. + */ + public Entity getTarget(World world) { + return handle.getEntityModifier(world).read(0); + } + + /** + * Retrieve the entity that was targeted. + * + * @param event - the packet event. + * @return The targeted entity. + */ + public Entity getTarget(PacketEvent event) { + return getTarget(event.getPlayer().getWorld()); + } + + /** + * Set entity ID of the target. + * + * @param value - new value. + */ + public void setTargetID(int value) { + handle.getIntegers().write(0, value); + } + + /** + * Retrieve Type. + * + * @return The current Type + */ + public EntityUseAction getType() { + return handle.getEntityUseActions().read(0); + } + + /** + * Set Type. + * + * @param value - new value. + */ + public void setType(EntityUseAction value) { + handle.getEntityUseActions().write(0, value); + } + + /** + * Retrieve the target vector. + * <p> + * Notes: Only if {@link #getType()} is {@link EntityUseAction#INTERACT_AT}. + * + * @return The target vector or null + */ + public Vector getTargetVector() { + return handle.getVectors().read(0); + } + + /** + * Set the target vector. + * + * @param value - new value. + */ + public void setTargetVector(Vector value) { + handle.getVectors().write(0, value); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientUseItem.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientUseItem.java new file mode 100644 index 0000000..d7fc2c4 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientUseItem.java @@ -0,0 +1,139 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.in; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.wrappers.BlockPosition; +import com.comphenix.protocol.wrappers.EnumWrappers.Direction; +import com.comphenix.protocol.wrappers.EnumWrappers.Hand; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperPlayClientUseItem extends AbstractPacket { + + public static final PacketType TYPE = PacketType.Play.Client.USE_ITEM; + + public WrapperPlayClientUseItem() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayClientUseItem(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Location. + * <p> + * Notes: block position + * + * @return The current Location + */ + public BlockPosition getLocation() { + return handle.getBlockPositionModifier().read(0); + } + + /** + * Set Location. + * + * @param value - new value. + */ + public void setLocation(BlockPosition value) { + handle.getBlockPositionModifier().write(0, value); + } + + public Direction getFace() { + return handle.getDirections().read(0); + } + + public void setFace(Direction value) { + handle.getDirections().write(0, value); + } + + public Hand getHand() { + return handle.getHands().read(0); + } + + public void setHand(Hand value) { + handle.getHands().write(0, value); + } + + /** + * Retrieve Cursor Position X. + * <p> + * Notes: the position of the crosshair on the block, from 0 to 15 + * increasing from west to east + * + * @return The current Cursor Position X + */ + public float getCursorPositionX() { + return handle.getFloat().read(0); + } + + /** + * Set Cursor Position X. + * + * @param value - new value. + */ + public void setCursorPositionX(float value) { + handle.getFloat().write(0, value); + } + + /** + * Retrieve Cursor Position Y. + * <p> + * Notes: the position of the crosshair on the block, from 0 to 15 + * increasing from bottom to top + * + * @return The current Cursor Position Y + */ + public float getCursorPositionY() { + return handle.getFloat().read(1); + } + + /** + * Set Cursor Position Y. + * + * @param value - new value. + */ + public void setCursorPositionY(float value) { + handle.getFloat().write(1, value); + } + + /** + * Retrieve Cursor Position Z. + * <p> + * Notes: the position of the crosshair on the block, from 0 to 15 + * increasing from north to south + * + * @return The current Cursor Position Z + */ + public float getCursorPositionZ() { + return handle.getFloat().read(2); + } + + /** + * Set Cursor Position Z. + * + * @param value - new value. + */ + public void setCursorPositionZ(float value) { + handle.getFloat().write(2, value); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientVehicleMove.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientVehicleMove.java new file mode 100644 index 0000000..8139b71 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientVehicleMove.java @@ -0,0 +1,138 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.in; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperPlayClientVehicleMove extends AbstractPacket { + + public static final PacketType TYPE = PacketType.Play.Client.VEHICLE_MOVE; + + public WrapperPlayClientVehicleMove() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayClientVehicleMove(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve X. + * <p> + * Notes: absolute position (X coordinate) + * + * @return The current X + */ + public double getX() { + return handle.getDoubles().read(0); + } + + /** + * Set X. + * + * @param value - new value. + */ + public void setX(double value) { + handle.getDoubles().write(0, value); + } + + /** + * Retrieve Y. + * <p> + * Notes: absolute position (Y coordinate) + * + * @return The current Y + */ + public double getY() { + return handle.getDoubles().read(1); + } + + /** + * Set Y. + * + * @param value - new value. + */ + public void setY(double value) { + handle.getDoubles().write(1, value); + } + + /** + * Retrieve Z. + * <p> + * Notes: absolute position (Z coordinate) + * + * @return The current Z + */ + public double getZ() { + return handle.getDoubles().read(2); + } + + /** + * Set Z. + * + * @param value - new value. + */ + public void setZ(double value) { + handle.getDoubles().write(2, value); + } + + /** + * Retrieve Yaw. + * <p> + * Notes: absolute rotation on the vertical axis, in degrees + * + * @return The current Yaw + */ + public float getYaw() { + return handle.getFloat().read(0); + } + + /** + * Set Yaw. + * + * @param value - new value. + */ + public void setYaw(float value) { + handle.getFloat().write(0, value); + } + + /** + * Retrieve Pitch. + * <p> + * Notes: absolute rotation on the horizontal axis, in degrees + * + * @return The current Pitch + */ + public float getPitch() { + return handle.getFloat().read(1); + } + + /** + * Set Pitch. + * + * @param value - new value. + */ + public void setPitch(float value) { + handle.getFloat().write(1, value); + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientWindowClick.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientWindowClick.java new file mode 100644 index 0000000..ae5463a --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperPlayClientWindowClick.java @@ -0,0 +1,149 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.in; + +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; +import org.bukkit.inventory.ItemStack; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; + +public class WrapperPlayClientWindowClick extends AbstractPacket { + public static final PacketType TYPE = PacketType.Play.Client.WINDOW_CLICK; + + public WrapperPlayClientWindowClick() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayClientWindowClick(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Window ID. + * <p> + * Notes: the id of the window which was clicked. 0 for player inventory. + * + * @return The current Window ID + */ + public int getWindowId() { + return handle.getIntegers().read(0); + } + + /** + * Set Window ID. + * + * @param value - new value. + */ + public void setWindowId(int value) { + handle.getIntegers().write(0, value); + } + + /** + * Retrieve Slot. + * <p> + * Notes: the clicked slot. See below. + * + * @return The current Slot + */ + public int getSlot() { + return handle.getIntegers().read(1); + } + + /** + * Set Slot. + * + * @param value - new value. + */ + public void setSlot(int value) { + handle.getIntegers().write(1, value); + } + + /** + * Retrieve Button. + * <p> + * Notes: the button used in the click. See below. + * + * @return The current Button + */ + public int getButton() { + return handle.getIntegers().read(2); + } + + /** + * Set Button. + * + * @param value - new value. + */ + public void setButton(int value) { + handle.getIntegers().write(2, value); + } + + /** + * Retrieve Action number. + * <p> + * Notes: a unique number for the action, used for transaction handling (See + * the Transaction packet). + * + * @return The current Action number + */ + public short getActionNumber() { + return handle.getShorts().read(0); + } + + /** + * Set Action number. + * + * @param value - new value. + */ + public void setActionNumber(short value) { + handle.getShorts().write(0, value); + } + + /** + * Retrieve Clicked item. + * + * @return The current Clicked item + */ + public ItemStack getClickedItem() { + return handle.getItemModifier().read(0); + } + + /** + * Set Clicked item. + * + * @param value - new value. + */ + public void setClickedItem(ItemStack value) { + handle.getItemModifier().write(0, value); + } + + public InventoryClickType getShift() { + return handle.getEnumModifier(InventoryClickType.class, 5).read(0); + } + + public void setShift(InventoryClickType value) { + handle.getEnumModifier(InventoryClickType.class, 5).write(0, value); + } + + public enum InventoryClickType { + PICKUP, QUICK_MOVE, SWAP, CLONE, THROW, QUICK_CRAFT, PICKUP_ALL; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperStatusClientPing.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperStatusClientPing.java new file mode 100644 index 0000000..613cf4e --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperStatusClientPing.java @@ -0,0 +1,55 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.in; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperStatusClientPing extends AbstractPacket { + public static final PacketType TYPE = PacketType.Status.Client.PING; + + public WrapperStatusClientPing() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperStatusClientPing(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Time. + * + * @return The current Time + */ + public long getTime() { + return handle.getLongs().read(0); + } + + /** + * Set Time. + * + * @param value - new value. + */ + public void setTime(long value) { + handle.getLongs().write(0, value); + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperStatusClientStart.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperStatusClientStart.java new file mode 100644 index 0000000..f13cd32 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/in/WrapperStatusClientStart.java @@ -0,0 +1,36 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.in; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperStatusClientStart extends AbstractPacket { + public static final PacketType TYPE = PacketType.Status.Client.START; + + public WrapperStatusClientStart() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperStatusClientStart(PacketContainer packet) { + super(packet, TYPE); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperLoginServerDisconnect.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperLoginServerDisconnect.java new file mode 100644 index 0000000..4d3e00d --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperLoginServerDisconnect.java @@ -0,0 +1,65 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.wrappers.WrappedChatComponent; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperLoginServerDisconnect extends AbstractPacket { + public static final PacketType TYPE = PacketType.Login.Server.DISCONNECT; + + public WrapperLoginServerDisconnect() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperLoginServerDisconnect(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve reason. + * + * @return The current reason + */ + public WrappedChatComponent getReason() { + return handle.getChatComponents().read(0); + } + + @Deprecated + public WrappedChatComponent getJsonData() { + return getReason(); + } + + /** + * Set reason. + * + * @param value - new value. + */ + public void setReason(WrappedChatComponent value) { + handle.getChatComponents().write(0, value); + } + + @Deprecated + public void setJsonData(WrappedChatComponent value) { + setReason(value); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperLoginServerEncryptionBegin.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperLoginServerEncryptionBegin.java new file mode 100644 index 0000000..8017e13 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperLoginServerEncryptionBegin.java @@ -0,0 +1,95 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import java.security.PublicKey; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperLoginServerEncryptionBegin extends AbstractPacket { + public static final PacketType TYPE = + PacketType.Login.Server.ENCRYPTION_BEGIN; + + public WrapperLoginServerEncryptionBegin() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperLoginServerEncryptionBegin(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Server ID. + * <p> + * Notes: appears to be empty as of 1.7.x + * + * @return The current Server ID + */ + public String getServerId() { + return handle.getStrings().read(0); + } + + /** + * Set Server ID. + * + * @param value - new value. + */ + public void setServerId(String value) { + handle.getStrings().write(0, value); + } + + /** + * Retrieve Public Key. + * + * @return The current Public Key + */ + public PublicKey getPublicKey() { + return handle.getSpecificModifier(PublicKey.class).read(0); + } + + /** + * Set Public Key. + * + * @param value - new value. + */ + public void setPublicKey(PublicKey value) { + handle.getSpecificModifier(PublicKey.class).write(0, value); + } + + /** + * Retrieve Verify Token. + * + * @return The current Verify Token + */ + public byte[] getVerifyToken() { + return handle.getByteArrays().read(0); + } + + /** + * Set Verify Token. + * + * @param value - new value. + */ + public void setVerifyToken(byte[] value) { + handle.getByteArrays().write(0, value); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperLoginServerSetCompression.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperLoginServerSetCompression.java new file mode 100644 index 0000000..5fcc702 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperLoginServerSetCompression.java @@ -0,0 +1,58 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperLoginServerSetCompression extends AbstractPacket { + public static final PacketType TYPE = + PacketType.Login.Server.SET_COMPRESSION; + + public WrapperLoginServerSetCompression() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperLoginServerSetCompression(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Threshold. + * <p> + * Notes: threshold is the max size of a packet before its compressed + * + * @return The current Threshold + */ + public int getThreshold() { + return handle.getIntegers().read(0); + } + + /** + * Set Threshold. + * + * @param value - new value. + */ + public void setThreshold(int value) { + handle.getIntegers().write(0, value); + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperLoginServerSuccess.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperLoginServerSuccess.java new file mode 100644 index 0000000..11f29ef --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperLoginServerSuccess.java @@ -0,0 +1,55 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.wrappers.WrappedGameProfile; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperLoginServerSuccess extends AbstractPacket { + public static final PacketType TYPE = PacketType.Login.Server.SUCCESS; + + public WrapperLoginServerSuccess() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperLoginServerSuccess(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve the UUID and player name of the connected client. + * + * @return The current client profile. + */ + public WrappedGameProfile getProfile() { + return handle.getGameProfiles().read(0); + } + + /** + * Set the UUID and player name of the connected client as a game profile. + * + * @param value - new profile. + */ + public void setProfile(WrappedGameProfile value) { + handle.getGameProfiles().write(0, value); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerAbilities.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerAbilities.java new file mode 100644 index 0000000..69fda22 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerAbilities.java @@ -0,0 +1,84 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperPlayServerAbilities extends AbstractPacket { + public static final PacketType TYPE = PacketType.Play.Server.ABILITIES; + + public WrapperPlayServerAbilities() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerAbilities(PacketContainer packet) { + super(packet, TYPE); + } + + public boolean isInvulnurable() { + return handle.getBooleans().read(0); + } + + public void setInvulnurable(boolean value) { + handle.getBooleans().write(0, value); + } + + public boolean isFlying() { + return handle.getBooleans().read(1); + } + + public void setFlying(boolean value) { + handle.getBooleans().write(1, value); + } + + public boolean canFly() { + return handle.getBooleans().read(2); + } + + public void setCanFly(boolean value) { + handle.getBooleans().write(2, value); + } + + public boolean canInstantlyBuild() { + return handle.getBooleans().read(3); + } + + public void setCanInstantlyBuild(boolean value) { + handle.getBooleans().write(3, value); + } + + public float getFlyingSpeed() { + return handle.getFloat().read(0); + } + + public void setFlyingSpeed(float value) { + handle.getFloat().write(0, value); + } + + public float getWalkingSpeed() { + return handle.getFloat().read(1); + } + + public void setWalkingSpeed(float value) { + handle.getFloat().write(1, value); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerAdvancements.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerAdvancements.java new file mode 100644 index 0000000..1bcb090 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerAdvancements.java @@ -0,0 +1,149 @@ +/** + * This file is part of PacketWrapper. + * Copyright (C) 2012-2015 Kristian S. Strangeland + * Copyright (C) 2015 dmulloy2 + * + * PacketWrapper is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * PacketWrapper 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 General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with PacketWrapper. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import java.util.Date; +import java.util.Map; +import java.util.Optional; +import java.util.Set; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.wrappers.*; + +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; +import org.bukkit.advancement.Advancement; +import org.bukkit.inventory.ItemStack; + +import static com.comphenix.protocol.utility.MinecraftReflection.getMinecraftClass; + +public class WrapperPlayServerAdvancements extends AbstractPacket { + + public static final PacketType TYPE = PacketType.Play.Server.ADVANCEMENTS; + + public WrapperPlayServerAdvancements() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerAdvancements(PacketContainer packet) { + super(packet, TYPE); + } + + public static class SerializedAdvancement { + public MinecraftKey key; + public Advancement advancement; + public AdvancementDisplay display; + public Object rewards; + public Map<String, Object> criteria; + public String[][] requirements; + } + + public static class AdvancementDisplay { + public WrappedChatComponent title; + public WrappedChatComponent description; + public ItemStack icon; + public MinecraftKey background; + public FrameType frame; + public boolean showToast; + public boolean announceToChat; + public boolean hidden; + public float xCoord; + public float yCoord; + } + + public enum FrameType { + TASK, + CHALLENGE, + GOAL + } + + public static class AdvancementProgress { + public Map<String, CriterionProgress> progress; + public String[][] array2d; + } + + public static class CriterionProgress { + public AdvancementProgress progress; + public Date date; + } + + private static final AutoWrapper<AdvancementDisplay> DISPLAY = AutoWrapper + .wrap(AdvancementDisplay.class, "AdvancementDisplay") + .field(0, BukkitConverters.getWrappedChatComponentConverter()) + .field(1, BukkitConverters.getWrappedChatComponentConverter()) + .field(2, BukkitConverters.getItemStackConverter()) + .field(3, MinecraftKey.getConverter()) + .field(4, EnumWrappers.getGenericConverter(getMinecraftClass("AdvancementFrameType"), FrameType.class)); + + private static final AutoWrapper<SerializedAdvancement> WRAPPER = AutoWrapper + .wrap(SerializedAdvancement.class,"Advancement$SerializedAdvancement") + .field(0, MinecraftKey.getConverter()) + .field(1, BukkitConverters.getAdvancementConverter()) + .field(2, DISPLAY); + + private static final AutoWrapper<CriterionProgress> CRITERION = AutoWrapper + .wrap(CriterionProgress.class, "CriterionProgress"); + + private static final AutoWrapper<AdvancementProgress> PROGRESS = AutoWrapper + .wrap(AdvancementProgress.class, "AdvancementProgress") + .field(0, BukkitConverters.getMapConverter(Converters.passthrough(String.class), CRITERION)); + + static { + CRITERION.field(0, PROGRESS); + } + + /** + * Retrieve Reset/Clear. + * <p> + * Notes: whether to reset/clear the current advancements + * @return The current Reset/Clear + */ + public boolean isReset() { + return handle.getBooleans().read(0); + } + + /** + * Set Reset/Clear. + * @param value - new value. + */ + public void setReset(boolean value) { + handle.getBooleans().write(0, value); + } + + public Optional<Map<MinecraftKey, SerializedAdvancement>> getAdvancements() { + return handle.getMaps(MinecraftKey.getConverter(), WRAPPER).optionRead(0); + } + + public void setAdvancements(Map<MinecraftKey, SerializedAdvancement> value) { + handle.getMaps(MinecraftKey.getConverter(), WRAPPER).writeSafely(0, value); + } + + public Optional<Set<MinecraftKey>> getKeys() { + return handle.getSets(MinecraftKey.getConverter()).optionRead(0); + } + + public void setKeys(Set<MinecraftKey> value) { + handle.getSets(MinecraftKey.getConverter()).writeSafely(0, value); + } + + public Optional<Map<MinecraftKey, AdvancementProgress>> getProgress() { + return handle.getMaps(MinecraftKey.getConverter(), PROGRESS).optionRead(1); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerAnimation.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerAnimation.java new file mode 100644 index 0000000..2e2e33f --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerAnimation.java @@ -0,0 +1,101 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; +import org.bukkit.World; +import org.bukkit.entity.Entity; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.events.PacketEvent; + +public class WrapperPlayServerAnimation extends AbstractPacket { + public static final PacketType TYPE = PacketType.Play.Server.ANIMATION; + + public WrapperPlayServerAnimation() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerAnimation(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Entity ID. + * <p> + * Notes: entity's ID + * + * @return The current Entity ID + */ + public int getEntityID() { + return handle.getIntegers().read(0); + } + + /** + * Set Entity ID. + * + * @param value - new value. + */ + public void setEntityID(int value) { + handle.getIntegers().write(0, value); + } + + /** + * Retrieve the entity of the painting that will be spawned. + * + * @param world - the current world of the entity. + * @return The spawned entity. + */ + public Entity getEntity(World world) { + return handle.getEntityModifier(world).read(0); + } + + /** + * Retrieve the entity of the painting that will be spawned. + * + * @param event - the packet event. + * @return The spawned entity. + */ + public Entity getEntity(PacketEvent event) { + return getEntity(event.getPlayer().getWorld()); + } + + /** + * Retrieve Animation. + * <p> + * Notes: animation ID + * + * @return The current Animation + */ + public int getAnimation() { + return handle.getIntegers().read(1); + } + + /** + * Set Animation. + * + * @param value - new value. + */ + public void setAnimation(int value) { + handle.getIntegers().write(1, value); + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerAttachEntity.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerAttachEntity.java new file mode 100644 index 0000000..b6d6c17 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerAttachEntity.java @@ -0,0 +1,102 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; +import org.bukkit.World; +import org.bukkit.entity.Entity; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.events.PacketEvent; + +public class WrapperPlayServerAttachEntity extends AbstractPacket { + public static final PacketType TYPE = PacketType.Play.Server.ATTACH_ENTITY; + + public WrapperPlayServerAttachEntity() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerAttachEntity(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Entity ID. + * <p> + * Notes: entity's ID + * + * @return The current Entity ID + */ + public int getEntityID() { + return handle.getIntegers().read(0); + } + + /** + * Set Entity ID. + * + * @param value - new value. + */ + public WrapperPlayServerAttachEntity setEntityID(int value) { + handle.getIntegers().write(0, value); + return this; + } + + /** + * Retrieve the entity of the painting that will be spawned. + * + * @param world - the current world of the entity. + * @return The spawned entity. + */ + public Entity getEntity(World world) { + return handle.getEntityModifier(world).read(0); + } + + /** + * Retrieve the entity of the painting that will be spawned. + * + * @param event - the packet event. + * @return The spawned entity. + */ + public Entity getEntity(PacketEvent event) { + return getEntity(event.getPlayer().getWorld()); + } + + /** + * Retrieve Vehicle ID. + * <p> + * Notes: vechicle's Entity ID + * + * @return The current Vehicle ID + */ + public int getVehicleId() { + return handle.getIntegers().read(1); + } + + /** + * Set Vehicle ID. + * + * @param value - new value. + */ + public WrapperPlayServerAttachEntity setVehicleId(int value) { + handle.getIntegers().write(1, value); + return this; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerAutoRecipe.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerAutoRecipe.java new file mode 100644 index 0000000..25001b4 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerAutoRecipe.java @@ -0,0 +1,55 @@ +/** + * This file is part of PacketWrapper. + * Copyright (C) 2012-2015 Kristian S. Strangeland + * Copyright (C) 2015 dmulloy2 + * + * PacketWrapper is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * PacketWrapper 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 General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with PacketWrapper. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperPlayServerAutoRecipe extends AbstractPacket { + + public static final PacketType TYPE = PacketType.Play.Server.AUTO_RECIPE; + + public WrapperPlayServerAutoRecipe() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerAutoRecipe(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Window ID. + * @return The current Window ID + */ + public int getWindowId() { + return handle.getIntegers().read(0); + } + + /** + * Set Window ID. + * @param value - new value. + */ + public void setWindowId(int value) { + handle.getIntegers().write(0, value); + } + + // Wrapper for recipe can be created upon request +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerBed.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerBed.java new file mode 100644 index 0000000..928e816 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerBed.java @@ -0,0 +1,102 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; +import org.bukkit.World; +import org.bukkit.entity.Entity; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.events.PacketEvent; +import com.comphenix.protocol.wrappers.BlockPosition; + +public class WrapperPlayServerBed extends AbstractPacket { + public static final PacketType TYPE = PacketType.Play.Server.BED; + + public WrapperPlayServerBed() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerBed(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Entity ID. + * <p> + * Notes: entity's ID + * + * @return The current Entity ID + */ + public int getEntityID() { + return handle.getIntegers().read(0); + } + + /** + * Set Entity ID. + * + * @param value - new value. + */ + public void setEntityID(int value) { + handle.getIntegers().write(0, value); + } + + /** + * Retrieve the entity of the painting that will be spawned. + * + * @param world - the current world of the entity. + * @return The spawned entity. + */ + public Entity getEntity(World world) { + return handle.getEntityModifier(world).read(0); + } + + /** + * Retrieve the entity of the painting that will be spawned. + * + * @param event - the packet event. + * @return The spawned entity. + */ + public Entity getEntity(PacketEvent event) { + return getEntity(event.getPlayer().getWorld()); + } + + /** + * Retrieve Location. + * <p> + * Notes: block location of the head part of the bed + * + * @return The current Location + */ + public BlockPosition getLocation() { + return handle.getBlockPositionModifier().read(0); + } + + /** + * Set Location. + * + * @param value - new value. + */ + public void setLocation(BlockPosition value) { + handle.getBlockPositionModifier().write(0, value); + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerBlockAction.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerBlockAction.java new file mode 100644 index 0000000..5f3c52e --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerBlockAction.java @@ -0,0 +1,120 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; +import org.bukkit.Material; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.wrappers.BlockPosition; + +public class WrapperPlayServerBlockAction extends AbstractPacket { + public static final PacketType TYPE = PacketType.Play.Server.BLOCK_ACTION; + + public WrapperPlayServerBlockAction() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerBlockAction(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Location. + * <p> + * Notes: block Coordinates + * + * @return The current Location + */ + public BlockPosition getLocation() { + return handle.getBlockPositionModifier().read(0); + } + + /** + * Set Location. + * + * @param value - new value. + */ + public void setLocation(BlockPosition value) { + handle.getBlockPositionModifier().write(0, value); + } + + /** + * Retrieve Byte 1. + * <p> + * Notes: varies depending on block - see Block_Actions + * + * @return The current Byte 1 + */ + public int getByte1() { + return handle.getIntegers().read(0); + } + + /** + * Set Byte 1. + * + * @param value - new value. + */ + public void setByte1(int value) { + handle.getIntegers().write(0, value); + } + + /** + * Retrieve Byte 2. + * <p> + * Notes: varies depending on block - see Block_Actions + * + * @return The current Byte 2 + */ + public int getByte2() { + return handle.getIntegers().read(1); + } + + /** + * Set Byte 2. + * + * @param value - new value. + */ + public void setByte2(int value) { + handle.getIntegers().write(1, value); + } + + /** + * Retrieve Block Type. + * <p> + * Notes: the block type for the block + * + * @return The current Block Type + */ + public Material getBlockType() { + return handle.getBlocks().read(0); + } + + /** + * Set Block Type. + * + * @param value - new value. + */ + public void setBlockType(Material value) { + handle.getBlocks().write(0, value); + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerBlockBreakAnimation.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerBlockBreakAnimation.java new file mode 100644 index 0000000..6cde7b3 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerBlockBreakAnimation.java @@ -0,0 +1,123 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; +import org.bukkit.World; +import org.bukkit.entity.Entity; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.events.PacketEvent; +import com.comphenix.protocol.wrappers.BlockPosition; + +public class WrapperPlayServerBlockBreakAnimation extends AbstractPacket { + public static final PacketType TYPE = + PacketType.Play.Server.BLOCK_BREAK_ANIMATION; + + public WrapperPlayServerBlockBreakAnimation() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerBlockBreakAnimation(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Entity ID. + * <p> + * Notes: entity's ID + * + * @return The current Entity ID + */ + public int getEntityID() { + return handle.getIntegers().read(0); + } + + /** + * Set Entity ID. + * + * @param value - new value. + */ + public void setEntityID(int value) { + handle.getIntegers().write(0, value); + } + + /** + * Retrieve the entity of the painting that will be spawned. + * + * @param world - the current world of the entity. + * @return The spawned entity. + */ + public Entity getEntity(World world) { + return handle.getEntityModifier(world).read(0); + } + + /** + * Retrieve the entity of the painting that will be spawned. + * + * @param event - the packet event. + * @return The spawned entity. + */ + public Entity getEntity(PacketEvent event) { + return getEntity(event.getPlayer().getWorld()); + } + + /** + * Retrieve Location. + * <p> + * Notes: block Position + * + * @return The current Location + */ + public BlockPosition getLocation() { + return handle.getBlockPositionModifier().read(0); + } + + /** + * Set Location. + * + * @param value - new value. + */ + public void setLocation(BlockPosition value) { + handle.getBlockPositionModifier().write(0, value); + } + + /** + * Retrieve Destroy Stage. + * <p> + * Notes: 0 - 9 + * + * @return The current Destroy Stage + */ + public int getDestroyStage() { + return handle.getIntegers().read(1); + } + + /** + * Set Destroy Stage. + * + * @param value - new value. + */ + public void setDestroyStage(int value) { + handle.getIntegers().write(1, value); + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerBlockChange.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerBlockChange.java new file mode 100644 index 0000000..8e2844b --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerBlockChange.java @@ -0,0 +1,89 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; +import org.bukkit.Location; +import org.bukkit.World; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.wrappers.BlockPosition; +import com.comphenix.protocol.wrappers.WrappedBlockData; + +public class WrapperPlayServerBlockChange extends AbstractPacket { + public static final PacketType TYPE = PacketType.Play.Server.BLOCK_CHANGE; + + public WrapperPlayServerBlockChange() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerBlockChange(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Location. + * <p> + * Notes: block Coordinates + * + * @return The current Location + */ + public BlockPosition getLocation() { + return handle.getBlockPositionModifier().read(0); + } + + /** + * Set Location. + * + * @param value - new value. + */ + public void setLocation(BlockPosition value) { + handle.getBlockPositionModifier().write(0, value); + } + + /** + * Retrieve the Bukkit Location. + * + * @param world World for the location + * @return Bukkit Location + */ + public Location getBukkitLocation(World world) { + return getLocation().toVector().toLocation(world); + } + + /** + * Retrieve Block Data. + * + * @return The current Block Data + */ + public WrappedBlockData getBlockData() { + return handle.getBlockData().read(0); + } + + /** + * Set Block Data. + * + * @param value - new value. + */ + public void setBlockData(WrappedBlockData value) { + handle.getBlockData().write(0, value); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerBoss.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerBoss.java new file mode 100644 index 0000000..d78498d --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerBoss.java @@ -0,0 +1,134 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import java.util.UUID; + +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; +import org.bukkit.boss.BarColor; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.wrappers.WrappedChatComponent; + +public class WrapperPlayServerBoss extends AbstractPacket { + + public static final PacketType TYPE = PacketType.Play.Server.BOSS; + + public WrapperPlayServerBoss() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerBoss(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve UUID. + * <p> + * Notes: unique ID for this bar + * + * @return The current UUID + */ + public UUID getUniqueId() { + return handle.getUUIDs().read(0); + } + + /** + * Set UUID. + * + * @param value - new value. + */ + public void setUniqueId(UUID value) { + handle.getUUIDs().write(0, value); + } + + public Action getAction() { + return handle.getEnumModifier(Action.class, 1).read(0); + } + + public void setAction(Action value) { + handle.getEnumModifier(Action.class, 1).write(0, value); + } + + public WrappedChatComponent getTitle() { + return handle.getChatComponents().read(0); + } + + public void setTitle(WrappedChatComponent value) { + handle.getChatComponents().write(0, value); + } + + public float getHealth() { + return handle.getFloat().read(0); + } + + public void setHealth(float value) { + handle.getFloat().write(0, value); + } + + public BarColor getColor() { + return handle.getEnumModifier(BarColor.class, 4).read(0); + } + + public void setColor(BarColor value) { + handle.getEnumModifier(BarColor.class, 4).write(0, value); + } + + public BarStyle getStyle() { + return handle.getEnumModifier(BarStyle.class, 5).read(0); + } + + public void setStyle(BarStyle value) { + handle.getEnumModifier(BarStyle.class, 5).write(0, value); + } + + public boolean isDarkenSky() { + return handle.getBooleans().read(0); + } + + public void setDarkenSky(boolean value) { + handle.getBooleans().write(0, value); + } + + public boolean isPlayMusic() { + return handle.getBooleans().read(1); + } + + public void setPlayMusic(boolean value) { + handle.getBooleans().write(1, value); + } + + public boolean isCreateFog() { + return handle.getBooleans().read(2); + } + + public void setCreateFog(boolean value) { + handle.getBooleans().write(2, value); + } + + public static enum Action { + ADD, REMOVE, UPDATE_PCT, UPDATE_NAME, UPDATE_STYLE, UPDATE_PROPERTIES; + } + + public static enum BarStyle { + PROGRESS, NOTCHED_6, NOTCHED_10, NOTCHED_12, NOTCHED_20; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerCamera.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerCamera.java new file mode 100644 index 0000000..2d2775d --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerCamera.java @@ -0,0 +1,55 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperPlayServerCamera extends AbstractPacket { + public static final PacketType TYPE = PacketType.Play.Server.CAMERA; + + public WrapperPlayServerCamera() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerCamera(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Camera ID. + * + * @return The current Camera ID + */ + public int getCameraId() { + return handle.getIntegers().read(0); + } + + /** + * Set Camera ID. + * + * @param value - new value. + */ + public void setCameraId(int value) { + handle.getIntegers().write(0, value); + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerChat.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerChat.java new file mode 100644 index 0000000..832169f --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerChat.java @@ -0,0 +1,101 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import java.util.Arrays; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.wrappers.EnumWrappers; +import com.comphenix.protocol.wrappers.EnumWrappers.ChatType; +import com.comphenix.protocol.wrappers.WrappedChatComponent; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperPlayServerChat extends AbstractPacket { + public static final PacketType TYPE = PacketType.Play.Server.CHAT; + + public WrapperPlayServerChat() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerChat(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve the chat message. + * <p> + * Limited to 32767 bytes + * + * @return The current message + */ + public WrappedChatComponent getMessage() { + return handle.getChatComponents().read(0); + } + + /** + * Set the message. + * + * @param value - new value. + */ + public WrapperPlayServerChat setMessage(WrappedChatComponent value) { + handle.getChatComponents().write(0, value); + return this; + } + + public ChatType getChatType() { + return handle.getChatTypes().read(0); + } + + public WrapperPlayServerChat setChatType(ChatType type) { + handle.getChatTypes().write(0, type); + return this; + } + + /** + * Retrieve Position. + * <p> + * Notes: 0 - Chat (chat box) ,1 - System Message (chat box), 2 - Above + * action bar + * + * @return The current Position + * @deprecated Magic values replaced by enum + */ + @Deprecated + public byte getPosition() { + Byte position = handle.getBytes().readSafely(0); + return position != null ? position : getChatType().getId(); + } + + /** + * Set Position. + * + * @param value - new value. + * @deprecated Magic values replaced by enum + */ + @Deprecated + public WrapperPlayServerChat setPosition(byte value) { + handle.getBytes().writeSafely(0, value); + if (EnumWrappers.getChatTypeClass() != null) + Arrays.stream(ChatType.values()).filter(t -> t.getId() == value).findAny().ifPresent(t -> handle.getChatTypes().writeSafely(0, t)); + + return this; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerCloseWindow.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerCloseWindow.java new file mode 100644 index 0000000..f515842 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerCloseWindow.java @@ -0,0 +1,57 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperPlayServerCloseWindow extends AbstractPacket { + public static final PacketType TYPE = PacketType.Play.Server.CLOSE_WINDOW; + + public WrapperPlayServerCloseWindow() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerCloseWindow(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Window ID. + * <p> + * Notes: this is the id of the window that was closed. 0 for inventory. + * + * @return The current Window ID + */ + public int getWindowId() { + return handle.getIntegers().read(0); + } + + /** + * Set Window ID. + * + * @param value - new value. + */ + public void setWindowId(int value) { + handle.getIntegers().write(0, value); + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerCollect.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerCollect.java new file mode 100644 index 0000000..b8bf75c --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerCollect.java @@ -0,0 +1,73 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperPlayServerCollect extends AbstractPacket { + public static final PacketType TYPE = PacketType.Play.Server.COLLECT; + + public WrapperPlayServerCollect() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerCollect(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Collected Entity ID. + * + * @return The current Collected Entity ID + */ + public int getCollectedEntityId() { + return handle.getIntegers().read(0); + } + + /** + * Set Collected Entity ID. + * + * @param value - new value. + */ + public void setCollectedEntityId(int value) { + handle.getIntegers().write(0, value); + } + + /** + * Retrieve Collector Entity ID. + * + * @return The current Collector Entity ID + */ + public int getCollectorEntityId() { + return handle.getIntegers().read(1); + } + + /** + * Set Collector Entity ID. + * + * @param value - new value. + */ + public void setCollectorEntityId(int value) { + handle.getIntegers().write(1, value); + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerCombatEvent.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerCombatEvent.java new file mode 100644 index 0000000..5e38042 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerCombatEvent.java @@ -0,0 +1,137 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.wrappers.EnumWrappers.CombatEventType; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperPlayServerCombatEvent extends AbstractPacket { + public static final PacketType TYPE = PacketType.Play.Server.COMBAT_EVENT; + + public WrapperPlayServerCombatEvent() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerCombatEvent(PacketContainer packet) { + super(packet, TYPE); + } + + // ---- All + + /** + * Retrieve Event. + * <p> + * Notes: 0 ENTER_COMBAT, 1 END_COMBAT, 2 ENTITY_DEAD + * + * @return The current Event + */ + public CombatEventType getEvent() { + return handle.getCombatEvents().read(0); + } + + /** + * Set Event. + * + * @param value - new value. + */ + public void setEvent(CombatEventType value) { + handle.getCombatEvents().write(0, value); + } + + // ---- END_COMBAT + + public int getDuration() { + if (getEvent() != CombatEventType.END_COMBAT) + throw new IllegalStateException( + "Duration only exists for END_COMBAT"); + + return handle.getIntegers().read(0); + } + + public void setDuration(int value) { + if (getEvent() != CombatEventType.END_COMBAT) + throw new IllegalStateException( + "Duration only exists for END_COMBAT"); + + handle.getIntegers().write(0, value); + } + + // ---- ENTITY_DIED + + public int getPlayerID() { + if (getEvent() != CombatEventType.ENTITY_DIED) + throw new IllegalStateException( + "Player ID only exists for ENTITY_DEAD"); + + return handle.getIntegers().read(0); + } + + public void setPlayerId(int value) { + if (getEvent() != CombatEventType.ENTITY_DIED) + throw new IllegalStateException( + "Player ID only exists for ENTITY_DEAD"); + + handle.getIntegers().write(0, value); + } + + public int getEntityID() { + CombatEventType event = getEvent(); + switch (event) { + case END_COMBAT: + case ENTITY_DIED: + return handle.getIntegers().read(1); + default: + throw new IllegalStateException("Entity ID does not exist for " + + event); + + } + } + + public void setEntityId(int value) { + CombatEventType event = getEvent(); + switch (event) { + case END_COMBAT: + case ENTITY_DIED: + handle.getIntegers().write(1, value); + default: + throw new IllegalStateException("Entity ID does not exist for " + + event); + + } + } + + public String getMessage() { + if (getEvent() != CombatEventType.ENTITY_DIED) + throw new IllegalStateException( + "Message only exists for ENTITY_DEAD"); + + return handle.getStrings().read(0); + } + + public void setMessage(String value) { + if (getEvent() != CombatEventType.ENTITY_DIED) + throw new IllegalStateException( + "Message only exists for ENTITY_DEAD"); + + handle.getStrings().write(0, value); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerCustomPayload.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerCustomPayload.java new file mode 100644 index 0000000..4c652f0 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerCustomPayload.java @@ -0,0 +1,104 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.utility.MinecraftReflection; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperPlayServerCustomPayload extends AbstractPacket { + public static final PacketType TYPE = PacketType.Play.Server.CUSTOM_PAYLOAD; + + public WrapperPlayServerCustomPayload() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerCustomPayload(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Channel. + * <p> + * Notes: name of the "channel" used to send the data. + * + * @return The current Channel + */ + public String getChannel() { + return handle.getStrings().read(0); + } + + /** + * Set Channel. + * + * @param value - new value. + */ + public void setChannel(String value) { + handle.getStrings().write(0, value); + } + + /** + * Retrieve payload contents as a raw Netty buffer + * + * @return Payload contents as a Netty buffer + */ + public ByteBuf getContentsBuffer() { + return (ByteBuf) handle.getModifier().withType(ByteBuf.class).read(0); + } + + /** + * Retrieve payload contents + * + * @return Payload contents as a byte array + */ + public byte[] getContents() { + ByteBuf buffer = getContentsBuffer(); + byte[] array = new byte[buffer.readableBytes()]; + buffer.readBytes(array); + return array; + } + + /** + * Update payload contents with a Netty buffer + * + * @param contents - new payload content + */ + public void setContentsBuffer(ByteBuf contents) { + if (MinecraftReflection.is(MinecraftReflection.getPacketDataSerializerClass(), contents)) { + handle.getModifier().withType(ByteBuf.class).write(0, contents); + } else { + Object serializer = MinecraftReflection.getPacketDataSerializer(contents); + handle.getModifier().withType(ByteBuf.class).write(0, serializer); + } + } + + /** + * Update payload contents with a byte array + * + * @param content - new payload content + */ + public void setContents(byte[] content) { + setContentsBuffer(Unpooled.copiedBuffer(content)); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerCustomSoundEffect.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerCustomSoundEffect.java new file mode 100644 index 0000000..ad0747c --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerCustomSoundEffect.java @@ -0,0 +1,183 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.wrappers.EnumWrappers.SoundCategory; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperPlayServerCustomSoundEffect extends AbstractPacket { + + public static final PacketType TYPE = + PacketType.Play.Server.CUSTOM_SOUND_EFFECT; + + public WrapperPlayServerCustomSoundEffect() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerCustomSoundEffect(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Sound Name. + * <p> + * Notes: all known sound effect names can be seen here. + * + * @return The current Sound Name + */ + public String getSoundName() { + return handle.getStrings().read(0); + } + + /** + * Set Sound Name. + * + * @param value - new value. + */ + public void setSoundName(String value) { + handle.getStrings().write(0, value); + } + + /** + * Retrieve Sound Category. + * <p> + * Notes: the category that this sound will be played from (current + * categories) + * + * @return The current Sound Category + */ + public SoundCategory getSoundCategory() { + return handle.getSoundCategories().read(0); + } + + /** + * Set Sound Category. + * + * @param value - new value. + */ + public void setSoundCategory(SoundCategory value) { + handle.getSoundCategories().write(0, value); + } + + /** + * Retrieve Effect Position X. + * <p> + * Notes: effect X multiplied by 8 (fixed-point number with only 3 bits + * dedicated to the fractional part) + * + * @return The current Effect Position X + */ + public int getX() { + return handle.getIntegers().read(0); + } + + /** + * Set Effect Position X. + * + * @param value - new value. + */ + public void setX(int value) { + handle.getIntegers().write(0, value); + } + + /** + * Retrieve Effect Position Y. + * <p> + * Notes: effect Y multiplied by 8 (fixed-point number with only 3 bits + * dedicated to the fractional part) + * + * @return The current Effect Position Y + */ + public int getY() { + return handle.getIntegers().read(1); + } + + /** + * Set Effect Position Y. + * + * @param value - new value. + */ + public void setY(int value) { + handle.getIntegers().write(1, value); + } + + /** + * Retrieve Effect Position Z. + * <p> + * Notes: effect Z multiplied by 8 (fixed-point number with only 3 bits + * dedicated to the fractional part) + * + * @return The current Effect Position Z + */ + public int getZ() { + return handle.getIntegers().read(2); + } + + /** + * Set Effect Position Z. + * + * @param value - new value. + */ + public void setZ(int value) { + handle.getIntegers().write(2, value); + } + + /** + * Retrieve Volume. + * <p> + * Notes: 1 is 100%, can be more + * + * @return The current Volume + */ + public float getVolume() { + return handle.getFloat().read(0); + } + + /** + * Set Volume. + * + * @param value - new value. + */ + public void setVolume(float value) { + handle.getFloat().write(0, value); + } + + /** + * Retrieve Pitch. + * <p> + * Notes: 63 is 100%, can be more + * + * @return The current Pitch + */ + public float getPitch() { + return handle.getFloat().read(1); + } + + /** + * Set Pitch. + * + * @param value - new value. + */ + public void setPitch(float value) { + handle.getFloat().write(1, value); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerEntity.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerEntity.java new file mode 100644 index 0000000..11b7820 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerEntity.java @@ -0,0 +1,80 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; +import org.bukkit.World; +import org.bukkit.entity.Entity; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.events.PacketEvent; + +public class WrapperPlayServerEntity extends AbstractPacket { + public static final PacketType TYPE = PacketType.Play.Server.ENTITY; + + public WrapperPlayServerEntity() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerEntity(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Entity ID. + * <p> + * Notes: entity's ID + * + * @return The current Entity ID + */ + public int getEntityID() { + return handle.getIntegers().read(0); + } + + /** + * Set Entity ID. + * + * @param value - new value. + */ + public void setEntityID(int value) { + handle.getIntegers().write(0, value); + } + + /** + * Retrieve the entity of the painting that will be spawned. + * + * @param world - the current world of the entity. + * @return The spawned entity. + */ + public Entity getEntity(World world) { + return handle.getEntityModifier(world).read(0); + } + + /** + * Retrieve the entity of the painting that will be spawned. + * + * @param event - the packet event. + * @return The spawned entity. + */ + public Entity getEntity(PacketEvent event) { + return getEntity(event.getPlayer().getWorld()); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerEntityDestroy.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerEntityDestroy.java new file mode 100644 index 0000000..cae29f2 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerEntityDestroy.java @@ -0,0 +1,78 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperPlayServerEntityDestroy extends AbstractPacket { + public static final PacketType TYPE = PacketType.Play.Server.ENTITY_DESTROY; + + public WrapperPlayServerEntityDestroy() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerEntityDestroy(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Count. + * <p> + * Notes: length of following array + * + * @return The current Count + */ + public int getCount() { + return handle.getIntegerArrays().read(0).length; + } + + /** + * Retrieve Entity IDs. + * <p> + * Notes: the list of entities of destroy + * + * @return The current Entity IDs + */ + public int[] getEntityIDs() { + return handle.getIntegerArrays().read(0); + } + + /** + * Set Entity IDs. + * + * @param value - new value. + */ + public WrapperPlayServerEntityDestroy setEntityIds(int[] value) { + handle.getIntegerArrays().write(0, value); + return this; + } + + /** + * Set Entity IDs. + * + * @param value - new value. + */ + public WrapperPlayServerEntityDestroy setEntityId(int... value) { + handle.getIntegerArrays().write(0, value); + return this; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerEntityEffect.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerEntityEffect.java new file mode 100644 index 0000000..ca68070 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerEntityEffect.java @@ -0,0 +1,155 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; +import org.bukkit.World; +import org.bukkit.entity.Entity; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.events.PacketEvent; + +public class WrapperPlayServerEntityEffect extends AbstractPacket { + public static final PacketType TYPE = PacketType.Play.Server.ENTITY_EFFECT; + + public WrapperPlayServerEntityEffect() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerEntityEffect(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Entity ID. + * <p> + * Notes: entity's ID + * + * @return The current Entity ID + */ + public int getEntityID() { + return handle.getIntegers().read(0); + } + + /** + * Set Entity ID. + * + * @param value - new value. + */ + public void setEntityID(int value) { + handle.getIntegers().write(0, value); + } + + /** + * Retrieve the entity of the painting that will be spawned. + * + * @param world - the current world of the entity. + * @return The spawned entity. + */ + public Entity getEntity(World world) { + return handle.getEntityModifier(world).read(0); + } + + /** + * Retrieve the entity of the painting that will be spawned. + * + * @param event - the packet event. + * @return The spawned entity. + */ + public Entity getEntity(PacketEvent event) { + return getEntity(event.getPlayer().getWorld()); + } + + /** + * Retrieve Effect ID. + * <p> + * Notes: see [[1]] + * + * @return The current Effect ID + */ + public byte getEffectID() { + return handle.getBytes().read(0); + } + + /** + * Set Effect ID. + * + * @param value - new value. + */ + public void setEffectID(byte value) { + handle.getBytes().write(0, (byte) (value & 255)); + } + + /** + * Retrieve Amplifier. + * + * @return The current Amplifier + */ + public byte getAmplifier() { + return handle.getBytes().read(1); + } + + /** + * Set Amplifier. + * + * @param value - new value. + */ + public void setAmplifier(byte value) { + handle.getBytes().write(1, (byte) (value & 255)); + } + + /** + * Retrieve Duration. + * + * @return The current Duration + */ + public int getDuration() { + return handle.getIntegers().read(1); + } + + /** + * Set Duration. + * + * @param value - new value. + */ + public void setDuration(int value) { + handle.getIntegers().write(1, value); + } + + /** + * Retrieve Hide Particles. + * + * @return The current Hide Particles + */ + public boolean getHideParticles() { + return handle.getBytes().read(2) == 0; + } + + /** + * Set Hide Particles. + * + * @param value - new value. + */ + public void setHideParticles(boolean value) { + handle.getBytes().write(2, (byte) (value ? 0 : 1)); + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerEntityEquipment.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerEntityEquipment.java new file mode 100644 index 0000000..90f7697 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerEntityEquipment.java @@ -0,0 +1,111 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; +import org.bukkit.World; +import org.bukkit.entity.Entity; +import org.bukkit.inventory.ItemStack; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.events.PacketEvent; +import com.comphenix.protocol.wrappers.EnumWrappers.ItemSlot; + +public class WrapperPlayServerEntityEquipment extends AbstractPacket { + public static final PacketType TYPE = + PacketType.Play.Server.ENTITY_EQUIPMENT; + + public WrapperPlayServerEntityEquipment() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerEntityEquipment(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Entity ID. + * <p> + * Notes: entity's ID + * + * @return The current Entity ID + */ + public int getEntityID() { + return handle.getIntegers().read(0); + } + + /** + * Set Entity ID. + * + * @param value - new value. + */ + public void setEntityID(int value) { + handle.getIntegers().write(0, value); + } + + /** + * Retrieve the entity of the painting that will be spawned. + * + * @param world - the current world of the entity. + * @return The spawned entity. + */ + public Entity getEntity(World world) { + return handle.getEntityModifier(world).read(0); + } + + /** + * Retrieve the entity of the painting that will be spawned. + * + * @param event - the packet event. + * @return The spawned entity. + */ + public Entity getEntity(PacketEvent event) { + return getEntity(event.getPlayer().getWorld()); + } + + public ItemSlot getSlot() { + return handle.getItemSlots().read(0); + } + + public void setSlot(ItemSlot value) { + handle.getItemSlots().write(0, value); + } + + /** + * Retrieve Item. + * <p> + * Notes: item in slot format + * + * @return The current Item + */ + public ItemStack getItem() { + return handle.getItemModifier().read(0); + } + + /** + * Set Item. + * + * @param value - new value. + */ + public void setItem(ItemStack value) { + handle.getItemModifier().write(0, value); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerEntityHeadRotation.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerEntityHeadRotation.java new file mode 100644 index 0000000..93890c4 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerEntityHeadRotation.java @@ -0,0 +1,101 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; +import org.bukkit.World; +import org.bukkit.entity.Entity; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.events.PacketEvent; + +public class WrapperPlayServerEntityHeadRotation extends AbstractPacket { + public static final PacketType TYPE = + PacketType.Play.Server.ENTITY_HEAD_ROTATION; + + public WrapperPlayServerEntityHeadRotation() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerEntityHeadRotation(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Entity ID. + * <p> + * Notes: entity's ID + * + * @return The current Entity ID + */ + public int getEntityID() { + return handle.getIntegers().read(0); + } + + /** + * Set Entity ID. + * + * @param value - new value. + */ + public void setEntityID(int value) { + handle.getIntegers().write(0, value); + } + + /** + * Retrieve the entity of the painting that will be spawned. + * + * @param world - the current world of the entity. + * @return The spawned entity. + */ + public Entity getEntity(World world) { + return handle.getEntityModifier(world).read(0); + } + + /** + * Retrieve the entity of the painting that will be spawned. + * + * @param event - the packet event. + * @return The spawned entity. + */ + public Entity getEntity(PacketEvent event) { + return getEntity(event.getPlayer().getWorld()); + } + + /** + * Retrieve Head Yaw. + * <p> + * Notes: head yaw in steps of 2p/256 + * + * @return The current Head Yaw + */ + public byte getHeadYaw() { + return handle.getBytes().read(0); + } + + /** + * Set Head Yaw. + * + * @param value - new value. + */ + public void setHeadYaw(byte value) { + handle.getBytes().write(0, value); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerEntityLook.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerEntityLook.java new file mode 100644 index 0000000..ebc6ad9 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerEntityLook.java @@ -0,0 +1,134 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; +import org.bukkit.World; +import org.bukkit.entity.Entity; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.events.PacketEvent; + +public class WrapperPlayServerEntityLook extends AbstractPacket { + public static final PacketType TYPE = PacketType.Play.Server.ENTITY_LOOK; + + public WrapperPlayServerEntityLook() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerEntityLook(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Entity ID. + * <p> + * Notes: entity's ID + * + * @return The current Entity ID + */ + public int getEntityID() { + return handle.getIntegers().read(0); + } + + /** + * Set Entity ID. + * + * @param value - new value. + */ + public void setEntityID(int value) { + handle.getIntegers().write(0, value); + } + + /** + * Retrieve the entity of the painting that will be spawned. + * + * @param world - the current world of the entity. + * @return The spawned entity. + */ + public Entity getEntity(World world) { + return handle.getEntityModifier(world).read(0); + } + + /** + * Retrieve the entity of the painting that will be spawned. + * + * @param event - the packet event. + * @return The spawned entity. + */ + public Entity getEntity(PacketEvent event) { + return getEntity(event.getPlayer().getWorld()); + } + + /** + * Retrieve the yaw of the current entity. + * + * @return The current Yaw + */ + public float getYaw() { + return (handle.getBytes().read(0) * 360.F) / 256.0F; + } + + /** + * Set the yaw of the current entity. + * + * @param value - new yaw. + */ + public void setYaw(float value) { + handle.getBytes().write(0, (byte) (value * 256.0F / 360.0F)); + } + + /** + * Retrieve the pitch of the current entity. + * + * @return The current pitch + */ + public float getPitch() { + return (handle.getBytes().read(1) * 360.F) / 256.0F; + } + + /** + * Set the pitch of the current entity. + * + * @param value - new pitch. + */ + public void setPitch(float value) { + handle.getBytes().write(1, (byte) (value * 256.0F / 360.0F)); + } + + /** + * Retrieve On Ground. + * + * @return The current On Ground + */ + public boolean getOnGround() { + return handle.getBooleans().read(0); + } + + /** + * Set On Ground. + * + * @param value - new value. + */ + public void setOnGround(boolean value) { + handle.getBooleans().write(0, value); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerEntityMetadata.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerEntityMetadata.java new file mode 100644 index 0000000..ca4e4e1 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerEntityMetadata.java @@ -0,0 +1,102 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import java.util.List; + +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; +import org.bukkit.World; +import org.bukkit.entity.Entity; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.events.PacketEvent; +import com.comphenix.protocol.wrappers.WrappedWatchableObject; + +public class WrapperPlayServerEntityMetadata extends AbstractPacket { + public static final PacketType TYPE = + PacketType.Play.Server.ENTITY_METADATA; + + public WrapperPlayServerEntityMetadata() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerEntityMetadata(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Entity ID. + * <p> + * Notes: entity's ID + * + * @return The current Entity ID + */ + public int getEntityID() { + return handle.getIntegers().read(0); + } + + /** + * Set Entity ID. + * + * @param value - new value. + */ + public void setEntityID(int value) { + handle.getIntegers().write(0, value); + } + + /** + * Retrieve the entity of the painting that will be spawned. + * + * @param world - the current world of the entity. + * @return The spawned entity. + */ + public Entity getEntity(World world) { + return handle.getEntityModifier(world).read(0); + } + + /** + * Retrieve the entity of the painting that will be spawned. + * + * @param event - the packet event. + * @return The spawned entity. + */ + public Entity getEntity(PacketEvent event) { + return getEntity(event.getPlayer().getWorld()); + } + + /** + * Retrieve Metadata. + * + * @return The current Metadata + */ + public List<WrappedWatchableObject> getMetadata() { + return handle.getWatchableCollectionModifier().read(0); + } + + /** + * Set Metadata. + * + * @param value - new value. + */ + public void setMetadata(List<WrappedWatchableObject> value) { + handle.getWatchableCollectionModifier().write(0, value); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerEntityStatus.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerEntityStatus.java new file mode 100644 index 0000000..ad0d88b --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerEntityStatus.java @@ -0,0 +1,100 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; +import org.bukkit.World; +import org.bukkit.entity.Entity; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.events.PacketEvent; + +public class WrapperPlayServerEntityStatus extends AbstractPacket { + public static final PacketType TYPE = PacketType.Play.Server.ENTITY_STATUS; + + public WrapperPlayServerEntityStatus() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerEntityStatus(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Entity ID. + * <p> + * Notes: entity's ID + * + * @return The current Entity ID + */ + public int getEntityID() { + return handle.getIntegers().read(0); + } + + /** + * Set Entity ID. + * + * @param value - new value. + */ + public void setEntityID(int value) { + handle.getIntegers().write(0, value); + } + + /** + * Retrieve the entity of the painting that will be spawned. + * + * @param world - the current world of the entity. + * @return The spawned entity. + */ + public Entity getEntity(World world) { + return handle.getEntityModifier(world).read(0); + } + + /** + * Retrieve the entity of the painting that will be spawned. + * + * @param event - the packet event. + * @return The spawned entity. + */ + public Entity getEntity(PacketEvent event) { + return getEntity(event.getPlayer().getWorld()); + } + + /** + * Retrieve Entity Status. + * <p> + * Notes: see below + * + * @return The current Entity Status + */ + public byte getEntityStatus() { + return handle.getBytes().read(0); + } + + /** + * Set Entity Status. + * + * @param value - new value. + */ + public void setEntityStatus(byte value) { + handle.getBytes().write(0, value); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerEntityTeleport.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerEntityTeleport.java new file mode 100644 index 0000000..8a6f2ac --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerEntityTeleport.java @@ -0,0 +1,147 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; +import org.bukkit.World; +import org.bukkit.entity.Entity; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.events.PacketEvent; + +public class WrapperPlayServerEntityTeleport extends AbstractPacket { + public static final PacketType TYPE = + PacketType.Play.Server.ENTITY_TELEPORT; + + public WrapperPlayServerEntityTeleport() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerEntityTeleport(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve entity ID. + * + * @return The current EID + */ + public int getEntityID() { + return handle.getIntegers().read(0); + } + + /** + * Set entity ID. + * + * @param value - new value. + */ + public void setEntityID(int value) { + handle.getIntegers().write(0, value); + } + + /** + * Retrieve the entity. + * + * @param world - the current world of the entity. + * @return The entity. + */ + public Entity getEntity(World world) { + return handle.getEntityModifier(world).read(0); + } + + /** + * Retrieve the entity. + * + * @param event - the packet event. + * @return The entity. + */ + public Entity getEntity(PacketEvent event) { + return getEntity(event.getPlayer().getWorld()); + } + + public double getX() { + return handle.getDoubles().read(0); + } + + public void setX(double value) { + handle.getDoubles().write(0, value); + } + + public double getY() { + return handle.getDoubles().read(1); + } + + public void setY(double value) { + handle.getDoubles().write(1, value); + } + + public double getZ() { + return handle.getDoubles().read(2); + } + + public void setZ(double value) { + handle.getDoubles().write(2, value); + } + + /** + * Retrieve the yaw of the current entity. + * + * @return The current Yaw + */ + public float getYaw() { + return (handle.getBytes().read(0) * 360.F) / 256.0F; + } + + /** + * Set the yaw of the current entity. + * + * @param value - new yaw. + */ + public void setYaw(float value) { + handle.getBytes().write(0, (byte) (value * 256.0F / 360.0F)); + } + + /** + * Retrieve the pitch of the current entity. + * + * @return The current pitch + */ + public float getPitch() { + return (handle.getBytes().read(1) * 360.F) / 256.0F; + } + + /** + * Set the pitch of the current entity. + * + * @param value - new pitch. + */ + public void setPitch(float value) { + handle.getBytes().write(1, (byte) (value * 256.0F / 360.0F)); + } + + public boolean getOnGround() { + return handle.getBooleans().read(0); + } + + public void setOnGround(boolean value) { + handle.getBooleans().write(0, value); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerEntityVelocity.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerEntityVelocity.java new file mode 100644 index 0000000..edf1785 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerEntityVelocity.java @@ -0,0 +1,135 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; +import org.bukkit.World; +import org.bukkit.entity.Entity; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.events.PacketEvent; + +public class WrapperPlayServerEntityVelocity extends AbstractPacket { + public static final PacketType TYPE = + PacketType.Play.Server.ENTITY_VELOCITY; + + public WrapperPlayServerEntityVelocity() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerEntityVelocity(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Entity ID. + * <p> + * Notes: entity's ID + * + * @return The current Entity ID + */ + public int getEntityID() { + return handle.getIntegers().read(0); + } + + /** + * Set Entity ID. + * + * @param value - new value. + */ + public void setEntityID(int value) { + handle.getIntegers().write(0, value); + } + + /** + * Retrieve the entity of the painting that will be spawned. + * + * @param world - the current world of the entity. + * @return The spawned entity. + */ + public Entity getEntity(World world) { + return handle.getEntityModifier(world).read(0); + } + + /** + * Retrieve the entity of the painting that will be spawned. + * + * @param event - the packet event. + * @return The spawned entity. + */ + public Entity getEntity(PacketEvent event) { + return getEntity(event.getPlayer().getWorld()); + } + + /** + * Retrieve the velocity in the x axis. + * + * @return The current velocity X + */ + public double getVelocityX() { + return handle.getIntegers().read(1) / 8000.0D; + } + + /** + * Set the velocity in the x axis. + * + * @param value - new value. + */ + public void setVelocityX(double value) { + handle.getIntegers().write(1, (int) (value * 8000.0D)); + } + + /** + * Retrieve the velocity in the y axis. + * + * @return The current velocity y + */ + public double getVelocityY() { + return handle.getIntegers().read(2) / 8000.0D; + } + + /** + * Set the velocity in the y axis. + * + * @param value - new value. + */ + public void setVelocityY(double value) { + handle.getIntegers().write(2, (int) (value * 8000.0D)); + } + + /** + * Retrieve the velocity in the z axis. + * + * @return The current velocity z + */ + public double getVelocityZ() { + return handle.getIntegers().read(3) / 8000.0D; + } + + /** + * Set the velocity in the z axis. + * + * @param value - new value. + */ + public void setVelocityZ(double value) { + handle.getIntegers().write(3, (int) (value * 8000.0D)); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerExperience.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerExperience.java new file mode 100644 index 0000000..b5b7d83 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerExperience.java @@ -0,0 +1,93 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperPlayServerExperience extends AbstractPacket { + public static final PacketType TYPE = PacketType.Play.Server.EXPERIENCE; + + public WrapperPlayServerExperience() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerExperience(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Experience bar. + * <p> + * Notes: between 0 and 1 + * + * @return The current Experience bar + */ + public float getExperienceBar() { + return handle.getFloat().read(0); + } + + /** + * Set Experience bar. + * + * @param value - new value. + */ + public void setExperienceBar(float value) { + handle.getFloat().write(0, value); + } + + /** + * Retrieve Level. + * + * @return The current Level + */ + public int getLevel() { + return handle.getIntegers().read(1); + } + + /** + * Set Level. + * + * @param value - new value. + */ + public void setLevel(int value) { + handle.getIntegers().write(1, value); + } + + /** + * Retrieve Total Experience. + * + * @return The current Total Experience + */ + public int getTotalExperience() { + return handle.getIntegers().read(0); + } + + /** + * Set Total Experience. + * + * @param value - new value. + */ + public void setTotalExperience(int value) { + handle.getIntegers().write(0, value); + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerExplosion.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerExplosion.java new file mode 100644 index 0000000..2ac9383 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerExplosion.java @@ -0,0 +1,158 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import java.util.List; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.wrappers.BlockPosition; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperPlayServerExplosion extends AbstractPacket { + public static final PacketType TYPE = PacketType.Play.Server.EXPLOSION; + + public WrapperPlayServerExplosion() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerExplosion(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve X. + * + * @return The current X + */ + public double getX() { + return handle.getDoubles().read(0); + } + + /** + * Set X. + * + * @param value - new value. + */ + public void setX(double value) { + handle.getDoubles().write(0, value); + } + + /** + * Retrieve Y. + * + * @return The current Y + */ + public double getY() { + return handle.getDoubles().read(1); + } + + /** + * Set Y. + * + * @param value - new value. + */ + public void setY(double value) { + handle.getDoubles().write(1, value); + } + + /** + * Retrieve Z. + * + * @return The current Z + */ + public double getZ() { + return handle.getDoubles().read(2); + } + + /** + * Set Z. + * + * @param value - new value. + */ + public void setZ(double value) { + handle.getDoubles().write(2, value); + } + + /** + * Retrieve Radius. + * <p> + * Notes: currently unused in the client + * + * @return The current Radius + */ + public float getRadius() { + return handle.getFloat().read(0); + } + + /** + * Set Radius. + * + * @param value - new value. + */ + public void setRadius(float value) { + handle.getFloat().write(0, value); + } + + /** + * Retrieve Record count. + * <p> + * Notes: this is the count, not the size. The size is 3 times this value. + * + * @return The current Record count + */ + public List<BlockPosition> getRecors() { + return handle.getBlockPositionCollectionModifier().read(0); + } + + /** + * Set Record count. + * + * @param value - new value. + */ + public void setRecords(List<BlockPosition> value) { + handle.getBlockPositionCollectionModifier().write(0, value); + } + + public float getPlayerVelocityX() { + return handle.getFloat().read(0); + } + + public void setPlayerVelocityX(float value) { + handle.getFloat().write(0, value); + } + + public float getPlayerVelocityY() { + return handle.getFloat().read(1); + } + + public void setPlayerVelocityY(float value) { + handle.getFloat().write(1, value); + } + + public float getPlayerVelocityZ() { + return handle.getFloat().read(2); + } + + public void setPlayerVelocityZ(float value) { + handle.getFloat().write(2, value); + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerGameStateChange.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerGameStateChange.java new file mode 100644 index 0000000..c9aba4f --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerGameStateChange.java @@ -0,0 +1,76 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperPlayServerGameStateChange extends AbstractPacket { + public static final PacketType TYPE = + PacketType.Play.Server.GAME_STATE_CHANGE; + + public WrapperPlayServerGameStateChange() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerGameStateChange(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Reason. + * + * @return The current Reason + */ + public int getReason() { + return handle.getIntegers().read(0); + } + + /** + * Set Reason. + * + * @param value - new value. + */ + public void setReason(int value) { + handle.getIntegers().write(0, value); + } + + /** + * Retrieve Value. + * <p> + * Notes: depends on reason + * + * @return The current Value + */ + public float getValue() { + return handle.getFloat().read(0); + } + + /** + * Set Value. + * + * @param value - new value. + */ + public void setValue(float value) { + handle.getFloat().write(0, value); + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerHeldItemSlot.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerHeldItemSlot.java new file mode 100644 index 0000000..fc3e715 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerHeldItemSlot.java @@ -0,0 +1,57 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperPlayServerHeldItemSlot extends AbstractPacket { + public static final PacketType TYPE = PacketType.Play.Server.HELD_ITEM_SLOT; + + public WrapperPlayServerHeldItemSlot() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerHeldItemSlot(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Slot. + * <p> + * Notes: the slot which the player has selected (0-8) + * + * @return The current Slot + */ + public int getSlot() { + return handle.getIntegers().read(0); + } + + /** + * Set Slot. + * + * @param value - new value. + */ + public void setSlot(int value) { + handle.getIntegers().write(0, value); + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerKeepAlive.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerKeepAlive.java new file mode 100644 index 0000000..72fb793 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerKeepAlive.java @@ -0,0 +1,55 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperPlayServerKeepAlive extends AbstractPacket { + public static final PacketType TYPE = PacketType.Play.Server.KEEP_ALIVE; + + public WrapperPlayServerKeepAlive() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerKeepAlive(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Keep Alive ID. + * + * @return The current Keep Alive ID + */ + public int getKeepAliveId() { + return handle.getIntegers().read(0); + } + + /** + * Set Keep Alive ID. + * + * @param value - new value. + */ + public void setKeepAliveId(int value) { + handle.getIntegers().write(0, value); + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerKickDisconnect.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerKickDisconnect.java new file mode 100644 index 0000000..92b548a --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerKickDisconnect.java @@ -0,0 +1,60 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.wrappers.WrappedChatComponent; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperPlayServerKickDisconnect extends AbstractPacket { + public static final PacketType TYPE = + PacketType.Play.Server.KICK_DISCONNECT; + + public WrapperPlayServerKickDisconnect() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerKickDisconnect(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Reason. + * <p> + * Notes: displayed to the client when the connection terminates. Must be + * valid JSON. + * + * @return The current Reason + */ + public WrappedChatComponent getReason() { + return handle.getChatComponents().read(0); + } + + /** + * Set Reason. + * + * @param value - new value. + */ + public void setReason(WrappedChatComponent value) { + handle.getChatComponents().write(0, value); + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerLogin.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerLogin.java new file mode 100644 index 0000000..660aeb9 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerLogin.java @@ -0,0 +1,202 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; +import org.bukkit.World; +import org.bukkit.WorldType; +import org.bukkit.entity.Entity; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.events.PacketEvent; +import com.comphenix.protocol.wrappers.EnumWrappers.Difficulty; +import com.comphenix.protocol.wrappers.EnumWrappers.NativeGameMode; + +public class WrapperPlayServerLogin extends AbstractPacket { + public static final PacketType TYPE = PacketType.Play.Server.LOGIN; + + public WrapperPlayServerLogin() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerLogin(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Entity ID. + * <p> + * Notes: entity's ID + * + * @return The current Entity ID + */ + public int getEntityID() { + return handle.getIntegers().read(0); + } + + /** + * Set Entity ID. + * + * @param value - new value. + */ + public void setEntityID(int value) { + handle.getIntegers().write(0, value); + } + + /** + * Retrieve the entity of the painting that will be spawned. + * + * @param world - the current world of the entity. + * @return The spawned entity. + */ + public Entity getEntity(World world) { + return handle.getEntityModifier(world).read(0); + } + + /** + * Retrieve the entity of the painting that will be spawned. + * + * @param event - the packet event. + * @return The spawned entity. + */ + public Entity getEntity(PacketEvent event) { + return getEntity(event.getPlayer().getWorld()); + } + + /** + * Retrieve Gamemode. + * <p> + * Notes: 0: survival, 1: creative, 2: adventure. Bit 3 (0x8) is the + * hardcore flag + * + * @return The current Gamemode + */ + public NativeGameMode getGamemode() { + return handle.getGameModes().read(0); + } + + /** + * Set Gamemode. + * + * @param value - new value. + */ + public void setGamemode(NativeGameMode value) { + handle.getGameModes().write(0, value); + } + + /** + * Retrieve Dimension. + * <p> + * Notes: -1: nether, 0: overworld, 1: end + * + * @return The current Dimension + */ + public int getDimension() { + return handle.getIntegers().read(0); + } + + /** + * Set Dimension. + * + * @param value - new value. + */ + public void setDimension(int value) { + handle.getIntegers().write(0, value); + } + + /** + * Retrieve Difficulty. + * <p> + * Notes: 0 thru 3 for Peaceful, Easy, Normal, Hard + * + * @return The current Difficulty + */ + public Difficulty getDifficulty() { + return handle.getDifficulties().read(0); + } + + /** + * Set Difficulty. + * + * @param value - new value. + */ + public void setDifficulty(Difficulty value) { + handle.getDifficulties().write(0, value); + } + + /** + * Retrieve Max Players. + * <p> + * Notes: used by the client to draw the player list + * + * @return The current Max Players + */ + public int getMaxPlayers() { + return handle.getIntegers().read(1); + } + + /** + * Set Max Players. + * + * @param value - new value. + */ + public void setMaxPlayers(int value) { + handle.getIntegers().write(0, value); + } + + /** + * Retrieve Level Type. + * <p> + * Notes: default, flat, largeBiomes, amplified, default_1_1 + * + * @return The current Level Type + */ + public WorldType getLevelType() { + return handle.getWorldTypeModifier().read(0); + } + + /** + * Set Level Type. + * + * @param value - new value. + */ + public void setLevelType(WorldType value) { + handle.getWorldTypeModifier().write(0, value); + } + + /** + * Retrieve Reduced Debug Info. + * + * @return The current Reduced Debug Info + */ + public boolean getReducedDebugInfo() { + return handle.getBooleans().read(0); + } + + /** + * Set Reduced Debug Info. + * + * @param value - new value. + */ + public void setReducedDebugInfo(boolean value) { + handle.getBooleans().write(0, value); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerMap.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerMap.java new file mode 100644 index 0000000..b945957 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerMap.java @@ -0,0 +1,130 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperPlayServerMap extends AbstractPacket { + public static final PacketType TYPE = PacketType.Play.Server.MAP; + + public WrapperPlayServerMap() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerMap(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Item Damage. + * <p> + * Notes: the damage value of the map being modified + * + * @return The current Item Damage + */ + public int getItemDamage() { + return handle.getIntegers().read(0); + } + + /** + * Set Item Damage. + * + * @param value - new value. + */ + public void setItemDamage(int value) { + handle.getIntegers().write(0, value); + } + + /** + * Retrieve Scale. + * + * @return The current Scale + */ + public byte getScale() { + return handle.getBytes().read(0); + } + + /** + * Set Scale. + * + * @param value - new value. + */ + public void setScale(byte value) { + handle.getBytes().write(0, value); + } + + public boolean getTrackingPosition() { + return handle.getBooleans().read(0); + } + + public void setTrackingPosition(boolean value) { + handle.getBooleans().write(0, value); + } + + public Object[] getMapIcons() { + return (Object[]) handle.getModifier().read(3); + } + + public void setMapIcons(Object[] value) { + handle.getModifier().write(3, value); + } + + public int getColumns() { + return handle.getIntegers().read(3); + } + + public void setColumns(int value) { + handle.getIntegers().write(3, value); + } + + public int getRows() { + return handle.getIntegers().read(4); + } + + public void setRows(int value) { + handle.getIntegers().write(4, value); + } + + public int getX() { + return handle.getIntegers().read(1); + } + + public void setX(int value) { + handle.getIntegers().write(1, value); + } + + public int getZ() { + return handle.getIntegers().read(2); + } + + public void setZ(int value) { + handle.getIntegers().write(2, value); + } + + public byte[] getData() { + return handle.getByteArrays().read(0); + } + + public void setData(byte[] value) { + handle.getByteArrays().write(0, value); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerMapChunk.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerMapChunk.java new file mode 100644 index 0000000..7462228 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerMapChunk.java @@ -0,0 +1,106 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperPlayServerMapChunk extends AbstractPacket { + public static final PacketType TYPE = PacketType.Play.Server.MAP_CHUNK; + + public WrapperPlayServerMapChunk() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerMapChunk(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Chunk X. + * <p> + * Notes: chunk X coordinate + * + * @return The current Chunk X + */ + public int getChunkX() { + return handle.getIntegers().read(0); + } + + /** + * Set Chunk X. + * + * @param value - new value. + */ + public void setChunkX(int value) { + handle.getIntegers().write(0, value); + } + + /** + * Retrieve Chunk Z. + * <p> + * Notes: chunk Z coordinate + * + * @return The current Chunk Z + */ + public int getChunkZ() { + return handle.getIntegers().read(1); + } + + /** + * Set Chunk Z. + * + * @param value - new value. + */ + public void setChunkZ(int value) { + handle.getIntegers().write(1, value); + } + + public Object getChunkMap() { + return handle.getModifier().read(2); + } + + public void setChunkMap(Object value) { + handle.getModifier().write(2, value); + } + + /** + * Retrieve Ground-Up continuous. + * <p> + * Notes: this is True if the packet represents all sections in this + * vertical column, where the primary bit map specifies exactly which + * sections are included, and which are air + * + * @return The current Ground-Up continuous + */ + public boolean getGroundUpContinuous() { + return handle.getBooleans().read(0); + } + + /** + * Set Ground-Up continuous. + * + * @param value - new value. + */ + public void setGroundUpContinuous(boolean value) { + handle.getBooleans().write(0, value); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerMount.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerMount.java new file mode 100644 index 0000000..90229ad --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerMount.java @@ -0,0 +1,125 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import java.util.ArrayList; +import java.util.List; + +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; +import org.bukkit.World; +import org.bukkit.entity.Entity; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.ProtocolLibrary; +import com.comphenix.protocol.ProtocolManager; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.events.PacketEvent; + +public class WrapperPlayServerMount extends AbstractPacket { + + public static final PacketType TYPE = PacketType.Play.Server.MOUNT; + + public WrapperPlayServerMount() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerMount(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Entity ID. + * <p> + * Notes: vehicle's EID + * + * @return The current Entity ID + */ + public int getEntityID() { + return handle.getIntegers().read(0); + } + + /** + * Retrieve the entity involved in this event. + * + * @param world - the current world of the entity. + * @return The involved entity. + */ + public Entity getEntity(World world) { + return handle.getEntityModifier(world).read(0); + } + + /** + * Retrieve the entity involved in this event. + * + * @param event - the packet event. + * @return The involved entity. + */ + public Entity getEntity(PacketEvent event) { + return getEntity(event.getPlayer().getWorld()); + } + + /** + * Set Entity ID. + * + * @param value - new value. + */ + public WrapperPlayServerMount setEntityID(int value) { + handle.getIntegers().write(0, value); + return this; + } + + public int[] getPassengerIds() { + return handle.getIntegerArrays().read(0); + } + + public WrapperPlayServerMount setPassengerIds(int[] value) { + handle.getIntegerArrays().write(0, value); + return this; + } + + public List<Entity> getPassengers(PacketEvent event) { + return getPassengers(event.getPlayer().getWorld()); + } + + public List<Entity> getPassengers(World world) { + int[] ids = getPassengerIds(); + List<Entity> passengers = new ArrayList<>(); + ProtocolManager manager = ProtocolLibrary.getProtocolManager(); + + for (int id : ids) { + Entity entity = manager.getEntityFromID(world, id); + if (entity != null) { + passengers.add(entity); + } + } + + return passengers; + } + + public WrapperPlayServerMount setPassengers(List<Entity> value) { + int[] array = new int[value.size()]; + for (int i = 0; i < value.size(); i++) { + array[i] = value.get(i).getEntityId(); + } + + setPassengerIds(array); + return this; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerMultiBlockChange.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerMultiBlockChange.java new file mode 100644 index 0000000..15a6b2a --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerMultiBlockChange.java @@ -0,0 +1,75 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.wrappers.ChunkCoordIntPair; +import com.comphenix.protocol.wrappers.MultiBlockChangeInfo; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperPlayServerMultiBlockChange extends AbstractPacket { + public static final PacketType TYPE = + PacketType.Play.Server.MULTI_BLOCK_CHANGE; + + public WrapperPlayServerMultiBlockChange() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerMultiBlockChange(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve the chunk that has been altered. + * + * @return The current chunk + */ + public ChunkCoordIntPair getChunk() { + return handle.getChunkCoordIntPairs().read(0); + } + + /** + * Set the chunk that has been altered. + * + * @param value - new value + */ + public void setChunk(ChunkCoordIntPair value) { + handle.getChunkCoordIntPairs().write(0, value); + } + + /** + * Retrieve a copy of the record data as a block change array. + * + * @return The copied block change array. + */ + public MultiBlockChangeInfo[] getRecords() { + return handle.getMultiBlockChangeInfoArrays().read(0); + } + + /** + * Set the record data using the given helper array. + * + * @param value - new value + */ + public void setRecords(MultiBlockChangeInfo[] value) { + handle.getMultiBlockChangeInfoArrays().write(0, value); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerNamedEntitySpawn.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerNamedEntitySpawn.java new file mode 100644 index 0000000..9808e7d --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerNamedEntitySpawn.java @@ -0,0 +1,205 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import java.util.UUID; + +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; +import org.bukkit.World; +import org.bukkit.entity.Entity; +import org.bukkit.util.Vector; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.events.PacketEvent; +import com.comphenix.protocol.wrappers.WrappedDataWatcher; + +public class WrapperPlayServerNamedEntitySpawn extends AbstractPacket { + public static final PacketType TYPE = + PacketType.Play.Server.NAMED_ENTITY_SPAWN; + + public WrapperPlayServerNamedEntitySpawn() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerNamedEntitySpawn(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Entity ID. + * <p> + * Notes: entity's ID + * + * @return The current Entity ID + */ + public int getEntityID() { + return handle.getIntegers().read(0); + } + + /** + * Set Entity ID. + * + * @param value - new value. + */ + public void setEntityID(int value) { + handle.getIntegers().write(0, value); + } + + /** + * Retrieve the entity of the painting that will be spawned. + * + * @param world - the current world of the entity. + * @return The spawned entity. + */ + public Entity getEntity(World world) { + return handle.getEntityModifier(world).read(0); + } + + /** + * Retrieve the entity of the painting that will be spawned. + * + * @param event - the packet event. + * @return The spawned entity. + */ + public Entity getEntity(PacketEvent event) { + return getEntity(event.getPlayer().getWorld()); + } + + /** + * Retrieve Player UUID. + * <p> + * Notes: player's UUID + * + * @return The current Player UUID + */ + public UUID getPlayerUUID() { + return handle.getUUIDs().read(0); + } + + /** + * Set Player UUID. + * + * @param value - new value. + */ + public void setPlayerUUID(UUID value) { + handle.getUUIDs().write(0, value); + } + + /** + * Retrieve the position of the spawned entity as a vector. + * + * @return The position as a vector. + */ + public Vector getPosition() { + return new Vector(getX(), getY(), getZ()); + } + + /** + * Set the position of the spawned entity using a vector. + * + * @param position - the new position. + */ + public void setPosition(Vector position) { + setX(position.getX()); + setY(position.getY()); + setZ(position.getZ()); + } + + public double getX() { + return handle.getDoubles().read(0); + } + + public void setX(double value) { + handle.getDoubles().write(0, value); + } + + public double getY() { + return handle.getDoubles().read(1); + } + + public void setY(double value) { + handle.getDoubles().write(1, value); + } + + public double getZ() { + return handle.getDoubles().read(2); + } + + public void setZ(double value) { + handle.getDoubles().write(2, value); + } + + /** + * Retrieve the yaw of the spawned entity. + * + * @return The current Yaw + */ + public float getYaw() { + return (handle.getBytes().read(0) * 360.F) / 256.0F; + } + + /** + * Set the yaw of the spawned entity. + * + * @param value - new yaw. + */ + public void setYaw(float value) { + handle.getBytes().write(0, (byte) (value * 256.0F / 360.0F)); + } + + /** + * Retrieve the pitch of the spawned entity. + * + * @return The current pitch + */ + public float getPitch() { + return (handle.getBytes().read(1) * 360.F) / 256.0F; + } + + /** + * Set the pitch of the spawned entity. + * + * @param value - new pitch. + */ + public void setPitch(float value) { + handle.getBytes().write(1, (byte) (value * 256.0F / 360.0F)); + } + + /** + * Retrieve Metadata. + * <p> + * Notes: the client will crash if no metadata is sent + * + * @return The current Metadata + */ + public WrappedDataWatcher getMetadata() { + return handle.getDataWatcherModifier().read(0); + } + + /** + * Set Metadata. + * + * @param value - new value. + */ + public void setMetadata(WrappedDataWatcher value) { + handle.getDataWatcherModifier().write(0, value); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerNamedSoundEffect.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerNamedSoundEffect.java new file mode 100644 index 0000000..d47398a --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerNamedSoundEffect.java @@ -0,0 +1,157 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; +import org.bukkit.Sound; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.wrappers.EnumWrappers.SoundCategory; + +public class WrapperPlayServerNamedSoundEffect extends AbstractPacket { + public static final PacketType TYPE = + PacketType.Play.Server.NAMED_SOUND_EFFECT; + + public WrapperPlayServerNamedSoundEffect() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerNamedSoundEffect(PacketContainer packet) { + super(packet, TYPE); + } + + public Sound getSoundEffect() { + return handle.getSoundEffects().read(0); + } + + public void setSoundEffect(Sound value) { + handle.getSoundEffects().write(0, value); + } + + public SoundCategory getSoundCategory() { + return handle.getSoundCategories().read(0); + } + + public void setSoundCategory(SoundCategory value) { + handle.getSoundCategories().write(0, value); + } + + /** + * Retrieve Effect position X. + * <p> + * Notes: effect X multiplied by 8 + * + * @return The current Effect position X + */ + public int getEffectPositionX() { + return handle.getIntegers().read(0); + } + + /** + * Set Effect position X. + * + * @param value - new value. + */ + public void setEffectPositionX(int value) { + handle.getIntegers().write(0, value); + } + + /** + * Retrieve Effect position Y. + * <p> + * Notes: effect Y multiplied by 8 + * + * @return The current Effect position Y + */ + public int getEffectPositionY() { + return handle.getIntegers().read(1); + } + + /** + * Set Effect position Y. + * + * @param value - new value. + */ + public void setEffectPositionY(int value) { + handle.getIntegers().write(1, value); + } + + /** + * Retrieve Effect position Z. + * <p> + * Notes: effect Z multiplied by 8 + * + * @return The current Effect position Z + */ + public int getEffectPositionZ() { + return handle.getIntegers().read(2); + } + + /** + * Set Effect position Z. + * + * @param value - new value. + */ + public void setEffectPositionZ(int value) { + handle.getIntegers().write(2, value); + } + + /** + * Retrieve Volume. + * <p> + * Notes: 1 is 100%, can be more + * + * @return The current Volume + */ + public float getVolume() { + return handle.getFloat().read(0); + } + + /** + * Set Volume. + * + * @param value - new value. + */ + public void setVolume(float value) { + handle.getFloat().write(0, value); + } + + /** + * Retrieve Pitch. + * <p> + * Notes: 63 is 100%, can be more + * + * @return The current Pitch + */ + public float getPitch() { + return handle.getFloat().read(1); + } + + /** + * Set Pitch. + * + * @param value - new value. + */ + public void setPitch(float value) { + handle.getFloat().write(1, value); + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerOpenSignEditor.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerOpenSignEditor.java new file mode 100644 index 0000000..e81f800 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerOpenSignEditor.java @@ -0,0 +1,58 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.wrappers.BlockPosition; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperPlayServerOpenSignEditor extends AbstractPacket { + + public static final PacketType TYPE = + PacketType.Play.Server.OPEN_SIGN_EDITOR; + + public WrapperPlayServerOpenSignEditor() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerOpenSignEditor(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Location. + * + * @return The current Location + */ + public BlockPosition getLocation() { + return handle.getBlockPositionModifier().read(0); + } + + /** + * Set Location. + * + * @param value - new value. + */ + public void setLocation(BlockPosition value) { + handle.getBlockPositionModifier().write(0, value); + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerOpenWindow.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerOpenWindow.java new file mode 100644 index 0000000..9b135ed --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerOpenWindow.java @@ -0,0 +1,163 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; +import org.bukkit.World; +import org.bukkit.entity.Entity; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.events.PacketEvent; +import com.comphenix.protocol.wrappers.WrappedChatComponent; + +public class WrapperPlayServerOpenWindow extends AbstractPacket { + public static final PacketType TYPE = PacketType.Play.Server.OPEN_WINDOW; + + public WrapperPlayServerOpenWindow() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerOpenWindow(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Window id. + * <p> + * Notes: a unique id number for the window to be displayed. Notchian server + * implementation is a counter, starting at 1. + * + * @return The current Window id + */ + public int getWindowID() { + return handle.getIntegers().read(0); + } + + /** + * Set Window id. + * + * @param value - new value. + */ + public void setWindowID(int value) { + handle.getIntegers().write(0, value); + } + + /** + * Retrieve Inventory Type. + * <p> + * Notes: the window type to use for display. Check below + * + * @return The current Inventory Type + */ + public String getInventoryType() { + return handle.getStrings().read(0); + } + + /** + * Set Inventory Type. + * + * @param value - new value. + */ + public void setInventoryType(String value) { + handle.getStrings().write(0, value); + } + + /** + * Retrieve Window title. + * <p> + * Notes: the title of the window. + * + * @return The current Window title + */ + public WrappedChatComponent getWindowTitle() { + return handle.getChatComponents().read(0); + } + + /** + * Set Window title. + * + * @param value - new value. + */ + public void setWindowTitle(WrappedChatComponent value) { + handle.getChatComponents().write(0, value); + } + + /** + * Retrieve Number of Slots. + * <p> + * Notes: number of slots in the window (excluding the number of slots in + * the player inventory). + * + * @return The current Number of Slots + */ + public int getNumberOfSlots() { + return handle.getIntegers().read(1); + } + + /** + * Set Number of Slots. + * + * @param value - new value. + */ + public void setNumberOfSlots(int value) { + handle.getIntegers().write(1, value); + } + + /** + * Retrieve Entity ID. + * <p> + * Notes: entity's ID + * + * @return The current Entity ID + */ + public int getEntityID() { + return handle.getIntegers().read(0); + } + + /** + * Set Entity ID. + * + * @param value - new value. + */ + public void setEntityID(int value) { + handle.getIntegers().write(0, value); + } + + /** + * Retrieve the entity of the painting that will be spawned. + * + * @param world - the current world of the entity. + * @return The spawned entity. + */ + public Entity getEntity(World world) { + return handle.getEntityModifier(world).read(0); + } + + /** + * Retrieve the entity of the painting that will be spawned. + * + * @param event - the packet event. + * @return The spawned entity. + */ + public Entity getEntity(PacketEvent event) { + return getEntity(event.getPlayer().getWorld()); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerPlayerInfo.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerPlayerInfo.java new file mode 100644 index 0000000..627c0b9 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerPlayerInfo.java @@ -0,0 +1,56 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import java.util.List; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.wrappers.EnumWrappers.PlayerInfoAction; +import com.comphenix.protocol.wrappers.PlayerInfoData; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperPlayServerPlayerInfo extends AbstractPacket { + public static final PacketType TYPE = PacketType.Play.Server.PLAYER_INFO; + + public WrapperPlayServerPlayerInfo() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerPlayerInfo(PacketContainer packet) { + super(packet, TYPE); + } + + public PlayerInfoAction getAction() { + return handle.getPlayerInfoAction().read(0); + } + + public void setAction(PlayerInfoAction value) { + handle.getPlayerInfoAction().write(0, value); + } + + public List<PlayerInfoData> getData() { + return handle.getPlayerInfoDataLists().read(0); + } + + public void setData(List<PlayerInfoData> value) { + handle.getPlayerInfoDataLists().write(0, value); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerPlayerListHeaderFooter.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerPlayerListHeaderFooter.java new file mode 100644 index 0000000..9096724 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerPlayerListHeaderFooter.java @@ -0,0 +1,75 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.wrappers.WrappedChatComponent; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperPlayServerPlayerListHeaderFooter extends AbstractPacket { + public static final PacketType TYPE = + PacketType.Play.Server.PLAYER_LIST_HEADER_FOOTER; + + public WrapperPlayServerPlayerListHeaderFooter() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerPlayerListHeaderFooter(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Header. + * + * @return The current Header + */ + public WrappedChatComponent getHeader() { + return handle.getChatComponents().read(0); + } + + /** + * Set Header. + * + * @param value - new value. + */ + public void setHeader(WrappedChatComponent value) { + handle.getChatComponents().write(0, value); + } + + /** + * Retrieve Footer. + * + * @return The current Footer + */ + public WrappedChatComponent getFooter() { + return handle.getChatComponents().read(1); + } + + /** + * Set Footer. + * + * @param value - new value. + */ + public void setFooter(WrappedChatComponent value) { + handle.getChatComponents().write(1, value); + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerPosition.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerPosition.java new file mode 100644 index 0000000..93aa972 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerPosition.java @@ -0,0 +1,162 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import java.util.Set; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.reflect.StructureModifier; +import com.comphenix.protocol.utility.MinecraftReflection; +import com.comphenix.protocol.wrappers.EnumWrappers; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperPlayServerPosition extends AbstractPacket { + public static final PacketType TYPE = PacketType.Play.Server.POSITION; + + public WrapperPlayServerPosition() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerPosition(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve X. + * <p> + * Notes: absolute/Relative position + * + * @return The current X + */ + public double getX() { + return handle.getDoubles().read(0); + } + + /** + * Set X. + * + * @param value - new value. + */ + public void setX(double value) { + handle.getDoubles().write(0, value); + } + + /** + * Retrieve Y. + * <p> + * Notes: absolute/Relative position + * + * @return The current Y + */ + public double getY() { + return handle.getDoubles().read(1); + } + + /** + * Set Y. + * + * @param value - new value. + */ + public void setY(double value) { + handle.getDoubles().write(1, value); + } + + /** + * Retrieve Z. + * <p> + * Notes: absolute/Relative position + * + * @return The current Z + */ + public double getZ() { + return handle.getDoubles().read(2); + } + + /** + * Set Z. + * + * @param value - new value. + */ + public void setZ(double value) { + handle.getDoubles().write(2, value); + } + + /** + * Retrieve Yaw. + * <p> + * Notes: absolute/Relative rotation on the X Axis, in degrees + * + * @return The current Yaw + */ + public float getYaw() { + return handle.getFloat().read(0); + } + + /** + * Set Yaw. + * + * @param value - new value. + */ + public void setYaw(float value) { + handle.getFloat().write(0, value); + } + + /** + * Retrieve Pitch. + * <p> + * Notes: absolute/Relative rotation on the Y Axis, in degrees + * + * @return The current Pitch + */ + public float getPitch() { + return handle.getFloat().read(1); + } + + /** + * Set Pitch. + * + * @param value - new value. + */ + public void setPitch(float value) { + handle.getFloat().write(1, value); + } + + private static final Class<?> FLAGS_CLASS = MinecraftReflection + .getMinecraftClass("EnumPlayerTeleportFlags", + "PacketPlayOutPosition$EnumPlayerTeleportFlags"); + + public enum PlayerTeleportFlag { + X, Y, Z, Y_ROT, X_ROT + } + + private StructureModifier<Set<PlayerTeleportFlag>> getFlagsModifier() { + return handle.getSets( + EnumWrappers.getGenericConverter(FLAGS_CLASS, PlayerTeleportFlag.class)); + } + + public Set<PlayerTeleportFlag> getFlags() { + return getFlagsModifier().read(0); + } + + public void setFlags(Set<PlayerTeleportFlag> value) { + getFlagsModifier().write(0, value); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerRecipes.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerRecipes.java new file mode 100644 index 0000000..daeca99 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerRecipes.java @@ -0,0 +1,99 @@ +/** + * This file is part of PacketWrapper. + * Copyright (C) 2012-2015 Kristian S. Strangeland + * Copyright (C) 2015 dmulloy2 + * + * PacketWrapper is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * PacketWrapper 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 General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with PacketWrapper. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperPlayServerRecipes extends AbstractPacket { + + public static final PacketType TYPE = PacketType.Play.Server.RECIPES; + + public WrapperPlayServerRecipes() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerRecipes(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Action. + * <p> + * Notes: 0: init, 1: add, 2: remove + * @return The current Action + */ + public Action getAction() { + return handle.getEnumModifier(Action.class, 0).readSafely(0); + } + + /** + * Set Action. + * @param value - new value. + */ + public void setAction(Action value) { + handle.getEnumModifier(Action.class, 0).writeSafely(0, value); + } + + /** + * Retrieve Crafting Book Open. + * <p> + * Notes: if true, then the crafting book will be open when the player opens its inventory. + * @return The current Crafting Book Open + */ + public boolean getCraftingBookOpen() { + return handle.getBooleans().read(0); + } + + /** + * Set Crafting Book Open. + * @param value - new value. + */ + public void setCraftingBookOpen(boolean value) { + handle.getBooleans().write(0, value); + } + + /** + * Retrieve Filtering Craftable. + * <p> + * Notes: if true, then the filtering option is active when the players opens its inventory. + * @return The current Filtering Craftable + */ + public boolean getFilteringCraftable() { + return handle.getBooleans().read(0); + } + + /** + * Set Filtering Craftable. + * @param value - new value. + */ + public void setFilteringCraftable(boolean value) { + handle.getBooleans().write(0, value); + } + + // recipe ids + + public enum Action { + INIT, + ADD, + REMOVE; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerRelEntityMove.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerRelEntityMove.java new file mode 100644 index 0000000..9cf3a54 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerRelEntityMove.java @@ -0,0 +1,123 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; +import org.bukkit.World; +import org.bukkit.entity.Entity; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.events.PacketEvent; + +public class WrapperPlayServerRelEntityMove extends AbstractPacket { + public static final PacketType TYPE = + PacketType.Play.Server.REL_ENTITY_MOVE; + + public WrapperPlayServerRelEntityMove() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerRelEntityMove(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Entity ID. + * <p> + * Notes: entity's ID + * + * @return The current Entity ID + */ + public int getEntityID() { + return handle.getIntegers().read(0); + } + + /** + * Set Entity ID. + * + * @param value - new value. + */ + public void setEntityID(int value) { + handle.getIntegers().write(0, value); + } + + /** + * Retrieve the entity of the painting that will be spawned. + * + * @param world - the current world of the entity. + * @return The spawned entity. + */ + public Entity getEntity(World world) { + return handle.getEntityModifier(world).read(0); + } + + /** + * Retrieve the entity of the painting that will be spawned. + * + * @param event - the packet event. + * @return The spawned entity. + */ + public Entity getEntity(PacketEvent event) { + return getEntity(event.getPlayer().getWorld()); + } + + public int getDx() { + return handle.getIntegers().read(1); + } + + public void setDx(int value) { + handle.getIntegers().write(1, value); + } + + public int getDy() { + return handle.getIntegers().read(2); + } + + public void setDy(int value) { + handle.getIntegers().write(2, value); + } + + public int getDz() { + return handle.getIntegers().read(3); + } + + public void setDz(int value) { + handle.getIntegers().write(3, value); + } + + /** + * Retrieve On Ground. + * + * @return The current On Ground + */ + public boolean getOnGround() { + return handle.getBooleans().read(0); + } + + /** + * Set On Ground. + * + * @param value - new value. + */ + public void setOnGround(boolean value) { + handle.getBooleans().write(0, value); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerRelEntityMoveLook.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerRelEntityMoveLook.java new file mode 100644 index 0000000..27bb151 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerRelEntityMoveLook.java @@ -0,0 +1,189 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; +import org.bukkit.World; +import org.bukkit.entity.Entity; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.events.PacketEvent; + +public class WrapperPlayServerRelEntityMoveLook extends AbstractPacket { + public static final PacketType TYPE = + PacketType.Play.Server.REL_ENTITY_MOVE_LOOK; + + public WrapperPlayServerRelEntityMoveLook() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerRelEntityMoveLook(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Entity ID. + * <p> + * Notes: entity's ID + * + * @return The current Entity ID + */ + public int getEntityID() { + return handle.getIntegers().read(0); + } + + /** + * Set Entity ID. + * + * @param value - new value. + */ + public void setEntityID(int value) { + handle.getIntegers().write(0, value); + } + + /** + * Retrieve the entity of the painting that will be spawned. + * + * @param world - the current world of the entity. + * @return The spawned entity. + */ + public Entity getEntity(World world) { + return handle.getEntityModifier(world).read(0); + } + + /** + * Retrieve the entity of the painting that will be spawned. + * + * @param event - the packet event. + * @return The spawned entity. + */ + public Entity getEntity(PacketEvent event) { + return getEntity(event.getPlayer().getWorld()); + } + + /** + * Retrieve DX. + * + * @return The current DX + */ + public double getDx() { + return handle.getIntegers().read(1) / 4096D; + } + + /** + * Set DX. + * + * @param value - new value. + */ + public void setDx(double value) { + handle.getIntegers().write(1, (int) (value * 4096)); + } + + /** + * Retrieve DY. + * + * @return The current DY + */ + public double getDy() { + return handle.getIntegers().read(2) / 4096D; + } + + /** + * Set DY. + * + * @param value - new value. + */ + public void setDy(double value) { + handle.getIntegers().write(2, (int) (value * 4096)); + } + + /** + * Retrieve DZ. + * + * @return The current DZ + */ + public double getDz() { + return handle.getIntegers().read(3) / 4096D; + } + + /** + * Set DZ. + * + * @param value - new value. + */ + public void setDz(double value) { + handle.getIntegers().write(3, (int) (value * 4096)); + } + + /** + * Retrieve the yaw of the current entity. + * + * @return The current Yaw + */ + public float getYaw() { + return (handle.getBytes().read(0) * 360.F) / 256.0F; + } + + /** + * Set the yaw of the current entity. + * + * @param value - new yaw. + */ + public void setYaw(float value) { + handle.getBytes().write(0, (byte) (value * 256.0F / 360.0F)); + } + + /** + * Retrieve the pitch of the current entity. + * + * @return The current pitch + */ + public float getPitch() { + return (handle.getBytes().read(1) * 360.F) / 256.0F; + } + + /** + * Set the pitch of the current entity. + * + * @param value - new pitch. + */ + public void setPitch(float value) { + handle.getBytes().write(1, (byte) (value * 256.0F / 360.0F)); + } + + /** + * Retrieve On Ground. + * + * @return The current On Ground + */ + public boolean getOnGround() { + return handle.getBooleans().read(0); + } + + /** + * Set On Ground. + * + * @param value - new value. + */ + public void setOnGround(boolean value) { + handle.getBooleans().write(0, value); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerRemoveEntityEffect.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerRemoveEntityEffect.java new file mode 100644 index 0000000..0b5af05 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerRemoveEntityEffect.java @@ -0,0 +1,90 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; +import org.bukkit.World; +import org.bukkit.entity.Entity; +import org.bukkit.potion.PotionEffectType; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.events.PacketEvent; + +public class WrapperPlayServerRemoveEntityEffect extends AbstractPacket { + public static final PacketType TYPE = + PacketType.Play.Server.REMOVE_ENTITY_EFFECT; + + public WrapperPlayServerRemoveEntityEffect() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerRemoveEntityEffect(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Entity ID. + * <p> + * Notes: entity's ID + * + * @return The current Entity ID + */ + public int getEntityID() { + return handle.getIntegers().read(0); + } + + /** + * Set Entity ID. + * + * @param value - new value. + */ + public void setEntityID(int value) { + handle.getIntegers().write(0, value); + } + + /** + * Retrieve the entity of the painting that will be spawned. + * + * @param world - the current world of the entity. + * @return The spawned entity. + */ + public Entity getEntity(World world) { + return handle.getEntityModifier(world).read(0); + } + + /** + * Retrieve the entity of the painting that will be spawned. + * + * @param event - the packet event. + * @return The spawned entity. + */ + public Entity getEntity(PacketEvent event) { + return getEntity(event.getPlayer().getWorld()); + } + + public PotionEffectType getEffect() { + return handle.getEffectTypes().read(0); + } + + public void setEffect(PotionEffectType value) { + handle.getEffectTypes().write(0, value); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerResourcePackSend.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerResourcePackSend.java new file mode 100644 index 0000000..4f36485 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerResourcePackSend.java @@ -0,0 +1,82 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperPlayServerResourcePackSend extends AbstractPacket { + public static final PacketType TYPE = + PacketType.Play.Server.RESOURCE_PACK_SEND; + + public WrapperPlayServerResourcePackSend() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerResourcePackSend(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve URL. + * <p> + * Notes: the URL to the resource pack. + * + * @return The current URL + */ + public String getUrl() { + return handle.getStrings().read(0); + } + + /** + * Set URL. + * + * @param value - new value. + */ + public void setUrl(String value) { + handle.getStrings().write(0, value); + } + + /** + * Retrieve Hash. + * <p> + * Notes: a 40 character hexadecimal and lower-case SHA-1 hash of the + * resource pack file. (must be lower case in order to work) If it's not a + * 40 character hexadecimal string, the client will not use it for hash + * verification and likely waste bandwidth - but it will still treat it as a + * unique id + * + * @return The current Hash + */ + public String getHash() { + return handle.getStrings().read(1); + } + + /** + * Set Hash. + * + * @param value - new value. + */ + public void setHash(String value) { + handle.getStrings().write(1, value); + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerRespawn.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerRespawn.java new file mode 100644 index 0000000..7b0b21d --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerRespawn.java @@ -0,0 +1,122 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; +import org.bukkit.WorldType; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.wrappers.EnumWrappers.Difficulty; +import com.comphenix.protocol.wrappers.EnumWrappers.NativeGameMode; + +public class WrapperPlayServerRespawn extends AbstractPacket { + public static final PacketType TYPE = PacketType.Play.Server.RESPAWN; + + public WrapperPlayServerRespawn() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerRespawn(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Dimension. + * <p> + * Notes: -1: The Nether, 0: The Overworld, 1: The End + * + * @return The current Dimension + */ + public int getDimension() { + return handle.getIntegers().read(0); + } + + /** + * Set Dimension. + * + * @param value - new value. + */ + public void setDimension(int value) { + handle.getIntegers().write(0, value); + } + + /** + * Retrieve Difficulty. + * <p> + * Notes: 0 thru 3 for Peaceful, Easy, Normal, Hard. + * + * @return The current Difficulty + */ + public Difficulty getDifficulty() { + return handle.getDifficulties().read(0); + } + + /** + * Set Difficulty. + * + * @param value - new value. + */ + public void setDifficulty(Difficulty value) { + handle.getDifficulties().write(0, value); + } + + /** + * Retrieve Gamemode. + * <p> + * Notes: 0: survival, 1: creative, 2: adventure. The hardcore flag is not + * included + * + * @return The current Gamemode + */ + public NativeGameMode getGamemode() { + return handle.getGameModes().read(0); + } + + /** + * Set Gamemode. + * + * @param value - new value. + */ + public void setGamemode(NativeGameMode value) { + handle.getGameModes().write(0, value); + } + + /** + * Retrieve Level Type. + * <p> + * Notes: same as Join Game + * + * @return The current Level Type + */ + public WorldType getLevelType() { + return handle.getWorldTypeModifier().read(0); + } + + /** + * Set Level Type. + * + * @param value - new value. + */ + public void setLevelType(WorldType value) { + handle.getWorldTypeModifier().write(0, value); + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerScoreboardDisplayObjective.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerScoreboardDisplayObjective.java new file mode 100644 index 0000000..1850c96 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerScoreboardDisplayObjective.java @@ -0,0 +1,79 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperPlayServerScoreboardDisplayObjective extends AbstractPacket { + public static final PacketType TYPE = + PacketType.Play.Server.SCOREBOARD_DISPLAY_OBJECTIVE; + + public WrapperPlayServerScoreboardDisplayObjective() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerScoreboardDisplayObjective(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Position. + * <p> + * Notes: the position of the scoreboard. 0 = list, 1 = sidebar, 2 = + * belowName. + * + * @return The current Position + */ + public int getPosition() { + return handle.getIntegers().read(0); + } + + /** + * Set Position. + * + * @param value - new value. + */ + public void setPosition(int value) { + handle.getIntegers().write(0, value); + } + + /** + * Retrieve Score Name. + * <p> + * Notes: the unique name for the scoreboard to be displayed. + * + * @return The current Score Name + */ + public String getScoreName() { + return handle.getStrings().read(0); + } + + /** + * Set Score Name. + * + * @param value - new value. + */ + public void setScoreName(String value) { + handle.getStrings().write(0, value); + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerScoreboardObjective.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerScoreboardObjective.java new file mode 100644 index 0000000..a6314d3 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerScoreboardObjective.java @@ -0,0 +1,141 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.reflect.IntEnum; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperPlayServerScoreboardObjective extends AbstractPacket { + public static final PacketType TYPE = + PacketType.Play.Server.SCOREBOARD_OBJECTIVE; + + public WrapperPlayServerScoreboardObjective() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerScoreboardObjective(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Enum containing all known packet modes. + * + * @author dmulloy2 + */ + public static class Mode extends IntEnum { + public static final int ADD_OBJECTIVE = 0; + public static final int REMOVE_OBJECTIVE = 1; + public static final int UPDATE_VALUE = 2; + + private static final Mode INSTANCE = new Mode(); + + public static Mode getInstance() { + return INSTANCE; + } + } + + /** + * Retrieve Objective name. + * <p> + * Notes: an unique name for the objective + * + * @return The current Objective name + */ + public String getName() { + return handle.getStrings().read(0); + } + + /** + * Set Objective name. + * + * @param value - new value. + */ + public void setName(String value) { + handle.getStrings().write(0, value); + } + + /** + * Retrieve Objective DisplayName. + * <p> + * Notes: only if mode is 0 or 2. The text to be displayed for the score. + * + * @return The current Objective value + */ + public String getDisplayName() { + return handle.getStrings().read(1); + } + + /** + * Set Objective DisplayName. + * + * @param value - new value. + */ + public void setDisplayName(String value) { + handle.getStrings().write(1, value); + } + + /** + * Retrieve health display. + * <p> + * Notes: Can be either INTEGER or HEARTS + * + * @return + */ + public HealthDisplay getHealthDisplay() { + return handle.getEnumModifier(HealthDisplay.class, 2).read(0); + } + + /** + * Set health display. + * + * @param value - value + * @see #getHealthDisplay() + */ + public void setHealthDisplay(HealthDisplay value) { + handle.getEnumModifier(HealthDisplay.class, 2).write(0, value); + } + + /** + * Retrieve Mode. + * <p> + * Notes: 0 to create the scoreboard. 1 to remove the scoreboard. 2 to + * update the display text. + * + * @return The current Mode + */ + public int getMode() { + return handle.getIntegers().read(0); + } + + /** + * Set Mode. + * + * @param value - new value. + */ + public void setMode(int value) { + handle.getIntegers().write(0, value); + } + + public static enum HealthDisplay { + INTEGER, HEARTS; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerScoreboardScore.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerScoreboardScore.java new file mode 100644 index 0000000..e815570 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerScoreboardScore.java @@ -0,0 +1,108 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.wrappers.EnumWrappers.ScoreboardAction; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperPlayServerScoreboardScore extends AbstractPacket { + public static final PacketType TYPE = + PacketType.Play.Server.SCOREBOARD_SCORE; + + public WrapperPlayServerScoreboardScore() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerScoreboardScore(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Score name. + * <p> + * Notes: the name of the score to be updated or removed. + * + * @return The current Score name + */ + public String getScoreName() { + return handle.getStrings().read(0); + } + + /** + * Set Score name. + * + * @param value - new value. + */ + public void setScoreName(String value) { + handle.getStrings().write(0, value); + } + + /** + * Retrieve Objective Name. + * <p> + * Notes: the name of the objective the score belongs to. + * + * @return The current Objective Name + */ + public String getObjectiveName() { + return handle.getStrings().read(1); + } + + /** + * Set Objective Name. + * + * @param value - new value. + */ + public void setObjectiveName(String value) { + handle.getStrings().write(1, value); + } + + /** + * Retrieve Value. + * <p> + * Notes: the score to be displayed next to the entry. Only sent when + * Update/Remove does not equal 1. + * + * @return The current Value + */ + public int getValue() { + return handle.getIntegers().read(0); + } + + /** + * Set Value. + * + * @param value - new value. + */ + public void setValue(int value) { + handle.getIntegers().write(0, value); + } + + public ScoreboardAction getAction() { + return handle.getScoreboardActions().read(0); + } + + public void setScoreboardAction(ScoreboardAction value) { + handle.getScoreboardActions().write(0, value); + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerScoreboardTeam.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerScoreboardTeam.java new file mode 100644 index 0000000..03461ff --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerScoreboardTeam.java @@ -0,0 +1,276 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import java.util.Collection; +import java.util.List; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.reflect.IntEnum; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperPlayServerScoreboardTeam extends AbstractPacket { + public static final PacketType TYPE = + PacketType.Play.Server.SCOREBOARD_TEAM; + + public WrapperPlayServerScoreboardTeam() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerScoreboardTeam(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Enum containing all known modes. + * + * @author dmulloy2 + */ + public static class Mode extends IntEnum { + public static final int TEAM_CREATED = 0; + public static final int TEAM_REMOVED = 1; + public static final int TEAM_UPDATED = 2; + public static final int PLAYERS_ADDED = 3; + public static final int PLAYERS_REMOVED = 4; + + private static final Mode INSTANCE = new Mode(); + + public static Mode getInstance() { + return INSTANCE; + } + } + + /** + * Retrieve Team Name. + * <p> + * Notes: a unique name for the team. (Shared with scoreboard). + * + * @return The current Team Name + */ + public String getName() { + return handle.getStrings().read(0); + } + + /** + * Set Team Name. + * + * @param value - new value. + */ + public void setName(String value) { + handle.getStrings().write(0, value); + } + + /** + * Retrieve Team Display Name. + * <p> + * Notes: only if Mode = 0 or 2. + * + * @return The current Team Display Name + */ + public String getDisplayName() { + return handle.getStrings().read(1); + } + + /** + * Set Team Display Name. + * + * @param value - new value. + */ + public void setDisplayName(String value) { + handle.getStrings().write(1, value); + } + + /** + * Retrieve Team Prefix. + * <p> + * Notes: only if Mode = 0 or 2. Displayed before the players' name that are + * part of this team. + * + * @return The current Team Prefix + */ + public String getPrefix() { + return handle.getStrings().read(2); + } + + /** + * Set Team Prefix. + * + * @param value - new value. + */ + public void setPrefix(String value) { + handle.getStrings().write(2, value); + } + + /** + * Retrieve Team Suffix. + * <p> + * Notes: only if Mode = 0 or 2. Displayed after the players' name that are + * part of this team. + * + * @return The current Team Suffix + */ + public String getSuffix() { + return handle.getStrings().read(3); + } + + /** + * Set Team Suffix. + * + * @param value - new value. + */ + public void setSuffix(String value) { + handle.getStrings().write(3, value); + } + + /** + * Retrieve Name Tag Visibility. + * <p> + * Notes: only if Mode = 0 or 2. always, hideForOtherTeams, hideForOwnTeam, + * never. + * + * @return The current Name Tag Visibility + */ + public String getNameTagVisibility() { + return handle.getStrings().read(4); + } + + /** + * Set Name Tag Visibility. + * + * @param value - new value. + */ + public void setNameTagVisibility(String value) { + handle.getStrings().write(4, value); + } + + /** + * Retrieve Color. + * <p> + * Notes: only if Mode = 0 or 2. Same as Chat colors. + * + * @return The current Color + */ + public int getColor() { + return handle.getIntegers().read(0); + } + + /** + * Set Color. + * + * @param value - new value. + */ + public void setColor(int value) { + handle.getIntegers().write(0, value); + } + + /** + * Get the collision rule. + * Notes: only if Mode = 0 or 2. always, pushOtherTeams, pushOwnTeam, never. + * @return The current collision rule + */ + public String getCollisionRule() { + return handle.getStrings().read(5); + } + + /** + * Sets the collision rule. + * @param value - new value. + */ + public void setCollisionRule(String value) { + handle.getStrings().write(5, value); + } + + /** + * Retrieve Players. + * <p> + * Notes: only if Mode = 0 or 3 or 4. Players to be added/remove from the + * team. Max 40 characters so may be uuid's later + * + * @return The current Players + */ + @SuppressWarnings("unchecked") + public List<String> getPlayers() { + return (List<String>) handle.getSpecificModifier(Collection.class) + .read(0); + } + + /** + * Set Players. + * + * @param value - new value. + */ + public void setPlayers(List<String> value) { + handle.getSpecificModifier(Collection.class).write(0, value); + } + + /** + * Retrieve Mode. + * <p> + * Notes: if 0 then the team is created. If 1 then the team is removed. If 2 + * the team team information is updated. If 3 then new players are added to + * the team. If 4 then players are removed from the team. + * + * @return The current Mode + */ + public int getMode() { + return handle.getIntegers().read(1); + } + + /** + * Set Mode. + * + * @param value - new value. + */ + public void setMode(int value) { + handle.getIntegers().write(1, value); + } + + /** + * Retrieve pack option data. Pack data is calculated as follows: + * + * <pre> + * <code> + * int data = 0; + * if (team.allowFriendlyFire()) { + * data |= 1; + * } + * if (team.canSeeFriendlyInvisibles()) { + * data |= 2; + * } + * </code> + * </pre> + * + * @return The current pack option data + */ + public int getPackOptionData() { + return handle.getIntegers().read(2); + } + + /** + * Set pack option data. + * + * @param value - new value + * @see #getPackOptionData() + */ + public void setPackOptionData(int value) { + handle.getIntegers().write(2, value); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerSelectAdvancementTab.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerSelectAdvancementTab.java new file mode 100644 index 0000000..95d5ec5 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerSelectAdvancementTab.java @@ -0,0 +1,46 @@ +/** + * This file is part of PacketWrapper. + * Copyright (C) 2012-2015 Kristian S. Strangeland + * Copyright (C) 2015 dmulloy2 + * + * PacketWrapper is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * PacketWrapper 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 General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with PacketWrapper. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.wrappers.MinecraftKey; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperPlayServerSelectAdvancementTab extends AbstractPacket { + + public static final PacketType TYPE = PacketType.Play.Server.SELECT_ADVANCEMENT_TAB; + + public WrapperPlayServerSelectAdvancementTab() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerSelectAdvancementTab(PacketContainer packet) { + super(packet, TYPE); + } + + public MinecraftKey getKey() { + return handle.getMinecraftKeys().readSafely(0); + } + + public void setKey(MinecraftKey key) { + handle.getMinecraftKeys().writeSafely(0, key); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerServerDifficulty.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerServerDifficulty.java new file mode 100644 index 0000000..164aa13 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerServerDifficulty.java @@ -0,0 +1,59 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.wrappers.EnumWrappers.Difficulty; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperPlayServerServerDifficulty extends AbstractPacket { + public static final PacketType TYPE = + PacketType.Play.Server.SERVER_DIFFICULTY; + + public WrapperPlayServerServerDifficulty() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerServerDifficulty(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Difficulty. + * <p> + * Notes: 0:PEACEFUL, 1:EASY, 2:NORMAL, 3: HARD + * + * @return The current Difficulty + */ + public Difficulty getDifficulty() { + return handle.getDifficulties().read(0); + } + + /** + * Set Difficulty. + * + * @param value - new value. + */ + public void setDifficulty(Difficulty value) { + handle.getDifficulties().write(0, value); + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerSetCooldown.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerSetCooldown.java new file mode 100644 index 0000000..90ee1e7 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerSetCooldown.java @@ -0,0 +1,97 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; +import org.bukkit.Material; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.reflect.EquivalentConverter; +import com.comphenix.protocol.reflect.accessors.Accessors; +import com.comphenix.protocol.reflect.accessors.MethodAccessor; +import com.comphenix.protocol.utility.MinecraftReflection; + +public class WrapperPlayServerSetCooldown extends AbstractPacket { + private static final Class<?> ITEM_CLASS = MinecraftReflection + .getMinecraftClass("Item"); + public static final PacketType TYPE = PacketType.Play.Server.SET_COOLDOWN; + + public WrapperPlayServerSetCooldown() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerSetCooldown(PacketContainer packet) { + super(packet, TYPE); + } + + public Material getItem() { + return handle.getModifier() + .<Material> withType(ITEM_CLASS, new ItemConverter()).read(0); + } + + public void setItem(Material value) { + handle.getModifier() + .<Material> withType(ITEM_CLASS, new ItemConverter()) + .write(0, value); + } + + public int getTicks() { + return handle.getIntegers().read(0); + } + + public void setTicks(int value) { + handle.getIntegers().write(0, value); + } + + private static class ItemConverter implements EquivalentConverter<Material> { + private static MethodAccessor getMaterial = null; + private static MethodAccessor getItem = null; + + @Override + public Material getSpecific(Object generic) { + if (getMaterial == null) { + getMaterial = + Accessors.getMethodAccessor(MinecraftReflection + .getCraftBukkitClass("util.CraftMagicNumbers"), + "getMaterial", ITEM_CLASS); + } + + return (Material) getMaterial.invoke(null, generic); + } + + @Override + public Object getGeneric(Material specific) { + if (getItem == null) { + getItem = + Accessors.getMethodAccessor(MinecraftReflection + .getCraftBukkitClass("util.CraftMagicNumbers"), + "getItem", Material.class); + } + + return getItem.invoke(null, specific); + } + + @Override + public Class<Material> getSpecificType() { + return Material.class; + } + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerSetSlot.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerSetSlot.java new file mode 100644 index 0000000..38e2f2f --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerSetSlot.java @@ -0,0 +1,102 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; +import org.bukkit.inventory.ItemStack; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; + +public class WrapperPlayServerSetSlot extends AbstractPacket { + public static final PacketType TYPE = PacketType.Play.Server.SET_SLOT; + + public WrapperPlayServerSetSlot() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerSetSlot(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Window ID. + * <p> + * Notes: the window which is being updated. 0 for player inventory. Note + * that all known window types include the player inventory. This packet + * will only be sent for the currently opened window while the player is + * performing actions, even if it affects the player inventory. After the + * window is closed, a number of these packets are sent to update the + * player's inventory window (0). + * + * @return The current Window ID + */ + public int getWindowId() { + return handle.getIntegers().read(0); + } + + /** + * Set Window ID. + * + * @param value - new value. + */ + public void setWindowId(int value) { + handle.getIntegers().write(0, value); + } + + /** + * Retrieve Slot. + * <p> + * Notes: the slot that should be updated + * + * @return The current Slot + */ + public int getSlot() { + return handle.getIntegers().read(1); + } + + /** + * Set Slot. + * + * @param value - new value. + */ + public void setSlot(int value) { + handle.getIntegers().write(1, value); + } + + /** + * Retrieve Slot data. + * + * @return The current Slot data + */ + public ItemStack getSlotData() { + return handle.getItemModifier().read(0); + } + + /** + * Set Slot data. + * + * @param value - new value. + */ + public void setSlotData(ItemStack value) { + handle.getItemModifier().write(0, value); + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerSpawnEntity.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerSpawnEntity.java new file mode 100644 index 0000000..545261d --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerSpawnEntity.java @@ -0,0 +1,379 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import java.util.UUID; + +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; +import org.bukkit.World; +import org.bukkit.entity.Entity; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.ProtocolLibrary; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.events.PacketEvent; +import com.comphenix.protocol.injector.PacketConstructor; +import com.comphenix.protocol.reflect.IntEnum; + +public class WrapperPlayServerSpawnEntity extends AbstractPacket { + public static final PacketType TYPE = PacketType.Play.Server.SPAWN_ENTITY; + + private static PacketConstructor entityConstructor; + + /** + * Represents the different object types. + * + * @author Kristian + */ + public static class ObjectTypes extends IntEnum { + public static final int BOAT = 1; + public static final int ITEM_STACK = 2; + public static final int AREA_EFFECT_CLOUD = 3; + public static final int MINECART = 10; + public static final int ACTIVATED_TNT = 50; + public static final int ENDER_CRYSTAL = 51; + public static final int TIPPED_ARROW_PROJECTILE = 60; + public static final int SNOWBALL_PROJECTILE = 61; + public static final int EGG_PROJECTILE = 62; + public static final int GHAST_FIREBALL = 63; + public static final int BLAZE_FIREBALL = 64; + public static final int THROWN_ENDERPEARL = 65; + public static final int WITHER_SKULL_PROJECTILE = 66; + public static final int SHULKER_BULLET = 67; + public static final int FALLING_BLOCK = 70; + public static final int ITEM_FRAME = 71; + public static final int EYE_OF_ENDER = 72; + public static final int THROWN_POTION = 73; + public static final int THROWN_EXP_BOTTLE = 75; + public static final int FIREWORK_ROCKET = 76; + public static final int LEASH_KNOT = 77; + public static final int ARMORSTAND = 78; + public static final int FISHING_FLOAT = 90; + public static final int SPECTRAL_ARROW = 91; + public static final int DRAGON_FIREBALL = 93; + + /** + * The singleton instance. Can also be retrieved from the parent class. + */ + private static ObjectTypes INSTANCE = new ObjectTypes(); + + /** + * Retrieve an instance of the object types enum. + * + * @return Object type enum. + */ + public static ObjectTypes getInstance() { + return INSTANCE; + } + } + + public WrapperPlayServerSpawnEntity() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerSpawnEntity(PacketContainer packet) { + super(packet, TYPE); + } + + public WrapperPlayServerSpawnEntity(Entity entity, int type, int objectData) { + super(fromEntity(entity, type, objectData), TYPE); + } + + // Useful constructor + private static PacketContainer fromEntity(Entity entity, int type, + int objectData) { + if (entityConstructor == null) + entityConstructor = + ProtocolLibrary.getProtocolManager() + .createPacketConstructor(TYPE, entity, type, + objectData); + return entityConstructor.createPacket(entity, type, objectData); + } + + /** + * Retrieve entity ID of the Object. + * + * @return The current EID + */ + public int getEntityID() { + return handle.getIntegers().read(0); + } + + /** + * Retrieve the entity that will be spawned. + * + * @param world - the current world of the entity. + * @return The spawned entity. + */ + public Entity getEntity(World world) { + return handle.getEntityModifier(world).read(0); + } + + /** + * Retrieve the entity that will be spawned. + * + * @param event - the packet event. + * @return The spawned entity. + */ + public Entity getEntity(PacketEvent event) { + return getEntity(event.getPlayer().getWorld()); + } + + /** + * Set entity ID of the Object. + * + * @param value - new value. + */ + public void setEntityID(int value) { + handle.getIntegers().write(0, value); + } + + public UUID getUniqueId() { + return handle.getUUIDs().read(0); + } + + public void setUniqueId(UUID value) { + handle.getUUIDs().write(0, value); + } + + /** + * Retrieve the x position of the object. + * <p> + * Note that the coordinate is rounded off to the nearest 1/32 of a meter. + * + * @return The current X + */ + public double getX() { + return handle.getDoubles().read(0); + } + + /** + * Set the x position of the object. + * + * @param value - new value. + */ + public void setX(double value) { + handle.getDoubles().write(0, value); + } + + /** + * Retrieve the y position of the object. + * <p> + * Note that the coordinate is rounded off to the nearest 1/32 of a meter. + * + * @return The current y + */ + public double getY() { + return handle.getDoubles().read(1); + } + + /** + * Set the y position of the object. + * + * @param value - new value. + */ + public void setY(double value) { + handle.getDoubles().write(1, value); + } + + /** + * Retrieve the z position of the object. + * <p> + * Note that the coordinate is rounded off to the nearest 1/32 of a meter. + * + * @return The current z + */ + public double getZ() { + return handle.getDoubles().read(2); + } + + /** + * Set the z position of the object. + * + * @param value - new value. + */ + public void setZ(double value) { + handle.getDoubles().write(2, value); + } + + /** + * Retrieve the optional speed x. + * <p> + * This is ignored if {@link #getObjectData()} is zero. + * + * @return The optional speed x. + */ + public double getOptionalSpeedX() { + return handle.getIntegers().read(1) / 8000.0D; + } + + /** + * Set the optional speed x. + * + * @param value - new value. + */ + public void setOptionalSpeedX(double value) { + handle.getIntegers().write(1, (int) (value * 8000.0D)); + } + + /** + * Retrieve the optional speed y. + * <p> + * This is ignored if {@link #getObjectData()} is zero. + * + * @return The optional speed y. + */ + public double getOptionalSpeedY() { + return handle.getIntegers().read(2) / 8000.0D; + } + + /** + * Set the optional speed y. + * + * @param value - new value. + */ + public void setOptionalSpeedY(double value) { + handle.getIntegers().write(2, (int) (value * 8000.0D)); + } + + /** + * Retrieve the optional speed z. + * <p> + * This is ignored if {@link #getObjectData()} is zero. + * + * @return The optional speed z. + */ + public double getOptionalSpeedZ() { + return handle.getIntegers().read(3) / 8000.0D; + } + + /** + * Set the optional speed z. + * + * @param value - new value. + */ + public void setOptionalSpeedZ(double value) { + handle.getIntegers().write(3, (int) (value * 8000.0D)); + } + + /** + * Retrieve the pitch. + * + * @return The current pitch. + */ + public float getPitch() { + return (handle.getIntegers().read(4) * 360.F) / 256.0F; + } + + /** + * Set the pitch. + * + * @param value - new pitch. + */ + public void setPitch(float value) { + handle.getIntegers().write(4, (int) (value * 256.0F / 360.0F)); + } + + /** + * Retrieve the yaw. + * + * @return The current Yaw + */ + public float getYaw() { + return (handle.getIntegers().read(5) * 360.F) / 256.0F; + } + + /** + * Set the yaw of the object spawned. + * + * @param value - new yaw. + */ + public void setYaw(float value) { + handle.getIntegers().write(5, (int) (value * 256.0F / 360.0F)); + } + + /** + * Retrieve the type of object. See {@link ObjectTypes} + * + * @return The current Type + */ + public int getType() { + return handle.getIntegers().read(6); + } + + /** + * Set the type of object. See {@link ObjectTypes}. + * + * @param value - new value. + */ + public void setType(int value) { + handle.getIntegers().write(6, value); + } + + /** + * Retrieve object data. + * <p> + * The content depends on the object type: + * <table border="1" cellpadding="4"> + * <tr> + * <th>Object Type:</th> + * <th>Name:</th> + * <th>Description</th> + * </tr> + * <tr> + * <td>ITEM_FRAME</td> + * <td>Orientation</td> + * <td>0-3: South, West, North, East</td> + * </tr> + * <tr> + * <td>FALLING_BLOCK</td> + * <td>Block Type</td> + * <td>BlockID | (Metadata << 0xC)</td> + * </tr> + * <tr> + * <td>Projectiles</td> + * <td>Entity ID</td> + * <td>The entity ID of the thrower</td> + * </tr> + * <tr> + * <td>Splash Potions</td> + * <td>Data Value</td> + * <td>Potion data value.</td> + * </tr> + * </table> + * + * @return The current object Data + */ + public int getObjectData() { + return handle.getIntegers().read(7); + } + + /** + * Set object Data. + * <p> + * The content depends on the object type. See {@link #getObjectData()} for + * more information. + * + * @param value - new object data. + */ + public void setObjectData(int value) { + handle.getIntegers().write(7, value); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerSpawnEntityExperienceOrb.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerSpawnEntityExperienceOrb.java new file mode 100644 index 0000000..eb12895 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerSpawnEntityExperienceOrb.java @@ -0,0 +1,161 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; +import org.bukkit.World; +import org.bukkit.entity.Entity; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.events.PacketEvent; + +public class WrapperPlayServerSpawnEntityExperienceOrb extends AbstractPacket { + public static final PacketType TYPE = + PacketType.Play.Server.SPAWN_ENTITY_EXPERIENCE_ORB; + + public WrapperPlayServerSpawnEntityExperienceOrb() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerSpawnEntityExperienceOrb(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Entity ID. + * <p> + * Notes: entity's ID + * + * @return The current Entity ID + */ + public int getEntityID() { + return handle.getIntegers().read(0); + } + + /** + * Set Entity ID. + * + * @param value - new value. + */ + public void setEntityID(int value) { + handle.getIntegers().write(0, value); + } + + /** + * Retrieve the entity of the painting that will be spawned. + * + * @param world - the current world of the entity. + * @return The spawned entity. + */ + public Entity getEntity(World world) { + return handle.getEntityModifier(world).read(0); + } + + /** + * Retrieve the entity of the painting that will be spawned. + * + * @param event - the packet event. + * @return The spawned entity. + */ + public Entity getEntity(PacketEvent event) { + return getEntity(event.getPlayer().getWorld()); + } + + /** + * Retrieve the x position of the object. + * <p> + * Note that the coordinate is rounded off to the nearest 1/32 of a meter. + * + * @return The current X + */ + public double getX() { + return handle.getDoubles().read(0); + } + + /** + * Set the x position of the object. + * + * @param value - new value. + */ + public void setX(double value) { + handle.getDoubles().write(0, value); + } + + /** + * Retrieve the y position of the object. + * <p> + * Note that the coordinate is rounded off to the nearest 1/32 of a meter. + * + * @return The current y + */ + public double getY() { + return handle.getDoubles().read(1); + } + + /** + * Set the y position of the object. + * + * @param value - new value. + */ + public void setY(double value) { + handle.getDoubles().write(1, value); + } + + /** + * Retrieve the z position of the object. + * <p> + * Note that the coordinate is rounded off to the nearest 1/32 of a meter. + * + * @return The current z + */ + public double getZ() { + return handle.getDoubles().read(2); + } + + /** + * Set the z position of the object. + * + * @param value - new value. + */ + public void setZ(double value) { + handle.getDoubles().write(2, value); + } + + /** + * Retrieve Count. + * <p> + * Notes: the amount of experience this orb will reward once collected + * + * @return The current Count + */ + public int getCount() { + return handle.getIntegers().read(1); + } + + /** + * Set Count. + * + * @param value - new value. + */ + public void setCount(int value) { + handle.getIntegers().write(1, value); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerSpawnEntityLiving.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerSpawnEntityLiving.java new file mode 100644 index 0000000..5ba1639 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerSpawnEntityLiving.java @@ -0,0 +1,316 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import java.util.UUID; + +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; +import org.bukkit.World; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.ProtocolLibrary; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.events.PacketEvent; +import com.comphenix.protocol.injector.PacketConstructor; +import com.comphenix.protocol.wrappers.WrappedDataWatcher; + +public class WrapperPlayServerSpawnEntityLiving extends AbstractPacket { + public static final PacketType TYPE = + PacketType.Play.Server.SPAWN_ENTITY_LIVING; + + private static PacketConstructor entityConstructor; + + public WrapperPlayServerSpawnEntityLiving() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerSpawnEntityLiving(PacketContainer packet) { + super(packet, TYPE); + } + + public WrapperPlayServerSpawnEntityLiving(Entity entity) { + super(fromEntity(entity), TYPE); + } + + // Useful constructor + private static PacketContainer fromEntity(Entity entity) { + if (entityConstructor == null) + entityConstructor = + ProtocolLibrary.getProtocolManager() + .createPacketConstructor(TYPE, entity); + return entityConstructor.createPacket(entity); + } + + /** + * Retrieve entity ID. + * + * @return The current EID + */ + public int getEntityID() { + return handle.getIntegers().read(0); + } + + /** + * Retrieve the entity that will be spawned. + * + * @param world - the current world of the entity. + * @return The spawned entity. + */ + public Entity getEntity(World world) { + return handle.getEntityModifier(world).read(0); + } + + /** + * Retrieve the entity that will be spawned. + * + * @param event - the packet event. + * @return The spawned entity. + */ + public Entity getEntity(PacketEvent event) { + return getEntity(event.getPlayer().getWorld()); + } + + public UUID getUniqueId() { + return handle.getUUIDs().read(0); + } + + public void setUniqueId(UUID value) { + handle.getUUIDs().write(0, value); + } + + /** + * Set entity ID. + * + * @param value - new value. + */ + public void setEntityID(int value) { + handle.getIntegers().write(0, value); + } + + /** + * Retrieve the type of mob. + * + * @return The current Type + */ + @SuppressWarnings("deprecation") + public EntityType getType() { + return EntityType.fromId(handle.getIntegers().read(1)); + } + + /** + * Set the type of mob. + * + * @param value - new value. + */ + @SuppressWarnings("deprecation") + public void setType(EntityType value) { + handle.getIntegers().write(1, (int) value.getTypeId()); + } + + /** + * Retrieve the x position of the object. + * <p> + * Note that the coordinate is rounded off to the nearest 1/32 of a meter. + * + * @return The current X + */ + public double getX() { + return handle.getDoubles().read(0); + } + + /** + * Set the x position of the object. + * + * @param value - new value. + */ + public void setX(double value) { + handle.getDoubles().write(0, value); + } + + /** + * Retrieve the y position of the object. + * <p> + * Note that the coordinate is rounded off to the nearest 1/32 of a meter. + * + * @return The current y + */ + public double getY() { + return handle.getDoubles().read(1); + } + + /** + * Set the y position of the object. + * + * @param value - new value. + */ + public void setY(double value) { + handle.getDoubles().write(1, value); + } + + /** + * Retrieve the z position of the object. + * <p> + * Note that the coordinate is rounded off to the nearest 1/32 of a meter. + * + * @return The current z + */ + public double getZ() { + return handle.getDoubles().read(2); + } + + /** + * Set the z position of the object. + * + * @param value - new value. + */ + public void setZ(double value) { + handle.getDoubles().write(2, value); + } + + /** + * Retrieve the yaw. + * + * @return The current Yaw + */ + public float getYaw() { + return (handle.getBytes().read(0) * 360.F) / 256.0F; + } + + /** + * Set the yaw of the spawned mob. + * + * @param value - new yaw. + */ + public void setYaw(float value) { + handle.getBytes().write(0, (byte) (value * 256.0F / 360.0F)); + } + + /** + * Retrieve the pitch. + * + * @return The current pitch + */ + public float getPitch() { + return (handle.getBytes().read(1) * 360.F) / 256.0F; + } + + /** + * Set the pitch of the spawned mob. + * + * @param value - new pitch. + */ + public void setPitch(float value) { + handle.getBytes().write(1, (byte) (value * 256.0F / 360.0F)); + } + + /** + * Retrieve the yaw of the mob's head. + * + * @return The current yaw. + */ + public float getHeadPitch() { + return (handle.getBytes().read(2) * 360.F) / 256.0F; + } + + /** + * Set the yaw of the mob's head. + * + * @param value - new yaw. + */ + public void setHeadPitch(float value) { + handle.getBytes().write(2, (byte) (value * 256.0F / 360.0F)); + } + + /** + * Retrieve the velocity in the x axis. + * + * @return The current velocity X + */ + public double getVelocityX() { + return handle.getIntegers().read(2) / 8000.0D; + } + + /** + * Set the velocity in the x axis. + * + * @param value - new value. + */ + public void setVelocityX(double value) { + handle.getIntegers().write(2, (int) (value * 8000.0D)); + } + + /** + * Retrieve the velocity in the y axis. + * + * @return The current velocity y + */ + public double getVelocityY() { + return handle.getIntegers().read(3) / 8000.0D; + } + + /** + * Set the velocity in the y axis. + * + * @param value - new value. + */ + public void setVelocityY(double value) { + handle.getIntegers().write(3, (int) (value * 8000.0D)); + } + + /** + * Retrieve the velocity in the z axis. + * + * @return The current velocity z + */ + public double getVelocityZ() { + return handle.getIntegers().read(4) / 8000.0D; + } + + /** + * Set the velocity in the z axis. + * + * @param value - new value. + */ + public void setVelocityZ(double value) { + handle.getIntegers().write(4, (int) (value * 8000.0D)); + } + + /** + * Retrieve the data watcher. + * <p> + * Content varies by mob, see Entities. + * + * @return The current Metadata + */ + public WrappedDataWatcher getMetadata() { + return handle.getDataWatcherModifier().read(0); + } + + /** + * Set the data watcher. + * + * @param value - new value. + */ + public void setMetadata(WrappedDataWatcher value) { + handle.getDataWatcherModifier().write(0, value); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerSpawnEntityPainting.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerSpawnEntityPainting.java new file mode 100644 index 0000000..9825642 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerSpawnEntityPainting.java @@ -0,0 +1,131 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; +import org.bukkit.World; +import org.bukkit.entity.Entity; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.events.PacketEvent; +import com.comphenix.protocol.wrappers.BlockPosition; +import com.comphenix.protocol.wrappers.EnumWrappers.Direction; + +public class WrapperPlayServerSpawnEntityPainting extends AbstractPacket { + public static final PacketType TYPE = + PacketType.Play.Server.SPAWN_ENTITY_PAINTING; + + public WrapperPlayServerSpawnEntityPainting() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerSpawnEntityPainting(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Entity ID. + * <p> + * Notes: entity's ID + * + * @return The current Entity ID + */ + public int getEntityID() { + return handle.getIntegers().read(0); + } + + /** + * Set Entity ID. + * + * @param value - new value. + */ + public void setEntityID(int value) { + handle.getIntegers().write(0, value); + } + + /** + * Retrieve the entity of the painting that will be spawned. + * + * @param world - the current world of the entity. + * @return The spawned entity. + */ + public Entity getEntity(World world) { + return handle.getEntityModifier(world).read(0); + } + + /** + * Retrieve the entity of the painting that will be spawned. + * + * @param event - the packet event. + * @return The spawned entity. + */ + public Entity getEntity(PacketEvent event) { + return getEntity(event.getPlayer().getWorld()); + } + + /** + * Retrieve Title. + * <p> + * Notes: name of the painting. Max length 13 + * + * @return The current Title + */ + public String getTitle() { + return handle.getStrings().read(0); + } + + /** + * Set Title. + * + * @param value - new value. + */ + public void setTitle(String value) { + handle.getStrings().write(0, value); + } + + /** + * Retrieve Location. + * <p> + * Notes: center coordinates + * + * @return The current Location + */ + public BlockPosition getLocation() { + return handle.getBlockPositionModifier().read(0); + } + + /** + * Set Location. + * + * @param value - new value. + */ + public void setLocation(BlockPosition value) { + handle.getBlockPositionModifier().write(0, value); + } + + public Direction getDirection() { + return handle.getDirections().read(0); + } + + public void setDirection(Direction value) { + handle.getDirections().write(0, value); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerSpawnEntityWeather.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerSpawnEntityWeather.java new file mode 100644 index 0000000..86387ca --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerSpawnEntityWeather.java @@ -0,0 +1,161 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; +import org.bukkit.World; +import org.bukkit.entity.Entity; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.events.PacketEvent; + +public class WrapperPlayServerSpawnEntityWeather extends AbstractPacket { + public static final PacketType TYPE = + PacketType.Play.Server.SPAWN_ENTITY_WEATHER; + + public WrapperPlayServerSpawnEntityWeather() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerSpawnEntityWeather(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Entity ID. + * <p> + * Notes: entity's ID + * + * @return The current Entity ID + */ + public int getEntityID() { + return handle.getIntegers().read(0); + } + + /** + * Set Entity ID. + * + * @param value - new value. + */ + public void setEntityID(int value) { + handle.getIntegers().write(0, value); + } + + /** + * Retrieve the entity of the painting that will be spawned. + * + * @param world - the current world of the entity. + * @return The spawned entity. + */ + public Entity getEntity(World world) { + return handle.getEntityModifier(world).read(0); + } + + /** + * Retrieve the entity of the painting that will be spawned. + * + * @param event - the packet event. + * @return The spawned entity. + */ + public Entity getEntity(PacketEvent event) { + return getEntity(event.getPlayer().getWorld()); + } + + /** + * Retrieve Type. + * <p> + * Notes: the global entity type, currently always 1 for thunderbolt. + * + * @return The current Type + */ + public int getType() { + return handle.getIntegers().read(1); + } + + /** + * Set Type. + * + * @param value - new value. + */ + public void setType(int value) { + handle.getIntegers().write(1, value); + } + + /** + * Retrieve the x position of the object. + * <p> + * Note that the coordinate is rounded off to the nearest 1/32 of a meter. + * + * @return The current X + */ + public double getX() { + return handle.getDoubles().read(0); + } + + /** + * Set the x position of the object. + * + * @param value - new value. + */ + public void setX(double value) { + handle.getDoubles().write(0, value); + } + + /** + * Retrieve the y position of the object. + * <p> + * Note that the coordinate is rounded off to the nearest 1/32 of a meter. + * + * @return The current y + */ + public double getY() { + return handle.getDoubles().read(1); + } + + /** + * Set the y position of the object. + * + * @param value - new value. + */ + public void setY(double value) { + handle.getDoubles().write(1, value); + } + + /** + * Retrieve the z position of the object. + * <p> + * Note that the coordinate is rounded off to the nearest 1/32 of a meter. + * + * @return The current z + */ + public double getZ() { + return handle.getDoubles().read(2); + } + + /** + * Set the z position of the object. + * + * @param value - new value. + */ + public void setZ(double value) { + handle.getDoubles().write(2, value); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerSpawnPosition.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerSpawnPosition.java new file mode 100644 index 0000000..133368b --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerSpawnPosition.java @@ -0,0 +1,58 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.wrappers.BlockPosition; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperPlayServerSpawnPosition extends AbstractPacket { + public static final PacketType TYPE = PacketType.Play.Server.SPAWN_POSITION; + + public WrapperPlayServerSpawnPosition() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerSpawnPosition(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Location. + * <p> + * Notes: spawn location + * + * @return The current Location + */ + public BlockPosition getLocation() { + return handle.getBlockPositionModifier().read(0); + } + + /** + * Set Location. + * + * @param value - new value. + */ + public void setLocation(BlockPosition value) { + handle.getBlockPositionModifier().write(0, value); + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerStatistic.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerStatistic.java new file mode 100644 index 0000000..d60601f --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerStatistic.java @@ -0,0 +1,47 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import java.util.Map; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.wrappers.WrappedStatistic; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperPlayServerStatistic extends AbstractPacket { + public static final PacketType TYPE = PacketType.Play.Server.STATISTIC; + + public WrapperPlayServerStatistic() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerStatistic(PacketContainer packet) { + super(packet, TYPE); + } + + public Map<WrappedStatistic, Integer> getStatistics() { + return handle.getStatisticMaps().read(0); + } + + public void setStatistics(Map<WrappedStatistic, Integer> value) { + handle.getStatisticMaps().write(0, value); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerTabComplete.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerTabComplete.java new file mode 100644 index 0000000..9583735 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerTabComplete.java @@ -0,0 +1,69 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperPlayServerTabComplete extends AbstractPacket { + public static final PacketType TYPE = PacketType.Play.Server.TAB_COMPLETE; + + public WrapperPlayServerTabComplete() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerTabComplete(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Count. + * <p> + * Notes: number of following strings + * + * @return The current Count + */ + public int getCount() { + return handle.getStringArrays().read(0).length; + } + + /** + * Retrieve Match. + * <p> + * Notes: one eligible command, note that each command is sent separately + * instead of in a single string, hence the need for Count + * + * @return The current Match + */ + public String[] getMatches() { + return handle.getStringArrays().read(0); + } + + /** + * Set Match. + * + * @param value - new value. + */ + public void setMatches(String[] value) { + handle.getStringArrays().write(0, value); + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerTileEntityData.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerTileEntityData.java new file mode 100644 index 0000000..7eba379 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerTileEntityData.java @@ -0,0 +1,98 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.wrappers.BlockPosition; +import com.comphenix.protocol.wrappers.nbt.NbtBase; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperPlayServerTileEntityData extends AbstractPacket { + public static final PacketType TYPE = + PacketType.Play.Server.TILE_ENTITY_DATA; + + public WrapperPlayServerTileEntityData() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerTileEntityData(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Location. + * + * @return The current Location + */ + public BlockPosition getLocation() { + return handle.getBlockPositionModifier().read(0); + } + + /** + * Set Location. + * + * @param value - new value. + */ + public void setLocation(BlockPosition value) { + handle.getBlockPositionModifier().write(0, value); + } + + /** + * Retrieve Action. + * <p> + * Notes: the type of update to perform + * + * @return The current Action + */ + public int getAction() { + return handle.getIntegers().read(0); + } + + /** + * Set Action. + * + * @param value - new value. + */ + public void setAction(int value) { + handle.getIntegers().write(0, value); + } + + /** + * Retrieve NBT Data. + * <p> + * Notes: if not present then its TAG_END (0) + * + * @return The current NBT Data + */ + public NbtBase<?> getNbtData() { + return handle.getNbtModifier().read(0); + } + + /** + * Set NBT Data. + * + * @param value - new value. + */ + public void setNbtData(NbtBase<?> value) { + handle.getNbtModifier().write(0, value); + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerTitle.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerTitle.java new file mode 100644 index 0000000..8292090 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerTitle.java @@ -0,0 +1,137 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.wrappers.EnumWrappers.TitleAction; +import com.comphenix.protocol.wrappers.WrappedChatComponent; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperPlayServerTitle extends AbstractPacket { + public static final PacketType TYPE = PacketType.Play.Server.TITLE; + + public WrapperPlayServerTitle() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerTitle(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Action. + * + * @return The current Action + */ + public TitleAction getAction() { + return handle.getTitleActions().read(0); + } + + /** + * Set Action. + * + * @param value - new value. + */ + public WrapperPlayServerTitle setAction(TitleAction value) { + handle.getTitleActions().write(0, value); + return this; + } + + /** + * Retrieve 0 (TITLE). + * <p> + * Notes: chat + * + * @return The current 0 (TITLE) + */ + public WrappedChatComponent getTitle() { + return handle.getChatComponents().read(0); + } + + /** + * Set 0 (TITLE). + * + * @param value - new value. + */ + public WrapperPlayServerTitle setTitle(WrappedChatComponent value) { + handle.getChatComponents().write(0, value); + return this; + } + + /** + * Retrieve 2 (TIMES). + * <p> + * Notes: int + * + * @return The current 2 (TIMES) + */ + public int getFadeIn() { + return handle.getIntegers().read(0); + } + + /** + * Set 2 (TIMES). + * + * @param value - new value. + */ + public WrapperPlayServerTitle setFadeIn(int value) { + handle.getIntegers().write(0, value); + return this; + } + + /** + * Retrieve Stay. + * + * @return The current Stay + */ + public int getStay() { + return handle.getIntegers().read(1); + } + + /** + * Set Stay. + * + * @param value - new value. + */ + public WrapperPlayServerTitle setStay(int value) { + handle.getIntegers().write(1, value); + return this; + } + + /** + * Retrieve Fade Out. + * + * @return The current Fade Out + */ + public int getFadeOut() { + return handle.getIntegers().read(2); + } + + /** + * Set Fade Out. + * + * @param value - new value. + */ + public WrapperPlayServerTitle setFadeOut(int value) { + handle.getIntegers().write(2, value); + return this; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerTransaction.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerTransaction.java new file mode 100644 index 0000000..c9a737a --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerTransaction.java @@ -0,0 +1,98 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperPlayServerTransaction extends AbstractPacket { + public static final PacketType TYPE = PacketType.Play.Server.TRANSACTION; + + public WrapperPlayServerTransaction() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerTransaction(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Window ID. + * <p> + * Notes: the id of the window that the action occurred in. + * + * @return The current Window ID + */ + public int getWindowId() { + return handle.getIntegers().read(0); + } + + /** + * Set Window ID. + * + * @param value - new value. + */ + public void setWindowId(int value) { + handle.getIntegers().write(0, value); + } + + /** + * Retrieve Action number. + * <p> + * Notes: every action that is to be accepted has a unique number. This + * field corresponds to that number. + * + * @return The current Action number + */ + public short getActionNumber() { + return handle.getShorts().read(0); + } + + /** + * Set Action number. + * + * @param value - new value. + */ + public void setActionNumber(short value) { + handle.getShorts().write(0, value); + } + + /** + * Retrieve Accepted. + * <p> + * Notes: whether the action was accepted. + * + * @return The current Accepted + */ + public boolean getAccepted() { + return handle.getBooleans().read(0); + } + + /** + * Set Accepted. + * + * @param value - new value. + */ + public void setAccepted(boolean value) { + handle.getBooleans().write(0, value); + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerUnloadChunk.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerUnloadChunk.java new file mode 100644 index 0000000..f1a9f19 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerUnloadChunk.java @@ -0,0 +1,78 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperPlayServerUnloadChunk extends AbstractPacket { + + public static final PacketType TYPE = PacketType.Play.Server.UNLOAD_CHUNK; + + public WrapperPlayServerUnloadChunk() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerUnloadChunk(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Chunk X. + * <p> + * Notes: block coordinate divided by 16, rounded down + * + * @return The current Chunk X + */ + public int getChunkX() { + return handle.getIntegers().read(0); + } + + /** + * Set Chunk X. + * + * @param value - new value. + */ + public void setChunkX(int value) { + handle.getIntegers().write(0, value); + } + + /** + * Retrieve Chunk Z. + * <p> + * Notes: block coordinate divided by 16, rounded down + * + * @return The current Chunk Z + */ + public int getChunkZ() { + return handle.getIntegers().read(1); + } + + /** + * Set Chunk Z. + * + * @param value - new value. + */ + public void setChunkZ(int value) { + handle.getIntegers().write(1, value); + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerUpdateAttributes.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerUpdateAttributes.java new file mode 100644 index 0000000..4cd2fb9 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerUpdateAttributes.java @@ -0,0 +1,102 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import java.util.List; + +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; +import org.bukkit.World; +import org.bukkit.entity.Entity; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.events.PacketEvent; +import com.comphenix.protocol.wrappers.WrappedAttribute; + +public class WrapperPlayServerUpdateAttributes extends AbstractPacket { + public static final PacketType TYPE = + PacketType.Play.Server.UPDATE_ATTRIBUTES; + + public WrapperPlayServerUpdateAttributes() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerUpdateAttributes(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Entity ID. + * <p> + * Notes: entity's ID + * + * @return The current Entity ID + */ + public int getEntityID() { + return handle.getIntegers().read(0); + } + + /** + * Set Entity ID. + * + * @param value - new value. + */ + public void setEntityID(int value) { + handle.getIntegers().write(0, value); + } + + /** + * Retrieve the entity of the painting that will be spawned. + * + * @param world - the current world of the entity. + * @return The spawned entity. + */ + public Entity getEntity(World world) { + return handle.getEntityModifier(world).read(0); + } + + /** + * Retrieve the entity of the painting that will be spawned. + * + * @param event - the packet event. + * @return The spawned entity. + */ + public Entity getEntity(PacketEvent event) { + return getEntity(event.getPlayer().getWorld()); + } + + /** + * Retrieve the collection of attributes associated with the entity. + * + * @return The current attributes. + */ + public List<WrappedAttribute> getAttributes() { + return handle.getAttributeCollectionModifier().read(0); + } + + /** + * Set the new or updated attributes associated with the entity. + * + * @param value - new/updated attributes. + */ + public void setAttributes(List<WrappedAttribute> value) { + handle.getAttributeCollectionModifier().write(0, value); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerUpdateHealth.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerUpdateHealth.java new file mode 100644 index 0000000..fec5b2f --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerUpdateHealth.java @@ -0,0 +1,97 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperPlayServerUpdateHealth extends AbstractPacket { + public static final PacketType TYPE = PacketType.Play.Server.UPDATE_HEALTH; + + public WrapperPlayServerUpdateHealth() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerUpdateHealth(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Health. + * <p> + * Notes: 0 or less = dead, 20 = full HP + * + * @return The current Health + */ + public float getHealth() { + return handle.getFloat().read(0); + } + + /** + * Set Health. + * + * @param value - new value. + */ + public void setHealth(float value) { + handle.getFloat().write(0, value); + } + + /** + * Retrieve Food. + * <p> + * Notes: 0 - 20 + * + * @return The current Food + */ + public int getFood() { + return handle.getIntegers().read(0); + } + + /** + * Set Food. + * + * @param value - new value. + */ + public void setFood(int value) { + handle.getIntegers().write(0, value); + } + + /** + * Retrieve Food Saturation. + * <p> + * Notes: seems to vary from 0.0 to 5.0 in integer increments + * + * @return The current Food Saturation + */ + public float getFoodSaturation() { + return handle.getFloat().read(1); + } + + /** + * Set Food Saturation. + * + * @param value - new value. + */ + public void setFoodSaturation(float value) { + handle.getFloat().write(1, value); + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerUpdateTime.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerUpdateTime.java new file mode 100644 index 0000000..757150c --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerUpdateTime.java @@ -0,0 +1,78 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperPlayServerUpdateTime extends AbstractPacket { + public static final PacketType TYPE = PacketType.Play.Server.UPDATE_TIME; + + public WrapperPlayServerUpdateTime() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerUpdateTime(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Age of the world. + * <p> + * Notes: in ticks; not changed by server commands + * + * @return The current Age of the world + */ + public long getAgeOfTheWorld() { + return handle.getLongs().read(0); + } + + /** + * Set Age of the world. + * + * @param value - new value. + */ + public void setAgeOfTheWorld(long value) { + handle.getLongs().write(0, value); + } + + /** + * Retrieve Time of day. + * <p> + * Notes: the world (or region) time, in ticks. If negative the sun will + * stop moving at the Math.abs of the time + * + * @return The current Time of day + */ + public long getTimeOfDay() { + return handle.getLongs().read(1); + } + + /** + * Set Time of day. + * + * @param value - new value. + */ + public void setTimeOfDay(long value) { + handle.getLongs().write(1, value); + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerVehicleMove.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerVehicleMove.java new file mode 100644 index 0000000..e572bd0 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerVehicleMove.java @@ -0,0 +1,138 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperPlayServerVehicleMove extends AbstractPacket { + + public static final PacketType TYPE = PacketType.Play.Server.VEHICLE_MOVE; + + public WrapperPlayServerVehicleMove() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerVehicleMove(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve X. + * <p> + * Notes: absolute position (X coordinate) + * + * @return The current X + */ + public double getX() { + return handle.getDoubles().read(0); + } + + /** + * Set X. + * + * @param value - new value. + */ + public void setX(double value) { + handle.getDoubles().write(0, value); + } + + /** + * Retrieve Y. + * <p> + * Notes: absolute position (Y coordinate) + * + * @return The current Y + */ + public double getY() { + return handle.getDoubles().read(1); + } + + /** + * Set Y. + * + * @param value - new value. + */ + public void setY(double value) { + handle.getDoubles().write(1, value); + } + + /** + * Retrieve Z. + * <p> + * Notes: absolute position (Z coordinate) + * + * @return The current Z + */ + public double getZ() { + return handle.getDoubles().read(2); + } + + /** + * Set Z. + * + * @param value - new value. + */ + public void setZ(double value) { + handle.getDoubles().write(2, value); + } + + /** + * Retrieve Yaw. + * <p> + * Notes: absolute rotation on the vertical axis, in degrees + * + * @return The current Yaw + */ + public float getYaw() { + return handle.getFloat().read(0); + } + + /** + * Set Yaw. + * + * @param value - new value. + */ + public void setYaw(float value) { + handle.getFloat().write(0, value); + } + + /** + * Retrieve Pitch. + * <p> + * Notes: absolute rotation on the horizontal axis, in degrees + * + * @return The current Pitch + */ + public float getPitch() { + return handle.getFloat().read(1); + } + + /** + * Set Pitch. + * + * @param value - new value. + */ + public void setPitch(float value) { + handle.getFloat().write(1, value); + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerWindowData.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerWindowData.java new file mode 100644 index 0000000..b089b64 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerWindowData.java @@ -0,0 +1,97 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperPlayServerWindowData extends AbstractPacket { + public static final PacketType TYPE = PacketType.Play.Server.WINDOW_DATA; + + public WrapperPlayServerWindowData() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerWindowData(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Window ID. + * <p> + * Notes: the id of the window. + * + * @return The current Window ID + */ + public int getWindowId() { + return handle.getIntegers().read(0); + } + + /** + * Set Window ID. + * + * @param value - new value. + */ + public void setWindowId(int value) { + handle.getIntegers().write(0, value); + } + + /** + * Retrieve Property. + * <p> + * Notes: which property should be updated. + * + * @return The current Property + */ + public int getProperty() { + return handle.getIntegers().read(1); + } + + /** + * Set Property. + * + * @param value - new value. + */ + public void setProperty(int value) { + handle.getIntegers().write(1, value); + } + + /** + * Retrieve Value. + * <p> + * Notes: the new value for the property. + * + * @return The current Value + */ + public int getValue() { + return handle.getIntegers().read(2); + } + + /** + * Set Value. + * + * @param value - new value. + */ + public void setValue(int value) { + handle.getIntegers().write(2, value); + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerWindowItems.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerWindowItems.java new file mode 100644 index 0000000..b157d25 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerWindowItems.java @@ -0,0 +1,80 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import java.util.List; + +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; +import org.bukkit.inventory.ItemStack; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; + +public class WrapperPlayServerWindowItems extends AbstractPacket { + public static final PacketType TYPE = PacketType.Play.Server.WINDOW_ITEMS; + + public WrapperPlayServerWindowItems() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerWindowItems(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Window ID. + * <p> + * Notes: the id of window which items are being sent for. 0 for player + * inventory. + * + * @return The current Window ID + */ + public int getWindowId() { + return handle.getIntegers().read(0); + } + + /** + * Set Window ID. + * + * @param value - new value. + */ + public void setWindowId(int value) { + handle.getIntegers().write(0, value); + } + + /** + * Retrieve Slot data. + * + * @return The current Slot data + */ + public List<ItemStack> getSlotData() { + return handle.getItemListModifier().read(0); + } + + /** + * Set Slot data. + * + * @param value - new value. + */ + public void setSlotData(List<ItemStack> value) { + handle.getItemListModifier().write(0, value); + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerWorldBorder.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerWorldBorder.java new file mode 100644 index 0000000..79a8e96 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerWorldBorder.java @@ -0,0 +1,109 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.wrappers.EnumWrappers.WorldBorderAction; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperPlayServerWorldBorder extends AbstractPacket { + public static final PacketType TYPE = PacketType.Play.Server.WORLD_BORDER; + + public WrapperPlayServerWorldBorder() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerWorldBorder(PacketContainer packet) { + super(packet, TYPE); + } + + public WorldBorderAction getAction() { + return handle.getWorldBorderActions().read(0); + } + + public void setAction(WorldBorderAction value) { + handle.getWorldBorderActions().write(0, value); + } + + public int getPortalTeleportBoundary() { + return handle.getIntegers().read(0); + } + + public void setPortalTeleportBoundary(int value) { + handle.getIntegers().write(0, value); + } + + public double getCenterX() { + return handle.getDoubles().read(0); + } + + public void setCenterX(double value) { + handle.getDoubles().write(0, value); + } + + public double getCenterZ() { + return handle.getDoubles().read(1); + } + + public void setCenterZ(double value) { + handle.getDoubles().write(1, value); + } + + public double getOldRadius() { + return handle.getDoubles().read(2); + } + + public void setOldRadius(double value) { + handle.getDoubles().write(2, value); + } + + public double getRadius() { + return handle.getDoubles().read(3); + } + + public void setRadius(double value) { + handle.getDoubles().write(3, value); + } + + public long getSpeed() { + return handle.getLongs().read(0); + } + + public void setSpeed(long value) { + handle.getLongs().write(0, value); + } + + public int getWarningTime() { + return handle.getIntegers().read(1); + } + + public void setWarningTime(int value) { + handle.getIntegers().write(1, value); + } + + public int getWarningDistance() { + return handle.getIntegers().read(2); + } + + public void setWarningDistance(int value) { + handle.getIntegers().write(2, value); + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerWorldEvent.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerWorldEvent.java new file mode 100644 index 0000000..c563896 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerWorldEvent.java @@ -0,0 +1,118 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.wrappers.BlockPosition; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperPlayServerWorldEvent extends AbstractPacket { + public static final PacketType TYPE = PacketType.Play.Server.WORLD_EVENT; + + public WrapperPlayServerWorldEvent() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerWorldEvent(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Effect ID. + * <p> + * Notes: the ID of the effect, see below. + * + * @return The current Effect ID + */ + public int getEffectId() { + return handle.getIntegers().read(0); + } + + /** + * Set Effect ID. + * + * @param value - new value. + */ + public void setEffectId(int value) { + handle.getIntegers().write(0, value); + } + + /** + * Retrieve Location. + * <p> + * Notes: the location of the effect + * + * @return The current Location + */ + public BlockPosition getLocation() { + return handle.getBlockPositionModifier().read(0); + } + + /** + * Set Location. + * + * @param value - new value. + */ + public void setLocation(BlockPosition value) { + handle.getBlockPositionModifier().write(0, value); + } + + /** + * Retrieve Data. + * <p> + * Notes: extra data for certain effects, see below. + * + * @return The current Data + */ + public int getData() { + return handle.getIntegers().read(1); + } + + /** + * Set Data. + * + * @param value - new value. + */ + public void setData(int value) { + handle.getIntegers().write(1, value); + } + + /** + * Retrieve Disable relative volume. + * <p> + * Notes: see above + * + * @return The current Disable relative volume + */ + public boolean getDisableRelativeVolume() { + return handle.getBooleans().read(0); + } + + /** + * Set Disable relative volume. + * + * @param value - new value. + */ + public void setDisableRelativeVolume(boolean value) { + handle.getBooleans().write(0, value); + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerWorldParticles.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerWorldParticles.java new file mode 100644 index 0000000..ec04ba5 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperPlayServerWorldParticles.java @@ -0,0 +1,272 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.wrappers.EnumWrappers.Particle; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperPlayServerWorldParticles extends AbstractPacket { + public static final PacketType TYPE = + PacketType.Play.Server.WORLD_PARTICLES; + + public WrapperPlayServerWorldParticles() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperPlayServerWorldParticles(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Particle type. + * + * @return The current Particle type + */ + public Particle getParticleType() { + return handle.getParticles().read(0); + } + + /** + * Set Particle type. + * + * @param value - new value. + */ + public WrapperPlayServerWorldParticles setParticleType(Particle value) { + handle.getParticles().write(0, value); + return this; + } + + /** + * Retrieve X. + * <p> + * Notes: x position of the particle + * + * @return The current X + */ + public float getX() { + return handle.getFloat().read(0); + } + + /** + * Set X. + * + * @param value - new value. + */ + public WrapperPlayServerWorldParticles setX(float value) { + handle.getFloat().write(0, value); + return this; + } + + /** + * Retrieve Y. + * <p> + * Notes: y position of the particle + * + * @return The current Y + */ + public float getY() { + return handle.getFloat().read(1); + } + + /** + * Set Y. + * + * @param value - new value. + */ + public WrapperPlayServerWorldParticles setY(float value) { + handle.getFloat().write(1, value); + return this; + } + + /** + * Retrieve Z. + * <p> + * Notes: z position of the particle + * + * @return The current Z + */ + public float getZ() { + return handle.getFloat().read(2); + } + + /** + * Set Z. + * + * @param value - new value. + */ + public WrapperPlayServerWorldParticles setZ(float value) { + handle.getFloat().write(2, value); + return this; + } + + /** + * Retrieve Offset X. + * <p> + * Notes: this is added to the X position after being multiplied by + * random.nextGaussian() + * + * @return The current Offset X + */ + public float getOffsetX() { + return handle.getFloat().read(3); + } + + /** + * Set Offset X. + * + * @param value - new value. + */ + public WrapperPlayServerWorldParticles setOffsetX(float value) { + handle.getFloat().write(3, value); + return this; + } + + /** + * Retrieve Offset Y. + * <p> + * Notes: this is added to the Y position after being multiplied by + * random.nextGaussian() + * + * @return The current Offset Y + */ + public float getOffsetY() { + return handle.getFloat().read(4); + } + + /** + * Set Offset Y. + * + * @param value - new value. + */ + public WrapperPlayServerWorldParticles setOffsetY(float value) { + handle.getFloat().write(4, value); + return this; + } + + /** + * Retrieve Offset Z. + * <p> + * Notes: this is added to the Z position after being multiplied by + * random.nextGaussian() + * + * @return The current Offset Z + */ + public float getOffsetZ() { + return handle.getFloat().read(5); + } + + /** + * Set Offset Z. + * + * @param value - new value. + */ + public WrapperPlayServerWorldParticles setOffsetZ(float value) { + handle.getFloat().write(5, value); + return this; + } + + /** + * Retrieve Particle data. + * <p> + * Notes: the data of each particle + * + * @return The current Particle data + */ + public float getParticleData() { + return handle.getFloat().read(6); + } + + /** + * Set Particle data. + * + * @param value - new value. + */ + public WrapperPlayServerWorldParticles setParticleData(float value) { + handle.getFloat().write(6, value); + return this; + } + + /** + * Retrieve Number of particles. + * <p> + * Notes: the number of particles to create + * + * @return The current Number of particles + */ + public int getNumberOfParticles() { + return handle.getIntegers().read(0); + } + + /** + * Set Number of particles. + * + * @param value - new value. + */ + public WrapperPlayServerWorldParticles setNumberOfParticles(int value) { + handle.getIntegers().write(0, value); + return this; + } + + /** + * Retrieve Long Distance. + * <p> + * Notes: if true, particle distance increases from 256 to 65536. + * + * @return The current Long Distance + */ + public boolean getLongDistance() { + return handle.getBooleans().read(0); + } + + /** + * Set Long Distance. + * + * @param value - new value. + */ + public WrapperPlayServerWorldParticles setLongDistance(boolean value) { + handle.getBooleans().write(0, value); + return this; + } + + /** + * Retrieve Data. + * <p> + * Notes: length depends on particle. IRON_CRACK has a length of 2, + * BLOCK_CRACK and BLOCK_DUST have lengths of 1, the rest have 0. + * + * @return The current Data + * @see Particle#getDataLength() + */ + public int[] getData() { + return handle.getIntegerArrays().read(0); + } + + /** + * Set Data. + * + * @param value - new value. + */ + public WrapperPlayServerWorldParticles setData(int[] value) { + handle.getIntegerArrays().write(0, value); + return this; + } +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperStatusServerPong.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperStatusServerPong.java new file mode 100644 index 0000000..055ffa4 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperStatusServerPong.java @@ -0,0 +1,57 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperStatusServerPong extends AbstractPacket { + public static final PacketType TYPE = PacketType.Status.Server.PONG; + + public WrapperStatusServerPong() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperStatusServerPong(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve Time. + * <p> + * Notes: should be the same as sent by the client + * + * @return The current Time + */ + public long getTime() { + return handle.getLongs().read(0); + } + + /** + * Set Time. + * + * @param value - new value. + */ + public void setTime(long value) { + handle.getLongs().write(0, value); + } + +} diff --git a/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperStatusServerServerInfo.java b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperStatusServerServerInfo.java new file mode 100644 index 0000000..d20bb3a --- /dev/null +++ b/core-master@6ef85bb745a/src/main/java/net/grandtheftmc/core/wrapper/packet/out/WrapperStatusServerServerInfo.java @@ -0,0 +1,58 @@ +/** + * PacketWrapper - ProtocolLib wrappers for Minecraft packets + * Copyright (C) dmulloy2 <http://dmulloy2.net> + * Copyright (C) Kristian S. Strangeland + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package net.grandtheftmc.core.wrapper.packet.out; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.wrappers.WrappedServerPing; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; + +public class WrapperStatusServerServerInfo extends AbstractPacket { + public static final PacketType TYPE = PacketType.Status.Server.SERVER_INFO; + + public WrapperStatusServerServerInfo() { + super(new PacketContainer(TYPE), TYPE); + handle.getModifier().writeDefaults(); + } + + public WrapperStatusServerServerInfo(PacketContainer packet) { + super(packet, TYPE); + } + + /** + * Retrieve JSON Response. + * <p> + * Notes: https://gist.github.com/thinkofdeath/6927216 + * + * @return The current JSON Response + */ + public WrappedServerPing getJsonResponse() { + return handle.getServerPings().read(0); + } + + /** + * Set JSON Response. + * + * @param value - new value. + */ + public void setJsonResponse(WrappedServerPing value) { + handle.getServerPings().write(0, value); + } + +} diff --git a/core-master@6ef85bb745a/src/main/resources/core.yml b/core-master@6ef85bb745a/src/main/resources/core.yml new file mode 100644 index 0000000..9e92fd9 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/resources/core.yml @@ -0,0 +1,5 @@ +serverType: none +serverNumber: -1 +premium: true +editMode: true +maxplayers: 300 \ No newline at end of file diff --git a/core-master@6ef85bb745a/src/main/resources/help.yml b/core-master@6ef85bb745a/src/main/resources/help.yml new file mode 100644 index 0000000..9efad9b --- /dev/null +++ b/core-master@6ef85bb745a/src/main/resources/help.yml @@ -0,0 +1,134 @@ +help: + Houses: + - "&a&lHouses &fare player-purchasable property." + - "&fThere are two types of houses available for players." + - "&fPremium houses are bought with permits, type &3/help premiumhouses &ffor more information" + - "&fNon-premium houses range from 2-14 chests, whilst premium houses do not have a chest limit" + - "&fFind houses in the PvP world by clicking on iron doors" + - "&fTo learn more about permits, type &3/help permits &ffor more for additional information" + Permits: + - "&a&lPermits &fare a nontradeable GTM currency used to buy premium houses" + - "&fPermits can be purchased from &2http://store.grandtheftmc.net/ &fand as a voting reward from &2http://grandtheftmc.net/vote" + - "&fPermits can be obtained from the tokenshop, type /help tokenshop for additional information" + - "&fType &3/help voting &ffor more information" + Tokenshop: + - "&a&lTokenshop &fgrants players the means to convert tokens into other GTM currencies and/or items" + - "&fThe command to open tokenshop is &3/tokenshop" + - "&fTo learn about tokens, type &3/help tokens &ffor additional information" + Tokens: + - "&a&lTokens &fare a nontradeable GTM currency used for a variety of purposes" + - "&fSpend tokens using &3/tokenshop" + - "&fTokens are a voting reward from &2http://grandtheftmc.net/vote &fand can purchased from &2http://store.grandtheftmc.net/" + - "&fType &3/help voting &ffor more information" + - "&fTokens can be used for cosmetic player auras, hats, and pets, do &3/help c &ffor more information" + Money: + - "&a&lMoney &fis stored in either the player's hand or bank, type &3/help hand &for &3/help bank2 for more information" + - "&fMoney is obtained by killing players or selling loot in trashcans, type &3/help trashcans &ffor more information" + - "&fMoney can be purchased from &2http://store.grandtheftmc.net/ &fand as a voting reward from &2http://grandtheftmc.net/vote" + - "&fType &3/help voting &ffor more information" + - "&fMoney can be used to buy guns at Ammunation, type &3/help Ammunation" + - "&fMoney can be used to buy food from food vendors, type &3/help Food &ffor more information" + - "&fMoney can be used to buy armor from Bincos, type &3/help Bincos &ffor more information" + - "&fUse the bank to transfer money from hand to bank, type &3/help bank2 &ffor more information" + Armor: + - "&a&lArmor &fprovides players a damage reduction from bullets, explosives, and melee attacks" + - "&fCertain armors in cases allow players to fly, type &3/help jetpacks &for &3/help wingsuits for more information" + - "&fArmor is bought from Bincos, type &3/help Bincos &ffor more information" + - "&fArmor in equippable in the armor slots of a player, opened by pressing e" + - "&fCertain armors can be obtained as a voting reward from &2http://grandtheftmc.net/vote" + Wingsuits: + - "&a&lWingsuits &fare chestplate armor worn that enable the player to fly" + - "&fWingsuits require fuel to operate, type &3/help fuel &ffor more information" + - "&fTo fly with a wingsuit, crouch and look up from an angled position, then press space repeatedly to take off" + - "&fWingsuits do not provide players with armor points, but function similarly to elytra flight, with the ability of lift" + - "&fIf more advanced help is needed for wingsuits, consult a staff member for additional information" + - "&fWingsuits obtainable as a premium rank reward, type &3/help premiumrank for additional information" + - "&fWingsuits are armor variants, type &3/help armor &ffor additional help" + Jetpacks: + - "&a&1Jetpacks &fare chestplate armor worn that enable the player to fly" + - "&fJetpacks require fuel to operate, type &3/help fuel &ffor more information" + - "&fJetpacks provide armor points, and function similarly to creativefly" + - "&fJetpacks are armor variants, type &3/help armor &ffor additional help" + - "&fJetpacks are purchasable from Bincos, type &3/help bincos &ffor additional information" + - "&fJetpacks are obtainable as a premium rank reward, type &3/help premiumrank &ffor additional information" + Fuel: + - "&a&1Fuel &fis purchasable from Bincos as a consumable item for jetpacks and wingsuits, type /help bincos for more help" + - "&fType &3/help wingsuits &for &3/help jetpacks &ffor additional information" + Bincos: + - "&a&1Bincos &fis an armor vendor that distributes armor for money, type &3/help armor &for &3/help money &ffor more information" + - "&fBincos is located in /spawn, for additional help type /help spawn" + - "&fBincos in addition sells jetpacks and fuel, for additional information type /help jetpacks or /help fuel" + - "&fGoods bought from the vendor must be paid with cash from hand, type /help hand for more help" + Spawn: + - "&a&1Spawn is the initial playerzone that is separate from the PvP world" + - "&fSpawn contains Bincos, Carshop, and Ammunation, type &3/help bincos, &3/help carshop, &3/help ammunation &ffor more information" + - "&fSpawn provides the standings for the lottery and the bank,type &3/help lottery &fand &3/help bank for more information" + - "&fSpawn is accessible through the command &2/spawn" + Bank: + - "&fThe &a&1bank &fis a building found in &3/spawn, &ftype &3/spawn &ffor more information" + - "&fPlayers here can store money from their hand to their bank, type &3/help hand or &3/help bank &ffor more information" + - "&fClicking itemframes with itemnames of ATM prompts the bank menu" + - "&fThe bank deals with the player currency of money, type &3/help money &ffor more information" + Carshop: + - "&a&1Carshop is an area found in /spawn, type /help spawn for more information" + - "&fPlayers spend money to purchase cars, helicopters, tanks, boats, and jets, type &3/help cars &ffor more information" + - "&fFor help on money, type &3/help money &ffor more information" + - "&fRepair costs for cars are 20% of their original price, once a player owns a vehicle it is owned until sold" + Cars: + - "&a&1Cars &fcan be purchased from the carshop, &3type /help carshop &ffor more information" + - "&fnce a car is destroyed, it can be repaired at the carshop" + - "&fGang members can enter the passenger seat of a car to transport multiple people at once" + - "&fCertain weapons can be used inside of cars, and sometimes cars are equipped with preset weapons" + Trashcans: + - "&a&1Trashcans &fare found in the PvP world, as well as in spawn, type &3/help spawn &ffor additional information" + - "&fTrashcans are dispensers with a custom UI that allows players to sell items for 50% of their valued price in stores" + - "&3/help Bincos &fand &3/help Ammunation, &ffor additional help for item vendors" + - "M&foney is granted to the hand, type &3/help hand vor &3/help money &ffor additional information" + Premiumranks: + - "&a&1Premium ranks are special ranks purchased here, &2http://grandtheftmc.net/vote &fand &2http://store.grandtheftmc.net/" + - "&fAll perks earned through premium ranks can be obtained through the basic rank system, type &3/help ranks &ffor more information" + - "&fPremium ranks give the player money and tokens, type &3/help money &for &3/help tokens &ffor more information" + - "&fPremium ranks give the ability to tpa and tpahere, type &3/help tpa &ffor more information" + - "&fPremium rank trials can be bought in tokenshop, type &3/help tokenshop &ffor more information" + C: + - "&a&1/c &fis a command that prompts a UI screen to manage, buy, and toggle cosmetics" + - "&fCosmetics are purchased with tokens, type &3/help tokenshop &ffor more information" + Ranks: + - "&a&1Ranks &fare obtained though the &2/rankup &fcommand" + - "&fMoney for &2/rankups &fmust be in the hand, type &3/help money &ffor more information" + - "&fRanking up allows players to access new weapons and armors, type &3/help armor &ffor more information" + Tpa: + - "&a&1Tpa is a command usable by premium rank players, use &3/help premiumranks &ffor more information" + - "&fTpa sends a teleport request to the player specified after the command, &2/tpa playername" + - "&fTpahere sends a teleport request for the player specified to teleport to you, &2/tpahere playername" + - "&fTpa commands can be accepted using &2/tpaccept &for &2/tpadeny" + - "&fPlayers combat tagged cannot accept or send teleport requests" + Hand: + - "&a&1Money &fin the hand can be transferred to the bank using the phone" + - "&ftype &3/help phone, /help bank, &for &3/help money &for more information" + - "&fUpon death, 50% of money in the hand will be dropped at the deathpoint" + Bank2: + - "&a&1The money in the bank can be transferred to the hand, type &3/help money &for &3/help hand &ffor more information" + - "&fUpon death, no money in the bank will be dropped at the deathpoint" + - "&fBank money can be transferred using the phone or ATMs, type &3/help bank &for &3/help phone for more information" + Food: + - "&a&1Food can be purchased from spawn using money, type &3/help spawn &for &3/help money &ffor additional information" + - "&fFood is sold in item vendors around the spawn map and throughout the PVP world" + Ammunation: + - "&a&1Ammunation &fis an item vendor that sells weapons and consumables for money, type &3/help money &ffor more information" + - "&fAmmunation is only found in spawn, type &3/help spawn &ffor more information" + - "&fTrashcans are located in ammunation and allow to sell weapons, type &3/help trashcans &ffor more information" + Voting: + - "&a&1Voting &fallows for the player to receive tokens, money, tokens, and rare items" + - "&fVote at &2http://grandtheftmc.net/vote" + Lottery: + - "&fThe &a&1lottery &fallows players to gamble money in a cumulative pot, at a chance to win shares of the pot" + - "&fMoney gambled gives players tickets for the weekly drawing, type &3/help tickets &for &3/help money &ffor more information" + - "&fMoney spent is nonrefundable, tickets bought are final" + Tickets: + - "&a&1Tickets &fare purchased for the lottery using money, type &3/help lottery &for &3/help money &ffor more information" + - "&fTickets are a currency that cannot be traded, and are used in the weekly lottery drawing" + About: + - "&a&1/help &fcommands were created by &9&1Presidentx, &4&1Cruee, and &dHqs" + - "&fThis project has taken around 8 hours to successfully compile" + - "&fAny suggestions for additions? Feel free to message us" diff --git a/core-master@6ef85bb745a/src/main/resources/joinSigns.yml b/core-master@6ef85bb745a/src/main/resources/joinSigns.yml new file mode 100644 index 0000000..8052729 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/resources/joinSigns.yml @@ -0,0 +1,2 @@ +codz1: {} +# - codzlobby,0,0,0 \ No newline at end of file diff --git a/core-master@6ef85bb745a/src/main/resources/perms.yml b/core-master@6ef85bb745a/src/main/resources/perms.yml new file mode 100644 index 0000000..61da91c --- /dev/null +++ b/core-master@6ef85bb745a/src/main/resources/perms.yml @@ -0,0 +1,10 @@ +ranks: + default: + - test + - some.perm + - -denied.perm + vip: + - a.vip.perm +players: + qfqsdfjkqdsfjhjsfqd: + - some.random.perm.for.only.this.fgt \ No newline at end of file diff --git a/core-master@6ef85bb745a/src/main/resources/plugin.yml b/core-master@6ef85bb745a/src/main/resources/plugin.yml new file mode 100644 index 0000000..0ee5b8b --- /dev/null +++ b/core-master@6ef85bb745a/src/main/resources/plugin.yml @@ -0,0 +1,58 @@ +name: Core +version: 1.0 +main: net.grandtheftmc.core.Core +depend: [JLib,BuycraftX] +softdepend: [WorldEdit,Votifier,HolographicDisplays,UltimateCosmetics,LibsDisguises] +commands: + socialspy: + config: + description: Reload/save the config + rank: + forumrank: + bucks: + tokens: + whitelist: + announcer: + aliases: [an, ann, announce] + message: + aliases: [msg, tell, whisper, m, w] + reply: + aliases: [r,rep,answer] + vote: + tutorial: + aliases: [tut,t] + next: + pets: + cosmetic: + aliases: [cos,cosmetics] + nametag: + petdata: + aliases: [pd, petd, pdata] + petname: + prefs: + aliases: [pref] + rewards: + ignore: + aliases: [ignored] + list: + clearchat: + aliases: [cc, chatclear] + globalmute: + aliases: [muteall, muteglobal] + rules: + save: + playtime: + info: + aliases: [how] + achievement: + aliases: [a] + crowbar: + aliases: [crowbars] + randomvoter: + crate: + maxplayers: + votestreak: + chatfilter: + aliases: [cf] + store: + event: \ No newline at end of file diff --git a/core-master@6ef85bb745a/src/main/resources/redis.yml b/core-master@6ef85bb745a/src/main/resources/redis.yml new file mode 100644 index 0000000..5dbadbb --- /dev/null +++ b/core-master@6ef85bb745a/src/main/resources/redis.yml @@ -0,0 +1,3 @@ +server: 10.0.51.209 +port: 5555 +password: gtmredispass \ No newline at end of file diff --git a/core-master@6ef85bb745a/src/main/resources/servers.yml b/core-master@6ef85bb745a/src/main/resources/servers.yml new file mode 100644 index 0000000..bad6bf6 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/resources/servers.yml @@ -0,0 +1,3 @@ +servers: {} +# - hub1 +# - codz1 \ No newline at end of file diff --git a/core-master@6ef85bb745a/src/main/resources/voting.yml b/core-master@6ef85bb745a/src/main/resources/voting.yml new file mode 100644 index 0000000..a48c0f6 --- /dev/null +++ b/core-master@6ef85bb745a/src/main/resources/voting.yml @@ -0,0 +1,36 @@ +links: + minecraftservers.org: + name: Minecraftservers.org + link: http://minecraftservers.org/vote/102886 + mcsl: + name: Minecraft-Server-List.com + link: http://minecraft-server-list.com/server/210232/vote/ + mc-index: + name: MC-Index + link: http://www.minecraft-index.com/12351-grandtheftminecart-8211-gta-in-minecraft/vote + topg.org: + name: TopG.org + link: http://topg.org/Minecraft/in-365133 + minestatus: + name: Minestatus + link: https://minestatus.net/76320-grandtheftminecart-gta-in-minecraft/vote + mcserverlist.com: + name: MCServerList.com + link: http://mc-serverlist.com/vote.php?id=3729 + mclistserv: + name: MCListServ + link: http://mclistserv.com/server/2054 + mcserverstatus: + name: MCServerStatus + link: https://mcserverstatus.com/vote/17821 + minecraft-mp.com: + name: Minecraft-MP + link: http://minecraft-mp.com/server/14659/vote/ + mineservers.com: + name: MineServers + link: https://mineservers.com/server/W6e3OH60/vote +rewards: + tokens: + type: TOKENS + chance: GUARANTEED + amount: 1 \ No newline at end of file diff --git a/creative-master@2baad30b473/.gitignore b/creative-master@2baad30b473/.gitignore new file mode 100644 index 0000000..ad7f541 --- /dev/null +++ b/creative-master@2baad30b473/.gitignore @@ -0,0 +1,8 @@ + +\.idea/ + +target/classes/ + +target/ + +*.iml \ No newline at end of file diff --git a/creative-master@2baad30b473/README.md b/creative-master@2baad30b473/README.md new file mode 100644 index 0000000..91b5899 --- /dev/null +++ b/creative-master@2baad30b473/README.md @@ -0,0 +1,4 @@ +# GTMCore +Link: https://circleci.com/gh/GrandTheftMinecart/GTMCore +<br> +Latest Artifact: https://github.com/GrandTheftMinecart/GTMCore/releases/latest \ No newline at end of file diff --git a/creative-master@2baad30b473/pom.xml b/creative-master@2baad30b473/pom.xml new file mode 100644 index 0000000..7751ffc --- /dev/null +++ b/creative-master@2baad30b473/pom.xml @@ -0,0 +1,95 @@ +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + + <groupId>net.grandtheftmc</groupId> + <artifactId>creative</artifactId> + <version>1.0.0.feature_buildteam</version> + <name>Creative</name> + + <repositories> + <repository> + <id>spigot-repo</id> + <url>https://hub.spigotmc.org/nexus/content/repositories/public/</url> + </repository> + <repository> + <id>nexus-release</id> + <url>http://nexus.grandtheftmc.net/content/repositories/releases</url> + </repository> + </repositories> + + <distributionManagement> + <repository> + <id>nexus-release</id> + <name>Internal Releases</name> + <url>http://nexus.grandtheftmc.net/content/repositories/releases</url> + </repository> + <snapshotRepository> + <id>nexus-snapshot</id> + <name>Internal Snapshots</name> + <url>http://nexus.grandtheftmc.net/content/repositories/snapshots</url> + </snapshotRepository> + </distributionManagement> + + <dependencies> + <dependency> + <groupId>org.spigotmc</groupId> + <artifactId>spigot-api</artifactId> + <version>LATEST</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>net.grandtheftmc</groupId> + <artifactId>core</artifactId> + <version>2.3.7.2</version> + <scope>provided</scope> + </dependency> + </dependencies> + + <properties> + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + <maven.compiler.source>1.8</maven.compiler.source> + <maven.compiler.target>1.8</maven.compiler.target> + </properties> + + <build> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-shade-plugin</artifactId> + <configuration> + <finalName>Creative</finalName> + </configuration> + <executions> + <execution> + <phase>package</phase> + <goals> + <goal>shade</goal> + </goals> + </execution> + </executions> + </plugin> + + <!-- Nexus deploy --> + <plugin> + <groupId>org.sonatype.plugins</groupId> + <artifactId>nexus-staging-maven-plugin</artifactId> + <version>1.6.8</version> + <extensions>true</extensions> + <executions> + <execution> + <id>default-deploy</id> + <phase>deploy</phase> + <goals> + <goal>deploy</goal> + </goals> + </execution> + </executions> + <configuration> + <serverId>nexus</serverId> + <nexusUrl>http://nexus.grandtheftmc.net:8081/nexus/</nexusUrl> + <skipStaging>true</skipStaging> + </configuration> + </plugin> + </plugins> + </build> +</project> diff --git a/creative-master@2baad30b473/src/main/java/net/grandtheftmc/Creative/Creative.java b/creative-master@2baad30b473/src/main/java/net/grandtheftmc/Creative/Creative.java new file mode 100644 index 0000000..a2931db --- /dev/null +++ b/creative-master@2baad30b473/src/main/java/net/grandtheftmc/Creative/Creative.java @@ -0,0 +1,102 @@ +package net.grandtheftmc.Creative; + +import net.grandtheftmc.Creative.commands.CreativeCommand; +import net.grandtheftmc.Creative.commands.CreativeRankCommand; +import net.grandtheftmc.Creative.commands.WorldCommand; +import net.grandtheftmc.Creative.listeners.*; +import net.grandtheftmc.Creative.users.CreativeUserManager; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Settings; +import net.grandtheftmc.core.util.Utils; +import org.bukkit.Bukkit; +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.plugin.PluginManager; +import org.bukkit.plugin.java.JavaPlugin; + +public class Creative extends JavaPlugin { + + private static Creative instance; + private static CreativeUserManager um; + + private static Location spawn; + + private static CreativeSettings settings; + + @Override + public void onEnable() { + instance = this; + this.load(); + um = new CreativeUserManager(); + this.registerListeners(); + this.registerCommands(); + } + + @Override + public void onDisable() { + this.save(); + Bukkit.getScheduler().cancelTasks(this); + } + + public void load() { + settings = new CreativeSettings(); + YamlConfiguration c = Utils.loadConfig("creative"); + settings.setCreativeConfig(c); + spawn = Utils.teleportLocationFromString(c.getString("spawn")); + this.loadSettings(); + + } + + private void loadSettings() { + Settings s = Core.getSettings(); + s.setUseEditMode(false); + s.setDefaultGameMode(GameMode.CREATIVE); + s.setServerWarperEnabled(false); + s.setStatsMenuEnabled(false); + s.setCanCraft(true); + s.setCanOpenChests(true); + s.setCanInteractInventory(true); + s.setLoadCosmetics(true); + } + + public void save() { + YamlConfiguration c = settings.getCreativeConfig(); + c.set("spawn", Utils.teleportLocationToString(spawn)); + Utils.saveConfig(c, "creative"); + } + + private void registerListeners() { + PluginManager pm = Bukkit.getPluginManager(); + pm.registerEvents(new BlockPlace(), this); + pm.registerEvents(new Join(), this); + pm.registerEvents(new Leave(), this); + pm.registerEvents(new Login(), this); + pm.registerEvents(new PotionUse(), this); + pm.registerEvents(new UpdateListener(), this); + pm.registerEvents(new SwitchWorld(), this); + } + + private void registerCommands() { + this.getCommand("creative").setExecutor(new CreativeCommand()); + this.getCommand("creativerank").setExecutor(new CreativeRankCommand()); + new WorldCommand(); + } + + public static Creative getInstance() { + return instance; + } + + public static CreativeUserManager getUserManager() { + return um; + } + + public static Location getSpawn() { + return spawn; + } + + public static CreativeSettings getSettings() { + return settings; + } + +} diff --git a/creative-master@2baad30b473/src/main/java/net/grandtheftmc/Creative/CreativeSettings.java b/creative-master@2baad30b473/src/main/java/net/grandtheftmc/Creative/CreativeSettings.java new file mode 100644 index 0000000..af55b4c --- /dev/null +++ b/creative-master@2baad30b473/src/main/java/net/grandtheftmc/Creative/CreativeSettings.java @@ -0,0 +1,17 @@ +package net.grandtheftmc.Creative; + +import org.bukkit.configuration.file.YamlConfiguration; + +public class CreativeSettings { + + private YamlConfiguration creativeConfig; + + public YamlConfiguration getCreativeConfig() { + return creativeConfig; + } + + public void setCreativeConfig(YamlConfiguration creativeConfig) { + this.creativeConfig = creativeConfig; + } + +} diff --git a/creative-master@2baad30b473/src/main/java/net/grandtheftmc/Creative/CreativeUtils.java b/creative-master@2baad30b473/src/main/java/net/grandtheftmc/Creative/CreativeUtils.java new file mode 100644 index 0000000..2bf2132 --- /dev/null +++ b/creative-master@2baad30b473/src/main/java/net/grandtheftmc/Creative/CreativeUtils.java @@ -0,0 +1,11 @@ +package net.grandtheftmc.Creative; + +import org.bukkit.entity.Player; + +public class CreativeUtils { + + public static void spawnPlayer(final Player p) { + p.teleport(Creative.getSpawn()); + } + +} diff --git a/creative-master@2baad30b473/src/main/java/net/grandtheftmc/Creative/commands/CreativeCommand.java b/creative-master@2baad30b473/src/main/java/net/grandtheftmc/Creative/commands/CreativeCommand.java new file mode 100644 index 0000000..f61ff18 --- /dev/null +++ b/creative-master@2baad30b473/src/main/java/net/grandtheftmc/Creative/commands/CreativeCommand.java @@ -0,0 +1,37 @@ +package net.grandtheftmc.Creative.commands; + +import net.grandtheftmc.Creative.Creative; +import net.grandtheftmc.core.util.Utils; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; + +public class CreativeCommand implements CommandExecutor { + + public boolean onCommand(CommandSender s, Command c, String l, String[] args) { + if (!s.isOp()) { + s.sendMessage(Utils.f("&cYou do not have permission to execute this command!")); + return true; + } + if (args.length == 0) { + s.sendMessage(Utils.f("&c/creative reload")); + s.sendMessage(Utils.f("&c/creative save")); + return true; + } + switch (args[0].toLowerCase()) { + case "reload": { + Creative.getInstance().load(); + s.sendMessage(Utils.f("&7Creative config reloaded.")); + return true; + } + case "save": { + Creative.getInstance().save(); + s.sendMessage(Utils.f("&7Creative config saved.")); + return true; + } + } + s.sendMessage(Utils.f("&c/creative <reload>")); + return true; + } + +} diff --git a/creative-master@2baad30b473/src/main/java/net/grandtheftmc/Creative/commands/CreativeRankCommand.java b/creative-master@2baad30b473/src/main/java/net/grandtheftmc/Creative/commands/CreativeRankCommand.java new file mode 100644 index 0000000..99ce41a --- /dev/null +++ b/creative-master@2baad30b473/src/main/java/net/grandtheftmc/Creative/commands/CreativeRankCommand.java @@ -0,0 +1,68 @@ +package net.grandtheftmc.Creative.commands; + +import net.grandtheftmc.Creative.Creative; +import net.grandtheftmc.Creative.users.CreativeRank; +import net.grandtheftmc.Creative.users.CreativeUser; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.database.BaseDatabase; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.users.UserRank; +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.command.ConsoleCommandSender; +import org.bukkit.entity.Player; + +public class CreativeRankCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command c, String l, String[] args) { + if (!(s instanceof ConsoleCommandSender || (s instanceof Player && Core.getUserManager().getLoadedUser(((Player)s).getUniqueId()).isRank(UserRank.BUILDER)))) { + s.sendMessage(Utils.f("&cYou do not have permission to execute this command!")); + return true; + } + if (args.length == 0) { + s.sendMessage(Utils.f("&c/creativerank set <player> <rank>")); + return true; + } + switch (args[0].toLowerCase()) { + case "set": + if (args.length != 3) { + s.sendMessage(Utils.f("&c/creativerank set <player> <rank>")); + return true; + } + CreativeRank rank = CreativeRank.getRankOrNull(args[2]); + if (rank == null) { + StringBuilder msgBuilder = new StringBuilder(Lang.RANKS + "&7There is no creativerank with the name &a" + args[2] + "&7! Valid ranks: "); + for (CreativeRank r : CreativeRank.getCreativeRanks()) + msgBuilder.append("&a").append(r.getColoredNameBold()).append("&7, "); + String msg = msgBuilder.toString(); + if (msg.endsWith("&7, ")) + msg = msg.substring(0, msg.length() - 4); + msg += "&c."; + s.sendMessage(Utils.f(msg)); + return true; + } + Player player = Bukkit.getPlayer(args[1]); + if (player == null) { + +// Core.sql.updateAsyncLater("update "+ Core.name()+" set rank='" + rank.getName() + "' where name='" + args[1] + "';"); + ServerUtil.runTaskAsync(() -> BaseDatabase.runCustomQuery("update "+ Core.name()+" set rank='" + rank.getName() + "' where name='" + args[1] + "';")); + + s.sendMessage(Utils.f(Lang.RANKS + "&7That player is not online, so his rank has been forcibly updated in the database.")); + return true; + } + CreativeUser u = Creative.getUserManager().getLoadedUser(player.getUniqueId()); + u.setRank(rank, player, Core.getUserManager().getLoadedUser(player.getUniqueId())); + s.sendMessage(Utils.f(Lang.RANKS + "&a" + player.getName() + " &7is now a &a" + u.getRank().getColoredNameBold() + "&7!")); + return true; + + default: + s.sendMessage(Utils.f("&c/creativerank set <player> <rank>")); + return true; + } + } +} diff --git a/creative-master@2baad30b473/src/main/java/net/grandtheftmc/Creative/commands/WorldCommand.java b/creative-master@2baad30b473/src/main/java/net/grandtheftmc/Creative/commands/WorldCommand.java new file mode 100644 index 0000000..b432057 --- /dev/null +++ b/creative-master@2baad30b473/src/main/java/net/grandtheftmc/Creative/commands/WorldCommand.java @@ -0,0 +1,95 @@ +package net.grandtheftmc.Creative.commands; + +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import net.grandtheftmc.Creative.Creative; +import net.grandtheftmc.Creative.users.CreativeRank; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.commands.CoreCommand; +import net.grandtheftmc.core.editmode.WorldConfig; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.util.Utils; + +public class WorldCommand extends CoreCommand { + public WorldCommand() { + super("world", "Switch worlds", "switchworld"); + } + + @Override + public void execute(CommandSender sender, String[] args) { + if (!(sender instanceof Player)) { + sender.sendMessage(Lang.NOPERM.s()); + return; + } + if (args.length == 0) { + sender.sendMessage(Utils.f("&c/world tp <world> [x] [y] [z] [pitch] [yaw]")); + return; + } + Player p = (Player) sender; + switch (args[0].toLowerCase()) { + case "tp": { + if (args.length == 1) { + sender.sendMessage(Utils.f("&c/world tp <world> [x] [y] [z] [yaw] [pitch]")); + return; + } + World world = Bukkit.getWorld(args[1]); + if (world == null) { + p.sendMessage(Utils.f("&cThat world does not exist!")); + return; + } + WorldConfig config = Core.getWorldManager().getWorldConfig(world.getName()); + if (config.isRestricted()) { + switch (config.getType()) { + case USERRANK: { + UserRank rank = UserRank.getUserRank(config.getRestricted()); + if (!Core.getUserManager().getLoadedUser(p.getUniqueId()).isRank(rank)) { + p.sendMessage(Lang.RANKS.f("&7You must be " + rank.getColoredNameBold() + "&7 to enter this world!")); + return; + } + break; + } + case RESTRICTED: + p.sendMessage(Lang.NOPERM.s()); + return; + case GAMERANK: + CreativeRank rank = CreativeRank.getRankOrNull(config.getRestricted()); + if (rank == null) rank = CreativeRank.CREATOR; + if (!Creative.getUserManager().getLoadedUser(p.getUniqueId()).isRank(rank)) { + p.sendMessage(Lang.RANKS.f("&7You must be " + rank.getColoredNameBold() + "&7 to enter this world!")); + return; + } + break; + case NONE: + break; + } + + } + double x = 0, y = 0, z = 0; + float pitch = 0, yaw = 0; + if (args.length > 2) try { + x = Double.valueOf(args[2]); + if (args.length > 3) + y = Double.valueOf(args[3]); + if (args.length > 4) + z = Double.valueOf(args[4]); + if (args.length > 5) + yaw = Float.valueOf(args[5]); + if (args.length > 6) + pitch = Float.valueOf(args[6]); + + } catch (NumberFormatException e) { + p.sendMessage(Utils.f("&cMake sure all of the numbers are Doubles (e.g. 0, 90, 150.7, 6.969)")); + return; + } + p.sendMessage(Utils.f("&aTeleporting...")); + Location location = new Location(world, x, y, z, yaw, pitch); + p.teleport(location); + } + } + } +} diff --git a/creative-master@2baad30b473/src/main/java/net/grandtheftmc/Creative/listeners/BlockPlace.java b/creative-master@2baad30b473/src/main/java/net/grandtheftmc/Creative/listeners/BlockPlace.java new file mode 100644 index 0000000..3b984f2 --- /dev/null +++ b/creative-master@2baad30b473/src/main/java/net/grandtheftmc/Creative/listeners/BlockPlace.java @@ -0,0 +1,31 @@ +package net.grandtheftmc.Creative.listeners; + +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockFromToEvent; +import org.bukkit.event.block.BlockPlaceEvent; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.users.User; + +public class BlockPlace implements Listener { + + @EventHandler + public void onPlace(BlockPlaceEvent event) { + Block block = event.getBlockPlaced(); + Player player = event.getPlayer(); + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + if (!user.isStaff() && (block.getType().equals(Material.DRAGON_EGG) || block.getType().equals(Material.BARRIER) | block.getType().equals(Material.NETHER_PORTAL))) + event.setCancelled(true); + } + + @EventHandler + public void onBlockChange(BlockFromToEvent event) { + if (event.getToBlock().getType().equals(Material.NETHER_PORTAL)) { + event.setCancelled(true); + } + } +} diff --git a/creative-master@2baad30b473/src/main/java/net/grandtheftmc/Creative/listeners/Join.java b/creative-master@2baad30b473/src/main/java/net/grandtheftmc/Creative/listeners/Join.java new file mode 100644 index 0000000..37e7f2b --- /dev/null +++ b/creative-master@2baad30b473/src/main/java/net/grandtheftmc/Creative/listeners/Join.java @@ -0,0 +1,23 @@ +package net.grandtheftmc.Creative.listeners; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.util.Utils; +import org.bukkit.GameMode; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerJoinEvent; + +public class Join implements Listener { + + @EventHandler + public void onJoin(PlayerJoinEvent event) { + Player player = event.getPlayer(); + if (player.getGameMode() != GameMode.CREATIVE) player.setGameMode(GameMode.CREATIVE); + player.sendMessage(Core.getAnnouncer().getHeader()); + player.sendMessage(Utils.f("&7Welcome to &aCreative!")); + player.sendMessage(Utils.f("&7Use &a/plot auto &7to get started with a plot.")); + player.sendMessage(Core.getAnnouncer().getFooter()); + } + +} diff --git a/creative-master@2baad30b473/src/main/java/net/grandtheftmc/Creative/listeners/Leave.java b/creative-master@2baad30b473/src/main/java/net/grandtheftmc/Creative/listeners/Leave.java new file mode 100644 index 0000000..4c0f165 --- /dev/null +++ b/creative-master@2baad30b473/src/main/java/net/grandtheftmc/Creative/listeners/Leave.java @@ -0,0 +1,20 @@ +package net.grandtheftmc.Creative.listeners; + +import net.grandtheftmc.Creative.Creative; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerQuitEvent; + +import java.util.UUID; + +/** + * Created by Liam on 22/07/2017. + */ +public class Leave implements Listener { + @EventHandler(priority = EventPriority.MONITOR) + public void onLeaveMonitor(PlayerQuitEvent e) { + UUID uuid = e.getPlayer().getUniqueId(); + Creative.getUserManager().unloadUser(uuid); + } +} diff --git a/creative-master@2baad30b473/src/main/java/net/grandtheftmc/Creative/listeners/Login.java b/creative-master@2baad30b473/src/main/java/net/grandtheftmc/Creative/listeners/Login.java new file mode 100644 index 0000000..3a1cf90 --- /dev/null +++ b/creative-master@2baad30b473/src/main/java/net/grandtheftmc/Creative/listeners/Login.java @@ -0,0 +1,41 @@ +package net.grandtheftmc.Creative.listeners; + +import net.grandtheftmc.Creative.Creative; +import net.grandtheftmc.Creative.users.CreativeUser; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.util.Utils; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.player.AsyncPlayerPreLoginEvent; +import org.bukkit.event.player.PlayerLoginEvent; +import org.bukkit.event.player.PlayerLoginEvent.Result; + +import java.util.UUID; + +public class Login implements Listener { + + @EventHandler + public void onLogin(AsyncPlayerPreLoginEvent e) { + CreativeUser user = Creative.getUserManager().getLoadedUser(e.getUniqueId()); + user.dataCheck(e.getName(), Core.getUserManager().getLoadedUser(e.getUniqueId()).getUserRank()); + if (!user.updateDataFromDb()) + e.disallow(org.bukkit.event.player.AsyncPlayerPreLoginEvent.Result.KICK_OTHER, + "&cAn error occured while trying to fetch your data from the database. Please try again in a few seconds!"); + } + + @EventHandler(priority = EventPriority.MONITOR) + public void onLoginMonitor(PlayerLoginEvent e) { + Player player = e.getPlayer(); + UUID uuid = player.getUniqueId(); + CreativeUser user = Creative.getUserManager().getLoadedUser(uuid); + if (!user.hasUpdated()) + e.disallow(PlayerLoginEvent.Result.KICK_OTHER, Utils.f("&cThe server is still restarting! Please try again in a few seconds!")); + if (e.getResult() == Result.ALLOWED) + return; + Creative.getUserManager().unloadUser(uuid); + + } + +} diff --git a/creative-master@2baad30b473/src/main/java/net/grandtheftmc/Creative/listeners/PotionUse.java b/creative-master@2baad30b473/src/main/java/net/grandtheftmc/Creative/listeners/PotionUse.java new file mode 100644 index 0000000..a83fe59 --- /dev/null +++ b/creative-master@2baad30b473/src/main/java/net/grandtheftmc/Creative/listeners/PotionUse.java @@ -0,0 +1,29 @@ +package net.grandtheftmc.Creative.listeners; + +import org.bukkit.Material; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PotionSplashEvent; +import org.bukkit.event.player.PlayerItemConsumeEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.PotionMeta; +import org.bukkit.potion.PotionEffect; + +public class PotionUse implements Listener { + + @EventHandler + public void onThrow(PotionSplashEvent event) { + event.setCancelled(true); + } + + @EventHandler + public void onDrink(PlayerItemConsumeEvent event) { + ItemStack item = event.getItem(); + if (!item.getType().equals(Material.POTION)) + return; + PotionMeta pot = (PotionMeta) item.getItemMeta(); + for (PotionEffect eff : pot.getCustomEffects()) { + if (eff.getAmplifier() < 0) event.setCancelled(true); + } + } +} diff --git a/creative-master@2baad30b473/src/main/java/net/grandtheftmc/Creative/listeners/SwitchWorld.java b/creative-master@2baad30b473/src/main/java/net/grandtheftmc/Creative/listeners/SwitchWorld.java new file mode 100644 index 0000000..7003aeb --- /dev/null +++ b/creative-master@2baad30b473/src/main/java/net/grandtheftmc/Creative/listeners/SwitchWorld.java @@ -0,0 +1,23 @@ +package net.grandtheftmc.Creative.listeners; + +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; + +import net.grandtheftmc.Creative.Creative; +import net.grandtheftmc.Creative.users.CreativeRank; +import net.grandtheftmc.core.editmode.WorldConfig; +import net.grandtheftmc.core.events.PlayerSwitchWorldEvent; + +public class SwitchWorld implements Listener { + + @EventHandler + public void onSwitchWorld(PlayerSwitchWorldEvent e) { + if (e.getToWorldConfig().isRestricted() && e.getToWorldConfig().getType() == WorldConfig.RestrictedType.GAMERANK) { + CreativeRank + rank = CreativeRank.getRankOrNull(e.getToWorldConfig().getRestricted()); + if (rank == null) rank = CreativeRank.CREATOR; + if (!Creative.getUserManager().getLoadedUser(e.getPlayer().getUniqueId()).isRank(rank)) + e.setCancelled(true); + } + } +} diff --git a/creative-master@2baad30b473/src/main/java/net/grandtheftmc/Creative/listeners/UpdateListener.java b/creative-master@2baad30b473/src/main/java/net/grandtheftmc/Creative/listeners/UpdateListener.java new file mode 100644 index 0000000..a76644b --- /dev/null +++ b/creative-master@2baad30b473/src/main/java/net/grandtheftmc/Creative/listeners/UpdateListener.java @@ -0,0 +1,45 @@ +package net.grandtheftmc.Creative.listeners; + +import net.grandtheftmc.Creative.Creative; +import net.grandtheftmc.Creative.users.CreativeRank; +import net.grandtheftmc.Creative.users.CreativeUser; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.events.DisplayNameUpdateEvent; +import net.grandtheftmc.core.events.GetPermsEvent; +import net.grandtheftmc.core.events.NametagUpdateEvent; +import net.grandtheftmc.core.users.User; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; + +public class UpdateListener implements Listener { + + + @EventHandler + public void onDisplayNameUpdate(DisplayNameUpdateEvent e) { + Player player = e.getPlayer(); + CreativeUser u = Creative.getUserManager().getLoadedUser(player.getUniqueId()); + if (u.isRank(CreativeRank.TRAINEE)) + e.setPrefix(u.getRank().getColoredNameBold()); + } + + @EventHandler + public void onGetPerms(GetPermsEvent e) { + CreativeUser user = Creative.getUserManager().getLoadedUser(e.getUUID()); + if (user != null && user.getRank() != null) + user.getRank().getAllPerms().forEach(e::addPerm); + } + + @EventHandler + public void onNametagChange(NametagUpdateEvent e) { + Player player = e.getPlayer(); + if (player == null) + return; + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + CreativeUser creativeUser = Creative.getUserManager().getLoadedUser(player.getUniqueId()); + if (creativeUser.isRank(CreativeRank.TRAINEE)) + e.setSuffix(Utils.f(creativeUser.getRank().getColoredNameBold())); + } + +} diff --git a/creative-master@2baad30b473/src/main/java/net/grandtheftmc/Creative/users/CreativeRank.java b/creative-master@2baad30b473/src/main/java/net/grandtheftmc/Creative/users/CreativeRank.java new file mode 100644 index 0000000..6494c85 --- /dev/null +++ b/creative-master@2baad30b473/src/main/java/net/grandtheftmc/Creative/users/CreativeRank.java @@ -0,0 +1,202 @@ +package net.grandtheftmc.Creative.users; + +import net.grandtheftmc.core.util.Utils; +import org.bukkit.ChatColor; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Objects; + +public enum CreativeRank { + + DEFAULT(), + TRAINEE("plots.limit.100", "plots.plot.100", "worldedit.navigation.thru.command", + "worldedit.wand", + "worldedit.history.undo", + "worldedit.region.set", + "worldedit.region.walls", + "worldedit.selection.pos", + "voxelsniper.sniper"), + NOVICE("plots.limit.200", "plots.plot.200", "worldedit.region.replace", + "worldedit.history.redo", + "worldedit.clipboard.copy", + "worldedit.clipboard.paste", + "worldedit.region.stack", + "worldedit.selection.expand", + "worldedit.clipboard.rotate", + "worldedit.region.move", + "worldeedit.generation.cylinder", + "worldedit.generation.sphere", + "worldedit.brush.smooth", + "worldedit.fill", + "worldedit.region.smooth"), + ARTIST("plots.limit.300", "plots.plot.300", "worldedit.*", + "voxelsniper.goto", + "voxelsniper.brush.ball", + "voxelsniper.brush.cylinder", + "voxelsniper.brush.voxel", + "voxelsniper.brush.stencil", + "voxelsniper.brush.stencillist", + "Voxelsniper.brush.ruler", + "voxelsniper.brush.generatetree", + "voxelsniper.sniper", + "voxelsniper.goto", + "voxelsniper.brush.ball", + "voxelsniper.brush.cylinder", + "voxelsniper.brush.voxel", + "voxelsniper.brush.set", + "voxelsniper.brush.blendball", + "voxelsniper.brush.blenddisc", + "voxelsniper.brush.blendvoxel", + "voxelsniper.brush.blendvoxeldisc", + "voxelsniper.brush.move", + "voxelsniper.brush.stencil", + "voxelsniper.brush.stencillist", + "voxelsniper.brush.rot2d", + "voxelsniper.brush.rot2dvert", + "voxelsniper.brush.rot3d", + "Voxelsniper.brush.ruler", + "Voxelsniper.brush.generatetree", + "voxelsniper.brush.eraser", + "Voxelsniper.brush.erode", + "voxelsniper.brush.disc", + "voxelsniper.brush.discface", + "voxelsniper.brush.biome", + "voxelsniper.brush.splatterball", + "voxelsniper.brush.splatterdisc", + "voxelsniper.brush.splatteroverlay", + "voxelsniper.brush.splattervoxel", + "voxelsniper.brush.splattervoxeldisc"), + CREATOR("plots.limit.1000", "plots.plot.1000", "Voxelsniper.sniper", + "voxelsniper.goto", + "voxelsniper.brush.blob", + "voxelsniper.brush.blockreset", + "voxelsniper.brush.blockresetsurface", + "voxelsniper.brush.canyon", + "voxelsniper.brush.canyonselection", + "voxelsniper.brush.checkervoxeldisc", + "voxelsniper.brush.cleansnow", + "voxelsniper.brush.clonestamp", + "voxelsniper.brush.copypasta", + "voxelsniper.brush.cylinder", + "voxelsniper.brush.dome", + "voxelsniper.brush.drain", + "voxelsniper.brush.ellipse", + "voxelsniper.brush.ellipsoid", + "voxelsniper.brush.extrude", + "voxelsniper.brush.filldown", + "voxelsniper.brush.flatocean", + "voxelsniper.brush.heatray", + "voxelsniper.brush.jaggedlinev", + "voxelsniper.brush.line", + "voxelsniper.brush.overlay", + "voxelsniper.brush.pull", + "voxelsniper.brush.randomerode", + "voxelsniper.brush.regeneratechunk", + "voxelsniper.brush.ring", + "voxelsniper.brush.scanner", + "voxelsniper.brush.set", + "voxelsniper.brush.setredstoneflip", + "voxelsniper.brush.setredstonerotate", + "voxelsniper.brush.shellball", + "voxelsniper.brush.shellset", + "voxelsniper.brush.shellvoxel", + "voxelsniper.brush.signoverwrite", + "voxelsniper.brush.snipe", + "voxelsniper.brush.snowcone", + "voxelsniper.brush.spiralstaircase", + "voxelsniper.brush.spline", + "voxelsniper.brush.stamp", + "voxelsniper.brush.threepointcircle", + "voxelsniper.brush.treesnipe", + "voxelsniper.brush.triangle", + "voxelsniper.brush.underlay", + "voxelsniper.brush.voltmeterv", + "voxelsniper.brush.voxel", + "voxelsniper.brush.voxeldisc", + "voxelsniper.brush.voxeldiscface", + "voxelsniper.brush.warp"); + + private final List<String> perms; + + CreativeRank(String... perms) { + this.perms = Arrays.asList(perms); + } + + public List<String> getAllPerms() { + List<String> permissions = new ArrayList<>(); + for (CreativeRank uc : getCreativeRanks()) { + permissions.addAll(uc.perms); + if (uc == this) + return permissions; + } + return permissions; + } + + private List<String> getPerms() { + return this.perms; + } + + public String getName() { + return this.toString(); + } + + public ChatColor getColor() { + return this == CreativeRank.DEFAULT ? ChatColor.GRAY : ChatColor.YELLOW; + } + + public String getColoredName() { + return Utils.f(this.getColor() + this.getName() + "&r"); + } + + public String getColoredNameBold() { + return Utils.f(this.getColor() + "&l" + this.getName() + "&r"); + } + + public CreativeRank getNext() { + String rankName = this.getName(); + if ("CREATOR".equalsIgnoreCase(rankName)) + return null; + int go = 0; + + CreativeRank rank = null; + for (CreativeRank r : getCreativeRanks()) + if (go == 0) { + if (Objects.equals(r.getName(), rankName)) { + go = 1; + } + } else if (go == 1) { + rank = r; + break; + } + return rank; + } + + public static CreativeRank[] getCreativeRanks() { + return CreativeRank.class.getEnumConstants(); + } + + public static CreativeRank fromString(String string) { + return Arrays.stream(CreativeRank.getCreativeRanks()).filter(uc -> uc.getName().equalsIgnoreCase(string)).findFirst().orElse(CreativeRank.DEFAULT); + } + + + public static CreativeRank getRankOrNull(String name) { + if (name == null) + return null; + return Arrays.stream(getCreativeRanks()).filter(r -> r.getName().equalsIgnoreCase(name)).findFirst().orElse(null); + } + + public boolean isHigherThan(CreativeRank rank) { + if (rank == null) + return false; + for (CreativeRank r : getCreativeRanks()) + if (r == this) + return false; + else if (r == rank) + return true; + return false; + } + +} diff --git a/creative-master@2baad30b473/src/main/java/net/grandtheftmc/Creative/users/CreativeUser.java b/creative-master@2baad30b473/src/main/java/net/grandtheftmc/Creative/users/CreativeUser.java new file mode 100644 index 0000000..913c598 --- /dev/null +++ b/creative-master@2baad30b473/src/main/java/net/grandtheftmc/Creative/users/CreativeUser.java @@ -0,0 +1,95 @@ +package net.grandtheftmc.Creative.users; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.database.BaseDatabase; +import net.grandtheftmc.core.nametags.NametagManager; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.util.ServerUtil; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.UUID; + +public class CreativeUser { + + private final UUID uuid; + private CreativeRank rank; + private boolean hasUpdated; + + public CreativeUser(UUID uuid) { + this.uuid = uuid; + } + + public UUID getUUID() { + return this.uuid; + } + + public void dataCheck(String name, UserRank rank) { +// sql.update("insert into " + Core.name() + "(uuid,name) values('" + this.uuid + "','" + name +// + "') on duplicate key update name='" + name + "';"); +// sql.update("update " + Core.name() + " set name='ERROR' where name='" + name + "' and uuid!='" + this.uuid +// + "';"); + + BaseDatabase.runCustomQuery("insert into " + Core.name() + "(uuid,name) values('" + this.uuid + "','" + name + + "') on duplicate key update name='" + name + "';"); + BaseDatabase.runCustomQuery("update " + Core.name() + " set name='ERROR' where name='" + name + "' and uuid!='" + this.uuid + "';"); + } + + public boolean updateDataFromDb() { + boolean b = true; +// try(ResultSet rs = sql.query("select * from " + Core.name() + " where uuid='" + this.uuid + "' LIMIT 1;")) { +// if (rs.next()) { +// this.rank = CreativeRank.fromString(rs.getString("rank")); +// } else +// b = false; +// rs.close(); +// } catch (SQLException e) { +// e.printStackTrace(); +// b = false; +// } + + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("select * from " + Core.name() + " where uuid='" + this.uuid + "' LIMIT 1;")) { + try (ResultSet result = statement.executeQuery()) { + if(result.next()) this.rank = CreativeRank.fromString(result.getString("rank")); + else b = false; + } + } + } catch (SQLException e) { + e.printStackTrace(); + b = false; + } + + this.hasUpdated = b; + return b; + } + + public CreativeRank getRank() { + return this.rank; + } + + public boolean isRank(CreativeRank rank) { + return !(rank == null || this.rank == null) && (this.rank == rank || this.rank.isHigherThan(rank)); + } + + public void setRank(CreativeRank r, Player player, User u) { + this.rank = r; + +// Core.sql.updateAsyncLater( +// "update " + Core.name() + " set rank='" + r.getName() + "' where uuid='" + this.uuid + "';"); + ServerUtil.runTaskAsync(() -> BaseDatabase.runCustomQuery("update " + Core.name() + " set rank='" + r.getName() + "' where uuid='" + this.uuid + "';")); + + NametagManager.updateNametag(Bukkit.getPlayer(this.uuid)); + u.setPerms(player); + } + + + public boolean hasUpdated() { + return this.hasUpdated; + } +} \ No newline at end of file diff --git a/creative-master@2baad30b473/src/main/java/net/grandtheftmc/Creative/users/CreativeUserManager.java b/creative-master@2baad30b473/src/main/java/net/grandtheftmc/Creative/users/CreativeUserManager.java new file mode 100644 index 0000000..cfefd36 --- /dev/null +++ b/creative-master@2baad30b473/src/main/java/net/grandtheftmc/Creative/users/CreativeUserManager.java @@ -0,0 +1,27 @@ +package net.grandtheftmc.Creative.users; + +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +public class CreativeUserManager { + + private final Map<UUID, CreativeUser> loadedUsers = new HashMap<>(); + + public Collection<CreativeUser> getLoadedUsers() { + return this.loadedUsers.values(); + } + + public boolean unloadUser(UUID uuid) { + return this.loadedUsers.remove(uuid) != null; + } + + public CreativeUser getLoadedUser(UUID uuid) { + if (uuid == null) { + return null; + } + return this.loadedUsers.computeIfAbsent(uuid, CreativeUser::new); + } + +} \ No newline at end of file diff --git a/creative-master@2baad30b473/src/main/resources/creative.yml b/creative-master@2baad30b473/src/main/resources/creative.yml new file mode 100644 index 0000000..95b631d --- /dev/null +++ b/creative-master@2baad30b473/src/main/resources/creative.yml @@ -0,0 +1 @@ +spawn: 0,0,0,0,0 \ No newline at end of file diff --git a/creative-master@2baad30b473/src/main/resources/plugin.yml b/creative-master@2baad30b473/src/main/resources/plugin.yml new file mode 100644 index 0000000..da36c9d --- /dev/null +++ b/creative-master@2baad30b473/src/main/resources/plugin.yml @@ -0,0 +1,12 @@ + name: Creative + version: 1.0 + description: Grand Theft Minecart Creative + author: Presidentx + main: net.grandtheftmc.Creative.Creative + depend: [Core] + commands: + creative: + description: Reload the config of Creative + usage: /creative <reload> + creativerank: + aliases: [crank] diff --git a/fanciful-master@6fb8a853dd2/.gitignore b/fanciful-master@6fb8a853dd2/.gitignore new file mode 100644 index 0000000..05381b2 --- /dev/null +++ b/fanciful-master@6fb8a853dd2/.gitignore @@ -0,0 +1,22 @@ +# Eclipse stuff +/.classpath +/.project +/.settings + +# netbeans +/nbproject + +#IntelliJ +*.iml +/.idea + +# various other potential build files +/bin +/dist +/manifest.mf +/.fatjar + +# Mac filesystem dust +.DS_Store +.DS_Storetarget +/target \ No newline at end of file diff --git a/fanciful-master@6fb8a853dd2/.travis.yml b/fanciful-master@6fb8a853dd2/.travis.yml new file mode 100644 index 0000000..dff5f3a --- /dev/null +++ b/fanciful-master@6fb8a853dd2/.travis.yml @@ -0,0 +1 @@ +language: java diff --git a/fanciful-master@6fb8a853dd2/LICENSE b/fanciful-master@6fb8a853dd2/LICENSE new file mode 100644 index 0000000..5801ca2 --- /dev/null +++ b/fanciful-master@6fb8a853dd2/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2013-2015 Max Kreminski + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/fanciful-master@6fb8a853dd2/README.md b/fanciful-master@6fb8a853dd2/README.md new file mode 100644 index 0000000..426b8e9 --- /dev/null +++ b/fanciful-master@6fb8a853dd2/README.md @@ -0,0 +1,32 @@ +Fanciful [![Build Status](https://travis-ci.org/mkremins/fanciful.svg?branch=master)](https://travis-ci.org/mkremins/fanciful) +======== +Lightweight library offering pleasant chat message formatting for Bukkit plugins. A way to get at the good stuff offered by Minecraft 1.7's new chat protocol without dropping down to raw JSON. + +Installation +-------- +Use Maven. Add the Fanciful dependency entry to your `pom.xml`. + +```xml +<dependency> + <groupId>mkremins</groupId> + <artifactId>fanciful</artifactId> + <version>0.4.0-SNAPSHOT</version> +</dependency> +``` + +As of [October 2017](https://github.com/mkremins/fanciful/issues/83), the Maven repository that formerly hosted Fanciful artifacts has been shut down. You could continue using Fanciful by cloning this GitHub repository, building Fanciful as a JAR, and [installing it locally](http://maven.apache.org/guides/mini/guide-3rd-party-jars-local.html), but this is not recommended unless you know what you're doing. + +Usage +-------- +See [Example.java](http://github.com/mkremins/fanciful/tree/master/src/example/java/mkremins/fanciful/Example.java) for a simple example. + +Status +-------- +Outdated, and largely superseded by newer libraries. No new development or ongoing support. If you're still using Fanciful or looking for something like it, consider one of the following Fanciful-inspired alternatives: + +* Spigot's [ChatComponent API](https://www.spigotmc.org/wiki/the-chat-component-api/) +* [KyoriPowered/text](https://github.com/KyoriPowered/text) + +License +-------- +[MIT License](http://opensource.org/licenses/MIT). Hack away. diff --git a/fanciful-master@6fb8a853dd2/pom.xml b/fanciful-master@6fb8a853dd2/pom.xml new file mode 100644 index 0000000..22c6de0 --- /dev/null +++ b/fanciful-master@6fb8a853dd2/pom.xml @@ -0,0 +1,116 @@ +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + + <groupId>mkremins</groupId> + <artifactId>fanciful</artifactId> + <version>0.4.0</version> + <packaging>jar</packaging> + + <properties> + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + </properties> + + <repositories> + <repository> + <id>spigot-repo</id> + <url>https://hub.spigotmc.org/nexus/content/groups/public/</url> + </repository> + <repository> + <id>nexus-release</id> + <url>https://nexus.grandtheftmc.net/content/repositories/releases/</url> + </repository> + </repositories> + + <dependencies> + <dependency> + <groupId>org.bukkit</groupId> + <artifactId>bukkit</artifactId> + <version>1.10-R0.1-SNAPSHOT</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>com.google.code.gson</groupId> + <artifactId>gson</artifactId> + <version>2.1</version> + </dependency> + </dependencies> + + <distributionManagement> + <repository> + <id>nexus-release</id> + <name>Internal Releases</name> + <url>https://nexus.grandtheftmc.net/content/repositories/releases/</url> + </repository> + <snapshotRepository> + <id>nexus-snapshot</id> + <name>Internal Snapshots</name> + <url>https://nexus.grandtheftmc.net/content/repositories/snapshots/</url> + </snapshotRepository> + </distributionManagement> + + <build> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-compiler-plugin</artifactId> + <version>3.1</version> + <configuration> + <source>1.7</source> + <target>1.7</target> + <showDeprecation>true</showDeprecation> + <showWarnings>true</showWarnings> + </configuration> + </plugin> + <!-- Shade GSON because it's no longer in Spigot. --> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-shade-plugin</artifactId> + <version>2.2</version> + <configuration> + <createDependencyReducedPom>false</createDependencyReducedPom> + <artifactSet> + <includes> + <include>com.google.code.gson:gson</include> + </includes> + </artifactSet> + <relocations> + <relocation> + <pattern>com.google.gson</pattern> + <shadedPattern>mkremins.fanciful.shaded.gson</shadedPattern> + </relocation> + </relocations> + </configuration> + <executions> + <execution> + <phase>package</phase> + <goals> + <goal>shade</goal> + </goals> + </execution> + </executions> + </plugin> + + <!-- Nexus deploy --> + <plugin> + <groupId>org.sonatype.plugins</groupId> + <artifactId>nexus-staging-maven-plugin</artifactId> + <version>1.6.8</version> + <extensions>true</extensions> + <executions> + <execution> + <id>default-deploy</id> + <phase>deploy</phase> + <goals> + <goal>deploy</goal> + </goals> + </execution> + </executions> + <configuration> + <serverId>nexus</serverId> + <nexusUrl>http://nexus.grandtheftmc.net/nexus/</nexusUrl> + <skipStaging>true</skipStaging> + </configuration> + </plugin> + </plugins> + </build> +</project> diff --git a/fanciful-master@6fb8a853dd2/src/example/java/mkremins/fanciful/Example.java b/fanciful-master@6fb8a853dd2/src/example/java/mkremins/fanciful/Example.java new file mode 100644 index 0000000..edb4ad4 --- /dev/null +++ b/fanciful-master@6fb8a853dd2/src/example/java/mkremins/fanciful/Example.java @@ -0,0 +1,70 @@ +package mkremins.fanciful; + +import static org.bukkit.ChatColor.*; +import mkremins.fanciful.FancyMessage; + +/** + * An example class demonstrating some of Fanciful's functionality. + * This is not a plugin, but a program. + */ +public final class Example { + + public static void main(String[] args) { + System.out.println(welcome("Orbixitron")); + System.out.println(advertisement()); + System.out.println(gui("Starbux42", 413000)); + } + + static String welcome(String playername) { + return new FancyMessage("Hello, ") + .color(YELLOW) + .then(playername) + .color(LIGHT_PURPLE) + .style(ITALIC, UNDERLINE) + .then("!") + .color(YELLOW) + .style(ITALIC) + .toJSONString(); + } + + static String advertisement() { + return new FancyMessage("Visit ") + .color(GREEN) + .then("our website") + .color(YELLOW) + .style(UNDERLINE) + .link("http://awesome-server.net") + .tooltip("AwesomeServer Forums") + .then(" to win ") + .color(GREEN) + .then("big prizes!") + .color(AQUA) + .style(BOLD) + .tooltip("Terms and conditions may apply. Offer not valid in Sweden.") + .toJSONString(); + } + + static String gui(String playername, int blocksEdited) { + return new FancyMessage("Player ") + .color(DARK_RED) + .then(playername) + .color(RED) + .style(ITALIC) + .then(" changed ").color(DARK_RED) + .then(Integer.toString(blocksEdited)).color(AQUA) + .then(" blocks. ").color(DARK_RED) + .then("Roll back?") + .color(GOLD) + .style(UNDERLINE) + .suggest("/rollenbacken " + playername) + .tooltip("Be careful, this might undo legitimate edits!") + .then(" ") + .then("Ban?") + .color(RED) + .style(UNDERLINE) + .suggest("/banhammer " + playername) + .tooltip("Remember: only ban if you have photographic evidence of grief.") + .toJSONString(); + } + +} diff --git a/fanciful-master@6fb8a853dd2/src/main/java/mkremins/fanciful/FancyMessage.java b/fanciful-master@6fb8a853dd2/src/main/java/mkremins/fanciful/FancyMessage.java new file mode 100644 index 0000000..dc524c5 --- /dev/null +++ b/fanciful-master@6fb8a853dd2/src/main/java/mkremins/fanciful/FancyMessage.java @@ -0,0 +1,655 @@ +package mkremins.fanciful; + +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import com.google.gson.stream.JsonWriter; +import net.amoebaman.util.ArrayWrapper; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.configuration.serialization.ConfigurationSerializable; +import org.bukkit.configuration.serialization.ConfigurationSerialization; +import org.bukkit.entity.Player; +import java.io.IOException; +import java.io.StringWriter; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.logging.Level; + +import static mkremins.fanciful.TextualComponent.rawText; + +/** + * Represents a formattable message. Such messages can use elements such as colors, formatting codes, hover and click data, and other features provided by the vanilla Minecraft <a href="http://minecraft.gamepedia.com/Tellraw#Raw_JSON_Text">JSON message formatter</a>. + * This class allows plugins to emulate the functionality of the vanilla Minecraft <a href="http://minecraft.gamepedia.com/Commands#tellraw">tellraw command</a>. + * <p> + * This class follows the builder pattern, allowing for method chaining. + * It is set up such that invocations of property-setting methods will affect the current editing component, + * and a call to {@link #then()} or {@link #then(String)} will append a new editing component to the end of the message, + * optionally initializing it with text. Further property-setting method calls will affect that editing component. + * </p> + */ +public class FancyMessage implements JsonRepresentedObject, Cloneable, Iterable<MessagePart>, ConfigurationSerializable { + + static { + ConfigurationSerialization.registerClass(FancyMessage.class); + } + + private List<MessagePart> messageParts; + private String jsonString; + private boolean dirty; + + @Override + public FancyMessage clone() throws CloneNotSupportedException { + FancyMessage instance = (FancyMessage) super.clone(); + instance.messageParts = new ArrayList<MessagePart>(messageParts.size()); + for (int i = 0; i < messageParts.size(); i++) { + instance.messageParts.add(i, messageParts.get(i).clone()); + } + instance.dirty = false; + instance.jsonString = null; + return instance; + } + + /** + * Creates a JSON message with text. + * + * @param firstPartText The existing text in the message. + */ + public FancyMessage(final String firstPartText) { + this(rawText(firstPartText)); + } + + public FancyMessage(final TextualComponent firstPartText) { + messageParts = new ArrayList<MessagePart>(); + messageParts.add(new MessagePart(firstPartText)); + jsonString = null; + dirty = false; + } + + /** + * Creates a JSON message without text. + */ + public FancyMessage() { + this((TextualComponent) null); + } + + /** + * Sets the text of the current editing component to a value. + * + * @param text The new text of the current editing component. + * @return This builder instance. + */ + public FancyMessage text(String text) { + MessagePart latest = latest(); + latest.text = rawText(text); + dirty = true; + return this; + } + + /** + * Sets the text of the current editing component to a value. + * + * @param text The new text of the current editing component. + * @return This builder instance. + */ + public FancyMessage text(TextualComponent text) { + MessagePart latest = latest(); + latest.text = text; + dirty = true; + return this; + } + + /** + * Sets the color of the current editing component to a value. + * + * @param color The new color of the current editing component. + * @return This builder instance. + * @throws IllegalArgumentException If the specified {@code ChatColor} enumeration value is not a color (but a format value). + */ + public FancyMessage color(final ChatColor color) { + if (!color.isColor()) { + throw new IllegalArgumentException(color.name() + " is not a color"); + } + latest().color = color; + dirty = true; + return this; + } + + /** + * Sets the stylization of the current editing component. + * + * @param styles The array of styles to apply to the editing component. + * @return This builder instance. + * @throws IllegalArgumentException If any of the enumeration values in the array do not represent formatters. + */ + public FancyMessage style(ChatColor... styles) { + for (final ChatColor style : styles) { + if (!style.isFormat()) { + throw new IllegalArgumentException(style.name() + " is not a style"); + } + } + latest().styles.addAll(Arrays.asList(styles)); + dirty = true; + return this; + } + + /** + * Set the behavior of the current editing component to instruct the client to open a file on the client side filesystem when the currently edited part of the {@code FancyMessage} is clicked. + * + * @param path The path of the file on the client filesystem. + * @return This builder instance. + */ + public FancyMessage file(final String path) { + onClick("open_file", path); + return this; + } + + /** + * Set the behavior of the current editing component to instruct the client to open a webpage in the client's web browser when the currently edited part of the {@code FancyMessage} is clicked. + * + * @param url The URL of the page to open when the link is clicked. + * @return This builder instance. + */ + public FancyMessage link(final String url) { + onClick("open_url", url); + return this; + } + + /** + * Set the behavior of the current editing component to instruct the client to replace the chat input box content with the specified string when the currently edited part of the {@code FancyMessage} is clicked. + * The client will not immediately send the command to the server to be executed unless the client player submits the command/chat message, usually with the enter key. + * + * @param command The text to display in the chat bar of the client. + * @return This builder instance. + */ + public FancyMessage suggest(final String command) { + onClick("suggest_command", command); + return this; + } + + /** + * Set the behavior of the current editing component to instruct the client to append the chat input box content with the specified string when the currently edited part of the {@code FancyMessage} is SHIFT-CLICKED. + * The client will not immediately send the command to the server to be executed unless the client player submits the command/chat message, usually with the enter key. + * + * @param command The text to append to the chat bar of the client. + * @return This builder instance. + */ + public FancyMessage insert(final String command) { + latest().insertionData = command; + dirty = true; + return this; + } + + /** + * Set the behavior of the current editing component to instruct the client to send the specified string to the server as a chat message when the currently edited part of the {@code FancyMessage} is clicked. + * The client <b>will</b> immediately send the command to the server to be executed when the editing component is clicked. + * + * @param command The text to display in the chat bar of the client. + * @return This builder instance. + */ + public FancyMessage command(final String command) { + onClick("run_command", command); + return this; + } + + /** + * Set the behavior of the current editing component to display information about an achievement when the client hovers over the text. + * <p>Tooltips do not inherit display characteristics, such as color and styles, from the message component on which they are applied.</p> + * + * @param name The name of the achievement to display, excluding the "achievement." prefix. + * @return This builder instance. + */ + public FancyMessage achievementTooltip(final String name) { + onHover("show_achievement", new JsonString("achievement." + name)); + return this; + } + + /** + * Set the behavior of the current editing component to display raw text when the client hovers over the text. + * <p>Tooltips do not inherit display characteristics, such as color and styles, from the message component on which they are applied.</p> + * + * @param text The text, which supports newlines, which will be displayed to the client upon hovering. + * @return This builder instance. + */ + public FancyMessage tooltip(final String text) { + onHover("show_text", new JsonString(text)); + return this; + } + + /** + * Set the behavior of the current editing component to display raw text when the client hovers over the text. + * <p>Tooltips do not inherit display characteristics, such as color and styles, from the message component on which they are applied.</p> + * + * @param lines The lines of text which will be displayed to the client upon hovering. The iteration order of this object will be the order in which the lines of the tooltip are created. + * @return This builder instance. + */ + public FancyMessage tooltip(final Iterable<String> lines) { + tooltip(ArrayWrapper.toArray(lines, String.class)); + return this; + } + + /** + * Set the behavior of the current editing component to display raw text when the client hovers over the text. + * <p>Tooltips do not inherit display characteristics, such as color and styles, from the message component on which they are applied.</p> + * + * @param lines The lines of text which will be displayed to the client upon hovering. + * @return This builder instance. + */ + public FancyMessage tooltip(final String... lines) { + StringBuilder builder = new StringBuilder(); + for (int i = 0; i < lines.length; i++) { + builder.append(lines[i]); + if (i != lines.length - 1) { + builder.append('\n'); + } + } + tooltip(builder.toString()); + return this; + } + + /** + * Set the behavior of the current editing component to display formatted text when the client hovers over the text. + * <p>Tooltips do not inherit display characteristics, such as color and styles, from the message component on which they are applied.</p> + * + * @param text The formatted text which will be displayed to the client upon hovering. + * @return This builder instance. + */ + public FancyMessage formattedTooltip(FancyMessage text) { + for (MessagePart component : text.messageParts) { + if (component.clickActionData != null && component.clickActionName != null) { + throw new IllegalArgumentException("The tooltip text cannot have click data."); + } else if (component.hoverActionData != null && component.hoverActionName != null) { + throw new IllegalArgumentException("The tooltip text cannot have a tooltip."); + } + } + onHover("show_text", text); + return this; + } + + /** + * Set the behavior of the current editing component to display the specified lines of formatted text when the client hovers over the text. + * <p>Tooltips do not inherit display characteristics, such as color and styles, from the message component on which they are applied.</p> + * + * @param lines The lines of formatted text which will be displayed to the client upon hovering. + * @return This builder instance. + */ + public FancyMessage formattedTooltip(FancyMessage... lines) { + if (lines.length < 1) { + onHover(null, null); // Clear tooltip + return this; + } + + FancyMessage result = new FancyMessage(); + result.messageParts.clear(); // Remove the one existing text component that exists by default, which destabilizes the object + + for (int i = 0; i < lines.length; i++) { + try { + for (MessagePart component : lines[i]) { + if (component.clickActionData != null && component.clickActionName != null) { + throw new IllegalArgumentException("The tooltip text cannot have click data."); + } else if (component.hoverActionData != null && component.hoverActionName != null) { + throw new IllegalArgumentException("The tooltip text cannot have a tooltip."); + } + if (component.hasText()) { + result.messageParts.add(component.clone()); + } + } + if (i != lines.length - 1) { + result.messageParts.add(new MessagePart(rawText("\n"))); + } + } catch (CloneNotSupportedException e) { + Bukkit.getLogger().log(Level.WARNING, "Failed to clone object", e); + return this; + } + } + return formattedTooltip(result.messageParts.isEmpty() ? null : result); // Throws NPE if size is 0, intended + } + + /** + * Set the behavior of the current editing component to display the specified lines of formatted text when the client hovers over the text. + * <p>Tooltips do not inherit display characteristics, such as color and styles, from the message component on which they are applied.</p> + * + * @param lines The lines of text which will be displayed to the client upon hovering. The iteration order of this object will be the order in which the lines of the tooltip are created. + * @return This builder instance. + */ + public FancyMessage formattedTooltip(final Iterable<FancyMessage> lines) { + return formattedTooltip(ArrayWrapper.toArray(lines, FancyMessage.class)); + } + + /** + * If the text is a translatable key, and it has replaceable values, this function can be used to set the replacements that will be used in the message. + * + * @param replacements The replacements, in order, that will be used in the language-specific message. + * @return This builder instance. + */ + public FancyMessage translationReplacements(final String... replacements) { + for (String str : replacements) { + latest().translationReplacements.add(new JsonString(str)); + } + dirty = true; + + return this; + } + /* + + /** + * If the text is a translatable key, and it has replaceable values, this function can be used to set the replacements that will be used in the message. + * @param replacements The replacements, in order, that will be used in the language-specific message. + * @return This builder instance. + */ /* ------------ + public FancyMessage translationReplacements(final Iterable<? extends CharSequence> replacements){ + for(CharSequence str : replacements){ + latest().translationReplacements.add(new JsonString(str)); + } + + return this; + } + + */ + + /** + * If the text is a translatable key, and it has replaceable values, this function can be used to set the replacements that will be used in the message. + * + * @param replacements The replacements, in order, that will be used in the language-specific message. + * @return This builder instance. + */ + public FancyMessage translationReplacements(final FancyMessage... replacements) { + for (FancyMessage str : replacements) { + latest().translationReplacements.add(str); + } + + dirty = true; + + return this; + } + + /** + * If the text is a translatable key, and it has replaceable values, this function can be used to set the replacements that will be used in the message. + * + * @param replacements The replacements, in order, that will be used in the language-specific message. + * @return This builder instance. + */ + public FancyMessage translationReplacements(final Iterable<FancyMessage> replacements) { + return translationReplacements(ArrayWrapper.toArray(replacements, FancyMessage.class)); + } + + /** + * Terminate construction of the current editing component, and begin construction of a new message component. + * After a successful call to this method, all setter methods will refer to a new message component, created as a result of the call to this method. + * + * @param text The text which will populate the new message component. + * @return This builder instance. + */ + public FancyMessage then(final String text) { + return then(rawText(text)); + } + + /** + * Terminate construction of the current editing component, and begin construction of a new message component. + * After a successful call to this method, all setter methods will refer to a new message component, created as a result of the call to this method. + * + * @param text The text which will populate the new message component. + * @return This builder instance. + */ + public FancyMessage then(final TextualComponent text) { + if (!latest().hasText()) { + throw new IllegalStateException("previous message part has no text"); + } + messageParts.add(new MessagePart(text)); + dirty = true; + return this; + } + + /** + * Terminate construction of the current editing component, and begin construction of a new message component. + * After a successful call to this method, all setter methods will refer to a new message component, created as a result of the call to this method. + * + * @return This builder instance. + */ + public FancyMessage then() { + if (!latest().hasText()) { + throw new IllegalStateException("previous message part has no text"); + } + messageParts.add(new MessagePart()); + dirty = true; + return this; + } + + @Override + public void writeJson(JsonWriter writer) throws IOException { + if (messageParts.size() == 1) { + latest().writeJson(writer); + } else { + writer.beginObject().name("text").value("").name("extra").beginArray(); + for (final MessagePart part : this) { + part.writeJson(writer); + } + writer.endArray().endObject(); + } + } + + /** + * Serialize this fancy message, converting it into syntactically-valid JSON using a {@link JsonWriter}. + * This JSON should be compatible with vanilla formatter commands such as {@code /tellraw}. + * + * @return The JSON string representing this object. + */ + public String toJSONString() { + if (!dirty && jsonString != null) { + return jsonString; + } + StringWriter string = new StringWriter(); + JsonWriter json = new JsonWriter(string); + try { + writeJson(json); + json.close(); + } catch (IOException e) { + throw new RuntimeException("invalid message"); + } + jsonString = string.toString(); + dirty = false; + return jsonString; + } + + /** + * Sends this message to a player. The player will receive the fully-fledged formatted display of this message. + * + * @param player The player who will receive the message. + */ + public void send(Player player) { + send(player, toJSONString()); + } + + private void send(CommandSender sender, String jsonString) { + if (!(sender instanceof Player)) { + sender.sendMessage(toOldMessageFormat()); + return; + } + Player player = (Player) sender; + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + player.getName() + " " + jsonString); + } + + /** + * Sends this message to a command sender. + * If the sender is a player, they will receive the fully-fledged formatted display of this message. + * Otherwise, they will receive a version of this message with less formatting. + * + * @param sender The command sender who will receive the message. + * @see #toOldMessageFormat() + */ + public void send(CommandSender sender) { + send(sender, toJSONString()); + } + + /** + * Sends this message to multiple command senders. + * + * @param senders The command senders who will receive the message. + * @see #send(CommandSender) + */ + public void send(final Iterable<? extends CommandSender> senders) { + String string = toJSONString(); + for (final CommandSender sender : senders) { + send(sender, string); + } + } + + /** + * Convert this message to a human-readable string with limited formatting. + * This method is used to send this message to clients without JSON formatting support. + * <p> + * Serialization of this message by using this message will include (in this order for each message part): + * <ol> + * <li>The color of each message part.</li> + * <li>The applicable stylizations for each message part.</li> + * <li>The core text of the message part.</li> + * </ol> + * The primary omissions are tooltips and clickable actions. Consequently, this method should be used only as a last resort. + * </p> + * <p> + * Color and formatting can be removed from the returned string by using {@link ChatColor#stripColor(String)}.</p> + * + * @return A human-readable string representing limited formatting in addition to the core text of this message. + */ + public String toOldMessageFormat() { + StringBuilder result = new StringBuilder(); + for (MessagePart part : this) { + result.append(part.color == null ? "" : part.color); + for (ChatColor formatSpecifier : part.styles) { + result.append(formatSpecifier); + } + result.append(part.text); + } + return result.toString(); + } + + private MessagePart latest() { + return messageParts.get(messageParts.size() - 1); + } + + private void onClick(final String name, final String data) { + final MessagePart latest = latest(); + latest.clickActionName = name; + latest.clickActionData = data; + dirty = true; + } + + private void onHover(final String name, final JsonRepresentedObject data) { + final MessagePart latest = latest(); + latest.hoverActionName = name; + latest.hoverActionData = data; + dirty = true; + } + + // Doc copied from interface + public Map<String, Object> serialize() { + HashMap<String, Object> map = new HashMap<String, Object>(); + map.put("messageParts", messageParts); +// map.put("JSON", toJSONString()); + return map; + } + + /** + * Deserializes a JSON-represented message from a mapping of key-value pairs. + * This is called by the Bukkit serialization API. + * It is not intended for direct public API consumption. + * + * @param serialized The key-value mapping which represents a fancy message. + */ + @SuppressWarnings("unchecked") + public static FancyMessage deserialize(Map<String, Object> serialized) { + FancyMessage msg = new FancyMessage(); + msg.messageParts = (List<MessagePart>) serialized.get("messageParts"); + msg.jsonString = serialized.containsKey("JSON") ? serialized.get("JSON").toString() : null; + msg.dirty = !serialized.containsKey("JSON"); + return msg; + } + + /** + * <b>Internally called method. Not for API consumption.</b> + */ + public Iterator<MessagePart> iterator() { + return messageParts.iterator(); + } + + private static JsonParser _stringParser = new JsonParser(); + + /** + * Deserializes a fancy message from its JSON representation. This JSON representation is of the format of + * that returned by {@link #toJSONString()}, and is compatible with vanilla inputs. + * + * @param json The JSON string which represents a fancy message. + * @return A {@code FancyMessage} representing the parameterized JSON message. + */ + public static FancyMessage deserialize(String json) { + JsonObject serialized = _stringParser.parse(json).getAsJsonObject(); + JsonArray extra = serialized.getAsJsonArray("extra"); // Get the extra component + FancyMessage returnVal = new FancyMessage(); + returnVal.messageParts.clear(); + for (JsonElement mPrt : extra) { + MessagePart component = new MessagePart(); + JsonObject messagePart = mPrt.getAsJsonObject(); + for (Map.Entry<String, JsonElement> entry : messagePart.entrySet()) { + // Deserialize text + if (TextualComponent.isTextKey(entry.getKey())) { + // The map mimics the YAML serialization, which has a "key" field and one or more "value" fields + Map<String, Object> serializedMapForm = new HashMap<String, Object>(); // Must be object due to Bukkit serializer API compliance + serializedMapForm.put("key", entry.getKey()); + if (entry.getValue().isJsonPrimitive()) { + // Assume string + serializedMapForm.put("value", entry.getValue().getAsString()); + } else { + // Composite object, but we assume each element is a string + for (Map.Entry<String, JsonElement> compositeNestedElement : entry.getValue().getAsJsonObject().entrySet()) { + serializedMapForm.put("value." + compositeNestedElement.getKey(), compositeNestedElement.getValue().getAsString()); + } + } + component.text = TextualComponent.deserialize(serializedMapForm); + } else if (MessagePart.stylesToNames.inverse().containsKey(entry.getKey())) { + if (entry.getValue().getAsBoolean()) { + component.styles.add(MessagePart.stylesToNames.inverse().get(entry.getKey())); + } + } else if (entry.getKey().equals("color")) { + component.color = ChatColor.valueOf(entry.getValue().getAsString().toUpperCase()); + } else if (entry.getKey().equals("clickEvent")) { + JsonObject object = entry.getValue().getAsJsonObject(); + component.clickActionName = object.get("action").getAsString(); + component.clickActionData = object.get("value").getAsString(); + } else if (entry.getKey().equals("hoverEvent")) { + JsonObject object = entry.getValue().getAsJsonObject(); + component.hoverActionName = object.get("action").getAsString(); + if (object.get("value").isJsonPrimitive()) { + // Assume string + component.hoverActionData = new JsonString(object.get("value").getAsString()); + } else { + // Assume composite type + // The only composite type we currently store is another FancyMessage + // Therefore, recursion time! + component.hoverActionData = deserialize(object.get("value").toString() /* This should properly serialize the JSON object as a JSON string */); + } + } else if (entry.getKey().equals("insertion")) { + component.insertionData = entry.getValue().getAsString(); + } else if (entry.getKey().equals("with")) { + for (JsonElement object : entry.getValue().getAsJsonArray()) { + if (object.isJsonPrimitive()) { + component.translationReplacements.add(new JsonString(object.getAsString())); + } else { + // Only composite type stored in this array is - again - FancyMessages + // Recurse within this function to parse this as a translation replacement + component.translationReplacements.add(deserialize(object.toString())); + } + } + } + } + returnVal.messageParts.add(component); + } + return returnVal; + } + +} diff --git a/fanciful-master@6fb8a853dd2/src/main/java/mkremins/fanciful/JsonRepresentedObject.java b/fanciful-master@6fb8a853dd2/src/main/java/mkremins/fanciful/JsonRepresentedObject.java new file mode 100644 index 0000000..7264111 --- /dev/null +++ b/fanciful-master@6fb8a853dd2/src/main/java/mkremins/fanciful/JsonRepresentedObject.java @@ -0,0 +1,19 @@ +package mkremins.fanciful; + +import com.google.gson.stream.JsonWriter; + +import java.io.IOException; + +/** + * Represents an object that can be serialized to a JSON writer instance. + */ +interface JsonRepresentedObject { + + /** + * Writes the JSON representation of this object to the specified writer. + * @param writer The JSON writer which will receive the object. + * @throws IOException If an error occurs writing to the stream. + */ + public void writeJson(JsonWriter writer) throws IOException; + +} diff --git a/fanciful-master@6fb8a853dd2/src/main/java/mkremins/fanciful/JsonString.java b/fanciful-master@6fb8a853dd2/src/main/java/mkremins/fanciful/JsonString.java new file mode 100644 index 0000000..67764c6 --- /dev/null +++ b/fanciful-master@6fb8a853dd2/src/main/java/mkremins/fanciful/JsonString.java @@ -0,0 +1,47 @@ +package mkremins.fanciful; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +import com.google.gson.stream.JsonWriter; +import org.bukkit.configuration.serialization.ConfigurationSerializable; + +/** + * Represents a JSON string value. + * Writes by this object will not write name values nor begin/end objects in the JSON stream. + * All writes merely write the represented string value. + */ +final class JsonString implements JsonRepresentedObject, ConfigurationSerializable { + + private String _value; + + public JsonString(CharSequence value) { + _value = value == null ? null : value.toString(); + } + + @Override + public void writeJson(JsonWriter writer) throws IOException { + writer.value(getValue()); + } + + public String getValue() { + return _value; + } + + public Map<String, Object> serialize() { + HashMap<String, Object> theSingleValue = new HashMap<String, Object>(); + theSingleValue.put("stringValue", _value); + return theSingleValue; + } + + public static JsonString deserialize(Map<String, Object> map) { + return new JsonString(map.get("stringValue").toString()); + } + + @Override + public String toString() { + return _value; + } + +} diff --git a/fanciful-master@6fb8a853dd2/src/main/java/mkremins/fanciful/MessagePart.java b/fanciful-master@6fb8a853dd2/src/main/java/mkremins/fanciful/MessagePart.java new file mode 100644 index 0000000..037939a --- /dev/null +++ b/fanciful-master@6fb8a853dd2/src/main/java/mkremins/fanciful/MessagePart.java @@ -0,0 +1,155 @@ +package mkremins.fanciful; + +import com.google.common.collect.BiMap; +import com.google.common.collect.ImmutableBiMap; +import com.google.gson.stream.JsonWriter; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.configuration.serialization.ConfigurationSerializable; +import org.bukkit.configuration.serialization.ConfigurationSerialization; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; +import java.util.logging.Level; + +/** + * Internal class: Represents a component of a JSON-serializable {@link FancyMessage}. + */ +final class MessagePart implements JsonRepresentedObject, ConfigurationSerializable, Cloneable { + + ChatColor color = ChatColor.WHITE; + ArrayList<ChatColor> styles = new ArrayList<ChatColor>(); + String clickActionName = null, clickActionData = null, hoverActionName = null; + JsonRepresentedObject hoverActionData = null; + TextualComponent text = null; + String insertionData = null; + ArrayList<JsonRepresentedObject> translationReplacements = new ArrayList<JsonRepresentedObject>(); + + MessagePart(final TextualComponent text) { + this.text = text; + } + + MessagePart() { + this.text = null; + } + + boolean hasText() { + return text != null; + } + + @Override + @SuppressWarnings("unchecked") + public MessagePart clone() throws CloneNotSupportedException { + MessagePart obj = (MessagePart) super.clone(); + obj.styles = (ArrayList<ChatColor>) styles.clone(); + if (hoverActionData instanceof JsonString) { + obj.hoverActionData = new JsonString(((JsonString) hoverActionData).getValue()); + } else if (hoverActionData instanceof FancyMessage) { + obj.hoverActionData = ((FancyMessage) hoverActionData).clone(); + } + obj.translationReplacements = (ArrayList<JsonRepresentedObject>) translationReplacements.clone(); + return obj; + + } + + static final BiMap<ChatColor, String> stylesToNames; + + static { + ImmutableBiMap.Builder<ChatColor, String> builder = ImmutableBiMap.builder(); + for (final ChatColor style : ChatColor.values()) { + if (!style.isFormat()) { + continue; + } + + String styleName; + switch (style) { + case MAGIC: + styleName = "obfuscated"; + break; + case UNDERLINE: + styleName = "underlined"; + break; + default: + styleName = style.name().toLowerCase(); + break; + } + + builder.put(style, styleName); + } + stylesToNames = builder.build(); + } + + public void writeJson(JsonWriter json) { + try { + json.beginObject(); + text.writeJson(json); + json.name("color").value(color.name().toLowerCase()); + for (final ChatColor style : styles) { + json.name(stylesToNames.get(style)).value(true); + } + if (clickActionName != null && clickActionData != null) { + json.name("clickEvent") + .beginObject() + .name("action").value(clickActionName) + .name("value").value(clickActionData) + .endObject(); + } + if (hoverActionName != null && hoverActionData != null) { + json.name("hoverEvent") + .beginObject() + .name("action").value(hoverActionName) + .name("value"); + hoverActionData.writeJson(json); + json.endObject(); + } + if (insertionData != null) { + json.name("insertion").value(insertionData); + } + if (translationReplacements.size() > 0 && text != null && TextualComponent.isTranslatableText(text)) { + json.name("with").beginArray(); + for (JsonRepresentedObject obj : translationReplacements) { + obj.writeJson(json); + } + json.endArray(); + } + json.endObject(); + } catch (IOException e) { + Bukkit.getLogger().log(Level.WARNING, "A problem occured during writing of JSON string", e); + } + } + + public Map<String, Object> serialize() { + HashMap<String, Object> map = new HashMap<String, Object>(); + map.put("text", text); + map.put("styles", styles); + map.put("color", color.getChar()); + map.put("hoverActionName", hoverActionName); + map.put("hoverActionData", hoverActionData); + map.put("clickActionName", clickActionName); + map.put("clickActionData", clickActionData); + map.put("insertion", insertionData); + map.put("translationReplacements", translationReplacements); + return map; + } + + @SuppressWarnings("unchecked") + public static MessagePart deserialize(Map<String, Object> serialized) { + MessagePart part = new MessagePart((TextualComponent) serialized.get("text")); + part.styles = (ArrayList<ChatColor>) serialized.get("styles"); + part.color = ChatColor.getByChar(serialized.get("color").toString()); + part.hoverActionName = (String) serialized.get("hoverActionName"); + part.hoverActionData = (JsonRepresentedObject) serialized.get("hoverActionData"); + part.clickActionName = (String) serialized.get("clickActionName"); + part.clickActionData = (String) serialized.get("clickActionData"); + part.insertionData = (String) serialized.get("insertion"); + part.translationReplacements = (ArrayList<JsonRepresentedObject>) serialized.get("translationReplacements"); + return part; + } + + static { + ConfigurationSerialization.registerClass(MessagePart.class); + } + +} diff --git a/fanciful-master@6fb8a853dd2/src/main/java/mkremins/fanciful/TextualComponent.java b/fanciful-master@6fb8a853dd2/src/main/java/mkremins/fanciful/TextualComponent.java new file mode 100644 index 0000000..5e960eb --- /dev/null +++ b/fanciful-master@6fb8a853dd2/src/main/java/mkremins/fanciful/TextualComponent.java @@ -0,0 +1,297 @@ +package mkremins.fanciful; + +import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableMap; +import com.google.gson.stream.JsonWriter; +import org.bukkit.configuration.serialization.ConfigurationSerializable; +import org.bukkit.configuration.serialization.ConfigurationSerialization; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +/** + * Represents a textual component of a message part. + * This can be used to not only represent string literals in a JSON message, + * but also to represent localized strings and other text values. + * <p>Different instances of this class can be created with static constructor methods.</p> + */ +public abstract class TextualComponent implements Cloneable { + + static { + ConfigurationSerialization.registerClass(TextualComponent.ArbitraryTextTypeComponent.class); + ConfigurationSerialization.registerClass(TextualComponent.ComplexTextTypeComponent.class); + } + + @Override + public String toString() { + return getReadableString(); + } + + /** + * @return The JSON key used to represent text components of this type. + */ + public abstract String getKey(); + + /** + * @return A readable String + */ + public abstract String getReadableString(); + + /** + * Clones a textual component instance. + * The returned object should not reference this textual component instance, but should maintain the same key and value. + */ + @Override + public abstract TextualComponent clone() throws CloneNotSupportedException; + + /** + * Writes the text data represented by this textual component to the specified JSON writer object. + * A new object within the writer is not started. + * + * @param writer The object to which to write the JSON data. + * @throws IOException If an error occurs while writing to the stream. + */ + public abstract void writeJson(JsonWriter writer) throws IOException; + + static TextualComponent deserialize(Map<String, Object> map) { + if (map.containsKey("key") && map.size() == 2 && map.containsKey("value")) { + // Arbitrary text component + return ArbitraryTextTypeComponent.deserialize(map); + } else if (map.size() >= 2 && map.containsKey("key") && !map.containsKey("value") /* It contains keys that START WITH value */) { + // Complex JSON object + return ComplexTextTypeComponent.deserialize(map); + } + + return null; + } + + static boolean isTextKey(String key) { + return key.equals("translate") || key.equals("text") || key.equals("score") || key.equals("selector"); + } + + static boolean isTranslatableText(TextualComponent component) { + return component instanceof ComplexTextTypeComponent && ((ComplexTextTypeComponent) component).getKey().equals("translate"); + } + + /** + * Internal class used to represent all types of text components. + * Exception validating done is on keys and values. + */ + private static final class ArbitraryTextTypeComponent extends TextualComponent implements ConfigurationSerializable { + + public ArbitraryTextTypeComponent(String key, String value) { + setKey(key); + setValue(value); + } + + @Override + public String getKey() { + return _key; + } + + public void setKey(String key) { + Preconditions.checkArgument(key != null && !key.isEmpty(), "The key must be specified."); + _key = key; + } + + public String getValue() { + return _value; + } + + public void setValue(String value) { + Preconditions.checkArgument(value != null, "The value must be specified."); + _value = value; + } + + private String _key; + private String _value; + + @Override + public TextualComponent clone() throws CloneNotSupportedException { + // Since this is a private and final class, we can just reinstantiate this class instead of casting super.clone + return new ArbitraryTextTypeComponent(getKey(), getValue()); + } + + @Override + public void writeJson(JsonWriter writer) throws IOException { + writer.name(getKey()).value(getValue()); + } + + @SuppressWarnings("serial") + public Map<String, Object> serialize() { + return new HashMap<String, Object>() {{ + put("key", getKey()); + put("value", getValue()); + }}; + } + + public static ArbitraryTextTypeComponent deserialize(Map<String, Object> map) { + return new ArbitraryTextTypeComponent(map.get("key").toString(), map.get("value").toString()); + } + + @Override + public String getReadableString() { + return getValue(); + } + } + + /** + * Internal class used to represent a text component with a nested JSON value. + * Exception validating done is on keys and values. + */ + private static final class ComplexTextTypeComponent extends TextualComponent implements ConfigurationSerializable { + + public ComplexTextTypeComponent(String key, Map<String, String> values) { + setKey(key); + setValue(values); + } + + @Override + public String getKey() { + return _key; + } + + public void setKey(String key) { + Preconditions.checkArgument(key != null && !key.isEmpty(), "The key must be specified."); + _key = key; + } + + public Map<String, String> getValue() { + return _value; + } + + public void setValue(Map<String, String> value) { + Preconditions.checkArgument(value != null, "The value must be specified."); + _value = value; + } + + private String _key; + private Map<String, String> _value; + + @Override + public TextualComponent clone() throws CloneNotSupportedException { + // Since this is a private and final class, we can just reinstantiate this class instead of casting super.clone + return new ComplexTextTypeComponent(getKey(), getValue()); + } + + @Override + public void writeJson(JsonWriter writer) throws IOException { + writer.name(getKey()); + writer.beginObject(); + for (Map.Entry<String, String> jsonPair : _value.entrySet()) { + writer.name(jsonPair.getKey()).value(jsonPair.getValue()); + } + writer.endObject(); + } + + @SuppressWarnings("serial") + public Map<String, Object> serialize() { + return new java.util.HashMap<String, Object>() {{ + put("key", getKey()); + for (Map.Entry<String, String> valEntry : getValue().entrySet()) { + put("value." + valEntry.getKey(), valEntry.getValue()); + } + }}; + } + + public static ComplexTextTypeComponent deserialize(Map<String, Object> map) { + String key = null; + Map<String, String> value = new HashMap<String, String>(); + for (Map.Entry<String, Object> valEntry : map.entrySet()) { + if (valEntry.getKey().equals("key")) { + key = (String) valEntry.getValue(); + } else if (valEntry.getKey().startsWith("value.")) { + value.put(((String) valEntry.getKey()).substring(6) /* Strips out the value prefix */, valEntry.getValue().toString()); + } + } + return new ComplexTextTypeComponent(key, value); + } + + @Override + public String getReadableString() { + return getKey(); + } + } + + /** + * Create a textual component representing a string literal. + * This is the default type of textual component when a single string literal is given to a method. + * + * @param textValue The text which will be represented. + * @return The text component representing the specified literal text. + */ + public static TextualComponent rawText(String textValue) { + return new ArbitraryTextTypeComponent("text", textValue); + } + + + /** + * Create a textual component representing a localized string. + * The client will see this text component as their localized version of the specified string <em>key</em>, which can be overridden by a resource pack. + * <p> + * If the specified translation key is not present on the client resource pack, the translation key will be displayed as a string literal to the client. + * </p> + * + * @param translateKey The string key which maps to localized text. + * @return The text component representing the specified localized text. + */ + public static TextualComponent localizedText(String translateKey) { + return new ArbitraryTextTypeComponent("translate", translateKey); + } + + private static void throwUnsupportedSnapshot() { + throw new UnsupportedOperationException("This feature is only supported in snapshot releases."); + } + + /** + * Create a textual component representing a scoreboard value. + * The client will see their own score for the specified objective as the text represented by this component. + * <p> + * <b>This method is currently guaranteed to throw an {@code UnsupportedOperationException} as it is only supported on snapshot clients.</b> + * </p> + * + * @param scoreboardObjective The name of the objective for which to display the score. + * @return The text component representing the specified scoreboard score (for the viewing player), or {@code null} if an error occurs during JSON serialization. + */ + public static TextualComponent objectiveScore(String scoreboardObjective) { + return objectiveScore("*", scoreboardObjective); + } + + /** + * Create a textual component representing a scoreboard value. + * The client will see the score of the specified player for the specified objective as the text represented by this component. + * <p> + * <b>This method is currently guaranteed to throw an {@code UnsupportedOperationException} as it is only supported on snapshot clients.</b> + * </p> + * + * @param playerName The name of the player whos score will be shown. If this string represents the single-character sequence "*", the viewing player's score will be displayed. + * Standard minecraft selectors (@a, @p, etc) are <em>not</em> supported. + * @param scoreboardObjective The name of the objective for which to display the score. + * @return The text component representing the specified scoreboard score for the specified player, or {@code null} if an error occurs during JSON serialization. + */ + public static TextualComponent objectiveScore(String playerName, String scoreboardObjective) { + throwUnsupportedSnapshot(); // Remove this line when the feature is released to non-snapshot versions, in addition to updating ALL THE OVERLOADS documentation accordingly + + return new ComplexTextTypeComponent("score", ImmutableMap.<String, String>builder() + .put("name", playerName) + .put("objective", scoreboardObjective) + .build()); + } + + /** + * Create a textual component representing a player name, retrievable by using a standard minecraft selector. + * The client will see the players or entities captured by the specified selector as the text represented by this component. + * <p> + * <b>This method is currently guaranteed to throw an {@code UnsupportedOperationException} as it is only supported on snapshot clients.</b> + * </p> + * + * @param selector The minecraft player or entity selector which will capture the entities whose string representations will be displayed in the place of this text component. + * @return The text component representing the name of the entities captured by the selector. + */ + public static TextualComponent selector(String selector) { + throwUnsupportedSnapshot(); // Remove this line when the feature is released to non-snapshot versions, in addition to updating ALL THE OVERLOADS documentation accordingly + + return new ArbitraryTextTypeComponent("selector", selector); + } +} diff --git a/fanciful-master@6fb8a853dd2/src/main/java/net/amoebaman/util/ArrayWrapper.java b/fanciful-master@6fb8a853dd2/src/main/java/net/amoebaman/util/ArrayWrapper.java new file mode 100644 index 0000000..4cd07bb --- /dev/null +++ b/fanciful-master@6fb8a853dd2/src/main/java/net/amoebaman/util/ArrayWrapper.java @@ -0,0 +1,111 @@ +package net.amoebaman.util; + +import org.apache.commons.lang.Validate; + +import java.lang.reflect.Array; +import java.util.Arrays; +import java.util.Collection; + +/** + * Represents a wrapper around an array class of an arbitrary reference type, + * which properly implements "value" hash code and equality functions. + * <p> + * This class is intended for use as a key to a map. + * </p> + * + * @param <E> The type of elements in the array. + * @author Glen Husman + * @see Arrays + */ +public final class ArrayWrapper<E> { + + /** + * Creates an array wrapper with some elements. + * + * @param elements The elements of the array. + */ + public ArrayWrapper(E... elements) { + setArray(elements); + } + + private E[] _array; + + /** + * Retrieves a reference to the wrapped array instance. + * + * @return The array wrapped by this instance. + */ + public E[] getArray() { + return _array; + } + + /** + * Set this wrapper to wrap a new array instance. + * + * @param array The new wrapped array. + */ + public void setArray(E[] array) { + Validate.notNull(array, "The array must not be null."); + _array = array; + } + + /** + * Determines if this object has a value equivalent to another object. + * + * @see Arrays#equals(Object[], Object[]) + */ + @SuppressWarnings("rawtypes") + @Override + public boolean equals(Object other) { + if (!(other instanceof ArrayWrapper)) { + return false; + } + return Arrays.equals(_array, ((ArrayWrapper) other)._array); + } + + /** + * Gets the hash code represented by this objects value. + * + * @return This object's hash code. + * @see Arrays#hashCode(Object[]) + */ + @Override + public int hashCode() { + return Arrays.hashCode(_array); + } + + /** + * Converts an iterable element collection to an array of elements. + * The iteration order of the specified object will be used as the array element order. + * + * @param list The iterable of objects which will be converted to an array. + * @param c The type of the elements of the array. + * @return An array of elements in the specified iterable. + */ + @SuppressWarnings("unchecked") + public static <T> T[] toArray(Iterable<? extends T> list, Class<T> c) { + int size = -1; + if (list instanceof Collection<?>) { + @SuppressWarnings("rawtypes") + Collection coll = (Collection) list; + size = coll.size(); + } + + + if (size < 0) { + size = 0; + // Ugly hack: Count it ourselves + for (@SuppressWarnings("unused") T element : list) { + size++; + } + } + + T[] result = (T[]) Array.newInstance(c, size); + int i = 0; + for (T element : list) { // Assumes iteration order is consistent + result[i++] = element; // Assign array element at index THEN increment counter + } + return result; + } + +} diff --git a/gtm-master@bf01c650f8f/.gitignore b/gtm-master@bf01c650f8f/.gitignore new file mode 100644 index 0000000..b1935ec --- /dev/null +++ b/gtm-master@bf01c650f8f/.gitignore @@ -0,0 +1,102 @@ + +\.idea/ + +target/classes/ + +target/ + +*.iml + +/bin/ +/build/ + +##### Gradle ##### +.gradle +# Ignore Gradle GUI config +gradle-app.setting + +# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) +!gradle-wrapper.jar + +# Cache of project +.gradletasknamecache + +# # Work around https://youtrack.jetbrains.com/issue/IDEA-116898 +# gradle/wrapper/gradle-wrapper.properties + +##### Eclipse ##### +.metadata +bin/ +tmp/ +*.tmp +*.bak +*.swp +*~.nib +local.properties +.settings/ +.loadpath +.recommenders + +.project + +# External tool builders +.externalToolBuilders/ + +# Locally stored "Eclipse launch configurations" +*.launch + +# PyDev specific (Python IDE for Eclipse) +*.pydevproject + +# CDT-specific (C/C++ Development Tooling) +.cproject + +# JDT-specific (Eclipse Java Development Tools) +.classpath + +# Java annotation processor (APT) +.factorypath + +# PDT-specific (PHP Development Tools) +.buildpath + +# sbteclipse plugin +.target + +# Tern plugin +.tern-project + +# TeXlipse plugin +.texlipse + +# STS (Spring Tool Suite) +.springBeans + +# Code Recommenders +.recommenders/ + +*.class + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files # +*.jar +*.war +*.ear + + +##### IntelliJ ##### +*.iml +*.ipr +*.iws +.idea/ + +##### NetBeans ##### +/.nb-gradle/ + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* + +##### MacOS ##### +.DS_Store diff --git a/gtm-master@bf01c650f8f/README.md b/gtm-master@bf01c650f8f/README.md new file mode 100644 index 0000000..fdaec0e --- /dev/null +++ b/gtm-master@bf01c650f8f/README.md @@ -0,0 +1 @@ +First commit. \ No newline at end of file diff --git a/gtm-master@bf01c650f8f/pom.xml b/gtm-master@bf01c650f8f/pom.xml new file mode 100644 index 0000000..0f2afdb --- /dev/null +++ b/gtm-master@bf01c650f8f/pom.xml @@ -0,0 +1,187 @@ +<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + + <groupId>net.grandtheftmc</groupId> + <artifactId>gtm</artifactId> + <version>2.4.1</version> + <name>GTM</name> + + <repositories> + <repository> + <id>paperspigot-repo</id> + <url>https://repo.destroystokyo.com/repository/maven-public/</url> + </repository> + <repository> + <id>dmulloy2-repo</id> + <url>http://repo.dmulloy2.net/nexus/repository/public/</url> + </repository> + <repository> + <id>jitpack.io</id> + <url>https://jitpack.io</url> + </repository> + <repository> + <id>worldedit-repo</id> + <url>http://maven.sk89q.com/repo/</url> + </repository> + <repository> + <id>citizens-repo</id> + <url>http://repo.citizensnpcs.co/</url> + </repository> + <repository> + <id>viaversion-repo</id> + <url>https://repo.viaversion.com</url> + </repository> + <repository> + <id>nexus-release</id> + <url>http://nexus.grandtheftmc.net/content/repositories/releases</url> + </repository> + </repositories> + + <distributionManagement> + <repository> + <id>nexus-release</id> + <name>Internal Releases</name> + <url>http://nexus.grandtheftmc.net/content/repositories/releases</url> + </repository> + <snapshotRepository> + <id>nexus-snapshot</id> + <name>Internal Snapshots</name> + <url>http://nexus.grandtheftmc.net/content/repositories/snapshots</url> + </snapshotRepository> + </distributionManagement> + + <dependencies> + <dependency> + <groupId>net.citizensnpcs</groupId> + <artifactId>citizensapi</artifactId> + <version>2.0.22</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>us.myles</groupId> + <artifactId>viaversion</artifactId> + <version>1.0.3</version> + <scope>provided</scope> + </dependency> + <!--<dependency>--> + <!--<groupId>com.destroystokyo.paper</groupId>--> + <!--<artifactId>paper</artifactId>--> + <!--<version>1.10.2</version>--> + <!--<scope>provided</scope>--> + <!--</dependency>--> + <dependency> + <groupId>org.spigotmc.1.12</groupId> + <artifactId>spigot</artifactId> + <version>1.12.0</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>net.buycraft</groupId> + <artifactId>BuycraftX</artifactId> + <version>10.3.0</version> + </dependency> + <dependency> + <groupId>com.comphenix.protocol</groupId> + <artifactId>ProtocolLib-API</artifactId> + <version>4.2.1</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>com.github.j0ach1mmall3</groupId> + <artifactId>JLib</artifactId> + <version>LATEST</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>net.grandtheftmc</groupId> + <artifactId>wastedguns</artifactId> + <version>1.1.6</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>net.grandtheftmc</groupId> + <artifactId>wastedvehicles</artifactId> + <version>1.0.3.rewrite</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>net.grandtheftmc</groupId> + <artifactId>wastedcops</artifactId> + <version>1.0.1</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>net.grandtheftmc</groupId> + <artifactId>core</artifactId> + <version>2.3.10</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>net.grandtheftmc</groupId> + <artifactId>houses</artifactId> + <version>1.0.5</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>com.gmail.filoghost.holographicdisplays</groupId> + <artifactId>HolographicDisplays</artifactId> + <version>1.0.0</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>com.sk89q.worldedit</groupId> + <artifactId>worldedit-bukkit</artifactId> + <version>LATEST</version> + <scope>provided</scope> + </dependency> + </dependencies> + + <properties> + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + <maven.compiler.source>1.8</maven.compiler.source> + <maven.compiler.target>1.8</maven.compiler.target> + </properties> + + <build> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-shade-plugin</artifactId> + <configuration> + <finalName>GTM</finalName> + </configuration> + <executions> + <execution> + <phase>package</phase> + <goals> + <goal>shade</goal> + </goals> + </execution> + </executions> + </plugin> + + <!-- Nexus deploy --> + <plugin> + <groupId>org.sonatype.plugins</groupId> + <artifactId>nexus-staging-maven-plugin</artifactId> + <version>1.6.8</version> + <extensions>true</extensions> + <executions> + <execution> + <id>default-deploy</id> + <phase>deploy</phase> + <goals> + <goal>deploy</goal> + </goals> + </execution> + </executions> + <configuration> + <serverId>nexus</serverId> + <nexusUrl>http://nexus.grandtheftmc.net/</nexusUrl> + <skipStaging>true</skipStaging> + </configuration> + </plugin> + </plugins> + </build> +</project> \ No newline at end of file diff --git a/gtm-master@bf01c650f8f/setup/database_schema.txt b/gtm-master@bf01c650f8f/setup/database_schema.txt new file mode 100644 index 0000000..f5c4a5b --- /dev/null +++ b/gtm-master@bf01c650f8f/setup/database_schema.txt @@ -0,0 +1,211 @@ +/***** +** Table Description: +** Represents GTM gang information. +** +** id is primary auto increment so we can change gang names. +** server_key is the server that this gang is on +** name is the name of the server +** owner is the uuid of the player that owns this gang +** +** Reasoning for structure: +** PK is the (`id`) field, as every gang needs its own unique key. We +** index the server_key so we can lookup gangs by server_type. +*****/ +CREATE TABLE IF NOT EXISTS gtm_gang( +id INT NOT NULL AUTO_INCREMENT, +server_key VARCHAR(10) NOT NULL, +name VARCHAR(36) NOT NULL, +owner BINARY(16) NOT NULL, +description VARCHAR(255) NOT NULL, +max_members INT(11) NOT NULL, +PRIMARY KEY (id), +INDEX (server_key), +INDEX (name) +); + +/***** +** Table Description: +** Represents GTM gang member information, every gang will +** have multiple records, one for each member. +** +** gang_id is foreign key reference to gtm_gang table +** uuid is the uuid of the member +** +** Reasoning for structure: +** PK is the (`gang_id`, `uuid`) pair, as a member can only exist in that gang once. +*****/ +CREATE TABLE IF NOT EXISTS gtm_gang_member( +gang_id INT NOT NULL, +uuid BINARY(16) NOT NULL, +role SMALLINT(6) DEFAULT 1, +PRIMARY KEY (gang_id, uuid), +FOREIGN KEY (gang_id) REFERENCES gtm_gang(id) ON DELETE CASCADE +); + +/***** +** Table Description: +** Represents GTM gang relationships. +** +** gang_id is owner of the relationship +** other_id is the other gang in this relationship +** relation is the relationship they share +** +** Reasoning for structure: +** PK is the (`gang_id`, `other_id`) pair, as a gang can only have +** ONE unique relationship between them. +*****/ +CREATE TABLE IF NOT EXISTS gtm_gang_relation( +gang_id INT NOT NULL, +other_id INT NOT NULL, +relation VARCHAR(10), +PRIMARY KEY (gang_id, other_id), +FOREIGN KEY (gang_id) REFERENCES gtm_gang(id) ON DELETE CASCADE, +FOREIGN KEY (other_id) REFERENCES gtm_gang(id) ON DELETE CASCADE +); + +/***** +** Table Description: +** Represents basic information about a GTM house. +** +** id is determined by SQL, unique foreign key in other tables +** house_num is the id number of the house +** server_key is the server key that this is for +** premium is whether this is a premium house +** currency is the type of currency to use to buy this house +** price is the price of the currency for the purchase +** +** Reasoning for structure: +** PK is the auto increment field, as it has to be, but we have a +** unique constraint on the (house_num, server_key, premium) composite +** key as we want that to be unique lookup. +*****/ +CREATE TABLE IF NOT EXISTS gtm_house ( +id INT NOT NULL AUTO_INCREMENT, +house_num INT NOT NULL, +server_key VARCHAR(10) NOT NULL, +premium TINYINT(1) NOT NULL DEFAULT 0, +currency VARCHAR(10) NOT NULL, +price INT NOT NULL, +PRIMARY KEY (id), +UNIQUE INDEX (house_num, server_key, premium) +); + +/***** +** Table Description: +** Represents GTM house locations (chests, doors, signs). +** +** house_id is the foreign key reference to the gtm_house table +** hotspot_id is the unique id for the given data, removing attributes if needed. +** hotspot_type is the type of data this is +** data is the blob of JSON data for this hotspot +** +** Reasoning for structure: +** PK is the auto increment field, as it has to be, but we have an index +** on the house_id column for efficient lookups. +*****/ +CREATE TABLE IF NOT EXISTS gtm_house_data ( +house_id INT NOT NULL, +hotspot_id INT NOT NULL AUTO_INCREMENT, +hotspot_type VARCHAR(5) NOT NULL, +data BLOB DEFAULT NULL, +PRIMARY KEY (hotspot_id), +INDEX (house_id), +FOREIGN KEY (house_id) REFERENCES gtm_house(id) ON DELETE CASCADE +); + +/***** +** Table Description: +** Represents GTM house user data. +** +** house_id is the foreign key reference to the gtm_house table +** uuid is the uuid of the user +** owner is whether the user is the owner of the house +** +** Reasoning for structure: +** PK is the (`house_id`, `uuid`) pair, as we need an efficient lookup on house_id. +** We add an index on uuid so we can get all houses a player is in. +*****/ +CREATE TABLE IF NOT EXISTS gtm_house_user ( +house_id INT NOT NULL, +uuid BINARY(16) NOT NULL, +is_owner TINYINT(1) NOT NULL, +PRIMARY KEY (house_id, uuid), +INDEX(uuid), +FOREIGN KEY (house_id) REFERENCES gtm_house(id) ON DELETE CASCADE +); + +/***** +** Table Description: +** Represents GTM house user chest data. +** +** house_id is the foreign key reference to the gtm_house table +** uuid is the uuid of the user that owns this chest +** chest_id is the id of the chest +** content is the chest contents +** +** Reasoning for structure: +** PK is the (`house_id`, `uuid`) pair, as we need an efficient lookup on house_id. +** We add an index on uuid so we can get all chests for a player. +*****/ +CREATE TABLE IF NOT EXISTS gtm_house_chest ( +house_id INT NOT NULL, +uuid BINARY(16) NOT NULL, +chest_id INT NOT NULL, +content LONGBLOB DEFAULT NULL, +PRIMARY KEY (house_id, uuid, chest_id), +INDEX (uuid), +FOREIGN KEY (house_id) REFERENCES gtm_house(id) ON DELETE CASCADE, +FOREIGN KEY (house_id, uuid) REFERENCES gtm_house_user(house_id, uuid) ON DELETE CASCADE +); + +/***** +** Table Description: +** Represents event information, like halloween or something. +** +** event_type is the type of event +** data is the JSON object data for this event +** start/end time is when to start or end the event +** +** Reasoning for structure: +** PK is the `server_key` field, as it's a key lookup for each +** server. +*****/ +CREATE TABLE IF NOT EXISTS event( +server_key VARCHAR(40) NOT NULL, +event_type VARCHAR(40) NOT NULL, +data TEXT NOT NULL, +start_time TIMESTAMP NOT NULL, +end_time TIMESTAMP NOT NULL, +PRIMARY KEY (server_key) +); + +/***** +** Table Description: +** Represents halloween specific event information. Specifically, +** so that players cannot redeem multiple houses. +** +** uuid is the uuid of the user +** house_id is the premium house id that was interacted with +** +** Reasoning for structure: +** Index is the `uuid` field, so we can efficiently get a list +** of already redeemed houses for a user. +*****/ +CREATE TABLE IF NOT EXISTS event_halloween( +uuid BINARY(16) NOT NULL, +house_id INT NOT NULL, +creation TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, +INDEX (uuid) +); + + +/***** +** Add mutex columns to general tables +*****/ +ALTER TABLE gtm0 ADD COLUMN mutex TINYINT(1) NOT NULL DEFAULT 0 AFTER name; +ALTER TABLE gtm1 ADD COLUMN mutex TINYINT(1) NOT NULL DEFAULT 0 AFTER name; +ALTER TABLE gtm2 ADD COLUMN mutex TINYINT(1) NOT NULL DEFAULT 0 AFTER name; +ALTER TABLE gtm3 ADD COLUMN mutex TINYINT(1) NOT NULL DEFAULT 0 AFTER name; +ALTER TABLE gtm4 ADD COLUMN mutex TINYINT(1) NOT NULL DEFAULT 0 AFTER name; +ALTER TABLE gtm5 ADD COLUMN mutex TINYINT(1) NOT NULL DEFAULT 0 AFTER name; +ALTER TABLE gtm6 ADD COLUMN mutex TINYINT(1) NOT NULL DEFAULT 0 AFTER name; \ No newline at end of file diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/GTM.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/GTM.java new file mode 100644 index 0000000..295c343 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/GTM.java @@ -0,0 +1,1069 @@ +package net.grandtheftmc.gtm; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.UUID; +import java.util.logging.Level; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Chunk; +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.craftbukkit.v1_12_R1.CraftWorld; +import org.bukkit.craftbukkit.v1_12_R1.entity.CraftEntity; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.plugin.Plugin; +import org.bukkit.plugin.PluginManager; +import org.bukkit.plugin.java.JavaPlugin; + +import com.comphenix.protocol.ProtocolLibrary; +import com.comphenix.protocol.ProtocolManager; + +import de.slikey.effectlib.EffectManager; +import net.buycraft.plugin.bukkit.BuycraftPlugin; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Settings; +import net.grandtheftmc.core.casino.CoreCasino; +import net.grandtheftmc.core.casino.slot.SlotMachine; +import net.grandtheftmc.core.database.BaseDatabase; +import net.grandtheftmc.core.event.EventCommand; +import net.grandtheftmc.core.menus.MenuManager; +import net.grandtheftmc.core.resourcepack.RSPack_1_12; +import net.grandtheftmc.core.resourcepack.ResourcePack; +import net.grandtheftmc.core.resourcepack.ResourcePackManager; +import net.grandtheftmc.core.util.ItemStackManager; +import net.grandtheftmc.core.util.NMSVersion; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.util.title.NMSTitle; +import net.grandtheftmc.gtm.armor.ArmorShopManager; +import net.grandtheftmc.gtm.bounties.BountyManager; +import net.grandtheftmc.gtm.commands.AmmoCommand; +import net.grandtheftmc.gtm.commands.AntiAuraCommand; +import net.grandtheftmc.gtm.commands.BackpackCommand; +import net.grandtheftmc.gtm.commands.BackupCommand; +import net.grandtheftmc.gtm.commands.BribeCommand; +import net.grandtheftmc.gtm.commands.CheatCodeCommand; +import net.grandtheftmc.gtm.commands.ChestCheckCommand; +import net.grandtheftmc.gtm.commands.ChristmasCommand; +import net.grandtheftmc.gtm.commands.ChunkUnloadCommand; +import net.grandtheftmc.gtm.commands.ClearCommand; +import net.grandtheftmc.gtm.commands.CoreNPCCommand; +import net.grandtheftmc.gtm.commands.DrugCheckCommand; +import net.grandtheftmc.gtm.commands.DrugDealerCommand; +import net.grandtheftmc.gtm.commands.FeedCommand; +import net.grandtheftmc.gtm.commands.FixCommand; +import net.grandtheftmc.gtm.commands.GTMAdminCommand; +import net.grandtheftmc.gtm.commands.GTMRankCommand; +import net.grandtheftmc.gtm.commands.GTMRanksCommand; +import net.grandtheftmc.gtm.commands.HalloweenCommand; +import net.grandtheftmc.gtm.commands.KillCommand; +import net.grandtheftmc.gtm.commands.LotteryCommand; +import net.grandtheftmc.gtm.commands.MoneyCommand; +import net.grandtheftmc.gtm.commands.NearCommand; +import net.grandtheftmc.gtm.commands.PayCommand; +import net.grandtheftmc.gtm.commands.PermitsCommand; +import net.grandtheftmc.gtm.commands.PickerCommand; +import net.grandtheftmc.gtm.commands.RankupCommand; +import net.grandtheftmc.gtm.commands.ResetCommand; +import net.grandtheftmc.gtm.commands.ResourcePackCommand; +import net.grandtheftmc.gtm.commands.SellCommand; +import net.grandtheftmc.gtm.commands.SetRarityCommand; +import net.grandtheftmc.gtm.commands.SettingsCommand; +import net.grandtheftmc.gtm.commands.SkinCommand; +import net.grandtheftmc.gtm.commands.SkinsCommand; +import net.grandtheftmc.gtm.commands.SpectatorCommand; +import net.grandtheftmc.gtm.commands.SpeedCommand; +import net.grandtheftmc.gtm.commands.StatsCommand; +import net.grandtheftmc.gtm.commands.TeleportCommand; +import net.grandtheftmc.gtm.commands.TokenShopCommand; +import net.grandtheftmc.gtm.commands.TopKillersCommand; +import net.grandtheftmc.gtm.commands.TransferCommand; +import net.grandtheftmc.gtm.commands.VehicleCommand; +import net.grandtheftmc.gtm.database.dao.MutexDAO; +import net.grandtheftmc.gtm.drugs.DrugCommand; +import net.grandtheftmc.gtm.drugs.DrugManager; +import net.grandtheftmc.gtm.drugs.events.listener.DrugListener; +import net.grandtheftmc.gtm.drugs.events.listener.DrugPlacementListener; +import net.grandtheftmc.gtm.event.EventManager; +import net.grandtheftmc.gtm.event.christmas.ChristmasListener; +import net.grandtheftmc.gtm.event.easter.EasterEggCommand; +import net.grandtheftmc.gtm.gang.GangManager; +import net.grandtheftmc.gtm.gang.command.GangAdminCommand; +import net.grandtheftmc.gtm.holidays.HolidayManager; +import net.grandtheftmc.gtm.items.BackpackManager; +import net.grandtheftmc.gtm.items.GameItemCommand; +import net.grandtheftmc.gtm.items.ItemManager; +import net.grandtheftmc.gtm.items.KitCommand; +import net.grandtheftmc.gtm.items.ShopCommand; +import net.grandtheftmc.gtm.items.ShopManager; +import net.grandtheftmc.gtm.listeners.ArmorEquip; +import net.grandtheftmc.gtm.listeners.BreakBlock; +import net.grandtheftmc.gtm.listeners.ChangeWorld; +import net.grandtheftmc.gtm.listeners.Chat; +import net.grandtheftmc.gtm.listeners.CommandPreProcess; +import net.grandtheftmc.gtm.listeners.Craft; +import net.grandtheftmc.gtm.listeners.Damage; +import net.grandtheftmc.gtm.listeners.Death; +import net.grandtheftmc.gtm.listeners.Dispense; +import net.grandtheftmc.gtm.listeners.Drop; +import net.grandtheftmc.gtm.listeners.DrugBlockRemovalListener; +import net.grandtheftmc.gtm.listeners.FireListener; +import net.grandtheftmc.gtm.listeners.FoodChange; +import net.grandtheftmc.gtm.listeners.GamemodeChange; +import net.grandtheftmc.gtm.listeners.Interact; +import net.grandtheftmc.gtm.listeners.InventoryClick; +import net.grandtheftmc.gtm.listeners.InventoryOpen; +import net.grandtheftmc.gtm.listeners.ItemBreak; +import net.grandtheftmc.gtm.listeners.Join; +import net.grandtheftmc.gtm.listeners.Leave; +import net.grandtheftmc.gtm.listeners.Login; +import net.grandtheftmc.gtm.listeners.MenuListener; +import net.grandtheftmc.gtm.listeners.MobSpawn; +import net.grandtheftmc.gtm.listeners.Move; +import net.grandtheftmc.gtm.listeners.MovementCheat; +import net.grandtheftmc.gtm.listeners.PetListener; +import net.grandtheftmc.gtm.listeners.Pickup; +import net.grandtheftmc.gtm.listeners.PortalEnter; +import net.grandtheftmc.gtm.listeners.PotionSplash; +import net.grandtheftmc.gtm.listeners.PrepareItemCraft; +import net.grandtheftmc.gtm.listeners.SwapHandItems; +import net.grandtheftmc.gtm.listeners.UpdateListener; +import net.grandtheftmc.gtm.listeners.VehicleUse; +import net.grandtheftmc.gtm.listeners.VoteReward; +import net.grandtheftmc.gtm.listeners.WeaponShoot; +import net.grandtheftmc.gtm.listeners.WeaponUse; +import net.grandtheftmc.gtm.lootcrates.CrateManager; +import net.grandtheftmc.gtm.lootcrates.LootCrateCommand; +import net.grandtheftmc.gtm.tasks.Lottery; +import net.grandtheftmc.gtm.tasks.TaskManager; +import net.grandtheftmc.gtm.trashcan.TrashCanManager; +import net.grandtheftmc.gtm.users.GTMUser; +import net.grandtheftmc.gtm.users.GTMUserManager; +import net.grandtheftmc.gtm.users.npcs.ArmorNPC; +import net.grandtheftmc.gtm.users.npcs.BankTellerNPC; +import net.grandtheftmc.gtm.users.npcs.CarNPC; +import net.grandtheftmc.gtm.users.npcs.CasinoNPC; +import net.grandtheftmc.gtm.users.npcs.CriminalNPC; +import net.grandtheftmc.gtm.users.npcs.FoodNPC; +import net.grandtheftmc.gtm.users.npcs.HeadSellerNPC; +import net.grandtheftmc.gtm.users.npcs.HitmanNPC; +import net.grandtheftmc.gtm.users.npcs.MechanicNPC; +import net.grandtheftmc.gtm.users.npcs.PoliceNPC; +import net.grandtheftmc.gtm.users.npcs.RewardsNPC; +import net.grandtheftmc.gtm.users.npcs.ShopNPC; +import net.grandtheftmc.gtm.users.npcs.SkinsNPC; +import net.grandtheftmc.gtm.users.npcs.TaxiNPC; +import net.grandtheftmc.gtm.warps.SpawnCommand; +import net.grandtheftmc.gtm.warps.TpaCommand; +import net.grandtheftmc.gtm.warps.WarpCommand; +import net.grandtheftmc.gtm.warps.WarpManager; +import net.grandtheftmc.gtm.wastedbarrels.BarrelListener; +import net.grandtheftmc.gtm.wastedbarrels.BarrelManager; +import net.grandtheftmc.gtm.weapon.WeaponRegistry; +import net.grandtheftmc.gtm.weapon.skins.WeaponSkinManager; +import net.grandtheftmc.guns.GTMGuns; +import net.minecraft.server.v1_12_R1.WorldServer; + +public class GTM extends JavaPlugin { + + private static final String[][] RES_PACKS = { +// {"http://cdn.grandtheftmc.net/GTM-2.4.12-1.10.zip", "9982D598B60D926F1CE6"}, //1.9 - 1.10 +// {"http://cdn.grandtheftmc.net/GTM-2.4.12-1.11.zip", "FA2C2DBEB6FF0CFB991D"} //1.11 - 1.12+ +// -- original is above + // SHA-1 hash is usually rendered as HEX (base16), 40 digits long. + // need to convert to 20 bytes long + {"http://cdn.grandtheftmc.net/GTM-2.4.12-1.10.zip", "2F0A69EBFB74C513B8371894BAC7C2FD0B8EE2A2"}, //1.9 - 1.10 + {"http://cdn.grandtheftmc.net/GTM-2.4.13-1.11.zip", "8E3C7FE3A16E00261C4054241BBC166BF23239DE"}, //1.11 - 1.12 + {"http://cdn.grandtheftmc.net/GTM-2.4.13-1.13.zip", "2A3BA442DA89B43DF6207C3DF829A1E6D9D43CD2"} //1.13+ + }; + + private final Set<UUID> transferingPlayers = new HashSet<UUID>(); + + private static DrugManager drugManager; + private static GTM instance; + private static GTMUserManager um; + private static WarpManager wm; + private static BountyManager bm; + private static TaskManager tm; + private static BackpackManager bam; + private static ItemManager im; + private static ShopManager sm; + private static GangManager gm; + private static CrateManager cm; + private static BarrelManager wbm; + private static EffectManager effectLib; + private static Lottery lottery; + private static HolidayManager hm; + private static WeaponSkinManager wsm; + /** The handler for all events, like christmas etc. */ + private EventManager eventManager; + private static GTMGuns wg; + private static com.j0ach1mmall3.wastedvehicles.Main wv; + private static com.j0ach1mmall3.wastedcops.Main wc; + private static ProtocolManager pm; + private static GTMSettings settings; + private static BuycraftPlugin bp; + private CoreCasino<GTM> coreCasino; + + public static boolean WEAPON_SKINS_FEATURE_FLAG = true; + + public Set<UUID> getTransferingPlayers() { + return transferingPlayers; + } + + public static GTM getInstance() { + return instance; + } + + /** + * @deprecated - Please use {@link GTMUserManager#getInstance} instead. + */ + @Deprecated + public static GTMUserManager getUserManager() { + return um; + } + + public static WarpManager getWarpManager() { + return wm; + } + + public static BountyManager getBountyManager() { + return bm; + } + + public static TaskManager getTaskManager() { + return tm; + } + + public static BackpackManager getBackpackManager() { + return bam; + } + + public static ItemManager getItemManager() { + return im; + } + + public static GTMSettings getSettings() { + return settings; + } + + public static ShopManager getShopManager() { + return sm; + } + + public static GangManager getGangManager() { + return gm; + } + + public static CrateManager getCrateManager() { + return cm; + } + + public static BarrelManager getBarrelManager() { + return wbm; + } + + public static ProtocolManager getProtocolManager() { + return pm; + } + + public static HolidayManager getHolidayManager() { + return hm; + } + + public static DrugManager getDrugManager() { + return drugManager; + } + + public static WeaponSkinManager getWeaponSkinManager() { + return wsm; + } + + public static GTMGuns getWastedGuns() { + return wg; + } + + public static com.j0ach1mmall3.wastedvehicles.Main getWastedVehicles() { + return wv; + } + + public static com.j0ach1mmall3.wastedcops.Main getWastedCops() { + return wc; + } + + public static Lottery getLottery() { + return lottery; + } + + public static void log(String s) { + GTM.getInstance().getLogger().log(Level.ALL, s); + } + + public static void error(String s) { + GTM.getInstance().getLogger().log(Level.SEVERE, s); + } + + public static EffectManager getEffectLib() { + return effectLib; + } + + public static BuycraftPlugin getBuycraftX() { + return bp; + } + + public static ResourcePackManager getResourcePackManager() { + return Core.resourcePackManager; + } + + @Override + public void onEnable() { + instance = this; + settings = new GTMSettings(); + + this.load(); + this.loadDependencies(); + + if (!Core.getSettings().isSister()) { + drugManager = new DrugManager(); + } + + effectLib = new EffectManager(this); + um = GTMUserManager.getInstance(); + wm = new WarpManager(); + bm = new BountyManager(); + tm = new TaskManager(); + bam = new BackpackManager(); + wsm = new WeaponSkinManager(); + new WeaponRegistry(this, wg.getWeaponManager()); + im = new ItemManager(); + sm = new ShopManager(); + gm = new GangManager(this); + cm = new CrateManager(); + wbm = new BarrelManager(); + lottery = new Lottery(); + hm = new HolidayManager(); + bp = (BuycraftPlugin) Bukkit.getPluginManager().getPlugin("BuycraftX"); + + if (!Core.getSettings().isSister()) { + drugManager.start(); + } + + Core.resourcePackManager = new ResourcePackManager(this, new RSPack_1_12(), new NMSTitle()); + Core.resourcePackManager.setResourcePack(NMSVersion.UNKNOWN, new ResourcePack(RES_PACKS[1][0], RES_PACKS[1][1])); + Core.resourcePackManager.setResourcePack(NMSVersion.MC_1_13, new ResourcePack(RES_PACKS[2][0], RES_PACKS[2][1])); + Core.resourcePackManager.setResourcePack(NMSVersion.MC_1_12_1, new ResourcePack(RES_PACKS[1][0], RES_PACKS[1][1])); + Core.resourcePackManager.setResourcePack(NMSVersion.MC_1_12, new ResourcePack(RES_PACKS[1][0], RES_PACKS[1][1])); + Core.resourcePackManager.setResourcePack(NMSVersion.MC_1_11_2, new ResourcePack(RES_PACKS[1][0], RES_PACKS[1][1])); + Core.resourcePackManager.setResourcePack(NMSVersion.MC_1_11, new ResourcePack(RES_PACKS[1][0], RES_PACKS[1][1])); + Core.resourcePackManager.setResourcePack(NMSVersion.MC_1_10, new ResourcePack(RES_PACKS[0][0], RES_PACKS[0][1])); + Core.resourcePackManager.setResourcePack(NMSVersion.MC_1_9_4, new ResourcePack(RES_PACKS[0][0], RES_PACKS[0][1])); + Core.resourcePackManager.setResourcePack(NMSVersion.MC_1_9_2, new ResourcePack(RES_PACKS[0][0], RES_PACKS[0][1])); + Core.resourcePackManager.setResourcePack(NMSVersion.MC_1_9_1, new ResourcePack(RES_PACKS[0][0], RES_PACKS[0][1])); + Core.resourcePackManager.setResourcePack(NMSVersion.MC_1_9, new ResourcePack(RES_PACKS[0][0], RES_PACKS[0][1])); + + this.coreCasino = new CoreCasino<GTM>(this, new NMSTitle(), NMSVersion.MC_1_12); + if (!Core.getSettings().isSister()) { + ServerUtil.runTaskLater(() -> { + coreCasino.addGame(new SlotMachine(coreCasino, new Location(Bukkit.getWorld("spawn"), -293, 29.1, 252.3, 0f, 0f))); + coreCasino.addGame(new SlotMachine(coreCasino, new Location(Bukkit.getWorld("spawn"), -293, 29.1, 263.7, -180f, 0f))); + coreCasino.addGame(new SlotMachine(coreCasino, new Location(Bukkit.getWorld("spawn"), -287, 29.1, 253.3, 0f, 0f))); + coreCasino.addGame(new SlotMachine(coreCasino, new Location(Bukkit.getWorld("spawn"), -287, 29.1, 262.7, -180f, 0f))); + coreCasino.addGame(new SlotMachine(coreCasino, new Location(Bukkit.getWorld("spawn"), -273.3, 29.1, 259, 90f, 0f))); + coreCasino.addGame(new SlotMachine(coreCasino, new Location(Bukkit.getWorld("spawn"), -270.3, 29.1, 271, 90f, 0f))); + coreCasino.addGame(new SlotMachine(coreCasino, new Location(Bukkit.getWorld("spawn"), -281.7, 29.1, 269, -90f, 0f))); + coreCasino.addGame(new SlotMachine(coreCasino, new Location(Bukkit.getWorld("spawn"), -270.3, 29.1, 275, 90f, 0f))); + coreCasino.addGame(new SlotMachine(coreCasino, new Location(Bukkit.getWorld("spawn"), -281.7, 29.1, 277, -90f, 0f))); + coreCasino.addGame(new SlotMachine(coreCasino, new Location(Bukkit.getWorld("spawn"), -273.3, 29.1, 288, 90f, 0f))); + coreCasino.addGame(new SlotMachine(coreCasino, new Location(Bukkit.getWorld("spawn"), -277, 29.1, 290.7, -180f, 0f))); + coreCasino.addGame(new SlotMachine(coreCasino, new Location(Bukkit.getWorld("spawn"), -289, 29.1, 292.7, -180f, 0f))); + coreCasino.addGame(new SlotMachine(coreCasino, new Location(Bukkit.getWorld("spawn"), -289, 29.1, 283.3, 0f, 0f))); + coreCasino.addGame(new SlotMachine(coreCasino, new Location(Bukkit.getWorld("spawn"), -298, 29.1, 294.7, -180f, 0f))); + coreCasino.addGame(new SlotMachine(coreCasino, new Location(Bukkit.getWorld("spawn"), -298, 29.1, 281.3, 0f, 0f))); +// coreCasino.addGame(new SlotMachine(coreCasino, new Location(Bukkit.getWorld("spawn"), -289, 29.1, 283.5, 0f, 0f))); + + coreCasino.enabledAllGames(); + }, 15 * 20); + } + + //Spawn NPC's + ServerUtil.runTaskLater(() -> { + World spawn = Bukkit.getWorld("spawn"); + Core.getNPCManager().registerCoreNPC(new TaxiNPC(new Location(spawn, -351.5, 25, 207.5))); + Core.getNPCManager().registerCoreNPC(new RewardsNPC(new Location(spawn, -319.5, 26, 183.5))); + Core.getNPCManager().registerCoreNPC(new CarNPC(new Location(spawn, -278.5, 26, 239.5))); + Core.getNPCManager().registerCoreNPC(new BankTellerNPC(new Location(spawn, -392.5, 27, 231.5))); + Core.getNPCManager().registerCoreNPC(new ShopNPC(wg.getWeaponManager(), new Location(spawn, -371.5, 26.6250, 239.5))); + Core.getNPCManager().registerCoreNPC(new FoodNPC(new Location(spawn, -361.5, 26, 255.5))); + Core.getNPCManager().registerCoreNPC(new ArmorNPC(new Location(spawn, -363.5, 26, 267.5))); + Core.getNPCManager().registerCoreNPC(new HeadSellerNPC(new Location(spawn, -292.5, 26, 312.5))); + Core.getNPCManager().registerCoreNPC(new PoliceNPC(new Location(spawn, -399.5, 26, 171.5))); + Core.getNPCManager().registerCoreNPC(new HitmanNPC(new Location(spawn, -410.5, 26, 160.5))); + Core.getNPCManager().registerCoreNPC(new CriminalNPC(new Location(spawn, -385.5, 25.5, 159.5))); + Core.getNPCManager().registerCoreNPC(new MechanicNPC(new Location(spawn, -306.5, 25, 224.5))); + Core.getNPCManager().registerCoreNPC(new CasinoNPC(new Location(spawn, -306.7, 29, 257.6))); + + if(WEAPON_SKINS_FEATURE_FLAG) { + Core.getNPCManager().registerCoreNPC(new SkinsNPC(new Location(spawn, -296.5, 25.5, 150.5))); + } + }, 40L); + + new ArmorShopManager(this, im); + new EasterEggCommand(null); + + if (Core.getSettings().isSister()) { + ProtocolLibrary.getProtocolManager().addPacketListener(new DrugBlockRemovalListener()); + } + + this.registerCommands(); + this.registerListeners(); + // this.loadShopMenus(); + + // initialize the event manager + EventManager.init(this, Core.getSettings().getType().toString().toUpperCase() + Core.getSettings().getNumber()); + +// This needs updating to 1.12 +// Utils.startEnchantmentShineRemover(Core.getProtocolLib(), this); + + new ItemStackManager(); + + // every 5 mins attempt to remove specific entities + Bukkit.getScheduler().runTaskTimer(this, () -> { + + List<Entity> toRemove = new ArrayList<>(); + + for (World world : Bukkit.getWorlds()){ + Core.log("[GTM][RemoveTask] Searching world " + world.getName()); + for (LivingEntity le : world.getLivingEntities()){ + if (le.getType() == EntityType.ENDER_DRAGON){ + Core.log("[GTM][RemoveTask] Found enderdragon in " + world.getName()); + toRemove.add(le); + } + } + } + + Core.log("[GTM][RemoveTask] Attempting to remove " + toRemove.size() + " ender dragons..."); + + for (Entity ent : toRemove){ + + // if chunk is not loaded, load it + Chunk chunk = ent.getWorld().getChunkAt(ent.getLocation()); + if (chunk != null && !chunk.isLoaded()){ + chunk.load(); + } + + // get craft world + WorldServer craftWorld = ((CraftWorld) ent.getWorld()).getHandle(); + + // get the craft entity + net.minecraft.server.v1_12_R1.Entity craftEntity = ((CraftEntity) ent).getHandle(); + + // attempt to remove entity from world + craftWorld.removeEntity(craftEntity); + ent.remove(); + } + + }, 0L, 20L * 300); + } + + private void loadDependencies() { + PluginManager plm = Bukkit.getPluginManager(); + Plugin wastedGunsPlugin = plm.getPlugin("WastedGuns"); + if (wastedGunsPlugin == null) { + log("Error while enabling WastedGuns dependency. Is it installed?"); + } else { + wg = (GTMGuns) wastedGunsPlugin; + } + Plugin wastedVehiclesPlugin = plm.getPlugin("WastedVehicles"); + if (wastedVehiclesPlugin == null) { + log("Error while enabling WastedVehicles dependency. Is it installed?"); + } else { + wv = (com.j0ach1mmall3.wastedvehicles.Main) wastedVehiclesPlugin; + } + Plugin wastedCopsPlugin = plm.getPlugin("WastedCops"); + if (wastedCopsPlugin == null) { + log("Error while enabling WastedCops dependency. Is it installed?"); + } else { + wc = (com.j0ach1mmall3.wastedcops.Main) wastedCopsPlugin; + } + pm = ProtocolLibrary.getProtocolManager(); + } + + @Override + public void onDisable() { + + System.out.println("[GTM] Disabling GTM..."); + + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + for (Player player : Bukkit.getOnlinePlayers()) { + + // grab user + GTMUser user = GTMUserManager.getInstance().getUser(player.getUniqueId()).orElse(null); + if (user != null){ + + // set as kicked + user.setKicked(true); + + System.out.println("[GTM] Attempting to save player=" + player.getName()); + if (user.isInCombat()) user.setLastTag(-1); + + if (player.getOpenInventory() != null && player.getOpenInventory().getTopInventory() != null) { + String name = ChatColor.stripColor(player.getOpenInventory().getTopInventory().getTitle()); + + // if backpack is open + if (name.equalsIgnoreCase("Backpack")){ + System.out.println("[GTM] Saving backpack contents for player=" + player.getName()); + + ItemStack[] backpackContents = player.getOpenInventory().getTopInventory().getContents(); + try (PreparedStatement statement = connection.prepareStatement("UPDATE " + Core.name() + " SET `backpackContents`=? WHERE `uuid`=UNHEX(?);")) { + statement.setString(1, backpackContents == null ? null : GTMUtils.toBase64(backpackContents)); + statement.setString(2, player.getUniqueId().toString().replaceAll("-", "")); + statement.execute(); + } + + player.closeInventory(); + } + } + + if (user.isLocked()){ + user.onSave(connection); + MutexDAO.setGTMUserMutex(connection, user.getUUID(), false); + } + } + } + } catch (SQLException e) { + e.printStackTrace(); + } + + System.out.println("[GTM] Done saving GTMUsers..."); + + this.save(); + + //Casino games. + if (this.coreCasino != null) + this.coreCasino.removeAllGames(); + + } + + private void registerListeners() { + PluginManager pm = Bukkit.getPluginManager(); + pm.registerEvents(new Death(), this); + pm.registerEvents(new Login(), this); + pm.registerEvents(new Leave(), this); + pm.registerEvents(new MenuListener(), this); + pm.registerEvents(new Join(getResourcePackManager()), this); + pm.registerEvents(new Pickup(), this); + pm.registerEvents(new WeaponUse(), this); + pm.registerEvents(new Drop(), this); + pm.registerEvents(new Interact(), this); + pm.registerEvents(new Chat(), this); + pm.registerEvents(new InventoryClick(), this); + pm.registerEvents(new InventoryOpen(), this); + pm.registerEvents(new BackpackManager(), this); + pm.registerEvents(new TrashCanManager(), this); + pm.registerEvents(new UpdateListener(), this); + pm.registerEvents(new Move(), this); + pm.registerEvents(new Damage(), this); + pm.registerEvents(new ChangeWorld(), this); + pm.registerEvents(new FoodChange(), this); + pm.registerEvents(new VehicleUse(), this); + pm.registerEvents(new PetListener(), this); + pm.registerEvents(new BreakBlock(), this); + pm.registerEvents(new WeaponShoot(), this); + pm.registerEvents(new BarrelListener(), this); + pm.registerEvents(new SwapHandItems(), this); + pm.registerEvents(new PrepareItemCraft(), this); + pm.registerEvents(new ChristmasListener(), this); + pm.registerEvents(new MovementCheat(), this); + + if (!Core.getSettings().isSister()) { + pm.registerEvents(new DrugListener(), this); + pm.registerEvents(new DrugPlacementListener(), this); + } + + pm.registerEvents(new FireListener(), this); + pm.registerEvents(new PortalEnter(), this); + pm.registerEvents(new VoteReward(), this); + pm.registerEvents(new ItemBreak(), this); + pm.registerEvents(new ArmorEquip(), this); + pm.registerEvents(new Craft(), this); + pm.registerEvents(new PotionSplash(), this); + pm.registerEvents(new GamemodeChange(), this); + pm.registerEvents(new Dispense(), this); + pm.registerEvents(new CommandPreProcess(), this); + pm.registerEvents(new MobSpawn(), this); +// pm.registerEvents(new PlayerScare(), this);//todo: remove on release + this.getServer().getMessenger().registerOutgoingPluginChannel(this, "BungeeCord"); + } + + private void registerCommands() { + this.getCommand("ammo").setExecutor(new AmmoCommand()); + this.getCommand("feed").setExecutor(new FeedCommand()); + this.getCommand("lootcrate").setExecutor(new LootCrateCommand()); + this.getCommand("spawn").setExecutor(new SpawnCommand()); + this.getCommand("warp").setExecutor(new WarpCommand()); + this.getCommand("gtmadmin").setExecutor(new GTMAdminCommand()); + this.getCommand("gameitem").setExecutor(new GameItemCommand()); + this.getCommand("kit").setExecutor(new KitCommand()); + this.getCommand("shop").setExecutor(new ShopCommand()); + this.getCommand("gtmrank").setExecutor(new GTMRankCommand()); + this.getCommand("money").setExecutor(new MoneyCommand()); + this.getCommand("pay").setExecutor(new PayCommand()); + this.getCommand("rankup").setExecutor(new RankupCommand()); + this.getCommand("tpa").setExecutor(new TpaCommand()); + this.getCommand("tpahere").setExecutor(new TpaCommand()); + this.getCommand("tpaccept").setExecutor(new TpaCommand()); + this.getCommand("tpdeny").setExecutor(new TpaCommand()); + this.getCommand("permits").setExecutor(new PermitsCommand()); + this.getCommand("kill").setExecutor(new KillCommand()); + this.getCommand("suicide").setExecutor(new KillCommand()); + this.getCommand("gangadmin").setExecutor(new GangAdminCommand()); + this.getCommand("picker").setExecutor(new PickerCommand()); + this.getCommand("vehicle").setExecutor(new VehicleCommand()); + this.getCommand("backpack").setExecutor(new BackpackCommand()); + this.getCommand("bribe").setExecutor(new BribeCommand()); + this.getCommand("reset").setExecutor(new ResetCommand()); + this.getCommand("tokenshop").setExecutor(new TokenShopCommand()); + this.getCommand("antiaura").setExecutor(new AntiAuraCommand()); + this.getCommand("clear").setExecutor(new ClearCommand()); + this.getCommand("fix").setExecutor(new FixCommand()); + this.getCommand("near").setExecutor(new NearCommand()); + this.getCommand("teleport").setExecutor(new TeleportCommand()); + this.getCommand("spectator").setExecutor(new SpectatorCommand()); + this.getCommand("backup").setExecutor(new BackupCommand()); + this.getCommand("lottery").setExecutor(new LotteryCommand()); + this.getCommand("speed").setExecutor(new SpeedCommand()); + this.getCommand("chunkunload").setExecutor(new ChunkUnloadCommand()); + this.getCommand("topkillers").setExecutor(new TopKillersCommand()); + this.getCommand("stats").setExecutor(new StatsCommand()); + this.getCommand("resourcepack").setExecutor(new ResourcePackCommand()); + + if (!Core.getSettings().isSister()) { + this.getCommand("drugs").setExecutor(new DrugCommand()); + this.getCommand("drugdealer").setExecutor(new DrugDealerCommand()); + this.getCommand("drugcheck").setExecutor(new DrugCheckCommand()); + } + + this.getCommand("gtmranks").setExecutor(new GTMRanksCommand()); +// this.getCommand("stack").setExecutor(new StackCommand()); Major DUPE glitch, FIX BEFORE ENABLING! + this.getCommand("event").setExecutor(new EventCommand(this)); + new CheatCodeCommand(); + new HalloweenCommand(); + new ChristmasCommand(); + new ChestCheckCommand(); + new CoreNPCCommand(); + new SellCommand(); + + if(WEAPON_SKINS_FEATURE_FLAG) { + new SkinCommand(); + new SkinsCommand(); + } + + new SetRarityCommand(); + new SettingsCommand(); + new TransferCommand(); + } + + private void load() { + settings.setChristmasDropsConfig(Utils.loadConfig("christmasdrops")); + settings.setGtmConfig(Utils.loadConfig("gtm")); + settings.setWarpsConfig(Utils.loadConfig("warps")); + settings.setBountiesConfig(Utils.loadConfig("bounties")); + settings.setItemsConfig(Utils.loadConfig("items")); + settings.setKitsConfig(Utils.loadConfig("kits")); + settings.setLootConfig(Utils.loadConfig("loot")); + settings.setLootCratesConfig(Utils.loadConfig("lootcrates")); + settings.setBarrelsConfig(Utils.loadConfig("barrels")); + settings.setLotteryConfig(Utils.loadConfig("lottery")); + + if (!Core.getSettings().isSister()) { + settings.setDrugBlocksConfig(Utils.loadConfig("drugblocks")); + } + + settings.setGtmShopMenuConfig(Utils.loadConfig("salemenus")); + YamlConfiguration c = settings.getGtmConfig(); + settings.setMap(c.getString("map")); + // can players pvp eachother + settings.setPvp(c.getBoolean("pvp", true)); + // can players transfer data to other servers + settings.setServerTransfer(c.getBoolean("server-transfer", false)); + // can players use cheatcodes + settings.setGlobalCheatcodes(c.getBoolean("cheatcodes", false)); + // can players use /pay + settings.setPayCommand(c.getBoolean("pay", true)); + // can players transfer bank money to other players bank + settings.setBankToBankTransfer(c.getBoolean("bank-to-bank-transfer", true)); + // can players buy items at shops + settings.setBuy(c.getBoolean("buy", true)); + // can players trade eachother + settings.setTrade(c.getBoolean("player-trade", true)); + // can players use the bounty system + settings.setBountySystem(c.getBoolean("bounty-system", true)); + // server take money when new bounties are placed + settings.setBountyTax(c.getBoolean("bounty-system-tax", true)); + // base percent of money taken from new bounties placed + settings.setBountyTaxPercent(c.getDouble("bounty-tax-percent", 20.0)); + // can players use kits + settings.setKitSystem(c.getBoolean("kit-system", true)); + // server take money from players that the players drop on death + settings.setServerDeathTax(c.getBoolean("server-death-tax", true)); + // does the tax scale with GTMRank + settings.setServerDeathTaxScaled(c.getBoolean("server-death-tax-scaled", true)); + // the base percent of money taken from the dropped money + settings.setServerDeathBasePercent(c.getDouble("server-death-tax-percent", 20.0)); + // the min cash that must be taken by the server + settings.setServerDeathTaxMin(c.getInt("server-death-tax-min", 1000)); + // the max cash that must be taken by the server + settings.setServerDeathTaxMax(c.getInt("server-death-tax-max", 50000)); + + // this.setupTables(); todo: throwing errors with new core DAO set up, lukas / stephen might need a look. + this.loadMenus(); + this.loadSettings(); + settings.setOneElevenRespack(RES_PACKS[1][0]); + settings.setOneElevenHash(RES_PACKS[1][1]); + settings.setOneTenRespack(RES_PACKS[0][0]); + settings.setOneTenHash(RES_PACKS[0][1]); + } + + public void reload() { + this.load(); + wm.loadWarps(); + bm.loadBounties(); + im.loadItems(); + im.loadKits(); + cm.loadCrates(); + lottery.loadConfig(); + } + + public void save() { + wm.saveWarps(); + bm.saveBounties(); + cm.saveCrates(); + im.saveItems(); + im.saveKits(); + wbm.unloadBarrels(); + lottery.saveConfig(); + + if (!Core.getSettings().isSister()) { + drugManager.stop(); + } + + FireListener.clearFire(); + } + + public void setupTables() { + + ServerUtil.runTaskAsync(() -> { + BaseDatabase.runCustomQuery("CREATE TABLE IF NOT EXISTS " + Core.name() + "(" + + "`uuid` varchar(40) NOT NULL," + + "`name` varchar(17) NOT NULL," + + "`rank` varchar(255) DEFAULT 'HOBO'," + + "`kills` int(11) default 0," + + "`deaths` int(11) default 0," + + "`money` double default 0," + + "`bank` double default 0," + + "`killCounter` int(11) default 0," + + "`killStreak` int(11) default 0," + + "`permits` int(11) default 0," + + "`jobMode` varchar(255) default NULL," + + "`lastJobMode` bigint(20) default 0," + + "`backpackContents` longtext," + + "`kitExpiries` varchar(255)," + + "`houses` varchar(255)," + + "`gang` varchar(255)," + + "`gangRank` varchar(255) NOT NULL DEFAULT 'member'," + + "`jailTimer` int(11) DEFAULT -1," + + "`jailCop` varchar(255) default NULL," + + "`jailCopName` varchar(255) default NULL," + + "`personalVehicle` varchar(255)," + + "`cheatcodes` BLOB," + + "PRIMARY KEY (`uuid`));"); + + BaseDatabase.runCustomQuery("CREATE TABLE IF NOT EXISTS " + Core.name() + "_gangs (" + + "`name` varchar(255) NOT NULL," + + "`leader` varchar(255) NOT NULL," + + "`leaderName` varchar(255) NOT NULL," + + "`description` varchar(255) NOT NULL DEFAULT 'Your default gang description'," + + "`maxMembers` int(11) NOT NULL," + + "PRIMARY KEY (`name`));"); + + BaseDatabase.runCustomQuery("CREATE TABLE IF NOT EXISTS " + Core.name() + "_gangs_relations (" + + "`gang1` varchar(255) NOT NULL," + + "`gang2` varchar(255) NOT NULL," + + "`relation` varchar(255) NOT NULL);"); + + BaseDatabase.runCustomQuery("CREATE TABLE IF NOT EXISTS " + Core.name() + "_heads (" + + "`sellerUUID` varchar(40) NOT NULL," + + "`sellerName` varchar(17) NOT NULL," + + "`head` varchar(255) NOT NULL," + + "`expiry` bigint(20)," + + "`done` boolean default '0'," + + "`paid` boolean default '0'," + + "`gaveHead` boolean default '0'," + + "`bidderUUID` varchar(40)," + + "`bidderName` varchar(17)," + + "`bid` double default '0');"); + +// try (Connection connection = BaseDatabase.getInstance().getConnection()) { +// try (PreparedStatement statement = connection.prepareStatement("SELECT * FROM " + Core.name() + " LIMIT 1")) { +// try (ResultSet result = statement.executeQuery()) { +// ResultSetMetaData resultMetaData = result.getMetaData(); +// List<String> columns = Lists.newArrayList(); +// for (int i = 1; i <= resultMetaData.getColumnCount(); i++) { +// columns.add(resultMetaData.getCatalogName(i).toLowerCase()); +// System.out.println(resultMetaData.getCatalogName(i).toLowerCase()); +// } +// +// if (!columns.contains("playtime")) +// BaseDatabase.runCustomQuery("ALTER TABLE " + Core.name() + " ADD COLUMN playtime BIGINT(20) NOT NULL DEFAULT 0;"); +// +// for (AmmoType type : AmmoType.values()) +// if (!type.isInInventory() && !columns.contains(type.toString().toLowerCase())) +// BaseDatabase.runCustomQuery("ALTER TABLE " + Core.name() + " ADD COLUMN " + type.toString().toLowerCase() + " INT(11) DEFAULT 0;"); +// +// if (GTM.getWastedVehicles() != null && GTM.getWastedVehicles().getBabies() != null && GTM.getWastedVehicles().getBabies().getVehicleProperties() != null) { +// for (VehicleProperties vehicle : GTM.getWastedVehicles().getBabies().getVehicleProperties()) { +// if (!columns.contains(vehicle.getIdentifier().toLowerCase())) +// BaseDatabase.runCustomQuery("ALTER TABLE " + Core.name() + " ADD COLUMN " + vehicle.getIdentifier().toLowerCase() + " BOOLEAN NOT NULL DEFAULT 0;"); +// +// if (!columns.contains(vehicle.getIdentifier().toLowerCase() + ":info")) +// BaseDatabase.runCustomQuery("ALTER TABLE " + Core.name() + " ADD COLUMN `" + vehicle.getIdentifier().toLowerCase() + ":info` VARCHAR(255);"); +// } +// } +// } +// } +// } catch (SQLException e) { +// e.printStackTrace(); +// } + }); + +// Core.sql.updateAsyncLater("create table if not exists " + Core.name() +// + "(uuid varchar(40) NOT NULL, name varchar(17) NOT NULL, rank varchar(255) DEFAULT 'HOBO', kills int(11) default 0, deaths int(11) default 0," + +// " money double default 0, bank double default 0, killCounter int(11) default 0, killStreak int(11) default 0, permits int(11) default 0, jobMode varchar(255) default NULL, lastJobMode bigint(20) default 0," + +// " backpackContents longtext, kitExpiries varchar(255), houses varchar(255), gang varchar(255), gangRank varchar(255) NOT NULL DEFAULT 'member'," + +// " jailTimer int(11) DEFAULT -1, jailCop varchar(255) default NULL, jailCopName varchar(255) default NULL, personalVehicle varchar(255), cheatcodes BLOB, PRIMARY KEY (uuid))"); +// Core.sql.updateAsyncLater("create table if not exists " + Core.name() +// + "_gangs (name varchar(255) NOT NULL, leader varchar(255) NOT NULL, leaderName varchar(255) NOT NULL," + +// " description varchar(255) NOT NULL DEFAULT 'Your default gang description', maxMembers int(11) NOT NULL, PRIMARY KEY (name));"); +// Core.sql.updateAsyncLater("create table if not exists " + Core.name() +// + "_gangs_relations (gang1 varchar(255) NOT NULL, gang2 varchar(255) NOT NULL, relation varchar(255) NOT NULL);"); +// Core.sql.updateAsyncLater("create table if not exists " + Core.name() + "_heads (sellerUUID varchar(40) NOT NULL, sellerName varchar(17) NOT NULL, head varchar(255) NOT NULL, expiry bigint(20), done boolean default '0', paid boolean default '0', gaveHead boolean default '0', bidderUUID varchar(40), bidderName varchar(17), bid double default '0');"); + +// new BukkitRunnable() { +// @Override +// public void run() { +// try { +// ResultSet rs = Core.sql.query("select * from " + Core.name() + " LIMIT 1;"); +// ResultSetMetaData metaData = rs.getMetaData(); +// List<String> columns = new ArrayList<>(); +// for (int i = 1; i <= metaData.getColumnCount(); i++) +// columns.add(metaData.getColumnName(i).toLowerCase()); +// if (!columns.contains("playtime")) +// Core.sql.updateAsyncLater("ALTER TABLE " + Core.name() + " ADD COLUMN playtime BIGINT(20) NOT NULL DEFAULT 0;"); +// for (AmmoType type : AmmoType.values()) +// if (!type.isInInventory() && !columns.contains(type.toString().toLowerCase())) +// Core.sql.update("alter table " + Core.name() + " add column " + type.toString().toLowerCase() + " int(11) default 0;"); +// +// if(GTM.getWastedVehicles()!=null && GTM.getWastedVehicles().getBabies()!=null && GTM.getWastedVehicles().getBabies().getVehicleProperties()!=null) { +// for (VehicleProperties vehicle : GTM.getWastedVehicles().getBabies().getVehicleProperties()) { +// if (!columns.contains(vehicle.getIdentifier().toLowerCase())) +// Core.sql.update("alter table " + Core.name() + " add column " + vehicle.getIdentifier().toLowerCase() + " BOOLEAN not null default 0;"); +// if (!columns.contains(vehicle.getIdentifier().toLowerCase() + ":info")) +// Core.sql.update("alter table " + Core.name() + " add column `" + vehicle.getIdentifier().toLowerCase() + ":info` VARCHAR(255);"); +// } +// } +// rs.close(); +// } catch (SQLException e) { +// Core.error("Error while altering " + Core.name() + " table: "); +// e.printStackTrace(); +// } +// } +// }.runTaskAsynchronously(this); + } + + private void loadMenus() { + MenuManager.addMenu("phone", 54, "&7&lPhone"); + + MenuManager.addMenu("account", 54, "&d&lMy Account"); + MenuManager.addMenu("ranks", 54, "&a&lRanks"); + MenuManager.addMenu("gtmstats", 54, "&d&lStats"); + MenuManager.addMenu("prefs", 54, "&5&lPreferences"); + MenuManager.addMenu("contacts", 54, "&6&lContacts"); + + MenuManager.addMenu("bounties", 54, "&5&lBounties"); + MenuManager.addMenu("bountieslist", 54, "&5&lBounties List"); + MenuManager.addMenu("bountieshelp", 54, "&5&lBounties Help"); + MenuManager.addMenu("bountiesplace", 54, "&5&lPlace Bounties"); + + MenuManager.addMenu("kits", 54, "&b&lKits"); + + MenuManager.addMenu("taxi", 54, "&e&lTaxi Service"); + MenuManager.addMenu("taxiplayers", 54, "&e&lTaxi Service: Players"); + MenuManager.addMenu("taxihouses", 54, "&e&lTaxi Service: &3&lHouses"); + MenuManager.addMenu("taxiotherplayers", 54, "&e&lPick up a player!"); + MenuManager.addMenu("taxiwarps", 54, "&e&lTaxi Service: Warps"); + + MenuManager.addMenu("bank", 54, "&3&lBanking"); + MenuManager.addMenu("bankwithdraw", 54, "&3&lBanking: Withdraw Money"); + MenuManager.addMenu("bankdeposit", 54, "&3&lBanking: Deposit Money"); + MenuManager.addMenu("banktransfer", 54, "&3&lBanking: Transfer Money"); + + MenuManager.addMenu("gps", 54, "&8&lGPS Tracker"); + MenuManager.addMenu("gpsgangs", 54, "&8&lGPS Tracker: &a&lGangs"); + MenuManager.addMenu("gpshouses", 54, "&8&lGPS Tracker: &3&lHouses"); + MenuManager.addMenu("gpscops", 54, "&8&lGPS Tracker: &b&lCops"); + MenuManager.addMenu("gpscriminals", 54, "&8&lGPS Tracker: &e&lCriminals"); + MenuManager.addMenu("gpsbounties", 54, "&8&lGPS Tracker: &5&lBounties"); + + MenuManager.addMenu("mygang", 54, "&a&lMy Gang"); + MenuManager.addMenu("gang", 54, "&a&lGang"); + MenuManager.addMenu("disbandgang", 54, "&c&lDisband Gang"); + MenuManager.addMenu("leavegang", 54, "&c&lLeave Gang"); + MenuManager.addMenu("mygangmembers", 54, "&a&lMy Gang Members"); + MenuManager.addMenu("mygangrelations", 54, "&a&lMy Gang Relations"); + MenuManager.addMenu("gangmembers", 54, "&a&lGang Members"); + MenuManager.addMenu("gangmember", 54, "&a&lGang Member"); + MenuManager.addMenu("gangrelations", 54, "&a&lGang Relations"); + MenuManager.addMenu("gangs", 54, "&a&lGang List"); + + MenuManager.addMenu("ammopouch", 36, "&c&lAmmo Pouch"); + + MenuManager.addMenu("jail", 54, "&c&lJail"); + + MenuManager.addMenu("property", 54, "&2&lProperty"); + MenuManager.addMenu("vehicles", 54, "&4&lVehicles"); + MenuManager.addMenu("vehicleshop", 54, "&4&lVehicle Shop"); + MenuManager.addMenu("buyvehicle", 54, "&4&lBuy Vehicle Shop"); + MenuManager.addMenu("sellvehicle", 54, "&4&lSell Vehicle"); + MenuManager.addMenu("repairvehicle", 54, "&4&lRepair Vehicle"); + MenuManager.addMenu("personalvehicle", 54, "&4&lPersonal Vehicle"); + MenuManager.addMenu("mechanic", 54, "&4&lMechanic"); + + MenuManager.addMenu("heads", 54, "&e&lHead Auction"); + MenuManager.addMenu("auctionhead", 54, "&e&lAuction Head"); + + MenuManager.addMenu("armorupgrade", 54, "&b&lArmor Upgrade"); + MenuManager.addMenu("christmasshop", 54, "&cC&2h&cr&2i&cs&2t&cm&2a&cs &2S&ch&2o&cp"); + + MenuManager.addMenu("transferconfirm", 54, "&c&lTransfer Confirmation"); + + MenuManager.addMenu("lottery", 54, "&e&lLottery"); + MenuManager.addMenu("sellinvconfirm", 54, "&a&lConfirm Inventory Sell"); + + if (!Core.getSettings().isSister()) { + MenuManager.addMenu("drugdealer", 54, "&3&lDrug Dealer"); + MenuManager.addMenu("drugseller", 54, "&3&lDrug Seller"); + } + + MenuManager.addMenu("cheatcodes", 54, "&2&lCheat Codes"); + + MenuManager.addMenu("realestateagent", 27, "&3&lDynasty 8 Real Estate"); + MenuManager.addMenu("realestate-premium", 54, "&3&lDynasty 8 &a&lPremium Houses"); + MenuManager.addMenu("realestate-nonpremium", 54, "&3&lDynasty 8 &b&lNon-Premium Houses"); + } + + private void loadSettings() { + Settings settings = Core.getSettings(); + settings.setDefaultGameMode(GameMode.ADVENTURE); + settings.setPetsVulnerable(true); + settings.setServerWarperEnabled(false); + settings.setUseEditMode(true); + settings.setTokenShopEnabled(true); + settings.setCanOpenChests(true); + settings.setCanInteractInventory(true); + settings.setLoadCosmetics(true); + settings.setCanCraft(false); + if (GTM.getSettings().getMap() != null) { + World map = Bukkit.getWorld(GTM.getSettings().getMap()); + settings.setStopChunkLoad(map.getName()); + map.setPVP(true); + } + World spawn = Bukkit.getWorlds().get(0); + settings.setStopChunkLoad(spawn.getName()); + settings.setStopHungerChange(spawn.getName()); + settings.setStopWeatherChange(spawn.getName()); + spawn.setPVP(false); + spawn.setSpawnFlags(false, false); + } + + /* public void loadShopMenus(){ + YamlConfiguration menuConfig = settings.getGtmShopMenuConfig(); + Core.log("started loading shop menus"); + for(String saleMenuName : menuConfig.getConfigurationSection("").getKeys(false)) { + Core.log("Current salemenu is " + saleMenuName); + String saleMenuTitle = menuConfig.getString(saleMenuName + ".menu-title"); + ShopMenu saleMenu = new ShopMenu(saleMenuName, 54, saleMenuTitle); + for (String subCategoryName : menuConfig.getConfigurationSection(saleMenuName + ".subcategories").getKeys(false)) { + Core.log("Current subCategory is " + subCategoryName); + String currentPath = saleMenuName + ".subcategories." + subCategoryName; + SubCategoryMenu subCategoryMenu = parseMenuDisplayItemString(saleMenu, null, currentPath, subCategoryName, menuConfig.getString(currentPath + ".display-item")); + saleMenu.addCategory(subCategoryName, subCategoryMenu); + + if (!menuConfig.contains(currentPath + ".subcategories")) { + for (String gameItemString : menuConfig.getStringList(currentPath + ".sale-items")) { + GameItem gameItem = getItemManager().getItem(gameItemString); + ShopMenuItem saleMenuItem = new ShopMenuItem(gameItem.getItem(), gameItem.getSellPrice()); + subCategoryMenu.addSellingItem(saleMenuItem); + } + } + else{ + loopThroughSubCategories(saleMenu, subCategoryMenu, menuConfig, currentPath + ".subcategories"); + } + } + MenuManager.addMenu(saleMenu); + } + } + + private void loopThroughSubCategories(ShopMenu shopMenu, SubCategoryMenu categoryMenu, YamlConfiguration menuConfig, String path){//path should end in .categories + for (String subCategoryName : menuConfig.getConfigurationSection(path).getKeys(false)) { + Core.log("current subcategory is " + subCategoryName); + String currentPath = path + "." + subCategoryName; + SubCategoryMenu subCategoryMenu = parseMenuDisplayItemString(shopMenu, categoryMenu, currentPath, subCategoryName, menuConfig.getString(currentPath + ".display-item")); + categoryMenu.addSubCategory(subCategoryName, subCategoryMenu); + + if (!menuConfig.contains(currentPath + ".subcategories")) { + for (String gameItemString : menuConfig.getStringList(currentPath + ".sale-items")) { + GameItem gameItem = getItemManager().getItem(gameItemString); + ShopMenuItem saleMenuItem = new ShopMenuItem(gameItem.getItem(), gameItem.getSellPrice()); + subCategoryMenu.addSellingItem(saleMenuItem); + } + } + else{ + loopThroughSubCategories(shopMenu, subCategoryMenu, menuConfig, currentPath + ".subcategories"); + } + } + } + + private SubCategoryMenu parseMenuDisplayItemString(ShopMenu saleMenu, SubCategoryMenu previousSubCategory, String currentPath, String subCategoryName, String displayItemString){ + int materialID = 0; + short dataID = 0; + if(displayItemString.contains(":")){ + if(!Utils.isInteger(displayItemString.split(":")[0]) || !Utils.isInteger(displayItemString.split(":")[1])){ + Core.error("Unable to load item located in menu config at path: " + currentPath + ".display-item"); + return null; + } + materialID = Integer.parseInt(displayItemString.split(":")[0]); + dataID = Short.parseShort(displayItemString.split(":")[1]); + } + else{ + if(!Utils.isInteger(displayItemString)){ + Core.error("Unable to load item located in menu config at path: " + currentPath + ".display-item"); + return null; + } + materialID = Integer.parseInt(displayItemString); + } + return new SubCategoryMenu(saleMenu, previousSubCategory, subCategoryName, ServerType.GTM, Material.getMaterial(materialID), dataID); + }*/ +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/GTMSettings.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/GTMSettings.java new file mode 100644 index 0000000..482334f --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/GTMSettings.java @@ -0,0 +1,590 @@ +package net.grandtheftmc.gtm; + +import org.bukkit.configuration.file.YamlConfiguration; + +import net.grandtheftmc.core.Core; + +public class GTMSettings { + private YamlConfiguration gtmConfig; + private YamlConfiguration warpsConfig; + private YamlConfiguration bountiesConfig; + private YamlConfiguration itemsConfig; + private YamlConfiguration kitsConfig; + private YamlConfiguration lootConfig; + private YamlConfiguration lootCratesConfig; + private YamlConfiguration barrelsConfig; + private YamlConfiguration lotteryConfig; + private YamlConfiguration drugDealerConfig; + private YamlConfiguration drugBlocksConfig; + private YamlConfiguration gtmShopMenuConfig; + private YamlConfiguration christmasDropsConfig; + + private String oneTenRespack; + private String oneTenHash; + + private String oneElevenRespack; + private String oneElevenHash; + + /** The name of the main map */ + private String map; + /** Are transfers to other servers allowed */ + private boolean serverTransfer; + /** Are players allowed to pvp eachother */ + private boolean pvp; + /** Are all global cheatcodes enabled */ + private boolean globalCheatcodes; + /** Is /pay enabled */ + private boolean payCommand; + /** Can players transfer between bank accounts */ + private boolean bankToBankTransfer; + /** Can players buy items/weapons/etc. */ + private boolean buy; + /** Can players trade eachother */ + private boolean trade; + /** Can players use the bounty system */ + private boolean bountySystem; + /** Can we tax the bounties placed */ + private boolean bountySystemTax; + /** The percent of tax applied to new bounties placed */ + private double bountySystemTaxPercent; + /** Can players use the kit system */ + private boolean kitSystem; + /** Players money lost upon death to server */ + private boolean serverDeathTax; + /** Base percent of money lost to the death tax */ + private double serverDeathBasePercent; + /** Minimum amount of money lost per death */ + private int serverDeathTaxMin; + /** Maximum amount of money lost per death */ + private int serverDeathTaxMax; + /** Does the death tax scale per GTMRank */ + private boolean serverDeathTaxScaled; + + public void setGtmShopMenuConfig(YamlConfiguration gtmShopMenuConfig) { + this.gtmShopMenuConfig = gtmShopMenuConfig; + } + + public void setChristmasDropsConfig(YamlConfiguration christmasDropsConfig) { + this.christmasDropsConfig = christmasDropsConfig; + } + + public YamlConfiguration getChristmasDropsConfig() { + return this.christmasDropsConfig; + } + + public YamlConfiguration getGtmShopMenuConfig() { + return gtmShopMenuConfig; + } + + public YamlConfiguration getDrugBlocksConfig() { + return drugBlocksConfig; + } + + public void setDrugBlocksConfig(YamlConfiguration drugBlocksConfig) { + this.drugBlocksConfig = drugBlocksConfig; + } + + public YamlConfiguration getDrugDealerConfig() { + return drugDealerConfig; + } + + public void setDrugDealerConfig(YamlConfiguration drugDealerConfig) { + this.drugDealerConfig = drugDealerConfig; + } + + public YamlConfiguration getGtmConfig() { + return this.gtmConfig; + } + + public void setGtmConfig(YamlConfiguration gtmConfig) { + this.gtmConfig = gtmConfig; + } + + public YamlConfiguration getWarpsConfig() { + return this.warpsConfig; + } + + public void setWarpsConfig(YamlConfiguration warpsConfig) { + this.warpsConfig = warpsConfig; + } + + public YamlConfiguration getBountiesConfig() { + return this.bountiesConfig; + } + + public void setBountiesConfig(YamlConfiguration bountiesConfig) { + this.bountiesConfig = bountiesConfig; + } + + public YamlConfiguration getItemsConfig() { + return this.itemsConfig; + } + + public void setItemsConfig(YamlConfiguration itemsConfig) { + this.itemsConfig = itemsConfig; + } + + public YamlConfiguration getKitsConfig() { + return this.kitsConfig; + } + + public void setKitsConfig(YamlConfiguration kitsConfig) { + this.kitsConfig = kitsConfig; + } + + public YamlConfiguration getBarrelsConfig() { + return this.barrelsConfig; + } + + public void setBarrelsConfig(YamlConfiguration barrelsConfig) { + this.barrelsConfig = barrelsConfig; + } + + public String getMap() { + return this.map; + } + + public void setMap(String map) { + this.map = map; + } + + public YamlConfiguration getLootCratesConfig() { + return this.lootCratesConfig; + } + + public void setLootCratesConfig(YamlConfiguration lootCratesConfig) { + this.lootCratesConfig = lootCratesConfig; + } + + public YamlConfiguration getLootConfig() { + return this.lootConfig; + } + + public void setLootConfig(YamlConfiguration lootConfig) { + this.lootConfig = lootConfig; + } + + public YamlConfiguration getLotteryConfig() { + return this.lotteryConfig; + } + + public void setLotteryConfig(YamlConfiguration lotteryConfig) { + this.lotteryConfig = lotteryConfig; + } + + public String getOneElevenRespack() { + return oneElevenRespack; + } + + public String getOneElevenHash() { + return oneElevenHash; + } + + public String getOneTenRespack() { + return oneTenRespack; + } + + public String getOneTenHash() { + return oneTenHash; + } + + public void setOneElevenRespack(String oneElevenRespack) { + this.oneElevenRespack = oneElevenRespack; + } + + public void setOneElevenHash(String oneElevenHash) { + this.oneElevenHash = oneElevenHash; + } + + public void setOneTenRespack(String oneTenRespack) { + this.oneTenRespack = oneTenRespack; + } + + public void setOneTenHash(String oneTenHash) { + this.oneTenHash = oneTenHash; + } + + /** + * Whether or not server transferring is allowed. + * + * @return {@code true} if server transferring is allowed, {@code false} + * otherwise. + */ + public boolean isServerTransfer() { + return serverTransfer; + } + + /** + * Set whether or not server transferring is allowed. + * + * @param serverTransfer - {@code true} if players can transfer server data, + * {@code false} otherwise. + */ + public void setServerTransfer(boolean serverTransfer) { + this.serverTransfer = serverTransfer; + } + + /** + * Get whether or not players are allowed to pvp. + * <p> + * This is used to cancel damage events of any source. + * </p> + * + * @return {@code true} if pvp damage events are allowed, {@code false} + * otherwise. + */ + public boolean isPvp() { + return pvp; + } + + /** + * Set whether players are allowed to pvp. + * <p> + * This is used to cancel damage events of any source. + * </p> + * + * @param pvp - {@code true} if players can take damage, {@code false} + * otherwise. + */ + public void setPvp(boolean pvp) { + this.pvp = pvp; + } + + /** + * Get whether or not cheatcodes are enabled. + * + * @return {@code true} if cheatcodes are enabled, {@code false} otherwise. + */ + public boolean isGlobalCheatcodes() { + return globalCheatcodes; + } + + /** + * Set whether cheatcodes are enabled or not. + * + * @param globalCheatcodes - {@code true} if cheatcodes are enabled, + * {@code false} otherwise. + */ + public void setGlobalCheatcodes(boolean globalCheatcodes) { + this.globalCheatcodes = globalCheatcodes; + } + + /** + * Get whether or not the pay command is enabled. + * + * @return {@code true} if players can use the pay command, {@code false} + * otherwise. + */ + public boolean isPayCommand() { + return payCommand; + } + + /** + * Set whether or not the pay command is enabled. + * + * @param payCommand - {@code true} if the pay command is enabled, + * {@code false} otherwise. + */ + public void setPayCommand(boolean payCommand) { + this.payCommand = payCommand; + } + + /** + * Get whether or not players can transfer between bank accounts. + * + * @return {@code true} if they can transfer between bank accounts, + * {@code false} otherwise. + */ + public boolean isBankToBankTransfer() { + return bankToBankTransfer; + } + + /** + * Set whether or not players can transfer between bank accounts. + * + * @param bankToBankTransfer - {@code true} if players can transfer between + * bank accounts + */ + public void setBankToBankTransfer(boolean bankToBankTransfer) { + this.bankToBankTransfer = bankToBankTransfer; + } + + /** + * Get whether or not players can buy items/weapons/armor/etc. + * + * @return {@code true} if players can buy things, {@code false} otherwise. + */ + public boolean canBuy() { + return buy; + } + + /** + * Set whether or not players can buy items/weapons/armor/etc. + * + * @param buy - {@code true} if players can buy things, {@code false} + * otherwise. + */ + public void setBuy(boolean buy) { + this.buy = buy; + } + + /** + * Get whether or not players can trade eachother. + * + * @return {@code true} if players can trade eachother, {@code false} + * otherwise. + */ + public boolean canTrade() { + return trade; + } + + /** + * Set whether or not players can trade eachother. + * + * @param trade - {@code true} if players can trade eachother + */ + public void setTrade(boolean trade) { + this.trade = trade; + + if (Core.getInstance().getTradeManager() != null) + Core.getInstance().getTradeManager().setEnabled(trade); + } + + /** + * Get whether or not players can use the bounty system. + * + * @return {@code true} if players can use the bounty system. + */ + public boolean isBountySystem() { + return bountySystem; + } + + /** + * Set whether or not players can use the bounty system. + * + * @param bountySystem - {@code true} if the bounty system can be used. + */ + public void setBountySystem(boolean bountySystem) { + this.bountySystem = bountySystem; + } + + /** + * Get whether or not there is a tax on placing new bounties. + * <p> + * Note: When players place new bounties on players, some of the money + * will be taken by the server. + * </p> + * + * @return {@code true} if there is a bounty tax, {@code false} + * otherwise. + */ + public boolean isBountyTax() { + return bountySystemTax; + } + + /** + * Set whether or not there is a bounty tax. + * <p> + * Note: When players place new bounties on players, some of the money + * will be taken by the server. + * </p> + * + * @param bountySystemTax - {@code true} if there is a bounty tax, + * {@code false} otherwise. + */ + public void setBountyTax(boolean bountySystemTax) { + this.bountySystemTax = bountySystemTax; + } + + /** + * Get the base amount of tax percent that is taken from the player's + * bounty when they create a new bounty. + * <p> + * Note: If this balance is set to 22.5, 22.5% of the money that would've + * been added to the bounty is removed from the server. + * </p> + * + * @return The base amount of tax, as a percent, to be removed from the bounty when it is placed. + */ + public double getBountyTaxPercent() { + return bountySystemTaxPercent; + } + + /** + * Set the base amount of tax percent that is taken from the player's + * bounty when they create a new bounty. + * <p> + * Note: If this balance is set to 22.5, 22.5% of the money that would've + * been added to the bounty is removed from the server. + * </p> + * + * @param bountySystemTaxPercent - the new base percent + */ + public void setBountyTaxPercent(double bountySystemTaxPercent) { + this.bountySystemTaxPercent = bountySystemTaxPercent; + } + + /** + * Get whether or not the kit system is enabled for players. + * + * @return {@code true} if the kit system is enabled, {@code false} + * otherwise. + */ + public boolean isKitSystem() { + return kitSystem; + } + + /** + * Set whether or not the kit system is enabled for players. + * + * @param kitSystem - {@code true} if players can use kits + */ + public void setKitSystem(boolean kitSystem) { + this.kitSystem = kitSystem; + } + + /** + * Get whether or not there is a server death tax. + * <p> + * Note: If a player dies, they have money to drop to other players, if this + * is set to {@code true}, some of the money will be taken by the server. + * </p> + * + * @return {@code true} if there is a server death tax, {@code false} + * otherwise. + */ + public boolean isServerDeathTax() { + return serverDeathTax; + } + + /** + * Set whether or not there is a server death tax. + * <p> + * Note: If a player dies, they have money to drop to other players, if this + * is set to {@code true}, some of the money will be taken by the server. + * </p> + * + * @param serverDeathTax - {@code true} if there is a server death tax, + * {@code false} otherwise. + */ + public void setServerDeathTax(boolean serverDeathTax) { + this.serverDeathTax = serverDeathTax; + } + + /** + * Get the base amount of tax percent that is taken from the player's + * available balance. + * <p> + * Note: If this balance is set to 22.5, 22.5% of the money that would've + * been dropped is lost forever to the server. + * </p> + * + * @return The base amount of tax, as a percent, to be stolen from the + * player's available balance. + */ + public double getServerDeathBasePercent() { + return serverDeathBasePercent; + } + + /** + * Set the base amount of tax percent that is taken from the player's + * available balance. + * <p> + * Note: If this balance is set to 22.5, 22.5% of the money that would've + * been dropped is lost forever to the server. + * </p> + * + * @param serverDeathBasePercent - the new base percent + */ + public void setServerDeathBasePercent(double serverDeathBasePercent) { + this.serverDeathBasePercent = serverDeathBasePercent; + } + + /** + * Get the minimum amount of money a player must lose to the server. + * <p> + * Note: If a player would drop $500, and 50% is available to the serverTax, + * which is $250, and this value is set to $400, $400 would be taken and + * only $100 would be dropped. + * </p> + * + * @return The amount, as an integer, that a player will lose to the server + * upon death. + */ + public int getServerDeathTaxMin() { + return serverDeathTaxMin; + } + + /** + * Set the minimum amount of money that a player must lose to the server. + * <p> + * Note: If a player would drop $500, and 50% is available to the serverTax, + * which is $250, and this value is set to $400, $400 would be taken and + * only $100 would be dropped. + * </p> + * + * @param serverDeathTaxMin - the minimum amount of money, as an integer + */ + public void setServerDeathTaxMin(int serverDeathTaxMin) { + this.serverDeathTaxMin = serverDeathTaxMin; + } + + /** + * Get the max amount of money a player must lose to the server. + * <p> + * Note: If a player would drop $500, and 50% is available to the serverTax, + * which is $250, and this value is set to $200, $200 would be taken and + * only $300 would be dropped. + * </p> + * + * @return The amount, as an integer, that a player will lose to the server + * upon death. + */ + public int getServerDeathTaxMax() { + return serverDeathTaxMax; + } + + /** + * Set the max amount of money that a player must lose to the server. + * <p> + * Note: If a player would drop $500, and 50% is available to the serverTax, + * which is $250, and this value is set to $200, $200 would be taken and + * only $300 would be dropped. + * </p> + * + * @param serverDeathTaxMax - the max amount of money, as an integer + */ + public void setServerDeathTaxMax(int serverDeathTaxMax) { + this.serverDeathTaxMax = serverDeathTaxMax; + } + + /** + * Get whether or not the server death tax scales with the GTMRank. + * <p> + * Note: GTMRank would increase the base tax rate, so if a GTMRank had an + * additional 5% tax, it would be the base tax rate, say 20%, plus + * additional 5%. + * </p> + * + * @return {@code true} if the server death tax scales with GTMRank, + * {@code false} otherwise. + */ + public boolean isServerDeathTaxScaled() { + return serverDeathTaxScaled; + } + + /** + * Sets whether or not the server death tax scales with the GTMRank. + * <p> + * Note: GTMRank would increase the base tax rate, so if a GTMRank had an + * additional 5% tax, it would be the base tax rate, say 20%, plus + * additional 5%. + * </p> + * + * @param serverDeathTaxScaled - {@code true} if the death tax scales with + * GTMRank, {@code false} otherwise. + */ + public void setServerDeathTaxScaled(boolean serverDeathTaxScaled) { + this.serverDeathTaxScaled = serverDeathTaxScaled; + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/GTMUtils.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/GTMUtils.java new file mode 100644 index 0000000..d4101d4 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/GTMUtils.java @@ -0,0 +1,949 @@ +package net.grandtheftmc.gtm; + +import java.io.BufferedWriter; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.text.NumberFormat; +import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.Month; +import java.time.ZoneId; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.Comparator; +import java.util.Date; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import java.util.Set; +import java.util.UUID; +import java.util.concurrent.ThreadLocalRandom; +import java.util.logging.Level; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.stream.Collectors; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.World; +import org.bukkit.block.BlockFace; +import org.bukkit.entity.ArmorStand; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.event.Cancellable; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.SkullMeta; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; +import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.util.io.BukkitObjectInputStream; +import org.bukkit.util.io.BukkitObjectOutputStream; +import org.yaml.snakeyaml.external.biz.base64Coder.Base64Coder; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.wrappers.WrappedDataWatcher; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.boards.Board; +import net.grandtheftmc.core.boards.BoardType; +import net.grandtheftmc.core.database.BaseDatabase; +import net.grandtheftmc.core.nametags.NametagManager; +import net.grandtheftmc.core.users.Pref; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.gtm.items.GameItem; +import net.grandtheftmc.gtm.users.GTMUser; +import net.grandtheftmc.gtm.users.GTMUserManager; +import net.grandtheftmc.gtm.users.JobMode; +import net.grandtheftmc.gtm.utils.ReflectionUtil; +import net.grandtheftmc.gtm.warps.Warp; +import net.grandtheftmc.guns.weapon.Weapon; + +public final class GTMUtils { + + public static final String HEADER = Utils.f( + " &7&l▀&a&l▄&7&l▀&a&l▄&7&l▀&a&l▄&7&l▀&a&l▄&7&l▀&a&l▄&7&l▀&a&l▄&7&l▀&a&l▄&7&l▀&a&l▄&7&l▀&a&l▄&7&l▀&a&l▄&7&l▀&a&l▄&7&l▀&a&l▄&7&l▀&a&l▄&7&l▀&a&l▄&7&l▀&a&l▄&7&l▀"); + public static final String FOOTER = Utils.f( + " &7&l▄&a&l▀&7&l▄&a&l▀&7&l▄&a&l▀&7&l▄&a&l▀&7&l▄&a&l▀&7&l▄&a&l▀&7&l▄&a&l▀&7&l▄&a&l▀&7&l▄&a&l▀&7&l▄&a&l▀&7&l▄&a&l▀&7&l▄&a&l▀&7&l▄&a&l▀&7&l▄&a&l▀&7&l▄&a&l▀&7&l▄"); + + private GTMUtils() { + } + + public static GTMUser getGTMUser(Player player) { + return GTM.getUserManager().getLoadedUser(player.getUniqueId()); + } + + public static User getUser(Player player) { + return Core.getUserManager().getLoadedUser(player.getUniqueId()); + } + + public static UserRank getRank(Player player) { + return Core.getUserManager().getLoadedUser(player.getUniqueId()).getUserRank(); + } + + public static void updateBoard(Player player, GTMUser gtmUser) { + updateBoard(player, Core.getUserManager().getLoadedUser(player.getUniqueId()), gtmUser); + } + + public static void arrestPlayer(Cancellable e, Weapon weapon, Player player, Player victim) { + UUID victimUUID = victim.getUniqueId(); + GTMUser victimGtmUser = GTM.getUserManager().getLoadedUser(victimUUID); + GTMUser gtmUser = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + User victimUser = Core.getUserManager().getLoadedUser(victimUUID); + if (gtmUser.getJobMode() != JobMode.COP){ + player.sendMessage(Lang.COP.f("&cYou cannot use this as you are not a cop!")); + e.setCancelled(true); + return; + } + if (victimGtmUser.getJobMode() == JobMode.COP) { + e.setCancelled(true); + player.sendMessage(Utils.f(Lang.HEY + "&cYou can't hit cops!")); + return; + } + if (victimGtmUser.getJobMode() == JobMode.CRIMINAL && victimGtmUser.getWantedLevel() == 0) { + player.sendMessage(Lang.HEY.f("&7You can't use this on citizens that are not wanted!")); + e.setCancelled(true); + return; + } + if (gtmUser.getJobMode() == JobMode.COP) { + if (weapon.getCompactName().equalsIgnoreCase("nightstick")) { + victim.addPotionEffect(new PotionEffect(PotionEffectType.CONFUSION, 80, 1)); + victim.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, 50, 1)); + } + } + if (!"stungun".equalsIgnoreCase(weapon.getCompactName()) || + victimGtmUser.getJobMode() != JobMode.CRIMINAL || victimGtmUser.getWantedLevel() == 0) return; + if (victim.getLastDamageCause() == null || victim.getLastDamageCause().getCause() != EntityDamageEvent.DamageCause.DRAGON_BREATH) + return; + ItemStack chestPlate = player.getInventory().getChestplate(); + if (chestPlate != null && chestPlate.getType() == Material.GOLD_CHESTPLATE && player.getLocation().getBlock().getRelative(BlockFace.DOWN).getType() == Material.AIR) { + player.sendMessage(Lang.COP_MODE.f("&fYou may not arrest criminals during flight!")); + return; + } + if(player.getVehicle() != null) { + player.sendMessage(Lang.COP_MODE.f("&fYou may not arrest criminals while in a Vehicle!")); + return; + } + int wantedLevel = victimGtmUser.getWantedLevel(); + int timeInJail = GTMUtils.getTimeInJail(wantedLevel); + victimGtmUser.jail(timeInJail, player); + player.sendMessage(Lang.COP_MODE.f("&7You arrested &a" + victimUser.getColoredName(victim) + + "&7! He will go to jail for &a" + Utils.timeInSecondsToText(timeInJail) + "&7!")); + Utils.broadcastExcept(player, Lang.COP_MODE.f("&a" + victimUser.getColoredName(victim) + "&7 was arrested by &a" + + user.getColoredName(player) + "&7!")); + victimGtmUser.addDeaths(1); + victimGtmUser.setLastTag(-1); + victimGtmUser.setKillCounter(0); + victimGtmUser.setKillStreak(0); + victimGtmUser.unsetCompassTarget(victim, victimUser); + if (GTM.getWarpManager().cancelTaxi(victim, victimGtmUser)) + victim.sendMessage(Utils.f(Lang.TAXI + "&eThe taxi was cancelled!")); + victim.setHealth(victim.getMaxHealth()); + victim.spigot().respawn(); + victim.setFireTicks(0); + victim.setGameMode(GameMode.SPECTATOR); + victim.setFlying(true); + victim.getActivePotionEffects().clear(); + victim.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, 180, 0), false); + victim.setFoodLevel(20); + victim.playSound(victim.getLocation(), Sound.ENTITY_WITHER_SPAWN, 1, 0.5F); + victim.setFlySpeed(0); + GTMUtils.removeBoard(victim); + double lostMoney = Utils.round(victimGtmUser.getMoney() / 2); + new BukkitRunnable() { + @Override + public void run() { + Player victim = Bukkit.getPlayer(victimUUID); + if (victim == null) + return; + User victimUser = Core.getUserManager().getLoadedUser(victim.getUniqueId()); + GTMUser victimGameUser = GTM.getUserManager().getLoadedUser(victim.getUniqueId()); + victim.sendMessage(Lang.JAIL.f("&7You were arrested and have to stay in jail for &a" + + Utils.timeInSecondsToText(timeInJail) + "&7!")); + if (lostMoney > 0) + victim.sendMessage(Lang.MONEY_TAKE.f(String.valueOf(lostMoney))); + victim.teleport(GTM.getWarpManager().getJail().getLocation()); + victim.setGameMode(GameMode.ADVENTURE); + victim.getActivePotionEffects().clear(); + victim.setFoodLevel(20); + victim.setFlying(false); + victim.setFlySpeed(0.1F); + GTMUtils.giveGameItems(victim); + GTMUtils.updateBoard(victim, victimGameUser); + } + }.runTaskLater(GTM.getInstance(), 150); + ItemStack[] contents = victim.getInventory().getContents(); + victim.getInventory().clear(); + Location loc = victim.getLocation(); + for (ItemStack item : contents) + if (item != null && item.getType() != Material.WATCH && item.getType() != Material.COMPASS + && item.getType() != Material.CHEST) + loc.getWorld().dropItemNaturally(loc, item); + if (lostMoney > 0) { + victimGtmUser.takeMoney(lostMoney); + gtmUser.addMoney(lostMoney); + player.sendMessage(Lang.MONEY.f("&7You confiscated &a$&l" + lostMoney + "&7 of &a" + + victimUser.getColoredName(victim) + "&7's money!")); + } + int copMoney = GTMUtils.getCopMoney(wantedLevel); + gtmUser.addMoney(copMoney); + player.sendMessage(Lang.COP_MODE.f("&7You were rewarded &a$&l" + copMoney + "&7 for arresting a player with &e" + + GTMUtils.getWantedLevelStars(wantedLevel) + " (" + wantedLevel + ")&7!")); + Utils.sendTitle(victim, "&c&lBUSTED", "&7Arrested by " + player.getName(), 80, 50, 20); + GTMUtils.updateBoard(player, user, gtmUser); + } + + public static void updateBoard(Player player, User user, GTMUser gtmUser) { + if(!player.isOnline()) { + return; + } + if (user == null || !user.getPref(Pref.USE_SCOREBOARD) || user.isInTutorial()) { + player.setScoreboard(Bukkit.getScoreboardManager().getNewScoreboard()); + return; + } + Board board = new Board("gtm", "&7&l" + Core.getSettings().getServer_GTM_name(), BoardType.KEY_VALUE); + board.addValue("a", "Money", Utils.formatMoney(gtmUser.getMoney())); + board.addValue("a", "Bank", Utils.formatMoney(gtmUser.getBank())); + board.addValue("e", Core.getSettings().getServer_GTM_shortName() + " Rank", gtmUser.getRank().getName()); + if (gtmUser.getJobMode() == JobMode.CRIMINAL) { + int wantedLevel = gtmUser.getWantedLevel(); + board.addValue("c", "Wanted Level", getWantedLevelStars(wantedLevel) + " (" + wantedLevel + ')'); + } else + board.addValue(gtmUser.getJobMode().getColorChar(), "Job Mode", gtmUser.getJobMode().getName()); + board.addValue("6", "Server IP", user.getServerJoinAddress() != null ? user.getServerJoinAddress() : Core.getSettings().getNetworkIP()); + board.updateFor(player, Core.getUserManager().getLoadedUser(player.getUniqueId())); + } + + public static void removeBoard(Player player) { + player.setScoreboard(Bukkit.getScoreboardManager().getNewScoreboard()); + } + + public static String getWantedLevelStars(int i) { + String[] wantedLevels = new String[]{"✩✩✩✩✩", "✮✩✩✩✩", "✮✮✩✩✩", "✮✮✮✩✩", "✮✮✮✮✩", "✮✮✮✮✮"}; + return wantedLevels[i]; + } + + public static void giveGameItems(Player player) { + ItemStack phone = Utils.createItem(Material.WATCH, "&7&lPhone"); + ItemStack compass = Utils.createItem(Material.COMPASS, "&7&lGPS"); + ItemStack bp = Utils.createItem(Material.CHEST, "&6&lBackpack"); + ItemStack ammoPouch = Utils.createItem(Material.CHEST, "&c&lAmmo Pouch"); + Inventory inv = player.getInventory(); + if (!inv.contains(Material.WATCH)) + if (inv.getItem(8) == null) + inv.setItem(8, phone); + else + inv.addItem(phone); + if (!inv.contains(Material.COMPASS)) + if(inv.getItem(7)==null) + inv.setItem(7, compass); + else + inv.addItem(compass); + inv.setItem(17, bp); + inv.setItem(16, ammoPouch); + + } + + public static boolean isPhoneOrGPS(ItemStack item) { + if (item == null) + return false; + ItemStack gps = Utils.createItem(Material.COMPASS, "&7&lGPS"); + ItemStack phone = Utils.createItem(Material.WATCH, "&7&lPhone"); + return item.equals(gps) || item.equals(phone); + } + + public static String getMessageKilledBy(String name) { + String[] msges = new String[]{"Shanked by " + name, "Rekt by " + name, "Killed by " + name, + name + " killed you", name + " clapped yo ass", name + " killed you"}; + return msges[Utils.getRandom().nextInt(msges.length)]; + } + + public static void sendJoinMessage(Player p, User u) { + p.sendMessage(new String[]{"", "", "", "", "", "", "", "", "", "", Utils.f(HEADER), "", + Utils.fc("Welcome, " + u.getColoredName(p) + "&r to &7&l" + Core.getSettings().getServer_GTM_name() + "&r!"), + Utils.fc("&e&l&oGTA in Minecraft!"), "", Utils.fc("&e&lSTORE &r&n" + Core.getSettings().getStoreLink()), + Utils.fc("&a&lSITE &r&n" + Core.getSettings().getWebsiteLink()), "", Utils.fc("&7Use &a/tutorial&7 to get started!"), + "", Utils.f(FOOTER), ""}); + + } + + public static List<GTMUser> getCops() { + return GTMUserManager.getInstance().getUsers().stream().filter(user -> user.getJobMode() == JobMode.COP).collect(Collectors.toList()); + } + + public static Set<GTMUser> getCriminalsByWantedLevel(int minimumWantedLevel) { + HashMap<GTMUser, Integer> unsortMap = new HashMap<>(); + GTMUserManager.getInstance().getUsers().stream().filter(u -> u.getJobMode() == JobMode.CRIMINAL && u.getWantedLevel() >= minimumWantedLevel + && Objects.equals(Bukkit.getPlayer(u.getUUID()).getWorld().getName(), GTM.getSettings().getMap())).forEach(u -> unsortMap.put(u, u.getWantedLevel())); + return sort(unsortMap).keySet(); + } + + public static Map<GTMUser, Integer> sort(Map<GTMUser, Integer> unsortMap) { + List<Map.Entry<GTMUser, Integer>> list = new LinkedList<>(unsortMap.entrySet()); + list.sort(Comparator.comparing(Map.Entry::getValue)); + Map<GTMUser, Integer> sortedMap = new LinkedHashMap<>(); + for (Map.Entry<GTMUser, Integer> entry : list) { + sortedMap.put(entry.getKey(), entry.getValue()); + } + return sortedMap; + } + + public static List<Player> getJailedPlayers() { + List<Player> players = new ArrayList<>(); + for (Player p : Bukkit.getOnlinePlayers()) { + GTMUser gtmUser = GTM.getUserManager().getLoadedUser(p.getUniqueId()); + if (gtmUser.isArrested()) { + players.add(p); + } + } + return players; + } + + public static String toBase64(ItemStack[] array) { + if (array == null) + return null; + try { + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + try (BukkitObjectOutputStream dataOutput = new BukkitObjectOutputStream(outputStream)) { + + dataOutput.writeInt(array.length); + for (ItemStack stack : array) + dataOutput.writeObject(stack); + dataOutput.close(); + } + return Base64Coder.encodeLines(outputStream.toByteArray()); + } catch (Exception e) { + GTM.getInstance().getLogger().log(Level.ALL, "Error while serializing items!"); + e.printStackTrace(); + return null; + } + } + + public static ItemStack[] fromBase64(String data) { + if (data == null) + return new ItemStack[0]; + try { + ByteArrayInputStream inputStream = new ByteArrayInputStream(Base64Coder.decodeLines(data)); + ItemStack[] array; + try (BukkitObjectInputStream dataInput = new BukkitObjectInputStream(inputStream)) { + array = new ItemStack[dataInput.readInt()]; + // Read the serialized inventory + for (int i = 0; i < array.length; i++) + array[i] = (ItemStack) dataInput.readObject(); + + dataInput.close(); + } + return array; + } catch (Exception e) { + GTM.getInstance().getLogger().log(Level.ALL, "Error while deserializing items: " + data); + e.printStackTrace(); + return new ItemStack[0]; + } + } + + public static int getGangMembers(UserRank userRank) { + switch (userRank) { + case DEFAULT: + return 0; + case VIP: + return 2; + case PREMIUM: + return 5; + case ELITE: + return 10; + case SPONSOR: + return 15; + default: + return 20; + } + } + + public static String upperCaseFirst(String s) { + return s.substring(0, 1).toUpperCase() + s.substring(1, s.length()).toLowerCase(); + } + + public static void chooseJobMode(Player player, User user, GTMUser gtmUser, JobMode mode) { + if (mode == JobMode.CRIMINAL) { + if (gtmUser.getJobMode() == JobMode.CRIMINAL) { + player.sendMessage(Utils.f(Lang.JOBS + "&7You are already on the " + + JobMode.CRIMINAL.getColoredNameBold() + " Job&7!")); + return; + } + player.sendMessage(Lang.JOBS.f("&7You have quit the " + gtmUser.getJobMode().getColoredNameBold() + "&7 Job!")); + gtmUser.setJobMode(JobMode.CRIMINAL); + gtmUser.unsetCompassTarget(player, user); + updateBoard(player, user, gtmUser); + NametagManager.updateNametag(player); + GTMUtils.giveGameItems(player); + return; + } + if (gtmUser.getJobMode() == JobMode.COP || gtmUser.getJobMode() == JobMode.HITMAN) { + player.sendMessage(Utils.f(Lang.JOBS + "&7You are already on the " + + gtmUser.getJobMode().getColoredNameBold() + " Job&7!")); + return; + } + if (!gtmUser.canSwitchJobMode(user.getUserRank())) { + player.sendMessage(Utils.f(Lang.JOBS + + "&7Sorry, but you need to wait &a" + Utils.timeInMillisToText(gtmUser.getTimeUntilJobModeSwitch(user.getUserRank())) + + "&7 before switching Job Mode again!" + (user.getUserRank().isHigherThan(UserRank.SPONSOR) ? "" : " Buy a rank a &a&l" + Core.getSettings().getStoreLink() + "&7 to be able to switch faster!"))); + return; + } + if (!mode.canUse(gtmUser.getRank(), user.getUserRank())) { + player.sendMessage(Lang.JOBS.f("&7You don't have access to " + mode.getColoredNameBold() + " Mode&7! Rank up to " + mode.getRank().getColoredNameBold() + "&7 or buy the " + mode.getUserRank().getColoredNameBold() + "&7 rank!")); + return; + } + gtmUser.setJobMode(mode); + if (mode == JobMode.COP) + player.sendMessage(Utils.f(Lang.COP_MODE + "&7You are now in " + mode.getColoredNameBold() + + " Mode&7! You can earn money by killing wanted criminals.")); + else if (mode == JobMode.HITMAN) { + player.sendMessage(Utils.f(Lang.HITMAN_MODE + "&7You are now in " + mode.getColoredNameBold() + " Mode&7! You can earn money by killing players that have a bounty on their head.")); + } + GTM.getItemManager().giveKit(player, user, gtmUser, mode.getName()); + gtmUser.unsetCompassTarget(player, user); + gtmUser.setKillCounter(0); + updateBoard(player, user, gtmUser); + NametagManager.updateNametag(player); + GTMUtils.giveGameItems(player); + } + + public static int getTimeInJail(int wl) { // IN SECONDS + return new int[]{0, 60, 120, 180, 300, 400}[wl]; + } + + public static int getCopMoney(int wl) { + return new int[]{0, 2000, 5000, 10000, 20000, 50000}[wl]; + } + + public static int getJobModeDelay(UserRank rank) { // IN SECONDS + switch (rank) { + case DEFAULT: + return 9000; + case VIP: + return 7200; + case PREMIUM: + return 5400; + case ELITE: + return 3600; + case SPONSOR: + return 2700; + default: + return 1800; + } + } + + public static boolean isArmor(Material material) { + String s = material.toString(); + return s.contains("BOOTS") || s.contains("LEGGINGS") || s.contains("CHESTPLATE") || s.contains("HELMET"); + } + + public static int getFeedDelay(UserRank rank) {// IN SECONDS + switch (rank) { + case DEFAULT: + return 1800; + case VIP: + return 900; + case PREMIUM: + return 600; + case ELITE: + return 300; + case SPONSOR: + return 180; + default: + return 120; + } + + }//testrtasdfadfasdfes + private final static List<String> DEFAULT_ITEMS = new ArrayList<>(Arrays.asList("Phone", "Backpack", "Ammo Pouch")); + public static boolean isDefaultPlayerItem(ItemStack is) { + return is!=null && is.hasItemMeta() && is.getItemMeta().hasDisplayName() && DEFAULT_ITEMS.contains(ChatColor.stripColor(is.getItemMeta().getDisplayName())); + } + + public static int getFixHandDelay(UserRank rank) {// IN SECONDS + switch (rank) { + case DEFAULT: + return 60*60; + case VIP: + return 60*30; + case PREMIUM: + return 60*20; + case ELITE: + return 60*15; + case SPONSOR: + return 60*10; + case SUPREME: + return 60*5; + default: + return 60*5; + } + + } + public static int getFixAllDelay(UserRank rank) {// IN SECONDS + switch (rank) { + default: + return 60*60*3; + } + + } + + public static int getBackpackRows(UserRank rank) { + switch (rank) { + case DEFAULT: + return 2; + case VIP: + return 3; + case PREMIUM: + return 5; + case ELITE: + return 7; + case SPONSOR: + return 9; + default: + return 11; + } + } + + public static int getCompassRadius(UserRank rank) { + switch (rank) { + case DEFAULT: + case VIP: + return 30; + case PREMIUM: + return 50; + case ELITE: + return 75; + case SPONSOR: + return 100; + default: + return 10; + } + } + + public static int getExtraCompassAccuracy(UserRank rank) { + switch (rank) { + case DEFAULT: + case VIP: + return 0; + case PREMIUM: + return 15; + case ELITE: + return 33; + case SPONSOR: + return 50; + default: + return 67; + } + } + + public static int getStartingMoney(UserRank rank) { + switch (rank) { + case DEFAULT: + return 5000; + case VIP: + return 100000; + case PREMIUM: + return 250000; + case ELITE: + return 500000; + case SPONSOR: + return 1000000; + default: + return 2000000; + } + } + + public static int getStartingPermits(UserRank rank) { + switch (rank) { + case DEFAULT: + case VIP: + case PREMIUM: + case ELITE: + return 0; + case SPONSOR: + return 5; + default: + return 10; + } + } + + + public static int getHouses(UserRank userRank) { + switch (userRank) { + case DEFAULT: + return 0; + case VIP: + return 1; + case PREMIUM: + return 2; + case ELITE: + return 3; + case SPONSOR: + return 5; + default: + return 10; + } + } + + public static int getFreeLotteryTickets(UserRank userRank) { + switch (userRank) { + case DEFAULT: + return 0; + case VIP: + return 1; + case PREMIUM: + return 2; + case ELITE: + return 3; + case SPONSOR: + return 5; + default: + return 10; + } + } + + public static int getWarpDelay(UserRank userRank) { + switch (userRank) { + case DEFAULT: + return 15; + case VIP: + return 12; + case PREMIUM: + return 10; + case ELITE: + return 8; + case SPONSOR: + return 6; + default: + return 5; + } + } + + public static int getNearRange(UserRank rank) { + switch (rank) { + case VIP: + return 50; + case PREMIUM: + return 75; + case ELITE: + return 100; + case SPONSOR: + return 125; + case SUPREME: + return 150; + default: + return 100; + } + } + + public static int getStackDelay(UserRank rank) { + switch (rank) { + case SUPREME: + return 3600; + case HELPOP: + case MOD: + case SRMOD: + case ADMIN: + return 300; + case DEV: + case MANAGER: + case OWNER: + return 1; + default: + return 3600; + } + } + + /* + * public static String serialize(ItemStack[] a) { StringBuilder b = new + * StringBuilder(); for (int i = 0; i < a.length; i++) { if (i > 0) + * b.append(","); ItemStack item = a[i]; try { + * b.append(StreamSerializer.getDefault().serializeItemStack(item)); } catch + * (Exception e) { b.append("null"); System.out.println( + * "Error while serializing an item (" + i + "): " + + * e.getCause().getMessage()); } } return b.toString(); } + * + * public static ItemStack[] deserialize(String s) { if (s == null || + * s.length() == 0) return new ItemStack[0]; String[] a = s.split(","); + * ItemStack[] array = new ItemStack[a.length]; for (int i = 0; i < + * a.length; i++) { try { array[i] = + * StreamSerializer.getDefault().deserializeItemStack(a[i]); } catch + * (Exception e) { array[i] = null; System.out.println( + * "Error while deserializing an item (" + i + "): " + e.getMessage()); } } + * return array; } + */ + + public static boolean isValidURL(String string) { + String urlRegex = "^((https?|ftp)://|(www|ftp)\\.)?[a-z0-9-]+(\\.[a-z0-9-]+)+([/?].*)?$"; + Pattern p = Pattern.compile(urlRegex); + Matcher m = p.matcher(string); + return m.find(); + } + + public static double getCrossProduct(LivingEntity livingEntity, Location target) { + if (livingEntity.getWorld() != target.getWorld()) return 10000; + Location head = livingEntity.getLocation(); + org.bukkit.util.Vector look = livingEntity.getLocation().getDirection().normalize(); + org.bukkit.util.Vector direction = head.subtract(target).toVector().normalize(); + org.bukkit.util.Vector cp = direction.crossProduct(look); + return cp.length(); + } + + public static String serializeLocation(Location location) { + String world = location.getWorld().getName(); + String x = String.valueOf(location.getX()); + String y = String.valueOf(location.getY()); + String z = String.valueOf(location.getZ()); + String yaw = String.valueOf(location.getYaw()); + String pitch = String.valueOf(location.getPitch()); + return world + '@' + x + '@' + y + '@' + z + '@' + yaw + '@' + pitch; + } + + public static Optional<Location> deserializeLocation(String loc) { + String[] args = loc.split("@"); + World world = Bukkit.getWorld(args[0]); + double x = Double.valueOf(args[1]); + double y = Double.valueOf(args[2]); + double z = Double.valueOf(args[3]); + float yaw = Float.valueOf(args[4]); + float pitch = Float.valueOf(args[5]); + Location location = new Location(world, x, y, z, yaw, pitch); + return Optional.ofNullable(location); + } + + public static String convertItemStackToJson(ItemStack itemStack) { + Class<?> craftItemStackClazz = ReflectionUtil.getOBCClass("inventory.CraftItemStack"); + Method asNMSCopyMethod = ReflectionUtil.getMethod(craftItemStackClazz, "asNMSCopy", ItemStack.class); + Class<?> nmsItemStackClazz = ReflectionUtil.getNMSClass("ItemStack"); + Class<?> nbtTagCompoundClazz = ReflectionUtil.getNMSClass("NBTTagCompound"); + Method saveNmsItemStackMethod = ReflectionUtil.getMethod(nmsItemStackClazz, "save", nbtTagCompoundClazz); + + Object nmsNbtTagCompoundObj; + Object nmsItemStackObj; + Object itemAsJsonObject; + + try { + nmsNbtTagCompoundObj = nbtTagCompoundClazz.newInstance(); + nmsItemStackObj = asNMSCopyMethod.invoke(null, itemStack); + itemAsJsonObject = saveNmsItemStackMethod.invoke(nmsItemStackObj, nmsNbtTagCompoundObj); + } catch (Throwable t) { + return null; + } + + return itemAsJsonObject.toString(); + } + + + public static void moneylog(Player sender, Player target, double amount) { + if (Core.getSettings().isSister()) return; //Throwing errors.. + + NumberFormat formatter = NumberFormat.getCurrencyInstance(); + String fileName = new SimpleDateFormat("MM-dd-yy").format(new Date()); + File file = new File("gtmlogs/moneylog_" + fileName + ".txt"); + try { + if (!file.isFile() || !file.exists()) + file.createNewFile(); + } catch (IOException exception) { + exception.printStackTrace(); + } + String date = new SimpleDateFormat("MM/dd/yy - h:mm a").format(new Date()); + try (BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(file, true))) { + bufferedWriter.write(date + " - " + sender.getName() + " sent " + formatter.format(amount) + " to " + target.getName() + '\n'); + bufferedWriter.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public static void log(String logName, String msg) { + if (Core.getSettings().isSister()) return; //Throwing errors.. + + String fileName = new SimpleDateFormat("MM-dd-yy").format(new Date()); + File file = new File("gtmlogs/" + logName + '_' + fileName + ".txt"); + try { + if (!file.isFile() || !file.exists()) { + file.createNewFile(); + } + String date = new SimpleDateFormat("MM/dd/yy - h:mm a").format(new Date()); + FileWriter fileWriter = new FileWriter(file, true); + try (BufferedWriter bufferedWriter = new BufferedWriter(fileWriter)) { + bufferedWriter.write(date + " - " + msg + '\n'); + } + } catch (IOException exception) { + exception.printStackTrace(); + } + } + + public static GameItem getRandomGameItem() { + List<GameItem> gameItems = GTM.getItemManager().getItems().stream().filter(gameItem -> gameItem.getType() == GameItem.ItemType.ITEMSTACK || gameItem.getType() == GameItem.ItemType.WEAPON).collect(Collectors.toList()); + return gameItems.get(ThreadLocalRandom.current().nextInt(gameItems.size())); + } + + public static Warp getNearestWarp(Location location) { + Warp nearestWarp = null; + for (Warp warp : GTM.getWarpManager().getWarps()) { + if (warp.getLocation().getWorld() != location.getWorld()) continue; + if (nearestWarp == null || + warp.getLocation().distance(location) < nearestWarp.getLocation().distance(location)) { + nearestWarp = warp; + } + } + return nearestWarp; + } + + public static Map<String, Integer> getTopKillers(int count) { + Map<String, Integer> topKillers = new HashMap<>(); + + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("SELECT * FROM " + Core.name() + " WHERE name != 'ERROR' ORDER BY kills DESC LIMIT " + count + ';')) { + try (ResultSet result = statement.executeQuery()) { + while (result.next()) { + topKillers.put(result.getString("name"), result.getInt("kills")); + } + } + } + } catch (SQLException e) { + e.printStackTrace(); + } + return topKillers; + } + + public static <K, V extends Comparable<? super V>> Map<K, V> sortByValue(Map<K, V> map) { + return map.entrySet() + .stream() + .sorted(Map.Entry.comparingByValue(Collections.reverseOrder())) + .collect(Collectors.toMap( + Map.Entry::getKey, + Map.Entry::getValue, + (e1, e2) -> e1, + LinkedHashMap::new + )); + } + + public static boolean isInteger(String s) { + try { + Integer.parseInt(s); + } catch (NumberFormatException e) { + return false; + } + return true; + } + + public static void spawnTinyArmorStand(Location location, String username, String title) { + ArmorStand armorStand = (ArmorStand) location.getWorld().spawnEntity(location, EntityType.ARMOR_STAND); + armorStand.setSmall(true); + armorStand.setBasePlate(false); + ItemStack skull = Utils.createItem(Material.SKULL_ITEM, 3, Utils.f(username)); + SkullMeta meta = (SkullMeta) skull.getItemMeta(); + meta.setOwner(username); + skull.setItemMeta(meta); + armorStand.setHelmet(skull); + armorStand.setCustomNameVisible(true); + armorStand.setCustomName(Utils.f(title)); + } + + public static void sendGlow(Player player, Player target, long time) { + PacketContainer packet = GTM.getProtocolManager().createPacket(PacketType.Play.Server.ENTITY_METADATA); + packet.getIntegers().write(0, target.getEntityId()); + WrappedDataWatcher watcher = new WrappedDataWatcher(); + WrappedDataWatcher.Serializer serializer = WrappedDataWatcher.Registry.get(Byte.class); + watcher.setEntity(target); + watcher.setObject(0, serializer, (byte) 0x40); + packet.getWatchableCollectionModifier().write(0, watcher.getWatchableObjects()); + try { + GTM.getProtocolManager().sendServerPacket(player, packet); + } catch (InvocationTargetException e) { + e.printStackTrace(); + } + new BukkitRunnable() { + @Override + public void run() { + removeGlow(player, target); + } + }.runTaskLaterAsynchronously(GTM.getInstance(), time); + } + + public static void removeGlow(Player player, Player target) { + PacketContainer packet = GTM.getProtocolManager().createPacket(PacketType.Play.Server.ENTITY_METADATA); + packet.getIntegers().write(0, target.getEntityId()); + WrappedDataWatcher watcher = new WrappedDataWatcher(); + WrappedDataWatcher.Serializer serializer = WrappedDataWatcher.Registry.get(Byte.class); + watcher.setEntity(target); + watcher.setObject(0, serializer, (byte) 0x0); + packet.getWatchableCollectionModifier().write(0, watcher.getWatchableObjects()); + try { + GTM.getProtocolManager().sendServerPacket(player, packet); + } catch (InvocationTargetException e) { + e.printStackTrace(); + } + } + + public static Month getMonth() { + return LocalDate.now(ZoneId.systemDefault()).getMonth(); + + } + + public static int getDay() { + return LocalDate.now(ZoneId.systemDefault()).getDayOfMonth(); + } + + public static ChatColor randomColor() { + int a = ThreadLocalRandom.current().nextInt(16); + switch (a) { + case 1: + return ChatColor.GREEN; + case 2: + return ChatColor.DARK_GREEN; + case 3: + return ChatColor.BLUE; + case 4: + return ChatColor.DARK_RED; + case 5: + return ChatColor.DARK_PURPLE; + case 6: + return ChatColor.GOLD; + case 7: + return ChatColor.GRAY; + case 8: + return ChatColor.DARK_GRAY; + case 9: + return ChatColor.DARK_BLUE; + case 10: + return ChatColor.GREEN; + case 11: + return ChatColor.AQUA; + case 12: + return ChatColor.RED; + case 13: + return ChatColor.LIGHT_PURPLE; + case 14: + return ChatColor.YELLOW; + default: + return ChatColor.AQUA; + } + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/armor/ArmorShopManager.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/armor/ArmorShopManager.java new file mode 100644 index 0000000..f8cd78f --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/armor/ArmorShopManager.java @@ -0,0 +1,510 @@ +package net.grandtheftmc.gtm.armor; + +import java.util.Arrays; +import java.util.List; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.entity.ArmorStand; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.player.PlayerInteractAtEntityEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.plugin.java.JavaPlugin; +import org.bukkit.util.EulerAngle; + +import com.google.common.collect.Lists; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.AngleUtil; +import net.grandtheftmc.core.util.C; +import net.grandtheftmc.core.util.Component; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.GTMUtils; +import net.grandtheftmc.gtm.items.GameItem; +import net.grandtheftmc.gtm.items.ItemManager; +import net.grandtheftmc.gtm.users.GTMUser; + +public class ArmorShopManager implements Component<ArmorShopManager, GTM> { + + private final ItemManager itemManager; + + public ArmorShopManager(JavaPlugin plugin, ItemManager itemManager) { + this.itemManager = itemManager; + Bukkit.getPluginManager().registerEvents(this, plugin); + + ServerUtil.runTaskLater(() -> { + List<ShopStatue> list = Lists.newArrayList(); + final World spawn = Bukkit.getWorld("spawn"); + list.addAll(Arrays.asList( + new ShopStatue() { + @Override + public Location spawnVisual(World world) { + GameItem gameItem = itemManager.getItem(this.getGameItem()); + if (gameItem == null) return null; + + Location origin = this.getOrigin(world); + + ArmorStand clickable = spawnEntity(origin.clone().add(0, 0.3, 0), VisualType.NAME); + clickable.setCustomName(C.GREEN + "$" + gameItem.getBuyPrice()); + clickable.setCustomNameVisible(true); + + ArmorStand armor = spawnEntity(origin.clone().add(-0.1, 0.1, 0), VisualType.NONE); + armor.setHelmet(gameItem.getItem().clone()); + armor.setHeadPose(new EulerAngle(AngleUtil.getRadianFromDegree(42.0f), 0f, 0f)); + armor.setMarker(true); + return null; + } + + @Override + public Location getOrigin(World world) { + return new Location(spawn, -371.5, 25.5, 268.5, -90.0f, 0.0f); + } + + @Override + public String getGameItem() { + return "baseballcap"; + } + }, //Leather Helmet + new ShopStatue() { + @Override + public Location spawnVisual(World world) { + GameItem gameItem = itemManager.getItem(this.getGameItem()); + if (gameItem == null) return null; + + Location origin = this.getOrigin(world); + + ArmorStand clickable = spawnEntity(origin.clone().add(0, 0.4, 0), VisualType.NAME); + clickable.setCustomName(C.GREEN + "$" + gameItem.getBuyPrice()); + clickable.setCustomNameVisible(true); + + ArmorStand armor = spawnEntity(origin.clone().add(-0.1, 0.5, 0), VisualType.NONE); + armor.setChestplate(gameItem.getItem().clone()); + armor.setMarker(true); + return null; + } + + @Override + public Location getOrigin(World world) { + return new Location(spawn, -371.5, 25.5, 267.5, -90.0f, 0.0f); + } + + @Override + public String getGameItem() { + return "shirt"; + } + }, //Leather Chestplate + new ShopStatue() { + @Override + public Location spawnVisual(World world) { + GameItem gameItem = itemManager.getItem(this.getGameItem()); + if (gameItem == null) return null; + + Location origin = this.getOrigin(world); + + ArmorStand clickable = spawnEntity(origin.clone().add(0, 0.1, 0), VisualType.NAME); + clickable.setCustomName(C.GREEN + "$" + gameItem.getBuyPrice()); + clickable.setCustomNameVisible(true); + + ArmorStand armor = spawnEntity(origin.clone().add(0, 1, 0), VisualType.NONE); + armor.setLeggings(gameItem.getItem().clone()); + armor.setLeftLegPose(new EulerAngle(AngleUtil.getRadianFromDegree(343.0), 0f, AngleUtil.getRadianFromDegree(350.0))); + armor.setRightLegPose(new EulerAngle(AngleUtil.getRadianFromDegree(3.0), 0f, AngleUtil.getRadianFromDegree(7.0))); + armor.setMarker(true); + return null; + } + + @Override + public Location getOrigin(World world) { + return new Location(spawn, -371.5, 25.5, 266.5, -90.0f, 0.0f); + } + + @Override + public String getGameItem() { + return "pants"; + } + }, //Leather Leggings + new ShopStatue() { + @Override + public Location spawnVisual(World world) { + GameItem gameItem = itemManager.getItem(this.getGameItem()); + if (gameItem == null) return null; + + Location origin = this.getOrigin(world); + + ArmorStand name = spawnEntity(origin.clone().add(0, 2.1, 0), VisualType.NAME); + name.setCustomName(C.GREEN + "$" + gameItem.getBuyPrice()); + name.setCustomNameVisible(true); + name.setMarker(true); + + ArmorStand clickable = spawnEntity(origin.clone().add(0, 1.6, 0), VisualType.NAME); + + ArmorStand armor = spawnEntity(origin.clone().add(0, 1.5, 0), VisualType.NONE); + armor.setBoots(gameItem.getItem().clone()); + armor.setLeftLegPose(new EulerAngle(AngleUtil.getRadianFromDegree(343.0), 0f, AngleUtil.getRadianFromDegree(350.0))); + armor.setRightLegPose(new EulerAngle(AngleUtil.getRadianFromDegree(3.0), 0f, AngleUtil.getRadianFromDegree(7.0))); + armor.setMarker(true); + return null; + } + + @Override + public Location getOrigin(World world) { + return new Location(spawn, -371.5, 25.5, 265.5, -75.0f, 0.0f); + } + + @Override + public String getGameItem() { + return "nikes"; + } + }, //Leather Boots + new ShopStatue() { + @Override + public Location spawnVisual(World world) { + GameItem gameItem = itemManager.getItem(this.getGameItem()); + if (gameItem == null) return null; + + Location origin = this.getOrigin(world); + + ArmorStand name = spawnEntity(origin.clone().add(0, 0.6, 0), VisualType.NAME); + name.setCustomName(C.GREEN + "$" + gameItem.getBuyPrice()); + name.setCustomNameVisible(true); + name.setMarker(true); + + ArmorStand clickable = spawnEntity(origin.clone().add(0, 0.15, 0), VisualType.NAME); + + ArmorStand armor = spawnEntity(origin.clone().add(0, 0.15, 0), VisualType.NONE); + armor.setHelmet(gameItem.getItem().clone()); + armor.setHeadPose(new EulerAngle(AngleUtil.getRadianFromDegree(42.0), 0f, 0f)); + armor.setMarker(true); + return null; + } + + @Override + public Location getOrigin(World world) { + return new Location(spawn, -362.5, 25.5, 263.5, 0.0f, 0.0f); + } + + @Override + public String getGameItem() { + return "tacticalmask"; + } + }, //Iron Helmet + new ShopStatue() { + @Override + public Location spawnVisual(World world) { + GameItem gameItem = itemManager.getItem(this.getGameItem()); + if (gameItem == null) return null; + + Location origin = this.getOrigin(world); + + ArmorStand name = spawnEntity(origin.clone().add(0, 0.6, 0), VisualType.NAME); + name.setCustomName(C.GREEN + "$" + gameItem.getBuyPrice()); + name.setCustomNameVisible(true); + name.setMarker(true); + + ArmorStand clickable = spawnEntity(origin.clone().add(0, 0.15, 0), VisualType.NAME); + + ArmorStand armor = spawnEntity(origin.clone().add(0, 0.15, 0), VisualType.NONE); + armor.setHelmet(gameItem.getItem().clone()); + armor.setHeadPose(new EulerAngle(AngleUtil.getRadianFromDegree(42.0), 0f, 0f)); + armor.setMarker(true); + return null; + } + + @Override + public Location getOrigin(World world) { + return new Location(spawn, -360.5, 25.5, 263.5, 0.0f, 0.0f); + } + + @Override + public String getGameItem() { + return "titaniumhelmet"; + } + }, //Diamond Helmet + new ShopStatue() { + @Override + public Location spawnVisual(World world) { + GameItem gameItem = itemManager.getItem(this.getGameItem()); + if (gameItem == null) return null; + + Location origin = this.getOrigin(world); + + ArmorStand name = spawnEntity(origin.clone().add(0, 0.6, 0), VisualType.NAME); + name.setCustomName(C.GREEN + "$" + gameItem.getBuyPrice()); + name.setCustomNameVisible(true); + name.setMarker(true); + + ArmorStand clickable = spawnEntity(origin.clone().add(0, 0.15, 0), VisualType.NAME); + + ArmorStand armor = spawnEntity(origin.clone().add(0, 0.15, 0), VisualType.NONE); + armor.setHelmet(gameItem.getItem().clone()); + armor.setHeadPose(new EulerAngle(AngleUtil.getRadianFromDegree(42.0), 0f, 0f)); + armor.setMarker(true); + return null; + } + + @Override + public Location getOrigin(World world) { + return new Location(spawn, -358.5, 25.5, 263.5, 0.0f, 0.0f); + } + + @Override + public String getGameItem() { + return "pimpcrown"; + } + }, //Golden Helmet + new ShopStatue() { + @Override + public Location spawnVisual(World world) { + GameItem gameItem = itemManager.getItem(this.getGameItem()); + if (gameItem == null) return null; + + Location origin = this.getOrigin(world); + + ArmorStand name = spawnEntity(origin.clone().add(0, 1.6, 0), VisualType.NAME); + name.setCustomName(C.GREEN + "$" + gameItem.getBuyPrice()); + name.setCustomNameVisible(true); + name.setMarker(true); + + ArmorStand clickable = spawnEntity(origin.clone().add(0, 1.5, 0), VisualType.NAME); + + ArmorStand armor = spawnEntity(origin.clone().add(0, 1.5, 0.05), VisualType.NONE); + armor.setChestplate(gameItem.getItem().clone()); + armor.setMarker(true); + return null; + } + + @Override + public Location getOrigin(World world) { + return new Location(spawn, -361.5, 25.5, 263.5, 0.0f, 0.0f); + } + + @Override + public String getGameItem() { + return "ceramicvest"; + } + }, //Iron Chestplate + new ShopStatue() { + @Override + public Location spawnVisual(World world) { + GameItem gameItem = itemManager.getItem(this.getGameItem()); + if (gameItem == null) return null; + + Location origin = this.getOrigin(world); + + ArmorStand name = spawnEntity(origin.clone().add(0, 1.6, 0), VisualType.NAME); + name.setCustomName(C.GREEN + "$" + gameItem.getBuyPrice()); + name.setCustomNameVisible(true); + name.setMarker(true); + + ArmorStand clickable = spawnEntity(origin.clone().add(0, 1.5, 0), VisualType.NAME); + + ArmorStand armor = spawnEntity(origin.clone().add(0, 1.5, 0.05), VisualType.NONE); + armor.setChestplate(gameItem.getItem().clone()); + armor.setMarker(true); + return null; + } + + @Override + public Location getOrigin(World world) { + return new Location(spawn, -359.5, 25.5, 263.5, 0.0f, 0.0f); + } + + @Override + public String getGameItem() { + return "titaniumvest"; + } + }, //Diamond Chestplate + new ShopStatue() { + @Override + public Location spawnVisual(World world) { + GameItem gameItem = itemManager.getItem(this.getGameItem()); + if (gameItem == null) return null; + + Location origin = this.getOrigin(world); + + ArmorStand name = spawnEntity(origin.clone().add(0, 1.6, 0), VisualType.NAME); + name.setCustomName(C.GREEN + "$" + gameItem.getBuyPrice()); + name.setCustomNameVisible(true); + name.setMarker(true); + + ArmorStand clickable = spawnEntity(origin.clone().add(0, 1.5, 0), VisualType.NAME); + + ArmorStand armor = spawnEntity(origin.clone().add(0, 1.5, 0.1), VisualType.NONE); + armor.setChestplate(gameItem.getItem().clone()); + armor.setMarker(true); + return null; + } + + @Override + public Location getOrigin(World world) { + return new Location(spawn, -357.5, 25.5, 263.5, 0.0f, 0.0f); + } + + @Override + public String getGameItem() { + return "jetpack"; + } + }, //Jetpack + new ShopStatue() { + @Override + public Location spawnVisual(World world) { + GameItem gameItem = itemManager.getItem(this.getGameItem()); + if (gameItem == null) return null; + + Location origin = this.getOrigin(world); + + ArmorStand name = spawnEntity(origin.clone().add(0, 2.2, 0), VisualType.NAME); + name.setCustomName(C.WHITE + "x" + C.BOLD + this.getAmount() + C.RESET + " " + C.GREEN + "$" + (gameItem.getBuyPrice() * this.getAmount())); + name.setCustomNameVisible(true); + name.setMarker(true); + + ArmorStand clickable = spawnEntity(origin.clone().add(0, 0.6, 0), VisualType.NAME); + + ArmorStand armor = spawnEntity(origin.clone().add(0, -0.3, 0.1), VisualType.NONE); + armor.setHelmet(gameItem.getItem().clone()); + armor.setHeadPose(new EulerAngle(AngleUtil.getRadianFromDegree(10.0), 0f, 0f)); + armor.setMarker(true); + return null; + } + + @Override + public Location getOrigin(World world) { + return new Location(spawn, -356.5, 25.5, 270.5, 0.0f, 0.0f); + } + + @Override + public String getGameItem() { + return "jetpackfuel"; + } + + @Override + public int getAmount() { + return 10; + } + }, //Jetpack Fuel x10 + new ShopStatue() { + @Override + public Location spawnVisual(World world) { + GameItem gameItem = itemManager.getItem(this.getGameItem()); + if (gameItem == null) return null; + + Location origin = this.getOrigin(world); + + ArmorStand name = spawnEntity(origin.clone().add(0, 2.2, 0), VisualType.NAME); + name.setCustomName(C.WHITE + "x" + C.BOLD + this.getAmount() + C.RESET + " " + C.GREEN + "$" + (gameItem.getBuyPrice() * this.getAmount())); + name.setCustomNameVisible(true); + name.setMarker(true); + + ArmorStand clickable = spawnEntity(origin.clone().add(0, 0.6, 0), VisualType.NAME); + + ArmorStand armor = spawnEntity(origin.clone().add(0, -0.3, -0.1), VisualType.NONE); + armor.setHelmet(gameItem.getItem().clone()); + armor.setHeadPose(new EulerAngle(AngleUtil.getRadianFromDegree(10.0), 0f, 0f)); + armor.setMarker(true); + + ArmorStand armor2 = spawnEntity(origin.clone().add(0.2, -0.28, 0.1), VisualType.NONE); + armor2.setHelmet(gameItem.getItem().clone()); + armor2.setHeadPose(new EulerAngle(AngleUtil.getRadianFromDegree(10.0), 0f, 0f)); + armor2.setMarker(true); + + ArmorStand armor3 = spawnEntity(origin.clone().add(-0.2, -0.25, 0), VisualType.NONE); + armor3.setHelmet(gameItem.getItem().clone()); + armor3.setHeadPose(new EulerAngle(AngleUtil.getRadianFromDegree(10.0), 0f, 0f)); + armor3.setMarker(true); + return null; + } + + @Override + public Location getOrigin(World world) { + return new Location(spawn, -358.5, 25.5, 270.5, 0.0f, 0.0f); + } + + @Override + public String getGameItem() { + return "jetpackfuel"; + } + + @Override + public int getAmount() { + return 64; + } + } //Jetpack Fuel x64 + )); + + for (ShopStatue statue : list) { + Location origin = statue.getOrigin(spawn); + if (!origin.getChunk().isLoaded()) origin.getChunk().load(); + for (Entity entity : origin.getWorld().getNearbyEntities(origin, 2, 10, 2)) { + if (entity.getType() != EntityType.ARMOR_STAND) continue; + entity.remove(); + } + } + + ServerUtil.runTaskLater(() -> { + for (ShopStatue statue : list) { + statue.spawnVisual(spawn); + } + }, 20 * 15); + }, 40L); + } + + @EventHandler + protected final void onArmorstandInteract(PlayerInteractAtEntityEvent event) { + if (event.getRightClicked() == null) return; + if (!event.getRightClicked().hasMetadata("armor-statue")) return; + event.setCancelled(true); + + ShopStatue statue = (ShopStatue) event.getRightClicked().getMetadata("armor-statue").get(0).value(); + if (statue == null) return; + + Player player = event.getPlayer(); + GTMUser user = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + + if (!GTM.getSettings().canBuy()){ + player.sendMessage(ChatColor.RED + "Buying things is currently disabled."); + return; + } + + GameItem gi = itemManager.getItem(statue.getGameItem()); + double price = gi.getBuyPrice() * statue.getAmount(); + if (user.hasMoney(price)) { + user.takeMoney(price); + player.sendMessage(Lang.MONEY_TAKE.f(String.valueOf(price))); + } else { + if (user.hasBank(price)) { + user.takeBank(price); + player.sendMessage(Lang.BANK_TAKE.f(String.valueOf(price))); + } else { + player.sendMessage(Lang.MONEY.f("&7You do not have enough money!")); + return; + } + } + GTMUtils.updateBoard(player, Core.getUserManager().getLoadedUser(player.getUniqueId()), user); + switch (gi.getType()) { +// case AMMO: +// int amount = statue.getAmount(); +// AmmoType type = statue.getGameItem().getAmmoType(); +// if (type != null) +// user.addAmmo(type, amount); +// player.sendMessage(Lang.SHOP.f("&7You bought " + (amount > 1 ? "&a&l" + amount + "&7x " : "") +// + statue.getGameItem().getDisplayName() + "&7 for &a$&l" + price + "&7!")); +// return; + case ITEMSTACK: + ItemStack stack = gi.getItem(); + stack.setAmount(statue.getAmount()); + Utils.giveItems(player, stack); + player.sendMessage(Lang.SHOP.f("&7You bought " + (statue.getAmount() > 1 ? "&a&l" + statue.getAmount() + "&7x " : "") + + gi.getDisplayName() + "&7 for &a$&l" + price + "&7!")); + default: + break; + } + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/armor/ShopStatue.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/armor/ShopStatue.java new file mode 100644 index 0000000..3a80c3b --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/armor/ShopStatue.java @@ -0,0 +1,47 @@ +package net.grandtheftmc.gtm.armor; + +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.items.GameItem; +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.entity.ArmorStand; +import org.bukkit.metadata.FixedMetadataValue; + +public abstract class ShopStatue { + + public abstract Location spawnVisual(World world); + + public abstract Location getOrigin(World world); + + public abstract String getGameItem(); + + public ArmorStand spawnEntity(Location location, VisualType visualType) { + ArmorStand entity = location.getWorld().spawn(location, ArmorStand.class); + + entity.setGravity(false); + entity.setRemoveWhenFarAway(false); + entity.setAI(false); +// entity.setInvulnerable(true); + entity.setBasePlate(true); + entity.setVisible(false); + entity.setInvulnerable(true); +// entity.setCollidable(false); + entity.setMetadata("armor-statue", new FixedMetadataValue(GTM.getInstance(), this)); + extras(entity); + + return entity; + } + + public void extras(ArmorStand entity) {} + + public int getAmount() { + return 1; + } + + public static enum VisualType { + NAME, + PRICE, + NONE, + ; + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/bounties/Bounty.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/bounties/Bounty.java new file mode 100644 index 0000000..7fd0610 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/bounties/Bounty.java @@ -0,0 +1,92 @@ +package net.grandtheftmc.gtm.bounties; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.UUID; + +public class Bounty { + + private UUID uuid; + private String name; + private List<BountyPlacer> placers = new ArrayList<>(); + private long lastUpdate; + + public Bounty(UUID uuid, String name, List<BountyPlacer> placers) { + this.uuid = uuid; + this.name = name; + this.placers = placers; + this.lastUpdate = System.currentTimeMillis(); + } + + public Bounty(UUID uuid, String name, List<BountyPlacer> placers, long lastUpdate) { + this.uuid = uuid; + this.name = name; + this.placers = placers; + this.lastUpdate = lastUpdate; + } + + public Bounty(UUID uuid, String name, BountyPlacer bountyPlacer) { + this.uuid = uuid; + this.name = name; + this.placers.add(bountyPlacer); + this.lastUpdate = System.currentTimeMillis(); + } + + public UUID getUuid() { + return this.uuid; + } + + public void setUuid(UUID u) { + this.uuid = u; + } + + public String getName() { + return this.name; + } + + public void setName(String s) { + this.name = s; + } + + public List<BountyPlacer> getPlacers() { + return this.placers; + } + + public void setPlacers(List<BountyPlacer> l) { + this.placers = l; + } + + public double getAmount() { + return this.placers.stream().mapToDouble(BountyPlacer::getAmount).sum(); + } + + public BountyPlacer getConsolePlacer() { + return this.placers.stream().filter(BountyPlacer::isConsole).findFirst().orElse(null); + } + + public BountyPlacer getPlacer(UUID uniqueId) { + return this.placers.stream().filter(placer -> Objects.equals(uniqueId, placer.getUUID())).findFirst().orElse(null); + } + + public void addPlacer(BountyPlacer bountyPlacer) { + this.placers.add(bountyPlacer); + } + + public long getLastUpdate() { + return this.lastUpdate; + } + + public void setLastUpdate() { + this.lastUpdate = System.currentTimeMillis(); + } + + public boolean hasExpired() { + return this.lastUpdate + 86400000 < System.currentTimeMillis(); + } + + public long getTimeUntilExpiryInMillis() { + return this.lastUpdate + 86400000 - System.currentTimeMillis(); + } + +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/bounties/BountyManager.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/bounties/BountyManager.java new file mode 100644 index 0000000..4e32d17 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/bounties/BountyManager.java @@ -0,0 +1,158 @@ +package net.grandtheftmc.gtm.bounties; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.gtm.GTM; +import org.bukkit.Bukkit; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitRunnable; + +import java.util.*; +import java.util.stream.Collectors; + +public class BountyManager { + private List<Bounty> bounties = new ArrayList<>(); + + public BountyManager() { + this.loadBounties(); + this.startSchedule(); + } + + private void startSchedule() { + new BukkitRunnable() { + @Override + public void run() { + Collection<? extends Player> players = Bukkit.getOnlinePlayers(); + if (GTM.getBountyManager().getBounties().size() >= 5 || players.isEmpty()) return; + Random rand = Utils.getRandom(); + int amount = 10000 + (rand.nextInt(91) * 1000); + Player player = (Player) players.toArray()[rand.nextInt(players.size())]; + Bounty bounty = BountyManager.this.getBounty(player.getUniqueId()); + if (bounty == null) { + GTM.getBountyManager().addBounty(new Bounty(player.getUniqueId(), player.getName(), new BountyPlacer(true, amount))); + Utils.broadcast(Lang.BOUNTIES.f("&7An anonymous player put a bounty of &a$&l" + + amount + "&7 on &a" + player.getName() + "&7.")); + } + } + + }.runTaskTimer(GTM.getInstance(), 36000, 36000); + + + } + + + public List<Bounty> getBounties() { + this.bounties = this.bounties.stream().filter(b -> !b.hasExpired()).collect(Collectors.toList()); + return this.bounties; + } + + public Set<Bounty> getBountiesByAmount() { + Map<Bounty, Double> unsortMap = new HashMap<>(); + for (Bounty b : this.getBounties()) + unsortMap.put(b, b.getAmount()); + return this.sort(unsortMap).keySet(); + } + + public Map<Bounty, Double> sort(Map<Bounty, Double> unsortMap) { + List<Map.Entry<Bounty, Double>> list = new LinkedList<>(unsortMap.entrySet()); + list.sort(Comparator.comparing(Map.Entry::getValue)); + + Map<Bounty, Double> sortedMap = new LinkedHashMap<>(); + for (Map.Entry<Bounty, Double> entry : list) { + sortedMap.put(entry.getKey(), entry.getValue()); + } + return sortedMap; + } + + public Bounty getBounty(UUID uuid) { + return this.bounties.stream().filter(b -> Objects.equals(b.getUuid(), uuid)).findFirst().orElse(null); + } + + public void loadBounties() { + YamlConfiguration c = GTM.getSettings().getBountiesConfig(); + this.bounties.clear(); + for (String s : c.getKeys(false)) { + try { + UUID uuid = UUID.fromString(s); + if (uuid == null) + continue; + String name = c.getString(s + ".name"); + long lastUpdate = c.getLong(s + ".lastUpdate"); + List<BountyPlacer> placers = new ArrayList<>(); + for (String p : c.getConfigurationSection(s + ".placers").getKeys(false)) { + if ("console".equalsIgnoreCase(p)) { + placers.add(new BountyPlacer(true, c.getInt(s + ".placers." + p + ".amount"))); + continue; + } + UUID uuidp = UUID.fromString(p); + if (uuidp == null) + continue; + String namep = c.getString(s + ".placers." + p + ".name"); + int amount = c.getInt(s + ".placers." + p + ".amount"); + boolean anonymous = c.getBoolean(s + ".placers." + p + ".anonymous"); + placers.add(new BountyPlacer(uuidp, namep, amount, anonymous)); + } + Bounty b = new Bounty(uuid, name, placers, lastUpdate); + if (!b.hasExpired()) + this.bounties.add(b); + } catch (Exception e) { + Core.error("Error occured while loading bounty: " + s); + e.printStackTrace(); + } + } + } + + public void saveBounties() { + YamlConfiguration c = GTM.getSettings().getBountiesConfig(); + for (String s : c.getKeys(false)) + c.set(s, null); + for (Bounty b : this.bounties) { + try { + if (b.hasExpired()) + continue; + c.set(b.getUuid() + ".name", b.getName()); + c.set(b.getUuid() + ".lastUpdate", b.getLastUpdate()); + for (BountyPlacer p : b.getPlacers()) { + String path = b.getUuid() + ".placers." + (p.isConsole() ? "CONSOLE" : p.getUUID()); + c.set(path + ".name", p.getName()); + c.set(path + ".amount", p.getAmount()); + c.set(path + ".anonymous", p.isAnonymous()); + } + } catch (Exception e) { + Core.error("Error occured while saving bounty: " + b.getName()); + e.printStackTrace(); + } + } + Utils.saveConfig(c, "bounties"); + } + + public void removeBounty(Bounty bounty) { + this.bounties.remove(bounty); + } + + private void addBounty(Bounty bounty) { + this.bounties.add(bounty); + } + + public boolean placeBounty(Player target, int amnt, Player placer, boolean anonymous) { + Bounty bounty = this.getBounty(target.getUniqueId()); + if (bounty == null) { + this.bounties.add(new Bounty(target.getUniqueId(), target.getName(), new BountyPlacer(placer.getUniqueId(), placer.getName(), amnt, anonymous))); + return false; + } else { + BountyPlacer bPlacer = bounty.getPlacer(placer.getUniqueId()); + if (bPlacer == null) + bounty.addPlacer(new BountyPlacer(placer.getUniqueId(), placer.getName(), amnt, anonymous)); + else { + bPlacer.setAmount(bPlacer.getAmount() + amnt); + bPlacer.setAnonymous(anonymous); + } + bounty.setLastUpdate(); + return true; + } + + } + +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/bounties/BountyPlacer.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/bounties/BountyPlacer.java new file mode 100644 index 0000000..692d9dc --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/bounties/BountyPlacer.java @@ -0,0 +1,66 @@ +package net.grandtheftmc.gtm.bounties; + +import java.util.UUID; + +public class BountyPlacer { + + private UUID uuid; + private String name; + private double amount; + private boolean anonymous; + private boolean console; + + public BountyPlacer(UUID uuid, String name, double amount, boolean anonymous) { + this.uuid = uuid; + this.name = name; + this.amount = amount; + this.anonymous = anonymous; + } + + public BountyPlacer(boolean console, double amount) { + this.console = console; + this.amount = amount; + this.anonymous = true; + } + + public BountyPlacer(int amount, boolean b) { + this.amount = amount; + this.anonymous = b; + } + + public UUID getUUID() { + return this.uuid; + } + + public void setUUID(UUID u) { + this.uuid = u; + } + + public String getName() { + return this.name; + } + + public void setName(String s) { + this.name = s; + } + + public double getAmount() { + return this.amount; + } + + public void setAmount(double i) { + this.amount = i; + } + + public boolean isAnonymous() { + return this.anonymous; + } + + public void setAnonymous(boolean b) { + this.anonymous = b; + } + + public boolean isConsole() { + return this.console; + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/AmmoCommand.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/AmmoCommand.java new file mode 100644 index 0000000..b64cc24 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/AmmoCommand.java @@ -0,0 +1,152 @@ +package net.grandtheftmc.gtm.commands; + +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.items.AmmoType; +import net.grandtheftmc.gtm.users.GTMUser; + +public class AmmoCommand implements CommandExecutor { + @Override + public boolean onCommand(CommandSender s, Command c, String l, String[] args) { + if (!s.hasPermission("command.ammo")) { + s.sendMessage(Lang.NOPERM.toString()); + return true; + } + if (args.length == 0) { + s.sendMessage(Utils.f("&c/ammo types")); + s.sendMessage(Utils.f("&c/ammo balance <player> <type>")); + s.sendMessage(Utils.f("&c/ammo give <player> <type> <amount>")); + s.sendMessage(Utils.f("&c/ammo take <player> <type> <amount>")); + return true; + } + switch (args[0].toLowerCase()) { + case "types": { + sendAmmoTypes(s); + return true; + } + case "balance": { + if (args.length != 3) { + s.sendMessage(Utils.f("&c/ammo balance <player> <type>")); + return true; + } + Player player = Bukkit.getPlayer(args[1]); + if (player == null) { + s.sendMessage(Lang.AMMO.f("&7That player is not online!")); + return true; + } + AmmoType type = AmmoType.getAmmoType(args[2]); + if (type == null) { + s.sendMessage(Lang.AMMO.f("&7That AmmoType does not exist!")); + sendAmmoTypes(s); + return true; + } + GTMUser user = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + s.sendMessage(Lang.AMMO.f("&a" + player.getName() + "&7 has &a&l" + user.getAmmo(type) + ' ' + + type.getGameItem().getDisplayName() + "&7!")); + return true; + } + case "give": { + if (args.length != 4) { + s.sendMessage(Utils.f("&c/ammo give <player> <type> <amount>")); + return true; + } + Player player = Bukkit.getPlayer(args[1]); + if (player == null) { + s.sendMessage(Lang.AMMO.f("&7That player is not online!")); + return true; + } + AmmoType type = AmmoType.getAmmoType(args[2]); + if (type == null) { + s.sendMessage(Lang.AMMO.f("&7That AmmoType does not exist!")); + sendAmmoTypes(s); + return true; + } + int amnt; + try { + amnt = Integer.parseInt(args[3]); + } catch (NumberFormatException e) { + s.sendMessage(Lang.AMMO.f("&7The amount must be a number!")); + return true; + } + if (amnt <= 0) { + s.sendMessage(Lang.AMMO.f("&7The amount must be positive!")); + return true; + } + GTMUser user = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + user.addAmmo(type, amnt); + s.sendMessage(Lang.AMMO.f("&7You gave &a&l" + amnt + ' ' + type.getGameItem().getDisplayName() + "&7 to &a" + + player.getName() + "&7!")); + player.sendMessage(Lang.AMMO.f("&7You were given &a&l" + amnt + ' ' + type.getGameItem().getDisplayName() + + "&7 by &a" + s.getName() + "&7!")); + return true; + } + case "take": + if (args.length != 4) { + s.sendMessage(Utils.f("&c/ammo take <player> <type> <amount>")); + return true; + } + Player player = Bukkit.getPlayer(args[1]); + if (player == null) { + s.sendMessage(Lang.AMMO.f("&7That player is not online!")); + return true; + } + AmmoType type = AmmoType.getAmmoType(args[2]); + if (type == null) { + s.sendMessage(Lang.AMMO.f("&7That AmmoType does not exist!")); + sendAmmoTypes(s); + return true; + } + int amnt; + try { + amnt = Integer.parseInt(args[3]); + } catch (NumberFormatException e) { + s.sendMessage(Lang.AMMO.f("&7The amount must be a number!")); + return true; + } + if (amnt <= 0) { + s.sendMessage(Lang.AMMO.f("&7The amount must be positive!")); + return true; + } + GTMUser user = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + if (!user.hasAmmo(type, amnt)) + amnt = user.getAmmo(type); + user.removeAmmo(type, amnt); + s.sendMessage(Lang.AMMO.f("&7You took &c&l" + amnt + ' ' + type.getGameItem().getDisplayName() + + "&7 from &a" + player.getName() + "&7!")); + player.sendMessage(Lang.AMMO.f("&c&l" + amnt + ' ' + type.getGameItem().getDisplayName() + + "&7 was taken from you by &a" + s.getName() + "&7!")); + return true; + default: + s.sendMessage(Utils.f("&c/ammo types")); + s.sendMessage(Utils.f("&c/ammo balance <player> <type>")); + s.sendMessage(Utils.f("&c/ammo give <player> <type> <amount>")); + s.sendMessage(Utils.f("&c/ammo take <player> <type> <amount>")); + return true; + } + } + + private String ammoTypes = null; + + private void sendAmmoTypes(CommandSender sender) { + if (ammoTypes == null) { + StringBuilder b = new StringBuilder("&7"); + for (AmmoType type : AmmoType.getTypes()) { + b.append(type).append("(").append(type.getGameItemName()).append("),"); + } + if (b.toString().endsWith(",")) { + b.setLength(b.length() - 1); + } + ammoTypes = b.toString(); + } + + sender.sendMessage(ammoTypes); + } + +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/AntiAuraCommand.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/AntiAuraCommand.java new file mode 100644 index 0000000..4563a6a --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/AntiAuraCommand.java @@ -0,0 +1,75 @@ +package net.grandtheftmc.gtm.commands; + +import net.grandtheftmc.core.Lang; +import net.md_5.bungee.api.ChatColor; +import net.md_5.bungee.api.chat.ClickEvent; +import net.md_5.bungee.api.chat.ComponentBuilder; +import net.md_5.bungee.api.chat.HoverEvent; +import net.md_5.bungee.api.chat.TextComponent; +import org.apache.commons.lang.StringUtils; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.*; + +public class AntiAuraCommand implements CommandExecutor { + + //Checking for existance, hashsets are faster + public static final Set<String> TOGGLED_PLAYERS = new HashSet<>(); + + @Override + public boolean onCommand(CommandSender s, Command c, String lbl, String[] args) { + if (!s.hasPermission("antiaura.admin")) return false; + if (args.length == 0) { + s.sendMessage(Lang.ANTIAURA.f("&7/antiaura toggle")); + return false; + } + if (!(s instanceof Player)) { + if (args.length >= 1 && Objects.equals("notify", args[0])) { + this.notify(StringUtils.join(new ArrayList<>(Arrays.asList(args).subList(1, args.length)), " ")); + } else { + s.sendMessage(Lang.NOTPLAYER.s()); + } + return true; + } + Player player = (Player) s; + if (args.length >= 1) { + if ("toggle".equalsIgnoreCase(args[0])) { + if (TOGGLED_PLAYERS.contains(player.getName())) { + player.sendMessage(Lang.ANTIAURA.f("&7AntiAura notifications disabled.")); + TOGGLED_PLAYERS.remove(player.getName()); + } else { + player.sendMessage(Lang.ANTIAURA.f("&7AntiAura notifications enabled.")); + TOGGLED_PLAYERS.add(player.getName()); + } + } + } + return true; + } + + public void notify(String msg) { + for (String string : TOGGLED_PLAYERS) { + Player player; + if ((player = Bukkit.getPlayer(string)) != null) { + Player target = Bukkit.getPlayer(msg.split(" ")[0]); + if (target.isSprinting() && target.getInventory().getItemInMainHand().getType() == Material.DIAMOND_HOE + || "spawn".equals(target.getWorld().getName())) { + return; + } + + TextComponent component = new TextComponent(Lang.ANTIAURA.f("&7 " + msg)); + component.setColor(ChatColor.GRAY); + if (target != null) { + component.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/tp " + target.getName())); + component.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, + new ComponentBuilder("Click to teleport to " + target.getDisplayName()).create())); + } + player.spigot().sendMessage(component); + } + } + } +} \ No newline at end of file diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/BackpackCommand.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/BackpackCommand.java new file mode 100644 index 0000000..e185edd --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/BackpackCommand.java @@ -0,0 +1,65 @@ +package net.grandtheftmc.gtm.commands; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.users.GTMUser; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.InventoryView; + +import java.util.Objects; + +public class BackpackCommand implements CommandExecutor { + @Override + public boolean onCommand(CommandSender s, Command c, String lbl, String[] args) { + if (args.length == 0 || !s.hasPermission("backpack.admin")) { + if (!(s instanceof Player)) { + s.sendMessage(Lang.NOTPLAYER.s()); + return true; + } + Player player = (Player) s; + GTM.getBackpackManager().openBackpack(player); + return true; + } + Player player = (Player) s; + if (Bukkit.getPlayer(args[0]) != null) { + Player target = Bukkit.getPlayer(args[0]); + if (target.getOpenInventory() != null && Objects.equals("Backpack", ChatColor.stripColor(target.getOpenInventory().getTitle()))) { + target.getOpenInventory().close(); + } + Inventory backpack = GTM.getBackpackManager().getBackpack(target, true); + player.openInventory(backpack); + GTM.getUserManager().getLoadedUser(target.getUniqueId()).setBackpackOpen(true); + return true; + } + switch (args[0]) { + case "reset": + if (args.length != 2) { + s.sendMessage(Utils.f("&c/backpack reset <player>")); + return true; + } + Player target = Bukkit.getPlayer(args[1]); + if (target == null) { + return true; + } + InventoryView inv = target.getOpenInventory(); + if (inv != null + && Objects.equals("Backpack", ChatColor.stripColor(inv.getTitle()))) + target.closeInventory(); + GTMUser targetGtmUser = GTM.getUserManager().getLoadedUser(target.getUniqueId()); + targetGtmUser.setBackpackContents(null); + s.sendMessage(Utils.f("&7You cleared the backpack of player &a" + target.getName() + "&7!")); + target.sendMessage(Utils.f("&a" + player.getName() + "&7 cleared your backpack.")); + return true; + default: + s.sendMessage(Utils.f("&c/backpack reset <player>")); + return true; + } + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/BackupCommand.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/BackupCommand.java new file mode 100644 index 0000000..30066ca --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/BackupCommand.java @@ -0,0 +1,76 @@ +package net.grandtheftmc.gtm.commands; + +import java.util.Objects; + +import org.bukkit.Bukkit; +import org.bukkit.GameMode; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.users.GTMUser; +import net.grandtheftmc.gtm.users.GTMUserManager; +import net.grandtheftmc.gtm.users.JobMode; +import net.grandtheftmc.gtm.users.TaxiTarget; +import net.md_5.bungee.api.chat.ClickEvent; +import net.md_5.bungee.api.chat.ComponentBuilder; + +/** + * Created by Liam on 9/12/2016. + */ +public class BackupCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command cmd, String lbl, String[] args) { + if (!(s instanceof Player)) { + s.sendMessage(Lang.NOTPLAYER.s()); + return true; + } + Player player = (Player) s; + GTMUser user = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + if (args.length == 0) { + if(user.getWantedLevel()!=0) { + player.sendMessage(Lang.COP_MODE.f("&cSorry, only player's without a wanted level can do this command.")); + return true; + } + if (user.hasRequestedBackup()) { + s.sendMessage(Lang.COP_MODE.f("&7You have already called " + (user.getJobMode() == JobMode.COP ? "for backup" : "the police") + "! Please wait &c&l" + Utils.timeInSecondsToText(Math.round(user.getTimeUntilBackupRequestExpires()/1000.0), "&3", "&7", "&7")+ "&7 to request backup again!")); + return true; + } + player.sendMessage(Lang.COP_MODE.f("&7You have called " + (user.getJobMode() == JobMode.COP ? "for backup" : "the police") + "! A message has been sent to all officers, and they can teleport to you for 1 minute!")); + user.setLastBackupRequest(System.currentTimeMillis()); + for (GTMUser u : GTMUserManager.getInstance().getUsers()) { + if (u.getJobMode() == JobMode.COP) { + Player p = Bukkit.getPlayer(u.getUUID()); + if (!Objects.equals(player, p)) + p.spigot().sendMessage(new ComponentBuilder(Lang.COP_MODE.f((user.getJobMode() == JobMode.COP ? "&3&lCop " : "&7Citizen ") + Core.getUserManager().getLoadedUser(player.getUniqueId()).getColoredName(player))).append(" is requesting " + (user.getJobMode() == JobMode.COP ? "backup" : "police assistance") + "! Teleport: ").color(net.md_5.bungee.api.ChatColor.GRAY). + append(" [ACCEPT] ").color(net.md_5.bungee.api.ChatColor.GREEN).bold(true).event(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/backup " + player.getName())).create()); + } + } + return true; + } + if (user.getJobMode() != JobMode.COP) { + s.sendMessage(Lang.COP_MODE.f("&7You must be in &3&lCOP Mode&7 to provide backup!")); + return true; + } + Player target = Bukkit.getPlayer(args[0]); + if (target == null) { + player.sendMessage(Lang.COP_MODE.f("&7That player is not online!")); + return true; + } + GTMUser targetUser = GTM.getUserManager().getLoadedUser(target.getUniqueId()); + if (target.getGameMode() == GameMode.SPECTATOR || !targetUser.hasRequestedBackup()) { + player.sendMessage(Lang.COP_MODE.f("&7That player has not requested backup!")); + return true; + } + GTM.getWarpManager().warp(player, Core.getUserManager().getLoadedUser(player.getUniqueId()), user, new TaxiTarget(target), 0, -1); + target.sendMessage(Lang.COP_MODE.f("&7" + Core.getUserManager().getLoadedUser(player.getUniqueId()).getColoredName(player) + "&7 has accepted your " + (user.getJobMode() == JobMode.COP ? "backup" : "police assistance") + " request.")); + return true; + } + +} \ No newline at end of file diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/BribeCommand.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/BribeCommand.java new file mode 100644 index 0000000..4eefa91 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/BribeCommand.java @@ -0,0 +1,144 @@ +package net.grandtheftmc.gtm.commands; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.GTMUtils; +import net.grandtheftmc.gtm.users.GTMUser; +import net.grandtheftmc.gtm.users.JobMode; +import net.md_5.bungee.api.ChatColor; +import net.md_5.bungee.api.chat.ClickEvent; +import net.md_5.bungee.api.chat.ComponentBuilder; +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +/** + * Created by Liam on 11/10/2016. + */ +public class BribeCommand implements CommandExecutor { + @Override + public boolean onCommand(CommandSender s, Command c, String lbl, String[] args) { + if (!(s instanceof Player)) { + s.sendMessage(Lang.NOTPLAYER.s()); + return true; + } + Player player = (Player) s; + if (args.length == 0) { + s.sendMessage(Lang.BRIBE.f("&7Help Command")); + s.sendMessage(Utils.f("&3/bribe &a<amount>&7 - Send a bribe offer to the cop who arrested you!")); + s.sendMessage(Utils.f("&3/bribe accept &a<prisoner>&7 - Accept the bribe of a prisoner you arrested!")); + s.sendMessage(Utils.f("&3/bribe deny &a<prisoner>&7 - Deny the bribe of a prisoner you arrested!")); + return true; + } + GTMUser user = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + switch (args[0]) { + case "accept": { + if (user.getJobMode() != JobMode.COP) { + player.sendMessage(Lang.BRIBE.f("&7You need to be in &3&lCOP Mode&7 to accept bribes!")); + return true; + } + if (args.length != 2) { + player.sendMessage(Lang.BRIBE.f("&7Please specify the prisoner of whom you would like to accept the bribe!")); + return true; + } + Player prisoner = Bukkit.getPlayer(args[1]); + GTMUser prisonerUser = prisoner == null ? null : GTM.getUserManager().getLoadedUser(prisoner.getUniqueId()); + if (prisoner == null || !prisonerUser.isArrested()) { + player.sendMessage(Lang.BRIBE.f("&7That player is not in jail!")); + return true; + } + if (prisonerUser.getJailTimer() <= 5) { + player.sendMessage(Lang.BRIBE.f("&7That prisoner is already being released!")); + return true; + } + if (prisonerUser.getBribe() <= 0) { + player.sendMessage(Lang.BRIBE.f("&7That prisoner has not sent a bribe offer to you! You can negotiate with them using &a\"/msg " + prisoner.getName() + "\"&7!")); + return true; + } + if (!prisonerUser.hasMoney(prisonerUser.getBribe())) { + player.sendMessage(Lang.BRIBE.f("&7That prisoner does not have enough money to pay for his bribe!")); + return true; + } + double bribe = prisonerUser.getBribe(); + prisonerUser.takeMoney(bribe); + user.addMoney(bribe); + prisonerUser.setBribe(0); + prisonerUser.setJailTimer(5); + GTMUtils.updateBoard(prisoner, prisonerUser); + GTMUtils.updateBoard(player, user); + player.sendMessage(Lang.BRIBE.f("&7You accepted a bribe of &a$&l" + bribe + "&7 from &e&l" + prisoner.getName() + "&7!")); + prisoner.sendMessage(Lang.BRIBE.f("&3&l" + player.getName() + "&7 accepted your bribe of &a$&l" + bribe + "&7!")); + return true; + } + case "deny": + if (user.getJobMode() != JobMode.COP) { + player.sendMessage(Lang.BRIBE.f("&7You need to be in &3&lCOP Mode&7 to accept bribes!")); + return true; + } + if (args.length != 2) { + player.sendMessage(Lang.BRIBE.f("&7Please specify the prisoner of whom you would like to accept the bribe!")); + return true; + } + Player prisoner = Bukkit.getPlayer(args[1]); + GTMUser prisonerUser = prisoner == null ? null : GTM.getUserManager().getLoadedUser(prisoner.getUniqueId()); + if (prisoner == null || !prisonerUser.isArrested()) { + player.sendMessage(Lang.BRIBE.f("&7That player is not in jail!")); + return true; + } + if (prisonerUser.getJailTimer() <= 5) { + player.sendMessage(Lang.BRIBE.f("&7That prisoner is already being released!")); + return true; + } + if (prisonerUser.getBribe() <= 0) { + player.sendMessage(Lang.BRIBE.f("&7That prisoner has not sent a bribe offer to you! You can negotiate with them using &a\"/msg " + prisoner.getName() + "\"&7!")); + return true; + } + double bribe = prisonerUser.getBribe(); + player.sendMessage(Lang.BRIBE.f("&7You denied a bribe of &a$&l" + bribe + "&7 from &e&l" + prisoner.getName() + "&7! You can negotiate with them using &a\"/msg " + prisoner.getName() + "\"&7!")); + player.sendMessage(Lang.BRIBE.f("&3&l" + player.getName() + "&7 denied your bribe of &a$&l" + bribe + "&7! You can negotiate with them using &a\"/msg " + prisoner.getName() + "\"&7!")); + return true; + default: + if (!user.isArrested()) { + player.sendMessage(Lang.BRIBE.f("&7You are not in jail!")); + return true; + } + if (user.getJailTimer() < 5) { + player.sendMessage(Lang.BRIBE.f("&7You are already being released!")); + return true; + } + Player cop = Bukkit.getPlayer(user.getJailCop()); + GTMUser copUser = cop == null ? null : GTM.getUserManager().getLoadedUser(cop.getUniqueId()); + if (cop == null || copUser.getJobMode() != JobMode.COP) { + player.sendMessage(Lang.BRIBE.f("&7The cop who arrested you (&3&l" + user.getJailCopName() + "&7) is off duty!")); + return true; + } + double amnt; + try { + amnt = Double.parseDouble(args[0]); + } catch (NumberFormatException e) { + player.sendMessage(Lang.BRIBE.f("&7The amount must be a number! (double)")); + return true; + } + if (amnt < 5000) { + player.sendMessage(Lang.BRIBE.f("&7Bribes must be at least &a$&l5,000!")); + return true; + } + if (user.getBribe() * 1.05 > amnt) { + player.sendMessage(Lang.BRIBE.f("&7You must raise the bribe by at least &a&l5%&7 of &a$&l" + user.getBribe() + "&7 (&a$&l" + (user.getBribe() * 1.05) + "&7)!")); + return true; + } + if (!user.hasMoney(amnt)) { + player.sendMessage(Lang.BRIBE.f("&7You don't have &c$&l" + amnt + "&7! Please enter a valid number or type &a\"quit\"&7!")); + return true; + } + user.setBribe(amnt); + player.sendMessage(Lang.BRIBE.f("&7You sent a bribe offer of &a$&l" + amnt + "&7 to &3&l" + cop.getName() + "&7. You can negotiate with them using &a\"/msg " + cop.getName() + "\"&7!")); + cop.spigot().sendMessage(new ComponentBuilder(Lang.BRIBE.f("&7A bribe offer of &a$&l" + amnt + "&7 was sent to you by &3&l" + player.getName() + "&7!")).append(" [ACCEPT] ").color(ChatColor.GREEN).bold(true).event(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/bribe accept " + player.getName())).append("[DENY]").color(ChatColor.DARK_RED).bold(true).event(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/bribe deny " + player.getName())).create()); + return true; + } + + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/CheatCodeCommand.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/CheatCodeCommand.java new file mode 100644 index 0000000..0d07c13 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/CheatCodeCommand.java @@ -0,0 +1,243 @@ +package net.grandtheftmc.gtm.commands; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.commands.CoreCommand; +import net.grandtheftmc.core.database.BaseDatabase; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.util.State; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.users.CheatCode; +import net.grandtheftmc.gtm.users.CheatCodeState; +import net.grandtheftmc.gtm.users.GTMUser; +import org.bukkit.Bukkit; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitRunnable; + +import java.sql.*; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; + +/** + * Created by Timothy Lampen on 8/24/2017. + */ +public class CheatCodeCommand extends CoreCommand<CommandSender> { + + public CheatCodeCommand() { + super("cheatcode", "edit a player's unlocked cheat codes", "cc", "cheatcodes"); + } + + @Override + public void execute(CommandSender sender, String[] args) { + if(args.length==0) { + if(!(sender instanceof Player) || Core.getUserManager().getLoadedUser(((Player)sender).getUniqueId()).getUserRank().isHigherThan(UserRank.ADMIN)) { + sender.sendMessage(Utils.f("&e/cheatcode give <player> <cheatcode> &7- gives a certain player a PERM new cheatcode")); + sender.sendMessage(Utils.f("&e/cheatcode remove <player> <cheatcode> &7- removes a cheatcode from a player")); + sender.sendMessage(Utils.f("&e/cheatcode view <player> &7- view a player's cheatcodes")); + sender.sendMessage(Utils.f("&e/cheatcode list &7- lists all avaliable cheat codes.")); + sender.sendMessage(Utils.f("&e/cheatcode <cheatcode> &7- toggle / activate the specific cheatcode.")); + } + else { + sender.sendMessage(Utils.f("&e/cheatcode <cheatcode> &7- toggle / activate the specific cheatcode.")); + sender.sendMessage(Utils.f("&e/cheatcode list &7- lists all avaliable cheat codes.")); + } + return; + } + if(args.length==1) { + for (CheatCode code : CheatCode.getCodes()) { + if (args[0].equalsIgnoreCase(code.toString())) { + if (!(sender instanceof Player)) { + sender.sendMessage(Lang.NOTPLAYER.f("")); + return; + } + Player player = (Player) sender; + GTMUser user = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + if (user.getCheatCodeState(code).getState() == State.LOCKED) { + player.sendMessage(Lang.CHEAT_CODES.f("&7You haven't unlocked this cheat code yet!")); + return; + } + code.activate(Core.getUserManager().getLoadedUser(player.getUniqueId()), user, player, user.getCheatCodeState(code)); + return; + } + } + } + switch (args[0]) { + case "remove": { + if(sender instanceof Player && !Core.getUserManager().getLoadedUser(((Player)sender).getUniqueId()).getUserRank().isHigherThan(UserRank.ADMIN)) { + sender.sendMessage(Lang.NOPERM.f("")); + return; + } + Player target = Bukkit.getPlayer(args[1]); + if(target==null) { + sender.sendMessage(Lang.CHEAT_CODES.f("&7Cannot find the player &a" + args[1])); + return; + } + if (args.length != 3) { + sender.sendMessage(Lang.CHEAT_CODES.f("&c/cheatcode remove <player> <cheatcode>")); + return; + } + Optional<CheatCode> optCode = Arrays.stream(CheatCode.getCodes()).filter(c -> c.toString().equalsIgnoreCase(args[2])).findFirst(); + if (!optCode.isPresent()) { + sender.sendMessage(Lang.CHEAT_CODES.f("&cUnable to find cheatcode with name &e" + args[2])); + return; + } + GTMUser user = GTM.getUserManager().getLoadedUser(target.getUniqueId()); + user.setCheatCodeState(optCode.get(), new CheatCodeState(State.LOCKED, false)); + Core.getUserManager().getLoadedUser(target.getUniqueId()).insertLog(target,"removeCheatCodeCommand","CHEATCODE", optCode.get().toString(),1,0); + target.sendMessage(Lang.CHEAT_CODES.f("&7The cheatcode &e" + optCode.get() + " &7has been removed from your account.")); + sender.sendMessage(Lang.CHEAT_CODES.f("&7You have removed the cheatcode &e" + optCode.get() + " &7from &b" + target.getName() + "&7's account.")); + break; + } + case "give": { + if(sender instanceof Player && !Core.getUserManager().getLoadedUser(((Player)sender).getUniqueId()).getUserRank().isHigherThan(UserRank.ADMIN)) { + sender.sendMessage(Lang.NOPERM.f("")); + return; + } + Player target = Bukkit.getPlayer(args[1]); + if(target==null) { + sender.sendMessage(Lang.CHEAT_CODES.f("&7Cannot find the player &a" + args[1])); + return; + } + if (args.length != 3) { + sender.sendMessage(Lang.CHEAT_CODES.f("&c/cheatcode give <player> <cheatcode>")); + return; + } + Optional<CheatCode> optCode = Arrays.stream(CheatCode.getCodes()).filter(c -> c.toString().equalsIgnoreCase(args[2])).findFirst(); + if (!optCode.isPresent()) { + sender.sendMessage(Lang.CHEAT_CODES.f("&cUnable to find cheatcode with name &e" + args[2])); + return; + } + GTMUser user = GTM.getUserManager().getLoadedUser(target.getUniqueId()); + switch (optCode.get()) { + case STACK: + Core.getPermsManager().addPerm(target.getUniqueId(), "command.stack"); + break; + case FIXALL: + Core.getPermsManager().addPerm(target.getUniqueId(), "command.fix.all"); + break; + case FIXHAND: + Core.getPermsManager().addPerm(target.getUniqueId(), "command.fix.hand"); + break; + + } + + Core.getUserManager().getLoadedUser(target.getUniqueId()).insertLog(target,"giveCheatCodeCommand","CHEATCODE", optCode.get().toString(),1,0); + user.setCheatCodeState(optCode.get(), new CheatCodeState(optCode.get().getDefaultState(), true)); + sender.sendMessage(Lang.CHEAT_CODES.f("&7You have given &b" + target.getName() + " &7the cheatcode &e" + optCode.get().toString() + "&7!")); + target.sendMessage(Lang.CHEAT_CODES.f("&7You have reiceved the cheatcode &e" + optCode.get().toString() + "&7, go into the kit menu located on your phone to toggle the effects.")); + break; + } + case "view": { + if(sender instanceof Player && !Core.getUserManager().getLoadedUser(((Player)sender).getUniqueId()).getUserRank().isHigherThan(UserRank.ADMIN)) { + sender.sendMessage(Lang.NOPERM.f("")); + return; + } + if(args.length !=2) { + sender.sendMessage(Utils.f("&e/cheatcode view <player>")); + return; + } + Player target = Bukkit.getPlayer(args[1]); + if (target == null) { + new BukkitRunnable() { + @Override + public void run() { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("Select * from " + Core.name() + " where name='" + args[1] + "'")) { + try (ResultSet result = statement.executeQuery()) { + int counter = 0; + HashMap<CheatCode, CheatCodeState> cheatCodes = new HashMap<>(); + while (result.next()) { + counter++; + Blob b = result.getBlob("cheatcodes"); + if(b!=null) { + String cheatCodesBlob = new String(b.getBytes(1, (int) b.length())); + for (String serializedCheatCode : cheatCodesBlob.split("-")) { + String[] split = serializedCheatCode.split("#"); + cheatCodes.put(CheatCode.valueOf(split[0]), new CheatCodeState(State.valueOf(split[1]), Boolean.valueOf(split[2]))); + } + } + } + if(counter==0) { + sender.sendMessage(Lang.CHEAT_CODES.f("&cThat player cannot be found!")); + } + else{ + sender.sendMessage(Utils.f("&7Player's Cheat Codes:")); + for(Map.Entry<CheatCode, CheatCodeState> entry : cheatCodes.entrySet()) { + sender.sendMessage(Utils.f("&2&l" + entry.getKey() + "&7: State: " + (entry.getValue().getState()==State.ON ? "&a " : "&c ") + entry.getValue().getState() + "&7, Purchased: " + (entry.getValue().isPurchased() ? "&atrue" : "&cfalse"))); + } + + } + } + } + } catch (SQLException e) { + e.printStackTrace(); + } + +// ResultSet rs = Core.sql.query("Select * from " + Core.name() + " where name='" + args[1] + "'"); +// try { +// int counter = 0; +// HashMap<CheatCode, CheatCodeState> cheatCodes = new HashMap<>(); +// while (rs.next()) { +// counter++; +// Blob b = rs.getBlob("cheatcodes"); +// if(b!=null) { +// String cheatCodesBlob = new String(b.getBytes(1, (int) b.length())); +// for (String serializedCheatCode : cheatCodesBlob.split("-")) { +// String[] split = serializedCheatCode.split("#"); +// cheatCodes.put(CheatCode.valueOf(split[0]), new CheatCodeState(State.valueOf(split[1]), Boolean.valueOf(split[2]))); +// } +// } +// } +// if(counter==0) { +// sender.sendMessage(Lang.CHEAT_CODES.f("&cThat player cannot be found!")); +// } +// else{ +// sender.sendMessage(Utils.f("&7Player's Cheat Codes:")); +// for(Map.Entry<CheatCode, CheatCodeState> entry : cheatCodes.entrySet()) { +// sender.sendMessage(Utils.f("&2&l" + entry.getKey() + "&7: State: " + (entry.getValue().getState()==State.ON ? "&a " : "&c ") + entry.getValue().getState() + "&7, Purchased: " + (entry.getValue().isPurchased() ? "&atrue" : "&cfalse"))); +// } +// +// } +// } catch (SQLException e) { +// e.printStackTrace(); +// } + } + }.runTaskAsynchronously(GTM.getInstance()); + return; + } + GTMUser user = GTM.getUserManager().getLoadedUser(target.getUniqueId()); + sender.sendMessage(Utils.f("&7Player's Cheat Codes:")); + for(Map.Entry<CheatCode, CheatCodeState> entry : user.getCheatCodes().entrySet()) { + sender.sendMessage(Utils.f("&2&l" + entry.getKey() + "&7: State: " + (entry.getValue().getState()==State.ON ? "&a " : "&c ") + entry.getValue().getState() + "&7, Purchased: " + (entry.getValue().isPurchased() ? "&atrue" : "&cfalse"))); + } + break; + } + + case "list": { + StringBuilder sb = new StringBuilder("&7Cheat Codes:"); + Arrays.stream(CheatCode.getCodes()).forEach(code -> sb.append(" &a" + code.toString() + "&7,")); + sb.deleteCharAt(sb.length()-1); + sender.sendMessage(Utils.f(sb.toString())); + break; + } + default: { + if(!(sender instanceof Player) || Core.getUserManager().getLoadedUser(((Player)sender).getUniqueId()).getUserRank().isHigherThan(UserRank.ADMIN)) { + sender.sendMessage(Utils.f("&e/cheatcode give <player> <cheatcode> &7- gives a certain player a new cheatcode")); + sender.sendMessage(Utils.f("&e/cheatcode remove <player> <cheatcode> &7- removes a cheatcode from a player")); + sender.sendMessage(Utils.f("&e/cheatcode view <player> &7- view a player's cheatcodes")); + sender.sendMessage(Utils.f("&e/cheatcode list &7- lists all avaliable cheat codes.")); + sender.sendMessage(Utils.f("&e/cheatcode <cheatcode> &7- toggle / activate the specific cheatcode.")); + } + else { + sender.sendMessage(Utils.f("&e/cheatcode <cheatcode> &7- toggle / activate the specific cheatcode.")); + sender.sendMessage(Utils.f("&e/cheatcode list &7- lists all avaliable cheat codes.")); + } + break; + } + } + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/ChestCheckCommand.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/ChestCheckCommand.java new file mode 100644 index 0000000..5f13090 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/ChestCheckCommand.java @@ -0,0 +1,59 @@ +package net.grandtheftmc.gtm.commands; + +import net.grandtheftmc.core.commands.CoreCommand; +import net.grandtheftmc.core.commands.RankedCommand; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.util.C; +import net.grandtheftmc.houses.Houses; +import net.grandtheftmc.houses.houses.House; +import net.grandtheftmc.houses.houses.HousesManager; +import net.grandtheftmc.houses.houses.PremiumHouse; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.block.Chest; +import org.bukkit.entity.Player; + +import java.util.Set; + +public class ChestCheckCommand extends CoreCommand<Player> implements RankedCommand { + + public ChestCheckCommand() { + super("chestcheck", "A staff command for recognising house chests."); + } + + @Override + public void execute(Player sender, String[] strings) { + Block targetBlock = sender.getTargetBlock((Set<Material>) null, 5); + if (targetBlock == null || targetBlock.getState() == null || !(targetBlock.getState() instanceof Chest)) { + sender.sendMessage(C.ERROR + "You don't seem to be looking at a chest?.."); + return; + } + + Chest chest = (Chest) targetBlock.getState(); + HousesManager manager = Houses.getHousesManager(); + + House house = manager.getHouseFromChest(chest.getLocation()); + if (house != null) { + sender.sendMessage(C.DARK_GREEN + C.BOLD + "House found"); + sender.sendMessage(C.GREEN + "Premium? " + C.YELLOW + "false"); + sender.sendMessage(C.GREEN + "Identifier " + C.YELLOW + house.getId()); + sender.sendMessage(C.GREEN + "Doors " + C.YELLOW + house.getDoors().size()); + sender.sendMessage(C.GREEN + "Chests " + C.YELLOW + house.getChests().size()); + return; + } + + PremiumHouse premiumHouse = manager.getPremiumHouseFromChest(chest.getLocation()); + if (premiumHouse != null) { + sender.sendMessage(C.DARK_GREEN + C.BOLD + "Premium House found"); + sender.sendMessage(C.GREEN + "Premium? " + C.YELLOW + "true"); + sender.sendMessage(C.GREEN + "Identifier " + C.YELLOW + premiumHouse.getId()); + sender.sendMessage(C.GREEN + "Doors " + C.YELLOW + premiumHouse.getDoors().size()); + sender.sendMessage(C.GREEN + "Chests " + C.YELLOW + premiumHouse.getChests().size()); + } + } + + @Override + public UserRank requiredRank() { + return UserRank.ADMIN; + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/ChristmasCommand.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/ChristmasCommand.java new file mode 100644 index 0000000..6b2e480 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/ChristmasCommand.java @@ -0,0 +1,72 @@ +package net.grandtheftmc.gtm.commands; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.commands.CoreCommand; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.event.christmas.SpawnSantaDropTask; +import net.grandtheftmc.gtm.users.GTMUser; +import net.grandtheftmc.gtm.weapon.ranged.special.Clausinator; +import net.grandtheftmc.guns.GTMGuns; +import net.grandtheftmc.guns.weapon.Weapon; +import net.grandtheftmc.guns.weapon.ranged.RangedWeapon; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +import java.util.Optional; + +/** + * Created by Timothy Lampen on 2017-12-16. + */ +public class ChristmasCommand extends CoreCommand<Player> { + public ChristmasCommand() { + super("christmas", "Commands related to the christmas event"); + } + + @Override + public void execute(Player player, String[] args) { + if(args.length==0) { + player.sendMessage("/christmas clausinator - reloads the clausinator weapon"); + return; + } + switch (args[0]) { + case "spawndrop": { + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + if(player.isOp() && user.getUserRank().isHigherThan(UserRank.ADMIN)) + new SpawnSantaDropTask(player.getLocation()); + return; + } + case "clausinator": { + GTMUser gtmUser = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + if(gtmUser.isInCombat()) { + player.sendMessage(Lang.GTM.f("&cYou cannot load this weapon in combat!")); + return; + } + if(!gtmUser.hasMoney(100000)){ + player.sendMessage(Lang.GTM.f("&cYou do not have enough money ($100,000) to reload this gun!")); + return; + } + Weapon<?> optClaus = GTMGuns.getInstance().getWeaponManager().getWeaponByItem(player.getInventory().getItemInMainHand()); + if(optClaus==null) { + player.sendMessage(Lang.GTM.f("&cYou are not holding a clausinator in your hand currently")); + return; + } + Clausinator claus = (Clausinator)optClaus; + + if(claus.getAmmo(player.getInventory().getItemInMainHand())!=0) { + player.sendMessage(Lang.CHRISTMAS.f("&cThe clip of the clausinator isn't empty!")); + return; + } + + gtmUser.takeMoney(100000); + ItemStack updated = claus.setAmmo(player.getInventory().getItemInMainHand(), 600,600); + player.getInventory().setItemInMainHand(updated); + player.updateInventory(); + player.sendMessage(Lang.CHRISTMAS.f("&aReloaded your weapon.")); + return; + } + } + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/ChunkUnloadCommand.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/ChunkUnloadCommand.java new file mode 100644 index 0000000..7e60445 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/ChunkUnloadCommand.java @@ -0,0 +1,47 @@ +package net.grandtheftmc.gtm.commands; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserRank; +import org.bukkit.Chunk; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; + +import java.util.Arrays; +import java.util.Collection; +import java.util.stream.Collectors; + +public class ChunkUnloadCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command c, String l, String[] args) { + if (!(s instanceof Player)) { + s.sendMessage(Lang.GTM.f("&cYou are not a player!")); + return true; + } + Player player = (Player)s; + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + if(!user.isRank(UserRank.DEV)) { + player.sendMessage(Lang.GTM.f("&7You don't have permission to use this command.")); + return true; + } + Collection<Chunk> chunks = Arrays + .stream(player.getWorld().getLoadedChunks()) + .collect(Collectors.toList()); + for(Chunk chunk : player.getWorld().getLoadedChunks()) { + for(Entity entity : chunk.getEntities()) { + if (entity.getType() == EntityType.PLAYER) { + chunks.remove(chunk); + break; + } + } + } + chunks.forEach(Chunk::unload); + return true; + } +} \ No newline at end of file diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/ClearCommand.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/ClearCommand.java new file mode 100644 index 0000000..575f4f4 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/ClearCommand.java @@ -0,0 +1,40 @@ +package net.grandtheftmc.gtm.commands; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.gtm.GTMUtils; +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class ClearCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command c, String l, String[] args) { + if (!s.hasPermission("command.clear")) { + s.sendMessage(Utils.f("&cYou do not have permission to execute this command!")); + return true; + } + if (!(s instanceof Player)) { + s.sendMessage(Lang.GTM.f("&cYou are not a player!")); + return true; + } + Player player; + if (args.length == 0) { + player = (Player) s; + } else { + if (Bukkit.getPlayer(args[0]) == null) { + s.sendMessage(Lang.GTM.f("&cThat player is not online!")); + return true; + } else { + player = Bukkit.getPlayer(args[0]); + } + } + player.getInventory().iterator().forEachRemaining(itemStack -> player.getInventory().remove(itemStack)); + player.sendMessage(Lang.GTM.f("&7Your inventory has been cleared!")); + GTMUtils.giveGameItems(player); + return true; + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/CoreNPCCommand.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/CoreNPCCommand.java new file mode 100644 index 0000000..6394267 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/CoreNPCCommand.java @@ -0,0 +1,92 @@ +package net.grandtheftmc.gtm.commands; + +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.users.npcs.*; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.Utils; +import net.grandtheftmc.core.commands.CoreCommand; + +/** + * Created by Timothy Lampen on 1/14/2018. + */ +public class CoreNPCCommand extends CoreCommand<Player> { + public CoreNPCCommand() { + super("corenpc", "commands dealing with corenpcs"); + } + + @Override + public void execute(Player player, String[] args) { + if(!player.isOp()) { + player.sendMessage(Lang.NOPERM.f("")); + return; + } + + if(args.length==0) { + player.sendMessage(Lang.GTM.f("&7Avaliable NPCs: ")); + player.sendMessage(Utils.f("&aPlay &7- Opens the taxi menu")); + player.sendMessage(Utils.f("&aBank &7- Opens the bank menu")); + player.sendMessage(Utils.f("&aFood &7- Opens a food shop menu")); + player.sendMessage(Utils.f("&aCasino &7- Opens the casino chip dealer menu")); + player.sendMessage(Utils.f("&aCar &7- Opens a car shop menu")); + player.sendMessage(Utils.f("&aRewards &7- Opens the rewards menu")); + player.sendMessage(Utils.f("&aArmor &7- Opens an armor shop menu")); + player.sendMessage(Utils.f("&aShop &7- Opens an inventory where players and buy and sell items.")); + player.sendMessage(Utils.f("&aSkins &7- Opens an inventory where players can manage and view their weapon skins.")); + player.sendMessage(Lang.GTM.f("&c/corenpc delete &7- Removes the nearby entity (please stand within 1 block)")); + player.sendMessage(Lang.GTM.f("&c/corenpc spawn <npc>")); + return; + } + + if(args.length==1){ + switch (args[0].toLowerCase()) { + case "delete": + case "remove": + for(Entity e : player.getNearbyEntities(2,2,2)) + Core.getNPCManager().deleteNPC(e); + player.sendMessage(Lang.GTM.f("&cYou have removed nearby npcs.")); + break; + } + return; + } + + switch (args[1].toLowerCase()) { + case "casino": + new CasinoNPC(player.getLocation()); + break; + case "play": + new TaxiNPC(player.getLocation()); + break; + case "bank": + new BankTellerNPC(player.getLocation()); + break; + case "food": + new FoodNPC(player.getLocation()); + break; + case "car": + new CarNPC(player.getLocation()); + break; + case "rewards": + new RewardsNPC(player.getLocation()); + break; + case "armor": + new ArmorNPC(player.getLocation()); + break; + case "shop": + new ShopNPC(GTM.getWastedGuns().getWeaponManager(), player.getLocation()); + break; + case "skins": + new SkinsNPC(player.getLocation()); + break; + case "heads": + new HeadSellerNPC(player.getLocation()); + break; + case "mechanic": + new MechanicNPC(player.getLocation()); + break; + } + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/DrugCheckCommand.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/DrugCheckCommand.java new file mode 100644 index 0000000..4bedb69 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/DrugCheckCommand.java @@ -0,0 +1,38 @@ +package net.grandtheftmc.gtm.commands; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.potion.PotionEffect; + +/** + * Created by Timothy Lampen on 2017-04-22. + */ +public class DrugCheckCommand implements CommandExecutor { + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { + if(sender instanceof Player) { + if(!Core.getUserManager().getLoadedUser(((Player) sender).getUniqueId()).isStaff()) + return false; + } + if (args.length != 1) { + sender.sendMessage(Lang.DRUGS.f("&7Syntax Error: /drugcheck <player>")); + return false; + } + Player target = Bukkit.getPlayer(args[0]); + if (target == null) { + sender.sendMessage(Lang.DRUGS.f("&7Error: The specified player is not online.")); + return false; + } + sender.sendMessage(Lang.DRUGS.f("&7Current potion effect portfolio for " + target.getName())); + for (PotionEffect pe : target.getActivePotionEffects()) { + sender.sendMessage(ChatColor.GREEN + pe.getType().getName() + ChatColor.BLUE + " : " + ChatColor.GREEN + pe.getAmplifier() + 1 + ChatColor.BLUE + " : " + ChatColor.GREEN + pe.getDuration() / 20 + "s"); + } + return true; + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/DrugDealerCommand.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/DrugDealerCommand.java new file mode 100644 index 0000000..a556661 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/DrugDealerCommand.java @@ -0,0 +1,94 @@ +package net.grandtheftmc.gtm.commands; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.drugs.DrugDealer; +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.Optional; + +public class DrugDealerCommand implements CommandExecutor { + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { + if (!sender.hasPermission("drugdealer.command")) { + sender.sendMessage(Lang.DRUGS + "" + ChatColor.RED + "Error: You do not have permission to execute this command."); + return false; + } + if (args.length < 1) { + sender.sendMessage(ChatColor.RED + "/drugdealer add - sets a drugdealer location"); + sender.sendMessage(ChatColor.RED + "/drugdealer tp - teleports you to the drugdealer"); + sender.sendMessage(ChatColor.RED + "/drugdealer next - teleports the drug dealer to a new location"); + sender.sendMessage(ChatColor.RED + "/drugdealer restock - restocks the drug dealer"); + sender.sendMessage(ChatColor.RED + "/drugdealer remove - removes the nearest dealer location from the drug dealer"); + sender.sendMessage(ChatColor.RED + "/drugdealer save - saves the drug dealer locations to config"); + sender.sendMessage(ChatColor.RED + "/drugdealer load - loads the drug dealer locations from config"); + + return false; + } + if (!(sender instanceof Player)) { + sender.sendMessage(Lang.DRUGS + "" + ChatColor.GRAY + "Console cannot execute this command."); + return false; + } + Player player = (Player) sender; + DrugDealer drugDealer = GTM.getDrugManager().getDrugDealer(); + switch (args[0]) { + case "add": { + player.sendMessage(Lang.DRUGS.f("&7You have added a location for the dealer to spawn!")); + drugDealer.addDealerLoc(player.getLocation()); + break; + } + case "tp": { + player.teleport(GTM.getDrugManager().getDrugDealer().dealerStand()); + player.sendMessage(Lang.DRUGS.f("&7You have been teleported to the current drug dealer location.")); + break; + } + case "next": { + Optional<Location> randomLoc = drugDealer.getRandomLoc(); + randomLoc.ifPresent(location -> drugDealer.setLocation(location)); + player.sendMessage(Lang.DRUGS.f("&7You have changed the location of the drug dealer.")); + break; + } + case "restock": { + drugDealer.rerollStock(); + player.sendMessage(Lang.DRUGS.f("&7You have restocked the drug dealer.")); + break; + } + case "remove": { + Location nearestLocation = null; + if (drugDealer.getDealerLocations().isEmpty()) { + player.sendMessage(Lang.DRUGS.f("&7No drug dealer locations exist")); + return true; + } + for (Location location : drugDealer.getDealerLocations()) { + if (player.getWorld() != location.getWorld()) continue; + if (nearestLocation == null || + location.distance(player.getLocation()) < nearestLocation.distance(player.getLocation())) + nearestLocation = location; + } + drugDealer.getDealerLocations().remove(nearestLocation); + player.sendMessage(Lang.DRUGS.f("&7Drug Dealer location nearest to you has been removed.")); + break; + } + case "save": { + drugDealer.saveLocations(); + player.sendMessage(Lang.DRUGS.f("&7You have saved the locations / items for the drug dealer to file")); + break; + } + case "load": { + drugDealer.loadLocations(); + drugDealer.loadDealerItems(); + player.sendMessage(Lang.DRUGS.f("&7You have loaded the locations / items for the drug dealer from file")); + break; + } + default: { + return false; + } + } + return true; + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/FeedCommand.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/FeedCommand.java new file mode 100644 index 0000000..a42cf84 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/FeedCommand.java @@ -0,0 +1,59 @@ +package net.grandtheftmc.gtm.commands; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.util.C; +import net.grandtheftmc.core.util.State; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.GTMUtils; +import net.grandtheftmc.gtm.users.GTMUser; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.GTMUtils; +import net.grandtheftmc.gtm.users.CheatCode; +import net.grandtheftmc.gtm.users.GTMUser; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + + +public class FeedCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command c, String l, String[] args) { + /* if (args.length > 0 && s.hasPermission("command.feed.others")) { + player = Bukkit.getPlayer(args[0]); + if (player == null) { + s.sendMessage(Lang.GTM.f("&7That player is not online!")); + return true; + } + player.setFoodLevel(20); + player.setSaturation(20); + s.sendMessage(Lang.GTM.f("&7You fed &a" + player.getName() + "&7!")); + return true; + }*/ + if (!(s instanceof Player)) { + s.sendMessage(Lang.NOTPLAYER.s()); + return true; + } + Player player = (Player) s; + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + GTMUser GTMUser = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + if (GTMUser.getCheatCodeState(CheatCode.FEED).getState()== State.LOCKED) { + player.sendMessage(Lang.CHEAT_CODES.f(CheatCode.FEED.getLockedLore())); + return true; + } + if(user.isOnCooldown("feed_command")) { + player.sendMessage(Lang.CHEAT_CODES.f("&7You must wait &a" + Utils.timeInSecondsToText(user.getCooldownTimeLeft("feed_command"), C.RED, C.RED, C.GRAY) + " &7before using this cheatcode again!")); + return true; + } + user.addCooldown("feed_command", GTMUtils.getFeedDelay(user.getUserRank()), false, true); + player.setFoodLevel(20); + player.setSaturation(20); + player.sendMessage(Lang.GTM.f("&7You fed yourself!")); + return true; + + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/FixCommand.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/FixCommand.java new file mode 100644 index 0000000..e74dfc9 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/FixCommand.java @@ -0,0 +1,90 @@ +package net.grandtheftmc.gtm.commands; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.util.C; +import net.grandtheftmc.core.util.State; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.GTMUtils; +import net.grandtheftmc.gtm.users.CheatCode; +import net.grandtheftmc.gtm.users.GTMUser; +import org.bukkit.Material; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import java.util.Arrays; +import java.util.List; +import java.util.Optional; + +public class FixCommand implements CommandExecutor { + private final List<Material> repairableItems = Arrays.asList(Material.LEATHER_CHESTPLATE, + Material.CHAINMAIL_CHESTPLATE, Material.IRON_CHESTPLATE, + Material.GOLD_CHESTPLATE, Material.DIAMOND_CHESTPLATE, + Material.LEATHER_BOOTS, Material.LEATHER_LEGGINGS, + Material.LEATHER_CHESTPLATE, Material.LEATHER_HELMET, + Material.DIAMOND_HELMET, Material.ELYTRA, + Material.CHAINMAIL_HELMET, Material.CHAINMAIL_BOOTS); + + @Override + public boolean onCommand(CommandSender s, Command c, String l, String[] args) { + if (!(s instanceof Player)) { + s.sendMessage(Lang.NOTPLAYER.s()); + return true; + } + Player player = (Player) s; + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + GTMUser GTMUser = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + if (args.length == 0 || args.length == 1 && "hand".equalsIgnoreCase(args[0])) { + if(GTMUser.getCheatCodeState(CheatCode.FIXHAND).getState()== State.LOCKED) { + player.sendMessage(Lang.CHEAT_CODES.f(CheatCode.FIXHAND.getLockedLore())); + return false; + } + if(user.isOnCooldown("fix_hand_command")) { + player.sendMessage(Lang.CHEAT_CODES.f("&7You must wait &a" + Utils.timeInSecondsToText(user.getCooldownTimeLeft("fix_hand_command"), C.RED, C.RED, C.GRAY) + " &7before using this cheatcode again!")); + return false; + } + ItemStack item = player.getInventory().getItemInMainHand(); + + if(this.repairableItems.contains(item.getType())) { + + item.setDurability((short)0); + player.sendMessage(Lang.GTM.f("&7You have repaired your " + (item.getItemMeta().getDisplayName() == null ? item.getType().name().toLowerCase().replace("_", "") : item.getItemMeta().getDisplayName()) + "&7!")); + user.addCooldown("fix_hand_command", GTMUtils.getFixHandDelay(user.getUserRank()), true, true); + } else { + player.sendMessage(Lang.GTM.f("&7That item may not be repaired.")); + } + return true; + } else if(args.length == 1 && "all".equalsIgnoreCase(args[0])) { + if(GTMUser.getCheatCodeState(CheatCode.FIXALL).getState()== State.LOCKED) { + player.sendMessage(Lang.CHEAT_CODES.f(CheatCode.FIXALL.getLockedLore())); + return false; + } + if(user.isOnCooldown("fix_all_command")) { + player.sendMessage(Lang.CHEAT_CODES.f("&7You must wait &a" + Utils.timeInSecondsToText(user.getCooldownTimeLeft("fix_all_command"), C.RED, C.RED, C.GRAY) + " &7before using this cheatcode again!")); + return false; + } + for(ItemStack item : player.getInventory().getContents()) { + if(item == null) continue; + if(!this.repairableItems.contains(item.getType())) continue; + item.setDurability((short)0); + } + player.sendMessage(Lang.GTM.f("&7You have repaired all damaged items in your inventory!")); + user.addCooldown("fix_all_command", GTMUtils.getFixAllDelay(user.getUserRank()), true, true); + } else { + player.sendMessage(Lang.GTM.f("&7/fix hand - fixes the item in your hand.")); + player.sendMessage(Lang.GTM.f("&7/fix all - fixes all the items in your inventory.")); + return true; + } + return true; + + } + + +} \ No newline at end of file diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/GTMAdminCommand.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/GTMAdminCommand.java new file mode 100644 index 0000000..32c7425 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/GTMAdminCommand.java @@ -0,0 +1,260 @@ +package net.grandtheftmc.gtm.commands; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.inventory.CoreMenu; +import net.grandtheftmc.core.inventory.CoreMenuFlag; +import net.grandtheftmc.core.inventory.button.MenuItem; +import net.grandtheftmc.core.util.C; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.items.ArmorUpgrade; +import net.grandtheftmc.gtm.users.CompassTarget; +import net.grandtheftmc.gtm.users.GTMUser; +import net.grandtheftmc.gtm.wastedbarrels.WastedBarrel; +import net.grandtheftmc.houses.Houses; +import net.grandtheftmc.houses.houses.House; +import net.grandtheftmc.houses.users.HouseUser; +import net.grandtheftmc.houses.users.UserHouse; +import net.grandtheftmc.houses.users.UserHouseChest; +import org.bukkit.Bukkit; +import org.bukkit.EntityEffect; +import org.bukkit.Material; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.entity.ArmorStand; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; + +import java.util.Map; + +public class GTMAdminCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command c, String lbl, String[] args) { + if (!(s instanceof Player)) { + s.sendMessage(Lang.NOTPLAYER.s()); + return true; + } + if (!s.hasPermission("command.admin")) { + s.sendMessage(Lang.NOPERM.s()); + return true; + } + Player player = (Player) s; + if (args.length == 0) { + s.sendMessage(Utils.f("&c/gtmadmin setkillcounter <player> <amnt>")); + s.sendMessage(Utils.f("&c/gtmadmin release <player>")); + s.sendMessage(Utils.f("&c/gtmadmin target <player>")); + s.sendMessage(Utils.f("&c/gtmadmin resetjobdelay <player>")); + s.sendMessage(Utils.f("&c/gtmadmin kitexpiries <player>")); + s.sendMessage(Utils.f("&c/gtmadmin trashcan")); + s.sendMessage(Utils.f("&c/gtmadmin barrel <add/remove>")); + return true; + } + switch (args[0].toLowerCase()) { + case "barrel": { + if (args.length == 1) { + player.sendMessage(Utils.f("&c/gtmadmin barrel add - &7Add a Flammable Barrel at your location")); + player.sendMessage(Utils.f("&c/gtmadmin barrel remove - &7Remove the Flammable Barrel nearest to you")); + return true; + } + if ("spawn".equalsIgnoreCase(player.getWorld().getName())) { + player.sendMessage(Utils.f("&7Barrels cannot be in Spawn.")); + return true; + } + if ("add".equalsIgnoreCase(args[1])) { + GTM.getBarrelManager().spawnWastedBarrel(player.getLocation()).getArmorStand().playEffect(EntityEffect.WOLF_HEARTS); + } else if ("remove".equalsIgnoreCase(args[1])) { + player.getNearbyEntities(10, 10, 10).stream() + .filter(entity -> entity.getType() == EntityType.ARMOR_STAND) + .forEach(entity -> { + if (((ArmorStand) entity).getHelmet().getType() != Material.TNT) return; + if (!entity.hasMetadata("WastedBarrel")) return; + ArmorStand armorStand = (ArmorStand) entity; + armorStand.setHelmet(null); + armorStand.remove(); + player.sendMessage(armorStand.getLocation().toString()); + WastedBarrel wastedBarrel = (WastedBarrel) armorStand.getMetadata("WastedBarrel").get(0).value(); + GTM.getBarrelManager().getWastedBarrels().remove(wastedBarrel); + }); + player.sendMessage(Utils.f("&7Barrel(s) removed!")); + } else { + player.sendMessage(Utils.f("&c/gtmadmin barrel add - &7Add a Flammable Barrel at your location")); + player.sendMessage(Utils.f("&c/gtmadmin barrel remove - &7Remove the Flammable Barrel nearest to you")); + } + return true; + } + case "trashcan": { + ItemStack item = Utils.createItem(Material.DROPPER, "&7&lTrash Can"); + //Utils.b(ArmorUpgrade.TANK.getEnchantment().getName()); + // item.addUnsafeEnchantment(ArmorUpgrade.TANK.getEnchantment(), 1); + for (Enchantment e : item.getEnchantments().keySet()) + Utils.b(e.getName()); + player.getInventory().addItem(item); + s.sendMessage(Utils.f("&7A Trash Can was added to your inventory. Place it so players can sell items in it.")); + return true; + } + case "kitexpiries": { + if (args.length != 2) { + s.sendMessage(Utils.f("&c/gtmadmin kitexpiries <player>")); + return true; + } + Player p = Bukkit.getPlayer(args[1]); + if (p == null) { + s.sendMessage(Utils.f("&cThat player is not online!")); + return true; + } + GTMUser user = GTM.getUserManager().getLoadedUser(p.getUniqueId()); + s.sendMessage(Utils.f("&7Player &a" + p.getName() + "&7 has the following kit expiries:")); + for (Map.Entry<String, Long> entry : user.getKitExpiries().entrySet()) + s.sendMessage(entry.getKey() + ": expiry " + entry.getValue() + " time left " + (entry.getValue() - System.currentTimeMillis())); + s.sendMessage("KitExpiriesString: " + user.getKitExpiriesString()); + return true; + } + case "resetjobdelay": { + if (args.length != 2) { + s.sendMessage(Utils.f("&c/gtmadmin resetjobdelay <player>")); + return true; + } + Player p = Bukkit.getPlayer(args[1]); + if (p == null) { + s.sendMessage(Utils.f("&cThat player is not online!")); + return true; + } + GTMUser user = GTM.getUserManager().getLoadedUser(p.getUniqueId()); + user.setLastJobMode(-1); + s.sendMessage(Utils.f("&aYou reset &a" + p.getName() + "&7's job mode delay!")); + return true; + } + case "setkillcounter": { + if (args.length != 3) { + s.sendMessage(Utils.f("&c/gtmadmin setkillcounter <player> <amnt>")); + return true; + } + Player p = Bukkit.getPlayer(args[1]); + int amnt; + try { + amnt = Integer.parseInt(args[2]); + } catch (NumberFormatException e) { + s.sendMessage(Utils.f("&cThe amnt must be a number!")); + return true; + } + GTMUser user = GTM.getUserManager().getLoadedUser(p.getUniqueId()); + user.setKillCounter(amnt); + player.sendMessage(Utils.f("&aYou set " + p.getName() + "'s killcounter to " + amnt + '!')); + return true; + } + case "release": { + if (args.length != 2) { + s.sendMessage(Utils.f("&c/gtmadmin release <player>")); + return true; + } + Player p = Bukkit.getPlayer(args[1]); + if (p == null) { + s.sendMessage(Utils.f("&cThat player is not online!")); + return true; + } + GTMUser user = GTM.getUserManager().getLoadedUser(p.getUniqueId()); + user.setJailTimer(-1); + p.teleport(GTM.getWarpManager().getSpawn().getLocation()); + s.sendMessage(Utils.f("&aYou released " + p.getName() + " from jail!")); + return true; + } + case "target": { + if (args.length != 2) { + s.sendMessage(Utils.f("&c/gtmadmin target <player>")); + return true; + } + Player p = Bukkit.getPlayer(args[1]); + if (p == null) { + s.sendMessage(Utils.f("&cThat player is not online!")); + return true; + } + GTMUser user = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + user.setCompassTarget(player, Core.getUserManager().getLoadedUser(player.getUniqueId()), new CompassTarget(p)); + s.sendMessage(Utils.f("&aYou set your compass target to &a" + p.getName() + '!')); + return true; + } + case "hchest": {//gtmadmin hchest playerName houseId chestId + if (args.length < 4) { + s.sendMessage(C.ERROR + "Usage: /gtmadmin [hchest/phchest] playerName houseId chestId"); + return true; + } + + Player target = Bukkit.getPlayer(args[1]); + if (target == null) { + s.sendMessage(C.ERROR + "This player is not online."); + return true; + } + + int houseId = -1, chestId = -1; + try { + houseId = Integer.parseInt(args[2]); + chestId = Integer.parseInt(args[3]); + } catch (NumberFormatException e) { + s.sendMessage(C.ERROR + "The requested Id's couldn't be parsed. Use numerals."); + return true; + } + + if (houseId < 0 || chestId < 0) { + s.sendMessage(C.ERROR + "The requested Id's couldn't be parsed. Use numerals."); + return true; + } + + HouseUser houseUser = Houses.getUserManager().getLoadedUser(target.getUniqueId()); + if (houseUser == null) { + s.sendMessage(C.ERROR + "This player does not own a house."); + return true; + } + + UserHouse userHouse = houseUser.getUserHouse(houseId); + if (userHouse == null) { + s.sendMessage(C.ERROR + "This player does not own this house."); + return true; + } + + UserHouseChest houseChest = userHouse.getChest(chestId); + if (houseChest == null) { + s.sendMessage(C.ERROR + "The house chest with id " + chestId + ", could not be found."); + return true; + } + + if (houseChest.getContents() == null) { + s.sendMessage(C.ERROR + "This chest doesn't contain items."); + return true; + } + + new FakeChestInv(6, houseId, chestId, houseChest.getContents()).openInventory((Player) s); + s.sendMessage(C.GREEN + "Opening fake content inventory."); + } + default: + s.sendMessage(Utils.f("&c/gtmadmin setkillcounter <player> <amnt>")); + s.sendMessage(Utils.f("&c/gtmadmin release <player>")); + s.sendMessage(Utils.f("&c/gtmadmin target <player>")); + s.sendMessage(Utils.f("&c/gtmadmin resetjobdelay <player>")); + s.sendMessage(Utils.f("&c/gtmadmin kitexpiries <player>")); + s.sendMessage(Utils.f("&c/gtmadmin trashcan")); + s.sendMessage(Utils.f("&c/gtmadmin barrel")); + s.sendMessage(Utils.f("&c/gtmadmin gravity <modifier>")); + return true; + } + } + + public class FakeChestInv extends CoreMenu { + + public FakeChestInv(int rows, int houseId, int chestId, ItemStack[] contents) { + super(rows, "Fake contents {" + houseId + "," + chestId + "}", CoreMenuFlag.RESET_CURSOR_ON_OPEN, CoreMenuFlag.CLOSE_ON_NULL_CLICK); + + for (int i = 0; i < contents.length; i++) { + ItemStack item = contents[i]; + if (item == null) continue; + + addItem(new MenuItem(i, item, false)); + } + } + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/GTMRankCommand.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/GTMRankCommand.java new file mode 100644 index 0000000..63ad54e --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/GTMRankCommand.java @@ -0,0 +1,64 @@ +package net.grandtheftmc.gtm.commands; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.database.BaseDatabase; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.users.GTMRank; +import net.grandtheftmc.gtm.users.GTMUser; + +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class GTMRankCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command c, String l, String[] args) { + if (!s.hasPermission("command.gtmrank")) { + s.sendMessage(Utils.f("&cYou do not have permission to execute this command!")); + return true; + } + if (args.length == 0) { + s.sendMessage(Utils.f("&c/gtmrank set <player> <rank>")); + return true; + } + switch (args[0].toLowerCase()) { + case "set": + if (args.length != 3) { + s.sendMessage(Utils.f("&c/gtmrank set <player> <rank>")); + return true; + } + GTMRank rank = GTMRank.getRankOrNull(args[2]); + if (rank == null) { + String msg = Lang.RANKS + "&7There is no gtmrank with the name &a" + args[2] + "&7! Valid ranks: "; + for (GTMRank r : GTMRank.getGTMRanks()) + msg = msg + "&a" + r.getColoredNameBold() + "&7, "; + if (msg.endsWith("&7, ")) + msg = msg.substring(0, msg.length() - 4); + msg += "&c."; + s.sendMessage(Utils.f(msg)); + return true; + } + Player player = Bukkit.getPlayer(args[1]); + if (player == null) { +// Core.sql.updateAsyncLater("update "+ Core.name()+" set rank='" + rank.getName() + "' where name='" + args[1] + "';"); + ServerUtil.runTaskAsync(() -> BaseDatabase.runCustomQuery("update "+ Core.name()+" set rank='" + rank.getName() + "' where name='" + args[1] + "';")); + s.sendMessage(Utils.f(Lang.RANKS + "&7That player is not online, so his rank has been forcibly updated in the database.")); + return true; + } + GTMUser u = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + u.setRank(rank, player, Core.getUserManager().getLoadedUser(player.getUniqueId())); + s.sendMessage(Utils.f(Lang.RANKS + "&a" + player.getName() + " &7is now a &a" + u.getRank().getColoredNameBold() + "&7!")); + return true; + + default: + s.sendMessage(Utils.f("&c/gtmrank set <player> <rank>")); + return true; + } + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/GTMRanksCommand.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/GTMRanksCommand.java new file mode 100644 index 0000000..4718dd8 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/GTMRanksCommand.java @@ -0,0 +1,40 @@ +package net.grandtheftmc.gtm.commands; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.gtm.users.GTMRank; +import net.grandtheftmc.gtm.users.LockedWeapon; +import org.apache.commons.lang3.StringUtils; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.Arrays; +import java.util.LinkedList; +import java.util.List; +import java.util.stream.Collectors; + +public class GTMRanksCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command c, String l, String[] args) { + if (!(s instanceof Player)) { + s.sendMessage(Lang.NOTPLAYER.s()); + return true; + } + Player player = (Player) s; + player.sendMessage(Lang.RANKS.s()); + List<LockedWeapon> lockedWeapons = new LinkedList<>(Arrays.asList(LockedWeapon.values())); + for (GTMRank gtmRank : GTMRank.values()) { + List<LockedWeapon> unlockedWeapons = lockedWeapons.stream().filter(lockedWeapon -> lockedWeapon.getGTMRank() == gtmRank).collect(Collectors.toList()); + String unlocks = ""; + if (!unlockedWeapons.isEmpty()) { + unlocks = StringUtils.join(unlockedWeapons, "&7, &c&l"); + } + player.sendMessage(Utils.f(gtmRank.getColoredNameBold() + " &7costs &a&l$" + gtmRank.getPrice() + + (unlocks.isEmpty() ? "" : " &7unlocks &c&l" + unlocks))); + } + return true; + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/HalloweenCommand.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/HalloweenCommand.java new file mode 100644 index 0000000..43d6419 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/HalloweenCommand.java @@ -0,0 +1,50 @@ +package net.grandtheftmc.gtm.commands; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.Utils; +import net.grandtheftmc.core.commands.CoreCommand; +import net.grandtheftmc.core.database.BaseDatabase; +import net.grandtheftmc.gtm.holidays.halloween.PlayerScare; +import net.grandtheftmc.gtm.holidays.halloween.dao.ServerCoupon; +import net.grandtheftmc.gtm.holidays.halloween.dao.ServerCouponDAO; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.sql.Connection; +import java.sql.SQLException; + +/** + * Created by Timothy Lampen on 2017-10-23. + */ +public class HalloweenCommand extends CoreCommand<Player> { + public HalloweenCommand() { + super("halloween", "commands surrounding halloween!"); + } + + @Override + public void execute(Player sender, String[] args) { +// if(!sender.isOp()) { +// sender.sendMessage(Lang.NOPERM.f("")); +// return; +// } +// if(args.length==0) { +// sender.sendMessage(Utils.f("&7/halloween reset")); +// sender.sendMessage(Utils.f("&7/halloween trigger")); +// return; +// } +// switch (args[0].toLowerCase()) { +// case "reset": { +// try(Connection conn = BaseDatabase.getInstance().getConnection()){ +// ServerCouponDAO.deleteServerCoupon(conn, sender.getUniqueId(), true); +// sender.sendMessage(Utils.f("&7deleted your coupon from DB")); +// } catch (SQLException e) { +// e.printStackTrace(); +// } +// break; +// } +// case"trigger": { +// PlayerScare.initScare(sender); +// } +// } + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/KillCommand.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/KillCommand.java new file mode 100644 index 0000000..9b978ba --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/KillCommand.java @@ -0,0 +1,68 @@ +package net.grandtheftmc.gtm.commands; + +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.util.Utils; + +public class KillCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command c, String lbl, String[] args) { + if (!(s instanceof Player)) { + s.sendMessage(Lang.GTM.f("&cYou are not a player!")); + return true; + } + Player player = (Player) s; + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + if (lbl.equalsIgnoreCase("suicide")) { + if (player.getWorld().getName().equalsIgnoreCase("spawn")) return true; + player.sendMessage(Lang.GTM.f("&7Have a nice &osuicide!")); + player.getActivePotionEffects().forEach(effect -> player.removePotionEffect(effect.getType())); + + // grab current rank + UserRank rank = user.getUserRank(); + if (rank != null){ + // sr mod or builders and above should always have inventory cleared + if (rank.hasRank(UserRank.SRMOD) || rank.hasRank(UserRank.BUILDER)){ + player.getInventory().clear(); + } + } + + player.damage(player.getHealth() * 10, player); + return true; + } + if (!user.isRank(UserRank.ADMIN)) { + player.sendMessage(Lang.NOPERM.s()); + return true; + } + if (args.length != 1) { + s.sendMessage(Utils.f("&c/kill <player>")); + return true; + } + Player target = Bukkit.getPlayer(args[0]); + if (target == null) { + s.sendMessage(Lang.GTM.f("&7That player is not online!")); + return true; + } + if (target.isOp()) { + s.sendMessage(Lang.GTM.f("&7That player can not be killed")); + return true; + } + target.getActivePotionEffects().forEach(effect -> { + target.removePotionEffect(effect.getType()); + }); + target.damage(target.getHealth()); + s.sendMessage(Lang.GTM.f("&7You killed &a" + + Core.getUserManager().getLoadedUser(target.getUniqueId()).getColoredName(target) + "&7!")); + return true; + } +} + diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/LotteryCommand.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/LotteryCommand.java new file mode 100644 index 0000000..a00b41f --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/LotteryCommand.java @@ -0,0 +1,193 @@ +package net.grandtheftmc.gtm.commands; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.GTMUtils; +import net.grandtheftmc.gtm.tasks.Lottery; +import net.grandtheftmc.gtm.tasks.LotteryPlayer; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +public class LotteryCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command c, String l, String[] args) { + if (!(s instanceof Player)) { + s.sendMessage(Lang.NOTPLAYER.toString()); + return true; + } + Player player = (Player) s; + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + if (!user.isRank(UserRank.SRMOD)) { + player.sendMessage(Lang.NOPERM.toString()); + return true; + } + if (args.length == 0) { + s.sendMessage(Utils.f("&c/lottery sethologram")); + s.sendMessage(Utils.f("&c/lottery start <year> <month> <day> <hour> <minute>")); + s.sendMessage(Utils.f("&c/lottery end")); + s.sendMessage(Utils.f("&c/lottery time")); + s.sendMessage(Utils.f("&c/lottery tickets balance <player>")); + s.sendMessage(Utils.f("&c/lottery tickets give/take <player> <amount>")); + s.sendMessage(Utils.f("&c/lottery tickets top")); + return true; + } + switch (args[0].toLowerCase()) { + case "sethologram": + if (!user.isRank(UserRank.MANAGER)) { + player.sendMessage(Lang.NOPERM.toString()); + return true; + } + GTM.getLottery().setHologramLocation(player.getLocation()); + s.sendMessage(Lang.LOTTERY.f("&7The hologram has been set at your location.")); + return true; + case "start": + if (!user.isRank(UserRank.MANAGER)) { + player.sendMessage(Lang.NOPERM.toString()); + return true; + } + if (args.length != 6) { + s.sendMessage(Lang.LOTTERY.f("&7Please specify when the lottery should end in the following format: /lottery start <year> <month> <day> <hour> <minute>")); + return true; + } + int year = Integer.parseInt(args[1]); + int month = Integer.parseInt(args[2]); + int day = Integer.parseInt(args[3]); + int hour = Integer.parseInt(args[4]); + int minute = Integer.parseInt(args[5]); + LocalDateTime end = LocalDateTime.of(year, month, day, hour, minute); + GTM.getLottery().setEnd(end); + return true; + case "end": { + if (!user.isRank(UserRank.ADMIN)) { + player.sendMessage(Lang.NOPERM.toString()); + return true; + } + GTM.getLottery().end(); + return true; + } + case "test": { + if (!user.isRank(UserRank.MANAGER)) { + player.sendMessage(Lang.NOPERM.toString()); + return true; + } + Lottery.test(); + return true; + } + case "time": { + if (!user.isRank(UserRank.MANAGER)) { + player.sendMessage(Lang.NOPERM.toString()); + return true; + } + s.sendMessage(Lang.LOTTERY.f("&7Current time: " + LocalDateTime.now(ZoneId.of("UTC")))); + s.sendMessage(Lang.LOTTERY.f("&7Time of end: " + GTM.getLottery().getEnd())); + s.sendMessage(Lang.LOTTERY.f("&7Time until end: " + GTM.getLottery().timeToEnd())); + return true; + } + case "tickets": { + if (args.length == 1) { + s.sendMessage(Utils.f("&7/lottery tickets balance &a<player>")); + s.sendMessage(Utils.f("&7/lottery tickets give/take &a<player> <amount>")); + s.sendMessage(Utils.f("&7/lottery tickets top")); + return true; + } + switch (args[1]) { + case "balance": { + if (args.length != 3) { + s.sendMessage(Utils.f("&7/lottery tickets balance &a<player>")); + return true; + } + String targetName = args[2]; + LotteryPlayer lotteryPlayer = GTM.getLottery().getLotteryPlayer(targetName); + if (lotteryPlayer == null) { + s.sendMessage(Lang.LOTTERY.f("&cThat player has not bought any tickets!")); + return true; + } + int tickets = lotteryPlayer.getTickets(); + s.sendMessage(Lang.LOTTERY.f("&7" + targetName)); + s.sendMessage(Utils.f("&7Tickets: " + tickets)); + return true; + } + case "give": { + if (!user.isRank(UserRank.ADMIN)) { + player.sendMessage(Lang.NOPERM.toString()); + return true; + } + if (args.length != 4) { + s.sendMessage(Utils.f("&7/lottery tickets give &a<player> <amount>")); + return true; + } + String targetName = args[2]; + Integer amount = Integer.valueOf(args[3]); + LotteryPlayer lotteryPlayer = GTM.getLottery().getLotteryPlayer(targetName); + if (lotteryPlayer == null) { + s.sendMessage(Lang.LOTTERY.f("&cPlayer not found")); + return true; + } + lotteryPlayer.setTickets(lotteryPlayer.getTickets() + amount); + s.sendMessage(Lang.LOTTERY.f("&7Tickets of &a" + targetName + " &7set to &a" + lotteryPlayer.getTickets())); + return true; + } + case "take": { + if (args.length != 4) { + s.sendMessage(Utils.f("&7/lottery tickets take &a<player> <amount>")); + return true; + } + String targetName = args[2]; + int amount = Integer.valueOf(args[3]); + LotteryPlayer lotteryPlayer = GTM.getLottery().getLotteryPlayer(targetName); + if (lotteryPlayer == null) { + s.sendMessage(Lang.LOTTERY.f("&cPlayer not found")); + return true; + } + int result = lotteryPlayer.getTickets() - amount; + if (result <= 0) result = 1; + lotteryPlayer.setTickets(result); + s.sendMessage(Lang.LOTTERY.f("&7Tickets of &a" + targetName + " &7set to &a" + result)); + return true; + } + case "top": { + Map<String, Integer> ticketCounts = new HashMap<>(); + GTM.getLottery().getLotteryPlayers().forEach(lotteryPlayer -> { + ticketCounts.put(lotteryPlayer.getName(), lotteryPlayer.getTickets()); + }); + Map<String, Integer> topTickets = GTMUtils.sortByValue(ticketCounts); + Iterator iterator = topTickets.entrySet().iterator(); + int loop = 0; + int i = 1; + while (iterator.hasNext()) { + if (loop > 24) break; + Map.Entry pair = (Map.Entry) iterator.next(); + s.sendMessage(Utils.f("&7#" + i++ + " &a" + pair.getKey() + " &7- " + pair.getValue() + " &7tickets")); + iterator.remove(); + loop += 1; + } + } + } + return true; + } + default: + s.sendMessage(Utils.f("&c/lottery sethologram")); + s.sendMessage(Utils.f("&c/lottery start <year> <month> <day> <hour> <minute>")); + s.sendMessage(Utils.f("&c/lottery end")); + s.sendMessage(Utils.f("&c/lottery time")); + s.sendMessage(Utils.f("&c/lottery tickets balance <player>")); + s.sendMessage(Utils.f("&c/lottery tickets give/take <player> <amount>")); + s.sendMessage(Utils.f("&c/lottery tickets top")); + return true; + } + } + +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/MoneyCommand.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/MoneyCommand.java new file mode 100644 index 0000000..335a445 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/MoneyCommand.java @@ -0,0 +1,485 @@ +package net.grandtheftmc.gtm.commands; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitRunnable; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.currency.Currency; +import net.grandtheftmc.core.database.BaseDatabase; +import net.grandtheftmc.core.database.dao.CurrencyDAO; +import net.grandtheftmc.core.users.UserDAO; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.core.util.TopValue; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.GTMUtils; +import net.grandtheftmc.gtm.users.GTMUser; + +public class MoneyCommand implements CommandExecutor { + + /** Only display this many highscores, paginated */ + public static final Integer MAX_HIGHSCORES = 80; + /** Number of results to display per page */ + public static final Integer RESULTS_PER_PAGE = 8; + /** Sorted list of top bank values */ + private List<TopValue> topBank; + /** Sorted list of top money values */ + private List<TopValue> topMoney; + + public MoneyCommand(){ + this.topBank = new ArrayList<>(); + this.topMoney = new ArrayList<>(); + + // run update every 60 minutes + new BukkitRunnable() { + @Override + public void run() { + fetchTopBank(); + fetchTopMoney(); + } + }.runTaskTimerAsynchronously(GTM.getInstance(), 0,20L * (60*60)); + } + + @Override + public boolean onCommand(CommandSender s, Command c, String l, String[] args) { + if (!s.hasPermission("command.money")) { + + if (args.length > 0 && args[0].equalsIgnoreCase("top")){ + // ALLOW + } + else{ + s.sendMessage(Lang.NOPERM.toString()); + return true; + } + } + if (args.length == 0) { + s.sendMessage(Utils.f("&c/money balance <player>")); + s.sendMessage(Utils.f("&c/money give <player> <amount>")); + s.sendMessage(Utils.f("&c/money take <player> <amount>")); + s.sendMessage(Utils.f("&c/money bank <player>")); + s.sendMessage(Utils.f("&c/money givebank <player> <amount>")); + s.sendMessage(Utils.f("&c/money takebank <player> <amount>")); + s.sendMessage(Utils.f("&c/money top <money/bank> [page] - Shows the baltop for cash, bank or combined")); + return true; + } + switch (args[0].toLowerCase()) { + case "balance": { + if (args.length != 2) { + s.sendMessage(Utils.f("&c/money balance <player>")); + return true; + } + Player player = Bukkit.getPlayer(args[1]); + if (player == null) { + UUID senderUUID = s instanceof Player ? ((Player) s).getUniqueId() : null; + s.sendMessage(Utils.f("&cThat player isn't online, so please wait while the money is pulled from the database.")); + + ServerUtil.runTaskAsync(() -> { + UUID uuid = UserDAO.getUuidByName(args[1]); + + if (uuid == null) { + ServerUtil.runTask(() -> s.sendMessage(Utils.f("&cThis player wasn't found."))); + return; + } + + int money = 0; + + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + + money = CurrencyDAO.getCurrency(connection, Currency.MONEY.getServerKey(), uuid, Currency.MONEY); + } catch (Exception e) { + e.printStackTrace(); + } + + int finalMoney = money; + ServerUtil.runTask(() -> (senderUUID == null ? Bukkit.getConsoleSender() : Bukkit.getPlayer(senderUUID)).sendMessage(Lang.MONEY.f("&a " + args[1] + " has $" + finalMoney))); + }); + + return true; + } + GTMUser user = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + s.sendMessage(Utils.f(Lang.MONEY + "&a" + player.getName() + "&7 has &a$&l" + user.getMoney() + "&7!")); + return true; + } + case "give": { + if (args.length != 3) { + s.sendMessage(Utils.f("&c/money give <player>")); + return true; + } + double amnt; + try { + amnt = Double.parseDouble(args[2]); + } catch (NumberFormatException e) { + s.sendMessage(Utils.f(Lang.MONEY + "&7The amount must be a number!")); + return true; + } + Player player = Bukkit.getPlayer(args[1]); + if (player == null) { + s.sendMessage(Utils.f("&cThat player isn't online, so hold on a second while the money is forcibly updated in the database.")); + + ServerUtil.runTaskAsync(() -> { + UUID uuid = UserDAO.getUuidByName(args[1]); + + if (uuid == null) { + ServerUtil.runTask(() -> s.sendMessage(Utils.f("&cThis player wasn't found."))); + return; + } + + try (Connection conn = BaseDatabase.getInstance().getConnection()){ + CurrencyDAO.addCurrency(conn, Currency.MONEY.getServerKey(), uuid, Currency.MONEY, (int) amnt); + } + catch(Exception e){ + e.printStackTrace(); + } + + if (uuid == null) Core.log("Error while logging giveMoneyCommand for uuid " + uuid + ", name " + args[1] + ", amnt " + amnt); + else Utils.insertLog(uuid, args[1], "giveMoneyCommand", "MONEY", "$" + amnt + " Money", amnt, 0); + }); + + return true; + } + GTMUser user = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + user.addMoney(amnt); + Core.getUserManager().getLoadedUser(player.getUniqueId()).insertLog(player, "giveMoneyCommand", "MONEY", "$" + amnt + " Money", amnt, 0); + GTMUtils.updateBoard(player, Core.getUserManager().getLoadedUser(player.getUniqueId()), user); + s.sendMessage(Utils.f(Lang.MONEY + "&7You gave &a$&l" + amnt + "&7 to &a" + player.getName() + "&7!")); + player.sendMessage( + Utils.f(Lang.MONEY + "&7You were given &a$&l" + amnt + "&7 by &a" + s.getName() + "&7!")); + return true; + } + case "take": { + if (args.length != 3) { + s.sendMessage(Utils.f("&c/money take <player>")); + return true; + } + double amnt; + try { + amnt = Double.parseDouble(args[2]); + } catch (NumberFormatException e) { + s.sendMessage(Utils.f(Lang.MONEY + "&7The amount must be a number!")); + return true; + } + Player player = Bukkit.getPlayer(args[1]); + if (player == null) { + s.sendMessage(Utils.f("&cThat player isn't online, so hold on a second while the money is forcibly updated in the database.")); + + double finalAmnt1 = amnt; + ServerUtil.runTaskAsync(() -> { + UUID uuid = UserDAO.getUuidByName(args[1]); + + if (uuid == null) { + ServerUtil.runTask(() -> s.sendMessage(Utils.f("&cThis player wasn't found."))); + return; + } + + try (Connection conn = BaseDatabase.getInstance().getConnection()){ + CurrencyDAO.addCurrency(conn, Currency.MONEY.getServerKey(), uuid, Currency.MONEY, (int) -finalAmnt1); + } + catch(Exception e){ + e.printStackTrace(); + } + + if (uuid == null) Core.log("Error while logging takeMoneyCommand for uuid " + uuid + ", name " + args[1] + ", amnt " + -finalAmnt1); + else Utils.insertLog(uuid, args[1], "takeMoneyCommand", "MONEY", "-$" + finalAmnt1 + " Money", -finalAmnt1, 0); + }); + return true; + } + GTMUser user = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + if (!user.hasMoney(amnt)) + amnt = user.getMoney(); + user.takeMoney(amnt); + Core.getUserManager().getLoadedUser(player.getUniqueId()).insertLog(player, "takeMoneyCommand", "MONEY", "-$" + amnt + " Money", -amnt, 0); + GTMUtils.updateBoard(player, Core.getUserManager().getLoadedUser(player.getUniqueId()), user); + s.sendMessage(Utils.f(Lang.MONEY + "&7You took &c$&l" + amnt + "&7 from &a" + player.getName() + "&7!")); + player.sendMessage( + Utils.f(Lang.MONEY + "&c$&l" + amnt + "&7 was taken from you by &a" + s.getName() + "&7!")); + return true; + } + case "bank": { + if (args.length != 2) { + s.sendMessage(Utils.f("&c/money balance <player>")); + return true; + } + Player player = Bukkit.getPlayer(args[1]); + if (player == null) { + UUID senderUUID = s instanceof Player ? ((Player) s).getUniqueId() : null; + s.sendMessage(Utils.f("&cThat player isn't online, so please wait while the money is pulled from the database.")); + + ServerUtil.runTaskAsync(() -> { + UUID uuid = UserDAO.getUuidByName(args[1]); + String name = null; + int money = 0; + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("select name,bank from " + Core.name() + " where uuid=UNHEX('" + uuid.toString().replaceAll("-", "") + "');")) { + try (ResultSet result = statement.executeQuery()) { + if (result.next()) { + name = result.getString("name"); + money = result.getInt("bank"); + } + } + } + } catch (SQLException e) { + e.printStackTrace(); + } + + String finalName = name; + int finalMoney = money; + ServerUtil.runTask(() -> (senderUUID == null ? Bukkit.getConsoleSender() : Bukkit.getPlayer(senderUUID)).sendMessage(Lang.MONEY.f("&a " + finalName + " has $" + finalMoney + " in the bank"))); + }); + + return true; + } + GTMUser user = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + s.sendMessage(Utils.f( + Lang.BANK + "&a" + player.getName() + "&7 has &a$&l" + user.getBank() + "&7 in his bank account!")); + return true; + } + case "givebank": { + if (args.length != 3) { + s.sendMessage(Utils.f("&c/money givebank <player>")); + return true; + } + double amnt; + try { + amnt = Double.parseDouble(args[2]); + } catch (NumberFormatException e) { + s.sendMessage(Utils.f(Lang.MONEY + "&7The amount must be a number!")); + return true; + } + Player player = Bukkit.getPlayer(args[1]); + if (player == null) { + s.sendMessage(Utils.f("&cThat player isn't online, so hold on a second while the bank money is forcibly updated in the database.")); + + ServerUtil.runTaskAsync(() -> { + UUID uuid = UserDAO.getUuidByName(args[1]); + BaseDatabase.runCustomQuery("update " + Core.name() + " set bank=bank+" + amnt + " where uuid=UNHEX('" + uuid.toString().replaceAll("-", "") + "');"); + + if(uuid == null) Core.log("Error while logging giveBankCommand for uuid " + uuid + ", name " + args[1] + ", amnt " + amnt); + else Utils.insertLog(uuid, args[1], "giveBankCommand", "MONEY", "$" + amnt + " Money", amnt, 0); + }); + + return true; + } + GTMUser user = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + user.addBank(amnt); + Core.getUserManager().getLoadedUser(player.getUniqueId()).insertLog(player, "giveBankCommand", "MONEY", "$" + amnt + " Money", amnt, 0); + GTMUtils.updateBoard(player, Core.getUserManager().getLoadedUser(player.getUniqueId()), user); + s.sendMessage(Utils + .f(Lang.BANK + "&7You put &a$&l" + amnt + "&7 into &a" + player.getName() + "&7's bank account!")); + player.sendMessage( + Utils.f(Lang.BANK + "&a$&l" + amnt + "&7 was put into your account by &a" + s.getName() + "&7!")); + return true; + } + case "takebank": + if (args.length != 3) { + s.sendMessage(Utils.f("&c/money takebank <player>")); + return true; + } + double amnt; + try { + amnt = Double.parseDouble(args[2]); + } catch (NumberFormatException e) { + s.sendMessage(Utils.f(Lang.MONEY + "&7The amount must be a number!")); + return true; + } + Player player = Bukkit.getPlayer(args[1]); + if (player == null) { + s.sendMessage(Utils.f("&cThat player isn't online, so hold on a second while the bank money is forcibly updated in the database.")); + + double finalAmnt = amnt; + ServerUtil.runTaskAsync(() -> { + UUID uuid = UserDAO.getUuidByName(args[1]); + BaseDatabase.runCustomQuery("update " + Core.name() + " set bank=bank-" + finalAmnt + "' where uuid=UNHEX('" + uuid.toString().replaceAll("-", "") + "');"); + + if(uuid == null) Core.log("Error while logging takeBankCommand for uuid " + uuid + ", name " + args[1] + ", amnt " + -finalAmnt); + else Utils.insertLog(uuid, args[1], "takeBankCommand", "MONEY", "-$" + finalAmnt + " Money", -finalAmnt, 0); + }); + + return true; + } + GTMUser user = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + if (!user.hasBank(amnt)) + amnt = user.getBank(); + user.takeBank(amnt); + Core.getUserManager().getLoadedUser(player.getUniqueId()).insertLog(player, "takeBankCommand", "MONEY", "-$" + amnt + " Money", -amnt, 0); + GTMUtils.updateBoard(player, Core.getUserManager().getLoadedUser(player.getUniqueId()), user); + s.sendMessage(Utils + .f(Lang.BANK + "&7You took &c$&l" + amnt + "&7 from &a" + player.getName() + "&7's bank account!")); + player.sendMessage( + Utils.f(Lang.BANK + "&c$&l" + amnt + "&7 was taken from your account by &a" + s.getName() + "&7!")); + return true; + case "top": { + + boolean bank = false; + if (!(s instanceof Player)) { + s.sendMessage(Lang.NOTPLAYER.s()); + return true; + } + if (args.length < 2 || args.length > 3) { + s.sendMessage(Utils.f("&c/money top <money/bank> [page]")); + return true; + } + + if ("money".equalsIgnoreCase(args[1])) { + s.sendMessage(Lang.MONEY.f("&7Looking up Money Top in database...")); + } else if ("bank".equalsIgnoreCase(args[1])) { + bank = true; + s.sendMessage(Lang.MONEY.f("&7Looking up Bank Top in database...")); + } else { + s.sendMessage(Utils.f("&c/money top <money/bank>")); + return true; + } + + int page = 1; + if (args.length > 2) { + try { + page = Integer.parseInt(args[2]); + } + catch (NumberFormatException ignored) { + + } + } + + int maxPages = MAX_HIGHSCORES / RESULTS_PER_PAGE; + if (page > maxPages){ + page = maxPages; + } + + s.sendMessage(bank ? Lang.BANK.f("&7Bank Top Page &a&l" + page + "&7:") : Lang.MONEY.f("&7Money Top Page &a&l" + page + "&7:")); + + // assign a copy + List<TopValue> leaderboard = topMoney; + if (bank){ + leaderboard = topBank; + } + + // iterate from 0 to results per page + for (int i = 0; i < RESULTS_PER_PAGE; i++){ + + // compute the index that we want to retrieve from the top scores + int topIndex = ((page - 1) * RESULTS_PER_PAGE) + i; + + // examples + // page = 1 + // topIndex = (0 * 5) + 0 = 0 + // topIndex = (0 * 5) + 1 = 1 + // page = 2 + // topIndex = (1 * 5) + 0 = 5 + // topIndex = (1 * 5) + 1 = 6 + + if (topIndex < leaderboard.size()){ + TopValue topValue = leaderboard.get(topIndex); + if (topValue != null){ + s.sendMessage(Utils.f("&a#&l" + (topIndex + 1) + "&7: &r" + topValue.getId() + "&7 &a" + Utils.formatMoney(topValue.getAmount()))); + } + } + } + + if (page != maxPages){ + s.sendMessage(Utils.f("&7Type &a/money top " + (bank ? "bank" : "money") + ' ' + (page + 1) + "&7 for more...")); + } + + return true; + } + + default: + s.sendMessage(Utils.f("&c/money balance <player>")); + s.sendMessage(Utils.f("&c/money give <player> <amount>")); + s.sendMessage(Utils.f("&c/money take <player> <amount>")); + s.sendMessage(Utils.f("&c/money bank <player>")); + s.sendMessage(Utils.f("&c/money givebank <player> <amount>")); + s.sendMessage(Utils.f("&c/money takebank <player> <amount>")); + s.sendMessage(Utils.f("&c/money top <money/bank> [page] - Shows the baltop for cash, bank or combined")); + return true; + } + + } + + /** + * Fetch the top banks in the database, and update fields. + */ + protected void fetchTopBank(){ + + try (Connection connection = BaseDatabase.getInstance().getConnection()){ + + try(PreparedStatement ps = connection.prepareStatement("SELECT name, bank FROM "+Core.name()+" WHERE name != 'ERROR' ORDER BY bank DESC LIMIT ?;")) { + ps.setInt(1, MAX_HIGHSCORES); + + try(ResultSet result = ps.executeQuery()) { + + Map<String, Integer> top = new HashMap<>(); + while(result.next()){ + String name = result.getString("name"); + int balance = (int) result.getDouble("bank"); + + top.put(name, balance); + } + ServerUtil.runTask(() -> { + topBank.clear(); + top.forEach((k, v) -> { + topBank.add(new TopValue(k, v)); + }); + Collections.sort(topBank, Collections.reverseOrder()); + }); + } + } + } + catch (SQLException e) { + e.printStackTrace(); + } + } + + /** + * Fetch the top money in the database, and update fields. + */ + protected void fetchTopMoney(){ + + try (Connection connection = BaseDatabase.getInstance().getConnection()){ + + String query = "SELECT U.name as name, UC.amount AS money FROM user U, user_currency UC WHERE U.uuid=UC.uuid AND server_key=? AND currency=? ORDER BY amount DESC LIMIT ?;"; + + try(PreparedStatement ps = connection.prepareStatement(query)) { + ps.setString(1, Core.name().toUpperCase()); + ps.setString(2, "MONEY"); + ps.setInt(3, MAX_HIGHSCORES); + + try(ResultSet result = ps.executeQuery()) { + + Map<String, Integer> top = new HashMap<>(); + while(result.next()){ + String name = result.getString("name"); + int balance = result.getInt("money"); + + top.put(name, balance); + } + ServerUtil.runTask(() -> { + topMoney.clear(); + top.forEach((k, v) -> { + topMoney.add(new TopValue(k, v)); + }); + + Collections.sort(topMoney, Collections.reverseOrder()); + }); + } + } + } + catch (SQLException e) { + e.printStackTrace(); + } + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/NearCommand.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/NearCommand.java new file mode 100644 index 0000000..b81f539 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/NearCommand.java @@ -0,0 +1,54 @@ +package net.grandtheftmc.gtm.commands; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.gtm.GTMUtils; +import org.apache.commons.lang.StringUtils; +import org.bukkit.GameMode; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +public class NearCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command c, String l, String[] args) { + if (!(s instanceof Player)) { + s.sendMessage(Lang.GTM.f("&cYou are not a player!")); + return true; + } + Player player = (Player)s; + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + if (!user.isRank(UserRank.VIP)) { + player.sendMessage(Lang.GTM.f("&7You must be &6&lVIP+ &7to use this command!")); + return true; + } + Map<String, Integer> nearbySet = new HashMap<>(); + int range = GTMUtils.getNearRange(user.getUserRank()); + for(Entity entity : player.getNearbyEntities(range, range, range)) { + if(entity.getType() != EntityType.PLAYER) continue; + Player target = (Player)entity; + if(target.getGameMode() != GameMode.ADVENTURE) continue; + int distance = (int)player.getLocation().distance(target.getLocation()); + nearbySet.put(target.getDisplayName(), distance); + } + List<String> nearbyFormatted = nearbySet.keySet().stream().map(set -> set + " &f(&c" + nearbySet.get(set) + "b&f)").collect(Collectors.toList()); + if(nearbyFormatted.isEmpty()) { + player.sendMessage(Lang.GTM.f("&7No nearby players found.")); + } else { + String message = StringUtils.join(nearbyFormatted, ", "); + player.sendMessage(Lang.GTM.f("&7Players nearby:" + message)); + } + return true; + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/PayCommand.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/PayCommand.java new file mode 100644 index 0000000..7a7eb73 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/PayCommand.java @@ -0,0 +1,75 @@ +package net.grandtheftmc.gtm.commands; + +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.GTMUtils; +import net.grandtheftmc.gtm.users.GTMUser; + +public class PayCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command c, String l, String[] args) { + if (!(s instanceof Player)) { + s.sendMessage(Lang.NOTPLAYER.toString()); + return true; + } + if (args.length != 2) { + s.sendMessage(Utils.f("&c/pay <player> <amount>")); + return true; + } + + if (!GTM.getSettings().isPayCommand()){ + s.sendMessage(Utils.f("&cPay is currently disabled!")); + return true; + } + + Player player = (Player) s; + GTMUser user = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + double amnt; + try { + amnt = Utils.round(Double.parseDouble(args[1])); + } catch (NumberFormatException e) { + s.sendMessage(Utils.f(Lang.MONEY + "&7The amount must be a number!")); + return true; + } + if (amnt <= 0) { + s.sendMessage(Lang.MONEY.f("&7The amount must be greater than 0!")); + return true; + } + if (!user.hasMoney(amnt)) { + s.sendMessage(Utils.f(Lang.MONEY + "&7You don't have &c$&l" + amnt + "&7!")); + return true; + } + if (amnt % 1 != 0) { + s.sendMessage(Utils.f(Lang.MONEY + "&7Whole numbers only! No pennies.")); + return true; + } + Player target = Bukkit.getPlayer(args[0]); + if (target == null) { + s.sendMessage(Utils.f(Lang.MONEY + "&7That player is not online!")); + return true; + } + GTMUser targetUser = GTM.getUserManager().getLoadedUser(target.getUniqueId()); + User u = Core.getUserManager().getLoadedUser(player.getUniqueId()); + User tu = Core.getUserManager().getLoadedUser(target.getUniqueId()); + user.takeMoney(amnt); + targetUser.addMoney(amnt); + GTMUtils.updateBoard(player, u, user); + GTMUtils.updateBoard(target, tu, targetUser); + player.sendMessage(Utils.f(Lang.MONEY + "&7You sent &a$&l" + amnt + "&7 to " + tu.getColoredName(target) + "&7!")); + target.sendMessage(Utils.f(Lang.MONEY + "&7You received &a$&l" + amnt + "&7 from " + u.getColoredName(player) + "&7!")); + if (amnt > 100000) + GTMUtils.moneylog(player, target, amnt); + return true; + } + +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/PermitsCommand.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/PermitsCommand.java new file mode 100644 index 0000000..813764e --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/PermitsCommand.java @@ -0,0 +1,367 @@ +package net.grandtheftmc.gtm.commands; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.UUID; + +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.currency.Currency; +import net.grandtheftmc.core.database.BaseDatabase; +import net.grandtheftmc.core.database.dao.CurrencyDAO; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserDAO; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.users.GTMUser; + +public class PermitsCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command cmd, String label, String[] args) { + if (s instanceof Player && !s.hasPermission("command.permits")) { + Player player = (Player) s; + GTMUser user = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + player.sendMessage(Utils.f("&aYou have &c" + user.getPermits() + " &apermits")); + return true; + } + if (args.length == 0) { + s.sendMessage(Utils.f("&c/permits <balance> name")); + s.sendMessage(Utils.f("&c/permits <set/give/take> <name> <amnt>")); + return true; + } + switch (args[0].toLowerCase()) { + case "balance": { + if (args.length != 2) { + s.sendMessage(Utils.f("&c/houses permits <balance> name")); + return true; + } + Player player = Bukkit.getPlayerExact(args[1]); + if (player == null) { + UUID senderUUID = s instanceof Player ? ((Player) s).getUniqueId() : null; + s.sendMessage(Utils.f("&cThat player isn't online, so please wait while the permits are pulled from the database.")); + + ServerUtil.runTaskAsync(() -> { + int permits = 0; + + UUID uuid = UserDAO.getUuidByName(args[1]); + if (uuid == null) { + ServerUtil.runTask(() -> s.sendMessage(Utils.f("&cThis player wasn't found."))); + return; + } + + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + + permits = CurrencyDAO.getCurrency(connection, Currency.PERMIT.getServerKey(), uuid, Currency.PERMIT); + +// try (PreparedStatement statement = connection.prepareStatement("SELECT permits FROM " + Core.name() + " WHERE uuid=?;")) { +// statement.setString(1, uuid.toString()); +// try (ResultSet result = statement.executeQuery()) { +// if (result.next()) { +// permits = result.getInt("permits"); +// } +// } +// } + } catch (SQLException e) { + e.printStackTrace(); + } + + int finalPermits = permits; + ServerUtil.runTask(() -> { + if (senderUUID == null) { + Bukkit.getConsoleSender().sendMessage(args[1] + " has " + finalPermits + " Permits."); + } else { + Bukkit.getPlayer(senderUUID).sendMessage(Utils.f("&a " + args[1] + " has " + finalPermits + " Permits.")); + } + }); + }); + +// new BukkitRunnable() { +// @Override +// public void run() { +// ResultSet rs = Core.getSQL().query("select name,permits from " + Core.name() + " where name='" + args[1] + "';"); +// String name = null; +// int permits = 0; +// try { +// if (rs.next()) { +// name = rs.getString("name"); +// permits = rs.getInt("permits"); +// rs.close(); +// } else { +// rs.close(); +// return; +// } +// } catch (SQLException e) { +// e.printStackTrace(); +// } +// String finalName = name; +// int finalPermits = permits; +// new BukkitRunnable() { +// @Override +// public void run() { +// (senderUUID == null ? Bukkit.getConsoleSender() : Bukkit.getPlayer(senderUUID)).sendMessage(Utils.f("&a " + finalName + " has " + finalPermits + " Permits.")); +// } +// }.runTask(GTM.getInstance()); +// } +// }.runTaskAsynchronously(GTM.getInstance()); + return true; + } + GTMUser user = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + s.sendMessage(Utils.f("&a" + player.getName() + " has " + user.getPermits() + " Permits.")); + return true; + } + case "set": { + if (args.length != 3) { + s.sendMessage(Utils.f("&c/permits <set/give/take> <name> <amnt>")); + return true; + } + int amnt; + try { + amnt = Integer.parseInt(args[2]); + } catch (NumberFormatException e) { + s.sendMessage(Utils.f("&cThe amount must be a number!")); + return true; + } + if (amnt < 0) { + s.sendMessage(Utils.f("&cThe amount must be bigger than 0!")); + return true; + } + Player player = Bukkit.getPlayerExact(args[1]); + if (player == null) { + s.sendMessage(Utils.f("&cThat player isn't online, so hold on a second while the permits are forcibly updated in the database.")); + + ServerUtil.runTaskAsync(() -> { + UUID uuid = UserDAO.getUuidByName(args[1]); + if (uuid == null) { + ServerUtil.runTask(() -> s.sendMessage(Utils.f("&cThis player wasn't found."))); + return; + } + + try (Connection conn = BaseDatabase.getInstance().getConnection()){ + CurrencyDAO.saveCurrency(conn, Currency.PERMIT.getServerKey(), uuid, Currency.PERMIT, amnt); + } + catch(Exception e){ + e.printStackTrace(); + } + + //BaseDatabase.runCustomQuery("update " + Core.name() + " set permits=" + amnt + " where uuid='" + uuid.toString() + "';"); + Utils.insertLog(uuid, args[1], "setPermitsCommand", "PERMITS", amnt + " Permits", amnt, 0); + }); + +// Core.getSQL().updateAsyncLater("update " + Core.name() + " set permits=" + amnt + " where name='" + args[1] + "';"); +// new BukkitRunnable() { +// @Override +// public void run() { +// ResultSet rs = Core.getSQL().query("select uuid,lastname from users where lastname='" + args[1] + "';"); +// UUID uuid = null; +// String name = args[1]; +// try { +// if (rs.next()) { +// uuid = UUID.fromString(rs.getString("uuid")); +// name = rs.getString("lastname"); +// } +// rs.close(); +// } catch (SQLException e) { +// e.printStackTrace(); +// } +// if (uuid == null) { +// Core.log("Error while logging setPermitsCommand for uuid " + uuid + ", name " + name + ", amnt " + amnt); +// } else +// Utils.insertLog(uuid, name, "setPermitsCommand", "PERMITS", amnt + " Permits", amnt, 0); +// +// } +// }.runTaskAsynchronously(Core.getInstance()); + return true; + } + GTMUser user = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + user.setPermits(amnt); + User u = Core.getUserManager().getLoadedUser(player.getUniqueId()); + u.insertLog(player, "setPermitsCommand", "PERMITS", amnt + " Permits", amnt, 0); + s.sendMessage(Utils.f("&a" + player.getName() + " now has " + user.getPermits() + " permits!")); + return true; + } + case "give": { + if (args.length != 3) { + s.sendMessage(Utils.f("&c/houses permits <set/give/take> <name> <amnt>")); + return true; + } + int amnt; + try { + amnt = Integer.parseInt(args[2]); + } catch (NumberFormatException e) { + s.sendMessage(Utils.f("&cThe amount must be a number!")); + return true; + } + if (amnt < 0) { + s.sendMessage(Utils.f("&cThe amount must be bigger than 0!")); + return true; + } + Player player = Bukkit.getPlayerExact(args[1]); + if (player == null) { + s.sendMessage(Utils.f("&cThat player isn't online, so hold on a second while the permits are forcibly updated in the database.")); + + ServerUtil.runTaskAsync(() -> { + UUID uuid = UserDAO.getUuidByName(args[1]); + if (uuid == null) { + ServerUtil.runTask(() -> s.sendMessage(Utils.f("&cThis player wasn't found."))); + return; + } + + try (Connection conn = BaseDatabase.getInstance().getConnection()){ + CurrencyDAO.addCurrency(conn, Currency.PERMIT.getServerKey(), uuid, Currency.PERMIT, amnt); + } + catch(Exception e){ + e.printStackTrace(); + } + +// BaseDatabase.runCustomQuery("update " + Core.name() + " set permits=permits+" + amnt + " where uuid='" + uuid.toString() + "';"); + +// UUID uuid = null; +// String name = args[1]; +// +// try (Connection connection = BaseDatabase.getInstance().getConnection()) { +// try (PreparedStatement statement = connection.prepareStatement("select uuid,lastname from users where lastname='" + args[1] + "';")) { +// try (ResultSet result = statement.executeQuery()) { +// if (result.next()) { +// uuid = UUID.fromString(result.getString("uuid")); +// name = result.getString("lastname"); +// } +// } +// } +// } catch (SQLException e) { +// e.printStackTrace(); +// } + + Utils.insertLog(uuid, args[1], "givePermitsCommand", "PERMITS", amnt + " Permits", amnt, 0); + }); + +// Core.getSQL().updateAsyncLater("update " + Core.name() + " set permits=permits+" + amnt + " where name='" + args[1] + "';"); +// new BukkitRunnable() { +// @Override +// public void run() { +// ResultSet rs = Core.getSQL().query("select uuid,lastname from users where lastname='" + args[1] + "';"); +// UUID uuid = null; +// String name = args[1]; +// try { +// if (rs.next()) { +// uuid = UUID.fromString(rs.getString("uuid")); +// name = rs.getString("lastname"); +// } +// rs.close(); +// } catch (SQLException e) { +// e.printStackTrace(); +// } +// if (uuid == null) { +// Core.log("Error while logging givePermitsCommand for uuid " + uuid + ", name " + name + ", amnt " + amnt); +// } else +// Utils.insertLog(uuid, name, "givePermitsCommand", "PERMITS", amnt + " Permits", amnt, 0); +// +// } +// }.runTaskAsynchronously(Core.getInstance()); + return true; + } + GTMUser user = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + user.addPermits(amnt); + User u = Core.getUserManager().getLoadedUser(player.getUniqueId()); + u.insertLog(player, "givePermitsCommand", "PERMITS", amnt + " Permits", amnt, 0); + s.sendMessage(Utils.f("&a" + player.getName() + " now has " + user.getPermits() + " permits!")); + + return true; + } + case "take": + if (args.length != 3) { + s.sendMessage(Utils.f("&c/houses permits <set/give/take> <name> <amnt>")); + return true; + } + int amnt; + try { + amnt = Integer.parseInt(args[2]); + } catch (NumberFormatException e) { + s.sendMessage(Utils.f("&cThe amount must be a number!")); + return true; + } + if (amnt < 0) { + s.sendMessage(Utils.f("&cThe amount must be bigger than 0!")); + return true; + } + Player player = Bukkit.getPlayerExact(args[1]); + if (player == null) { + s.sendMessage(Utils.f("&cThat player isn't online, so hold on a second while the permits are forcibly updated in the database.")); + + ServerUtil.runTaskAsync(() -> { + UUID uuid = UserDAO.getUuidByName(args[1]); + if (uuid == null) { + ServerUtil.runTask(() -> s.sendMessage(Utils.f("&cThis player wasn't found."))); + return; + } + + try (Connection conn = BaseDatabase.getInstance().getConnection()){ + CurrencyDAO.addCurrency(conn, Currency.PERMIT.getServerKey(), uuid, Currency.PERMIT, -1 * amnt); + } + catch(Exception e){ + e.printStackTrace(); + } + +// BaseDatabase.runCustomQuery("update " + Core.name() + " set permits=permits-" + amnt + " where uuid='" + uuid.toString() + "';"); + +// UUID uuid = null; +// String name = args[1]; +// +// try (Connection connection = BaseDatabase.getInstance().getConnection()) { +// try (PreparedStatement statement = connection.prepareStatement("select uuid,lastname from users where lastname='" + args[1] + "';")) { +// try (ResultSet result = statement.executeQuery()) { +// if (result.next()) { +// uuid = UUID.fromString(result.getString("uuid")); +// name = result.getString("lastname"); +// } +// } +// } +// } catch (SQLException e) { +// e.printStackTrace(); +// } + + Utils.insertLog(uuid, args[1], "takePermitsCommand", "PERMITS", -amnt + " Permits", -amnt, 0); + }); + +// Core.getSQL().updateAsyncLater("update " + Core.name() + " set permits=permits-" + amnt + " where name='" + args[1] + "';"); +// new BukkitRunnable() { +// @Override +// public void run() { +// ResultSet rs = Core.getSQL().query("select uuid,lastname from users where lastname='" + args[1] + "';"); +// UUID uuid = null; +// String name = args[1]; +// try { +// if (rs.next()) { +// uuid = UUID.fromString(rs.getString("uuid")); +// name = rs.getString("lastname"); +// } +// rs.close(); +// } catch (SQLException e) { +// e.printStackTrace(); +// } +// if (uuid == null) { +// Core.log("Error while logging takePermitsCommand for uuid " + uuid + ", name " + name + ", amnt " + -amnt); +// } else +// Utils.insertLog(uuid, name, "takePermitsCommand", "PERMITS", -amnt + " Permits", -amnt, 0); +// +// } +// }.runTaskAsynchronously(Core.getInstance()); + return true; + } + + GTMUser user = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + user.takePermits(amnt); + User u = Core.getUserManager().getLoadedUser(player.getUniqueId()); + u.insertLog(player, "takePermitsCommand", "PERMITS", amnt + " Permits", -amnt, 0); + s.sendMessage(Utils.f("&a" + player.getName() + " now has " + user.getPermits() + " permits!")); + return true; + } + return true; + } +} \ No newline at end of file diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/PickerCommand.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/PickerCommand.java new file mode 100644 index 0000000..5a4b6dc --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/PickerCommand.java @@ -0,0 +1,206 @@ +package net.grandtheftmc.gtm.commands; + +import com.j0ach1mmall3.jlib.inventory.JLibItem; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.items.Kit; +import net.grandtheftmc.gtm.users.JobMode; +import org.bukkit.Color; +import org.bukkit.Material; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.ArmorStand; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.metadata.FixedMetadataValue; + +public class PickerCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command c, String lbl, String[] args) { + if (!s.hasPermission("picker.use")) { + s.sendMessage(Lang.NOPERM.toString()); + return true; + } + if (!(s instanceof Player)) { + s.sendMessage(Utils.f(Lang.GTM + "&cYou are not a player!")); + return true; + } + Player player = (Player) s; + if (args.length == 0) { + s.sendMessage(Utils.f("&c/picker mode <jobMode>")); + s.sendMessage(Utils.f("&c/picker mechanic")); + s.sendMessage(Utils.f("&c/picker cabdriver")); + s.sendMessage(Utils.f("&c/picker warden")); + s.sendMessage(Utils.f("&c/picker heads")); + s.sendMessage(Utils.f("&c/picker dealer")); + s.sendMessage(Utils.f("&c/picker weapondealer")); + s.sendMessage(Utils.f("&c/picker coinvendor")); + + + return true; + } + switch (args[0].toLowerCase()) { + case "coinvendor": { + ArmorStand armorStand = (ArmorStand) player.getWorld().spawnEntity(player.getLocation(), EntityType.ARMOR_STAND); + armorStand.setHelmet(new JLibItem.Builder().withType(Material.LEATHER_HELMET).withColor(Color.YELLOW).build().getItemStack()); + armorStand.setLeggings(GTM.getItemManager().getItem("pants").getItem()); + armorStand.setCustomName(Utils.f("&e&lCoin Vendor")); + armorStand.setCustomNameVisible(true); + armorStand.setAI(false); + armorStand.setCollidable(false); + armorStand.setCanPickupItems(true); + armorStand.setGravity(false); + armorStand.setRemoveWhenFarAway(false); + armorStand.setBasePlate(false); + armorStand.setArms(true); + s.sendMessage(Lang.CASINO.f("&7You created a coin vendor!")); + return true; + } + case "weapondealer": { + ArmorStand armorStand = (ArmorStand) player.getWorld().spawnEntity(player.getLocation(), EntityType.ARMOR_STAND); + armorStand.setHelmet(new JLibItem.Builder().withType(Material.LEATHER_HELMET).withColor(Color.BLACK).build().getItemStack()); + armorStand.setChestplate(GTM.getItemManager().getItem("ceramicvest").getItem()); + armorStand.setLeggings(GTM.getItemManager().getItem("pants").getItem()); + armorStand.setBoots(GTM.getItemManager().getItem("nikes").getItem()); + armorStand.setItemInHand(GTM.getItemManager().getItem("chainsaw").getItem()); + armorStand.setCustomName(Utils.f("&e&lArms Dealer")); + armorStand.setCustomNameVisible(true); + armorStand.setAI(false); + armorStand.setCollidable(false); + armorStand.setCanPickupItems(true); + armorStand.setGravity(false); + armorStand.setRemoveWhenFarAway(false); + armorStand.setBasePlate(false); + armorStand.setArms(true); + s.sendMessage(Lang.HEAD_AUCTION.f("&7You created an Arms Dealer!")); + return true; + } + case "heads": { + ArmorStand armorStand = (ArmorStand) player.getWorld().spawnEntity(player.getLocation(), + EntityType.ARMOR_STAND); + armorStand.setHelmet(new JLibItem.Builder().withType(Material.LEATHER_HELMET).withColor(Color.GREEN).build().getItemStack()); + armorStand.setChestplate(GTM.getItemManager().getItem("kevlarvest").getItem()); + armorStand.setLeggings(GTM.getItemManager().getItem("pants").getItem()); + armorStand.setBoots(GTM.getItemManager().getItem("nikes").getItem()); + armorStand.setItemInHand(new JLibItem.Builder().withType(Material.SKULL_ITEM).withDurability((short) 3).withOwner("Samuri629").build().getItemStack()); + armorStand.setCustomName(Utils.f("&e&lHead Salesman")); + armorStand.setCustomNameVisible(true); + armorStand.setAI(false); + armorStand.setCollidable(false); + armorStand.setCanPickupItems(true); + armorStand.setGravity(false); + armorStand.setRemoveWhenFarAway(false); + armorStand.setBasePlate(false); + armorStand.setArms(true); + s.sendMessage(Lang.HEAD_AUCTION.f("&7You created a Head Salesman!")); + return true; + } + case "mode": { + JobMode mode = JobMode.getModeOrNull(args[1]); + if (mode == null) { + s.sendMessage(Lang.JOBS.f("&7That Job Mode does not exist!")); + return true; + } + Kit kit = GTM.getItemManager().getKit(mode.getName()); + if (kit == null) { + s.sendMessage(Lang.KITS.f("&7That Kit does not exist!")); + return true; + } + ArmorStand armorStand = (ArmorStand) player.getWorld().spawnEntity(player.getLocation(), + EntityType.ARMOR_STAND); + if (kit.getHelmet() != null) + armorStand.setHelmet(kit.getHelmet().getItem().getItem()); + if (kit.getChestPlate() != null) + armorStand.setChestplate(kit.getChestPlate().getItem().getItem()); + if (kit.getLeggings() != null) + armorStand.setLeggings(kit.getLeggings().getItem().getItem()); + if (kit.getBoots() != null) + armorStand.setBoots(kit.getBoots().getItem().getItem()); + if (kit.getOffHand() != null) + armorStand.setItemInHand(kit.getOffHand().getItem().getItem()); + armorStand.setCustomName(mode.getColoredNameBold()); + armorStand.setCustomNameVisible(true); + armorStand.setAI(false); + armorStand.setCollidable(false); + armorStand.setCanPickupItems(true); + armorStand.setGravity(false); + armorStand.setRemoveWhenFarAway(false); + armorStand.setBasePlate(false); + armorStand.setArms(true); + s.sendMessage(Lang.KITS.f("&7You created a Mode Picker for Job Mode " + mode.getColoredNameBold() + + "&7!")); + return true; + } + case "mechanic": { + ArmorStand armorStand = (ArmorStand) player.getWorld().spawnEntity(player.getLocation(), + EntityType.ARMOR_STAND); + armorStand.setHelmet(new JLibItem.Builder().withType(Material.LEATHER_HELMET).withColor(Color.fromRGB(165, 42, 42)).build().getItemStack()); + armorStand.setChestplate(GTM.getItemManager().getItem("shirt").getItem()); + armorStand.setLeggings(GTM.getItemManager().getItem("pants").getItem()); + armorStand.setBoots(GTM.getItemManager().getItem("nikes").getItem()); + armorStand.setItemInHand(new ItemStack(Material.WORKBENCH)); + armorStand.setCustomName(Utils.f("&4&lMechanic")); + armorStand.setCustomNameVisible(true); + armorStand.setAI(false); + armorStand.setCollidable(false); + armorStand.setCanPickupItems(true); + armorStand.setGravity(false); + armorStand.setRemoveWhenFarAway(false); + armorStand.setBasePlate(false); + armorStand.setArms(true); + s.sendMessage(Lang.VEHICLES.f("&7You created a Mechanic!")); + return true; + } + case "cabdriver": { + ArmorStand armorStand = (ArmorStand) player.getWorld().spawnEntity(player.getLocation(), + EntityType.ARMOR_STAND); + armorStand.setHelmet(new JLibItem.Builder().withType(Material.LEATHER_HELMET).withColor(Color.YELLOW).build().getItemStack()); + armorStand.setChestplate(GTM.getItemManager().getItem("shirt").getItem()); + armorStand.setLeggings(GTM.getItemManager().getItem("pants").getItem()); + armorStand.setBoots(GTM.getItemManager().getItem("nikes").getItem()); + armorStand.setItemInHand(new ItemStack(Material.WATCH)); + armorStand.setCustomName(Utils.f("&e&lCab Driver")); + armorStand.setCustomNameVisible(true); + armorStand.setAI(false); + armorStand.setCollidable(false); + armorStand.setCanPickupItems(true); + armorStand.setGravity(false); + armorStand.setRemoveWhenFarAway(false); + armorStand.setBasePlate(false); + armorStand.setArms(true); + s.sendMessage(Lang.VEHICLES.f("&7You created a Cab Driver!")); + return true; + } + case "warden": + ArmorStand armorStand = (ArmorStand) player.getWorld().spawnEntity(player.getLocation(), + EntityType.ARMOR_STAND); + armorStand.setHelmet(new JLibItem.Builder().withType(Material.LEATHER_HELMET).withColor(Color.BLACK).build().getItemStack()); + armorStand.setChestplate(GTM.getItemManager().getItem("kevlarvest").getItem()); + armorStand.setLeggings(GTM.getItemManager().getItem("pants").getItem()); + armorStand.setBoots(GTM.getItemManager().getItem("nikes").getItem()); + armorStand.setItemInHand(GTM.getItemManager().getItem("nightstick").getItem()); + armorStand.setCustomName(Utils.f("&c&lWarden")); + armorStand.setCustomNameVisible(true); + armorStand.setAI(false); + armorStand.setCollidable(false); + armorStand.setCanPickupItems(true); + armorStand.setGravity(false); + armorStand.setRemoveWhenFarAway(false); + armorStand.setBasePlate(false); + armorStand.setArms(true); + s.sendMessage(Lang.VEHICLES.f("&7You created a Warden!")); + return true; + default: + s.sendMessage(Utils.f("&c/picker mode <jobMode>")); + s.sendMessage(Utils.f("&c/picker mechanic")); + s.sendMessage(Utils.f("&c/picker cabdriver")); + s.sendMessage(Utils.f("&c/picker warden")); + s.sendMessage(Utils.f("&c/picker dealer")); + return true; + } + } +} \ No newline at end of file diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/RankupCommand.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/RankupCommand.java new file mode 100644 index 0000000..43a5217 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/RankupCommand.java @@ -0,0 +1,50 @@ +package net.grandtheftmc.gtm.commands; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.users.GTMRank; +import net.grandtheftmc.gtm.users.GTMUser; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class RankupCommand implements CommandExecutor { + @Override + public boolean onCommand(CommandSender s, Command c, String l, String[] args) { + if (!(s instanceof Player)) { + s.sendMessage(Lang.NOTPLAYER.toString()); + return true; + } + Player player = (Player) s; + GTMUser user = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + User u = Core.getUserManager().getLoadedUser(player.getUniqueId()); + if (user.isArrested()) { + player.sendMessage(Lang.JAIL.f("&7You can't rank up in jail!")); + return true; + } + if (args.length == 1 && "confirm".equalsIgnoreCase(args[0])) { + user.rankup(player, u); + return true; + } + GTMRank nextRank = user.getRank().getNext(); + if (nextRank == null) { + player.sendMessage(Utils.f(Lang.RANKUP + "&7You can't rank up any more!")); + return true; + } + int price = nextRank.getPrice(); + + if (!user.hasMoney(price)) { + player.sendMessage(Utils.f(Lang.RANKUP + "&7You don't have the &c$&l" + price + "&7 required to rank up!")); + return true; + } + player.sendMessage(Utils.f(Lang.RANKUP + "&7Ranking up to " + nextRank.getColoredNameBold() + "&7 costs &a$&l" + price + "&7.")); + player.sendMessage(Utils.f(Lang.RANKUP + "&7Type &a/rankup confirm&7 to rank up!")); + return true; + } + +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/ResetCommand.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/ResetCommand.java new file mode 100644 index 0000000..97e7953 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/ResetCommand.java @@ -0,0 +1,280 @@ +package net.grandtheftmc.gtm.commands; + +import java.io.File; +import java.util.UUID; + +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.j0ach1mmall3.wastedvehicles.api.VehicleProperties; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.database.BaseDatabase; +import net.grandtheftmc.core.users.UserDAO; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.gang.Gang; +import net.grandtheftmc.gtm.gang.GangManager; +import net.grandtheftmc.gtm.items.AmmoType; +import net.grandtheftmc.houses.Houses; +import net.grandtheftmc.houses.houses.PremiumHouse; + +public class ResetCommand implements CommandExecutor { + + + @Override + public boolean onCommand(CommandSender s, Command c, String lbl, String[] args) { + if (!s.isOp()) { + s.sendMessage(Lang.NOPERM.s()); + return true; + } + if (args.length < 2) { + s.sendMessage(Utils.f("&c/reset&7 [player] [category/all] <server>")); + s.sendMessage(Utils.f("&7Categories: tokens, bucks, votes, dailyStreak," + + " lastDonorReward, cosmetics, rank (GTMRank), money, bank, killCounter, permits," + + " jobMode, backpack, kitExpiries, houses, premiumHouses, gang, jail, ammo, vehicles, inventory (includes echest), eventTag")); + return true; + } + if (args.length > 3) { + return true; + } + String name = args[0]; + Player target = Bukkit.getPlayer(name); + UUID uuid = null; + if (target != null) { + name = target.getName(); + uuid = target.getUniqueId(); + target.kickPlayer("You are being reset by an admin."); + } + String server = Core.name(); + if (args.length == 3) { + if (Core.getServerManager().getServer(args[2]) != null) { + server = args[2]; + } + } + + String finalName = name; + UUID finalUniqueId = uuid; + String finalServer = server; + + if ("all".equalsIgnoreCase(args[1])) { + ServerUtil.runTaskAsync(() -> { + UUID value = UserDAO.getUuidByName(finalName); + + try { + File file = new File(Bukkit.getWorldContainer() + "/" + Bukkit.getWorlds().get(0).getName() + "/playerdata/" + value.toString()); + if (file.exists()) file.delete(); + } catch (Exception e) { + e.printStackTrace(); + } + BaseDatabase.runCustomQuery("delete from user_tag where uuid=UNHEX('" + value.toString().replaceAll("-", "") + "');"); + + BaseDatabase.runCustomQuery("update users set tokens=0, bucks=0, votes=0, voteStreak=0, lastVoteStreak=0, dailyStreak=0, lastDailyReward=0, lastDonorReward=0 where uuid='" + value.toString() + "';"); +// BaseDatabase.runCustomQuery("delete from cosmetics where uuid='" + value.toString() + "';"); NOT NEEDED. + BaseDatabase.runCustomQuery("delete from " + finalServer + " where uuid=UNHEX('" + value.toString().replaceAll("-", "") + "');"); +// BaseDatabase.runCustomQuery("delete from " + finalServer + "_gangs where leaderName='" + finalName + "';"); TODO DELETE GANG +// BaseDatabase.runCustomQuery("delete from " + finalServer + "_houses where uuid='" + finalName + "';"); TODO DELETE HOUSE + BaseDatabase.runCustomQuery("update " + finalServer + " set backpackContents=NULL where uuid=UNHEX('" + value.toString().replaceAll("-", "") + "');"); + + ServerUtil.runTask(() -> { + for (PremiumHouse house : Houses.getHousesManager().getPremiumHouses()) { + if (house.getOwner() != null && house.getOwnerName().equalsIgnoreCase(finalName)) { + house.removeOwner(true); + } + } + + for (Gang gang : GangManager.getInstance().getGangs()) { + if (gang.getOwnerName() != null && gang.getOwnerName().equalsIgnoreCase(finalName)) { +// gang.disbandConfirm(); TODO FORCE DELETE. + } + } + + s.sendMessage(Utils.f("&7You fully reset player &a" + finalName + "&7!")); + }); + }); + return true; + } + + switch (args[1].toLowerCase()) { + case "eventtag": { + ServerUtil.runTaskAsync(() -> { + UUID value = UserDAO.getUuidByName(finalName); + BaseDatabase.runCustomQuery("delete from user_tag where uuid=UNHEX('" + value.toString().replaceAll("-", "") + "');"); + }); + s.sendMessage(Utils.f("&7You reset player &a" + name + "&7 for category &a" + args[1] + "&7!")); + return true; + } + case "inventory": + ServerUtil.runTaskAsync(() -> { + if (finalUniqueId == null) { + UUID value = UserDAO.getUuidByName(finalName); + if (value != null) { + File file = new File(Bukkit.getWorldContainer() + "/" + Bukkit.getWorlds().get(0).getName() + "/playerdata/" + value.toString()); + if (file.exists()) file.delete(); + } + } + else { + File file = new File(Bukkit.getWorldContainer() + "/" + Bukkit.getWorlds().get(0).getName() + "/playerdata/" + finalUniqueId.toString()); + if (file.exists()) file.delete(); + } + }); + s.sendMessage(Utils.f("&7You reset player &a" + name + "&7 for category &a" + args[1] + "&7!")); + return true; + case "tokens": +// Core.sql.updateAsyncLater("update users set tokens=0 where lastname='" + name + "';"); + ServerUtil.runTaskAsync(() -> BaseDatabase.runCustomQuery("update users set tokens=0 where lastname='" + finalName + "';")); + s.sendMessage(Utils.f("&7You reset player &a" + name + "&7 for category &a" + args[1] + "&7!")); + return true; + case "bucks": +// Core.sql.updateAsyncLater("update users set bucks=0 where lastname='" + name + "';"); + ServerUtil.runTaskAsync(() -> BaseDatabase.runCustomQuery("update users set bucks=0 where lastname='" + finalName + "';")); + s.sendMessage(Utils.f("&7You reset player &a" + name + "&7 for category &a" + args[1] + "&7!")); + return true; + case "votes": +// Core.sql.updateAsyncLater("update users set votes=0, voteStreak=0, lastVoteStreak=0 where lastname='" + name + "';"); + ServerUtil.runTaskAsync(() -> BaseDatabase.runCustomQuery("update users set votes=0, voteStreak=0, lastVoteStreak=0 where lastname='" + finalName + "';")); + s.sendMessage(Utils.f("&7You reset player &a" + name + "&7 for category &a" + args[1] + "&7!")); + return true; + case "dailystreak": +// Core.sql.updateAsyncLater("update users set dailyStreak=0, lastDailyReward=0 where lastname='" + name + "';"); + ServerUtil.runTaskAsync(() -> BaseDatabase.runCustomQuery("update users set dailyStreak=0, lastDailyReward=0 where lastname='" + finalName + "';")); + s.sendMessage(Utils.f("&7You reset player &a" + name + "&7 for category &a" + args[1] + "&7!")); + return true; + case "lastdonorreward": +// Core.sql.updateAsyncLater("update users set lastDonorReward=0 where lastname='" + name + "';"); + ServerUtil.runTaskAsync(() -> BaseDatabase.runCustomQuery("update users set lastDonorReward=0 where lastname='" + finalName + "';")); + s.sendMessage(Utils.f("&7You reset player &a" + name + "&7 for category &a" + args[1] + "&7!")); + return true; + case "cosmetics": +// Core.sql.updateAsyncLater("delete from cosmetics where name='" + name + "';"); + ServerUtil.runTaskAsync(() -> BaseDatabase.runCustomQuery("delete from cosmetics where name='" + finalName + "';")); + s.sendMessage(Utils.f("&7You reset player &a" + name + "&7 for category &a" + args[1] + "&7!")); + return true; + case "rank": +// Core.sql.updateAsyncLater("update " + server + " set rank='HOBO' where name='" + name + "';"); + ServerUtil.runTaskAsync(() -> BaseDatabase.runCustomQuery("update " + finalServer + " set rank='HOBO' where name='" + finalName + "';")); + s.sendMessage(Utils.f("&7You reset player &a" + name + "&7 for category &a" + args[1] + "&7!")); + return true; + case "money": +// Core.sql.updateAsyncLater("update " + server + " set money=0 where name='" + name + "';"); + ServerUtil.runTaskAsync(() -> BaseDatabase.runCustomQuery("update " + finalServer + " set money=0 where name='" + finalName + "';")); + s.sendMessage(Utils.f("&7You reset player &a" + name + "&7 for category &a" + args[1] + "&7!")); + return true; + case "bank": +// Core.sql.updateAsyncLater("update " + server + " set bank=0 where name='" + name + "';"); + ServerUtil.runTaskAsync(() -> BaseDatabase.runCustomQuery("update " + finalServer + " set bank=0 where name='" + finalName + "';")); + s.sendMessage(Utils.f("&7You reset player &a" + name + "&7 for category &a" + args[1] + "&7!")); + return true; + case "killCounter": +// Core.sql.updateAsyncLater("update " + server + " set killCounter=0 where name='" + name + "';"); + ServerUtil.runTaskAsync(() -> BaseDatabase.runCustomQuery("update " + finalServer + " set killCounter=0 where name='" + finalName + "';")); + s.sendMessage(Utils.f("&7You reset player &a" + name + "&7 for category &a" + args[1] + "&7!")); + return true; + case "permits": +// Core.sql.updateAsyncLater("update " + server + " set permits=0 where name='" + name + "';"); + ServerUtil.runTaskAsync(() -> BaseDatabase.runCustomQuery("update " + finalServer + " set permits=0 where name='" + finalName + "';")); + s.sendMessage(Utils.f("&7You reset player &a" + name + "&7 for category &a" + args[1] + "&7!")); + return true; + case "jobmode": +// Core.sql.updateAsyncLater("update " + server + " set jobMode='CRIMINAL', lastJobMode=0 where name='" + name + "';"); + ServerUtil.runTaskAsync(() -> BaseDatabase.runCustomQuery("update " + finalServer + " set jobMode='CRIMINAL', lastJobMode=0 where name='" + finalName + "';")); + s.sendMessage(Utils.f("&7You reset player &a" + name + "&7 for category &a" + args[1] + "&7!")); + return true; + case "backpack": +// Core.sql.updateAsyncLater("update " + server + " set backpackContents=NULL where name='" + name + "';"); + ServerUtil.runTaskAsync(() -> BaseDatabase.runCustomQuery("update " + finalServer + " set backpackContents=NULL where name='" + finalName + "';")); + s.sendMessage(Utils.f("&7You reset player &a" + name + "&7 for category &a" + args[1] + "&7!")); + return true; + case "kitexpiries": +// Core.sql.updateAsyncLater("update " + server + " set kitExpiries=null where name='" + name + "';"); + ServerUtil.runTaskAsync(() -> BaseDatabase.runCustomQuery("update " + finalServer + " set kitExpiries=null where name='" + finalName + "';")); + s.sendMessage(Utils.f("&7You reset player &a" + name + "&7 for category &a" + args[1] + "&7!")); + return true; + case "houses": +// Core.sql.updateAsyncLater("delete from " + server + " where name='" + name + "';"); +// Core.sql.updateAsyncLater("delete from " + server + "_houses where name='" + name + "';"); + ServerUtil.runTaskAsync(() -> { + BaseDatabase.runCustomQuery("delete from " + finalServer + " where name='" + finalName + "';"); + BaseDatabase.runCustomQuery("delete from " + finalServer + "_houses where name='" + finalName + "';"); + + UUID id = finalUniqueId == null ? UserDAO.getUuidByName(finalName) : finalUniqueId; + if(id != null) BaseDatabase.runCustomQuery("delete from " + finalServer + "_houses_chests where uuid='" + id + "';"); + }); +// if (uuid == null) { +// String finalName = name; +// new BukkitRunnable() { +// @Override +// public void run() { +// ResultSet rs = Core.sql.query("select uuid from users where lastname='" + finalName + "';"); +// UUID uuid = null; +// try { +// if (rs.next()) { +// uuid = UUID.fromString(rs.getString("uuid")); +// rs.close(); +// return; +// } +// rs.close(); +// } catch (SQLException e) { +// e.printStackTrace(); +// } +// } +// }.runTaskAsynchronously(GTM.getInstance()); +// } else { +// Core.sql.updateAsyncLater("delete from " + server + "_houses_chests where uuid='" + uuid + "';"); +// } + s.sendMessage(Utils.f("&7You reset player &a" + name + "&7 for category &a" + args[1] + "&7!")); + return true; + case "premiumhouses": + for (PremiumHouse house : Houses.getHousesManager().getPremiumHouses()) + if (house.getOwner() != null && house.getOwnerName().equalsIgnoreCase(name)) + house.removeOwner(true); + return true; + case "gang": +// Core.sql.updateAsyncLater("update " + server + " set gang=null, gangRank='member' where name='" + name + "';"); +// Core.sql.updateAsyncLater("delete from " + server + "_gangs where leaderName='" + name + "';"); + ServerUtil.runTaskAsync(() -> { + BaseDatabase.runCustomQuery("update " + finalServer + " set gang=null, gangRank='member' where name='" + finalName + "';"); + BaseDatabase.runCustomQuery("delete from " + finalServer + "_gangs where leaderName='" + finalName + "';"); + }); + s.sendMessage(Utils.f("&7You reset player &a" + name + "&7 for category &a" + args[1] + "&7!")); + return true; + case "jail": +// Core.sql.updateAsyncLater("update " + server + " set jailTimer=-1, jailCop=NULL, jailCopName=NULL where name='" + name + "';"); + ServerUtil.runTaskAsync(() -> BaseDatabase.runCustomQuery("update " + finalServer + " set jailTimer=-1, jailCop=NULL, jailCopName=NULL where name='" + finalName + "';")); + s.sendMessage(Utils.f("&7You reset player &a" + name + "&7 for category &a" + args[1] + "&7!")); + return true; + case "ammo": { + String st = ""; + for (AmmoType type : AmmoType.values()) + st += type.getGameItemName() + "=0, "; + if (st.endsWith(", ")) + st = st.substring(0, st.length() - 2); +// Core.sql.updateAsyncLater("update " + server + " set " + st + " where name='" + name + "';"); + String finalSt = st; + ServerUtil.runTaskAsync(() -> BaseDatabase.runCustomQuery("update " + finalServer + " set " + finalSt + " where name='" + finalName + "';")); + s.sendMessage(Utils.f("&7You reset player &a" + name + "&7 for category &a" + args[1] + "&7!")); + return true; + } + case "vehicles": + String st = "personalVehicle=NULL, "; + for (VehicleProperties v : GTM.getWastedVehicles().getBabies().getVehicleProperties()) + st += '`' + v.getIdentifier().toLowerCase() + "`=0, `" + v.getIdentifier().toLowerCase() + ":info`=NULL, "; +// Core.sql.updateAsyncLater("update " + server + " set " + st + " where name='" + name + "';"); + String finalSt = st; + ServerUtil.runTaskAsync(() -> BaseDatabase.runCustomQuery("update " + finalServer + " set " + finalSt + " where name='" + finalName + "';")); + s.sendMessage(Utils.f("&7You reset player &a" + name + "&7 for category &a" + args[1] + "&7!")); + return true; + default: + s.sendMessage(Utils.f("&c/reset&7 [player] [category/all] <server>")); + s.sendMessage(Utils.f("&7Categories: tokens, bucks, votes, dailyStreak," + + " lastDonorReward, rank (GTMRank), money, bank, killCounter, permits, jobMode, backpack, kitExpiries, houses, gang, jail, ammo, vehicles")); + return true; + } + + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/ResourcePackCommand.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/ResourcePackCommand.java new file mode 100644 index 0000000..e4dcea6 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/ResourcePackCommand.java @@ -0,0 +1,46 @@ +package net.grandtheftmc.gtm.commands; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.NMSVersion; +import net.grandtheftmc.gtm.GTM; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import us.myles.ViaVersion.api.Via; + +public class ResourcePackCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command c, String lbl, String[] args) { + if (!(s instanceof Player)) { + s.sendMessage(Lang.GTM.f("&cYou are not a player!")); + return true; + } + Player player = (Player) s; + NMSVersion version = NMSVersion.getVersion(player); + if(version== NMSVersion.MC_1_8) { + player.sendMessage(Lang.GTM.f("&4Your client version is not supported! Please use 1.9+")); + return false; + } + String url; +// if (version==NMSVersion.MC_1_12_1 || version == NMSVersion.MC_1_11_2 || version == NMSVersion.MC_1_12 || version == NMSVersion.MC_1_11) { +// player.setResourcePack(GTM.getSettings().getOneElevenRespack()); +// url = GTM.getSettings().getOneElevenRespack(); +// } else { +// player.setResourcePack(GTM.getSettings().getOneTenRespack()); +// url = GTM.getSettings().getOneTenRespack(); +// } + + if (version.getProtocol() >= NMSVersion.MC_1_11.getProtocol()) { + player.setResourcePack(GTM.getSettings().getOneElevenRespack()); + url = GTM.getSettings().getOneElevenRespack(); + } else { + player.setResourcePack(GTM.getSettings().getOneTenRespack()); + url = GTM.getSettings().getOneTenRespack(); + } + + player.sendMessage(Lang.GTM.f("&cYou can download the server resource pack here: &b" + url)); + return true; + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/SellCommand.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/SellCommand.java new file mode 100644 index 0000000..c3f7fa2 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/SellCommand.java @@ -0,0 +1,48 @@ +package net.grandtheftmc.gtm.commands; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Utils; +import net.grandtheftmc.core.commands.CoreCommand; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.util.C; +import net.grandtheftmc.core.util.State; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.trashcan.TrashCanManager; +import net.grandtheftmc.gtm.users.CheatCode; +import net.grandtheftmc.gtm.users.CheatCodeState; +import net.grandtheftmc.gtm.users.GTMUser; +import net.grandtheftmc.houses.Houses; +import net.grandtheftmc.houses.users.HouseUser; +import org.bukkit.entity.Player; + +public class SellCommand extends CoreCommand<Player> { + + public SellCommand() { + super("sell", "Quick sell, open a virtual trashcan", "qsell", "quicksell"); + } + + @Override + public void execute(Player sender, String[] strings) { + sender.closeInventory(); + User user = Core.getUserManager().getLoadedUser(sender.getUniqueId()); + GTMUser gtmUser = GTM.getUserManager().getLoadedUser(sender.getUniqueId()); + if (gtmUser.getCheatCodeState(CheatCode.QUICKSELL).getState() == State.LOCKED && !user.getUserRank().hasRank(UserRank.SUPREME)) { + sender.sendMessage(Utils.f("&cThis command requires the &7QuickSell Cheatcode&c or &lSUPREME&c!")); + return; + } + + if (sender.getWorld().getName().equals("spawn")) { + TrashCanManager.openTrashCan(sender); + return; + } + + HouseUser houseUser = Houses.getUserManager().getLoadedUser(sender.getUniqueId()); + if (houseUser != null && (houseUser.isInsideHouse() || houseUser.isInsidePremiumHouse())) { + TrashCanManager.openTrashCan(sender); + return; + } + + sender.sendMessage(C.RED + "You can only use this cheatcode in your House or at spawn."); + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/SetRarityCommand.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/SetRarityCommand.java new file mode 100644 index 0000000..2f0f0e5 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/SetRarityCommand.java @@ -0,0 +1,95 @@ +package net.grandtheftmc.gtm.commands; + +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Utils; +import net.grandtheftmc.core.commands.CoreCommand; +import net.grandtheftmc.core.commands.RankedCommand; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.items.GameItem; +import net.grandtheftmc.gtm.items.GameItem.ItemType; +import net.grandtheftmc.gtm.items.ItemManager; +import net.grandtheftmc.guns.GTMGuns; +import net.grandtheftmc.guns.weapon.Weapon; + +public class SetRarityCommand extends CoreCommand<CommandSender> implements RankedCommand { + public SetRarityCommand() { + super("setrarity", "Set the rarity of a weapon", "setstars", "setstar"); + } + + @Override + public void execute(CommandSender sender, String[] args) { + if(sender instanceof Player) { + Player player = (Player)sender; + if(!Core.getUserManager().getLoadedUser(player.getUniqueId()).getUserRank().isHigherThan(UserRank.ADMIN)) + return; + + // get item in main hand + ItemStack is = player.getInventory().getItemInMainHand(); + if (is == null){ + sender.sendMessage(ChatColor.RED + "Please put a weapon in hand to set the rarity for."); + return; + } + + if(args.length == 0){ + sender.sendMessage(Utils.f("&c/setrarity <rarity> - &7Sets the rarity level for the item in hand.")); + return; + } + + int rarity = 0; + try { + rarity = Integer.parseInt(args[0]); + } + catch(Exception e){ + sender.sendMessage(ChatColor.RED + "Please use a valid number to set the rarity of the item in hand to."); + e.printStackTrace(); + } + + // clamp bounds of rarity + if (rarity < 0){ + rarity = 0; + } + if (rarity > GTMGuns.MAX_STARS){ + rarity = GTMGuns.MAX_STARS; + } + + ItemManager im = GTM.getItemManager(); + GameItem gi = im.getItem(is); + if (gi == null){ + sender.sendMessage(ChatColor.RED + "Unable to find a game item similar to " + is.toString()); + return; + } + + if (gi.getType() != ItemType.WEAPON){ + sender.sendMessage(ChatColor.RED + "Cannot set rarity of this item, as it's not a weapon."); + return; + } + + Weapon weapon = GTMGuns.getInstance().getWeaponManager().getWeapon(is).orElse(null); + if (weapon == null){ + sender.sendMessage(ChatColor.RED + "Unable to find a weapon similar to " + is.toString()); + return; + } + + if (rarity == 0){ + player.getInventory().setItemInHand(weapon.createItemStack()); + } + else{ + player.getInventory().setItemInMainHand(weapon.createItemStack(rarity, null)); + } + } + else{ + sender.sendMessage(ChatColor.RED + "Player only command."); + } + } + + @Override + public UserRank requiredRank() { + return UserRank.ADMIN; + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/SettingsCommand.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/SettingsCommand.java new file mode 100644 index 0000000..a8e7e37 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/SettingsCommand.java @@ -0,0 +1,529 @@ +package net.grandtheftmc.gtm.commands; + +import java.util.Optional; + +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.commands.CoreCommand; +import net.grandtheftmc.core.commands.RankedCommand; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.gtm.GTM; + +public class SettingsCommand extends CoreCommand<CommandSender> implements RankedCommand { + + // declarations of all handled flags + enum SupportedSetting { + + // TODO add more flags here + PVP, TRANSFER, CHEATCODES, PAY, BANK_TO_BANK, BUY, TRADE, BOUNTY, BOUNTY_TAX, BOUNTY_TAX_PERCENT, KIT, + DEATH_TAX, DEATH_TAX_SCALED, DEATH_TAX_PERCENT, DEATH_TAX_MIN, DEATH_TAX_MAX; + + public static Optional<SupportedSetting> fromID(String id) { + for (SupportedSetting ss : values()) { + if (ss.name().equalsIgnoreCase(id)) { + return Optional.of(ss); + } + } + + return Optional.empty(); + } + } + + /** + * Create a new SettingsCommand. + * <p> + * This handles any types of variable flags that need to be set/read. + */ + public SettingsCommand() { + super("settings", "Change some settings", "conf"); + } + + @Override + public void execute(CommandSender sender, String[] args) { + if (sender instanceof Player) { + Player player = (Player) sender; + if (!Core.getUserManager().getLoadedUser(player.getUniqueId()).getUserRank().isHigherThan(UserRank.ADMIN)) + return; + } + + // must supply 2 args + if (args.length < 2) { + sendHelp(sender); + return; + } + + // parse first two variables + String command = args[0]; + SupportedSetting ss = SupportedSetting.fromID(args[1]).orElse(null); + + if (command == null || ss == null) { + sendHelp(sender); + return; + } + + switch (command.toLowerCase()) { + case "get": + handleGet(sender, command, ss); + break; + case "set": + if (args.length >= 3) { + handleSet(sender, command, ss, args); + } + else { + sender.sendMessage(ChatColor.RED + "Need to specify third argument for command 'set'."); + } + break; + } + } + + /** + * Handles the parsing of the get command. + * + * @param sender - the sender sending the command + * @param command - the command they want + * @param ss - the setting they want + */ + private void handleGet(CommandSender sender, String command, SupportedSetting ss) { + switch (ss) { + case PVP: + sender.sendMessage(ChatColor.RED + ss.name() + ChatColor.WHITE + "=" + ChatColor.GRAY + GTM.getSettings().isPvp()); + break; + case TRANSFER: + sender.sendMessage(ChatColor.RED + ss.name() + ChatColor.WHITE + "=" + ChatColor.GRAY + GTM.getSettings().isServerTransfer()); + break; + case CHEATCODES: + sender.sendMessage(ChatColor.RED + ss.name() + ChatColor.WHITE + "=" + ChatColor.GRAY + GTM.getSettings().isGlobalCheatcodes()); + break; + case PAY: + sender.sendMessage(ChatColor.RED + ss.name() + ChatColor.WHITE + "=" + ChatColor.GRAY + GTM.getSettings().isPayCommand()); + break; + case BANK_TO_BANK: + sender.sendMessage(ChatColor.RED + ss.name() + ChatColor.WHITE + "=" + ChatColor.GRAY + GTM.getSettings().isBankToBankTransfer()); + break; + case BUY: + sender.sendMessage(ChatColor.RED + ss.name() + ChatColor.WHITE + "=" + ChatColor.GRAY + GTM.getSettings().canBuy()); + break; + case TRADE: + sender.sendMessage(ChatColor.RED + ss.name() + ChatColor.WHITE + "=" + ChatColor.GRAY + GTM.getSettings().canTrade()); + break; + case BOUNTY: + sender.sendMessage(ChatColor.RED + ss.name() + ChatColor.WHITE + "=" + ChatColor.GRAY + GTM.getSettings().isBountySystem()); + break; + case BOUNTY_TAX: + sender.sendMessage(ChatColor.RED + ss.name() + ChatColor.WHITE + "=" + ChatColor.GRAY + GTM.getSettings().isBountyTax()); + break; + case BOUNTY_TAX_PERCENT: + sender.sendMessage(ChatColor.RED + ss.name() + ChatColor.WHITE + "=" + ChatColor.GRAY + GTM.getSettings().getBountyTaxPercent()); + break; + case KIT: + sender.sendMessage(ChatColor.RED + ss.name() + ChatColor.WHITE + "=" + ChatColor.GRAY + GTM.getSettings().isKitSystem()); + break; + case DEATH_TAX: + sender.sendMessage(ChatColor.RED + ss.name() + ChatColor.WHITE + "=" + ChatColor.GRAY + GTM.getSettings().isServerDeathTax()); + break; + case DEATH_TAX_SCALED: + sender.sendMessage(ChatColor.RED + ss.name() + ChatColor.WHITE + "=" + ChatColor.GRAY + GTM.getSettings().isServerDeathTaxScaled()); + break; + case DEATH_TAX_PERCENT: + sender.sendMessage(ChatColor.RED + ss.name() + ChatColor.WHITE + "=" + ChatColor.GRAY + GTM.getSettings().getServerDeathBasePercent()); + break; + case DEATH_TAX_MIN: + sender.sendMessage(ChatColor.RED + ss.name() + ChatColor.WHITE + "=" + ChatColor.GRAY + GTM.getSettings().getServerDeathTaxMin()); + break; + case DEATH_TAX_MAX: + sender.sendMessage(ChatColor.RED + ss.name() + ChatColor.WHITE + "=" + ChatColor.GRAY + GTM.getSettings().getServerDeathTaxMax()); + break; + + // TODO add more flags here + default: + break; + } + } + + /** + * Handles the parsing of the set command. + * + * @param sender - the sender sending the command + * @param command - the command they want + * @param ss - the setting they want to set + * @param args - command arguments + */ + private void handleSet(CommandSender sender, String command, SupportedSetting ss, String[] args) { + + // Note: Disregard args[0] and args[1] + + switch (ss) { + case PVP: + + boolean value = false; + try { + value = Boolean.parseBoolean(args[2]); + } + catch (Exception e) { + sender.sendMessage(ChatColor.RED + "Unable to parse '" + args[2] + "' to a boolean!"); + e.printStackTrace(); + return; + } + + sender.sendMessage(ChatColor.GRAY + "Attempting to set " + ChatColor.RED + ss + ChatColor.GRAY + " to " + ChatColor.WHITE + value); + + GTM.getSettings().setPvp(value); + GTM.getSettings().getGtmConfig().set("pvp", value); + Utils.saveConfig(GTM.getSettings().getGtmConfig(), "gtm"); + + sender.sendMessage(ChatColor.GREEN + "SUCCESS!"); + + break; + case TRANSFER: + + value = false; + try { + value = Boolean.parseBoolean(args[2]); + } + catch (Exception e) { + sender.sendMessage(ChatColor.RED + "Unable to parse '" + args[2] + "' to a boolean!"); + e.printStackTrace(); + return; + } + + sender.sendMessage(ChatColor.GRAY + "Attempting to set " + ChatColor.RED + ss + ChatColor.GRAY + " to " + ChatColor.WHITE + value); + + GTM.getSettings().setServerTransfer(value); + GTM.getSettings().getGtmConfig().set("server-transfer", value); + Utils.saveConfig(GTM.getSettings().getGtmConfig(), "gtm"); + + sender.sendMessage(ChatColor.GREEN + "SUCCESS!"); + + break; + case CHEATCODES: + + value = false; + try { + value = Boolean.parseBoolean(args[2]); + } + catch (Exception e) { + sender.sendMessage(ChatColor.RED + "Unable to parse '" + args[2] + "' to a boolean!"); + e.printStackTrace(); + return; + } + + sender.sendMessage(ChatColor.GRAY + "Attempting to set " + ChatColor.RED + ss + ChatColor.GRAY + " to " + ChatColor.WHITE + value); + + GTM.getSettings().setGlobalCheatcodes(value); + GTM.getSettings().getGtmConfig().set("cheatcodes", value); + Utils.saveConfig(GTM.getSettings().getGtmConfig(), "gtm"); + + sender.sendMessage(ChatColor.GREEN + "SUCCESS!"); + + break; + case PAY: + + value = false; + try { + value = Boolean.parseBoolean(args[2]); + } + catch (Exception e) { + sender.sendMessage(ChatColor.RED + "Unable to parse '" + args[2] + "' to a boolean!"); + e.printStackTrace(); + return; + } + + sender.sendMessage(ChatColor.GRAY + "Attempting to set " + ChatColor.RED + ss + ChatColor.GRAY + " to " + ChatColor.WHITE + value); + + GTM.getSettings().setPayCommand(value); + GTM.getSettings().getGtmConfig().set("pay", value); + Utils.saveConfig(GTM.getSettings().getGtmConfig(), "gtm"); + + sender.sendMessage(ChatColor.GREEN + "SUCCESS!"); + + break; + case BANK_TO_BANK: + + value = false; + try { + value = Boolean.parseBoolean(args[2]); + } + catch (Exception e) { + sender.sendMessage(ChatColor.RED + "Unable to parse '" + args[2] + "' to a boolean!"); + e.printStackTrace(); + return; + } + + sender.sendMessage(ChatColor.GRAY + "Attempting to set " + ChatColor.RED + ss + ChatColor.GRAY + " to " + ChatColor.WHITE + value); + + GTM.getSettings().setBankToBankTransfer(value); + GTM.getSettings().getGtmConfig().set("bank-to-bank-transfer", value); + Utils.saveConfig(GTM.getSettings().getGtmConfig(), "gtm"); + + sender.sendMessage(ChatColor.GREEN + "SUCCESS!"); + + break; + case BUY: + + value = false; + try { + value = Boolean.parseBoolean(args[2]); + } + catch (Exception e) { + sender.sendMessage(ChatColor.RED + "Unable to parse '" + args[2] + "' to a boolean!"); + e.printStackTrace(); + return; + } + + sender.sendMessage(ChatColor.GRAY + "Attempting to set " + ChatColor.RED + ss + ChatColor.GRAY + " to " + ChatColor.WHITE + value); + + GTM.getSettings().setBuy(value); + GTM.getSettings().getGtmConfig().set("buy", value); + Utils.saveConfig(GTM.getSettings().getGtmConfig(), "gtm"); + + sender.sendMessage(ChatColor.GREEN + "SUCCESS!"); + + break; + case TRADE: + + value = false; + try { + value = Boolean.parseBoolean(args[2]); + } + catch (Exception e) { + sender.sendMessage(ChatColor.RED + "Unable to parse '" + args[2] + "' to a boolean!"); + e.printStackTrace(); + return; + } + + sender.sendMessage(ChatColor.GRAY + "Attempting to set " + ChatColor.RED + ss + ChatColor.GRAY + " to " + ChatColor.WHITE + value); + + GTM.getSettings().setTrade(value); + GTM.getSettings().getGtmConfig().set("player-trade", value); + Utils.saveConfig(GTM.getSettings().getGtmConfig(), "gtm"); + + sender.sendMessage(ChatColor.GREEN + "SUCCESS!"); + + break; + case BOUNTY: + + value = false; + try { + value = Boolean.parseBoolean(args[2]); + } + catch (Exception e) { + sender.sendMessage(ChatColor.RED + "Unable to parse '" + args[2] + "' to a boolean!"); + e.printStackTrace(); + return; + } + + sender.sendMessage(ChatColor.GRAY + "Attempting to set " + ChatColor.RED + ss + ChatColor.GRAY + " to " + ChatColor.WHITE + value); + + GTM.getSettings().setBountySystem(value); + GTM.getSettings().getGtmConfig().set("bounty-system", value); + Utils.saveConfig(GTM.getSettings().getGtmConfig(), "gtm"); + + sender.sendMessage(ChatColor.GREEN + "SUCCESS!"); + + break; + case BOUNTY_TAX: + + value = false; + try { + value = Boolean.parseBoolean(args[2]); + } + catch (Exception e) { + sender.sendMessage(ChatColor.RED + "Unable to parse '" + args[2] + "' to a boolean!"); + e.printStackTrace(); + return; + } + + sender.sendMessage(ChatColor.GRAY + "Attempting to set " + ChatColor.RED + ss + ChatColor.GRAY + " to " + ChatColor.WHITE + value); + + GTM.getSettings().setBountyTax(value); + GTM.getSettings().getGtmConfig().set("bounty-system-tax", value); + Utils.saveConfig(GTM.getSettings().getGtmConfig(), "gtm"); + + sender.sendMessage(ChatColor.GREEN + "SUCCESS!"); + + break; + case BOUNTY_TAX_PERCENT: + + double percent = 0; + try { + percent = Double.parseDouble(args[2]); + } + catch (Exception e) { + sender.sendMessage(ChatColor.RED + "Unable to parse '" + args[2] + "' to a double!"); + e.printStackTrace(); + return; + } + + sender.sendMessage(ChatColor.GRAY + "Attempting to set " + ChatColor.RED + ss + ChatColor.GRAY + " to " + ChatColor.WHITE + percent); + + GTM.getSettings().setBountyTaxPercent(percent); + GTM.getSettings().getGtmConfig().set("bounty-tax-percent", percent); + Utils.saveConfig(GTM.getSettings().getGtmConfig(), "gtm"); + + sender.sendMessage(ChatColor.GREEN + "SUCCESS!"); + + break; + case KIT: + + value = false; + try { + value = Boolean.parseBoolean(args[2]); + } + catch (Exception e) { + sender.sendMessage(ChatColor.RED + "Unable to parse '" + args[2] + "' to a boolean!"); + e.printStackTrace(); + return; + } + + sender.sendMessage(ChatColor.GRAY + "Attempting to set " + ChatColor.RED + ss + ChatColor.GRAY + " to " + ChatColor.WHITE + value); + + GTM.getSettings().setKitSystem(value); + GTM.getSettings().getGtmConfig().set("kit-system", value); + Utils.saveConfig(GTM.getSettings().getGtmConfig(), "gtm"); + + sender.sendMessage(ChatColor.GREEN + "SUCCESS!"); + + break; + case DEATH_TAX: + + value = false; + try { + value = Boolean.parseBoolean(args[2]); + } + catch (Exception e) { + sender.sendMessage(ChatColor.RED + "Unable to parse '" + args[2] + "' to a boolean!"); + e.printStackTrace(); + return; + } + + sender.sendMessage(ChatColor.GRAY + "Attempting to set " + ChatColor.RED + ss + ChatColor.GRAY + " to " + ChatColor.WHITE + value); + + GTM.getSettings().setServerDeathTax(value); + GTM.getSettings().getGtmConfig().set("server-death-tax", value); + Utils.saveConfig(GTM.getSettings().getGtmConfig(), "gtm"); + + sender.sendMessage(ChatColor.GREEN + "SUCCESS!"); + + break; + case DEATH_TAX_SCALED: + + value = false; + try { + value = Boolean.parseBoolean(args[2]); + } + catch (Exception e) { + sender.sendMessage(ChatColor.RED + "Unable to parse '" + args[2] + "' to a boolean!"); + e.printStackTrace(); + return; + } + + sender.sendMessage(ChatColor.GRAY + "Attempting to set " + ChatColor.RED + ss + ChatColor.GRAY + " to " + ChatColor.WHITE + value); + + GTM.getSettings().setServerDeathTaxScaled(value); + GTM.getSettings().getGtmConfig().set("server-death-tax-scaled", value); + Utils.saveConfig(GTM.getSettings().getGtmConfig(), "gtm"); + + sender.sendMessage(ChatColor.GREEN + "SUCCESS!"); + + break; + case DEATH_TAX_PERCENT: + + percent = 0; + try { + percent = Double.parseDouble(args[2]); + } + catch (Exception e) { + sender.sendMessage(ChatColor.RED + "Unable to parse '" + args[2] + "' to a double!"); + e.printStackTrace(); + return; + } + + sender.sendMessage(ChatColor.GRAY + "Attempting to set " + ChatColor.RED + ss + ChatColor.GRAY + " to " + ChatColor.WHITE + percent); + + GTM.getSettings().setServerDeathBasePercent(percent); + GTM.getSettings().getGtmConfig().set("server-death-tax-percent", percent); + Utils.saveConfig(GTM.getSettings().getGtmConfig(), "gtm"); + + sender.sendMessage(ChatColor.GREEN + "SUCCESS!"); + + break; + case DEATH_TAX_MIN: + + int amount = 0; + try { + amount = Integer.parseInt(args[2]); + } + catch (Exception e) { + sender.sendMessage(ChatColor.RED + "Unable to parse '" + args[2] + "' to an integer!"); + e.printStackTrace(); + return; + } + + sender.sendMessage(ChatColor.GRAY + "Attempting to set " + ChatColor.RED + ss + ChatColor.GRAY + " to " + ChatColor.WHITE + amount); + + GTM.getSettings().setServerDeathTaxMin(amount); + GTM.getSettings().getGtmConfig().set("server-death-tax-min", amount); + Utils.saveConfig(GTM.getSettings().getGtmConfig(), "gtm"); + + sender.sendMessage(ChatColor.GREEN + "SUCCESS!"); + + break; + case DEATH_TAX_MAX: + + amount = 0; + try { + amount = Integer.parseInt(args[2]); + } + catch (Exception e) { + sender.sendMessage(ChatColor.RED + "Unable to parse '" + args[2] + "' to an integer!"); + e.printStackTrace(); + return; + } + + sender.sendMessage(ChatColor.GRAY + "Attempting to set " + ChatColor.RED + ss + ChatColor.GRAY + " to " + ChatColor.WHITE + amount); + + GTM.getSettings().setServerDeathTaxMax(amount); + GTM.getSettings().getGtmConfig().set("server-death-tax-max", amount); + Utils.saveConfig(GTM.getSettings().getGtmConfig(), "gtm"); + + sender.sendMessage(ChatColor.GREEN + "SUCCESS!"); + + break; + + // TODO add more flags here + default: + break; + } + } + + /** + * Send help message to the command sender. + * + * @param sender - the sender of the command + */ + private void sendHelp(CommandSender sender) { + sender.sendMessage(ChatColor.RED + "/settings set <conf> <value>" + ChatColor.WHITE + " - " + ChatColor.GRAY + "Set the new value of the setting"); + sender.sendMessage(ChatColor.RED + "/settings get <conf>" + ChatColor.WHITE + " - " + ChatColor.GRAY + "Get the value of the setting."); + + StringBuilder builder = new StringBuilder(); + for (SupportedSetting ss : SupportedSetting.values()) { + builder.append(ss.name()); + builder.append(","); + } + + sender.sendMessage(""); + sender.sendMessage(ChatColor.RED + "Known conf keys: " + ChatColor.WHITE + builder.substring(0, builder.length() - 1).toString()); + } + + /** + * {@inheritDoc} + */ + @Override + public UserRank requiredRank() { + return UserRank.ADMIN; + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/SkinCommand.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/SkinCommand.java new file mode 100644 index 0000000..1a6723b --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/SkinCommand.java @@ -0,0 +1,206 @@ +package net.grandtheftmc.gtm.commands; + +import java.util.Optional; + +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Utils; +import net.grandtheftmc.core.commands.CoreCommand; +import net.grandtheftmc.core.commands.RankedCommand; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.users.GTMUser; +import net.grandtheftmc.guns.weapon.Weapon; +import net.grandtheftmc.guns.weapon.WeaponSkin; + +public class SkinCommand extends CoreCommand<Player> implements RankedCommand { + public SkinCommand() { + super("skin", "A command used to manage weapon skins."); + } + + @Override + public void execute(Player sender, String[] args) { + User user = Core.getUserManager().getLoadedUser(sender.getUniqueId()); + GTMUser gtmUser = GTM.getUserManager().getLoadedUser(sender.getUniqueId()); + + if (user.isAdmin()) { + if (args.length == 3) { + if (args[0].equalsIgnoreCase("unlock")) { + Optional<Weapon<?>> weaponOpt = null; + + try { + short weaponID = Short.parseShort(args[1]); + + weaponOpt = GTM.getWastedGuns().getWeaponManager().getWeapon(weaponID); + } catch (NumberFormatException e) { + String weaponName = args[1]; + + weaponOpt = GTM.getWastedGuns().getWeaponManager().getWeapon(weaponName); + } + + if (weaponOpt.isPresent()) { + Weapon<?> weapon = weaponOpt.get(); + + try { + short skinID = Short.parseShort(args[2]); + WeaponSkin skin = weapon.getWeaponSkins().length > skinID ? weapon.getWeaponSkins()[skinID] : null; + + if (skin != null) { + if (gtmUser.getRawUnlockedWeaponSkins().get(weapon.getUniqueIdentifier()) == null + || !gtmUser.getRawUnlockedWeaponSkins().get(weapon.getUniqueIdentifier()).contains((short) (skin.getIdentifier() - weapon.getWeaponIdentifier()))) { + gtmUser.unlockWeaponSkin(weapon, skin); + + sender.sendMessage(Utils.f("&7You unlocked this skin!")); + } else { + sender.sendMessage(Utils.f("&cThis skin has already been unlocked!")); + } + } else { + sender.sendMessage(Utils.f("&cA skin with this ID does not exist!")); + } + } catch (NumberFormatException e) { + sender.sendMessage(Utils.f("&cThe skin ID has to be a number!")); + } + } else { + sender.sendMessage(Utils.f("&cA weapon with this name/ID does not exist!")); + } + } else if (args[0].equalsIgnoreCase("lock")) { + Optional<Weapon<?>> weaponOpt = null; + + try { + short weaponID = Short.parseShort(args[1]); + + weaponOpt = GTM.getWastedGuns().getWeaponManager().getWeapon(weaponID); + } catch (NumberFormatException e) { + String weaponName = args[1]; + + weaponOpt = GTM.getWastedGuns().getWeaponManager().getWeapon(weaponName); + } + + if (weaponOpt.isPresent()) { + Weapon<?> weapon = weaponOpt.get(); + + try { + short skinID = Short.parseShort(args[2]); + WeaponSkin skin = weapon.getWeaponSkins().length > skinID ? weapon.getWeaponSkins()[skinID] : null; + + if (skin != null) { + if (gtmUser.getRawUnlockedWeaponSkins().get(weapon.getUniqueIdentifier()) != null + && gtmUser.getRawUnlockedWeaponSkins().get(weapon.getUniqueIdentifier()).contains((short) (skin.getIdentifier() - weapon.getWeaponIdentifier()))) { + gtmUser.lockWeaponSkin(weapon, skin); + + sender.sendMessage(Utils.f("&7You locked this skin!")); + } else { + sender.sendMessage(Utils.f("&cThis skin has already been locked!")); + } + } else { + sender.sendMessage(Utils.f("&cA skin with this ID does not exist!")); + } + } catch (NumberFormatException e) { + sender.sendMessage(Utils.f("&cThe skin ID has to be a number!")); + } + } else { + sender.sendMessage(Utils.f("&cA weapon with this name/ID does not exist!")); + } + } + } else if (args.length == 4) { + if (args[0].equalsIgnoreCase("unlock")) { + Player otherPlayer = Bukkit.getPlayer(args[1]); + + if (otherPlayer != null && otherPlayer.isOnline()) { + GTMUser otherGTMUser = GTM.getUserManager().getLoadedUser(otherPlayer.getUniqueId()); + Optional<Weapon<?>> weaponOpt = null; + + try { + short weaponID = Short.parseShort(args[2]); + + weaponOpt = GTM.getWastedGuns().getWeaponManager().getWeapon(weaponID); + } catch (NumberFormatException e) { + String weaponName = args[2]; + + weaponOpt = GTM.getWastedGuns().getWeaponManager().getWeapon(weaponName); + } + + if (weaponOpt.isPresent()) { + Weapon<?> weapon = weaponOpt.get(); + + try { + short skinID = Short.parseShort(args[3]); + WeaponSkin skin = weapon.getWeaponSkins().length > skinID ? weapon.getWeaponSkins()[skinID] : null; + + if (skin != null) { + if (otherGTMUser.getRawUnlockedWeaponSkins().get(weapon.getUniqueIdentifier()) == null + || !otherGTMUser.getRawUnlockedWeaponSkins().get(weapon.getUniqueIdentifier()).contains((short) (skin.getIdentifier() - weapon.getWeaponIdentifier()))) { + otherGTMUser.unlockWeaponSkin(weapon, skin); + + sender.sendMessage(Utils.f("&7You unlocked this skin for &a" + otherPlayer.getName() + "!")); + } else { + sender.sendMessage(Utils.f("&a" + otherPlayer.getName() + " already has this skin unlocked!")); + } + } else { + sender.sendMessage(Utils.f("&cA skin with this ID does not exist!")); + } + } catch (NumberFormatException e) { + sender.sendMessage(Utils.f("&cThe skin ID has to be a number!")); + } + } else { + sender.sendMessage(Utils.f("&cA weapon with this name/ID does not exist!")); + } + } + } else if (args[0].equalsIgnoreCase("lock")) { + Player otherPlayer = Bukkit.getPlayer(args[1]); + + if (otherPlayer != null && otherPlayer.isOnline()) { + GTMUser otherGTMUser = GTM.getUserManager().getLoadedUser(otherPlayer.getUniqueId()); + Optional<Weapon<?>> weaponOpt = null; + + try { + short weaponID = Short.parseShort(args[2]); + + weaponOpt = GTM.getWastedGuns().getWeaponManager().getWeapon(weaponID); + } catch (NumberFormatException e) { + String weaponName = args[2]; + + weaponOpt = GTM.getWastedGuns().getWeaponManager().getWeapon(weaponName); + } + + if (weaponOpt.isPresent()) { + Weapon<?> weapon = weaponOpt.get(); + + try { + short skinID = Short.parseShort(args[3]); + WeaponSkin skin = weapon.getWeaponSkins().length > skinID ? weapon.getWeaponSkins()[skinID] : null; + + if (skin != null) { + if (otherGTMUser.getRawUnlockedWeaponSkins().get(weapon.getUniqueIdentifier()) != null + && otherGTMUser.getRawUnlockedWeaponSkins().get(weapon.getUniqueIdentifier()).contains((short) (skin.getIdentifier() - weapon.getWeaponIdentifier()))) { + otherGTMUser.lockWeaponSkin(weapon, skin); + + sender.sendMessage(Utils.f("&7You locked this skin for &a" + otherPlayer.getName() + "!")); + } else { + sender.sendMessage(Utils.f("&a" + otherPlayer.getName() + " already has this skin locked!")); + } + } else { + sender.sendMessage(Utils.f("&cA skin with this ID does not exist!")); + } + } catch (NumberFormatException e) { + sender.sendMessage(Utils.f("&cThe skin ID has to be a number!")); + } + } else { + sender.sendMessage(Utils.f("&cA weapon with this name/ID does not exist!")); + } + } + } + } + } else { + sender.sendMessage(Utils.f("&cYou do not have permission to execute this command!")); + } + } + + @Override + public UserRank requiredRank() { + return UserRank.DEFAULT; + } +} \ No newline at end of file diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/SkinsCommand.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/SkinsCommand.java new file mode 100644 index 0000000..ab04b55 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/SkinsCommand.java @@ -0,0 +1,26 @@ +package net.grandtheftmc.gtm.commands; + +import org.bukkit.entity.Player; + +import net.grandtheftmc.core.commands.CoreCommand; +import net.grandtheftmc.core.commands.RankedCommand; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.gtm.weapon.skins.menu.MainMenu; + +public class SkinsCommand extends CoreCommand<Player> implements RankedCommand { + public SkinsCommand() { + super("skins", "View or equip your weapon skins."); + } + + @Override + public void execute(Player sender, String[] args) { + if (args.length == 0) { + new MainMenu(sender).open(); + } + } + + @Override + public UserRank requiredRank() { + return UserRank.DEFAULT; + } +} \ No newline at end of file diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/SpectatorCommand.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/SpectatorCommand.java new file mode 100644 index 0000000..dd3fcd5 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/SpectatorCommand.java @@ -0,0 +1,75 @@ +package net.grandtheftmc.gtm.commands; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.users.GTMUser; +import org.bukkit.Bukkit; +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.event.player.PlayerTeleportEvent; + +import java.util.ArrayList; +import java.util.List; + +public class SpectatorCommand implements CommandExecutor { + private static final List<String> ACTIVE_STAFF = new ArrayList<>(); + + public static List<String> getActiveStaff() { + return ACTIVE_STAFF; + } + + @Override + public boolean onCommand(CommandSender s, Command c, String l, String[] args) { + if (!(s instanceof Player)) { + s.sendMessage(Lang.NOTPLAYER.s()); + return true; + } + Player sender = (Player) s; + GTMUser user = GTM.getUserManager().getLoadedUser(sender.getUniqueId()); + if(user.isDead()) { + s.sendMessage(Lang.GTM.f("&7You cannot issue this command while dead!")); + return false; + } + User coreSender = Core.getUserManager().getLoadedUser(sender.getUniqueId()); + if (!coreSender.isRank(UserRank.HELPOP)) { + sender.sendMessage(Lang.GTM.f("&7Permission denied!")); + return true; + } + if(args.length==1 && args[0].equalsIgnoreCase("true") && ACTIVE_STAFF.contains(sender.getName())){ + return true; + } + if (ACTIVE_STAFF.contains(sender.getName())) { + ACTIVE_STAFF.remove(sender.getName()); + sender.sendMessage(Lang.GTM.f("&bSpectator Mode disabled!")); + sender.setGameMode(GameMode.ADVENTURE); + sender.teleport(Bukkit.getWorld("spawn").getSpawnLocation(), PlayerTeleportEvent.TeleportCause.COMMAND); + sender.setFlySpeed(0.1F); + } else { + ACTIVE_STAFF.add(sender.getName()); + sender.sendMessage(Lang.GTM.f("&bSpectator Mode enabled!")); + sender.teleport(this.getMapLocation(), PlayerTeleportEvent.TeleportCause.COMMAND); + sender.setGameMode(GameMode.SPECTATOR); + } + return true; + } + + private Location getMapLocation() { + Location loc = Bukkit.getWorlds().get(0).getSpawnLocation(); + if (Bukkit.getWorld("minesantos") == null) { + return loc; + } + loc.setWorld(Bukkit.getWorld("minesantos")); + loc.setX(-133.59); + loc.setY(96.000000); + loc.setZ(244.431); + return loc; + } +} \ No newline at end of file diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/SpeedCommand.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/SpeedCommand.java new file mode 100644 index 0000000..ffc221e --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/SpeedCommand.java @@ -0,0 +1,60 @@ +package net.grandtheftmc.gtm.commands; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserRank; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class SpeedCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command c, String l, String[] args) { + if (!(s instanceof Player)) { + s.sendMessage(Lang.GTM.f("&cYou are not a player!")); + return true; + } + Player player = (Player)s; + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + if(SpectatorCommand.getActiveStaff().contains(player.getName()) || user.isRank(UserRank.ADMIN)) { + if(args.length != 1) { + player.sendMessage(Lang.GTM.f("&7Usage: /speed <1-10>")); + } else { + float speed = Float.valueOf(args[0]); + if(user.isRank(UserRank.ADMIN) && !player.isFlying()) { + speed = getRealMoveSpeed(speed, false); + player.setWalkSpeed(speed); + } else { + speed = getRealMoveSpeed(speed, true); + player.setFlySpeed(speed); + } + player.sendMessage(Lang.GTM.f("&7Your " + (player.isFlying() ? "fly" : "walk") + + " speed has been set to &a" + Integer.min(Integer.valueOf(args[0]), 10))); + } + } else if(user.isRank(UserRank.HELPOP)) { + player.sendMessage(Lang.GTM.f("&7You must be in spectator mode to use this command.")); + } + return true; + } + + private float getRealMoveSpeed(float userSpeed, final boolean isFly) { + final float defaultSpeed = isFly ? 0.1f : 0.2f; + float maxSpeed = 1f; + + if (userSpeed > 10f) { + userSpeed = 10f; + } else if (userSpeed < 0.0001f) { + userSpeed = 0.0001f; + } + + if (userSpeed < 1f) { + return defaultSpeed * userSpeed; + } else { + float ratio = ((userSpeed - 1) / 9) * (maxSpeed - defaultSpeed); + return ratio + defaultSpeed; + } + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/StackCommand.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/StackCommand.java new file mode 100644 index 0000000..f1ec26e --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/StackCommand.java @@ -0,0 +1,108 @@ +package net.grandtheftmc.gtm.commands; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.util.C; +import net.grandtheftmc.core.util.State; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.GTMUtils; +import net.grandtheftmc.gtm.items.ArmorUpgrade; +import net.grandtheftmc.gtm.items.GameItem; +import net.grandtheftmc.gtm.users.CheatCode; +import net.grandtheftmc.gtm.users.GTMUser; +import org.bukkit.Material; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.scheduler.BukkitRunnable; + +import java.lang.reflect.Array; +import java.util.*; + +public class StackCommand implements CommandExecutor { + //private final Map<String, Long> fixCooldown = new HashMap<>(); + private static final List<Material> UNUSUAL_UNSTACKABLE_MATERIALS = new ArrayList<>(Arrays.asList(Material.SAPLING, Material.CHEST, Material.COMPASS, Material.WATCH, Material.SKULL, Material.SKULL_ITEM)); + @Override + public boolean onCommand(CommandSender s, Command c, String l, String[] args) { + if (!(s instanceof Player)) { + s.sendMessage(Lang.NOTPLAYER.toString()); + return true; + } + Player player = (Player) s; + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + GTMUser gtmUser = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + + if (gtmUser.getCheatCodeState(CheatCode.STACK).getState()== State.LOCKED) { + player.sendMessage(Lang.CHEAT_CODES.f(CheatCode.STACK.getLockedLore())); + return false; + } + if(user.isOnCooldown("stack_command")) { + player.sendMessage(Lang.CHEAT_CODES.f("&7You must wait &a" + Utils.timeInSecondsToText(user.getCooldownTimeLeft("stack_command"), C.RED, C.RED, C.GRAY) + " &7before using this cheatcode again!")); + return false; + } + int affected = 0; + for(int i = 0; i<player.getInventory().getSize(); i++) { + ItemStack is = player.getInventory().getItem(i); + if(is==null || is.getType()==Material.AIR) + continue; + if(UNUSUAL_UNSTACKABLE_MATERIALS.contains(is.getType()) && is.getAmount()>=1) { + continue; + } + if(isArmorPiece(is.getType()) && (is.getDurability()!=0 || (is.hasItemMeta() && is.getItemMeta().hasLore()))) { + continue; + } + GameItem gameItem = GTM.getItemManager().getItem(is); + int maxStackSize = (isArmorPiece(is.getType()) && is.getDurability()==0) || (gameItem!=null && (gameItem.getType()== GameItem.ItemType.DRUG || gameItem.getType()== GameItem.ItemType.WEAPON)) ? 64 : is.getMaxStackSize(); + if(is.getAmount()>=maxStackSize) + continue; + int amountNeeded = maxStackSize-is.getAmount(); + for(int j = i+1; j<player.getInventory().getSize(); j++) { + ItemStack compare = player.getInventory().getItem(j); + if(compare==null || (isArmorPiece(is.getType()) && compare.getDurability()!=0) || compare.getType()!=is.getType() || (is.getEnchantments().size()!=compare.getEnchantments().size() || !is.getEnchantments().keySet().containsAll(compare.getEnchantments().keySet())) || (ArmorUpgrade.getArmorUpgrades(is).size()!=ArmorUpgrade.getArmorUpgrades(compare).size() || !ArmorUpgrade.getArmorUpgrades(is).containsAll(ArmorUpgrade.getArmorUpgrades(compare)))) + continue; + GameItem compareGameItem = GTM.getItemManager().getItem(is); + if(!((compareGameItem==null && gameItem==null) || (gameItem.getType()==compareGameItem.getType()))) + continue; + if(is.getAmount()>=maxStackSize) + break; + if(compare.getAmount()>amountNeeded) { + is.setAmount(maxStackSize); + compare.setAmount(compare.getAmount()-amountNeeded); + affected++; + break; + } + else { + is.setAmount(is.getAmount()+compare.getAmount()); + amountNeeded -= compare.getAmount(); + player.getInventory().setItem(j, null); + affected++; + } + } + player.getInventory().setItem(i, is); + } + + if (affected > 0) { + user.addCooldown("stack_command", GTMUtils.getStackDelay(user.getUserRank()), false, true); + new BukkitRunnable() { + @Override + public void run() { + player.updateInventory(); + } + }.runTaskLater(Core.getInstance(), 5); + player.sendMessage(Lang.GTM.f("&7Items compacted into stacks!")); + } else { + player.sendMessage(Lang.GTM.f("&7No stackable items found!")); + } + return true; + } + + private boolean isArmorPiece(Material mat) { + String s = mat.toString(); + return s.contains("LEGGINGS") || s.contains("BOOTS") || s.contains("HELMET") || s.contains("CHESTPLATE"); + } + +} \ No newline at end of file diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/StatsCommand.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/StatsCommand.java new file mode 100644 index 0000000..ed3e02e --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/StatsCommand.java @@ -0,0 +1,39 @@ +package net.grandtheftmc.gtm.commands; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.gtm.utils.Stats; +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class StatsCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command c, String l, String[] args) { + if (!(s instanceof Player)) { + s.sendMessage(Lang.GTM.f("&cYou are not a player!")); + return true; + } + Player player = (Player)s; + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + if(args.length == 0) { + player.sendMessage(Core.getAnnouncer().getHeader()); + Stats.getInstance().getStats(player).forEach(message -> player.sendMessage(message)); + player.sendMessage(Core.getAnnouncer().getFooter()); + } else { + if(Bukkit.getPlayer(args[0]) != null) { + Player target = Bukkit.getPlayer(args[0]); + player.sendMessage(Core.getAnnouncer().getHeader()); + Stats.getInstance().getStats(target).forEach(message -> player.sendMessage(message)); + player.sendMessage(Core.getAnnouncer().getFooter()); + } else { + player.sendMessage(Lang.GTM.f("&7Player not found!")); + } + } + return true; + } +} \ No newline at end of file diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/TeleportCommand.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/TeleportCommand.java new file mode 100644 index 0000000..6724c50 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/TeleportCommand.java @@ -0,0 +1,66 @@ +package net.grandtheftmc.gtm.commands; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserRank; +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class TeleportCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command c, String l, String[] args) { + if (!(s instanceof Player)) { + s.sendMessage(Lang.NOTPLAYER.s()); + return true; + } + Player sender = (Player) s; + User coreSender = Core.getUserManager().getLoadedUser(sender.getUniqueId()); + if (!coreSender.isRank(UserRank.HELPOP) || !coreSender.isRank(UserRank.SRMOD) && !SpectatorCommand.getActiveStaff().contains(sender.getName())) { + sender.sendMessage(Lang.GTM.f("&7Permission denied!")); + return true; + } + if (args.length == 1) { + Player target = Bukkit.getPlayer(args[0]); + if (target == null) { + sender.sendMessage(Lang.GTM.f("&7That player is not online!")); + return true; + } + if (Core.getUserManager().getLoadedUser(target.getUniqueId()).isRank(UserRank.ADMIN) && !coreSender.isRank(UserRank.ADMIN)) { + sender.sendMessage(Lang.GTM.f("&7You may not teleport to that player.")); + return true; + } + sender.teleport(target.getLocation()); + sender.sendMessage(Lang.GTM.f("&7You have been teleported to" + target.getDisplayName() + "&7!")); + } else if (args.length == 2) { + if (!coreSender.isRank(UserRank.ADMIN)) { + sender.sendMessage(Lang.GTM.f("&7Permission denied!")); + return true; + } + Player targetFrom = Bukkit.getPlayer(args[0]); + Player targetTo = Bukkit.getPlayer(args[1]); + if (targetFrom == null || targetTo == null) { + sender.sendMessage(Lang.GTM.f("&7Player(s) not found!")); + return true; + } + if (Core.getUserManager().getLoadedUser(targetFrom.getUniqueId()).isRank(UserRank.ADMIN) || + Core.getUserManager().getLoadedUser(targetTo.getUniqueId()).isRank(UserRank.ADMIN)) { + sender.sendMessage(Lang.GTM.f("&7You may not teleport that player.")); + return true; + } + targetFrom.teleport(targetTo.getLocation()); + sender.sendMessage(Lang.GTM.f("&7You teleported " + targetFrom.getDisplayName() + + " to " + targetTo.getDisplayName() + '!')); + } else { + sender.sendMessage(Lang.GTM.f("&7Usage:")); + sender.sendMessage(Utils.f("&a/teleport <player>")); + sender.sendMessage(Utils.f("&a/teleport <playerfrom> <playerto>")); + } + return true; + } +} \ No newline at end of file diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/TokenShopCommand.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/TokenShopCommand.java new file mode 100644 index 0000000..e9fd74a --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/TokenShopCommand.java @@ -0,0 +1,24 @@ +package net.grandtheftmc.gtm.commands; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.menus.MenuManager; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +/** + * Created by colt on 11/6/16. + */ +public class TokenShopCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command c, String l, String[] args) { + if (!(s instanceof Player)) { + s.sendMessage(Lang.NOTPLAYER.s()); + return true; + } + MenuManager.openMenu((Player)s, "tokenshop"); + return true; + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/TopKillersCommand.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/TopKillersCommand.java new file mode 100644 index 0000000..7fae27e --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/TopKillersCommand.java @@ -0,0 +1,49 @@ +package net.grandtheftmc.gtm.commands; + +import com.google.common.collect.Maps; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.GTMUtils; +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.Iterator; +import java.util.Map; +import java.util.UUID; + +public class TopKillersCommand implements CommandExecutor { + + private Map<String, Integer> topKillers = Maps.newHashMap(); + + public TopKillersCommand() { + Bukkit.getScheduler().runTaskTimerAsynchronously(GTM.getInstance(), () -> this.topKillers = GTMUtils.sortByValue(GTMUtils.getTopKillers(5)), 0, 20*300); + } + + @Override + public boolean onCommand(CommandSender s, Command c, String l, String[] args) { + if (!(s instanceof Player)) { + s.sendMessage(Lang.GTM.f("&cYou are not a player!")); + return true; + } + + UUID uuid = ((Player) s).getUniqueId(); + s.sendMessage(Lang.GTM.f("&7Compiling top killers list...")); + ServerUtil.runTaskAsync(() -> { + Player player = Bukkit.getPlayer(uuid); + if (player == null) return; + int i = 1; + for(Map.Entry<String,Integer> entry : this.topKillers.entrySet()){ + player.sendMessage(Utils.f("&7#" + i++ + " &a" + entry.getKey() + " &7- " + entry.getValue() + " &7kills")); + } + }); + + return true; + } +} \ No newline at end of file diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/TransferCommand.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/TransferCommand.java new file mode 100644 index 0000000..1621c6f --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/TransferCommand.java @@ -0,0 +1,47 @@ +package net.grandtheftmc.gtm.commands; + +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; + +import org.bukkit.entity.Player; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.commands.CoreCommand; +import net.grandtheftmc.core.menus.MenuManager; +import net.grandtheftmc.gtm.GTM; + +/** + * Created by Timothy Lampen on 1/12/2018. + */ +public class TransferCommand extends CoreCommand<Player>{ + + /** The allowed transfer servers */ + private static final Set<Integer> TRANSFERABLE_SERVERS = new HashSet<Integer>(Arrays.asList(2,3,5,6,0)); + + /** + * Construct a new TransferCommand. + */ + public TransferCommand() { + super("transfer", "transfer player data from one server to another"); + } + + @Override + public void execute(Player player, String[] args) { + + if (!GTM.getSettings().isServerTransfer()){ + player.sendMessage(Lang.GTM.f("&7Transferring is currently disabled!")); + return; + } + + // stop tranfers + if(!TRANSFERABLE_SERVERS.contains(Core.getSettings().getNumber())) {//you have to be on server 2,3,5,6 to transfer + player.sendMessage(Lang.GTM.f("&cSorry, transfering is currently &4&lLOCKED &cfor your server.")); + return; + } + + // open transferconfirm menu + MenuManager.openMenu(player, "transferconfirm"); + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/VehicleCommand.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/VehicleCommand.java new file mode 100644 index 0000000..7d26eb1 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/commands/VehicleCommand.java @@ -0,0 +1,130 @@ +package net.grandtheftmc.gtm.commands; + +import com.j0ach1mmall3.wastedvehicles.api.VehicleProperties; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.database.BaseDatabase; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.users.GTMUser; +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.List; +import java.util.Optional; + +/** + * Created by Liam on 24/09/2016. + */ +public class VehicleCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command cmd, String lbl, String[] args) { + if (!s.hasPermission("command.vehicle")) { + s.sendMessage(Lang.NOPERM.s()); + return true; + } + if (args.length == 0) { + s.sendMessage(Lang.VEHICLES.f("&7/vehicle list [player]")); + s.sendMessage(Lang.VEHICLES.f("&7/vehicle give <player> <name>")); + s.sendMessage(Lang.VEHICLES.f("&7/vehicle remove <player> <name>")); + return true; + } + switch (args[0].toLowerCase()) { + case "list": + if (args.length > 2) { + s.sendMessage(Utils.f("&c/vehicle list <type>")); + return true; + } + List<VehicleProperties> vehicles = GTM.getWastedVehicles().getBabies().getVehicleProperties(); + if (args.length == 2) { + Player player = Bukkit.getPlayer(args[1]); + if (player == null) { + s.sendMessage(Lang.VEHICLES.f("&7That player is not online!")); + return true; + } + GTMUser user = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + vehicles = user.getVehicleProperties(); + if (vehicles.isEmpty()) { + s.sendMessage(Lang.VEHICLES.f("&7That player has no vehicles!")); + return true; + } + String msg = ""; + for (VehicleProperties v : vehicles) + if (player == null || user.hasVehicle(v.getIdentifier())) + msg += "&c" + v.getIdentifier() + "&7, "; + if (msg.endsWith("&7, ")) + msg.substring(0, msg.length() - 4); + s.sendMessage(Lang.VEHICLES.f("&7List of vehicles of player " + player.getName() + "&7:")); + s.sendMessage(Utils.f(msg)); + return true; + } else if (vehicles.isEmpty()) { + s.sendMessage(Lang.VEHICLES.f("&7There are no vehicles!")); + return true; + } + String msg = ""; + for (VehicleProperties v : vehicles) + msg += "&c" + v.getIdentifier() + "&7, "; + if (msg.endsWith("&7, ")) + msg.substring(0, msg.length() - 4); + s.sendMessage(Lang.VEHICLES.f("&7List of vehicles:")); + s.sendMessage(Utils.f(msg)); + return true; + case "give": { + if (args.length != 3) { + s.sendMessage(Utils.f("&c/vehicle give <player> <name>")); + return true; + } + Player player = Bukkit.getPlayer(args[1]); + Optional<VehicleProperties> opt = GTM.getWastedVehicles().getVehicle(args[2]); + if (opt == null || !opt.isPresent() || opt.get() == null) { + s.sendMessage(Lang.VEHICLES.f("&7That vehicle does not exist!")); + return true; + } + VehicleProperties vehicle = opt.get(); + if (player == null) { +// Core.sql.updateAsyncLater("update " + Core.name() + " set `" + vehicle.getIdentifier().toLowerCase() + "`=true where name='" + args[1] + "';"); + ServerUtil.runTaskAsync(() -> BaseDatabase.runCustomQuery("update " + Core.name() + " set `" + vehicle.getIdentifier().toLowerCase() + "`=true where name='" + args[1] + "';")); + s.sendMessage(Lang.VEHICLES.f("&7That player is not online, so his vehicles have been updated directly in the database!")); + return true; + } + GTMUser user = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + user.giveVehiclePerm(player, vehicle); + s.sendMessage(Lang.VEHICLES.f("&7You gave vehicle &a" + vehicle.getIdentifier() + "&7 to player " + player.getName() + "&7!")); + return true; + } + case "remove": + if (args.length != 3) { + s.sendMessage(Utils.f("&c/vehicle remove <player> <name>")); + return true; + } + Player player = Bukkit.getPlayer(args[1]); + Optional<VehicleProperties> opt = GTM.getWastedVehicles().getVehicle(args[2]); + if (opt == null || !opt.isPresent() || opt.get() == null) { + s.sendMessage(Lang.VEHICLES.f("&7That vehicle does not exist!")); + return true; + } + VehicleProperties vehicle = opt.get(); + if (player == null) { +// Core.sql.updateAsyncLater("update " + Core.name() + " set `" + vehicle.getIdentifier().toLowerCase() + "`=false where name='" + args[1] + "';"); + ServerUtil.runTaskAsync(() -> BaseDatabase.runCustomQuery("update " + Core.name() + " set `" + vehicle.getIdentifier().toLowerCase() + "`=false where name='" + args[1] + "';")); + s.sendMessage(Lang.VEHICLES.f("&7That player is not online, so his vehicles have been updated directly in the database!")); + return true; + } + GTMUser user = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + user.removeVehiclePerm(player, vehicle); + s.sendMessage(Lang.VEHICLES.f("&7You removed vehicle &a" + vehicle.getIdentifier() + "&7 from player " + player.getName() + "&7!")); + return true; + default: + s.sendMessage(Lang.VEHICLES.f("&7/vehicle list [player]")); + s.sendMessage(Lang.VEHICLES.f("&7/vehicle give <player> <name>")); + s.sendMessage(Lang.VEHICLES.f("&7/vehicle remove <player> <name>")); + return true; + } + + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/database/dao/AmmoDAO.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/database/dao/AmmoDAO.java new file mode 100644 index 0000000..15aa864 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/database/dao/AmmoDAO.java @@ -0,0 +1,159 @@ +package net.grandtheftmc.gtm.database.dao; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.gtm.items.AmmoType; + +public class AmmoDAO { + +// CREATE TABLE IF NOT EXISTS user_ammo( +// uuid BINARY(16) NOT NULL, +// server_key VARCHAR(10) NOT NULL, +// ammo VARCHAR(16) NOT NULL, +// amount INT NOT NULL, +// PRIMARY KEY (uuid, server_key, ammo), +// FOREIGN KEY (uuid) REFERENCES user(uuid) ON DELETE CASCADE +// ); + + /** + * Get all the ammo for the given uuid. + * + * @param conn - the database connection thread + * @param uuid - the uuid of the user + * @param serverKey - the serverKey to lookup + * + * @return A mapping of ammo to amount that exists in the serverKey lookup + * for the user. + */ + public static Map<AmmoType, Integer> getAllAmmo(Connection conn, UUID uuid, String serverKey) { + + Map<AmmoType, Integer> ammo = new HashMap<>(); + + String query = "SELECT ammo, amount FROM user_ammo WHERE uuid=UNHEX(?) AND server_key=?;"; + + try (PreparedStatement ps = conn.prepareStatement(query)) { + ps.setString(1, uuid.toString().replaceAll("-", "")); + ps.setString(2, serverKey); + + try (ResultSet result = ps.executeQuery()) { + while (result.next()) { + String ammoID = result.getString("ammo"); + int amount = result.getInt("amount"); + + AmmoType ammoType = AmmoType.getAmmoTypeByID(ammoID).orElse(null); + if (ammoType != null) { + ammo.put(ammoType, amount); + } + } + } + } + catch (Exception e) { + Core.log("[AmmoDAO] Unable to getAllAmmo() for uuid=" + uuid.toString() + ", serverKey=" + serverKey); + e.printStackTrace(); + } + + return ammo; + } + + /** + * Get the ammo amount for the given uuid and ammo type. + * + * @param conn - the database connection thread + * @param uuid - the uuid of the user + * @param serverKey - the serverKey to lookup + * @param ammoType - the ammo type to lookup + * + * @return The amount of ammo for the given ammo type for the given uuid. + */ + public static Integer getAmmo(Connection conn, UUID uuid, String serverKey, AmmoType ammoType) { + + String query = "SELECT amount FROM user_ammo WHERE uuid=UNHEX(?) AND server_key=? AND ammo=?;"; + + try (PreparedStatement ps = conn.prepareStatement(query)) { + ps.setString(1, uuid.toString().replaceAll("-", "")); + ps.setString(2, serverKey); + ps.setString(3, ammoType.getId()); + + try (ResultSet result = ps.executeQuery()) { + if (result.next()) { + return result.getInt("amount"); + } + } + } + catch (Exception e) { + Core.log("[AmmoDAO] Unable to getAmmo() for uuid=" + uuid.toString() + ", serverKey=" + serverKey + ", ammo=" + ammoType.getId()); + e.printStackTrace(); + } + + return 0; + } + + /** + * Save the ammo for the given uuid and ammo type. + * + * @param conn - the database connection thread + * @param uuid - the uuid of the user + * @param serverKey - the serverKey to lookup + * @param ammoType - the ammo type to lookup + * @param amount - the amount of the ammo to save + * + * @return {@code true} if the ammo was saved, {@code false} otherwise. + */ + public static boolean saveAmmo(Connection conn, UUID uuid, String serverKey, AmmoType ammoType, int amount) { + + String query = "INSERT IGNORE INTO user_ammo (uuid, server_key, ammo, amount) VALUES (UNHEX(?), ?, ?, ?) ON DUPLICATE KEY UPDATE amount=VALUES(amount);"; + + try (PreparedStatement ps = conn.prepareStatement(query)) { + ps.setString(1, uuid.toString().replaceAll("-", "")); + ps.setString(2, serverKey); + ps.setString(3, ammoType.getId()); + ps.setInt(4, amount); + + ps.executeUpdate(); + return true; + } + catch (Exception e) { + Core.log("[AmmoDAO] Unable to saveAmmo() for uuid=" + uuid.toString() + ", serverKey=" + serverKey + ", ammo=" + ammoType.getId() + ", amount=" + amount); + e.printStackTrace(); + } + + return false; + } + + /** + * Save all the ammo for the given uuid and ammo map. + * + * @param conn - the database connection thread + * @param uuid - the uuid of the user + * @param serverKey - the serverKey to lookup + * @param ammo - the ammo mapping + * + * @return {@code true} if all ammo was saved, {@code false} if at least one + * had an issue saving. + */ + public static boolean saveAllAmmo(Connection conn, UUID uuid, String serverKey, Map<AmmoType, Integer> ammo) { + + boolean success = true; + + for (AmmoType at : ammo.keySet()) { + Integer amount = ammo.get(at); + + try { + saveAmmo(conn, uuid, serverKey, at, amount); + } + catch (Exception e) { + Core.log("[AmmoDAO] Unable to saveAllAmmo() for uuid=" + uuid.toString() + ", serverKey=" + serverKey); + e.printStackTrace(); + success = false; + } + } + + return success; + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/database/dao/MutexDAO.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/database/dao/MutexDAO.java new file mode 100644 index 0000000..feecad8 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/database/dao/MutexDAO.java @@ -0,0 +1,68 @@ +package net.grandtheftmc.gtm.database.dao; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.UUID; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.util.debug.Log; + +public class MutexDAO { + + /** + * Get the gtm user's mutex. + * <p> + * If this returns true, then the gtm user's mutex is already lent out to + * someone else. If this returns false, then the gtm user's mutex is not yet + * occupied. + * + * @param conn - the database connection thread + * @param uuid - the uuid of the user + * + * @return {@code true} if the gtm user's mutex is already taken, + * {@code false} if the gtm user's mutex is empty. + */ + public static boolean getGTMUserMutex(Connection conn, UUID uuid) { + + boolean mutex = false; + + String query = "SELECT mutex FROM " + Core.name() + " WHERE uuid=UNHEX('" + uuid.toString().replaceAll("-", "") + "')"; + + try (ResultSet result = conn.createStatement().executeQuery(query)) { + if (result.next()) { + mutex = result.getBoolean("mutex"); + } + } + catch (SQLException exc) { + Log.error("Core", "Error executing getUserMutex() for user identified by " + uuid.toString()); + exc.printStackTrace(); + } + + return mutex; + } + + /** + * Updates the gtm user's mutex. + * + * @param conn - the database connection thread + * @param uuid - the uuid of the user + * @param mutex - {@code true} if we still want to occupy the mutex, + * {@code false} otherwise. + */ + public static void setGTMUserMutex(Connection conn, UUID uuid, boolean mutex) { + + String query = "UPDATE " + Core.name() + " SET mutex=? WHERE uuid=UNHEX('" + uuid.toString().replaceAll("-", "") + "')"; + + try (PreparedStatement statement = conn.prepareStatement(query)) { + statement.setBoolean(1, mutex); + + statement.executeUpdate(); + } + catch (SQLException exc) { + Log.error("Core", "Error executing setUserMutex() for user identified by " + uuid.toString()); + exc.printStackTrace(); + } + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/database/mutex/common/LoadGTMUserTask.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/database/mutex/common/LoadGTMUserTask.java new file mode 100644 index 0000000..bf64671 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/database/mutex/common/LoadGTMUserTask.java @@ -0,0 +1,63 @@ +package net.grandtheftmc.gtm.database.mutex.common; + +import java.sql.Connection; + +import org.bukkit.plugin.Plugin; + +import net.grandtheftmc.core.database.BaseDatabase; +import net.grandtheftmc.core.database.mutex.task.LoadMutexTask; +import net.grandtheftmc.core.util.debug.Log; +import net.grandtheftmc.gtm.database.dao.MutexDAO; +import net.grandtheftmc.gtm.users.GTMUser; + +public abstract class LoadGTMUserTask extends LoadMutexTask { + + /** The gtm user reference */ + private GTMUser user; + + /** + * Constructs a new LoadGTMUserTask, which attempts to load a gtm user, + * asynchronously. + * + * @param plugin - the owning plugin + * @param user - the gtm user being loaded + */ + public LoadGTMUserTask(Plugin plugin, GTMUser user) { + super(plugin, user); + this.user = user; + + // run async + execute(true); + } + + /** + * {@inheritDoc} + */ + @Override + protected boolean fetchMutex() { + try (Connection conn = BaseDatabase.getInstance().getConnection()) { + return MutexDAO.getGTMUserMutex(conn, user.getUUID()); + } + catch (Exception e) { + e.printStackTrace(); + } + + // else not free + return true; + } + + /** + * {@inheritDoc} + */ + @Override + public void syncMutex() { + // TODO remove + Log.info("TEST-LoadGTMUserTask", "Setting " + user.getUUID() + "'s mutex to " + user.isLocked()); + try (Connection conn = BaseDatabase.getInstance().getConnection()) { + MutexDAO.setGTMUserMutex(conn, user.getUUID(), user.isLocked()); + } + catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/database/mutex/common/SaveGTMUserTask.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/database/mutex/common/SaveGTMUserTask.java new file mode 100644 index 0000000..af45b22 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/database/mutex/common/SaveGTMUserTask.java @@ -0,0 +1,47 @@ +package net.grandtheftmc.gtm.database.mutex.common; + +import java.sql.Connection; + +import org.bukkit.plugin.Plugin; + +import net.grandtheftmc.core.database.BaseDatabase; +import net.grandtheftmc.core.database.mutex.task.SaveMutexTask; +import net.grandtheftmc.core.util.debug.Log; +import net.grandtheftmc.gtm.database.dao.MutexDAO; +import net.grandtheftmc.gtm.users.GTMUser; + +public abstract class SaveGTMUserTask extends SaveMutexTask { + + /** The gtm user reference */ + private GTMUser user; + + /** + * Constructs a new SaveGTMUserTask, which attempts to save the gtm user, + * asynchronously. + * + * @param plugin - the owning plugin + * @param user - the user being saved + */ + public SaveGTMUserTask(Plugin plugin, GTMUser user) { + super(plugin, user); + this.user = user; + + // run async + execute(true); + } + + /** + * {@inheritDoc} + */ + @Override + public void syncMutex() { + // TODO remove + Log.info("TEST-SaveGTMUserTask", "Setting " + user.getUUID() + "'s mutex to " + user.isLocked()); + try (Connection conn = BaseDatabase.getInstance().getConnection()) { + MutexDAO.setGTMUserMutex(conn, user.getUUID(), user.isLocked()); + } + catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/Drug.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/Drug.java new file mode 100644 index 0000000..04eca1b --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/Drug.java @@ -0,0 +1,56 @@ +package net.grandtheftmc.gtm.drugs; + +import net.grandtheftmc.gtm.drugs.categories.DrugCategory; +import org.bukkit.entity.Player; + +import java.util.Optional; +import java.util.concurrent.TimeUnit; + +/** + * Created by Remco on 25-3-2017. + */ +public abstract class Drug { + + private final String name; + private int duration; + + protected Drug(String name, int duration) { + this.name = name; + this.duration = duration; + } + + /** + * General startpoint for applying drugs. + * + * @param player + * @return + */ + public abstract boolean apply(Player player); + + /** + * Name of the drug + * + * @return + */ + public String getName() { + return name; + } + + + /** + * Duration of the particle effects + * + * @return + */ + public int getDuration() { + return duration; + } + + public Optional<DrugCategory> getCategory() { + return DrugCategory.byDrug(this); + } + + protected Drug getInstance(){ + return this; + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/DrugCommand.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/DrugCommand.java new file mode 100644 index 0000000..7e6010d --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/DrugCommand.java @@ -0,0 +1,52 @@ +package net.grandtheftmc.gtm.drugs; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.ArrayList; +import java.util.Collection; + +public class DrugCommand implements CommandExecutor { + public static Collection<String> addingBlocks = new ArrayList<>(); + + @Override + public boolean onCommand(CommandSender s, Command c, String l, String[] args) { + if (!s.hasPermission("gtm.drugs.admin")) { + s.sendMessage(Utils.f("&cYou do not have permission to execute this command!")); + return true; + } + if (!(s instanceof Player)) { + s.sendMessage(Lang.GTM.f("&cYou are not a player!")); + return true; + } + Player player = (Player) s; + if (args.length != 1) { + sendHelp(player); + return true; + } + switch (args[0]) { + case "lb": + case "lockedblock": + if (addingBlocks.contains(player.getName())) { + player.sendMessage(Lang.DRUGS.f("&cYou are no longer adding/removing locked blocks")); + addingBlocks.remove(player.getName()); + } else { + player.sendMessage(Lang.DRUGS.f("&aYou are now adding/removing locked blocks")); + addingBlocks.add(player.getName()); + } + return true; + default: + sendHelp(player); + } + return true; + } + + public void sendHelp(Player player) { + player.sendMessage(Lang.DRUGS.f("&7Usage:")); + player.sendMessage(Utils.f("&a/drugs [lb/lockedblock] &7- Enable/Disable the Adding or Removal of locked blocks")); + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/DrugDealer.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/DrugDealer.java new file mode 100644 index 0000000..28e24e4 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/DrugDealer.java @@ -0,0 +1,172 @@ +package net.grandtheftmc.gtm.drugs; + +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.GTMUtils; +import net.grandtheftmc.gtm.drugs.item.DrugDealerItem; +import net.grandtheftmc.gtm.drugs.item.DrugItem; +import org.bukkit.Location; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.ArmorStand; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.LivingEntity; +import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.scheduler.BukkitTask; + +import java.util.*; +import java.util.concurrent.ThreadLocalRandom; +import java.util.logging.Level; +import java.util.stream.Collectors; + +public class DrugDealer { + private final Collection<Location> dealerLocations = new ArrayList<>(); + private final Set<DrugDealerItem> drugDealerItems = new HashSet<>(); + private final BukkitTask dealerTask; + private ArmorStand stand = null; + + public DrugDealer() { + loadLocations(); + loadDealerItems(); + dealerTask = new BukkitRunnable() { + @Override + public void run() { + try { + if (stand != null) { + Collection<ArmorStand> dealers = new ArrayList<>(); + for (LivingEntity entity : stand.getWorld().getLivingEntities()) { + if (entity.getType() != EntityType.ARMOR_STAND) continue; + ArmorStand armorStand = (ArmorStand) entity; + if (armorStand.getHelmet().getType() == GTM.getItemManager().getItem("rastahat").getItem().getType() + && armorStand.getItemInHand().getType() == GTM.getItemManager().getItem("joint").getItem().getType()) { + dealers.add(armorStand); + } + } + if (!dealers.isEmpty()) { + for (ArmorStand armorStand : dealers) { + armorStand.setHealth(0); + armorStand.remove(); + } + } + } + Optional<Location> randomLoc = getRandomLoc(); + randomLoc.ifPresent(location -> setLocation(location)); + } catch (Exception e) { + e.printStackTrace(); + cancel(); + } + } + }.runTaskTimer(GTM.getInstance(), 200, 34000); + } + + public void stop() { + saveLocations(); + if (stand != null) stand.remove(); + dealerTask.cancel(); + } + + public boolean isDrugDealer(Entity e) { + return e.equals(stand); + } + + public void addDealerLoc(Location loc) { + dealerLocations.add(loc); + } + + public void loadDealerItems() { + YamlConfiguration c = GTM.getSettings().getDrugDealerConfig(); + DrugService service = (DrugService) GTM.getDrugManager().getService(); + service.getDrugs().stream().forEach(drug -> { + DrugItem item = DrugItem.getByDrug(drug); + if (item != null) { + int stockMin = c.getString("drugs." + drug.getName().toLowerCase() + ".min") != null ? c.getInt("drugs." + drug.getName().toLowerCase() + ".min") : 1; + int stockMax = c.getString("drugs." + drug.getName().toLowerCase() + ".max") != null ? c.getInt("drugs." + drug.getName().toLowerCase() + ".max") : 10; + int chance = c.getString("drugs." + drug.getName().toLowerCase() + ".chance") != null ? c.getInt("drugs." + drug.getName().toLowerCase() + ".chance") : 5; + int minPrice = c.getString("drugs." + drug.getName().toLowerCase() + ".minprice") != null ? c.getInt("drugs." + drug.getName().toLowerCase() + ".minprice") : -1; + int maxPrice = c.getString("drugs." + drug.getName().toLowerCase() + ".maxprice") != null ? c.getInt("drugs." + drug.getName().toLowerCase() + ".maxprice") : -1; + + if (stockMax == -1 || stockMin == -1 || chance == -1 || minPrice == -1 || maxPrice == -1) { + GTM.getInstance().getLogger().log(Level.SEVERE, "Unable to parse number for drug: " + drug.getName().toLowerCase() + " min=" + stockMin + " max=" + stockMax + " chance=" + chance + " minPrice=" + minPrice + " maxPrice=" + maxPrice); + } + drugDealerItems.add(new DrugDealerItem(item, stockMin, stockMax, chance, minPrice, maxPrice)); + } else { + GTM.getInstance().getLogger().log(Level.SEVERE, "Unable to find DrugItem for drug: " + drug); + } + }); + } + + public void rerollStock() { + drugDealerItems.stream().forEach(DrugDealerItem::reroll); + } + + public void loadLocations() { + GTM.getSettings().setDrugDealerConfig(Utils.loadConfig("drugdealer")); + dealerLocations.clear(); + YamlConfiguration c = GTM.getSettings().getDrugDealerConfig(); + if (!c.getStringList("locs").isEmpty()) { + for (String loc : c.getStringList("locs")) { + GTMUtils.deserializeLocation(loc).ifPresent(dealerLocations::add); + } + } + } + + public void saveLocations() { + YamlConfiguration c = GTM.getSettings().getDrugDealerConfig(); + List<String> locs = dealerLocations.stream().map(GTMUtils::serializeLocation).collect(Collectors.toList()); + c.set("locs", locs); + Utils.saveConfig(c, "drugdealer"); + } + + public Set<DrugDealerItem> getItems() { + return drugDealerItems; + } + + public Collection<Location> getDealerLocations() { + return dealerLocations; + } + + private void initStand(Location loc) { + if (stand != null) { + stand.setHealth(0); + stand.remove(); + } + stand = (ArmorStand) loc.getWorld().spawnEntity(loc, EntityType.ARMOR_STAND); + stand.setHealth(stand.getMaxHealth()); + stand.setCustomName(Utils.f("&8&lDrug Dealer")); + stand.setCustomNameVisible(true); + stand.setAI(false); + stand.setCollidable(false); + stand.setInvulnerable(true); + stand.setCanPickupItems(false); + stand.setGravity(false); + stand.setRemoveWhenFarAway(false); + stand.setBasePlate(false); + stand.setArms(true); + stand.setVisible(true); + stand.setHelmet(GTM.getItemManager().getItem("rastahat").getItem()); + stand.setChestplate(GTM.getItemManager().getItem("shirt").getItem()); + stand.setLeggings(GTM.getItemManager().getItem("pants").getItem()); + stand.setBoots(GTM.getItemManager().getItem("nikes").getItem()); + stand.setItemInHand(GTM.getItemManager().getItem("joint").getItem()); + } + + public void setLocation(Location loc) { + if (stand == null || stand.isDead() || !stand.isVisible() || !stand.isValid()) initStand(loc); + stand.teleport(loc); + rerollStock(); + } + + public Optional<Location> getRandomLoc() { + if (stand == null || this.dealerLocations.size() == 1) return this.dealerLocations.stream().findFirst(); + List<Location> locs = this.dealerLocations + .stream() + .filter(location -> !location.equals(stand.getLocation())) + .collect(Collectors.toList()); + return Optional.of(locs.get(ThreadLocalRandom.current().nextInt(locs.size()))); + } + + public LivingEntity dealerStand() { + return this.stand; + } + +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/DrugEffect.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/DrugEffect.java new file mode 100644 index 0000000..7c15a33 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/DrugEffect.java @@ -0,0 +1,15 @@ +package net.grandtheftmc.gtm.drugs; + +import org.bukkit.entity.Player; + +import java.util.concurrent.TimeUnit; + +/** + * Created by Remco on 25-3-2017. + */ +@FunctionalInterface +public interface DrugEffect { + + void apply(Drug drug, int duration, Player player); + +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/DrugHelper.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/DrugHelper.java new file mode 100644 index 0000000..1c3e3f2 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/DrugHelper.java @@ -0,0 +1,26 @@ +package net.grandtheftmc.gtm.drugs; + +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.drugs.internal.service.Helper; +import net.grandtheftmc.gtm.drugs.internal.service.Service; + +/** + * Created by Remco on 25-3-2017. + */ +public class DrugHelper implements Helper { + + @Override + public String getHelperName() { + return "Drug Helper"; + } + + @Override + public Class<? extends Service> getServiceClass() { + return DrugService.class; + } + + private DrugService getService() { + return (DrugService) GTM.getInstance().getDrugManager().getService(); + } + +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/DrugManager.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/DrugManager.java new file mode 100644 index 0000000..6d4fd67 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/DrugManager.java @@ -0,0 +1,138 @@ +package net.grandtheftmc.gtm.drugs; + +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.gtm.drugs.example.*; +import net.grandtheftmc.gtm.drugs.example.lsd.LSD; +import net.grandtheftmc.gtm.drugs.internal.manager.Manager; +import net.grandtheftmc.gtm.drugs.item.DrugItem; +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; + +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; +import java.util.concurrent.atomic.AtomicInteger; + +public class DrugManager extends Manager { + private EffectManager effectManager; + private DrugDealer drugDealer; + private LockedBlocks lockedBlocks; + private final Set<UUID> ods = new HashSet<>(); + private Set<UUID> unmoveable = new HashSet<>(); + + public DrugManager() { + super("Drug Manager", new AtomicInteger(1), new DrugService()); + } + + @Override + public void start() { + DrugService service = (DrugService) getService(); + + ItemStack roofiedChocolate = DrugUtil.setDisplayName(new ItemStack(Material.RAW_FISH, 1), Utils.f("&b&lRoofied Chocolate")); + roofiedChocolate = DrugUtil.addLore(roofiedChocolate, "&7Just an inconspicuous piece of chocolate"); + service.addDrug(new RoofiedChocolate(), new DrugItem(roofiedChocolate, new RoofiedChocolate())); + + ItemStack mdma = DrugUtil.setDisplayName(new ItemStack(Material.RECORD_11, 1), Utils.f("&e&lMDMA")); + mdma = DrugUtil.hideDurability(mdma); + mdma = DrugUtil.addLore(mdma, "&7Take me to a higher place!"); + service.addDrug(new MDMA(), new DrugItem(mdma, new MDMA())); + + ItemStack lsd = DrugUtil.setDisplayName(new ItemStack(Material.GOLD_RECORD, 1), Utils.f("&d&lLSD")); + lsd = DrugUtil.hideDurability(lsd); + service.addDrug(new LSD(), new DrugItem(lsd, new LSD())); + + ItemStack weed = DrugUtil.setDisplayName(new ItemStack(Material.RECORD_5, 1), Utils.f("&2&lWeed Buds")); + weed = DrugUtil.hideDurability(weed); + service.addDrug(new Weed(), new DrugItem(weed, new Weed())); + + ItemStack joint = DrugUtil.setDisplayName(new ItemStack(Material.RECORD_3, 1), Utils.f("&2&lJoint")); + joint = DrugUtil.hideDurability(joint); + service.addDrug(new Joint(), new DrugItem(joint, new Joint())); + + ItemStack steroids = DrugUtil.setDisplayName(new ItemStack(Material.FLINT_AND_STEEL, 1), Utils.f("&c&lBull Shark Testosterone")); + steroids = DrugUtil.hideDurability(steroids); + steroids = DrugUtil.addLore(steroids, "&7Don’t mess with me!"); + steroids.setDurability((short) 3); + service.addDrug(new Steroids(), new DrugItem(steroids, new Steroids())); + + ItemStack alcohol = DrugUtil.setDisplayName(new ItemStack(Material.FLINT_AND_STEEL, 1), Utils.f("&e&lBeer")); + alcohol = DrugUtil.hideDurability(alcohol); + alcohol.setDurability((short) 1); + service.addDrug(new Alcohol(), new DrugItem(alcohol, new Alcohol())); + + ItemStack meth = DrugUtil.setDisplayName(new ItemStack(Material.FLINT_AND_STEEL, 1), Utils.f("&c&lMeth Pipe")); + meth = DrugUtil.hideDurability(meth); + meth.setDurability((short) 4); + service.addDrug(new Meth(), new DrugItem(meth, new Meth())); + + ItemStack cocaine = DrugUtil.setDisplayName(new ItemStack(Material.RECORD_4, 1), Utils.f("&f&lCocaine")); + cocaine = DrugUtil.hideDurability(cocaine); + service.addDrug(new Cocaine(), new DrugItem(cocaine, new Cocaine())); + + ItemStack heroin = DrugUtil.setDisplayName(new ItemStack(Material.FLINT_AND_STEEL, 1), Utils.f("&b&lHeroin Syringe")); + heroin = DrugUtil.hideDurability(heroin); + heroin = DrugUtil.addLore(heroin, "&7Stick this thing in my arm!"); + heroin.setDurability((short) 5); + service.addDrug(new Heroin(), new DrugItem(heroin, new Heroin())); + + this.drugDealer = new DrugDealer(); + this.effectManager = new EffectManager(); + this.lockedBlocks = new LockedBlocks(); + } + + @Override + public void stop() { + this.drugDealer.stop(); + this.lockedBlocks.save(); + } + + @Override + public boolean destroy() { + return false; + } + + public DrugDealer getDrugDealer() {//added 'get' because I dont think it makes sense to do .drugDealer().drugDealer() to get drug dealer entity + return this.drugDealer; + } + + public EffectManager getEffectManager(){ + return this.effectManager; + } + + public LockedBlocks getLockedBlocks() { + return this.lockedBlocks; + } + + /** + * @param uuid the uuid of the player + * + * @return if the player CAN OD again + */ + public boolean inOD(UUID uuid){ + return this.ods.contains(uuid); + } + + + /*** + * @param uuid uuid of the player + * + * Use when a player has OD'd (at the start of the OD sequence) + */ + public void addOD(UUID uuid){ + if(!this.ods.contains(uuid)){ + this.ods.add(uuid); + } + } + + /** + * @param uuid the player + * + * Use after the OD has completed (at the end of the same OD sequence) + */ + public void removeOD(UUID uuid){ + if(this.ods.contains(uuid)){ + this.ods.remove(uuid); + } + } + +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/DrugParam.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/DrugParam.java new file mode 100644 index 0000000..68e75fa --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/DrugParam.java @@ -0,0 +1,17 @@ +package net.grandtheftmc.gtm.drugs; + +import java.lang.annotation.Documented; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +/** + * Created by Remco on 25-3-2017. + */ + +@Documented +@Retention(RetentionPolicy.RUNTIME) +public @interface DrugParam { + + FunctionalInterface value(); + +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/DrugService.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/DrugService.java new file mode 100644 index 0000000..86db7ae --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/DrugService.java @@ -0,0 +1,70 @@ +package net.grandtheftmc.gtm.drugs; + +import com.google.common.collect.HashBasedTable; +import com.google.common.collect.Table; +import net.grandtheftmc.gtm.drugs.internal.service.Service; +import net.grandtheftmc.gtm.drugs.item.DrugItem; +import org.bukkit.inventory.ItemStack; + +import java.util.Collection; +import java.util.Map; +import java.util.Optional; +import java.util.Set; + +/** + * Created by Remco on 25-3-2017. + */ +public class DrugService extends Service { + + //All items, sorted on: + private final Table<DrugParam[], DrugItem, Drug> items = HashBasedTable.create(); + + public DrugService() { + super("Drug Item Service", new DrugHelper()); + } + + public Drug addDrug(Drug drug, DrugItem item, DrugParam... params) { + if (this.items.columnKeySet().stream().noneMatch((match) -> false)) { + items.put(params, item, drug); + return drug; + } + return null; + } + + public final Collection<Drug> getDrugs() { + return items.values(); + } + + public final Set<DrugItem> getItems() { + return items.columnKeySet(); + } + + public Drug getDrug(ItemStack item) { + return getDrug(DrugItem.getByItemStack(item)); + } + + public Drug getDrug(DrugItem drugItem) { + return items.columnMap().values().stream().map(Map::values).filter(drugs -> drugs.stream().findFirst().isPresent() && drugs.stream().anyMatch(drugItem::isValid)).map((drug) -> drug.stream().findFirst().get()).findFirst().orElse(null); + } + + public Optional<Drug> getDrug(String name) { + Optional<Drug> drug = items.values().stream().filter(targetDrug -> targetDrug.getName().equalsIgnoreCase(name)).findFirst(); + if (!drug.isPresent()) return Optional.empty(); + return drug; + } + + public Optional<DrugItem> getDrugItem(String name) { + Optional<DrugItem> drug = items.columnKeySet().stream().filter(drugItem -> drugItem.getItemStack().getItemMeta().getDisplayName().equals(name)).findFirst(); + if (!drug.isPresent()) return Optional.empty(); + return drug; + } + + public Set<DrugItem> getAllDrugItems(){ + return items.columnKeySet(); + } + + public Table<DrugParam[], DrugItem, Drug> getRawItems(){ + return items; + } + +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/DrugUtil.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/DrugUtil.java new file mode 100644 index 0000000..08b8a22 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/DrugUtil.java @@ -0,0 +1,195 @@ +package net.grandtheftmc.gtm.drugs; + +import net.grandtheftmc.core.util.Utils; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.block.Block; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import java.util.*; +import java.util.concurrent.ThreadLocalRandom; + +public class DrugUtil { + private static final Collection<Material> IGNORE_BLOCKS = Arrays.asList(Material.AIR, Material.SIGN, Material.SIGN_POST, + Material.WALL_SIGN, Material.IRON_DOOR, Material.IRON_DOOR_BLOCK, Material.CHEST, + Material.WOODEN_DOOR, Material.WOOD_DOOR, Material.WATER, Material.STATIONARY_WATER, Material.LAVA, Material.STATIONARY_LAVA); + + public static Sound getRandomParanoiaSound() { + int roll = ThreadLocalRandom.current().nextInt(0, 5); + switch (roll) { + default: + case 0: + return Sound.ENTITY_GHAST_SCREAM; + case 1: + return Sound.ENTITY_ZOMBIE_AMBIENT; + case 2: + return Sound.ENTITY_GHAST_AMBIENT; + case 3: + return Sound.ENTITY_SPIDER_AMBIENT; + case 4: + return Sound.ENTITY_CREEPER_PRIMED; + } + } + + public static Sound getRandomAmbientSound() { + int roll = ThreadLocalRandom.current().nextInt(0, 9); + switch (roll) { + default: + case 0: + return Sound.AMBIENT_CAVE; + case 1: + return Sound.ENTITY_RABBIT_AMBIENT; + case 2: + return Sound.ENTITY_BAT_AMBIENT; + case 3: + return Sound.ENTITY_CREEPER_PRIMED; + case 4: + return Sound.ENTITY_CAT_AMBIENT; + case 5: + return Sound.ENTITY_ENDERDRAGON_FIREBALL_EXPLODE; + case 6: + return Sound.BLOCK_CLOTH_BREAK; + case 7: + return Sound.ENTITY_ZOMBIE_INFECT; + case 8: + return Sound.ENTITY_ZOMBIE_PIG_ANGRY; + } + } + + public static String getParanoiaMessage(){ + switch(ThreadLocalRandom.current().nextInt( 10)){ + case 0: + return "They are always watching you"; + case 1: + return "I can see you"; + case 2: + return "I know where you live"; + case 3: + return "There is a camera in front of you, say hi :)"; + case 4: + return "Don't go home, it's not safe"; + case 5: + return "Even when you don't see me I am there"; + case 6: + return "The computer never turns off"; + case 7: + return "The police know what you have done"; + case 8: + return "I can see what you do behind closed doors"; + case 9: + return "I am the monster under your bed"; + default: + return ""; + } + } + + + /*ublic static void sendWorldEnvironment(Player player, World.Environment environment) { + CraftPlayer craftPlayer = (CraftPlayer) player; + CraftWorld world = (CraftWorld) player.getWorld(); + Location location = player.getLocation(); + + PacketPlayOutRespawn packet = new PacketPlayOutRespawn(environment.getId(), EnumDifficulty.getById(world.getDifficulty().getValue()), WorldType.NORMAL, EnumGamemode.getById(player.getGameMode().getValue())); + + craftPlayer.getHandle().playerConnection.sendPacket(packet); + + int viewDistance = GTM.getInstance().getServer().getViewDistance(); + + int xMin = location.getChunk().getX() - viewDistance; + int xMax = location.getChunk().getX() + viewDistance; + int zMin = location.getChunk().getZ() - viewDistance; + int zMax = location.getChunk().getZ() + viewDistance; + + for (int x = xMin; x < xMax; ++x){ + for (int z = zMin; z < zMax; ++z){ + world.refreshChunk(x, z); + } + } + + player.updateInventory(); + + player.teleport(player.getLocation()); + }*/ + + + public static Collection<Block> getNearbyBlocks(Location location, int radius) { + Collection<Block> blocks = new ArrayList<>(); + + for (int x = location.getBlockX() - radius ; x <= location.getBlockX() + radius ; x++) { + for (int z = location.getBlockZ() - radius ; z <= location.getBlockZ() + radius ; z++) { + for(int y = location.getBlockY() - radius ; y <= location.getBlockY() + radius; y++) { + Block block = location.getWorld().getBlockAt(x, y, z); + if (!block.isEmpty() && !IGNORE_BLOCKS.contains(block.getType())) { + blocks.add(block); + } + } + } + } + return blocks; + } + + public static ItemStack setDisplayName(ItemStack itemStack, String displayName) { + ItemMeta itemMeta = itemStack.getItemMeta(); + itemMeta.setDisplayName(displayName); + itemStack.setItemMeta(itemMeta); + return itemStack; + } + + public static ItemStack addLore(ItemStack itemStack, String... lore) { + ItemMeta itemMeta = itemStack.getItemMeta(); + List<String> lores = itemMeta.hasLore() ? itemMeta.getLore() : new ArrayList<>(); + for (String a : lore) lores.add(Utils.f(a)); + itemMeta.setLore(lores); + itemStack.setItemMeta(itemMeta); + return itemStack; + } + + public static ItemStack clearLore(ItemStack itemStack) { + ItemMeta itemMeta = itemStack.getItemMeta(); + itemMeta.setLore(new ArrayList<>()); + itemStack.setItemMeta(itemMeta); + return itemStack; + } + + public static ItemStack hideDurability(ItemStack itemStack) { + ItemStack is = itemStack.clone(); + ItemMeta itemMeta = is.getItemMeta(); + itemMeta.spigot().setUnbreakable(true); + itemMeta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES, + ItemFlag.HIDE_UNBREAKABLE, + ItemFlag.HIDE_PLACED_ON, + ItemFlag.HIDE_ENCHANTS, + ItemFlag.HIDE_POTION_EFFECTS, + ItemFlag.HIDE_DESTROYS); + is.setItemMeta(itemMeta); + return is; + } + + public static Optional<Map<Integer, ItemStack>> findItem(Inventory inventory, ItemStack itemStack) { + Map<Integer, ItemStack> map = new HashMap<>(); + for (int i = 0; i < inventory.getSize(); i++) { + if (inventory.getItem(i) == null) continue; + ItemStack search = inventory.getItem(i); + System.out.print(search.getType().toString() + " :: " + + itemStack.getType().toString()); + System.out.print(search.getData().getData() + " :: " + + itemStack.getData().getData()); + System.out.print(search.getItemMeta().getDisplayName() + " :: " + + itemStack.getItemMeta().getDisplayName()); + if (search.getType() == itemStack.getType() + && search.getData().getData() == itemStack.getData().getData() + && search.getItemMeta().getDisplayName().equals(itemStack.getItemMeta().getDisplayName())) { + map.put(i, search); + System.out.print("found"); + break; + } + } + return map.isEmpty() ? Optional.empty() : Optional.of(map); + } + + +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/EffectManager.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/EffectManager.java new file mode 100644 index 0000000..9b8eb2c --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/EffectManager.java @@ -0,0 +1,48 @@ +package net.grandtheftmc.gtm.drugs; + +import net.grandtheftmc.gtm.GTM; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.potion.PotionEffect; + +import java.util.HashMap; +import java.util.UUID; + +public class EffectManager { + + private final HashMap<UUID, Long> cancelEffects = new HashMap<>(); + + /** + * @param player the player who will be getting the effect + * @param effect the effect that may be addded / extended + */ + public void addEffect(Player player, PotionEffect effect) { + Bukkit.getScheduler().runTask(GTM.getInstance(), () -> { + player.addPotionEffect(effect); + }); + } + + /** + * @param player the player who is being checked + * @param origTime the time that the player originally used the drug* + * @return true if the player is still able to have the drug effects + */ + public boolean canRecieveOngoingEffect(Player player, long origTime) { + return player.isOnline() && player.isValid() && cancelEffects.getOrDefault(player.getUniqueId(), (long) 0) <= origTime; + } + + + /** + * @param player the player whose effects will be cancelled + */ + public void cancelEffects(Player player) { + Bukkit.getScheduler().runTask(GTM.getInstance(), () -> { + if (!cancelEffects.containsKey(player.getUniqueId())) { + cancelEffects.put(player.getUniqueId(), System.currentTimeMillis()); + } + for (PotionEffect p : player.getActivePotionEffects()) { + player.removePotionEffect(p.getType()); + } + }); + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/LockedBlocks.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/LockedBlocks.java new file mode 100644 index 0000000..72f8b29 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/LockedBlocks.java @@ -0,0 +1,46 @@ +package net.grandtheftmc.gtm.drugs; + +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.GTMUtils; +import org.bukkit.Location; +import org.bukkit.configuration.file.YamlConfiguration; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Optional; + +public class LockedBlocks { + private Collection<Location> lockedBlocks; + private YamlConfiguration config; + + public LockedBlocks() { + this.lockedBlocks = new ArrayList<>(); + this.config = GTM.getSettings().getDrugBlocksConfig(); + load(); + } + + public void load() { + if (!config.getStringList("blocks").isEmpty()) { + for (String stringLoc : config.getStringList("blocks")) { + Optional<Location> location = GTMUtils.deserializeLocation(stringLoc); + if (location.isPresent()) this.lockedBlocks.add(location.get()); + } + } + } + + public void save() { + List<String> serializedLocs = new ArrayList<>(); + this.lockedBlocks.forEach(location -> { + serializedLocs.add(GTMUtils.serializeLocation(location)); + }); + config.set("blocks", serializedLocs); + Utils.saveConfig(config, "drugblocks"); + } + + public Collection<Location> getLocations() { + return this.lockedBlocks; + } + +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/categories/DrugCategory.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/categories/DrugCategory.java new file mode 100644 index 0000000..fc83c0a --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/categories/DrugCategory.java @@ -0,0 +1,37 @@ +package net.grandtheftmc.gtm.drugs.categories; + +import net.grandtheftmc.gtm.drugs.Drug; +import net.grandtheftmc.gtm.drugs.categories.examples.*; + +import java.util.Arrays; +import java.util.Optional; + +/** + * Created by Remco on 25-3-2017. + */ +public enum DrugCategory { + + STIMULANTS(Stimulants.class), + INHALANTS(Inhalants.class), + CANNABINOIDS(Cannabinoids.class), + DEPRESSANTS(Depressants.class), + OPIOIDS(Opioids.class), + ANABOLIC_STEROIDS(AnabolicSteroids.class), + HALLUCINOGENS(Hallucinogens.class), + ALCOHOL(AAlcohol.class), + PRESCRIPTION_DRUGS(PrescriptionDrugs.class); + + private final Class<?>[] categories; + + DrugCategory(Class<?>... categories) { + this.categories = categories; + } + + public Class<?>[] getCategories() { + return categories; + } + + public static Optional<DrugCategory> byDrug(Drug drug){ + return Arrays.stream(values()).filter((categorie) -> Arrays.stream(categorie.categories).anyMatch((categoryClass) -> categoryClass.equals(drug.getClass().getSuperclass()))).findFirst(); + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/categories/IDrugCategory.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/categories/IDrugCategory.java new file mode 100644 index 0000000..7c19f97 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/categories/IDrugCategory.java @@ -0,0 +1,20 @@ +package net.grandtheftmc.gtm.drugs.categories; + +/** + * Created by Remco on 25-3-2017. + */ +public interface IDrugCategory { + + /** + * The name of the current Category, so we can define it somewhere. + * @return name + */ + String name(); + + /** + * The general description of the category of Drug. + * @return description + */ + String description(); + +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/categories/examples/AAlcohol.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/categories/examples/AAlcohol.java new file mode 100644 index 0000000..6ec3291 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/categories/examples/AAlcohol.java @@ -0,0 +1,26 @@ +package net.grandtheftmc.gtm.drugs.categories.examples; + +import net.grandtheftmc.gtm.drugs.Drug; +import net.grandtheftmc.gtm.drugs.categories.IDrugCategory; + +import java.util.concurrent.TimeUnit; + +/** + * Created by Remco on 25-3-2017. + */ +public abstract class AAlcohol extends Drug implements IDrugCategory { + + protected AAlcohol(String name, int duration) { + super(name, duration); + } + + @Override + public String name() { + return "Alcohol"; + } + + @Override + public String description() { + return "Can make you feel very special. You won't be walking straight if you drink too much though."; + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/categories/examples/AnabolicSteroids.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/categories/examples/AnabolicSteroids.java new file mode 100644 index 0000000..d19559b --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/categories/examples/AnabolicSteroids.java @@ -0,0 +1,26 @@ +package net.grandtheftmc.gtm.drugs.categories.examples; + +import net.grandtheftmc.gtm.drugs.Drug; +import net.grandtheftmc.gtm.drugs.categories.IDrugCategory; + +import java.util.concurrent.TimeUnit; + +/** + * Created by Remco on 25-3-2017. + */ +public abstract class AnabolicSteroids extends Drug implements IDrugCategory { + + protected AnabolicSteroids(String name, int duration) { + super(name, duration); + } + + @Override + public String name() { + return "Anabolic Steroids"; + } + + @Override + public String description() { + return "Improves physical performance, enlarges muscles and increases strength."; + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/categories/examples/Cannabinoids.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/categories/examples/Cannabinoids.java new file mode 100644 index 0000000..ee93ec8 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/categories/examples/Cannabinoids.java @@ -0,0 +1,27 @@ +package net.grandtheftmc.gtm.drugs.categories.examples; + +import net.grandtheftmc.gtm.drugs.Drug; +import net.grandtheftmc.gtm.drugs.categories.IDrugCategory; +import org.bukkit.inventory.ItemStack; + +import java.util.concurrent.TimeUnit; + +/** + * Created by Remco on 25-3-2017. + */ +public abstract class Cannabinoids extends Drug implements IDrugCategory { + + protected Cannabinoids(String name, int duration) { + super(name, duration); + } + + @Override + public String name() { + return "Cannabinoids"; + } + + @Override + public String description() { + return "Give you a feeling of euphoria. May cause confusion, memory problems, anxiety and a higher heart rate."; + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/categories/examples/Depressants.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/categories/examples/Depressants.java new file mode 100644 index 0000000..df85ba6 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/categories/examples/Depressants.java @@ -0,0 +1,26 @@ +package net.grandtheftmc.gtm.drugs.categories.examples; + +import net.grandtheftmc.gtm.drugs.Drug; +import net.grandtheftmc.gtm.drugs.categories.IDrugCategory; + +import java.util.concurrent.TimeUnit; + +/** + * Created by Remco on 25-3-2017. + */ +public abstract class Depressants extends Drug implements IDrugCategory { + + protected Depressants(String name, int duration) { + super(name, duration); + } + + @Override + public String name() { + return "Depressants"; + } + + @Override + public String description() { + return "Slows down activity in the central nervous system. They slow down the body and give you the feeling of relaxation."; + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/categories/examples/Hallucinogens.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/categories/examples/Hallucinogens.java new file mode 100644 index 0000000..9c5894e --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/categories/examples/Hallucinogens.java @@ -0,0 +1,26 @@ +package net.grandtheftmc.gtm.drugs.categories.examples; + +import net.grandtheftmc.gtm.drugs.Drug; +import net.grandtheftmc.gtm.drugs.categories.IDrugCategory; + +import java.util.concurrent.TimeUnit; + +/** + * Created by Remco on 25-3-2017. + */ +public abstract class Hallucinogens extends Drug implements IDrugCategory { + + protected Hallucinogens(String name, int duration) { + super(name, duration); + } + + @Override + public String name() { + return "Hallucinogens"; + } + + @Override + public String description() { + return "Change the mind and cause the appearance of things that are not really there."; + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/categories/examples/Inhalants.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/categories/examples/Inhalants.java new file mode 100644 index 0000000..31edcfe --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/categories/examples/Inhalants.java @@ -0,0 +1,27 @@ +package net.grandtheftmc.gtm.drugs.categories.examples; + +import net.grandtheftmc.gtm.drugs.Drug; +import net.grandtheftmc.gtm.drugs.categories.IDrugCategory; + +import java.util.concurrent.TimeUnit; + +/** + * Created by Remco on 25-3-2017. + */ +public abstract class Inhalants extends Drug implements IDrugCategory{ + + protected Inhalants(String name, int duration) { + super(name, duration); + + } + + @Override + public String name() { + return "Inhalants"; + } + + @Override + public String description() { + return "Give you immediate results. These can have sudden mental damage."; + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/categories/examples/Opioids.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/categories/examples/Opioids.java new file mode 100644 index 0000000..750d7cd --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/categories/examples/Opioids.java @@ -0,0 +1,26 @@ +package net.grandtheftmc.gtm.drugs.categories.examples; + +import net.grandtheftmc.gtm.drugs.Drug; +import net.grandtheftmc.gtm.drugs.categories.IDrugCategory; + +import java.util.concurrent.TimeUnit; + +/** + * Created by Remco on 25-3-2017. + */ +public abstract class Opioids extends Drug implements IDrugCategory { + + protected Opioids(String name, int duration) { + super(name, duration); + } + + @Override + public String name() { + return "Opioids"; + } + + @Override + public String description() { + return "Can cause drowsiness, confusion, nausea, feeligns of euphoria, respiratory complications and relieve pain."; + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/categories/examples/PrescriptionDrugs.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/categories/examples/PrescriptionDrugs.java new file mode 100644 index 0000000..5921dcf --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/categories/examples/PrescriptionDrugs.java @@ -0,0 +1,27 @@ +package net.grandtheftmc.gtm.drugs.categories.examples; + +import net.grandtheftmc.gtm.drugs.Drug; +import net.grandtheftmc.gtm.drugs.categories.IDrugCategory; + +import java.util.concurrent.TimeUnit; + +/** + * Created by Remco on 25-3-2017. + */ +public abstract class PrescriptionDrugs extends Drug implements IDrugCategory { + + protected PrescriptionDrugs(String name, int duration) { + super(name, duration); + + } + + @Override + public String name() { + return "Prescription Drugs"; + } + + @Override + public String description() { + return "Can be very helpful (if used wisely). Can be very dangerous."; + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/categories/examples/Stimulants.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/categories/examples/Stimulants.java new file mode 100644 index 0000000..ffbcea9 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/categories/examples/Stimulants.java @@ -0,0 +1,27 @@ +package net.grandtheftmc.gtm.drugs.categories.examples; + +import net.grandtheftmc.gtm.drugs.Drug; +import net.grandtheftmc.gtm.drugs.categories.IDrugCategory; + +import java.util.concurrent.TimeUnit; + +/** + * Created by Remco on 25-3-2017. + */ +public abstract class Stimulants extends Drug implements IDrugCategory { + + protected Stimulants(String name, int duration) { + super(name, duration); + } + + @Override + public String name() { + return "Stimulants"; + } + + @Override + public String description() { + return "Speeds up your nevous system and make you feel very alive. Also known as \"uppers\" because of their ability to make you feel very awake."; + } + +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/events/DrugUseEvent.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/events/DrugUseEvent.java new file mode 100644 index 0000000..57123a0 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/events/DrugUseEvent.java @@ -0,0 +1,52 @@ +package net.grandtheftmc.gtm.drugs.events; + +import net.grandtheftmc.gtm.drugs.Drug; +import org.bukkit.entity.Player; +import org.bukkit.event.Cancellable; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +/** + * Created by Remco on 25-3-2017. + */ +public class DrugUseEvent extends Event implements Cancellable { + + private final static HandlerList handlers = new HandlerList(); + + private boolean cancelled; + private final Player user; + private final Drug drug; + + public DrugUseEvent(Player user, Drug drug) { + this.user = user; + this.drug = drug; + this.cancelled = false; + } + + @Override + public boolean isCancelled() { + return cancelled; + } + + @Override + public void setCancelled(boolean b) { + this.cancelled = b; + } + + @Override + public HandlerList getHandlers() { + return handlers; + } + + public static HandlerList getHandler(){ + return handlers; + } + + public Player getUser() { + return user; + } + + public Drug getDrug() { + return drug; + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/events/listener/DrugListener.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/events/listener/DrugListener.java new file mode 100644 index 0000000..0eb901a --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/events/listener/DrugListener.java @@ -0,0 +1,68 @@ +package net.grandtheftmc.gtm.drugs.events.listener; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.drugs.Drug; +import net.grandtheftmc.gtm.drugs.DrugService; +import net.grandtheftmc.gtm.drugs.example.Alcohol; +import net.grandtheftmc.gtm.drugs.example.Cocaine; +import net.grandtheftmc.gtm.drugs.example.Heroin; +import net.grandtheftmc.gtm.drugs.example.Weed; +import net.grandtheftmc.gtm.drugs.item.DrugItem; +import net.grandtheftmc.gtm.users.GTMUser; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.ItemStack; + +import java.util.Optional; + +public class DrugListener implements Listener { + + @EventHandler + public void onEat(PlayerInteractEvent event) { + Player player = event.getPlayer(); + ItemStack is = event.getItem(); + if (event.getAction() == Action.RIGHT_CLICK_AIR || event.getAction() == Action.RIGHT_CLICK_BLOCK) { + if (is != null && is.getItemMeta() != null) { + DrugItem item = DrugItem.getByItemStack(is); + DrugService drugService = (DrugService) GTM.getInstance().getDrugManager().getService(); + if (item != null) { + if (drugService.getDrugs().stream().anyMatch(item::isValid)) { + Drug drug = drugService.getDrug(item); + if (drug != null && !(drug instanceof Weed) && !(drug instanceof Cocaine)) { + if (drug.apply(player)) { + if (event.getItem().getAmount() > 1) { + player.getInventory().getItemInMainHand().setAmount(event.getItem().getAmount() - 1); + } else { + player.getInventory().setItemInMainHand(null); + } + event.setCancelled(true); + } + } + } + } else { + if(GTM.getItemManager().getItem("vodka") != null) { + if (is.isSimilar(GTM.getItemManager().getItem("vodka").getItem())) { + Optional<Drug> alcohol = ((DrugService) GTM.getInstance().getDrugManager().getService()).getDrug("weed"); + if (alcohol.isPresent()) { + ((Alcohol) alcohol.get()).potentApply(player, true); + if (event.getItem().getAmount() > 1) { + player.getInventory().getItemInMainHand().setAmount(event.getItem().getAmount() - 1); + } else { + player.getInventory().setItemInMainHand(null); + } + event.setCancelled(true); + } + } + } + } + } + } + } + +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/events/listener/DrugPlacementListener.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/events/listener/DrugPlacementListener.java new file mode 100644 index 0000000..a175f4a --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/events/listener/DrugPlacementListener.java @@ -0,0 +1,200 @@ +package net.grandtheftmc.gtm.drugs.events.listener; + +import java.util.Optional; +import java.util.logging.Level; + +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.block.Block; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.ItemStack; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.drugs.Drug; +import net.grandtheftmc.gtm.drugs.DrugCommand; +import net.grandtheftmc.gtm.drugs.DrugService; +import net.grandtheftmc.gtm.drugs.LockedBlocks; +import net.grandtheftmc.houses.Houses; +import net.grandtheftmc.houses.houses.PremiumHouse; +import net.grandtheftmc.houses.users.HouseUser; + +public class DrugPlacementListener implements Listener { + + @EventHandler + public void onInteract(PlayerInteractEvent event) { + if (event.getClickedBlock() == null) return; + Player player = event.getPlayer(); + if (player.getWorld().getName().equals("spawn")) return; + Block block = event.getClickedBlock(); + Location blockLocation = block.getLocation(); + HouseUser houseUser = Houses.getUserManager().getLoadedUser(player.getUniqueId()); + ItemStack hand = player.getInventory().getItemInMainHand(); + + // if right clicking a block + if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { + + // IF BONG + if (block.getType() == Material.BREWING_STAND) { + + // stop vanilla interaction + event.setCancelled(true); + + // if this is a locked block + LockedBlocks lockedBlocks = GTM.getDrugManager().getLockedBlocks(); + if (DrugCommand.addingBlocks.contains(player.getName())) { + if (lockedBlocks.getLocations().contains(block.getLocation())) { + player.sendMessage(Lang.DRUGS.f("&cBlock is no longer locked.")); + lockedBlocks.getLocations().remove(block.getLocation()); + } else { + player.sendMessage(Lang.DRUGS.f("&aBlock is now locked!")); + lockedBlocks.getLocations().add(block.getLocation()); + } + return; + } + + // if sneaking, we want to remove + if (player.isSneaking()) { + if (lockedBlocks.getLocations().contains(block.getLocation())) { + player.sendMessage(Lang.DRUGS.f("&7This Bong cannot be removed.")); + return; + } + if (houseUser.isInsidePremiumHouse()) { + PremiumHouse house = Houses.getHousesManager().getPremiumHouse(houseUser.getInsidePremiumHouse()); + if (!house.getOwner().equals(player.getUniqueId())) { + player.sendMessage(Lang.GTM.f("&7Only the house owner may place a Bong here!")); + return; + } + } + block.getWorld().dropItemNaturally(blockLocation, getBongItem()); + block.setType(Material.AIR); + player.playSound(blockLocation, Sound.BLOCK_GLASS_BREAK, 3.0F, 3.0F); + } + else { + if (hand.getType() == getWeedItem().getType()) { + Optional<Drug> weed = ((DrugService) GTM.getDrugManager().getService()).getDrug("weed"); + if (weed.isPresent()) { + weed.get().apply(player); + if (hand.getAmount() > 1) { + hand.setAmount(hand.getAmount() - 1); + } else { + player.getInventory().remove(hand); + } + } else { + player.sendMessage(Lang.DRUGS + "" + ChatColor.RED + "Something went wrong internally, please tell a staff member."); + GTM.getInstance().getLogger().log(Level.SEVERE, "Unable to find weed drug (DrugPlacementListener)"); + } + } else { + player.sendMessage(Lang.DRUGS.f("&7Put some &2&lWeed &7in here to start smoking!")); + } + } + } + // IF COCAINE + else if (block.getType() == getCocaineBlock().getType() && block.getData() == getCocaineBlock().getData().getData()) { + + // stop vanilla interaction + event.setCancelled(true); + + // if sneaking, we want to remove + if (player.isSneaking()) { + if (houseUser.isInsidePremiumHouse()) { + PremiumHouse house = Houses.getHousesManager().getPremiumHouse(houseUser.getInsidePremiumHouse()); + if (!house.getOwner().equals(player.getUniqueId())) { + player.sendMessage(Lang.GTM.f("&7Only the house owner may do this!")); + return; + } + } + + player.sendMessage(Lang.GTM.f("&7You quickly gather up the cocaine.")); + + block.getWorld().dropItemNaturally(blockLocation, getCocaineItem()); + block.setType(Material.AIR); + player.playSound(blockLocation, Sound.BLOCK_GLASS_BREAK, 3.0F, 3.0F); + } + else { + + // apply the cocaine + block.setType(Material.AIR); + player.playSound(blockLocation, Sound.ENTITY_CAT_HISS, 1, 1); + Optional<Drug> cocaine = ((DrugService) GTM.getDrugManager().getService()).getDrug("cocaine"); + if (cocaine.isPresent()) { + cocaine.get().apply(player); + } else { + player.sendMessage(Lang.DRUGS.f("&7Unable to locate drug cocaine, report this bug to a staff member.")); + } + } + } else { + Block target = block.getWorld().getBlockAt(blockLocation.getBlockX(), + blockLocation.getBlockY() + 1, + blockLocation.getBlockZ()); + if (hand.getType() == getBongItem().getType() + && hand.getData().getData() == getBongItem().getData().getData()) { + if (target.getType() == Material.AIR) { + if (houseUser.isInsidePremiumHouse()) { + PremiumHouse house = Houses.getHousesManager().getPremiumHouse(houseUser.getInsidePremiumHouse()); + if (!house.getOwner().equals(player.getUniqueId())) { + player.sendMessage(Lang.GTM.f("&7Only the house owner may do this!")); + return; + } + } + target.setType(Material.BREWING_STAND); + if (hand.getAmount() > 1) { + hand.setAmount(hand.getAmount() - 1); + } else { + player.getInventory().remove(hand); + } + player.updateInventory(); + player.playSound(target.getLocation(), Sound.BLOCK_GLASS_PLACE, 3.0F, 3.0F); + } else if (target.getType() != Material.BREWING_STAND) { + player.sendMessage(Lang.GTM.f("&7Bong cannot be placed here!")); + } + } else if (hand.getType() == getCocaineItem().getType() + && hand.getData().getData() == getCocaineItem().getData().getData()) { + if (target.getType() == Material.AIR) { + if (houseUser.isInsidePremiumHouse()) { + PremiumHouse house = Houses.getHousesManager().getPremiumHouse(houseUser.getInsidePremiumHouse()); + if (!house.getOwner().equals(player.getUniqueId())) { + player.sendMessage(Lang.GTM.f("&7Only the house owner may do this!")); + return; + } + } + if(block.getType()==Material.JUKEBOX) { + player.sendMessage(Lang.GTM.f("&7That cocaine cannot be placed here!")); + event.setCancelled(true); + return; + } + target.setType(getCocaineBlock().getType()); + target.setData(getCocaineBlock().getData().getData()); + hand.setAmount(hand.getAmount()-1); + player.updateInventory(); + player.playSound(target.getLocation(), Sound.BLOCK_GLASS_PLACE, 3.0F, 3.0F); + } else if (target.getType() != getCocaineBlock().getType()) { + player.sendMessage(Lang.GTM.f("&7That cocaine cannot be placed here!")); + } + } + } + } + } + + public ItemStack getWeedItem() { + return GTM.getItemManager().getItem("weed").getItem(); + } + + public ItemStack getBongItem() { + return GTM.getItemManager().getItem("bong").getItem(); + } + + public ItemStack getCocaineItem() { + return GTM.getItemManager().getItem("cocaine").getItem(); + } + + public ItemStack getCocaineBlock() { + return GTM.getItemManager().getItem("cocaineblock").getItem(); + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/example/Alcohol.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/example/Alcohol.java new file mode 100644 index 0000000..483c3bf --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/example/Alcohol.java @@ -0,0 +1,94 @@ +package net.grandtheftmc.gtm.drugs.example; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.drugs.DrugEffect; +import net.grandtheftmc.gtm.drugs.DrugService; +import net.grandtheftmc.gtm.drugs.categories.examples.AAlcohol; +import net.grandtheftmc.gtm.drugs.events.DrugUseEvent; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.entity.Item; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; +import org.bukkit.util.Vector; + +import java.util.*; +import java.util.concurrent.ThreadLocalRandom; + +/** + * Created by Remco on 25-3-2017. + */ +public class Alcohol extends AAlcohol { + private final HashMap<UUID, List<Long>> drinkTimes = new HashMap<>(); + private static final int NEEDED_RATE = 3;//per X + private static final int TIMEFRAME = 300;//seconds + + public Alcohol() { + super("alcohol", 60); + } + + public boolean potentApply(Player p, boolean vodka) { + boolean[] failed = {false}; + UUID uuid = p.getUniqueId(); + DrugEffect effect = (drug, duration, player) -> { + final DrugService service = (DrugService) GTM.getInstance().getDrugManager().getService(); + player.playSound(player.getLocation(), Sound.ENTITY_PLAYER_BURP, 1, 1); + int effectDuration = (int) Math.round(duration + (duration * ThreadLocalRandom.current().nextDouble(-.25, .25))) * 20; //to make it +/-5-25% + Bukkit.getPluginManager().callEvent(new DrugUseEvent(player, this)); + if (isPlayerDrunk(uuid)) { + ItemStack item = player.getInventory().getItemInMainHand(); + if (item != null) + if (item.getAmount() > 1) { + player.getInventory().getItemInMainHand().setAmount(item.getAmount() - 1); + } else { + player.getInventory().setItemInMainHand(null); + } + for (ItemStack is : player.getInventory().getStorageContents()) { + if (is != null && is.getType()!= Material.COMPASS && is.getType() != Material.CHEST && is.getType() != Material.WATCH) { + Item drop = player.getWorld().dropItemNaturally(player.getLocation().add(ThreadLocalRandom.current().nextDouble(-1, 1), 1, ThreadLocalRandom.current().nextDouble(-1, 1)), is); + Vector velocity = player.getEyeLocation().getDirection().normalize(); + velocity.multiply(1.01); + drop.setVelocity(velocity); + player.getInventory().remove(is); + } + } + player.sendMessage(Lang.DRUGS.f("&2&oYou dont feel so good...")); + } + + GTM.getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.SLOW, effectDuration, 1 + (vodka ? 2 : 1)))); + GTM.getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.CONFUSION, effectDuration, 0))); + GTM.getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.DAMAGE_RESISTANCE, effectDuration, 1))); + GTM.getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.INCREASE_DAMAGE, effectDuration, (vodka ? 1 : 0)))); + }; + effect.apply(this, this.getDuration(), p); + return !failed[0]; + } + + @Override + public boolean apply(Player p) { + return potentApply(p, false); + } + + private boolean isPlayerDrunk(UUID uuid) { + if (drinkTimes.containsKey(uuid)) { + List<Long> tempTimes = new ArrayList<>(); + ArrayList<Long> times = new ArrayList<>(drinkTimes.get(uuid)); + times.add(System.currentTimeMillis()); + times.forEach(l -> { + if ((l + (TIMEFRAME * 1000)) <= System.currentTimeMillis()) { + tempTimes.add(l); + } + }); + + times.removeAll(tempTimes); + drinkTimes.put(uuid, times); + return times.size() >= NEEDED_RATE; + } + drinkTimes.put(uuid, Arrays.asList(System.currentTimeMillis())); + return false; + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/example/Cocaine.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/example/Cocaine.java new file mode 100644 index 0000000..06e7015 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/example/Cocaine.java @@ -0,0 +1,120 @@ +package net.grandtheftmc.gtm.drugs.example; + +import java.util.HashSet; +import java.util.UUID; +import java.util.concurrent.ThreadLocalRandom; + +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; +import org.bukkit.scheduler.BukkitRunnable; + +import de.slikey.effectlib.effect.TurnEffect; +import net.grandtheftmc.core.util.C; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.drugs.DrugEffect; +import net.grandtheftmc.gtm.drugs.DrugUtil; +import net.grandtheftmc.gtm.drugs.categories.examples.Stimulants; +import net.grandtheftmc.gtm.drugs.events.DrugUseEvent; + +public class Cocaine extends Stimulants { + HashSet<UUID> unmoveable = new HashSet<>(); + + public Cocaine() { + super("cocaine", 120); + } + + @Override + public boolean apply(Player p) { + boolean[] failed = {false}; + UUID uuid = p.getUniqueId(); + DrugEffect effect = (drug, duration, player) -> { + player.playSound(player.getLocation(), Sound.ENTITY_CAT_HISS, 1, 1); + int effectDuration = (int) Math.round(duration + (duration * ThreadLocalRandom.current().nextDouble(-.25, .25))) * 20; //to make it +/-5-25% + + Bukkit.getPluginManager().callEvent(new DrugUseEvent(player, this)); + int roll = ThreadLocalRandom.current().nextInt(100); + + if (roll > 5 || GTM.getDrugManager().inOD(player.getUniqueId())) { + GTM.getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.SPEED, effectDuration / 2, 1))); + GTM.getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.FAST_DIGGING, effectDuration, 0))); + GTM.getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.INCREASE_DAMAGE, effectDuration, 1))); + } else { + GTM.getDrugManager().addOD(player.getUniqueId()); + GTM.getUserManager().getLoadedUser(player.getUniqueId()).setLastTag(System.currentTimeMillis()); + stageOne(player, System.currentTimeMillis()); + } + }; + effect.apply(this, this.getDuration(), p); + return !failed[0]; + } + + public boolean cantMove(UUID uuid) { + return unmoveable.contains(uuid); + } + + public void stageOne(Player player, long addTime){ + int speedLength = ThreadLocalRandom.current().nextInt(100, 200); + GTM.getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.SPEED, speedLength, 20))); + new BukkitRunnable() { + @Override + public void run() { + if (!GTM.getDrugManager().getEffectManager().canRecieveOngoingEffect(player, addTime)) + return; + stageTwo(player, addTime); + } + }.runTaskLater(GTM.getInstance(), speedLength); + } + + public void stageTwo(Player player, long addTime){ + player.setPlayerTime(18000, false); + unmoveable.add(player.getUniqueId()); + TurnEffect turnEffect = new TurnEffect(GTM.getEffectLib()); + turnEffect.setEntity(player); + turnEffect.infinite(); + turnEffect.period = 2; + turnEffect.start(); + int stageLength = ThreadLocalRandom.current().nextInt(10, 16); + long endTime = System.currentTimeMillis() + (stageLength*1000); + player.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, stageLength*20, 0)); + new BukkitRunnable() { + boolean flip = false; + @Override + public void run() { + if (System.currentTimeMillis() >= endTime || !GTM.getDrugManager().getEffectManager().canRecieveOngoingEffect(player, addTime)) { + turnEffect.cancel(); + cancel(); + return; + } + if(flip){ + player.playSound(player.getLocation(), DrugUtil.getRandomParanoiaSound(), 1, 1); + } + flip = !flip; + player.sendTitle(C.RED + C.MAGIC + "asd" + C.RED + DrugUtil.getParanoiaMessage() + C.MAGIC + "asd", "", 0, 10, 0); +// new TitleBuilder().setTitleText(ChatColor.RED + "" + ChatColor.MAGIC + "asd" + ChatColor.RED + DrugUtil.getParanoiaMessage() + "" + ChatColor.MAGIC + "asd").setFadeIn(0).setDuration(10).setFadeOut(0).send(player); + } + }.runTaskTimer(GTM.getInstance(), 0, 15); + + new BukkitRunnable() { + @Override + public void run() { + dispose(player); + if (GTM.getDrugManager().getEffectManager().canRecieveOngoingEffect(player, addTime)) { + stageThree(player); + return; + }} + }.runTaskLater(GTM.getInstance(), stageLength*20); + + } + + public void stageThree(Player player){ + GTM.getDrugManager().getEffectManager().addEffect(player, new PotionEffect(PotionEffectType.SLOW, 20 * 5, 2)); + } + + public void dispose(Player player) { + unmoveable.remove(player.getUniqueId()); + player.resetPlayerTime(); + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/example/Heroin.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/example/Heroin.java new file mode 100644 index 0000000..60d671c --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/example/Heroin.java @@ -0,0 +1,81 @@ +package net.grandtheftmc.gtm.drugs.example; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.drugs.DrugEffect; +import net.grandtheftmc.gtm.drugs.categories.examples.Opioids; +import net.grandtheftmc.gtm.drugs.events.DrugUseEvent; +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; +import org.bukkit.scheduler.BukkitRunnable; + +import java.util.UUID; +import java.util.concurrent.ThreadLocalRandom; + +/** + * Created by Timothy Lampen on 2017-04-08. + */ +public class Heroin extends Opioids{ + + public Heroin() { + super("heroin", 15); + } + + @Override + public boolean apply(Player p) { + boolean[] failed = {false}; + UUID uuid = p.getUniqueId(); + DrugEffect effect = (drug, duration, player) -> { + int roll = ThreadLocalRandom.current().nextInt(100); + int effectDuration = (int) Math.round(duration + (duration * ThreadLocalRandom.current().nextDouble(-.25, .25))) * 20; //to make it +/-5-25% + + Bukkit.getPluginManager().callEvent(new DrugUseEvent(player, this)); + player.playSound(player.getLocation(), Sound.ENTITY_SILVERFISH_AMBIENT, 1, 1); + final long addTime = System.currentTimeMillis(); + if (roll > 6 || (GTM.getDrugManager().inOD(player.getUniqueId()))) { + GTM.getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.SPEED, effectDuration, 1))); + GTM.getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.INCREASE_DAMAGE, effectDuration, 0))); + GTM.getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.FIRE_RESISTANCE, effectDuration, 1))); + + new BukkitRunnable() { + @Override + public void run() { + if (!GTM.getDrugManager().getEffectManager().canRecieveOngoingEffect(player, addTime)) { + cancel(); + return; + } + if (ThreadLocalRandom.current().nextInt(4) == 0) { + GTM.getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.WEAKNESS, effectDuration * 3, 1))); + player.sendMessage(Lang.DRUGS.f("&7&oWhy does everything feel so heavy all of a sudden?")); + } + } + }.runTaskLater(GTM.getInstance(), effectDuration); + } else { + GTM.getDrugManager().addOD(player.getUniqueId()); + GTM.getUserManager().getLoadedUser(player.getUniqueId()).setLastTag(System.currentTimeMillis()); + player.sendMessage(Lang.DRUGS.f("&7&oThis doesn't feel right...")); + GTM.getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.WITHER, 5 * 20, 1))); + GTM.getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.BLINDNESS, 5 * 20, 0))); + GTM.getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.SLOW, 5 * 20, 0))); + new BukkitRunnable() { + @Override + public void run() { + GTM.getDrugManager().removeOD(player.getUniqueId()); + if (ThreadLocalRandom.current().nextBoolean() && GTM.getDrugManager().getEffectManager().canRecieveOngoingEffect(player, addTime)) { + player.getActivePotionEffects().forEach(effect -> { + player.removePotionEffect(effect.getType()); + }); + player.damage(player.getHealth()); + player.sendMessage(Lang.DRUGS.f("&7&oIm never doing heroin again...")); + } + } + }.runTaskLater(GTM.getInstance(), 5 * 20); + } + }; + effect.apply(this, this.getDuration(), p); + return !failed[0]; + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/example/Joint.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/example/Joint.java new file mode 100644 index 0000000..e3d48cb --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/example/Joint.java @@ -0,0 +1,94 @@ +package net.grandtheftmc.gtm.drugs.example; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.drugs.DrugEffect; +import net.grandtheftmc.gtm.drugs.DrugService; +import net.grandtheftmc.gtm.drugs.DrugUtil; +import net.grandtheftmc.gtm.drugs.categories.examples.Cannabinoids; +import net.grandtheftmc.gtm.drugs.events.DrugUseEvent; +import org.bukkit.Bukkit; +import org.bukkit.Particle; +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; +import org.bukkit.scheduler.BukkitRunnable; + +import java.util.Set; +import java.util.UUID; +import java.util.concurrent.ThreadLocalRandom; +import java.util.stream.Collectors; + +public class Joint extends Cannabinoids { + + public Joint() { + super("joint", 120); + } + + @Override + public boolean apply(Player p) { + boolean[] failed = {false}; + UUID uuid = p.getUniqueId(); + DrugEffect effect = (drug, duration, player) -> { + final DrugService service = (DrugService) GTM.getInstance().getDrugManager().getService(); + int effectDuration = (int) Math.round(duration + (duration * ThreadLocalRandom.current().nextDouble(-.25, .25))) * 20; //to make it +/-5-25% + player.playSound(player.getLocation(), Sound.ENTITY_TNT_PRIMED, 1, 1); + Bukkit.getPluginManager().callEvent(new DrugUseEvent(player, this)); + final long addTime = System.currentTimeMillis(); + int roll = ThreadLocalRandom.current().nextInt(100); + + if (roll > 4 || GTM.getInstance().getDrugManager().inOD(player.getUniqueId())) { + GTM.getInstance().getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.SLOW, effectDuration, 1))); + GTM.getInstance().getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.SLOW_DIGGING, effectDuration, 0))); + new BukkitRunnable() { + @Override + public void run() { + if (!GTM.getInstance().getDrugManager().getEffectManager().canRecieveOngoingEffect(player, addTime)) + return; + GTM.getInstance().getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.HUNGER, effectDuration, 1))); + player.sendMessage(Lang.DRUGS.f("&7&oDamn I could go for some McDonalds right now...")); + + } + }.runTaskLaterAsynchronously(GTM.getInstance(), 20 * 60 * 2); + final long startTime = System.currentTimeMillis(); + final Set<Player> nearby = player.getNearbyEntities(10, 10, 10).stream().filter(entity -> entity instanceof Player).map(entity -> (Player) entity).collect(Collectors.toSet()); + + new BukkitRunnable() { + @Override + public void run() { + if (startTime + (1000 * 2) <= System.currentTimeMillis()) cancel(); + for (int i = 0; i < 5; i++) { + double locX = player.getEyeLocation().getX() + (ThreadLocalRandom.current().nextDouble(0, 1) * (ThreadLocalRandom.current().nextBoolean() ? 1 : -1)); + double locZ = player.getEyeLocation().getZ() + (ThreadLocalRandom.current().nextDouble(0, 1) * (ThreadLocalRandom.current().nextBoolean() ? 1 : -1)); + double locY = player.getLocation().getY() + ThreadLocalRandom.current().nextDouble(1, 1.2); + nearby.forEach(p -> { + p.spawnParticle(Particle.FLAME, locX, locY, locZ, 1); + p.spawnParticle(Particle.SMOKE_NORMAL, locX, locY, locZ, 1); + }); + } + } + }.runTaskTimerAsynchronously(GTM.getInstance(), 0, 12); + } else { + GTM.getInstance().getDrugManager().addOD(player.getUniqueId()); + GTM.getUserManager().getLoadedUser(player.getUniqueId()).setLastTag(System.currentTimeMillis()); + GTM.getInstance().getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.BLINDNESS, effectDuration, 0))); + player.playSound(player.getLocation(), Sound.ENTITY_LIGHTNING_THUNDER, 10, 1); + final long endTime = System.currentTimeMillis() + (effectDuration / 20 * 1000); + new BukkitRunnable() { + @Override + public void run() { + if (System.currentTimeMillis() >= endTime || !GTM.getInstance().getDrugManager().getEffectManager().canRecieveOngoingEffect(player, addTime)) { + GTM.getInstance().getDrugManager().removeOD(player.getUniqueId()); + cancel(); + } + player.playSound(player.getLocation(), DrugUtil.getRandomParanoiaSound(), 10, ThreadLocalRandom.current().nextFloat() * 2); + } + }.runTaskTimerAsynchronously(GTM.getInstance(), 5, 15); + player.sendMessage(Lang.DRUGS.f("&7&oUghhh... That must've been a bad batch of K2...")); + } + }; + effect.apply(this, this.getDuration(), p); + return !failed[0]; + } +} \ No newline at end of file diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/example/MDMA.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/example/MDMA.java new file mode 100644 index 0000000..b61001c --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/example/MDMA.java @@ -0,0 +1,95 @@ +package net.grandtheftmc.gtm.drugs.example; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.drugs.DrugEffect; +import net.grandtheftmc.gtm.drugs.categories.examples.Hallucinogens; +import net.grandtheftmc.gtm.drugs.events.DrugUseEvent; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Particle; +import org.bukkit.entity.Player; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; +import org.bukkit.scheduler.BukkitRunnable; + +import java.util.ArrayList; +import java.util.Set; +import java.util.UUID; +import java.util.concurrent.ThreadLocalRandom; +import java.util.stream.Collectors; + +/** + * Created by Timothy Lampen on 3/26/2017. + */ +public class MDMA extends Hallucinogens { + + public MDMA() { + super("mdma", 120); + } + + private ArrayList<UUID> using = new ArrayList<>(); + + @Override + public boolean apply(Player p) { + boolean[] failed = {false}; + UUID uuid = p.getUniqueId(); + DrugEffect effect = (drug, duration, player) -> { + if (this.using.contains(player.getUniqueId())) { + failed[0] = true; + player.sendMessage(Lang.DRUGS + "" + ChatColor.RED + "I don't think its a good idea to do more than one..."); + return; + } + this.using.add(player.getUniqueId()); + int roll = ThreadLocalRandom.current().nextInt(100); + int effectDuration = (int) Math.round(duration + (duration * ThreadLocalRandom.current().nextDouble(-.25, .25))) * 20;//to make it +/-5-25% + Bukkit.getPluginManager().callEvent(new DrugUseEvent(player, this)); + + if (roll > 4 || !GTM.getInstance().getDrugManager().inOD(player.getUniqueId())) { + final long addTime = System.currentTimeMillis(); + GTM.getInstance().getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.SLOW, effectDuration, 0))); + //less anxiety? Or I might have to fool around with .setWalkSpeed etc + GTM.getInstance().getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.CONFUSION, effectDuration, 0))); + final Set<Player> nearby = player.getNearbyEntities(10, 10, 10).stream().filter(entity -> entity instanceof Player).map(entity -> (Player) entity).collect(Collectors.toSet()); + nearby.add(player); + + new BukkitRunnable() { + @Override + public void run() { + if (System.currentTimeMillis() >= (addTime + effectDuration / 20 * 1000) || !GTM.getInstance().getDrugManager().getEffectManager().canRecieveOngoingEffect(player, addTime)) { + cancel(); + using.remove(player.getUniqueId()); + return; + } + for (int i = 0; i < 5; i++) {//hopefully blinds the player's view with hearts. Haven't tested how many particles it will actually take. Could do a more systematic approach like draw a panel of hearts, but I think this is better. + double locX = player.getEyeLocation().getX() + (ThreadLocalRandom.current().nextDouble(-.5, .5)); + double locZ = player.getEyeLocation().getZ() + (ThreadLocalRandom.current().nextDouble(-.5, .5)); + double locY = player.getLocation().getY() + ThreadLocalRandom.current().nextDouble(2.1, 2.3); + nearby.forEach(p -> p.spawnParticle(Particle.HEART, locX, locY, locZ, 1)); + } + } + }.runTaskTimerAsynchronously(GTM.getInstance(), 0, 5); + + } else { + GTM.getInstance().getDrugManager().addOD(player.getUniqueId()); + GTM.getUserManager().getLoadedUser(player.getUniqueId()).setLastTag(System.currentTimeMillis()); + GTM.getInstance().getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.CONFUSION, 25 * 20, 0))); + GTM.getInstance().getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.HUNGER, 25 * 20, 2))); + GTM.getInstance().getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.POISON, 25 * 20, 2))); + GTM.getInstance().getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.BLINDNESS, 25 * 20, 0))); + GTM.getInstance().getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.SPEED, 25 * 20, 2))); + //message + new BukkitRunnable() { + @Override + public void run() { + GTM.getInstance().getDrugManager().removeOD(player.getUniqueId()); + using.remove(player.getUniqueId()); + } + }.runTaskLaterAsynchronously(GTM.getInstance(), 25 * 20); + } + }; + effect.apply(this, this.getDuration(), p); + return !failed[0]; + } + +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/example/Meth.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/example/Meth.java new file mode 100644 index 0000000..995e805 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/example/Meth.java @@ -0,0 +1,73 @@ +package net.grandtheftmc.gtm.drugs.example; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.drugs.DrugEffect; +import net.grandtheftmc.gtm.drugs.categories.examples.Stimulants; +import net.grandtheftmc.gtm.drugs.events.DrugUseEvent; +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; +import org.bukkit.scheduler.BukkitRunnable; + +import java.util.UUID; +import java.util.concurrent.ThreadLocalRandom; + +/** + * Created by Timothy Lampen on 2017-04-06. + */ +public class Meth extends Stimulants{ + private static final int ADDITIONAL_HALF_HEARTS = 10; + public Meth() { + super("meth", 120); + } + + @Override + public boolean apply(Player p) { + boolean[] failed = {false}; + UUID uuid = p.getUniqueId(); + DrugEffect effect = (drug, duration, player) -> { + GTM.getUserManager().getLoadedUser(player.getUniqueId()).setLastTag(System.currentTimeMillis()); + player.playSound(player.getLocation(), Sound.ENTITY_TNT_PRIMED, 1, 1); + int effectDuration = (int) Math.round(duration + (duration * ThreadLocalRandom.current().nextDouble(-.25, .25))) * 20; + GTM.getInstance().getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.SPEED, effectDuration, 1))); + GTM.getInstance().getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.INCREASE_DAMAGE, effectDuration, 0))); + GTM.getInstance().getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.HEALTH_BOOST, effectDuration, 1))); + GTM.getInstance().getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.DAMAGE_RESISTANCE, effectDuration, 0))); + long addTime = System.currentTimeMillis(); + new BukkitRunnable() { + @Override + public void run() { + if (!GTM.getInstance().getDrugManager().getEffectManager().canRecieveOngoingEffect(player, addTime)) { + cancel(); + return; + } + GTM.getInstance().getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.SLOW, effectDuration, 0))); + GTM.getInstance().getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.WEAKNESS, effectDuration, 0))); + GTM.getInstance().getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.WITHER, effectDuration, 0))); + long endTime = System.currentTimeMillis() + ((effectDuration / 20) * 1000); + new BukkitRunnable() { + @Override + public void run() { + if (System.currentTimeMillis() >= endTime || !GTM.getInstance().getDrugManager().getEffectManager().canRecieveOngoingEffect(player, addTime)) { + player.setMaxHealth(20); + cancel(); + return; + } + GTM.getInstance().getDrugManager().getEffectManager().addEffect(player, new PotionEffect(PotionEffectType.BLINDNESS, ThreadLocalRandom.current().nextInt(2, 6) * 20, 0)); + } + }.runTaskTimer(GTM.getInstance(), 0, ThreadLocalRandom.current().nextInt(15, 41) * 20); + player.setMaxHealth(20); + player.sendMessage(Lang.DRUGS.f("&7&oUggh, I shouldn't have tried meth...")); + + } + }.runTaskLater(GTM.getInstance(), duration * 20); + + Bukkit.getPluginManager().callEvent(new DrugUseEvent(player, this)); + }; + effect.apply(this, this.getDuration(), p); + return !failed[0]; + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/example/RoofiedChocolate.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/example/RoofiedChocolate.java new file mode 100644 index 0000000..bf1f268 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/example/RoofiedChocolate.java @@ -0,0 +1,51 @@ +package net.grandtheftmc.gtm.drugs.example; + +import de.slikey.effectlib.effect.LoveEffect; +import net.grandtheftmc.core.Utils; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.drugs.categories.examples.Stimulants; +import org.bukkit.entity.Player; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; + +import java.util.concurrent.ThreadLocalRandom; + +/** + * Created by Timothy Lampen on 2017-09-28. + */ +public class RoofiedChocolate extends Stimulants { + public RoofiedChocolate() { + super("roofied_chocolate", 60*4); + } + + + private String[] hornyThingsPrezWouldSay = new String[]{"Holy fuck that tree is so hot right now", "I could probably go hump a cow and be okay with myself", "Is it just me, or is Bruce Jenner kinda hot?", "Best five seconds of my life"}; + @Override + public boolean apply(Player player) { + int ran = ThreadLocalRandom.current().nextInt(0, 100); + if(ran<20) { + player.addPotionEffect(new PotionEffect(PotionEffectType.SPEED, 20*60*4, 0)); + } + else if(ran<40) { + player.addPotionEffect(new PotionEffect(PotionEffectType.JUMP, 20*60*2, 1)); + } + else if(ran<45) { + player.addPotionEffect(new PotionEffect(PotionEffectType.DAMAGE_RESISTANCE, 20*60*5, 0)); + + } + else if(ran<75) { + LoveEffect effect = new LoveEffect(GTM.getEffectLib()); + effect.setEntity(player); + effect.iterations = 15 * 20; + effect.start(); + player.sendMessage(Utils.f("&7&o" + hornyThingsPrezWouldSay[ThreadLocalRandom.current().nextInt(0, this.hornyThingsPrezWouldSay.length)])); + } + else if(ran<90) { + player.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, 20*60*2, 0)); + } + else if(ran<100) { + player.addPotionEffect(new PotionEffect(PotionEffectType.CONFUSION, 20*15, 0)); + } + return true; + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/example/Steroids.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/example/Steroids.java new file mode 100644 index 0000000..8091353 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/example/Steroids.java @@ -0,0 +1,96 @@ +package net.grandtheftmc.gtm.drugs.example; + +import com.j0ach1mmall3.jlib.player.JLibPlayer; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.util.NMSUtil; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.drugs.DrugEffect; +import net.grandtheftmc.gtm.drugs.categories.examples.AnabolicSteroids; +import net.grandtheftmc.gtm.drugs.events.DrugUseEvent; +import net.grandtheftmc.gtm.users.GTMUser; +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; +import org.bukkit.scheduler.BukkitRunnable; + +import java.util.*; +import java.util.concurrent.ThreadLocalRandom; + +/** + * Created by Timothy Lampen on 2017-04-01. + */ +public class Steroids extends AnabolicSteroids{ + + private final HashMap<UUID, List<Long>> injectTimes = new HashMap<>(); + private static final int NEEDED_RATE = 3;//per X + private static final int TIMEFRAME = 10;//seconds + public Steroids() { + super("steroids", 120); + } + + @Override + public boolean apply(Player p) { + boolean[] failed = {false}; + UUID uuid = p.getUniqueId(); + DrugEffect effect = (drug, duration, player) -> { + player.playSound(player.getLocation(), Sound.BLOCK_NOTE_SNARE, 1, 1); + int effectDuration = (int) Math.round(duration + (duration * ThreadLocalRandom.current().nextDouble(-.25, .25))) * 20; + Bukkit.getPluginManager().callEvent(new DrugUseEvent(player, this)); + if (playerCanRage(uuid)) { + for (PotionEffect type : player.getActivePotionEffects()) { + player.removePotionEffect(type.getType()); + } + GTM.getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.WEAKNESS, effectDuration / 2, 0))); + GTM.getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.SPEED, effectDuration / 2, 2))); + GTM.getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.WITHER, effectDuration / 2, 1))); + GTM.getUserManager().getLoadedUser(player.getUniqueId()).setLastTag(System.currentTimeMillis()); + } else { + GTM.getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.SPEED, effectDuration, 0))); + GTM.getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.DAMAGE_RESISTANCE, effectDuration, 0))); + GTM.getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.INCREASE_DAMAGE, effectDuration, 1))); + final long addTime = System.currentTimeMillis(); + new BukkitRunnable() { + @Override + public void run() { +// TODO: Not compatible, disabled for now. +// new JLibPlayer(player).setWorldborderTint(100); + + new BukkitRunnable() { + @Override + public void run() { + if (!GTM.getDrugManager().getEffectManager().canRecieveOngoingEffect(player, addTime)) { + cancel(); + return; + } + GTMUser user = GTM.getUserManager().getLoadedUser(uuid); + user.updateTintHealth(player, Core.getUserManager().getLoadedUser(player.getUniqueId())); + } + }.runTaskLater(GTM.getInstance(), effectDuration / 20); + } + }.runTaskLater(GTM.getInstance(), 1); + } + }; + effect.apply(this, this.getDuration(), p); + return !failed[0]; + } + + private boolean playerCanRage(UUID uuid){ + if(injectTimes.containsKey(uuid)){ + List<Long> tempTimes = new ArrayList<>(); + ArrayList<Long> times = new ArrayList<>(injectTimes.get(uuid)); + times.add(System.currentTimeMillis()); + times.stream().forEach((l) -> { + if((l+(TIMEFRAME*1000))<=System.currentTimeMillis()){ + tempTimes.add(l); + } + }); + times.removeAll(tempTimes); + injectTimes.put(uuid, times); + return times.size()>=NEEDED_RATE; + } + injectTimes.put(uuid, Arrays.asList(System.currentTimeMillis())); + return false; + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/example/Weed.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/example/Weed.java new file mode 100644 index 0000000..a2b0440 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/example/Weed.java @@ -0,0 +1,84 @@ +package net.grandtheftmc.gtm.drugs.example; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.drugs.DrugEffect; +import net.grandtheftmc.gtm.drugs.DrugUtil; +import net.grandtheftmc.gtm.drugs.categories.examples.Cannabinoids; +import net.grandtheftmc.gtm.drugs.events.DrugUseEvent; +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; +import org.bukkit.scheduler.BukkitRunnable; + +import java.util.UUID; +import java.util.concurrent.ThreadLocalRandom; + +public class Weed extends Cannabinoids { + + public Weed() { + super("weed", 120); + /*ShapelessRecipe rollingPaperRecipe = new ShapelessRecipe(GTM.getItemManager().getItem("rollingpaper").getItem()); + rollingPaperRecipe.addIngredient(3, Material.PAPER); + Bukkit.getServer().addRecipe(rollingPaperRecipe); + + ShapelessRecipe jointRecipe = new ShapelessRecipe(GTM.getItemManager().getItem("joint").getItem()); + jointRecipe.addIngredient(GTM.getItemManager().getItem("rollingpaper").getItem().getType()); + jointRecipe.addIngredient(GTM.getItemManager().getItem("groundweed").getItem().getType()); + Bukkit.getServer().addRecipe(jointRecipe);*/ + } + + @Override + public boolean apply(Player p) { + boolean[] failed = {false}; + UUID uuid = p.getUniqueId(); + DrugEffect effect = (drug, duration, player) -> { + int roll = ThreadLocalRandom.current().nextInt(100); + int effectDuration = (int) Math.round(duration + (duration * ThreadLocalRandom.current().nextDouble(-.25, .25))) * 20; + player.playSound(player.getLocation(), Sound.BLOCK_LAVA_POP, 1, 1); + Bukkit.getPluginManager().callEvent(new DrugUseEvent(player, this)); + final long addTime = System.currentTimeMillis(); + + if (roll > 4 || GTM.getInstance().getDrugManager().inOD(player.getUniqueId())) { + GTM.getInstance().getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.SLOW, effectDuration, 1))); + GTM.getInstance().getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.SLOW_DIGGING, effectDuration, 0))); + new BukkitRunnable() { + @Override + public void run() { + if (!GTM.getInstance().getDrugManager().getEffectManager().canRecieveOngoingEffect(player, addTime)) + return; + new BukkitRunnable() { + @Override + public void run() { + GTM.getInstance().getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.HUNGER, effectDuration, 1))); + } + }.runTask(GTM.getInstance()); + player.sendMessage(Lang.DRUGS.f("&7&oDamn I could go for some McDonalds right now...")); + + } + }.runTaskLaterAsynchronously(GTM.getInstance(), 20 * 60 * 2); + } else { + GTM.getInstance().getDrugManager().addOD(player.getUniqueId()); + GTM.getUserManager().getLoadedUser(player.getUniqueId()).setLastTag(System.currentTimeMillis()); + GTM.getInstance().getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.BLINDNESS, effectDuration, 0))); + player.playSound(player.getLocation(), Sound.ENTITY_LIGHTNING_THUNDER, 10, 1); + final long endTime = System.currentTimeMillis() + (effectDuration / 20 * 1000); + new BukkitRunnable() { + @Override + public void run() { + if (System.currentTimeMillis() >= endTime || !GTM.getInstance().getDrugManager().getEffectManager().canRecieveOngoingEffect(player, addTime)) { + GTM.getInstance().getDrugManager().removeOD(player.getUniqueId()); + cancel(); + } + player.playSound(player.getLocation(), DrugUtil.getRandomParanoiaSound(), 10, ThreadLocalRandom.current().nextFloat() * 2); + } + }.runTaskTimerAsynchronously(GTM.getInstance(), 5, 15); + player.sendMessage(Lang.DRUGS.f("&7&oUghhh... That must've been a bad batch of K2...")); + } + }; + effect.apply(this, this.getDuration(), p); + return !failed[0]; + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/example/lsd/LSD.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/example/lsd/LSD.java new file mode 100644 index 0000000..a7392e4 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/example/lsd/LSD.java @@ -0,0 +1,189 @@ +package net.grandtheftmc.gtm.drugs.example.lsd; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.drugs.DrugEffect; +import net.grandtheftmc.gtm.drugs.DrugService; +import net.grandtheftmc.gtm.drugs.DrugUtil; +import net.grandtheftmc.gtm.drugs.categories.examples.Hallucinogens; +import net.grandtheftmc.gtm.drugs.events.DrugUseEvent; +import org.bukkit.*; +import org.bukkit.block.Block; +import org.bukkit.entity.Player; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; +import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.scheduler.BukkitScheduler; + +import java.util.*; +import java.util.concurrent.ThreadLocalRandom; + +public class LSD extends Hallucinogens { + + private final Hashtable<UUID, HashSet<Location>> changedBlocks = new Hashtable<>(); + private final HashMap<UUID, Long> cooldown = new HashMap<>(); + private int task; + + public LSD() { + super("LSD",30); + } + + @Override + public boolean apply(Player p) { + boolean[] failed = {false}; + UUID uuid = p.getUniqueId(); + final long addTime = System.currentTimeMillis(); + final int stageDuration = getDuration() + (int)Math.round(getDuration()*ThreadLocalRandom.current().nextDouble(-.25, .25)); + + DrugEffect effect = (drug, duration, player) -> { + final DrugService service = (DrugService) GTM.getDrugManager().getService(); + if (checkCooldown(uuid)) { + Bukkit.getPluginManager().callEvent(new DrugUseEvent(player, this)); + if (ThreadLocalRandom.current().nextInt(0, 100) <= 4 && !GTM.getDrugManager().inOD(player.getUniqueId())) { + GTM.getUserManager().getLoadedUser(player.getUniqueId()).setLastTag(System.currentTimeMillis()); + GTM.getDrugManager().addOD(player.getUniqueId()); + badTrip(player, addTime, duration); + return; + } + stageOne(player, addTime, stageDuration); + } else { + player.sendMessage(Lang.DRUGS.f("&7Hey man, I don't think that you should use it so soon, wait a while bro.")); + } + }; + effect.apply(this, this.getDuration(), p); + return !failed[0]; + } + + private void stageOne(Player player, long addTime, int length) { + if(player.isValid()) { + player.playSound(player.getLocation(), Sound.ENTITY_GENERIC_EAT, 1, 1); + GTM.getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.SLOW, length*2*20, 2))); + GTM.getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.CONFUSION, length*2*20, 1))); + GTM.getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.REGENERATION, length*2*20, 1))); + GTM.getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.DAMAGE_RESISTANCE, length*2*20, 1))); + player.setPlayerTime(18000, false); + new BukkitRunnable(){ + @Override + public void run() { + if(!GTM.getDrugManager().getEffectManager().canRecieveOngoingEffect(player, addTime)) + return; + stageTwo(player, addTime, length); + } + }.runTaskLater(GTM.getInstance(), length*20); + } + } + + private void stageTwo(Player player, long addTime, int length) { + if(player.isValid()) { + player.removePotionEffect(PotionEffectType.SLOW); + player.removePotionEffect(PotionEffectType.CONFUSION); + GTM.getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.SLOW_DIGGING, length*2*20, 1))); + final long endTime = System.currentTimeMillis() + (length*1000) + 10000; + BukkitScheduler scheduler = GTM.getInstance().getServer().getScheduler(); + scheduler.scheduleAsyncRepeatingTask(GTM.getInstance(), new Runnable() { + + @Override + public void run() { + if (System.currentTimeMillis()>=endTime || !GTM.getDrugManager().getEffectManager().canRecieveOngoingEffect(player, addTime)) { + scheduler.cancelTask(task); + player.resetPlayerTime(); + return; + } + player.playSound(player.getLocation(), DrugUtil.getRandomAmbientSound(), 3.0F, 1.0F); + } + }, 0, 20L); + new BukkitRunnable(){ + @Override + public void run() { + if(!GTM.getDrugManager().getEffectManager().canRecieveOngoingEffect(player, addTime)) + return; + stageThree(player, addTime, length); + } + }.runTaskLater(GTM.getInstance(), length*20); + } + } + + private void stageThree(Player player, long addTime, int length) { + final double stopTime = System.currentTimeMillis() + (length*1000); + new BukkitRunnable() { + @Override + public void run() { + if (System.currentTimeMillis()>=stopTime|| !GTM.getDrugManager().getEffectManager().canRecieveOngoingEffect(player, addTime)) { + if(player.isOnline() && changedBlocks.containsKey(player.getUniqueId())){ + changedBlocks.get(player.getUniqueId()).forEach(block -> { + player.sendBlockChange(block, block.getWorld().getBlockAt(block).getType(), block.getWorld().getBlockAt(block).getData()); + }); + } + changedBlocks.remove(player.getUniqueId()); + cancel(); + return; + } + + HashSet<Location> blocks = changedBlocks.containsKey(player.getUniqueId()) ? changedBlocks.get(player.getUniqueId()) : new HashSet<>(); + Collection<Block> nearbyBlocks = DrugUtil.getNearbyBlocks(player.getLocation(), 10); + + nearbyBlocks.forEach(block -> { + if(!blocks.contains(block.getLocation())){ + blocks.add(block.getLocation()); + } + player.sendBlockChange(block.getLocation(), Material.WOOL, (byte)ThreadLocalRandom.current().nextInt(0, 15)); + }); + changedBlocks.put(player.getUniqueId(), blocks); + } + }.runTaskTimer(GTM.getInstance(), 0, 20); + new BukkitRunnable(){ + @Override + public void run() { + if(!GTM.getDrugManager().getEffectManager().canRecieveOngoingEffect(player, addTime)) + return; + stageFive(player, addTime, length); + } + }.runTaskLater(GTM.getInstance(), length*20); + } + + private void stageFive(Player player, long addTime, int length) { + if(GTM.getDrugManager().getEffectManager().canRecieveOngoingEffect(player, addTime)) { + GTM.getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.CONFUSION, length*20*2, 2))); + GTM.getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.WEAKNESS, length*20*2, 1))); + } + + } + + public void badTrip(Player player, long addTime, int length) { + if(GTM.getDrugManager().getEffectManager().canRecieveOngoingEffect(player, addTime)) { + GTM.getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.CONFUSION, length*4, 2))); + GTM.getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.WEAKNESS, length*4, 1))); + GTM.getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.SLOW, length*4, 2))); + BukkitScheduler scheduler = GTM.getInstance().getServer().getScheduler(); + task = scheduler.scheduleAsyncRepeatingTask(GTM.getInstance(), new Runnable() { + int count = 0; + + @Override + public void run() { + count += 1; + if (count >= 70 || !GTM.getDrugManager().getEffectManager().canRecieveOngoingEffect(player, addTime)) { + scheduler.cancelTask(task); + GTM.getDrugManager().removeOD(player.getUniqueId()); + return; + } + player.playSound(player.getLocation(), DrugUtil.getRandomParanoiaSound(), 3.0F, 1.0F); + player.playSound(player.getLocation(), DrugUtil.getRandomAmbientSound(), 3.0F, 1.0F); + player.playEffect(EntityEffect.WITCH_MAGIC); + player.playEffect(EntityEffect.ZOMBIE_TRANSFORM); + } + }, 10L, 20L); + } + } + + private boolean checkCooldown(UUID uuid){ + if(cooldown.containsKey(uuid)){ + if(System.currentTimeMillis()>=(cooldown.get(uuid)+(60*15*1000))){//cooldown has expired + cooldown.put(uuid, System.currentTimeMillis()); + return true; + } + return false; + } + cooldown.put(uuid, System.currentTimeMillis()); + return true; + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/internal/manager/Manager.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/internal/manager/Manager.java new file mode 100644 index 0000000..9499a98 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/internal/manager/Manager.java @@ -0,0 +1,46 @@ +package net.grandtheftmc.gtm.drugs.internal.manager; + +import net.grandtheftmc.gtm.drugs.internal.service.Service; + +import java.util.concurrent.atomic.AtomicInteger; + +/** + * Created by Remco on 25-3-2017. + */ +public abstract class Manager <S extends Service> { + + private final S service; + private volatile String name; + private AtomicInteger id; + + public Manager(String name, AtomicInteger id, S service) { + this.service = service; + this.name = name; + this.id = id; + } + + public abstract void start(); + public abstract void stop(); + public abstract boolean destroy(); + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public AtomicInteger getId() { + return id; + } + + public void setId(AtomicInteger id) { + this.id = id; + } + + public S getService() { + return service; + } +} + diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/internal/service/Helper.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/internal/service/Helper.java new file mode 100644 index 0000000..83e1007 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/internal/service/Helper.java @@ -0,0 +1,11 @@ +package net.grandtheftmc.gtm.drugs.internal.service; + +/** + * Created by Remco on 25-3-2017. + */ +public interface Helper { + + String getHelperName(); + Class<? extends Service> getServiceClass(); + +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/internal/service/Service.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/internal/service/Service.java new file mode 100644 index 0000000..cc2b6db --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/internal/service/Service.java @@ -0,0 +1,42 @@ +package net.grandtheftmc.gtm.drugs.internal.service; + +/** + * Created by Remco on 25-3-2017. + */ +public abstract class Service { + + private volatile Service instance; + private volatile Helper helper; + + private final String name; + + public Service(String name, Helper helper) { + this.name = name; + this.helper = helper; + } + + protected synchronized void setHelper(Helper helper){ + this.helper = helper; + } + + protected Helper getHelper(){ + return helper; + } + + public String getName() { + return name; + } + + protected Service getInstance(){ + if(instance == null){ + synchronized(Service.class) { + try { + instance = Service.class.newInstance(); + } catch (InstantiationException | IllegalAccessException e) { + e.printStackTrace(); + } + } + } + return instance; + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/item/DrugDealerItem.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/item/DrugDealerItem.java new file mode 100644 index 0000000..22178e3 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/item/DrugDealerItem.java @@ -0,0 +1,77 @@ +package net.grandtheftmc.gtm.drugs.item; + +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.drugs.DrugUtil; +import org.bukkit.ChatColor; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; +import java.util.concurrent.ThreadLocalRandom; + +/** + * Created by Timothy Lampen on 2017-04-01. + */ +public class DrugDealerItem { + private final DrugItem item; + private final int minAmount, maxAmount, displayChance, minPrice, maxPrice; + private int stockRemaining; + private boolean shouldDisplay; + private ItemStack is; + private int price; + + public DrugDealerItem(DrugItem item, int minAmount, int maxAmount, int displayChance, int minPrice, int maxPrice) { + this.item = item; + this.minAmount = minAmount > maxAmount ? (maxAmount > 0 ? maxAmount - 1 : 0) : minAmount > -1 ? minAmount : 0; + this.maxAmount = maxAmount > 0 ? maxAmount + 1 : 1; + this.displayChance = displayChance <= -1 ? 0 : displayChance; + this.minPrice = minPrice > maxPrice ? (maxPrice > 0 ? maxPrice - 1 : 0) : minPrice > -1 ? minPrice : 0; + this.maxPrice = maxPrice > 0 ? maxPrice : 1; + ItemStack is = item.getItemStack().clone(); + this.is = is; + reroll(); + } + + public static Optional<DrugDealerItem> byDrugItem(DrugItem item) { + return GTM.getDrugManager().getDrugDealer().getItems().stream().filter(drugDealerItem -> drugDealerItem.item.equals(item)).findFirst(); + } + + public int getStockRemaining() { + return stockRemaining; + } + + public void setStockRemaining(int stockRemaining) { + this.stockRemaining = stockRemaining; + ItemMeta im = is.getItemMeta(); + List<String> lore = im.getLore(); + lore.set(0, ChatColor.GOLD + "Amount Left: " + ChatColor.YELLOW + stockRemaining); + im.setLore(lore); + is.setItemMeta(im); + } + + public int getPrice() { + return this.price; + } + + public void reroll() { + stockRemaining = ThreadLocalRandom.current().nextInt(this.minAmount, this.maxAmount); + shouldDisplay = ThreadLocalRandom.current().nextInt(101) <= displayChance; + this.price = ThreadLocalRandom.current().nextInt(this.minPrice, this.maxPrice); + ItemMeta im = is.getItemMeta(); + List<String> lore = new ArrayList<>(); + lore.add(ChatColor.GOLD + "Amount Left: " + ChatColor.YELLOW + stockRemaining); + lore.add(ChatColor.GOLD + "Price: " + ChatColor.YELLOW + "$" + this.price); + im.setLore(lore); + is.setItemMeta(im); + } + + public boolean isShouldDisplay() { + return shouldDisplay; + } + + public ItemStack getItemStack() { + return DrugUtil.hideDurability(this.is); + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/item/DrugItem.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/item/DrugItem.java new file mode 100644 index 0000000..22b69a5 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/drugs/item/DrugItem.java @@ -0,0 +1,106 @@ +package net.grandtheftmc.gtm.drugs.item; + +import com.j0ach1mmall3.jlib.inventory.JLibItem; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.drugs.Drug; +import net.grandtheftmc.gtm.drugs.DrugService; +import net.minecraft.server.v1_12_R1.NBTTagCompound; +import net.minecraft.server.v1_12_R1.NBTTagString; +import org.bukkit.Material; +import org.bukkit.craftbukkit.v1_12_R1.inventory.CraftItemStack; +import org.bukkit.inventory.ItemStack; + +import java.util.Map; +import java.util.UUID; + +public class DrugItem { + + private final static DrugService drugService = (DrugService) GTM.getDrugManager().getService(); + + private ItemStack itemStack; + private Drug drug; + + public DrugItem(Material material, int amount, UUID owner, Drug drug) { + this.itemStack = new ItemStack(material, amount); + this.drug = drug; + apply(); + } + + public DrugItem(ItemStack itemStack, UUID owner, Drug drug) { + this.itemStack = itemStack.clone(); + this.drug = drug; + apply(); + } + + + public DrugItem(ItemStack itemStack, Drug drug) { + this.itemStack = itemStack.clone(); + this.drug = drug; + apply(); + } + + public DrugItem(JLibItem item, Drug drug){ + this.itemStack = item.getItemStack(); + this.drug = drug; + apply(); + } + + protected DrugItem(ItemStack itemStack) { + this.itemStack = itemStack.clone(); + } + + public final static DrugItem getByItemStack(ItemStack itemStack) { + ItemStack clone = itemStack.clone(); + clone.setAmount(1); + DrugItem base = new DrugItem(clone); + if (drugService.getDrugs().stream().anyMatch(base::isValid) || drugService.getItems().contains(base)) return base; + return null; + } + + public static DrugItem getByDrug(Drug drug){ + if(drugService.getRawItems().rowMap().values().stream().anyMatch(drugItemDrugMap -> drugItemDrugMap.containsValue(drug))){ + Map<DrugItem, Drug> drugs = drugService.getRawItems().rowMap().values().stream().filter(drugItemDrugMap -> drugItemDrugMap.containsValue(drug)).findFirst().get(); + for(DrugItem item : drugs.keySet()){ + if(drugs.get(item).equals(drug)){ + return item; + } + } + } + return null; + } + + public void apply() { + if (!isValid(drug)) { + net.minecraft.server.v1_12_R1.ItemStack nmsCopy = CraftItemStack.asNMSCopy(itemStack); + NBTTagCompound tag = nmsCopy.hasTag() ? nmsCopy.getTag() : new NBTTagCompound(); + NBTTagString drugName = new NBTTagString(drug.getName()); + assert tag != null; + tag.set("drugName", drugName); + nmsCopy.setTag(tag); + this.itemStack = CraftItemStack.asBukkitCopy(nmsCopy); + + } + } + + public final ItemStack getItemStack() { + return itemStack; + } + + public boolean isValid(Drug drug) { + if(itemStack!=null && drug!=null) { + net.minecraft.server.v1_12_R1.ItemStack nmsCopy = CraftItemStack.asNMSCopy(itemStack); + if(nmsCopy!=null) { + NBTTagCompound tag = nmsCopy.hasTag() ? nmsCopy.getTag() : new NBTTagCompound(); + if ((tag != null ? tag.get("drugName") : null) != null) { + String name = tag.getString("drugName"); + return drugService.getDrugs().stream().map(Drug::getName).anyMatch(item -> item.equalsIgnoreCase(name) && drug.getName().equalsIgnoreCase(item)); + } + } + } + return false; + } + + public Drug drug(){ + return drug; + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/event/EventManager.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/event/EventManager.java new file mode 100644 index 0000000..adb06cf --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/event/EventManager.java @@ -0,0 +1,81 @@ +package net.grandtheftmc.gtm.event; + +import java.util.Optional; + +import net.grandtheftmc.gtm.event.christmas.ChristmasEvent; +import net.grandtheftmc.gtm.event.easter.EasterEvent; +import org.bukkit.plugin.Plugin; + +import net.grandtheftmc.core.event.BaseEvent; +import net.grandtheftmc.core.event.EventData; +import net.grandtheftmc.gtm.event.halloween.HalloweenEvent; + +/** + * An event manager class that is a subclass of the EventManager from Core. + * + * @author sbahr + */ +public class EventManager extends net.grandtheftmc.core.event.EventManager { + + + + /** + * Construct a new EventManager. + * + * @param plugin - the owning plugin + * @param serverKey - the server key + */ + protected EventManager(Plugin plugin, String serverKey) { + super(plugin, serverKey); + // TODO Auto-generated constructor stub + } + + /** + * Initialize the manager. + * + * @param plugin - the owning plugin + * @param serverKey - the key of this server instance + */ + public static void init(Plugin plugin, String serverKey) { + + // create singleton instance + instance = new EventManager(plugin, serverKey); + initialized = true; + + // start sync task + instance.getSyncTask(); + } + + /** + * Construct a BaseEvent object based off the event data. + * + * @param plugin - the owning plugin + * @param data - the data bound for the event + * + * @return The BaseEvent object that was constructed, if one exists. + */ + @Override + public Optional<BaseEvent> constructEvent(Plugin plugin, EventData data){ + + BaseEvent event = null; + if(data==null || data.getEventType()==null) + return Optional.empty(); + switch(data.getEventType()){ + case HALLOWEEN: + event = new HalloweenEvent(plugin, data.getStartTime().getTime(), data.getEndTime().getTime()); + break; + case CHRISTMAS: + event = new ChristmasEvent(plugin, data.getStartTime().getTime(), data.getEndTime().getTime()); + break; + // TODO add more events here + case EASTER: + event = new EasterEvent(plugin, data.getStartTime().getTime(), data.getEndTime().getTime()); + break; + default: + break; + } + + return Optional.ofNullable(event); + } + +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/event/christmas/ChristmasEvent.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/event/christmas/ChristmasEvent.java new file mode 100644 index 0000000..d3dfc0a --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/event/christmas/ChristmasEvent.java @@ -0,0 +1,195 @@ +package net.grandtheftmc.gtm.event.christmas; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Utils; +import net.grandtheftmc.core.event.BaseEvent; +import net.grandtheftmc.core.event.EventType; +import net.grandtheftmc.gtm.GTM; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.boss.BarColor; +import org.bukkit.boss.BarStyle; +import org.bukkit.boss.BossBar; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.plugin.Plugin; +import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.scheduler.BukkitTask; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.concurrent.ThreadLocalRandom; +import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; + +/** + * Created by Timothy Lampen on 2017-12-07. + */ +public class ChristmasEvent extends BaseEvent implements Listener{ + + + private List<Location> spawnLocations = new ArrayList<>(); + + private BossBar bossBar = null; + + private BukkitTask updateEventBarTask; + private BukkitTask spawnSantaDropTask; + + public ChristmasEvent(Plugin plugin, long startTime, long endTime) { + super(plugin, EventType.CHRISTMAS.getId(), startTime, endTime); + GTM.getInstance().getServer().getPluginManager().registerEvents(this, GTM.getInstance()); + + } + + @Override + public void onInit() { + + } + + @Override + public void onStart() { + this.bossBar = Bukkit.createBossBar(Utils.f("&c&lC&2&lh&c&lr&2&li&c&ls&2<&c&lm&2&la&c&ls&2&l!"), BarColor.GREEN, BarStyle.SOLID); + + + this.spawnLocations.addAll(Arrays.asList( + new Location(Bukkit.getWorld("minesantos"), -188,69,226), + new Location(Bukkit.getWorld("minesantos"), 401,68,31), + new Location(Bukkit.getWorld("minesantos"), 32,86,-212), + new Location(Bukkit.getWorld("minesantos"), -604,64,-170), + new Location(Bukkit.getWorld("minesantos"), 256,84,430), + new Location(Bukkit.getWorld("minesantos"), -320,74,158), + new Location(Bukkit.getWorld("minesantos"), 7,73,197), + new Location(Bukkit.getWorld("minesantos"), -9,153,-129), + new Location(Bukkit.getWorld("minesantos"), 323,121,303), + new Location(Bukkit.getWorld("minesantos"), -157,74,159), + new Location(Bukkit.getWorld("minesantos"), 95,83,187), + new Location(Bukkit.getWorld("minesantos"), -210,94,422), + new Location(Bukkit.getWorld("minesantos"), -261,74,-16), + new Location(Bukkit.getWorld("minesantos"), -293,74,369), + new Location(Bukkit.getWorld("minesantos"), -116,73,57) + )); + + this.spawnSantaDropTask = new BukkitRunnable() { + @Override + public void run() { + spawnSantaDrop(); + } + }.runTaskTimer(Core.getInstance(), 20*60*8,20*60*ThreadLocalRandom.current().nextInt(60,120)); + + this.updateEventBarTask = new BukkitRunnable() { + @Override + public void run() { + updateBossBar(); + } + }.runTaskTimerAsynchronously(getPlugin(), 0, 20*60); + + + for(Player player : Bukkit.getOnlinePlayers()) + this.bossBar.addPlayer(player); + + + } + + @EventHandler + public void onJoin(PlayerJoinEvent event){ + Player player = event.getPlayer(); + if(this.bossBar!=null) + this.bossBar.addPlayer(player); + } + + @EventHandler + public void onLeave(PlayerQuitEvent event){ + Player player = event.getPlayer(); + if(this.bossBar!=null) + this.bossBar.removePlayer(player); + } + + @Override + public void onEnd() { + this.updateEventBarTask.cancel(); + this.spawnSantaDropTask.cancel(); + + this.bossBar.removeAll(); + this.bossBar = null; + + } + + private void spawnSantaDrop(){ + List<Location> copy = spawnLocations.stream().filter(loc -> loc.getChunk().isLoaded()).collect(Collectors.toList()); + if(copy.size() == 0) { + GTM.error("Could not spawn a christmas drop because no players are currently near the drop locations"); + return; + } + new SpawnSantaDropTask(copy.get(ThreadLocalRandom.current().nextInt(0,copy.size()))); + } + + + + private void updateBossBar() { + + // how many seconds left until over + int secondsLeft = (int) ((getEndTime() - System.currentTimeMillis()) / 1000.0); + + int day = (int) TimeUnit.SECONDS.toDays(secondsLeft); + long hours = TimeUnit.SECONDS.toHours(secondsLeft) - (day * 24); + long minute = TimeUnit.SECONDS.toMinutes(secondsLeft) - (TimeUnit.SECONDS.toHours(secondsLeft) * 60); + + String timeLeft = day + "d " + hours + "h " + minute + "m"; + String title = Utils.f("&c&lC&2&lh&c&lr&2&li&c&ls&2<&c&lm&2&la&c&ls&2&l! ") + ChatColor.GOLD + ChatColor.BOLD + timeLeft; + + double start = System.currentTimeMillis() - getStartTime(); + double end = getEndTime() - getStartTime(); + + // this gives us how through we are + double through = start / end; + double progress = 1 - through; + + this.bossBar.setTitle(title); + this.bossBar.setProgress(progress); + } + + public static void removeCandyCanes(Player player, int amount){ + int deleted = 0; + ItemStack candyCane = GTM.getItemManager().getItem("candycane").getItem(); + for(int i = 0 ; i<player.getInventory().getSize(); i++){ + ItemStack is = player.getInventory().getItem(i); + + if(is==null || is.getType()== Material.AIR) + continue; + if(candyCane.isSimilar(is)) { + if(deleted + is.getAmount() >= amount) { + is.setAmount(is.getAmount()-(amount-deleted)); + player.getInventory().setItem(i, is); + return; + } + else { + deleted += is.getAmount(); + player.getInventory().setItem(i, new ItemStack(Material.AIR)); + } + } + } + player.updateInventory(); + } + + public static boolean hasCandyCanes(Player player, int amount){ + int candyCanes = 0; + ItemStack candyCane = GTM.getItemManager().getItem("candycane").getItem(); + for(ItemStack is : player.getInventory().getContents()) { + if(is==null || is.getType()==Material.AIR) + continue; + if(candyCane.isSimilar(is)) { + if (candyCanes + is.getAmount() >= amount) + return true; + candyCanes += is.getAmount(); + } + } + return false; + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/event/christmas/ChristmasListener.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/event/christmas/ChristmasListener.java new file mode 100644 index 0000000..93bbc97 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/event/christmas/ChristmasListener.java @@ -0,0 +1,257 @@ +package net.grandtheftmc.gtm.event.christmas; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.Utils; +import net.grandtheftmc.core.menus.MenuManager; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.users.eventtag.EventTag; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.items.GameItem; +import net.grandtheftmc.gtm.users.ChatAction; +import net.grandtheftmc.gtm.users.GTMUser; +import org.bukkit.Bukkit; +import org.bukkit.Effect; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Item; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; +import org.bukkit.scheduler.BukkitRunnable; + +import java.lang.reflect.Field; +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; +import java.util.concurrent.ThreadLocalRandom; + +/** + * Created by Timothy Lampen on 1/2/2018. + */ +public class ChristmasListener implements Listener { + + private Set<UUID> naughtyPlayers = new HashSet<>(); + + + public ChristmasListener(){ + new BukkitRunnable(){ + @Override + public void run() { + for(UUID uuid : naughtyPlayers){ + Player player = Bukkit.getPlayer(uuid); + if(player==null || !player.getWorld().getName().equals("minesantos")) + continue; + Item item = player.getWorld().dropItem(player.getLocation(), new ItemStack(Material.BLAZE_POWDER)); + + try { + Field itemField = item.getClass().getDeclaredField("item"); + Field ageField; + Object entityItem; + + itemField.setAccessible(true); + entityItem = itemField.get(item); + + ageField = entityItem.getClass().getDeclaredField("age"); + ageField.setAccessible(true); + ageField.set(entityItem, 5700);//last for 15 sec + } + catch (NoSuchFieldException | IllegalAccessException e) { + e.printStackTrace(); + } + + item.setPickupDelay(Integer.MAX_VALUE); + } + } + }.runTaskTimer(GTM.getInstance(), 0, 20*5); + } + + + @EventHandler(priority = EventPriority.LOW) + public void onDeath(PlayerDeathEvent event){ + Player player= event.getEntity(); + if(player.getKiller()==null) + return; + if(player.getKiller().equals(player)) + return; + if(!this.naughtyPlayers.contains(player.getUniqueId())) + return; + player.getWorld().dropItem(player.getLocation(), GTM.getItemManager().getItem("candycane").getItem(2)); + this.naughtyPlayers.remove(player.getUniqueId()); + + Player killer = player.getKiller(); + killer.sendMessage(Lang.CHRISTMAS.f("&aThank you &b" + killer.getName() + "&a! Christmas has been saved! Here are some candy canes for your trouble.")); + } + + @EventHandler(priority = EventPriority.LOWEST) + public void onChat(AsyncPlayerChatEvent e){ + Player player = e.getPlayer(); + String msg = e.getMessage(); + GTMUser user = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + User coreUser = Core.getUserManager().getLoadedUser(player.getUniqueId()); + if(user.getCurrentChatAction()==null || user.getCurrentChatAction()!= ChatAction.SANTA_NAUGHTY_LIST) + return; + e.setCancelled(true); + ServerUtil.runTask(() -> { + switch (user.getCurrentChatAction()) { + case SANTA_NAUGHTY_LIST: { + if(msg.equalsIgnoreCase("cancel")) { + user.clearCurrentChatAction(); + player.sendMessage(Lang.CHRISTMAS.f("&7&oThe list is unimpressed with your choice.")); + return; + } + Player target = Bukkit.getPlayer(msg); + if (target == null) { + player.sendMessage(Lang.CHRISTMAS.f("&7&oThe list can't find that player online, type 'cancel' to stop the selection.")); + user.resetCurrentChatActionTimer(null); + return; + } + if(target.equals(player)) { + player.sendMessage(Lang.CHRISTMAS.f("&7&oSanta doesn't like masochists... Pick someone other than yourself!")); + user.resetCurrentChatActionTimer(null); + return; + } + if(!coreUser.getUnlockedTags().contains(EventTag.NAUGHTY)) { + coreUser.giveEventTag(EventTag.NAUGHTY); + player.sendMessage(Lang.CHRISTMAS.f("&aYou have been given the " + EventTag.NAUGHTY.getBoldName() + "&a tag. &7Select your active tag by going into Phone -> Account -> Unlocked Tags.\n&7Make sure that the '&6Show Game Rank&7' preference is toggled on.")); + } + coreUser.addCooldown("naughty_list", 60 * 10, true, true); + Bukkit.broadcastMessage(Lang.CHRISTMAS.f("&cOh no! Santa just recieved a report that &b" + target.getName() + " &chas been a &4&lNAUGHTY &cperson! Santa will give anyone who kills him &a2 candy canes &cfor their troubles. The player will be marked with a blaze powder trail.")); + this.naughtyPlayers.add(target.getUniqueId()); + user.clearCurrentChatAction(); + return; + } + } + }); + } + + @EventHandler + public void onInteract(PlayerInteractEvent e){ + Player player = e.getPlayer(); + ItemStack item = e.getItem(); + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + GTMUser gtmUser = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + if (e.getAction() != Action.RIGHT_CLICK_AIR && e.getAction() != Action.RIGHT_CLICK_BLOCK) + return; + + + + //handle the custom items + if (item != null && player.getInventory().getItemInMainHand().equals(item)) { + if(item.getType()== Material.MAGMA_CREAM && item.hasItemMeta() && item.getItemMeta().getDisplayName().contains("Snowball")) { + if(player.getWorld().getName().equalsIgnoreCase("spawn")) { + player.sendMessage(Lang.CHRISTMAS.f("&cYou cannot use this item at spawn!")); + return; + } + if(item.getAmount()==1) + player.getInventory().setItemInMainHand(new ItemStack(Material.AIR)); + else + item.setAmount(item.getAmount()-1); + player.updateInventory(); + + Location loc = player.getEyeLocation().toVector().add(player.getLocation().getDirection().multiply(2)).toLocation(player.getWorld(), player.getLocation().getYaw(), player.getLocation().getPitch()); + Item cube = player.getWorld().dropItem(loc, new ItemStack(Material.MAGMA_CREAM)); + cube.setVelocity(player.getEyeLocation().getDirection().multiply(2)); + cube.setPickupDelay(Integer.MAX_VALUE); + + new BukkitRunnable() { + @Override + public void run() { + if(cube.isOnGround() || !cube.isValid()) { + cube.remove(); + cancel(); + return; + } + for(Entity e : cube.getNearbyEntities(.3,1.2,.3)){ + if(e.getType() == EntityType.PLAYER){ + Player player = (Player)e; + player.getWorld().playEffect(cube.getLocation(), Effect.EXPLOSION_LARGE, 1, 1); + player.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, 20*5, 1)); + cube.remove(); + cancel(); + return; + } + } + } + }.runTaskTimer(GTM.getInstance(), 3,1); + } + //game items + GameItem gItem = GTM.getItemManager().getItem(item); + if(gItem==null) + return; + switch (gItem.getName()) { + case "candycane": { + e.setCancelled(true); + MenuManager.openMenu(player, "christmasshop"); + return; + } + case "santanicelist": { + e.setCancelled(true); + if(player.getWorld().getName().equalsIgnoreCase("spawn")) { + player.sendMessage(Lang.CHRISTMAS.f("&cYou cannot use this item at spawn!")); + return; + } + if (player.getLocation().getY()<player.getWorld().getHighestBlockYAt(player.getLocation())) { + player.sendMessage(Lang.CHRISTMAS.f("&cYou must have a clear path to the sky to spawn the present drop!")); + return; + } + if(!user.getUnlockedTags().contains(EventTag.NICE)) { + player.sendMessage(Lang.CHRISTMAS.f("&aYou have been given the " + EventTag.NICE.getBoldName() + " tag. &7Select your active tag by going into Phone -> Account -> Unlocked Tags.\n&7Make sure that the '&6Show Game Rank&7' preference is toggled off.")); + user.giveEventTag(EventTag.NICE); + } + if(item.getAmount()==1) + player.getInventory().setItemInMainHand(new ItemStack(Material.AIR)); + else + item.setAmount(item.getAmount()-1); + Bukkit.broadcastMessage(Lang.CHRISTMAS.f("&6Thank you &a" + player.getName() + " &6for spawning a santa drop for the server!")); + new SpawnSantaDropTask(player.getWorld().getHighestBlockAt(player.getLocation()).getLocation().clone().add(0,1,0)); + player.updateInventory(); + return; + } + case "santanaughtylist": { + e.setCancelled(true); + if(!user.getUserRank().isHigherThan(UserRank.ADMIN)) { + player.sendMessage(Lang.CHRISTMAS.f("&7Players cannot use this item. Have a cookie instead!")); + player.getInventory().setItemInMainHand(Utils.createItem(Material.COOKIE, "&4&lExtremely &cSalty Cookie")); + player.updateInventory(); + return; + } + if (user.isOnCooldown("naughty_list")) { + player.sendMessage(Lang.CHRISTMAS.f("&cYou must wait " + user.getFormattedCooldown("naughty_list") + "&c to use this item.")); + return; + } + player.sendMessage(Lang.CHRISTMAS.f("&7&oThe list in your hand asks you to enter the name of the player who is naughty into chat")); + gtmUser.setCurrentChatAction(ChatAction.SANTA_NAUGHTY_LIST, null); + return; + } + case "christmascake": { + e.setCancelled(true); + + player.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, 30*20, 0), true); + player.addPotionEffect(new PotionEffect(PotionEffectType.REGENERATION, 30*20, 0), true); + + boolean destroy = ThreadLocalRandom.current().nextInt(0,10) == 0; + if(destroy) { + player.getInventory().setItemInMainHand(new ItemStack(Material.AIR)); + player.sendMessage(Lang.CHRISTMAS.f("&7Wow you're fat... You just ate the whole cake!")); + player.updateInventory(); + } + return; + } + } + } + } + +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/event/christmas/SpawnSantaDropTask.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/event/christmas/SpawnSantaDropTask.java new file mode 100644 index 0000000..da5fd89 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/event/christmas/SpawnSantaDropTask.java @@ -0,0 +1,183 @@ +package net.grandtheftmc.gtm.event.christmas; + +import de.slikey.effectlib.effect.*; +import de.slikey.effectlib.util.DynamicLocation; +import de.slikey.effectlib.util.ParticleEffect; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.Utils; +import net.grandtheftmc.core.users.targets.TrackedEntity; +import net.grandtheftmc.core.users.targets.TrackedLocation; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.gtm.GTM; +import org.bukkit.*; +import org.bukkit.entity.ArmorStand; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Item; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.metadata.FixedMetadataValue; +import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.util.EulerAngle; +import org.bukkit.util.Vector; + +import java.util.concurrent.ThreadLocalRandom; + +/** + * Created by Timothy Lampen on 2017-12-07. + */ +public class SpawnSantaDropTask{ + + private ArmorStand giftPackage; + private final Location dropPoint; + + public SpawnSantaDropTask(Location loc) { + this.dropPoint = loc; + beingStage1(); + } + + private void constructPackage(Location loc){ + giftPackage = (ArmorStand)this.dropPoint.getWorld().spawnEntity(loc, EntityType.ARMOR_STAND); + giftPackage.setMetadata("CUSTOM", new FixedMetadataValue(GTM.getInstance(), "fuck vehicles")); + giftPackage.setItemInHand(GTM.getItemManager().getItem("bigpresent").getItem()); + giftPackage.setCollidable(false); + giftPackage.setBasePlate(false); + giftPackage.setVisible(false); + giftPackage.setRightArmPose(new EulerAngle(-Math.PI/2,0,0)); + giftPackage.setGravity(false); + giftPackage.setRemoveWhenFarAway(false); + } + + + /** + * @apiNote The beginning of the whole animation. This method handles up to the point of the package reaching the ground. + */ + private void beingStage1(){ + Bukkit.getOnlinePlayers().forEach(player -> player.sendTitle(ChatColor.translateAlternateColorCodes('&', Lang.CHRISTMAS.toString()), ChatColor.AQUA + "A christmas care package has spawned on the map!", 20, 60, 20)); + double rateOfDecline = 50.0/240;//the rate at decline/2ticks so that it takes a minute for the box to reach the bottom. + + constructPackage(this.dropPoint.clone().add(0,50,0)); + for(Player player : Bukkit.getOnlinePlayers()) { + Core.getUserManager().getLoadedUser(player.getUniqueId()).addBossBarTarget(new TrackedLocation(this.dropPoint)); + } + + StarEffect star = new StarEffect(GTM.getEffectLib()); + DynamicLocation dLoc = new DynamicLocation(this.giftPackage); + star.setDynamicOrigin(dLoc); + star.particle = ParticleEffect.FLAME; + star.iterations = Integer.MAX_VALUE; + star.particles = 4; + star.period = 2; + star.visibleRange = 55f; + star.start(); + + new BukkitRunnable() { + @Override + public void run() { + if(!giftPackage.isValid()) { + Location loc = giftPackage.getLocation().clone(); + giftPackage.remove(); + constructPackage(loc); + star.setDynamicOrigin(new DynamicLocation(giftPackage)); + } + if(dropPoint.getY()-1>=giftPackage.getLocation().getY()) { + cancel(); + star.cancel(); + beginStage2(); + return; + } + + + giftPackage.teleport(giftPackage.getLocation().clone().add(0,-rateOfDecline, 0)); + } + }.runTaskTimer(GTM.getInstance(), 0, 5); + } + + private int inverseShotCandyCanes = ThreadLocalRandom.current().nextInt(10,26); + /** + * @apiNote The middle of the whole animation. This method handles up to the point of the package shoots all of the candy canes. + */ + private void beginStage2(){ + + SphereEffect effect = new SphereEffect(GTM.getEffectLib()); + effect.particle = ParticleEffect.FIREWORKS_SPARK; + effect.iterations = Integer.MAX_VALUE; + effect.setLocation(this.giftPackage.getLocation().clone().add(.2,1,.2)); + effect.radius = 5; + effect.particles = 30; + effect.radiusIncrease = 0; + effect.start(); + + + new BukkitRunnable() { + @Override + public void run() { + + if(inverseShotCandyCanes<=0){ + cancel(); + effect.cancel(); + beginStage3(); + return; + } + double ranX = ThreadLocalRandom.current().nextDouble(-1.5,1.5); + double ranY = ThreadLocalRandom.current().nextDouble(1,2); + double ranZ = ThreadLocalRandom.current().nextDouble(-1.5,1.51);//make velocity in random direction + FlameEffect trace = new FlameEffect(GTM.getEffectLib()); + Item item = giftPackage.getWorld().dropItem(giftPackage.getLocation().clone().add(0,1.2,0), GTM.getItemManager().getItem("candycane").getItem()); + + trace.setEntity(item); + trace.iterations = 60; + trace.period = 2; + trace.particleCount = 1; + trace.start(); + + item.setVelocity(new Vector(ranX, ranY, ranZ)); + item.getLocation().getWorld().playSound(item.getLocation(), Sound.ENTITY_BLAZE_SHOOT, 10, 10); + + inverseShotCandyCanes--; + } + }.runTaskTimer(Core.getInstance(), 0, 30*1); + } + /** + * @apiNote The end of the whole animation. This method cleans everything up. + */ + private void beginStage3(){ + final long startTime = System.currentTimeMillis(); + + + new BukkitRunnable() { + boolean flip = true; + float cRadius = 2f; + @Override + public void run() { + if(startTime+8000<System.currentTimeMillis()) { + cancel(); + for(Player player : Bukkit.getOnlinePlayers()) { + Core.getUserManager().getLoadedUser(player.getUniqueId()).removeBossBarTarget(dropPoint); + } + giftPackage.remove(); + return; + } + + giftPackage.getWorld().playSound(giftPackage.getLocation(), Sound.BLOCK_BREWING_STAND_BREW, 10, 10); + + VortexEffect vortex = new VortexEffect(GTM.getEffectLib()); + vortex.setLocation(giftPackage.getLocation().clone()); + vortex.particle = ParticleEffect.SPELL_MOB; + vortex.color = flip ? Color.GREEN : Color.RED; + vortex.iterations = 20; + vortex.period = 2; + vortex.circles = 2; + vortex.radius = cRadius; + vortex.particleCount = 10; + cRadius -= .095f; + flip = !flip; + vortex.start(); + + giftPackage.teleport(giftPackage.getLocation().clone().add(0,-.05, 0)); + } + }.runTaskTimer(GTM.getInstance(), 0, 4); + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/event/easter/EasterDAO.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/event/easter/EasterDAO.java new file mode 100644 index 0000000..28ab0f0 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/event/easter/EasterDAO.java @@ -0,0 +1,92 @@ +package net.grandtheftmc.gtm.event.easter; + +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; +import net.grandtheftmc.core.Core; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.World; + +import java.sql.*; +import java.util.List; +import java.util.Optional; +import java.util.Set; +import java.util.UUID; + +public final class EasterDAO { + + protected static List<EasterEgg> getEasterEggs(Connection connection) { + List<EasterEgg> eggs = Lists.newArrayList(); + try (PreparedStatement statement = connection.prepareStatement("SELECT * FROM easter_egg WHERE server_key=?;")) { + statement.setString(1, Core.name()); + try (ResultSet result = statement.executeQuery()) { + while (result.next()) { + int uniqueIdentifier = result.getInt("id"); + World world = Bukkit.getWorld(result.getString("world")); + double x = result.getDouble("x"); + double y = result.getDouble("y"); + double z = result.getDouble("z"); + eggs.add(new EasterEgg(uniqueIdentifier, new Location(world, x, y, z))); + } + } + } catch (SQLException e) { + e.printStackTrace(); + } + + return eggs; + } + + protected static EasterEgg addEasterEgg(Connection connection, Location location) { + EasterEgg easterEgg = new EasterEgg(location); + try (PreparedStatement statement = connection.prepareStatement( + "INSERT INTO easter_egg (world, x, y, z, server_key) VALUES (?, ?, ?, ?, ?);", Statement.RETURN_GENERATED_KEYS)) { + statement.setString(1, location.getWorld().getName()); + statement.setDouble(2, location.getX()); + statement.setDouble(3, location.getY()); + statement.setDouble(4, location.getZ()); + statement.setString(5, Core.name()); + + statement.execute(); + try (ResultSet result = statement.getGeneratedKeys()) { + if (result.next()) { + easterEgg.setUniqueIdentifier(result.getInt(1)); + return easterEgg; + } + } + } catch (SQLException e) { + e.printStackTrace(); + } + + return null; + } + + protected static void addUserFind(Connection connection, UUID uuid, int eggId) { + try (PreparedStatement statement = connection.prepareStatement("INSERT INTO easter_user (uuid, egg_id, server_key) VALUES (UNHEX(?), ?, ?);")) { + statement.setString(1, uuid.toString().replaceAll("-", "")); + statement.setInt(2, eggId); + statement.setString(3, Core.name()); + + statement.execute(); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + protected static Set<Integer> getFoundEggs(Connection connection, UUID uuid) { + Set<Integer> list = Sets.newHashSet(); + try (PreparedStatement statement = connection.prepareStatement("SELECT egg_id FROM easter_user WHERE uuid=UNHEX(?) AND server_key=?;")) { + statement.setString(1, uuid.toString().replaceAll("-", "")); + statement.setString(2, Core.name()); + + try (ResultSet result = statement.executeQuery()) { + while (result.next()) { + list.add(result.getInt(1)); + } + } + } catch (SQLException e) { + e.printStackTrace(); + } + + return list; + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/event/easter/EasterEgg.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/event/easter/EasterEgg.java new file mode 100644 index 0000000..33b7483 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/event/easter/EasterEgg.java @@ -0,0 +1,53 @@ +package net.grandtheftmc.gtm.event.easter; + +import net.grandtheftmc.core.wrapper.packet.out.WrapperPlayServerEntityDestroy; +import org.bukkit.Location; +import org.bukkit.entity.ArmorStand; +import org.bukkit.entity.Player; + +public final class EasterEgg { + + /** Unique Identifier of the Egg */ + private int uniqueIdentifier; + /** Location of the Egg block */ + private final Location location; + + private ArmorStand armorStand; + + protected EasterEgg(Location location) { + this.location = location; + } + + protected EasterEgg(int uniqueIdentifier, Location location) { + this.uniqueIdentifier = uniqueIdentifier; + this.location = location; + } + + protected int getUniqueIdentifier() { + return uniqueIdentifier; + } + + protected void setUniqueIdentifier(int uniqueIdentifier) { + this.uniqueIdentifier = uniqueIdentifier; + } + + protected Location getLocation() { + return location; + } + + protected ArmorStand getArmorStand() { + return armorStand; + } + + protected void setArmorStand(ArmorStand armorStand) { + this.armorStand = armorStand; + } + + protected void destroyFor(Player player) { + if (this.armorStand == null) return; + + WrapperPlayServerEntityDestroy destroy = new WrapperPlayServerEntityDestroy(); + destroy.setEntityId(this.armorStand.getEntityId()); + destroy.sendPacket(player); + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/event/easter/EasterEggCommand.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/event/easter/EasterEggCommand.java new file mode 100644 index 0000000..9d2290f --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/event/easter/EasterEggCommand.java @@ -0,0 +1,54 @@ +package net.grandtheftmc.gtm.event.easter; + +import net.grandtheftmc.core.commands.CoreCommand; +import net.grandtheftmc.core.commands.RankedCommand; +import net.grandtheftmc.core.database.BaseDatabase; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.util.C; +import net.grandtheftmc.core.util.Callback; +import net.grandtheftmc.core.util.ServerUtil; +import org.bukkit.entity.Player; + +import java.sql.Connection; +import java.sql.SQLException; + +public final class EasterEggCommand extends CoreCommand<Player> implements RankedCommand { + + private final EasterEvent event; + + public EasterEggCommand(EasterEvent event) { + super("easteregg", "Management command for setting up Easter Eggs."); + this.event = event; + } + + @Override + public void execute(Player sender, String[] strings) { + this.addEgg(sender, aBoolean -> { + sender.sendMessage(aBoolean ? C.GREEN + "An easter egg location has been set." : C.RED + "There was an error adding an easter egg location.."); + }); + } + + @Override + public UserRank requiredRank() { + return UserRank.MANAGER; + } + + private void addEgg(Player player, Callback<Boolean> callback) { + ServerUtil.runTaskAsync(() -> { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + EasterEgg easterEgg = EasterDAO.addEasterEgg(connection, player.getLocation()); + if (easterEgg == null) { + callback.call(false); + return; + } + + if (this.event != null) + this.event.eggs.add(easterEgg); + + callback.call(true); + } catch (SQLException e) { + e.printStackTrace(); + } + }); + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/event/easter/EasterEvent.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/event/easter/EasterEvent.java new file mode 100644 index 0000000..ae3a95a --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/event/easter/EasterEvent.java @@ -0,0 +1,308 @@ +package net.grandtheftmc.gtm.event.easter; + +import com.comphenix.protocol.ProtocolLibrary; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import com.mojang.authlib.GameProfile; +import com.mojang.authlib.properties.Property; +import de.slikey.effectlib.util.ParticleEffect; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.Utils; +import net.grandtheftmc.core.database.BaseDatabase; +import net.grandtheftmc.core.event.BaseEvent; +import net.grandtheftmc.core.event.EventType; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.eventtag.EventTag; +import net.grandtheftmc.core.util.Component; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.gtm.GTM; +import org.bukkit.Bukkit; +import org.bukkit.Chunk; +import org.bukkit.Material; +import org.bukkit.boss.BarColor; +import org.bukkit.boss.BarStyle; +import org.bukkit.boss.BossBar; +import org.bukkit.entity.ArmorStand; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.HandlerList; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.player.AsyncPlayerPreLoginEvent; +import org.bukkit.event.player.PlayerInteractAtEntityEvent; +import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.event.world.ChunkUnloadEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.SkullMeta; +import org.bukkit.metadata.FixedMetadataValue; +import org.bukkit.plugin.Plugin; +import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.scheduler.BukkitTask; + +import java.lang.reflect.Field; +import java.sql.Connection; +import java.sql.SQLException; +import java.util.*; +import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; + +public final class EasterEvent extends BaseEvent implements Listener { + + final HashMap<UUID, EasterPlayerData> playerCache = Maps.newHashMap(); + final Set<EasterEgg> eggs = Sets.newHashSet(); + private final Set<Chunk> chunks = Sets.newHashSet(); + final HashMap<Integer, EasterEgg> eggEntityIds = Maps.newHashMap(); + + private final String[] eggSkins = { + "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMjEzYTI3OGFlOTkwMmY3YzE1YmYzOTY5OWM2YTE0MjYxNDI1Y2NhZmVkYWIyNGZhNmE4NTljNDE1YTMwNWQ0YSJ9fX0=", + "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMjVlZDNhZmJkNjk2NDk5ZGVkY2NmMmRmZDY2NWZkY2VmMDQyOWE4OTk0MjhiNmZkODczNWNiZGNiMjViYjgifX19", + "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZDYwZjY5NTU1N2YxYzEzZTNlNjJlNWNhMDVmYWY0YTczMGRiNzcyYzhmYWIxZjA3MmE3MzI5N2YyMCJ9fX0=", + "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOWQ1MGZlMTVhMjEyODY0OGM3YmQxYTk4NWMzMjBiYWRiZmRmNmViYjQ2ODJjYWM0OTEyOTA5NjIwY2NmIn19fQ==", + "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvN2MzNTI4NzA0YTI3MjkxODEzZDk4OWRjMDFmYmI2ODg0YzE2OGI0ZDA5YTkxMzQ2OTE4OGU0N2Y0MGMyZDAifX19", + "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYmE4YWU0NGU4ZDUwM2NjYjhlMGJmNTEzYTI1YjllOGI2MTVlYzkwNGM0ZjgyOTNkOTk1ZjE0Y2Q4NjllZTEifX19", + "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYzg2MDg5Y2Q5NjhmYzY1YTkxNmY2OGIyNGU3YzYzMzcwZDA3Y2JmNjMyZDRhOWQxMmUzYzI4YjlkYTM4In19fQ==", + "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNjIyYjMzMTliNTk5MzQ4MTcyMzAzNThjZjMzZDAzOGM5ODNjOWI2NzdhZDE1YjBhM2Y1ZjFmZTNiNWMxNTdiIn19fQ==", + "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMzEyNThmOTg5ZTAzMjNiZmUzODJlOGViMjIzODQ5YjRkY2RiMGRlODg3MjczMTQxNWMxYzliYmI0YTgyOTE4In19fQ==", + "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYWQ5MDlkM2U5ZGFmZGI2OGU1NDdhODNhNzQ5NDg2YmFjNmVjZTA5YjhmNjA0ZThmODY1ODE2ZjVhN2E5MjE3In19fQ==", + "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMTk1ZWJjMGYxMTUyYmFiZjJhNTU1YWFjNjc0ZTk2OGUyZjEyOTU4Nzc3NDFmMmM4ZjhiZWJjYjE5NTI4YyJ9fX0=", + "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNjJlODdmODgzMzg2NmExNjcyZTFmMmFhODk1NjYxODBmYzkxZmZiZTRiYzg2Mzc5M2ViNWU2MTYyNjQ4NSJ9fX0=", + "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYmFlZWNhMzYxNTczNGYyZGRlNjUyYzc1YzhmYjUyMGVmZjNiYTQwNWM2NTVhNWZmM2E4N2FiYzY4Yzk4MWIyIn19fQ==", + "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZWE1ZWFiYjA5NTc3NTljZjYxODRhMjk0MWNmZGEwMWI5MWZkMjFmMGQxNTIxMzM1YmYxNDMyZDczYWViZWFiIn19fQ==", + "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZDA5NTU4N2FhNTY1ODM3N2VmYmU1ZmY3ZGFmNTRmZWZmZTZkNWY2YmRhYmEzZGMxOWVlN2QyZjE4NjI2MjQ3ZCJ9fX0=", + "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYmI4ODRkNjFmMjM1MjM1MDQ3NDgzYWM0YmE0Y2U1Mjg2OTFlNjQyNGJhYzEzODE0MTU5MjcyZDk2NzNhYyJ9fX0=" + }; + + private final Random random; + private BossBar bossBar = null; + private BukkitTask updateEventBarTask, runEggEffectsTask; + + public EasterEvent(Plugin plugin, long startTime, long endTime) { + super(plugin, EventType.EASTER.getId(), startTime, endTime); + this.random = new Random(); + } + + @Override + public void onInit() { + HandlerList.unregisterAll(this); + Bukkit.getPluginManager().registerEvents(this, super.getPlugin()); +// new EasterEggCommand(this); + } + + @Override + public void onStart() { + this.bossBar = Bukkit.createBossBar(Utils.f("&c&lE&6&la&e&ls&c<&6&le&e&lr &c&lE&6&lg&e&lg &c&lE&6&lv&e&le&c&ln&6<&e&l!"), BarColor.YELLOW, BarStyle.SOLID); + + this.updateEventBarTask = new BukkitRunnable() { + @Override + public void run() { + updateBossBar(); + + for (Player player : Bukkit.getOnlinePlayers()) { + if (bossBar == null) continue; + bossBar.addPlayer(player); + } + } + }.runTaskTimerAsynchronously(getPlugin(), 0, 20*60); + + + for(Player player : Bukkit.getOnlinePlayers()) + this.bossBar.addPlayer(player); + + ServerUtil.runTaskAsync(() -> { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + this.eggs.addAll(EasterDAO.getEasterEggs(connection)); + + ServerUtil.runTask(() -> { + for (EasterEgg egg : this.eggs) { + if (egg == null) continue; + + if (!egg.getLocation().getChunk().isLoaded()) + egg.getLocation().getChunk().load(); + + for (Entity entity : egg.getLocation().getWorld().getNearbyEntities(egg.getLocation(), 0.2, 2, 0.2)) { + if (entity == null) continue; + if (entity.getType() != EntityType.ARMOR_STAND) continue; + entity.remove(); + } + + ArmorStand armorStand = egg.getLocation().getWorld().spawn(egg.getLocation().clone().subtract(0, 1.4, 0), ArmorStand.class); + armorStand.setRemoveWhenFarAway(false); + armorStand.setGravity(false); + armorStand.setVisible(false); + armorStand.setInvulnerable(true); + armorStand.setHelmet(this.createEggHead()); + armorStand.setCustomName(Utils.f("&e&lClick Me")); + armorStand.setCustomNameVisible(true); + armorStand.setMetadata("easteregg", new FixedMetadataValue(super.getPlugin(), egg)); + + egg.setArmorStand(armorStand); + + eggEntityIds.put(armorStand.getEntityId(), egg); + chunks.add(egg.getLocation().getChunk()); + } + }); + } catch (SQLException e) { + e.printStackTrace(); + } + }); + + this.runEggEffectsTask = new BukkitRunnable() { + @Override + public void run() { + for (EasterEgg egg : EasterEvent.this.eggs) { + if (egg.getArmorStand() == null) continue; +// egg.getLocation().getWorld().spawnParticle(Particle.VILLAGER_HAPPY, egg.getArmorStand().getEyeLocation(), 25, 0.7, 1, 0.7); + List<Player> players = getPlayersHasntUnlocked(egg.getUniqueIdentifier()); + if (players.isEmpty()) break; + ParticleEffect.VILLAGER_HAPPY.display(0.7f, 1f, 0.7f, 1, 25, egg.getArmorStand().getEyeLocation(), players); + //255f/255f,102f/255f,102f/255f + } + } + }.runTaskTimerAsynchronously(getPlugin(), 100, 20*5); + + ProtocolLibrary.getProtocolManager().addPacketListener(new EasterPacketListener(super.getPlugin(), this)); + } + + @Override + public void onEnd() { + this.updateEventBarTask.cancel(); + this.runEggEffectsTask.cancel(); + + this.bossBar.removeAll(); + this.bossBar = null; + + for (EasterEgg egg : EasterEvent.this.eggs) { + if (egg.getArmorStand() == null) continue; + egg.getArmorStand().remove(); + } + } + + private List<Player> getPlayingPlayers() { + return Bukkit.getOnlinePlayers().stream().filter(player -> this.playerCache.containsKey(player.getUniqueId()) && !this.playerCache.get(player.getUniqueId()).hasFoundAllEggs()).collect(Collectors.toList()); + } + + private List<Player> getPlayersHasntUnlocked(int easterEggId) { + return Bukkit.getOnlinePlayers().stream().filter(player -> { + return !player.getWorld().getName().equals("spawn") && this.playerCache.containsKey(player.getUniqueId()) && !this.playerCache.get(player.getUniqueId()).hasFoundEgg(easterEggId); + }).collect(Collectors.toList()); + } + + private void updateBossBar() { + + // how many seconds left until over + int secondsLeft = (int) ((getEndTime() - System.currentTimeMillis()) / 1000.0); + + int day = (int) TimeUnit.SECONDS.toDays(secondsLeft); + long hours = TimeUnit.SECONDS.toHours(secondsLeft) - (day * 24); + long minute = TimeUnit.SECONDS.toMinutes(secondsLeft) - (TimeUnit.SECONDS.toHours(secondsLeft) * 60); + + String timeLeft = day + "d " + hours + "h " + minute + "m"; + String title = Utils.f("&c&lE&6&la&e&ls&c<&6&le&e&lr &c&lE&6&lg&e&lg &c&lE&6&lv&e&le&c&ln&6<&e&l! &6&l") + timeLeft; + + double start = System.currentTimeMillis() - getStartTime(); + double end = getEndTime() - getStartTime(); + + // this gives us how through we are + double through = start / end; + double progress = 1 - through; + + this.bossBar.setTitle(title); + this.bossBar.setProgress(progress); + } + + private ItemStack createEggHead() { + GameProfile profile = new GameProfile(UUID.randomUUID(), null); + profile.getProperties().clear(); + profile.getProperties().put("textures", new Property("texture", this.eggSkins[this.random.nextInt(this.eggSkins.length)], null)); + + ItemStack head = new ItemStack(Material.SKULL_ITEM, 1, (short) 3); + SkullMeta headMeta = (SkullMeta) head.getItemMeta(); + + try { + Field profileField = headMeta.getClass().getDeclaredField("profile"); + profileField.setAccessible(true); + profileField.set(headMeta, profile); + } catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) { + e.printStackTrace(); + } + head.setItemMeta(headMeta); + return head; + } + + @EventHandler + protected final void onPlayerLogin(AsyncPlayerPreLoginEvent event) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + this.playerCache.putIfAbsent(event.getUniqueId(), new EasterPlayerData(super.getPlugin(), this, EasterDAO.getFoundEggs(connection, event.getUniqueId()))); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + @EventHandler + protected final void onPlayerQuit(PlayerQuitEvent event) { + this.playerCache.remove(event.getPlayer().getUniqueId()); + } + + @EventHandler + protected final void onEntityInteract(PlayerInteractAtEntityEvent event) { + if (event.getRightClicked() == null) return; + if (!this.playerCache.containsKey(event.getPlayer().getUniqueId())) return; + if (!event.getRightClicked().hasMetadata("easteregg")) return; + + ArmorStand armorStand = (ArmorStand) event.getRightClicked(); + if (armorStand.getMetadata("easteregg").size() <= 0) return; + if (armorStand.getMetadata("easteregg").get(0) == null) return; + + EasterEgg easterEgg = (EasterEgg) armorStand.getMetadata("easteregg").get(0).value(); + if (easterEgg == null) return; + + EasterPlayerData playerData = this.playerCache.get(event.getPlayer().getUniqueId()); + playerData.find(event.getPlayer(), easterEgg); + } + + @EventHandler + protected final void onEasterEggFind(EasterFoundEggEvent event) { + User user = Core.getUserManager().getLoadedUser(event.getPlayer().getUniqueId()); + if (!this.playerCache.containsKey(event.getPlayer().getUniqueId())) return; + EasterPlayerData playerData = this.playerCache.get(event.getPlayer().getUniqueId()); + + if (event.isFoundAll()) { + user.giveEventTag(EventTag.EGG); + + user.addCrowbars(2); + event.getPlayer().sendMessage(Lang.CROWBARS_ADD.f("2")); + + event.getPlayer().sendTitle(Utils.f("&6&lEaster Event"), Utils.f("&rAll eggs found, You've unlocked '&c&lE&6&lG&e&lG&r' tag!")); + + Bukkit.broadcastMessage(Utils.f("&c&lE&6&la&e&ls&c<&6&le&e&lr &c&lE&6&lg&e&lg &c&lE&6&lv&e&le&c&ln&6<&r")); + Bukkit.broadcastMessage(Utils.f("&e" + event.getPlayer().getName() + "&r has found all Easter Eggs and has been rewarded the '&c&lE&6&lG&e&lG&r' tag!")); + + playerData.startAnimation(event.getPlayer(), event.getEasterEgg()); + return; + } + + user.addCrowbars(2); + event.getPlayer().sendMessage(Lang.CROWBARS_ADD.f("2")); + + event.getPlayer().sendTitle(Utils.f("&6&lEaster Event"), Utils.f("&rYou found an easter egg, &l" + Math.abs(playerData.getEggsFounds() - this.eggs.size()) + "&r left!")); + + playerData.startAnimation(event.getPlayer(), event.getEasterEgg()); + } + + @EventHandler(ignoreCancelled = true) + protected final void onChunkUnload(ChunkUnloadEvent event) { + if (chunks.contains(event.getChunk())) + event.setCancelled(true); + } + + @EventHandler(ignoreCancelled = true) + protected final void onEntityDamage(EntityDamageEvent event) { + if (event.getEntity() == null) return; + + if (event.getEntity().hasMetadata("easteregg")) + event.setCancelled(true); + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/event/easter/EasterFoundEggEvent.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/event/easter/EasterFoundEggEvent.java new file mode 100644 index 0000000..a6f65ec --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/event/easter/EasterFoundEggEvent.java @@ -0,0 +1,30 @@ +package net.grandtheftmc.gtm.event.easter; + +import net.grandtheftmc.core.events.CoreEvent; +import org.bukkit.entity.Player; + +public final class EasterFoundEggEvent extends CoreEvent { + + private final Player player; + private final EasterEgg easterEgg; + private final boolean foundAll; + + public EasterFoundEggEvent(Player player, EasterEgg easterEgg, boolean foundAll) { + super(false); + this.player = player; + this.easterEgg = easterEgg; + this.foundAll = foundAll; + } + + public Player getPlayer() { + return player; + } + + public EasterEgg getEasterEgg() { + return easterEgg; + } + + public boolean isFoundAll() { + return foundAll; + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/event/easter/EasterPacketListener.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/event/easter/EasterPacketListener.java new file mode 100644 index 0000000..8797052 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/event/easter/EasterPacketListener.java @@ -0,0 +1,97 @@ +package net.grandtheftmc.gtm.event.easter; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.ListeningWhitelist; +import com.comphenix.protocol.events.PacketEvent; +import com.comphenix.protocol.events.PacketListener; +import org.bukkit.plugin.Plugin; +import org.bukkit.scheduler.BukkitScheduler; + +public class EasterPacketListener implements PacketListener { + + private final Plugin plugin; + private final EasterEvent event; + + public EasterPacketListener(Plugin plugin, EasterEvent event) { + this.plugin = plugin; + this.event = event; + } + + /** + * Invoked right before a packet is transmitted from the server to the client. + * <p> + * Note that the packet may be replaced, if needed. + * <p> + * This method is executed on the main thread in 1.6.4 and earlier, and thus the Bukkit API is safe to use. + * <p> + * In Minecraft 1.7.2 and later, this method MAY be executed asynchronously, but only if {@link ListenerOptions#ASYNC} + * have been specified in the listener. This is off by default. + * + * @param event - the packet that should be sent. + */ + @Override + public void onPacketSending(PacketEvent event) { + if (event.getPacketType() == PacketType.Play.Server.SPAWN_ENTITY) { + int id = event.getPacket().getIntegers().readSafely(0); + if (!this.event.eggEntityIds.containsKey(id)) return; + + EasterEgg easterEgg = this.event.eggEntityIds.get(id); + if (easterEgg == null) return; + + if (!this.event.playerCache.containsKey(event.getPlayer().getUniqueId())) { + event.setCancelled(true); + return; + } + + EasterPlayerData playerData = this.event.playerCache.get(event.getPlayer().getUniqueId()); + if (playerData.hasFoundEgg(easterEgg.getUniqueIdentifier())) { + event.setCancelled(true); + } + } + } + + /** + * Invoked right before a received packet from a client is being processed. + * <p> + * <b>WARNING</b>: <br> + * This method will be called <i>asynchronously</i>! You should synchronize with the main + * thread using {@link BukkitScheduler#scheduleSyncDelayedTask(Plugin, Runnable, long) scheduleSyncDelayedTask} + * if you need to call the Bukkit API. + * + * @param event - the packet that has been received. + */ + @Override + public void onPacketReceiving(PacketEvent event) { + //404 + } + + /** + * Retrieve which packets sent by the server this listener will observe. + * + * @return List of server packets to observe, along with the priority. + */ + @Override + public ListeningWhitelist getSendingWhitelist() { + return ListeningWhitelist.newBuilder().types(PacketType.Play.Server.SPAWN_ENTITY).build(); + } + + /** + * Retrieve which packets sent by the client this listener will observe. + * + * @return List of server packets to observe, along with the priority. + */ + @Override + public ListeningWhitelist getReceivingWhitelist() { + return ListeningWhitelist.EMPTY_WHITELIST; + } + + /** + * Retrieve the plugin that created list packet listener. + * + * @return The plugin, or NULL if not available. + */ + @Override + public Plugin getPlugin() { + return this.plugin; + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/event/easter/EasterPlayerData.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/event/easter/EasterPlayerData.java new file mode 100644 index 0000000..bf2e60b --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/event/easter/EasterPlayerData.java @@ -0,0 +1,89 @@ +package net.grandtheftmc.gtm.event.easter; + +import com.google.common.collect.Lists; +import de.slikey.effectlib.util.ParticleEffect; +import net.grandtheftmc.core.database.BaseDatabase; +import net.grandtheftmc.core.util.ServerUtil; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.plugin.Plugin; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; +import java.util.Set; +import java.util.concurrent.ThreadLocalRandom; + +public final class EasterPlayerData { + + private final Set<Integer> foundEggs; + private final Plugin plugin; + private final EasterEvent event; + + protected EasterPlayerData(Plugin plugin, EasterEvent event, Set<Integer> foundEggs) { + this.event = event; + this.plugin = plugin; + this.foundEggs = foundEggs; + } + + protected int getEggsFounds() { + return this.foundEggs.size(); + } + + protected boolean hasFoundAllEggs() { + return this.foundEggs.size() >= this.event.eggs.size(); + } + + protected boolean hasFoundEgg(int id) { + return this.foundEggs.contains(id); + } + + /** + * This method is ran when a player finds an Easter Egg. + * + * @param easterEgg - The Easter Egg object + */ + protected void find(Player player, EasterEgg easterEgg) { + + //If the 'foundEggs' list contains this egg, do nothing. + if (this.foundEggs.contains(easterEgg.getUniqueIdentifier())) + return; + + this.foundEggs.add(easterEgg.getUniqueIdentifier()); + + ServerUtil.runTaskAsync(() -> { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + EasterDAO.addUserFind(connection, player.getUniqueId(), easterEgg.getUniqueIdentifier()); + } catch (SQLException e) { + e.printStackTrace(); + } + }); + + boolean foundAll = this.foundEggs.size() == event.eggs.size(); + EasterFoundEggEvent foundEggEvent = new EasterFoundEggEvent(player, easterEgg, foundAll); + Bukkit.getPluginManager().callEvent(foundEggEvent); + } + + protected void startAnimation(Player player, EasterEgg easterEgg) { + player.playSound(player.getLocation(), Sound.ENTITY_ENDERDRAGON_DEATH, 1f, 1f); + + if (easterEgg.getArmorStand() == null) return; + + player.playSound(easterEgg.getLocation(), Sound.ENTITY_GENERIC_EXPLODE, 1f, 1f); + ParticleEffect.SMOKE_NORMAL.display(0.3f, 0.3f, 0.3f, 1, 15, easterEgg.getArmorStand().getEyeLocation(), player); + ParticleEffect.SMOKE_LARGE.display(0.3f, 0.3f, 0.3f, 1, 15, easterEgg.getArmorStand().getEyeLocation(), player); + + //After animation, + easterEgg.destroyFor(player); + } + + private List<ItemStack> getRandomItems() { + List<ItemStack> items = Lists.newArrayList(); + int a = ThreadLocalRandom.current().nextInt(8); + for (int i = 0; i < a; i++) items.add(new ItemStack(Material.EGG)); + return items; + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/event/halloween/HalloweenDAO.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/event/halloween/HalloweenDAO.java new file mode 100644 index 0000000..62eb23f --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/event/halloween/HalloweenDAO.java @@ -0,0 +1,80 @@ +package net.grandtheftmc.gtm.event.halloween; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; + +import net.grandtheftmc.core.Core; + +/** + * Data access object for halloween event specific data. + * + * @author sbahr + */ +public class HalloweenDAO { + + /** + * Get a set of ids for the specified user where each id is the id of a + * premium house that has already been redeemed by the user. + * + * @param conn - the database connection thread + * @param uuid - the uuid of the user + * + * @return A set of integers where each integer is the id of a premium + * house. + */ + public static Set<Integer> getRedeemedHouses(Connection conn, UUID uuid) { + + Set<Integer> houses = new HashSet<>(); + + String query = "SELECT house_id from event_halloween WHERE uuid=UNHEX(?);"; + + try (PreparedStatement ps = conn.prepareStatement(query)) { + ps.setString(1, uuid.toString().replaceAll("-", "")); + + try (ResultSet result = ps.executeQuery()) { + while (result.next()) { + houses.add(result.getInt("house_id")); + } + } + } + catch (SQLException exc) { + Core.log("[HalloweenDAO] Error executing getRedeemedHouses() for uuid=" + uuid.toString()); + exc.printStackTrace(); + } + + return houses; + } + + /** + * Create a redeem house transaction. This is so we mark a house as redeemed. + * + * @param conn - the database connection thread + * @param uuid - the uuid of the user to create the redeem for + * @param houseID - the id of the house + * + * @return {@code true} if the transaction was ran, {@code false} otherwise. + */ + public static boolean createRedeemedHouse(Connection conn, UUID uuid, int houseID) { + + String query = "INSERT IGNORE INTO event_halloween (uuid, house_id) VALUES (UNHEX(?), ?);"; + + try (PreparedStatement ps = conn.prepareStatement(query)) { + ps.setString(1, uuid.toString().replaceAll("-", "")); + ps.setInt(2, houseID); + + ps.executeUpdate(); + return true; + } + catch (SQLException exc) { + Core.log("[HalloweenDAO] Error executing createRedeemedHouse() for uuid=" + uuid.toString() + " and houseID=" + houseID); + exc.printStackTrace(); + + return false; + } + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/event/halloween/HalloweenEvent.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/event/halloween/HalloweenEvent.java new file mode 100644 index 0000000..242f100 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/event/halloween/HalloweenEvent.java @@ -0,0 +1,736 @@ +package net.grandtheftmc.gtm.event.halloween; + +import java.sql.Connection; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Random; +import java.util.Set; +import java.util.UUID; +import java.util.concurrent.TimeUnit; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.World; +import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; +import org.bukkit.block.BlockState; +import org.bukkit.boss.BarColor; +import org.bukkit.boss.BarFlag; +import org.bukkit.boss.BarStyle; +import org.bukkit.boss.BossBar; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.entity.Skeleton; +import org.bukkit.event.Event.Result; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.HandlerList; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.entity.EntityCombustEvent; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.entity.EntityDamageEvent.DamageCause; +import org.bukkit.event.entity.EntityDeathEvent; +import org.bukkit.event.entity.EntitySpawnEvent; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.inventory.EquipmentSlot; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.plugin.Plugin; +import org.bukkit.scheduler.BukkitTask; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.database.BaseDatabase; +import net.grandtheftmc.core.event.BaseEvent; +import net.grandtheftmc.core.event.EventType; +import net.grandtheftmc.core.gui.ConfirmationMenu; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.util.title.NMSTitle; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.items.GameItem; +import net.grandtheftmc.houses.Houses; +import net.grandtheftmc.houses.houses.PremiumHouse; + +public class HalloweenEvent extends BaseEvent implements Listener { + + /** Random instance */ + private static final Random RANDOM = new Random(); + /** The cost to play trick or treat, in tokens */ + public static final int TRICK_COST = 5; + + // spawning variables + /** How often to check to spawn monsters */ + private long spawnTick = 20L * 1; + /** The maximum amount of monsters for this event */ + private int maxMonsters = 100; + /** The spawn variance, how far from the player can we spawn monsters */ + private int spawnVariance = 15; + /** Maps UUID to the entity */ + private Map<UUID, Entity> uuidToEntity; + /** Cache of what users had entities spawned near */ + private Set<UUID> playersTargeted; + /** The last timestamp when we cleared the players target */ + private long targetClearTimestamp; + /** The spawn task for the entities */ + private BukkitTask spawnTask; + /** The world for this event */ + private World world; + + /** Maps UUID to redeemed houses */ + private Map<UUID, Set<Integer>> uuidToRedeemed; + + /** The boss bar for when the event is going on */ + private BossBar bossBar; + /** The total amount of tokens the event has earned in a pot */ + private int tokens; + + /** + * Construct a new HalloweenEvent. + * + * @param plugin - the owning plugin + * @param startTime - the time, in millis since epoch, that this event + * starts + * @param endTime - the time, in millis since epoch, that this event ends + */ + public HalloweenEvent(Plugin plugin, long startTime, long endTime) { + super(plugin, EventType.HALLOWEEN.getId(), startTime, endTime); + this.uuidToEntity = new HashMap<>(); + this.playersTargeted = new HashSet<>(); + this.targetClearTimestamp = System.currentTimeMillis(); + this.world = Bukkit.getWorld("minesantos"); + this.uuidToRedeemed = new HashMap<>(); + this.bossBar = Bukkit.createBossBar("Halloween", BarColor.PINK, BarStyle.SOLID); + } + + /** + * {@inheritDoc} + */ + @Override + public void onInit() { + + } + + /** + * {@inheritDoc} + */ + @Override + public void onStart() { + + // register as plugin + getPlugin().getServer().getPluginManager().registerEvents(this, getPlugin()); + + // set the world time to night + if (world != null) { + world.setTime(12000); + } + + for (Player player : Bukkit.getOnlinePlayers()) { + + // play sound and title + player.playSound(player.getLocation(), Sound.ENTITY_ENDERDRAGON_DEATH, 0.3f, 0f); + NMSTitle.sendTitle(player, ChatColor.GOLD + "Halloween!", ChatColor.WHITE + "Spooky...", 10, 20 * 5, 10); + bossBar.addPlayer(player); + } + + // start the spawn task + this.spawnTask = getSpawnTask(); + } + + /** + * {@inheritDoc} + */ + @Override + public void onEnd() { + + // end the spawn task + if (this.spawnTask != null) { + this.spawnTask.cancel(); + } + + // remove all from boss bar + bossBar.removeAll(); + + // remove all spawned skeletons + removeSpawnedEntities(); + + // unregister this listener + HandlerList.unregisterAll(this); + } + + /** + * Listens in on entity spawn events. + * + * @param event - the event + */ + @EventHandler + public void onEntitySpawn(EntitySpawnEvent event) { + + } + + /** + * Listens in on entity death events. + * + * @param event - the event + */ + @EventHandler + public void onEntityDeath(EntityDeathEvent event) { + + LivingEntity le = event.getEntity(); + + // if custom entity + if (uuidToEntity.containsKey(le.getUniqueId())) { + uuidToEntity.remove(le.getUniqueId()); + + // clear drops + event.getDrops().clear(); + event.setDroppedExp(0); + + // always drop roofied chocolate + GameItem rc = GTM.getItemManager().getItem("roofied_chocolate"); + if (rc != null) { + event.getDrops().add(rc.getItem()); + } + + int chance = RANDOM.nextInt(100); + if (chance < 5) { + + // 5% chance to drop candy bag + GameItem cb = GTM.getItemManager().getItem("candy_bag"); + if (cb != null) { + event.getDrops().add(cb.getItem()); + } + } + } + } + + /** + * Listens in on entity combust event. + * <p> + * This stops entities from getting lit on fire. + * + * @param event - the event + */ + @EventHandler + public void onEntityCombust(EntityCombustEvent event) { + + // grab entity + Entity entity = event.getEntity(); + + // stop custom entities from lit on fire + if (uuidToEntity.containsKey(entity.getUniqueId())) { + event.setCancelled(true); + } + } + + /** + * Listens in on entity damage events for fire tick damage. + * <p> + * This stops entities from getting lit on fire. + * + * @param event - the event + */ + @EventHandler + public void onFireTick(EntityDamageEvent event) { + + // grab entity + Entity entity = event.getEntity(); + + // stop custom entities from lit on fire + if (uuidToEntity.containsKey(entity.getUniqueId())) { + if (event.getCause() == DamageCause.FIRE_TICK) { + event.getEntity().setFireTicks(0); + } + } + } + + /** + * Listens in on player join. + * + * @param event - the event + */ + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + + // grab the player + Player player = event.getPlayer(); + + // play sound and title + player.playSound(player.getLocation(), Sound.ENTITY_ENDERDRAGON_DEATH, 0.3f, 0f); + NMSTitle.sendTitle(player, ChatColor.GOLD + "Halloween!", ChatColor.WHITE + "Spooky...", 10, 20 * 5, 10); + bossBar.addPlayer(player); + + // async fetch for house information + Bukkit.getScheduler().runTaskAsynchronously(getPlugin(), () -> { + + Set<Integer> houses = new HashSet<>(); + try (Connection conn = BaseDatabase.getInstance().getConnection()) { + houses.addAll(HalloweenDAO.getRedeemedHouses(conn, player.getUniqueId())); + } + catch (Exception e) { + e.printStackTrace(); + } + + // sync to get back on thread + Bukkit.getScheduler().runTask(getPlugin(), () -> { + uuidToRedeemed.put(player.getUniqueId(), houses); + }); + }); + } + + /** + * Listens in on player quits. + * + * @param event - the event + */ + @EventHandler + public void onPlayerQuit(PlayerQuitEvent event) { + + // grab event variables + Player player = event.getPlayer(); + + // remove boss bar from playing + bossBar.removePlayer(player); + + if (uuidToRedeemed.containsKey(player.getUniqueId())) { + uuidToRedeemed.remove(player.getUniqueId()); + } + } + + /** + * Listens in on the player interact events. + * + * @param event - the event + */ + @EventHandler(ignoreCancelled = true, priority = EventPriority.LOW) + public void onPlayerInteract(PlayerInteractEvent event) { + + // grab the event variables + Player p = event.getPlayer(); + Action a = event.getAction(); + ItemStack is = event.getItem(); + + // if right click block + if (a == Action.RIGHT_CLICK_BLOCK && event.getHand() == EquipmentSlot.HAND) { + + // make sure they have a candy bag + GameItem gi = GTM.getItemManager().getItem(is); + if (gi != null && gi.getName().equalsIgnoreCase("candy_bag")) { + + if (isDay()) { + p.sendMessage(ChatColor.RED + "You can only " + ChatColor.GOLD + "Trick or Treat" + ChatColor.RED + " at night."); + return; + } + + Block block = event.getClickedBlock(); + if (block != null) { + + // grab block state + BlockState state = block.getState(); + + // grab the block underneath + Block underneath = block.getRelative(BlockFace.DOWN); + if (underneath.getType() == Material.IRON_DOOR_BLOCK) { + state = underneath.getState(); + } + + // see if this is a premium house + Object[] data = Houses.getHousesManager().getHouseAndDoor(state.getLocation()); + if (data != null && data[0] instanceof PremiumHouse) { + + // deny interact events + event.setCancelled(true); + event.setUseInteractedBlock(Result.DENY); + event.setUseItemInHand(Result.DENY); + + // make sure they have tokens + User user = Core.getUserManager().getLoadedUser(p.getUniqueId()); + if (user != null) { + if (user.getTokens() > TRICK_COST) { + + // grab premium house id + PremiumHouse premHouse = (PremiumHouse) data[0]; + int houseID = premHouse.getId(); + + // get list of redeemed houses for the user + Set<Integer> redeemed = null; + if (uuidToRedeemed.containsKey(p.getUniqueId())) { + redeemed = uuidToRedeemed.get(p.getUniqueId()); + } + else { + redeemed = new HashSet<>(); + } + uuidToRedeemed.put(p.getUniqueId(), redeemed); + + if (!redeemed.contains(houseID)) { + + // confirm menu + ConfirmationMenu confirm = new ConfirmationMenu(getPlugin(), getInfoItemStack()) { + + @Override + public void onConfirm(InventoryClickEvent e, Player p) { + + // do this check again + if (user.getTokens() > TRICK_COST) { + + if (uuidToRedeemed.containsKey(p.getUniqueId())) { + Set<Integer> redeemed = uuidToRedeemed.get(p.getUniqueId()); + + redeemed.add(houseID); + uuidToRedeemed.put(p.getUniqueId(), redeemed); + + p.sendMessage(ChatColor.WHITE + "--- " + ChatColor.GOLD + "Trick or Treat" + ChatColor.WHITE + "---"); + p.sendMessage(ChatColor.WHITE + "Trick or Treating uses " + ChatColor.GOLD + TRICK_COST + " tokens" + ChatColor.WHITE + "."); + p.sendMessage(ChatColor.WHITE + "You'll have a chance to win rewards plus a large jackpot of tokens!"); + p.sendMessage(ChatColor.RED.toString() + ChatColor.BOLD + "-" + TRICK_COST + " Tokens"); + + // subtract user's tokens + // and add to global + // pot + user.setTokens(user.getTokens() - TRICK_COST); + setTokens(getTokens() + TRICK_COST); + + // don't let them hit the + // door again + Bukkit.getScheduler().runTaskAsynchronously(getPlugin(), () -> { + try (Connection conn = BaseDatabase.getInstance().getConnection()) { + HalloweenDAO.createRedeemedHouse(conn, p.getUniqueId(), houseID); + } + catch (Exception exc) { + exc.printStackTrace(); + } + }); + + // execute trick or treat + new TrickOrTreatTask(getPlugin(), p, block.getLocation()); + } + } + } + + @Override + public void onDeny(InventoryClickEvent e, Player p) { + + } + }; + confirm.open(p); + } + else { + p.sendMessage(ChatColor.RED + "You have already played " + ChatColor.GOLD + "Trick or Treat" + ChatColor.RED + " at this house."); + } + } + else { + p.sendMessage(ChatColor.RED + "You do not have enough tokens to Trick or Treat! You need " + ChatColor.WHITE + TRICK_COST + ChatColor.RED + " tokens to play!"); + } + } + } + else { + p.sendMessage(ChatColor.RED + "You can only Trick or Treat at Premium Houses!"); + } + } + } + } + } + + /** + * Get the spawn task that handles spawning entities. + * + * @return The spawn task that handles the entities spawning. + */ + protected BukkitTask getSpawnTask() { + + return Bukkit.getScheduler().runTaskTimer(getPlugin(), () -> { + + // change time cycle + world.setTime(world.getTime() + 20); + + if (isDay()) { + removeSpawnedEntities(); + bossBar.removeAll(); + return; + } + else { + bossBar.addFlag(BarFlag.CREATE_FOG); + bossBar.addFlag(BarFlag.DARKEN_SKY); + + Bukkit.getOnlinePlayers().forEach(p -> { + bossBar.addPlayer(p); + }); + } + + updateBossBar(); + + // clear targets event 30 secs + if (System.currentTimeMillis() - targetClearTimestamp > 30 * 1000) { + targetClearTimestamp = System.currentTimeMillis(); + playersTargeted.clear(); + } + + // clamp size + if (uuidToEntity.size() < maxMonsters) { + + // attempt to spawn around a player + for (Player p : Bukkit.getOnlinePlayers()) { + + // skip targetted players + if (playersTargeted.contains(p.getUniqueId())) { + continue; + } + + // must be in minesantos + if (p.getWorld().getName().equalsIgnoreCase("minesantos")) { + + Location spawnLoc = getRandomSpawnPoint(p.getLocation(), spawnVariance); + if (spawnLoc != null) { + + Skeleton skeleton = (Skeleton) spawnLoc.getWorld().spawnEntity(spawnLoc, EntityType.SKELETON); + skeleton.setMaxHealth(30); + skeleton.setHealth(30); + + GameItem cr = GTM.getItemManager().getItem("baseballbat"); + if (cr != null) { + skeleton.getEquipment().setItemInHand(cr.getItem()); + } + + // add to uuid mapping + uuidToEntity.put(skeleton.getUniqueId(), skeleton); + + // cache as a target, will clear every so interval + playersTargeted.add(p.getUniqueId()); + } + } + } + } + + }, 0L, spawnTick); + } + + /** + * Remove the spawned entities from this event. + */ + protected void removeSpawnedEntities() { + + for (World world : Bukkit.getWorlds()) { + + for (Entity entity : world.getEntities()) { + + // if this is a custom entity + if (uuidToEntity.containsKey(entity.getUniqueId())) { + uuidToEntity.remove(entity.getUniqueId()); + + // set health to 0 + if (entity instanceof LivingEntity) { + LivingEntity le = (LivingEntity) entity; + le.setHealth(0); + } + + // remove the entity + entity.remove(); + } + } + } + + // clean up the entities if still exist + uuidToEntity.clear(); + } + + /** + * Get a random spawn point around a specific location. + * + * @param loc - the location to get a spawn point around + * @param variance - the variance, or the radius from the location + * + * @return The location that is a random spawn point candidate. + */ + protected Location getRandomSpawnPoint(Location loc, int variance) { + + // assume the location is somewhat near the ground + Location initial = loc.clone(); + + // add random variance around location + // we roll between 0 and 1, and then offset by 0.5 + // then we multiple that number (say its -0.3) by 2 times the variance + // so we get a negative x of variance length + initial.setX(initial.getX() + ((RANDOM.nextDouble() - 0.5) * 2 * variance)); + initial.setZ(initial.getZ() + ((RANDOM.nextDouble() - 0.5) * 2 * variance)); + + // add 15 blocks to account for being underground or in a building + initial.add(0, 15, 0); + + // search for at least 25 blocks down + Location spawnLoc = findFloor(initial, 25); + if (spawnLoc != null) { + + // get 1.25 block up from the floor, so they can "drop" a bit + spawnLoc.add(0, 1.25, 0); + + // attempt to find a ceiling at least 10 blocks up + Location ceiling = findCeiling(spawnLoc, 10); + if (ceiling == null) { + + // no ceiling is good, we don't want to spawn in buildings + return spawnLoc; + } + } + + return null; + } + + /** + * Given a location, attempt to find the floor, but only iterate up to x + * blocks down. + * + * @param loc - the location to find the floor for + * @param maxSearch - the max number of blocks we iterate straight down + * + * @return The location of the floor, if one was found, otherwise null. + */ + protected Location findFloor(Location loc, int maxSearch) { + + Location initial = loc.clone(); + + int tries = maxSearch; + // while we're touching air + while (initial.getBlock().getType() == Material.AIR) { + + // if no more attempts to find + if (tries <= 0) { + break; + } + // go down one + initial.add(0, -1, 0); + + tries--; + } + + // if it's still air, return null + if (initial.getBlock().getType() == Material.AIR) { + return null; + } + + return initial; + } + + /** + * Given a location, attempt to find the ceiling, but only iterate up to x + * blocks down. + * + * @param loc - the location to find the ceiling for + * @param maxSearch - the max number of blocks we iterate straight up + * + * @return The location of the ceiling, if one was found, otherwise null. + */ + protected Location findCeiling(Location loc, int maxSearch) { + + Location initial = loc.clone(); + + int tries = maxSearch; + // while we're touching air + while (initial.getBlock().getType() == Material.AIR) { + + // if no more attempts to find + if (tries <= 0) { + break; + } + // go up one + initial.add(0, 1, 0); + + tries--; + } + + // if it's still air, return null + if (initial.getBlock().getType() == Material.AIR) { + return null; + } + + return initial; + } + + /** + * Updates the boss bar. + */ + protected void updateBossBar() { + + // how many seconds left until over + int secondsLeft = (int) ((getEndTime() - System.currentTimeMillis()) / 1000.0); + + int day = (int) TimeUnit.SECONDS.toDays(secondsLeft); + long hours = TimeUnit.SECONDS.toHours(secondsLeft) - (day * 24); + long minute = TimeUnit.SECONDS.toMinutes(secondsLeft) - (TimeUnit.SECONDS.toHours(secondsLeft) * 60); + long second = TimeUnit.SECONDS.toSeconds(secondsLeft) - (TimeUnit.SECONDS.toMinutes(secondsLeft) * 60); + + String timeLeft = day + "d " + hours + "h " + minute + "m"; + String title = "" + ChatColor.LIGHT_PURPLE + ChatColor.BOLD + "Halloween Event! " + ChatColor.GOLD + ChatColor.BOLD + timeLeft; + + double start = System.currentTimeMillis() - getStartTime(); + double end = getEndTime() - getStartTime(); + + // this gives us how through we are + double through = start / end; + double progress = 1 - through; + + bossBar.setTitle(title); + bossBar.setProgress(progress); + } + + /** + * Get the info itemstack for the confirm menu. + * + * @return The generic info item stack. + */ + private static ItemStack getInfoItemStack() { + ItemStack is = new ItemStack(Material.SIGN); + ItemMeta im = is.getItemMeta(); + List<String> lore = new ArrayList<>(); + lore.add(""); + lore.add(ChatColor.GRAY + "Trick or Treat at this house?"); + lore.add(""); + lore.add(ChatColor.GRAY + "Cost: " + ChatColor.GOLD + TRICK_COST + " tokens"); + im.setLore(lore); + is.setItemMeta(im); + return is; + } + + /** + * Get the total amount of tokens that this halloween event currently has. + * <p> + * This pot changes based off of trick or treat. + * + * @return The total amount of tokens that this halloween event currently + * has. + */ + public int getTokens() { + return tokens; + } + + /** + * Set the total amount of tokens that this halloween event currently has. + * + * @param tokens - the new amount tokens + */ + public void setTokens(int tokens) { + this.tokens = tokens; + } + + /** + * Get whether or not it is day in the main halloween world. + * + * @return Whether or not it is day. + */ + public boolean isDay() { + if (world.getTime() > 0 && world.getTime() < 12000) { + return true; + } + + return false; + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/event/halloween/TrickOrTreatTask.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/event/halloween/TrickOrTreatTask.java new file mode 100644 index 0000000..e8335bb --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/event/halloween/TrickOrTreatTask.java @@ -0,0 +1,241 @@ +package net.grandtheftmc.gtm.event.halloween; + +import java.util.Arrays; +import java.util.List; +import java.util.Random; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Color; +import org.bukkit.FireworkEffect; +import org.bukkit.Location; +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.bukkit.plugin.Plugin; + +import de.slikey.effectlib.util.ParticleEffect; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.event.Event; +import net.grandtheftmc.core.event.EventManager; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.util.PluginAssociated; +import net.grandtheftmc.core.util.Title; +import net.grandtheftmc.core.util.factory.FireworkFactory; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.items.GameItem; + +public class TrickOrTreatTask implements PluginAssociated { + + /** Random instance for this class */ + public static final Random RANDOM = new Random(); + /** Collection of no responses */ + public static final List<String> NO_RESPONSES = Arrays.asList("Fuck off!", "I don't have any candy you kid!", "No... I want free candy. You're not getting any here."); + /** Collection of meh responses */ + public static final List<String> MEH_RESPONSES = Arrays.asList("I guess that was a cool trick, for a brat.", "Okay you little ass. I'll give you something.", "Here's some drugs. Enjoy.", "Don't snort all this at once."); + /** Collection of yes responses */ + public static final List<String> YES_RESPONSES = Arrays.asList("Haha that shit was great.", "Probably the best trick i've seen all day.", "That was a really smooth trick.", "Got me. Now fuck off."); + + /** The owning plugin for this task */ + private final Plugin plugin; + /** The player involved in the event */ + private final Player player; + /** The location for the event */ + private final Location location; + + /** + * Construct a new TrickOrTreatTask. + * + * @param plugin - the owning plugin + * @param player - the player involved in the event + * @param location - the location where the player knocked + */ + public TrickOrTreatTask(Plugin plugin, Player player, Location location) { + this.plugin = plugin; + this.player = player; + this.location = location; + + // start the effect task + start(player, location); + } + + /** + * Start the trait or treat task. + * + * @param p - the player knocking on the door + * @param loc - the location of the door + */ + protected void start(Player p, Location loc) { + + // notify player that they are participating + p.sendMessage(ChatColor.GOLD + "You ring the doorbell..."); + p.playSound(p.getLocation(), Sound.BLOCK_NOTE_CHIME, 1f, 0f); + + Bukkit.getScheduler().runTaskLater(getPlugin(), () -> { + p.playSound(p.getLocation(), Sound.BLOCK_STONE_STEP, 0.6f, 0f); + }, 10L); + + Bukkit.getScheduler().runTaskLater(getPlugin(), () -> { + p.playSound(p.getLocation(), Sound.BLOCK_STONE_STEP, 0.7f, 0f); + }, 20L); + + Bukkit.getScheduler().runTaskLater(getPlugin(), () -> { + p.playSound(p.getLocation(), Sound.BLOCK_STONE_STEP, 0.8f, 0f); + }, 30L); + + Bukkit.getScheduler().runTaskLater(getPlugin(), () -> { + p.playSound(p.getLocation(), Sound.BLOCK_STONE_STEP, 0.9f, 0f); + }, 40L); + + Bukkit.getScheduler().runTaskLater(getPlugin(), () -> { + p.playSound(p.getLocation(), Sound.BLOCK_STONE_STEP, 1.0f, 0f); + }, 50L); + + Bukkit.getScheduler().runTaskLater(getPlugin(), () -> { + p.playSound(p.getLocation(), Sound.BLOCK_IRON_DOOR_OPEN, 0.3f, 0f); + p.playSound(p.getLocation(), Sound.ENTITY_VILLAGER_TRADING, 0.6f, 0f); + }, 80L); + + Bukkit.getScheduler().runTaskLater(getPlugin(), () -> { + determineOutcome(p, loc); + }, 100L); + } + + /** + * Determine the outcome for the specified player/location. + * + * @param p - the player + * @param loc - the location to play effects + */ + protected void determineOutcome(Player p, Location loc) { + + // roll from 0 - 999 + int chance = RANDOM.nextInt(1000); + + // 2.5% chance to get LOVE IT + if (chance < 25) { + + User user = Core.getUserManager().getLoadedUser(p.getUniqueId()); + if (user != null) { + + Event event = EventManager.getInstance().getEvent().orElse(null); + if (event != null && event instanceof HalloweenEvent) { + HalloweenEvent hween = (HalloweenEvent) event; + + + // half goes to play, half is wiped + int pot = hween.getTokens(); + int toGive = (int) (pot / 2.0); + + // reset tokens + hween.setTokens(0); + + // give them tokens + user.setTokens(user.getTokens() + toGive); + + Bukkit.broadcastMessage(ChatColor.GOLD.toString() + ChatColor.BOLD + "Halloween Event - " + ChatColor.WHITE + "A villager loved " + ChatColor.GOLD + p.getName() + "'s TRICK" + ChatColor.WHITE + " and gave them " + ChatColor.GOLD + toGive + " tokens!"); + Bukkit.broadcastMessage(ChatColor.GOLD.toString() + ChatColor.BOLD + "Halloween Event - " + ChatColor.WHITE + "You can participate by knocking on any " + ChatColor.YELLOW + "Premium House's door" + ChatColor.WHITE + " with a " + ChatColor.GOLD + "Candy Bag" + ChatColor.WHITE + " item in hand (Costs " + HalloweenEvent.TRICK_COST + " tokens."); + Bukkit.broadcastMessage(ChatColor.GOLD.toString() + ChatColor.BOLD + "Halloween Event - " + ChatColor.WHITE + "Skeleton's drop " + ChatColor.GOLD + "Candy Bags" + ChatColor.WHITE + " at a rare rate."); + } + } + + p.sendMessage(ChatColor.GREEN + YES_RESPONSES.get(RANDOM.nextInt(YES_RESPONSES.size()))); + + // heart particles everywhere + for (int i = 0; i < 5; i++) { + ParticleEffect.HEART.display(loc, 10, RANDOM.nextFloat(), RANDOM.nextFloat(), RANDOM.nextFloat(), 10, 1); + } + + p.playSound(p.getLocation(), Sound.ENTITY_VILLAGER_AMBIENT, 1f, 0f); + p.playSound(p.getLocation(), Sound.ENTITY_VILLAGER_YES, 1f, 0f); + p.playSound(p.getLocation(), Sound.ENTITY_EXPERIENCE_ORB_PICKUP, 0.5f, 0f); + + Bukkit.getScheduler().runTaskLater(getPlugin(), () -> { + p.playSound(p.getLocation(), Sound.ENTITY_EXPERIENCE_ORB_PICKUP, 0.6f, 0.1f); + }, 10L); + + Bukkit.getScheduler().runTaskLater(getPlugin(), () -> { + p.playSound(p.getLocation(), Sound.ENTITY_EXPERIENCE_ORB_PICKUP, 0.8f, 0.2f); + }, 20L); + + Bukkit.getScheduler().runTaskLater(getPlugin(), () -> { + p.playSound(p.getLocation(), Sound.ENTITY_EXPERIENCE_ORB_PICKUP, 1f, 0.3f); + }, 30L); + + Bukkit.getScheduler().runTaskLater(getPlugin(), () -> { + p.playSound(p.getLocation(), Sound.ENTITY_EXPERIENCE_ORB_PICKUP, 1f, 0.5f); + p.playSound(p.getLocation(), Sound.ENTITY_LIGHTNING_THUNDER, 0.1f, 0.1f); + + // multi colored fireworks firework + new FireworkFactory(location.clone().add(0, 1, 0)).setPower(0).setColor(Color.ORANGE).setFadeColor(Color.WHITE).setFlicker(true).setTrail(true).setType(FireworkEffect.Type.BALL).build(); + new FireworkFactory(location.clone().add(RANDOM.nextDouble() - 0.5, RANDOM.nextDouble() + 1, RANDOM.nextDouble() - 0.5)).setPower(0).setColor(Color.YELLOW).setFadeColor(Color.WHITE).setFlicker(true).setTrail(true).setType(FireworkEffect.Type.BALL).build(); + new FireworkFactory(location.clone().add(RANDOM.nextDouble() - 0.5, 0, RANDOM.nextDouble() - 0.5)).setPower(0).setColor(Color.YELLOW).setFadeColor(Color.WHITE).setFlicker(true).setTrail(true).setType(FireworkEffect.Type.BURST).build(); + new FireworkFactory(location.clone().add(RANDOM.nextDouble() - 0.5, 0, RANDOM.nextDouble() - 0.5)).setPower(0).setColor(Color.ORANGE).setFadeColor(Color.WHITE).setFlicker(true).setTrail(true).setType(FireworkEffect.Type.BURST).build(); + + // play title to player + Title title = new Title(ChatColor.GOLD + "Nice Trick!", ChatColor.WHITE + "", 10, 20 * 5, 10); + title.play(p); + }, 40L); + } + // 47.5% chacnce to get EH + else if (chance < 500) { + // tell player their trick was cool + p.sendMessage(ChatColor.YELLOW + MEH_RESPONSES.get(RANDOM.nextInt(MEH_RESPONSES.size()))); + + // TODO throw plant particles everywhere + for (int i = 0; i < 5; i++) { + // p.getWorld().playEffect(loc, Effect.TILE_BREAK, + // Material.VINE.getId()); + // ParticleEffect.BLOCK_CRACK.display(new + // ParticleData(Material.WOOL, (byte) 15){}, 1F, 1F, 1F, 1F, 30, + // loc, 32); + } + + // player receives 1-3 roofied chocolate + int numRewards = 1 + RANDOM.nextInt(2); + for (int i = 0; i < numRewards; i++) { + GameItem rc = GTM.getItemManager().getItem("roofied_chocolate"); + if (rc != null) { + p.getInventory().addItem(rc.getItem()); + } + } + } + // 50% chance to get NO + else { + // player gets nothing + p.sendMessage(ChatColor.RED + NO_RESPONSES.get(RANDOM.nextInt(NO_RESPONSES.size()))); + + // play loud villager hurt sound + p.playSound(p.getLocation(), Sound.ENTITY_VILLAGER_HURT, 0.6f, 0f); + // throw green plant particles everywhere + for (int i = 0; i < 5; i++) { + ParticleEffect.VILLAGER_ANGRY.display(loc, 10, RANDOM.nextFloat(), RANDOM.nextFloat(), RANDOM.nextFloat(), 10, 1); + } + + Bukkit.getScheduler().runTaskLater(getPlugin(), () -> { + // slam door sound + p.playSound(p.getLocation(), Sound.BLOCK_IRON_DOOR_CLOSE, 1f, 0f); + }, 10L); + + // follow by fading footsteps + Bukkit.getScheduler().runTaskLater(getPlugin(), () -> { + p.playSound(p.getLocation(), Sound.BLOCK_STONE_STEP, 1f, 0f); + }, 20L); + + Bukkit.getScheduler().runTaskLater(getPlugin(), () -> { + p.playSound(p.getLocation(), Sound.BLOCK_STONE_STEP, 0.8f, 0f); + }, 30L); + + Bukkit.getScheduler().runTaskLater(getPlugin(), () -> { + p.playSound(p.getLocation(), Sound.BLOCK_STONE_STEP, 0.6f, 0f); + }, 40L); + } + } + + /** + * {@inheritDoc} + */ + @Override + public Plugin getPlugin() { + return plugin; + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/events/TPEvent.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/events/TPEvent.java new file mode 100644 index 0000000..08dffab --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/events/TPEvent.java @@ -0,0 +1,116 @@ +package net.grandtheftmc.gtm.events; + +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.entity.Player; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +public class TPEvent extends Event { + private static final HandlerList HANDLERS = new HandlerList(); + + @Override + public HandlerList getHandlers() { + return HANDLERS; + } + + public static HandlerList getHandlerList() { + return HANDLERS; + } + + private Player sender; + private Player target; + private TPType type; + private String cancelMessage; + private Location targetLocation; + + public TPEvent(Player sender, TPType type) { + this.sender = sender; + this.type = type; + } + + public TPEvent(Player sender, Player target, TPType type) { + this.sender = sender; + this.target = target; + this.type = type; + } + + + public TPType getType() { + return this.type; + } + + public void setType(TPType type) { + this.type = type; + } + + public boolean isCancelled() { + return this.cancelMessage != null; + } + + public String getCancelMessage() { + return this.cancelMessage; + } + + public void setCancelled(String msg) { + this.cancelMessage = msg; + } + + public TPEvent call() { + Bukkit.getPluginManager().callEvent(this); + return this; + } + + public Location getTargetLocation() { + return this.targetLocation; + } + + public void setTargetLocation(Location targetLocation) { + this.targetLocation = targetLocation; + } + + public boolean targetLocationIsChanged() { + return this.targetLocation != null; + } + + + public Player getSender() { + return this.sender; + } + + public Player getPlayer() { + return this.sender; + } + + public void setSender(Player sender) { + this.sender = sender; + } + + + public Player getTarget() { + return this.target; + } + + public void setTarget(Player target) { + this.target = target; + } + + + public enum TPType { + TPA_REQ, + TPAHERE_REQ, + TPA_ACCEPT, + TPAHERE_ACCEPT, + TP_COMPLETE, + WARP, + VEHICLE_SEND_AWAY, + VEHICLE_CALL, + HOUSE_ENTER, + HOUSE_LEAVE, + PREMIUM_HOUSE_ENTER, + PREMIUM_HOUSE_LEAVE, + BACKUP + + } + +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/events/WantedLevelChangeEvent.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/events/WantedLevelChangeEvent.java new file mode 100644 index 0000000..f626641 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/events/WantedLevelChangeEvent.java @@ -0,0 +1,43 @@ +package net.grandtheftmc.gtm.events; + +import org.bukkit.entity.Player; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +import net.grandtheftmc.gtm.users.GTMUser; + +public class WantedLevelChangeEvent extends Event { + private static final HandlerList HANDLERS = new HandlerList(); + + @Override + public HandlerList getHandlers() { + return HANDLERS; + } + + public static HandlerList getHandlerList() { + return HANDLERS; + } + + private final Player player; + private final GTMUser user; + private final int wantedLevel; + + public WantedLevelChangeEvent(Player player, GTMUser user, int wantedLevel) { + this.player = player; + this.user = user; + this.wantedLevel = wantedLevel; + } + + public Player getPlayer() { + return this.player; + } + + public GTMUser getUser() { + return this.user; + } + + public int getWantedLevel() { + return this.wantedLevel; + } + +} \ No newline at end of file diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/gang/GTMGang.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/gang/GTMGang.java new file mode 100644 index 0000000..c754469 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/gang/GTMGang.java @@ -0,0 +1,1109 @@ +package net.grandtheftmc.gtm.gang; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import java.util.Set; +import java.util.UUID; +import java.util.stream.Collectors; + +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; + +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.database.BaseDatabase; +import net.grandtheftmc.core.users.Pref; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserManager; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.gang.member.GTMGangMember; +import net.grandtheftmc.gtm.gang.member.GangMember; +import net.grandtheftmc.gtm.gang.member.GangRole; +import net.grandtheftmc.gtm.gang.relation.GTMGangRelation; +import net.grandtheftmc.gtm.gang.relation.GangRelation; +import net.grandtheftmc.gtm.gang.relation.RelationType; +import net.grandtheftmc.gtm.users.GTMRank; +import net.grandtheftmc.gtm.users.GTMUser; + +public class GTMGang implements Gang { + + private Set<GangMember> members; + private Set<GangRelation> relations; + private final Map<Integer, RelationType> relationRequests; + + private final int id; + + private UUID owner; + private String name, description; + private int maxMembers; + + /** Don't ask why this is needed.. */ + private boolean hasUpdated = false; + + public GTMGang(int id) { + this.id = id; + this.members = Sets.newHashSet(); + this.relations = Sets.newHashSet(); + this.relationRequests = Maps.newHashMap(); + } + + public GTMGang(int id, UUID owner, String name, String description, int maxMembers) { + this(id); + this.owner = owner; + this.name = name; + this.description = description; + this.maxMembers = maxMembers; + } + + @Override + public int getUniqueId() { + return id; + } + + @Override + public UUID getOwner() { + return owner; + } + + @Override + public void setOwner(UUID owner) { + this.owner = owner; + + if (!GangManager.ENABLED) return; + + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + GangDAO.setOwner(connection, owner, id); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + @Override + public String getName() { + return name; + } + + @Override + public void setName(String name) { + this.name = name; + + if (!GangManager.ENABLED) return; + + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + GangDAO.setName(connection, name, id); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + @Override + public String getDescription() { + return description; + } + + @Override + public void setDescription(String description) { + this.description = description; + + if (!GangManager.ENABLED) return; + + ServerUtil.runTaskAsync(() -> { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + GangDAO.setDescription(connection, description, id); + } catch (SQLException e) { + e.printStackTrace(); + } + }); + } + + @Override + public int getMaxMembers() { + return maxMembers; + } + + @Override + public void setMaxMembers(int maxMembers) { + this.maxMembers = maxMembers; + } + + @Override + public String getOwnerName() { + Optional<GangMember> optional = this.members.stream().filter(member -> member.getUniqueId().equals(this.owner)).findFirst(); + return optional.isPresent() ? optional.get().getName() : "Unknown"; + } + + @Override + public void toggleChat(UUID uuid) { + this.members.stream().filter(member -> member.getUniqueId().equals(uuid)).findFirst().ifPresent(GangMember::toggleChat); + } + + @Override + public boolean isGangChat(UUID uuid) { + Optional<GangMember> optional = this.members.stream().filter(member -> member.getUniqueId().equals(uuid)).findFirst(); + return optional.isPresent() && optional.get().getChatToggle(); + } + + @Override + public void setGangChat(UUID uuid, boolean on) { + this.members.stream().filter(member -> member.getUniqueId().equals(uuid)).findFirst().ifPresent(member -> member.setChat(on)); + } + + @Override + public Set<GangMember> getMembers() { + return members; + } + + @Override + public void setMembers(Set<GangMember> members) { + this.members = members; + } + + @Override + public Set<GangMember> getOnlineMembers() { + return this.members.stream().filter(GangMember::isOnline).collect(Collectors.toSet()); + } + + @Override + public Optional<GangMember> getMember(UUID uuid) { + return this.members.stream().filter(member -> member.getUniqueId().equals(uuid)).findFirst(); + } + + @Override + public Optional<GangMember> getMember(String playerName) { + return this.members.stream().filter(member -> member.getName().equalsIgnoreCase(playerName)).findFirst(); + } + + @Override + public void addMember(GangMember member) { + if (this.hasMember(member.getUniqueId())) return; + this.members.add(member); + + if (!GangManager.ENABLED) return; + + ServerUtil.runTaskAsync(() -> { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + GangDAO.addMember(connection, member.getUniqueId(), member.getRole(), this.id); + } catch (SQLException e) { + e.printStackTrace(); + } + }); + } + + @Override + public void removeMember(UUID uuid) { + if (!this.hasMember(uuid)) return; + this.members.stream().filter(member -> member.getUniqueId().equals(uuid)).findFirst().ifPresent(this.members::remove); + + if (!GangManager.ENABLED) return; + + ServerUtil.runTaskAsync(() -> { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + GangDAO.removeMember(connection, uuid, this.id); + } catch (SQLException e) { + e.printStackTrace(); + } + }); + } + + @Override + public boolean hasMember(UUID uuid) { + return this.members.stream().anyMatch(member -> member.getUniqueId().equals(uuid)); + } + + @Override + public void setMemberRole(UUID uuid, GangRole role) { + Optional<GangMember> optional = this.getMember(uuid); + if (!optional.isPresent()) return; + optional.get().setRole(this.id, role); + } + + @Override + public Set<GangRelation> getRelations() { + return relations; + } + + @Override + public void setRelation(Set<GangRelation> relations) { + this.relations = relations; + } + + @Override + public void addRelation(GangRelation relation) { + if (hasRelation(relation.getRelativeId())) return; + this.relations.add(relation); + + if (!GangManager.ENABLED) return; + + ServerUtil.runTaskAsync(() -> { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + GangDAO.addRelation(connection, this.id, relation.getRelativeId(), relation.getRelationType()); + } catch (SQLException e) { + e.printStackTrace(); + } + }); + } + + @Override + public void addRelationRequest(int id, RelationType type) { + this.relationRequests.put(id, type); + } + + @Override + public void removeRelation(int id) { + Optional<GangRelation> rel = this.relations.stream().filter(relation -> relation.getRelativeId() == id).findFirst(); + if (!rel.isPresent()) return; + this.relations.remove(rel.get()); + } + + @Override + public boolean hasRelation(int id) { + return this.relations.stream().anyMatch(relation -> relation.getRelativeId() == id); + } + + @Override + public String list(Gang gang) { + int online = (int) this.members.stream().filter(member -> Bukkit.getPlayer(member.getUniqueId()) != null).count(); + int total = this.members.size(); + return (this.isAllied(gang) || this.equals(gang) ? "&a" : this.isEnemy(gang) ? "&c" : "&7") + "&l" + this.name + ": " + online + "&7/&a" + total + "&7 players online"; + } + + @Override + public void sendToAll(String str) { + this.members.stream().filter(member -> Bukkit.getPlayer(member.getUniqueId()) != null).forEach(member -> Bukkit.getPlayer(member.getUniqueId()).sendMessage(str)); + } + + @Override + public void sendToAllExcept(String str, UUID uuid) { + this.members.stream().filter(member -> !member.getUniqueId().equals(uuid) && Bukkit.getPlayer(member.getUniqueId()) != null).forEach(member -> Bukkit.getPlayer(member.getUniqueId()).sendMessage(str)); + } + + @Override + public RelationType getRelation(int id) { + Optional<GangRelation> relation = this.relations.stream().filter(r -> r.getRelativeId() == id).findFirst(); + return relation.isPresent() ? relation.get().getRelationType() : RelationType.NEUTRAL; + } + + @Override + public boolean isNeutral(Gang gang) { + RelationType rel = this.getRelation(gang.getUniqueId()); + return rel == RelationType.NEUTRAL; + } + + @Override + public boolean isAllied(Gang gang) { + return this.relations.stream().anyMatch(relation -> relation.getRelativeId() == gang.getUniqueId() && relation.getRelationType() == RelationType.ALLY); + } + + @Override + public boolean isEnemy(Gang gang) { + return this.relations.stream().anyMatch(relation -> relation.getRelativeId() == gang.getUniqueId() && relation.getRelationType() == RelationType.ENEMY); + } + + @Override + public boolean isLeader(UUID uuid) { + return this.owner.equals(uuid); + } + + @Override + public boolean isCoLeader(UUID uuid) { + return this.members.stream().anyMatch(member -> member.isCoLeader() && member.getUniqueId().equals(uuid)); + } + + @Override + public boolean isMember(UUID uuid) { + return this.members.stream().anyMatch(member -> member.getUniqueId().equals(uuid)); + } + + @Override + public Optional<Gang> getViewingGang(UUID uuid) { + Optional<GangMember> member = this.getMember(uuid); + return member.isPresent() ? member.get().getViewingGang() : Optional.empty(); + } + + @Override + public void setViewingGang(UUID uuid, Gang gang) { + this.getMember(uuid).ifPresent(member -> member.setViewingGang(gang)); + } + + @Override + public boolean isViewingGang(UUID uuid, Gang gang) { + Optional<GangMember> member = this.getMember(uuid); + if (!member.isPresent()) return false; + + Optional<Gang> g = member.get().getViewingGang(); + return g.isPresent() && g.get().getUniqueId() == gang.getUniqueId(); + } + + @Override + public boolean isViewingGang(UUID uuid) { + Optional<GangMember> member = this.getMember(uuid); + return member.map(gangMember -> gangMember.getViewingGang().isPresent()).orElse(false); + } + + @Override + public Optional<GangMember> getViewingGangMember(UUID uuid) { + Optional<GangMember> member = this.getMember(uuid); + return member.isPresent() ? member.get().getViewingGangMember() : Optional.empty(); + } + + @Override + public void setViewingGangMember(UUID uuid, GangMember member) { + this.getMember(uuid).ifPresent(m -> m.setViewingGangMember(member)); + } + + @Override + public boolean isViewingGangMember(UUID uuid, UUID member) { + Optional<GangMember> m = this.getMember(uuid); + if (!m.isPresent()) return false; + + Optional<GangMember> g = m.get().getViewingGangMember(); + return g.isPresent() && g.get().getUniqueId().equals(member); + } + + public boolean canJoinGang(User user, GTMUser gtmUser) { + return user.isSpecial() || gtmUser.isRank(GTMRank.HOMIE); + } + + public boolean canLeadGang(User user, GTMUser gtmUser) { + return user.getUserRank().isHigherThan(UserRank.VIP) || gtmUser.isRank(GTMRank.GANGSTER); + } + + @Override + public void invite(Player sender, User user, Player target) { + if (!this.isLeader(sender.getUniqueId()) && !this.isCoLeader(sender.getUniqueId())) { + sender.sendMessage(Lang.GANGS.f("&7You are not the leader of this gang!")); + return; + } + + if (target == null) { + sender.sendMessage(Lang.GANGS.f("&7That player is not online!")); + return; + } + + if (Objects.equals(sender, target)) { + sender.sendMessage(Lang.GANGS.f("&7You can't invite yourself!")); + return; + } + + if (this.isMember(target.getUniqueId())) { + sender.sendMessage(Lang.GANGS.f("&7That player is already in your gang!")); + return; + } + + if (this.maxMembers <= this.members.size()) { + sender.sendMessage(Lang.GANGS.f("&7Your gang is full! Rank up or buy a rank at &a" + Core.getSettings().getStoreLink() + "&7 for more gang members!")); + return; + } + + User targetUser = Core.getUserManager().getLoadedUser(target.getUniqueId()); + GTMUser targetGtmUser = GTM.getUserManager().getLoadedUser(target.getUniqueId()); + if (!canJoinGang(targetUser, targetGtmUser)) { + sender.sendMessage(Lang.GANGS.f("&7That player can not join a gang because he is not a &e&lHOMIE&7 yet!")); + target.sendMessage(Lang.GANGS.f("&7" + user.getColoredName(sender) + "&7 tried to invite you to gang &a" + this.name + "&7, but you need to be &a &e&lHOMIE&7 or &6&lVIP&7 to join a gang!")); + return; + } + +// targetGtmUser.addGangInvite(this.name); + GangManager.getInstance().addGangInvite(target.getUniqueId(), this.id); + + sender.sendMessage(Lang.GANGS.f("&7You invited " + targetUser.getColoredName(target) + "&7 to your gang!")); + target.sendMessage(Lang.GANGS.f("&7" + user.getColoredName(sender) + "&7 invited you to gang &a" + this.name + "&7! Use &a\"/g join " + this.name + "\"&7 to join the gang!")); + this.sendToAllExcept(Lang.GANGS.f("&7" + user.getColoredName(sender) + "&7 invited " + targetUser.getColoredName(target) + "&7 to your gang!"), sender.getUniqueId()); + } + + @Override + public void accept(Player sender, User user, GTMUser gtmUser) { + if (!canJoinGang(user, gtmUser)) { + sender.sendMessage(Lang.GANGS.f("You must be " + GTMRank.HOMIE.getColoredNameBold() + "&7 or &6&lVIP&7 to join a gang! Check the &d&lMy Account&7 -> &a&lRanks&7 menu on your phone for more information.")); + return; + } + + if (this.isMember(sender.getUniqueId()) || this.isLeader(sender.getUniqueId())) { + sender.sendMessage(Lang.GANGS.f("&7You are a member of this gang already!")); + return; + } + + if (!GangManager.getInstance().isInvited(user.getUUID(), this.id)) { + sender.sendMessage(Lang.GANGS.f("&7You have not been invited to this gang!")); + return; + } + + if (this.maxMembers <= this.members.size()) { + sender.sendMessage(Lang.GANGS.f("&7This gang is full!")); + return; + } + + Gang current = GangManager.getInstance().getGangByMember(sender.getUniqueId()).orElse(null); + if (current != null) { + sender.sendMessage(Lang.GANGS.f("&7Leave your current gang before joining another.")); + return; + } + + sender.sendMessage(Lang.GANGS.f("&7You joined the gang &a" + this.name + "&7!")); + + if (!GangManager.ENABLED) return; + +// gtmUser.setGang(this.name); +// gtmUser.removeGangInvite(this.name); + GangManager.getInstance().removeGangInvite(user.getUUID()); + + this.addMember(new GTMGangMember(sender.getUniqueId(), sender.getName(), GangRole.MEMBER)); + this.sendToAll(Lang.GANGS.f("&7" + user.getColoredName(sender) + "&7 joined your gang!")); + } + + @Override + public void leave(Player sender, User user, GTMUser gtmUser) { + if (this.isLeader(sender.getUniqueId())) { + sender.sendMessage(Lang.GANGS.f("&7You are the leader of your gang! Please use &a\"/gang leader <player\"&7 before leaving the gang!")); + return; + } + + if (!this.isMember(sender.getUniqueId())) { + sender.sendMessage(Lang.GANGS.f("&7You are not a member of this gang!")); + return; + } + + if (!GangManager.ENABLED) return; + + this.removeMember(sender.getUniqueId()); +// gtmUser.resetGang(); + + sender.sendMessage(Lang.GANGS.f("&7You left the gang &a" + this.name + "&7!")); + this.sendToAll(Lang.GANGS.f("&7" + user.getColoredName(sender) + "&7 left the gang!")); + } + + @Override + public void setOwner(Player sender, User user, GTMUser gtmUser, Player target) { + if (!this.isLeader(sender.getUniqueId())) { + sender.sendMessage(Lang.GANGS.f("&7You are not the leader of this gang!")); + return; + } + + if (target == null) { + sender.sendMessage(Lang.GANGS.f("&7That player is not online!")); + return; + } + + if (!this.isMember(target.getUniqueId())) { + sender.sendMessage(Lang.GANGS.f("&7That player is not a member of this gang!")); + return; + } + + User targetUser = Core.getUserManager().getLoadedUser(target.getUniqueId()); + GTMUser targetGtmUser = GTM.getUserManager().getLoadedUser(target.getUniqueId()); + if (!canLeadGang(targetUser, targetGtmUser)) { + sender.sendMessage(Lang.GANGS.f("&7You must be a &e&l" + GTMRank.GANGSTER.getColoredNameBold() + "&7 to create a gang! Check the &d&lMy Account&7 -> &a&lRanks&7 menu on your phone for more information.")); + return; + } + +// targetGtmUser.setGang(this.name, GangRole.LEADER); + this.setOwner(target.getUniqueId()); + this.setMemberRole(target.getUniqueId(), GangRole.LEADER); + +// gtmUser.setGangRole(GangRole.CO_LEADER); + this.setMemberRole(sender.getUniqueId(), GangRole.CO_LEADER); + +// Player player = Bukkit.getPlayer(this.owner); +// if (player != null) +// GTM.getUserManager().getLoadedUser(this.owner).setGangRole(GangRole.LEADER); + +// this.members.stream().filter(member -> Objects.equals(member.getUniqueId(), target.getUniqueId())).findFirst().ifPresent(this.members::remove); +// this.removeMember(target.getUniqueId()); + + sender.sendMessage(Lang.GANGS.f("&7You promoted " + targetUser.getColoredName(target) + "&7 to the leader of your gang! You are now a co-leader!")); + target.sendMessage(Lang.GANGS.f("&7" + user.getColoredName(sender) + "&7 promoted you to leader of your gang!")); + this.sendToAll(Lang.GANGS.f("&7" + user.getColoredName(sender) + "&7 promoted " + targetUser.getColoredName(target) + "&7 to the leader of your gang!")); + +// this.members.add(new GTMGangMember(sender.getUniqueId(), sender.getName(), "coleader")); +// this.addMember(new GTMGangMember(sender.getUniqueId(), sender.getName(), GangRole.CO_LEADER)); + + if (!GangManager.ENABLED) return; + + ServerUtil.runTaskAsync(() -> { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + GangDAO.setOwner(connection, owner, id); + } catch (SQLException e) { + e.printStackTrace(); + } + }); + } + + @Override + public void promote(Player sender, User user, GTMUser gtmUser, String targetName) { + if (!this.isLeader(sender.getUniqueId())) { + sender.sendMessage(Lang.GANGS.f("&7You are not the leader of this gang!")); + return; + } + + Optional<GangMember> optional = this.members.stream().filter(member -> member.getName().equalsIgnoreCase(targetName)).findFirst(); + if (!optional.isPresent()) { + sender.sendMessage(Lang.GANGS.f("&7That player is not a member of this gang!")); + return; + } + + if (optional.get().isCoLeader()) { + sender.sendMessage(Lang.GANGS.f("&7That player is already a coleader of this gang!")); + return; + } + + if (!GangManager.ENABLED) return; + + Player target = Bukkit.getPlayer(optional.get().getUniqueId()); + String n = optional.get().getName(); + + if (target == null) { +// Core.sql.updateAsyncLater("update " + Core.name() + " set gangRank='coleader' where gang='" + this.name + "' and uuid='" + member.getUUID() + "';"); +// ServerUtil.runTaskAsync(() -> BaseDatabase.runCustomQuery("update " + Core.name() + " set gangRank='coleader' where gang='" + this.name + "' and uuid='" + member.getUniqueId() + "';")); + +// ServerUtil.runTaskAsync(() -> { +// try (Connection connection = BaseDatabase.getInstance().getConnection()) { +// GangDAO.setMemberRole(connection, optional.get().getUniqueId(), GangRole.CO_LEADER, id); +// } catch (SQLException e) { +// e.printStackTrace(); +// } +// }); + this.setMemberRole(optional.get().getUniqueId(), GangRole.CO_LEADER); + } else { + User targetUser = Core.getUserManager().getLoadedUser(target.getUniqueId()); +// GTMUser targetGtmUser = GTM.getUserManager().getLoadedUser(target.getUniqueId()); + n = targetUser.getColoredName(target); + +// targetGtmUser.setGangRole(GangRole.CO_LEADER); + this.setMemberRole(target.getUniqueId(), GangRole.CO_LEADER); + + target.sendMessage(Lang.GANGS.f("&7" + user.getColoredName(sender) + "&7 promoted you to coleader of your gang!")); + } + + this.setMemberRole(optional.get().getUniqueId(), GangRole.CO_LEADER); +// optional.get().setRole(this.id, GangRole.CO_LEADER); + + for (Player player : Bukkit.getOnlinePlayers()) { + if (this.isMember(player.getUniqueId()) && !Objects.equals(player, target) && !Objects.equals(player, sender)) { + player.sendMessage(Lang.GANGS.f("&7" + user.getColoredName(sender) + "&7 promoted " + n + "&7 to coleader of your gang!")); + } + } + + sender.sendMessage(Lang.GANGS.f("&7You promoted " + n + "&7 to coleader of your gang!")); + } + + @Override + public void demote(Player sender, User user, GTMUser gtmUser, String targetName) { + if (!this.isLeader(sender.getUniqueId())) { + sender.sendMessage(Lang.GANGS.f("&7You are not the leader of this gang!")); + return; + } + + Optional<GangMember> optional = this.members.stream().filter(member -> member.getName().equalsIgnoreCase(targetName)).findFirst(); + if (!optional.isPresent()) { + sender.sendMessage(Lang.GANGS.f("&7That player is not a member of this gang!")); + return; + } + + if (!optional.get().isCoLeader()) { + sender.sendMessage(Lang.GANGS.f("&7That player is not a coleader of this gang!")); + return; + } + + if (!GangManager.ENABLED) return; + + Player target = Bukkit.getPlayer(optional.get().getUniqueId()); + String n = optional.get().getName(); + if (target == null) { + this.setMemberRole(optional.get().getUniqueId(), GangRole.MEMBER); + } else { + User targetUser = Core.getUserManager().getLoadedUser(target.getUniqueId()); + n = targetUser.getColoredName(target); + + this.setMemberRole(target.getUniqueId(), GangRole.MEMBER); + target.sendMessage(Lang.GANGS.f("&7" + user.getColoredName(sender) + "&7 demoted you to member of your gang!")); + } + + optional.get().setRole(this.id, GangRole.MEMBER); + for (Player player : Bukkit.getOnlinePlayers()) + if (this.isMember(player.getUniqueId()) && !Objects.equals(player, target) && !Objects.equals(player, sender)) + player.sendMessage(Lang.GANGS.f("&7" + user.getColoredName(sender) + "&7 demoted " + n + "&7 to member of your gang!")); + + sender.sendMessage(Lang.GANGS.f("&7You demoted " + n + "&7 to member of your gang!")); + } + + @Override + public void kick(Player sender, User user, GTMUser gtmUser, String targetName) { + if (!this.isLeader(sender.getUniqueId()) && !this.isCoLeader(sender.getUniqueId())) { + sender.sendMessage(Lang.GANGS.f("&7You are not the leader of this gang!")); + return; + } + + if (sender.getName().equalsIgnoreCase(targetName)) { + sender.sendMessage(Lang.GANGS.f("&7You can't kick yourself!")); + return; + } + + if (!GangManager.ENABLED) return; + + Optional<GangMember> optional; + Player target = Bukkit.getPlayer(targetName); + if (target != null) optional = this.members.stream().filter(member -> member.getUniqueId().equals(target.getUniqueId())).findFirst(); + else optional = this.members.stream().filter(member -> member.getName().equalsIgnoreCase(targetName)).findFirst(); + + if (!optional.isPresent()) { + sender.sendMessage(Lang.GANGS.f("&7That player is not in your gang!")); + return; + } + +// this.gangMembers.remove(member); + + if (optional.get().getRole() == GangRole.LEADER) { + sender.sendMessage(Lang.GANGS.f("&cYou cannot kick the leader!")); + return; + } + + this.removeMember(optional.get().getUniqueId()); + + String name = targetName; + if (target == null) { +// Core.sql.updateAsyncLater("update " + Core.name() + " set gang=null, gangRank='member' where name='" + name + "';"); +// String finalName = name; +// ServerUtil.runTaskAsync(() -> BaseDatabase.runCustomQuery("update " + Core.name() + " set gang=null, gangRank='member' where name='" + finalName + "';")); + +// ServerUtil.runTaskAsync(() -> { +// try (Connection connection = BaseDatabase.getInstance().getConnection()) { +// GangDAO.removeMember(connection, optional.get().getUniqueId(), this.id); +// } catch (SQLException e) { +// e.printStackTrace(); +// } +// }); + } else { + name = Core.getUserManager().getLoadedUser(target.getUniqueId()).getColoredName(target); +// GTMUser targetGtmUser = GTM.getUserManager().getLoadedUser(player.getUniqueId()); +// targetGtmUser.resetGang(); + target.sendMessage(Lang.GANGS.f("&7" + user.getColoredName(sender) + "&7 kicked you from the gang!")); + } + + this.sendToAllExcept(Lang.GANGS.f("&7" + user.getColoredName(sender) + "&7 kicked &a" + name + "&7 from your gang!"), sender.getUniqueId()); + sender.sendMessage(Lang.GANGS.f("&7You kicked &a" + name + "&7 from the gang!")); + } + + @Override + public void disbandConfirm(Player sender, User user, GTMUser gtmUser) { + if (!this.isLeader(sender.getUniqueId())) { + sender.sendMessage(Lang.GANGS.f("&7You are not the leader of this gang!")); + return; + } + + if (!GangManager.ENABLED) return; + +// Core.sql.updateAsyncLater("delete from " + Core.name() + "_gangs where name='" + this.name + "';"); +// Core.sql.updateAsyncLater("delete from " + Core.name() + "_gangs_relations where gang1='" + this.name + "' or gang2='" + this.name + "';"); +// Core.sql.updateAsyncLater("update " + Core.name() + " set gang=null,gangRank='member' where gang='" + this.name + "';"); + ServerUtil.runTaskAsync(() -> { +// BaseDatabase.runCustomQuery("delete from " + Core.name() + "_gangs where name='" + this.name + "';"); +// BaseDatabase.runCustomQuery("delete from " + Core.name() + "_gangs_relations where gang1='" + this.name + "' or gang2='" + this.name + "';"); +// BaseDatabase.runCustomQuery("update " + Core.name() + " set gang=null,gangRank='member' where gang='" + this.name + "';"); + + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + GangDAO.deleteGang(connection, this.id); + } catch (SQLException e) { + e.printStackTrace(); + } + }); + + sender.sendMessage(Lang.GANGS.f("&7You disbanded the gang &a" + this.name + "&7!")); +// gtmUser.setGangName(null); + + for (Player player : Bukkit.getOnlinePlayers()) { + if (this.isMember(player.getUniqueId())) { +// GTMUser u = GTM.getUserManager().getLoadedUser(player.getUniqueId()); +// u.setGangName(null); + player.sendMessage(Lang.GANGS.f("&7" + user.getColoredName(sender) + "&7 disbanded your gang &a" + this.name + "&7!")); + } + else if (!this.isLeader(player.getUniqueId())) { + player.sendMessage(Lang.GANGS.f("&7" + user.getColoredName(sender) + "&7 disbanded the gang &a" + this.name + "&7!")); + } + } + + for (GangRelation r : this.relations) { + Gang g = GangManager.getInstance().getGang(r.getRelativeId()).orElse(null); + if (g == null) continue; + g.removeRelation(this.id); + } + + //TODO, Should auto remove in database. +// this.relations.stream().filter(relation -> GangManager.getInstance().getGang(relation.getRelativeId()).isPresent()) +// .forEach(relation -> GangManager.getInstance().getGang(relation.getRelativeId()).get().removeRelation(this.id)); + +// this.relations.keySet().stream().filter(gang -> GTM.getGangManager().isLoaded(gang)).forEach(gang -> GTM.getGangManager().getLoadedGang(gang).removeRelation(this.name)); + +// GTM.getGangManager().unloadGang(this.name); + GangManager.getInstance().removeGang(this); + } + + @Override + public void disband(Player sender) { + if (!this.isLeader(sender.getUniqueId())) { + sender.sendMessage(Lang.GANGS.f("&7You are not the leader of this gang!")); + return; + } + + sender.sendMessage(Lang.GANGS.f("&7Are you sure you want to disband this gang? It will remove all members and delete it forever. Type \"&a/gang disband confirm\"&7 to disband your gang!")); + } + + @Override + public void rename(Player sender, User user, GTMUser gtmUser, String gangName) { + UUID uuid = sender.getUniqueId(); + if (!this.isLeader(sender.getUniqueId())) { + sender.sendMessage(Lang.GANGS.f("&7You are not the leader of this gang!")); + return; + } + + if (!gangName.matches("^[a-zA-Z_0-9]+$")) { + sender.sendMessage(Lang.GANGS.f("&7Only a-z, A-Z, 0-9 and _ are allowed in a gang name!")); + return; + } + + if (gangName.length() > 16 || gangName.length() < 3) { + sender.sendMessage(Lang.GANGS.f("&7The name of your gang needs to be 3-16 characters long!")); + return; + } + + if (GangManager.getInstance().getGang(gangName).isPresent()) { + sender.sendMessage(Lang.GANGS.f("&7A gang with that name already exists!")); + return; + } + + if (!GangManager.ENABLED) return; + + ServerUtil.runTaskAsync(() -> { + boolean[] exists = {false}; + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + exists[0] = GangDAO.isGangExisting(connection, gangName); + } catch (SQLException e) { + e.printStackTrace(); + return; + } + + ServerUtil.runTask(() -> { + Player sender2 = Bukkit.getPlayer(uuid); + if (sender2 == null) return; + if (exists[0]) { + sender2.sendMessage(Lang.GANGS.f("&7A gang with that name already exists!")); + return; + } + + this.setName(gangName); + + sender.sendMessage(Lang.GANGS.f("&7You changed the name of your gang to &a" + gangName + "&7!")); + sendToAllExcept(Lang.GANGS.f("&7" + user.getColoredName(sender) + "&7 changed the name of your gang to &a" + gangName + "&7!"), sender.getUniqueId()); + }); + }); + +// new BukkitRunnable() { +// @Override +// public void run() { +// String s = null; +// try (Connection connection = BaseDatabase.getInstance().getConnection()) { +// try (PreparedStatement statement = connection.prepareStatement("SELECT name FROM gtm_gang WHERE server_key=? AND name=?;")) { +// statement.setString(1, Core.name().toUpperCase()); +// statement.setString(2, gangName); +// try (ResultSet result = statement.executeQuery()) { +// if (result.next()) s = result.getString("name"); +// } +// } +// } catch (SQLException e) { +// e.printStackTrace(); +// return; +// } +// +// String name = s; +// new BukkitRunnable() { +// @Override +// public void run() { +// Player sender = Bukkit.getPlayer(uuid); +// if (sender == null) return; +// if (name != null) { +// sender.sendMessage(Lang.GANGS.f("&7A gang with that name already exists!")); +// return; +// } +// +// User user = Core.getUserManager().getLoadedUser(uuid); +// GTMUser gtmUser = GTM.getUserManager().getLoadedUser(uuid); +// Gang gang = gtmUser.getGang(); +// gang.setName(gangName); +// +// sender.sendMessage(Lang.GANGS.f("&7You changed the name of your gang to &a" + gangName + "&7!")); +// sendToAllExcept(Lang.GANGS.f("&7" + user.getColoredName(sender) + "&7 changed the name of your gang to &a" + gangName + "&7!"), sender.getUniqueId()); +// } +// }.runTask(GTM.getInstance()); +// } +// }.runTaskAsynchronously(GTM.getInstance()); + } + + @Override + public void description(Player sender, User user, GTMUser gtmUser, String description) { + if (!this.isLeader(sender.getUniqueId()) && !this.isCoLeader(sender.getUniqueId())) { + sender.sendMessage(Lang.GANGS.f("&7You are not the (co-)leader of this gang!")); + return; + } + + if (description.length() > 64 || description.length() < 3) { + sender.sendMessage(Lang.GANGS.f("&7The description must be between 3-64 characters long!")); + return; + } + + if (!GangManager.ENABLED) return; + + this.setDescription(description); + sender.sendMessage(Lang.GANGS.f("&7You changed the description of your gang to &a" + description + "&7!")); + this.sendToAllExcept(Lang.GANGS.f("&7" + user.getColoredName(sender) + "&7 changed the description of your gang to &a" + description + "&7!"), sender.getUniqueId()); + } + + @Override + public void ally(Player sender, User user, GTMUser gtmUser, String gang) { + if (!this.isLeader(sender.getUniqueId()) && !this.isCoLeader(sender.getUniqueId())) { + sender.sendMessage(Lang.GANGS.f("&7You are not the (co-)leader of this gang!")); + return; + } + + Optional<Gang> g = GangManager.getInstance().getGang(gang); + if (!g.isPresent()) { + sender.sendMessage(Lang.GANGS.f("&7That gang does not exist or no one in that gang is online!")); + return; + } + + if (this.isAllied(g.get())) { + sender.sendMessage(Lang.GANGS.f("&7That gang is allied to you already!")); + sender.sendMessage(Lang.GANGS.f("&7Want to unally this gang? Use /g neutral")); + return; + } + + if (!GangManager.ENABLED) return; + + if (this.relationRequests.containsKey(g.get().getUniqueId()) && Objects.equals(RelationType.ALLY, this.relationRequests.get(g.get().getUniqueId()))) { + this.addRelation(new GTMGangRelation(g.get().getUniqueId(), g.get().getName(), RelationType.ALLY)); + g.get().addRelation(new GTMGangRelation(this.id, this.name, RelationType.ALLY)); + this.relationRequests.remove(g.get().getUniqueId()); + +// ServerUtil.runTaskAsync(() -> { +// try (Connection connection = BaseDatabase.getInstance().getConnection()) { +// GangDAO.removeRelation(connection, g.get().getUniqueId(), this.id); +// GangDAO.addRelation(connection, this.id, g.get().getUniqueId(), RelationType.ALLY); +// } catch (SQLException e) { +// e.printStackTrace(); +// } +// }); + + for (Player player : Bukkit.getOnlinePlayers()) { + if (g.get().isMember(player.getUniqueId()) || g.get().isLeader(player.getUniqueId())) { + player.sendMessage(Lang.GANGS.f("&7Your gang is now allied to &a" + this.name + "&7!")); + } + else if (this.isMember(player.getUniqueId()) || this.isLeader(player.getUniqueId()) && !Objects.equals(player, sender)) { + player.sendMessage(Lang.GANGS.f("&7Your gang is now allied to &a" + g.get().getName() + "&7!")); + } + } + sender.sendMessage(Lang.GANGS.f("&7You accepted the ally request from gang &a" + g.get().getName() + "&7!")); + } + + g.get().addRelationRequest(this.id, RelationType.ALLY); + for (Player player : Bukkit.getOnlinePlayers()) { + if (g.get().isMember(player.getUniqueId()) || g.get().isLeader(player.getUniqueId())) { + player.sendMessage(Lang.GANGS.f("&7" + user.getColoredName(sender) + "&7 from gang &a" + this.name + "&7 has requested to be allied to your gang!")); + } + else if (this.isMember(player.getUniqueId()) || this.isLeader(player.getUniqueId()) && !Objects.equals(player, sender)) { + player.sendMessage(Lang.GANGS.f("&7" + user.getColoredName(sender) + "&7 has requested to be allied to &a" + g.get().getName() + "&7!")); + } + } + + sender.sendMessage(Lang.GANGS.f("&7You sent an ally request to gang &a" + g.get().getName() + "&7!")); + } + + @Override + public void neutral(Player sender, User user, GTMUser gtmUser, String gang) { + if (!this.isLeader(sender.getUniqueId()) && !this.isCoLeader(sender.getUniqueId())) { + sender.sendMessage(Lang.GANGS.f("&7You are not the leader of this gang!")); + return; + } + + Optional<Gang> g = GangManager.getInstance().getGang(gang); + if (!g.isPresent()) { + sender.sendMessage(Lang.GANGS.f("&7That gang does not exist or no one in that gang is online!")); + return; + } + + if (this.isNeutral(g.get())) { + sender.sendMessage(Lang.GANGS.f("&7That gang is neutral to you already!")); + return; + } + + if (!GangManager.ENABLED) return; + + if (this.relationRequests.containsKey(g.get().getUniqueId()) && Objects.equals(RelationType.NEUTRAL, this.relationRequests.get(g.get().getUniqueId()))) { +// this.relations.add(new GTMGangRelation(g.get().getUniqueId(), g.get().getName(), RelationType.NEUTRAL)); +// g.get().addRelation(new GTMGangRelation(this.id, this.name, RelationType.NEUTRAL)); + this.relationRequests.remove(g.get().getUniqueId()); + + ServerUtil.runTaskAsync(() -> { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + GangDAO.removeRelation(connection, g.get().getUniqueId(), this.id); + GangDAO.removeRelation(connection, this.id, g.get().getUniqueId()); + } catch (SQLException e) { + e.printStackTrace(); + } + }); + + for (Player player : Bukkit.getOnlinePlayers()) { + if (g.get().isMember(player.getUniqueId()) || g.get().isLeader(player.getUniqueId())) { + player.sendMessage(Lang.GANGS.f("&7Your gang is now neutral to &a" + this.name + "&7!")); + } + else if (this.isMember(player.getUniqueId()) || this.isLeader(player.getUniqueId()) && !Objects.equals(player, sender)) { + player.sendMessage(Lang.GANGS.f("&7Your gang is now neutral to &a" + g.get().getName() + "&7!")); + } + } + sender.sendMessage(Lang.GANGS.f("&7You accepted the neutral request from gang &a" + g.get().getName() + "&7!")); + } + + g.get().addRelationRequest(this.id, RelationType.NEUTRAL); + for (Player player : Bukkit.getOnlinePlayers()) { + if (g.get().isMember(player.getUniqueId()) || g.get().isLeader(player.getUniqueId())) { + player.sendMessage(Lang.GANGS.f("&7" + user.getColoredName(sender) + "&7 from gang &a" + this.name + "&7 has requested to be neutral to your gang!")); + } + else if (this.isMember(player.getUniqueId()) || this.isLeader(player.getUniqueId()) && !Objects.equals(player, sender)) { + player.sendMessage(Lang.GANGS.f("&7" + user.getColoredName(sender) + "&7 has requested to be neutral to &a" + g.get().getName() + "&7!")); + } + } + + sender.sendMessage(Lang.GANGS.f("&7You sent a neutral request to gang &a" + g.get().getName() + "&7!")); + } + + @Override + public void enemy(Player sender, User user, GTMUser gtmUser, String gang) { + if (!this.isLeader(sender.getUniqueId()) && !this.isCoLeader(sender.getUniqueId())) { + sender.sendMessage(Lang.GANGS.f("&7You are not the leader of this gang!")); + return; + } + + Optional<Gang> g = GangManager.getInstance().getGang(gang); + if (!g.isPresent()) { + sender.sendMessage(Lang.GANGS.f("&7That gang does not exist or no one in that gang is online!")); + return; + } + + if (this.isEnemy(g.get())) { + sender.sendMessage(Lang.GANGS.f("&7That gang is an enemy to you already!")); + sender.sendMessage(Lang.GANGS.f("&7Want to unenemy this gang? Use /g neutral")); + return; + } + + if (!GangManager.ENABLED) return; + + this.relations.add(new GTMGangRelation(g.get().getUniqueId(), g.get().getName(), RelationType.ENEMY)); + this.addRelation(new GTMGangRelation(g.get().getUniqueId(), g.get().getName(), RelationType.ENEMY)); + g.get().addRelation(new GTMGangRelation(this.id, this.name, RelationType.ENEMY)); + this.relationRequests.remove(g.get().getUniqueId()); + +// ServerUtil.runTaskAsync(() -> { +// try (Connection connection = BaseDatabase.getInstance().getConnection()) { +// GangDAO.removeRelation(connection, g.get().getUniqueId(), this.id); +// GangDAO.addRelation(connection, this.id, g.get().getUniqueId(), RelationType.ALLY); +// } catch (SQLException e) { +// e.printStackTrace(); +// } +// }); + + for (Player player : Bukkit.getOnlinePlayers()) + if (g.get().isMember(player.getUniqueId()) || g.get().isLeader(player.getUniqueId())) + player.sendMessage(Lang.GANGS.f("&7Your gang is now an enemy to gang &a" + this.name + "&7!")); + else if (this.isMember(player.getUniqueId()) || this.isLeader(player.getUniqueId())) + player.sendMessage(Lang.GANGS.f("&7Your gang is now an enemy to gang &a" + g.get().getName() + "&7!")); + } + + @Override + public void chat(Player player, User user, GTMUser gtmUser, String msg) { + Bukkit.getOnlinePlayers().stream().filter(p -> this.isMember(p.getUniqueId()) || this.isLeader(p.getUniqueId())).forEach(p -> p.sendMessage(Lang.GANGCHAT.f("&7[&a&l" + user.getColoredName(player) + "&7] &r") + Utils.fColor(msg))); + + UserManager.getInstance().getUsers().stream().filter(u -> u.getPref(Pref.SOCIALSPY)).forEach(u -> { + if (u != null && u.getUUID() != null) { + Player p = Bukkit.getPlayer(u.getUUID()); + if (p != null) p.sendMessage(Lang.SS.f("&r" + player.getName() + ": /gc " + msg)); + } + }); + } + + @Override + public boolean updateDataFromDb() { +// if (this.hasUpdated) return true; +// boolean b = true; +// +//// try (Connection connection = BaseDatabase.getInstance().getConnection()) { +//// try (PreparedStatement statement = connection.prepareStatement("select * from " + Core.name() + "_gangs where name=?;")) { +//// statement.setString(1, this.name); +//// try (ResultSet result = statement.executeQuery()) { +//// if (result.next()) { +//// this.description = result.getString("description"); +//// this.leader = UUID.fromString(result.getString("leader")); +//// this.leaderName = result.getString("leaderName"); +//// this.maxMembers = result.getInt("maxMembers"); +//// } +//// else { +//// b = false; +//// } +//// } +//// } +//// } catch (SQLException e) { +//// e.printStackTrace(); +//// } +// +// try (Connection connection = BaseDatabase.getInstance().getConnection()) { +// Gang temp = GangDAO.getGang() +// this.members.addAll(GangDAO.getMembers(connection, this.id)); +// } catch (SQLException e) { +// e.printStackTrace(); +// } +// +// try (Connection connection = BaseDatabase.getInstance().getConnection()) { +// try (PreparedStatement statement = connection.prepareStatement("select uuid,name,gangRank from " + Core.name() + " where gang=?;")) { +// statement.setString(1, this.name); +// try (ResultSet result = statement.executeQuery()) { +// while (result.next()) { +// if (!Objects.equals("leader", result.getString("gangRank"))) { +// this.gangMembers.add(new net.grandtheftmc.gtm.gangs.GangMember(UUID.fromString(result.getString("uuid")), +// result.getString("name"), result.getString("gangRank"))); +// } +// } +// } +// } +// } catch (SQLException e) { +// e.printStackTrace(); +// } +// +// this.relations = new HashMap<>(); +// this.relationRequests = new HashMap<>(); +// try (Connection connection = BaseDatabase.getInstance().getConnection()) { +// try (PreparedStatement statement = connection.prepareStatement("select * from " + Core.name() + "_gangs_relations where gang1=? or gang2=?;")) { +// statement.setString(1, this.name); +// statement.setString(2, this.name); +// try (ResultSet result = statement.executeQuery()) { +// while (result.next()) { +// String gang1 = result.getString("gang1"); +// String gang2 = result.getString("gang2"); +// this.relations.put(gang1.equalsIgnoreCase(this.name) ? gang2 : gang1, result.getString("relation")); +// } +// } +// } +// } catch (SQLException e) { +// e.printStackTrace(); +// b = false; +// } +// +// this.hasUpdated = b; +// return b; + return true; + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/gang/Gang.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/gang/Gang.java new file mode 100644 index 0000000..295c7d8 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/gang/Gang.java @@ -0,0 +1,95 @@ +package net.grandtheftmc.gtm.gang; + +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.gtm.gang.member.GangMember; +import net.grandtheftmc.gtm.gang.member.GangRole; +import net.grandtheftmc.gtm.gang.relation.GangRelation; +import net.grandtheftmc.gtm.gang.relation.RelationType; +import net.grandtheftmc.gtm.users.GTMUser; +import org.bukkit.entity.Player; + +import java.util.List; +import java.util.Optional; +import java.util.Set; +import java.util.UUID; + +public interface Gang { + + int getUniqueId(); + + UUID getOwner(); + void setOwner(UUID owner); + + String getName(); + void setName(String name); + + String getDescription(); + void setDescription(String description); + + int getMaxMembers(); + void setMaxMembers(int maxMembers); + + String getOwnerName(); + + void toggleChat(UUID uuid); + boolean isGangChat(UUID uuid); + void setGangChat(UUID uuid, boolean on); + + Set<GangMember> getMembers(); + void setMembers(Set<GangMember> members); + Set<GangMember> getOnlineMembers(); + Optional<GangMember> getMember(UUID uuid); + Optional<GangMember> getMember(String playerName); + void addMember(GangMember member); + void removeMember(UUID uuid); + boolean hasMember(UUID uuid); + void setMemberRole(UUID uuid, GangRole role); + + Set<GangRelation> getRelations(); + void setRelation(Set<GangRelation> relations); + void addRelation(GangRelation relation); + void removeRelation(int id); + boolean hasRelation(int id); + + RelationType getRelation(int id); + void addRelationRequest(int id, RelationType type); + + String list(Gang gang); + void sendToAll(String str); + void sendToAllExcept(String str, UUID uuid); + + boolean isNeutral(Gang gang); + boolean isAllied(Gang gang); + boolean isEnemy(Gang gang); + boolean isLeader(UUID uuid); + boolean isCoLeader(UUID uuid); + boolean isMember(UUID uuid); + + Optional<Gang> getViewingGang(UUID uuid); + void setViewingGang(UUID uuid, Gang gang); + boolean isViewingGang(UUID uuid, Gang gang); + boolean isViewingGang(UUID uuid); + + Optional<GangMember> getViewingGangMember(UUID uuid); + void setViewingGangMember(UUID uuid, GangMember member); + boolean isViewingGangMember(UUID uuid, UUID member); + + void invite(Player sender, User user, Player target); + void accept(Player sender, User user, GTMUser gtmUser); + void leave(Player sender, User user, GTMUser gtmUser); + void setOwner(Player sender, User user, GTMUser gtmUser, Player target); + void promote(Player sender, User user, GTMUser gtmUser, String targetName); + void demote(Player sender, User user, GTMUser gtmUser, String targetName); + void kick(Player sender, User user, GTMUser gtmUser, String targetName); + void disbandConfirm(Player sender, User user, GTMUser gtmUser); + void disband(Player sender); + void rename(Player sender, User user, GTMUser gtmUser, String gangName); + void description(Player sender, User user, GTMUser gtmUser, String description); + + void ally(Player sender, User user, GTMUser gtmUser, String gang); + void neutral(Player sender, User user, GTMUser gtmUser, String gang); + void enemy(Player sender, User user, GTMUser gtmUser, String gang); + void chat(Player player, User user, GTMUser gtmUser, String msg); + + boolean updateDataFromDb(); +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/gang/GangChatCommand.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/gang/GangChatCommand.java new file mode 100644 index 0000000..021d109 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/gang/GangChatCommand.java @@ -0,0 +1,60 @@ +package net.grandtheftmc.gtm.gang; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.users.GTMUser; + +import org.apache.commons.lang.StringUtils; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.Arrays; +import java.util.Optional; + +public class GangChatCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command c, String lbl, String[] args) { + if (!(s instanceof Player)) { + s.sendMessage(Lang.NOTPLAYER.s()); + return true; + } + Player player = (Player) s; + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + GTMUser gtmUser = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + + Optional<Gang> gang = GangManager.getInstance().getGangByMember(player.getUniqueId()); + if (!gang.isPresent()) { + s.sendMessage(Lang.GANGCHAT.f("&7You are not in any gang!")); + return true; + } + + if (args.length == 0) { + gang.get().toggleChat(player.getUniqueId()); + s.sendMessage(Lang.GANGCHAT.f("&7You turned " + (gang.get().isGangChat(player.getUniqueId()) ? "&a&lon" : "&c&loff") + "&7 gang chat!")); + return true; + } + + if ("on".equalsIgnoreCase(args[0])) { +// gtmUser.setGangChat(true); + gang.get().setGangChat(player.getUniqueId(), true); + s.sendMessage(Lang.GANGCHAT.f("&7You turned &a&lon&7 gang chat!")); + return true; + } + + if ("off".equalsIgnoreCase(args[0])) { +// gtmUser.setGangChat(false); + gang.get().setGangChat(player.getUniqueId(), false); + s.sendMessage(Lang.GANGCHAT.f("&7You turned &c&loff&7 gang chat!")); + return true; + } + + String msg = StringUtils.join(Arrays.asList(args), " "); + gang.get().chat(player, user, gtmUser, msg); + return true; + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/gang/GangDAO.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/gang/GangDAO.java new file mode 100644 index 0000000..15be0c8 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/gang/GangDAO.java @@ -0,0 +1,343 @@ +package net.grandtheftmc.gtm.gang; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.List; +import java.util.Optional; +import java.util.Set; +import java.util.UUID; + +import javax.annotation.Nullable; + +import com.google.common.collect.Lists; + +import com.google.common.collect.Sets; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.util.UUIDUtil; +import net.grandtheftmc.gtm.gang.member.GTMGangMember; +import net.grandtheftmc.gtm.gang.member.GangMember; +import net.grandtheftmc.gtm.gang.member.GangRole; +import net.grandtheftmc.gtm.gang.relation.GTMGangRelation; +import net.grandtheftmc.gtm.gang.relation.GangRelation; +import net.grandtheftmc.gtm.gang.relation.RelationType; + +public class GangDAO { + + public static Gang createGang(Connection connection, UUID owner, String name, int maxMembers) { + try (PreparedStatement statement = connection.prepareStatement("INSERT INTO `gtm_gang` (`server_key`,`name`,`owner`,`description`,`max_members`) VALUES (?,?,UNHEX(?),?,?);", Statement.RETURN_GENERATED_KEYS)) { + statement.setString(1, Core.name().toUpperCase()); + statement.setString(2, name); + statement.setString(3, owner.toString().replaceAll("-", "")); + statement.setString(4, "Default gang description."); + statement.setInt(5, maxMembers); + + statement.executeUpdate(); + + try (ResultSet result = statement.getGeneratedKeys()) { + if (result.next()) { + return new GTMGang(result.getInt(1), owner, name, null, maxMembers); + } + } + } catch (SQLException e) { + e.printStackTrace(); + } + return null; + } + + public static Gang deleteGang(Connection connection, int id) { + try (PreparedStatement statement = connection.prepareStatement("DELETE FROM gtm_gang WHERE id=?;")) { + statement.setInt(1, id); + + statement.executeUpdate(); + } catch (SQLException e) { + e.printStackTrace(); + } + return null; + } + + public static boolean setName(Connection connection, String name, int id) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE `gtm_gang` SET `name`=? WHERE `id`=?;")) { + statement.setString(1, name); + statement.setInt(2, id); + + statement.executeUpdate(); + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + return true; + } + + public static boolean setDescription(Connection connection, String desc, int id) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE `gtm_gang` SET `description`=? WHERE `id`=?;")) { + statement.setString(1, desc); + statement.setInt(2, id); + + statement.executeUpdate(); + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + return true; + } + + public static boolean setOwner(Connection connection, UUID owner, int id) { + + if (owner == null){ + Core.log("[GangDAO] Cannot set owner for id=" + id + " as the owner is null."); + return false; + } + + try (PreparedStatement statement = connection.prepareStatement("UPDATE `gtm_gang` SET `owner`=UNHEX(?) WHERE `id`=?;")) { + statement.setString(1, owner.toString().replaceAll("-", "")); + statement.setInt(2, id); + + statement.executeUpdate(); + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + return true; + } + + public static boolean setMemberRole(Connection connection, UUID uuid, GangRole role, int id) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE `gtm_gang_member` SET `role`=? WHERE `gang_id`=? AND uuid=UNHEX(?);")) { + statement.setInt(1, role.getRankId()); + statement.setInt(2, id); + statement.setString(3, uuid.toString().replaceAll("-", "")); + + statement.executeUpdate(); + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + return true; + } + + public static boolean addMember(Connection connection, UUID uuid, @Nullable GangRole role, int id) { + try (PreparedStatement statement = connection.prepareStatement("INSERT INTO `gtm_gang_member` (`gang_id`,`uuid`,`role`) VALUES (?,UNHEX(?),?);")) { + statement.setInt(1, id); + statement.setString(2, uuid.toString().replaceAll("-", "")); + statement.setInt(3, role == null ? 1 : role.getRankId()); + + statement.executeUpdate(); + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + return true; + } + + public static boolean removeMember(Connection connection, UUID owner, int id) { + try (PreparedStatement statement = connection.prepareStatement("DELETE FROM `gtm_gang_member` WHERE gang_id=? AND uuid=UNHEX(?);")) { + statement.setInt(1, id); + statement.setString(2, owner.toString().replaceAll("-", "")); + + statement.executeUpdate(); + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + return true; + } + + + public static boolean addRelation(Connection connection, int id, int otherId, RelationType relationType) { + if (relationType == RelationType.NEUTRAL) return false; + + try (PreparedStatement statement = connection.prepareStatement("INSERT INTO `gtm_gang_relation` (`gang_id`,`other_id`,`relation`) VALUES (?,?,?) ON DUPLICATE KEY UPDATE relation=?;")) { + statement.setInt(1, id); + statement.setInt(2, otherId); + statement.setString(3, relationType.getKey()); + statement.setString(4, relationType.getKey()); + + statement.executeUpdate(); + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + return true; + } + + public static boolean removeRelation(Connection connection, int id, int otherId) { + try (PreparedStatement statement = connection.prepareStatement("DELETE FROM `gtm_gang_relation` WHERE (gang_id=? AND other_id=?) OR (other_id=? AND gang_id=?);")) { + statement.setInt(1, id); + statement.setInt(2, otherId); + statement.setInt(3, id); + statement.setInt(4, otherId); + + statement.executeUpdate(); + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + return true; + } + + public static boolean setMaxMembers(Connection connection, int maxMembers, int id) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE `gtm_gang` SET `max_members`=? WHERE `gang_id`=?;")) { + statement.setInt(1, maxMembers); + statement.setInt(2, id); + + statement.executeUpdate(); + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + return true; + } + + public static boolean isGangExisting(Connection connection, String name) { + try (PreparedStatement statement = connection.prepareStatement("SELECT `name` FROM `gtm_gang` WHERE `server_key`=? AND (name REGEXP '.*" + name + ".*');")) { + statement.setString(1, Core.name().toUpperCase()); +// statement.setString(2, name); + + try (ResultSet result = statement.executeQuery()) { + return result.next(); + } + } catch (SQLException e) { + e.printStackTrace(); + } + + return true; + } + + public static Gang getGang(Connection connection, int id) { + String query = "SELECT id,HEX(owner) as leader,name,description,max_members FROM gtm_gang WHERE id=?;"; + try (PreparedStatement statement = connection.prepareStatement(query)) { + statement.setInt(1, id); + + try (ResultSet result = statement.executeQuery()) { + if (result.next()) { + Gang gang = new GTMGang(result.getInt("id")); + gang.setName(result.getString("name")); + UUIDUtil.createUUID(result.getString("leader")).ifPresent(gang::setOwner); + gang.setDescription(result.getString("description")); + gang.setMaxMembers(result.getInt("max_members")); + return gang; + } + } + } catch (SQLException e) { + e.printStackTrace(); + } + return null; + } + + public static Set<Gang> getGangs(Connection connection) { + Set<Gang> list = Sets.newHashSet(); + final String query = "SELECT id,HEX(owner) as leader,name,description,max_members FROM gtm_gang WHERE server_key=?;"; + try (PreparedStatement statement = connection.prepareStatement(query)) { + statement.setString(1, Core.name().toUpperCase()); + + try (ResultSet result = statement.executeQuery()) { + while (result.next()) { + int gangID = result.getInt("id"); + Gang gang = new GTMGang(gangID); + gang.setName(result.getString("name")); + String leader = result.getString("leader"); + if (leader != null){ + UUID leaderUUID = UUIDUtil.createUUID(leader).orElse(null); + if (leaderUUID != null){ + gang.setOwner(leaderUUID); + } + else{ + Core.log("[GangDAO] Unable to set owner of gang due to leader uuid not being parsed, leader=" + leader + ", gang_id=" + gangID); + } + } + gang.setDescription(result.getString("description")); + gang.setMaxMembers(result.getInt("max_members")); + list.add(gang); + } + return list; + } + } catch (SQLException e) { + e.printStackTrace(); + } + return list; + } + + public static Set<GangMember> getMembers(Connection connection, int id) { + //Pull player name by uuid, no current way of doing this.. + String query = "SELECT HEX(GM.uuid) as uid,GM.role,U.name FROM gtm_gang_member GM, gtm_gang G, user U WHERE GM.gang_id=? AND GM.gang_id=G.id AND GM.uuid=U.uuid;"; + try (PreparedStatement statement = connection.prepareStatement(query)) { + statement.setInt(1, id); + + try (ResultSet result = statement.executeQuery()) { + Set<GangMember> list = Sets.newHashSet(); + + while (result.next()) { + UUID uuid = UUIDUtil.createUUID(result.getString("uid")).orElse(null); + if (uuid == null) continue; + list.add(new GTMGangMember(uuid, result.getString("name"), GangRole.getById(result.getInt("role")))); + } + + return list; + } + } catch (SQLException e) { + e.printStackTrace(); + } + return Sets.newHashSet(); + } + + public static Set<GangRelation> getRelations(Connection connection, int id) { + String query = "SELECT other_id, relation FROM gtm_gang_relation WHERE gang_id=?;"; + try (PreparedStatement statement = connection.prepareStatement(query)) { + statement.setInt(1, id); + + try (ResultSet result = statement.executeQuery()) { + Set<GangRelation> list = Sets.newHashSet(); + + while (result.next()) { + list.add(new GTMGangRelation(result.getInt("other_id"), RelationType.getByKey(result.getString("relation")))); + } + + return list; + } + } catch (SQLException e) { + e.printStackTrace(); + } + return Sets.newHashSet(); + } + + public static Optional<Gang> getGangInfo(Connection connection, int id) { + String query = "SELECT * FROM gtm_gang WHERE id=?;"; + try (PreparedStatement statement = connection.prepareStatement(query)) { + statement.setInt(1, id); + + try (ResultSet result = statement.executeQuery()) { + if (result.next()) { + Optional<UUID> optional = UUIDUtil.createUUID(result.getString("owner")); + if (!optional.isPresent()) return Optional.empty(); + + return Optional.of(new GTMGang(result.getInt("id"), optional.get(), result.getString("name"), result.getString("description"), result.getInt("max_members"))); + } + } + } catch (SQLException e) { + e.printStackTrace(); + } + return Optional.empty(); + } + + public static Optional<Gang> getGangInfo(Connection connection, String name) { + String query = "SELECT id,name,description,max_members FROM gtm_gang WHERE name=? AND server_key=?;"; + try (PreparedStatement statement = connection.prepareStatement(query)) { + statement.setString(1, name); + statement.setString(2, Core.name().toUpperCase()); + + try (ResultSet result = statement.executeQuery()) { + if (result.next()) { + Optional<UUID> optional = UUIDUtil.createUUID(result.getString("owner")); + if (!optional.isPresent()) return Optional.empty(); + + return Optional.of(new GTMGang(result.getInt("id"), optional.get(), result.getString("name"), result.getString("description"), result.getInt("max_members"))); + } + } + } catch (SQLException e) { + e.printStackTrace(); + } + return Optional.empty(); + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/gang/GangManager.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/gang/GangManager.java new file mode 100644 index 0000000..6d956ed --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/gang/GangManager.java @@ -0,0 +1,277 @@ +package net.grandtheftmc.gtm.gang; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.database.BaseDatabase; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.GTMUtils; +import net.grandtheftmc.gtm.gang.command.GangCommand; +import net.grandtheftmc.gtm.gang.command.GangDisableCommand; +import net.grandtheftmc.gtm.gang.member.GTMGangMember; +import net.grandtheftmc.gtm.gang.member.GangMember; +import net.grandtheftmc.gtm.gang.member.GangRole; +import net.grandtheftmc.gtm.gang.relation.GangRelation; +import net.grandtheftmc.gtm.gang.relation.RelationType; +import net.grandtheftmc.gtm.users.GTMRank; +import net.grandtheftmc.gtm.users.GTMUser; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.plugin.java.JavaPlugin; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.*; + +public class GangManager { + + public static boolean ENABLED = true; + private static GangManager instance; + + private Set<Gang> gangs; + private final HashMap<UUID, Integer> gangInvites; + + public GangManager(JavaPlugin plugin) { + instance = this; + this.gangs = Sets.newHashSet(); + this.gangInvites = Maps.newHashMap(); + + new GangCommand(this); + new GangDisableCommand(); + plugin.getCommand("gangchat").setExecutor(new GangChatCommand()); + + ServerUtil.runTaskAsync(() -> { + long start = System.currentTimeMillis(); + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + this.gangs = GangDAO.getGangs(connection); + System.out.println("Loaded gangs(" + gangs.size() + "), took " + (System.currentTimeMillis() - start) + "ms."); + + for (Gang gang : this.getGangs()) { + gang.setMembers(GangDAO.getMembers(connection, gang.getUniqueId())); + gang.setRelation(GangDAO.getRelations(connection, gang.getUniqueId())); + + boolean found = false; + GangMember coOwner = null; + for (GangMember member : gang.getMembers()) { + if (member.getRole() == GangRole.LEADER) + found = true; + if (member.getRole() == GangRole.CO_LEADER && !found) + coOwner = member; + } + + if (!found && coOwner != null) { + gang.setOwner(coOwner.getUniqueId()); + System.out.println("Owner set for gang (" + gang.getUniqueId() + ")"); + } + } + + System.out.println("Loaded gangs(" + gangs.size() + ")"); + } catch (SQLException e) { + e.printStackTrace(); + } + }); + } + + public static GangManager getInstance() { + return instance; + } + + public Set<Gang> getGangs() { + return gangs; + } + + public void addGang(Gang gang) { + this.gangs.add(gang); + } + + public void removeGang(Gang gang) { + this.gangs.remove(gang); + } + + public Optional<Gang> getGang(int id) { + return this.gangs.stream().filter(gang -> gang.getUniqueId() == id).findFirst(); + } + + public Optional<Gang> getGang(String name) { + return this.gangs.stream().filter(gang -> gang.getName().equalsIgnoreCase(name)).findFirst(); + } + + public Optional<Gang> getGangByMember(UUID uuid) { + return this.gangs.stream().filter(gang -> gang.getMembers().stream().anyMatch(mem -> mem.getUniqueId().equals(uuid))).findFirst(); + } + + public Integer getGangInvites(UUID uuid) { + return this.gangInvites.getOrDefault(uuid, -1); + } + + public void addGangInvite(UUID uuid, int id) { + this.gangInvites.put(uuid, id); + } + + public void removeGangInvite(UUID uuid) { + this.gangInvites.remove(uuid); + } + + public boolean isInvited(UUID uuid, int id) { + return this.gangInvites.containsKey(uuid) && this.gangInvites.get(uuid) == id; + } + + public void createGang(Player sender, String name) { + UUID uuid = sender.getUniqueId(); + String gangName = name; + + User user = Core.getUserManager().getLoadedUser(uuid); + GTMUser gtmUser = GTM.getUserManager().getLoadedUser(uuid); + + if (!gtmUser.isRank(GTMRank.GANGSTER) && user.getUserRank().isHigherThan(UserRank.VIP)) { + sender.sendMessage(Lang.GANGS.f("&7You must be a &e&l" + GTMRank.GANGSTER.getColoredNameBold() + "&7 or &a&lPREMIUM&7 to create a gang! Check the &d&lMy Account&7 -> &a&lRanks&7 menu on your phone for more information.")); + return; + } + + if (this.getGangByMember(uuid).orElse(null) != null) { + sender.sendMessage(Lang.GANGS.f("&7You are in a gang already!")); + return; + } + + if (!name.matches("^[a-zA-Z_0-9]+$")) { + sender.sendMessage(Lang.GANGS.f("&7Only a-z, A-Z, 0-9 and _ are allowed in a gang name!")); + return; + } + + if (name.length() > 16 || name.length() < 3) { + sender.sendMessage(Lang.GANGS.f("&7The name of your gang needs to be 3-16 characters long!")); + return; + } + + if (this.getGang(gangName).orElse(null) != null) { + sender.sendMessage(Lang.GANGS.f("&7A gang with that name already exists!")); + return; + } + + if (!gtmUser.hasMoney(500000)) { + sender.sendMessage(Lang.GANGS.f("&7You don't have &a$&l500,000&7 to create this gang!")); + return; + } + + ServerUtil.runTaskAsync(() -> { + boolean b = false; + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + b = GangDAO.isGangExisting(connection, gangName); + } catch (SQLException e) { + e.printStackTrace(); + } + + boolean exists = b; + + ServerUtil.runTask(() -> { + Player sender2 = Bukkit.getPlayer(uuid); + if (sender2 == null) return; + if (exists) { + sender.sendMessage(Lang.GANGS.f("&7A gang with that name already exists!")); + return; + } + + if (!gtmUser.hasMoney(500000)) { + sender.sendMessage(Lang.GANGS.f("&7You don't have &a$&l500,000&7 to create this gang!")); + return; + } + + gtmUser.takeMoney(500000); + GTMUtils.updateBoard(sender2, user, gtmUser); + int maxMembers = this.getMaxGangMembers(sender2, user); + + ServerUtil.runTaskAsync(() -> { + Gang gang = null; + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + gang = GangDAO.createGang(connection, sender2.getUniqueId(), gangName, maxMembers); + } catch (SQLException e) { + e.printStackTrace(); + } + + if(gang == null) return; + this.addGang(gang); + gang.addMember(new GTMGangMember(sender2.getUniqueId(), sender2.getName(), GangRole.LEADER)); + + ServerUtil.runTask(() -> { + Player sender3 = Bukkit.getPlayer(uuid); + if (sender3 == null) return; + + sender3.sendMessage(Lang.GANGS.f("&7You created a gang with the name &a" + gangName + "&7!")); + }); + }); + }); + }); + } + + public int getMaxGangMembers(Player player, User user) { + GTMUser gtmUser = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + + int amnt = gtmUser.getRank().getGangMembers() + GTMUtils.getGangMembers(user.getUserRank()); + for (int i = 20; i > 0; i--) + if (player.hasPermission("gangs.members." + i)) { + amnt = i; + break; + } + for (int i = 20; i > 0; i--) + if (player.hasPermission("gangs.extramembers." + i)) { + amnt += i; + break; + } + return amnt; + } + + public void info(Gang gang, Player sender, User user, GTMUser gtmUser) { + sender.sendMessage(Utils.f(" &7&m---------------&7[&a&l " + gang.getName() + " &7]&m---------------")); + sender.sendMessage(Utils.f("&a&lDescription: &7" + gang.getDescription())); + + StringBuilder ally = new StringBuilder(), enemy = new StringBuilder(); + int iAlly = 0, iEnemy = 0; + for (GangRelation relation : gang.getRelations()) { + if (relation.getRelationType() == RelationType.ALLY) { + ally.append(iAlly > 0 ? "&7, " : "").append("&a").append(relation.getRelativeName()); + iAlly++; + } + else if (relation.getRelationType() == RelationType.ENEMY) { + enemy.append(iEnemy > 0 ? "&c, " : "").append("&c").append(relation.getRelativeName()); + iEnemy++; + } + } + + int online = 0, offline = 0; + StringBuilder on = new StringBuilder(), off = new StringBuilder(); + Player leader = Bukkit.getPlayer(gang.getOwner()); + if (leader != null) { + User u = Core.getUserManager().getLoadedUser(leader.getUniqueId()); + on.append(online > 0 ? "&7, " : "").append("&aLeader ").append(u.getColoredName(leader)); +// members[0].append("&aLeader ").append(u.getColoredName(leader)).append("&7, "); + online++; + } + + for (GangMember member : gang.getMembers()) { + if (member.getRole() == GangRole.LEADER) continue; + Player player = Bukkit.getPlayer(member.getUniqueId()); + if (player == null) { + off.append(offline > 0 ? "&7, " : "").append("&a").append(member.isCoLeader() ? "Coleader " : "").append(member.getName()); + offline++; + continue; + } + + User u = Core.getUserManager().getLoadedUser(member.getUniqueId()); + on.append(online > 0 ? "&7, " : "").append("&a").append(member.isCoLeader() ? "Coleader " : "").append(u.isSpecial() ? u.getColoredName(player) : player.getName()); + online++; + } + + if (iAlly > 0) sender.sendMessage(Utils.f("&a&lAllies&7(&a" + iAlly + "&7)&a: &7" + ally.toString())); + if (iEnemy > 0) sender.sendMessage(Utils.f("&c&lEnemies&7(&c" + iEnemy + "&7)&c: &7" + enemy.toString())); + sender.sendMessage(Utils.f("&a&lOnline Members&7(&a" + online + "&7)&a: &7" + on)); + sender.sendMessage(Utils.f("&a&lOffline Members&7(&a" + offline + "&7)&a: &7" + off)); + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/gang/command/GangAdminCommand.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/gang/command/GangAdminCommand.java new file mode 100644 index 0000000..c975728 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/gang/command/GangAdminCommand.java @@ -0,0 +1,98 @@ +package net.grandtheftmc.gtm.gang.command; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.database.BaseDatabase; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.users.GTMUser; +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.UUID; + +public class GangAdminCommand implements CommandExecutor { + @Override + public boolean onCommand(CommandSender s, Command c, String lbl, String[] args) { + if (!s.hasPermission("gangs.admin")) { + s.sendMessage(Lang.NOPERM.s()); + return true; + } + + if (!(s instanceof Player)) { + s.sendMessage(Lang.NOTPLAYER.s()); + return true; + } + +// Player player = (Player) s; +// UUID uuid = player.getUniqueId(); +// User user = Core.getUserManager().getLoadedUser(uuid); +// GTMUser gtmUser = GTM.getUserManager().getLoadedUser(uuid); +// if (args.length == 0 || "help".equalsIgnoreCase(args[0])) { +// int page = 1; +// if (args.length > 1) +// try { +// page = Integer.parseInt(args[1]); +// } catch (NumberFormatException e) { +// page = 1; +// } +// if (page < 1) { +// s.sendMessage(Lang.GANGS.f("&7The page must be a positive number!")); +// return true; +// } +// s.sendMessage(Utils.f(" &7&m---------------&7[&a GangAdmin Help &7Page &a" + page + "&7/&a2 &7]&m---------------")); +// switch (page) { +// case 1: +// s.sendMessage(Utils.f("&a/ga help [page] &7Show this help page")); +// s.sendMessage(Utils.f("&a/ga set [player] [gang name] &7Forcefully add a player to a gang")); +// s.sendMessage(Utils.f("&a/ga setrank [player] [rank] &7Forcefully set a player's rank in their gang")); +// s.sendMessage(Utils.f("&a/ga kick [player] &7Forcefully kick a player from their gang")); +// s.sendMessage(Utils.f("&a/ga disband [gang] &7Forcefully disband a gang")); +// return true; +// } +// } +// switch (args[0]) { +// case "set": { +// if (args.length != 3) { +// player.sendMessage(Lang.GANGS.f("&cError! &7Usage: &a/ga set [player] [gang name]")); +// return true; +// } +// String gangName = args[2]; +// String gangRank = "member"; +// if (Bukkit.getPlayer(args[1]) == null) { +//// Core.sql.updateAsyncLater("update " + Core.name() + " set gang='" + gangName + "',gangRank='" + gangRank +//// + "' where name='" + args[1] + "';"); +// ServerUtil.runTaskAsync(() -> BaseDatabase.runCustomQuery("update " + Core.name() + " set gang='" + gangName + "',gangRank='" + gangRank + "' where name='" + args[1] + "';")); +// } else { +// Player target = Bukkit.getPlayer(args[1]); +// GTMUser targetGTMUser = GTM.getUserManager().getLoadedUser(target.getUniqueId()); +// targetGTMUser.setGang(gangName); +// } +// player.sendMessage(Lang.GANGS.f("&a" + args[1] + " &7is now a member of &a" + gangName)); +// return true; +// } +// case "setrank": { +// return true; +// } +// case "kick": { +// return true; +// } +// case "disband": { +// return true; +// } +// default: +// s.sendMessage(Utils.f("&a/ga help [page] &7Show this help page")); +// s.sendMessage(Utils.f("&a/ga set [player] [gang name] &7Forcefully add a player to a gang")); +// s.sendMessage(Utils.f("&a/ga setrank [player] [rank] &7Forcefully set a player's rank in their gang")); +// s.sendMessage(Utils.f("&a/ga kick [player] &7Forcefully kick a player from their gang")); +// s.sendMessage(Utils.f("&a/ga disband [gang] &7Forcefully disband a gang")); +// return true; +// } + return true; + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/gang/command/GangCommand.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/gang/command/GangCommand.java new file mode 100644 index 0000000..35090fa --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/gang/command/GangCommand.java @@ -0,0 +1,353 @@ +package net.grandtheftmc.gtm.gang.command; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.commands.CoreCommand; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.util.C; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.gang.Gang; +import net.grandtheftmc.gtm.gang.GangManager; +import net.grandtheftmc.gtm.users.GTMUser; +import org.apache.commons.lang3.StringUtils; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; + +import java.util.*; + +public class GangCommand extends CoreCommand<Player> { + + private final GangManager gangManager; + + public GangCommand(GangManager gangManager) { + super("gang", "Gangs base command.", "g"); + this.gangManager = gangManager; + } + + @Override + public void execute(Player sender, String[] args) { + UUID uuid = sender.getUniqueId(); + User user = Core.getUserManager().getLoadedUser(uuid); + GTMUser gtmUser = GTM.getUserManager().getLoadedUser(uuid); + Gang playerGang = gangManager.getGangByMember(uuid).orElse(null); + + if (args.length == 0 || "help".equalsIgnoreCase(args[0])) { + int page = 1; + if (args.length > 1) { + try { + page = Integer.parseInt(args[1]); + } catch (NumberFormatException e) { + page = 1; + } + } + + if (page < 1) { + sender.sendMessage(Lang.GANGS.f("&7The page must be a positive number!")); + return; + } + + sender.sendMessage(Utils.f(" &7&m---------------&7[&a Gangs Help &7Page &a" + page + "&7/&a2 &7]&m---------------")); + this.sendHelp(sender, page); + } + + if(args.length < 1) return; + + switch (args[0]) { + case "create": + if (args.length != 2) { + sender.sendMessage(Utils.f("&c/gangs create <name>")); + return; + } + + gangManager.createGang(sender, args[1]); + return; + + case "i": + case "s": + case "info": + case "show": { +// Gang gang = args.length == 1 ? gtmUser.getGang() : GTM.getGangManager().getAlreadyLoadedGang(args[1]); + Optional<Gang> optional; + if(args.length == 1) optional = gangManager.getGangByMember(uuid); + else optional = this.gangManager.getGang(args[1]); + + if (!optional.isPresent()) { + sender.sendMessage(Lang.GANGS.f(args.length == 1 ? "&7You are not in any gang!" : "&7That gang does not exist or no one in that gang is online!")); + return; + } + + gangManager.info(optional.get(), sender, user, gtmUser); + return; + } + + case "p": + case "player": { + if (args.length != 2) { + sender.sendMessage(Utils.f("&c/gangs " + args[0] + " <name>")); + return; + } + + Player target = Bukkit.getPlayer(args[1]); + if (target == null) { + sender.sendMessage(Lang.GANGS.f("&7That player is not online!")); + return; + } + +// Gang gang = GTM.getUserManager().getLoadedUser(target.getUniqueId()).getGang(); + Gang gang = gangManager.getGangByMember(target.getUniqueId()).orElse(null); + if (gang == null) { + sender.sendMessage(Lang.GANGS.f("&7That player is not in any gang!")); + return; + } + + gangManager.info(gang, sender, user, gtmUser); + return; + } + + case "l": + case "list": { + if (true) { + sender.sendMessage(C.ERROR + "This command is currently disabled."); + return; + } + + Set<Gang> gangs = this.gangManager.getGangs(); + int page = 0; + if (args.length > 1) { + try { + page = Integer.parseInt(args[1]) - 1; + } catch (NumberFormatException e) { + sender.sendMessage(Lang.GANGS.f("&7The page must be a number!")); + return; + } + } + + if (page < 0) { + sender.sendMessage(Lang.GANGS.f("&7The page must be a positive number!")); + return; + } + + int pages = gangs.size() / 6; + sender.sendMessage(Utils.f(" &7&m---------------&7[&a&l Gangs List &7Page &a" + (page + 1) + "&7/&a" + pages + " &7&m]---------------")); + Iterator<Gang> it = gangs.iterator(); + for (int i = 0; i < page * 6; i++) { + if (!it.hasNext()) return; + Gang g = it.next(); + g.list(playerGang); + } + return; + } + + case "invite": { + if (args.length != 2) { + sender.sendMessage(Utils.f("&c/gangs invite <name>")); + return; + } + if (playerGang == null) { + sender.sendMessage(Lang.GANGS.f("&7You are not in any gang!")); + return; + } + Player target = Bukkit.getPlayer(args[1]); + playerGang.invite(sender, user, target); + return; + } + + case "accept": + case "join": + if (args.length != 2) { + sender.sendMessage(Utils.f("&c/gangs " + args[0] + " <name>")); + return; + } + + Optional<Gang> gang = this.gangManager.getGang(args[1]); + if (!gang.isPresent()) { + sender.sendMessage(Lang.GANGS.f("&7That gang does not exist!")); + return; + } + + gang.get().accept(sender, user, gtmUser); + return; + + case "leave": + if (playerGang == null) { + sender.sendMessage(Lang.GANGS.f("&7You are not in any gang!")); + return; + } + + playerGang.leave(sender, user, gtmUser); + return; + + case "leader": { + if (args.length != 2) { + sender.sendMessage(Utils.f("&c/gangs leader <name>")); + return; + } + + if (playerGang == null) { + sender.sendMessage(Lang.GANGS.f("&7You are not in any gang!")); + return; + } + + Player target = Bukkit.getPlayer(args[1]); + playerGang.setOwner(sender, user, gtmUser, target); + return; + } + + case "promote": + if (args.length != 2) { + sender.sendMessage(Utils.f("&c/gangs promote <name>")); + return; + } + + if (playerGang == null) { + sender.sendMessage(Lang.GANGS.f("&7You are not in any gang!")); + return; + } + + playerGang.promote(sender, user, gtmUser, args[1]); + return; + + case "demote": + if (args.length != 2) { + sender.sendMessage(Utils.f("&c/gangs demote <name>")); + return; + } + + if (playerGang == null) { + sender.sendMessage(Lang.GANGS.f("&7You are not in any gang!")); + return; + } + + playerGang.demote(sender, user, gtmUser, args[1]); + return; + + case "kick": + if (args.length != 2) { + sender.sendMessage(Utils.f("&c/gangs kick <name>")); + return; + } + + if (playerGang == null) { + sender.sendMessage(Lang.GANGS.f("&7You are not in any gang!")); + return; + } + + playerGang.kick(sender, user, gtmUser, args[1]); + return; + + case "disband": + if (playerGang == null) { + sender.sendMessage(Lang.GANGS.f("&7You are not in any gang!")); + return; + } + if (args.length == 2 && "confirm".equalsIgnoreCase(args[1])) { + playerGang.disbandConfirm(sender, user, gtmUser); + return; + } + playerGang.disband(sender); + return; + + case "rename": + case "name": + if (args.length != 2) { + sender.sendMessage(Utils.f("&c/gangs name <name>")); + return; + } + + if (playerGang == null) { + sender.sendMessage(Lang.GANGS.f("&7You are not in any gang!")); + return; + } + + playerGang.rename(sender, user, gtmUser, args[1]); + return; + + case "desc": + case "description": + if (args.length < 2) { + sender.sendMessage(Utils.f("&c/gangs " + args[0] + " <description>")); + return; + } + + if (playerGang == null) { + sender.sendMessage(Lang.GANGS.f("&7You are not in any gang!")); + return; + } + + Collection<String> descArgs = new ArrayList<>(); + for (int i = 1; i < args.length; i++) { + descArgs.add(args[i]); + } + + String desc = StringUtils.join(descArgs, " "); + playerGang.description(sender, user, gtmUser, desc); + return; + + case "ally": + if (args.length < 2) { + sender.sendMessage(Utils.f("&c/gangs " + args[0] + " <name>")); + return; + } + if (playerGang == null) { + sender.sendMessage(Lang.GANGS.f("&7You are not in any gang!")); + return; + } + playerGang.ally(sender, user, gtmUser, args[1]); + return; + + case "neutral": + if (args.length < 2) { + sender.sendMessage(Utils.f("&c/gangs " + args[0] + " <name>")); + return; + } + if (playerGang == null) { + sender.sendMessage(Lang.GANGS.f("&7You are not in any gang!")); + return; + } + playerGang.neutral(sender, user, gtmUser, args[1]); + return; + + case "enemy": + if (args.length < 2) { + sender.sendMessage(Utils.f("&c/gangs " + args[0] + " <name>")); + return; + } + if (playerGang == null) { + sender.sendMessage(Lang.GANGS.f("&7You are not in any gang!")); + return; + } + playerGang.enemy(sender, user, gtmUser, args[1]); + return; + + default: + this.sendHelp(sender, 1); + break; + } + } + + private void sendHelp(Player player, int page) { + if(page == 1) { + player.sendMessage(Utils.f("&a/gang help [page] &7Show this help page")); + player.sendMessage(Utils.f("&a/gang list [page] &7List the most powerful online gangs")); + player.sendMessage(Utils.f("&a/gang info <gang> &7Show information about your/a Gang")); + player.sendMessage(Utils.f("&a/gang join <gang> &7Join a Gang you were invited to")); + player.sendMessage(Utils.f("&a/gang invite <name> &7Invite a player to your Gang")); + player.sendMessage(Utils.f("&a/gang create <name> &7Create a new Gang")); + player.sendMessage(Utils.f("&a/gang player <name> &7Show info about the Gang of another player")); + player.sendMessage(Utils.f("&a/gang leader <name> &7Transfer leadership of your Gang")); + player.sendMessage(Utils.f("&a/gang leave &7Leave your Gang")); + return; + } + + player.sendMessage(Utils.f("&a/gang promote <name> &7Promote a player to coleader of your Gang")); + player.sendMessage(Utils.f("&a/gang demote <name> &7Demote a coleader of your Gang")); + player.sendMessage(Utils.f("&a/gang kick <name> &7Kick a player from your Gang")); + player.sendMessage(Utils.f("&a/gang disband &7Kick all members and delete your Gang")); + player.sendMessage(Utils.f("&a/gang rename <name> &7Change the name of your Gang")); + player.sendMessage(Utils.f("&a/gang desc <text> &7Change the description of your Gang")); + player.sendMessage(Utils.f("&a/gang ally <gang> &7Declare a Gang your ally")); + player.sendMessage(Utils.f("&a/gang neutral <gang> &7Designate a Gang as neutral")); + player.sendMessage(Utils.f("&a/gang enemy <gang> &7Declare a Gang your enemy")); + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/gang/command/GangDisableCommand.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/gang/command/GangDisableCommand.java new file mode 100644 index 0000000..db8c689 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/gang/command/GangDisableCommand.java @@ -0,0 +1,26 @@ +package net.grandtheftmc.gtm.gang.command; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.commands.CoreCommand; +import net.grandtheftmc.core.commands.RankedCommand; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.gtm.gang.GangManager; +import org.bukkit.entity.Player; + +public class GangDisableCommand extends CoreCommand<Player> implements RankedCommand { + + public GangDisableCommand() { + super("gangdisable", "Temp disable features of gangs."); + } + + @Override + public void execute(Player sender, String[] strings) { + GangManager.ENABLED = !GangManager.ENABLED; + sender.sendMessage(Lang.GANGS.f("&cCreating & Info features have been " + (GangManager.ENABLED ? "Enabled." : "Disabled!"))); + } + + @Override + public UserRank requiredRank() { + return UserRank.ADMIN; + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/gang/member/GTMGangMember.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/gang/member/GTMGangMember.java new file mode 100644 index 0000000..d13a1f7 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/gang/member/GTMGangMember.java @@ -0,0 +1,125 @@ +package net.grandtheftmc.gtm.gang.member; + +import net.grandtheftmc.core.database.BaseDatabase; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.gtm.gang.Gang; +import net.grandtheftmc.gtm.gang.GangDAO; +import net.grandtheftmc.gtm.gang.GangManager; +import net.grandtheftmc.gtm.users.GTMRank; +import net.grandtheftmc.gtm.users.GTMUser; +import org.bukkit.Bukkit; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.Optional; +import java.util.UUID; + +public class GTMGangMember implements GangMember { + + private final UUID uuid; + private GangRole role = GangRole.MEMBER; + private String name; + + private boolean chat = false; + private Gang viewingGang; + private GangMember viewingGangMember; + + public GTMGangMember(UUID uuid) { + this.uuid = uuid; + } + + public GTMGangMember(UUID uuid, String name, GangRole role) { + this(uuid); + this.name = name; + this.role = role; + } + + @Override + public UUID getUniqueId() { + return uuid; + } + + @Override + public String getName() { + return name; + } + + @Override + public void setName(String name) { + this.name = name; + } + + @Override + public GangRole getRole() { + return role; + } + + @Override + public void setRole(int id, GangRole role) { + this.role = role; + + ServerUtil.runTaskAsync(() -> { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + GangDAO.setMemberRole(connection, uuid, role, id); + } catch (SQLException e) { + e.printStackTrace(); + } + }); + } + + @Override + public boolean isCoLeader() { + return this.role == GangRole.CO_LEADER; + } + + @Override + public boolean isOnline() { + return Bukkit.getPlayer(this.uuid) != null; + } + + @Override + public boolean getChatToggle() { + return this.chat; + } + + @Override + public void toggleChat() { + this.chat = !this.chat; + } + + @Override + public void setChat(boolean chat) { + this.chat = chat; + } + + @Override + public Optional<Gang> getViewingGang() { + return this.viewingGang == null ? Optional.empty() : Optional.of(this.viewingGang); + } + + @Override + public boolean isViewingGang(Gang gang) { + return this.viewingGang != null && this.viewingGang.getUniqueId() == gang.getUniqueId(); + } + + @Override + public void setViewingGang(Gang viewingGang) { + this.viewingGang = viewingGang; + } + + @Override + public Optional<GangMember> getViewingGangMember() { + return this.viewingGangMember == null ? Optional.empty() : Optional.of(this.viewingGangMember); + } + + @Override + public void setViewingGangMember(GangMember member) { + this.viewingGangMember = member; + } + + @Override + public boolean isViewingGangMember(UUID uuid) { + return this.viewingGangMember != null && this.viewingGangMember.getUniqueId().equals(uuid); + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/gang/member/GangMember.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/gang/member/GangMember.java new file mode 100644 index 0000000..569eb6e --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/gang/member/GangMember.java @@ -0,0 +1,34 @@ +package net.grandtheftmc.gtm.gang.member; + +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.gtm.gang.Gang; +import net.grandtheftmc.gtm.users.GTMUser; + +import java.util.Optional; +import java.util.UUID; + +public interface GangMember { + + UUID getUniqueId(); + + String getName(); + void setName(String name); + + GangRole getRole(); + void setRole(int id, GangRole role); + + boolean isCoLeader(); + boolean isOnline(); + + boolean getChatToggle(); + void toggleChat(); + void setChat(boolean on); + + Optional<Gang> getViewingGang(); + void setViewingGang(Gang gang); + boolean isViewingGang(Gang gang); + + Optional<GangMember> getViewingGangMember(); + void setViewingGangMember(GangMember member); + boolean isViewingGangMember(UUID uuid); +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/gang/member/GangRole.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/gang/member/GangRole.java new file mode 100644 index 0000000..007a8c0 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/gang/member/GangRole.java @@ -0,0 +1,41 @@ +package net.grandtheftmc.gtm.gang.member; + +public enum GangRole { + MEMBER(1, "member", "Member"), + TRUSTED(2, "trusted", "Trusted"), + + //Room for 2 more. + + CO_LEADER(5, "coleader", "Co-Leader"), + LEADER(6, "leader", "Leader"), + ; + + private final int rankId; + private final String tag; + private final String formattedTag; + + GangRole(int rankId, String tag, String formattedTag) { + this.rankId = rankId; + this.tag = tag; + this.formattedTag = formattedTag; + } + + public int getRankId() { + return rankId; + } + + public String getTag() { + return tag; + } + + public String getFormattedTag() { + return formattedTag; + } + + public static GangRole getById(int id) { + for(GangRole role : values()) + if(role.rankId == id) + return role; + return MEMBER; + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/gang/relation/GTMGangRelation.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/gang/relation/GTMGangRelation.java new file mode 100644 index 0000000..fa6b667 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/gang/relation/GTMGangRelation.java @@ -0,0 +1,43 @@ +package net.grandtheftmc.gtm.gang.relation; + +public class GTMGangRelation implements GangRelation { + + private final int relativeId; + private String relativeName; + private RelationType relationType; + + public GTMGangRelation(int relativeId, RelationType relationType) { + this.relativeId = relativeId; + this.relationType = relationType; + } + + public GTMGangRelation(int relativeId, String relativeName, RelationType relationType) { + this(relativeId, relationType); + this.relativeName = relativeName; + } + + @Override + public int getRelativeId() { + return relativeId; + } + + @Override + public String getRelativeName() { + return relativeName; + } + + @Override + public void setRelativeName(String relativeName) { + this.relativeName = relativeName; + } + + @Override + public RelationType getRelationType() { + return relationType; + } + + @Override + public void setRelationType(RelationType relationType) { + this.relationType = relationType; + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/gang/relation/GangRelation.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/gang/relation/GangRelation.java new file mode 100644 index 0000000..5daf56a --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/gang/relation/GangRelation.java @@ -0,0 +1,12 @@ +package net.grandtheftmc.gtm.gang.relation; + +public interface GangRelation { + + int getRelativeId(); + + String getRelativeName(); + void setRelativeName(String name); + + RelationType getRelationType(); + void setRelationType(RelationType relationType); +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/gang/relation/RelationType.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/gang/relation/RelationType.java new file mode 100644 index 0000000..af37a5d --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/gang/relation/RelationType.java @@ -0,0 +1,35 @@ +package net.grandtheftmc.gtm.gang.relation; + +public enum RelationType { + + NEUTRAL(null, null), + ALLY("ALLY", "Ally"), + ENEMY("ENEMY", "Enemy"), + ; + + private final String key; + private final String name; + + RelationType(String key, String name) { + this.key = key; + this.name = name; + } + + public String getKey() { + return key; + } + + public String getName() { + return name; + } + + public static RelationType getByKey(String str) { + for(RelationType type : values()) { + if (type.key == null) continue; + if (type.key.equalsIgnoreCase(str)) { + return type; + } + } + return NEUTRAL; + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/gang/schema.md b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/gang/schema.md new file mode 100644 index 0000000..d8a909e --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/gang/schema.md @@ -0,0 +1,65 @@ +/***** +** Table Description: +** Represents GTM gang information. +** +** id is primary auto increment so we can change gang names. +** server_key is the server that this gang is on +** name is the name of the gang +** owner is the uuid of the player that owns this gang +** +** Reasoning for structure: +** PK is the (`id`) field, as every gang needs its own unique key. We +** index the server_key so we can lookup gangs by server_type. +*****/ +CREATE TABLE IF NOT EXISTS gtm_gang( +id INT NOT NULL AUTO_INCREMENT, +server_key VARCHAR(10) NOT NULL, +name VARCHAR(36) NOT NULL, +owner BINARY(16) NOT NULL, +description VARCHAR(255) NOT NULL, +max_members INT(11) NOT NULL, +PRIMARY KEY (id), +INDEX (server_key) +); + + +/***** +** Table Description: +** Represents GTM gang member information, every gang will +** have multiple records, one for each member. +** +** gang_id is foreign key reference to gtm_gang table +** uuid is the uuid of the member +** +** Reasoning for structure: +** PK is the (`gang_id`, `uuid`) pair, as a member can only exist in that gang once. +*****/ +CREATE TABLE IF NOT EXISTS gtm_gang_member( +gang_id INT NOT NULL, +uuid BINARY(16) NOT NULL, +role TINYINT(6) NOT NULL DEFAULT 0, +PRIMARY KEY (gang_id, uuid), +FOREIGN KEY (gang_id) REFERENCES gtm_gang(id) ON DELETE CASCADE +); + + +/***** +** Table Description: +** Represents GTM gang relationships. +** +** gang_id is owner of the relationship +** other_id is the other gang in this relationship +** relation is the relationship they share +** +** Reasoning for structure: +** PK is the (`gang_id`, `other_id`) pair, as a gang can only have +** ONE unique relationship between them. +*****/ +CREATE TABLE IF NOT EXISTS gtm_gang_relation( +gang_id INT NOT NULL, +other_id INT NOT NULL, +relation VARCHAR(10), +PRIMARY KEY (gang_id, other_id), +FOREIGN KEY (gang_id) REFERENCES gtm_gang(id) ON DELETE CASCADE, +FOREIGN KEY (other_id) REFERENCES gtm_gang(id) ON DELETE CASCADE +); \ No newline at end of file diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/gangs/Gang.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/gangs/Gang.java new file mode 100644 index 0000000..c9da57c --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/gangs/Gang.java @@ -0,0 +1,885 @@ +package net.grandtheftmc.gtm.gangs; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.database.BaseDatabase; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.users.Pref; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.gang.GangDAO; +import net.grandtheftmc.gtm.gang.member.GangRole; +import net.grandtheftmc.gtm.users.GTMRank; +import net.grandtheftmc.gtm.users.GTMUser; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitRunnable; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.*; + +public class Gang { + +// private boolean hasUpdated; +// +// private int id; +// protected String name; +// +// protected String description = "Your default gang description!"; +// protected UUID leader; +// protected String leaderName; +// protected int maxMembers; +// protected List<GangMember> gangMembers = new ArrayList<>(); +// protected Map<Integer, Integer> relations = new HashMap<>(); +// protected Map<Integer, Integer> relationRequests = new HashMap<>(); +// +// public Gang(int id) { +// this.id = id; +// } +// +// public Gang(String name, UUID leader, String leaderName, int maxMembers) { +// this.name = name; +// this.leader = leader; +// this.leaderName = leaderName; +// this.maxMembers = maxMembers; +// } +// +// public String getName() { +// return this.name; +// } +// +// public void setName(String newName) { +//// Core.sql.updateAsyncLater("update " + Core.name() + "_gangs set name='" + name + "' where name='" + this.name + "';"); +//// Core.sql.updateAsyncLater("update " + Core.name() + " set gang='" + name + "' where gang='" + this.name + "';"); +//// Core.sql.updateAsyncLater("update " + Core.name() + "_gangs_relations set gang1='" + name + "' where gang1='" + this.name + "';"); +//// Core.sql.updateAsyncLater("update " + Core.name() + "_gangs_relations set gang2='" + name + "' where gang2='" + this.name + "';"); +// +// ServerUtil.runTaskAsync(() -> { +//// BaseDatabase.runCustomQuery("update " + Core.name() + "_gangs set name='" + name + "' where name='" + this.name + "';"); +//// BaseDatabase.runCustomQuery("update " + Core.name() + " set gang='" + name + "' where gang='" + this.name + "';"); +//// BaseDatabase.runCustomQuery("update " + Core.name() + "_gangs_relations set gang1='" + name + "' where gang1='" + this.name + "';"); +//// BaseDatabase.runCustomQuery("update " + Core.name() + "_gangs_relations set gang2='" + name + "' where gang2='" + this.name + "';"); +// +// // -- NEW -- +// try (Connection connection = BaseDatabase.getInstance().getConnection()) { +// GangDAO.setName(connection, newName, id); +// } catch (SQLException e) { +// e.printStackTrace(); +// } +// }); +// +// //Remove from hashmap +//// GTM.getGangManager().unloadGang(newName); +// +// for (Player p : Bukkit.getOnlinePlayers()) { +// if (this.isMember(p.getUniqueId()) || this.isLeader(p.getUniqueId())) { +// GTMUser user = GTM.getUserManager().getLoadedUser(p.getUniqueId()); +// user.setGang(newName); +// } +// } +// this.name = newName; +// +// //Associate new mapping +//// GTM.getGangManager().addLoadedGang(this); +// +// } +// +// public boolean updateDataFromDb() { +// if (this.hasUpdated) return true; +// boolean b = true; +// +// GangDAO +//// try (Connection connection = BaseDatabase.getInstance().getConnection()) { +//// try (PreparedStatement statement = connection.prepareStatement("select * from " + Core.name() + "_gangs where name=?;")) { +//// statement.setString(1, this.name); +//// try (ResultSet result = statement.executeQuery()) { +//// if (result.next()) { +//// this.description = result.getString("description"); +//// this.leader = UUID.fromString(result.getString("leader")); +//// this.leaderName = result.getString("leaderName"); +//// this.maxMembers = result.getInt("maxMembers"); +//// } +//// else { +//// b = false; +//// } +//// } +//// } +//// } catch (SQLException e) { +//// e.printStackTrace(); +//// } +// +// this.gangMembers = new ArrayList<>(); +// try (Connection connection = BaseDatabase.getInstance().getConnection()) { +// try (PreparedStatement statement = connection.prepareStatement("select uuid,name,gangRank from " + Core.name() + " where gang=?;")) { +// statement.setString(1, this.name); +// try (ResultSet result = statement.executeQuery()) { +// while (result.next()) { +// if (!Objects.equals("leader", result.getString("gangRank"))) { +// this.gangMembers.add(new GangMember(UUID.fromString(result.getString("uuid")), +// result.getString("name"), result.getString("gangRank"))); +// } +// } +// } +// } +// } catch (SQLException e) { +// e.printStackTrace(); +// } +// +// this.relations = new HashMap<>(); +// this.relationRequests = new HashMap<>(); +// try (Connection connection = BaseDatabase.getInstance().getConnection()) { +// try (PreparedStatement statement = connection.prepareStatement("select * from " + Core.name() + "_gangs_relations where gang1=? or gang2=?;")) { +// statement.setString(1, this.name); +// statement.setString(2, this.name); +// try (ResultSet result = statement.executeQuery()) { +// while (result.next()) { +// String gang1 = result.getString("gang1"); +// String gang2 = result.getString("gang2"); +// this.relations.put(gang1.equalsIgnoreCase(this.name) ? gang2 : gang1, result.getString("relation")); +// } +// } +// } +// } catch (SQLException e) { +// e.printStackTrace(); +// b = false; +// } +// +// this.hasUpdated = b; +// return b; +// } +// +// public String getDescription() { +// return this.description; +// } +// +// public void setDescription(String s) { +// this.description = s; +//// Core.sql.updateAsyncLater("update " + Core.name() + "_gangs set description='" + s + "' where name='" + this.name + "';"); +// +//// ServerUtil.runTaskAsync(() -> BaseDatabase.runCustomQuery("update " + Core.name() + "_gangs set description='" + s + "' where name='" + this.name + "';")); +// ServerUtil.runTaskAsync(() -> { +// try (Connection connection = BaseDatabase.getInstance().getConnection()) { +// GangDAO.setDescription(connection, s, id); +// } catch (SQLException e) { +// e.printStackTrace(); +// } +// }); +// } +// +// public UUID getLeader() { +// return this.leader; +// } +// +// public void setLeader(UUID uuid) { +// this.leader = uuid; +// Player player = Bukkit.getPlayer(uuid); +// if (player != null) { +// GTMUser user = GTM.getUserManager().getLoadedUser(uuid); +// user.setGangRole("leader"); +// this.hasMaxMembers(player, Core.getUserManager().getLoadedUser(uuid), user); +// } +// +//// Core.sql.updateAsyncLater("update " + Core.name() + "_gangs set leader='" + uuid + "',maxMembers=" + this.maxMembers + " where name='" + this.name + "';"); +// +//// ServerUtil.runTaskAsync(() -> BaseDatabase.runCustomQuery("update " + Core.name() + "_gangs set leader='" + uuid + "',maxMembers=" + this.maxMembers + " where name='" + this.name + "';")); +// ServerUtil.runTaskAsync(() -> { +// try (Connection connection = BaseDatabase.getInstance().getConnection()) { +// GangDAO.setLeader(connection, uuid, id); +// } catch (SQLException e) { +// e.printStackTrace(); +// } +// }); +// } +// +// public boolean isLeader(UUID uuid) { +// return Objects.equals(uuid, this.leader); +// } +// +// public void setLeader(UUID uuid, String name) { +// this.leader = uuid; +// this.leaderName = name; +// Player player = Bukkit.getPlayer(uuid); +// if (player != null) { +// GTMUser user = GTM.getUserManager().getLoadedUser(uuid); +// user.setGangRole("leader"); +// this.hasMaxMembers(player, Core.getUserManager().getLoadedUser(uuid), user); +// } +// +//// Core.sql.updateAsyncLater("update " + Core.name() + "_gangs set leader='" + uuid + "',leaderName='" + name + "',maxMembers=" + this.maxMembers + " where name='" + this.name + "';"); +// +//// ServerUtil.runTaskAsync(() -> BaseDatabase.runCustomQuery("update " + Core.name() + "_gangs set leader='" + uuid + "',leaderName='" + name + "',maxMembers=" + this.maxMembers + " where name='" + this.name + "';")); +// ServerUtil.runTaskAsync(() -> { +// try (Connection connection = BaseDatabase.getInstance().getConnection()) { +// GangDAO.setLeader(connection, uuid, id); +// } catch (SQLException e) { +// e.printStackTrace(); +// } +// }); +// } +// +// public String getLeaderName() { +// return this.leaderName; +// } +// +// public void setLeaderName(String name) { +// this.leaderName = name; +//// Core.sql.updateAsyncLater("update " + Core.name() + "_gangs set leaderName='" + name + "' where name='" + this.name + "';"); +// ServerUtil.runTaskAsync(() -> BaseDatabase.runCustomQuery("update " + Core.name() + "_gangs set leaderName='" + name + "' where name='" + this.name + "';")); +// } +// +// public boolean isLeader(String name) { +// return this.leaderName.equalsIgnoreCase(name); +// } +// +// public int getMaxMembers() { +// Player player = Bukkit.getPlayer(this.leader); +// if (player == null) +// return this.maxMembers; +// return GTM.getUserManager().getLoadedUser(this.leader).getMaxGangMembers(player, +// Core.getUserManager().getLoadedUser(this.leader)); +// } +// +// public boolean hasMaxMembers() { +// Player player = Bukkit.getPlayer(this.leader); +// if (player == null) +// return this.maxMembers <= this.gangMembers.size(); +// return this.hasMaxMembers(player, Core.getUserManager().getLoadedUser(this.leader), +// GTM.getUserManager().getLoadedUser(this.leader)); +// } +// +// public boolean hasMaxMembers(Player leader, User user, GTMUser gtmUser) { +// this.maxMembers = gtmUser.getMaxGangMembers(leader, user); +// return this.maxMembers <= this.gangMembers.size(); +// } +// +// public void updateMaxMembers(Player leader, User user, GTMUser gtmUser) { +// this.maxMembers = gtmUser.getMaxGangMembers(leader, user); +//// Core.sql.updateAsyncLater("update " + Core.name() + "_gangs set maxMembers=" + this.maxMembers + " where name='" + this.name + "';"); +// ServerUtil.runTaskAsync(() -> BaseDatabase.runCustomQuery("update " + Core.name() + "_gangs set maxMembers=" + this.maxMembers + " where name='" + this.name + "';")); +// } +// +// public List<GangMember> getGangMembers() { +// return this.gangMembers; +// } +// +// public int getOnlineMembers() { +// return (int) Bukkit.getOnlinePlayers().stream().filter(player -> this.isMember(player.getUniqueId()) || this.isLeader(player.getUniqueId())).count(); +// } +// +// public GangMember getMember(UUID uuid) { +// return this.gangMembers.stream().filter(m -> Objects.equals(m.getUUID(), uuid)).findFirst().orElse(null); +// } +// +// public GangMember getMember(String name) { +// return this.gangMembers.stream().filter(m -> Objects.equals(m.getName(), name)).findFirst().orElse(null); +// } +// +// public boolean isMember(UUID uuid) { +// return this.getMember(uuid) != null; +// } +// +// public boolean isMember(String name) { +// return this.getMember(name) != null; +// } +// +// public boolean isColeader(UUID uuid) { +// GangMember m = this.getMember(uuid); +// return m != null && m.isColeader(); +// } +// +// public Map<String, String> getRelations() { +// return this.relations; +// } +// +// public String getRelation(String name) { +// return this.relations.get(name); +// } +// +// public boolean hasRelation(String name) { +// return this.getRelation(name) != null; +// } +// +// public boolean isAllied(String name) { +// String rel = this.getRelation(name); +// return Objects.equals("ally", rel); +// } +// +// public boolean isEnemy(String name) { +// String rel = this.getRelation(name); +// return Objects.equals("enemy", rel); +// } +// +// public boolean isNeutral(String name) { +// String rel = this.getRelation(name); +// return rel == null; +// } +// +// public void addRelation(String name, String relation) { +// this.relations.put(name, relation); +// } +// +// public void removeRelation(String name) { +// this.relations.remove(name); +// } +// +// public void addRelationRequest(String name, String relation) { +// this.relationRequests.put(name, relation); +// } +// +// public void unload(UUID uuid) { +// if (!Objects.equals(this.leader, uuid) && Bukkit.getPlayer(this.leader) != null) return; +// for (GangMember member : this.gangMembers) { +// if (!Objects.equals(member.getUUID(), uuid) && Bukkit.getPlayer(member.getUUID()) != null) +// return; +// } +// GTM.getGangManager().unloadGang(this.name); +// +// } +// +// public void disband(Player sender) { +// if (!this.isLeader(sender.getUniqueId())) { +// sender.sendMessage(Lang.GANGS.f("&7You are not the leader of this gang!")); +// return; +// } +// sender.sendMessage(Lang.GANGS.f( +// "&7Are you sure you want to disband this gang? It will remove all members and delete it forever. Type \"&a/gang disband confirm\"&7 to disband your gang!")); +// } +// +// public void disbandConfirm(Player sender, User user, GTMUser gtmUser) { +// if (!this.isLeader(sender.getUniqueId())) { +// sender.sendMessage(Lang.GANGS.f("&7You are not the leader of this gang!")); +// return; +// } +// +//// Core.sql.updateAsyncLater("delete from " + Core.name() + "_gangs where name='" + this.name + "';"); +//// Core.sql.updateAsyncLater("delete from " + Core.name() + "_gangs_relations where gang1='" + this.name + "' or gang2='" + this.name + "';"); +//// Core.sql.updateAsyncLater("update " + Core.name() + " set gang=null,gangRank='member' where gang='" + this.name + "';"); +// ServerUtil.runTaskAsync(() -> { +// BaseDatabase.runCustomQuery("delete from " + Core.name() + "_gangs where name='" + this.name + "';"); +// BaseDatabase.runCustomQuery("delete from " + Core.name() + "_gangs_relations where gang1='" + this.name + "' or gang2='" + this.name + "';"); +// BaseDatabase.runCustomQuery("update " + Core.name() + " set gang=null,gangRank='member' where gang='" + this.name + "';"); +// }); +// +// sender.sendMessage(Lang.GANGS.f("&7You disbanded the gang &a" + this.name + "&7!")); +// gtmUser.setGangName(null); +// for (Player player : Bukkit.getOnlinePlayers()) +// if (this.isMember(player.getUniqueId())) { +// GTMUser u = GTM.getUserManager().getLoadedUser(player.getUniqueId()); +// u.setGangName(null); +// player.sendMessage( +// Lang.GANGS.f("&7" + user.getColoredName(sender) + "&7 disbanded your gang &a" + this.name + "&7!")); +// } else if (!this.isLeader(player.getUniqueId())) +// player.sendMessage( +// Lang.GANGS.f("&7" + user.getColoredName(sender) + "&7 disbanded the gang &a" + this.name + "&7!")); +// this.relations.keySet().stream().filter(gang -> GTM.getGangManager().isLoaded(gang)).forEach(gang -> GTM.getGangManager().getLoadedGang(gang).removeRelation(this.name)); +// GTM.getGangManager().unloadGang(this.name); +// } +// +// public void setLeader(Player sender, User user, GTMUser gtmUser, Player target) { +// if (!this.isLeader(sender.getUniqueId())) { +// sender.sendMessage(Lang.GANGS.f("&7You are not the leader of this gang!")); +// return; +// } +// +// if (target == null) { +// sender.sendMessage(Lang.GANGS.f("&7That player is not online!")); +// return; +// } +// +// if (!this.isMember(target.getUniqueId())) { +// sender.sendMessage(Lang.GANGS.f("&7That player is not a member of this gang!")); +// return; +// } +// +// User targetUser = Core.getUserManager().getLoadedUser(target.getUniqueId()); +// GTMUser targetGtmUser = GTM.getUserManager().getLoadedUser(target.getUniqueId()); +// if (!targetGtmUser.canLeadGang(targetUser)) { +// sender.sendMessage(Lang.GANGS.f("&7You must be a &e&l" + GTMRank.GANGSTER.getColoredNameBold() + "&7 to create a gang! Check the &d&lMy Account&7 -> &a&lRanks&7 menu on your phone for more information.")); +// return; +// } +// +// targetGtmUser.setGang(this.name, "leader"); +// gtmUser.setGangRole("coleader"); +// this.setLeader(target.getUniqueId(), target.getName()); +// this.gangMembers.stream().filter(member -> Objects.equals(member.getUUID(), target.getUniqueId())).findFirst().ifPresent(member -> this.gangMembers.remove(member)); +// sender.sendMessage(Lang.GANGS.f("&7You promoted " + targetUser.getColoredName(target) + "&7 to the leader of your gang! You are now a co-leader!")); +// target.sendMessage(Lang.GANGS.f("&7" + user.getColoredName(sender) + "&7 promoted you to leader of your gang!")); +// Bukkit.getOnlinePlayers().stream().filter(player -> this.isMember(player.getUniqueId())).forEach(player -> player.sendMessage(Lang.GANGS.f("&7" + user.getColoredName(sender) + "&7 promoted " +// + targetUser.getColoredName(target) + "&7 to the leader of your gang!"))); +// this.gangMembers.add(new GangMember(sender.getUniqueId(), sender.getName(), "coleader")); +// } +// +// public void promote(Player sender, User user, GTMUser gtmUser, String targetName) { +// if (!this.isLeader(sender.getUniqueId())) { +// sender.sendMessage(Lang.GANGS.f("&7You are not the leader of this gang!")); +// return; +// } +// GangMember member = this.getMember(targetName); +// if (member == null) { +// sender.sendMessage(Lang.GANGS.f("&7That player is not a member of this gang!")); +// return; +// } +// if (member.isColeader()) { +// sender.sendMessage(Lang.GANGS.f("&7That player is already a coleader of this gang!")); +// return; +// } +// Player target = Bukkit.getPlayer(member.getUUID()); +// String n = member.getName(); +// if (target == null) { +//// Core.sql.updateAsyncLater("update " + Core.name() + " set gangRank='coleader' where gang='" + this.name + "' and uuid='" + member.getUUID() + "';"); +// ServerUtil.runTaskAsync(() -> BaseDatabase.runCustomQuery("update " + Core.name() + " set gangRank='coleader' where gang='" + this.name + "' and uuid='" + member.getUUID() + "';")); +// } +// else { +// User targetUser = Core.getUserManager().getLoadedUser(target.getUniqueId()); +// GTMUser targetGtmUser = GTM.getUserManager().getLoadedUser(target.getUniqueId()); +// n = targetUser.getColoredName(target); +// targetGtmUser.setGangRole("coleader"); +// target.sendMessage(Lang.GANGS.f("&7" + user.getColoredName(sender) + "&7 promoted you to coleader of your gang!")); +// } +// member.setRank(GangRole.CO_LEADER); +// for (Player player : Bukkit.getOnlinePlayers()) +// if (this.isMember(player.getUniqueId()) && !Objects.equals(player, target) && !Objects.equals(player, sender)) +// player.sendMessage(Lang.GANGS +// .f("&7" + user.getColoredName(sender) + "&7 promoted " + n + "&7 to coleader of your gang!")); +// sender.sendMessage(Lang.GANGS.f("&7You promoted " + n + "&7 to coleader of your gang!")); +// } +// +// public void demote(Player sender, User user, GTMUser gtmUser, String targetName) { +// if (!this.isLeader(sender.getUniqueId())) { +// sender.sendMessage(Lang.GANGS.f("&7You are not the leader of this gang!")); +// return; +// } +// GangMember member = this.getMember(targetName); +// if (member == null) { +// sender.sendMessage(Lang.GANGS.f("&7That player is not a member of this gang!")); +// return; +// } +// if (!member.isColeader()) { +// sender.sendMessage(Lang.GANGS.f("&7That player is not a coleader of this gang!")); +// return; +// } +// Player target = Bukkit.getPlayer(member.getUUID()); +// String n = member.getName(); +// if (target == null) { +//// Core.sql.updateAsyncLater("update " + Core.name() + " set gangRank='member' where gang='" + this.name + "' and uuid='" + member.getUUID() + "';"); +// ServerUtil.runTaskAsync(() -> BaseDatabase.runCustomQuery("update " + Core.name() + " set gangRank='member' where gang='" + this.name + "' and uuid='" + member.getUUID() + "';")); +// } +// else { +// User targetUser = Core.getUserManager().getLoadedUser(target.getUniqueId()); +// GTMUser targetGtmUser = GTM.getUserManager().getLoadedUser(target.getUniqueId()); +// n = targetUser.getColoredName(target); +// targetGtmUser.setGangRole("member"); +// target.sendMessage( +// Lang.GANGS.f("&7" + user.getColoredName(sender) + "&7 demoted you to member of your gang!")); +// } +// member.setRank(GangRole.MEMBER); +// for (Player player : Bukkit.getOnlinePlayers()) +// if (this.isMember(player.getUniqueId()) && !Objects.equals(player, target) && !Objects.equals(player, sender)) +// player.sendMessage(Lang.GANGS +// .f("&7" + user.getColoredName(sender) + "&7 demoted " + n + "&7 to member of your gang!")); +// sender.sendMessage(Lang.GANGS.f("&7You demoted " + n + "&7 to member of your gang!")); +// +// } +// +// public void ally(Player sender, User user, GTMUser gtmUser, String gang) { +// if (!this.isLeader(sender.getUniqueId()) && !this.isColeader(sender.getUniqueId())) { +// sender.sendMessage(Lang.GANGS.f("&7You are not the (co-)leader of this gang!")); +// return; +// } +// Gang g = GTM.getGangManager().getLoadedGang(gang); +// if (g == null) { +// sender.sendMessage(Lang.GANGS.f("&7That gang does not exist or no one in that gang is online!")); +// return; +// } +// if (this.isAllied(g.name)) { +// sender.sendMessage(Lang.GANGS.f("&7That gang is allied to you already!")); +// sender.sendMessage(Lang.GANGS.f("&7Want to unally this gang? Use /g neutral")); +// return; +// } +// if (this.relationRequests.containsKey(g.name) && Objects.equals("ally", this.relationRequests.get(g.name))) { +// this.relations.put(g.name, "ally"); +// g.addRelation(this.name, "ally"); +// this.relationRequests.remove(g.name); +// +//// Core.sql.updateAsyncLater("delete from " + Core.name() + "_gangs_relations where (gang1='" + this.name + "' and gang2='" + g.name + "') or (gang1='" + g.name + "' and gang2='" + this.name + "');"); +//// Core.sql.updateAsyncLater("insert into " + Core.name() + "_gangs_relations(gang1,gang2,relation) values('" + this.name + "','" + g.name + "','ally');"); +// ServerUtil.runTaskAsync(() -> { +// BaseDatabase.runCustomQuery("delete from " + Core.name() + "_gangs_relations where (gang1='" + this.name + "' and gang2='" + g.name + "') or (gang1='" + g.name + "' and gang2='" + this.name + "');"); +// BaseDatabase.runCustomQuery("insert into " + Core.name() + "_gangs_relations(gang1,gang2,relation) values('" + this.name + "','" + g.name + "','ally');"); +// }); +// +// for (Player player : Bukkit.getOnlinePlayers()) +// if (g.isMember(player.getUniqueId()) || g.isLeader(player.getUniqueId())) +// player.sendMessage(Lang.GANGS.f("&7Your gang is now allied to &a" + this.name + "&7!")); +// else if (this.isMember(player.getUniqueId()) || this.isLeader(player.getUniqueId()) && !Objects.equals(player, sender)) { +// player.sendMessage(Lang.GANGS.f("&7Your gang is now allied to &a" + g.name + "&7!")); +// } +// sender.sendMessage(Lang.GANGS.f("&7You accepted the ally request from gang &a" + g.name + "&7!")); +// } +// g.addRelationRequest(this.name, "ally"); +// for (Player player : Bukkit.getOnlinePlayers()) +// if (g.isMember(player.getUniqueId()) || g.isLeader(player.getUniqueId())) +// player.sendMessage(Lang.GANGS.f("&7" + user.getColoredName(sender) + "&7 from gang &a" + this.name +// + "&7 has requested to be allied to your gang!")); +// else if (this.isMember(player.getUniqueId()) || this.isLeader(player.getUniqueId()) && !Objects.equals(player, sender)) { +// player.sendMessage(Lang.GANGS.f("&7" + user.getColoredName(sender) +// + "&7 has requested to be allied to &a" + g.name + "&7!")); +// } +// sender.sendMessage(Lang.GANGS.f("&7You sent an ally request to gang &a" + g.name + "&7!")); +// } +// +// public void neutral(Player sender, User user, GTMUser gtmUser, String gang) { +// if (!this.isLeader(sender.getUniqueId()) && !this.isColeader(sender.getUniqueId())) { +// sender.sendMessage(Lang.GANGS.f("&7You are not the leader of this gang!")); +// return; +// } +// Gang g = GTM.getGangManager().getLoadedGang(gang); +// if (g == null) { +// sender.sendMessage(Lang.GANGS.f("&7That gang does not exist or no one in that gang is online!")); +// return; +// } +// if (this.isNeutral(g.name)) { +// sender.sendMessage(Lang.GANGS.f("&7That gang is neutral to you already!")); +// return; +// } +// if (this.relationRequests.containsKey(g.name) && Objects.equals("neutral", this.relationRequests.get(g.name))) { +// this.relations.put(g.name, "neutral"); +// g.addRelation(this.name, "neutral"); +// this.relationRequests.remove(g.name); +// +//// Core.sql.updateAsyncLater("delete from " + Core.name() + "_gangs_relations where (gang1='" + this.name + "' and gang2='" + g.name + "') or (gang1='" + g.name + "' and gang2='" + this.name + "');"); +// ServerUtil.runTaskAsync(() -> BaseDatabase.runCustomQuery("delete from " + Core.name() + "_gangs_relations where (gang1='" + this.name + "' and gang2='" + g.name + "') or (gang1='" + g.name + "' and gang2='" + this.name + "');")); +// +// for (Player player : Bukkit.getOnlinePlayers()) +// if (g.isMember(player.getUniqueId()) || g.isLeader(player.getUniqueId())) +// player.sendMessage(Lang.GANGS.f("&7Your gang is now neutral to &a" + this.name + "&7!")); +// else if (this.isMember(player.getUniqueId()) || this.isLeader(player.getUniqueId()) && !Objects.equals(player, sender)) +// player.sendMessage(Lang.GANGS.f("&7Your gang is now neutral to &a" + g.name + "&7!")); +// sender.sendMessage(Lang.GANGS.f("&7You accepted the neutral request from gang &a" + g.name + "&7!")); +// } +// g.addRelationRequest(this.name, "neutral"); +// for (Player player : Bukkit.getOnlinePlayers()) +// if (g.isMember(player.getUniqueId()) || g.isLeader(player.getUniqueId())) +// player.sendMessage(Lang.GANGS.f("&7" + user.getColoredName(sender) + "&7 from gang &a" + this.name +// + "&7 has requested to be neutral to your gang!")); +// else if (this.isMember(player.getUniqueId()) || this.isLeader(player.getUniqueId()) && !Objects.equals(player, sender)) +// player.sendMessage(Lang.GANGS.f("&7" + user.getColoredName(sender) +// + "&7 has requested to be neutral to &a" + g.name + "&7!")); +// sender.sendMessage(Lang.GANGS.f("&7You sent a neutral request to gang &a" + g.name + "&7!")); +// } +// +// public void enemy(Player sender, User user, GTMUser gtmUser, String gang) { +// if (!this.isLeader(sender.getUniqueId()) && !this.isColeader(sender.getUniqueId())) { +// sender.sendMessage(Lang.GANGS.f("&7You are not the leader of this gang!")); +// return; +// } +// Gang g = GTM.getGangManager().getLoadedGang(gang); +// if (g == null) { +// sender.sendMessage(Lang.GANGS.f("&7That gang does not exist or no one in that gang is online!")); +// return; +// } +// if (this.isEnemy(g.name)) { +// sender.sendMessage(Lang.GANGS.f("&7That gang is an enemy to you already!")); +// sender.sendMessage(Lang.GANGS.f("&7Want to unenemy this gang? Use /g neutral")); +// return; +// } +// this.relations.put(g.name, "enemy"); +// g.addRelation(this.name, "enemy"); +// this.relationRequests.remove(g.name); +// +//// Core.sql.updateAsyncLater("delete from " + Core.name() + "_gangs_relations where (gang1='" + this.name + "' and gang2='" + g.name + "') or (gang1='" + g.name + "' and gang2='" + this.name + "');"); +//// Core.sql.updateAsyncLater("insert into " + Core.name() + "_gangs_relations(gang1,gang2,relation) values('" + this.name + "','" + g.name + "','enemy');"); +// ServerUtil.runTaskAsync(() -> { +// BaseDatabase.runCustomQuery("delete from " + Core.name() + "_gangs_relations where (gang1='" + this.name + "' and gang2='" + g.name + "') or (gang1='" + g.name + "' and gang2='" + this.name + "');"); +// BaseDatabase.runCustomQuery("insert into " + Core.name() + "_gangs_relations(gang1,gang2,relation) values('" + this.name + "','" + g.name + "','enemy');"); +// }); +// +// for (Player player : Bukkit.getOnlinePlayers()) +// if (g.isMember(player.getUniqueId()) || g.isLeader(player.getUniqueId())) +// player.sendMessage(Lang.GANGS.f("&7Your gang is now an enemy to gang &a" + this.name + "&7!")); +// else if (this.isMember(player.getUniqueId()) || this.isLeader(player.getUniqueId())) +// player.sendMessage(Lang.GANGS.f("&7Your gang is now an enemy to gang &a" + g.name + "&7!")); +// } +// +// public void invite(Player sender, User user, GTMUser gtmUser, Player target) { +// if (!this.isLeader(sender.getUniqueId()) && !this.isColeader(sender.getUniqueId())) { +// sender.sendMessage(Lang.GANGS.f("&7You are not the leader of this gang!")); +// return; +// } +// if (target == null) { +// sender.sendMessage(Lang.GANGS.f("&7That player is not online!")); +// return; +// } +// if (Objects.equals(sender, target)) { +// sender.sendMessage(Lang.GANGS.f("&7You can't invite yourself!")); +// return; +// } +// if (this.isMember(target.getUniqueId())) { +// sender.sendMessage(Lang.GANGS.f("&7That player is already in your gang!")); +// return; +// } +// if (this.hasMaxMembers()) { +// sender.sendMessage(Lang.GANGS.f( +// "&7Your gang is full! Rank up or buy a rank at &astore.grandtheftmc.net&7 for more gang members!")); +// return; +// } +// User targetUser = Core.getUserManager().getLoadedUser(target.getUniqueId()); +// GTMUser targetGtmUser = GTM.getUserManager().getLoadedUser(target.getUniqueId()); +// if (!targetGtmUser.canJoinGang(targetUser)) { +// sender.sendMessage(Lang.GANGS.f("&7That player can not join a gang because he is not a &e&lHOMIE&7 yet!")); +// target.sendMessage(Lang.GANGS.f("&7" + user.getColoredName(sender) + "&7 tried to invite you to gang &a" + this.name + "&7, but you need to be &a &e&lHOMIE&7 or &6&lVIP&7 to join a gang!")); +// return; +// } +// targetGtmUser.addGangInvite(this.name); +// sender.sendMessage(Lang.GANGS.f("&7You invited " + targetUser.getColoredName(target) + "&7 to your gang!")); +// target.sendMessage(Lang.GANGS.f("&7" + user.getColoredName(sender) + "&7 invited you to gang &a" + this.name +// + "&7! Use &a\"/g join " + this.name + "\"&7 to join the gang!")); +// this.sendToAllExcept(sender, Lang.GANGS.f("&7" + user.getColoredName(sender) + "&7 invited " +// + targetUser.getColoredName(target) + "&7 to your gang!")); +// } +// +// public void accept(Player sender, User user, GTMUser gtmUser) { +// if (!gtmUser.canJoinGang(user)) { +// sender.sendMessage(Lang.GANGS.f("You must be " + GTMRank.HOMIE.getColoredNameBold() + "&7 or &6&lVIP&7 to join a gang! Check the &d&lMy Account&7 -> &a&lRanks&7 menu on your phone for more information.")); +// return; +// } +// if (this.isMember(sender.getUniqueId()) || this.isLeader(sender.getUniqueId())) { +// sender.sendMessage(Lang.GANGS.f("&7You are a member of this gang already!")); +// return; +// } +// if (!gtmUser.isInvited(this.name)) { +// sender.sendMessage(Lang.GANGS.f("&7You have not been invited to this gang!")); +// return; +// } +// if (this.hasMaxMembers()) { +// sender.sendMessage(Lang.GANGS.f("&7This gang is full!")); +// return; +// } +// sender.sendMessage(Lang.GANGS.f("&7You joined the gang &a" + this.name + "&7!")); +// gtmUser.setGang(this.name); +// gtmUser.removeGangInvite(this.name); +// this.sendToAll(Lang.GANGS.f("&7" + user.getColoredName(sender) + "&7 joined your gang!")); +// this.gangMembers.add(new GangMember(sender.getUniqueId(), sender.getName(), "member")); +// } +// +// public void kick(Player sender, User user, GTMUser gtmUser, String target) { +// if (!this.isLeader(sender.getUniqueId()) && !this.isColeader(sender.getUniqueId())) { +// sender.sendMessage(Lang.GANGS.f("&7You are not the leader of this gang!")); +// return; +// } +// if (sender.getName().equalsIgnoreCase(target)) { +// sender.sendMessage(Lang.GANGS.f("&7You can't kick yourself!")); +// return; +// } +// if (!this.isMember(target)) { +// sender.sendMessage(Lang.GANGS.f("&7That player is not in your gang!")); +// return; +// } +// GangMember member = this.getMember(target); +// this.gangMembers.remove(member); +// Player player = Bukkit.getPlayer(target); +// String name = target; +// if (player == null) { +//// Core.sql.updateAsyncLater("update " + Core.name() + " set gang=null, gangRank='member' where name='" + name + "';"); +// String finalName = name; +// ServerUtil.runTaskAsync(() -> BaseDatabase.runCustomQuery("update " + Core.name() + " set gang=null, gangRank='member' where name='" + finalName + "';")); +// } +// else { +// name = Core.getUserManager().getLoadedUser(player.getUniqueId()).getColoredName(player); +// GTMUser targetGtmUser = GTM.getUserManager().getLoadedUser(player.getUniqueId()); +// targetGtmUser.resetGang(); +// player.sendMessage(Lang.GANGS.f("&7" + user.getColoredName(sender) + "&7 kicked you from the gang!")); +// } +// this.sendToAllExcept(sender, Lang.GANGS +// .f("&7" + user.getColoredName(sender) + "&7 kicked &a" + name + "&7 from your gang!")); +// sender.sendMessage(Lang.GANGS.f("&7You kicked &a" + name + "&7 from the gang!")); +// } +// +// public void leave(Player sender, User user, GTMUser gtmUser) { +// if (this.isLeader(sender.getUniqueId())) { +// sender.sendMessage(Lang.GANGS.f( +// "&7You are the leader of your gang! Please use &a\"/f leader <player\"&7 before leaving the gang!")); +// return; +// } +// if (!this.isMember(sender.getUniqueId())) { +// sender.sendMessage(Lang.GANGS.f("&7You are not a member of this gang!")); +// return; +// } +// GangMember member = this.getMember(sender.getUniqueId()); +// this.gangMembers.remove(member); +// gtmUser.resetGang(); +// sender.sendMessage(Lang.GANGS.f("&7You left the gang &a" + this.name + "&7!")); +// this.sendToAll(Lang.GANGS.f("&7" + user.getColoredName(sender) + "&7 left the gang!")); +// } +// +// public void info(Player sender, User user, GTMUser gtmUser) { +// sender.sendMessage(Utils.f(" &7&m---------------&7[&a&l " + this.name + " &7]&m---------------")); +// sender.sendMessage(Utils.f("&a&lDescription: &7" + this.description)); +// int allies = 0; +// int enemies = 0; +// String a = ""; +// String e = ""; +// for (Map.Entry<String, String> entry : this.relations.entrySet()) { +// String r = entry.getValue(); +// if (Objects.equals("ally", r)) { +// a = a + (allies > 0 ? "&7, " : "") + "&a" + entry.getKey(); +// allies++; +// } else if (Objects.equals("enemy", r)) { +// e = e + (enemies > 0 ? "&c, " : "") + "&c" + entry.getKey(); +// enemies++; +// } +// } +// int online = 0; +// int offline = 0; +// String on = ""; +// String off = ""; +// Player leader = Bukkit.getPlayer(this.leader); +// if (leader != null) { +// User u = Core.getUserManager().getLoadedUser(leader.getUniqueId()); +// on = on + (online > 0 ? "&7, " : "") + "&aLeader " + u.getColoredName(leader); +// online++; +// } +// for (GangMember member : this.gangMembers) { +// Player player = Bukkit.getPlayer(member.getUUID()); +// if (player == null) { +// off = off + (offline > 0 ? "&7, " : "") + "&a" + (member.isColeader() ? "Coleader" : "") + +// member.getName(); +// offline++; +// } else { +// User u = Core.getUserManager().getLoadedUser(member.getUUID()); +// on = on + (online > 0 ? "&7, " : "") + "&a" + (member.isColeader() ? "Coleader" : "") + +// (u.isSpecial() ? u.getColoredName(player) : player.getName()); +// online++; +// } +// } +// if (allies > 0) +// sender.sendMessage(Utils.f("&a&lAllies&7(&a" + allies + "&7)&a: &7" + a)); +// if (enemies > 0) +// sender.sendMessage(Utils.f("&c&lEnemies&7(&c" + enemies + "&7)&c: &7" + e)); +// sender.sendMessage(Utils.f("&a&lOnline Members&7(&a" + online + "&7)&a: &7" + on)); +// sender.sendMessage(Utils.f("&a&lOffline Members&7(&a" + offline + "&7)&a: &7" + off)); +// } +// +// public String list(Player sender, Gang gang) { +// int online = (int) this.gangMembers.stream().filter(member -> Bukkit.getPlayer(member.getUUID()) != null).count(); +// int total = this.gangMembers.size(); +// return (this.isAllied(gang.name) || this.equals(gang) ? "&a" : this.isEnemy(gang.name) ? "&c" : "&7") + "&l" + this.name + ": " + online + "&7/&a" + total + "&7 players online"; +// } +// +// public boolean hasUpdated() { +// return this.hasUpdated; +// } +// +// public void name(Player sender, User user, GTMUser gtmUser, String gangName) { +// UUID uuid = sender.getUniqueId(); +// if (!this.isLeader(sender.getUniqueId())) { +// sender.sendMessage(Lang.GANGS.f("&7You are not the leader of this gang!")); +// return; +// } +// if (!gangName.matches("^[a-zA-Z_0-9]+$")) { +// sender.sendMessage(Lang.GANGS.f("&7Only a-z, A-Z, 0-9 and _ are allowed in a gang name!")); +// return; +// } +// if (gangName.length() > 16 || gangName.length() < 3) { +// sender.sendMessage(Lang.GANGS.f("&7The name of your gang needs to be 3-16 characters long!")); +// return; +// } +// if (GTM.getGangManager().isLoaded(gangName)) { +// sender.sendMessage(Lang.GANGS.f("&7A gang with that name already exists!")); +// return; +// } +// new BukkitRunnable() { +// @Override +// public void run() { +// String s = null; +//// try { +//// ResultSet rs = Core.sql +//// .query("select name from " + Core.name() + "_gangs where name='" + gangName + "';"); +//// if (rs.next()) +//// s = rs.getString("name"); +//// rs.close(); +//// } catch (SQLException e) { +//// e.printStackTrace(); +//// return; +//// } +// try (Connection connection = BaseDatabase.getInstance().getConnection()) { +// try (PreparedStatement statement = connection.prepareStatement("select name from " + Core.name() + "_gangs where name='" + gangName + "';")) { +// try (ResultSet result = statement.executeQuery()) { +// if (result.next()) s = result.getString("name"); +// } +// } +// } catch (SQLException e) { +// e.printStackTrace(); +// return; +// } +// +// String name = s; +// new BukkitRunnable() { +// @Override +// public void run() { +// Player sender = Bukkit.getPlayer(uuid); +// if (sender == null) +// return; +// if (name != null) { +// sender.sendMessage(Lang.GANGS.f("&7A gang with that name already exists!")); +// return; +// } +// User user = Core.getUserManager().getLoadedUser(uuid); +// GTMUser gtmUser = GTM.getUserManager().getLoadedUser(uuid); +// Gang gang = gtmUser.getGang(); +// gang.setName(gangName); +// sender.sendMessage( +// Lang.GANGS.f("&7You changed the name of your gang to &a" + gangName + "&7!")); +// Gang.this.sendToAllExcept(sender, Lang.GANGS.f("&7" + user.getColoredName(sender) +// + "&7 changed the name of your gang to &a" + gangName + "&7!")); +// } +// }.runTask(GTM.getInstance()); +// } +// }.runTaskAsynchronously(GTM.getInstance()); +// } +// +// public void description(Player sender, User user, GTMUser gtmUser, String description) { +// if (!this.isLeader(sender.getUniqueId()) && !this.isColeader(sender.getUniqueId())) { +// sender.sendMessage(Lang.GANGS.f("&7You are not the (co-)leader of this gang!")); +// return; +// } +// if (description.length() > 64 || description.length() < 3) { +// sender.sendMessage(Lang.GANGS.f("&7The description must be between 3-64 characters long!")); +// return; +// } +// this.setDescription(description); +// sender.sendMessage(Lang.GANGS.f("&7You changed the description of your gang to &a" + description + "&7!")); +// this.sendToAllExcept(sender, Lang.GANGS.f("&7" + user.getColoredName(sender) +// + "&7 changed the description of your gang to &a" + description + "&7!")); +// } +// +// public void chat(Player player, User user, GTMUser gtmUser, String msg) { +// Bukkit.getOnlinePlayers().stream().filter(p -> this.isMember(p.getUniqueId()) || this.isLeader(p.getUniqueId())).forEach(p -> p.sendMessage(Lang.GANGCHAT.f("&7[&a&l" + user.getColoredName(player) + "&7] &r") + Utils.fColor(msg))); +// Core.getUserManager().getLoadedUsers().stream().filter(u -> (Boolean)u.getPref(Pref.SOCIALSPY)).forEach(u -> { +// if(u != null && u.getUUID() != null) { +// Player p = Bukkit.getPlayer(u.getUUID()); +// if(p != null) p.sendMessage(Lang.SS.f("&r" + player.getName() + ": /gc " + msg)); +// } +// }); +// } +// +// public void sendToAll(String msg) { +// Bukkit.getOnlinePlayers().stream().filter(p -> this.isMember(p.getUniqueId()) || this.isLeader(p.getUniqueId())).forEach(p -> p.sendMessage(Utils.f(msg))); +// } +// +// public void sendToAllExcept(Player player, String msg) { +// Bukkit.getOnlinePlayers().stream().filter(p -> (this.isMember(p.getUniqueId()) || this.isLeader(p.getUniqueId())) && !Objects.equals(p, player)).forEach(p -> p.sendMessage(Utils.f(msg))); +// } +// +// public int getUniqueId() { +// return this.id; +// } +// +// protected void setUniqueId(int identifier) { +// this.id = identifier; +// } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/gangs/GangManager.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/gangs/GangManager.java new file mode 100644 index 0000000..7fc4a92 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/gangs/GangManager.java @@ -0,0 +1,71 @@ +package net.grandtheftmc.gtm.gangs; + +public class GangManager { +// private final Map<Integer, Gang> mappedGangs = new HashMap<>(); +// +// public static Map<Gang, Integer> sort(Map<Gang, Integer> unsortMap) { +// List<Map.Entry<Gang, Integer>> list = new LinkedList<>(unsortMap.entrySet()); +// list.sort(Comparator.comparing(Map.Entry::getValue)); +// Map<Gang, Integer> sortedMap = new LinkedHashMap<>(); +// for (Map.Entry<Gang, Integer> entry : list) { +// sortedMap.put(entry.getKey(), entry.getValue()); +// } +// return sortedMap; +// } +// +// public Collection<Gang> getLoadedGangs() { +// return mappedGangs.values(); +// } +// +// public boolean unloadGang(int id) { +// return mappedGangs.remove(id) != null; +// } +// +// public boolean isLoaded(int id) { +// return mappedGangs.containsKey(id); +// } +// +// public Gang getAlreadyLoadedGang(int id) { +// return mappedGangs.get(id); +// } +// +// public Gang getLoadedGang(int id) { +// Gang gang = mappedGangs.get(id); +// +// if (gang == null) { +// gang = new Gang(id); +// mappedGangs.put(id, gang); +// } +// +// return gang; +// } +// +// public void addLoadedGang(Gang gang) { +// mappedGangs.put(gang.getUniqueId(), gang); +// } +// +// public Set<Gang> getGangsByOnlineMembers() { +// Map<Gang, Integer> unsortMap = new HashMap<>(); +// for (Gang g : this.getLoadedGangs()) { +// unsortMap.put(g, g.getOnlineMembers()); +// } +// return sort(unsortMap).keySet(); +// } +// +// public boolean isValid(String gangName) { +// boolean b = false; +// +// try (Connection connection = BaseDatabase.getInstance().getConnection()) { +// try (PreparedStatement statement = connection.prepareStatement("select * from " + Core.name() + "_gangs where name='" + gangName + "';")) { +// try (ResultSet result = statement.executeQuery()) { +// b = result.next(); +// } +// } +// } catch (SQLException e) { +// e.printStackTrace(); +// } +// +// return b; +// } + +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/gangs/GangMember.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/gangs/GangMember.java new file mode 100644 index 0000000..72c4679 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/gangs/GangMember.java @@ -0,0 +1,53 @@ +package net.grandtheftmc.gtm.gangs; + +import net.grandtheftmc.gtm.gang.member.GangRole; +import org.bukkit.Bukkit; + +import java.util.UUID; + +public class GangMember { + + private final UUID uuid; + private final String name; + private GangRole rank; + + public GangMember(UUID uuid, String name, GangRole rank) { + this.uuid = uuid; + this.name = name; + this.rank = rank; + } + + public UUID getUUID() { + return this.uuid; + } + + public String getName() { + return this.name; + } + + public GangRole getRank() { + return this.rank; + } + + public void setRank(GangRole rank) { + this.rank = rank; + } + + public boolean isColeader() { +// return Objects.equals("coleader", this.rank); + return this.rank == GangRole.CO_LEADER; + } + + public boolean isMember() { +// return Objects.equals("member", this.rank); + return this.rank == GangRole.MEMBER; + } + + public String getFormattedRank() { + return rank.getFormattedTag(); + } + + public boolean isOnline() { + return Bukkit.getPlayer(this.uuid) != null; + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/holidays/Holiday.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/holidays/Holiday.java new file mode 100644 index 0000000..28ae51d --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/holidays/Holiday.java @@ -0,0 +1,6 @@ +package net.grandtheftmc.gtm.holidays; + +public abstract class Holiday { + + public abstract boolean isActive(); +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/holidays/HolidayManager.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/holidays/HolidayManager.java new file mode 100644 index 0000000..4e23f9e --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/holidays/HolidayManager.java @@ -0,0 +1,24 @@ +package net.grandtheftmc.gtm.holidays; + +import net.grandtheftmc.gtm.holidays.easter.Easter; +import net.grandtheftmc.gtm.holidays.independenceday.IndependenceDay; + +public class HolidayManager { + private Easter easter; + private IndependenceDay independenceDay; + + public HolidayManager() { + this.easter = new Easter(); + this.independenceDay = new IndependenceDay(); + } + + public Easter getEaster() { + if (this.easter == null) this.easter = new Easter(); + return this.easter; + } + + public IndependenceDay getIndependenceDay() { + if (this.independenceDay == null) this.independenceDay = new IndependenceDay(); + return this.independenceDay; + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/holidays/easter/Easter.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/holidays/easter/Easter.java new file mode 100644 index 0000000..16540d4 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/holidays/easter/Easter.java @@ -0,0 +1,82 @@ +package net.grandtheftmc.gtm.holidays.easter; + +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.gtm.GTMUtils; +import net.grandtheftmc.gtm.holidays.Holiday; +import org.bukkit.Chunk; +import org.bukkit.Material; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Item; +import org.bukkit.entity.Rabbit; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import java.time.Month; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Optional; + +public class Easter extends Holiday { + private EasterTask easterTask; + + public Easter() { + new EasterListener(this); + if (this.isActive()) { + if (this.easterTask == null) this.easterTask = new EasterTask(this); + } + } + + public boolean isActive() { +// return GTMUtils.getMonth() == Month.APRIL && GTMUtils.getDay() == 15 +// || GTMUtils.getDay() == 16 || GTMUtils.getDay() == 17; + return false; + } + + public Optional<EasterTask> getEasterTask() { + return Optional.ofNullable(this.easterTask); + } + + public ItemStack getEasterEgg() { + ItemStack easterEgg = new ItemStack(Material.EGG); + ItemMeta meta = easterEgg.getItemMeta(); + meta.setDisplayName(Utils.f(GTMUtils.randomColor() + "&lEaster Egg")); + easterEgg.setItemMeta(meta); + return easterEgg; + } + + public ItemStack getChocolateBunny() { + ItemStack chocolateBunny = new ItemStack(Material.COOKED_RABBIT); + ItemMeta meta = chocolateBunny.getItemMeta(); + meta.setDisplayName(Utils.f(GTMUtils.randomColor() + "&lChocolate")); + chocolateBunny.setItemMeta(meta); + return chocolateBunny; + } + + public Rabbit.Type[] getAllowedTypes() { + Rabbit.Type[] allowed = {Rabbit.Type.BLACK, Rabbit.Type.BLACK_AND_WHITE, + Rabbit.Type.GOLD, Rabbit.Type.WHITE}; + return allowed; + } + + public Collection<Rabbit> getRabbitsByChunk(Chunk chunk) { + Collection<Rabbit> rabbits = new ArrayList<>(); + if (chunk == null || !chunk.isLoaded()) return rabbits; + for (Entity entity : chunk.getEntities()) { + if (entity.getType() != EntityType.RABBIT) continue; + rabbits.add((Rabbit) entity); + } + return rabbits; + } + + public Collection<Item> getItemsByChunk(Chunk chunk) { + Collection<Item> items = new ArrayList<>(); + if (chunk == null || !chunk.isLoaded()) return items; + for (Entity entity : chunk.getEntities()) { + if (entity.getType() != EntityType.DROPPED_ITEM) continue; + items.add((Item) entity); + } + return items; + } + +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/holidays/easter/EasterListener.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/holidays/easter/EasterListener.java new file mode 100644 index 0000000..de24623 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/holidays/easter/EasterListener.java @@ -0,0 +1,79 @@ +package net.grandtheftmc.gtm.holidays.easter; + +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.GTMUtils; +import org.bukkit.Bukkit; +import org.bukkit.Effect; +import org.bukkit.Sound; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.entity.Rabbit; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityDeathEvent; +import org.bukkit.event.entity.EntitySpawnEvent; +import org.bukkit.event.player.PlayerEggThrowEvent; +import org.bukkit.event.player.PlayerItemConsumeEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; + +import java.util.concurrent.ThreadLocalRandom; + +public class EasterListener implements Listener { + private Easter easter; + + public EasterListener(Easter easter) { + this.easter = easter; + + if (!easter.isActive()) return; + Bukkit.getPluginManager().registerEvents(this, GTM.getInstance()); + } + + @EventHandler + public void playerEggThrow(PlayerEggThrowEvent event) { + Player player = event.getPlayer(); + if (event.isHatching()) { + if (easter.isActive()) event.setHatchingType(EntityType.RABBIT); + if (player.getWorld().getName().equalsIgnoreCase("spawn") || !easter.isActive()) event.setHatching(false); + if (easter.getRabbitsByChunk(player.getLocation().getChunk()).size() > 50) event.setHatching(false); + player.playSound(event.getEgg().getLocation(), Sound.ENTITY_EXPERIENCE_ORB_PICKUP, 5.0F, 5.0F); + player.playSound(event.getEgg().getLocation(), Sound.ENTITY_FIREWORK_BLAST, 5.0F, 5.0F); + player.getWorld().spigot().playEffect(event.getEgg().getLocation(), Effect.FIREWORKS_SPARK); + player.getWorld().dropItemNaturally(event.getEgg().getLocation(), GTMUtils.getRandomGameItem().getItem()); + } + } + + @EventHandler + public void playerItemConsume(PlayerItemConsumeEvent event) { + Player player = event.getPlayer(); + ItemStack item = event.getItem(); + if (item.getType() == easter.getChocolateBunny().getType()) { + GTM.getDrugManager().getEffectManager().cancelEffects(player); + player.addPotionEffect(new PotionEffect(PotionEffectType.ABSORPTION, 600, 1)); + player.setFoodLevel(20); + player.setSaturation(20); + player.setExhaustion(0); + } + } + + @EventHandler + public void entityDeath(EntityDeathEvent event) { + if (!easter.isActive()) return; + if (event.getEntity().getType() != EntityType.RABBIT) return; + if (event.getEntity().getKiller() == null) return; + event.getDrops().clear(); + event.getDrops().add(GTM.getHolidayManager().getEaster().getChocolateBunny()); + } + + @EventHandler + public void entitySpawn(EntitySpawnEvent event) { + if (event.getEntityType() != EntityType.RABBIT) return; + Rabbit rabbit = (Rabbit) event.getEntity(); + rabbit.setAdult(); + rabbit.setCustomName(""); + rabbit.setCustomNameVisible(false); + Rabbit.Type targetType = easter.getAllowedTypes()[ThreadLocalRandom.current().nextInt(easter.getAllowedTypes().length)]; + rabbit.setRabbitType(targetType); + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/holidays/easter/EasterTask.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/holidays/easter/EasterTask.java new file mode 100644 index 0000000..ffb5b1c --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/holidays/easter/EasterTask.java @@ -0,0 +1,43 @@ +package net.grandtheftmc.gtm.holidays.easter; + +import net.grandtheftmc.gtm.GTM; +import org.bukkit.Location; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Rabbit; +import org.bukkit.scheduler.BukkitRunnable; + +import java.util.concurrent.ThreadLocalRandom; + +public class EasterTask extends BukkitRunnable { + private Easter easter; + + public EasterTask(Easter easter) { + this.easter = easter; + if (this.easter.getEasterTask().isPresent()) return; + this.runTaskTimer(GTM.getInstance(), 0, 4800); + } + + @Override + public void run() { + Location location = GTM.getWarpManager().getRandomWarp().getLocation(); + if (easter.getRabbitsByChunk(location.getChunk()).size() > 10) return; + Rabbit rabbit = (Rabbit) location.getWorld().spawnEntity(location, EntityType.RABBIT); + Rabbit.Type type = easter.getAllowedTypes()[ThreadLocalRandom.current().nextInt(easter.getAllowedTypes().length)]; + rabbit.setRabbitType(type); + rabbit.setCustomName(""); + rabbit.setCustomNameVisible(false); + rabbit.setAdult(); + rabbit.setBreed(true); + rabbit.setRemoveWhenFarAway(true); + location.getWorld().getLivingEntities() + .stream() + .filter(livingEntity -> livingEntity.getType() == EntityType.RABBIT) + .forEach(livingEntity -> { + livingEntity.setRemoveWhenFarAway(true); + if (easter.getItemsByChunk(livingEntity.getLocation().getChunk()).size() > 50) return; + if (ThreadLocalRandom.current().nextInt(3) == 1) { + livingEntity.getWorld().dropItemNaturally(livingEntity.getLocation(), easter.getEasterEgg()); + } + }); + } +} \ No newline at end of file diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/holidays/halloween/PlayerScare.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/holidays/halloween/PlayerScare.java new file mode 100644 index 0000000..9175fcf --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/holidays/halloween/PlayerScare.java @@ -0,0 +1,186 @@ +package net.grandtheftmc.gtm.holidays.halloween; + +import net.buycraft.plugin.client.ApiException; +import net.buycraft.plugin.data.Coupon; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.C; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.util.title.NMSTitle; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.holidays.halloween.dao.ServerCoupon; +import net.grandtheftmc.gtm.holidays.halloween.dao.ServerCouponDAO; +import net.grandtheftmc.gtm.users.GTMUser; +import org.bukkit.Particle; +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.scheduler.BukkitRunnable; + +import java.io.IOException; +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; +import java.util.Optional; +import java.util.concurrent.ThreadLocalRandom; + +/** + * Created by Timothy Lampen on 2017-09-28. + */ +public class PlayerScare implements Listener{ + + public PlayerScare(){ +// new BukkitRunnable() { +// @Override +// public void run() { +// List<ServerCoupon> coupons = ServerCouponDAO.getAllServerCoupons(); +// coupons.forEach(coupon -> { +// final long timeRemaining = coupon.getCreationTime() + 1000 * 60 * 60 * 24 - System.currentTimeMillis(); +// if(timeRemaining <= 0) { +// ServerCouponDAO.deleteServerCoupon(coupon.getCouponID()); +// try { +// GTM.getBuycraftX().getApiClient().deleteCoupon(coupon.getCouponID()); +// } catch (Exception e) { +// e.printStackTrace(); +// } +// } +// }); +// } +// }.runTaskTimerAsynchronously(GTM.getInstance(), 0, 20*60*60); + } + +// @EventHandler +// public void onJoin(PlayerJoinEvent event) { +// Player player = event.getPlayer(); +// +// int rand = ThreadLocalRandom.current().nextInt(10, 300); +// new BukkitRunnable() { +// @Override +// public void run() { +// final Optional<ServerCoupon> optCoupon = ServerCouponDAO.getServerCoupon(player.getUniqueId()); +// +// if (!optCoupon.isPresent()) {//player not in there +// initScare(player); +// } else { +// if (optCoupon.get().getCreationTime() == 0) return; +// final long timeRemaining = optCoupon.get().getCreationTime() + 1000 * 60 * 60 * 24 - System.currentTimeMillis(); +// if (timeRemaining <= 0) { +// try { +// GTM.getBuycraftX().getApiClient().deleteCoupon(optCoupon.get().getCouponID()); +// } catch (IOException | ApiException e) { +// e.printStackTrace(); +// } +// ServerCouponDAO.deleteServerCoupon(player.getUniqueId()); +// return; +// } +// +// Coupon coupon = null; +// try { +// coupon = GTM.getBuycraftX().getApiClient().getCoupon(optCoupon.get().getCouponID()); +// } catch (IOException | ApiException e) { +// e.printStackTrace(); +// } +// +// if (coupon != null && coupon.getExpire().getLimit() <= 0) {//coupon has already been used +// if (optCoupon.get().getCreationTime() != 0) { +// ServerCouponDAO.deleteServerCoupon(player.getUniqueId()); +// } +// return; +// } +// +// if(coupon == null) return; +// Coupon finalCoupon = coupon; +// +// new BukkitRunnable() { +// @Override +// public void run() { +// NMSTitle.sendTitle(player, Utils.f("&6&lHAPPY HALLOWEEN"), Utils.f("&eRead chat for more information & exciting offers!"), 20, 60, 20); +// +// for(int i = 0; i < 4; i++) +// player.sendMessage(""); +// +// player.sendMessage(Utils.f("&6▀&8▔&6▀&8▔&6▀&8▔&6▀&8▔&6▀&8▔&6▀&8▔&6▀&8▔&6▀&8▔&6▀&8▔&6▀&8▔&6▀&8▔&6▀&8▔&6▀&8▔&6▀&8▔&6▀&8▔&6▀&8▔&6▀&8▔&6▀"));//▔▀ +// player.sendMessage(""); +// player.sendMessage(Utils.f(" &6&lHappy Halloween!&r")); +// player.sendMessage(Utils.f(" Your &c&l30&c% off coupon&r hasn't yet been used, hurry before it ends! Expires in " + Utils.timeInSecondsToText(timeRemaining / 1000L, C.DARK_RED + C.BOLD, C.DARK_RED, C.WHITE))); +// player.sendMessage(""); +// player.sendMessage(Utils.f(" &e&lCOUPON&r: &6" + finalCoupon.getCode())); +// player.sendMessage(Utils.f(" &e&lSTORE&r: &6https://store.grandtheftmc.net/halloweenremind")); +// player.sendMessage(""); +// player.sendMessage(Utils.f("&6▄&8▁&6▄&8▁&6▄&8▁&6▄&8▁&6▄&8▁&6▄&8▁&6▄&8▁&6▄&8▁&6▄&8▁&6▄&8▁&6▄&8▁&6▄&8▁&6▄&8▁&6▄&8▁&6▄&8▁&6▄&8▁&6▄&8▁&6▄"));//▄▁ +// } +// }.runTask(GTM.getInstance()); +// } +// } +// }.runTaskLaterAsynchronously(GTM.getInstance(), rand*20);//todo:change back to 15-20min +// } + +// private void initScare(Player player) { +// GTMUser gtmUser = GTM.getUserManager().getLoadedUser(player.getUniqueId()); +// long delay = gtmUser.isInCombat() ? 20*15 : 0; +// new BukkitRunnable() { +// @Override +// public void run() { +// if(!player.isOnline()) return; +// if(gtmUser.isInCombat()) { +// initScare(player); +// return; +// } +// +// String couponName = "SPOOK" + player.getName() + ThreadLocalRandom.current().nextInt(100, 1000); +// try { +// Coupon coupon = Coupon.builder() +// .code(couponName) +// .effective(new Coupon.Effective("cart", null, null)) +// .basketType("both").startDate(new Date()) +// .discount(new Coupon.Discount("percentage", new BigDecimal(30), new BigDecimal(0))) +// .expire(new Coupon.Expire("limit", 1, new Date())) +// .userLimit(1) +// .minimum(new BigDecimal(0)) +// .build(); +// Coupon generatedCoupon = GTM.getBuycraftX().getApiClient().createCoupon(coupon); +// +// if(generatedCoupon == null) { +// player.sendMessage(Lang.GTM.f("&cError: Couldn't generate your coupon: " + couponName + " contact an admin immediately.")); +// return; +// } +// +// new BukkitRunnable() { +// @Override +// public void run() { +// player.spawnParticle(Particle.MOB_APPEARANCE, player.getLocation(), 1); +// player.playSound(player.getLocation(), Sound.ENTITY_GHAST_SCREAM, 10, 10); +// player.playSound(player.getLocation(), "custome.halloween", 10, 10); +// NMSTitle.sendTitle(player, Utils.f("&6&lHAPPY HALLOWEEN"), Utils.f("&eRead chat for more information & exciting offers!"), 20, 60, 20); +// +// for(int i = 0; i < 4; i++) +// player.sendMessage(""); +// +// player.sendMessage(Utils.f("&6▀&8▔&6▀&8▔&6▀&8▔&6▀&8▔&6▀&8▔&6▀&8▔&6▀&8▔&6▀&8▔&6▀&8▔&6▀&8▔&6▀&8▔&6▀&8▔&6▀&8▔&6▀&8▔&6▀&8▔&6▀&8▔&6▀&8▔&6▀"));//▔▀ +// player.sendMessage(""); +// player.sendMessage(Utils.f(" &6&lHappy Halloween!&r As a celebration, and a ðank you &rfor playing, here is a &a&l30&r&a% off&r, private, exclusive coupon for our store. It runs out in &c&l24&r &chours&f, and only you have it!")); +// player.sendMessage(""); +// player.sendMessage(Utils.f(" &e&lCOUPON&r: &6" + couponName)); +// player.sendMessage(Utils.f(" &e&lSTORE&r: &6https://store.grandtheftmc.net/halloween")); +// player.sendMessage(""); +// player.sendMessage(Utils.f("&6▄&8▁&6▄&8▁&6▄&8▁&6▄&8▁&6▄&8▁&6▄&8▁&6▄&8▁&6▄&8▁&6▄&8▁&6▄&8▁&6▄&8▁&6▄&8▁&6▄&8▁&6▄&8▁&6▄&8▁&6▄&8▁&6▄&8▁&6▄"));//▄▁ +// } +// }.runTask(GTM.getInstance()); +// +// ServerCouponDAO.setServerCoupon(player.getUniqueId(), generatedCoupon.getId(), couponName, System.currentTimeMillis()); +// } catch (Exception e) { +// e.printStackTrace(); +// } +// } +// }.runTaskLaterAsynchronously(GTM.getInstance(), delay); +// } +// +// public void clearEvent(){ +// Core.sql.updateAsyncLater("TRUNCATE server_coupons"); +// Core.log("Successfully cleared the halloween event!"); +// } + + +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/holidays/halloween/dao/ServerCoupon.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/holidays/halloween/dao/ServerCoupon.java new file mode 100644 index 0000000..16e5a1f --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/holidays/halloween/dao/ServerCoupon.java @@ -0,0 +1,28 @@ +package net.grandtheftmc.gtm.holidays.halloween.dao; + +/** + * Created by Timothy Lampen on 2017-10-15. + */ +public class ServerCoupon { + private int couponID; + private String couponName; + private long creationTime; + + public ServerCoupon(int couponID, String couponName, long creationTime) { + this.couponID = couponID; + this.couponName = couponName; + this.creationTime = creationTime; + } + + public int getCouponID() { + return couponID; + } + + public String getCouponName() { + return couponName; + } + + public long getCreationTime() { + return creationTime; + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/holidays/halloween/dao/ServerCouponDAO.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/holidays/halloween/dao/ServerCouponDAO.java new file mode 100644 index 0000000..4299ffc --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/holidays/halloween/dao/ServerCouponDAO.java @@ -0,0 +1,98 @@ +package net.grandtheftmc.gtm.holidays.halloween.dao; + +import net.grandtheftmc.core.database.BaseDatabase; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.*; + +/** + * Created by Timothy Lampen on 2017-10-15. + */ +public class ServerCouponDAO { + + public static boolean deleteServerCoupon(UUID uuid) { + String query = "UPDATE server_coupons SET creationTime=0 WHERE uuid=?;"; + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try(PreparedStatement ps = connection.prepareStatement(query)) { + ps.setString(1, uuid.toString()); + ps.executeUpdate(); + return true; + } + } catch (SQLException e) { + e.printStackTrace(); + } + return false; + } + + public static boolean deleteServerCoupon(int couponID) { + String query = "UPDATE server_coupons SET creationTime=0 WHERE couponID=?;"; + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try(PreparedStatement ps = connection.prepareStatement(query)) { + ps.setInt(1, couponID); + ps.executeUpdate(); + return true; + } + } catch (SQLException e) { + e.printStackTrace(); + } + return false; + } + + public static List<ServerCoupon> getAllServerCoupons() { + String query = "SELECT * FROM server_coupons;"; + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try(ResultSet set = connection.prepareStatement(query).executeQuery()) { + List<ServerCoupon> coupons = new ArrayList<>(); + while (set.next()) { + int couponID = set.getInt("couponID"); + long creationTime = set.getLong("creationTime"); + String couponName = set.getString("couponName"); + coupons.add(new ServerCoupon(couponID, couponName, creationTime)); + } + return coupons; + } + } catch (SQLException e) { + e.printStackTrace(); + } + return Collections.emptyList(); + } + + public static Optional<ServerCoupon> getServerCoupon(UUID uuid) { + String query = "SELECT * FROM server_coupons WHERE UUID=?;"; + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try(PreparedStatement ps = connection.prepareStatement(query)) { + ps.setString(1, uuid.toString()); + try (ResultSet set = ps.executeQuery()) { + if (!set.next()) return Optional.empty(); + int couponID = set.getInt("couponID"); + long creationTime = set.getLong("creationTime"); + String couponName = set.getString("couponName"); + return Optional.of(new ServerCoupon(couponID, couponName, creationTime)); + } + } + } catch (SQLException e) { + e.printStackTrace(); + } + return Optional.empty(); + } + + public static boolean setServerCoupon(UUID uuid, int couponID, String couponName, long creationTime) { + String query = "INSERT INTO server_coupons (uuid, couponID, couponName, creationTime) VALUES (?,?,?,?);"; + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try(PreparedStatement ps = connection.prepareStatement(query)) { + ps.setString(1, uuid.toString()); + ps.setInt(2, couponID); + ps.setString(3, couponName); + ps.setLong(4, creationTime); + ps.executeUpdate(); + return true; + } + } catch (SQLException e) { + e.printStackTrace(); + } + return false; + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/holidays/independenceday/IndependenceDay.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/holidays/independenceday/IndependenceDay.java new file mode 100644 index 0000000..db2a1a1 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/holidays/independenceday/IndependenceDay.java @@ -0,0 +1,85 @@ +package net.grandtheftmc.gtm.holidays.independenceday; + +import net.grandtheftmc.gtm.GTMUtils; +import net.grandtheftmc.gtm.holidays.Holiday; +import org.bukkit.ChatColor; +import us.myles.ViaVersion.api.Via; +import us.myles.ViaVersion.api.boss.BossBar; +import us.myles.ViaVersion.api.boss.BossColor; +import us.myles.ViaVersion.api.boss.BossStyle; + +import java.time.Month; +import java.util.Optional; + +public class IndependenceDay extends Holiday { + private IndependenceDayTask independenceDayTask; + private BossBar bossBar; + private Integer voteCount = 0; + + public IndependenceDay() { + if (isActive()) { + new IndependenceDayListener(this); + if (this.independenceDayTask == null) this.independenceDayTask = new IndependenceDayTask(this); + if (this.bossBar == null) { + this.bossBar = Via.getAPI().createBossBar( + getNextChatColor() + "HAPPY JULY FOURTH! VOTES UNTIL REWARD DROP: " + String.valueOf(100 - getVoteCount()), + 1F, + BossColor.BLUE, + BossStyle.SEGMENTED_10); + } + } + } + + public boolean isActive() { + return GTMUtils.getMonth() == Month.JULY && GTMUtils.getDay() == 4; + } + + public Optional<IndependenceDayTask> getIndependenceDayTask() { + return Optional.ofNullable(this.independenceDayTask); + } + + public Integer getVoteCount() { + return this.voteCount; + } + + public void addVote(int amount) { + if (this.voteCount == 100) return; + this.voteCount += amount; + } + + public void resetVotes() { + this.voteCount = 0; + this.getBossBar().setHealth(1F); + } + + public BossBar getBossBar() { + return this.bossBar; + } + + public BossColor getNextBossColor() { + BossColor currentColor = bossBar.getColor(); + switch (currentColor) { + case RED: + return BossColor.WHITE; + case BLUE: + return BossColor.RED; + case WHITE: + return BossColor.BLUE; + } + return BossColor.RED; + } + + public ChatColor getNextChatColor() { + if (bossBar == null) return ChatColor.RED; + switch (bossBar.getColor()) { + case RED: + return ChatColor.RED; + case BLUE: + return ChatColor.BLUE; + case WHITE: + return ChatColor.WHITE; + } + return ChatColor.RED; + } + +} \ No newline at end of file diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/holidays/independenceday/IndependenceDayListener.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/holidays/independenceday/IndependenceDayListener.java new file mode 100644 index 0000000..b2cc093 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/holidays/independenceday/IndependenceDayListener.java @@ -0,0 +1,24 @@ +package net.grandtheftmc.gtm.holidays.independenceday; + +import net.grandtheftmc.core.voting.events.PlayerVoteEvent; +import net.grandtheftmc.gtm.GTM; +import org.bukkit.Bukkit; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; + +public class IndependenceDayListener implements Listener { + private IndependenceDay independenceDay; + + public IndependenceDayListener(IndependenceDay independenceDay) { + Bukkit.getPluginManager().registerEvents(this, GTM.getInstance()); + this.independenceDay = independenceDay; + } + + @EventHandler + public void playerVoteEvent(PlayerVoteEvent event) { + float health = independenceDay.getBossBar().getHealth() - 0.01F; + if (health < 0) health = 0F; + independenceDay.getBossBar().setHealth(health); + independenceDay.addVote(1); + } +} \ No newline at end of file diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/holidays/independenceday/IndependenceDayTask.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/holidays/independenceday/IndependenceDayTask.java new file mode 100644 index 0000000..1345073 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/holidays/independenceday/IndependenceDayTask.java @@ -0,0 +1,57 @@ +package net.grandtheftmc.gtm.holidays.independenceday; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.util.title.NMSTitle; +import net.grandtheftmc.gtm.GTM; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitRunnable; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.ThreadLocalRandom; + +public class IndependenceDayTask extends BukkitRunnable { + private IndependenceDay independenceDay; + + public IndependenceDayTask(IndependenceDay independenceDay) { + this.independenceDay = independenceDay; + if (this.independenceDay.getIndependenceDayTask().isPresent()) return; + this.runTaskTimer(GTM.getInstance(), 300, 20); + } + + @Override + public void run() { + if (independenceDay.getBossBar() == null) return; + independenceDay.getBossBar().setTitle( + independenceDay.getNextChatColor() + "" + ChatColor.BOLD + + "HAPPY 4TH OF JULY! VOTES UNTIL REWARD DROP: " + + ChatColor.GREEN + String.valueOf(100 - independenceDay.getVoteCount())); + independenceDay.getBossBar().setColor(independenceDay.getNextBossColor()); + if (independenceDay.getVoteCount() != 0 && independenceDay.getVoteCount() % 100 == 0) { + List<? extends Player> onlinePlayers = new ArrayList<>(Bukkit.getOnlinePlayers()); + Player randomPlayer = onlinePlayers.get(ThreadLocalRandom.current().nextInt(onlinePlayers.size())); + User randomUser = Core.getUserManager().getLoadedUser(randomPlayer.getUniqueId()); + randomUser.addCrowbars(100); + Bukkit.broadcastMessage(Lang.REWARDS.f(randomUser.getColoredName(randomPlayer) + " &7WON &9&l100 CROWBARS&7!")); + randomPlayer.sendMessage(Lang.CROWBARS_ADD.f("100")); + + onlinePlayers.forEach(onlinePlayer -> { + onlinePlayer.playSound(onlinePlayer.getLocation(), Sound.ENTITY_FIREWORK_TWINKLE, 1.0F, 1.0F); + onlinePlayer.playSound(onlinePlayer.getLocation(), Sound.ENTITY_PLAYER_LEVELUP, 1.0F, 1.0F); + if (onlinePlayer == randomPlayer) return; + User user = Core.getUserManager().getLoadedUser(onlinePlayer.getUniqueId()); + user.addCrowbars(5); + onlinePlayer.sendMessage(Lang.CROWBARS_ADD.f("5")); + onlinePlayer.sendTitle("", Utils.f("&9&l+5 Crowbars"), 1, 1, 3); + }); + + independenceDay.resetVotes(); + } + } +} \ No newline at end of file diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/items/AmmoType.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/items/AmmoType.java new file mode 100644 index 0000000..ef47025 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/items/AmmoType.java @@ -0,0 +1,93 @@ +package net.grandtheftmc.gtm.items; + +import java.util.Arrays; +import java.util.Optional; + +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; + +import net.grandtheftmc.gtm.GTM; + +public enum AmmoType { + + PISTOL("pistolAmmo"), SMG("smgAmmo"), SHOTGUN("shotgunShell"), ASSAULT_RIFLE("assaultRifleAmmo"), MG( + "mgAmmo"), SNIPER("sniperRifleAmmo"), ROCKET("rocket"), MINIGUN("minigunAmmo"), GRENADE("grenade", true); + + private final String gameItem; + private final boolean inInventory; + + AmmoType(String gameItem) { + this.gameItem = gameItem; + this.inInventory = false; + } + + AmmoType(String gameItem, boolean inInventory) { + this.gameItem = gameItem; + this.inInventory = inInventory; + } + + /** + * Get the identifier of the ammo type. + * + * @return The string representation for the id for the ammo type. + */ + public String getId(){ + return name(); + } + + public String getGameItemName() { + return this.gameItem; + } + + public GameItem getGameItem() { + return GTM.getItemManager().getItem(this.gameItem); + } + + public static AmmoType[] getTypes() { + return values(); + } + + public static AmmoType getAmmoType(Material material, short dataValue) { + for (AmmoType type : AmmoType.getTypes()) { + ItemStack item = type.getGameItem().getItem(); + if (material == item.getType() && dataValue == item.getDurability()) + return type; + } + return null; + } + + /** + * Get the ammo type based off the identifier. + * + * @param id - the id to use + * + * @return The ammo type, if found, otherwise empty. + */ + public static Optional<AmmoType> getAmmoTypeByID(String id) { + + for (AmmoType at : values()){ + if (at.getId().equalsIgnoreCase(id)){ + return Optional.of(at); + } + } + + return Optional.empty(); + } + + public static AmmoType getAmmoType(String ammoType) { + return Arrays.stream(AmmoType.getTypes()).filter(type -> type.toString().equalsIgnoreCase(ammoType)).findFirst().orElse(null); + } + + public static AmmoType getAmmoTypeFriendly(String ammoType) { + return Arrays.stream(AmmoType.getTypes()).filter(type -> type.toString().equalsIgnoreCase(ammoType) || type.gameItem.equalsIgnoreCase(ammoType)).findFirst().orElse(null); + } + + public static boolean isAmmo(ItemStack item) { + return getAmmoType(item.getType(), item.getDurability()) != null; + } + + public boolean isInInventory() { + return this.inInventory; + } + +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/items/ArmorType.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/items/ArmorType.java new file mode 100644 index 0000000..0a8d04c --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/items/ArmorType.java @@ -0,0 +1,77 @@ +package net.grandtheftmc.gtm.items; + +import net.grandtheftmc.core.util.Slot; +import org.bukkit.inventory.ItemStack; + +import java.util.Arrays; + +/** + * Created by Timothy Lampen on 7/6/2017. + */ +public enum ArmorType { + HELMET(Slot.HEAD, 5, "titaniumhelmet", "tacticalmask", "pimpcrown", "nightvisiongoggles", "baseballcap"), + CHESTPLATE(Slot.CHEST, 6, "titaniumvest", "ceramicvest", "kevlarvest", "shirt"), + LEGGINGS(Slot.LEGS, 7, "pants"), + BOOTS(Slot.FEET, 8, "nikes", "samurisairjordans"), + JETPACK(Slot.CHEST, 6, "jetpack"), + WINGSUIT(Slot.CHEST, 6, "wingsuit"); + + private final Slot slot; + private final String[] gameItems; + private final int rawSlot; + + ArmorType(Slot slot, int rawSlot, String... gameItems) { + this.slot = slot; + this.rawSlot =rawSlot; + this.gameItems = gameItems; + } + + public String getName() { + String[] a = this.toString().split("_"); + String s = ""; + for (int i = 0; i < a.length; ++i) { + s = s + a[i].charAt(0) + a[i].substring(1).toLowerCase() + (i == a.length - 1 ? "" : " "); + } + return s; + } + + + public Slot getSlot() { + return this.slot; + } + + public String[] getGameItems() { + return this.gameItems; + } + + public boolean hasGameItem(String gameItem) { + return Arrays.stream(this.gameItems).anyMatch(s -> s.equalsIgnoreCase(gameItem)); + } + + public static ArmorType getArmorType(String gameItem) { + return Arrays.stream(ArmorType.values()).filter(type -> type.hasGameItem(gameItem)).findFirst().orElse(null); + } + + public int getRawSlot() { + return rawSlot; + } + + public static ArmorType matchType(ItemStack is){ + if(is==null) + return null; + String type = is.getType().toString().toLowerCase(); + if(type.contains("chestplate")){ + return ArmorType.CHESTPLATE; + } + else if(type.contains("leggings")){ + return ArmorType.LEGGINGS; + } + else if(type.contains("boots")){ + return ArmorType.BOOTS; + } + else if(type.contains("helmet")){ + return ArmorType.HELMET; + } + return null; + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/items/ArmorUpgrade.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/items/ArmorUpgrade.java new file mode 100644 index 0000000..1304bf4 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/items/ArmorUpgrade.java @@ -0,0 +1,283 @@ +package net.grandtheftmc.gtm.items; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.util.Attribute; +import net.grandtheftmc.core.util.AttributeModifier; +import net.grandtheftmc.core.util.ItemAttributes; +import net.grandtheftmc.gtm.users.GTMRank; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; + +import java.util.*; + + +/** + * Created by Liam on 25/10/2016. + */ +public enum ArmorUpgrade { + + LIGHT(2000, GTMRank.THUG, UserRank.VIP, ArmorType.CHESTPLATE), + DURABLE(2000, GTMRank.GANGSTER, UserRank.VIP, ArmorType.HELMET, ArmorType.CHESTPLATE, ArmorType.LEGGINGS, ArmorType.BOOTS), + ULTRA_LIGHT(5000, GTMRank.MUGGER, UserRank.PREMIUM, ArmorType.CHESTPLATE), + TANK(3000, GTMRank.HUNTER, UserRank.PREMIUM, ArmorType.HELMET, ArmorType.CHESTPLATE, ArmorType.LEGGINGS, ArmorType.BOOTS), + REINFORCED(2500, GTMRank.DEALER, UserRank.ELITE, ArmorType.HELMET, ArmorType.CHESTPLATE, ArmorType.JETPACK, ArmorType.WINGSUIT), + BOMB_SQUAD(3000, GTMRank.PIMP, UserRank.ELITE, ArmorType.HELMET, ArmorType.CHESTPLATE), + EXOSKELETON(5000, GTMRank.MOBSTER, UserRank.SPONSOR, ArmorType.CHESTPLATE), + ENHANCED(50000, GTMRank.GODFATHER, UserRank.SUPREME, ArmorType.CHESTPLATE), + NEON(5000, null, UserRank.VIP, ArmorType.HELMET, ArmorType.CHESTPLATE, ArmorType.LEGGINGS, ArmorType.BOOTS, ArmorType.JETPACK, ArmorType.WINGSUIT), + LEAD_LINED(5000, null, null, ArmorType.HELMET, ArmorType.CHESTPLATE, ArmorType.LEGGINGS, ArmorType.BOOTS, ArmorType.JETPACK, ArmorType.WINGSUIT); + + + private final double price; + private final GTMRank rank; + private final UserRank userRank; + private final ArmorType[] types; + + ArmorUpgrade(double price, GTMRank rank, UserRank userRank, ArmorType... types) { + this.price = price; + this.rank = rank; + this.userRank = userRank; + this.types = types; + } + + public double getPrice() { + return this.price; + } + + /* public double getPrice(GameItem item) { + Core.log(item.getSellPrice() + " / " + this.price); + return this.price * item.getSellPrice(); + }*/ + + public GTMRank getGTMRank() { + return this.rank; + } + + public UserRank getUserRank() { + return this.userRank; + } + + public boolean canUseUpgrade(GTMRank rank, UserRank userRank) { + return this.rank == rank || rank.isHigherThan(this.rank) || this.userRank == userRank || userRank.isHigherThan(this.userRank) || (userRank==null && rank==null); + } + + public String getDisplayName() { + String[] a = this.toString().split("_"); + String s = ""; + for (int i = 0; i < a.length; ++i) { + s = s + a[i].charAt(0) + a[i].substring(1).toLowerCase() + (i == a.length - 1 ? "" : " "); + } + return s; + } + + public ArmorType[] getTypes() { + return this.types; + } + + public String getTypesString() { + String s = ""; + int length = this.types.length; + for (int i = 0; i < length; i++) { + ArmorType type = this.types[i]; + s += type.getName() + (i == length - 1 ? "" : i == length - 2 ? " or " : ", "); + } + return s; + } + + public static boolean isArmorUpgrade(String s) { + try { + ArmorUpgrade.valueOf(s); + } catch (IllegalArgumentException | NullPointerException e) { + return false; + } + return true; + } + + public static boolean playerHasArmorUpgrade(Player victim, ArmorUpgrade upgrade){ + ItemStack[] armor = victim.getInventory().getArmorContents(); + for (ItemStack itemStack : armor) { + if(itemStack==null) + continue; + HashSet<ArmorUpgrade> upgrades = ArmorUpgrade.getArmorUpgrades(itemStack); + if (upgrades.stream().anyMatch(up -> up == upgrade)) { + return true; + } + } + return false; + } + + //Does not return null when no upgrades, returns an empty set. + public static HashSet<ArmorUpgrade> getArmorUpgrades(ItemStack is) { + HashSet<ArmorUpgrade> returnSet = new HashSet<>(); + if (is==null || is.getItemMeta() == null || is.getItemMeta().getLore() == null) + return returnSet; + List<String> lore = is.getItemMeta().getLore(); + lore.stream().forEach(line -> { + line = ChatColor.stripColor(line); + Core.log(line); + if (line.equalsIgnoreCase("") || !ArmorUpgrade.isArmorUpgrade(line.toUpperCase().replace(" ", "_"))) + return; + returnSet.add(ArmorUpgrade.valueOf(line.toUpperCase().replace(" ", "_"))); + }); + + return returnSet; + } + + public boolean canBeUsedOn(ArmorType type) { + return Arrays.stream(this.types).anyMatch(t -> t == type); + } + + public boolean canBeUsedOn(String gameItem) { + return Arrays.stream(this.types).anyMatch(t -> t.hasGameItem(gameItem)); + } + + public HashSet<PotionEffect> getPotionEffects() { + HashSet<PotionEffect> effects = new HashSet<>(); + switch (this) { + case ULTRA_LIGHT: + effects.add(new PotionEffect(PotionEffectType.FAST_DIGGING, Integer.MAX_VALUE, 0)); + break; + case EXOSKELETON: + effects.add(new PotionEffect(PotionEffectType.REGENERATION, Integer.MAX_VALUE, 0)); + effects.add(new PotionEffect(PotionEffectType.INCREASE_DAMAGE, Integer.MAX_VALUE, 0)); + break; + case NEON: + effects.add(new PotionEffect(PotionEffectType.GLOWING, Integer.MAX_VALUE, 0, true, false)); + } + + return effects; + } + + public ItemStack getUpgradedItem(GameItem gameItem, ItemStack item) { + if (gameItem == null) return item; + ArmorType type = ArmorType.getArmorType(gameItem.getName()); + if (type == null) return item; + ItemAttributes att = new ItemAttributes(); + ItemMeta meta = item.getItemMeta(); + List<String> lore = new ArrayList<>(meta.hasLore() ? meta.getLore() : Collections.singletonList("")); + if (ArmorUpgrade.getArmorUpgrades(item).size() == 0) { + lore.add(Utils.f("&7Upgrades:")); + lore.add(" "); + } + lore.add(Utils.f("&b&l" + this.getDisplayName())); + meta.setLore(lore); + meta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES); + meta.addItemFlags(ItemFlag.HIDE_ENCHANTS); + switch (this) { + case LIGHT: + att.getFromStack(item); + att.addModifier(new AttributeModifier(Attribute.MOVEMENT_SPEED, "LightSpeed", type.getSlot(), 0, 0.02, UUID.randomUUID())); + item = att.apply(item); + meta.addEnchant(Enchantment.DEPTH_STRIDER, 1, true); + break; + case ULTRA_LIGHT: + att.getFromStack(item); + att.addModifier(new AttributeModifier(Attribute.MOVEMENT_SPEED, "UltraLightSpeed", type.getSlot(), 0, 0.04, UUID.randomUUID())); + item = att.apply(item); + meta.addEnchant(Enchantment.DEPTH_STRIDER, meta.getEnchantLevel(Enchantment.DEPTH_STRIDER) + 2, true); + meta.addEnchant(Enchantment.DIG_SPEED, meta.getEnchantLevel(Enchantment.DIG_SPEED) + 1, true); + break; + case TANK: { + att.getFromStack(item); + att.addModifier(new AttributeModifier(Attribute.MOVEMENT_SPEED, "TankSpeed", type.getSlot(), 0, -0.04, UUID.randomUUID())); + att.addModifier(new AttributeModifier(Attribute.KNOCKBACK_RESISTANCE, "TankKnockback", type.getSlot(), 0, .5d, UUID.randomUUID())); + item = att.apply(item); + meta.addEnchant(Enchantment.PROTECTION_ENVIRONMENTAL, 9, true); + break; + } + case REINFORCED: { + att.getFromStack(item); + item = att.apply(item); + meta.addEnchant(Enchantment.PROTECTION_ENVIRONMENTAL, 4, true); + break; + } + case DURABLE: + att.getFromStack(item); + item = att.apply(item); + meta.addItemFlags(ItemFlag.HIDE_UNBREAKABLE); + meta.spigot().setUnbreakable(true); + break; + case BOMB_SQUAD: + att.getFromStack(item); + att.addModifier(new AttributeModifier(Attribute.MOVEMENT_SPEED, "BombSquadSpeed", type.getSlot(), 0, -0.02, UUID.randomUUID())); + att.addModifier(new AttributeModifier(Attribute.KNOCKBACK_RESISTANCE, "BombSquadKnockback", type.getSlot(), 0, 0.5, UUID.randomUUID())); + item = att.apply(item); + meta.addEnchant(Enchantment.PROTECTION_EXPLOSIONS, 5, true); + meta.addEnchant(Enchantment.PROTECTION_FIRE, 5, true); + break; + } + item.setItemMeta(meta); + att.removeModifier(new AttributeModifier(Attribute.ARMOR)); + att.removeModifier(new AttributeModifier(Attribute.ARMOR_THOUGHNESS)); + att.addModifier(new AttributeModifier(Attribute.ARMOR, "darmor", type.getSlot(), 0, getDefaultArmorAttribute(item.getType()), UUID.randomUUID())); + att.addModifier(new AttributeModifier(Attribute.ARMOR_THOUGHNESS, "darmorthoughness", type.getSlot(), 0, getDefaultArmorToughness(item.getType()), UUID.randomUUID())); + item = att.apply(item); + //Utils.b(this.enchantment == null ? "null" : this.enchantment.getName()); + // item.addUnsafeEnchantment(this.enchantment, 1); + // for (Enchantment e : item.getEnchantments().keySet()) + // Utils.b(e.getName()); + return item; + } + + public static ArmorUpgrade getArmorUpgrade(String s) { + return Arrays.stream(ArmorUpgrade.values()).filter(u -> u.toString().equalsIgnoreCase(s)).findFirst().orElse(null); + } + + public static ArmorUpgrade getArmorUpgradeFromDisplayName(String s) { + return Arrays.stream(ArmorUpgrade.values()).filter(u -> u.toString().replace("_", " ").equalsIgnoreCase(s)).findFirst().orElse(null); + } + + private static int getDefaultArmorAttribute(Material material){ + switch (material){ + case IRON_BOOTS: + case LEATHER_LEGGINGS: + case CHAINMAIL_HELMET: + case GOLD_HELMET: + return 2; + case GOLD_CHESTPLATE: + case CHAINMAIL_CHESTPLATE: + case IRON_LEGGINGS: + return 5; + case GOLD_LEGGINGS: + case DIAMOND_HELMET: + case DIAMOND_BOOTS: + case LEATHER_CHESTPLATE: + return 3; + case CHAINMAIL_LEGGINGS: + return 4; + case LEATHER_BOOTS: + case LEATHER_HELMET: + case CHAINMAIL_BOOTS: + case IRON_HELMET: + case GOLD_BOOTS: + return 1; + case IRON_CHESTPLATE: + case DIAMOND_LEGGINGS: + return 6; + case DIAMOND_CHESTPLATE: + return 8; + } + return 0; + } + + private static int getDefaultArmorToughness(Material material){ + switch (material){ + case DIAMOND_CHESTPLATE: + case DIAMOND_LEGGINGS: + case DIAMOND_HELMET: + case DIAMOND_BOOTS: + return 2; + } + return 0; + } + +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/items/BackpackManager.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/items/BackpackManager.java new file mode 100644 index 0000000..5a45ba5 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/items/BackpackManager.java @@ -0,0 +1,180 @@ +package net.grandtheftmc.gtm.items; + +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.event.inventory.InventoryAction; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryCloseEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.GTMUtils; +import net.grandtheftmc.gtm.users.GTMRank; +import net.grandtheftmc.gtm.users.GTMUser; +import net.grandtheftmc.gtm.users.JobMode; + +public class BackpackManager implements Listener { + + private final Map<Integer, Inventory> corpses = new HashMap<>(); + + public void openBackpack(Player player) { + this.openBackpack(player, GTM.getUserManager().getLoadedUser(player.getUniqueId()), Core.getUserManager().getLoadedUser(player.getUniqueId())); + } + + public Inventory getBackpack(Player player, boolean monitor) { + GTMUser gtmUser = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + User coreUser = Core.getUserManager().getLoadedUser(player.getUniqueId()); + int size = 9 * GTMUtils.getBackpackRows(coreUser.getUserRank()); + Inventory inv = Bukkit.createInventory(null, size, monitor ? Utils.f(player.getName()) : Utils.f("&6&lBackpack")); + ItemStack[] backpackContents = gtmUser.getBackpackContents(); + if (backpackContents != null) + for (int i = 0; i < backpackContents.length && i < size; i++) + inv.setItem(i, backpackContents[i]); + return inv; + } + + public void openBackpack(Player player, GTMUser user, User u) { + if (user == null){ + player.sendMessage(Lang.GTM.f("&7Your backpack may not be opened at this time! Please relog!")); + return; + } + + if (user.isArrested()) { + player.sendMessage(Lang.JAIL.f("&7You can't open your backpack in jail!")); + return; + } + if (user.isInCombat()) { + player.sendMessage(Lang.COMBATTAG.f("&7You can't open your backpack in combat!")); + return; + } + if (user.getBackpackOpen()) { + player.sendMessage(Lang.GTM.f("&7Your backpack may not be opened at this time!")); + return; + } + if (player.getOpenInventory() != null + && Objects.equals("Backpack", ChatColor.stripColor(player.getOpenInventory().getTitle()))) + return; + Inventory inv = this.getBackpack(player, false); + + // remove stuck phones and GPS + inv.remove(Material.COMPASS); + inv.remove(Material.WATCH); + + player.openInventory(inv); + user.setBackpackOpen(true); + } + + @EventHandler + public void onClick(InventoryClickEvent event){ + Inventory inv = event.getInventory(); + + // ignore inven events that aren't backback + if (!"backpack".equalsIgnoreCase(ChatColor.stripColor(inv.getTitle()))) + return; + + // grab event variables + Inventory clickedInven = event.getClickedInventory(); + InventoryAction action = event.getAction(); + ItemStack item = event.getCurrentItem(); + ItemStack cur = event.getCursor(); + + // if they are swapping + if (action == InventoryAction.HOTBAR_SWAP || action == InventoryAction.HOTBAR_MOVE_AND_READD){ + + // if they are using number key + if (event.getClick() == ClickType.NUMBER_KEY){ + + int hotbar = event.getHotbarButton(); + + // if there was a click on the inventory + if (clickedInven != null){ + + // get the item they are swapping with + ItemStack swappingItem = event.getWhoClicked().getInventory().getItem(hotbar); + + if (swappingItem != null){ + if (swappingItem.getType() == Material.COMPASS || swappingItem.getType() == Material.WATCH){ + event.setCancelled(true); + } + } + } + } + } + + if (item != null){ + + // stops moving of GPS and Phone + if (item.getType() == Material.COMPASS || item.getType() == Material.WATCH){ + event.setCancelled(true); + } + } + } + + @EventHandler + public void onClose(InventoryCloseEvent e) { + Inventory inv = e.getInventory(); + if (!Objects.equals("Backpack", ChatColor.stripColor(inv.getTitle())) && Bukkit.getPlayer(inv.getTitle()) != null) { + Player target = Bukkit.getPlayer(inv.getTitle()); + if (target.getOpenInventory() != null && Objects.equals("Backpack", ChatColor.stripColor(target.getOpenInventory().getTitle()))) + target.getOpenInventory().close(); + GTMUser user = GTM.getUserManager().getLoadedUser(target.getUniqueId()); + user.setBackpackContents(inv.getContents()); + user.setBackpackOpen(false); + return; + } + if (!"backpack".equalsIgnoreCase(ChatColor.stripColor(inv.getTitle()))) + return; + Player player = (Player) e.getPlayer(); + GTMUser user = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + user.setBackpackContents(inv.getContents()); + user.setBackpackOpen(false); + } + + private final int[] glassSlots = new int[]{0, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17}; + private final ItemStack glass = Utils.createItem(Material.STAINED_GLASS_PANE, 7, "&a"); + + public void kitPreview(Player player, Kit kit) { + String name = kit.getName(); + JobMode mode = JobMode.getModeOrNull(kit.getName()); + UserRank ur = UserRank.getUserRankOrNull(kit.getName()); + GTMRank rank = GTMRank.getRankOrNull(kit.getName()); + if (mode != null) + name = mode.getColoredNameBold(); + else if (ur != null) + name = ur.getColoredNameBold(); + else if (rank != null) + name = rank.getColoredNameBold(); + Inventory inv = Bukkit.createInventory(null, 54, Utils.f("&b&lKit Preview: " + name)); + + for (int i : this.glassSlots) + inv.setItem(i, this.glass); + inv.setItem(1, kit.getHelmet() == null ? this.glass : kit.getHelmet().getItem().getItem()); + inv.setItem(2, kit.getChestPlate() == null ? this.glass : kit.getChestPlate().getItem().getItem()); + inv.setItem(3, kit.getLeggings() == null ? this.glass : kit.getLeggings().getItem().getItem()); + inv.setItem(4, kit.getBoots() == null ? this.glass : kit.getBoots().getItem().getItem()); + inv.setItem(6, kit.getOffHand() == null ? this.glass : kit.getOffHand().getItem().getItem()); + for (int i = 0; i < kit.getItems().size(); i++) { + if (i < 9) + inv.setItem(45 + i, kit.getItems().get(i)); + else + inv.setItem(9 + i, kit.getItems().get(i)); + } + player.openInventory(inv); + } + +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/items/GameItem.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/items/GameItem.java new file mode 100644 index 0000000..bd9bcfc --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/items/GameItem.java @@ -0,0 +1,316 @@ +package net.grandtheftmc.gtm.items; + +import java.util.*; +import java.util.concurrent.ThreadLocalRandom; +import java.util.stream.Collectors; + +import net.grandtheftmc.gtm.utils.RandomUtil; +import net.grandtheftmc.gtm.weapon.melee.Dildo; +import net.grandtheftmc.gtm.weapon.ranged.special.GoldMinigun; +import net.grandtheftmc.guns.GTMGuns; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import org.bukkit.Material; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import com.j0ach1mmall3.wastedvehicles.api.VehicleProperties; + +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.drugs.Drug; +import net.grandtheftmc.gtm.drugs.DrugService; +import net.grandtheftmc.gtm.drugs.item.DrugItem; +import net.grandtheftmc.gtm.utils.ItemStackUtil; +import net.grandtheftmc.guns.weapon.Weapon; + +public class GameItem { + + private final ItemType type; + private final String name; + private ItemStack item; + private String weaponOrVecicleOrDrug; + private String displayName; + private double sellPrice, buyPrice; + private AmmoType ammoType; + private ArmorUpgrade armorUpgrade; + private boolean stackable = false; + private boolean hideDurability; + + public GameItem(String name, ItemStack item, String displayName) { + this.type = ItemType.ITEMSTACK; + this.name = name; + this.item = item; + this.displayName = displayName; + this.hideDurability = false; + } + + public GameItem(String name, ItemStack item, String displayName, double sellPrice) { + this.type = ItemType.ITEMSTACK; + this.name = name; + this.item = item; + this.displayName = displayName; + this.sellPrice = sellPrice; + this.hideDurability = false; + } + + public GameItem(String name, ItemStack item, String displayName, double sellPrice, double buyPrice) { + this.type = ItemType.ITEMSTACK; + this.name = name; + this.item = item; + this.displayName = displayName; + this.sellPrice = sellPrice; + this.buyPrice = buyPrice; + this.hideDurability = false; + } + + public GameItem(String name, ItemStack item, String displayName, double sellPrice, double buyPrice, boolean hideDurability, boolean stackable) { + this.type = ItemType.ITEMSTACK; + this.name = name; + this.item = item; + this.displayName = displayName; + this.sellPrice = sellPrice; + this.buyPrice = buyPrice; + this.hideDurability = hideDurability; + this.stackable = stackable; + } + + public GameItem(String name, ItemStack item, AmmoType type, String displayName) { + this.type = ItemType.AMMO; + this.name = name; + this.item = item; + this.ammoType = type; + this.displayName = displayName; + this.hideDurability = false; + } + + public GameItem(String name, ItemStack item, AmmoType type, String displayName, double sellPrice, double buyPrice) { + this.type = ItemType.AMMO; + this.name = name; + this.item = item; + this.ammoType = type; + this.displayName = displayName; + this.sellPrice = sellPrice; + this.buyPrice = buyPrice; + this.hideDurability = false; + } + + public GameItem(ItemType type, String name, String weaponOrVecicleOrDrug, String displayName) { + this.type = type; + this.name = name; + this.displayName = displayName; + this.weaponOrVecicleOrDrug = weaponOrVecicleOrDrug; + this.hideDurability = false; + this.getItem(); + } + + public GameItem(ItemType type, String name, String weaponOrVecicleOrDrug, String displayName, boolean hideDurability) { + this.type = type; + this.name = name; + this.displayName = displayName; + this.weaponOrVecicleOrDrug = weaponOrVecicleOrDrug; + this.hideDurability = hideDurability; + this.getItem(); + } + + public GameItem(ItemType type, String name, String weaponOrVecicleOrDrug, String displayName, double sellPrice, double buyPrice) { + this.type = type; + this.name = name; + this.displayName = displayName; + this.weaponOrVecicleOrDrug = weaponOrVecicleOrDrug; + this.sellPrice = sellPrice; + this.buyPrice = buyPrice; + this.hideDurability = false; + this.getItem(); + } + + public GameItem(ItemType type, String name, String weaponOrVecicleOrDrug, String displayName, double sellPrice, double buyPrice, + boolean hideDurability) { + this.type = type; + this.name = name; + this.displayName = displayName; + this.weaponOrVecicleOrDrug = weaponOrVecicleOrDrug; + this.sellPrice = sellPrice; + this.buyPrice = buyPrice; + this.hideDurability = hideDurability; + this.getItem(); + } + + public GameItem(String name, ArmorUpgrade armorUpgrade, String displayName) { + this.type = ItemType.ARMOR_UPGRADE; + this.name = name; + this.armorUpgrade = armorUpgrade; + this.displayName = displayName; + this.hideDurability = false; + this.getItem(); + } + + public GameItem(String name, ArmorUpgrade armorUpgrade, String displayName, double sellPrice, double buyPrice) { + this.type = ItemType.ARMOR_UPGRADE; + this.name = name; + this.displayName = displayName; + this.armorUpgrade = armorUpgrade; + this.sellPrice = sellPrice; + this.buyPrice = buyPrice; + this.hideDurability = false; + this.getItem(); + } + + public boolean isStackable() { + return stackable; + } + + public String getName() { + return this.name; + } + + public ItemStack getItem() { + return this.getItem(1); + } + + public ItemStack getItem(int amount) { + switch (this.type) { + case WEAPON: { +// Optional<Weapon> opt = GTM.getWastedGuns().getWeapon(this.weaponOrVecicleOrDrug); +// opt.ifPresent(weapon -> this.item = weapon.getItemStack()); + Optional<Weapon<?>> opt = GTM.getWastedGuns().getWeaponManager().getWeapon(this.weaponOrVecicleOrDrug); + opt.ifPresent(weapon -> { + switch (weapon.getWeaponType()) { + case THROWABLE: + case DROPPABLE: + this.item = weapon.createItemStack(); + break; + + default: + this.item = ItemStackUtil.addTag(weapon.createItemStack(), "stackFix", UUID.randomUUID().toString()); + break; + } + }); + break; + } + case DRUG: { + Optional<Drug> drug = ((DrugService) GTM.getDrugManager().getService()).getDrug(this.weaponOrVecicleOrDrug); + if (drug.isPresent()) { + DrugItem drugItem = DrugItem.getByDrug(drug.get()); + if (drugItem != null) { + this.item = drugItem.getItemStack(); + } + } + break; + } + + case VEHICLE: + Optional<VehicleProperties> opt = GTM.getWastedVehicles().getVehicle(this.weaponOrVecicleOrDrug); + opt.ifPresent(vehicleProperties -> this.item = vehicleProperties.getItem()); + break; + + case SKIN: + Random random = RandomUtil.RANDOM; + List<Weapon<?>> weapons = GTMGuns.getInstance().getWeaponManager().getRegisteredWeapons().stream() + .filter(weapon -> !(weapon instanceof Dildo) && !(weapon instanceof GoldMinigun)).collect(Collectors.toList()); + + Weapon<?> randomWeapon = weapons.get(random.nextInt(weapons.size())); + if (randomWeapon == null) break; + + WeaponSkin randomSkin = null; + + if(randomWeapon.getWeaponSkins() != null && randomWeapon.getWeaponSkins().length > 1) { + short[] commonSkins = { + 5, 7 + }; + + short[] rareSkins = { + 2, 6 + }; + + if (this.displayName.equals("weapon_skin_common")) { + randomSkin = GTM.getWeaponSkinManager().getWeaponSkinFromIdentifier(randomWeapon, commonSkins[random.nextInt(commonSkins.length)]); + } + else if (this.displayName.equals("weapon_skin_rare")) { + randomSkin = GTM.getWeaponSkinManager().getWeaponSkinFromIdentifier(randomWeapon, rareSkins[random.nextInt(rareSkins.length)]); + } + + if (randomSkin == null) { + break; + } + + this.item = GTM.getWeaponSkinManager().createSkinItem(randomWeapon, randomSkin); + } + break; + + case ARMOR_UPGRADE: + this.item = Utils.createItem(Material.LEATHER, "&e&l" + this.armorUpgrade.getDisplayName() + " Upgrade &a&lBUY&f: &a&l$" + this.armorUpgrade.getPrice()); + default: + break; + } + if (hideDurability) { + ItemMeta itemMeta = this.item.getItemMeta(); + itemMeta.spigot().setUnbreakable(true); + itemMeta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE); + this.item.setItemMeta(itemMeta); + } + if(stackable) + this.item = ItemStackUtil.makeStackable(item,64); + if (item != null) + item.setAmount(amount); + return this.item == null ? new ItemStack(Material.STONE) : this.item.clone(); + } + + public String getWeaponOrVehicleOrDrug() { + return this.weaponOrVecicleOrDrug; + } + + public String getDisplayName() { + if (this.displayName != null) + return this.displayName; + String name = (this.item.hasItemMeta() && this.item.getItemMeta().hasDisplayName()) ? this.item.getItemMeta().getDisplayName() + : this.item.getType().name(); + String amnt = this.item.getAmount() > 1 ? " &7x &a" + this.item.getAmount() : ""; + return name + amnt; + } + + public void setDisplayName(String s) { + this.displayName = s; + } + + public double getSellPrice() { + return this.sellPrice; + } + + public double getBuyPrice() { + return this.buyPrice; + } + + public void setSellPrice(double i) { + this.sellPrice = i; + } + + public boolean canSell() { + return this.sellPrice > 0; + } + + public boolean canBuy() { + return this.buyPrice > 0; + } + + public ItemType getType() { + return this.type; + } + + public AmmoType getAmmoType() { + return this.ammoType; + } + + public ArmorUpgrade getArmorUpgrade() { + return this.armorUpgrade; + } + + public boolean getHideDurability() { + return this.hideDurability; + } + + public enum ItemType { + ITEMSTACK, WEAPON, VEHICLE, AMMO, ARMOR_UPGRADE, DRUG, SKIN + } + +} \ No newline at end of file diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/items/GameItemCommand.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/items/GameItemCommand.java new file mode 100644 index 0000000..df52826 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/items/GameItemCommand.java @@ -0,0 +1,526 @@ +package net.grandtheftmc.gtm.items; + +import java.util.Iterator; +import java.util.List; +import java.util.Optional; + +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import com.j0ach1mmall3.wastedvehicles.api.VehicleProperties; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.drugs.Drug; +import net.grandtheftmc.gtm.drugs.DrugService; +import net.grandtheftmc.gtm.drugs.item.DrugItem; +import net.grandtheftmc.gtm.items.GameItem.ItemType; +import net.grandtheftmc.guns.weapon.Weapon; + +public class GameItemCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command c, String l, String[] args) { + if (!s.hasPermission("command.gameitem")) { + s.sendMessage(Lang.NOPERM.s()); + return true; + } + + boolean consoleGive = false; + if (!(s instanceof Player)) { + if(!(args.length >= 1 && args[0].equalsIgnoreCase("give"))) { + s.sendMessage(Lang.NOTPLAYER.s()); + return true; + } + else consoleGive = true; + } + +// Player player = (Player) s; + if (args.length == 0) { + s.sendMessage(Utils.f("&c/gameitem add <itemName> [displayName]")); + s.sendMessage(Utils.f("&c/gameitem adds <itemName> <sellPrice> [displayName]")); + s.sendMessage(Utils.f("&c/gameitem addweapon <itemName> <weapon> [displayName]")); + s.sendMessage(Utils.f("&c/gameitem addvehicle <itemName> <vehicle> [displayName]")); + s.sendMessage(Utils.f("&c/gameitem addarmorupgrade <itemName> <armorupgrade> [displayName]")); + s.sendMessage(Utils.f("&c/gameitem adddrug <itemName> <drug> [displayName]")); + s.sendMessage(Utils.f("&c/gameitem remove <itemName>")); + s.sendMessage(Utils.f("&c/gameitem displayName <itemName> [displayName]")); + s.sendMessage(Utils.f("&c/gameitem sellprice <itemName> <price>")); + s.sendMessage(Utils.f("&c/gameitem get <itemName> <amount>")); + s.sendMessage(Utils.f("&c/gameitem give <player> <itemName> <amount>")); + s.sendMessage(Utils.f("&c/gameitem list [page]")); + s.sendMessage(Utils.f("&c/gameitem load")); + s.sendMessage(Utils.f("&c/gameitem save")); + return true; + } + ItemManager im = GTM.getItemManager(); + switch (args[0].toLowerCase()) { + case "add": { + if (args.length < 2) { + s.sendMessage(Utils.f("&c/gameitem add <itemName> [displayName]")); + return true; + } + ItemStack item = ((Player) s).getInventory().getItemInMainHand(); + if (item == null) { + ((Player) s).sendMessage(Lang.GAMEITEMS.f("&cYou need to hold an item in your hand!")); + return true; + } + GameItem gi = im.getItem(args[1]); + if (gi != null) { + im.removeItem(gi); + ((Player) s).sendMessage(Lang.GAMEITEMS + .f("&7That item already existed, so it has been deleted and replaced with the new one.")); + } + + String displayName; + if (args.length > 2) { + displayName = args[2]; + for (int i = 3; i < args.length; i++) + displayName += ' ' + args[i]; + } else { + ItemMeta meta = item.getItemMeta(); + displayName = meta == null || meta.getDisplayName() == null ? item.getType().name() : meta.getDisplayName(); + + } + im.addItem(new GameItem(args[1], item, displayName)); + s.sendMessage(Lang.GAMEITEMS + .f("&7You added an item with name &a" + args[1] + "&7 and Display Name " + displayName + "&7!")); + return true; + } + case "adds": { + if (args.length < 3) { + s.sendMessage(Utils.f("&c/gameitem adds <itemName> <sellPrice> [displayName]")); + return true; + } + ItemStack item = ((Player) s).getInventory().getItemInMainHand(); + if (item == null) { + ((Player) s).sendMessage(Lang.GAMEITEMS.f("&cYou need to hold an item in your hand!")); + return true; + } + GameItem gi = im.getItem(args[1]); + if (gi != null) { + im.removeItem(gi); + ((Player) s).sendMessage(Lang.GAMEITEMS + .f("&7That item already existed, so it has been deleted and replaced with the new one.")); + } + double price; + try { + price = Double.parseDouble(args[2]); + } catch (NumberFormatException e) { + s.sendMessage(Lang.GAMEITEMS.f("&7The price must be a number! (double)")); + return true; + } + if (price < 0) { + s.sendMessage(Lang.GAMEITEMS.f("&7The price must be 0 or higher!")); + return true; + + } + String displayName; + if (args.length > 3) { + displayName = args[3]; + for (int i = 4; i < args.length; i++) + displayName = displayName + ' ' + args[i]; + } else { + ItemMeta meta = item.getItemMeta(); + displayName = meta == null || meta.getDisplayName() == null ? item.getType().name() : meta.getDisplayName(); + } + gi = im.addItem(new GameItem(args[1], item, displayName, price)); + s.sendMessage(Lang.GAMEITEMS.f("&7You added an item with name &a" + args[1] + "&7 and sell price &a$&l" + + gi.getSellPrice() + "&7 and Display Name " + displayName + "&7!")); + return true; + } + case "addweapon": { + if (args.length < 3) { + s.sendMessage(Utils.f("&c/gameitem addweapon <itemName> <weapon> [displayName]")); + return true; + } + GameItem gi = im.getItem(args[1]); + if (gi != null) { + im.removeItem(gi); + ((Player) s).sendMessage(Lang.GAMEITEMS + .f("&7That item already existed, so it has been deleted and replaced with the new one.")); + } + Optional<Weapon<?>> w = GTM.getWastedGuns().getWeaponManager().getWeapon(args[2]); + if (w == null || !w.isPresent()) { + s.sendMessage(Lang.GAMEITEMS.f("&7That weapon does not exist!")); + return true; + } + Weapon weapon = w.get(); + if (weapon == null) { + s.sendMessage(Lang.GAMEITEMS.f("&7That weapon does not exist!")); + return true; + } + String displayName; + if (args.length > 3) { + displayName = args[3]; + for (int i = 4; i < args.length; i++) + displayName = displayName + ' ' + args[i]; + } else { + ItemStack item = weapon.getBaseItemStack(); + ItemMeta meta = item.getItemMeta(); + displayName = meta == null || meta.getDisplayName() == null ? item.getType().name() : meta.getDisplayName(); + } + im.addItem(new GameItem(ItemType.WEAPON, args[1], weapon.getName(), displayName)); + s.sendMessage(Lang.GAMEITEMS.f("&7You added an item with name &a" + args[1] + "&7 and weapon &a" + + weapon.getUniqueIdentifier() + "&7 and Display Name " + displayName + "&7!")); + return true; + } + case "adddrug": { + if (args.length < 3) { + s.sendMessage(Utils.f("&c/gameitem addweapon <itemName> <weapon> [displayName]")); + return true; + } + GameItem gi = im.getItem(args[1]); + if (gi != null) { + im.removeItem(gi); + ((Player) s).sendMessage(Lang.GAMEITEMS + .f("&7That item already existed, so it has been deleted and replaced with the new one.")); + } + Optional<Drug> drug = ((DrugService) GTM.getInstance().getDrugManager().getService()).getDrug(args[2]); + if (drug.isPresent()) { + DrugItem drugItem = DrugItem.getByDrug(drug.get()); + if (drugItem == null) { + s.sendMessage(Lang.GAMEITEMS.f("&7That drug does not exist!")); + return true; + } + String displayName; + if (args.length > 3) { + displayName = args[3]; + for (int i = 4; i < args.length; i++) + displayName = displayName + ' ' + args[i]; + } else { + ItemStack item = drugItem.getItemStack(); + ItemMeta meta = item.getItemMeta(); + displayName = meta == null || meta.getDisplayName() == null ? item.getType().name() : meta.getDisplayName(); + } + im.addItem(new GameItem(ItemType.DRUG, args[1], drug.get().getName(), displayName)); + s.sendMessage(Lang.GAMEITEMS.f("&7You added an item with name &a" + args[1] + "&7 and drug &a" + + drug.get().getName() + "&7 and Display Name " + displayName + "&7!")); + } + return true; + } + case "addweapons": { + if (args.length < 4) { + s.sendMessage(Utils.f("&c/gameitem addweapons <itemName> <weapon> <sellPrice> [displayName]")); + return true; + } + GameItem gi = im.getItem(args[1]); + if (gi != null) { + im.removeItem(gi); + ((Player) s).sendMessage(Lang.GAMEITEMS + .f("&7That item already existed, so it has been deleted and replaced with the new one.")); + } + Optional<Weapon<?>> w = GTM.getWastedGuns().getWeaponManager().getWeapon(args[2]); + if (w == null || !w.isPresent()) { + s.sendMessage(Lang.GAMEITEMS.f("&7That weapon does not exist!")); + return true; + } + Weapon weapon = w.get(); + if (weapon == null) { + s.sendMessage(Lang.GAMEITEMS.f("&7That weapon does not exist!")); + return true; + } + double price; + try { + price = Double.parseDouble(args[3]); + } catch (NumberFormatException e) { + s.sendMessage(Lang.GAMEITEMS.f("&7The price must be a number! (double)")); + return true; + } + if (price < 0) { + s.sendMessage(Lang.GAMEITEMS.f("&7The price must be 0 or higher!")); + return true; + } + String displayName; + if (args.length > 4) { + displayName = args[4]; + for (int i = 5; i < args.length; i++) + displayName = displayName + ' ' + args[i]; + } else { + ItemStack item = weapon.getBaseItemStack(); + ItemMeta meta = item.getItemMeta(); + displayName = meta == null || meta.getDisplayName() == null ? item.getType().name() : meta.getDisplayName(); + } + im.addItem(new GameItem(ItemType.WEAPON, args[1], weapon.getName(), displayName, price, 0)); + s.sendMessage(Lang.GAMEITEMS + .f("&7You added an item with name &a" + args[1] + "&7 and weapon &a" + weapon.getName() + + "&7 and sell price &a$&l" + price + "&7 and Display Name " + displayName + "&7!")); + return true; + } + case "addvehicle": { + if (args.length < 3) { + s.sendMessage(Utils.f("&c/gameitem addvehicle <itemName> <vehicle> [displayName]")); + return true; + } + GameItem gi = im.getItem(args[1]); + if (gi != null) { + im.removeItem(gi); + ((Player) s).sendMessage(Lang.GAMEITEMS + .f("&7That item already existed, so it has been deleted and replaced with the new one.")); + } + Optional<VehicleProperties> v = GTM.getWastedVehicles().getVehicle(args[2]); + if (v == null || !v.isPresent()) { + s.sendMessage(Lang.GAMEITEMS.f("&7That vehicle does not exist!")); + return true; + } + VehicleProperties vehicle = v.get(); + if (vehicle == null) { + s.sendMessage(Lang.GAMEITEMS.f("&7That vehicle does not exist!")); + return true; + } + String displayName; + if (args.length > 3) { + displayName = args[3]; + for (int i = 4; i < args.length; i++) + displayName += ' ' + args[i]; + } else { + ItemStack item = vehicle.getItem(); + ItemMeta meta = item.getItemMeta(); + displayName = meta == null || meta.getDisplayName() == null ? item.getType().name() : meta.getDisplayName(); + } + im.addItem(new GameItem(ItemType.VEHICLE, args[1], vehicle.getIdentifier(), displayName)); + s.sendMessage(Lang.GAMEITEMS.f("&7You added an item with name &a" + args[1] + "&7 and vehicle &a" + + vehicle.getIdentifier() + "&7 and Display Name " + displayName + "&7!")); + return true; + } + case "addvehicles": { + if (args.length < 3) { + s.sendMessage(Utils.f("&c/gameitem addweapons <itemName> <vehicle> <sellPrice> [displayName]")); + return true; + } + GameItem gi = im.getItem(args[1]); + if (gi != null) { + im.removeItem(gi); + ((Player) s).sendMessage(Lang.GAMEITEMS + .f("&7That item already existed, so it has been deleted and replaced with the new one.")); + } + Optional<VehicleProperties> v = GTM.getWastedVehicles().getVehicle(args[2]); + if (v == null || !v.isPresent()) { + s.sendMessage(Lang.GAMEITEMS.f("&7That vehicle does not exist!")); + return true; + } + VehicleProperties vehicle = v.get(); + if (vehicle == null) { + s.sendMessage(Lang.GAMEITEMS.f("&7That vehicle does not exist!")); + return true; + } + double price; + try { + price = Double.parseDouble(args[3]); + } catch (NumberFormatException e) { + s.sendMessage(Lang.GAMEITEMS.f("&7The price must be a number! (double)")); + return true; + } + if (price < 0) { + s.sendMessage(Lang.GAMEITEMS.f("&7The price must be 0 or higher!")); + return true; + } + String displayName; + if (args.length > 4) { + displayName = args[4]; + for (int i = 5; i < args.length; i++) + displayName += ' ' + args[i]; + } else { + ItemStack item = vehicle.getItem(); + ItemMeta meta = item.getItemMeta(); + displayName = meta == null || meta.getDisplayName() == null ? item.getType().name() : meta.getDisplayName(); + } + im.addItem(new GameItem(ItemType.VEHICLE, args[1], vehicle.getIdentifier(), displayName, price, 0)); + s.sendMessage(Lang.GAMEITEMS + .f("&7You added an item with name &a" + args[1] + "&7 and vehicle &a" + vehicle.getIdentifier() + + "&7 and sell price &a$&l" + price + "&7 and Display Name " + displayName + "&7!")); + return true; + } + case "addarmorupgrade": { + if (args.length < 3) { + s.sendMessage(Utils.f("&c/gameitem addarmorupgrade <itemName> <armorupgrade> [displayName]")); + return true; + } + GameItem gi = im.getItem(args[1]); + if (gi != null) { + im.removeItem(gi); + ((Player) s).sendMessage(Lang.GAMEITEMS + .f("&7That item already existed, so it has been deleted and replaced with the new one.")); + } + ArmorUpgrade upgrade = ArmorUpgrade.getArmorUpgrade(args[2]); + if (upgrade == null) { + s.sendMessage(Lang.GAMEITEMS.f("&7That vehicle does not exist!")); + return true; + } + String displayName = Utils.f("&b&l" + upgrade.getDisplayName() + " Armor Upgrade: &a" + upgrade.getDisplayName()); + im.addItem(new GameItem(args[1], upgrade, displayName)); + s.sendMessage(Lang.GAMEITEMS.f("&7You added an item with name &a" + args[1] + "&7 and armor upgrade &a" + + upgrade.getDisplayName() + "&7 and Display Name " + displayName + "&7!")); + return true; + } + case "remove": { + if (args.length < 2) { + s.sendMessage(Utils.f("&c/gameitem remove <itemName>")); + return true; + } + GameItem gi = im.getItem(args[1]); + if (gi == null) { + s.sendMessage(Lang.GAMEITEMS.f("&7That GameItem does not exist!")); + return true; + } + im.removeItem(gi); + s.sendMessage(Lang.GAMEITEMS.f("&7GameItem &a" + gi.getName() + "&7 was removed!")); + return true; + } + case "displayname": { + if (args.length < 2) { + s.sendMessage(Utils.f("&c/gameitem displayName <itemName> [displayName]")); + return true; + } + GameItem gi = im.getItem(args[1]); + if (gi == null) { + s.sendMessage(Lang.GAMEITEMS.f("&7That GameItem does not exist!")); + return true; + } + String displayName = args[2]; + for (int i = 3; i < args.length; i++) + displayName = displayName + ' ' + args[i]; + gi.setDisplayName(displayName); + s.sendMessage(Lang.GAMEITEMS.f("&7You set the display name of GameItem &a" + gi.getName() + "&7 to &a" + + gi.getDisplayName() + '!')); + return true; + } + case "sellprice": { + if (args.length < 2) { + s.sendMessage(Utils.f("&c/gameitem sellprice <itemName> <price>")); + return true; + } + GameItem gi = im.getItem(args[1]); + if (gi == null) { + s.sendMessage(Lang.GAMEITEMS.f("&7That GameItem does not exist!")); + return true; + } + double price; + try { + price = Double.parseDouble(args[2]); + } catch (NumberFormatException e) { + s.sendMessage(Lang.GAMEITEMS.f("&7The price must be a number! (double)")); + return true; + } + if (price < 0) { + s.sendMessage(Lang.GAMEITEMS.f("&7The price must be 0 or higher!")); + return true; + + } + gi.setSellPrice(price); + s.sendMessage(Lang.GAMEITEMS.f("&7You set the sell price of GameItem &a" + gi.getName() + "&7 to &a$&l" + + gi.getSellPrice() + '!')); + return true; + } + case "get": { + if (args.length < 2) { + s.sendMessage(Utils.f("&c/gameitem get <itemName> <amount>")); + return true; + } + GameItem gi = im.getItem(args[1]); + if (gi == null) { + s.sendMessage(Lang.GAMEITEMS.f("&7That GameItem does not exist!")); + return true; + } + ItemStack item = gi.getItem(); + if (args.length > 2) + try { + item.setAmount(Integer.parseInt(args[2])); + } catch (NumberFormatException e) { + s.sendMessage(Lang.GAMEITEMS.f("&7The amount must be a number! (integer)")); + return true; + } + ((Player) s).getInventory().addItem(item); + s.sendMessage(Lang.GAMEITEMS.f((args.length > 2 ? "&a" + args[2] + "&7 of " : "") + "&7GameItem &a" + + gi.getName() + "&7 was added to your inventory!")); + return true; + } + case "give": { + if (args.length < 3) { + s.sendMessage(Utils.f("&c/gameitem give <player> <itemName> <amount>")); + return true; + } + Player pl = Bukkit.getPlayer(args[1]); + if (pl == null) { + s.sendMessage(Lang.GAMEITEMS.f("&7That player is not online!")); + return true; + } + GameItem gi = im.getItem(args[2]); + if (gi == null) { + s.sendMessage(Lang.GAMEITEMS.f("&7That GameItem does not exist!")); + return true; + } + ItemStack item = gi.getItem(); + if (args.length > 3) + try { + item.setAmount(Integer.parseInt(args[3])); + } catch (NumberFormatException e) { + s.sendMessage(Lang.GAMEITEMS.f("&7The amount must be a number! (integer)")); + return true; + } + pl.getInventory().addItem(item); + s.sendMessage(Lang.GAMEITEMS.f("&7You gave " + (args.length > 3 ? "&a" + args[3] + "&7 of " : "") + + "GameItem &a" + gi.getName() + "&7 to &a" + pl.getName() + '!')); + return true; + } + case "list": + List<GameItem> items = GTM.getItemManager().getItems(); + int page = 1; + if (args.length > 1) { + try { + page = Integer.parseInt(args[1]); + } catch (NumberFormatException e) { + s.sendMessage(Lang.GAMEITEMS.f("&cThe page must be a number!")); + return true; + } + } + if (page < 1) { + s.sendMessage(Lang.GAMEITEMS.f("&7The page must be a positive number!")); + return true; + } + int pages = items.size() / 6 + 1; + s.sendMessage(Utils.f(" &7&m---------------&7[&a&l Game Items &7Page &a" + page + "&7/&a" + pages + + " &7&m]---------------")); + Iterator<GameItem> it = items.iterator(); + for (int i = 0; i < page * 6; i++) { + if (!it.hasNext()) + return true; + GameItem item = it.next(); + if (i < page * 6 - 6) + continue; + s.sendMessage(Utils.f("&a&l" + item.getType() + "&a " + item.getName() + + " &7| &7Display Name: &r" + item.getDisplayName() + + (item.getSellPrice() >= 0 ? "&7 Sell Price: &a$&l" + item.getSellPrice() : ""))); + } + return true; + case "load": + GTM.getSettings().setItemsConfig(Utils.loadConfig("items")); + GTM.getItemManager().loadItems(); + s.sendMessage(Lang.GAMEITEMS.f("&7Loaded GameItems!")); + return true; + case "save": + GTM.getItemManager().saveItems(); + s.sendMessage(Lang.GAMEITEMS.f("&7Saved GameItems!")); + return true; + default: + s.sendMessage(Utils.f("&c/gameitem add <itemName> [displayName]")); + s.sendMessage(Utils.f("&c/gameitem addweapon <itemName> [displayName]")); + s.sendMessage(Utils.f("&c/gameitem addvehicle <itemName> [displayName]")); + s.sendMessage(Utils.f("&c/gameitem remove <itemName>")); + s.sendMessage(Utils.f("&c/gameitem displayName <itemName> [displayName]")); + s.sendMessage(Utils.f("&c/gameitem sellprice <itemName> <price>")); + s.sendMessage(Utils.f("&c/gameitem get <itemName>")); + s.sendMessage(Utils.f("&c/gameitem give <player> <itemName>")); + s.sendMessage(Utils.f("&c/gameitem list [page]")); + s.sendMessage(Utils.f("&c/gameitem load")); + s.sendMessage(Utils.f("&c/gameitem save")); + return true; + } + } +} \ No newline at end of file diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/items/Head.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/items/Head.java new file mode 100644 index 0000000..ea1a36c --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/items/Head.java @@ -0,0 +1,263 @@ +package net.grandtheftmc.gtm.items; + +import java.util.Objects; +import java.util.UUID; + +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.SkullMeta; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.database.BaseDatabase; +import net.grandtheftmc.core.util.C; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.GTMUtils; +import net.grandtheftmc.gtm.users.GTMUser; +import net.grandtheftmc.gtm.users.GTMUserDAO; + +/** + * Created by Liam on 4/10/2016. + */ +public class Head { + + private final UUID sellerUUID; + private final String sellerName; + private final String head; + private final long expiry; + private boolean done; + private boolean paid; + private boolean gaveHead; + private UUID bidderUUID; + private String bidderName; + private double bid = -1; + + public Head(UUID sellerUUID, String sellerName, String head) { + this.sellerUUID = sellerUUID; + this.sellerName = sellerName; + this.head = head; + this.expiry = System.currentTimeMillis() + 86400000; +// Core.sql.updateAsyncLater("insert into " + Core.name() + "_heads(sellerUUID, sellerName, head, expiry) values ('" + this.sellerUUID + "','" + this.sellerName + "','" + this.head + "'," + this.expiry + ");"); + ServerUtil.runTaskAsync(() -> BaseDatabase.runCustomQuery("insert into " + Core.name() + "_heads(sellerUUID, sellerName, head, expiry) values ('" + this.sellerUUID + "','" + this.sellerName + "','" + this.head + "'," + this.expiry + ");")); + + } + + public Head(UUID sellerUUID, String sellerName, String head, long expiry, boolean done, boolean paid, boolean gaveHead, UUID bidderUUID, String bidderName, double bid) { + this.sellerUUID = sellerUUID; + this.sellerName = sellerName; + this.head = head; + this.expiry = expiry; + this.done = done; + this.paid = paid; + this.gaveHead = gaveHead; + this.bidderUUID = bidderUUID; + this.bidderName = bidderName; + this.bid = bid; + } + + public UUID getSellerUUID() { + return this.sellerUUID; + } + + public String getSellerName() { + return this.sellerName; + } + + public String getHead() { + return this.head; + } + + public long getExpiry() { + return this.expiry; + } + + public UUID getBidderUUID() { + return this.bidderUUID; + } + + public String getBidderName() { + return this.bidderName; + } + + public double getBid() { + return this.bid; + } + + public boolean hasBid() { + return this.bidderUUID != null; + } + + public boolean hasExpired() { + return this.hasBid() ? this.expiry < System.currentTimeMillis() : this.expiry - 82800000 < System.currentTimeMillis(); + } + + public boolean hasExpiredOverAWeekAgo() { + return this.expiry + 604800000 < System.currentTimeMillis(); + } + + public Long getTimeUntilExpiry() { + return this.expiry - System.currentTimeMillis(); + } + + public boolean isDone() { + return this.done; + } + + public boolean isPaid() { + return this.paid; + } + + public boolean gaveHead() { + return this.gaveHead; + } + + public ItemStack getItem() { +// ItemStack i = Utils.createItem(Material.SKULL_ITEM, 3, "&e&l" + this.head + "'s Head", "&7Value: &a$&l" + (this.hasBid() ? "10,000" : this.bid), "&7Sell me in the sewer!"); + ItemStack i = new ItemFactory(Material.SKULL_ITEM, (byte) 3) + .setName(C.YELLOW + C.BOLD + this.head + "'s Head") + .setLore(C.GRAY + "Value: " + C.GREEN + C.BOLD + (this.hasBid() ? "10,000" : this.bid), C.GRAY + "Sell me in the sewer!") + .build(); + + SkullMeta meta = (SkullMeta) i.getItemMeta(); + meta.setOwner(this.head); + i.setItemMeta(meta); + + return i; + } + + public boolean giveHead() { + if (this.gaveHead) return false; + if (!this.hasBid()) { + this.gaveHead = true; + return true; + } + + Player bidder = Bukkit.getPlayer(this.bidderUUID); + if (bidder == null) return false; + + if (bidder.getInventory().firstEmpty() < 0) { + bidder.sendMessage(Lang.HEAD_AUCTION.f("&7The auction for &e&l" + this.head + "'s Head&7 has finished! Please clear a slot in your inventory and wait a few seconds.")); + return false; + } + + bidder.getInventory().addItem(this.getItem()); + bidder.updateInventory(); + bidder.sendMessage(Lang.HEAD_AUCTION.f("&7The auction for &e&l" + this.head + "'s Head&7 has finished! Congratulations on winning the bid.")); + this.gaveHead = true; + return true; + } + + public boolean paySeller() { + if (this.paid) return false; + Player seller = Bukkit.getPlayer(this.sellerUUID); + if (seller == null) + return false; + GTMUser user = GTM.getUserManager().getLoadedUser(seller.getUniqueId()); + if (!this.hasBid()) { + seller.sendMessage(Lang.HEAD_AUCTION.f("&7The auction for &e&l" + this.head + "'s Head&7 has finished with no bids!")); + this.paid = true; + return true; + } + if (this.bid > 10000) + user.addBank(this.bid - 10000); + GTMUtils.updateBoard(seller, user); + seller.sendMessage(Lang.HEAD_AUCTION.f("&7The auction for &e&l" + this.head + "'s Head&7 has finished with &a$&l" + this.bid + "&7! You received &a$&l" + (this.bid - 10000) + "&7 from &a&l" + this.bidderName + "&7!")); + this.paid = true; + return true; + } + + public boolean delete() { + if ((this.done && this.gaveHead && this.paid) || this.hasExpiredOverAWeekAgo()) { +// Core.sql.updateAsyncLater("delete from " + Core.name() + "_heads where sellerUUID='" + this.sellerUUID + "' and head='" + this.head + "' and expiry=" + this.expiry + ';'); + ServerUtil.runTaskAsync(() -> BaseDatabase.runCustomQuery("delete from " + Core.name() + "_heads where sellerUUID='" + this.sellerUUID + "' and head='" + this.head + "' and expiry=" + this.expiry + ';')); + GTM.getShopManager().removeHead(this); + return true; + } + return false; + } + + public void update() { + if (!this.hasExpired()) + return; + boolean update = !this.done; + this.done = true; + if (this.giveHead()) update = true; + if (this.paySeller()) update = true; + if (this.delete()) update = true; + if (update) + this.updateDB(); + } + + + public void updateDB() { +// Core.sql.updateAsyncLater("update " + Core.name() + "_heads set paid=" + this.paid + ", gaveHead=" + this.gaveHead + ", done=" + this.done + ", bidderUUID=" + (this.bidderUUID == null ? null : "'" + this.bidderUUID + '\'') + ",bidderName = '" + +// this.bidderName + "', bid=" + this.bid + " where sellerUUID='" + this.sellerUUID + "' and head='" + this.head + "' and expiry=" + this.expiry + ';'); + ServerUtil.runTaskAsync(() -> BaseDatabase.runCustomQuery("update " + Core.name() + "_heads set paid=" + this.paid + ", gaveHead=" + this.gaveHead + ", done=" + this.done + ", bidderUUID=" + (this.bidderUUID == null ? null : "'" + this.bidderUUID + '\'') + ",bidderName = '" + + this.bidderName + "', bid=" + this.bid + " where sellerUUID='" + this.sellerUUID + "' and head='" + this.head + "' and expiry=" + this.expiry + ';')); + } + + public void returnBidderMoney() { + Player bidder = Bukkit.getPlayer(this.bidderUUID); + if (bidder == null) { +// Core.sql.updateAsyncLater("update " + Core.name() + " set bank=bank+" + this.bid + " where uuid='" + this.bidderUUID + "';"); + final UUID prevBidder = this.bidderUUID; + final double amt = this.bid; + ServerUtil.runTaskAsync(() -> GTMUserDAO.addBank(prevBidder, amt)); + this.bidderName = null; + this.bidderUUID = null; + this.bid = -1; + return; + } + GTMUser user = GTM.getUserManager().getLoadedUser(bidder.getUniqueId()); + user.addBank(this.bid); + GTMUtils.updateBoard(bidder, user); + bidder.sendMessage(Lang.HEAD_AUCTION.f("&7You were outbid for the &e&l" + this.head + "'s Head&7! Your bid of &a$&l" + this.bid + "&7 was returned to your bank account.")); + this.bidderName = null; + this.bidderUUID = null; + this.bid = -1; + } + + public void bid(Player player, GTMUser user, double bid) { + bid = Utils.round(bid); + if (this.hasExpired() || this.done) { + player.sendMessage(Lang.HEAD_AUCTION.f("&7The bidding has expired!")); + return; + } + if (!user.hasMoney(bid)) { + player.sendMessage(Lang.HEAD_AUCTION.f("&7You don't have &c$&l" + bid + "&7!")); + return; + } + + if (this.hasBid()) { + if (this.bid * 1.05 > bid) { + player.sendMessage(Lang.HEAD_AUCTION.f("&7You must bid at least &a&l5%&7 more than the current bid of &a$&l" + this.bid + "&7 (&a$&l" + (this.bid * 1.05) + "&7)!")); + return; + } + this.returnBidderMoney(); + } else if (bid < 10000) { + player.sendMessage(Lang.HEAD_AUCTION.f("&7You must bid at least the starting bid of &a$&l10,000&7!")); + return; + } + this.setBid(player, bid); + user.takeMoney(bid); + GTMUtils.updateBoard(player, user); + player.sendMessage(Lang.HEAD_AUCTION.f("&7You have bid &a$&l" + this.bid + "&7 for &e&l" + this.head + "'s Head&7! Please wait &c&l" + Utils.timeInMillisToText(this.getTimeUntilExpiry()) + "&7 for the auction to end.")); + Player seller = Bukkit.getPlayer(this.sellerUUID); + if (seller != null && !Objects.equals(seller, player)) + seller.sendMessage(Lang.HEAD_AUCTION.f("&a&l" + player.getName() + "&7 has bid &a$&l" + this.bid + "&7 on &e&l" + this.head + "'s Head&7!")); + } + + public void setBid(Player player, double bid) { + this.bidderUUID = player.getUniqueId(); + this.bidderName = player.getName(); + this.bid = bid; + this.updateDB(); + } + + +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/items/ItemManager.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/items/ItemManager.java new file mode 100644 index 0000000..16973d3 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/items/ItemManager.java @@ -0,0 +1,410 @@ +package net.grandtheftmc.gtm.items; + +import com.j0ach1mmall3.jlib.methods.Parsing; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.core.util.State; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.GTMUtils; +import net.grandtheftmc.gtm.items.GameItem.ItemType; +import net.grandtheftmc.gtm.users.CheatCode; +import net.grandtheftmc.gtm.users.GTMRank; +import net.grandtheftmc.gtm.users.GTMUser; +import net.grandtheftmc.gtm.users.JobMode; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +public class ItemManager { + + private List<GameItem> items = new ArrayList<>(); + private List<Kit> kits = new ArrayList<>(); + + public ItemManager() { + this.loadItems(); + this.loadKits(); + } + + public void m(int i) { + Bukkit.broadcastMessage(String.valueOf(i)); + } + + public void m(String s) { + Bukkit.broadcastMessage(s); + } + + public void loadItems() { + this.items = new ArrayList<>(); + YamlConfiguration c = GTM.getSettings().getItemsConfig(); + if (c == null) + return; + for (String name : c.getKeys(false)) { + try { + String displayName = c.getString(name + ".displayName"); + double sellPrice = -1, buyPrice = -1; + boolean hideDurability = false, stackable = false; + if (c.get(name + ".sellPrice") != null) sellPrice = c.getDouble(name + ".sellPrice"); + if (c.get(name + ".buyPrice") != null) buyPrice = c.getDouble(name + ".buyPrice"); + if (c.get(name + ".hideDurability") != null) hideDurability = c.getBoolean(name + ".hideDurability"); + if(c.get(name + ".stackable") !=null) stackable = c.getBoolean(name + ".stackable"); + + if (displayName.equals("weapon_skin_common") || displayName.equals("weapon_skin_common") + || displayName.equals("weapon_skin_common") || displayName.equals("weapon_skin_common")) { + this.items.add(new GameItem(ItemType.SKIN, name, "null", displayName, sellPrice, buyPrice, hideDurability)); + continue; + } + + if (c.get(name + ".weapon") != null) + this.items.add(new GameItem(ItemType.WEAPON, name, c.getString(name + ".weapon"), displayName, sellPrice, buyPrice, hideDurability)); + else if (!Core.getSettings().isSister() && c.get(name + ".drug") != null) + this.items.add(new GameItem(ItemType.DRUG, name, c.getString(name + ".drug"), displayName, sellPrice, buyPrice, hideDurability)); + else if (c.get(name + ".vehicle") != null) + this.items.add(new GameItem(ItemType.VEHICLE, name, c.getString(name + ".vehicle"), displayName, sellPrice, buyPrice, hideDurability)); + else if (c.get(name + ".ammo") != null) + this.items.add(new GameItem(name, Parsing.parseItemStack(c.getString(name + ".item")), + AmmoType.getAmmoType(c.getString(name + ".ammo")), displayName, sellPrice, buyPrice)); + else if (c.get(name + ".armorupgrade") != null) { + ArmorUpgrade upgrade = ArmorUpgrade.getArmorUpgrade(c.getString(name + ".armorupgrade")); + if (upgrade == null) + GTM.error("Error while loading item " + name + ": " + c.getString(name + ".ammo") + " is not a valid ArmorUpgrade!"); + else + this.items.add(new GameItem(name, upgrade, displayName, sellPrice, buyPrice)); + } else if (c.get(name + ".item") != null) + this.items.add(new GameItem(name, Parsing.parseItemStack(c.getString(name + ".item")), displayName, sellPrice, buyPrice, hideDurability, stackable)); + } catch (Exception e) { + GTM.error("Error while loading item " + name + '!'); + e.printStackTrace(); + } + } + } + + public void saveItems() { + YamlConfiguration c = GTM.getSettings().getItemsConfig(); + for (String s : c.getKeys(false)) + c.set(s, null); + for (GameItem item : this.items) { + String name = item.getName(); + c.set(name + ".displayName", item.getDisplayName()); + if (item.getSellPrice() > 0) { + c.set(name + ".sellPrice", item.getSellPrice()); + } + if (item.getBuyPrice() > 0) { + c.set(name + ".buyPrice", item.getBuyPrice()); + } + if (item.getHideDurability()) { + c.set(name + ".hideDurability", item.getHideDurability()); + } + if(item.isStackable()) + c.set(name + ".stackable", item.isStackable()); + if (item.getType() == ItemType.WEAPON) { + c.set(name + ".weapon", item.getWeaponOrVehicleOrDrug()); + } else if (item.getType() == ItemType.DRUG) { + c.set(name + ".drug", item.getWeaponOrVehicleOrDrug()); + } else if (item.getType() == ItemType.VEHICLE) { + c.set(name + ".vehicle", item.getWeaponOrVehicleOrDrug()); + } else if (item.getType() == ItemType.AMMO) { + c.set(name + ".ammo", item.getAmmoType().toString().toLowerCase()); + c.set(name + ".item", Parsing.parseString(item.getItem())); + } else if (item.getType() == ItemType.ARMOR_UPGRADE) { + c.set(name + ".armorupgrade", item.getArmorUpgrade().toString().toLowerCase()); + } else { + c.set(name + ".item", Parsing.parseString(item.getItem())); + } + } + Utils.saveConfig(c, "items"); + } + + public void loadKits() { + YamlConfiguration c = GTM.getSettings().getKitsConfig(); + this.kits = new ArrayList<>(); + for (String name : c.getKeys(false)) { + try { + double cost = 0; + CheatCode code = null; + int delay = 60; + if(c.get(name + ".cheatcode") !=null) + code = CheatCode.valueOf(c.getString(name + ".cheatcode")); + if (c.get(name + ".cost") != null) + cost = c.getDouble(name + ".cost"); + if (c.get(name + ".delay") != null) + delay = c.getInt(name + ".delay"); + List<KitItem> contents = c.getStringList(name + ".contents").stream().map(this::kitItemFromString).collect(Collectors.toList()); + KitItem helmet = this.kitItemFromString(c.getString(name + ".helmet")); + KitItem chestplate = this.kitItemFromString(c.getString(name + ".chestplate")); + KitItem leggings = this.kitItemFromString(c.getString(name + ".leggings")); + KitItem boots = this.kitItemFromString(c.getString(name + ".boots")); + KitItem offHand = this.kitItemFromString(c.getString(name + ".offHand")); + String perm = c.getString(name + ".permission"); + this.kits.add(new Kit(name, cost, delay, contents, helmet, chestplate, leggings, boots, offHand, perm, code)); + } catch (Exception e) { + Core.error("Error while loading kit " + name); + e.printStackTrace(); + } + } + } + + public KitItem kitItemFromString(String s) { + if (s == null) + return null; + String[] a = s.split(":"); + if (a.length == 0) + return null; + GameItem item = this.getItem(a[0]); + try { + return new KitItem(item, a.length > 1 ? Integer.parseInt(a[1]) : 1); + } catch (NumberFormatException e) { + Core.error("Error parsing kititem: " + s); + return null; + } + + } + + public void saveKits() { + YamlConfiguration c = GTM.getSettings().getKitsConfig(); + for (String s : c.getKeys(false)) + c.set(s, null); + for (Kit kit : this.kits) { + String name = kit.getName(); + try { + if (kit.getCost() > 0) + c.set(name + ".cost", kit.getCost()); + if(kit.getCode()!=null) + c.set(name + ".cheatcode", kit.getCode().toString()); + if (kit.getDelay() > 0) + c.set(name + ".delay", kit.getDelay()); + List<String> contents = kit.getContents().stream().map(this::kitItemToString).collect(Collectors.toList()); + c.set(name + ".contents", contents); + c.set(name + ".helmet", this.kitItemToString(kit.getHelmet())); + c.set(name + ".chestplate", this.kitItemToString(kit.getChestPlate())); + c.set(name + ".leggings", this.kitItemToString(kit.getLeggings())); + c.set(name + ".boots", this.kitItemToString(kit.getBoots())); + c.set(name + ".offHand", this.kitItemToString(kit.getOffHand())); + c.set(name + ".permission", kit.getPermission()); + } catch (Exception e) { + Core.error("Error while saving kit " + name); + e.printStackTrace(); + } + } + Utils.saveConfig(c, "kits"); + } + + public String kitItemToString(KitItem item) { + if (item == null || item.getGameItem() == null) + return null; + return item.getGameItem().getName() + (item.getAmount() > 1 ? ":" + item.getAmount() : ""); + } + + public GameItem getItem(String itemName) { + return this.items.stream().filter(item -> item.getName().equalsIgnoreCase(itemName)).findFirst().orElse(null); + + } + + public GameItem getItemFromDisplayName(String itemName) { + return this.items.stream().filter(item -> ChatColor.stripColor(Utils.f(item.getDisplayName())).equalsIgnoreCase(ChatColor.stripColor(Utils.f(itemName)))).findFirst().orElse(null); + } + + public GameItem getItem(ItemStack item) { + if (item != null) + return this.items.stream().filter(g -> { + boolean namesMatch = true; + if(g.getItem().hasItemMeta() && g.getItem().getItemMeta().hasDisplayName() && item.hasItemMeta() && item.getItemMeta().hasDisplayName()) { + if(g.getType() == ItemType.WEAPON && /*g.getItem().getItemMeta().getDisplayName().contains("»") && */g.getItem().getItemMeta().getDisplayName().contains("«")) { + String a = ChatColor.stripColor(g.getItem().getItemMeta().getDisplayName()).split("«")[0]; + String b = ChatColor.stripColor(item.getItemMeta().getDisplayName()).split("«")[0]/*.replace("/0", "")*/; + if(!a.equalsIgnoreCase(b)) { + namesMatch = false; + } + } + } + return g.getItem().getType() == item.getType() && g.getItem().getDurability() == item.getDurability() && namesMatch; + }).findFirst().orElse(null); return null; + } + + public GameItem getSellableItem(ItemStack is, int range) { + return this.items.stream().filter(g -> + g.canSell() && + g.getType() == ItemType.WEAPON && + g.getItem().getType() == is.getType() && + is.getDurability() > g.getItem().getDurability() && + is.getDurability() < g.getItem().getDurability() + range + ).findFirst().orElse(null); + } + + /** + * @param damagableItem if the item can be damaged during normal use, ex. Armor + */ + public GameItem getSellableItem(ItemStack is, boolean damagableItem) { + return this.items.stream().filter(g -> g.canSell() && g.getItem().getType()==is.getType() && (damagableItem || g.getItem().getDurability() == is.getDurability())).findFirst().orElse(null); + } + + public GameItem getSellableItem(ItemStack is) { + return getSellableItem(is, false); + } + + public GameItem getItem(Material material) { + return this.items.stream().filter(g -> g.getItem().getType() == material).findFirst().orElse(null); + } + + public GameItem getItemFromWeapon(String s) { + return this.items.stream().filter(g -> g.getType() == ItemType.WEAPON && g.getWeaponOrVehicleOrDrug().equalsIgnoreCase(s)).findFirst().orElse(null); + } + + public GameItem getItemFromVehicle(String s) { + return this.items.stream().filter(g -> g.getType() == ItemType.VEHICLE && g.getWeaponOrVehicleOrDrug().equalsIgnoreCase(s)).findFirst().orElse(null); + } + + public GameItem getItem(ArmorUpgrade upgrade) { + return this.items.stream().filter(g -> g.getType() == ItemType.ARMOR_UPGRADE && upgrade == g.getArmorUpgrade()).findFirst().orElse(null); + } + + + public List<Kit> getKits() { + return this.kits; + } + + public boolean giveKit(Player player, User user, GTMUser gtmUser, String name) { + if (gtmUser.isArrested()) { + player.sendMessage(Lang.JAIL.f("&7You can't get a kit in jail!")); + return true; + } + Kit kit = this.getKit(name); + if (kit == null) { + player.sendMessage(Utils.f(Lang.KITS.f("&cThat kit does not exist!"))); + return false; + } + if (kit.getPermission() != null && !player.hasPermission(kit.getPermission())) { + player.sendMessage(Lang.KITS.f("&7You don't have permission to use this kit!")); + return false; + } + if(kit.getCode()!=null && gtmUser.getCheatCodeState(kit.getCode()).getState() == State.LOCKED) { + player.sendMessage(Lang.CHEAT_CODES.f("&7You haven't unlocked this cheat code yet!")); + return false; + } + JobMode mode = JobMode.getMode(kit.getName()); + UserRank ur = UserRank.getUserRankOrNull(kit.getName()); + GTMRank rank = GTMRank.getRankOrNull(kit.getName()); + if (ur == null && mode != null && mode != gtmUser.getJobMode()) { + player.sendMessage(Lang.KITS.f("&7You need to be on the " + mode.getColoredNameBold() + + "&7 job to use this kit!")); + return false; + } else if (ur != null && !(ur == user.getUserRank() + || (ur == UserRank.SUPREME && user.getUserRank().isHigherThan(UserRank.SUPREME)))) { + player.sendMessage( + Lang.KITS.f("&7You need to be " + ur.getColoredNameBold() + "&7 to use this kit!")); + return false; + } else if (rank != null && !(rank == GTMRank.HOBO || rank == gtmUser.getRank() + || (rank == GTMRank.CRIMINAL && gtmUser.getRank() != GTMRank.HOBO))) { + player.sendMessage(Lang.KITS.f("&7You need to be rank " + rank.getColoredNameBold() + + "&7 to use this kit!")); + return false; + } + if (kit.getCost() > 0 && !gtmUser.hasMoney(kit.getCost())) { + player.sendMessage( + Lang.KITS.f("&7You do not have the &c$&l" + kit.getCost() + "&7 to pay for this kit!")); + return false; + } + if (!gtmUser.canUseKit(kit.getName())) { + player.sendMessage(Lang.KITS.f("&7You need to wait &c" + + Utils.timeInMillisToText(gtmUser.getKitExpiry(kit.getName()) - System.currentTimeMillis()) + + "&7 to use this kit again!")); + return false; + } + gtmUser.setKitExpiry(kit.getName(), kit.getDelay()); + if (kit.getCost() > 0) { + gtmUser.takeMoney(kit.getCost()); + player.sendMessage(Lang.MONEY_TAKE.toString() + kit.getCost()); + GTMUtils.updateBoard(player, user, gtmUser); + } + player.sendMessage(Lang.KITS.f("&7You received the kit &b" + kit.getName() + "&7!")); + this.giveKitItems(player, gtmUser, kit); + return true; + } + + public void giveKitItems(Player player, GTMUser gtmUser, Kit kit) { + List<ItemStack> items = new ArrayList<>(kit.getItems()); + ItemStack helmet = this.kitItemToItemStack(kit.getHelmet()); + ItemStack chestPlate = this.kitItemToItemStack(kit.getChestPlate()); + ItemStack leggings = this.kitItemToItemStack(kit.getLeggings()); + ItemStack boots = this.kitItemToItemStack(kit.getBoots()); + ItemStack offHand = this.kitItemToItemStack(kit.getOffHand()); + if (helmet != null) + if (player.getInventory().getHelmet() == null) + player.getInventory().setHelmet(helmet); + else + items.add(helmet); + if (chestPlate != null) + if (player.getInventory().getChestplate() == null) + player.getInventory().setChestplate(chestPlate); + else + items.add(chestPlate); + if (leggings != null) + if (player.getInventory().getLeggings() == null) + player.getInventory().setLeggings(leggings); + else + items.add(leggings); + if (boots != null) + if (player.getInventory().getBoots() == null) + player.getInventory().setBoots(boots); + else + items.add(boots); + if (offHand != null) + if (player.getInventory().getItemInOffHand() == null) + player.getInventory().setItemInOffHand(offHand); + else + items.add(offHand); + for (ItemStack stack : new ArrayList<>(items)) { + AmmoType type = AmmoType.getAmmoType(stack.getType(), stack.getDurability()); + if (type != null && !type.isInInventory()) { + gtmUser.addAmmo(type, stack.getAmount()); + player.sendMessage(Lang.AMMO_ADD.f(stack.getAmount() + "&7 " + type.getGameItem().getDisplayName())); + items.remove(stack); + } + } + if (Utils.giveItems(player, Utils.toArray(items))) + player.sendMessage( + Utils.f(Lang.KITS + "&cYour inventory was full so some items were dropped on the ground!")); + } + + public ItemStack kitItemToItemStack(KitItem item) { + if (item == null || item.getGameItem() == null) + return null; + ItemStack i = item.getGameItem().getItem(); + i.setAmount(item.getAmount()); + return i; + } + + public Kit getKit(String name) { + return this.kits.stream().filter(kit -> kit.getName().equalsIgnoreCase(name)).findFirst().orElse(null); + } + + public GameItem addItem(GameItem gameItem) { + this.items.add(gameItem); + return gameItem; + } + + public void removeItem(GameItem gi) { + this.items.remove(gi); + + } + + public void addKit(Kit kit) { + this.kits.add(kit); + } + + public List<GameItem> getItems() { + return this.items; + } + + +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/items/Kit.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/items/Kit.java new file mode 100644 index 0000000..31f73ea --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/items/Kit.java @@ -0,0 +1,163 @@ +package net.grandtheftmc.gtm.items; + +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.gtm.users.CheatCode; +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; + +import java.util.ArrayList; +import java.util.List; + +public class Kit { + + private String name; + private double cost; + private int delay; + private List<KitItem> contents; + private KitItem helmet; + private KitItem chestPlate; + private KitItem leggings; + private KitItem boots; + private KitItem offHand; + private CheatCode code; + + private String permission; + + public Kit(String name, double cost, int delay, List<KitItem> contents, KitItem helmet, KitItem chestPlate, + KitItem leggings, KitItem boots, KitItem offHand, String permission, CheatCode code) { + this.name = name; + this.cost = cost; + this.delay = delay; + this.contents = contents; + this.helmet = helmet; + this.chestPlate = chestPlate; + this.leggings = leggings; + this.boots = boots; + this.offHand = offHand; + this.permission = permission; + this.code = code; + } + + public List<ItemStack> getItems() { + List<ItemStack> items = new ArrayList<>(); + for (KitItem item : this.contents) { + GameItem g = item.getItem(); + if (g != null) { + ItemStack i = g.getItem(); + i.setAmount(item.getAmount()); + items.add(i); + } + } + return items; + + } + + public CheatCode getCode() { + return code; + } + + public String getName() { + return this.name; + } + + public void setName(String name) { + this.name = name; + } + + public double getCost() { + return this.cost; + } + + public void setCost(double cost) { + this.cost = cost; + } + + public int getDelay() { + return this.delay; + } + + public void setDelay(int delay) { + this.delay = delay; + } + + public List<KitItem> getContents() { + return this.contents; + } + + public void setContents(List<KitItem> contents) { + this.contents = contents; + } + + public KitItem getHelmet() { + return this.helmet; + } + + public void setHelmet(KitItem helmet) { + this.helmet = helmet; + } + + public KitItem getChestPlate() { + return this.chestPlate; + } + + public void setChestPlate(KitItem chestPlate) { + this.chestPlate = chestPlate; + } + + public KitItem getLeggings() { + return this.leggings; + } + + public void setLeggings(KitItem leggings) { + this.leggings = leggings; + } + + public KitItem getBoots() { + return this.boots; + } + + public void setBoots(KitItem boots) { + this.boots = boots; + } + + public KitItem getOffHand() { + return this.offHand; + } + + public void setOffHand(KitItem offHand) { + this.offHand = offHand; + } + + public String getPermission() { + return this.permission; + } + + public void setPermission(String permission) { + this.permission = permission; + } + + public Material getMaterial() { + KitItem i = this.contents.get(0); + if (i == null) + return Material.STONE; + GameItem g = i.getItem(); + if (g == null) + return Material.STONE; + ItemStack it = g.getItem(); + if (it == null) + return Material.STONE; + return it.getType(); + } + + public String getDisplayName() { + UserRank rank = UserRank.getUserRankOrNull(this.name); + return Utils.f(rank == null ? "&e&l" + String.valueOf(this.name.charAt(0)).toUpperCase() + this.name.substring(1) + : rank.getColoredNameBold()); + } + + public boolean hasArmor() { + return this.helmet != null || this.chestPlate != null || this.leggings != null || this.boots != null; + } + +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/items/KitCommand.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/items/KitCommand.java new file mode 100644 index 0000000..ace2337 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/items/KitCommand.java @@ -0,0 +1,387 @@ +package net.grandtheftmc.gtm.items; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.menus.MenuManager; +import net.grandtheftmc.gtm.GTM; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.PlayerInventory; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +public class KitCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command c, String lbl, String[] args) { + if (s instanceof Player && !s.hasPermission("command.kit")) { + MenuManager.openMenu((Player) s, "kits"); + return true; + } + if (args.length == 0) { + s.sendMessage(Utils.f("&c/kit add <name> <cost> <delay> [permission] ")); + s.sendMessage(Utils.f("&c/kit setcost <name> <cost>")); + s.sendMessage(Utils.f("&c/kit setdelay <name> <delay>")); + s.sendMessage(Utils.f("&c/kit give <player> <kit>")); + s.sendMessage(Utils.f("&c/kit give [r=5] <kit> <x,y,z>")); + s.sendMessage(Utils.f("&c/kit setpermission <name> <permission/none>")); + s.sendMessage(Utils.f("&c/kit set <name>")); + s.sendMessage(Utils.f("&c/kit list [page]")); + s.sendMessage(Utils.f("&c/kit load")); + s.sendMessage(Utils.f("&c/kit save")); + return true; + } + ItemManager im = GTM.getItemManager(); + switch (args[0]) { + case "setcost": { + if (args.length < 3) { + s.sendMessage(Utils.f("&c/kit setcost <name> <cost>")); + return true; + } + String name = args[1]; + Kit kit = im.getKit(name); + if (kit == null) { + s.sendMessage(Lang.KITS.f("&7That kit does not exist!")); + return true; + } + double cost = 0; + try { + cost = Double.parseDouble(args[2]); + } catch (NumberFormatException e) { + s.sendMessage(Lang.KITS.f("&7The cost must be a number!")); + } + kit.setCost(cost); + s.sendMessage( + Lang.KITS.f("&7The cost of kit &a" + kit.getName() + "&7 has been set to &a$&l" + cost + "&7!")); + return true; + } + case "setdelay": { + if (args.length < 3) { + s.sendMessage(Utils.f("&c/kit setdelay <name> <delay>")); + return true; + } + String name = args[1]; + Kit kit = im.getKit(name); + if (kit == null) { + s.sendMessage(Lang.KITS.f("&7That kit does not exist!")); + return true; + } + int delay = 0; + try { + delay = Integer.parseInt(args[2]); + } catch (NumberFormatException e) { + s.sendMessage(Lang.KITS.f("&7The cost must be a number!")); + } + kit.setDelay(delay); + s.sendMessage( + Lang.KITS.f("&7The delay of kit &a" + kit.getName() + "&7 has been set to &a" + delay + "&7!")); + return true; + } + case "setpermission": { + if (args.length < 3) { + s.sendMessage(Utils.f("&c/kit setpermission <name> <permission/none>")); + return true; + } + String name = args[1]; + Kit kit = im.getKit(name); + if (kit == null) { + s.sendMessage(Lang.KITS.f("&7That kit does not exist!")); + return true; + } + kit.setPermission("none".equalsIgnoreCase(args[2]) ? null : args[2]); + s.sendMessage( + Lang.KITS.f("&7The delay of kit &a" + kit.getName() + "&7 has been set to &a" + args[2] + "&7!")); + return true; + } + case "set": { + if (!(s instanceof Player)) { + s.sendMessage(Lang.NOTPLAYER.s()); + return true; + } + Player player = (Player)s; + if (args.length < 2) { + s.sendMessage(Utils.f("&c/kit set <name>")); + return true; + } + String name = args[1]; + Kit kit = im.getKit(name); + if (kit == null) { + s.sendMessage(Lang.KITS.f("&7That kit does not exist!")); + return true; + } + PlayerInventory inv = player.getInventory(); + List<KitItem> contents = new ArrayList<>(); + for (int i = 0; i <= 35; i++) { + ItemStack item = inv.getItem(i); + if (item == null || i == 16 || i == 17) + continue; + GameItem gameItem = im.getItem(item); + if (gameItem == null) { + s.sendMessage(Lang.KITS.f("&7The item in slot &a" + i + + "&7 of your inventory is not registered as a GameItem! Use &a/additem&7 or &a/addweapon&7 to add it!")); + return true; + } + contents.add(new KitItem(gameItem, item.getAmount())); + } + kit.setContents(contents); + if (inv.getHelmet() != null) { + GameItem item = im.getItem(inv.getHelmet()); + if (item == null) { + s.sendMessage(Lang.KITS.f( + "&7The item in your helmet slot is not registered as a GameItem! Use &a/additem&7 or &a/addweapon&7 to add it!")); + return true; + } + kit.setHelmet(new KitItem(item, inv.getHelmet().getAmount())); + } + if (inv.getChestplate() != null) { + GameItem item = im.getItem(inv.getChestplate()); + if (item == null) { + s.sendMessage(Lang.KITS.f( + "&7The item in your chestplate slot is not registered as a GameItem! Use &a/additem&7 or &a/addweapon&7 to add it!")); + return true; + } + kit.setChestPlate(new KitItem(item, inv.getChestplate().getAmount())); + } + if (inv.getLeggings() != null) { + GameItem item = im.getItem(inv.getLeggings()); + if (item == null) { + s.sendMessage(Lang.KITS.f( + "&7The item in your leggings slot is not registered as a GameItem! Use &a/additem&7 or &a/addweapon&7 to add it!")); + return true; + } + kit.setLeggings(new KitItem(item, inv.getLeggings().getAmount())); + } + if (inv.getBoots() != null) { + GameItem item = im.getItem(inv.getBoots()); + if (item == null) { + s.sendMessage(Lang.KITS.f( + "&7The item in your boots slot is not registered as a GameItem! Use &a/additem&7 or &a/addweapon&7 to add it!")); + return true; + } + kit.setBoots(new KitItem(item, inv.getBoots().getAmount())); + } + if (inv.getItemInOffHand() != null && inv.getItemInOffHand().getType() != Material.AIR) { + GameItem item = im.getItem(inv.getItemInOffHand()); + if (item == null) { + s.sendMessage(Lang.KITS.f( + "&7The item in your offhand item slot is not registered as a GameItem! Use &a/additem&7 or &a/addweapon&7 to add it!")); + return true; + } + kit.setOffHand(new KitItem(item, inv.getItemInOffHand().getAmount())); + } + s.sendMessage( + Lang.KITS.f("&7You set the contents, armor and offhand item for kit &a" + kit.getName() + "&7!")); + return true; + } + case "add": { + if (!(s instanceof Player)) { + s.sendMessage(Lang.NOTPLAYER.s()); + return true; + } + Player player = (Player)s; + if (args.length < 4) { + s.sendMessage(Utils.f("&c/kit add <name> <cost> <delay> [permission]")); + return true; + } + String name = args[1]; + Kit kit = im.getKit(name); + if (kit != null) { + s.sendMessage(Lang.KITS.f("&7A kit with that names already exists!")); + return true; + } + double cost = 0; + int delay = 0; + try { + cost = Double.parseDouble(args[2]); + delay = Integer.parseInt(args[3]); + } catch (NumberFormatException e) { + s.sendMessage(Lang.KITS.f("&7The cost/delay must be a number!")); + } + String permission = args.length > 4 ? args[4] : null; + PlayerInventory inv = player.getInventory(); + List<KitItem> contents = new ArrayList<>(); + for (int i = 0; i <= 35; i++) { + ItemStack item = inv.getItem(i); + if (item == null || i == 16 || i == 17) + continue; + GameItem gameItem = im.getItem(item); + if (gameItem == null) { + s.sendMessage(Lang.KITS.f("&7The item in slot &a" + i + + "&7 of your inventory is not registered as a GameItem! Use &a/additem&7 or &a/addweapon&7 to add it!")); + return true; + } + contents.add(new KitItem(gameItem, item.getAmount())); + } + KitItem helmet = null; + KitItem chestPlate = null; + KitItem leggings = null; + KitItem boots = null; + KitItem offHand = null; + if (inv.getHelmet() != null) { + GameItem item = im.getItem(inv.getHelmet()); + if (item == null) { + s.sendMessage(Lang.KITS.f( + "&7The item in your helmet slot is not registered as a GameItem! Use &a/additem&7 or &a/addweapon&7 to add it!")); + return true; + } + helmet = new KitItem(item, inv.getHelmet().getAmount()); + } + if (inv.getChestplate() != null) { + GameItem item = im.getItem(inv.getChestplate()); + if (item == null) { + s.sendMessage(Lang.KITS.f( + "&7The item in your chestplate slot is not registered as a GameItem! Use &a/additem&7 or &a/addweapon&7 to add it!")); + return true; + } + chestPlate = new KitItem(item, inv.getChestplate().getAmount()); + } + if (inv.getLeggings() != null) { + GameItem item = im.getItem(inv.getLeggings()); + if (item == null) { + s.sendMessage(Lang.KITS.f( + "&7The item in your leggings slot is not registered as a GameItem! Use &a/additem&7 or &a/addweapon&7 to add it!")); + return true; + } + leggings = new KitItem(item, inv.getLeggings().getAmount()); + } + if (inv.getBoots() != null) { + GameItem item = im.getItem(inv.getBoots()); + if (item == null) { + s.sendMessage(Lang.KITS.f( + "&7The item in your boots slot is not registered as a GameItem! Use &a/additem&7 or &a/addweapon&7 to add it!")); + return true; + } + boots = new KitItem(item, inv.getBoots().getAmount()); + } + if (inv.getItemInOffHand() != null && inv.getItemInOffHand().getType() != Material.AIR) { + GameItem item = im.getItem(inv.getItemInOffHand()); + if (item == null) { + s.sendMessage(Lang.KITS.f( + "&7The item in your offhand item slot is not registered as a GameItem! Use &a/additem&7 or &a/addweapon&7 to add it!")); + return true; + } + offHand = new KitItem(item, inv.getItemInOffHand().getAmount()); + } + s.sendMessage(Lang.KITS.f("&7Your kit with name &a" + name + "&7 has been added!")); + im.addKit(new Kit(name, cost, delay, contents, helmet, chestPlate, leggings, boots, offHand, permission, null)); + return true; + } + case "list": + List<Kit> kits = GTM.getItemManager().getKits(); + int page = 1; + if (args.length > 1) { + try { + page = Integer.parseInt(args[1]); + } catch (NumberFormatException e) { + s.sendMessage(Lang.KITS.f("&cThe page must be a number!")); + return true; + } + } + if (page < 1) { + s.sendMessage(Lang.KITS.f("&7The page must be a positive number!")); + return true; + } + int pages = kits.size() / 6 + 1; + s.sendMessage(Utils.f( + " &7&m---------------&7[&a&l Kits &7Page &a" + page + "&7/&a" + pages + " &7&m]---------------")); + Iterator<Kit> it = kits.iterator(); + for (int i = 0; i < page * 6; i++) { + if (!it.hasNext()) + return true; + Kit kit = it.next(); + if (i < page * 6 - 6) + continue; + s.sendMessage(Utils + .f(kit.getDisplayName() + "&7 | Cost: &a$&l" + kit.getCost() + "&7 Delay: &a&l" + kit.getDelay() + + (kit.getPermission() == null ? "" : "&7 Permission: &a" + kit.getPermission()))); + } + return true; + case "load": + GTM.getSettings().setKitsConfig(Utils.loadConfig("kits")); + GTM.getItemManager().loadKits(); + s.sendMessage(Lang.KITS.f("&7Loaded Kits!")); + return true; + case "save": + GTM.getItemManager().saveKits(); + s.sendMessage(Lang.KITS.f("&7Saved Kits!")); + return true; + case "give": + if (args.length != 3) { + if(args[1].contains("[r=")) { + Kit kit = im.getKit(args[2]); + if (kit == null) { + s.sendMessage(Lang.KITS.f("&7That kit does not exist!")); + return true; + } + Location point = new Location(Bukkit.getWorld("minesantos"), 0, 0, 0); + int radius; + try { + String[] test = args[1].split("="); + radius = Integer.valueOf(test[1].replace("]", "")); + if(args.length == 4) { + String[] cords = args[3].split(","); + point.setX(Integer.valueOf(cords[0])); + point.setY(Integer.valueOf(cords[1])); + point.setZ(Integer.valueOf(cords[2])); + } else { + s.sendMessage(Utils.f("Error in your syntax")); + s.sendMessage(Utils.f("Example: /kit give [r=5] hobo x,y,z")); + return true; + } + } catch (Exception exception) { + s.sendMessage(Utils.f("Error in your syntax")); + return true; + } + for(LivingEntity entity : point.getWorld().getLivingEntities()) { + if(entity.getLocation().distance(point) > radius) continue; + if(entity.getType() == EntityType.PLAYER) { + Player target = (Player)entity; + im.giveKitItems(target, GTM.getUserManager().getLoadedUser(target.getUniqueId()), kit); + } + } + return true; + } else { + s.sendMessage(Utils.f("&c/kit give <player> <kit>")); + return true; + } + } + String name = args[2]; + Kit kit = im.getKit(name); + if (kit == null) { + s.sendMessage(Lang.KITS.f("&7That kit does not exist!")); + return true; + } + Player target = Bukkit.getPlayer(args[1]); + if(target == null) { + s.sendMessage(Lang.KITS.f("&7Player not found")); + return false; + } + im.giveKitItems(target, GTM.getUserManager().getLoadedUser(target.getUniqueId()), kit); + s.sendMessage(Lang.KITS.f("&7Kit " + kit.getDisplayName() + " &7has been given to " + target.getDisplayName())); + return true; + default: + s.sendMessage(Utils.f("&c/kit add <name> <cost> <delay> [permission]")); + s.sendMessage(Utils.f("&c/kit setcost <name> <cost>")); + s.sendMessage(Utils.f("&c/kit setdelay <name> <delay>")); + s.sendMessage(Utils.f("&c/kit give <player> <kit>")); + s.sendMessage(Utils.f("&c/kit give [r=5] <kit> <x,y,z>")); + s.sendMessage(Utils.f("&c/kit setpermission <name> <permission/none>")); + s.sendMessage(Utils.f("&c/kit set <name>")); + s.sendMessage(Utils.f("&c/kit list [page]")); + s.sendMessage(Utils.f("&c/kit load")); + s.sendMessage(Utils.f("&c/kit save")); + return true; + } + } + +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/items/KitItem.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/items/KitItem.java new file mode 100644 index 0000000..619d30a --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/items/KitItem.java @@ -0,0 +1,37 @@ +package net.grandtheftmc.gtm.items; + +public class KitItem { + + private final GameItem item; + private int amount; + + public KitItem(GameItem item) { + this.item = item; + this.amount = 1; + } + + public KitItem(GameItem item, int amount) { + this.item = item; + this.amount = amount; + } + + public GameItem getItem() { + return this.item; + } + + public GameItem getGameItem() { + return this.item; + } + + public String getDescription() { + return (this.amount > 1 ? "&7" + this.amount + "x " : "") + this.item.getDisplayName(); + } + + public int getAmount() { + return this.amount; + } + + public void setAmount(int amount) { + this.amount = amount; + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/items/ShopCommand.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/items/ShopCommand.java new file mode 100644 index 0000000..5a9a917 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/items/ShopCommand.java @@ -0,0 +1,48 @@ +package net.grandtheftmc.gtm.items; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.gtm.GTM; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class ShopCommand implements CommandExecutor { + + + @Override + public boolean onCommand(CommandSender s, Command c, String l, String[] args) { + if (!s.hasPermission("command.shop")) { + s.sendMessage(Lang.NOPERM.s()); + return true; + } + if (!(s instanceof Player)) { + s.sendMessage(Lang.NOTPLAYER.s()); + return true; + } + if (args.length == 0) { + s.sendMessage(Utils.f("&c/shop armorupgrade <armorupgrade>")); + s.sendMessage(Utils.f("&c/shop <item> <amount> <price>")); + return true; + } + switch (args[0].toLowerCase()) { + case "armorupgrade": + if (args.length != 2) { + s.sendMessage(Utils.f("&c/shop armorupgrade <armorupgrade>")); + return true; + } + GTM.getShopManager().addArmorUpgradeShop((Player) s, args[1]); + return true; + default: + if (args.length != 3) { + s.sendMessage(Utils.f("&c/shop <item> <amount> <price>")); + } + GTM.getShopManager().addShop((Player) s, args[0], Integer.parseInt(args[1]), Double.parseDouble(args[2])); + return true; + } + + } + +} \ No newline at end of file diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/items/ShopManager.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/items/ShopManager.java new file mode 100644 index 0000000..34070e8 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/items/ShopManager.java @@ -0,0 +1,321 @@ +package net.grandtheftmc.gtm.items; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.database.BaseDatabase; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.menus.MenuManager; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.GTMUtils; +import net.grandtheftmc.gtm.users.GTMUser; +import net.grandtheftmc.gtm.users.LockedWeapon; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.inventory.meta.SkullMeta; +import org.bukkit.scheduler.BukkitRunnable; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.*; +import java.util.stream.Collectors; + +public class ShopManager { + + public ShopManager() { + this.load(); + this.startSchedule(); + } + + + private List<Head> heads = new ArrayList<>(); + + private void load() { + new BukkitRunnable() { + @Override + public void run() { + List<Head> heads = new ArrayList<>(); + + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("select * from " + Core.name() + "_heads;")) { + try (ResultSet result = statement.executeQuery()) { + while (result.next()) { + UUID sellerUUID = null; + UUID bidderUUID = null; + + try { + sellerUUID = result.getString("sellerUUID") == null ? null : UUID.fromString(result.getString("sellerUUID")); + bidderUUID = result.getString("bidderUUID") == null ? null : UUID.fromString(result.getString("bidderUUID")); + } catch (Exception ignored) { + } + heads.add(new Head(sellerUUID, result.getString("sellerName"), result.getString("head"), + result.getLong("expiry"), result.getBoolean("done"), + result.getBoolean("paid"), result.getBoolean("gaveHead"), + bidderUUID, result.getString("bidderName"), result.getDouble("bid"))); + } + } + } + } catch (SQLException e) { + e.printStackTrace(); + } + +// try (ResultSet rs = Core.sql.query("select * from " + Core.name() + "_heads;")) { +// while (rs.next()) { +// UUID sellerUUID = null; +// UUID bidderUUID = null; +// try { +// sellerUUID = rs.getString("sellerUUID") == null ? null : UUID.fromString(rs.getString("sellerUUID")); +// bidderUUID = rs.getString("bidderUUID") == null ? null : UUID.fromString(rs.getString("bidderUUID")); +// } catch (Exception ignored) { +// } +// heads.add(new Head(sellerUUID, rs.getString("sellerName"), +// rs.getString("head"), rs.getLong("expiry"), rs.getBoolean("done"), rs.getBoolean("paid"), rs.getBoolean("gaveHead"), bidderUUID, +// rs.getString("bidderName"), rs.getDouble("bid"))); +// } +// rs.close(); +// } catch (SQLException e) { +// e.printStackTrace(); +// } + new BukkitRunnable() { + @Override + public void run() { + GTM.getShopManager().setHeads(heads); + } + }.runTask(GTM.getInstance()); + } + }.runTaskAsynchronously(GTM.getInstance()); + } + + private void startSchedule() { + new BukkitRunnable() { + @Override + public void run() { + new ArrayList<>(GTM.getShopManager().getHeads()).forEach(Head::update); + } + }.runTaskTimer(GTM.getInstance(), 200L, 200L); + } + + + public void setHeads(List<Head> list) { + this.heads = list; + } + + public List<Head> getHeads() { + return this.heads; + } + + public void removeHead(Head head) { + this.heads.remove(head); + } + + public List<Head> getNonExpiredHeads() { + return this.heads.stream().filter(h -> !h.hasExpired()).collect(Collectors.toList()); + } + + public Set<Head> getNonExpiredHeadsByBid() { + HashMap<Head, Double> unsortMap = new HashMap<>(); + this.heads.stream().filter(h -> !h.hasExpired()).collect(Collectors.toList()).forEach(h -> unsortMap.put(h, h.getBid())); + return sort(unsortMap).keySet(); + } + + public static Map<Head, Double> sort(Map<Head, Double> unsortMap) { + List<Map.Entry<Head, Double>> list = new LinkedList<>(unsortMap.entrySet()); + list.sort(Comparator.comparing(Map.Entry::getValue)); + Map<Head, Double> sortedMap = new LinkedHashMap<>(); + for (Map.Entry<Head, Double> entry : list) { + sortedMap.put(entry.getKey(), entry.getValue()); + } + return sortedMap; + } + + public Head getHead(String head) { + return this.heads.stream().filter(h -> h.getHead().equalsIgnoreCase(head)).findFirst().orElse(null); + } + + public Head getHead(String head, long expiry) { + return this.heads.stream().filter(h -> h.getHead().equalsIgnoreCase(head) && h.getExpiry() == expiry).findFirst().orElse(null); + } + + public Head auctionHead(Player seller, GTMUser user) { + ItemStack item = seller.getInventory().getItemInMainHand(); + if (item == null || item.getType() != Material.SKULL_ITEM || item.getDurability() != 3) { + seller.sendMessage(Lang.HEAD_AUCTION.f("&7That's not a player head!")); + return null; + } + + if (item.getAmount() > 1) { + seller.sendMessage(Lang.HEAD_AUCTION.f("&7Please auction 1 head at a time!")); + return null; + } + + SkullMeta meta = (SkullMeta) item.getItemMeta(); + if (meta.getOwner() == null) { + seller.sendMessage(Lang.HEAD_AUCTION.f("&7That's not a player head!")); + return null; + } + + Head head = new Head(seller.getUniqueId(), seller.getName(), meta.getOwner()); + this.heads.add(head); + seller.sendMessage(Lang.HEAD_AUCTION.f("&7You received &a$&l10,000&7 for putting up &e&l" + head.getHead() + "'s Head&7 for auction.")); + user.addBank(10000); + GTMUtils.updateBoard(seller, user); + seller.getInventory().setItemInMainHand(null); + seller.updateInventory(); + return head; + } + + public void buy(Player player, ItemStack i) { + if (i == null || !i.hasItemMeta() || !i.getItemMeta().hasDisplayName()) + return; + String disp = ChatColor.stripColor(i.getItemMeta().getDisplayName()).toLowerCase(); + if (!disp.contains("buy: $")) + return; + disp = disp.replace("buy: $", ""); + String[] array = disp.split(" "); + if (array.length == 1) + return; + int amount = 1; + double buyPrice; + boolean hasAmount = array[0].endsWith("x"); + String itemName = array[hasAmount ? 1 : 0]; + for (int n = hasAmount ? 2 : 1; n < (array.length - 1); n++) + itemName = itemName + ' ' + array[n]; + try { + if (hasAmount) + amount = Integer.parseInt(array[0].replaceAll("x", "")); + buyPrice = Double.parseDouble(array[array.length - 1]); + } catch (NumberFormatException e) { + for (String anArray : array) player.sendMessage(anArray); + player.sendMessage(Utils.f(Lang.SHOP + + "&cThere was an error while parsing the prices for this shop. Please contact a staff member.")); + return; + } + GameItem item = GTM.getItemManager().getItemFromDisplayName(itemName); + GTMUser user = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + if (user.isArrested()) { + player.sendMessage(Lang.JAIL.f("&7You can't buy items in jail!")); + return; + } + if (item.getType() == GameItem.ItemType.WEAPON) { + LockedWeapon l = LockedWeapon.getWeapon(item.getWeaponOrVehicleOrDrug()); + if (l != null && !l.canUseWeapon(user.getRank(), Core.getUserManager().getLoadedUser(player.getUniqueId()).getUserRank())) { + player.sendMessage(Lang.HEY.f("&7You need to rank up to " + l.getGTMRank().getColoredNameBold() + "&7 or donate for " + l.getUserRank().getColoredNameBold() + "&7 at &a&l" + Core.getSettings().getStoreLink() + "&7 to use the " + item.getDisplayName() + "&7!")); + return; + } + } else if (item.getType() == GameItem.ItemType.ARMOR_UPGRADE) { + player.sendMessage(Lang.HEY.f("&7There is an error with this shop. Please contact an administrator.")); + return; + } + if (user.hasMoney(buyPrice)) { + user.takeMoney(buyPrice); + } else { + if (user.hasBank(buyPrice)) { + user.takeBank(buyPrice); + player.sendMessage(Lang.BANK_TAKE.f(String.valueOf(buyPrice))); + } else { + player.sendMessage(Lang.MONEY.f("&7You do not have enough money!")); + return; + } + } + GTMUtils.updateBoard(player, Core.getUserManager().getLoadedUser(player.getUniqueId()), user); + switch (item.getType()) { + case VEHICLE: + user.setActionVehicle(item.getWeaponOrVehicleOrDrug()); + MenuManager.openMenu(player, "vehicleshop"); + return; + case AMMO: + AmmoType type = item.getAmmoType(); + if (type != null) + user.addAmmo(type, amount); + player.sendMessage(Lang.SHOP.f("&7You bought " + (amount > 1 ? "&a&l" + amount + "&7x " : "") + + item.getDisplayName() + "&7 for &a$&l" + buyPrice + "&7!")); + return; + case WEAPON: + case ITEMSTACK: + ItemStack stack = item.getItem(); + stack.setAmount(amount); + Utils.giveItems(player, stack); + player.sendMessage(Lang.SHOP.f("&7You bought " + (amount > 1 ? "&a&l" + amount + "&7x " : "") + + item.getDisplayName() + "&7 for &a$&l" + buyPrice + "&7!")); + break; + default: + break; + } + } + + public void buyArmorUpgrade(Player player, String disp) { + disp = disp.toLowerCase(); + disp = ChatColor.stripColor(disp); + ArmorUpgrade upgrade = ArmorUpgrade.getArmorUpgradeFromDisplayName(disp.split(" upgrade")[0]); + if (upgrade == null) return; + GTMUser user = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + if (!upgrade.canUseUpgrade(user.getRank(), Core.getUserManager().getLoadedUser(player.getUniqueId()).getUserRank())) { + player.sendMessage(Lang.HEY.f("&7You need to rank up to " + upgrade.getGTMRank().getColoredNameBold() + "&7 or donate for " + upgrade.getUserRank().getColoredNameBold() + "&7 at &a&l" + Core.getSettings().getStoreLink() + "&7 to use the &b&l" + upgrade.getDisplayName() + " Armor Upgrade&7!")); + return; + } + ItemStack item = player.getInventory().getItemInMainHand(); + GameItem gameItem = item == null ? null : GTM.getItemManager().getItem(item.getType()); + if (item == null || gameItem == null || !upgrade.canBeUsedOn(gameItem.getName())) { + player.sendMessage(Lang.HEY.f("&7The &b&l" + upgrade.getDisplayName() + " Armor Upgrade&7 can be applied to the following types of items: " + upgrade.getTypesString() + "&7!")); + return; + } + for (Enchantment e : item.getEnchantments().keySet()) + Utils.b(e.getName()); + if (ArmorUpgrade.getArmorUpgrades(item).contains(upgrade)) { + player.sendMessage(Lang.ARMOR_UPGRADE.f("&7That piece of armor already has the &b&l" + upgrade.getDisplayName() + " Armor Upgrade&7!")); + return; + } + if (!user.hasMoney(upgrade.getPrice())) { + player.sendMessage(Lang.ARMOR_UPGRADE.f("&7You can't afford the &b&l" + upgrade.getDisplayName() + " Armor Upgrade&7!")); + return; + } + user.setBuyingArmorUpgrade(upgrade); + MenuManager.openMenu(player, "armorupgrade"); + } + + public void addShop(Player player, String itemName, int amount, double buyPrice) { + GameItem item = GTM.getItemManager().getItem(itemName); + if (item == null) { + player.sendMessage(Lang.SHOP.f("&cThat item does not exist!")); + return; + } + if (buyPrice < 0) { + player.sendMessage(Lang.SHOP.f("&7The price must be 0 or higher!")); + return; + } + ItemStack i = item.getItem().clone(); + ItemMeta meta = i.getItemMeta(); + meta.setDisplayName(Utils.f("&a&l" + amount + "&7x " + item.getDisplayName() + " &a&lBUY&f: &a$&l" + buyPrice)); + i.setItemMeta(meta); + i.setAmount(1); + player.getInventory().addItem(i); + player.sendMessage(Lang.SHOP.f("&7Please add the item into an itemframe to create a shop!")); + } + + public void addArmorUpgradeShop(Player player, String name) { + ArmorUpgrade armorUpgrade = ArmorUpgrade.getArmorUpgrade(name); + if (armorUpgrade == null) { + player.sendMessage(Lang.SHOP.f("&cThat armor upgrade does not exist!")); + return; + } + GameItem item = GTM.getItemManager().getItem(armorUpgrade); + if (item == null) { + player.sendMessage(Lang.SHOP.f("&cThat game item does not exist!")); + return; + } + ItemStack i = item.getItem().clone(); + ItemMeta meta = i.getItemMeta(); + meta.setDisplayName(Utils.f("&b&lArmor Upgrade: &a&l" + armorUpgrade.getDisplayName())); + i.setItemMeta(meta); + i.setAmount(1); + player.getInventory().addItem(i); + player.sendMessage(Lang.SHOP.f("&7Please add the item into an itemframe to create a shop!")); + } + + +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/items/events/ArmorEquipEvent.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/items/events/ArmorEquipEvent.java new file mode 100644 index 0000000..acf31bd --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/items/events/ArmorEquipEvent.java @@ -0,0 +1,148 @@ +package net.grandtheftmc.gtm.items.events; + +import net.grandtheftmc.gtm.items.ArmorType; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.Cancellable; +import org.bukkit.event.HandlerList; +import org.bukkit.event.player.PlayerEvent; +import org.bukkit.inventory.ItemStack; + +/** + * @Author Borlea + * @Github https://github.com/borlea/ + * @Website http://codingforcookies.com/ + * @since Jul 30, 2015 + */ +public final class ArmorEquipEvent extends PlayerEvent implements Cancellable { + + private static final HandlerList handlers = new HandlerList(); + private boolean cancel = false; + private final EquipArmorType armorSlot; + private final EquipMethod equipType; + private final EquipArmorType type; + private ItemStack oldArmorPiece, newArmorPiece; + + /** + * Constructor for the ArmorEquipEvent. + * + * @param player The player who put on / removed the armor. + * @param type The EquipArmorType of the armor added + * @param oldArmorPiece The ItemStack of the armor removed. + * @param newArmorPiece The ItemStack of the armor added. + */ + public ArmorEquipEvent(final Player player, final EquipMethod equipType, final EquipArmorType type, final ItemStack oldArmorPiece, final ItemStack newArmorPiece, EquipArmorType armorSlot){ + super(player); + this.equipType = equipType; + this.armorSlot = armorSlot; + this.type = type; + this.oldArmorPiece = oldArmorPiece; + this.newArmorPiece = newArmorPiece; + } + + /** + * Gets a list of handlers handling this event. + * + * @return A list of handlers handling this event. + */ + public final static HandlerList getHandlerList(){ + return handlers; + } + + /** + * Gets a list of handlers handling this event. + * + * @return A list of handlers handling this event. + */ + @Override + public final HandlerList getHandlers(){ + return handlers; + } + + /** + * Sets if this event should be cancelled. + * + * @param cancel If this event should be cancelled. + */ + public final void setCancelled(final boolean cancel){ + this.cancel = cancel; + } + + /** + * Gets if this event is cancelled. + * + * @return If this event is cancelled + */ + public final boolean isCancelled(){ + return cancel; + } + + public final EquipArmorType getType(){ + return type; + } + + /** + * Returns the last equipped armor piece, could be a piece of armor, {@link Material Air}, or null. + */ + public final ItemStack getOldArmorPiece(){ + return oldArmorPiece; + } + + public final void setOldArmorPiece(final ItemStack oldArmorPiece){ + this.oldArmorPiece = oldArmorPiece; + } + + /** + * Returns the newly equipped armor, could be a piece of armor, {@link Material Air}, or null. + */ + public final ItemStack getNewArmorPiece(){ + return newArmorPiece; + } + + public final void setNewArmorPiece(final ItemStack newArmorPiece){ + this.newArmorPiece = newArmorPiece; + } + + /** + * Gets the method used to either equip or unequip an armor piece. + */ + public EquipMethod getMethod(){ + return equipType; + } + + public EquipArmorType getArmorSlot() { + return this.armorSlot; + } + + public enum EquipMethod{ + /** + * When you shift click an armor piece to equip or unequip + */ + SHIFT_CLICK, + /** + * When you drag and drop the item to equip or unequip + */ + DRAG, + /** + * When you right click an armor piece in the hotbar without the inventory open to equip. + */ + HOTBAR, + /** + * When you press the hotbar slot number while hovering over the armor slot to equip or unequip + */ + HOTBAR_SWAP, + /** + * When in range of a dispenser that shoots an armor piece to equip. + */ + DISPENSER, + /** + * When an armor piece breaks to unequip + */ + BROKE, + /** + * When you die causing all armor to unequip + */ + DEATH, + ; + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/items/events/EquipArmorType.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/items/events/EquipArmorType.java new file mode 100644 index 0000000..e4d9167 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/items/events/EquipArmorType.java @@ -0,0 +1,75 @@ +package net.grandtheftmc.gtm.items.events; + +import net.grandtheftmc.gtm.listeners.ArmorEquip; +import org.bukkit.Color; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.LeatherArmorMeta; + +/** + * Created by Timothy Lampen on 2017-08-11. + */ +public enum EquipArmorType { + + HELMET(39), CHESTPLATE(38), LEGGINGS(37), BOOTS(36), CUSTOM(-1); + + private final int slot; + + EquipArmorType(int slot){ + this.slot = slot; + } + + + public static EquipArmorType fromSlot(int slot){ + for(EquipArmorType t : EquipArmorType.values()) + if(t.getSlot()==slot) + return t; + return null; + } + + /** + * Attempts to match the ArmorType for the specified ItemStack. + * + * @param itemStack The ItemStack to parse the type of. + * @return The parsed ArmorType. (null if none were found.) + */ + public static EquipArmorType matchType(final ItemStack itemStack){ + if(itemStack == null) { return null; } + if(itemStack.getType().toString().contains("LEATHER") && ArmorEquip.isCustomColor(((LeatherArmorMeta)itemStack.getItemMeta()).getColor())) + return CUSTOM; + switch (itemStack.getType()){ + case DIAMOND_SWORD: + return CUSTOM; + case DIAMOND_HELMET: + case GOLD_HELMET: + case IRON_HELMET: + case CHAINMAIL_HELMET: + case LEATHER_HELMET: + return HELMET; + case DIAMOND_CHESTPLATE: + case GOLD_CHESTPLATE: + case IRON_CHESTPLATE: + case CHAINMAIL_CHESTPLATE: + case LEATHER_CHESTPLATE: + return CHESTPLATE; + case DIAMOND_LEGGINGS: + case GOLD_LEGGINGS: + case IRON_LEGGINGS: + case CHAINMAIL_LEGGINGS: + case LEATHER_LEGGINGS: + return LEGGINGS; + case DIAMOND_BOOTS: + case GOLD_BOOTS: + case IRON_BOOTS: + case CHAINMAIL_BOOTS: + case LEATHER_BOOTS: + return BOOTS; + default: + return null; + } + } + + public int getSlot(){ + return slot; + } + +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/ArmorEquip.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/ArmorEquip.java new file mode 100644 index 0000000..755819d --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/ArmorEquip.java @@ -0,0 +1,263 @@ +package net.grandtheftmc.gtm.listeners; + +import java.util.HashSet; + +import org.bukkit.Color; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerPickupItemEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.LeatherArmorMeta; +import org.bukkit.potion.PotionEffect; +import org.bukkit.scheduler.BukkitRunnable; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.items.ArmorUpgrade; +import net.grandtheftmc.gtm.items.events.ArmorEquipEvent; +import net.grandtheftmc.gtm.items.events.EquipArmorType; + +/** + * Created by Timothy Lampen on 7/6/2017. + */ +public class ArmorEquip implements Listener { + + @EventHandler + public void onPickupCustomLeatherArmor(PlayerPickupItemEvent event) { + ItemStack is = event.getItem().getItemStack(); +// new Location("", x,y,z), + if(is.getType().toString().contains("LEATHER") && is.getType() != Material.LEATHER) { + if(!isCustomColor(((LeatherArmorMeta)is.getItemMeta()).getColor())) + return; + event.setCancelled(true); + event.getItem().remove(); + } + } + + @EventHandler(ignoreCancelled = true) + public void onEquipCustom(ArmorEquipEvent event) { + + Player player = event.getPlayer(); + + // only handle custom equips + if(event.getType()!=EquipArmorType.CUSTOM) + return; + + // only handle drag events + if(event.getMethod()!= ArmorEquipEvent.EquipMethod.DRAG && event.getMethod() != ArmorEquipEvent.EquipMethod.DEATH) + return; + + ItemStack newArmor = event.getNewArmorPiece(); + ItemStack oldArmor = event.getOldArmorPiece(); + + ItemStack toSlot = newArmor; + ItemStack toHand = oldArmor; + if(oldArmor.getType().toString().contains("LEATHER")) { + LeatherArmorMeta meta = (LeatherArmorMeta)oldArmor.getItemMeta(); + if(isCustomColor(meta.getColor())) + toHand = getGameItemFromLeather(meta, event.getArmorSlot()); + } + if(newArmor.getType() == Material.DIAMOND_SWORD) { + ItemStack is = null; + switch (event.getArmorSlot()) { + case BOOTS: + is = new ItemStack(Material.LEATHER_BOOTS); + break; + case LEGGINGS: + is = new ItemStack(Material.LEATHER_LEGGINGS); + break; + case CHESTPLATE: + is = new ItemStack(Material.LEATHER_CHESTPLATE); + break; + case HELMET: + is = new ItemStack(Material.LEATHER_HELMET); + break; + } + LeatherArmorMeta meta = (LeatherArmorMeta)is.getItemMeta(); + meta.setColor(getColorFromSwordDurability(newArmor.getDurability())); + is.setItemMeta(meta); + toSlot = is; + } + + if(newArmor.getType() != Material.AIR && event.getArmorSlot()!=getArmorSlotFromSwordDura(newArmor.getDurability()) && event.getMethod() == ArmorEquipEvent.EquipMethod.DRAG) { + event.setCancelled(true); + return; + } + + ItemStack finalToHand = toHand; + ItemStack finalToSlot = toSlot; + + if (event.getMethod() != ArmorEquipEvent.EquipMethod.DEATH){ + event.setCancelled(true); + player.getInventory().setItem(event.getArmorSlot().getSlot(), finalToSlot); + player.setItemOnCursor(finalToHand); + } + + ServerUtil.runTaskLater(() -> { + if(event.getMethod()== ArmorEquipEvent.EquipMethod.DEATH) { + player.getWorld().dropItem(player.getLocation(), finalToHand); + // TODO note: cancelling the event here does nothing, as its ran 2 ticks later...? + event.setCancelled(true); + } + + player.updateInventory(); + }, 2); + } + + @EventHandler + public void onArmorEquip(ArmorEquipEvent event){ + if(event.getType()== EquipArmorType.CUSTOM) + return; + Player player = event.getPlayer(); + player.setMaxHealth(20); + ItemStack is = event.getNewArmorPiece(); + if(is!=null && is.getAmount()>1) { + player.sendMessage(Lang.GTM.f("&7You cannot equip stacked armor!")); + event.setCancelled(true); + return; + } + for (PotionEffect e : player.getActivePotionEffects()) { + player.removePotionEffect(e.getType()); + } + new BukkitRunnable() { + @Override + public void run() { + for(ItemStack is : player.getInventory().getArmorContents()){ + for(ArmorUpgrade upgrade : ArmorUpgrade.getArmorUpgrades(is)){ + if(upgrade==ArmorUpgrade.ENHANCED){ + player.setMaxHealth(player.getMaxHealth()+10); + } + HashSet<PotionEffect> effects = upgrade.getPotionEffects(); + for (PotionEffect effect : effects) { + if(player.hasPotionEffect(effect.getType())){ + int base = player.getPotionEffect(effect.getType()).getAmplifier()==0 ? 1 : player.getPotionEffect(effect.getType()).getAmplifier(); + int effectAmp = effect.getAmplifier()==0 ? 1 : effect.getAmplifier(); + player.removePotionEffect(effect.getType()); + player.addPotionEffect(new PotionEffect(effect.getType(), Integer.MAX_VALUE, base+effectAmp)); + } + else{ + player.addPotionEffect(effect); + } + } + } + } + } + }.runTaskLater(GTM.getInstance(), 1); + } + + /* + * + * + * + * If anyone can suggest a better way to handle this, I am open to suggestions. ~ Tim. + * + * + * */ + + public static boolean isCustomColor(Color c) { + if(c.getRed()==153 && c.getGreen()==0 && c.getBlue()==0)//is santa + return true; + else if(c.getRed()==0 && c.getGreen()==77 && c.getBlue()==26)//is elf + return true; + else if(c.getRed()==102 && c.getGreen()==51 && c.getBlue()==0)// is rudolf + return true; + return false; + } + + private EquipArmorType getArmorSlotFromSwordDura(short durability){ + switch (durability) { + case 1007: + case 1008: + case 1009: + return EquipArmorType.HELMET; + case 1014: + case 1017: + case 1020: + return EquipArmorType.CHESTPLATE; + case 1015: + case 1018: + case 1021: + return EquipArmorType.LEGGINGS; + case 1016: + case 1019: + case 1022: + return EquipArmorType.BOOTS; + } + return null; + } + + /** + * @param m the item meta of the leather armor + * @param type the slot of the item + * @return the diamond sword item that represents the item + */ + private ItemStack getGameItemFromLeather(LeatherArmorMeta m, EquipArmorType type) { + Color c = m.getColor(); + + if(c.getRed()==153 && c.getGreen()==0 && c.getBlue()==0) {//is santa + switch (type) { + case BOOTS: + return GTM.getItemManager().getItem("santaboots").getItem(); + case LEGGINGS: + return GTM.getItemManager().getItem("santapants").getItem(); + case CHESTPLATE: + return GTM.getItemManager().getItem("santatunic").getItem(); + case HELMET: + return GTM.getItemManager().getItem("santahat").getItem(); + } + } + else if(c.getRed()==0 && c.getGreen()==77 && c.getBlue()==26) {//is elf + switch (type) { + case BOOTS: + return GTM.getItemManager().getItem("elfboots").getItem(); + case LEGGINGS: + return GTM.getItemManager().getItem("elfpants").getItem(); + case CHESTPLATE: + return GTM.getItemManager().getItem("elftunic").getItem(); + case HELMET: + return GTM.getItemManager().getItem("elfhat").getItem(); + } + } + else if(c.getRed()==102 && c.getGreen()==51 && c.getBlue()==0) {// is rudolf + switch (type) { + case BOOTS: + return GTM.getItemManager().getItem("rudolfboots").getItem(); + case LEGGINGS: + return GTM.getItemManager().getItem("rudolfpants").getItem(); + case CHESTPLATE: + return GTM.getItemManager().getItem("rudolftunic").getItem(); + case HELMET: + return GTM.getItemManager().getItem("rudolfhat").getItem(); + } + } + return null; + } + + /** + * @param durability the durability of the sword + * @return the color that is associated with the diamond sword 'armor' to set the leather + */ + private Color getColorFromSwordDurability(short durability){ + switch (durability) { + case 1009: + case 1014: + case 1015: + case 1016: + return Color.fromRGB(153, 0, 0);//santa + case 1008: + case 1017: + case 1018: + case 1019: + return Color.fromRGB(0, 77, 26);//elf + case 1007: + case 1020: + case 1021: + case 1022: + return Color.fromRGB(102, 51, 0);//rudolf + } + return Color.BLACK; + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/BreakBlock.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/BreakBlock.java new file mode 100644 index 0000000..4fd7573 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/BreakBlock.java @@ -0,0 +1,25 @@ +package net.grandtheftmc.gtm.listeners; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.gtm.GTM; +import org.bukkit.block.Block; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockBreakEvent; + +public class BreakBlock implements Listener{ + + @EventHandler(ignoreCancelled = true) + public void onBreak(BlockBreakEvent event) { + Block block = event.getBlock(); + switch (block.getType()) { + case CHEST: + if (GTM.getCrateManager().getCrate(block.getLocation()) == null) return; + event.setCancelled(true); + event.getPlayer().sendMessage(Lang.LOOTCRATES.f("&7You can't break this Loot Crate!")); + default: + break; + } + } + +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/ChangeWorld.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/ChangeWorld.java new file mode 100644 index 0000000..6f82741 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/ChangeWorld.java @@ -0,0 +1,28 @@ +package net.grandtheftmc.gtm.listeners; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.gtm.GTM; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerChangedWorldEvent; +import org.bukkit.potion.PotionEffectType; + +import java.util.Objects; + +public class ChangeWorld implements Listener { + + @EventHandler + public void onSwitch(PlayerChangedWorldEvent e) { + Player player = e.getPlayer(); + if (Objects.equals(player.getWorld(), GTM.getWarpManager().getSpawn().getLocation().getWorld())) { + player.setHealth(player.getMaxHealth()); + player.setFireTicks(0); + + if (!Core.getSettings().isSister()) + GTM.getDrugManager().getEffectManager().cancelEffects(player); + } else { + player.removePotionEffect(PotionEffectType.SPEED); + } + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/Chat.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/Chat.java new file mode 100644 index 0000000..a65be4b --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/Chat.java @@ -0,0 +1,773 @@ +package net.grandtheftmc.gtm.listeners; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.Objects; +import java.util.Set; +import java.util.UUID; +import java.util.concurrent.ThreadLocalRandom; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.stream.Collectors; + +import org.bukkit.BanList.Type; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.scheduler.BukkitRunnable; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.menus.MenuManager; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserDAO; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.users.eventtag.EventTag; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.GTMUtils; +import net.grandtheftmc.gtm.gang.Gang; +import net.grandtheftmc.gtm.gang.GangManager; +import net.grandtheftmc.gtm.items.GameItem; +import net.grandtheftmc.gtm.items.Head; +import net.grandtheftmc.gtm.tasks.LotteryPlayer; +import net.grandtheftmc.gtm.users.ChatAction; +import net.grandtheftmc.gtm.users.GTMUser; +import net.grandtheftmc.gtm.users.GTMUserDAO; +import net.grandtheftmc.gtm.users.JobMode; +import net.grandtheftmc.gtm.users.PersonalVehicle; +import net.grandtheftmc.houses.Houses; +import net.grandtheftmc.houses.houses.House; +import net.grandtheftmc.houses.houses.PremiumHouse; +import net.grandtheftmc.houses.users.HouseUser; +import net.md_5.bungee.api.ChatColor; +import net.md_5.bungee.api.chat.ClickEvent; +import net.md_5.bungee.api.chat.ComponentBuilder; + +public class Chat implements Listener { + private final Pattern p = Pattern.compile("-?\\d+"); + + /** The server ids that players can transfer to */ + public static final Set<Integer> TRANSFER_SERVER_ALLOWED = new HashSet<Integer>(Arrays.asList(1,4)); + + /** + * If what you are adding is something where players type a value in chat please use the methods in the GTMUser class seen here: + * - GTMUser#clearCurrentChatAction + * - GTMUser#resetCurrentChatTimer + * - GTMUser#setCurrentChatAction + * <p> + * These will also work if you get two values, but that is the limit currently. + */ + @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) + public void onChat(AsyncPlayerChatEvent e) { + Player player = e.getPlayer(); + UUID uuid = player.getUniqueId(); + String msg = e.getMessage(); + GTMUser user = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + User coreUser = Core.getUserManager().getLoadedUser(player.getUniqueId()); + + if (user == null){ + return; + } + + if (user.getCurrentChatAction() != null) { + e.setCancelled(true); + new BukkitRunnable() { + @Override + public void run() { + switch (user.getCurrentChatAction()) { + + case CONFIRM_TRANSFER_2: { + TransferPayload payload = (TransferPayload) user.getCurrentChatValue(); + + if (msg.equalsIgnoreCase("cancel")) { + user.clearCurrentChatAction(); + player.sendMessage(Lang.GTM.f("&cYou have cancelled the transfer process.")); + return; + } + + int id; + try { + Matcher matcher = p.matcher(msg); + + String found = ""; + while (matcher.find()) + found = matcher.group(); + + id = Integer.parseInt(found); + id = Math.abs(id); + } catch (Exception nfe) { + player.sendMessage(Lang.GTM.f("&cCannot parse &6" + msg + " &cas a number. &6Please enter a number type '&ccancel&6'")); + user.resetCurrentChatActionTimer(payload.getGeneratedNumber()); + return; + } + + if (id != payload.getGeneratedNumber()) { + user.clearCurrentChatAction(); + player.sendMessage(Lang.GTM.f("&cYou have cancelled the transfer process.")); + return; + } + + //the selling of the houses and such must be done BEFORE the player logs off. + HouseUser houseUser = Houses.getUserManager().getLoadedUser(player.getUniqueId()); + + List<House> houses = houseUser.getHouses().stream().map(userHouse -> Houses.getHousesManager().getHouse(userHouse.getId())).collect(Collectors.toList()); + houses.forEach(house -> house.sellHouse(player, user, houseUser)); + + List<PremiumHouse> premiumHouses = new ArrayList<>(houseUser.getPremiumHouses()); + premiumHouses.forEach(premHouse -> premHouse.sell(player, user, houseUser)); + + int vehicleSum = 0; + // if user has vehicles + if (user.getVehicles() != null && user.getVehicles().size() > 0){ + for (PersonalVehicle v : user.getVehicles()){ + GameItem gameItem = GTM.getItemManager().getItemFromVehicle(v.getVehicle()); + if (gameItem != null){ + + // Note: this "price" is the BUY price in MenuListener. + int price = (int) (gameItem.getSellPrice() * 2); + vehicleSum += price; + } + } + } + + // TODO debug remove + Core.log("[Chat][Transfer] Vehicle sum for " + player.getName() + " was " + vehicleSum); + if (vehicleSum >= 0){ + user.addMoney(vehicleSum); + } + + // get unlocked user tags + Set<EventTag> userTags = coreUser.getUnlockedTags(); + + ServerUtil.runTaskLater(() -> { + GTM.getInstance().getTransferingPlayers().add(player.getUniqueId()); + + String playerName = player.getName(); + UUID playerUUID = player.getUniqueId(); + UserRank rank = coreUser.getUserRank(); + + String commandLine = "tempban " + playerName + " 5m Transferring data"; + Core.log("[Chat][TRANSFER][DEBUG] Running command: " + commandLine); + Bukkit.dispatchCommand(Bukkit.getServer().getConsoleSender(), commandLine); + + //player.kickPlayer(Lang.GTM.f("&e&lYour data is being transferred.")); + ServerUtil.runTaskLaterAsync(() -> { + Core.log("[Chat][TRANSFER][DEBUG] Transferring data for " + playerName); + GTMUserDAO.transferData(player.getUniqueId(), payload.getGtmID()); + + if (userTags != null){ + userTags.forEach(ut -> { + + // TODO debug remove + Core.log("[Chat][Transfer] UserTag=" + ut + ", serverKey=GTM" + payload.getGtmID()); + + if (!ut.isGlobal()){ + UserDAO.addPlayerTag(uuid, "GTM" + payload.getGtmID(), ut); + } + }); + } + }, 20 * 5); + + ServerUtil.runTask(() -> { + if (!rank.hasRank(UserRank.HELPOP)){ + Bukkit.getBanList(Type.NAME).addBan(playerName, "TRANSFER TO GTM" + payload.getGtmID(), null, "SERVER"); + } + }); + }, 20 * 3); + ServerUtil.runTaskLater(() -> GTM.getInstance().getTransferingPlayers().remove(player.getUniqueId()), 20 * 60); + + return; + } + + case CONFIRM_TRANSFER: { + + if (msg.equalsIgnoreCase("cancel")) { + user.clearCurrentChatAction(); + player.sendMessage(Lang.GTM.f("&cYou have cancelled the transfer process.")); + return; + } + int id; + try { + id = Integer.parseInt(msg.replace("GTM", "")); + } catch (NumberFormatException nfe) { + player.sendMessage(Lang.GTM.f("&cCannot parse &6" + msg + " &cas a GTM server. &6Please enter a GTM server (ex. GTM1) or type '&ccancel&6'")); + user.resetCurrentChatActionTimer(null); + return; + } + + if (!TRANSFER_SERVER_ALLOWED.contains(id)){ + player.sendMessage(Lang.GTM.f("&cSorry, but you cannot currently transfer to that server. &6Please enter a different GTM server or type '&ccancel&6'")); + user.resetCurrentChatActionTimer(null); + } + + int generatedNumber = ThreadLocalRandom.current().nextInt(10000000, 100000000); + user.setCurrentChatAction(ChatAction.CONFIRM_TRANSFER_2, new TransferPayload(generatedNumber, id)); + player.sendMessage(Lang.GTM.f("&cAre you 100% sure you would like to complete this irreversible transfer? &aIf so please type &6" + generatedNumber + "&a in chat.")); + player.sendMessage(Lang.GTM.f("&cYou will be banned from the network while we transfer the data.")); + return; + } + case BRIBING: { + if ("quit".equalsIgnoreCase(msg)) { + user.clearCurrentChatAction(); + player.sendMessage(Lang.BRIBE.f("&7You canceled bribing the cop who arrested you.")); + return; + } + + if (!user.isArrested()) { + user.clearCurrentChatAction(); + player.sendMessage(Lang.BRIBE.f("&7You are not in jail!")); + return; + } + + if (user.getJailTimer() < 5) { + user.clearCurrentChatAction(); + player.sendMessage(Lang.BRIBE.f("&7You are already being released!")); + return; + } + + Player cop = Bukkit.getPlayer(user.getJailCop()); + GTMUser copUser = cop == null ? null : GTM.getUserManager().getLoadedUser(cop.getUniqueId()); + if (cop == null || copUser.getJobMode() != JobMode.COP) { + player.sendMessage(Lang.BRIBE.f("&7The cop who arrested you (&3&l" + user.getJailCopName() + "&7) is off duty!")); + user.clearCurrentChatAction(); + return; + } + + double amnt; + try { + amnt = Utils.round(Double.parseDouble(msg)); + } catch (NumberFormatException e1) { + player.sendMessage(Utils.f(Lang.BRIBE + "&7Please enter a valid number or type &a\"quit\"&7!")); + user.resetCurrentChatActionTimer(0); + return; + } + + if (amnt < 5000) { + player.sendMessage(Lang.BRIBE.f("&7Bribes must be at least &a$&l5,000!")); + user.resetCurrentChatActionTimer(0); + return; + } + + if (user.getBribe() * 1.05 > amnt) { + player.sendMessage(Lang.BRIBE.f("&7You must raise the bribe by at least &a&l5%&7 of &a$&l" + user.getBribe() + "&7 (&a$&l" + (user.getBribe() * 1.05) + "&7)! Please enter a valid number or type &a\"quit\"&7!")); + user.resetCurrentChatActionTimer(0); + return; + } + + if (!user.hasMoney(amnt)) { + player.sendMessage(Lang.BRIBE.f("&7You don't have &c$&l" + amnt + "&7! Please enter a valid number or type &a\"quit\"&7!")); + user.resetCurrentChatActionTimer(0); + return; + } + + user.clearCurrentChatAction(); + user.setBribe(amnt); + player.sendMessage(Lang.BRIBE.f("&7You sent a bribe offer of &a$&l" + amnt + "&7 to &3&l" + cop.getName() + "&7. You can negotiate with them using &a\"/msg " + cop.getName() + "\"&7!")); + cop.spigot().sendMessage(new ComponentBuilder(Lang.BRIBE.f("&7A bribe offer of &a$&l" + amnt + "&7 was sent to you by &3&l" + player.getName() + "&7!")).append(" [ACCEPT] ").color(ChatColor.GREEN).bold(true).event(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/bribe accept " + player.getName())).append("[DENY]").color(ChatColor.DARK_RED).bold(true).event(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/bribe deny " + player.getName())).create()); + break; + } + + case BIDDING_HEAD: { + if ("quit".equalsIgnoreCase(msg)) { + user.clearCurrentChatAction(); + player.sendMessage(Lang.HEAD_AUCTION.f("&7You canceled bidding.")); + return; + } + Head head = user.getBiddingHead(); + if (head == null) { + user.clearCurrentChatAction(); + player.sendMessage(Lang.HEAD_AUCTION.f("&7You canceled bidding.")); + return; + } + double amnt; + try { + amnt = Utils.round(Double.parseDouble(msg)); + } catch (NumberFormatException e1) { + player.sendMessage( + Utils.f(Lang.HEAD_AUCTION + "&7Please enter a valid number or type &a\"quit\"&7!")); + user.resetCurrentChatActionTimer(0); + return; + } + if (head.hasExpired() || head.isDone()) { + user.clearCurrentChatAction(); + player.sendMessage(Lang.HEAD_AUCTION.f("&7The bidding has expired!")); + return; + } + if (!user.hasMoney(amnt)) { + player.sendMessage(Lang.HEAD_AUCTION.f("&7You don't have &c$&l" + amnt + "&7! &7Please enter a valid number or type &a\"quit\"&7!")); + user.resetCurrentChatActionTimer(0); + return; + } + + if (head.hasBid()) { + if (head.getBid() * 1.05 > amnt) { + player.sendMessage(Lang.HEAD_AUCTION.f("&7You must bid at least &a&l5%&7 more than the current bid of &a$&l" + head.getBid() + "&7 (&a$&l" + (head.getBid() * 1.05) + "&7)!")); + user.resetCurrentChatActionTimer(0); + return; + } + head.returnBidderMoney(); + } else if (amnt < 10000) { + player.sendMessage(Lang.HEAD_AUCTION.f("&7You must bid at least the starting bid of &a$&l10,000&7! &7Please enter a valid number or type &a\"quit\"&7!")); + user.resetCurrentChatActionTimer(0); + return; + } + user.clearCurrentChatAction(); + head.setBid(player, amnt); + user.takeMoney(amnt); + GTMUtils.updateBoard(player, user); + player.sendMessage(Lang.HEAD_AUCTION.f("&7You have bid &a$&l" + head.getBid() + "&7 for &e&l" + head.getHead() + "'s Head&7! Please wait &c&l" + Utils.timeInMillisToText(head.getTimeUntilExpiry()) + "&7 for the auction to end.")); + Player seller = Bukkit.getPlayer(head.getSellerUUID()); + if (seller != null && !Objects.equals(seller, player)) + seller.sendMessage(Lang.HEAD_AUCTION.f("&a&l" + player.getName() + "&7 has bid &a$&l" + head.getBid() + "&7 on &e&l" + head.getHead() + "'s Head&7!")); + break; + } + case PICKING_BOUNTY: { + if ("quit".equalsIgnoreCase(msg)) { + user.clearCurrentChatAction(); + player.sendMessage(Utils.f(Lang.BOUNTIES + "&7You cancelled picking the amount.")); + MenuManager.openMenu(player, "bountiesplace"); + return; + } + int amnt; + try { + amnt = Integer.parseInt(msg); + } catch (NumberFormatException e1) { + player.sendMessage( + Utils.f(Lang.BOUNTIES + "&7Please enter a valid number or type &a\"quit\"&7!")); + user.resetCurrentChatActionTimer(0); + return; + } + if (amnt < 2000) { + player.sendMessage(Utils.f(Lang.BOUNTIES + + "&7The minimum bid is &a$&l2.000&7! Enter a valid number or type &a\"quit\"&7!")); + user.resetCurrentChatActionTimer(0); + return; + } + if (!user.hasMoney(amnt)) { + player.sendMessage(Lang.BOUNTIES.f("&7You don't have &a$&l" + amnt + + "&7 to place this bounty! Enter a valid amount or type &a\"quit\"&7!")); + user.resetCurrentChatActionTimer(0); + return; + } + user.clearCurrentChatAction(); + user.setBountyAmount(amnt); + player.sendMessage(Utils.f(Lang.BOUNTIES + "&7You have chosen the amount &a$&l" + amnt + "&7!")); + MenuManager.openMenu(player, "bountiesplace"); + break; + } + case PICKING_BOUNTY_TARGET: { + if ("quit".equalsIgnoreCase(msg)) { + user.clearCurrentChatAction(); + player.sendMessage(Utils.f(Lang.BOUNTIES + "&7You cancelled choosing the target.")); + MenuManager.openMenu(player, "bountiesplace"); + return; + } + Player target = Bukkit.getPlayer(msg); + if (target == null) { + player.sendMessage(Utils.f(Lang.BOUNTIES + + "&7That player is not online! Please enter a valid player name or type &a\"quit\"&7!")); + user.resetCurrentChatActionTimer(0); + player.sendMessage(Utils.f(Lang.BOUNTIES + "&7You cancelled choosing the target.")); + return; + } + user.clearCurrentChatAction(); + user.setBountyName(target.getName()); + user.setBountyUUID(target.getUniqueId()); + player.sendMessage(Utils.f(Lang.BOUNTIES + "&7You have chosen the player &a" + target.getName() + "&7!")); + MenuManager.openMenu(player, "bountiesplace"); + break; + } + + case BANK_DEPOSITING: { + if ("quit".equalsIgnoreCase(msg)) { + user.setCurrentChatAction(ChatAction.BANK_DEPOSITING, null); + player.sendMessage(Utils.f(Lang.BANK + "&7You cancelled depositing money into your bank!")); + MenuManager.openMenu(player, "bank"); + return; + } + + double amnt; + try { + amnt = Utils.round(Double.parseDouble(msg)); + } catch (NumberFormatException e1) { + player.sendMessage(Utils.f(Lang.BANK + "&7Please enter a valid number or type &a\"quit\"&7!")); + user.resetCurrentChatActionTimer(0); + user.setCurrentChatAction(ChatAction.BANK_DEPOSITING, null); + return; + } + + if (amnt <= 100) { + player.sendMessage(Utils.f(Lang.BANK + + "&7The minimum amount is &a$&l100&7! Enter a valid number or type &a\"quit\"&7!")); + user.resetCurrentChatActionTimer(0); + user.setCurrentChatAction(ChatAction.BANK_DEPOSITING, null); + return; + } + + if (!user.hasMoney(amnt)) { + player.sendMessage(Lang.BANK.f("&7You don't have &a$&l" + amnt + + "&7 to deposit into your bank account! Enter a valid amount or type &a\"quit\"&7!")); + user.resetCurrentChatActionTimer(0); + user.setCurrentChatAction(ChatAction.BANK_DEPOSITING, null); + return; + } + + user.clearCurrentChatAction(); + user.depositToBank(amnt); + GTMUtils.updateBoard(player, user); + player.sendMessage(Utils.f(Lang.BANK + "&7You deposited &a$&l" + amnt + "&7 into your bank account!")); + break; + } + + case BANK_WITHDRAWING: { + if ("quit".equalsIgnoreCase(msg)) { + user.setCurrentChatAction(ChatAction.BANK_WITHDRAWING, null); + player.sendMessage(Utils.f(Lang.BANK + "&7You cancelled withdrawing money from your bank!")); + MenuManager.openMenu(player, "bank"); + return; + } + double amnt; + try { + amnt = Utils.round(Double.parseDouble(msg)); + } catch (NumberFormatException e1) { + player.sendMessage(Utils.f(Lang.BANK + "&7Please enter a valid number or type &a\"quit\"&7!")); + user.resetCurrentChatActionTimer(0); + user.setCurrentChatAction(ChatAction.BANK_WITHDRAWING, null); + return; + } + if (amnt <= 100) { + player.sendMessage(Utils.f(Lang.BANK + + "&7The minimum amount is &a$&l100&7! Enter a valid number or type &a\"quit\"&7!")); + user.resetCurrentChatActionTimer(0); + user.setCurrentChatAction(ChatAction.BANK_WITHDRAWING, null); + return; + } + if (!user.hasBank(amnt)) { + player.sendMessage(Lang.BANK.f("&7You don't have &a$&l" + amnt + + "&7 in your bank account! Enter a valid amount or type &a\"quit\"&7!")); + user.resetCurrentChatActionTimer(0); + user.setCurrentChatAction(ChatAction.BANK_WITHDRAWING, null); + return; + } + user.clearCurrentChatAction(); + user.withdrawFromBank(amnt); + GTMUtils.updateBoard(player, user); + player.sendMessage( + Utils.f(Lang.BANK + "&7You withdrew &a$&l" + amnt + "&7 from your bank account!")); + break; + } + case BANK_TRANSFERRING: { + if ("quit".equalsIgnoreCase(msg)) { + user.clearCurrentChatAction(); + player.sendMessage(Utils.f(Lang.BANK + "&7You cancelled transferring money to another player!")); + MenuManager.openMenu(player, "bank"); + return; + } + if ((double) user.getCurrentChatValue() == 0) { + double amnt; + try { + amnt = Utils.round(Double.parseDouble(msg)); + } catch (NumberFormatException e1) { + player.sendMessage( + Utils.f(Lang.BANK + "&7Please enter a valid number or type &a\"quit\"&7!")); + user.resetCurrentChatActionTimer(0); + return; + } + if (amnt <= 0) { + player.sendMessage(Utils.f(Lang.BANK + + "&7The minimum amount is &a$&l0&7! Enter a valid number or type &a\"quit\"&7!")); + user.resetCurrentChatActionTimer(0); + return; + } + if (!user.hasBank(amnt)) { + player.sendMessage(Lang.BANK.f("&7You don't have &a$&l" + amnt + + "&7 in your bank account! Enter a valid amount or type &a\"quit\"&7!")); + user.resetCurrentChatActionTimer(0); + return; + } + user.resetCurrentChatActionTimer(amnt); + player.sendMessage(Utils + .f(Lang.BANK + "&7Please type the name of the player you would like to transfer &a$&l" + + amnt + "&7 to, or type &a\"quit\"&7!")); + return; + } + double amnt = (double) user.getCurrentChatValue(); + if (!user.hasBank(amnt)) { + player.sendMessage(Lang.BANK.f("&7You don't have &a$&l" + amnt + + "&7 in your bank account! Enter a valid amount or type &a\"quit\"&7!")); + user.resetCurrentChatActionTimer(0); + return; + } + Player target = Bukkit.getPlayer(msg); + if (target == null) { + player.sendMessage(Lang.BANK + .f("&7That player is not online! Enter a valid player name or type &a\"quit\"&7!")); + user.resetCurrentChatActionTimer(amnt); + return; + } + GTMUser targetGtmUser = GTM.getUserManager().getLoadedUser(target.getUniqueId()); + user.takeBank(amnt); + targetGtmUser.addBank(amnt); + user.clearCurrentChatAction(); + User playerUser = Core.getUserManager().getLoadedUser(player.getUniqueId()); + User targetUser = Core.getUserManager().getLoadedUser(target.getUniqueId()); + player.sendMessage(Lang.BANK.f("&7You transferred &a$&l" + amnt + "&7 into &a" + + targetUser.getColoredName(target) + "&7's bank account!")); + target.sendMessage(Lang.BANK.f("&a" + playerUser.getColoredName(player) + "&7 transferred &a$&l" + amnt + + "&7 into your bank account!")); + GTMUtils.updateBoard(player, playerUser, user); + GTMUtils.updateBoard(target, targetUser, targetGtmUser); + break; + } + case BUYING_LOTTERY_TICKETS: { + if ("quit".equalsIgnoreCase(msg)) { + user.clearCurrentChatAction(); + player.sendMessage(Utils.f(Lang.LOTTERY + "&7You cancelled buying lottery tickets!")); + MenuManager.openMenu(player, "lottery"); + return; + } + + int amnt; + try { + amnt = Integer.parseInt(msg); + } catch (NumberFormatException e1) { + player.sendMessage(Utils.f(Lang.LOTTERY + "&7Please enter a valid number or type &a\"quit\"&7!")); + user.resetCurrentChatActionTimer(0); + return; + } + + if (amnt < 1) { + player.sendMessage(Utils.f(Lang.LOTTERY + + "&7The minimum amount is &e&l1&7! Enter a valid number or type &a\"quit\"&7!")); + user.resetCurrentChatActionTimer(0); + return; + } + + if (amnt > 100000) { + player.sendMessage(Utils.f(Lang.LOTTERY + + "&7The maximum amount is &e&l100000&7! Enter a valid number or type &a\"quit\"&7!")); + user.resetCurrentChatActionTimer(0); + return; + } + + if (!user.hasMoney(amnt * 500)) { + player.sendMessage(Lang.LOTTERY.f("&7You don't have &a$&l" + (amnt * 500) + + "&7 to buy &e&l" + amnt + " Tickets&7! Enter a valid amount or type &a\"quit\"&7!")); + user.resetCurrentChatActionTimer(0); + return; + } + + user.clearCurrentChatAction(); + user.takeMoney(amnt * 500); + LotteryPlayer p = GTM.getLottery().getLotteryPlayer(player.getUniqueId()); + if (p == null) { + p = new LotteryPlayer(player.getUniqueId(), player.getName()); + GTM.getLottery().addLotteryPlayer(p); + } + + p.addTickets(amnt); + GTMUtils.updateBoard(player, user); + player.sendMessage(Utils.f(Lang.LOTTERY + "&7You bought &e&l" + amnt + " Tickets&7 for &a$&l" + (amnt * 500) + "&7!")); + break; + } + case GANG_CHAT_ACTION: { + new BukkitRunnable() { + @Override + public void run() { + if ("quit".equalsIgnoreCase(msg)) { + user.clearCurrentChatAction(); + player.sendMessage(Lang.GANGS.f("&7You cancelled this gang action!")); + MenuManager.openMenu(player, "mygang"); + return; + } + + Gang userGang = GangManager.getInstance().getGangByMember(player.getUniqueId()).orElse(null); + + String ac = (String) user.getCurrentChatValue(); + switch (ac) { + case "create": + if (userGang != null) return; + GangManager.getInstance().createGang(player, msg); + user.clearCurrentChatAction(); + return; + case "leader": { + Player target = Bukkit.getPlayer(msg); + if (target == null) { + player.sendMessage(Lang.GANGS.f("&7That player is not online!")); + return; + } + + if (userGang == null) { + player.sendMessage(Lang.GANGS.f("&7You are not in any gang!")); + return; + } + + user.clearCurrentChatAction(); + userGang.setOwner(player, Core.getUserManager().getLoadedUser(uuid), user, target); + return; + } + case "description": { + if (userGang == null) { + player.sendMessage(Lang.GANGS.f("&7You are not in any gang!")); + return; + } + user.clearCurrentChatAction(); + userGang.description(player, Core.getUserManager().getLoadedUser(uuid), user, msg); + return; + } + case "name": { + if (userGang == null) { + player.sendMessage(Lang.GANGS.f("&7You are not in any gang!")); + return; + } + user.clearCurrentChatAction(); + userGang.rename(player, Core.getUserManager().getLoadedUser(uuid), user, msg); + return; + } + case "relation": { + if (userGang == null) { + player.sendMessage(Lang.GANGS.f("&7You are not in any gang!")); + return; + } + + if (!userGang.isViewingGang(uuid)) { + Gang view = GangManager.getInstance().getGang(msg).orElse(null); + if (view == null) { + Lang.GANGS.f("&7That gang does not exist or no one in that gang is online!"); + return; + } + + user.clearCurrentChatAction(); + user.setCurrentChatAction(ChatAction.GANG_CHAT_ACTION, "relation"); + userGang.setViewingGang(uuid, view); + player.sendMessage(Lang.GANGS.f("&7Please type in the relation (ally, neutral or enemy) you would like to set towards gang &a" + msg + "&7, or type &a\"quit\" to quit!")); + return; + } + + Gang viewingGang = userGang.getViewingGang(uuid).orElse(null); + if (viewingGang == null) return; + userGang.setViewingGang(uuid, null); + user.clearCurrentChatAction(); + switch (msg) { + case "ally": + userGang.ally(player, Core.getUserManager().getLoadedUser(uuid), user, viewingGang.getName()); + return; + case "neutral": + userGang.neutral(player, Core.getUserManager().getLoadedUser(uuid), user, viewingGang.getName()); + return; + case "enemy": + userGang.enemy(player, Core.getUserManager().getLoadedUser(uuid), user, viewingGang.getName()); + return; + default: + player.sendMessage(Lang.GANGS.f("&7The relation must be one of ally, neutral or enemy!")); + return; + } + } + case "invite": + if (userGang == null) { + player.sendMessage(Lang.GANGS.f("&7You are not in any gang!")); + return; + } + + Player target = Bukkit.getPlayer(msg); + if (target == null) { + player.sendMessage(Lang.GANGS.f("&7That player is not online!")); + return; + } + + user.clearCurrentChatAction(); + userGang.invite(player, Core.getUserManager().getLoadedUser(uuid), target); + return; + default: + MenuManager.openMenu(player, "mygang"); + player.sendMessage(Lang.GANGS.f("&7That is not a gang action!")); + break; + } + } + }.runTask(GTM.getInstance()); + } + } + } + }.runTask(GTM.getInstance()); + } + + Gang userGang = GangManager.getInstance().getGangByMember(uuid).orElse(null); + + if (userGang != null && userGang.isGangChat(uuid)) { + e.setCancelled(true); + new BukkitRunnable() { + @Override + public void run() { + Player player = Bukkit.getPlayer(uuid); + if (player == null) return; + + GTMUser user = GTM.getUserManager().getLoadedUser(uuid); + userGang.chat(player, Core.getUserManager().getLoadedUser(uuid), user, msg); + Core.log("[GangChat] " + player.getName() + ": " + msg); + return; + + } + }.runTask(GTM.getInstance()); + } + + if (msg.startsWith("@")) { + if (userGang != null) { + String gangMsg = msg.replace("@", ""); + userGang.chat(player, coreUser, user, gangMsg); + e.setCancelled(true); + } + } + /*if (!coreUser.isRank(UserRank.MOD)) { + if (this.recentChats.containsKey(player.getName())) { + if (this.recentChats.get(player.getName()).containsKey(msg)) { + if (this.recentChats.get(player.getName()).get(msg) == 4) { + e.getRecipients().removeAll(e.getRecipients()); + e.getRecipients().add(player); + } else if (this.recentChats.get(player.getName()).get(msg) >= 5) { + e.setCancelled(true); + } + player.sendMessage(Lang.HEY.f("&7Slow down! Spamming can get you in trouble.")); + this.recentChats.get(player.getName()).put(msg, this.recentChats.get(player.getName()).get(msg) + 1); + } else { + this.recentChats.get(player.getName()).put(msg, 1); + } + } else { + this.recentChats.put(player.getName(), new HashMap<>()); + this.recentChats.get(player.getName()).put(msg, 1); + } + new BukkitRunnable() { + @Override + public void run() { + Chat.this.recentChats.get(player.getName()).remove(msg); + } + }.runTaskLater(GTM.getInstance(), 800); + }*/ + } + + private class TransferPayload { + private int generatedNumber; + private int gtmID; + + public TransferPayload(int generatedNumber, int gtmID) { + this.gtmID = gtmID; + this.generatedNumber = generatedNumber; + } + + public int getGeneratedNumber() { + return this.generatedNumber; + } + + public int getGtmID() { + return this.gtmID; + } + } +} + + diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/CommandPreProcess.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/CommandPreProcess.java new file mode 100644 index 0000000..76be5c1 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/CommandPreProcess.java @@ -0,0 +1,44 @@ +package net.grandtheftmc.gtm.listeners; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.users.CheatCode; +import net.grandtheftmc.gtm.users.GTMUser; +import org.bukkit.GameMode; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerCommandPreprocessEvent; + +/** + * Created by Timothy Lampen on 2017-09-25. + */ +public class CommandPreProcess implements Listener { + + @EventHandler + public void onCommand(PlayerCommandPreprocessEvent event){ + Player player = event.getPlayer(); + GTMUser user = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + String msg = event.getMessage().toLowerCase(); + + if(player.getGameMode()== GameMode.SPECTATOR && !Core.getUserManager().getLoadedUser(player.getUniqueId()).isStaff()) { + player.sendMessage(Lang.GTM.f("&7You cannot execute commands while in spectator mode!")); + event.setCancelled(true); + return; + } + + + for(CheatCode code : CheatCode.getCodes()) { + switch (code){ + case FEED: + case STACK: + continue; + } + if(msg.equalsIgnoreCase("/" + code.toString())) { + code.activate(Core.getUserManager().getLoadedUser(player.getUniqueId()), user, player, user.getCheatCodeState(code)); + event.setCancelled(true); + } + } + } +} \ No newline at end of file diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/Craft.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/Craft.java new file mode 100644 index 0000000..6b58117 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/Craft.java @@ -0,0 +1,28 @@ +package net.grandtheftmc.gtm.listeners; + +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.event.Event; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.CraftItemEvent; +import org.bukkit.event.inventory.PrepareItemCraftEvent; + +public class Craft implements Listener { + + @EventHandler + public void craftItem(CraftItemEvent event) { + if (event.getWhoClicked().getType() != EntityType.PLAYER) return; + Player player = (Player) event.getWhoClicked(); + + if (!player.isOp()) { + event.setCancelled(true); + event.setResult(Event.Result.DENY); + player.getInventory().remove(event.getRecipe().getResult()); + } + } + + @EventHandler + public void prepareItemCraft(PrepareItemCraftEvent event) { + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/Damage.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/Damage.java new file mode 100644 index 0000000..0a13588 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/Damage.java @@ -0,0 +1,412 @@ +package net.grandtheftmc.gtm.listeners; + +import java.util.Objects; +import java.util.Optional; +import java.util.concurrent.ThreadLocalRandom; +import java.util.concurrent.TimeUnit; + +import org.bukkit.GameMode; +import org.bukkit.Material; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.ItemFrame; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.entity.Projectile; +import org.bukkit.entity.Tameable; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.entity.EntityRegainHealthEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; + +import com.j0ach1mmall3.wastedguns.api.events.explosives.ExplosionDamageEntityEvent; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.menus.MenuManager; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserManager; +import net.grandtheftmc.core.util.State; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.GTMUtils; +import net.grandtheftmc.gtm.drugs.Drug; +import net.grandtheftmc.gtm.drugs.DrugService; +import net.grandtheftmc.gtm.gang.Gang; +import net.grandtheftmc.gtm.gang.GangManager; +import net.grandtheftmc.gtm.users.CheatCode; +import net.grandtheftmc.gtm.users.GTMUser; +import net.grandtheftmc.gtm.users.GTMUserManager; +import net.grandtheftmc.gtm.users.JobMode; +import net.grandtheftmc.houses.Houses; +import net.grandtheftmc.houses.users.HouseUser; + +public class Damage implements Listener { + + @EventHandler + public void onDamage(EntityDamageEvent e) { + Entity victimEntity = e.getEntity(); + if (!(victimEntity instanceof Player)) + return; + Player victim = (Player) victimEntity; + if (victim.getGameMode() == GameMode.SPECTATOR || victim.getWorld().equals(GTM.getWarpManager().getSpawn().getLocation().getWorld())) { + e.setCancelled(true); + } + else if (e.getCause() == EntityDamageEvent.DamageCause.ENTITY_EXPLOSION || e.getCause() == EntityDamageEvent.DamageCause.BLOCK_EXPLOSION) { + + GTMUser user = GTMUserManager.getInstance().getUser(victim.getUniqueId()).orElse(null); + if (user != null && user.hasTeleportProtection()){ + e.setCancelled(true); + } + } + } + + @EventHandler(priority = EventPriority.MONITOR) + public void onDamageMonitor(EntityDamageEvent e) { + + if (!(e.getEntity() instanceof Player)) { + return; + } + + // grab event variables + Player player = (Player) e.getEntity(); + + // grab gtm user and and user + GTMUser gtmUser = GTMUserManager.getInstance().getUser(player.getUniqueId()).orElse(null); + if (gtmUser != null) { + + User user = UserManager.getInstance().getUser(player.getUniqueId()).orElse(null); + if (user != null) { + + // update tint health + gtmUser.updateTintHealth(player, user); + } + } + } + + /** + * Listens in on explosion damage entity event. + * <p> + * This is called when a launcher weapon or a throwable weapon explodes. + * This is mainly used as a permission listen. + * </p> + * + * @param event - the event + */ + @EventHandler + public void onExplosionDamageEntityEvent(ExplosionDamageEntityEvent event) { + + // if shooter not player, ignore + if (event.getShooter().getType() != EntityType.PLAYER) + return; + + // grab event variables + Player damager = (Player) event.getShooter(); + + // for each entity in event + for (LivingEntity livingEntity : event.getVictims()) { + + // only iterate over players + if (livingEntity.getType() != EntityType.PLAYER){ + continue; + } + + Player victim = (Player) livingEntity; + GTMUser victimGameUser = GTMUserManager.getInstance().getUser(victim.getUniqueId()).orElse(null); + + // if null victim, skip perm check + if (victimGameUser == null){ + continue; + } + + // if victim has protection + if (victimGameUser.hasTeleportProtection()) { + event.getVictims().remove(livingEntity); + continue; + } + + // if shooter has protection + GTMUser damagerGameUser = GTMUserManager.getInstance().getUser(damager.getUniqueId()).orElse(null); + + // if null user, remove victim from being damaged + if (damagerGameUser == null){ + event.getVictims().remove(livingEntity); + continue; + } + + if (damagerGameUser.hasTeleportProtection()) { + event.getVictims().remove(livingEntity); + continue; + } + + // if player is in gang + Optional<Gang> victimOpt = GangManager.getInstance().getGangByMember(victim.getUniqueId()), + damagerOpt = GangManager.getInstance().getGangByMember(damager.getUniqueId()); + if (victimOpt.isPresent() && damagerOpt.isPresent() && !Objects.equals(victim, damager)) { + if (Objects.equals(victimOpt.get(), damagerOpt.get())) { + event.getVictims().remove(livingEntity); + continue; + } + + if (victimOpt.get().isAllied(damagerOpt.get())) { + event.getVictims().remove(livingEntity); + continue; + } + } + + // if they have a job mode + switch (damagerGameUser.getJobMode()) { + case COP: + JobMode mode = victimGameUser.getJobMode(); + if (victimGameUser.getJobMode() == JobMode.COP) { + event.getVictims().remove(livingEntity); + continue; + } + if (mode == JobMode.CRIMINAL && victimGameUser.getWantedLevel() == 0) { + event.getVictims().remove(livingEntity); + continue; + } + case CRIMINAL: + if (victimGameUser.getJobMode() == JobMode.COP && damagerGameUser.getKillCounter() == 0) { + int wantedLevelBefore = damagerGameUser.getWantedLevel(); + damagerGameUser.addKillCounter(1); + int wantedLevelAfter = damagerGameUser.getWantedLevel(); + if (wantedLevelBefore < wantedLevelAfter) + damager.sendMessage(Utils.f(Lang.WANTED + "&7Oh " + (Core.getSettings().isSister() ? "snap" : "shit") + " the cops are onto you! &r" + GTMUtils.getWantedLevelStars(wantedLevelAfter) + " &7(&c" + wantedLevelAfter + "&7) ")); + } + default: + break; + } + } + } + + @EventHandler(ignoreCancelled = true) + public void onDamageByEntity(EntityDamageByEntityEvent e) { + if (e.getDamager() == null) + return; + Entity entity = e.getDamager(); + if (entity == null) + return; + + if (entity instanceof Projectile) + entity = (Entity) ((Projectile) entity).getShooter(); + else if (entity instanceof Tameable) + entity = (Entity) ((Tameable) entity).getOwner(); + + if (!(e.getEntity() instanceof Player && entity instanceof Player)) + return; + Player damager = (Player) entity; + Player victim = (Player) e.getEntity(); + + // if pvp is disabled, cancel event + if (!GTM.getSettings().isPvp()) { + e.setCancelled(true); + return; + } + + GTMUser victimGameUser = GTM.getUserManager().getLoadedUser(victim.getUniqueId()); + User coreVictimUser = Core.getUserManager().getLoadedUser(victim.getUniqueId()); + + // not loaded user should probably still take damage + if (victimGameUser == null){ + return; + } + + if (victimGameUser.hasTeleportProtection()) { + e.setCancelled(true); + long expires = TimeUnit.MILLISECONDS.toSeconds(victimGameUser.getTimeUntilTeleportProtectionExpires()); + if (expires <= 1) { + victimGameUser.setLastTeleport(0); + return; + } + damager.sendMessage(Lang.GTM.f(coreVictimUser.getColoredName(victim) + " &7has teleport protection for &a" + expires + "&7 seconds!")); + return; + } + + GTMUser damagerGameUser = GTM.getUserManager().getLoadedUser(damager.getUniqueId()); + if (damagerGameUser.hasTeleportProtection()) { + e.setCancelled(true); + damagerGameUser.setLastTeleport(0); + if (damagerGameUser.getCheatCodeState(CheatCode.SNEAKY).getState() == State.ON && damager.hasPotionEffect(PotionEffectType.INVISIBILITY)) + damager.removePotionEffect(PotionEffectType.INVISIBILITY); + damager.sendMessage(Lang.COMBATTAG.f("&7Your teleport protection has ended!")); + return; + } + + Optional<Gang> victimOpt = GangManager.getInstance().getGangByMember(victim.getUniqueId()), + damagerOpt = GangManager.getInstance().getGangByMember(damager.getUniqueId()); + if (victimOpt.isPresent() && damagerOpt.isPresent() && !Objects.equals(victim, damager)) { + if (Objects.equals(victimOpt.get(), damagerOpt.get())) { + e.setCancelled(true); + damager.sendMessage(Lang.GANGS.f("&7You can't hurt players that are in your gang!")); + return; + } + + if (victimOpt.get().isAllied(damagerOpt.get()) || damagerOpt.get().isAllied(victimOpt.get())) { + e.setCancelled(true); + damager.sendMessage(Lang.GANGS.f("&7You can't hurt players that are in an allied gang!")); + return; + } + } + + switch (damagerGameUser.getJobMode()) { + case COP: { + JobMode mode = victimGameUser.getJobMode(); + if (victimGameUser.getJobMode() == JobMode.COP) { + e.setCancelled(true); + damager.sendMessage(Utils.f(Lang.HEY + "&cYou can't kill cops!")); + break; + } + if (mode == JobMode.CRIMINAL && victimGameUser.getWantedLevel() == 0) { + damager.sendMessage(Lang.HEY.f("&7You can't damage citizens that are not wanted!")); + e.setCancelled(true); + break; + } + } + case CRIMINAL: + if (victimGameUser.getJobMode() == JobMode.COP && damagerGameUser.getKillCounter() == 0) { + int wantedLevelBefore = damagerGameUser.getWantedLevel(); + damagerGameUser.addKillCounter(1); + int wantedLevelAfter = damagerGameUser.getWantedLevel(); + if (wantedLevelBefore < wantedLevelAfter) + damager.sendMessage(Utils.f(Lang.WANTED + "&7Oh " + (Core.getSettings().isSister() ? "snap" : "shit") + " the cops are onto you! &r" + GTMUtils.getWantedLevelStars(wantedLevelAfter) + " &7(&c" + wantedLevelAfter + "&7) ")); + } + default: + break; + } + + } + + @EventHandler(priority = EventPriority.MONITOR) + public void onDamageByEntityMonitor(EntityDamageByEntityEvent e) { + Entity damager = e.getDamager(); + Entity entity = e.getEntity(); + switch (entity.getType()) { + case PLAYER: { + if (e.isCancelled()) + return; + Player player = (Player) entity; + GTMUser user = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + if (damager == null) + return; + if (damager instanceof Projectile) + damager = (Entity) ((Projectile) damager).getShooter(); + else if (entity instanceof Tameable) + damager = (Entity) ((Tameable) entity).getOwner(); + if (!(damager instanceof Player && entity instanceof Player)) + return; + if (!user.isInCombat()) + player.sendMessage(Utils.f(Lang.COMBATTAG + "&7You are now in combat! Do not log out for 10 seconds!")); + user.setLastTag(System.currentTimeMillis()); + if (GTM.getWarpManager().cancelTaxi(player, user)) + player.sendMessage(Utils.f(Lang.TAXI + "&eYour cab was cancelled!")); + Player dmger = (Player) damager; + GTMUser damagerUser = GTM.getUserManager().getLoadedUser(dmger.getUniqueId()); + if (!damagerUser.isInCombat()) + dmger.sendMessage(Utils.f(Lang.COMBATTAG + "&7You are now in combat! Do not log out for 20 seconds!")); + damagerUser.setLastTag(System.currentTimeMillis()); + if (GTM.getWarpManager().cancelTaxi(dmger, damagerUser)) + player.sendMessage(Utils.f(Lang.TAXI + "&eYour cab was cancelled!")); + if (dmger.getInventory().getItemInMainHand() != null) { + if (!Core.getSettings().isSister()) { + Optional<Drug> heroin = ((DrugService) GTM.getDrugManager().getService()).getDrug("heroin"); + if (heroin.isPresent()) { + if (dmger.getInventory().getItemInMainHand().getDurability() == 5 && dmger.getInventory().getItemInMainHand().getType() == Material.FLINT_AND_STEEL) { + heroin.get().apply(player); + player.damage(2); + player.sendMessage(Lang.DRUGS.f("&7You have been drugged.")); + if (dmger.getInventory().getItemInMainHand().getAmount() == 1) + dmger.getInventory().setItemInMainHand(new ItemStack(Material.AIR)); + else + dmger.getInventory().getItemInMainHand().setAmount(dmger.getInventory().getItemInMainHand().getAmount() - 1); + dmger.updateInventory(); + } + } + } + } + if (damager.getType() == EntityType.SNOWBALL) { + player.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, 20 * 3, 1)); + } + return; + + } + case ITEM_FRAME: + if (!(damager instanceof Player)) + return; + Player player = (Player) damager; + ItemFrame frame = (ItemFrame) entity; + if (Core.getUserManager().getLoadedUser(player.getUniqueId()).hasEditMode()) + return; + ItemStack item = frame.getItem(); + if (item == null) + return; + switch (item.getType()) { + case PAPER: + MenuManager.openMenu(player, "atm"); + return; + default: + GTM.getShopManager().buy(player, frame.getItem()); + return; + } + default: + break; + } + } + + @EventHandler(priority = EventPriority.MONITOR) + public void onHealthChangeMonitor(EntityRegainHealthEvent e) { + + if (!(e.getEntity() instanceof Player)) + return; + + // grab event variables + Player player = (Player) e.getEntity(); + + GTMUser gtmUser = GTMUserManager.getInstance().getUser(player.getUniqueId()).orElse(null); + if (gtmUser != null){ + + User coreUser = UserManager.getInstance().getUser(player.getUniqueId()).orElse(null); + if (coreUser != null){ + gtmUser.updateTintHealth(player, coreUser); + } + } + } + + @EventHandler(priority = EventPriority.MONITOR) + protected final void onPlayerDamage(EntityDamageByEntityEvent event) { + if (!(event.getDamager() instanceof Player)) + return; + Player damager = (Player) event.getDamager(); + HouseUser user = Houses.getUserManager().getLoadedUser(damager.getUniqueId()); + if (user == null) + return; + + if (!event.isCancelled() && (user.isInsideHouse() || user.isInsidePremiumHouse())) { + user.setInsideHouse(-1); + user.setInsidePremiumHouse(-1); + user.updateVisibility(damager); + } + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + protected final void onPlayerDamage(EntityDamageEvent event) { + if (event.getEntity() == null) + return; + if (!(event.getEntity() instanceof Player)) + return; + + if (((Player) event.getEntity()).isBlocking() && ThreadLocalRandom.current().nextBoolean()) { + ((Player) event.getEntity()).damage(event.getDamage() / 2); + } + + if (event.getCause() == EntityDamageEvent.DamageCause.CUSTOM || event.getCause() == EntityDamageEvent.DamageCause.ENTITY_ATTACK) { + ((Player) event.getEntity()).closeInventory(); + ((Player) event.getEntity()).updateInventory(); + } + } +} \ No newline at end of file diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/Death.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/Death.java new file mode 100644 index 0000000..0889eba --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/Death.java @@ -0,0 +1,354 @@ +package net.grandtheftmc.gtm.listeners; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Objects; +import java.util.Optional; +import java.util.UUID; +import java.util.concurrent.ThreadLocalRandom; + +import org.bukkit.Bukkit; +import org.bukkit.GameMode; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; +import org.bukkit.scheduler.BukkitRunnable; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.nametags.NametagManager; +import net.grandtheftmc.core.users.Pref; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserManager; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.GTMUtils; +import net.grandtheftmc.gtm.bounties.Bounty; +import net.grandtheftmc.gtm.bounties.BountyManager; +import net.grandtheftmc.gtm.items.events.ArmorEquipEvent; +import net.grandtheftmc.gtm.items.events.EquipArmorType; +import net.grandtheftmc.gtm.users.CompassTarget; +import net.grandtheftmc.gtm.users.CompassTarget.TargetType; +import net.grandtheftmc.gtm.users.GTMUser; +import net.grandtheftmc.gtm.users.JobMode; +import net.grandtheftmc.guns.weapon.Weapon; + +public class Death implements Listener { + + @EventHandler + public void onDeath(PlayerDeathEvent e) { + Player victim = e.getEntity(); + Player killer = victim.getKiller(); + + if (killer == null){ + + // TODO test remove + Entity last = getLastDamageCauseSource(victim).orElse(null); + if (last != null){ + Core.log("[Death][DEBUG] No killer found for the death of " + victim.getName() + ", last damage entity was=" + last.toString()); + } + } + + boolean brokenDeath = killer == null || victim.getUniqueId().equals(killer.getUniqueId()); + + UUID victimUUID = victim.getUniqueId(); + GTMUser victimGameUser = GTM.getUserManager().getLoadedUser(victimUUID); + User victimUser = Core.getUserManager().getLoadedUser(victimUUID); + + if (!Core.getSettings().isSister()) { + GTM.getDrugManager().getEffectManager().cancelEffects(victim); + } + + int wantedLevel = victimGameUser.getWantedLevel(); + JobMode jobMode = victimGameUser.getJobMode(); + + victimGameUser.addDeaths(1); + victimGameUser.setLastTag(-1); + + Collection<Player> hiddenStaff = new ArrayList<>(); + victim.getNearbyEntities(30, 30, 30).forEach(entity -> { + if (entity.getType() != EntityType.PLAYER) return; + Player target = (Player) entity; + if (target.getGameMode() == GameMode.SPECTATOR) { + hiddenStaff.add(target); + victim.hidePlayer(target); + } + }); + victimGameUser.setDead(true); + if (victimGameUser.getVehicleTaskId() != -1) { + victimGameUser.cancelVehicleTeleport(); + victim.sendMessage(Lang.VEHICLES.f("&7You can't " + (victimGameUser.isSendAway() ? "send away" : "call") + " while you're dead!")); + } + victimGameUser.setKillCounter(0); + victimGameUser.setKillStreak(0); + victimGameUser.unsetCompassTarget(victim, victimUser); + if (GTM.getWarpManager().cancelTaxi(victim, victimGameUser)) + victim.sendMessage(Utils.f(Lang.TAXI + "&eThe taxi was cancelled!")); + victim.setHealth(victim.getMaxHealth()); + victim.spigot().respawn(); + victim.setFireTicks(0); + for (PotionEffect p : victim.getActivePotionEffects()) { + victim.removePotionEffect(p.getType()); + } + victim.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, 180, 0), false); + victim.setGameMode(GameMode.SPECTATOR); + victim.setFlying(true); + victim.setFoodLevel(20); + victim.playSound(victim.getLocation(), Sound.ENTITY_WITHER_SPAWN, 1, 0.5F); + victim.setFlySpeed(0); + GTMUtils.removeBoard(victim); +// new JLibPlayer(victim).setWorldborderTint(0); + + // how much money is available to be "lost", half their money bal + double availableLostMoney = (int) (victimGameUser.getMoney() / 2.0); + + // cannot lose more than this amount + if (availableLostMoney > 50000) { + GTMUtils.log("moneyalert", victim.getName() + " has died and been prevented from dropping " + Utils.formatMoney(availableLostMoney)); + availableLostMoney = 50000; + } + + // how much money should be lost forever (to the server) + double serverTax = 0; + + // is the server taking some of the "lost" money + if (GTM.getSettings().isServerDeathTax()) { + + // get the base tax percent + double taxPercent = GTM.getSettings().getServerDeathBasePercent(); + + // if tax is scaled off rank + if (GTM.getSettings().isServerDeathTaxScaled()) { + taxPercent += victimGameUser.getRank().getServerTax(); + } + + // taxPercent is typically 20.0, so convert to percent, and multiply + serverTax = (int) ((taxPercent / 100.0) * availableLostMoney); + + // if there is a minimum death tax set, i.e. $500 + if (GTM.getSettings().getServerDeathTaxMin() > 0) { + if (serverTax < GTM.getSettings().getServerDeathTaxMin()) { + serverTax = GTM.getSettings().getServerDeathTaxMin(); + } + } + + // if there is a maximum death tax set, i.e. $1000 + // and it's higher than the deathMin + if (GTM.getSettings().getServerDeathTaxMax() > 0 && GTM.getSettings().getServerDeathTaxMax() > GTM.getSettings().getServerDeathTaxMin()) { + if (serverTax > GTM.getSettings().getServerDeathTaxMax()) { + serverTax = GTM.getSettings().getServerDeathTaxMax(); + } + } + } + + // TODO remove + Core.log("[Death][DEBUG] serverTax final=" + serverTax); + + // how much money the user is dropping on floor + double dropMoney = (int) (availableLostMoney - serverTax); + + // TODO remove + Core.log("[Death][DEBUG] init dropMoney=" + dropMoney); + if (dropMoney < 0) { + dropMoney = 0; + } + + // how much money the USER must lose + double finalLostMoney = availableLostMoney; + // how much money the USER "drops" to other players + double finalDropMoney = dropMoney; + + // TODO remove + Core.log("[Death][DEBUG] Player " + victim.getName() + " has died and is attempting to drop $" + finalDropMoney + " because of finalLostMoney=$" + finalLostMoney); + + if (finalLostMoney > 2) + victimGameUser.takeMoney(finalLostMoney); + String money = String.valueOf(finalLostMoney); + + new BukkitRunnable() { + @Override + public void run() { + + Player victim = Bukkit.getPlayer(victimUUID); + if (victim == null) return; + + User victimUser = Core.getUserManager().getLoadedUser(victim.getUniqueId()); + GTMUser victimGameUser = GTM.getUserManager().getLoadedUser(victim.getUniqueId()); + + if (Double.valueOf(money) > 0) { + victim.sendMessage(Utils.f(Lang.MONEY_TAKE.toString() + money)); + } + + // victimGameUser.figureOutSpawn(); + victim.teleport(GTM.getWarpManager().getSpawn().getLocation()); + for (PotionEffect p : victim.getActivePotionEffects()) { + victim.removePotionEffect(p.getType()); + } + hiddenStaff.forEach(target -> { + if (target == null || !target.isOnline()) return; + victim.showPlayer(target); + }); + hiddenStaff.clear(); + victim.setFoodLevel(20); + victim.setGameMode(GameMode.ADVENTURE); + victim.setFlying(false); + victim.setFlySpeed(0.1F); + GTMUtils.giveGameItems(victim); + JobMode job = victimGameUser.getJobMode(); + if (job != JobMode.CRIMINAL) { + victimGameUser.setJobMode(JobMode.CRIMINAL); + UserRank rank = victimUser.getUserRank(); + victim.sendMessage( + Lang.JOBS.f("&7You are no longer a " + job.getColoredNameBold() + "&7! Please wait &c&l" + Utils.timeInMillisToText(victimGameUser.getTimeUntilJobModeSwitch(rank)) + "&7 before switching Job Mode again!" + + (rank.isHigherThan(UserRank.SPONSOR) ? "" : " Buy a rank a &a&l" + Core.getSettings().getStoreLink() + "&7 to be able to switch faster!"))); + NametagManager.updateNametag(victim); + } + GTMUtils.updateBoard(victim, victimGameUser); + victimGameUser.setDead(false); + } + }.runTaskLater(GTM.getInstance(), 150); + + double moneyToDrop = ((killer == null || killer.equals(victim)) ? 0 : Utils.randomNumber(250, 1000)) + finalDropMoney; + new ArrayList<>(e.getDrops()).stream().filter(stack -> stack != null && (stack.getType() == Material.WATCH || stack.getType() == Material.COMPASS || stack.getType() == Material.CHEST)).forEach(e.getDrops()::remove); + + if (!brokenDeath && moneyToDrop > 0){ + e.getDrops().add(Utils.createItem(Material.PAPER, "&a$&l" + moneyToDrop)); + } + + Utils.sendTitle(victim, "&c&lWASTED", brokenDeath ? null : "&7" + GTMUtils.getMessageKilledBy(killer.getName()), 80, 50, 20); + if (killer == null || killer.equals(victim)) { + e.setDeathMessage(Utils.f("&e" + victim.getName() + "&7 " + (victim.getLastDamageCause() instanceof EntityDamageByEntityEvent ? "was killed by &c" + ((EntityDamageByEntityEvent) victim.getLastDamageCause()).getDamager().getCustomName() + "&7!" : "died!"))); + return; + } + Weapon killerWeapon = GTM.getWastedGuns().getWeaponManager().getWeaponInHand(killer); + Utils.b((killerWeapon != null && killerWeapon.getCompactName().equalsIgnoreCase("katana"))+""); + if (Utils.calculateChance(killerWeapon != null && killerWeapon.getCompactName().equalsIgnoreCase("katana") ? 5 : 2)) { + + e.getDrops().add(Utils.setSkullOwner(Utils.createItem(Material.SKULL_ITEM, 3, "&e&l" + victim.getName() + "'s Head", "&7Value: &a$&l10,000", "&7Sell me in the sewer!"), victim.getName())); + killer.sendMessage(Lang.HEY.f(victimUser.getColoredName(victim) + "&7's head dropped on the ground! Sell it at the auction house for a guaranteed &a$&l10,000&7 or more!")); + } + + e.setDeathMessage(Utils.f("&e" + victim.getName() + "&7 was killed by &c" + (brokenDeath ? "Unkown" : killer.getName()) + "&7!")); + UUID killerUUID = killer.getUniqueId(); + GTMUser killerGameUser = GTM.getUserManager().getLoadedUser(killerUUID); + User killerUser = Core.getUserManager().getLoadedUser(killerUUID); + killerGameUser.addKills(1); + killerGameUser.addKillStreak(1); + switch (killerGameUser.getJobMode()) { + case CRIMINAL: + int wantedLevelBefore = killerGameUser.getWantedLevel(); + if (jobMode == JobMode.COP) { + killerGameUser.addKillCounter(2); + } else { + if (ThreadLocalRandom.current().nextInt(1, 4) == 2) { + killerGameUser.addKillCounter(1); + } + } + int wantedLevelAfter = killerGameUser.getWantedLevel(); + killer.sendMessage(Lang.GTM.f("&7You killed &a" + victimUser.getColoredName(victim) + "&7! &a$&l" + + moneyToDrop + "&7 was dropped on the ground!")); + if (wantedLevelBefore < wantedLevelAfter) + killer.sendMessage(Utils.f(Lang.WANTED + "&7Oh " + (Core.getSettings().isSister() ? "snap" : "shit") + " the cops are onto you! &r" + + GTMUtils.getWantedLevelStars(wantedLevelAfter) + "&7 (&c" + wantedLevelAfter + "&7) ")); + break; + case COP: + int copMoney = GTMUtils.getCopMoney(wantedLevel); + if (copMoney > 0) { + killerGameUser.addMoney(copMoney); + killer.sendMessage(Utils.f(Lang.COP_MODE + "&7You were rewarded &a$&l" + copMoney + "&7 for killing &c" + + victimUser.getColoredName(victim) + " &7with &e" + GTMUtils.getWantedLevelStars(wantedLevel) + + " (" + wantedLevel + ")&7!")); + } else + killer.sendMessage(Lang.GTM.f("&7You killed &a" + victimUser.getColoredName(victim) + "&7! &a$&l" + + moneyToDrop + "&7 was dropped on the ground!")); + break; + case HITMAN: + CompassTarget compassTarget = killerGameUser.getCompassTarget(); + if (compassTarget != null && compassTarget.getType() == TargetType.PLAYER + && Objects.equals(compassTarget.getTargetPlayer(), victim)) + killerGameUser.unsetCompassTarget(killer, killerUser); + BountyManager bm = GTM.getBountyManager(); + Bounty bounty = bm.getBounty(victimUUID); + if (bounty == null) { + killer.sendMessage(Lang.GTM.f("&7You killed &a" + victimUser.getColoredName(victim) + "&7! &a$&l" + + moneyToDrop + "&7 was dropped on the ground!")); + break; + } + killerGameUser.addMoney(bounty.getAmount()); + bm.removeBounty(bounty); + Utils.broadcastExcept(killer, Lang.BOUNTIES + "&a" + killer.getName() + "&7 claimed the bounty of &a$&l" + + bounty.getAmount() + "&7 on &c" + bounty.getName() + "&7!"); + killer.sendMessage(Utils.f(Lang.HITMAN_MODE + "&7You claimed the bounty of &a$&l" + bounty.getAmount() + + "&7 on &a" + victim.getName() + "&7!")); + killer.sendMessage(Utils.f(Lang.MONEY_ADD + String.valueOf(bounty.getAmount()))); + break; + } + GTMUtils.updateBoard(killer, killerGameUser); + victim.setBedSpawnLocation(GTM.getWarpManager().getSpawn().getLocation(), true); + killer.setBedSpawnLocation(GTM.getWarpManager().getSpawn().getLocation(), true); + } + + @EventHandler(priority = EventPriority.MONITOR) + public void onDeathMonitor(PlayerDeathEvent e) { + + // send death message to everyone online + for (Player player : Bukkit.getOnlinePlayers()) { + User user = UserManager.getInstance().getUser(player.getUniqueId()).orElse(null); + if (user != null){ + if (!Objects.equals(player, e.getEntity().getKiller()) && user.getPref(Pref.DEATH_MESSAGES)){ + player.sendMessage(e.getDeathMessage()); + } + } + } + + // set event death message to null + e.setDeathMessage(null); + + Player p = e.getEntity(); + int slot = 39; + for (ItemStack i : p.getInventory().getArmorContents()) { + if (i != null && !i.getType().equals(Material.AIR)) { + ArmorEquipEvent event = new ArmorEquipEvent(p, ArmorEquipEvent.EquipMethod.DEATH, EquipArmorType.matchType(i), i, new ItemStack(Material.AIR), EquipArmorType.fromSlot(slot)); + Bukkit.getServer().getPluginManager().callEvent(event); + slot--; + } + } + } + + public static Optional<Entity> getLastDamageCauseSource(Entity entity){ + + // grab the last damage cause + EntityDamageEvent ede = entity.getLastDamageCause(); + + if (ede == null){ + return Optional.empty(); + } + + if (ede instanceof EntityDamageByEntityEvent) { + + EntityDamageByEntityEvent edbee = (EntityDamageByEntityEvent) ede; + + Entity damager = edbee.getDamager(); + if (damager instanceof Player) { + + Player killer = (Player) damager; + return Optional.of(killer); + } + } + + return Optional.of(ede.getEntity()); + } + +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/Dispense.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/Dispense.java new file mode 100644 index 0000000..8d4c31e --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/Dispense.java @@ -0,0 +1,43 @@ +package net.grandtheftmc.gtm.listeners; + +import net.grandtheftmc.gtm.items.events.ArmorEquipEvent; +import net.grandtheftmc.gtm.items.events.EquipArmorType; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.block.BlockFace; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockDispenseEvent; + +/** + * Created by Timothy Lampen on 2017-08-11. + */ +public class Dispense implements Listener { + + @EventHandler + public void onDispense(BlockDispenseEvent e){ + EquipArmorType type = EquipArmorType.matchType(e.getItem()); + if(EquipArmorType.matchType(e.getItem()) != null){ + Location loc = e.getBlock().getLocation(); + for(Player p : loc.getWorld().getPlayers()){ + if(loc.getBlockY() - p.getLocation().getBlockY() >= -1 && loc.getBlockY() - p.getLocation().getBlockY() <= 1){ + if(p.getInventory().getHelmet() == null && type.equals(EquipArmorType.HELMET) || p.getInventory().getChestplate() == null && type.equals(EquipArmorType.CHESTPLATE) || p.getInventory().getLeggings() == null && type.equals(EquipArmorType.LEGGINGS) || p.getInventory().getBoots() == null && type.equals(EquipArmorType.BOOTS)){ + org.bukkit.block.Dispenser dispenser = (org.bukkit.block.Dispenser) e.getBlock().getState(); + org.bukkit.material.Dispenser dis = (org.bukkit.material.Dispenser) dispenser.getData(); + BlockFace directionFacing = dis.getFacing(); + // Someone told me not to do big if checks because it's hard to read, look at me doing it -_- + if(directionFacing == BlockFace.EAST && p.getLocation().getBlockX() != loc.getBlockX() && p.getLocation().getX() <= loc.getX() + 2.3 && p.getLocation().getX() >= loc.getX() || directionFacing == BlockFace.WEST && p.getLocation().getX() >= loc.getX() - 1.3 && p.getLocation().getX() <= loc.getX() || directionFacing == BlockFace.SOUTH && p.getLocation().getBlockZ() != loc.getBlockZ() && p.getLocation().getZ() <= loc.getZ() + 2.3 && p.getLocation().getZ() >= loc.getZ() || directionFacing == BlockFace.NORTH && p.getLocation().getZ() >= loc.getZ() - 1.3 && p.getLocation().getZ() <= loc.getZ()){ + ArmorEquipEvent armorEquipEvent = new ArmorEquipEvent(p, ArmorEquipEvent.EquipMethod.DISPENSER, EquipArmorType.matchType(e.getItem()), null, e.getItem(), null); + Bukkit.getServer().getPluginManager().callEvent(armorEquipEvent); + if(armorEquipEvent.isCancelled()){ + e.setCancelled(true); + } + return; + } + } + } + } + } + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/Drop.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/Drop.java new file mode 100644 index 0000000..a33cca7 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/Drop.java @@ -0,0 +1,37 @@ +package net.grandtheftmc.gtm.listeners; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.gtm.GTMUtils; + +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerDropItemEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.LeatherArmorMeta; + +public class Drop implements Listener { + + @EventHandler + public void onDrop(PlayerDropItemEvent e) { + ItemStack item = e.getItemDrop().getItemStack().clone(); + if(item==null) + return; + switch (item.getType()) { + case CHEST: + case WATCH: + case COMPASS: + e.getItemDrop().remove(); + item.setAmount(1); + GTMUtils.giveGameItems(e.getPlayer()); + return; + } + + if(item.getType().toString().contains("LEATHER_")) { + if(ArmorEquip.isCustomColor(((LeatherArmorMeta)item.getItemMeta()).getColor())) { + e.getItemDrop().remove(); + e.getPlayer().updateInventory(); + } + } + } + +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/DrugBlockRemovalListener.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/DrugBlockRemovalListener.java new file mode 100644 index 0000000..50544da --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/DrugBlockRemovalListener.java @@ -0,0 +1,89 @@ +package net.grandtheftmc.gtm.listeners; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.ListeningWhitelist; +import com.comphenix.protocol.events.PacketEvent; +import com.comphenix.protocol.events.PacketListener; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.gtm.GTM; +import org.bukkit.Chunk; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.block.BlockState; +import org.bukkit.block.BrewingStand; +import org.bukkit.plugin.Plugin; + +import java.util.ArrayList; +import java.util.List; + +public class DrugBlockRemovalListener implements PacketListener { + + private final List<Location> locations = new ArrayList<>(); + + public DrugBlockRemovalListener() { + } + + @Override + public void onPacketSending(PacketEvent event) { +// net.minecraft.server.v1_12_R1.PacketPlayOutMapChunk + if (event.isAsync()) System.out.println("MAP_CHUNK ASYNC"); + + int cx = event.getPacket().getIntegers().read(0), cz = event.getPacket().getIntegers().read(1); + int[] count = {0}; + Chunk chunk = event.getPlayer().getWorld().getChunkAt(cx, cz); + + ServerUtil.runTaskAsync(() -> { + for (BlockState tile : chunk.getTileEntities()) { + if (!(tile instanceof BrewingStand)) continue; + locations.add(tile.getLocation()); + count[0] += 1; + } + + for (int x = 0; x < 16; x++) { + for (int z = 0; z < 16; z++) { + for (int y = 0; y < 250; y++) { + Block block = chunk.getBlock(x, y, z); + if (block.getType() == Material.CARPET && block.getData() == (byte) 5) { + locations.add(block.getLocation()); + count[0] += 1; + } + } + } + } + + if (count[0] >= 1) { + ServerUtil.runTask(() -> { + for (Location location : locations) { + location.getBlock().setType(Material.AIR); + } + + event.getPlayer().sendMessage("Blocks removed: " + count[0]); + }); + } + }); + } + + @Override + public void onPacketReceiving(PacketEvent packetEvent) { + //404 DO NOTHING. + } + + @Override + public ListeningWhitelist getSendingWhitelist() { + return ListeningWhitelist.newBuilder() + .lowest() + .types(PacketType.Play.Server.MAP_CHUNK) + .build(); + } + + @Override + public ListeningWhitelist getReceivingWhitelist() { + return ListeningWhitelist.EMPTY_WHITELIST; + } + + @Override + public Plugin getPlugin() { + return GTM.getInstance(); + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/FireListener.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/FireListener.java new file mode 100644 index 0000000..312455f --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/FireListener.java @@ -0,0 +1,29 @@ +package net.grandtheftmc.gtm.listeners; + +import net.grandtheftmc.gtm.tasks.PlayerTask; +import org.bukkit.Material; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockBurnEvent; +import org.bukkit.event.block.BlockSpreadEvent; + +public class FireListener implements Listener { + + @EventHandler + public void blockBurnEvent(BlockBurnEvent event) { + event.setCancelled(true); + } + + @EventHandler + public void blockSpreadEvent(BlockSpreadEvent event) { + if (event.getSource().getType() == Material.FIRE) event.getSource().setType(Material.AIR); + event.setCancelled(true); + } + + public static void clearFire() { + PlayerTask.fireBlocks.forEach(block -> { + block.setType(Material.AIR); + PlayerTask.fireBlocks.remove(block); + }); + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/FoodChange.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/FoodChange.java new file mode 100644 index 0000000..59be573 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/FoodChange.java @@ -0,0 +1,18 @@ +package net.grandtheftmc.gtm.listeners; + +import net.grandtheftmc.gtm.GTM; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.FoodLevelChangeEvent; + +import java.util.Objects; + +public class FoodChange implements Listener { + + @EventHandler + public void onFoodChange(FoodLevelChangeEvent event) { + if (Objects.equals(event.getEntity().getLocation().getWorld(), GTM.getWarpManager().getSpawn().getLocation().getWorld())) { + event.setFoodLevel(20); + } + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/GamemodeChange.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/GamemodeChange.java new file mode 100644 index 0000000..a8e39b9 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/GamemodeChange.java @@ -0,0 +1,47 @@ +package net.grandtheftmc.gtm.listeners; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.gtm.items.ArmorUpgrade; +import org.bukkit.GameMode; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerGameModeChangeEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.potion.PotionEffect; + +/** + * Created by Timothy Lampen on 7/20/2017. + */ +public class GamemodeChange implements Listener { + + @EventHandler + public void onChange(PlayerGameModeChangeEvent event){ + Player player = event.getPlayer(); + + if(event.getNewGameMode()== GameMode.CREATIVE){ + player.setMaxHealth(20); + player.getActivePotionEffects().stream().forEach(potionEffect -> player.removePotionEffect(potionEffect.getType())); + } + else if(event.getNewGameMode()!=GameMode.CREATIVE){ + int amtOfEnchaned = 0; + ItemStack[] armor = player.getInventory().getArmorContents(); + for(ItemStack piece : armor){ + if(piece==null) + continue; + for(ArmorUpgrade upgrade : ArmorUpgrade.getArmorUpgrades(piece)){ + if(upgrade==ArmorUpgrade.ENHANCED){ + player.setMaxHealth(player.getMaxHealth()+5); + } + for(PotionEffect effect : upgrade.getPotionEffects()){ + player.addPotionEffect(effect); + } + } + amtOfEnchaned += ArmorUpgrade.getArmorUpgrades(piece).contains(ArmorUpgrade.ENHANCED) ? 10 : 0; + } + player.setMaxHealth(20 + amtOfEnchaned); + player.setHealth(player.getMaxHealth()); + } + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/Interact.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/Interact.java new file mode 100644 index 0000000..678d2d1 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/Interact.java @@ -0,0 +1,408 @@ +package net.grandtheftmc.gtm.listeners; + +import com.j0ach1mmall3.jlib.methods.ReflectionAPI; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.menus.MenuManager; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.GTMUtils; +import net.grandtheftmc.gtm.drugs.Drug; +import net.grandtheftmc.gtm.drugs.DrugService; +import net.grandtheftmc.gtm.items.ArmorType; +import net.grandtheftmc.gtm.items.GameItem; +import net.grandtheftmc.gtm.items.Kit; +import net.grandtheftmc.gtm.items.events.ArmorEquipEvent; +import net.grandtheftmc.gtm.items.events.EquipArmorType; +import net.grandtheftmc.gtm.lootcrates.LootCrate; +import net.grandtheftmc.gtm.users.ChatAction; +import net.grandtheftmc.gtm.users.GTMUser; +import net.grandtheftmc.gtm.users.JobMode; +import net.grandtheftmc.gtm.users.TaxiTarget; +import net.grandtheftmc.gtm.utils.ParticleColor; +import net.grandtheftmc.gtm.utils.ReflectionUtil; +import net.grandtheftmc.guns.weapon.Weapon; +import org.bukkit.*; +import org.bukkit.block.BlockState; +import org.bukkit.block.Chest; +import org.bukkit.entity.ArmorStand; +import org.bukkit.entity.Entity; +import org.bukkit.entity.ItemFrame; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.player.PlayerInteractAtEntityEvent; +import org.bukkit.event.player.PlayerInteractEntityEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.potion.PotionEffectType; +import org.bukkit.scheduler.BukkitRunnable; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.Optional; +import java.util.concurrent.ThreadLocalRandom; + +public class Interact implements Listener { + private static final Class BLOCK_POSITION_CLASS = ReflectionAPI.getNmsClass("BlockPosition"); + + public Interact() { +// ProtocolLibrary.getProtocolManager().addPacketListener(new PacketAdapter(GTM.getInstance(), PacketType.Play.Server.ENTITY_METADATA, PacketType.Play.Server.ENTITY_DESTROY, PacketType.Play.Server.ENTITY_EQUIPMENT, PacketType.Play.Server.ENTITY_STATUS, PacketType.Play.Client.ENTITY_ACTION) { +// @Override +// public void onPacketReceiving(PacketEvent event) { +//// super.onPacketReceiving(event); +// if (event.getPacket().getType() == PacketType.Play.Server.ENTITY_METADATA) { +// PacketPlayOutEntityMetadata +// } +// ServerUtil.debug(event.getPlayer().getName() + " -> " + event.getPacket().toString()); +// } +// +// @Override +// public void onPacketSending(PacketEvent event) { +//// super.onPacketSending(event); +// ServerUtil.debug(event.getPlayer().getName() + " -> " + event.getPacket().toString()); +// } +// }); + } + + @EventHandler + public void armorEquipRunner(PlayerInteractEvent e) { + if (e.getAction() == Action.PHYSICAL) return; + if (e.getAction() == Action.RIGHT_CLICK_AIR || e.getAction() == Action.RIGHT_CLICK_BLOCK) { + final Player player = e.getPlayer(); + ArmorType newArmorType = ArmorType.matchType(e.getItem()); + if (newArmorType != null) { + if (newArmorType.equals(ArmorType.HELMET) && e.getPlayer().getInventory().getHelmet() == null || newArmorType.equals(ArmorType.CHESTPLATE) && e.getPlayer().getInventory().getChestplate() == null || newArmorType.equals(ArmorType.LEGGINGS) && e.getPlayer().getInventory().getLeggings() == null || newArmorType.equals(ArmorType.BOOTS) && e.getPlayer().getInventory().getBoots() == null) { + ArmorEquipEvent armorEquipEvent = new ArmorEquipEvent(e.getPlayer(), ArmorEquipEvent.EquipMethod.HOTBAR, EquipArmorType.matchType(e.getItem()), null, e.getItem(), null); + Bukkit.getServer().getPluginManager().callEvent(armorEquipEvent); + if (armorEquipEvent.isCancelled()) { + e.setCancelled(true); + player.updateInventory(); + } + } + } + } + } + + @EventHandler(priority = EventPriority.HIGHEST) + public void onInteractHigh(PlayerInteractEvent e) { + Player player = e.getPlayer(); + ItemStack is = e.getItem(); + + if (is == null) return; + if (!player.hasPotionEffect(PotionEffectType.INVISIBILITY)) return; + + Optional<Weapon<?>> weapon = GTM.getWastedGuns().getWeaponManager().getWeapon(is); + if (weapon.isPresent()) { + player.removePotionEffect(PotionEffectType.INVISIBILITY); + player.sendMessage(Lang.CHEAT_CODES.f("&7Your invisibility was removed because you used a weapon!")); + } + } + + @EventHandler + public void onInteract(PlayerInteractEvent e) { + Player player = e.getPlayer(); + ItemStack item = player.getInventory().getItemInMainHand(); + if (e.getAction() != Action.RIGHT_CLICK_AIR && e.getAction() != Action.RIGHT_CLICK_BLOCK) + return; + if (item != null) { + switch (item.getType()) { + case GOLD_RECORD: + if (e.getClickedBlock() == null) return; + if (e.getClickedBlock().getType() == Material.JUKEBOX) return; + return; + case WATCH: + MenuManager.openMenu(player, "phone"); + return; + case COMPASS: + MenuManager.openMenu(player, "gps"); + return; + case RECORD_5: + if (e.getClickedBlock() != null && e.getClickedBlock().getType() == GTM.getItemManager().getItem("bong").getItem().getType()) { + if (item.getAmount() > 1) { + item.setAmount(item.getAmount() - 1); + player.getInventory().setItemInMainHand(item); + } else { + player.getInventory().remove(item); + } + Optional<Drug> weed = ((DrugService) GTM.getInstance().getDrugManager().getService()).getDrug("weed"); + if (weed.isPresent()) { + weed.get().apply(player); + } else { + return; + } + final Location blockLoc = e.getClickedBlock().getLocation(); + final long startTime = System.currentTimeMillis(); + player.playSound(player.getLocation(), Sound.BLOCK_BREWING_STAND_BREW, 1, 1); + new BukkitRunnable() { + @Override + public void run() { + if (startTime + (1000 * 5) <= System.currentTimeMillis()) + cancel(); + double locX = blockLoc.getX() + (ThreadLocalRandom.current().nextDouble(-.15, .15) + .5); + double locZ = blockLoc.getZ() + (ThreadLocalRandom.current().nextDouble(-.15, .15) + .5); + double locY = blockLoc.getY() + 1.2; + ParticleColor color = ParticleColor.AQUA; + player.spigot().playEffect(new Location(blockLoc.getWorld(), locX, locY, locZ), Effect.SPELL, 1, 1, color.getRed(), color.getGreen(), color.getBlue(), 1, 1, 10); + } + }.runTaskTimerAsynchronously(GTM.getInstance(), 0, 1); + } + return; + default: + break; + } + } + if (e.getClickedBlock() == null) + return; + + if (e.getClickedBlock().getType() == Material.CAULDRON) { + e.setCancelled(true); + return; + } + + BlockState block = e.getClickedBlock().getState(); + switch (block.getType()) { + case CHEST: + GTMUser user = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + if (user.isAddingLootCrate()) { + try { + Chest chest = (Chest) block; + Class<?> craftChestClass = ReflectionUtil.getOBCClass("block.CraftChest"); + Object craftChest = craftChestClass.cast(chest); + Method getTileEntity = craftChestClass.getMethod("getTileEntity"); + Object tileEntity = getTileEntity.invoke(craftChest); + Class<?> tileEntityClass = ReflectionUtil.getNMSClass("TileEntityChest"); + Method setTitle = tileEntityClass.getMethod("a", String.class); + setTitle.invoke(tileEntity, Utils.f("&e&lLoot Crate")); + } catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException ex) { + ex.printStackTrace(); + } + GTM.getCrateManager().addCrate(block.getLocation()); + player.sendMessage(Lang.LOOTCRATES.f("&7You added a loot crate at location &a" + + Utils.blockLocationToString(block.getLocation()) + "&7!")); + user.setAddingLootCrate(false); + e.setCancelled(true); + return; + } else if (user.isRemovingLootCrate()) { + LootCrate crate = GTM.getCrateManager().getCrate(block.getLocation()); + if (crate == null) { + player.sendMessage(Lang.LOOTCRATES.f("&7This is not a Loot Crate!")); + user.setRemovingLootCrate(false); + return; + } + GTM.getCrateManager().removeCrate(block.getLocation()); + player.sendMessage(Lang.LOOTCRATES.f("&7You removed a loot crate at location &a" + + Utils.blockLocationToString(block.getLocation()) + "&7!")); + user.setRemovingLootCrate(false); + e.setCancelled(true); + return; + } else if (user.isCheckingLootCrate()) { + LootCrate crate = GTM.getCrateManager().getCrate(block.getLocation()); + if (crate == null) { + player.sendMessage(Lang.LOOTCRATES.f("&7This is not a Loot Crate!")); + user.setCheckingLootCrate(false); + return; + } + player.sendMessage(Lang.LOOTCRATES.f("&7The Loot Crate at location &a" + + Utils.blockLocationToString(block.getLocation()) + "&7 will restock in &a" + + Utils.timeInSecondsToText(crate.getTimer()) + "&7! (+- 10s)")); + user.setCheckingLootCrate(false); + e.setCancelled(true); + return; + } else if (user.isRestockingLootCrate()) { + LootCrate crate = GTM.getCrateManager().getCrate(block.getLocation()); + if (crate == null) { + player.sendMessage(Lang.LOOTCRATES.f("&7This is not a Loot Crate!")); + user.setRestockingLootCrate(false); + return; + } + crate.restock(); + player.sendMessage(Lang.LOOTCRATES.f("&7The Loot Crate at location &a" + + Utils.blockLocationToString(block.getLocation()) + "&7 was restocked.")); + user.setRestockingLootCrate(false); + e.setCancelled(true); + return; + } + LootCrate crate = GTM.getCrateManager().getCrate(block.getLocation()); + if (crate == null) return; + if (crate.getTimer() <= 0) { + crate.resetTimer(); + + int money = Utils.randomNumber(20, 150); + user.addMoney(money); + player.sendMessage(Lang.MONEY_ADD.f(money + ".00")); + } + return; + default: + break; + } + } + + @EventHandler(priority = EventPriority.HIGH) + public void onInteractEntity(PlayerInteractEntityEvent e) { + Player player = e.getPlayer(); + Entity en = e.getRightClicked(); + switch (en.getType()) { + case ARMOR_STAND: + if (GTM.getDrugManager().getDrugDealer().isDrugDealer(en)) { + GTMUser user = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + if (user.getJobMode() == JobMode.COP) { + user.setMoney(user.getMoney() + 10000); + player.sendMessage(Lang.GTM + "" + ChatColor.GREEN + "You have arrested a drug dealer and recieved $10,000!"); + player.playSound(player.getLocation(), Sound.ENTITY_PLAYER_LEVELUP, 1, 1); + en.remove(); + return; + } + } + break; + case ITEM_FRAME: + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + if (user.hasEditMode()) { + e.setCancelled(false); + return; + } + if (user.isInTutorial()) { + e.setCancelled(true); + return; + } + e.setCancelled(true); + ItemFrame frame = (ItemFrame) en; + ItemStack item = frame.getItem(); + if (item == null) + return; + switch (item.getType()) { + case PAPER: { + GTMUser gtmUser = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + if (gtmUser.isArrested()) { + if (gtmUser.getJailTimer() < 5) { + player.sendMessage(Lang.BRIBE.f("&7You are already being released!")); + return; + } + Player cop = Bukkit.getPlayer(gtmUser.getJailCop()); + GTMUser copUser = cop == null ? null : GTM.getUserManager().getLoadedUser(cop.getUniqueId()); + if (cop == null || copUser.getJobMode() != JobMode.COP) { + player.sendMessage(Lang.BRIBE.f("&7The cop who arrested you (&3&l" + gtmUser.getJailCopName() + "&7) is off duty!")); + return; + } + gtmUser.setCurrentChatAction(ChatAction.BRIBING, 0); + player.sendMessage(Lang.BRIBE.f("&7Please type the amount you would like to offer as a bribe to &3&l" + gtmUser.getJailCopName() + "&7 or type &a\"/quit\"&7!")); + return; + } + frame.setRotation(Rotation.NONE); + MenuManager.openMenu(player, "bank"); + break; + } + case ENDER_PEARL: + frame.setRotation(Rotation.NONE); + GTM.getWarpManager().warp(player, user, GTM.getUserManager().getLoadedUser(player.getUniqueId()), + new TaxiTarget(GTM.getWarpManager().getRandomWarp()), 0, user.isPremium() ? 1 : 10); + break; + case IRON_FENCE: + if (GTMUtils.getJailedPlayers().isEmpty()) { + player.sendMessage(Lang.JAIL.f("&7There are currently no prisoners in jail!")); + return; + } + MenuManager.openMenu(player, "jail"); + break; + case STORAGE_MINECART: + MenuManager.openMenu(player, "taxi"); + break; + case MINECART: { + String name = item.hasItemMeta() && item.getItemMeta().hasDisplayName() + ? ChatColor.stripColor(item.getItemMeta().getDisplayName()) : null; + if (name.startsWith("Buy Vehicle: ")) + name = name.replace("Buy Vehicle: ", ""); + else if (name.startsWith("Vehicle Shop: ")) + name = name.replace("Vehicle Shop: ", ""); + else if (name.startsWith("Buy ")) + name = name.replace("Buy ", ""); + else break; + GameItem gameItem = GTM.getItemManager().getItemFromDisplayName(name); + if (gameItem == null || gameItem.getType() != GameItem.ItemType.VEHICLE) return; + GTMUser gtmUser = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + gtmUser.setActionVehicle(gameItem.getWeaponOrVehicleOrDrug()); + MenuManager.openMenu(player, "vehicleshop"); + return; + } + case LEATHER: { + String name = item.hasItemMeta() && item.getItemMeta().hasDisplayName() + ? ChatColor.stripColor(frame.getItem().getItemMeta().getDisplayName()).toLowerCase() : null; + Core.log(name); + if (name != null && name.contains("upgrade buy: $")) { + GTM.getShopManager().buyArmorUpgrade(player, name); + return; + } + break; + } + case EMPTY_MAP: + case MAP: { + frame.setRotation(Rotation.NONE); + MenuManager.openMenu(player, "lottery"); + break; + } + default: + String name = item.hasItemMeta() && item.getItemMeta().hasDisplayName() + ? ChatColor.stripColor(frame.getItem().getItemMeta().getDisplayName()) : null; + if (name != null && name.startsWith("Preview Kit: ")) { + Kit kit = GTM.getItemManager().getKit(name.replace("Preview Kit: ", "")); + if (kit != null) + GTM.getBackpackManager().kitPreview(player, kit); + return; + } + GTM.getShopManager().buy(player, frame.getItem()); + break; + } + return; + default: + break; + } + } + + @EventHandler + public void onInteractAtEntity(PlayerInteractAtEntityEvent e) { + Player player = e.getPlayer(); + Entity en = e.getRightClicked(); + switch (en.getType()) { + case ARMOR_STAND: + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + if (Core.getSettings().isUseEditMode() + && user.hasEditMode()) + break; + ArmorStand armorStand = (ArmorStand) e.getRightClicked(); + String name = ChatColor.stripColor(armorStand.getCustomName()); + if (name == null) break; + switch (name.toLowerCase()) { + case "mechanic": + MenuManager.openMenu(player, "mechanic"); + return; + case "cab driver": + MenuManager.openMenu(player, "taxi"); + return; + case "warden": + MenuManager.openMenu(player, "jail"); + return; + case "drug dealer": + MenuManager.openMenu(player, "drugdealer"); + return; + case "arms dealer": + MenuManager.openMenu(player, "weapons"); + return; + case "head salesman": + ItemStack item = player.getInventory().getItemInMainHand(); + MenuManager.openMenu(player, item != null && item.getType() == Material.SKULL_ITEM ? "auctionhead" : "heads"); + return; + default: + JobMode mode = JobMode.getModeOrNull(name); + if (mode == null) return; + GTMUtils.chooseJobMode(player, user, + GTM.getUserManager().getLoadedUser(player.getUniqueId()), mode); + return; + } + default: + break; + } + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/InventoryClick.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/InventoryClick.java new file mode 100644 index 0000000..ab73b4a --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/InventoryClick.java @@ -0,0 +1,279 @@ +package net.grandtheftmc.gtm.listeners; + +import java.util.Objects; + +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.event.inventory.InventoryAction; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryPickupItemEvent; +import org.bukkit.event.inventory.InventoryType; +import org.bukkit.event.player.PlayerSwapHandItemsEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.events.ItemStackEvent; +import net.grandtheftmc.core.menus.MenuManager; +import net.grandtheftmc.core.util.ItemStackManager; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.GTMUtils; +import net.grandtheftmc.gtm.items.events.ArmorEquipEvent; +import net.grandtheftmc.gtm.items.events.EquipArmorType; +import net.grandtheftmc.gtm.users.GTMUser; +import net.grandtheftmc.gtm.users.GTMUserManager; +import net.grandtheftmc.guns.GTMGuns; +import net.grandtheftmc.guns.weapon.Weapon; +import net.md_5.bungee.api.ChatColor; + +public class InventoryClick implements Listener { + + @EventHandler + public void onPickup(InventoryPickupItemEvent event) { + if (event.getInventory() == null) return; +// if (event.getItem() == null) return; +// if (event.getItem().getLocation().getWorld().getName().equalsIgnoreCase("minesantos")) { +// if (event.getInventory().getType() == InventoryType.HOPPER) { +// event.setCancelled(true); +// } +// } + + if (event.getInventory().getType() == InventoryType.HOPPER) { + event.setCancelled(true); + } + } + + @EventHandler + public void equipEventRunner(InventoryClickEvent e){ + boolean shift = false, numberkey = false; + Player player = (Player)e.getWhoClicked(); + if(e.isCancelled()) return; + if(e.getClick().equals(ClickType.SHIFT_LEFT) || e.getClick().equals(ClickType.SHIFT_RIGHT)){ + shift = true; + } + if(e.getClick().equals(ClickType.NUMBER_KEY)){ + numberkey = true; + } + if(e.getSlotType() != InventoryType.SlotType.ARMOR && e.getSlotType() != InventoryType.SlotType.QUICKBAR && e.getSlotType() != InventoryType.SlotType.CONTAINER) return; + if(e.getClickedInventory() != null && !e.getClickedInventory().getType().equals(InventoryType.PLAYER)) return; + if (!e.getInventory().getType().equals(InventoryType.CRAFTING) && !e.getInventory().getType().equals(InventoryType.PLAYER)) return; + if(!(e.getWhoClicked() instanceof Player)) return; + EquipArmorType newEquipArmorType = EquipArmorType.matchType(shift ? e.getCurrentItem() : e.getCursor()); + if(!shift && newEquipArmorType != null && e.getSlot() != newEquipArmorType.getSlot() && newEquipArmorType!=EquipArmorType.CUSTOM){ + // Used for drag and drop checking to make sure you aren't trying to place a helmet in the boots place. + return; + } + if(shift){ + newEquipArmorType = EquipArmorType.matchType(e.getCurrentItem()); + if(newEquipArmorType != null){ + boolean equipping = true; + if(e.getSlot()== newEquipArmorType.getSlot()){ + equipping = false; + } + if(newEquipArmorType==EquipArmorType.CUSTOM) { + if(e.getCurrentItem()!=null && e.getCurrentItem().getType().toString().contains("LEATHER_")) + e.setCancelled(true); + return; + } + if(equipping && e.getCurrentItem() !=null && e.getCurrentItem().getAmount()>1) { + e.setCancelled(true); + player.sendMessage(Lang.GTM.f("&cYou cannot equip stacked armor!")); + return; + } + if(newEquipArmorType.equals(EquipArmorType.HELMET) && (equipping ? e.getWhoClicked().getInventory().getHelmet() == null : e.getWhoClicked().getInventory().getHelmet() != null) || newEquipArmorType.equals(EquipArmorType.CHESTPLATE) && (equipping ? e.getWhoClicked().getInventory().getChestplate() == null : e.getWhoClicked().getInventory().getChestplate() != null) || newEquipArmorType.equals(EquipArmorType.LEGGINGS) && (equipping ? e.getWhoClicked().getInventory().getLeggings() == null : e.getWhoClicked().getInventory().getLeggings() != null) || newEquipArmorType.equals(EquipArmorType.BOOTS) && (equipping ? e.getWhoClicked().getInventory().getBoots() == null : e.getWhoClicked().getInventory().getBoots() != null)){ + ArmorEquipEvent armorEquipEvent = new ArmorEquipEvent((Player) e.getWhoClicked(), ArmorEquipEvent.EquipMethod.SHIFT_CLICK, newEquipArmorType, equipping ? null : e.getCurrentItem(), equipping ? e.getCurrentItem() : null,EquipArmorType.fromSlot(e.getSlot())); + Bukkit.getServer().getPluginManager().callEvent(armorEquipEvent); + if(armorEquipEvent.isCancelled()){ + e.setCancelled(true); + } + } + } + }else{ + ItemStack newArmorPiece = e.getCursor(); + ItemStack oldArmorPiece = e.getCurrentItem(); + if(numberkey){ + if(e.getClickedInventory().getType().equals(InventoryType.PLAYER)){// Prevents shit in the 2by2 crafting + // e.getClickedInventory() == The players inventory + // e.getHotBarButton() == key people are pressing to equip or unequip the item to or from. + // e.getRawSlot() == The slot the item is going to. + // e.getSlot() == Armor slot, can't use e.getRawSlot() as that gives a hotbar slot ;-; + ItemStack hotbarItem = e.getClickedInventory().getItem(e.getHotbarButton()); + if(hotbarItem != null){// Equipping + newEquipArmorType = EquipArmorType.matchType(hotbarItem); + newArmorPiece = hotbarItem; + oldArmorPiece = e.getClickedInventory().getItem(e.getSlot()); + }else{// Unequipping + newEquipArmorType = EquipArmorType.matchType(e.getCurrentItem() != null && e.getCurrentItem().getType() != Material.AIR ? e.getCurrentItem() : e.getCursor()); + } + } + } + else{ + // e.getCurrentItem() == Unequip + // e.getCursor() == Equip + newEquipArmorType = EquipArmorType.matchType(e.getCurrentItem() != null && e.getCurrentItem().getType() != Material.AIR ? e.getCurrentItem() : e.getCursor()); + } + + if(newEquipArmorType == EquipArmorType.CUSTOM && e.getSlotType()!= InventoryType.SlotType.ARMOR) + return; + if(newArmorPiece!=null && newArmorPiece.getAmount()>1 && e.getSlotType()== InventoryType.SlotType.ARMOR) { + e.setCancelled(true); + player.sendMessage(Lang.GTM.f("&cYou cannot equip stacked armor!")); + return; + } + + if(newEquipArmorType != null && (e.getSlot() == newEquipArmorType.getSlot() || newEquipArmorType == EquipArmorType.CUSTOM)){ + ArmorEquipEvent.EquipMethod method = ArmorEquipEvent.EquipMethod.DRAG; + if(e.getAction().equals(InventoryAction.HOTBAR_SWAP) || numberkey) method = ArmorEquipEvent.EquipMethod.HOTBAR_SWAP; + ArmorEquipEvent armorEquipEvent = new ArmorEquipEvent((Player) e.getWhoClicked(), method, newEquipArmorType, oldArmorPiece, newArmorPiece, EquipArmorType.fromSlot(e.getSlot())); + Bukkit.getServer().getPluginManager().callEvent(armorEquipEvent); + if(armorEquipEvent.isCancelled()){ + e.setCancelled(true); + } + } + } + } + + @EventHandler + public void onClick(InventoryClickEvent e) { + + Player player = (Player) e.getWhoClicked(); + Inventory inv = e.getInventory(); + GTMUser user = GTMUserManager.getInstance().getUser(player.getUniqueId()).orElse(null); + if (e.getClickedInventory() == null || e.getClickedInventory().getType() == InventoryType.CRAFTING) + return; + if (e.getClickedInventory().getType() == InventoryType.PLAYER) { + if (e.getSlot() == 17) { + e.getWhoClicked().closeInventory(); + GTM.getBackpackManager().openBackpack(player); + e.setCancelled(true); + return; + } else if (e.getSlot() == 16) { + e.getWhoClicked().closeInventory(); + MenuManager.openMenu(player, "ammopouch"); + e.setCancelled(true); + return; + } + } + String title = ChatColor.stripColor(e.getClickedInventory().getTitle()); + if (title.startsWith("Kit Preview: ")) { + e.setCancelled(true); + return; + } + if (title.endsWith("Corpse") && e.getCurrentItem().getType() == Material.STAINED_GLASS_PANE) { + e.setCancelled(true); + return; + } + + if (user != null){ + if(user.getBackpackOpen()){ + ItemStack selected = e.isShiftClick() ? e.getCurrentItem() : e.getCursor(); + if(selected.getType().toString().contains("SHULKER_BOX")){ + e.setCancelled(true); + return; + } + } + } + + /* + * m("--------------------------------------------------"); m("Inv = " + + * inv.getTitle() + " - " + inv.getType()); m("ClickedInv = " + + * e.getClickedInventory().getTitle() + " - " + + * e.getClickedInventory().getType()); m("Slot = " + e.getSlot() + " (" + * + e.getRawSlot() + ") - " + e.getSlotType()); m("Item in Slot = " + + * (inv.getItem(e.getSlot()) == null ? null : + * inv.getItem(e.getSlot()).getType().toString())); m("CurrentItem = " + + * (e.getCurrentItem() == null ? null : + * e.getCurrentItem().getType().toString())); m("Cursor Item = " + + * (e.getCursor() == null ? null : e.getCursor().getType().toString())); + * m("Action = " + e.getAction() + " - " + e.getClick()); m("Hotbar = " + * + e.getHotbarButton()); + */ + + ItemStack current = e.getCurrentItem(); + ItemStack cursor = e.getCursor(); + if (GTMUtils.isPhoneOrGPS(cursor) && e.getClick() == ClickType.DOUBLE_CLICK) { + e.setCancelled(true); + player.updateInventory(); + return; + } + switch (e.getAction()) { + case MOVE_TO_OTHER_INVENTORY: + if (!GTMUtils.isPhoneOrGPS(current) || inv.getType() == InventoryType.CRAFTING + || Objects.equals(inv, e.getClickedInventory())) + break; + e.setCancelled(true); + player.updateInventory(); + break; + case PLACE_ALL: + case PLACE_ONE: + case PLACE_SOME: + if (!GTMUtils.isPhoneOrGPS(cursor) || e.getClickedInventory().getType() == InventoryType.PLAYER) + break; + e.setCancelled(true); + player.updateInventory(); + break; + case SWAP_WITH_CURSOR: + if (!GTMUtils.isPhoneOrGPS(cursor) || e.getClickedInventory().getType() == InventoryType.PLAYER) + break; + e.setCancelled(true); + player.updateInventory(); + break; + case HOTBAR_SWAP: + ItemStack i = player.getInventory().getItem(e.getHotbarButton()); + if (!GTMUtils.isPhoneOrGPS(i) || e.getClickedInventory().getType() == InventoryType.PLAYER) + return; + e.setCancelled(true); + player.updateInventory(); + break; + default: + break; + } + + } + + @EventHandler(ignoreCancelled = true) + protected final void onItemClick(InventoryClickEvent event) { + if(event.getInventory() == null) return; + if(event.getInventory().getType() != InventoryType.CRAFTING) return; + + if(event.getRawSlot() > 0 && event.getRawSlot() < 5) { + event.setCancelled(true); + ((Player)event.getWhoClicked()).updateInventory(); + } + } + + @EventHandler + public void onSwitchToOffhand(PlayerSwapHandItemsEvent e) { + e.setCancelled(true); + } + + @EventHandler + public void onItemStack(ItemStackEvent event){ + + Weapon weapon = GTMGuns.getInstance().getWeaponManager().getWeapon(event.getItemStack()).orElse(null); + if (weapon != null){ + switch (weapon.getWeaponType()){ + case THROWABLE: + // throwable weapons are stackable + event.setCancelled(false); + break; + default: + event.setCancelled(true); + break; + } + } + else{ + // if the itemstack manager says this type cannot be stacked + if(!ItemStackManager.STACKABLES.containsKey(event.getItemStack())){ + event.setCancelled(true); + return; + } + } + + + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/InventoryOpen.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/InventoryOpen.java new file mode 100644 index 0000000..73fe742 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/InventoryOpen.java @@ -0,0 +1,50 @@ +package net.grandtheftmc.gtm.listeners; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.items.AmmoType; +import net.grandtheftmc.gtm.users.GTMUser; +import org.bukkit.ChatColor; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryOpenEvent; +import org.bukkit.event.inventory.InventoryType; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; + +public class InventoryOpen implements Listener { + + @EventHandler + public void onOpen(InventoryOpenEvent event) { + String disp = ChatColor.stripColor(event.getInventory().getTitle()); + Player player = (Player) event.getPlayer(); + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + GTMUser gtmUser = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + Inventory inv = event.getInventory(); + if (!user.isRank(UserRank.BUILDER)) { + if (inv.getType() == InventoryType.ANVIL + || inv.getType() == InventoryType.WORKBENCH + || inv.getType() == InventoryType.FURNACE) { + event.setCancelled(true); + return; + } + } + if ("Loot Crate".equalsIgnoreCase(disp)) { + for (int i = 0; i < inv.getSize(); i++) { + ItemStack item = inv.getItem(i); + if (item == null) + continue; + AmmoType type = AmmoType.getAmmoType(item.getType(), item.getDurability()); + if (type == null || type.isInInventory()) + continue; + gtmUser.addAmmo(type, item.getAmount()); + player.sendMessage(Lang.AMMO_ADD.f(item.getAmount() + "&7 " + type.getGameItem().getDisplayName())); + inv.setItem(i, null); + } + } + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/ItemBreak.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/ItemBreak.java new file mode 100644 index 0000000..f1860d7 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/ItemBreak.java @@ -0,0 +1,42 @@ +package net.grandtheftmc.gtm.listeners; + +import net.grandtheftmc.gtm.items.ArmorType; +import net.grandtheftmc.gtm.items.ArmorUpgrade; +import net.grandtheftmc.gtm.items.events.ArmorEquipEvent; +import net.grandtheftmc.gtm.items.events.EquipArmorType; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerItemBreakEvent; +import org.bukkit.inventory.ItemStack; + +/** + * Created by Timothy Lampen on 7/6/2017. + */ +public class ItemBreak implements Listener { + + @EventHandler + public void armorEquipRunner(PlayerItemBreakEvent e) { + EquipArmorType type = EquipArmorType.matchType(e.getBrokenItem()); + if(type != null){ + Player p = e.getPlayer(); + ArmorEquipEvent armorEquipEvent = new ArmorEquipEvent(p, ArmorEquipEvent.EquipMethod.BROKE, type, e.getBrokenItem(), null, null); + Bukkit.getServer().getPluginManager().callEvent(armorEquipEvent); + if(armorEquipEvent.isCancelled()){ + ItemStack i = e.getBrokenItem().clone(); + i.setAmount(1); + i.setDurability((short) (i.getDurability() - 1)); + if(type.equals(EquipArmorType.HELMET)){ + p.getInventory().setHelmet(i); + }else if(type.equals(EquipArmorType.CHESTPLATE)){ + p.getInventory().setChestplate(i); + }else if(type.equals(EquipArmorType.LEGGINGS)){ + p.getInventory().setLeggings(i); + }else if(type.equals(EquipArmorType.BOOTS)){ + p.getInventory().setBoots(i); + } + } + } + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/Join.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/Join.java new file mode 100644 index 0000000..f7ddf4b --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/Join.java @@ -0,0 +1,491 @@ +package net.grandtheftmc.gtm.listeners; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.Objects; +import java.util.UUID; + +import org.bukkit.Bukkit; +import org.bukkit.GameMode; +import org.bukkit.Statistic; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.scheduler.BukkitRunnable; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.achivements.Achievement; +import net.grandtheftmc.core.database.BaseDatabase; +import net.grandtheftmc.core.database.mutex.Mutexable; +import net.grandtheftmc.core.database.mutex.event.MutexLoadCompleteEvent; +import net.grandtheftmc.core.resourcepack.ResourcePack; +import net.grandtheftmc.core.resourcepack.ResourcePackEvent; +import net.grandtheftmc.core.resourcepack.ResourcePackManager; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserManager; +import net.grandtheftmc.core.users.eventtag.PreTagEquipEvent; +import net.grandtheftmc.core.util.C; +import net.grandtheftmc.core.util.NMSVersion; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.GTMUtils; +import net.grandtheftmc.gtm.database.dao.MutexDAO; +import net.grandtheftmc.gtm.database.mutex.common.LoadGTMUserTask; +import net.grandtheftmc.gtm.holidays.independenceday.IndependenceDay; +import net.grandtheftmc.gtm.items.Head; +import net.grandtheftmc.gtm.users.GTMUser; +import net.grandtheftmc.gtm.users.GTMUserManager; +import net.grandtheftmc.gtm.users.JobMode; +import net.md_5.bungee.api.ChatColor; +import net.md_5.bungee.api.chat.ClickEvent; +import net.md_5.bungee.api.chat.ComponentBuilder; + +public class Join implements Listener { + + private final ResourcePackManager resourcePackManager; + + public Join(ResourcePackManager resourcePackManager) { + this.resourcePackManager = resourcePackManager; + } + + /** + * Listens in on player join events. + * <p> + * Note: This is LOW so that events can listen in BEFORE or AFTER this + * event is called since the player will be added to the container. + * </p> + * + * @param event - the event + */ + @EventHandler (priority = EventPriority.LOW) + public void onJoin(PlayerJoinEvent event) { + + // do not display join messages + event.setJoinMessage(null); + + // grab event variables + Player player = event.getPlayer(); + + // General stuff + GTMUtils.giveGameItems(player); + player.setCollidable(false); + player.setFlying(false); + player.setWalkSpeed(0.2F); + +// long start = System.currentTimeMillis(); +// +// // create the GTMUser +// GTMUser gtmUser = new GTMUser(player.getUniqueId(), player.getName()); +// +// // NOTE: This is called on an async thread +// new LoadGTMUserTask(GTM.getInstance(), gtmUser) { +// +// @Override +// protected boolean onLoad() { +// try (Connection conn = BaseDatabase.getInstance().getConnection()) { +// +// // execute a data check to create new entries if needed +// gtmUser.dataCheck(); +// +// // load the user +// gtmUser.onLoad(conn); +// } +// catch (SQLException e) { +// e.printStackTrace(); +// return false; +// } +// +// return true; +// } +// +// @Override +// protected void onLoadFailure() { +// // Back to main thread +// Bukkit.getScheduler().runTask(getPlugin(), () -> { +// player.kickPlayer("[GTM] Load failure; contact staff if this issue persists."); +// +// // TODO this is to reset mutex issues +// Bukkit.getScheduler().runTaskAsynchronously(getPlugin(), () -> { +// try (Connection conn = BaseDatabase.getInstance().getConnection()){ +// MutexDAO.setGTMUserMutex(conn, player.getUniqueId(), false); +// } +// catch(Exception e){ +// e.printStackTrace(); +// } +// }); +// }); +// } +// +// @Override +// protected void onLoadComplete() { +// +// // add to the container +// GTMUserManager.getInstance().addUser(gtmUser); +// +// // TODO check for user state transactions +// +// // Back to main thread +// Bukkit.getScheduler().runTask(plugin, () -> { +// +// // can update name or other things on thread +// // like teleport them +// +// User coreUser = UserManager.getInstance().getUser(gtmUser.getUUID()).orElse(null); +// +// // Timing related stuff +// gtmUser.setJointime(System.currentTimeMillis()); +// if (gtmUser.getPlaytime() == 0L) { +// int playOneTick = player.getStatistic(Statistic.PLAY_ONE_TICK); +// gtmUser.setPlaytime((long) (playOneTick / 20)); +// } +// +// if (player.getGameMode() == GameMode.SPECTATOR) { +// player.getActivePotionEffects().clear(); +// player.setFoodLevel(20); +// player.setGameMode(GameMode.ADVENTURE); +// player.setFlying(false); +// player.setFlySpeed(0.1F); +// } +// +// // if found core user +// if (coreUser != null) { +// GTMUtils.sendJoinMessage(player, coreUser); +// +// if (!player.hasPlayedBefore()) { +// Utils.broadcastExcept(player, Lang.GTM.f("&7Welcome " + coreUser.getColoredName(player) + "&7 to &7&l" + Core.getSettings().getServer_GTM_name() + "&r!")); +// player.teleport(GTM.getWarpManager().getTutorialSpawn().getLocation()); +// player.spigot().sendMessage(new ComponentBuilder(Lang.TUTORIALS.s()).append("Welcome newcomer! Would you like to go through a simple tutorial?").color(ChatColor.GRAY).append(" [ACCEPT] ").color(ChatColor.GREEN).bold(true).event(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/tutorial")).create()); +// } +// else { +// player.teleport(gtmUser.isArrested() ? GTM.getWarpManager().getJail().getLocation() : GTM.getWarpManager().getSpawn().getLocation()); +// } +// +// GTM.getLottery().joinCheck(player, coreUser, gtmUser); +// } +// +// GTMUtils.updateBoard(player, gtmUser); +// +// Head head = GTM.getShopManager().getHead(player.getName()); +// if (head != null && head.getBidderUUID() != null && !Objects.equals(head.getBidderUUID(), player.getUniqueId()) && !head.isDone()) { +// player.sendMessage(Lang.HEAD_AUCTION.f("&7Your head is currently being auctioned by &a&l" + head.getSellerName() + "&7! The last bidder was &a&l" + head.getBidderName() + "&7 for &a$&l" + head.getBid() + "&7!")); +// } +// +// // Achievement, idk why it's still here. +// if (player.getUniqueId().toString().equals("0e4a6028-3d9a-4a2e-9797-eb1ddcb0aca9")) { +// Bukkit.getOnlinePlayers().forEach(target -> { +// User targetUser = Core.getUserManager().getLoadedUser(target.getUniqueId()); +// targetUser.addAchievement(Achievement.Witness); +// }); +// } +// +// // TODO this isn't fired correctly all the time +// try{ +// gtmUser.checkAchievements(); +// } +// catch(Exception e){ +// // TODO fix +// } +// +// IndependenceDay independenceDay = GTM.getHolidayManager().getIndependenceDay(); +// if (independenceDay != null) { +// if (independenceDay.isActive()) { +// independenceDay.getBossBar().addPlayer(player.getUniqueId()); +// } +// } +// +// // attempt to send resource pack +// attemptToSendPack(player); +// +// // Log to console, version and time to join from [PostLogin +// // -> +// // JoinEvent] +// NMSVersion ver = NMSVersion.getVersion(player); +// Bukkit.getConsoleSender().sendMessage(C.LIGHT_PURPLE + player.getName() + " Logged in. (" + C.WHITE + "Version: " + C.GREEN + ver.name() + C.LIGHT_PURPLE + ") [" + C.YELLOW + (System.currentTimeMillis() - start) + "ms" + C.LIGHT_PURPLE + "]"); +// }); +// } +// }; + } + + /** + * Listens in on mutex load complete events. + * <p> + * This can be fired when a mutex load event is finished loading, typically something like a core User. + * + * @param event - the event to listen on + */ + @EventHandler + public void onMutexLoadComplete(MutexLoadCompleteEvent event){ + + // grab event variables + Mutexable mutexable = event.getMutexable(); + if (!(mutexable instanceof User)){ + return; + } + + // conver to user and grab player + User user = (User) mutexable; + Player player = Bukkit.getPlayer(user.getUUID()); + if (player == null){ + return; + } + + long start = System.currentTimeMillis(); + + // create the GTMUser + GTMUser gtmUser = new GTMUser(player.getUniqueId(), player.getName()); + + // NOTE: This is called on an async thread + new LoadGTMUserTask(GTM.getInstance(), gtmUser) { + + @Override + protected boolean onLoad() { + try (Connection conn = BaseDatabase.getInstance().getConnection()) { + + // execute a data check to create new entries if needed + gtmUser.dataCheck(); + + // load the user + gtmUser.onLoad(conn); + } + catch (SQLException e) { + e.printStackTrace(); + return false; + } + + return true; + } + + @Override + protected void onLoadFailure() { + // Back to main thread + Bukkit.getScheduler().runTask(getPlugin(), () -> { + player.kickPlayer("[GTM] Load failure; contact staff if this issue persists."); + + // TODO this is to reset mutex issues + Bukkit.getScheduler().runTaskAsynchronously(getPlugin(), () -> { + try (Connection conn = BaseDatabase.getInstance().getConnection()){ + MutexDAO.setGTMUserMutex(conn, player.getUniqueId(), false); + } + catch(Exception e){ + e.printStackTrace(); + } + }); + }); + } + + @Override + protected void onLoadComplete() { + + // add to the container + GTMUserManager.getInstance().addUser(gtmUser); + + // TODO check for user state transactions + + // Back to main thread + Bukkit.getScheduler().runTask(plugin, () -> { + + // can update name or other things on thread + // like teleport them + + User coreUser = UserManager.getInstance().getUser(gtmUser.getUUID()).orElse(null); + + // Timing related stuff + gtmUser.setJointime(System.currentTimeMillis()); + if (gtmUser.getPlaytime() == 0L) { + int playOneTick = player.getStatistic(Statistic.PLAY_ONE_TICK); + gtmUser.setPlaytime((long) (playOneTick / 20)); + } + + if (player.getGameMode() == GameMode.SPECTATOR) { + player.getActivePotionEffects().clear(); + player.setFoodLevel(20); + player.setGameMode(GameMode.ADVENTURE); + player.setFlying(false); + player.setFlySpeed(0.1F); + } + + // if found core user + if (coreUser != null) { + GTMUtils.sendJoinMessage(player, coreUser); + + if (!player.hasPlayedBefore()) { + Utils.broadcastExcept(player, Lang.GTM.f("&7Welcome " + coreUser.getColoredName(player) + "&7 to &7&l" + Core.getSettings().getServer_GTM_name() + "&r!")); + player.teleport(GTM.getWarpManager().getTutorialSpawn().getLocation()); + player.spigot().sendMessage(new ComponentBuilder(Lang.TUTORIALS.s()).append("Welcome newcomer! Would you like to go through a simple tutorial?").color(ChatColor.GRAY).append(" [ACCEPT] ").color(ChatColor.GREEN).bold(true).event(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/tutorial")).create()); + } + else { + player.teleport(gtmUser.isArrested() ? GTM.getWarpManager().getJail().getLocation() : GTM.getWarpManager().getSpawn().getLocation()); + } + + GTM.getLottery().joinCheck(player, coreUser, gtmUser); + } + + GTMUtils.updateBoard(player, gtmUser); + + Head head = GTM.getShopManager().getHead(player.getName()); + if (head != null && head.getBidderUUID() != null && !Objects.equals(head.getBidderUUID(), player.getUniqueId()) && !head.isDone()) { + player.sendMessage(Lang.HEAD_AUCTION.f("&7Your head is currently being auctioned by &a&l" + head.getSellerName() + "&7! The last bidder was &a&l" + head.getBidderName() + "&7 for &a$&l" + head.getBid() + "&7!")); + } + + // Achievement, idk why it's still here. + if (player.getUniqueId().toString().equals("0e4a6028-3d9a-4a2e-9797-eb1ddcb0aca9")) { + Bukkit.getOnlinePlayers().forEach(target -> { + User targetUser = Core.getUserManager().getLoadedUser(target.getUniqueId()); + targetUser.addAchievement(Achievement.Witness); + }); + } + + // TODO this isn't fired correctly all the time + try{ + gtmUser.checkAchievements(); + } + catch(Exception e){ + // TODO fix + } + + IndependenceDay independenceDay = GTM.getHolidayManager().getIndependenceDay(); + if (independenceDay != null) { + if (independenceDay.isActive()) { + independenceDay.getBossBar().addPlayer(player.getUniqueId()); + } + } + + // attempt to send resource pack + attemptToSendPack(player); + + // Log to console, version and time to join from [PostLogin + // -> + // JoinEvent] + NMSVersion ver = NMSVersion.getVersion(player); + Bukkit.getConsoleSender().sendMessage(C.LIGHT_PURPLE + player.getName() + " Logged in. (" + C.WHITE + "Version: " + C.GREEN + ver.name() + C.LIGHT_PURPLE + ") [" + C.YELLOW + (System.currentTimeMillis() - start) + "ms" + C.LIGHT_PURPLE + "]"); + }); + } + }; + + } + + /** + * Listens in on ResourcePackEvent. + * <p> + * This event is called after the player receives a PacketType of + * RESOURCE_PACK_STATUS. + * + * @param event - the event + */ + @EventHandler + protected final void onResourcePack(ResourcePackEvent event) { + Player player = event.getPlayer(); + if (player == null) + return; + +// player.sendTitle(new Title(Utils.f("&6&lWelcome to &oGrand Theft Minecart&6&l!"), "", 60, 30, 40)); + } + + /** + * Stop EventTags from being set/changed when a JobMode is enabled. This is + * a fix for 'COP' & 'HITMAN' nametags being overridden. + */ + @EventHandler + protected final void onTagChange(PreTagEquipEvent event) { + if (event.getPlayer() == null){ + return; + } + + GTMUser gameUser = GTM.getUserManager().getUser(event.getPlayer().getUniqueId()).orElse(null); + + if (gameUser != null){ + if (gameUser.getJobMode() == null || gameUser.getJobMode() == JobMode.CRIMINAL){ + return; + } + } + + event.setCancelled(true); + } + + /** + * Attempt to send the pack to the player. + * + * @param player - the player that needs the resource pack. + */ + private void attemptToSendPack(Player player) { + + //Send pack here in-case exceptions are thrown + NMSVersion ver = NMSVersion.getVersion(player); + + // according to minecraft wiki on resource packs + // Requires 1 for 1.6-1.9, 2 for 1.9 and 1.10, 3 for 1.11 and 1.12, and 4 for 1.13. + + // if its 1.13.x or higher + if (ver.getProtocol() >= NMSVersion.MC_1_13.getProtocol()) { + Core.log("[GTM][Join] Texture pack code #4 (1.13.x AND ABOVE) due to NMS protocol version=" + ver.name()); + + ResourcePack pack = GTM.getResourcePackManager().getResourcePack(NMSVersion.MC_1_13); + sendPackToPlayer(player, pack, resourcePackManager); + } + // if its 1.11.x or 1.12.x + else if (ver.getProtocol() >= NMSVersion.MC_1_11.getProtocol() && ver.getProtocol() <= NMSVersion.MC_1_12_2.getProtocol()) { + Core.log("[GTM][Join] Texture pack code #3 (1.11.x TO 1.12.x) due to NMS protocol version=" + ver.name()); + + ResourcePack pack = GTM.getResourcePackManager().getResourcePack(NMSVersion.MC_1_11); + sendPackToPlayer(player, pack, resourcePackManager); + } + // if its 1.9.x or 1.10.x + else if (ver.getProtocol() >= NMSVersion.MC_1_9.getProtocol() && ver.getProtocol() <= NMSVersion.MC_1_10.getProtocol()) { + Core.log("[GTM][Join] Texture pack code #2 (1.9.x TO 1.10.x) due to NMS protocol version=" + ver.name()); + + ResourcePack pack = GTM.getResourcePackManager().getResourcePack(NMSVersion.MC_1_10); + sendPackToPlayer(player, pack, resourcePackManager); + } + else if (ver.getProtocol() >= NMSVersion.MC_1_8.getProtocol() && ver.getProtocol() < NMSVersion.MC_1_9.getProtocol()) { + Core.log("[GTM][Join] Texture pack code #1 (1.6.x TO 1.9.x) due to NMS protocol version=" + ver.name()); + + // TODO Note: This is not supported by us. + } + else { + Core.log("[GTM][Join] Unknown texture pack code for NMS version=" + ver.name() + ", protocol=" + ver.getProtocol()); + } + } + + /** + * Attempt to send the pack to the player using a runnable, and attempt to + * re-apply. + * + * @param player - the player getting the pack + * @param pack - the resource pack to send + * @param resourcePackManager - the manager of the resource packs + */ + private void sendPackToPlayer(Player player, ResourcePack pack, ResourcePackManager resourcePackManager) { + + // grab the uuid of the player + UUID uuid = player.getUniqueId(); + + new BukkitRunnable() { + @Override + public void run() { + Player p = Bukkit.getPlayer(uuid); + if (p == null || !p.isOnline()) { + return; + } + + if (!p.isValid()) { + // TODO note this could possibly be recursively forever + // as player might log in and log out in 2 seconds. + sendPackToPlayer(p, pack, resourcePackManager); + return; + } + + if (pack != null) { + + // setting player resource pack sends + // PacketType.Play.Client.RESOURCE_PACK_STATUS + // byte[] hash = + // BaseEncoding.base16().lowerCase().decode(pack.getHash().toLowerCase()); + p.setResourcePack(pack.getPack()); + } + } + }.runTaskLater(GTM.getInstance(), 20 * 8); + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/Leave.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/Leave.java new file mode 100644 index 0000000..16a1c26 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/Leave.java @@ -0,0 +1,172 @@ +package net.grandtheftmc.gtm.listeners; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.UUID; +import java.util.concurrent.TimeUnit; + +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.World; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerKickEvent; +import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.inventory.ItemStack; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.database.BaseDatabase; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserManager; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.util.debug.Log; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.commands.SpectatorCommand; +import net.grandtheftmc.gtm.database.mutex.common.SaveGTMUserTask; +import net.grandtheftmc.gtm.users.GTMUser; +import net.grandtheftmc.gtm.users.GTMUserManager; +import net.grandtheftmc.gtm.users.JobMode; +import net.grandtheftmc.gtm.users.PersonalVehicle; + +public class Leave implements Listener { + + /** + * Listens in on player kick events. + * + * @param event - the event + */ + @EventHandler + public void onPlayerKick(PlayerKickEvent event) { + + // grab event variables + Player p = event.getPlayer(); + + GTMUser gtmUser = GTMUserManager.getInstance().getUser(p.getUniqueId()).orElse(null); + if (gtmUser != null) { + gtmUser.setKicked(!event.getReason().contains("spam")); + } + } + + /** + * Listens in on player quit events. + * <p> + * Note: This is HIGH so that events can listen in BEFORE or AFTER this + * event is called since the player will be removed from the container. + * </p> + * + * @param event - the event + */ + @EventHandler (priority = EventPriority.HIGH) + public void onPlayerQuit(PlayerQuitEvent event) { + + // grab event varialbes + Player player = event.getPlayer(); + UUID uuid = player.getUniqueId(); + + // always set no quit message + event.setQuitMessage(null); + + // grab gtm user + GTMUser gtmUser = GTMUserManager.getInstance().getUser(player.getUniqueId()).orElse(null); + Long leaveTime = System.currentTimeMillis(); + + if (gtmUser != null){ + + // if join time is specified, update playtime + if (gtmUser.getJoinTime() != null) { + Long playtimeSeconds = TimeUnit.MILLISECONDS.toSeconds(leaveTime - gtmUser.getJoinTime()); + gtmUser.setPlaytime(gtmUser.getPlaytime() + playtimeSeconds); + } + + // remove vehicle + if (gtmUser.getPersonalVehicle() != null && gtmUser.getPersonalVehicle().onMap() && !gtmUser.getPersonalVehicle().isStolen()) { + gtmUser.getPersonalVehicle().getEntity().remove(); + } + + // if player is a spectator + if (player.getGameMode() == GameMode.SPECTATOR) { + player.getActivePotionEffects().clear(); + player.setFoodLevel(20); + player.setGameMode(GameMode.ADVENTURE); + player.setFlying(false); + player.setFlySpeed(0.1F); + if (gtmUser.isArrested()) { + player.teleport(GTM.getWarpManager().getJail().getLocation()); + } + else { + player.teleport(GTM.getWarpManager().getSpawn().getLocation()); + } + if (gtmUser.getJobMode() != JobMode.CRIMINAL) { + gtmUser.setJobMode(JobMode.CRIMINAL); + } + } + + // grab location + Location loc = player.getLocation(); + World world = loc.getWorld(); + + // if player was in combat + if (gtmUser.isInCombat() && !gtmUser.isKicked() && !"spawn".equalsIgnoreCase(world.getName())) { + + ItemStack[] contents = player.getInventory().getContents(); + player.getInventory().clear(); + + for (ItemStack item : contents) { + if (item != null && !(item.getType() == Material.WATCH || item.getType() == Material.COMPASS) && item.getType() != Material.WATCH && item.getType() != Material.CHEST) { + world.dropItemNaturally(loc, item); + } + } + player.getInventory().clear(); + + User coreUser = UserManager.getInstance().getUser(uuid).orElse(null); + if (coreUser != null) { + Utils.broadcast(Lang.COMBATTAG + "&c" + coreUser.getColoredName(player) + "&7 has logged off during combat! All his items have been dropped on the ground."); + + } + + if (GTM.getWarpManager().getSpawn() != null) { + player.teleport(GTM.getWarpManager().getSpawn().getLocation()); + } + } + + if (gtmUser.hasPersonalVehicle()) { + PersonalVehicle vehicle = gtmUser.getPersonalVehicle(); + if (vehicle.onMap()){ + vehicle.updateVehicleInDatabase(player, 0); + } + } + + if (SpectatorCommand.getActiveStaff().contains(player.getName())) { + player.setGameMode(GameMode.ADVENTURE); + SpectatorCommand.getActiveStaff().remove(player.getName()); + } + + // REMOVE from local container and save + final GTMUser removedUser = GTMUserManager.getInstance().removeUser(player.getUniqueId()).orElse(null); + if (removedUser != null) { + + new SaveGTMUserTask(GTM.getInstance(), removedUser) { + @Override + protected boolean onSave() { + try (Connection conn = BaseDatabase.getInstance().getConnection()) { + gtmUser.onSave(conn); + } + catch (SQLException e) { + e.printStackTrace(); + } + + return true; + } + + @Override + protected void onSaveFailure() { + Log.error("GTM", "Unhandled exception while saving " + removedUser.getName()); + } + }; + } + } + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/Login.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/Login.java new file mode 100644 index 0000000..76a7eba --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/Login.java @@ -0,0 +1,40 @@ +package net.grandtheftmc.gtm.listeners; + +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.AsyncPlayerPreLoginEvent; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.gtm.GTM; + +public class Login implements Listener { + + /** + * Listens in on the async player pre login event. + * + * @param event - the event + */ + @EventHandler + public void onAsyncPlayerPreLogin(AsyncPlayerPreLoginEvent event) { + + // if the server is restarting + if (Core.getInstance().isRestarting()) { + event.setKickMessage(Lang.ALERTS.f("&cThe server is restarting!")); + event.disallow(org.bukkit.event.player.AsyncPlayerPreLoginEvent.Result.KICK_OTHER, "&cThe server is currently restarting!"); + return; + } + + // if the gtm plugin isn't enabled + if (!GTM.getInstance().isEnabled()) { + event.setKickMessage(Lang.ALERTS.f("&cWaiting on GTM...")); + event.disallow(org.bukkit.event.player.AsyncPlayerPreLoginEvent.Result.KICK_OTHER, "&cWaiting on GTM..."); + return; + } + + // if the player is transferring + if (GTM.getInstance().getTransferingPlayers().contains(event.getUniqueId())) { + event.disallow(org.bukkit.event.player.AsyncPlayerPreLoginEvent.Result.KICK_OTHER, Lang.GTM.f("&eYour data is being transfered.")); + } + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/MenuListener.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/MenuListener.java new file mode 100644 index 0000000..a9e3186 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/MenuListener.java @@ -0,0 +1,4327 @@ +package net.grandtheftmc.gtm.listeners; + +import java.text.NumberFormat; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Locale; +import java.util.Objects; +import java.util.Optional; +import java.util.Set; +import java.util.UUID; +import java.util.stream.Collectors; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Color; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.craftbukkit.v1_12_R1.inventory.CraftItemStack; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.inventory.meta.SkullMeta; + +import com.j0ach1mmall3.jlib.inventory.JLibItem; +import com.j0ach1mmall3.wastedvehicles.api.VehicleProperties; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.events.MoneyEvent; +import net.grandtheftmc.core.menus.Menu; +import net.grandtheftmc.core.menus.MenuClickEvent; +import net.grandtheftmc.core.menus.MenuCloseEvent; +import net.grandtheftmc.core.menus.MenuManager; +import net.grandtheftmc.core.menus.MenuOpenEvent; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.users.eventtag.EventTag; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.core.util.State; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.GTMUtils; +import net.grandtheftmc.gtm.bounties.Bounty; +import net.grandtheftmc.gtm.bounties.BountyManager; +import net.grandtheftmc.gtm.bounties.BountyPlacer; +import net.grandtheftmc.gtm.drugs.DrugService; +import net.grandtheftmc.gtm.drugs.item.DrugDealerItem; +import net.grandtheftmc.gtm.drugs.item.DrugItem; +import net.grandtheftmc.gtm.event.christmas.ChristmasEvent; +import net.grandtheftmc.gtm.gang.Gang; +import net.grandtheftmc.gtm.gang.GangManager; +import net.grandtheftmc.gtm.gang.member.GangMember; +import net.grandtheftmc.gtm.gang.relation.GangRelation; +import net.grandtheftmc.gtm.items.AmmoType; +import net.grandtheftmc.gtm.items.ArmorUpgrade; +import net.grandtheftmc.gtm.items.GameItem; +import net.grandtheftmc.gtm.items.Head; +import net.grandtheftmc.gtm.items.Kit; +import net.grandtheftmc.gtm.items.KitItem; +import net.grandtheftmc.gtm.tasks.LotteryPlayer; +import net.grandtheftmc.gtm.users.ChatAction; +import net.grandtheftmc.gtm.users.CheatCode; +import net.grandtheftmc.gtm.users.CheatCodeState; +import net.grandtheftmc.gtm.users.CompassTarget; +import net.grandtheftmc.gtm.users.GTMRank; +import net.grandtheftmc.gtm.users.GTMUser; +import net.grandtheftmc.gtm.users.GTMUserManager; +import net.grandtheftmc.gtm.users.JobMode; +import net.grandtheftmc.gtm.users.LockedWeapon; +import net.grandtheftmc.gtm.users.PersonalVehicle; +import net.grandtheftmc.gtm.users.TaxiTarget; +import net.grandtheftmc.gtm.warps.Warp; +import net.grandtheftmc.guns.GTMGuns; +import net.grandtheftmc.guns.weapon.Weapon; +import net.grandtheftmc.houses.Houses; +import net.grandtheftmc.houses.houses.House; +import net.grandtheftmc.houses.houses.HouseDoor; +import net.grandtheftmc.houses.houses.PremiumHouse; +import net.grandtheftmc.houses.houses.PremiumHouseDoor; +import net.grandtheftmc.houses.users.HouseUser; +import net.grandtheftmc.houses.users.UserHouse; +import net.md_5.bungee.api.chat.BaseComponent; +import net.md_5.bungee.api.chat.ClickEvent; +import net.md_5.bungee.api.chat.ComponentBuilder; +import net.minecraft.server.v1_12_R1.NBTTagCompound; + + +public class MenuListener implements Listener { + private final static List<Integer> SLOTS = Arrays.asList(11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 38, 39, 40, 41, 42); + + @EventHandler(priority = EventPriority.HIGH) + public void onMenuOpen(MenuOpenEvent e) { + Player player = e.getPlayer(); + UUID uuid = player.getUniqueId(); + Menu menu = e.getMenu(); + switch (menu.getName()) { + case "transferconfirm": { + this.setConfirmDefaults(e, "&a&lConfirm Transfer", "&c&lCancel Transfer", "&c- This transfer is irreversible", "&c- All of your items will be deleted off", "&cyour current server and put onto", "&cyour target server.", "&c- Staff are unable to undo this decision."); + return; + } + case "christmasshop": { + this.setPhoneDefaults(e); + String p = "&7Price: [&6@&7]"; + e.setItem(2, Utils.setLore(GTM.getItemManager().getItem("santahat").getItem(), p.replace("@", "20"))); + e.setItem(3, Utils.setLore(GTM.getItemManager().getItem("santatunic").getItem(), p.replace("@", "32"))); + e.setItem(5, Utils.setLore(GTM.getItemManager().getItem("santapants").getItem(), p.replace("@", "24"))); + e.setItem(6, Utils.setLore(GTM.getItemManager().getItem("santaboots").getItem(), p.replace("@", "16"))); + + e.setItem(11, Utils.setLore(GTM.getItemManager().getItem("elfhat").getItem(), p.replace("@", "5"))); + e.setItem(12, Utils.setLore(GTM.getItemManager().getItem("elftunic").getItem(), p.replace("@", "8"))); + e.setItem(14, Utils.setLore(GTM.getItemManager().getItem("elfpants").getItem(), p.replace("@", "6"))); + e.setItem(15, Utils.setLore(GTM.getItemManager().getItem("elfboots").getItem(), p.replace("@", "4"))); + + e.setItem(20, Utils.setLore(GTM.getItemManager().getItem("rudolfhat").getItem(), p.replace("@", "10"))); + e.setItem(21, Utils.setLore(GTM.getItemManager().getItem("rudolftunic").getItem(), p.replace("@", "16"))); + e.setItem(23, Utils.setLore(GTM.getItemManager().getItem("rudolfpants").getItem(), p.replace("@", "12"))); + e.setItem(24, Utils.setLore(GTM.getItemManager().getItem("rudolfboots").getItem(), p.replace("@", "8"))); + + + e.setItem(4, Utils.setLore(Utils.createItem(Material.NAME_TAG, "&b&lFestive Tag"), p.replace("@", "35"))); + e.setItem(13, Utils.setLore(Utils.createItem(Material.NAME_TAG, "&2&lXMAS Tag"), p.replace("@", "35"))); + e.setItem(22, Utils.setLore(Utils.createItem(Material.NAME_TAG, "&r&lSnowman Tag"), p.replace("@", "50"))); + e.setItem(31, Utils.setLore(Utils.createItem(Material.NAME_TAG, "&c&lSanta Tag"), p.replace("@", "50"))); + e.setItem(40, Utils.setLore(Utils.createItem(Material.NAME_TAG, "&c&lH&2&lo&c&lH&2&lo&c&lH&2&lo Tag"), p.replace("@", "50"))); + + + e.setItem(48, Utils.setLore(GTM.getItemManager().getItem("christmascake").getItem(), p.replace("@", "4"))); + e.setItem(49, Utils.setLore(GTMGuns.getInstance().getWeaponManager().getWeapon("clausinator").get().createItemStack(), p.replace("@", "250"),"&7Shooting at players stack a", "&7slowness effect on them", "&7for a short duration")); + e.setItem(50, Utils.setLore(Utils.createItem(Material.MAGMA_CREAM, "&c&lDevil's Snowballs x16", 16), p.replace("@", "3"))); + return; + } + case "sellinvconfirm": { + GTMUser user = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + this.setConfirmDefaults(e, "&aSell inventory for " + Utils.formatMoney(user.getSellInvConfirmAmt()), "&cCancel the transaction"); + return; + } + case "cheatcodes": { + this.setPhoneDefaults(e); + int[] slots = new int[] { 11, 13, 15, 20, 22, 24, 29, 31, 33, 40 }; + for (int i = 0; i < CheatCode.getCodes().length; i++) {//will only work with a max of 9 codes + int slot = slots[i]; + CheatCode code = CheatCode.getCodes()[i]; + State state = GTM.getUserManager().getLoadedUser(uuid).getCheatCodeState(code).getState(); + e.setItem(slot, code.getDisplayItem(Core.getUserManager().getLoadedUser(uuid), state)); + } + e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the contacts page!")); + e.setItem(51, Utils.createItem(Material.BOOK, "&2&lActivating Cheatcodes", "&7You can activate cheatcodes by clicking the item in this menu,", "&7by using &a&l/<cheatcode>&7, and &a&l/cheatcode <cheatcode>&7!")); + return; + } + case "drugdealer": { + this.setPhoneDefaults(e); + Iterator<Integer> slots = Arrays.asList(11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 38, 39, 40, 41, 42).iterator(); + Collection<DrugDealerItem> drugDealerItems = + GTM.getDrugManager().getDrugDealer().getItems() + .stream() + .filter(drugDealerItem -> !drugDealerItem.isShouldDisplay()) + .collect(Collectors.toList()); + drugDealerItems.forEach(drugDealerItem -> { + if (!slots.hasNext()) return; + e.setItem(slots.next(), drugDealerItem.getItemStack()); + }); + e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lClose", "&7Click to close this menu.")); + e.setItem(49, Utils.createItem(Material.SAPLING, 2, "&3&lDrug Dealer", "&7Score some dope!")); + return; + } + case "phone": + this.setPhoneDefaults(e); + e.setItem(11, + Utils.createItem(Material.ENDER_CHEST, "&e&lCosmetics", "&7Stand out from the crowd!")); + e.setItem(13, + Utils.setArmorColor( + Utils.createItem(Material.LEATHER_CHESTPLATE, "&a&lMy Gang", "&7Play with friends,", "&7and dominate the city!"), + Color.fromRGB(102, 127, 51))); + e.setItem(15, Utils.createItem(Material.POWERED_MINECART, "&2&lProperty", "&7Houses, Online ATM and Vehicles!")); + e.setItem(29, + Utils.setSkullOwner( + Utils.createItem(Material.SKULL_ITEM, 1, "&5&lBounties", "&7Place hits on other players!"), + player.getName())); + e.setItem(31, Utils.createItem(Material.NETHER_STAR, "&d&lMy Account", "&7Stats, Ranks and Prefs!")); + e.setItem(33, Utils.createItem(Material.CHEST, "&b&lKits", "&7Gear up!")); + e.setItem(47, Utils.createItem(Material.BOOK, "&6&lContacts", "&7Call your associates!")); + e.setItem(49, Utils.createItem(Material.EMERALD, "&a&l" + Core.getSettings().getServer_GTM_shortName() + " Store", "&7Support the server!")); + + e.setItem(51, Utils.createItem(Material.EXP_BOTTLE, "&a&lRewards", "&7" + (Core.getSettings().isSister() ? "" : "Voting, ") + "daily and donor bonuses!")); + return; + case "cosmetics": + case "rewards": + e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the home page!")); + return; + case "vote": + e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the rewards page!")); + return; + case "account": + this.setPhoneDefaults(e); + e.setItem(22, Utils.createItem(Material.NAME_TAG, "&6&lUnlocked Tags", "&7Change your name prefix!")); + e.setItem(11, Utils.createItem(Material.EMPTY_MAP, "&a&lRanks", "&7Working my way to the top!")); + e.setItem(13, Utils.createItem(Material.BOOK, "&d&lStats", "&7You got skills!")); + e.setItem(15, Utils.createItem(Material.REDSTONE_COMPARATOR, "&5&lPreferences", "&7Toggle your stuff!")); + e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the home page!")); + e.setItem(49, Utils.createItem(Material.NETHER_STAR, "&d&lMy Account", "&7Take care of your biz!")); + return; + case "prefs": + e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the account page!")); + return; + case "ranks": { + this.setPhoneDefaults(e); + int[] gtmRankSlots = new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24}; + + int[] donorSlots = new int[]{38, 39, 40, 41, 42}; + int i = 0; + GTMUser user = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + for (GTMRank rank : GTMRank.getGTMRanks()) { + if (rank == GTMRank.HOBO) + continue; + List<String> lore = new ArrayList<>(); + lore.add(""); + if (rank.getPrice() > 0) { + lore.add("&7Price: &a$&l" + rank.getPrice()); + lore.add(""); + } + lore.add("&aPerks:"); + lore.add(""); + lore.add("&bKit " + rank.getColoredNameBold() + "&7!"); + switch (rank) { + case CRIMINAL: + lore.add("&7Drivers License! (&a&lCars&7)"); + break; + case HOMIE: + lore.add("&7Team up! (Join a &a&lGang&7)"); + lore.add("&7Unlock &e&lMarksman Pistol&7!"); + break; + case THUG: + lore.add("&7A place to crash! (1 &3&lHouse&7)"); + lore.add("&7Unlock &e&lHeavy Shotgun&7!"); + lore.add("&7Unlock &a&lLight &bArmor Upgrade&7!"); + break; + case GANGSTER: + lore.add("&7Create your own &a&lGang&7!"); + lore.add("&7Use &b&lCOP Mode&7!"); + lore.add("&7Unlock &e&lChainsaw&7!"); + lore.add("&7Unlock &e&lGusenberg Sweeper&7!"); + lore.add("&7Unlock &a&lDurable &bArmor Upgrade&7!"); + break; + case MUGGER: + lore.add("&7Growing! (3 &a&lGang Members&7)"); + lore.add("&7Another hideout! (2 &3&lHouses&7)"); + lore.add("&7Unlock &e&lRPG&7!"); + lore.add("&7Unlock &a&lUltra Light &bArmor Upgrade&7!"); + break; + case HUNTER: + lore.add("&7Use &8&lHITMAN Mode&7!"); + lore.add("&7Connecting! (&a&l5 Gang Members&7)"); + lore.add("&7Unlock &e&lHeavy Sniper&7!"); + lore.add("&7Unlock &a&lTank &bArmor Upgrade&7!"); + break; + case DEALER: + lore.add("&7Fly &3&lPlanes&7!"); + lore.add("&7Unlock &e&lSpecial Carbine&7!"); + lore.add("&7Unlock &a&lReinforced &bArmor Upgrade&7!"); + break; + case PIMP: + lore.add("&7Spreading! (&a&l10 Gang Members&7)"); + lore.add("&7Unlock &e&lGrenade Launcher&7!"); + lore.add("&7Unlock &a&lBomb Squad &bArmor Upgrade&7!"); + break; + case MOBSTER: + lore.add("&7Buy a crib! (3 &3&lHouses&7)"); + lore.add("&7Unlock &e&lCombat MG&7!"); + lore.add("&7Unlock &a&lExoskeleton &bArmor Upgrade&7!"); + lore.add("&7Up, up and away! (&4&lJetpack&7)"); + break; + case GODFATHER: + lore.add("&7Broadening! (&a&l20 Gang Members&7)"); + lore.add("&7Unlock &e&lHoming Launcher&7!"); + lore.add("&7Unlock &e&lMinigun&7!"); + lore.add("&7Unlock &a&lEnhanced &bArmor Upgrade&7!"); + break; + default: + lore.add("&7Rank up for cool perks!"); + } + e.setItem(gtmRankSlots[i], + Utils.createItem(rank.getMaterial(), rank.getColoredNameBold(), Utils.f(lore))); + i++; + } + i = 0; + for (UserRank rank : new UserRank[]{UserRank.VIP, UserRank.PREMIUM, UserRank.ELITE, UserRank.SPONSOR, UserRank.SUPREME}) { + List<String> lore = new ArrayList<>(); + lore.add(""); + lore.add("&7Price: &a$&l" + rank.getPrice()); + lore.add(""); + lore.add("&aPerks:"); + lore.add(""); + lore.add("&a+ &e&l" + rank.getMonthlyTokens() + " Tokens &a&lmonthly&7!"); + lore.add("&bKit " + rank.getColoredNameBold() + "&7!"); + lore.add("&a&l" + GTMUtils.getBackpackRows(rank) + "&6&l Backpack &7rows!"); + lore.add("&a+ $&l" + GTMUtils.getStartingMoney(rank) + "&7 in-game money!"); + lore.add("&a+ &l" + GTMUtils.getHouses(rank) + "&7 extra &3&lHouses&7"); + lore.add("&a+ &7Expanding! (&a&l" + GTMUtils.getGangMembers(rank) + "&7 Gang Members)"); + lore.add("&a+ &7Call a &6&lCab&7! (&a&l/tpa&7)"); + lore.add("&a+ " + GTMUtils.getWarpDelay(rank) + "&7s delay &6&lTaxi Service&7!"); + if (rank.isHigherThan(UserRank.VIP)) { + lore.add("&a+ Instantly&7 teleport to the map!"); + lore.add("&a+ &7Upgraded GPS! (&a+~&l" + GTMUtils.getExtraCompassAccuracy(rank) + "&a%&7)"); + lore.add("&a+ &7Join &c&lFull&7 servers!"); + lore.add("&a+ &7Unlock &3&lCOP Mode&7!"); + } + lore.add("&a+ &7Switch &3&lJob Mode&7 faster! (&a" + GTMUtils.getJobModeDelay(rank) + "&7)"); + if (rank.isHigherThan(UserRank.PREMIUM)) { + lore.add("&a+ &7Unlock &8&lHITMAN Mode&7!"); + lore.add("&a+ &7Pick up your friend! (&a&l/tpahere&7)"); + } + if (rank.isHigherThan(UserRank.ELITE)) { + lore.add("&a+ &7Satisfy yourself! (&a&l/feed&7)"); + lore.add("&a+ &7Up, up and away! (&4&lJetpack&7)"); + } + if (rank.isHigherThan(UserRank.SUPREME)) { + lore.add("&a+ &7Quick sell Cheatcode"); + } + for (LockedWeapon w : LockedWeapon.values()) { + if (w.getUserRank() == rank || rank.isHigherThan(w.getUserRank())) { + GameItem g = GTM.getItemManager().getItemFromWeapon(w.toString()); + if (g != null) + lore.add("&a+ &7Unlock " + g.getDisplayName() + "&7 instantly!"); + } + } + for (ArmorUpgrade u : ArmorUpgrade.values()) + if (u.getUserRank() == rank || rank.isHigherThan(u.getUserRank())) + lore.add("&a+ &7Unlock " + u.getDisplayName() + " &b&lArmor Upgrade&7 instantly!"); + e.setItem(donorSlots[i], Utils.createItem(rank.getMaterial(), rank.getColoredNameBold(), lore)); + i++; + + } + e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to my account!")); + GTMRank next = user.getRank().getNext(); + if (next != null) + e.setItem(31, Utils.createItem(Material.PAPER, "&a&lRankup to " + next.getColoredNameBold() + "&a&l!", + "&7Price: &" + (user.hasMoney(next.getPrice()) ? "a" : "c") + "$&l" + next.getPrice())); + return; + } + case "gtmstats": { + this.setPhoneDefaults(e); + GTMUser u = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + e.setItem(11, Utils.createItem(Material.PAPER, "&a&lMoney: &f" + Utils.round(u.getMoney()))); + e.setItem(13, Utils.createItem(Material.ITEM_FRAME, "&a&lBank: &f" + Utils.round(u.getBank()))); + e.setItem(15, Utils.createItem(Material.EMPTY_MAP, "&3&lPermits: &f" + u.getPermits())); + e.setItem(29, Utils.createItem(Material.IRON_SWORD, "&e&lKills: &f" + u.getKills())); + e.setItem(31, Utils.createItem(Material.SKULL_ITEM, "&c&lDeaths: &f" + u.getDeaths())); + e.setItem(33, Utils.createItem(Material.IRON_SWORD, "&a&lK/D Ratio: &f" + u.getKDR())); + e.setItem(49, Utils.createItem(Material.BOOK_AND_QUILL, "&6&lKillstreak: &f" + u.getKillStreak())); + e.setItem(51, Utils.createItem(Material.NETHER_STAR, "&c&lWanted Level: &f" + + GTMUtils.getWantedLevelStars(u.getWantedLevel()) + " (" + u.getWantedLevel() + ')')); + e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to my account!")); + return; + } + case "bounties": + this.setPhoneDefaults(e); + e.setItem(11, + Utils.createItem(Material.BOOK_AND_QUILL, "&5&lBounties List", "&7View all active bounties!")); + e.setItem(15, Utils.createItem(Material.COMPASS, "&5&lFind Player", + GTM.getUserManager().getLoadedUser(player.getUniqueId()).getJobMode() + == JobMode.HITMAN ? "&7Track wanted players down with your GPS Tracker!" : "&cRequires HITMAN Mode!")); + e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the home page!")); + e.setItem(49, Utils.createItem(Material.PAPER, "&5&lPlace Bounty", "&7Place a hit on a player!")); + e.setItem(51, Utils.createItem(Material.BOOK, "&5&lBounties Help", "&7Some helpful information!")); + return; + case "bountieslist": { + BountyManager bm = GTM.getBountyManager(); + this.setPhoneDefaults(e); + Set<Bounty> bounties = bm.getBountiesByAmount(); + int[] slots = new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 38, 39, 40, 41, 42}; + Iterator<Bounty> it = bounties.iterator(); + for (int i = 0; i < 20; i++) { + if (!it.hasNext()) + break; + Bounty b = it.next(); + List<String> lore = new ArrayList<>(); + lore.add("&7Bounty Total: &a$&l" + b.getAmount()); + lore.add(""); + double anon = 0; + for (BountyPlacer p : b.getPlacers()) + if (p.isAnonymous()) + anon += p.getAmount(); + else + lore.add("&7" + p.getName() + ": &a$&l" + p.getAmount()); + if (anon > 0) { + lore.add("&7Anonymous: &a$&l" + anon); + } + lore.add(""); + lore.add("&7Expires: &a&l" + Utils.timeInMillisToText(b.getTimeUntilExpiryInMillis())); + e.setItem(slots[i], Utils.setSkullOwner( + Utils.createItem(Material.SKULL_ITEM, 3, "&5&l" + b.getName(), lore), b.getName())); + } + e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the bounties page!")); + e.setItem(49, Utils.createItem(Material.BOOK_AND_QUILL, "&5&lBounty List", "&7Page 1")); + if (bounties.size() > 20) + e.setItem(50, Utils.createItem(Material.ARROW, "&5&lNext Page", "&7Page 2")); + return; + } + case "bountieshelp": { + this.setPhoneDefaults(e); + int[] slots = new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 30, 31, 32, 33, 34, 38, 39, 40, 41, 42}; + List<ItemStack> items = new ArrayList<>(); + items.add(Utils.createItem(Material.PAPER, "&5&lWho can claim bounties?", + "&7Only players that are on the Hitman Job", "&7can claim the money from bounties.")); + items.add(Utils.createItem(Material.PAPER, "&5&lWho can place bounties?", "&7Anyone with at least $2.000", + "&7can place a bounty on a player.")); + items.add(Utils.createItem(Material.PAPER, "&5&lWhat are Anonymous bounties?", + "&7Your name will not be shown in the List", "&7for placing an Anonymous Bounty.")); + items.add(Utils.createItem(Material.PAPER, "&5&lHow long do bounties last?", + "&7If a bounty hasn't been claimed within", "&724 hours, all money will be lost.")); + items.add(Utils.createItem(Material.PAPER, "&5&lCan 2 people pay for the same bounty?", + "&7Multiple people can place a bounty", "&7on the same player.", "&7The hitman will receive the total amount.")); + for (int i = 0; i < items.size(); i++) + e.setItem(slots[i], items.get(i)); + e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the bounties page!")); + e.setItem(49, Utils.createItem(Material.BOOK, "&5&lBounties Help", "&7Some helpful information!")); + return; + } + case "bountiesplace": { + this.setPhoneDefaults(e); + GTMUser user = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + if (user.getBountyName() == null) + e.setItem(11, Utils.createItem(Material.SKULL_ITEM, 3, "&5&lChoose Player", "&7Pick your target!")); + else + e.setItem(11, Utils.setSkullOwner( + Utils.createItem(Material.SKULL_ITEM, 3, "&5&lChoose Player", "&7" + user.getBountyName()), + user.getBountyName())); + if (user.getBountyAmount() <= 0) + e.setItem(15, Utils.createItem(Material.PAPER, 1, "&5&lChoose Amount", "&7Name your price!")); + else + e.setItem(15, Utils.createItem(Material.PAPER, "&5&lChoose Amount", "&a$&l" + user.getBountyAmount())); + e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the bounties page!")); + e.setItem(49, Utils.createItem(Material.SLIME_BALL, "&5&lConfirm Bounty", "&7Click to place the hit!")); + e.setItem(51, Utils.createItem(Material.SKULL_ITEM, 1, "&5&lPlace Anonymously", "&7No one will know!")); + return; + } + case "kits": { + this.setPhoneDefaults(e); + GTMUser gtmUser = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the home page!")); + int[] grSlots = new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 29}; + int[] jobSlots = new int[]{31, 33}; + int[] otherSlots = new int[]{30, 32,}; + int[] urSlots = new int[]{38, 39, 40, 41, 42}; + int i = 0; + GTMRank gtmRank = gtmUser.getRank(); + for (GTMRank rank : GTMRank.getGTMRanks()) { + Kit kit = GTM.getItemManager().getKit(rank.getName().toLowerCase()); + if (kit == null) { + continue; + } + List<String> lore = new ArrayList<>(); + + lore.add(""); + lore.addAll(kit.getContents().stream().map(KitItem::getDescription).collect(Collectors.toList())); + if (kit.getHelmet() != null) + lore.add("&7Helmet: " + kit.getHelmet().getDescription()); + if (kit.getChestPlate() != null) + lore.add("&7Chestplate: " + kit.getChestPlate().getDescription()); + if (kit.getLeggings() != null) + lore.add("&7Leggings: " + kit.getLeggings().getDescription()); + if (kit.getBoots() != null) + lore.add("&7Boots: " + kit.getBoots().getDescription()); + if (kit.getOffHand() != null) + lore.add("&7Offhand: " + kit.getOffHand().getDescription()); + + lore.add(""); + if (gtmUser.getJobMode() != JobMode.CRIMINAL) + lore.add("&cRequires " + JobMode.CRIMINAL.getColoredNameBold() + " Mode"); + if (!(rank == GTMRank.HOBO || rank == gtmRank)) + lore.add("&7Requires exact rank " + rank.getColoredNameBold()); + if (kit.getCost() > 0) + lore.add("&7Cost: &a$&l" + kit.getCost()); + if (kit.getDelay() > 0) + lore.add(gtmUser.canUseKit(kit.getName()) + ? "&7Delay: &a&l" + Utils.timeInSecondsToText(kit.getDelay()) + : "&cTime Left: &l" + Utils.timeInMillisToText( + gtmUser.getKitExpiry(kit.getName()) - System.currentTimeMillis())); + + ItemStack item = Utils.createItem(rank.getMaterial(), rank.getColoredNameBold(), lore); + ItemMeta meta = item.getItemMeta(); + meta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_DESTROYS, + ItemFlag.HIDE_ENCHANTS, ItemFlag.HIDE_POTION_EFFECTS); + item.setItemMeta(meta); + e.setItem(grSlots[i], item); + i++; + } + i = 0; + for (JobMode job : new JobMode[]{JobMode.COP, JobMode.HITMAN}) { + Kit kit = GTM.getItemManager().getKit(job.getName().toLowerCase()); + if (kit == null) { + continue; + } + + List<String> lore = new ArrayList<>(); + lore.add(""); + + lore.addAll(kit.getContents().stream().map(KitItem::getDescription).collect(Collectors.toList())); + if (kit.getHelmet() != null) + lore.add("&7Helmet: " + kit.getHelmet().getDescription()); + if (kit.getChestPlate() != null) + lore.add("&7Chestplate: " + kit.getChestPlate().getDescription()); + if (kit.getLeggings() != null) + lore.add("&7Leggings: " + kit.getLeggings().getDescription()); + if (kit.getBoots() != null) + lore.add("&7Boots: " + kit.getBoots().getDescription()); + if (kit.getOffHand() != null) + lore.add("&7Offhand: " + kit.getOffHand().getDescription()); + + lore.add(""); + if (gtmUser.getJobMode() != job) + lore.add("&cRequires " + job.getColoredNameBold() + " Mode"); + if (kit.getCost() > 0) + lore.add("&7Cost: &a$&l" + kit.getCost()); + if (kit.getDelay() > 0) + lore.add(gtmUser.canUseKit(kit.getName()) + ? "&7Delay: &a&l" + Utils.timeInSecondsToText(kit.getDelay()) + : "&cTime Left: &l" + Utils.timeInMillisToText( + gtmUser.getKitExpiry(kit.getName()) - System.currentTimeMillis())); + + ItemStack item = Utils.createItem(job.getMaterial(), job.getColoredNameBold(), lore); + if (job.getMaterial() == Material.LEATHER_CHESTPLATE) + item = Utils.setArmorColor(item, Color.BLUE); + else if (job.getMaterial() == Material.SKULL_ITEM) + item.setDurability((short) 1); + ItemMeta meta = item.getItemMeta(); + meta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_DESTROYS, + ItemFlag.HIDE_ENCHANTS, ItemFlag.HIDE_POTION_EFFECTS); + item.setItemMeta(meta); + e.setItem(jobSlots[i], item); + i++; + } + i = 0; + for (UserRank rank : UserRank.getDonorRanks()) { + Kit kit = GTM.getItemManager().getKit(rank.getName().toLowerCase()); + if (kit == null) { + i++; + continue; + } + List<String> lore = new ArrayList<>(); + + lore.add(""); + lore.addAll(kit.getContents().stream().map(KitItem::getDescription).collect(Collectors.toList())); + if (kit.getHelmet() != null) + lore.add("&7Helmet: " + kit.getHelmet().getDescription()); + if (kit.getChestPlate() != null) + lore.add("&7Chestplate: " + kit.getChestPlate().getDescription()); + if (kit.getLeggings() != null) + lore.add("&7Leggings: " + kit.getLeggings().getDescription()); + if (kit.getBoots() != null) + lore.add("&7Boots: " + kit.getBoots().getDescription()); + if (kit.getOffHand() != null) + lore.add("&7Offhand: " + kit.getOffHand().getDescription()); + + lore.add(""); + if (!(rank == user.getUserRank() + || (rank == UserRank.SUPREME && user.getUserRank().isHigherThan(UserRank.SUPREME)))) + lore.add("&cRequires " + rank.getColoredNameBold()); + if (kit.getCost() > 0) + lore.add("&7Cost: &a$&l" + kit.getCost()); + if (kit.getDelay() > 0) + lore.add(gtmUser.canUseKit(kit.getName()) + ? "&7Delay: &a&l" + Utils.timeInSecondsToText(kit.getDelay()) + : "&cTime Left: &l" + Utils.timeInMillisToText( + gtmUser.getKitExpiry(kit.getName()) - System.currentTimeMillis())); + + ItemStack item = Utils.createItem(rank.getMaterial(), rank.getColoredNameBold(), lore); + ItemMeta meta = item.getItemMeta(); + meta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_DESTROYS, + ItemFlag.HIDE_ENCHANTS, ItemFlag.HIDE_POTION_EFFECTS); + item.setItemMeta(meta); + e.setItem(urSlots[i], item); + i++; + } + i = 0; + for (Kit kit : GTM.getItemManager().getKits()) { + if (GTMRank.getRankOrNull(kit.getName()) != null || UserRank.getUserRankOrNull(kit.getName()) != null + || JobMode.getModeOrNull(kit.getName()) != null) + continue; + List<String> lore = new ArrayList<>(); + + lore.add(""); + lore.addAll(kit.getContents().stream().map(KitItem::getDescription).collect(Collectors.toList())); + + lore.add(""); + if (kit.getPermission() != null && !player.hasPermission(kit.getPermission())) + lore.add("&cRequires permission " + kit.getPermission()); + if (kit.getCost() > 0) + lore.add("&7Cost: &a$&l" + kit.getCost()); + if (kit.getDelay() > 0) + lore.add(gtmUser.canUseKit(kit.getName()) + ? "&7Delay: &a&l" + Utils.timeInMillisToText((long) kit.getDelay() * 1000) + : "&cTime Left: &l" + Utils.timeInMillisToText( + gtmUser.getKitExpiry(kit.getName()) - System.currentTimeMillis())); + + ItemStack item = Utils.createItem(kit.getMaterial(), "&b&l" + kit.getName().toUpperCase(), lore); + ItemMeta meta = item.getItemMeta(); + meta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_DESTROYS, + ItemFlag.HIDE_ENCHANTS, ItemFlag.HIDE_POTION_EFFECTS); + item.setItemMeta(meta); + + try { + e.setItem(otherSlots[i], item); + i++; + if (i > otherSlots.length) break; + } catch (ArrayIndexOutOfBoundsException ex) {} + } + + return; + + } + case "contacts": { + this.setPhoneDefaults(e); + GTMUser user = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + e.setItem(11, Utils.createItem(Material.STORAGE_MINECART, "&e&lTaxi Service", "&7Click to select a destination!")); + e.setItem(13, Utils.createItem(Material.SKULL_ITEM, 2, user.getJobMode() == JobMode.COP ? "&3&lBackup" : "&3&lPolice", user.getJobMode() == JobMode.COP ? "&7Click to request help from fellow officers!" : "&7Click to call the cops to your location!")); + e.setItem(15, Utils.createItem(Material.WOOD_SWORD, "&c&lSuicide Hotline", "&7Call the Suicide Hotline!")); + + e.setItem(29, Utils.createItem(Material.ANVIL, "&2&lCheat Codes", "&7Become a cheater and rule the game!")); + + e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the home page!")); + e.setItem(49, Utils.createItem(Material.WATCH, "&c&l911 Emergency", "&7Click to teleport out of here!")); + + + return; + } + case "taxi": + this.setPhoneDefaults(e); + e.setItem(11, Utils.createItem(Material.SKULL_ITEM, 3, "&e&lPlayer", "&7Click to select a player!")); + e.setItem(13, Utils.createItem(Material.EMERALD, "&a&lQuick Play", "&7Click to teleport to a random location!")); + e.setItem(22, Utils.createItem(Material.ENDER_PEARL, "&e&lWarp", "&7Click to select a warp!")); + e.setItem(15, Utils.createItem(Material.IRON_DOOR, "&3&lHouse", "&7Click to select a house!")); + e.setItem(31, Utils.createItem(Material.BED, "&e&lSpawn", "&7Click to teleport to spawn!")); + e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the contacts page!")); + e.setItem(49, Utils.createItem(Material.STORAGE_MINECART, "&e&lTaxi Service", + "&7Click a button to select your destination!")); + return; + case "taxiplayers": { + this.setPhoneDefaults(e); + List<Player> players = new ArrayList<>(); + for (Player bp : Bukkit.getOnlinePlayers()) { + if (!player.getUniqueId().equals(bp.getUniqueId())) { + players.add(bp); + } + } + int[] slots = new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 38, 39, 40, 41, 42}; + Iterator<Player> it = players.iterator(); + User u = Core.getUserManager().getLoadedUser(player.getUniqueId()); + for (int i = 0; i < 20; i++) { + if (!it.hasNext()) + break; + Player p = it.next(); + e.setItem( + slots[i], Utils + .setSkullOwner( + Utils.createItem(Material.SKULL_ITEM, 3, + "&e&l" + p.getName(), u.isPremium() + ? "&7Click to send teleport request!" : "&cRequires PREMIUM!"), + p.getName())); + } + e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the taxi page!")); + e.setItem(49, Utils.createItem(Material.STORAGE_MINECART, "&e&lTaxi Service: Players", "&7Page 1")); + if (players.size() > 20) + e.setItem(50, Utils.createItem(Material.ARROW, "&e&lNext Page", "&7Page 2")); + return; + } + case "taxihouses": { + this.setPhoneDefaults(e); + int[] slots = new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 38, 39, 40, 41, 42, + 47, 48, 49, 50, 51}; + User u = Core.getUserManager().getLoadedUser(uuid); + GTMUser gtmUser = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + HouseUser user = Houses.getUserManager().getLoadedUser(player.getUniqueId()); + List<UserHouse> houses = user.getHouses(); + List<PremiumHouse> premiumHouses = user.getPremiumHousesAsGuest(); + Iterator<UserHouse> it = houses.iterator(); + Iterator<PremiumHouse> it2 = premiumHouses.iterator(); + for (int i = 0; i < 20; i++) { + PremiumHouse premiumHouse = it.hasNext() ? null : it2.hasNext() ? it2.next() : null; + UserHouse userHouse = it.hasNext() ? it.next() : null; + if (premiumHouse == null && userHouse == null) + break; + if (premiumHouse != null) { + e.setItem(slots[i], + Utils.addGlow(Utils.createItem( + Material.IRON_DOOR, "&3&lPremium House: &a&l" + premiumHouse.getId(), Arrays.asList( + "Permits: &a&l" + premiumHouse.getPermits(), + "&7Chests: &a&l" + premiumHouse.getChests().size(), + "&7Owned by &a" + (Objects.equals(player.getUniqueId(), premiumHouse.getOwner()) + ? "me" : premiumHouse.getOwnerName()) + '.', + u.isRank(UserRank.ELITE) ? "&7Click to teleport!" : + gtmUser.hasMoney(500) ? "&7Click to teleport for &a$&l500&7!" : "&cYou can't afford &c$&l500&c to pay for the ride!")))) + ; + continue; + } + + House house = Houses.getHousesManager().getHouse(userHouse.getId()); + e.setItem(slots[i], + Utils.createItem(Material.IRON_DOOR, "&3&lHouse: &a&l" + house.getId(), + Arrays.asList("&7Price: &a$&l" + house.getPrice(), + "&7Chests: &a&l" + house.getChests().size(), + u.isRank(UserRank.ELITE) ? "&7Click to teleport!" : gtmUser.hasMoney(500) ? "&7Click to teleport for &a$&l500&7!" : "&cYou can't afford &c$&l500&c to pay for the ride!"))); + } + e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the taxi page!")); + e.setItem(49, Utils.createItem(Material.STORAGE_MINECART, "&e&lTaxi Service: &3&lHouses", "&7Page 1")); + if (houses.size() > 20) + e.setItem(50, Utils.createItem(Material.ARROW, "&e&lNext Page", "&7Page 2")); + return; + } + case "taxiwarps": { + this.setPhoneDefaults(e); + User u = Core.getUserManager().getLoadedUser(uuid); + GTMUser user = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + List<Warp> warps = GTM.getWarpManager().getWarps(); + int[] slots = new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 38, 39, 40, 41, 42}; + Iterator<Warp> it = warps.iterator(); + for (int i = 0; i < 20; i++) { + if (!it.hasNext()) + break; + Warp warp = it.next(); + e.setItem(slots[i], Utils.createItem(Material.ENDER_PEARL, "&e&l" + warp.getName(), + u.isRank(UserRank.ELITE) ? "&7Click to teleport!" : "&7Click to teleport for &a$&l200&7!")); + } + e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the taxi page!")); + e.setItem(49, Utils.createItem(Material.STORAGE_MINECART, "&e&lTaxi Service: Warps", "&7Page 1")); + if (warps.size() > 20) + e.setItem(50, Utils.createItem(Material.ARROW, "&e&lNext Page", "&7Page 2")); + return; + } + case "bank": { + this.setPhoneDefaults(e); + GTMUser user = GTMUserManager.getInstance().getUser(player.getUniqueId()).orElse(null); + if (user != null){ + e.setItem(13, + Utils.createItem(Material.SKULL_ITEM, 3, "&a&lTransfer Money", "&7Send money to another player!")); + e.setItem(29, Utils.createItem(Material.INK_SACK, 1, "&c&lWithdraw Money", "&7Take it all!")); + e.setItem(31, + Utils.createItem(Material.BOOK, "&3&lBank Balance: &a$&l" + Utils.formatMoney(user.getBank()), "&7You a rich fool!")); + e.setItem(33, + Utils.createItem(Material.SLIME_BALL, "&a&lDeposit Money", "&7Trust me! Your money is safe here!")); + e.setItem(49, Utils.createItem(Material.PAPER, "&3&lBanking", "&7Your financial buddy!")); + e.setItem(47, Utils.createItem(Material.REDSTONE, "&7Return to the property page!")); + } + return; + } + case "bankwithdraw": { + this.setPhoneDefaults(e); + GTMUser user = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + int[] slots = new int[]{12, 13, 14, 21, 22, 23, 30, 31, 32}; + int[] amnts = new int[]{100, 200, 500, 1000, 2000, 5000, 10000, 20000, 50000}; + for (int i = 0; i < 9; i++) + e.setItem(slots[i], Utils.createItem(Material.PAPER, + (user.hasBank(amnts[i]) ? "&a" : "&c") + "$&l" + amnts[i], "&7Click to withdraw!")); + e.setItem(39, Utils.createItem(Material.PAPER, "&3&lHalf: &a$&l" + Utils.round(user.getBank() / 2), + "&7Click to withdraw!")); + e.setItem(40, Utils.createItem(Material.PAPER, "&3&lAll: &a$&l" + user.getBank(), "&7Click to withdraw")); + e.setItem(41, + Utils.createItem(Material.BOOK_AND_QUILL, "&a&lCustom Amount", "&7Click to choose an amount!")); + e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the banking page!")); + return; + } + case "bankdeposit": { + this.setPhoneDefaults(e); + GTMUser user = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + int[] slots = new int[]{12, 13, 14, 21, 22, 23, 30, 31, 32}; + int[] amnts = new int[]{100, 200, 500, 1000, 2000, 5000, 10000, 20000, 50000}; + for (int i = 0; i < 9; i++) + e.setItem(slots[i], Utils.createItem(Material.PAPER, + (user.hasMoney(amnts[i]) ? "&a" : "&c") + "$&l" + amnts[i], "&7Click to deposit!")); + e.setItem(39, Utils.createItem(Material.PAPER, "&3&lHalf: " + (user.hasMoney(200) ? "&a" : "&c") + "$&l" + Utils.round(user.getMoney() / 2), + "&7Click to deposit!")); + e.setItem(40, Utils.createItem(Material.PAPER, "&3&lAll: " + (user.hasMoney(200) ? "&a" : "&c") + "$&l" + user.getMoney(), "&7Click to deposit")); + e.setItem(41, + Utils.createItem(Material.BOOK_AND_QUILL, "&a&lCustom Amount", "&7Click to choose an amount!")); + e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the banking page!")); + return; + } + case "banktransfer": { + this.setPhoneDefaults(e); + GTMUser user = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + int[] slots = new int[]{12, 13, 14, 21, 22, 23, 30, 31, 32}; + int[] amnts = new int[]{100, 200, 500, 1000, 2000, 5000, 10000, 20000, 50000}; + for (int i = 0; i < 9; i++) + e.setItem(slots[i], Utils.createItem(Material.PAPER, + (user.hasBank(amnts[i]) ? "&a" : "&c") + "$&l" + amnts[i], "&7Click to transfer!")); + e.setItem(39, Utils.createItem(Material.PAPER, "&3&lHalf: &a$&l" + Utils.round(user.getBank() / 2), + "&7Click to transfer!")); + e.setItem(40, Utils.createItem(Material.PAPER, "&3&lAll: &a$&l" + user.getBank(), "&7Click to transfer")); + e.setItem(41, + Utils.createItem(Material.BOOK_AND_QUILL, "&a&lCustom Amount", "&7Click to choose an amount!")); + e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the banking page!")); + return; + } + case "gps": { + this.setGPSDefaults(e); + GTMUser u = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + Optional<Gang> optional = GangManager.getInstance().getGangByMember(player.getUniqueId()); + + e.setItem(10, Utils.setArmorColor(Utils.createItem(Material.LEATHER_CHESTPLATE, "&a&lGang Member", !optional.isPresent() ? "&cYou don't have a gang!" : "&7Click to select a homie!"), Color.fromRGB(102, 127, 51))); + HouseUser user = Houses.getUserManager().getLoadedUser(uuid); + e.setItem(13, Utils.createItem(Material.IRON_DOOR, "&3&lHouses", user.getHouses().isEmpty() && user.getPremiumHousesAsGuest().isEmpty() ? "&cYou don't own any houses!" : "&7Click to select a house!")); + e.setItem(16, Utils.setArmorColor(Utils.createItem(Material.LEATHER_HELMET, "&b&lAssist Cop", u.getJobMode() == JobMode.COP ? "&7Click to select a cop!" : "&cRequires COP Mode!"), + Color.BLUE)); + if (u.hasPersonalVehicle()) { + PersonalVehicle vehicle = u.getPersonalVehicle(); + ItemStack stack = vehicle.getVehicleProperties().getItem().clone(); + ItemMeta meta = stack.getItemMeta(); + List<String> lore = new ArrayList<>(meta.getLore()); + lore.add(Utils.f("&7Health: " + vehicle.getFormattedHealth())); + lore.add(Utils.f("&aClick to track your personal vehicle!")); + stack.setItemMeta(meta); + e.setItem(29, Utils.addGlow(stack)); + } + e.setItem(31, Utils.createItem(Material.REDSTONE, "&c&lReset Tracker", "&7Click to reset!")); + e.setItem(46, Utils.createItem(Material.SKULL_ITEM, 3, "&e&lWanted Criminal", + u.getJobMode() == JobMode.COP ? "&7Click to select a criminal!" : "&cRequires COP Mode!")); + e.setItem(49, Utils.createItem(Material.COMPASS, "&c&lGPS Tracker", + u.hasCompassTarget() ? "&7Click to refresh!" : "&7Click a button to set your destination!")); + e.setItem(52, + Utils.createItem(Material.SKULL_ITEM, 1, "&5&lBounty Tracker", + u.getJobMode() == JobMode.HITMAN ? "&7Click to select a wanted player!" + : "&cRequires HITMAN Mode!")); + return; + } + case "gpsgangs": { + this.setGPSDefaults(e); + int[] slots = new int[]{10, 11, 12, 13, 14, 15, 16, 19, 20, 21, 22, 23, 24, 25, 28, 29, 30, 31, 32, 33, 34, 37, 38, 39, 40, 41, 42, 43}; + + Optional<Gang> optional = GangManager.getInstance().getGangByMember(uuid); + if (!optional.isPresent()) { + MenuManager.openMenu(player, "gps"); + return; + } + + List<String> members = new ArrayList<>(optional.get().getMembers().stream().filter(member -> !Objects.equals(member.getUniqueId(), player.getUniqueId()) && Bukkit.getPlayer(member.getUniqueId()) != null).map(GangMember::getName).collect(Collectors.toList())); + + members.remove(player.getName()); + Iterator<String> it = members.iterator(); + for (int i = 0; i < 28; i++) { + if (!it.hasNext()) + break; + String member = it.next(); + e.setItem(slots[i], Utils.setSkullOwner( + Utils.createItem(Material.SKULL_ITEM, 3, "&a&l" + member, "&7Click to track your homie!"), + member)); + } + e.setItem(49, Utils.setArmorColor(Utils.createItem(Material.LEATHER_CHESTPLATE, "&a&lTrack Gang Member", + "&7Click on a gang member to select them!"), Color.fromRGB(102, 127, 51))); + e.setItem(46, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the home page!")); + if (members.size() > 28) + e.setItem(50, Utils.createItem(Material.ARROW, "&a&lNext Page", "&7Page 2")); + return; + } + case "gpshouses": { + int[] slots = new int[]{10, 11, 12, 13, 14, 15, 16, 19, 20, 21, 22, 23, 24, 25, 28, 29, 30, 31, 32, 33, + 34, 37, 38, 39, 40, 41, 42, 43}; + this.setGPSDefaults(e); + HouseUser user = Houses.getUserManager().getLoadedUser(player.getUniqueId()); + List<UserHouse> houses = user.getHouses(); + List<PremiumHouse> premiumHouses = user.getPremiumHousesAsGuest(); + int counter = 0; + for(PremiumHouse house : premiumHouses) { + if(counter>=28) + break; + e.setItem(slots[counter], + Utils.addGlow( + Utils.createItem(Material.IRON_DOOR, "&3&lPremium House: &a&l" + house.getId(), + Arrays.asList("&7Permits: " + house.getPermits(), + "&7Chests: " + house.getChests().size(), + "&7Owned by " + (Objects.equals(player.getUniqueId(), house.getOwner()) + ? "me" : house.getOwnerName()) + '.', + "&7Click to track!")))); + counter++; + } + for(UserHouse userHouse : houses) { + if(counter>=28) + break; + House house = Houses.getHousesManager().getHouse(userHouse.getId()); + e.setItem(slots[counter], Utils.createItem(Material.IRON_DOOR, "&3&lHouse: &a&l" + house.getId(), Arrays.asList("&7Price: " + house.getPrice(), "&7Chests: " + house.getChests().size(), "&7Click to track!"))); + counter++; + } + e.setItem(49, + Utils.setArmorColor( + Utils.createItem(Material.IRON_DOOR, "&3&lFind House", "&7Click on a house to select it!"), + Color.fromRGB(102, 127, 51))); + e.setItem(46, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the home page!")); + if ((houses.size() + premiumHouses.size()) > 28) + e.setItem(50, Utils.createItem(Material.ARROW, "&a&lNext Page", "&7Page 2")); + return; + } + case "gpscops": { + this.setGPSDefaults(e); + int[] slots = new int[]{10, 11, 12, 13, 14, 15, 16, 19, 20, 21, 22, 23, 24, 25, 28, 29, 30, 31, 32, 33, + 34, 37, 38, 39, 40, 41, 42, 43}; + List<GTMUser> cops = GTMUtils.getCops(); + cops.remove(GTM.getUserManager().getLoadedUser(player.getUniqueId())); + Iterator<GTMUser> it = cops.iterator(); + for (int i = 0; i < 28; i++) { + if (!it.hasNext()) + break; + GTMUser u = it.next(); + Player p = Bukkit.getPlayer(u.getUUID()); + e.setItem(slots[i], Utils.setSkullOwner(Utils.createItem(Material.SKULL_ITEM, 3, "&b&l" + p.getName(), + "&7Click to track your colleague!"), p.getName())); + } + e.setItem(49, Utils.setArmorColor( + Utils.createItem(Material.LEATHER_CHESTPLATE, "&b&lAssist Cop", "&7Click on a cop to select them!"), + Color.fromRGB(102, 127, 51))); + e.setItem(46, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the home page!")); + if (cops.size() > 28) + e.setItem(50, Utils.createItem(Material.ARROW, "&b&lNext Page", "&7Page 2")); + return; + } + case "gpscriminals": { + this.setGPSDefaults(e); + int[] slots = new int[]{10, 11, 12, 13, 14, 15, 16, 19, 20, 21, 22, 23, 24, 25, 28, 29, 30, 31, 32, 33, + 34, 37, 38, 39, 40, 41, 42, 43}; + Set<GTMUser> criminals = GTMUtils.getCriminalsByWantedLevel(2); + criminals.remove(GTM.getUserManager().getLoadedUser(player.getUniqueId())); + Iterator<GTMUser> it = criminals.iterator(); + for (int i = 0; i < 28; i++) { + if (!it.hasNext()) + break; + GTMUser u = it.next(); + Player p = Bukkit.getPlayer(u.getUUID()); + e.setItem(slots[i], Utils.setSkullOwner(Utils.createItem(Material.SKULL_ITEM, 3, "&e&l" + p.getName(), + "&7Click to track this criminal!"), p.getName())); + } + e.setItem(49, Utils.createItem(Material.COMPASS, "&e&lTrack Wanted Criminal", + "&7Click on a criminal to select them!")); + e.setItem(46, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the home page!")); + if (criminals.size() > 28) + e.setItem(50, Utils.createItem(Material.ARROW, "&e&lNext Page", "&7Page 2")); + return; + } + case "gpsbounties": { + BountyManager bm = GTM.getBountyManager(); + this.setGPSDefaults(e); + Set<Bounty> bounties = bm.getBountiesByAmount(); + int[] slots = new int[]{10, 11, 12, 13, 14, 15, 16, 19, 20, 21, 22, 23, 24, 25, 28, 29, 30, 31, 32, 33, + 34, 37, 38, 39, 40, 41, 42, 43}; + Iterator<Bounty> it = bounties.iterator(); + for (int i = 0; i < 28; i++) { + if (!it.hasNext()) + break; + Bounty b = it.next(); + List<String> lore = new ArrayList<>(); + lore.add("&7Bounty Total: &a$&l" + b.getAmount()); + lore.add(""); + double anon = 0; + for (BountyPlacer p : b.getPlacers()) + if (p.isAnonymous()) + anon += p.getAmount(); + else + lore.add("&7" + p.getName() + ": &a$&l" + p.getAmount()); + if (anon > 0) { + lore.add("&7Anonymous: &a$&l" + anon); + } + e.setItem(slots[i], Utils.setSkullOwner( + Utils.createItem(Material.SKULL_ITEM, 3, "&5&l" + b.getName(), lore), b.getName())); + } + e.setItem(46, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the home page!")); + e.setItem(49, Utils.createItem(Material.COMPASS, "&5&lTrack Bounties", "&7Page 1")); + if (bounties.size() > 28) + e.setItem(50, Utils.createItem(Material.ARROW, "&5&lNext Page", "&7Page 2")); + return; + } + case "mygang": { + this.setPhoneDefaults(e); + GTMUser user = GTM.getUserManager().getLoadedUser(uuid); + + Optional<Gang> optional = GangManager.getInstance().getGangByMember(uuid); + + if (!optional.isPresent()) { + e.setItem(31, Utils.createItem(Material.SLIME_BALL, "&a&lCreate Gang", "&7Price: " + (user.hasMoney(500000) ? "&a" : "&c") + "$&l500,000")); + return; + } + + e.setItem(13, Utils.setSkullOwner(Utils.createItem(Material.SKULL_ITEM, 2, + "&a&lLeader: " + optional.get().getOwnerName(), optional.get().isLeader(uuid) + ? Collections.singletonList("&7Click to appoint a new leader!") : Collections.emptyList()), + optional.get().getOwnerName())); + + if (optional.get().isLeader(uuid)) e.setItem(31, Utils.createItem(Material.INK_SACK, 1, "&c&lDisband Gang", "&7Click to abandon your homies!")); + else e.setItem(31, Utils.createItem(Material.INK_SACK, 1, "&c&lLeave Gang", "&7Click to abandon your homies!")); + + e.setItem(29, Utils.createItem(Material.BOOK_AND_QUILL, "&a&lGang Relations", "&7Click to view your allies and enemies!")); + e.setItem(33, Utils.createItem(Material.TRIPWIRE_HOOK, "&a&lView Members", "&7Click to view your homies!")); + e.setItem(15, Utils.createItem(Material.EMPTY_MAP, "&a&lDescription", optional.get().isLeader(uuid) || optional.get().isCoLeader(uuid) + ? Arrays.asList("&7" + optional.get().getDescription(), "&7Click to change!") + : Collections.singletonList("&7" + optional.get().getDescription()))); + + e.setItem(11, Utils.createItem(Material.FEATHER, "&a&lName: " + optional.get().getName(), optional.get().isLeader(uuid) ? Collections.singletonList("&7Click to change the name!") : Collections.emptyList())); + e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the home page!")); + e.setItem(49, Utils.setArmorColor(Utils.createItem(Material.LEATHER_CHESTPLATE, "&a&lMy Gang: " + optional.get().getName()), Color.fromRGB(102, 127, 51))); + e.setItem(51, Utils.createItem(Material.BOOK, "&a&lGang List", "&7Click to view the most powerful gangs!")); + return; + } + case "gang": { + this.setPhoneDefaults(e); + GTMUser user = GTM.getUserManager().getLoadedUser(uuid); + + Optional<Gang> ownGang = GangManager.getInstance().getGangByMember(uuid); + if(!ownGang.isPresent()) return; + Gang gang = ownGang.get().getViewingGang(uuid).orElse(null); + + GTM.log("1"); + boolean isEnemy = ownGang.get().isEnemy(gang); + if (gang == null) { + e.setItem(31, Utils.createItem(Material.INK_SACK, 1, "&c&lGang: Unknown", "&7This gang does not exist!")); + return; + } + + GTM.log("2"); + if (Objects.equals(gang, ownGang.get())) { + ServerUtil.runTaskLater(() -> MenuManager.openMenu(player, "mygang"), 1); +// new BukkitRunnable() { +// @Override +// public void run() { +// MenuManager.openMenu(player, "mygang"); +// } +// }.runTaskLater(GTM.getInstance(), 1); + return; + } + + GTM.log("3"); + e.setItem(13, Utils.setSkullOwner(Utils.createItem(Material.SKULL_ITEM, 2, "&a&lLeader: " + gang.getOwnerName()), gang.getOwnerName())); + e.setItem(29, Utils.createItem(Material.BOOK_AND_QUILL, "&a&lGang Relations", "&7Click to view this gang's allies and enemies!")); + e.setItem(33, Utils.createItem(Material.TRIPWIRE_HOOK, "&a&lView Members", "&7Click to view this gang's homies!")); + e.setItem(15, Utils.createItem(Material.EMPTY_MAP, "&a&lDescription", "&7" + gang.getDescription())); + e.setItem(11, Utils.createItem(Material.FEATHER, "&a&lName: &7&l" + gang.getName())); + e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the home page!")); + e.setItem(49, Utils.setArmorColor(Utils.createItem(Material.LEATHER_CHESTPLATE, (isEnemy ? "&c" : "&a") + "&lGang: " + gang.getName()), isEnemy ? Color.RED : Color.fromRGB(102, 127, 51))); + e.setItem(51, Utils.createItem(Material.BOOK, "&a&lGang List", "&7Click to view the most powerful gangs!")); + return; + } + + case "disbandgang": + this.setConfirmDefaults(e, "&a&lClick to disband your gang!", "&c&lCancel"); + return; + + case "leavegang": + this.setConfirmDefaults(e, "&a&lClick to leave your gang!", "&c&lCancel"); + return; + + case "mygangmembers": { + this.setPhoneDefaults(e); + GTMUser user = GTM.getUserManager().getLoadedUser(uuid); + Gang gang = GangManager.getInstance().getGangByMember(uuid).orElse(null); + if(gang == null) return; + + List<GangMember> members = new ArrayList<>(gang.getMembers()); + int[] slots = new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 38, 39, 40, 41, 42}; + Iterator<GangMember> it = members.iterator(); + for (int i = 0; i < 20; i++) { + if (!it.hasNext()) break; + GangMember m = it.next(); + + e.setItem(slots[i], Utils.setSkullOwner(Utils.createItem(Material.SKULL_ITEM, 3, "&a&l" + m.getName(), "&7Rank: &a&l" + m.getRole().getFormattedTag(), + "&7Online: &a&l" + m.isOnline(), "&7Click to view this gang member!"), m.getName())); + } + + e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the gang page!")); + e.setItem(49, Utils.setArmorColor(Utils.createItem(Material.LEATHER_CHESTPLATE, "&a&lMy Gang Members", "&7Page 1"), Color.fromRGB(102, 127, 51))); + if (members.size() > 20) e.setItem(50, Utils.createItem(Material.ARROW, "&a&lNext Page", "&7Page 2")); + int size = members.size(); + int max = gang.getMaxMembers(); + + List<String> lore = new ArrayList<>(); + lore.add("&7Your gang can have &a" + (max - size) + "&7 more members!"); + if (gang.isLeader(uuid)) { + if (size >= max) lore.add("&7Go to &a" + Core.getSettings().getStoreLink() + "&7 to get more gang members!"); + lore.add("&7Click to invite a player!"); + } + + if (gang.isCoLeader(uuid)) lore.add("&7Click to invite a player!"); + e.setItem(51, Utils.createItem(Material.BOOK, "&a&lMax Gang Members: &a&l" + size + "&7/&a&l" + max, lore)); + return; + } + + case "gangmember": { + this.setPhoneDefaults(e); + GTMUser user = GTM.getUserManager().getLoadedUser(uuid); + + Gang gang = GangManager.getInstance().getGangByMember(uuid).orElse(null); + if (gang == null) return; + + GangMember member = gang.getViewingGangMember(uuid).orElse(null); + if (member == null) return; + + e.setItem(31, Utils.createItem(Material.SKULL_ITEM, 2, "&a&l" + member.getName(), "&7Online: &a&l" + (Bukkit.getPlayer(member.getUniqueId()) != null))); + e.setItem(15, Utils.createItem(Material.PAPER, "&a&lRank: " + member.getRole().getFormattedTag())); + if (gang.isLeader(uuid) || gang.isCoLeader(uuid)) { + if (member.isCoLeader()) e.setItem(13, Utils.createItem(Material.BOOK_AND_QUILL, 1, "&a&lDemote", "&7Make this player a Member!")); + else e.setItem(13, Utils.createItem(Material.SLIME_BALL, "&a&lPromote", "&7Make this player a Coleader!")); + e.setItem(11, Utils.createItem(Material.INK_SACK, 1, "&a&lKick", "&7Force this player to leave the gang!")); + } + + e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the gang page!")); + e.setItem(49, Utils.setArmorColor(Utils.createItem(Material.LEATHER_CHESTPLATE, "&a&lGang Member: " + member.getName()), Color.fromRGB(102, 127, 51))); + List<String> lore = new ArrayList<>(); + int size = gang.getMembers().size(); + int max = gang.getMaxMembers(); + lore.add("&7Your gang can have &a" + (max - size) + "&7 more members!"); + if (gang.isLeader(uuid) && size >= max) + lore.add("&7Go to &a" + Core.getSettings().getStoreLink() + "&7 to get more gang members!"); + + e.setItem(51, Utils.createItem(Material.BOOK, "&a&lMax Gang Members: &a&l" + size + "&7/&a&l" + max, lore)); + return; + + } + case "gangmembers": { + this.setPhoneDefaults(e); + GTMUser user = GTM.getUserManager().getLoadedUser(uuid); + Gang ownGang = GangManager.getInstance().getGangByMember(uuid).orElse(null); + if (ownGang == null) return; + + Gang gang = ownGang.getViewingGang(uuid).orElse(null); + if (gang == null) { + e.setItem(31, Utils.createItem(Material.INK_SACK, 1, "&c&lGang: &7&lUnknown", "&7This gang does not exist!")); + return; + } + + boolean isEnemy = ownGang.isEnemy(gang); + if (Objects.equals(gang, ownGang)) { + ServerUtil.runTaskLater(() -> MenuManager.openMenu(player, "mygangmembers"), 1); + return; + } + + List<GangMember> members = new ArrayList<>(gang.getMembers()); + int[] slots = new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 38, 39, 40, 41, 42}; + Iterator<GangMember> it = members.iterator(); + for (int i = 0; i < 20; i++) { + if (!it.hasNext()) break; + GangMember m = it.next(); + e.setItem(slots[i], Utils.setSkullOwner(Utils.createItem(Material.SKULL_ITEM, 3, (isEnemy ? "&c" : "&a") + "&l" + m.getName(), "&7Rank: &a&l" + m.getRole().getFormattedTag(), "&7Online: &a&l" + m.isOnline(), "&7Click to view this gang member!"), m.getName())); + } + + e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the gang page!")); + e.setItem(49, Utils.setArmorColor(Utils.createItem(Material.LEATHER_CHESTPLATE, (isEnemy ? "&c" : "&a") + "&lGang Members: &7&l" + gang.getName(), "&7Page 1"), isEnemy ? Color.RED : Color.fromRGB(102, 127, 51))); + if (members.size() > 20) e.setItem(50, Utils.createItem(Material.ARROW, "&a&lNext Page", "&7Page 2")); + + int size = members.size(); + int max = gang.getMaxMembers(); + e.setItem(51, Utils.createItem(Material.BOOK, "&a&lMax Gang Members: &a&l" + size + "&7/&a&l" + max, size >= max ? "&7Go to &a" + Core.getSettings().getStoreLink() + "&7 to get more gang members!" : "&7Your gang can have &a" + (max - size) + "&7 more members!")); + return; + } + case "mygangrelations": { + this.setPhoneDefaults(e); + GTMUser user = GTM.getUserManager().getLoadedUser(uuid); + Gang gang = GangManager.getInstance().getGangByMember(uuid).orElse(null); + if (gang == null) return; + + int[] slots = new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 38, 39, 40, 41, 42}; + Set<GangRelation> relations = gang.getRelations(); + int i = 0; + for (GangRelation r : relations) { + int online = 0; + int amnt = 0; + + Optional<Gang> optional = GangManager.getInstance().getGang(r.getRelativeId()); + if (optional.isPresent()) { + Gang ga = optional.get(); + online = ga.getOnlineMembers().size(); + amnt = ga.getMembers().size() + 1; + } + boolean isEnemy = gang.isEnemy(optional.get()); + boolean isAlly = gang.isAllied(optional.get()); + e.setItem(slots[i], Utils.setArmorColor(Utils.createItem(Material.LEATHER_CHESTPLATE, (isEnemy ? "&c" : "&a") + r.getRelativeName(), + "&7Relation: " + (isEnemy ? "&c&lEnemy" : isAlly ? "&a&lAlly" : "&a&lNeutral"), + amnt == 0 ? "&7Online Members: &c&l0" : "&7Online Members: &a&l" + online + "&7/&a&l" + amnt, + amnt == 0 ? "This gang is not online!" : "&7Click to view this gang!"), + isEnemy ? Color.RED : Color.fromRGB(102, 127, 51))); + i++; + } + e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the gang page!")); + e.setItem(49, Utils.setArmorColor(Utils.createItem(Material.LEATHER_CHESTPLATE, "&a&lMy Gang Relations", "&7Page 1"), Color.fromRGB(102, 127, 51))); + if (relations.size() > 20) + e.setItem(50, Utils.createItem(Material.ARROW, "&a&lNext Page", "&7Page 2")); + + if (gang.isLeader(uuid) || gang.isCoLeader(uuid)) + e.setItem(51, Utils.createItem(Material.BOOK, "&a&lSet Relation", "&7Click to set a relation towards an other gang!")); + return; + } + case "gangrelations": { + this.setPhoneDefaults(e); + GTMUser user = GTM.getUserManager().getLoadedUser(uuid); + + Gang ownGang = GangManager.getInstance().getGangByMember(uuid).orElse(null); + if (ownGang == null) return; + + Gang gang = ownGang.getViewingGang(uuid).orElse(null); + if (gang == null) { + e.setItem(31, Utils.createItem(Material.INK_SACK, 1, "&c&lGang: &7&lUnknown", "&7This gang does not exist!")); + return; + } + + boolean isOwnEnemy = ownGang.isEnemy(gang); + if (Objects.equals(gang, ownGang)) { + ServerUtil.runTaskLater(() -> MenuManager.openMenu(player, "mygangrelations"), 1); + return; + } + + int[] slots = new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 38, 39, 40, 41, 42}; + Set<GangRelation> relations = gang.getRelations(); + int i = 0; + for (GangRelation r : relations) { + int online = 0; + int amnt = 0; + + Optional<Gang> optional = GangManager.getInstance().getGang(r.getRelativeId()); + if (optional.isPresent()) { + Gang ga = optional.get(); + online = ga.getOnlineMembers().size(); + amnt = ga.getMembers().size() + 1; + } + boolean isEnemy = gang.isEnemy(optional.get()); + boolean isAlly = gang.isAllied(optional.get()); + e.setItem(slots[i], Utils.setArmorColor(Utils.createItem(Material.LEATHER_CHESTPLATE, (isEnemy ? "&c" : "&a") + optional.get().getName(), + "&7Relation: " + (isEnemy ? "&c&lEnemy" : isAlly ? "&a&lAlly" : "&a&lNeutral"), + amnt == 0 ? "&7Online Members: &c&l0" : "&7Online Members: &a&l" + online + "&7/&a&l" + amnt, + "&7Click to view this gang!"), + isEnemy ? Color.RED : Color.fromRGB(102, 127, 51))); + i++; + } + + e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the gang page!")); + e.setItem(49, Utils.setArmorColor(Utils.createItem(Material.LEATHER_CHESTPLATE, (isOwnEnemy ? "&c" : "&a") + "&lGang Relations: &7&l" + gang.getName(), "&7Page 1"), isOwnEnemy ? Color.RED : Color.fromRGB(102, 127, 51))); + if (relations.size() > 20) + e.setItem(50, Utils.createItem(Material.ARROW, "&a&lNext Page", "&7Page 2")); + + if (ownGang.isLeader(uuid) || ownGang.isCoLeader(uuid)) + e.setItem(51, Utils.createItem(Material.BOOK, "&a&lSet Relation", "&7Click to set a relation towards this gang!")); + return; + } + case "gangs": { + this.setPhoneDefaults(e); + GTMUser user = GTM.getUserManager().getLoadedUser(uuid); + Gang gang = GangManager.getInstance().getGangByMember(uuid).orElse(null); + if (gang == null) return; + + int[] slots = new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 38, 39, 40, 41, 42}; + Set<Gang> gangs = GangManager.getInstance().getGangs(); + Iterator<Gang> it = gangs.iterator(); + for (int i = 0; i < 20; i++) { + if (!it.hasNext()) break; + Gang g = it.next(); + int online = g.getOnlineMembers().size(); + int amnt = g.getMembers().size() + 1; + boolean isEnemy = gang.isEnemy(g); + boolean isAlly = gang.isAllied(g); + + GangMember member = gang.getMember(uuid).orElse(null); + if (member != null) { + String relation = Objects.equals(gang, g) ? "&a&l" + member.getRole().getTag() : isEnemy ? "&c&lEnemy" : isAlly ? "&a&lAlly" : "&a&lNeutral"; + e.setItem(slots[i], Utils.setArmorColor(Utils.createItem(Material.LEATHER_CHESTPLATE, (isEnemy ? "&c" : "&a") + g.getName(), + "&7Relation: " + relation, amnt == 0 ? "&7Online Members: &c&l0" : "&7Online Members: &a&l" + online + "&7/&a&l" + amnt, + amnt == 0 ? "This gang is not online!" : "&7Click to view this gang!"), + isEnemy ? Color.RED : Color.fromRGB(102, 127, 51))); + } + } + + e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the gang page!")); + e.setItem(49, Utils.setArmorColor(Utils.createItem(Material.LEATHER_CHESTPLATE, "&a&lGang List", "&7Page 1"), Color.fromRGB(102, 127, 51))); + if (gangs.size() > 20) + e.setItem(50, Utils.createItem(Material.ARROW, "&a&lNext Page", "&7Page 2")); + return; + } + + case "ammopouch": { + GTMUser user = GTM.getUserManager().getLoadedUser(uuid); + int i = 0; + for (AmmoType type : AmmoType.getTypes()) { + if (type.isInInventory()) + continue; + ItemStack item = type.getGameItem().getItem(); + int a = user.getAmmo(type); + e.setItem(i, Utils.createItem(item.getType(), item.getItemMeta().getDisplayName(), a >= 127 ? 127 : a, + "&7Amount: &a&l" + a)); + e.setItem(i + 9, Utils.createItem(Material.REDSTONE, "&c&lDrop " + 50, 50)); + e.setItem(i + 18, Utils.createItem(Material.REDSTONE, "&c&lDrop " + 10, 10)); + e.setItem(i + 27, Utils.createItem(Material.REDSTONE, "&c&lDrop " + 1, 1)); + i++; + } + ItemStack grayGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 7, "&a"); + for (int n : new int[]{8, 17, 26, 35}) + e.setItem(n, grayGlass); + return; + + } + case "jail": { + this.setPhoneDefaults(e); + GTMUser user = GTM.getUserManager().getLoadedUser(uuid); + int[] slots = new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 38, 39, 40, 41, 42}; + List<Player> jailedPlayers = GTMUtils.getJailedPlayers(); + Iterator<Player> it = jailedPlayers.iterator(); + for (int i = 0; i < 20; i++) { + if (!it.hasNext()) + break; + Player p = it.next(); + GTMUser u = GTM.getUserManager().getLoadedUser(p.getUniqueId()); + if (!u.isArrested()) + continue; + List<String> lore = new ArrayList<>(); + lore.add("&7Time Left: &a&l" + Utils.timeInSecondsToText(u.getJailTimer())); + if (user.getJobMode() == JobMode.COP) + lore.add("&7Click to release!"); + e.setItem(slots[i], Utils.setSkullOwner( + Utils.createItem(Material.SKULL_ITEM, 3, "&e&l" + p.getName(), lore), p.getName())); + } + e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lClose", "&7Click to close this menu!")); + e.setItem(49, Utils.createItem(Material.IRON_FENCE, "&c&lPrisoner List", "&7Page 1")); + if (jailedPlayers.size() > 20) + e.setItem(50, Utils.createItem(Material.ARROW, "&c&lNext Page", "&7Page 2")); + return; + } + case "property": + this.setPhoneDefaults(e); + e.setItem(11, Utils.createItem(Material.IRON_DOOR, "&3&lHouses", "&7My place to crash!")); + e.setItem(13, Utils.createItem(Material.PAPER, "&3&lOnline Banking", "&7Keeping your money safe!")); + e.setItem(15, Utils.createItem(Material.MINECART, "&c&lVehicles", "&7Ride in style!")); + e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the home page!")); + e.setItem(49, Utils.createItem(Material.POWERED_MINECART, "&2&lProperty", "&7Please select a property!")); + return; + case "vehicles": { + this.setPhoneDefaults(e); + GTMUser user = GTM.getUserManager().getLoadedUser(uuid); + int[] slots = new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 38, 39, 40, 41, 42}; + List<PersonalVehicle> vehicles = new ArrayList<>(user.getVehicles()); + if (user.hasPersonalVehicle()) + vehicles.remove(user.getPersonalVehicle()); + Iterator<PersonalVehicle> it = vehicles.iterator(); + for (int i = 0; i < 20; i++) { + if (!it.hasNext()) + break; + PersonalVehicle vehicle = it.next(); + ItemStack stack = vehicle.getVehicleProperties().getItem().clone(); + ItemMeta meta = stack.getItemMeta(); + meta.spigot().setUnbreakable(true); + meta.addItemFlags(ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ATTRIBUTES); + List<String> lore = new ArrayList<>(meta.getLore()); + lore.add(Utils.f("&7Health: " + vehicle.getFormattedHealth())); + lore.add(Utils.f("&aClick to get this vehicle!")); + lore.add(Utils.f("&7Price: &a$&l200")); + meta.setLore(lore); + stack.setItemMeta(meta); + e.setItem(slots[i], stack); + } + e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the property page!")); + if (user.hasPersonalVehicle()) { + PersonalVehicle vehicle = user.getPersonalVehicle(); + ItemStack stack = vehicle.getVehicleProperties().getItem().clone(); + ItemMeta meta = stack.getItemMeta(); + List<String> lore = new ArrayList<>(meta.getLore()); + lore.add(Utils.f("&7Health: " + vehicle.getFormattedHealth())); + lore.add(Utils.f("&aClick to view your personal vehicle!")); + meta.setLore(lore); + stack.setItemMeta(meta); + e.setItem(49, Utils.addGlow(stack)); + } else { + e.setItem(49, Utils.createItem(Material.MINECART, "&4&lVehicles", "&7Please select your personal vehicle!")); + } + if (vehicles.size() > 20) + e.setItem(50, Utils.createItem(Material.ARROW, "&4&lNext Page", "&7Page 2")); + return; + } + case "vehicleshop": { + this.setPhoneDefaults(e); + GTMUser user = GTM.getUserManager().getLoadedUser(uuid); + Optional<VehicleProperties> opt = GTM.getWastedVehicles().getVehicle(user.getActionVehicle()); + GameItem item = GTM.getItemManager().getItemFromVehicle(user.getActionVehicle()); + if (opt == null || !opt.isPresent() || item == null) { + player.sendMessage(Lang.VEHICLES.f("&7That vehicle does not exist!")); + return; + } + if (item.getSellPrice() <= 0) { + player.sendMessage(Lang.VEHICLES.f("&7You can't buy this vehicle!")); + player.closeInventory(); + return; + } + VehicleProperties vehicle = opt.get(); + String buyPrice = NumberFormat.getNumberInstance(Locale.US).format(Utils.round(item.getSellPrice() * 2)); + String sellPrice = NumberFormat.getNumberInstance(Locale.US).format(Utils.round(item.getSellPrice())); + e.setItem(11, Utils.createItem(Material.MINECART, "&4&lSpeed: &a&l" + vehicle.getMaxSpeed())); + e.setItem(13, Utils.createItem(Material.PAPER, "&4&lPrice: &a$&l" + buyPrice)); + if (vehicle.getWastedGunsWeapon() != null) { + Optional<Weapon<?>> o = GTM.getWastedGuns().getWeaponManager().getWeapon(vehicle.getWastedGunsWeapon()); + o.ifPresent(weapon -> e.setItem(29, weapon.createItemStack())); + } + if (!vehicle.getAllowedWeapons().isEmpty()) { + List<String> lore = vehicle.getAllowedWeapons().stream().map(s -> GTM.getItemManager().getItemFromWeapon(s)).filter(Objects::nonNull).map(GameItem::getDisplayName).collect(Collectors.toList()); + e.setItem(33, Utils.createItem(Material.WOOD_SWORD, "&4&lAllowed Weapons", lore)); + } + if (user.hasVehicle(vehicle.getIdentifier())) { + e.setItem(31, Utils.createItem(Material.INK_SACK, 1, "&c&lSell Vehicle", "&7Reward: &a$&l" + sellPrice)); + } else + e.setItem(31, Utils.createItem(Material.SLIME_BALL, "&a&lBuy Vehicle", "&7Price: &a$&l" + buyPrice)); + e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lClose", "&7Click to close this menu!")); + e.setItem(49, vehicle.getItem()); + return; + } + case "buyvehicle": { + this.setPhoneDefaults(e); + GTMUser user = GTM.getUserManager().getLoadedUser(uuid); + Optional<VehicleProperties> opt = GTM.getWastedVehicles().getVehicle(user.getActionVehicle()); + GameItem item = GTM.getItemManager().getItemFromVehicle(user.getActionVehicle()); + if (opt == null || !opt.isPresent() || item == null) { + player.sendMessage(Lang.VEHICLES.f("&7That vehicle does not exist!")); + return; + } + VehicleProperties vehicle = opt.get(); + if (item.getSellPrice() <= 0) { + player.sendMessage(Lang.VEHICLES.f("&7You can't buy this vehicle!")); + player.closeInventory(); + return; + } + if (user.hasVehicle(vehicle.getIdentifier())) { + player.sendMessage(Lang.VEHICLES.f("&7You already own this vehicle!")); + MenuManager.openMenu(player, "vehicles"); + return; + } + this.setConfirmDefaults(e, "&a&lBuy " + vehicle.getItem().getItemMeta().getDisplayName() + "&a&l for &a$&l" + Utils.round(item.getSellPrice() * 2), "&c&lCancel"); + return; + } + case "sellvehicle": { + this.setPhoneDefaults(e); + GTMUser user = GTM.getUserManager().getLoadedUser(uuid); + PersonalVehicle vehicle = user.getPersonalVehicle(user.getActionVehicle()); + if (vehicle == null) return; + double price = vehicle.getSellPrice(); + if (price <= 0) { + player.sendMessage(Lang.VEHICLES.f("&7You can't sell this vehicle!")); + player.closeInventory(); + return; + } + this.setConfirmDefaults(e, "&a&lSell " + vehicle.getDisplayName() + "&a&l for &a$&l" + Utils.round(price), "&c&lCancel"); + return; + } + case "repairvehicle": { + this.setPhoneDefaults(e); + GTMUser user = GTM.getUserManager().getLoadedUser(uuid); + if (user.getActionVehicle() == null) return; + PersonalVehicle vehicle = user.getPersonalVehicle(user.getActionVehicle()); + if (vehicle == null) return; + double price = vehicle.getRepairPrice(); + if (price <= 0) { + player.sendMessage(Lang.VEHICLES.f("&7You can't repair this vehicle!")); + player.closeInventory(); + return; + } + this.setConfirmDefaults(e, "&a&lRepair " + vehicle.getDisplayName() + "&a&l for &a$&l" + Utils.round(price), "&c&lCancel"); + return; + } + case "personalvehicle": { + this.setPhoneDefaults(e); + GTMUser user = GTM.getUserManager().getLoadedUser(uuid); + PersonalVehicle vehicle = user.getPersonalVehicle(); + if (vehicle == null) { + MenuManager.openMenu(player, "vehicles"); + return; + } + VehicleProperties vehicleProperties = vehicle.getVehicleProperties(); + if (vehicleProperties == null) return; + e.setItem(11, Utils.createItem(Material.MINECART, "&4&lStats", "&7Speed: &a&l" + vehicleProperties.getMaxSpeed(), "&7Health: " + vehicle.getFormattedHealth())); + e.setItem(13, Utils.createItem(Material.PAPER, "&4&lPrice: &a$&l" + Utils.round(vehicle.getPrice()))); + if (vehicle.getRepairPrice() > 0 && !vehicle.onMap()) + e.setItem(15, Utils.createItem(Material.WORKBENCH, "&4&lRepair", "&7Call the mechanic!", "&7Price: &a$&l" + Utils.round(vehicle.getRepairPrice()))); + else if (vehicle.onMap()) + e.setItem(15, Utils.createItem(Material.ENDER_PEARL, "&4&lSend Away", "&7Click to send away your vehicle!", "&7Price: &a$&l200")); + else + e.setItem(15, Utils.createItem(Material.ENDER_PEARL, "&4&lCall Vehicle", "&7Click to send your vehicle to yourself!", "&7Price: &a$&l200")); + if (vehicleProperties.getWastedGunsWeapon() != null) { + Optional<Weapon<?>> o = GTM.getWastedGuns().getWeaponManager().getWeapon(vehicleProperties.getWastedGunsWeapon()); + o.ifPresent(weapon -> e.setItem(29, weapon.createItemStack())); + } + if (!vehicleProperties.getAllowedWeapons().isEmpty()) { + List<String> lore = vehicleProperties.getAllowedWeapons().stream().map(s -> GTM.getItemManager().getItemFromWeapon(s)).filter(Objects::nonNull).map(GameItem::getDisplayName).collect(Collectors.toList()); + e.setItem(33, Utils.createItem(Material.WOOD_SWORD, "&4&lAllowed Weapons", lore)); + } + e.setItem(31, Utils.createItem(Material.INK_SACK, 1, "&c&lSell Vehicle", "&7Reward: &a$&l" + Utils.round(vehicle.getSellPrice()))); + e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the vehicles page!")); + ItemStack stack = vehicle.getVehicleProperties().getItem().clone(); + ItemMeta meta = stack.getItemMeta(); + meta.spigot().setUnbreakable(true); + meta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE); + List<String> lore = new ArrayList<>(meta.getLore()); + lore.add(Utils.f("&7Health: " + vehicle.getFormattedHealth())); + lore.add(Utils.f("&aClick to send your vehicle to yourself!")); + lore.add(Utils.f("&7Price: &a$&l200")); + stack.setItemMeta(meta); + e.setItem(49, Utils.addGlow(stack)); + break; + } + case "mechanic": { + this.setPhoneDefaults(e); + GTMUser user = GTM.getUserManager().getLoadedUser(uuid); + int[] slots = new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 38, 39, 40, 41, 42}; + List<PersonalVehicle> vehicles = new ArrayList<>(user.getVehicles()); + new ArrayList<>(vehicles).stream().filter(vehicle -> vehicle.getRepairPrice() <= 0).forEach(vehicles::remove); + Iterator<PersonalVehicle> it = vehicles.iterator(); + for (int i = 0; i < 20; i++) { + if (!it.hasNext()) + break; + PersonalVehicle vehicle = it.next(); + if (!vehicle.isDestroyed()) + continue; + ItemStack stack = vehicle.getVehicleProperties().getItem().clone(); + ItemMeta meta = stack.getItemMeta(); + meta.spigot().setUnbreakable(true); + meta.addItemFlags(ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ATTRIBUTES); + List<String> lore = new ArrayList<>(meta.getLore()); + lore.add(Utils.f("&7Health: " + vehicle.getFormattedHealth())); + lore.add(Utils.f("&7Repair Price: &a&l$" + NumberFormat.getNumberInstance(Locale.US).format(vehicle.getRepairPrice()))); + lore.add(Utils.f("&7Click to repair this vehicle!")); + meta.setLore(lore); + stack.setItemMeta(meta); + e.setItem(slots[i], Objects.equals(vehicle, user.getPersonalVehicle()) ? Utils.addGlow(stack) : stack); + } + e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lClose", "&7Click to close this menu!")); + e.setItem(49, Utils.createItem(Material.WORKBENCH, "&4&lMechanic", "&7Repair your vehicles!")); + if (vehicles.size() > 20) + e.setItem(50, Utils.createItem(Material.ARROW, "&4&lNext Page", "&7Page 2")); + return; + } + case "heads": { + this.setPhoneDefaults(e); + int[] slots = new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 38, 39, 40, 41, 42}; + Set<Head> heads = GTM.getShopManager().getNonExpiredHeadsByBid(); + Iterator<Head> it = heads.iterator(); + for (int i = 0; i < 20; i++) { + if (!it.hasNext()) break; + + Head head = it.next(); + List<String> lore = new ArrayList<>(); + lore.add(Utils.f("&7Seller: &a&l" + head.getSellerName())); + + if (head.hasBid()) { + lore.add(Utils.f("&7Bidder: &a&l" + head.getBidderName())); + lore.add(Utils.f("&7Bid: &a$&l" + head.getBid())); + } + else { + lore.add(Utils.f("&7Starting Bid: &a$&l10,000")); + } + + lore.add(Utils.f("&7Click to bid!")); + lore.add(Utils.f("&7Time Left: &a&l" + Utils.timeInMillisToText(head.getTimeUntilExpiry()))); + lore.add(Utils.f("&0" + head.getExpiry())); + e.setItem(slots[i], new JLibItem.Builder().withType(Material.SKULL_ITEM).withDurability((short) 3).withName(Utils.f("&e&l" + head.getHead())).withLore(lore).withOwner(head.getHead()).build().getItemStack()); + } + e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lClose", "&7Click to close this menu!")); + e.setItem(49, Utils.createItem(Material.SKULL_ITEM, "&e&lHead Auction", "&7Buy and sell your souvenirs!")); + if (heads.size() > 20) + e.setItem(50, Utils.createItem(Material.ARROW, "&e&lNext Page", "&7Page 2")); + e.setItem(51, Utils.createItem(Material.PAPER, "&e&lAuction Head", "&7Click to auction a player head!")); + return; + } + case "auctionhead": { + this.setPhoneDefaults(e); + ItemStack item = player.getInventory().getItemInMainHand(); + if (item == null || item.getType() != Material.SKULL_ITEM || item.getDurability() != 3) { + player.sendMessage(Lang.HEAD_AUCTION.f("&7That's not a player head!")); + player.closeInventory(); + return; + } + this.setConfirmDefaults(e, "&a&lAuction " + item.getItemMeta().getDisplayName() + "&a&l!", "&c&lCancel"); + return; + } + case "armorupgrade": { + GTMUser user = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + ArmorUpgrade upgrade = user.getBuyingArmorUpgrade(); + if (upgrade == null) { + player.closeInventory(); + return; + } + if (!upgrade.canUseUpgrade(user.getRank(), Core.getUserManager().getLoadedUser(player.getUniqueId()).getUserRank())) { + player.closeInventory(); + player.sendMessage(Lang.HEY.f("&7You need to rank up to " + upgrade.getGTMRank().getColoredNameBold() + "&7 or donate for " + upgrade.getUserRank().getColoredNameBold() + "&7 at &a&l" + Core.getSettings().getStoreLink() + "&7 to use the &b&l" + upgrade.getDisplayName() + " Armor Upgrade&7!")); + return; + } + ItemStack item = player.getInventory().getItemInMainHand(); + GameItem gameItem = item == null ? null : GTM.getItemManager().getItem(item.getType()); + if (item == null || gameItem == null || !upgrade.canBeUsedOn(gameItem.getName())) { + player.closeInventory(); + player.sendMessage(Lang.HEY.f("&7The &b&l" + upgrade.getDisplayName() + " Armor Upgrade&7 can only be applied to the following types of items: " + upgrade.getTypesString() + "&7!")); + return; + } + HashSet<ArmorUpgrade> upgradesOnItem = ArmorUpgrade.getArmorUpgrades(item); + + if (upgradesOnItem.contains(upgrade)) { + player.closeInventory(); + player.sendMessage(Lang.ARMOR_UPGRADE.f("&7That piece of armor already has the &b&l" + upgrade.getDisplayName() + " Armor Upgrade&7!")); + e.setCancelled(true); + return; + } + if ((upgradesOnItem.contains(ArmorUpgrade.LIGHT) && upgrade == ArmorUpgrade.ULTRA_LIGHT) || (upgradesOnItem.contains(ArmorUpgrade.ULTRA_LIGHT) && upgrade == ArmorUpgrade.LIGHT)) { + player.closeInventory(); + player.sendMessage(Lang.ARMOR_UPGRADE.f("&7This upgrade cannot be added to the armor piece due to conflicting upgrades.")); + e.setCancelled(true); + return; + } + double price = upgrade.getPrice(); + + if (!user.hasMoney(upgrade.getPrice())) { + player.closeInventory(); + player.sendMessage(Lang.ARMOR_UPGRADE.f("&7You can't afford the &b&l" + upgrade.getDisplayName() + " Armor Upgrade&7!")); + return; + } + this.setConfirmDefaults(e, "&a&lBuy &b&l" + upgrade.getDisplayName() + " Armor Upgrade", "&c&lCancel", + "&7Price: &a$&l" + price, "&7Item: &a&l" + (item.getItemMeta().hasDisplayName() ? item.getItemMeta().getDisplayName() : item.getType().name())); + return; + } + case "lottery": { + this.setPhoneDefaults(e); + GTMUser user = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + LotteryPlayer p = GTM.getLottery().getLotteryPlayer(player.getUniqueId()); + int[] slots = new int[]{12, 13, 14, 21, 22, 23, 30, 31, 32, 39, 40}; + int[] amnts = new int[]{1, 2, 5, 10, 20, 50, 100, 200, 500, 1000, 2000}; + for (int i = 0; i < 11; i++) + e.setItem(slots[i], Utils.createItem(Material.EMPTY_MAP, + (user.hasMoney(amnts[i] * 500) ? "&e" : "&c") + "&l" + amnts[i] + " Tickets", "&7Price: &a$&l" + (amnts[i] * 500), "&7Click to buy tickets!")); + e.setItem(41, + Utils.createItem(Material.BOOK_AND_QUILL, "&e&lCustom Amount", "&7Click to choose an amount!")); + e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lClose", "&7Click to close this menu!")); + e.setItem(49, Utils.createItem(Material.GOLD_INGOT, "&e&lLottery", "&7Your tickets: &e&l" + (p == null ? 0 : p.getTickets()), "&7Go big or go home!")); + LotteryPlayer winner1 = GTM.getLottery().getWinner(0); + LotteryPlayer winner2 = GTM.getLottery().getWinner(1); + LotteryPlayer winner3 = GTM.getLottery().getWinner(2); + e.setItem(51, Utils.setSkullOwner(Utils.createItem(Material.SKULL_ITEM, 3, + "&e&lLast week's winners", + winner1 == null ? "" : "&a#&l1&7: &r" + winner1.getName() + " &a" + Utils.formatMoney(winner1.getAmount()) + "&7 (&a70%&7 of the pot)", + winner2 == null ? "" : "&a#&l2&7: &r" + winner2.getName() + " &a" + Utils.formatMoney(winner2.getAmount()) + "&7 (&a20%&7 of the pot", + winner3 == null ? "" : "&a#&l2&7: &r" + winner3.getName() + " &a" + Utils.formatMoney(winner3.getAmount()) + "&7 (&a10%&7 of the pot)"), winner1 == null ? "Presidentx" : winner1.getName())); + return; + } + case "realestateagent": { + this.setPhoneDefaults(e); + e.setItem(12, Utils.createItem(Material.BOOK_AND_QUILL, "&a&lPremium Houses", "")); + e.setItem(14, Utils.createItem(Material.BOOK_AND_QUILL, "&b&lNon-Premium Houses", "")); + return; + } + case "realestate-premium": { + this.setPhoneDefaults(e); + int[] slots = new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 38, 39, 40, 41, 42, 47, 48, + 49, 50, 51}; + for (PremiumHouse premiumHouse : Houses.getHousesManager().getPremiumHouses()) { + if (premiumHouse.getDoors().size() < 1 || premiumHouse.getChests().size() < 1) continue; + if (premiumHouse.isOwned()) continue; + } + // TODO + return; + } + case "realestate-nonpremium": { + this.setPhoneDefaults(e); + int[] slots = new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 38, 39, 40, 41, 42, 47, 48, + 49, 50, 51}; + // TODO + return; + } + default: + break; + } + + } + + private void setPhoneDefaults(MenuOpenEvent e) { + ItemStack whiteGlass = Utils.createItem(Material.STAINED_GLASS_PANE, "&a"); + ItemStack grayGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 7, "&a"); + ItemStack blackGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 15, "&a"); + ItemStack lightGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 8, "&a"); + + for (int i : new int[]{0, 8, 9, 17, 18, 26, 27, 35, 36, 44, 45, 53}) e.setItem(i, lightGlass); + for (int i : new int[]{1, 10, 19, 28, 37, 46, 7, 16, 25, 34, 43, 52}) + e.setItem(i, whiteGlass); + for (int i : new int[]{2, 3, 4, 5, 6}) + e.setItem(i, blackGlass); + for (int i : new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 38, 39, 40, 41, 42, 47, 48, + 49, 50, 51}) + e.setItem(i, grayGlass); + } + + private void setPhoneDefaults(Inventory inv) { + ItemStack whiteGlass = Utils.createItem(Material.STAINED_GLASS_PANE, "&a"); + ItemStack grayGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 7, "&a"); + ItemStack blackGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 15, "&a"); + ItemStack lightGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 8, "&a"); + + for (int i : new int[]{0, 8, 9, 17, 18, 26, 27, 35, 36, 44, 45, 53}) inv.setItem(i, lightGlass); + for (int i : new int[]{1, 10, 19, 28, 37, 46, 7, 16, 25, 34, 43, 52}) + inv.setItem(i, whiteGlass); + for (int i : new int[]{2, 3, 4, 5, 6}) + inv.setItem(i, blackGlass); + for (int i : new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 38, 39, 40, 41, 42, 47, 48, + 49, 50, 51}) + inv.setItem(i, grayGlass); + } + + private void setGPSDefaults(MenuOpenEvent e) { + ItemStack whiteGlass = Utils.createItem(Material.STAINED_GLASS_PANE, "&a"); + ItemStack grayGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 7, "&a"); + ItemStack blackGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 15, "&a"); + ItemStack lightGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 8, "&a"); + + for (int i : new int[]{0, 8, 9, 17, 18, 26, 27, 35, 36, 44, 45, 53}) e.setItem(i, lightGlass); + for (int i : new int[]{0, 9, 18, 27, 36, 45, 8, 17, 26, 35, 44, 53}) + e.setItem(i, whiteGlass); + for (int i : new int[]{1, 2, 3, 4, 5, 6, 7}) + e.setItem(i, blackGlass); + for (int i : new int[]{10, 11, 12, 13, 14, 15, 16, 19, 20, 21, 22, 23, 24, 25, 28, 29, 30, 31, 32, 33, 34, 37, + 38, 39, 40, 41, 42, 43, 46, 47, 48, 49, 50, 51, 52}) + e.setItem(i, grayGlass); + } + + private void setGPSDefaults(Inventory inv) { + ItemStack whiteGlass = Utils.createItem(Material.STAINED_GLASS_PANE, "&a"); + ItemStack grayGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 7, "&a"); + ItemStack blackGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 15, "&a"); + ItemStack lightGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 8, "&a"); + + for (int i : new int[]{0, 8, 9, 17, 18, 26, 27, 35, 36, 44, 45, 53}) inv.setItem(i, lightGlass); + for (int i : new int[]{0, 9, 18, 27, 36, 45, 8, 17, 26, 35, 44, 53}) + inv.setItem(i, whiteGlass); + for (int i : new int[]{1, 2, 3, 4, 5, 6, 7}) + inv.setItem(i, blackGlass); + for (int i : new int[]{10, 11, 12, 13, 14, 15, 16, 19, 20, 21, 22, 23, 24, 25, 28, 29, 30, 31, 32, 33, 34, 37, + 38, 39, 40, 41, 42, 43, 46, 47, 48, 49, 50, 51, 52}) + inv.setItem(i, grayGlass); + } + + private void setConfirmDefaults(MenuOpenEvent e) { + this.setConfirmDefaults(e, "&a&lConfirm", "&c&lCancel"); + } + + private void setConfirmDefaults(MenuOpenEvent e, String confirmMessage, String cancelMessage, String... lore) { + ItemStack whiteGlass = Utils.createItem(Material.STAINED_GLASS_PANE, "&a"); + ItemStack grayGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 7, "&a"); + ItemStack blackGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 15, "&a"); + ItemStack greenGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 5, confirmMessage, lore); + ItemStack redGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 14, cancelMessage); + ItemStack lightGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 8, "&a"); + + for (int i : new int[]{0, 8, 9, 17, 18, 26, 27, 35, 36, 44, 45, 53}) e.setItem(i, lightGlass); + for (int i : new int[]{1, 10, 19, 28, 37, 46, 7, 16, 25, 34, 43, 52}) + e.setItem(i, whiteGlass); + for (int i : new int[]{2, 3, 4, 5, 6}) + e.setItem(i, blackGlass); + for (int i : new int[]{13, 22, 31, 40, 49,}) + e.setItem(i, grayGlass); + for (int i : new int[]{11, 12, 20, 21, 29, 30, 38, 39, 47, 48}) + e.setItem(i, greenGlass); + for (int i : new int[]{14, 15, 23, 24, 32, 33, 41, 42, 50, 51}) + e.setItem(i, redGlass); + } + + @EventHandler(priority = EventPriority.HIGH) + public void onMenuClick(MenuClickEvent e) { + Player player = e.getPlayer(); + UUID uuid = player.getUniqueId(); + Menu menu = e.getMenu(); + GTMUser user = GTM.getUserManager().getLoadedUser(uuid); + ItemStack item = e.getItem(); + Inventory inv = e.getInv(); + if (item == null || item.getType() == Material.AIR || (item.getType() == Material.STAINED_GLASS_PANE && item.getDurability() != 14 && item.getDurability() != 5)) + return; + //TODO: EACH SERVER TYPE needs one of these, because of the different GameItem systems that will be present. + /*if(menu instanceof SubCategoryMenu) { + SubCategoryMenu category = (SubCategoryMenu)menu; + if(category.getType()!=ServerType.GTM) + //some other server will handle the purchase.; + return; + + if(item.getType()==Material.REDSTONE){ + if(category.getPreviousSubCategory()==null){ + category.getShopMenu().openFor(player); + } + else{ + category.getPreviousSubCategory().openFor(player); + } + return; + } + + SubCategoryMenu subCategory = category.getSubCategory(item.getItemMeta().getDisplayName()); + if(subCategory==null){ + //at lowest level category, only displaying items currently to purchase + if(!item.getItemMeta().hasLore()) + return; + List<String> lore = item.getItemMeta().getLore(); + double price = Double.parseDouble(ChatColor.stripColor(lore.get(lore.size()-1)).replace("Price: $", "")); + + //lore.remove(lore.get(lore.size()-1));//remove price so it is back to gameitem + ItemStack gameItemStack = item.clone(); + ItemMeta im = gameItemStack.getItemMeta(); + im.setLore(null); + gameItemStack.setItemMeta(im); + GameItem gameItem = GTM.getItemManager().getItem(gameItemStack); + if(gameItem==null){ + Core.error("Problem sanitizing SubCategoryItem -> GameItem with item name: " + item.getItemMeta().getDisplayName()); + player.sendMessage(Utils.f(Lang.SHOP + "&7Error: Unable to locate gameItem from SubCategoryItem")); + return; + } + + if(user.getMoney()<price){ + player.sendMessage(Utils.f(Lang.SHOP + "&7Error: You do not have enough money to purchase this item!")); + return; + } + user.setMoney(user.getMoney()-price); + player.getInventory().addItem(gameItem.getItem()); + player.sendMessage(Utils.f(Lang.SHOP + "&7You have successfully purchased the desired item!")); + player.closeInventory(); + } + else{ + //not at lowest level category, still more categories to sort through + subCategory.openFor(player); + } + } + else {*/ + + switch (menu.getName()) { + case "transferconfirm": { + switch (item.getType()) { + case STAINED_GLASS_PANE: { + switch (item.getDurability()) { + case 5: { + user.setCurrentChatAction(ChatAction.CONFIRM_TRANSFER, true); + player.closeInventory(); + + player.sendMessage(Lang.GTM.f("&cPlease read the following points before you select your transfer target:")); + + player.sendMessage(Utils.f(" &e&lHOUSES&8&l>")); + player.sendMessage(Utils.f("&6- Your premium houses will be &c&lSOLD &6and transformed into permits.")); + player.sendMessage(Utils.f("&6- Purchased trashcans will be &c&LSOLD &6and transformed into permits.")); + player.sendMessage(Utils.f("&6- Purchased houses will be &c&LSOLD and &6transformed into cash.")); + player.sendMessage(Utils.f("&6- Any items in houses will be &c&LLOST &6so put them in your backpack.")); + + player.sendMessage(Utils.f(" &e&lCOSMETICS&8&l>")); + player.sendMessage(Utils.f("&6- Your player event tags will be &c&lTRANSFERRED &6to the target server.")); + + player.sendMessage(Utils.f(" &a&lMONEY AND ITEMS&8&l>")); + player.sendMessage(Utils.f("&6- Your Permits on this server will &c&lREPLACE &6those on the target server.")); + player.sendMessage(Utils.f("&6- Your Money on this server will &c&lREPLACE &6those on the target server.")); + player.sendMessage(Utils.f("&6- Your Bank balance on this server &c&lREPLACE &6replace those on the target server.")); + player.sendMessage(Utils.f("&6- Your GTMRank on this server will &c&lREPLACE &6those on the target server.")); + player.sendMessage(Utils.f("&6- Your backpack on this server will &c&lREPLACE &6those on the target server.")); + player.sendMessage(Utils.f("&6- Your cheatcodes on this server will &c&lREPLACE &6those on the target server.")); + player.sendMessage(Utils.f("&6- Your vehicles on this server will be &c&lSOLD &6and transformed into cash.")); + player.sendMessage(Utils.f("")); + player.sendMessage(Utils.f("&6- Your player inventory on this server will &c&lBE DELETED &6and only &c&lBACKPACK &6contents will transfer.")); + + player.sendMessage(Lang.GTM.f("&6If you agree to THESE TERMS, enter the server that you would like to transfer to out of the following options: ")); + + Chat.TRANSFER_SERVER_ALLOWED.forEach(id -> { + player.sendMessage(Lang.GTM.f("&aGTM" + id)); + }); + break; + } + + case 14: { + player.closeInventory(); + player.sendMessage(Lang.GTM.f("&cYou have cancelled the transfer process.")); + break; + } + } + } + } + } + case "christmasshop": { + if(!item.getItemMeta().hasLore()) + return; + switch (item.getType()) { + case STAINED_GLASS_PANE: + return; + default: + int cost = 0; + try{ + cost = Integer.parseInt(ChatColor.stripColor(item.getItemMeta().getLore().get(0)).replace("Price: [", "").replace("]", "")); + }catch (NumberFormatException nfe){ + nfe.printStackTrace(); + player.sendMessage(Lang.CHRISTMAS.f("&cSorry, an internal error occured while trying to purchase your item.")); + return; + } + if(!ChristmasEvent.hasCandyCanes(player, cost)) { + player.sendMessage(Lang.CHRISTMAS.f("&cYou do not have enough candy canes to purchase this item!")); + return; + } + + switch (item.getType()) { + case NAME_TAG: { + String name = ChatColor.stripColor( item.getItemMeta().getDisplayName().replace(" Tag", "").replace(" ", "_").toUpperCase()); + EventTag tag = EventTag.valueOf(name); + User coreUser = Core.getUserManager().getLoadedUser(player.getUniqueId()); + if(coreUser.getUnlockedTags().contains(tag)) { + player.sendMessage(Lang.CHRISTMAS.f("&cYou cannot buy tags that you have already unlocked!")); + return; + } + coreUser.giveEventTag(tag); + player.sendMessage(Lang.CHRISTMAS.f("&aYou have been given the " + tag.getBoldName() + " tag. &7Select your active tag by going into Phone -> Account -> Unlocked Tags.\n&7Make sure that the '&6Show Game Rank&7' preference is toggled off.")); + break; + } + case MAGMA_CREAM: { + Utils.giveItems(player, Utils.createItem(Material.MAGMA_CREAM, "&c&lDevil's Snowball", 16,"&7Throw at players to cause slowness")); + break; + } + default: { + if(item.getItemMeta().getDisplayName().contains("Clausinator")) {//if it is the clausinator: because some of the lore is generated post + Utils.giveItems(player, GTM.getItemManager().getItem("clausinator").getItem()); + break; + } + ItemMeta im = item.getItemMeta(); + im.setLore(Collections.emptyList()); + item.setItemMeta(im); + Utils.giveItems(player, item); + break; + } + } + ChristmasEvent.removeCandyCanes(player, cost); + player.closeInventory(); + player.sendMessage(Lang.CHRISTMAS.f("&aThe item has been added to your inventory!")); + break; + } + break; + } + + /* + case "sellinvconfirm": { + switch (item.getDurability()) { + case 5: + double cPrice = TrashCanManager.getTotalInvPrice(player); + double price = user.getSellInvConfirmAmt(); + + for(int i = 9; i<36; i++){ + ItemStack is = player.getInventory().getItem(i); + if(is == null || is.getType() == Material.AIR) continue; + GameItem gameItem = GTM.getItemManager().getItem(is); + if(gameItem == null || gameItem.getType() == GameItem.ItemType.DRUG) continue; + if(!gameItem.canSell()) continue; player.getInventory().setItem(i, new ItemStack(Material.AIR)); + } + + player.updateInventory(); + user.addMoney(cPrice); + GTMUtils.updateBoard(player, user); + player.sendMessage(Utils.f(Lang.MONEY_ADD.toString() + cPrice)); + + if(cPrice!=price) { + player.sendMessage(Lang.TRASH_CAN.f("&7The final sale price was different as your inventory changed!")); + } + + user.setSellInvConfirmAmt(0); + player.closeInventory(); + break; + case 14: + user.setSellInvConfirmAmt(0); + player.closeInventory(); + break; + } + return; + }*/ + case "cheatcodes": { + User coreUser = Core.getUserManager().getLoadedUser(player.getUniqueId()); + if(item.getType()==Material.REDSTONE) { + MenuManager.openMenu(player, "contacts"); + return; + } + Optional<CheatCode> optCode = CheatCode.getCheatCodeFromItemStack(item); + if(!optCode.isPresent()) + return; + CheatCodeState cState = user.getCheatCodeState(optCode.get()); + if(cState.getState()==State.LOCKED) { + player.sendMessage(Lang.CHEAT_CODES.f(optCode.get().getLockedLore())); + return; + } + optCode.get().activate(coreUser, user, player, cState); + + if (optCode.get() != CheatCode.QUICKSELL) + MenuManager.openMenu(player, "cheatcodes");//refresh + return; + } + case "drugdealer": { + Optional<DrugItem> drug = ((DrugService) GTM.getDrugManager().getService()).getDrugItem(item.getItemMeta().getDisplayName()); + if (drug.isPresent()) { + List<String> itemLore = item.getItemMeta().getLore(); + int drugStock = Integer.parseInt(ChatColor.stripColor(itemLore.get(0).split(" ")[2])); + int drugPrice = Integer.parseInt(ChatColor.stripColor(itemLore.get(1).split(" ")[1]).replace("$", "")); + if (drugStock > 0) { + net.minecraft.server.v1_12_R1.ItemStack nmsCopy = CraftItemStack.asNMSCopy(item); + NBTTagCompound tag = nmsCopy.hasTag() ? nmsCopy.getTag() : new NBTTagCompound(); + if ((tag != null ? tag.get("drugName") : null) != null) { + DrugItem drugItem = drug.get(); + if (DrugDealerItem.byDrugItem(drugItem).isPresent()) { + if (user.getMoney() >= drugPrice) { + user.setMoney(user.getMoney() - drugPrice); + player.getInventory().addItem(drugItem.getItemStack()); + DrugDealerItem drugDealerItem = DrugDealerItem.byDrugItem(drugItem).get(); + drugDealerItem.setStockRemaining(drugDealerItem.getStockRemaining() - 1); + e.getInv().setItem(e.getSlot(), drugDealerItem.getItemStack()); + player.updateInventory(); + GTMUtils.updateBoard(player, GTM.getUserManager().getLoadedUser(player.getUniqueId())); + } else { + player.sendMessage(Lang.DRUGS.f("&cYou do not have enough money for this drug!")); + } + } else { + player.sendMessage(Lang.DRUGS.f("&cCannot find DrugItem for this drug!")); + } + } else { + player.sendMessage(Lang.DRUGS.f("&cUnable to validate NMS tag on ItemStack")); + } + } + } else { + switch (item.getType()) { + case REDSTONE: + player.closeInventory(); + return; + default: + return; + } + } + return; + } + case "phone": + switch (item.getType()) { + case ENDER_CHEST: + MenuManager.openMenu(player, "cosmetics"); + return; + case LEATHER_CHESTPLATE: + MenuManager.openMenu(player, "mygang"); + return; + case POWERED_MINECART: + MenuManager.openMenu(player, "property"); + return; + case SKULL_ITEM: + MenuManager.openMenu(player, "bounties"); + return; + case NETHER_STAR: + MenuManager.openMenu(player, "account"); + return; + case BOOK: + MenuManager.openMenu(player, "contacts"); + return; + case EMERALD: + player.closeInventory(); + player.sendMessage(Lang.GTM.f("&7Go to &a&l" + Core.getSettings().getStoreLink() + "&7 to buy Ranks, Permits, Money and other packages!")); + return; + case EXP_BOTTLE: + MenuManager.openMenu(player, "rewards"); + return; + case CHEST: + MenuManager.openMenu(player, "kits"); + return; + default: + return; + } + case "cosmetics": + switch (item.getType()) { + case REDSTONE: + MenuManager.openMenu(player, "phone"); + return; + default: + return; + } + case "rewards": + switch (item.getType()) { + case REDSTONE: + MenuManager.openMenu(player, "phone"); + return; + default: + return; + } + case "vote": + switch (item.getType()) { + case REDSTONE: + MenuManager.openMenu(player, "reward"); + return; + default: + return; + } + case "account": + switch (item.getType()) { + case EMPTY_MAP: + MenuManager.openMenu(player, "ranks"); + return; + case NAME_TAG: + MenuManager.openMenu(player, "chooseeventtag"); + return; + case BOOK: + MenuManager.openMenu(player, "gtmstats"); + return; + case REDSTONE_COMPARATOR: + MenuManager.openMenu(player, "prefs"); + return; + case REDSTONE: + MenuManager.openMenu(player, "phone"); + default: + return; + } + case "ranks": + switch (item.getType()) { + case REDSTONE: + MenuManager.openMenu(player, "account"); + return; + case PAPER: + User u = Core.getUserManager().getLoadedUser(uuid); + user.rankup(player, u); + return; + default: + return; + } + case "gtmstats": + switch (item.getType()) { + case REDSTONE: + MenuManager.openMenu(player, "account"); + return; + default: + return; + } + case "bounties": + + if (!GTM.getSettings().isBountySystem()){ + player.sendMessage(Utils.f(Lang.BOUNTIES + "&7Bounty System is currently disabled!")); + return; + } + + switch (item.getType()) { + + case BOOK_AND_QUILL: + MenuManager.openMenu(player, "bountieslist"); + return; + case BOOK: + MenuManager.openMenu(player, "bountieshelp"); + return; + case COMPASS: + if (GTM.getUserManager().getLoadedUser(player.getUniqueId()).getJobMode() != JobMode.HITMAN) { + player.sendMessage(Lang.GPS.f("&7You are not a hitman!")); + return; + } + MenuManager.openMenu(player, "gpsbounties"); + return; + case PAPER: + MenuManager.openMenu(player, "bountiesplace"); + return; + case REDSTONE: + MenuManager.openMenu(player, "phone"); + return; + default: + return; + } + case "bountieslist": + switch (item.getType()) { + case ARROW: + int page = Integer + .parseInt(ChatColor.stripColor(item.getItemMeta().getLore().get(0)).replace("Page ", "")); + BountyManager bm = GTM.getBountyManager(); + this.setPhoneDefaults(inv); + Set<Bounty> bounties = bm.getBountiesByAmount(); + int[] slots = new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 38, 39, 40, 41, + 42}; + Iterator<Bounty> it = bounties.iterator(); + for (int i = 0; i < page * 20; i++) { + if (!it.hasNext()) + break; + Bounty b = it.next(); + if (i < (page - 1) * 20) + continue; + List<String> lore = new ArrayList<>(); + lore.add("&7Bounty Total: &a$&l" + b.getAmount()); + lore.add(""); + double anon = 0; + for (BountyPlacer p : b.getPlacers()) + if (p.isAnonymous()) + anon += p.getAmount(); + else + lore.add("&7" + p.getName() + ": &a$&l" + p.getAmount()); + if (anon > 0) + lore.add("&7Anonymous: &a$&l" + anon); + lore.add(""); + lore.add("&7Expires: &a&l" + Utils.timeInMillisToText(b.getTimeUntilExpiryInMillis())); + inv.setItem(slots[i - (page - 1) * 20], Utils.setSkullOwner( + Utils.createItem(Material.SKULL_ITEM, 3, "&5&l" + b.getName(), lore), b.getName())); + } + inv.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the bounties page!")); + if (page > 1) + inv.setItem(48, Utils.createItem(Material.ARROW, "&5&lPrevious Page", "&7Page " + (page - 1))); + inv.setItem(49, Utils.createItem(Material.BOOK, "&5&lBounty List", "&7Page " + page)); + if (bounties.size() > (20 * page)) + inv.setItem(50, Utils.createItem(Material.ARROW, "&5&lNext Page", "&7Page " + (page + 1))); + return; + case REDSTONE: + MenuManager.openMenu(player, "bounties"); + return; + default: + return; + } + case "bountiesplace": { + BountyManager bm = GTM.getBountyManager(); + switch (item.getType()) { + case SKULL_ITEM: + if (item.getDurability() == 1) { + + if (!GTM.getSettings().isBountySystem()){ + player.sendMessage(Utils.f(Lang.BOUNTIES + "&7Bounty System is currently disabled!")); + return; + } + + if (user.getBountyName() == null) { + player.sendMessage(Utils.f(Lang.BOUNTIES + "&7Please choose a target first!")); + return; + } + if (user.getBountyAmount() <= 0) { + player.sendMessage(Utils.f(Lang.BOUNTIES + "&7Please choose an amount first!")); + return; + } + Player target = Bukkit.getPlayer(user.getBountyUUID()); + if (target == null) { + player.sendMessage(Utils.f(Lang.BOUNTIES + "&7Your target is not online!")); + return; + } + + // balance check + if (!user.hasMoney(user.getBountyAmount())) { + player.sendMessage(Utils.f(Lang.MONEY + "&7You don't have &c$&l" + user.getBountyAmount() + + " to place this bounty!")); + return; + } + + // the amount of money placed for the bounty + int bountyAmount = user.getBountyAmount(); + + // take the money from the user that they are placing + user.takeMoney(bountyAmount); + GTMUtils.updateBoard(player, user); + + // determine tax on placing new bounties + double bountyTax = 0; + if (GTM.getSettings().isBountyTax()){ + bountyTax = GTM.getSettings().getBountyTaxPercent(); + + // clamp bounds + if (bountyTax >= 100.0){ + bountyTax = 100.0; + } + if (bountyTax <= 0){ + bountyTax = 0; + } + } + + // how much we subtract from balance + int taxSubtractAmount = (int) ((bountyTax / 100.0) * bountyAmount); + // what's the final placed amount + final int finalBountyAmount = bountyAmount - taxSubtractAmount; + + // TODO test remove + Core.log("[Bounty][DEBUG] Bounty placed on " + target.getName() + " with initial amount of " + bountyAmount + ", tax=" + taxSubtractAmount + ", final=" + finalBountyAmount); + + // if bounty already exists, raise it + if (bm.placeBounty(target, finalBountyAmount, player, true)) { + player.sendMessage(Utils.f(Lang.BOUNTIES + "&7You raised the bounty on &a" + target.getName() + + "&7 by &a$&l" + finalBountyAmount + "&7, as &c$&l" + taxSubtractAmount + "&7 was for tax purposes.")); + Utils.broadcastExcept(player, Lang.BOUNTIES + "&7An anonymous player raised the bounty on &a" + + target.getName() + "&7 by &a$&l" + finalBountyAmount + "&7."); + user.setBountyAmount(0); + user.setBountyName(null); + user.setBountyUUID(null); + MenuManager.openMenu(player, "bounties"); + return; + } + + // otherwise add a new one + player.sendMessage(Utils.f(Lang.BOUNTIES + "&7You put a bounty of &a&l$" + finalBountyAmount + + "&7 on &a" + target.getName() + "&7's head!")); + player.sendMessage(Utils.f(Lang.BOUNTIES + "&7Tax for placing the new bounty was &c&l$" + taxSubtractAmount + "&7.")); + Utils.broadcastExcept(player, Lang.BOUNTIES + "&7An anonymous player put a bounty of &a$&l" + + finalBountyAmount + "&7 on &a" + target.getName() + "&7."); + user.setBountyAmount(0); + user.setBountyName(null); + user.setBountyUUID(null); + MenuManager.openMenu(player, "bounties"); + return; + } else { + user.setCurrentChatAction(ChatAction.PICKING_BOUNTY_TARGET, 0); + player.closeInventory(); + player.sendMessage(Utils.f(Lang.BOUNTIES + "&7Type the target in chat, or \"quit\" to cancel.")); + return; + } + case PAPER: + user.setCurrentChatAction(ChatAction.PICKING_BOUNTY, 0); + player.closeInventory(); + player.sendMessage(Utils.f(Lang.BOUNTIES + + "&7Please type the amount in chat, or type \"quit\" to cancel. The minimum bounty is &a$&l2.000&7!")); + return; + case REDSTONE: + MenuManager.openMenu(player, "phone"); + return; + case SLIME_BALL: + + if (!GTM.getSettings().isBountySystem()){ + player.sendMessage(Utils.f(Lang.BOUNTIES + "&7Bounty System is currently disabled!")); + return; + } + + if (user.getBountyName() == null) { + player.sendMessage(Utils.f(Lang.BOUNTIES + "&7Please choose a target first!")); + return; + } + if (user.getBountyAmount() <= 0) { + player.sendMessage(Utils.f(Lang.BOUNTIES + "&7Please choose an amount first!")); + return; + } + Player target = Bukkit.getPlayer(user.getBountyUUID()); + if (target == null) { + player.sendMessage(Utils.f(Lang.BOUNTIES + "&7Your target is not online!")); + return; + } + + // balance check + if (!user.hasMoney(user.getBountyAmount())) { + player.sendMessage(Utils.f(Lang.MONEY + "&7You don't have &c$&l" + user.getBountyAmount() + " to place this bounty!")); + return; + } + + // the amount of money placed for the bounty + int bountyAmount = user.getBountyAmount(); + + // take the money from the user that they are placing + user.takeMoney(bountyAmount); + GTMUtils.updateBoard(player, user); + + // determine tax on placing new bounties + double bountyTax = 0; + if (GTM.getSettings().isBountyTax()){ + bountyTax = GTM.getSettings().getBountyTaxPercent(); + + // clamp bounds + if (bountyTax >= 100.0){ + bountyTax = 100.0; + } + if (bountyTax <= 0){ + bountyTax = 0; + } + } + + // how much we subtract from balance + int taxSubtractAmount = (int) ((bountyTax / 100.0) * bountyAmount); + // what's the final placed amount + final int finalBountyAmount = bountyAmount - taxSubtractAmount; + + // TODO test remove + Core.log("[Bounty][DEBUG] Bounty placed on " + target.getName() + " with initial amount of " + bountyAmount + ", tax=" + taxSubtractAmount + ", final=" + finalBountyAmount); + + // if bounty already exists, raise it + if (bm.placeBounty(target, finalBountyAmount, player, true)) { + player.sendMessage(Utils.f(Lang.BOUNTIES + "&7You raised the bounty on &a" + target.getName() + + "&7 by &a$&l" + finalBountyAmount + "&7, as &c$&l" + taxSubtractAmount + "&7 was for tax purposes.")); + Utils.broadcastExcept(player, Lang.BOUNTIES + "&7An anonymous player raised the bounty on &a" + + target.getName() + "&7 by &a$&l" + finalBountyAmount + "&7."); + user.setBountyAmount(0); + user.setBountyName(null); + user.setBountyUUID(null); + MenuManager.openMenu(player, "bounties"); + return; + } + + // otherwise add a new one + player.sendMessage(Utils.f(Lang.BOUNTIES + "&7You put a bounty of &a&l$" + finalBountyAmount + + "&7 on &a" + target.getName() + "&7's head!")); + player.sendMessage(Utils.f(Lang.BOUNTIES + "&7Tax for placing the new bounty was &c&l$" + taxSubtractAmount + "&7.")); + Utils.broadcastExcept(player, Lang.BOUNTIES + "&7An anonymous player put a bounty of &a$&l" + + finalBountyAmount + "&7 on &a" + target.getName() + "&7."); + user.setBountyAmount(0); + user.setBountyName(null); + user.setBountyUUID(null); + MenuManager.openMenu(player, "bounties"); + return; + default: + return; + } + } + case "bountieshelp": + switch (item.getType()) { + case REDSTONE: + MenuManager.openMenu(player, "bounties"); + return; + default: + return; + } + case "kits": + switch (item.getType()) { + case REDSTONE: + MenuManager.openMenu(player, "phone"); + return; + default: + + if (!GTM.getSettings().isKitSystem()){ + player.sendMessage(ChatColor.RED + "Kits are currently disabled!"); + return; + } + + if (item.hasItemMeta() && item.getItemMeta().hasDisplayName() + && item.getType() != Material.STAINED_GLASS_PANE) { + GTM.getItemManager().giveKit(player, Core.getUserManager().getLoadedUser(uuid), + GTM.getUserManager().getLoadedUser(uuid), + ChatColor.stripColor(item.getItemMeta().getDisplayName())); + MenuManager.updateMenu(player, "kits"); + } + return; + } + case "contacts": { + switch (item.getType()) { + case STORAGE_MINECART: + MenuManager.openMenu(player, "taxi"); + return; + case ANVIL: + MenuManager.openMenu(player, "cheatcodes"); + return; + case SKULL_ITEM: + if (user.hasRequestedBackup()) { + player.sendMessage(Lang.COP_MODE.f("&7You have already called " + (user.getJobMode() == JobMode.COP ? "for backup" : "the police") + "! Please wait &c&l" + Utils.timeInSecondsToText(Math.round(user.getTimeUntilBackupRequestExpires()/1000.0), "&3", "&7", "&7")+ "&7 to request backup again!")); + return; + } + if (user.getJobMode() == JobMode.COP) + player.sendMessage(Lang.COP_MODE.f("&7You have called for backup! All officers have been notified, and they can teleport to you for 1 minute!")); + else { + if (user.getWantedLevel() > 0) { + player.sendMessage(Lang.WANTED.f("&7You are currently wanted by the police! It would be unwise to tip off your location.")); + return; + } + player.sendMessage(Lang.GTM.f("&7You have called the police! All officers have been notified, and they can teleport to you for 1 minute!")); + } + user.setLastBackupRequest(System.currentTimeMillis()); + for (GTMUser u : GTMUtils.getCops()) { + Player p = Bukkit.getPlayer(u.getUUID()); + if (!Objects.equals(player, p)) + p.spigot().sendMessage(new ComponentBuilder(Lang.COP_MODE.f((user.getJobMode() == JobMode.COP ? "&3&lCop " : "&7Citizen") + Core.getUserManager().getLoadedUser(p.getUniqueId()).getColoredName(p))).append(" is requesting " + (user.getJobMode() == JobMode.COP ? "backup" : "police assistance") + "! Teleport: ").color(net.md_5.bungee.api.ChatColor.GRAY). + append(" [ACCEPT] ").color(net.md_5.bungee.api.ChatColor.GREEN).bold(true).event(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/backup " + player.getName())).create()); + + } + return; + case WOOD_SWORD: + player.closeInventory(); + BaseComponent[] baseComponents = + new ComponentBuilder(Lang.GTM.f("&7Do you wish to commit suicide?")) + //.color(net.md_5.bungee.api.ChatColor.GRAY) + .append(" Click here for Yes") + .color(net.md_5.bungee.api.ChatColor.GREEN) + .event(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/suicide")) + .create(); + player.spigot().sendMessage(baseComponents); + return; + case REDSTONE: + MenuManager.openMenu(player, "phone"); + return; + case WATCH: + GTM.getWarpManager().warp(player, Core.getUserManager().getLoadedUser(uuid), GTM.getUserManager().getLoadedUser(uuid), new TaxiTarget(GTM.getWarpManager().getSpawn()), 0, -1); + return; + default: + return; + } + } + case "taxi": + switch (e.getItem().getType()) { + case SKULL_ITEM: + MenuManager.openMenu(player, "taxiplayers"); + return; + case BED: + GTM.getWarpManager().warp(player, Core.getUserManager().getLoadedUser(uuid), + GTM.getUserManager().getLoadedUser(uuid), new TaxiTarget(GTM.getWarpManager().getSpawn()), 0, + -1); + player.closeInventory(); + return; + case EMERALD: + GTM.getWarpManager().warp(player, Core.getUserManager().getLoadedUser(player.getUniqueId()), user, new TaxiTarget(GTM.getWarpManager().getRandomWarp()), 0, Core.getUserManager().getLoadedUser(player.getUniqueId()).isPremium() ? 1 : 10); + return; + case IRON_DOOR: + MenuManager.openMenu(player, "taxihouses"); + return; + case REDSTONE: + MenuManager.openMenu(player, "contacts"); + return; + case ENDER_PEARL: + MenuManager.openMenu(player, "taxiwarps"); + return; + default: + return; + } + case "taxiplayers": + switch (item.getType()) { + case ARROW: + int page = Integer + .parseInt(ChatColor.stripColor(item.getItemMeta().getLore().get(0)).replace("Page ", "")); + this.setPhoneDefaults(inv); + User u = Core.getUserManager().getLoadedUser(uuid); + List<Player> players = new ArrayList<>(Bukkit.getOnlinePlayers()); + players.remove(player); + int[] slots = new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 38, 39, 40, 41, + 42}; + Iterator<? extends Player> it = players.iterator(); + for (int i = 0; i < page * 20; i++) { + if (!it.hasNext()) + break; + Player p = it.next(); + if (i < (page - 1) * 20) + continue; + + inv.setItem(slots[i - (page - 1) * 20], Utils.setSkullOwner( + Utils.createItem(Material.SKULL_ITEM, 3, "&e&l" + p.getName(), + u.isPremium() ? "&7Click to send teleport request!" : "&cRequires PREMIUM!"), + p.getName())); + } + inv.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the taxi page!")); + if (page > 1) + inv.setItem(48, Utils.createItem(Material.ARROW, "&e&lPrevious Page", "&7Page " + (page - 1))); + inv.setItem(49, + Utils.createItem(Material.STORAGE_MINECART, "&e&lTaxi Service: Players", "&7Page " + page)); + if (players.size() > (20 * page)) + inv.setItem(50, Utils.createItem(Material.ARROW, "&e&lNext Page", "&7Page " + (page + 1))); + return; + case SKULL_ITEM: + Player target = Bukkit.getPlayer(ChatColor.stripColor(item.getItemMeta().getDisplayName())); + player.closeInventory(); + GTM.getWarpManager().tpa(player, Core.getUserManager().getLoadedUser(uuid), + GTM.getUserManager().getLoadedUser(uuid), target); + return; + case REDSTONE: + MenuManager.openMenu(player, "taxi"); + return; + default: + return; + } + case "taxihouses": + switch (item.getType()) { + case REDSTONE: + MenuManager.openMenu(player, "taxi"); + return; + case IRON_DOOR: + String s = ChatColor.stripColor(item.getItemMeta().getDisplayName()); + if (Objects.equals("Find House", s)) + return; + if (s.startsWith("Premium House: ")) { + int id; + try { + id = Integer.parseInt(s.replace("Premium House: ", "")); + } catch (NumberFormatException ex) { + player.sendMessage(Utils.f(Lang.HOUSES + "&7That House ID is invalid!")); + return; + } + PremiumHouse premiumHouse = Houses.getHousesManager().getPremiumHouse(id); + if (premiumHouse == null) { + player.sendMessage(Lang.HOUSES.f("&7That house does not exist!")); + return; + } + PremiumHouseDoor door = premiumHouse.getDoor(); + if (door == null || door.getOutsideLocation() == null) { + player.sendMessage(Lang.HOUSES.f("&7That house does not have any doors!")); + return; + } + Location tpLocation = door.getOutsideLocation(); + player.closeInventory(); + GTM.getWarpManager().warp(player, Core.getUserManager().getLoadedUser(uuid), + GTM.getUserManager().getLoadedUser(uuid), new TaxiTarget(tpLocation), 500, -1); + return; + } else if (s.startsWith("House: ")) { + int id; + try { + id = Integer.parseInt(s.replace("House: ", "")); + } catch (NumberFormatException ex) { + player.sendMessage(Utils.f(Lang.HOUSES + "&7That House ID is invalid!")); + return; + } + House house = Houses.getHousesManager().getHouse(id); + if (house == null) { + player.sendMessage(Lang.HOUSES.f("&7That house does not exist!")); + return; + } + HouseDoor door = house.getDoor(); + if (door == null || door.getOutsideLocation() == null) { + player.sendMessage(Lang.HOUSES.f("&7That house does not have any doors!")); + return; + } + Location tpLocation = door.getOutsideLocation(); + player.closeInventory(); + GTM.getWarpManager().warp(player, Core.getUserManager().getLoadedUser(uuid), + GTM.getUserManager().getLoadedUser(uuid), new TaxiTarget(tpLocation), 500, -1); + return; + } + return; + case ARROW: + int page = Integer + .parseInt(ChatColor.stripColor(item.getItemMeta().getLore().get(0)).replace("Page ", "")); + this.setPhoneDefaults(inv); + int[] slots = new int[]{10, 11, 12, 13, 14, 15, 16, 19, 20, 21, 22, 23, 24, 25, 28, 29, 30, 31, 32, + 33, 34, 37, 38, 39, 40, 41, 42, 43}; + GTMUser gtmUser = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + HouseUser houseUser = Houses.getUserManager().getLoadedUser(player.getUniqueId()); + List<UserHouse> houses = houseUser.getHouses(); + List<PremiumHouse> premiumHouses = houseUser.getPremiumHousesAsGuest(); + Iterator<UserHouse> it = houses.iterator(); + Iterator<PremiumHouse> it2 = premiumHouses.iterator(); + for (int i = 0; i < page * 20; i++) { + PremiumHouse premiumHouse = it.hasNext() ? null : it2.hasNext() ? it2.next() : null; + UserHouse userHouse = it.hasNext() ? it.next() : null; + if (i < (page - 1) * 20) + continue; + if (premiumHouse == null && userHouse == null) + break; + if (premiumHouse != null) { + inv.setItem(slots[i - (page - 1) * 20], Utils.addGlow(Utils.createItem(Material.IRON_DOOR, + "&3&lPremium House: &a&l" + premiumHouse.getId(), + Arrays.asList("Permits: &a&l" + premiumHouse.getPermits(), + "&7Chests: &a&l" + premiumHouse.getChests().size(), + "&7Owned by &a" + (Objects.equals(player.getUniqueId(), premiumHouse.getOwner()) ? "me" + : premiumHouse.getOwnerName()) + '.', + gtmUser.hasMoney(500) ? "&7Click to teleport for &a$&l500&7!" : "&cYou can't afford &c$&l500&c to pay for the ride!")))); + continue; + } + + House house = Houses.getHousesManager().getHouse(userHouse.getId()); + inv.setItem(slots[i - (page - 1) * 20], + Utils.createItem(Material.IRON_DOOR, "&3&lHouse: &a&l" + house.getId(), + Arrays.asList("&7Price: &$a&l" + house.getPrice(), + "&7Chests: &a&l" + house.getChests().size(), + "&7Click to teleport for &a$&l500&7!"))); + } + inv.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the taxi page!")); + if (page > 1) + inv.setItem(48, Utils.createItem(Material.ARROW, "&e&lPrevious Page", "&7Page " + (page - 1))); + inv.setItem(49, + Utils.createItem(Material.STORAGE_MINECART, "&e&lTaxi Service: &3&lHouses", "&7Page " + page)); + if (houses.size() > (20 * page)) + inv.setItem(50, Utils.createItem(Material.ARROW, "&e&lNext Page", "&7Page " + (page + 1))); + return; + default: + return; + + } + case "taxiwarps": + switch (item.getType()) { + case ARROW: + int page = Integer + .parseInt(ChatColor.stripColor(item.getItemMeta().getLore().get(0)).replace("Page ", "")); + this.setPhoneDefaults(inv); + GTMUser gtmUser = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + List<Warp> warps = GTM.getWarpManager().getWarps(); + int[] slots = new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 38, 39, 40, 41, + 42}; + Iterator<Warp> it = warps.iterator(); + for (int i = 0; i < page * 20; i++) { + if (!it.hasNext()) + break; + Warp warp = it.next(); + if (i < (page - 1) * 20) + continue; + inv.setItem(slots[i - (page - 1) * 20], Utils.createItem(Material.ENDER_PEARL, + "&e&l" + warp.getName(), "&7Click to teleport for &a$&l200&7!")); + } + inv.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the taxi page!")); + if (page > 1) + inv.setItem(48, Utils.createItem(Material.ARROW, "&e&lPrevious Page", "&7Page " + (page - 1))); + inv.setItem(49, + Utils.createItem(Material.STORAGE_MINECART, "&e&lTaxi Service: Warps", "&7Page " + page)); + if (warps.size() > (20 * page)) + inv.setItem(50, Utils.createItem(Material.ARROW, "&e&lNext Page", "&7Page " + (page + 1))); + return; + case ENDER_PEARL: + Warp warp = GTM.getWarpManager().getWarp(ChatColor.stripColor(item.getItemMeta().getDisplayName())); + if (warp == null) { + player.sendMessage(Lang.TAXI.f("&7That warp does not exist!")); + return; + } + player.closeInventory(); + GTM.getWarpManager().warp(player, Core.getUserManager().getLoadedUser(uuid), + GTM.getUserManager().getLoadedUser(uuid), new TaxiTarget(warp), 200, -1); + return; + case REDSTONE: + MenuManager.openMenu(player, "taxi"); + return; + default: + return; + } + case "bank": + switch (e.getItem().getType()) { + case INK_SACK: + MenuManager.openMenu(player, menu.getName() + "withdraw"); + return; + case SLIME_BALL: + MenuManager.openMenu(player, menu.getName() + "deposit"); + return; + case SKULL_ITEM: + MenuManager.openMenu(player, menu.getName() + "transfer"); + return; + case REDSTONE: + MenuManager.openMenu(player, "property"); + return; + default: + return; + } + case "bankwithdraw": { + switch (item.getType()) { + case PAPER: + double amnt = Double.parseDouble(ChatColor.stripColor(item.getItemMeta().getDisplayName()) + .replace("$", "").replace("All: ", "").replace("Half: ", "")); + if (!user.hasBank(amnt)) { + player.sendMessage(Lang.BANK.f("&7You don't have &c$&l" + amnt + " &cin your bank account!")); + return; + } + user.withdrawFromBank(amnt); + GTMUtils.updateBoard(player, user); + player.sendMessage(Lang.BANK.f("&7You withdrew &a$&l" + amnt + "&7 from your bank account!")); + player.closeInventory(); + return; + case BOOK_AND_QUILL: + user.setCurrentChatAction(ChatAction.BANK_WITHDRAWING, 0); + player.closeInventory(); + player.sendMessage(Utils.f(Lang.BANK + + "&7Please type the amount you would like to withdraw in chat, or type&a \"quit\"&7!")); + return; + case REDSTONE: + MenuManager.openMenu(player, "bank"); + return; + default: + return; + + } + } + case "bankdeposit": { + switch (item.getType()) { + case PAPER: + double amnt = Double.parseDouble(ChatColor.stripColor(item.getItemMeta().getDisplayName()).replace("$", "").replace("All: ", "").replace("Half: ", "")); + if (!user.hasMoney(amnt)) { + player.sendMessage(Lang.BANK.f("&7You don't have &c$&l" + amnt + " &con you!")); + return; + } + if(amnt < 100) { + player.sendMessage(Lang.BANK.f("&c&lYou must deposit at least $100!")); + return; + } + user.depositToBank(amnt); + GTMUtils.updateBoard(player, user); + player.sendMessage(Lang.BANK.f("&7You deposited &a$&l" + amnt + "&7 into your bank account!")); + player.closeInventory(); + return; + case BOOK_AND_QUILL: + user.setCurrentChatAction(ChatAction.BANK_DEPOSITING, 0); + player.closeInventory(); + player.sendMessage(Utils.f(Lang.BANK + + "&7Please type the amount you would like to deposit in chat, or type&a \"quit\"&7!")); + return; + case REDSTONE: + MenuManager.openMenu(player, "bank"); + return; + default: + return; + + } + } + case "banktransfer": { + switch (item.getType()) { + case PAPER: + double amnt = Double.parseDouble(ChatColor.stripColor(item.getItemMeta().getDisplayName()) + .replace("$", "").replace("All: ", "").replace("Half: ", "")); + if (!user.hasBank(amnt)) { + player.sendMessage(Lang.BANK.f("&7You don't have &c$&l" + amnt + " &con you!")); + return; + } + + if (!GTM.getSettings().isBankToBankTransfer()){ + player.sendMessage(Lang.BANK.f("&cBank to bank transferring is currently disabled!")); + return; + } + + user.setCurrentChatAction(ChatAction.BANK_TRANSFERRING, amnt); + player.closeInventory(); + player.sendMessage(Lang.BANK.f("&7Please type the name of the player you would like to transfer &a$&l" + + amnt + "&7 to, or type&a \"quit\"&7!")); + return; + case BOOK_AND_QUILL: + user.setCurrentChatAction(ChatAction.BANK_TRANSFERRING, 0); + player.closeInventory(); + player.sendMessage(Lang.BANK + .f("&7Please type the amount you would like to deposit in chat, or type &a\"quit\"&7!")); + return; + case REDSTONE: + MenuManager.openMenu(player, "bank"); + return; + default: + return; + + } + } + case "gps": + switch (item.getType()) { + case LEATHER_CHESTPLATE: { + Gang gang = GangManager.getInstance().getGangByMember(uuid).orElse(null); + if (gang == null) { + player.sendMessage(Utils.f(Lang.GPS + "&7You are not in any gang!")); + return; + } + + MenuManager.openMenu(player, "gpsgangs"); + return; + } + case IRON_DOOR: { + HouseUser houseUser = Houses.getUserManager().getLoadedUser(uuid); + if (houseUser.getHouses().isEmpty() && houseUser.getPremiumHousesAsGuest().isEmpty()) { + player.sendMessage(Utils.f(Lang.GPS + "&7You do not own any houses!")); + return; + } + MenuManager.openMenu(player, "gpshouses"); + + return; + } + case LEATHER_HELMET: { + if (user.getJobMode() != JobMode.COP) { + player.sendMessage(Utils.f(Lang.GPS + "&7You are not a cop!")); + return; + } + MenuManager.openMenu(player, "gpscops"); + return; + } + case REDSTONE: { + user.unsetCompassTarget(player, Core.getUserManager().getLoadedUser(uuid)); + player.sendMessage(Utils.f(Lang.GPS + "&7Your GPS target was unset.")); + return; + } + case SKULL_ITEM: { + if (item.getDurability() == 3) { + if (user.getJobMode() != JobMode.COP) { + player.sendMessage(Utils.f(Lang.GPS + "&7You are not a cop!")); + return; + } + MenuManager.openMenu(player, "gpscriminals"); + return; + } + if (user.getJobMode() != JobMode.HITMAN) { + player.sendMessage(Utils.f(Lang.GPS + "&7You are not a hitman!")); + return; + } + MenuManager.openMenu(player, "gpsbounties"); + return; + } + case COMPASS: { + if (!user.hasCompassTarget()) + return; + if (user.getLastCompassRefresh() > System.currentTimeMillis() - 5000) { + player.sendMessage(Utils.f(Lang.GPS + "&7Please wait 5 seconds before refreshing the tracker!")); + return; + } + if (user.refreshCompassTarget(player, Core.getUserManager().getLoadedUser(uuid))){ + player.sendMessage(Utils.f(Lang.GPS + "&7You refreshed your GPS tracker! It will refresh every 60 seconds!")); + } + return; + } + default: + PersonalVehicle vehicle = user.getPersonalVehicle(); + if (vehicle == null) return; + if (!item.hasItemMeta() || !item.getItemMeta().hasDisplayName() || !Objects.equals(item.getItemMeta().getDisplayName(), vehicle.getDisplayName())) + return; + if (!vehicle.onMap()) { + player.sendMessage(Lang.GPS.f("&7Your vehicle is not on the map!")); + return; + } + if (vehicle.isDestroyed()) { + player.sendMessage(Lang.GPS.f("&7Your vehicle is destroyed!")); + return; + } + user.setCompassTarget(player, Core.getUserManager().getLoadedUser(uuid), new CompassTarget(vehicle)); + player.sendMessage(Lang.GPS.f("&7Your GPS is now tracking your " + (vehicle.isStolen() ? "stolen " : "") + + vehicle.getDisplayName() + "&7!")); + return; + } + case "gpsgangs": + switch (item.getType()) { + case REDSTONE: + MenuManager.openMenu(player, "gps"); + return; + case SKULL_ITEM: { + String s = ChatColor.stripColor(item.getItemMeta().getDisplayName()); + Player p = Bukkit.getPlayer(s); + if (p == null) { + player.sendMessage(Utils.f(Lang.GPS + "&7That player is not online!")); + return; + } + + Gang gang = GangManager.getInstance().getGangByMember(uuid).orElse(null); + Gang targetGang = GangManager.getInstance().getGangByMember(p.getUniqueId()).orElse(null); + + if (gang == null || targetGang == null || !Objects.equals(gang, targetGang)) { + player.sendMessage(Utils.f(Lang.GPS + "&7That player is not in your gang!")); + return; + } + + player.closeInventory(); + user.setCompassTarget(player, Core.getUserManager().getLoadedUser(uuid), new CompassTarget(p)); + player.sendMessage(Utils.f(Lang.GPS + "&7Your GPS is now tracking " + Core.getUserManager().getLoadedUser(uuid).getColoredName(p) + "&7!")); + return; + } + case ARROW: + int page = Integer + .parseInt(ChatColor.stripColor(item.getItemMeta().getLore().get(0)).replace("Page ", "")); + this.setGPSDefaults(inv); + Gang gang = GangManager.getInstance().getGangByMember(uuid).orElse(null); + List<String> members = new ArrayList<>(); + if (gang != null) { + members.addAll(gang.getMembers().stream().filter(member -> !member.getUniqueId().equals(player.getUniqueId()) && Bukkit.getPlayer(member.getUniqueId()) != null).map(GangMember::getName).collect(Collectors.toList())); + } + + members.remove(player.getName()); + int[] slots = new int[]{10, 11, 12, 13, 14, 15, 16, 19, 20, 21, 22, 23, 24, 25, 28, 29, 30, 31, 32, 33, 34, 37, 38, 39, 40, 41, 42, 43}; + Iterator<String> it = members.iterator(); + for (int i = 0; i < (page * 28); i++) { + if (!it.hasNext()) break; + String member = it.next(); + if (i < (page - 1) * 28) continue; + + inv.setItem(slots[i - (page - 1) * 28], Utils.setSkullOwner(Utils.createItem(Material.SKULL_ITEM, 3, "&a&l" + member, "&7Click to track your homie!"), member)); + } + inv.setItem(46, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the home page!")); + if (page > 1) inv.setItem(48, Utils.createItem(Material.ARROW, "&b&lPrevious Page", "&7Page " + (page - 1))); + inv.setItem(49, Utils.setArmorColor(Utils.createItem(Material.LEATHER_CHESTPLATE, "&a&lTrack Gang Member", "&7Click on a gang member to select them!"), Color.fromRGB(102, 127, 51))); + if (members.size() > (28 * page)) inv.setItem(50, Utils.createItem(Material.ARROW, "&b&lNext Page", "&7Page " + (page + 1))); + return; + default: + return; + } + case "gpshouses": + switch (item.getType()) { + case REDSTONE: + MenuManager.openMenu(player, "gps"); + return; + case IRON_DOOR: + String s = ChatColor.stripColor(item.getItemMeta().getDisplayName()); + if (Objects.equals("Find House", s)) + return; + if (s.startsWith("Premium House: ")) { + int id; + try { + id = Integer.parseInt(s.replace("Premium House: ", "")); + } catch (NumberFormatException e1) { + player.sendMessage(Utils.f(Lang.GPS + "&7That House ID is invalid!")); + return; + } + PremiumHouse house = Houses.getHousesManager().getPremiumHouse(id); + user.setCompassTarget(player, Core.getUserManager().getLoadedUser(player.getUniqueId()), new CompassTarget(house.getDoor().getLocation())); + player.sendMessage( + Utils.f(Lang.GPS + "&7You set your GPS target to &3&lPremium House &a&l" + id + "&7!")); + } else if (s.startsWith("House: ")) { + int id; + try { + id = Integer.parseInt(s.replace("House: ", "")); + } catch (NumberFormatException ex) { + player.sendMessage(Utils.f(Lang.GPS + "&7That House ID is invalid!")); + return; + } + House house = Houses.getHousesManager().getHouse(id); + user.setCompassTarget(player, Core.getUserManager().getLoadedUser(player.getUniqueId()), new CompassTarget(house.getDoor().getLocation())); + player.sendMessage(Utils.f(Lang.GPS + "&7You set your GPS target to &3&lHouse &a&l" + id + "&7!")); + return; + } + return; + case ARROW: + int page = Integer + .parseInt(ChatColor.stripColor(item.getItemMeta().getLore().get(0)).replace("Page ", "")); + this.setGPSDefaults(inv); + int[] slots = new int[]{10, 11, 12, 13, 14, 15, 16, 19, 20, 21, 22, 23, 24, 25, 28, 29, 30, 31, 32, + 33, 34, 37, 38, 39, 40, 41, 42, 43}; + HouseUser houseUser = Houses.getUserManager().getLoadedUser(player.getUniqueId()); + List<UserHouse> houses = houseUser.getHouses(); + List<PremiumHouse> premiumHouses = houseUser.getPremiumHousesAsGuest(); + Iterator<UserHouse> it = houses.iterator(); + Iterator<PremiumHouse> it2 = premiumHouses.iterator(); + for (int i = 0; i < (page * 28); i++) { + PremiumHouse premiumHouse = it.hasNext() ? null : it2.hasNext() ? it2.next() : null; + UserHouse userHouse = it.hasNext() ? it.next() : null; + if (i < (page - 1) * 28) + continue; + if (premiumHouse == null && userHouse == null) + break; + if (premiumHouse != null) { + inv.setItem(slots[i - (page - 1) * 20], Utils.addGlow(Utils.createItem(Material.IRON_DOOR, + "&3&lPremium House: &a&l" + premiumHouse.getId(), + Arrays.asList("Permits: " + premiumHouse.getPermits(), + "&7Chests: " + premiumHouse.getChests().size(), + "&7Owned by " + (Objects.equals(player.getUniqueId(), premiumHouse.getOwner()) ? "me" + : premiumHouse.getOwnerName()) + '.', + "&7Click to track!")))); + continue; + } + House house = Houses.getHousesManager().getHouse(userHouse.getId()); + inv.setItem(slots[i - (page - 1) * 28], + Utils.createItem(Material.IRON_DOOR, "&3&lHouse: &a&l" + house.getId(), + Arrays.asList("&7Price: " + house.getPrice(), + "&7Chests: " + house.getChests().size(), "&7Click to track!"))); + } + inv.setItem(46, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the home page!")); + if (page > 1) + inv.setItem(48, Utils.createItem(Material.ARROW, "&b&lPrevious Page", "&7Page " + (page - 1))); + inv.setItem(49, Utils.setArmorColor( + Utils.createItem(Material.IRON_DOOR, "&3&lFind House", "&7Click on a house to select it!"), + Color.fromRGB(102, 127, 51))); + if ((houses.size() + premiumHouses.size()) > (28 * page)) + inv.setItem(50, Utils.createItem(Material.ARROW, "&a&lNext Page", "&7Page 2")); + return; + default: + return; + + } + case "gpscops": + switch (item.getType()) { + case REDSTONE: + MenuManager.openMenu(player, "gps"); + return; + case SKULL_ITEM: { + if (user.getJobMode() != JobMode.COP) { + player.sendMessage(Lang.GPS.f("&7You are not a cop!")); + MenuManager.openMenu(player, "gps"); + return; + } + Player p = Bukkit.getPlayer(ChatColor.stripColor(item.getItemMeta().getDisplayName())); + if (p == null) { + player.sendMessage(Utils.f(Lang.GPS + "&7That player is not online!")); + return; + } + GTMUser u = GTM.getUserManager().getLoadedUser(p.getUniqueId()); + if (u.getJobMode() != JobMode.COP) { + player.sendMessage(Utils.f(Lang.GPS + "&7That player is not a cop!")); + return; + } + + user.setCompassTarget(player, Core.getUserManager().getLoadedUser(uuid), new CompassTarget(player)); + player.sendMessage(Utils.f(Lang.GPS + "&7Your GPS is now tracking " + + Core.getUserManager().getLoadedUser(p.getUniqueId()).getColoredName(p) + "&7!")); + return; + } + case ARROW: + if (user.getJobMode() != JobMode.COP) { + player.sendMessage(Lang.GPS.f("&7You are not a cop!")); + MenuManager.openMenu(player, "gps"); + return; + } + int page = Integer + .parseInt(ChatColor.stripColor(item.getItemMeta().getLore().get(0)).replace("Page ", "")); + this.setGPSDefaults(inv); + List<GTMUser> cops = GTMUtils.getCops(); + cops.remove(GTM.getUserManager().getLoadedUser(uuid)); + int[] slots = new int[]{10, 11, 12, 13, 14, 15, 16, 19, 20, 21, 22, 23, 24, 25, 28, 29, 30, 31, 32, + 33, 34, 37, 38, 39, 40, 41, 42, 43}; + Iterator<GTMUser> it = cops.iterator(); + for (int i = 0; i < (page * 28); i++) { + if (!it.hasNext()) + break; + GTMUser u = it.next(); + if (i < (page - 1) * 28) + continue; + Player p = Bukkit.getPlayer(u.getUUID()); + inv.setItem(slots[i - (page - 1) * 28], Utils.setSkullOwner(Utils.createItem(Material.SKULL_ITEM, 3, + "&b&l" + p.getName(), "&7Click to track your colleague!"), p.getName())); + } + inv.setItem(46, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the home page!")); + if (page > 1) + inv.setItem(48, Utils.createItem(Material.ARROW, "&b&lPrevious Page", "&7Page " + (page - 1))); + inv.setItem(49, Utils.setArmorColor( + Utils.createItem(Material.LEATHER_HELMET, "&b&lAssist Cop", "&7Click on a cop to select them!"), + Color.fromRGB(102, 127, 51))); + if (cops.size() > (28 * page)) + inv.setItem(50, Utils.createItem(Material.ARROW, "&b&lNext Page", "&7Page " + (page + 1))); + return; + default: + return; + } + case "gpscriminals": + switch (item.getType()) { + case REDSTONE: + MenuManager.openMenu(player, "gps"); + return; + case SKULL_ITEM: { + if (user.getJobMode() != JobMode.COP) { + player.sendMessage(Lang.GPS.f("&7You are not a cop!")); + MenuManager.openMenu(player, "gps"); + return; + } + Player p = Bukkit.getPlayer(ChatColor.stripColor(item.getItemMeta().getDisplayName())); + if (p == null) { + player.sendMessage(Utils.f(Lang.GPS + "&7That player is not online!")); + return; + } + GTMUser u = GTM.getUserManager().getLoadedUser(p.getUniqueId()); + if (u.getJobMode() != JobMode.CRIMINAL) { + player.sendMessage(Utils.f(Lang.GPS + "&7That player is not a criminal!")); + return; + } + user.setCompassTarget(player, Core.getUserManager().getLoadedUser(uuid), new CompassTarget(player)); + player.sendMessage(Utils.f(Lang.GPS + "&7Your GPS is now tracking " + + Core.getUserManager().getLoadedUser(p.getUniqueId()).getColoredName(p) + "&7!")); + return; + } + case ARROW: + if (user.getJobMode() != JobMode.COP) { + player.sendMessage(Lang.GPS.f("&7You are not a cop!")); + MenuManager.openMenu(player, "gps"); + return; + } + int page = Integer + .parseInt(ChatColor.stripColor(item.getItemMeta().getLore().get(0)).replace("Page ", "")); + this.setGPSDefaults(inv); + Set<GTMUser> criminals = GTMUtils.getCriminalsByWantedLevel(2); + criminals.remove(GTM.getUserManager().getLoadedUser(uuid)); + Iterator<GTMUser> it = criminals.iterator(); + int[] slots = new int[]{10, 11, 12, 13, 14, 15, 16, 19, 20, 21, 22, 23, 24, 25, 28, 29, 30, 31, 32, + 33, 34, 37, 38, 39, 40, 41, 42, 43}; + for (int i = 0; i < (page * 28); i++) { + if (!it.hasNext()) + break; + GTMUser u = it.next(); + if (i < (page - 1) * 28) + continue; + Player p = Bukkit.getPlayer(u.getUUID()); + inv.setItem(slots[i - (page - 1) * 28], Utils.setSkullOwner(Utils.createItem(Material.SKULL_ITEM, 3, + "&b&l" + p.getName(), "&7Click to track this criminal!"), p.getName())); + } + inv.setItem(46, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the home page!")); + if (page > 1) + inv.setItem(48, Utils.createItem(Material.ARROW, "&e&lPrevious Page", "&7Page " + (page - 1))); + inv.setItem(49, Utils.createItem(Material.COMPASS, "&e&lTrack Wanted Criminal", + "&7Click on a criminal to select them!")); + if (criminals.size() > (28 * page)) + inv.setItem(50, Utils.createItem(Material.ARROW, "&e&lNext Page", "&7Page " + (page + 1))); + return; + default: + return; + } + case "gpsbounties": + switch (item.getType()) { + case REDSTONE: + MenuManager.openMenu(player, "gps"); + return; + case SKULL_ITEM: { + if (user.getJobMode() != JobMode.HITMAN) { + player.sendMessage(Lang.GPS.f("&7You are not a hitman!")); + MenuManager.openMenu(player, "gps"); + return; + } + Player p = Bukkit.getPlayer(ChatColor.stripColor(item.getItemMeta().getDisplayName())); + if (p == null) { + player.sendMessage(Utils.f(Lang.GPS + "&7That player is not online!")); + return; + } + if (GTM.getBountyManager().getBounty(p.getUniqueId()) == null) { + player.sendMessage(Utils.f(Lang.GPS + "&7That player does not have a bounty on his head!")); + return; + } + user.setCompassTarget(player, Core.getUserManager().getLoadedUser(uuid), new CompassTarget(p)); + player.sendMessage(Utils.f(Lang.GPS + "&7Your GPS is now tracking " + Core.getUserManager().getLoadedUser(p.getUniqueId()).getColoredName(p) + "&7!")); + return; + } + case ARROW: + if (user.getJobMode() != JobMode.HITMAN) { + player.sendMessage(Lang.GPS.f("&7You are not a hitman!")); + MenuManager.openMenu(player, "gps"); + return; + } + int page = Integer + .parseInt(ChatColor.stripColor(item.getItemMeta().getLore().get(0)).replace("Page ", "")); + BountyManager bm = GTM.getBountyManager(); + this.setPhoneDefaults(inv); + Set<Bounty> bounties = bm.getBountiesByAmount(); + int[] slots = new int[]{10, 11, 12, 13, 14, 15, 16, 19, 20, 21, 22, 23, 24, 25, 28, 29, 30, 31, 32, + 33, 34, 37, 38, 39, 40, 41, 42, 43}; + Iterator<Bounty> it = bounties.iterator(); + for (int i = 0; i < (page * 28); i++) { + if (!it.hasNext()) + break; + Bounty b = it.next(); + if (i < (page - 1) * 28) + continue; + List<String> lore = Arrays.asList("&7Bounty Total: &a$&l" + b.getAmount(), ""); + double anon = 0; + for (BountyPlacer p : b.getPlacers()) + if (p.isAnonymous()) + anon += p.getAmount(); + else + lore.add("&7" + p.getName() + ": &a$&l" + p.getAmount()); + if (anon > 0) + lore.add("&7Anonymous: &a$&l" + anon); + inv.setItem(slots[i - (page - 1) * 28], Utils.setSkullOwner( + Utils.createItem(Material.SKULL_ITEM, 3, "&5&l" + b.getName(), lore), b.getName())); + } + inv.setItem(46, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the bounties page!")); + if (page > 1) + inv.setItem(48, Utils.createItem(Material.ARROW, "&5&lPrevious Page", "&7Page " + (page - 1))); + inv.setItem(49, Utils.createItem(Material.COMPASS, "&5&lBounty List", "&7Page " + page)); + if (bounties.size() > (28 * page)) + inv.setItem(50, Utils.createItem(Material.ARROW, "&5&lNext Page", "&7Page " + (page + 1))); + return; + default: + return; + } + case "mygang": + switch (item.getType()) { + case SLIME_BALL: { + user.setCurrentChatAction(ChatAction.GANG_CHAT_ACTION, "create"); + player.closeInventory(); + player.sendMessage(Lang.GANGS.f("&7Please type in the name of the gang you would like to create, or type &a\"quit\"&7 to quit!")); + return; + } + case SKULL_ITEM: { + Gang gang = GangManager.getInstance().getGangByMember(uuid).orElse(null); + if (gang == null || !gang.isLeader(uuid)) return; + user.setCurrentChatAction(ChatAction.GANG_CHAT_ACTION, "leader"); + player.closeInventory(); + player.sendMessage(Lang.GANGS.f("&7Please type in the name of the player you would like to appoint as leader of your gang, or type &a\"quit\"&7 to quit!")); + return; + } + case INK_SACK: { + Gang gang = GangManager.getInstance().getGangByMember(uuid).orElse(null); + if (gang == null || !gang.isLeader(uuid)) return; + MenuManager.openMenu(player, gang.isLeader(uuid) ? "disbandgang" : "leavegang"); + return; + } + case BOOK_AND_QUILL: + MenuManager.openMenu(player, "mygangrelations"); + return; + case TRIPWIRE_HOOK: + MenuManager.openMenu(player, "mygangmembers"); + return; + case EMPTY_MAP: { + Gang gang = GangManager.getInstance().getGangByMember(uuid).orElse(null); + if (gang == null || !(gang.isLeader(uuid) || gang.isCoLeader(uuid))) return; + user.setCurrentChatAction(ChatAction.GANG_CHAT_ACTION, "description"); + player.closeInventory(); + player.sendMessage(Lang.GANGS.f("&7Please type in the description you would like to set for your gang, or type &a\"quit\"&7 to quit!")); + return; + } + case FEATHER: + Gang gang = GangManager.getInstance().getGangByMember(uuid).orElse(null); + if (gang == null || !gang.isLeader(uuid)) return; + user.setCurrentChatAction(ChatAction.GANG_CHAT_ACTION, "name"); + player.closeInventory(); + player.sendMessage(Lang.GANGS.f("&7Please type in the name you would like to set for your gang, or type &a\"quit\"&7 to quit!")); + return; + case REDSTONE: + MenuManager.openMenu(player, "phone"); + return; + case BOOK: + MenuManager.openMenu(player, "gangs"); + return; + default: + return; + } + case "gang": { + Gang own = GangManager.getInstance().getGangByMember(uuid).orElse(null); + if (own == null) return; + + Gang gang = own.getViewingGang(uuid).orElse(null); + if (gang == null) return; + + switch (item.getType()) { + case REDSTONE: + MenuManager.openMenu(player, "phone"); + return; + case BOOK: + MenuManager.openMenu(player, "gangs"); + return; + case BOOK_AND_QUILL: + MenuManager.openMenu(player, "gangrelations"); + return; + case TRIPWIRE_HOOK: + MenuManager.openMenu(player, "gangmembers"); + return; + default: + return; + } + } + case "disbandgang": + switch (item.getType()) { + case STAINED_GLASS_PANE: + switch (item.getDurability()) { + case 5: + Gang gang = GangManager.getInstance().getGangByMember(uuid).orElse(null); + if (gang == null) { + player.sendMessage(Lang.GANGS.f("&7You are not in any gang!")); + return; + } + + player.closeInventory(); + gang.disbandConfirm(player, Core.getUserManager().getLoadedUser(uuid), user); + return; + case 14: + MenuManager.openMenu(player, "mygang"); + return; + default: + return; + } + default: + return; + } + case "leavegang": + switch (item.getType()) { + case STAINED_GLASS_PANE: + switch (item.getDurability()) { + case 5: + Gang gang = GangManager.getInstance().getGangByMember(uuid).orElse(null); + if (gang == null) { + player.sendMessage(Lang.GANGS.f("&7You are not in any gang!")); + return; + } + + player.closeInventory(); + gang.leave(player, Core.getUserManager().getLoadedUser(uuid), user); + return; + case 14: + MenuManager.openMenu(player, "mygang"); + return; + default: + return; + } + default: + return; + } + case "mygangmembers": + switch (item.getType()) { + case ARROW: { + int page = Integer.parseInt(ChatColor.stripColor(item.getItemMeta().getLore().get(0)).replace("Page ", "")); + this.setPhoneDefaults(inv); + Gang gang = GangManager.getInstance().getGangByMember(uuid).orElse(null); + List<GangMember> members = new ArrayList<>(); + if (gang != null) members.addAll(gang.getMembers()); + + int[] slots = new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 38, 39, 40, 41, 42}; + Iterator<GangMember> it = members.iterator(); + for (int i = 0; i < page * 20; i++) { + if (!it.hasNext()) break; + GangMember m = it.next(); + if (i < (page - 1) * 20) continue; + + inv.setItem(slots[i - (page - 1) * 20], Utils.setSkullOwner(Utils.createItem(Material.SKULL_ITEM, 3, "&a&l" + m.getName(), "&7Rank: &a&l" + m.getRole().getFormattedTag(), "&7Online: &a&l" + m.isOnline(), "&7Click to view this gang member!"), m.getName())); + } + inv.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the gang page!")); + if (page > 1) inv.setItem(48, Utils.createItem(Material.ARROW, "&a&lPrevious Page", "&7Page " + (page - 1))); + inv.setItem(49, Utils.setArmorColor(Utils.createItem(Material.LEATHER_CHESTPLATE, "&a&lMy Gang Members", "&7Page " + page), Color.fromRGB(102, 127, 51))); + if (members.size() > (20 * page)) inv.setItem(50, Utils.createItem(Material.ARROW, "&a&lNext Page", "&7Page " + (page + 1))); + return; + } + case SKULL_ITEM: { + String s = ChatColor.stripColor(item.getItemMeta().getDisplayName()); + Gang gang = GangManager.getInstance().getGangByMember(uuid).orElse(null); + if (gang == null) { + player.sendMessage(Lang.GANGS.f("&7You are not in any gang!")); + return; + } + + Optional<GangMember> optional = gang.getMember(s); + if (!optional.isPresent()) { + player.sendMessage(Lang.GANGS.f("&7That player is not a member of your gang!")); + return; + } + + gang.setViewingGangMember(uuid, optional.get()); + MenuManager.openMenu(player, "gangmember"); + return; + } + case BOOK: + Gang gang = GangManager.getInstance().getGangByMember(uuid).orElse(null); + if (gang == null || (!gang.isLeader(uuid) && !gang.isCoLeader(uuid))) return; + user.setCurrentChatAction(ChatAction.GANG_CHAT_ACTION, "invite"); + player.closeInventory(); + player.sendMessage(Lang.GANGS.f("&7Please type in the name of the player you would like to invite to your gang, or type &a\"quit\"&7 to quit!")); + return; + case REDSTONE: + MenuManager.openMenu(player, "mygang"); + return; + default: + return; + } + case "gangmember": + switch (item.getType()) { + case BOOK_AND_QUILL: { + Gang gang = GangManager.getInstance().getGangByMember(uuid).orElse(null); + if (gang == null) return; + + GangMember member = gang.getViewingGangMember(uuid).orElse(null); + if (member == null) return; + + gang.demote(player, Core.getUserManager().getLoadedUser(uuid), user, member.getName()); + MenuManager.updateMenu(player, "gangmember"); + return; + } + case SLIME_BALL: { + Gang gang = GangManager.getInstance().getGangByMember(uuid).orElse(null); + if (gang == null) return; + + GangMember member = gang.getViewingGangMember(uuid).orElse(null); + if (member == null) return; + + gang.promote(player, Core.getUserManager().getLoadedUser(uuid), user, member.getName()); + MenuManager.updateMenu(player, "gangmember"); + return; + } + case INK_SACK: + Gang gang = GangManager.getInstance().getGangByMember(uuid).orElse(null); + if (gang == null) return; + + GangMember member = gang.getViewingGangMember(uuid).orElse(null); + if (member == null) return; + + gang.kick(player, Core.getUserManager().getLoadedUser(uuid), user, member.getName()); + MenuManager.openMenu(player, "mygangmembers"); + return; + case REDSTONE: + MenuManager.openMenu(player, "mygangmembers"); + return; + default: + return; + } + case "gangmembers": + switch (item.getType()) { + case ARROW: + int page = Integer.parseInt(ChatColor.stripColor(item.getItemMeta().getLore().get(0)).replace("Page ", "")); + this.setPhoneDefaults(inv); + Gang ownGang = GangManager.getInstance().getGangByMember(uuid).orElse(null); + if (ownGang == null) { + MenuManager.openMenu(player, "mygangmembers"); + return; + } + + Gang gang = ownGang.getViewingGang(uuid).orElse(null); + if (gang == null) { + inv.setItem(31, Utils.createItem(Material.INK_SACK, 1, "&c&lGang: &7&lUnknown", "&7This gang does not exist!")); + return; + } + + if (Objects.equals(gang, ownGang)) { + MenuManager.openMenu(player, "mygangmembers"); + return; + } + + boolean isEnemy = ownGang.isEnemy(gang); + List<GangMember> members = new ArrayList<>(gang.getMembers()); + + int[] slots = new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 38, 39, 40, 41, 42}; + Iterator<GangMember> it = members.iterator(); + for (int i = 0; i < page * 20; i++) { + if (!it.hasNext()) break; + GangMember m = it.next(); + if (i < (page - 1) * 20) continue; + inv.setItem(slots[i - (page - 1) * 20], Utils.setSkullOwner(Utils.createItem(Material.SKULL_ITEM, 3, (isEnemy ? "&c" : "&a") + "&l" + m.getName(), "&7Rank: &a&l" + m.getRole().getFormattedTag(), + "&7Online: &a&l" + m.isOnline(), "&7Click to view this gang member!"), m.getName())); + } + + inv.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the gang page!")); + if (page > 1) inv.setItem(48, Utils.createItem(Material.ARROW, "&a&lPrevious Page", "&7Page " + (page - 1))); + inv.setItem(49, Utils.setArmorColor(Utils.createItem(Material.LEATHER_CHESTPLATE, (isEnemy ? "&c" : "&a") + "&lGang Members: &7&l" + gang.getName(), "&7Page " + page), Color.fromRGB(102, 127, 51))); + if (members.size() > (20 * page)) inv.setItem(50, Utils.createItem(Material.ARROW, "&a&lNext Page", "&7Page " + (page + 1))); + return; + case SKULL_ITEM: + Player target = Bukkit.getPlayer(ChatColor.stripColor(item.getItemMeta().getDisplayName())); + player.closeInventory(); + GTM.getWarpManager().tpa(player, Core.getUserManager().getLoadedUser(uuid), GTM.getUserManager().getLoadedUser(uuid), target); + return; + case REDSTONE: + MenuManager.openMenu(player, "gang"); + return; + default: + return; + } + + case "mygangrelations": + switch (item.getType()) { + case ARROW: { + int page = Integer.parseInt(ChatColor.stripColor(item.getItemMeta().getLore().get(0)).replace("Page ", "")); + this.setPhoneDefaults(inv); + Gang gang = GangManager.getInstance().getGangByMember(uuid).orElse(null); + Set<GangRelation> relations = gang.getRelations(); + int[] slots = new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 38, 39, 40, 41, 42}; + int i = 0; + for (GangRelation r : relations) { + if (i < (page - 1) * 20) continue; + int online = 0; + int amnt = 0; + + Optional<Gang> optional = GangManager.getInstance().getGang(r.getRelativeId()); + if (optional.isPresent()) { + Gang ga = optional.get(); + online = ga.getOnlineMembers().size(); + amnt = ga.getMembers().size() + 1; + } + + boolean isEnemy = gang.isEnemy(optional.get()); + boolean isAlly = gang.isAllied(optional.get()); + inv.setItem(slots[i - (page - 1) * 20], Utils.setArmorColor(Utils.createItem(Material.LEATHER_CHESTPLATE, (isEnemy ? "&c" : "&a") + optional.get().getName(), + "&7Relation: " + (isEnemy ? "&c&lEnemy" : isAlly ? "&a&lAlly" : "&a&lNeutral"), + amnt == 0 ? "&7Online Members: &c&l0" : "&7Online Members: &a&l" + online + "&7/&a&l" + amnt, + "&7Click to view this gang!"), + isEnemy ? Color.RED : Color.fromRGB(102, 127, 51))); + i++; + } + inv.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the gang page!")); + + if (page > 1) inv.setItem(48, Utils.createItem(Material.ARROW, "&a&lPrevious Page", "&7Page " + (page - 1))); + inv.setItem(49, Utils.setArmorColor(Utils.createItem(Material.LEATHER_CHESTPLATE, "&a&lMy Gang Relations", "&7Page " + page), Color.fromRGB(102, 127, 51))); + if (relations.size() > (20 * page)) + inv.setItem(50, Utils.createItem(Material.ARROW, "&a&lNext Page", "&7Page " + (page + 1))); + + if (gang.isLeader(uuid) || gang.isCoLeader(uuid)) + inv.setItem(51, Utils.createItem(Material.BOOK, "&a&lSet Relation", "&7Click to set a relation towards an other gang!")); + return; + } + case LEATHER_CHESTPLATE: { + String s = ChatColor.stripColor(item.getItemMeta().getDisplayName()); + Optional<Gang> viewing = GangManager.getInstance().getGang(s); + if (Objects.equals("My Gang Relations", s) || !viewing.isPresent()) + return; + Gang gang = viewing.get(); + + Gang self = GangManager.getInstance().getGangByMember(uuid).orElse(null); + if (self == null) return; + self.setViewingGang(uuid, gang); + + MenuManager.openMenu(player, "gang"); + return; + } + case BOOK: + Gang gang = GangManager.getInstance().getGangByMember(uuid).orElse(null); + if (gang == null || !(gang.isLeader(uuid) || gang.isCoLeader(uuid))) + return; + + user.setCurrentChatAction(ChatAction.GANG_CHAT_ACTION, "relation"); + gang.setViewingGang(uuid, null); + player.closeInventory(); + player.sendMessage(Lang.GANGS.f("&7Please type in the name of the gang you would like to change your relation to, or type &a\"quit\"&7 to quit.")); + return; + case REDSTONE: + MenuManager.openMenu(player, "mygang"); + return; + default: + return; + } + case "gangrelations": + switch (item.getType()) { + case ARROW: { + int page = Integer.parseInt(ChatColor.stripColor(item.getItemMeta().getLore().get(0)).replace("Page ", "")); + this.setPhoneDefaults(inv); + Gang ownGang = GangManager.getInstance().getGangByMember(uuid).orElse(null); + if (ownGang == null) return; + + Gang gang = ownGang.getViewingGang(uuid).orElse(null); + if (gang == null) { + inv.setItem(31, Utils.createItem(Material.INK_SACK, 1, "&c&lGang: &7&lUnknown", "&7This gang does not exist!")); + return; + } + + if (Objects.equals(gang, ownGang)) { + MenuManager.openMenu(player, "mygangrelations"); + return; + } + + boolean isOwnEnemy = gang.isEnemy(ownGang); + Set<GangRelation> relations = gang.getRelations(); + int i = 0; + int[] slots = new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 38, 39, 40, 41, 42}; + for (GangRelation r : relations) { + if (i < (page - 1) * 20) continue; + int online = 0; + int amnt = 0; + + Optional<Gang> optional = GangManager.getInstance().getGang(r.getRelativeId()); + if (optional.isPresent()) { + Gang ga = optional.get(); + online = ga.getOnlineMembers().size(); + amnt = ga.getMembers().size() + 1; + } + boolean isEnemy = gang.isEnemy(optional.get()); + boolean isAlly = gang.isAllied(optional.get()); + inv.setItem(slots[i - (page - 1) * 20], Utils.setArmorColor(Utils.createItem(Material.LEATHER_CHESTPLATE, (isEnemy ? "&c" : "&a") + optional.get().getName(), + "&7Relation: " + (isEnemy ? "&c&lEnemy" : isAlly ? "&a&lAlly" : "&a&lNeutral"), + amnt == 0 ? "&7Online Members: &c&l0" : "&7Online Members: &a&l" + online + "&7/&a&l" + amnt, + "&7Click to view this gang!"), + isEnemy ? Color.RED : Color.fromRGB(102, 127, 51))); + i++; + } + inv.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the gang page!")); + if (page > 1) inv.setItem(48, Utils.createItem(Material.ARROW, "&a&lPrevious Page", "&7Page " + (page - 1))); + + inv.setItem(49, Utils.setArmorColor(Utils.createItem(Material.LEATHER_CHESTPLATE, (isOwnEnemy ? "&c" : "&a") + "&lGang Relations: &7&l" + gang.getName(), + "&7Page " + page), isOwnEnemy ? Color.RED : Color.fromRGB(102, 127, 51))); + + if (relations.size() > (20 * page)) + inv.setItem(50, Utils.createItem(Material.ARROW, "&a&lNext Page", "&7Page " + (page + 1))); + + if (ownGang.isLeader(uuid) || ownGang.isCoLeader(uuid)) + inv.setItem(51, Utils.createItem(Material.BOOK, "&a&lSet Relation", "&7Click to set a relation towards this gang!")); + return; + } + case LEATHER_CHESTPLATE: { + String s = ChatColor.stripColor(item.getItemMeta().getDisplayName()); + Optional<Gang> optional = GangManager.getInstance().getGang(s); + if (s.startsWith("Gang Relations: ") || !optional.isPresent()) + return; + + Gang self = GangManager.getInstance().getGangByMember(uuid).orElse(null); + if (self == null) return; + + self.setViewingGang(uuid, optional.get()); + MenuManager.openMenu(player, "gang"); + return; + } + case BOOK: + Gang gang = GangManager.getInstance().getGangByMember(uuid).orElse(null); + if (gang == null) return; + + Gang viewing = gang.getViewingGang(uuid).orElse(null); + if(viewing == null) return; + + if (!(gang.isLeader(uuid) || gang.isCoLeader(uuid)) || !GangManager.getInstance().getGang(viewing.getUniqueId()).isPresent()) + return; + + + user.setCurrentChatAction(ChatAction.GANG_CHAT_ACTION, "relation"); + player.closeInventory(); + player.sendMessage(Lang.GANGS.f("&7Please type in the relation (ally, neutral or enemy) you would like to set towards gang &a" + viewing.getName() + "&7, or type &a\"quit\" to quit!")); + return; + case REDSTONE: + MenuManager.openMenu(player, "gang"); + return; + default: + return; + } + + case "gangs": + switch (item.getType()) { + case ARROW: { + int page = Integer.parseInt(ChatColor.stripColor(item.getItemMeta().getLore().get(0)).replace("Page ", "")); + this.setPhoneDefaults(inv); + Gang gang = GangManager.getInstance().getGangByMember(uuid).orElse(null); + Set<Gang> gangs = GangManager.getInstance().getGangs(); + Iterator<Gang> it = gangs.iterator(); + int[] slots = new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 38, 39, 40, 41, 42}; + for (int i = 0; i < page * 20; i++) { + if (!it.hasNext()) + break; + Gang g = it.next(); + if (i < (page - 1) * 20) + continue; + int online = g.getOnlineMembers().size(); + int amnt = g.getMembers().size() + 1; + boolean isEnemy = gang.isEnemy(g); + boolean isAlly = gang.isAllied(g); + + Optional<GangMember> optional = g.getMember(uuid); + if(optional.isPresent()) { + String relation = Objects.equals(gang, g) ? "&a&l" + optional.get().getRole().getTag() : isEnemy ? "&c&lEnemy" : isAlly ? "&a&lAlly" : "&a&lNeutral"; + inv.setItem(slots[i - (page - 1) * 20], Utils.setArmorColor(Utils.createItem(Material.LEATHER_CHESTPLATE, (isEnemy ? "&c" : "&a") + g, + "&7Relation: " + relation, amnt == 0 ? "&7Online Members: &c&l0" : "&7Online Members: &a&l" + online + "&7/&a&l" + amnt, + amnt == 0 ? "This gang is not online!" : "&7Click to view this gang!"), + isEnemy ? Color.RED : Color.fromRGB(102, 127, 51))); + } + } + inv.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the gang page!")); + if (page > 1) inv.setItem(48, Utils.createItem(Material.ARROW, "&a&lPrevious Page", "&7Page " + (page - 1))); + inv.setItem(49, Utils.setArmorColor(Utils.createItem(Material.LEATHER_CHESTPLATE, "&a&lGang List", "&7Page " + page), Color.fromRGB(102, 127, 51))); + if (gangs.size() > (20 * page)) inv.setItem(50, Utils.createItem(Material.ARROW, "&a&lNext Page", "&7Page " + (page + 1))); + return; + } + case LEATHER_CHESTPLATE: + String s = ChatColor.stripColor(item.getItemMeta().getDisplayName()); + Optional<Gang> optional = GangManager.getInstance().getGang(s); + if (Objects.equals("Gang List", s) || !optional.isPresent()) + return; + + Gang self = GangManager.getInstance().getGangByMember(uuid).orElse(null); + if (self == null) return; + + self.setViewingGang(uuid, optional.get()); + MenuManager.openMenu(player, "gang"); + return; + case REDSTONE: + MenuManager.openMenu(player, "mygang"); + return; + default: + return; + } + case "ammopouch": + switch (item.getType()) { + case REDSTONE: + int slot = e.getSlot(); + int i = 0; + while (slot > 8) { + slot -= 9; + i++; + } + int toDrop = i == 1 ? 50 : i == 2 ? 10 : i == 3 ? 1 : 0; + AmmoType type = AmmoType.getTypes()[slot]; + int ammo = user.getAmmo(type); + if (ammo <= 0) { + player.sendMessage(Lang.AMMO.f("&7You have none of this type of ammo left!")); + return; + } + if (ammo < toDrop) + toDrop = ammo; + ItemStack stack = type.getGameItem().getItem(); + stack.setAmount(toDrop); + user.removeAmmo(type, toDrop); + player.getWorld().dropItemNaturally(Utils.getInFrontOf(player.getLocation()), stack); + player.sendMessage(Lang.AMMO_TAKE.f(toDrop + "&7 " + type.getGameItem().getDisplayName() + "&7!")); + MenuManager.updateMenu(player, "ammopouch"); + return; + default: + return; + } + case "jail": + switch (item.getType()) { + case ARROW: + int page = Integer + .parseInt(ChatColor.stripColor(item.getItemMeta().getLore().get(0)).replace("Page ", "")); + this.setPhoneDefaults(inv); + int[] slots = new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 38, 39, 40, 41, + 42}; + List<Player> jailedPlayers = GTMUtils.getJailedPlayers(); + Iterator<Player> it = jailedPlayers.iterator(); + for (int i = 0; i < page * 20; i++) { + if (!it.hasNext()) + break; + Player p = it.next(); + if (i < (page - 1) * 20) + continue; + + GTMUser u = GTM.getUserManager().getLoadedUser(p.getUniqueId()); + if (!u.isArrested()) + continue; + List<String> lore = new ArrayList<>(); + lore.add("&7Time Left: &a&l" + Utils.timeInSecondsToText(u.getJailTimer())); + if (user.getJobMode() == JobMode.COP && Objects.equals(u.getJailCop(), player.getUniqueId())) + lore.add("&7Click to release!"); + inv.setItem(slots[i - (page - 1) * 20], Utils.setSkullOwner( + Utils.createItem(Material.SKULL_ITEM, 3, "&e&l" + p.getName(), lore), p.getName())); + } + if (page > 1) + inv.setItem(48, Utils.createItem(Material.ARROW, "&c&lPrevious Page", "&7Page " + (page - 1))); + inv.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lClose", "&7Click to close this menu!")); + inv.setItem(49, Utils.createItem(Material.IRON_FENCE, "&c&lPrisoner List", "&7Page " + page)); + if (jailedPlayers.size() > (20 * page)) + inv.setItem(50, Utils.createItem(Material.ARROW, "&c&lNext Page", "&7Page " + (page + 1))); + return; + case SKULL_ITEM: + Player p = Bukkit.getPlayer(ChatColor.stripColor(e.getItem().getItemMeta().getDisplayName())); + if (p == null) { + player.sendMessage(Lang.JAIL.f("&7That player is not online!")); + MenuManager.updateMenu(player, "jail"); + return; + } + if (GTM.getUserManager().getLoadedUser(uuid).getJobMode() != JobMode.COP) return; + GTMUser u = GTM.getUserManager().getLoadedUser(p.getUniqueId()); + if (!u.isArrested()) { + player.sendMessage(Lang.JAIL.f("&7That player is not in jail!")); + MenuManager.updateMenu(player, "jail"); + return; + } + if (u.getJailTimer() <= 5) { + player.sendMessage(Lang.JAIL.f("&7That prisoners is already being released!")); + return; + } + if (GTM.getUserManager().getLoadedUser(uuid).getJobMode() != JobMode.COP) { + player.sendMessage(Lang.JAIL.f("&7You must be a cop to release prisoners!")); + return; + } + if (!Objects.equals(u.getJailCop(), player.getUniqueId())) { + player.sendMessage(Lang.JAIL.f("&7You can only release prisoners that you put in jail!")); + return; + } + u.setJailTimer(5); + player.sendMessage(Lang.JAIL.f("&7You released prisoners &e&l" + + Core.getUserManager().getLoadedUser(p.getUniqueId()).getColoredName(p) + "&7!")); + p.sendMessage(Lang.JAIL.f("&7You are being released by &a" + + Core.getUserManager().getLoadedUser(player.getUniqueId()).getColoredName(player) + "&7!")); + MenuManager.updateMenu(player, "jail"); + return; + case REDSTONE: + player.closeInventory(); + return; + default: + return; + } + case "property": + switch (item.getType()) { + case IRON_DOOR: + MenuManager.openMenu(player, "houses"); + return; + case MINECART: + if (GTM.getUserManager().getLoadedUser(uuid).hasPersonalVehicle()) { + MenuManager.openMenu(player, "personalvehicle"); + return; + } + MenuManager.openMenu(player, "vehicles"); + return; + case PAPER: + MenuManager.openMenu(player, "bank"); + return; + case REDSTONE: + MenuManager.openMenu(player, "phone"); + return; + default: + return; + } + case "vehicles": + switch (item.getType()) { + case ARROW: { + int page = Integer + .parseInt(ChatColor.stripColor(item.getItemMeta().getLore().get(0)).replace("Page ", "")); + this.setPhoneDefaults(inv); + int[] slots = new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 38, 39, 40, 41, 42}; + List<PersonalVehicle> vehicles = new ArrayList<>(user.getVehicles()); + if (user.hasPersonalVehicle()) + vehicles.remove(user.getPersonalVehicle()); + Iterator<PersonalVehicle> it = vehicles.iterator(); + for (int i = 0; i < page * 20; i++) { + if (!it.hasNext()) + break; + PersonalVehicle vehicle = it.next(); + if (i < (page - 1) * 20) + continue; + ItemStack stack = vehicle.getVehicleProperties().getItem().clone(); + ItemMeta meta = stack.getItemMeta(); + List<String> lore = new ArrayList<>(meta.getLore()); + lore.add(Utils.f("&7Health: " + vehicle.getFormattedHealth())); + lore.add(Utils.f("&aClick to get this vehicle!")); + lore.add(Utils.f("&7Price: &a$&l200")); + meta.setLore(lore); + stack.setItemMeta(meta); + inv.setItem(slots[i - (page - 1) * 20], stack); + } + if (page > 1) + inv.setItem(48, Utils.createItem(Material.ARROW, "&4&lPrevious Page", "&7Page " + (page - 1))); + inv.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the property page!")); + if (user.hasPersonalVehicle()) { + PersonalVehicle vehicle = user.getPersonalVehicle(); + ItemStack stack = vehicle.getVehicleProperties().getItem().clone(); + ItemMeta meta = stack.getItemMeta(); + List<String> lore = new ArrayList<>(meta.getLore()); + lore.add(Utils.f("&7Health: " + vehicle.getFormattedHealth())); + lore.add(Utils.f("&aClick to view your personal vehicle!")); + meta.setLore(lore); + stack.setItemMeta(meta); + inv.setItem(49, Utils.addGlow(stack)); + + } else + inv.setItem(49, Utils.createItem(Material.MINECART, "&4&lVehicles", "&7Please select your personal vehicle!")); + if (vehicles.size() > (20 * page)) + inv.setItem(50, Utils.createItem(Material.ARROW, "&4&lNext Page", "&7Page " + (page + 1))); + return; + } + case REDSTONE: + MenuManager.openMenu(player, "property"); + return; + default: + if (!item.hasItemMeta() || !item.getItemMeta().hasDisplayName()) return; + GameItem gameItem = GTM.getItemManager().getItemFromDisplayName(item.getItemMeta().getDisplayName()); + if (gameItem == null) return; + PersonalVehicle vehicle = user.getPersonalVehicle(gameItem.getWeaponOrVehicleOrDrug()); + if (vehicle == null) return; + if (Objects.equals(vehicle, user.getPersonalVehicle())) { + MenuManager.openMenu(player, "personalvehicle"); + return; + } + user.setPersonalVehicle(player, Core.getUserManager().getLoadedUser(uuid), vehicle); + player.closeInventory(); + return; + } + + case "vehicleshop": + switch (item.getType()) { + case REDSTONE: + player.closeInventory(); + return; + case SLIME_BALL: { + if (user.hasVehicle(user.getActionVehicle())) { + player.sendMessage(Lang.VEHICLES.f("&7You already own this vehicle!")); + MenuManager.openMenu(player, "vehicles"); + return; + } + MenuManager.openMenu(player, "buyvehicle"); + return; + } + case INK_SACK: { + if (!user.hasVehicle(user.getActionVehicle())) { + player.sendMessage(Lang.VEHICLES.f("&7You don't own this vehicle!")); + MenuManager.openMenu(player, "vehicles"); + return; + } + MenuManager.openMenu(player, "sellvehicle"); + return; + } + default: + return; + } + case "buyvehicle": + switch (item.getType()) { + case STAINED_GLASS_PANE: + switch (item.getDurability()) { + case 5: + Optional<VehicleProperties> opt = GTM.getWastedVehicles().getVehicle(user.getActionVehicle()); + GameItem gameItem = GTM.getItemManager().getItemFromVehicle(user.getActionVehicle()); + if (opt == null || !opt.isPresent() || gameItem == null) { + if (gameItem == null) + Utils.b("GameItem for " + user.getActionVehicle() + " is null"); + player.sendMessage(Lang.VEHICLES.f("&7That vehicle does not exist!")); + return; + } + VehicleProperties vehicle = opt.get(); + double price = gameItem.getSellPrice() * 2; + if (price <= 0) { + player.closeInventory(); + player.sendMessage(Lang.VEHICLES.f("&7You can't buy this vehicle!")); + return; + } + if (user.hasVehicle(vehicle.getIdentifier())) { + player.closeInventory(); + player.sendMessage(Lang.VEHICLES.f("&7You already own this vehicle!")); + return; + } + if (!user.hasMoney(price)) { + player.closeInventory(); + player.sendMessage(Lang.VEHICLES.f("&7You don't have the &c$&l" + Utils.round(price) + "&7 to pay for this vehicle!")); + return; + } + user.setActionVehicle(null); + user.takeMoney(price); + GTMUtils.updateBoard(player, user); + user.giveVehiclePerm(player, vehicle); + player.sendMessage(Lang.VEHICLES.f("&7You bought vehicle " + vehicle.getItem().getItemMeta().getDisplayName() + "&7 for &a$&l" + Utils.round(price) + "&7!")); + MenuManager.openMenu(player, "vehicles"); + return; + case 14: + MenuManager.openMenu(player, "vehicleshop"); + return; + default: + return; + } + + default: + return; + } + case "sellvehicle": + switch (item.getType()) { + case STAINED_GLASS_PANE: + switch (item.getDurability()) { + case 5: + PersonalVehicle vehicle = user.getPersonalVehicle(user.getActionVehicle()); + if (vehicle == null) return; + if (vehicle.onMap()) { + player.sendMessage(Lang.VEHICLES.f("&7Please send the driver to pick up your vehicle first!")); + return; + } + double price = vehicle.getSellPrice(); + if (price <= 0) { + player.closeInventory(); + player.sendMessage(Lang.VEHICLES.f("&7You can't sell this vehicle!")); + return; + } + user.setActionVehicle(null); + user.removeVehiclePerm(player, vehicle.getVehicleProperties()); + user.addMoney(price); + GTMUtils.updateBoard(player, user); + player.sendMessage(Lang.VEHICLES.f("&7You sold vehicle " + vehicle.getDisplayName() + "&7 for &a$&l" + Utils.round(price) + "&7!")); + MenuManager.openMenu(player, "vehicles"); + return; + case 14: + MenuManager.openMenu(player, "personalvehicle"); + return; + default: + return; + } + + default: + return; + } + case "repairvehicle": + switch (item.getType()) { + case STAINED_GLASS_PANE: + switch (item.getDurability()) { + case 5: { + PersonalVehicle vehicle = user.getPersonalVehicle(user.getActionVehicle()); + if (vehicle == null) return; + if (vehicle.onMap()) { + player.sendMessage(Lang.VEHICLES.f("&7Please send the driver to pick up your vehicle first!")); + return; + } + double price = vehicle.getRepairPrice(); + if (price <= 0) { + player.closeInventory(); + player.sendMessage(Lang.VEHICLES.f("&7You can't repair this vehicle!")); + return; + } + if (!user.hasMoney(price)) { + player.sendMessage(Lang.VEHICLES.f("&7You can't afford to pay &c$&l" + price + "&7 to repair this vehicle!")); + return; + } + user.setActionVehicle(null); + user.takeMoney(price); + GTMUtils.updateBoard(player, user); + double health = vehicle.getVehicleProperties().getMaxHealth(); + vehicle.setHealth(health); + vehicle.updateVehicleInDatabase(player, health); + player.sendMessage(Lang.VEHICLES.f("&7You repaired vehicle " + vehicle.getDisplayName() + "&7 for &a$&l" + Utils.round(price) + "&7!")); + MenuManager.openMenu(player, "personalvehicle"); + return; + } + case 14: + MenuManager.openMenu(player, "personalvehicle"); + return; + default: + return; + } + default: + return; + } + case "personalvehicle": + switch (item.getType()) { + case REDSTONE: + MenuManager.openMenu(player, "vehicles"); + return; + case INK_SACK: { + PersonalVehicle vehicle = user.getPersonalVehicle(); + if (vehicle == null) { + MenuManager.openMenu(player, "vehicles"); + return; + } + user.setActionVehicle(vehicle.getVehicle()); + MenuManager.openMenu(player, "sellvehicle"); + return; + } + case ENDER_PEARL: { + PersonalVehicle vehicle = user.getPersonalVehicle(); + if (vehicle == null) { + MenuManager.openMenu(player, "vehicles"); + return; + } + if (vehicle.onMap()) { + vehicle.sendAway(player, Core.getUserManager().getLoadedUser(uuid), user); + } else { + vehicle.call(player, Core.getUserManager().getLoadedUser(uuid), user); + } + return; + } + case WORKBENCH: { + PersonalVehicle vehicle = user.getPersonalVehicle(); + if (vehicle == null) { + MenuManager.openMenu(player, "vehicles"); + return; + } + if (vehicle.getRepairPrice() <= 0) { + player.sendMessage(Lang.VEHICLES.f("&7You can't repair this vehicle!")); + return; + } + user.setActionVehicle(vehicle.getVehicle()); + MenuManager.openMenu(player, "repairvehicle"); + return; + } + default: + PersonalVehicle vehicle = user.getPersonalVehicle(); + if (vehicle == null) { + MenuManager.openMenu(player, "vehicles"); + return; + } + if (!item.hasItemMeta() || !item.getItemMeta().hasDisplayName() || !Objects.equals(item.getItemMeta().getDisplayName(), vehicle.getDisplayName())) + return; + vehicle.call(player, Core.getUserManager().getLoadedUser(uuid), user); + return; + } + case "mechanic": + switch (item.getType()) { + case ARROW: { + int page = Integer + .parseInt(ChatColor.stripColor(item.getItemMeta().getLore().get(0)).replace("Page ", "")); + this.setPhoneDefaults(inv); + int[] slots = new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 38, 39, 40, 41, 42}; + List<PersonalVehicle> vehicles = new ArrayList<>(user.getVehicles()); + new ArrayList<>(vehicles).stream().filter(vehicle -> vehicle.getRepairPrice() <= 0).forEach(vehicles::remove); + Iterator<PersonalVehicle> it = vehicles.iterator(); + for (int i = 0; i < page * 20; i++) { + if (!it.hasNext()) + break; + PersonalVehicle vehicle = it.next(); + if (i < (page - 1) * 20) + continue; + ItemStack stack = vehicle.getVehicleProperties().getItem().clone(); + ItemMeta meta = stack.getItemMeta(); + List<String> lore = new ArrayList<>(meta.getLore()); + lore.add(Utils.f("&7Health: " + vehicle.getFormattedHealth())); + lore.add(Utils.f("&7Repair Price: &a&l$" + NumberFormat.getNumberInstance(Locale.US).format(vehicle.getRepairPrice()))); + lore.add(Utils.f("&aClick to repair this vehicle!")); + meta.setLore(lore); + stack.setItemMeta(meta); + inv.setItem(slots[i - (page - 1) * 20], Objects.equals(vehicle, user.getPersonalVehicle()) ? Utils.addGlow(stack) : stack); + } + if (page > 1) + inv.setItem(48, Utils.createItem(Material.ARROW, "&4&lPrevious Page", "&7Page " + (page - 1))); + inv.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the property page!")); + inv.setItem(49, Utils.createItem(Material.WORKBENCH, "&4&lMechanic", "&7Repair your vehicles!")); + if (vehicles.size() > (20 * page)) + inv.setItem(50, Utils.createItem(Material.ARROW, "&4&lNext Page", "&7Page " + (page + 1))); + return; + } + case REDSTONE: + player.closeInventory(); + return; + default: + if (!item.hasItemMeta() || !item.getItemMeta().hasDisplayName()) return; + GameItem gameItem = GTM.getItemManager().getItemFromDisplayName(item.getItemMeta().getDisplayName()); + if (gameItem == null) return; + PersonalVehicle vehicle = user.getPersonalVehicle(gameItem.getWeaponOrVehicleOrDrug()); + if (vehicle == null) return; + if (vehicle.onMap()) { + player.sendMessage(Lang.VEHICLES.f("&7Please send the driver to pick up your vehicle first!")); + return; + } + double price = vehicle.getRepairPrice(); + if (price <= 0) { + player.closeInventory(); + player.sendMessage(Lang.VEHICLES.f("&7You can't repair this vehicle!")); + return; + } + if (!user.hasMoney(price)) { + player.sendMessage(Lang.VEHICLES.f("&7You can't afford to pay &c$&l" + price + "&7 to repair this vehicle!")); + return; + } + user.setActionVehicle(null); + user.takeMoney(price); + GTMUtils.updateBoard(player, user); + double health = vehicle.getVehicleProperties().getMaxHealth(); + vehicle.setHealth(health); + vehicle.updateVehicleInDatabase(player, health); + player.sendMessage(Lang.VEHICLES.f("&7The Mechanic repaired vehicle " + vehicle.getDisplayName() + "&7 for &a$&l" + Utils.round(price) + "&7!")); + player.closeInventory(); + return; + } + case "heads": { + switch (item.getType()) { + case ARROW: { + int page = Integer + .parseInt(ChatColor.stripColor(item.getItemMeta().getLore().get(0)).replace("Page ", "")); + this.setPhoneDefaults(inv); + int[] slots = new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 38, 39, 40, 41, 42}; + Set<Head> heads = GTM.getShopManager().getNonExpiredHeadsByBid(); + Iterator<Head> it = heads.iterator(); + for (int i = 0; i < page * 20; i++) { + if (!it.hasNext()) + break; + Head head = it.next(); + if (i < (page - 1) * 20) + continue; + List<String> lore = new ArrayList<>(); + lore.add(Utils.f("&7Seller: &a&l" + head.getSellerName())); + if (head.hasBid()) { + lore.add(Utils.f("&7Bidder: &a&l" + head.getBidderName())); + lore.add(Utils.f("&7Bid: &a$&l" + head.getBid())); + } else lore.add(Utils.f("&7Starting Bid: &a$&l10,000")); + lore.add(Utils.f("&7Click to bid!")); + lore.add(Utils.f("&7Time Left: &a&l" + Utils.timeInMillisToText(head.getTimeUntilExpiry()))); + lore.add(Utils.f("&0" + head.getExpiry())); + inv.setItem(slots[i - (page - 1) * 20], new JLibItem.Builder().withType(Material.SKULL_ITEM).withDurability((short) 3).withName(Utils.f("&e&l" + head.getHead())).withLore(lore).withOwner(head.getHead()).build().getItemStack()); + } + inv.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lClose", "&7Click to close this menu!")); + if (page > 1) + inv.setItem(48, Utils.createItem(Material.ARROW, "&e&lPrevious Page", "&7Page " + (page - 1))); + inv.setItem(49, Utils.createItem(Material.SKULL_ITEM, "&e&lHead Auction", "&7Buy and sell your souvenirs!")); + if (heads.size() > 20 * page) + inv.setItem(50, Utils.createItem(Material.ARROW, "&e&lNext Page", "&7Page " + (page + 1))); + inv.setItem(51, Utils.createItem(Material.PAPER, "&e&lAuction Head", "&7Click to auction a player head!")); + return; + } + case REDSTONE: + player.closeInventory(); + return; + case PAPER: + player.closeInventory(); + player.sendMessage(Lang.HEAD_AUCTION.f("&7Click me with the head in your hand to put it up for sale!")); + return; + case SKULL_ITEM: + try { + String owner = ((SkullMeta) item.getItemMeta()).getOwner(); + String s = item.getItemMeta().hasLore() ? ChatColor.stripColor(item.getItemMeta().getLore().get(item.getItemMeta().getLore().size() - 1)) : null; + if (s == null) return; + Long expiry = Long.parseLong(s); + Head head = GTM.getShopManager().getHead(owner, expiry); + if (head == null) return; + user.setBiddingHead(head.getHead()); + user.setCurrentChatAction(ChatAction.BIDDING_HEAD, 0); + user.setBiddingExpiry(head.getExpiry()); + player.sendMessage(Lang.HEAD_AUCTION.f("&7The current bid for &e&l" + head.getHead() + "'s Head&7 is &a$&l" + (head.hasBid() ? head.getBid() : "10,000") + "&7! Type your bid or type &a\"quit\"&7 to cancel bidding.")); + player.closeInventory(); + return; + } catch (NumberFormatException ignored) { + return; + } catch (Exception e1) { + e1.printStackTrace(); + return; + } + default: + return; + } + } + case "auctionhead": + switch (item.getType()) { + case STAINED_GLASS_PANE: + switch (item.getDurability()) { + case 5: { + player.closeInventory(); + GTM.getShopManager().auctionHead(player, GTM.getUserManager().getLoadedUser(uuid)); + return; + } + case 14: + player.closeInventory(); + return; + default: + return; + } + + default: + return; + } + case "armorupgrade": + switch (item.getType()) { + case STAINED_GLASS_PANE: + switch (item.getDurability()) { + case 5: { + player.closeInventory(); + ArmorUpgrade upgrade = user.getBuyingArmorUpgrade(); + if (upgrade == null) { + return; + } + if (!upgrade.canUseUpgrade(user.getRank(), Core.getUserManager().getLoadedUser(player.getUniqueId()).getUserRank())) { + player.sendMessage(Lang.HEY.f("&7You need to rank up to " + upgrade.getGTMRank().getColoredNameBold() + "&7 or donate for " + upgrade.getUserRank().getColoredNameBold() + "&7 at &a&l" + Core.getSettings().getStoreLink() + "&7 to use the &b&l" + upgrade.getDisplayName() + " Armor Upgrade&7!")); + return; + } + ItemStack i = player.getInventory().getItemInMainHand(); + GameItem gameItem = item == null ? null : GTM.getItemManager().getItem(i.getType()); + if (i == null || gameItem == null || !upgrade.canBeUsedOn(gameItem.getName())) { + player.sendMessage(Lang.HEY.f("&7The &b&l" + upgrade.getDisplayName() + " Armor Upgrade&7 can be applied to the following types of items: " + upgrade.getTypesString() + "&7!")); + return; + } + if (ArmorUpgrade.getArmorUpgrades(item).contains(upgrade)) { + player.sendMessage(Lang.ARMOR_UPGRADE.f("&7That piece of armor already has the &b&l" + upgrade.getDisplayName() + " Armor Upgrade&7!")); + return; + } + double price = upgrade.getPrice(); + if (!user.hasMoney(upgrade.getPrice())) { + player.sendMessage(Lang.ARMOR_UPGRADE.f("&7You can't afford the &b&l" + upgrade.getDisplayName() + " Armor Upgrade&7!")); + return; + } + Bukkit.getPluginManager().callEvent(new MoneyEvent(player.getUniqueId(), MoneyEvent.MoneyEventType.TAKE, price)); + player.getInventory().setItemInMainHand(upgrade.getUpgradedItem(gameItem, i)); + player.sendMessage(Lang.ARMOR_UPGRADE.f("&7You applied the &b&l" + upgrade.getDisplayName() + " Armor Upgrade&7 to your " + (i.getItemMeta().hasDisplayName() ? i.getItemMeta().getDisplayName() : i.getType().name()) + "&7 for &a$&l" + price + "&7!")); + return; + } + case 14: + player.closeInventory(); + return; + default: + return; + } + default: + return; + } + case "lottery": { + switch (item.getType()) { + case EMPTY_MAP: + int amnt = Integer.parseInt(ChatColor.stripColor(item.getItemMeta().getDisplayName()) + .replace(" Tickets", "")); + if (!user.hasMoney(amnt * 500)) { + player.sendMessage(Lang.BANK.f("&7You don't have &c$&l" + (amnt * 500) + " &con you!")); + return; + } + user.takeMoney(amnt * 500); + LotteryPlayer p = GTM.getLottery().getLotteryPlayer(uuid); + if (p == null) { + p = new LotteryPlayer(uuid, player.getName()); + GTM.getLottery().addLotteryPlayer(p); + } + p.addTickets(amnt); + GTMUtils.updateBoard(player, user); + player.sendMessage(Lang.LOTTERY.f("&7You bought &e&l" + amnt + " Tickets&7 for &a$&l" + (amnt * 500) + "&7!")); + player.closeInventory(); + return; + case BOOK_AND_QUILL: + user.setCurrentChatAction(ChatAction.BUYING_LOTTERY_TICKETS, 0); + player.closeInventory(); + player.sendMessage(Utils.f(Lang.BANK + + "&7Please type (in chat) the amount of tickets you would like to buy for &a$&l500&7 each, or type&a \"quit\"&7!")); + return; + case REDSTONE: + MenuManager.openMenu(player, "bank"); + return; + default: + break; + } + } + } + + } + + + @EventHandler + public void onMenuClose(MenuCloseEvent e) { + Player player = e.getPlayer(); + UUID uuid = player.getUniqueId(); + Menu menu = e.getMenu(); + switch (menu.getName()) { + case "bountiesplace": + GTMUser user = GTM.getUserManager().getLoadedUser(uuid); + if (user.getCurrentChatAction()==ChatAction.PICKING_BOUNTY || user.getCurrentChatAction()==ChatAction.PICKING_BOUNTY_TARGET) + return; + if (user.getBountyAmount() > 0 || user.getBountyName() != null) + player.sendMessage(Utils.f(Lang.BOUNTIES + "&7You cancelled the bounty.")); + user.setBountyAmount(-1); + user.setBountyName(null); + user.setBountyUUID(null); + return; + default: + break; + } + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/MobSpawn.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/MobSpawn.java new file mode 100644 index 0000000..954b19e --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/MobSpawn.java @@ -0,0 +1,38 @@ +package net.grandtheftmc.gtm.listeners; + +import org.bukkit.entity.EntityType; +import org.bukkit.entity.LivingEntity; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.CreatureSpawnEvent; +import org.bukkit.event.entity.EnderDragonChangePhaseEvent; + +import net.grandtheftmc.gtm.GTM; + +/** + * Created by Timothy Lampen on 2017-08-17. + */ +public class MobSpawn implements Listener { + + @EventHandler + public void onSpawn(CreatureSpawnEvent event){ + LivingEntity e = event.getEntity(); + + if (e.getType() == EntityType.ENDER_DRAGON){ + event.setCancelled(true); + } + + if (e.hasMetadata("GTM")) return; + + if(e.getType()==EntityType.RABBIT && !GTM.getHolidayManager().getEaster().isActive()) + event.setCancelled(true); + else if(event.getSpawnReason() != CreatureSpawnEvent.SpawnReason.CUSTOM && event.getEntity().getType() != EntityType.ARMOR_STAND) + event.setCancelled(true); + } + + @EventHandler + public void onEnderDragonChangePhase(EnderDragonChangePhaseEvent event){ + // attempts to stop the enderdragon from changing phases + event.setCancelled(true); + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/Move.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/Move.java new file mode 100644 index 0000000..d4048a2 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/Move.java @@ -0,0 +1,77 @@ +package net.grandtheftmc.gtm.listeners; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.drugs.Drug; +import net.grandtheftmc.gtm.drugs.DrugService; +import net.grandtheftmc.gtm.drugs.example.Cocaine; +import net.grandtheftmc.houses.Houses; +import net.grandtheftmc.houses.users.HouseUser; +import org.bukkit.Location; +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerMoveEvent; +import org.bukkit.util.Vector; + +import java.util.Optional; + +public class Move implements Listener { + + private int spawnWorldHashcode = -1; + + @EventHandler + public void onMove(PlayerMoveEvent event) { + + + Location to = event.getTo(), from = event.getFrom(); + + if (spawnWorldHashcode == -1 && event.getPlayer().getWorld().getName().equalsIgnoreCase("spawn")) { + //set the hashcode + spawnWorldHashcode = event.getPlayer().getWorld().hashCode(); + } + + if (spawnWorldHashcode == event.getPlayer().getWorld().hashCode()) { + //No need for checks in the spawn world + return; + } + + if (to.getBlockX() == from.getBlockX() && to.getBlockY() == from.getBlockY() && to.getBlockZ() == from.getBlockZ()) { + //Player has not moved block + return; + } + + Player player = event.getPlayer(); + + HouseUser houseUser = Houses.getUserManager().getLoadedUser(player.getUniqueId()); + + if (GTM.getWarpManager().cancelTaxi(player, GTM.getUserManager().getLoadedUser(player.getUniqueId()))) { + player.sendMessage(Lang.TAXI.f("&eYou moved! Teleportation cancelled!")); + return; + } + + if (player.isGliding()) { + if (houseUser.isInsideHouse() || houseUser.isInsidePremiumHouse()) return; + if (!player.isSneaking() || player.getLocation().getY() > 200) return; + double pitch = -event.getTo().getPitch(); + if (pitch < 10 || pitch > 90) return; + Vector vector = player.getLocation().getDirection(); + player.setVelocity(vector.multiply(1.6)); + player.getWorld().playSound(event.getFrom(), Sound.ENTITY_ARROW_SHOOT, 1.0F, 2.0F); + return; + } + + if (!Core.getSettings().isSister()) { + Optional<Drug> cocaine = ((DrugService) GTM.getDrugManager().getService()).getDrug("cocaine"); + + if (cocaine.isPresent()) { + if (((Cocaine) cocaine.get()).cantMove(player.getUniqueId())) { + event.setCancelled(true); + return; + } + } + } + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/MovementCheat.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/MovementCheat.java new file mode 100644 index 0000000..27cca0e --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/MovementCheat.java @@ -0,0 +1,26 @@ +package net.grandtheftmc.gtm.listeners; + +import net.grandtheftmc.core.anticheat.check.CheatType; +import net.grandtheftmc.core.anticheat.event.MovementCheatEvent; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; + +/** + * Created by Timothy Lampen on 2/8/2018. + */ +public class MovementCheat implements Listener { + + @EventHandler + public void onMovementCheat(MovementCheatEvent event) { + Player player = event.getPlayerData().getPlayer(); + + if(event.getCheatType().getType()== CheatType.Type.FLIGHT) { + if (player.getInventory().getChestplate() != null && player.getInventory().getChestplate().getType() == Material.ELYTRA) { + if (player.isGliding()) + event.setCancelled(true);//basically cancel the trigger of cheats check if they are gliding using an elytra + } + } + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/PetListener.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/PetListener.java new file mode 100644 index 0000000..cd78e6e --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/PetListener.java @@ -0,0 +1,29 @@ +package net.grandtheftmc.gtm.listeners; + +/* com.dsh105.echopet.compat.api.event.PetInteractEvent; +import com.dsh105.echopet.compat.api.event.PetTeleportEvent; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.users.GTMUser; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler;*/ +import org.bukkit.event.Listener; + +public class PetListener implements Listener { + + /*@EventHandler + public void onTeleport(PetTeleportEvent e) { + Player player = e.getPet().getOwner(); + GTMUser user = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + if (user.isInCombat() || user.isArrested()) + e.setCancelled(true); + } + + @EventHandler + public void onPetInteract(PetInteractEvent e) { + Player player = e.getPet().getOwner(); + GTMUser user = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + if (user.isInCombat() || user.isArrested()) + e.setCancelled(true); + }*/ + +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/Pickup.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/Pickup.java new file mode 100644 index 0000000..5a5ec73 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/Pickup.java @@ -0,0 +1,86 @@ +package net.grandtheftmc.gtm.listeners; + +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.gtm.items.GameItem; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.GameMode; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerPickupItemEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.GTMUtils; +import net.grandtheftmc.gtm.items.AmmoType; +import net.grandtheftmc.gtm.users.GTMUser; + +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +public class Pickup implements Listener { + + public void m(int i) { + Bukkit.broadcastMessage(String.valueOf(i)); + } + + @EventHandler + public void onPickup(PlayerPickupItemEvent e) { + Player player = e.getPlayer(); + if (player.getGameMode() == GameMode.SPECTATOR) { + e.setCancelled(true); + return; + } + + ItemStack item = e.getItem().getItemStack(); + if (player.isInsideVehicle() || e.getItem().getItemStack().getType() == Material.ARROW) { + e.setCancelled(true); + return; + } + switch (item.getType()) { + case PAPER: + ItemMeta im = item.getItemMeta(); + if (im == null || !im.hasDisplayName()) + return; + String disp = ChatColor.stripColor(item.getItemMeta().getDisplayName()).replace("$", ""); + double amnt; + try { + amnt = Double.parseDouble(disp); + } catch (NumberFormatException ex) { + return; + } + amnt *= item.getAmount(); + + GTMUser user = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + user.addMoney(amnt); + player.sendMessage(Utils.f(Lang.MONEY_ADD.toString() + amnt)); + e.getItem().remove(); + e.setCancelled(true); + Utils.kaching(player); + GTMUtils.updateBoard(player, user); + return; + default: + break; + } + AmmoType type = AmmoType.getAmmoType(item.getType(), item.getDurability()); + if (type != null) { + GTMUser user = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + if (type.isInInventory()) { + user.updateAmmoLater(); + return; + } + int i = item.getAmount() + e.getRemaining(); + user.addAmmo(type, i); + e.setCancelled(true); + e.getItem().remove(); + player.sendMessage(Lang.AMMO_ADD.f(i + "&7 " + type.getGameItem().getDisplayName())); + } + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/PortalEnter.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/PortalEnter.java new file mode 100644 index 0000000..70384b3 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/PortalEnter.java @@ -0,0 +1,32 @@ +package net.grandtheftmc.gtm.listeners; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.users.GTMUser; +import net.grandtheftmc.gtm.users.TaxiTarget; +import net.grandtheftmc.gtm.warps.Warp; +import org.bukkit.Sound; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityPortalEnterEvent; + +public class PortalEnter implements Listener { + + @EventHandler + public void playerPortalEvent(EntityPortalEnterEvent event) { + if (event.getEntityType() != EntityType.PLAYER) return; + Player player = (Player) event.getEntity(); + GTMUser gtmUser = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + if (gtmUser.getTaxiTarget() != null) return; + if (event.getLocation().getWorld().getName().equalsIgnoreCase("spawn")) { + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + Warp randomWarp = GTM.getWarpManager().getRandomWarp(); + player.playSound(player.getLocation(), Sound.UI_BUTTON_CLICK, 1F, 1F); + GTM.getWarpManager().warp(player, user, GTM.getUserManager().getLoadedUser(player.getUniqueId()), + new TaxiTarget(randomWarp), 0, user.isPremium() ? 1 : 10); + } + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/PotionSplash.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/PotionSplash.java new file mode 100644 index 0000000..93c6f91 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/PotionSplash.java @@ -0,0 +1,29 @@ +package net.grandtheftmc.gtm.listeners; + +import net.grandtheftmc.gtm.items.ArmorUpgrade; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PotionSplashEvent; +import org.bukkit.inventory.ItemStack; + +import java.util.HashSet; + +/** + * Created by Timothy Lampen on 7/20/2017. + */ +public class PotionSplash implements Listener { + + @EventHandler + public void onSplashPotion(PotionSplashEvent event){ + for(Entity e : event.getAffectedEntities()){ + if(e instanceof Player){ + Player victim = (Player)e; + if(ArmorUpgrade.playerHasArmorUpgrade(victim, ArmorUpgrade.LEAD_LINED)){ + event.setIntensity(victim, 0); + } + } + } + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/PrepareItemCraft.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/PrepareItemCraft.java new file mode 100644 index 0000000..0ea1f3f --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/PrepareItemCraft.java @@ -0,0 +1,45 @@ +package net.grandtheftmc.gtm.listeners; + +import net.grandtheftmc.gtm.GTM; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.PrepareItemCraftEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.Recipe; + +import java.util.Arrays; + +/** + * Created by Timothy Lampen on 2017-04-05. + */ +public class PrepareItemCraft implements Listener { + + @EventHandler + public void onPrepareCraft(PrepareItemCraftEvent event){ + /*Recipe recipe = event.getRecipe(); + Bukkit.broadcastMessage("1"); + if(recipe.getResult().equals(GTM.getItemManager().getItem("joint"))){ + Bukkit.broadcastMessage("2"); + if(event.getInventory().getContents()!=null){ + Bukkit.broadcastMessage("4"); + + ItemStack[] contents = event.getInventory().getContents(); + boolean isPossible = true; + for(ItemStack item : contents){ + if(item!=null) { + if (!(item.isSimilar(GTM.getItemManager().getItem("rollingpaper").getItem()) || item.isSimilar(GTM.getItemManager().getItem("groundweed").getItem()))) { + isPossible = false; + } + } + } + if(!isPossible){ + event.getInventory().setResult(new ItemStack(Material.AIR)); + Bukkit.broadcastMessage("3"); + + } + } + }*/ + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/SwapHandItems.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/SwapHandItems.java new file mode 100644 index 0000000..91ab492 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/SwapHandItems.java @@ -0,0 +1,83 @@ +package net.grandtheftmc.gtm.listeners; + +import com.j0ach1mmall3.wastedvehicles.api.events.VehicleEnterEvent; +import com.j0ach1mmall3.wastedvehicles.api.vehicles.WastedVehicle; +import net.grandtheftmc.core.events.PlayerFActionEvent; +import net.grandtheftmc.houses.HouseUtils; +import net.grandtheftmc.houses.Houses; +import net.grandtheftmc.houses.houses.*; +import net.grandtheftmc.houses.users.HouseUser; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; +import org.bukkit.block.BlockState; +import org.bukkit.entity.ArmorStand; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; + +import java.util.Set; +import java.util.UUID; + +public class SwapHandItems implements Listener { + + @EventHandler + public void onPlayerFAction(PlayerFActionEvent event) { + Player player = event.getPlayer(); + Block targetBlock; + if (player.getTargetBlock((Set<Material>) null, 1).getType() != Material.AIR) { + targetBlock = player.getTargetBlock((Set<Material>) null, 1); + } else if (player.getTargetBlock((Set<Material>) null, 2).getType() != Material.AIR) { + targetBlock = player.getTargetBlock((Set<Material>) null, 2); + } else { + targetBlock = player.getTargetBlock((Set<Material>) null, 3); + } + player.getWorld().getNearbyEntities(targetBlock.getLocation(), 2, 2, 2).forEach(entity -> { + if (entity.getType() != EntityType.ARMOR_STAND) return; + if (entity.hasMetadata("WastedVehicle")) { + WastedVehicle wastedVehicle = (WastedVehicle) entity.getMetadata("WastedVehicle").get(0).value(); + VehicleEnterEvent vehicleEnterEvent = new VehicleEnterEvent(wastedVehicle, player, (ArmorStand) entity); + Bukkit.getPluginManager().callEvent(vehicleEnterEvent); + if (!vehicleEnterEvent.isCancelled()) wastedVehicle.onRightClick((ArmorStand) entity, player); + } + }); + if (targetBlock.getType() == Material.IRON_DOOR || targetBlock.getType() == Material.IRON_DOOR_BLOCK) { + UUID uuid = player.getUniqueId(); + BlockState state = targetBlock.getState(); + HousesManager hm = Houses.getManager(); + HouseUser houseUser = Houses.getUserManager().getLoadedUser(uuid); + Block underneath = targetBlock.getRelative(BlockFace.DOWN); + if (underneath.getType() == Material.IRON_DOOR_BLOCK) + state = underneath.getState(); + Location loc = state.getLocation(); + Object[] houseAndDoor = hm.getHouseAndDoor(loc); + if (houseAndDoor == null) return; + if (houseAndDoor[0] instanceof PremiumHouse) { + PremiumHouse house = (PremiumHouse) houseAndDoor[0]; + if (houseUser.isTeleporting()) return; + if (!house.hasAccess(player, houseUser) || player.isSneaking()) { + HouseUtils.openPremiumHouseMenu(player, house, houseUser); + return; + } + PremiumHouseDoor door = (PremiumHouseDoor) houseAndDoor[1]; + houseUser.teleportInOrOutPremiumHouse(player, door); + return; + } + House house = (House) houseAndDoor[0]; + if (!houseUser.ownsHouse(house.getId())) { + HouseUtils.openHouseMenu(player, house, houseUser); + return; + } + if (houseUser.isTeleporting()) return; + if (player.isSneaking()) { + HouseUtils.openHouseMenu(player, house, houseUser); + return; + } + HouseDoor door = (HouseDoor) houseAndDoor[1]; + houseUser.teleportInOrOutHouse(player, door); + } + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/Target.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/Target.java new file mode 100644 index 0000000..8f2cfbc --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/Target.java @@ -0,0 +1,71 @@ +package net.grandtheftmc.gtm.listeners; + +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.gang.GangManager; +import net.grandtheftmc.gtm.gang.Gang; +import net.grandtheftmc.gtm.users.GTMUser; +import net.grandtheftmc.gtm.users.JobMode; +import org.bukkit.entity.Player; +import org.bukkit.entity.Tameable; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityTargetEvent; + +import java.util.Objects; +import java.util.UUID; + +public class Target implements Listener { + + @EventHandler + public void onTarget(EntityTargetEvent e) { + if (!(e.getEntity() instanceof Tameable) || !(e.getTarget() instanceof Player)) + return; + Tameable t = (Tameable) e.getEntity(); + if (!(t.getOwner() instanceof Player)) + return; + if ("spawn".equalsIgnoreCase(e.getTarget().getWorld().getName())) { + e.setCancelled(true); + return; + } + Player player = (Player) t.getOwner(); + UUID uuid = player.getUniqueId(); + GTMUser user = GTM.getUserManager().getLoadedUser(uuid); + Player target = (Player) e.getTarget(); + UUID targetUuid = target.getUniqueId(); + GTMUser targetUser = GTM.getUserManager().getLoadedUser(targetUuid); + +// Gang gang = user.getGang(); + Gang gang = GangManager.getInstance().getGangByMember(uuid).orElse(null); + +// Gang targetGang = targetUser.getGang(); + Gang targetGang = GangManager.getInstance().getGangByMember(targetUuid).orElse(null); + + if (targetGang != null && gang != null) { + if (Objects.equals(targetGang, gang)) { + e.setCancelled(true); + return; + } + + if (targetGang.isAllied(gang)) { + e.setCancelled(true); + return; + } + } + + switch (user.getJobMode()) { + case COP: + JobMode mode = targetUser.getJobMode(); + if (user.getJobMode() == JobMode.COP) { + e.setCancelled(true); + break; + } + if (mode == JobMode.CRIMINAL && targetUser.getWantedLevel() == 0) { + e.setCancelled(true); + break; + } + default: + break; + } + } + +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/UpdateListener.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/UpdateListener.java new file mode 100644 index 0000000..ea7364f --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/UpdateListener.java @@ -0,0 +1,466 @@ +package net.grandtheftmc.gtm.listeners; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import java.util.Random; +import java.util.UUID; +import java.util.stream.Collectors; + +import org.apache.commons.lang.StringUtils; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.events.ChatEvent; +import net.grandtheftmc.core.events.DisplayNameUpdateEvent; +import net.grandtheftmc.core.events.GetPermsEvent; +import net.grandtheftmc.core.events.MoneyEvent; +import net.grandtheftmc.core.events.NametagUpdateEvent; +import net.grandtheftmc.core.events.RewardEvent; +import net.grandtheftmc.core.events.ServerSaveEvent; +import net.grandtheftmc.core.events.TutorialEvent; +import net.grandtheftmc.core.events.UpdateEvent; +import net.grandtheftmc.core.nametags.NametagManager; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserManager; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.voting.Reward; +import net.grandtheftmc.core.voting.Reward.RewardType; +import net.grandtheftmc.core.voting.events.PlayerVoteEvent; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.GTMUtils; +import net.grandtheftmc.gtm.drugs.Drug; +import net.grandtheftmc.gtm.drugs.DrugService; +import net.grandtheftmc.gtm.drugs.item.DrugItem; +import net.grandtheftmc.gtm.events.TPEvent; +import net.grandtheftmc.gtm.events.WantedLevelChangeEvent; +import net.grandtheftmc.gtm.items.GameItem; +import net.grandtheftmc.gtm.items.Head; +import net.grandtheftmc.gtm.items.ItemManager; +import net.grandtheftmc.gtm.items.Kit; +import net.grandtheftmc.gtm.users.GTMUser; +import net.grandtheftmc.gtm.users.GTMUserManager; +import net.grandtheftmc.gtm.users.JobMode; +import net.grandtheftmc.gtm.utils.Stats; +import net.grandtheftmc.gtm.weapon.melee.Dildo; +import net.grandtheftmc.gtm.weapon.ranged.special.GoldMinigun; +import net.grandtheftmc.guns.GTMGuns; +import net.grandtheftmc.guns.weapon.Weapon; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.md_5.bungee.api.chat.BaseComponent; +import net.md_5.bungee.api.chat.ClickEvent; +import net.md_5.bungee.api.chat.ComponentBuilder; +import net.md_5.bungee.api.chat.HoverEvent; +import net.md_5.bungee.api.chat.TextComponent; + +public class UpdateListener implements Listener { + private final Map<UUID, Integer> voteCounts = new HashMap<>(); + + @EventHandler + public void voteEvent(PlayerVoteEvent event) { + + // grab event variables + UUID uuid = event.getUUID(); + + // grab the player object + Player player = Bukkit.getPlayer(uuid); + if (player == null){ + return; + } + + // add to vote counter + this.voteCounts.put(uuid, this.voteCounts.getOrDefault(uuid, 0) + 1); + + // grab user objects + GTMUser gtmUser = GTM.getUserManager().getLoadedUser(uuid); + User user = Core.getUserManager().getLoadedUser(uuid); + + Kit kit = GTM.getItemManager().getKit("vote"); + + // currently only 4 active vote sites + if (this.voteCounts.get(uuid) == 4) { + player.sendMessage(Lang.VOTE.f("&7Thank you for voting on all 4 sites! Here is a special vote kit!")); + GTM.getItemManager().giveKitItems(player, gtmUser, kit); + user.addCrowbars(1); + } + } + + @EventHandler + public void tpEvent(TPEvent event) { + if (event.getType() == TPEvent.TPType.HOUSE_ENTER || event.getType() == TPEvent.TPType.PREMIUM_HOUSE_ENTER) { + Player player = event.getPlayer(); + GTMUser gtmUser = GTMUserManager.getInstance().getUser(player.getUniqueId()).orElse(null); + if (gtmUser!= null && gtmUser.isInCombat()) { + event.setCancelled(Utils.f("&7You cannot enter a house while in combat!")); + } + } + } + + @EventHandler + public void serverSaveEvent(ServerSaveEvent event) { + GTM.getShopManager().getHeads().forEach(Head::update); + Collection<GTMUser> gtmUsers = new ArrayList<>(GTMUserManager.getInstance().getUsers()); + gtmUsers.forEach(gtmUser -> { + if (gtmUser == null) + return; + gtmUser.checkAchievements(); + }); + } + + @EventHandler + public void chatEvent(ChatEvent event) { + Player player = event.getSender(); + TextComponent message = event.getTextComponent(); + List<String> hover = Stats.getInstance().getStats(player); + String url = ""; + for (String string : message.getText().split(" ")) { + if (GTMUtils.isValidURL(string)) { + url = string; + break; + } + if (GTMUtils.getUser(player).isRank(UserRank.VIP) && (string.equalsIgnoreCase(":hand:") || string.equalsIgnoreCase(":item:"))) { + if (player.getInventory().getItemInMainHand() == null) + continue; + ItemStack hand = player.getInventory().getItemInMainHand(); + String json = GTMUtils.convertItemStackToJson(hand); + if (json == null) + continue; + if (!hand.hasItemMeta() || !hand.getItemMeta().hasDisplayName()) { + ItemMeta meta = hand.getItemMeta(); + meta.setDisplayName(hand.getType().name().replace("_", " ")); + hand.setItemMeta(meta); + } + message.setText(message.getText().replace(string, hand.getItemMeta().getDisplayName() + message.getColor())); + message.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_ITEM, new BaseComponent[] { new TextComponent(json) + })); + break; + } + } + if (url.isEmpty()) { + message.setClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/msg " + player.getName() + ' ')); + } + else { + message.setClickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL, url)); + } + if (message.getHoverEvent() == null) { + message.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder(StringUtils.join(hover, "\n")).create())); + } + event.setTextComponent(message); + } + + @EventHandler + public void onDisplayNameUpdate(DisplayNameUpdateEvent event) { + + // grab event variables + Player player = event.getPlayer(); + GTMUser gtmUser = GTMUserManager.getInstance().getUser(player.getUniqueId()).orElse(null); + + if (gtmUser != null) { + event.setPrefix(gtmUser.getJobMode() == JobMode.CRIMINAL ? gtmUser.getRank().getColoredNameBold() : gtmUser.getJobMode().getColoredNameBold()); + } + } + + @EventHandler + public void onGetPerms(GetPermsEvent event) { + + // grab event variables + UUID uuid = event.getUUID(); + + GTMUser gtmUser = GTMUserManager.getInstance().getUser(uuid).orElse(null); + if (gtmUser != null && gtmUser.getRank() != null) { + gtmUser.getRank().getAllPerms().forEach(event::addPerm); + } + } + + @EventHandler + public void onNametagChange(NametagUpdateEvent event) { + + // grab event variables + Player player = event.getPlayer(); + if (player == null) { + return; + } + + GTMUser gtmUser = GTMUserManager.getInstance().getUser(player.getUniqueId()).orElse(null); + + if (gtmUser != null) { + + User user = UserManager.getInstance().getUser(player.getUniqueId()).orElse(null); + JobMode mode = gtmUser.getJobMode(); + + if (gtmUser.getWantedLevel() == 0) { + if (mode != JobMode.CRIMINAL) { + event.setSuffix(mode.getColoredNameBold()); + } + else { + if (user.getEquipedTag() != null) { + event.setSuffix(user.getEquipedTag().getBoldName()); + } + else { + event.setSuffix(gtmUser.getRank().getColoredNameBold()); + } + } + } + else { + event.setSuffix(GTMUtils.getWantedLevelStars(gtmUser.getWantedLevel())); + } + } + } + + @EventHandler + public void onTutorialEvent(TutorialEvent e) { + Player player = e.getPlayer(); + switch (e.getType()) { + case PRE_START: + GTMUser user = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + if (user.isInCombat()) { + e.setCancelled("&7You can't join tutorials in combat!"); + return; + } + if (user.isArrested()) { + e.setCancelled("&7You can't join tutorials in jail!"); + return; + } + if (!Objects.equals("spawn", player.getWorld().getName())) { + e.setCancelled("&7You can only join tutorials at spawn!"); + return; + } + break; + case START: + GTMUtils.removeBoard(player); + break; + default: + break; + } + + } + + @EventHandler + public void onReward(RewardEvent e) { + + Player player = e.getPlayer(); + Reward reward = e.getReward(); + + if (reward.getCustomType() != null) + switch (reward.getCustomType()) { + case "drug": { + Optional<Drug> drug = ((DrugService) GTM.getDrugManager().getService()).getDrug(reward.getCustomName()); + if (drug.isPresent()) { + DrugItem item = DrugItem.getByDrug(drug.get()); + if (item != null) { + Utils.giveItems(player, item.getItemStack()); + } + else { + player.sendMessage(Lang.GTM + "" + ChatColor.RED + "Unable to give you the drug " + reward.getCustomName() + ", couldn't find it."); + } + } + return; + } + case "item": { + String[] a = reward.getCustomName().split(":"); + GameItem item = GTM.getItemManager().getItem(a[0]); + if (item == null) + return; + ItemStack stack = item.getItem(); + if (a.length > 1) + try { + stack.setAmount(Integer.parseInt(a[1])); + } + catch (NumberFormatException ignored) { + } + if (Utils.giveItems(player, stack)) + player.sendMessage(Utils.f(Lang.VOTE + "&7Your inventory was full so the item was dropped on the ground!")); + e.setSuccessfull(true); + return; + } + case "items": + ItemManager im = GTM.getItemManager(); + boolean successfull = true; + List<ItemStack> items = new ArrayList<>(); + for (String s : reward.getCustomList()) { + String[] a = s.split(":"); + GameItem item = im.getItem(a[0]); + if (item == null) { + successfull = false; + continue; + } + ItemStack stack = item.getItem(); + if (a.length > 1) + try { + stack.setAmount(Integer.parseInt(a[1])); + } + catch (NumberFormatException ignored) { + } + items.add(stack); + } + if (Utils.giveItems(player, Utils.toArray(items))) + player.sendMessage(Utils.f(Lang.VOTE + "&7Your inventory was full so some items were dropped on the ground!")); + e.setSuccessfull(successfull); + return; + case "kit": + Kit kit = GTM.getItemManager().getKit(reward.getCustomName()); + if (kit != null) { + GTM.getItemManager().giveKitItems(player, GTM.getUserManager().getLoadedUser(player.getUniqueId()), kit); + e.setSuccessfull(true); + } + return; + case "permits": + GTMUser user = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + user.addPermits((int) reward.getAmount()); + e.setSuccessfull(true); + return; + default: + break; + } + + if (reward.getType() == RewardType.WEAPON) { + + Weapon weapon = GTMGuns.getInstance().getWeaponManager().getWeapon(reward.getName()).orElse(null); + if (weapon != null) { + int stars = reward.getStars(); + WeaponSkin skin = null; + + // clamp bounds + if (stars <= 0) { + stars = 1; + } + if (stars > GTMGuns.MAX_STARS) { + stars = GTMGuns.MAX_STARS; + } + + if (GTMGuns.STAR_SYSTEM) { + Utils.giveItems(player, weapon.createItemStack(stars, skin)); + } + else { + Utils.giveItems(player, weapon.createItemStack()); + } + + e.setSuccessfull(true); + } + } + else if (reward.getType() == RewardType.SKIN) { + Random random = new Random(); + + List<Weapon<?>> weapons = new ArrayList<Weapon<?>>(GTMGuns.getInstance().getWeaponManager().getRegisteredWeapons().stream().filter(weapon -> !(weapon instanceof Dildo) && !(weapon instanceof GoldMinigun)).collect(Collectors.toList())); + + Weapon<?> randomWeapon = weapons.get(random.nextInt(weapons.size())); + WeaponSkin randomSkin = null; + + if (randomWeapon != null && randomWeapon.getWeaponSkins() != null && randomWeapon.getWeaponSkins().length > 1) { + short[] commonSkins = { 5, 7 + }; + + short[] rareSkins = { 2, 6 + }; + +// short[] epicSkins = {}; +// short[] legendarySkins = {}; + + if (reward.getCustomName().equals("weapon_skin_common")) { + randomSkin = GTM.getWeaponSkinManager().getWeaponSkinFromIdentifier(randomWeapon, commonSkins[random.nextInt(commonSkins.length)]); + } + else if (reward.getCustomName().equals("weapon_skin_rare")) { + randomSkin = GTM.getWeaponSkinManager().getWeaponSkinFromIdentifier(randomWeapon, rareSkins[random.nextInt(rareSkins.length)]); + } +// else if (reward.getName().equals("weapon_skin_epic")) { +// randomSkin = GTM.getWeaponSkinManager().getWeaponSkinFromIdentifier(randomWeapon, epicSkins[random.nextInt(rareSkins.length)]); +// } +// else if (reward.getName().equals("weapon_skin_legendary")) { +// randomSkin = GTM.getWeaponSkinManager().getWeaponSkinFromIdentifier(randomWeapon, legendarySkins[random.nextInt(rareSkins.length)]); +// } + + if (randomWeapon == null) { + return; + } + + if (randomSkin == null) { + return; + } + + Utils.giveItems(player, GTM.getWeaponSkinManager().createSkinItem(randomWeapon, randomSkin)); + e.setSuccessfull(true); + } + else { + this.onReward(e); + } + } + } + + @EventHandler + public void onMoneyEvent(MoneyEvent e) { + GTMUser user = GTMUserManager.getInstance().getUser(e.getUUID()).orElse(null); + if (user != null){ + switch (e.getType()) { + case ADD: + user.addMoney(e.getAmount()); + e.setSuccessfull(); + break; + case BALANCE: + e.setBalance(user.getMoney()); + break; + case TAKE: + user.takeMoney(e.getAmount()); + e.setSuccessfull(); + break; + } + } + + GTMUtils.updateBoard(Bukkit.getPlayer(e.getUUID()), user); + } + + @EventHandler + public void onUpdate(UpdateEvent e) { + switch (e.getReason()) { + case BOARD: + case MONEY: + case OTHER: + case RANK: + + GTMUser gtmUser = GTMUserManager.getInstance().getUser(e.getPlayer().getUniqueId()).orElse(null); + if (gtmUser != null){ + GTMUtils.updateBoard(e.getPlayer(), gtmUser); + } + break; + case PREF: + switch (e.getPref()) { + case USE_SCOREBOARD: + gtmUser = GTMUserManager.getInstance().getUser(e.getPlayer().getUniqueId()).orElse(null); + if (gtmUser != null){ + GTMUtils.updateBoard(e.getPlayer(), gtmUser); + } + break; + case TINT_HEALTH: + gtmUser = GTMUserManager.getInstance().getUser(e.getPlayer().getUniqueId()).orElse(null); + if (gtmUser != null){ + User coreUser = UserManager.getInstance().getUser(e.getPlayer().getUniqueId()).orElse(null); + if (coreUser != null){ + gtmUser.updateTintHealth(e.getPlayer(), coreUser); + } + } + break; + default: + break; + } + default: + break; + } + } + + @EventHandler + public void onWantedLevelChange(WantedLevelChangeEvent e) { + GTMUtils.updateBoard(e.getPlayer(), e.getUser()); + NametagManager.updateNametag(e.getPlayer()); + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/VehicleUse.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/VehicleUse.java new file mode 100644 index 0000000..8da1bea --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/VehicleUse.java @@ -0,0 +1,248 @@ +package net.grandtheftmc.gtm.listeners; + +import java.util.Objects; +import java.util.Optional; + +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityToggleGlideEvent; +import org.bukkit.inventory.ItemStack; + +import com.j0ach1mmall3.wastedvehicles.api.events.JetpackFlyEvent; +import com.j0ach1mmall3.wastedvehicles.api.events.VehicleDestroyEvent; +import com.j0ach1mmall3.wastedvehicles.api.events.VehicleEnterEvent; +import com.j0ach1mmall3.wastedvehicles.api.events.VehiclePassengerEnterEvent; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserManager; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.gtm.gang.Gang; +import net.grandtheftmc.gtm.gang.GangManager; +import net.grandtheftmc.gtm.users.GTMRank; +import net.grandtheftmc.gtm.users.GTMUser; +import net.grandtheftmc.gtm.users.GTMUserManager; +import net.grandtheftmc.gtm.users.JobMode; +import net.grandtheftmc.gtm.users.PersonalVehicle; +import net.grandtheftmc.houses.Houses; +import net.grandtheftmc.houses.users.HouseUser; + +public class VehicleUse implements Listener { + + @EventHandler + public void onVehiclePassengerEnter(VehiclePassengerEnterEvent event) { + if (Bukkit.getPlayer(event.getVehicle().getCreator()) == null) return; + Player passenger = event.getPlayer(); + Player owner = Bukkit.getPlayer(event.getVehicle().getCreator()); + + GTMUser passengerUser = GTMUserManager.getInstance().getUser(passenger.getUniqueId()).orElse(null); + GTMUser ownerUser = GTMUserManager.getInstance().getUser(owner.getUniqueId()).orElse(null); + + Optional<Gang> ownerOpt = GangManager.getInstance().getGangByMember(owner.getUniqueId()), passengerOpt = GangManager.getInstance().getGangByMember(passenger.getUniqueId()); + + if (!ownerOpt.isPresent() || !passengerOpt.isPresent()) { + passenger.sendMessage(Lang.VEHICLES.f("&fYou must be in the same gang as the Vehicle Driver to enter!")); + event.setCancelled(true); + } else { + if (ownerOpt.get() != passengerOpt.get()) { + passenger.sendMessage(Lang.VEHICLES.f("&fYou must be in the same gang as the Vehicle Driver to enter!")); + event.setCancelled(true); + return; + } + + event.setCancelled(false); + } + } + + @EventHandler + public void onVehicleEnter(VehicleEnterEvent e) { + Player player = e.getPlayer(); + if (Objects.equals("spawn", player.getWorld().getName())) { + player.sendMessage(Lang.HEY.f("&7You can't enter vehicles in spawn!")); + e.setCancelled(true); + return; + } + + GTMUser gtmUser = GTMUserManager.getInstance().getUser(player.getUniqueId()).orElse(null); + + if (gtmUser != null){ + if (gtmUser.isArrested()) { + player.sendMessage(Lang.JAIL.f("&7You can't enter vehicles in jail!")); + e.setCancelled(true); + } + } + + if (e.getVehicle().getCreator() == null) return; + Player creator = Bukkit.getPlayer(e.getVehicle().getCreator()); + if (creator != null) { + User u = UserManager.getInstance().getUser(creator.getUniqueId()).orElse(null); + GTMUser user = GTMUserManager.getInstance().getUser(creator.getUniqueId()).orElse(null); + + if (u != null && user != null){ + PersonalVehicle vehicle = user.getPersonalVehicle(); + if (vehicle == null) return; + if (Objects.equals(creator, player)) { + if (!vehicle.isStolen()) return; + vehicle.setStolen(false); + player.sendMessage(Lang.VEHICLES.f("&7You recovered your stolen " + vehicle.getDisplayName() + "&7!")); + return; + } + if (!Objects.equals(e.getArmorStand().getUniqueId(), vehicle.getEntityUUID()) || e.getArmorStand().getPassenger() != null || vehicle.isStolen()) + return; + vehicle.setStolen(true); + vehicle.updateVehicleInDatabase(creator, e.getArmorStand().getHealth()); + creator.sendMessage(Lang.VEHICLES.f("&7Your &c&l" + vehicle.getDisplayName() + "&7 was stolen!")); + player.sendMessage(Lang.VEHICLES.f("&7You stole " + u.getColoredName(creator) + "&7's " + vehicle.getDisplayName() + "&7!")); + } + } + } + + @EventHandler + public void onVehicleDestroy(VehicleDestroyEvent e) { + + // grab event variables + Player creator = Bukkit.getPlayer(e.getVehicle().getCreator()); + + if (creator != null) { + + GTMUser user = GTMUserManager.getInstance().getUser(creator.getUniqueId()).orElse(null); + if (user != null){ + PersonalVehicle vehicle = user.getPersonalVehicle(); + if (vehicle == null || !e.getVehicle().getVehicleProperties().getIdentifier().equalsIgnoreCase(vehicle.getVehicle())) + return; + vehicle.updateVehicleInDatabase(creator, 0); + creator.sendMessage(Lang.VEHICLES.f("&7Your &c&l" + vehicle.getDisplayName() + "&7 was destroyed!")); + } + } + } + + @EventHandler + public void onJetpackFly(JetpackFlyEvent e) { + + // grab event variables + Player p = e.getPlayer(); + GTMUser user = GTMUserManager.getInstance().getUser(p.getUniqueId()).orElse(null); + + if (p.isSprinting() && p.isFlying()) { + p.setSprinting(false); + } + + if (user != null){ + if (user.getJobMode() == JobMode.COP) { + e.setCancelled(true); + + if (p.getInventory().getChestplate() != null){ + ItemStack chestItem = p.getInventory().getChestplate(); + + if (chestItem.getType() == Material.ELYTRA || chestItem.getType() == Material.GOLD_CHESTPLATE) { + Utils.giveItems(p, p.getInventory().getChestplate()); + p.getInventory().setChestplate(null); + } + } + + if (user.getLastJetpackCancel() + 2000 < System.currentTimeMillis()) { + user.setLastJetpackCancel(System.currentTimeMillis()); + e.getPlayer().sendMessage(Lang.VEHICLES.f("&7Jetpacks cannot be used by Cops.")); + e.getPlayer().setAllowFlight(false); + e.getPlayer().setFlying(false); + } + return; + } + if(!user.canUseJetpack()){ + e.setCancelled(true); + if (user.getLastJetpackCancel() + 2000 < System.currentTimeMillis()) { + user.setLastJetpackCancel(System.currentTimeMillis()); + e.getPlayer().sendMessage(Lang.VEHICLES.f("&7Your jetpack was disabled! Please wait &a&l"+Utils.timeInMillisToText(user.getEnableJetpackTime()-System.currentTimeMillis())+"&7 to start flying again.")); + e.getPlayer().setAllowFlight(false); + e.getPlayer().setFlying(false); + } + return; + } + + User coreUser = UserManager.getInstance().getUser(p.getUniqueId()).orElse(null); + if (coreUser != null){ + if (!user.isRank(GTMRank.MOBSTER) && !coreUser.isRank(UserRank.SPONSOR)) { + e.setCancelled(true); + + ItemStack chestPlate = p.getInventory().getChestplate(); + if (chestPlate != null) { + if (chestPlate.getType() == Material.ELYTRA || chestPlate.getType() == Material.GOLD_CHESTPLATE){ + Utils.giveItems(p, p.getInventory().getChestplate()); + p.getInventory().setChestplate(null); + } + } + + if (user.getLastJetpackCancel() + 2000 < System.currentTimeMillis()) { + user.setLastJetpackCancel(System.currentTimeMillis()); + e.getPlayer().sendMessage(Lang.VEHICLES.f("&7You need to rank up to " + GTMRank.MOBSTER.getColoredNameBold() + "&7 or donate for " + UserRank.SPONSOR.getColoredNameBold() + "&7 at &a&l" + Core.getSettings().getStoreLink() + "&7 to use the jetpack!")); + e.getPlayer().setAllowFlight(false); + e.getPlayer().setFlying(false); + } + } + } + } + + // get house user + HouseUser houseUser = Houses.getUserManager().getLoadedUser(p.getUniqueId()); + if (houseUser != null){ + + // are they inside a house + if (houseUser.isInsideHouse()){ + + // if they have the jetpack on, unequip + if (p.getInventory().getChestplate()!=null && p.getInventory().getChestplate().getType() == Material.ELYTRA + || p.getInventory().getChestplate().getType() == Material.GOLD_CHESTPLATE) { + Utils.giveItems(p, p.getInventory().getChestplate()); + p.getInventory().setChestplate(null); + } + + if (user.getLastJetpackCancel() + 2000 < System.currentTimeMillis()) { + user.setLastJetpackCancel(System.currentTimeMillis()); + e.getPlayer().sendMessage(Lang.VEHICLES.f("&fYou cannot use a &4jetpack &fin houses!")); + e.getPlayer().setAllowFlight(false); + e.getPlayer().setFlying(false); + } + } + } + } + + @EventHandler + public void onPlayerFly(EntityToggleGlideEvent event){ + + Entity entity = event.getEntity(); + if (!(entity instanceof Player)){ + return; + } + + Player p = (Player) entity; + GTMUser user = GTMUserManager.getInstance().getUser(p.getUniqueId()).orElse(null); + + if (user != null){ + + if (user.getJobMode() == JobMode.COP) { + event.setCancelled(true); + + if (p.getInventory().getChestplate()!=null && p.getInventory().getChestplate().getType() == Material.ELYTRA + || p.getInventory().getChestplate().getType() == Material.GOLD_CHESTPLATE) { + Utils.giveItems(p, p.getInventory().getChestplate()); + p.getInventory().setChestplate(null); + } + + if (user.getLastJetpackCancel() + 2000 < System.currentTimeMillis()) { + user.setLastJetpackCancel(System.currentTimeMillis()); + p.sendMessage(Lang.VEHICLES.f("&7Wingsuits and/or Jetpacks cannot be used by Cops.")); + p.setAllowFlight(false); + p.setFlying(false); + } + + return; + } + } + } +} \ No newline at end of file diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/VoteReward.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/VoteReward.java new file mode 100644 index 0000000..4ced82e --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/VoteReward.java @@ -0,0 +1,128 @@ +package net.grandtheftmc.gtm.listeners; + +import java.util.Optional; + +import org.bukkit.Material; +import org.bukkit.entity. Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import com.j0ach1mmall3.wastedvehicles.api.VehicleProperties; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.Utils; +import net.grandtheftmc.core.util.State; +import net.grandtheftmc.core.voting.Reward; +import net.grandtheftmc.core.voting.events.RewardCheckEvent; +import net.grandtheftmc.core.voting.events.RewardGiveEvent; +import net.grandtheftmc.core.voting.events.RewardInfoEvent; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.users.CheatCode; +import net.grandtheftmc.gtm.users.CheatCodeState; +import net.grandtheftmc.gtm.users.GTMUser; +import net.grandtheftmc.guns.GTMGuns; +import net.grandtheftmc.guns.weapon.Weapon; + +public class VoteReward implements Listener { + + @EventHandler + public void rewardGiveEvent(RewardGiveEvent event) { + Player player = event.getPlayer(); + GTMUser gtmUser = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + String identifier = event.getIdentifier(); + switch (event.getRewardType()) { + case VEHICLE: { + Optional<VehicleProperties> vehicleOptional = GTM.getWastedVehicles().getVehicle(identifier); + if (!vehicleOptional.isPresent()) return; + gtmUser.giveVehiclePerm(player, vehicleOptional.get()); + player.sendMessage(Lang.REWARDS.f("&4&l" + identifier)); + break; + } + case CHEATCODE: { + CheatCode code = CheatCode.valueOf(identifier.toUpperCase()); + if(gtmUser.getCheatCodeState(code).getState()== State.LOCKED) { + gtmUser.setCheatCodeState(code, new CheatCodeState(code.getDefaultState(), false)); + player.sendMessage(Lang.REWARDS.f("&a&l+ " + code.toString() + " CHEATCODE")); + } + else + player.sendMessage(Lang.REWARDS.f("&cYou recieved the " + identifier + " cheatcode, but you already have it.")); + break; + } + // Note: give event for weapons is handled in UpdateListener + } + + } + + @EventHandler + public void rewardCheckEvent(RewardCheckEvent event) { + GTMUser gtmUser = GTM.getUserManager().getLoadedUser(event.getPlayer().getUniqueId()); + String identifier = event.getIdentifier(); + switch (event.getRewardType()) { + case VEHICLE: + Optional<VehicleProperties> vehicleOptional = GTM.getWastedVehicles().getVehicle(identifier); + if (!vehicleOptional.isPresent()) return; + event.setResult(gtmUser.hasVehicle(identifier)); + break; + case CHEATCODE: + CheatCode code = CheatCode.valueOf(identifier.toUpperCase()); + event.setResult(gtmUser.getCheatCodeState(code).getState()!=State.LOCKED); + break; + } + } + + @EventHandler + public void rewardInfoEvent(RewardInfoEvent event) { + + Reward reward = event.getReward(); + String identifier = event.getIdentifier(); + + switch (event.getRewardType()) { + case VEHICLE: + Optional<VehicleProperties> vehicleOptional = GTM.getWastedVehicles().getVehicle(identifier); + if (!vehicleOptional.isPresent()) return; + event.setDisplayItem(vehicleOptional.get().getItem()); + break; + case CHEATCODE: + CheatCode code = CheatCode.valueOf(identifier.toUpperCase()); + event.setDisplayItem(code.getDisplayItem(null, State.LOCKED)); + break; + case WEAPON: + + Weapon weapon = GTMGuns.getInstance().getWeaponManager().getWeapon(reward.getName()).orElse(null); + + // if reward object is here + if (GTMGuns.STAR_SYSTEM){ + int stars = 1; + if (reward != null){ + stars = reward.getStars(); + } + + event.setDisplayItem(weapon.createItemStack(stars, null)); + } + else{ + event.setDisplayItem(weapon.createItemStack()); + } + break; + case SKIN: + ItemStack stack = new ItemStack(Material.ENCHANTED_BOOK); + ItemMeta meta = stack.getItemMeta(); + + if (event.getIdentifier().equals("weapon_skin_common")) { + meta.setDisplayName(Utils.f("&9&lCommon Weapon Skin")); + } else if (event.getIdentifier().equals("weapon_skin_rare")) { + meta.setDisplayName(Utils.f("&9&lRare Weapon Skin")); + } else if (event.getIdentifier().equals("weapon_skin_epic")) { + meta.setDisplayName(Utils.f("&9&lEpic Weapon Skin")); + } else if (event.getIdentifier().equals("weapon_skin_legendary")) { + meta.setDisplayName(Utils.f("&9&lLegendary Weapon Skin")); + } + + stack.setItemMeta(meta); + event.setDisplayItem(stack); + + break; + } + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/WeaponShoot.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/WeaponShoot.java new file mode 100644 index 0000000..adf34fa --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/WeaponShoot.java @@ -0,0 +1,42 @@ +package net.grandtheftmc.gtm.listeners; + +import com.j0ach1mmall3.wastedguns.api.events.ranged.RangedWeaponShootEvent; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.guns.weapon.Weapon; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; + +import java.util.Arrays; +import java.util.List; + +public class WeaponShoot implements Listener { + private final List<String> carGuns = Arrays.asList("Pistol", "CombatPistol", "HeavyPistol", "MarksmanPistol", + "TearGas", "StickyBomb", "Grenade", "MolotovCocktail", "ProximityMine", "MicroSMG", "SMG", "NetLauncher"); + + @EventHandler(ignoreCancelled = true) + public void onRangedWeaponShootEvent(RangedWeaponShootEvent event) { + if (event.getLivingEntity().getType() != EntityType.PLAYER) return; + Weapon weapon = event.getWeapon(); + String weaponName = weapon.getName(); + Player shooter = (Player) event.getLivingEntity(); + boolean inCar = shooter.getVehicle() != null && shooter.getVehicle().hasMetadata("WastedVehiclePassenger"); +// if (weapon.getItemStack().getDurability() != 0) { +// if (weapon.getIdentifier().equalsIgnoreCase("GoldMinigun") +// || weapon.getIdentifier().equalsIgnoreCase("Flamethrower")) return; +// weapon.getItemStack().setDurability((short) 0); +// } + if(inCar && !carGuns.contains(weaponName)) { + shooter.sendMessage(Lang.HEY.f("&7Weapon cannot be used in Car")); + event.setCancelled(true); + return; + } + if (weaponName.contains("NetLauncher")) { + if(shooter.getWorld().getName().equalsIgnoreCase("spawn")) { + shooter.sendMessage(Lang.HEY.f("&7The Net Launcher cannot be used in spawn")); + event.setCancelled(true); + } + } + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/WeaponUse.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/WeaponUse.java new file mode 100644 index 0000000..f845374 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/listeners/WeaponUse.java @@ -0,0 +1,613 @@ +package net.grandtheftmc.gtm.listeners; + +import java.util.Arrays; +import java.util.List; +import java.util.Objects; +import java.util.UUID; + +import org.bukkit.Bukkit; +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.block.BlockFace; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; +import org.bukkit.scheduler.BukkitRunnable; + +import com.j0ach1mmall3.wastedguns.api.events.NetgunHitEvent; +import com.j0ach1mmall3.wastedguns.api.events.WeaponDamageEvent; +import com.j0ach1mmall3.wastedguns.api.events.WeaponRightClickEvent; +import com.j0ach1mmall3.wastedguns.api.events.WeaponSneakEvent; +import com.j0ach1mmall3.wastedguns.api.events.ranged.AmmoUpdateEvent; +import com.j0ach1mmall3.wastedguns.api.events.ranged.RangedWeaponReloadEvent; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserManager; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.GTMUtils; +import net.grandtheftmc.gtm.gang.Gang; +import net.grandtheftmc.gtm.gang.GangManager; +import net.grandtheftmc.gtm.items.AmmoType; +import net.grandtheftmc.gtm.users.GTMUser; +import net.grandtheftmc.gtm.users.GTMUserManager; +import net.grandtheftmc.gtm.users.JobMode; +import net.grandtheftmc.gtm.users.LockedWeapon; +import net.grandtheftmc.guns.weapon.Weapon; +import net.grandtheftmc.houses.Houses; +import net.grandtheftmc.houses.users.HouseUser; + +public class WeaponUse implements Listener { + + private final List<String> spawnBlocked = Arrays.asList("grenade", "molotovcocktail", "teargas", "stickybomb", + "proximitymine", "grenadelauncher", "hominglauncher", "rpg", "netlauncher"); + + private boolean blockedWhileFlyingJetpack(String weapon) { + + // allowed weapons + if (Arrays.asList("baseballbat", "dildo", "katana", "knife", "nightstick", "rake", "pistol", "combatpistol", "heavypistol", "stun gun", "sawed-offshotgun", "microsmg").contains(weapon.toLowerCase())){ + return false; + } + + return true; + } + + private boolean blockedWhileWearingJetpack(String weapon) { + + // allowed weapons + if (Arrays.asList("baseballbat", "dildo", "katana", "knife", "nightstick", "rake", "chainsaw", "pistol", "combatpistol", "heavypistol", "stun gun", "marksmanpistol", "sawed-offshotgun", "microsmg", "smg", "assaultsmg", "combatpdw").contains(weapon.toLowerCase())){ + return false; + } + + return true; + } + + private boolean blockedWhileFlyingWingsuit(String weapon) { + + // allowed weapons + if (Arrays.asList("baseballbat", "dildo", "katana", "knife", "nightstick", "rake", "chainsaw", "pistol", "combatpistol", "heavypistol", "stun gun", "sawed-offshotgun", "microsmg", "smg", "assaultsmg", "combatpdw", "gusenbergsweeper", "assaultrifle", "carbinerifle", "bullpuprifle", "advancedrifle", "specialcarbine").contains(weapon.toLowerCase())){ + return false; + } + + return true; + } + + private boolean blockedWhileWearingWingsuit(String weapon) { + + // allowed weapons + if (Arrays.asList("baseballbat", "dildo", "katana", "knife", "nightstick", "rake", "chainsaw", "pistol", "combatpistol", "heavypistol", "stun gun", "marksmanpistol", "sawed-offshotgun", "microsmg", "smg", "assaultsmg", "combatpdw", "gusenbergsweeper", "sawed-offshotgun", "pumpshotgun", "musket", "assaultshotgun", "heavyshotgun", "assaultrifle", "carbinerifle", "bullpuprifle", "advancedrifle", "specialcarbine").contains(weapon.toLowerCase())){ + return false; + } + + return true; + } + + @EventHandler(priority = EventPriority.HIGHEST) + public void onAmmoChange(AmmoUpdateEvent e) { + + // grab event variables + Player p = e.getPlayer(); + + // grab user + GTMUser user = GTMUserManager.getInstance().getUser(p.getUniqueId()).orElse(null); + + if (user != null){ + + for (AmmoType type : AmmoType.getTypes()){ + e.getAmmo().put(type.name(), user.getAmmo(type)); + } + } + } + + @EventHandler(priority = EventPriority.HIGHEST) + public void onReload(RangedWeaponReloadEvent e) { + Weapon weapon = e.getWeapon(); + + // if weapon does not have ammo, or if entity in event is not a player + if (weapon.getAmmoType() == null || !(e.getLivingEntity() instanceof Player)) + return; + + AmmoType type = AmmoType.getAmmoType(weapon.getAmmoType().getType()); + + // if unable to find ammo type + if (type == null) + return; + + // get the player + Player player = (Player) e.getLivingEntity(); + GTMUser user = GTMUserManager.getInstance().getUser(player.getUniqueId()).orElse(null); + + LockedWeapon lockedWeapon = LockedWeapon.getWeapon(weapon.getCompactName()); + + // is this a locked weapon + if (lockedWeapon != null) { + + // get core user + User coreUser = UserManager.getInstance().getUser(player.getUniqueId()).orElse(null); + if (coreUser != null) { + + // if the core rank is not higher than or equal to locked weapon rank + if (!(coreUser.getUserRank() == lockedWeapon.getUserRank() || coreUser.getUserRank().isHigherThan(lockedWeapon.getUserRank()))) { + + if (user != null) { + + // if the gtm rank is not higher than or weapon to locked weapon rank + if (!(user.getRank() == lockedWeapon.getGTMRank() || user.getRank().isHigherThan(lockedWeapon.getGTMRank()))) { + player.sendMessage(Lang.HEY.f("&7You need to rank up to " + lockedWeapon.getGTMRank().getColoredNameBold() + "&7 or donate for " + lockedWeapon.getUserRank().getColoredNameBold() + "&7 at &a&l" + Core.getSettings().getStoreLink() + "&7 to use this weapon!")); + e.setCancelled(true); + return; + } + } + } + } + } + + if (user != null){ + int ammo = user.getAmmo(type); + if (ammo <= 0) { + e.setCancelled(true); + player.sendMessage(Lang.AMMO.f("&7You are out of ammo for this weapon!")); + } else if (ammo < e.getAmmoToReload()) { + e.setAmmoToReload(ammo); + user.removeAmmo(type, ammo); + } else + user.removeAmmo(type, e.getAmmoToReload()); + } + else{ + e.setCancelled(true); + } + } + + @EventHandler(priority = EventPriority.HIGHEST) + public void onWeaponUse(WeaponRightClickEvent e) { + if (!(e.getLivingEntity() instanceof Player)) + return; + + Player player = (Player) e.getLivingEntity(); + Weapon weapon = e.getWeapon(); + if (Objects.equals("spawn", player.getWorld().getName())) { + if (this.spawnBlocked.contains(weapon.getCompactName().toLowerCase())) { + e.setCancelled(true); + return; + } + } + + GTMUser gtmUser = GTMUserManager.getInstance().getUser(player.getUniqueId()).orElse(null); +// LockedWeapon lockedWeapon = LockedWeapon.getWeapon(e.getWeapon().getCompactName().toUpperCase()); +// if(lockedWeapon != null && !lockedWeapon.canUseWeapon(gtmUser.getRank(), Core.getUserManager().getLoadedUser(player.getUniqueId()).getUserRank())) { +// player.sendMessage(Lang.HEY.f("&7You need to rank up to " + lockedWeapon.getGTMRank().getColoredNameBold() + "&7 or donate for " + lockedWeapon.getUserRank().getColoredNameBold() + "&7 at &a&lstore.grandtheftmc.net&7 to use this weapon!")); +// e.setCancelled(true); +// return; +// } + + LockedWeapon lockedWeapon = LockedWeapon.getWeapon(weapon.getCompactName()); + if (lockedWeapon != null) { + //ServerUtil.debug("1 - " + lockedWeapon.name()); + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + //ServerUtil.debug("2 - " + user.getUserRank().name() + " (has:" + (user.getUserRank() == lockedWeapon.getUserRank() || user.getUserRank().isHigherThan(lockedWeapon.getUserRank())) + ")"); + //ServerUtil.debug("3 - " + gtmUser.getRank().name() + " (has:" + (gtmUser.getRank() == lockedWeapon.getGTMRank() || gtmUser.getRank().isHigherThan(lockedWeapon.getGTMRank())) + ")"); + + if (!(user.getUserRank() == lockedWeapon.getUserRank() || user.getUserRank().isHigherThan(lockedWeapon.getUserRank())) + && !(gtmUser.getRank() == lockedWeapon.getGTMRank() || gtmUser.getRank().isHigherThan(lockedWeapon.getGTMRank()))) { + player.sendMessage(Lang.HEY.f("&7You need to rank up to " + lockedWeapon.getGTMRank().getColoredNameBold() + "&7 or donate for " + lockedWeapon.getUserRank().getColoredNameBold() + "&7 at &a&l" + Core.getSettings().getStoreLink() + "&7 to use this weapon!")); + e.setCancelled(true); + //ServerUtil.debug("Blocked."); + return; + } + } + + if (gtmUser != null){ + if (gtmUser.isArrested()) { + player.sendMessage(Lang.JAIL.f("&7You can't use weapons in jail!")); + e.setCancelled(true); + return; + } + + if (gtmUser.hasTeleportProtection()) { + e.setCancelled(true); + player.sendMessage(Lang.COMBATTAG.f("&7Please wait &c&l" + Utils.timeInMillisToText(gtmUser.getTimeUntilTeleportProtectionExpires()) + "&7!")); + return; + } + } + + ItemStack chestPlate = player.getInventory().getChestplate(); + if (chestPlate != null && chestPlate.getType() == Material.ELYTRA) { + if (this.blockedWhileWearingWingsuit(weapon.getCompactName())) { + player.sendMessage(Lang.VEHICLES.f("&7The weapon " + weapon.getCompactName() + " cannot be used while wearing a wingsuit!")); + e.setCancelled(true); + return; + } + if (player.isGliding() && this.blockedWhileFlyingWingsuit(weapon.getCompactName())) { + player.sendMessage(Lang.VEHICLES.f("&7The weapon " + weapon.getCompactName() + " cannot be used while flying a wingsuit!")); + e.setCancelled(true); + return; + } + } + + if (chestPlate != null && chestPlate.getType() == Material.GOLD_CHESTPLATE){ + if (this.blockedWhileWearingJetpack(weapon.getCompactName())) { + player.sendMessage(Lang.VEHICLES.f("&7The weapon " + weapon.getCompactName() + " cannot be used while wearing a jetpack!")); + e.setCancelled(true); + return; + } + if (player.isFlying() && this.blockedWhileFlyingJetpack(weapon.getCompactName())) { + player.sendMessage(Lang.VEHICLES.f("&7The weapon " + weapon.getCompactName() + " cannot be used while flying a jetpack!")); + e.setCancelled(true); + return; + } + } + + HouseUser user = Houses.getUserManager().getLoadedUser(player.getUniqueId()); + if (user.isInsideHouse() || user.isInsidePremiumHouse()){ + e.setCancelled(true); + } + } + + + @EventHandler(priority = EventPriority.HIGHEST) + public void onWeaponUse(WeaponSneakEvent e) { + if (!(e.getLivingEntity() instanceof Player)) + return; + Player player = (Player) e.getLivingEntity(); + Weapon weapon = e.getWeapon(); + if (Objects.equals("spawn", player.getWorld().getName())) { + if (this.spawnBlocked.contains(weapon.getCompactName().toLowerCase())) { + e.setCancelled(true); + return; + } + } + + + GTMUser gtmUser = GTMUserManager.getInstance().getUser(player.getUniqueId()).orElse(null); + + LockedWeapon lockedWeapon = LockedWeapon.getWeapon(weapon.getCompactName()); + if (lockedWeapon != null) { + + User coreUser = UserManager.getInstance().getUser(player.getUniqueId()).orElse(null); + if (coreUser == null){ + e.setCancelled(true); + return; + } + + if (!(coreUser.getUserRank() == lockedWeapon.getUserRank() || coreUser.getUserRank().isHigherThan(lockedWeapon.getUserRank())) + && !(gtmUser.getRank() == lockedWeapon.getGTMRank() || gtmUser.getRank().isHigherThan(lockedWeapon.getGTMRank()))) { + player.sendMessage(Lang.HEY.f("&7You need to rank up to " + lockedWeapon.getGTMRank().getColoredNameBold() + "&7 or donate for " + lockedWeapon.getUserRank().getColoredNameBold() + "&7 at &a&l" + Core.getSettings().getStoreLink() + "&7 to use this weapon!")); + e.setCancelled(true); + return; + } + } + + if (gtmUser != null){ + if (gtmUser.isArrested()) { + player.sendMessage(Lang.JAIL.f("&7You can't use weapons in jail!")); + e.setCancelled(true); + return; + } + if (gtmUser.hasTeleportProtection()) { + e.setCancelled(true); + player.sendMessage(Lang.COMBATTAG.f("&7Please wait &c&l" + Utils.timeInMillisToText(gtmUser.getTimeUntilTeleportProtectionExpires()) + "&7!")); + return; + } + } + + ItemStack chestPlate = player.getInventory().getChestplate(); + + if (chestPlate != null && chestPlate.getType() == Material.GOLD_CHESTPLATE) + if (this.blockedWhileWearingJetpack(weapon.getCompactName())) { + e.setCancelled(true); + return; + } + if (player.isFlying() && this.blockedWhileFlyingJetpack(weapon.getCompactName())) { + e.setCancelled(true); + return; + } + HouseUser user = Houses.getUserManager().getLoadedUser(player.getUniqueId()); + if (user.isInsideHouse() || user.isInsidePremiumHouse()) + e.setCancelled(true); + } + + + @EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST) + public void onShoot(WeaponDamageEvent e) { + if (!(e.getLivingEntity() instanceof Player) || !(e.getEntity() instanceof Player) || Objects.equals("spawn", e.getEntity().getWorld().getName())) + return; + + // grab event variables + Weapon weapon = e.getWeapon(); + Player player = (Player) e.getLivingEntity(); + Player victim = (Player) e.getEntity(); + UUID victimUUID = victim.getUniqueId(); + + GTMUser gtmUser = GTMUserManager.getInstance().getUser(player.getUniqueId()).orElse(null); + GTMUser victimGtmUser = GTMUserManager.getInstance().getUser(victimUUID).orElse(null); + + if (victimGtmUser != null && victimGtmUser.hasTeleportProtection()) { + e.setCancelled(true); + player.sendMessage(Lang.COMBATTAG.f("&7That player has teleport protection for &c&l" + Utils.timeInMillisToText(victimGtmUser.getTimeUntilTeleportProtectionExpires()) + "&7!")); + return; + } + + if (gtmUser != null && gtmUser.hasTeleportProtection()) { + e.setCancelled(true); + player.sendMessage(Lang.COMBATTAG.f("&7Please wait &c&l" + Utils.timeInMillisToText(gtmUser.getTimeUntilTeleportProtectionExpires()) + "&7 to damage players!")); + return; + } + + HouseUser victimHouseUser = Houses.getUserManager().getLoadedUser(victimUUID); + HouseUser playerHouseUser = Houses.getUserManager().getLoadedUser(player.getUniqueId()); + if (victimHouseUser.isInsideHouse() || victimHouseUser.isInsidePremiumHouse()) { + e.setCancelled(true); + player.sendMessage(Lang.HOUSES.f("&7You can't hurt players inside a house!")); + return; + } + + if (playerHouseUser.isInsideHouse() || playerHouseUser.isInsidePremiumHouse()) { + e.setCancelled(true); + player.sendMessage(Lang.HOUSES.f("&7You can't hurt players while inside a house!")); + } + + +// Gang victimGang = victimGtmUser.getGang(); +// Gang damagerGang = gtmUser.getGang(); + Gang victimGang = GangManager.getInstance().getGangByMember(victimUUID).orElse(null); + Gang damagerGang = GangManager.getInstance().getGangByMember(player.getUniqueId()).orElse(null); + if (victimGang != null && damagerGang != null && !Objects.equals(victim, player)) { + if (Objects.equals(victimGang, damagerGang)) { + e.setCancelled(true); + player.sendMessage(Lang.GANGS.f("&7You can't hurt players that are in your gang!")); + return; + } + + if (victimGang.isAllied(damagerGang)) { + e.setCancelled(true); + player.sendMessage(Lang.GANGS.f("&7You can't hurt players that are in an allied gang!")); + return; + } + } + + if (weapon.getCompactName().equalsIgnoreCase("flamethrower")) { + victim.setFireTicks(victim.getFireTicks() + 20); + victim.getNearbyEntities(5, 0, 5).forEach(entity -> { + if (entity == victim || entity.getType() != EntityType.PLAYER) return; + Player target = (Player) entity; + if (target.getGameMode() != GameMode.ADVENTURE) return; + target.setFireTicks(target.getFireTicks() + 10); + }); + return; + } + + // grab the player jetpack + ItemStack chestPlate = player.getInventory().getChestplate(); + + // if player is wearing a chestplate of some sort + if (chestPlate != null){ + + // if source player is wearing a jetpack + if (chestPlate.getType().equals(Material.GOLD_CHESTPLATE)){ + if (blockedWhileWearingJetpack(weapon.getCompactName())){ + e.setCancelled(true); + player.sendMessage(Lang.VEHICLES.f("&7The weapon " + weapon.getCompactName() + " cannot be used while wearing a jetpack!")); + return; + } + } + + // if source player is wearing a wingsuit + if (chestPlate.getType().equals(Material.ELYTRA)){ + if (blockedWhileWearingWingsuit(weapon.getCompactName())){ + e.setCancelled(true); + player.sendMessage(Lang.VEHICLES.f("&7The weapon " + weapon.getCompactName() + " cannot be used while wearing a wingsuit!")); + return; + } + } + } + + if (weapon.getCompactName().equalsIgnoreCase("stungun") && victim.getInventory().getChestplate() != null && victim.getInventory().getChestplate().getType().equals(Material.GOLD_CHESTPLATE)) { + victimGtmUser.disableJetpack(); + victim.setFlying(false); + } + + if (gtmUser != null && gtmUser.getJobMode() != JobMode.COP) return; + if (victimGtmUser != null && victimGtmUser.getJobMode() == JobMode.COP) { + e.setCancelled(true); + player.sendMessage(Utils.f(Lang.HEY + "&cYou can't kill cops!")); + return; + } + + if (victimGtmUser != null && victimGtmUser.getJobMode() == JobMode.CRIMINAL && victimGtmUser.getWantedLevel() == 0) { + player.sendMessage(Lang.HEY.f("&7You can't damage citizens that are not wanted!")); + e.setCancelled(true); + return; + } + + if (gtmUser != null && gtmUser.getJobMode() == JobMode.COP) { + if (weapon.getCompactName().equalsIgnoreCase("nightstick")) { + victim.addPotionEffect(new PotionEffect(PotionEffectType.CONFUSION, 80, 1)); + victim.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, 50, 1)); + } + } + + if (!"stungun".equalsIgnoreCase(weapon.getCompactName()) || victimGtmUser.getJobMode() != JobMode.CRIMINAL || victimGtmUser.getWantedLevel() == 0) + return; + + if (victim.getLastDamageCause() == null || victim.getLastDamageCause().getCause() != EntityDamageEvent.DamageCause.DRAGON_BREATH) + return; + + if ((chestPlate != null && (chestPlate.getType() == Material.GOLD_CHESTPLATE || chestPlate.getType() == Material.ELYTRA) && player.getLocation().getBlock().getRelative(BlockFace.DOWN).getType() == Material.AIR) || player.isFlying() || player.isGliding()) { + player.sendMessage(Lang.COP_MODE.f("&fYou may not arrest criminals during flight!")); + return; + } + + if (player.getVehicle() != null) { + player.sendMessage(Lang.COP_MODE.f("&fYou may not arrest criminals while in a Vehicle!")); + return; + } + + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + User victimUser = Core.getUserManager().getLoadedUser(victimUUID); + int wantedLevel = victimGtmUser.getWantedLevel(); + int timeInJail = GTMUtils.getTimeInJail(wantedLevel); + victimGtmUser.jail(timeInJail, player); + player.sendMessage(Lang.COP_MODE.f("&7You arrested &a" + victimUser.getColoredName(victim) + + "&7! He will go to jail for &a" + Utils.timeInSecondsToText(timeInJail) + "&7!")); + Utils.broadcastExcept(player, Lang.COP_MODE.f("&a" + victimUser.getColoredName(victim) + "&7 was arrested by &a" + + user.getColoredName(player) + "&7!")); + victimGtmUser.addDeaths(1); + victimGtmUser.setLastTag(-1); + victimGtmUser.setKillCounter(0); + victimGtmUser.setKillStreak(0); + victimGtmUser.unsetCompassTarget(victim, victimUser); + if (GTM.getWarpManager().cancelTaxi(victim, victimGtmUser)) + victim.sendMessage(Utils.f(Lang.TAXI + "&eThe taxi was cancelled!")); + victim.setHealth(victim.getMaxHealth()); + victim.spigot().respawn(); + victim.setFireTicks(0); + victim.setGameMode(GameMode.SPECTATOR); + victim.setFlying(true); + victim.getActivePotionEffects().clear(); + victim.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, 180, 0), false); + victim.setFoodLevel(20); + victim.playSound(victim.getLocation(), Sound.ENTITY_WITHER_SPAWN, 1, 0.5F); + victim.setFlySpeed(0); + GTMUtils.removeBoard(victim); + double lostMoney = Utils.round(victimGtmUser.getMoney() / 2); + new BukkitRunnable() { + @Override + public void run() { + Player victim = Bukkit.getPlayer(victimUUID); + if (victim == null) + return; + + User victimUser = Core.getUserManager().getLoadedUser(victim.getUniqueId()); + GTMUser victimGameUser = GTM.getUserManager().getLoadedUser(victim.getUniqueId()); + victim.sendMessage(Lang.JAIL.f("&7You were arrested and have to stay in jail for &a" + + Utils.timeInSecondsToText(timeInJail) + "&7!")); + if (lostMoney > 0) + victim.sendMessage(Lang.MONEY_TAKE.f(String.valueOf(lostMoney))); + victim.teleport(GTM.getWarpManager().getJail().getLocation()); + victim.setGameMode(GameMode.ADVENTURE); + victim.getActivePotionEffects().clear(); + victim.setFoodLevel(20); + victim.setFlying(false); + victim.setFlySpeed(0.1F); + GTMUtils.giveGameItems(victim); + GTMUtils.updateBoard(victim, victimGameUser); + } + }.runTaskLater(GTM.getInstance(), 150); + ItemStack[] contents = victim.getInventory().getContents(); + victim.getInventory().clear(); + Location loc = victim.getLocation(); + for (ItemStack item : contents) + if (item != null && item.getType() != Material.WATCH && item.getType() != Material.COMPASS + && item.getType() != Material.CHEST) + loc.getWorld().dropItemNaturally(loc, item); + if (lostMoney > 0) { + victimGtmUser.takeMoney(lostMoney); + gtmUser.addMoney(lostMoney); + player.sendMessage(Lang.MONEY.f("&7You confiscated &a$&l" + lostMoney + "&7 of &a" + + victimUser.getColoredName(victim) + "&7's money!")); + } + int copMoney = GTMUtils.getCopMoney(wantedLevel); + gtmUser.addMoney(copMoney); + player.sendMessage(Lang.COP_MODE.f("&7You were rewarded &a$&l" + copMoney + "&7 for arresting a player with &e" + + GTMUtils.getWantedLevelStars(wantedLevel) + " (" + wantedLevel + ")&7!")); + Utils.sendTitle(victim, "&c&lBUSTED", "&7Arrested by " + player.getName(), 80, 50, 20); + GTMUtils.updateBoard(player, user, gtmUser); + GTMUtils.arrestPlayer(e, weapon, player, victim); + } + + /** + * Listens in on netgun hit events. + * <p> + * This is fired when a netgun hits a target, and we listen + * on low priority so other events can mutate this for + * permission and changes later. + * <p> + * + * @param event - the event + */ + @EventHandler (priority = EventPriority.LOW) + public void onNetgunHitLow(NetgunHitEvent event){ + + // grab event variables + Entity shooter = event.getShooter(); + Entity target = event.getTarget().orElse(null); + Location loc = event.getLocation(); + int duration = event.getDuration(); + + // if target is alive and not dead + if (target != null && !target.isDead() && target instanceof LivingEntity){ + + // grab target chestplate + LivingEntity livingTarget = (LivingEntity) target; + ItemStack chestPlate = livingTarget.getEquipment().getChestplate(); + + if (chestPlate != null){ + + // if wearing wingsuit + if (chestPlate.getType() == Material.ELYTRA){ + duration = (int) (duration * 3.0); + } + // if wearing jetpack + else if (chestPlate.getType() == Material.GOLD_CHESTPLATE){ + duration = (int) (duration * 2.0); + } + } + } + + // mutate duration for listeners of event + event.setDuration(duration); + } + + /** + * Listens in on netgun hit events. + * <p> + * This is fired when a netgun hits a target, and we listen + * on high priority as it's after a permission check + * + * Note: If event is cancelled already, skip this code. + * <p> + * + * @param event - the event + */ + @EventHandler (priority = EventPriority.HIGH, ignoreCancelled = true) + public void onNetgunHitHigh(NetgunHitEvent event){ + + // grab event variables + Entity shooter = event.getShooter(); + Entity target = event.getTarget().orElse(null); + Location loc = event.getLocation(); + int duration = event.getDuration(); + + // if target is valid + if (target != null && !target.isDead()){ + if (target instanceof Player){ + + // grab player + Player targetPlayer = (Player) target; + GTMUser gtmUser = GTMUserManager.getInstance().getUser(targetPlayer.getUniqueId()).orElse(null); + if (gtmUser != null){ + + // disable jetpack for a quarter length of stun + int disableTicks = (int) (duration / 4.0); + // convert from ticks to milliseconds + gtmUser.setEnableJetpackTime(System.currentTimeMillis() + (disableTicks * 50)); + + // disable fly + targetPlayer.setFlying(false); + } + } + } + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/lootcrates/CrateManager.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/lootcrates/CrateManager.java new file mode 100644 index 0000000..f828ed9 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/lootcrates/CrateManager.java @@ -0,0 +1,182 @@ +package net.grandtheftmc.gtm.lootcrates; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.scheduler.BukkitRunnable; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.drugs.DrugService; +import net.grandtheftmc.gtm.drugs.item.DrugItem; +import net.grandtheftmc.gtm.items.GameItem; +import net.grandtheftmc.guns.GTMGuns; + +public class CrateManager { + + public CrateManager() { + this.loadCrates(); + this.startSchedule(); + } + + private List<LootItem> items = new ArrayList<>(); + private List<LootCrate> crates = new ArrayList<>(); + private int cooldown = 30; // in MINUTES + + private int taskId = -1; + + public List<LootItem> getItems() { + return this.items; + } + + public List<LootCrate> getCrates() { + return this.crates; + } + + + public void loadCrates() { + YamlConfiguration c = GTM.getSettings().getLootConfig(); + this.items = new ArrayList<>(); + for (String identifier : c.getKeys(false)) { + + // get the game item id, if one exists, otherwise default to this identifier + String gameItemID = c.getString(identifier + ".gameitem", identifier); + String type = c.getString(identifier + ".type"); + + try { + GameItem item = GTM.getItemManager().getItem(gameItemID); + if (item == null && (type == null || !type.equals("SKIN"))) { + Core.error("Error loading game item identifier='" + identifier + "', gameItemID='" + gameItemID + "' for Loot Crates!"); + continue; + } + + double chance = 100; + if (c.getString(identifier + ".chance") != null) + chance = c.getDouble(identifier + ".chance"); + int min = 1; + if (c.getString(identifier + ".min") != null) + min = c.getInt(identifier + ".min"); + int max = 64; + if (c.getString(identifier + ".max") != null) + max = c.getInt(identifier + ".max"); + + // rarity rating for weapon + int stars = 1; + if (c.getString(identifier + ".stars") != null) + stars = c.getInt(identifier + ".stars"); + + // clamp bounds + if (stars < 1){ + stars = 1; + } + if (stars > GTMGuns.MAX_STARS){ + stars = GTMGuns.MAX_STARS; + } + + LootItem lootItem = new LootItem(identifier, gameItemID, chance, min, max, stars, false); + this.items.add(lootItem); + } catch (Exception e) { + Core.error("Error loading loot item identifier='" + identifier + "', gameItemID='" + gameItemID + "' for Loot Crates!"); + } + } + + if (!Core.getSettings().isSister()) { + for (DrugItem drugItem : ((DrugService) GTM.getInstance().getDrugManager().getService()).getAllDrugItems()) { + this.items.add(new LootItem(drugItem.drug().getName(), drugItem.drug().getName(), 8, 1, 5, 0, true)); + } + } + + c = GTM.getSettings().getLootCratesConfig(); + this.crates = new ArrayList<>(); + if (c.get("lootcrates") != null) + this.crates.addAll(c.getStringList("lootcrates").stream().map(s -> new LootCrate(Utils.blockLocationFromString(s))).collect(Collectors.toList())); + this.cooldown = c.getInt("cooldown"); + } + + public void saveCrates() { + YamlConfiguration c = GTM.getSettings().getLootConfig(); + for (String s : c.getKeys(false)) { + if (c.contains(s + ".type")) continue; + c.set(s, null); + } + for (LootItem item : this.items) { + if (item.getIdentifier().contains("skin")) continue; + + if(!item.isDrug()) { + String identifier = item.getIdentifier(); + + // legacy compatibility + if (identifier == null){ + identifier = item.getItemName(); + } + + c.set(identifier + ".gameitem", item.getItemName()); + c.set(identifier + ".chance", item.getChance()); + c.set(identifier + ".min", item.getMin()); + c.set(identifier + ".max", item.getMax()); + c.set(identifier + ".stars", item.getStars()); + } + } + Utils.saveConfig(c, "loot"); + + c = GTM.getSettings().getLootCratesConfig(); + List<String> list = this.crates.stream().map(crate -> Utils.blockLocationToString(crate.getLocation())).collect(Collectors.toList()); + c.set("lootcrates", list); + c.set("cooldown", this.cooldown); + Utils.saveConfig(c, "lootcrates"); + } + + public void startSchedule() { + if (this.taskId != -1) Bukkit.getScheduler().cancelTask(this.taskId); + this.taskId = new BukkitRunnable() { + @Override + public void run() { + GTM.getCrateManager().getCrates().forEach(LootCrate::tick); + } + }.runTaskTimer(GTM.getInstance(), 20, 20).getTaskId(); + } + + public LootCrate getCrate(Location location) { + return this.crates.stream().filter(crate -> Objects.equals(crate.getLocation(), location)).findFirst().orElse(null); + } + + public void addCrate(Location location) { + if (this.getCrate(location) == null) + this.crates.add(new LootCrate(location)); + } + + public void removeCrate(Location location) { + LootCrate crate = this.getCrate(location); + if (crate != null) { + crate.removeHologram(); + this.crates.remove(crate); + } + } + + public int getCooldown() { + return this.cooldown; + } + + public void setCooldown(int i) { + this.cooldown = i; + } + + public void addItem(LootItem lootItem) { + this.items.add(lootItem); + } + + public LootItem getItem(GameItem gameItem) { + return this.items.stream().filter(item -> Objects.equals(item.getGameItem(), gameItem)).findFirst().orElse(null); + } + + public void removeItem(LootItem lootItem) { + this.items.remove(lootItem); + } + +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/lootcrates/LootCrate.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/lootcrates/LootCrate.java new file mode 100644 index 0000000..2e94b1b --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/lootcrates/LootCrate.java @@ -0,0 +1,201 @@ +package net.grandtheftmc.gtm.lootcrates; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.Optional; + +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.block.BlockState; +import org.bukkit.block.Chest; +import org.bukkit.entity.HumanEntity; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; + +import com.gmail.filoghost.holographicdisplays.api.Hologram; +import com.gmail.filoghost.holographicdisplays.api.HologramsAPI; +import com.gmail.filoghost.holographicdisplays.api.VisibilityManager; +import com.gmail.filoghost.holographicdisplays.api.line.TextLine; +import com.j0ach1mmall3.jlib.methods.Random; + +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.guns.GTMGuns; +import net.grandtheftmc.guns.weapon.Weapon; +import net.grandtheftmc.guns.weapon.WeaponSkin; + +public class LootCrate { + + private Location location; + private long timer; + private Hologram hologram; + private final List<TextLine> textLines = new ArrayList<>(); + + public LootCrate(Location location) { + this.location = location; + this.timer = 60; + } + + public Location getLocation() { + return this.location; + } + + public void setLocation(Location location) { + this.location = location; + } + + public long getTimer() { + return this.timer; + } + + public void resetTimer() { + this.timer = GTM.getCrateManager().getCooldown() * 60L; + } + + public void tick() { + if (this.timer > 0) { + if(!this.location.getChunk().isLoaded()) { + this.timer--; + return; + } + +// if(Stream.of(this.location.getChunk().getEntities()) +// .filter(entity -> entity instanceof Player && entity.getLocation().distanceSquared(this.location) < 225) +// .count() <= 0) { +// this.timer--; +// return; +// } + + /* if(Bukkit.getOnlinePlayers().stream() + .filter(player -> player.getLocation().getWorld().getName().equals(location.getWorld().getName()) + && player.getLocation().distanceSquared(location) <= 200) + .count() <= 0) { + this.timer--; + return; + }*/ + + this.updateHologram("&7Restocks in &a" + Utils.timeInSecondsToText(this.timer) + "&7!"); + this.timer--; + this.updateVisibility(); + } else if (this.timer == 0) { + this.closeOutViewers(); //Close out inventory viewers before restocking. + this.restock(); + this.updateVisibility(); + timer = -1; + } + else{ + this.updateVisibility(); + } + } + + public void restock() { + BlockState state = this.location.getBlock().getState(); + if (!(state instanceof Chest)) { + GTM.log("Loot Chest at location " + Utils.blockLocationToString(this.location) + " is not a Chest!"); + this.updateHologram("&c&lERROR: Please contact an admin!"); + this.timer = -1; + return; + } + Chest chest = (Chest) state; + chest.setCustomName(Utils.f("&e&lLoot Crate")); + +// CraftChest craftChest = (CraftChest) chest; +// TileEntityChest tileEntityChest = craftChest.getTileEntity(); +// tileEntityChest.setCustomName(Utils.f("&e&lLoot Crate")); + + Inventory inv = chest.getBlockInventory(); + inv.clear(); + GTM.getCrateManager().getItems().stream().filter(item -> Utils.calculateChance(item.getChance())).forEach(item -> { + + // attempt to get weapon, if it is one + Optional<Weapon<?>> weaponOpt = GTMGuns.getInstance().getWeaponManager().getWeapon(item.getGameItem().getName()); + + if (weaponOpt.isPresent()){ + ItemStack stack = weaponOpt.get().createItemStack(item.getStars(), null); + stack.setAmount(Utils.randomNumber(item.getMin(), item.getMax())); + Utils.putItemInInventoryRandomly(inv, stack); + } + else { + /** + * TODO: Different weapon skin rarities + */ + if (item.getItemName().startsWith("weapon_skin_")) { + this.restockWeaponSkin(inv, item); + } else { + ItemStack stack = item.getGameItem().getItem(); + stack.setAmount(Utils.randomNumber(item.getMin(), item.getMax())); + Utils.putItemInInventoryRandomly(inv, stack); + } + } + }); + this.updateHologram("&7Restocked!"); + this.timer = -1; + } + + private void restockWeaponSkin(Inventory inv, LootItem item) { + List<Weapon<?>> weapons = new ArrayList<Weapon<?>>(GTMGuns.getInstance().getWeaponManager().getRegisteredWeapons()); + Weapon<?> randomWeapon = weapons.get(Random.getInt(weapons.size())); + WeaponSkin randomSkin = null; + + if (randomWeapon == null || randomWeapon.getWeaponSkins() == null || randomWeapon.getWeaponSkins().length <= 1) { + this.restockWeaponSkin(inv, item); + } + + short[] commonSkins = { + 5, 7 + }; + + short[] rareSkins = { + 2, 6 + }; + + if (item.getItemName().endsWith("common")) { + randomSkin = GTM.getWeaponSkinManager().getWeaponSkinFromIdentifier(randomWeapon, commonSkins[Random.getInt(0, commonSkins.length)]); + } else if (item.getItemName().endsWith("rare")) { + randomSkin = GTM.getWeaponSkinManager().getWeaponSkinFromIdentifier(randomWeapon, rareSkins[Random.getInt(0, rareSkins.length)]); + } + + Utils.putItemInInventoryRandomly(inv, GTM.getWeaponSkinManager().createSkinItem(randomWeapon, randomSkin)); + } + + private void updateHologram(String text) { + if (this.hologram == null) { + this.hologram = HologramsAPI.createHologram(GTM.getInstance(), this.location.clone().add(0.5, 2, 0.5)); + this.textLines.add(this.hologram.appendTextLine(Utils.f("&e&lLoot Crate"))); + this.textLines.add(this.hologram.appendTextLine(Utils.f(text))); + this.hologram.getVisibilityManager().setVisibleByDefault(false); + } else + this.textLines.get(1).setText(Utils.f(text)); + + } + + private void updateVisibility() { + VisibilityManager v = this.hologram.getVisibilityManager(); + for (Player player : Bukkit.getOnlinePlayers()) { + if (Objects.equals(player.getWorld(), this.location.getWorld()) && player.getLocation().distanceSquared(this.location) < 200) { + if (!v.isVisibleTo(player)) + v.showTo(player); + } else if (v.isVisibleTo(player)) + v.hideTo(player); + } + } + + public void removeHologram() { + this.hologram.delete(); + this.hologram = null; + this.textLines.clear(); + + } + + private void closeOutViewers() { + if (this.location == null) return; + Block block = this.location.getBlock(); + if (block.getType() != Material.CHEST) return; + Chest chest = (Chest) block.getState(); + chest.getInventory().getViewers().forEach(HumanEntity::closeInventory); + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/lootcrates/LootCrateCommand.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/lootcrates/LootCrateCommand.java new file mode 100644 index 0000000..e916dd7 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/lootcrates/LootCrateCommand.java @@ -0,0 +1,194 @@ +package net.grandtheftmc.gtm.lootcrates; + +import java.util.Iterator; +import java.util.List; +import java.util.UUID; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.items.GameItem; +import net.grandtheftmc.gtm.users.GTMUser; + +public class LootCrateCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command c, String lbl, String[] args) { + if (!(s instanceof Player)) { + s.sendMessage(Lang.NOTPLAYER.s()); + return true; + } + Player player = (Player) s; + if (!player.hasPermission("lootcrate.admin")) { + player.sendMessage(Lang.NOPERM.s()); + return true; + } + UUID uuid = player.getUniqueId(); + GTMUser user = GTM.getUserManager().getLoadedUser(uuid); + if (args.length == 0) { + s.sendMessage(Utils.f("&c/lootcrates add")); + s.sendMessage(Utils.f("&c/lootcrates remove")); + s.sendMessage(Utils.f("&c/lootcrates cooldown <minutes> ")); + s.sendMessage(Utils.f("&c/lootcrates check")); + s.sendMessage(Utils.f("&c/lootcrates restock")); + s.sendMessage(Utils.f("&c/lootcrates list [page]")); + + s.sendMessage(Utils.f("&c/lootcrates item <itemName> <chance> <min> <max>")); + s.sendMessage(Utils.f("&c/lootcrates removeitem <itemName>")); + s.sendMessage(Utils.f("&c/lootcrates load")); + s.sendMessage(Utils.f("&c/lootcrates save")); + return true; + } + switch (args[0].toLowerCase()) { + case "add": + s.sendMessage(Lang.LOOTCRATES.f("&7Right click on the chest you want to turn in to a Loot Crate. Make sure the chest has display name &e&lLoot Crate&7!")); + user.setAddingLootCrate(true); + return true; + case "remove": + s.sendMessage(Lang.LOOTCRATES.f("&7Right click on the chest you would like to remove as a Loot Crate.")); + user.setRemovingLootCrate(true); + return true; + case "cooldown": + if (args.length != 2) { + s.sendMessage(Utils.f("&c/lootcrate cooldown <minutes> ")); + return true; + } + try { + GTM.getCrateManager().setCooldown(Integer.parseInt(args[1])); + } catch (NumberFormatException e) { + s.sendMessage(Utils.f("&cThe cooldown must be a number measured in minutes!")); + return true; + } + s.sendMessage(Lang.LOOTCRATES.f("&7The cooldown on Loot Crates was set to &a" + + GTM.getCrateManager().getCooldown() + " minutes&7!")); + return true; + case "check": + s.sendMessage(Lang.LOOTCRATES + .f("&7Right click on the Loot Crate of which you would like to check the cooldown;")); + user.setCheckingLootCrate(true); + return true; + case "restock": + s.sendMessage(Lang.LOOTCRATES.f("&7Right click the Loot Crate which you want to restock.")); + user.setRestockingLootCrate(true); + return true; + case "removeitem": { + if (args.length != 2) { + s.sendMessage(Utils.f("&c/lootcrate removeitem <itemName>")); + return true; + } + GameItem item = GTM.getItemManager().getItem(args[1]); + if (item == null) { + s.sendMessage(Lang.LOOTCRATES.f("&7That GameItem does not exist!")); + return true; + } + LootItem lootItem = GTM.getCrateManager().getItem(item); + if (lootItem == null) { + s.sendMessage(Lang.LOOTCRATES.f("&7That GameItem is not added to Loot Crates!")); + return true; + } + GTM.getCrateManager().removeItem(lootItem); + s.sendMessage(Lang.LOOTCRATES.f("&7GameItem &a" + item.getName() + "&7 was removed from LootCrates!")); + return true; + } + case "item": + if (args.length < 5) { + s.sendMessage(Utils.f("&c/lootcrate item <id> <itemName> <chance> <stars> [min] [max]")); + return true; + } + + String identifier = args[1]; + + GameItem item = GTM.getItemManager().getItem(args[2]); + if (item == null) { + s.sendMessage(Lang.LOOTCRATES.f("&7That GameItem does not exist!")); + return true; + } + + double chance; + int stars = 1; + int min; + int max; + try { + chance = Double.parseDouble(args[3]); + stars = Integer.parseInt(args[4]); + min = args.length > 4 ? Integer.parseInt(args[5]) : 1; + max = args.length > 5 ? Integer.parseInt(args[6]) : min; + } catch (NumberFormatException e) { + s.sendMessage(Lang.LOOTCRATES.f("&7The chance must be a double, min and max must be integers!")); + return true; + } + if (min > max) { + s.sendMessage(Lang.LOOTCRATES.f("&7The maximum must be greater than or equal to the minimum!")); + return true; + } + LootItem lootItem = GTM.getCrateManager().getItem(item); + if (lootItem == null) + GTM.getCrateManager().addItem(new LootItem(identifier, item.getName(), chance, min, max, stars, false)); + else { + lootItem.setChance(chance); + lootItem.setMin(min); + lootItem.setMax(max); + } + s.sendMessage(Lang.LOOTCRATES + .f("&7You added GameItem &a" + item.getName() + "&7 to LootCrates with a chance of &a" + chance + + "&7, a min of &a" + min + "&7 and a max of &a" + max + "&7!")); + return true; + case "list": + List<LootCrate> crates = GTM.getCrateManager().getCrates(); + int page = 1; + if (args.length > 1) { + try { + page = Integer.parseInt(args[1]); + } catch (NumberFormatException e) { + s.sendMessage(Lang.LOOTCRATES.f("&cThe page must be a number!")); + return true; + } + } + if (page < 1) { + s.sendMessage(Lang.LOOTCRATES.f("&7The page must be a positive number!")); + return true; + } + int pages = crates.size() / 6 + 1; + s.sendMessage(Utils.f(" &7&m---------------&7[&e&l Loot Crates List &7Page &e" + page + "&7/&e" + pages + + " &7&m]---------------")); + Iterator<LootCrate> it = crates.iterator(); + for (int i = 0; i < page * 6; i++) { + if (!it.hasNext()) + return true; + LootCrate cr = it.next(); + if (i < page * 6 - 6) + continue; + s.sendMessage(Utils.f("&e" + Utils.blockLocationToString(cr.getLocation()))); + } + return true; + case "load": + GTM.getSettings().setLootCratesConfig(Utils.loadConfig("lootcrates")); + GTM.getSettings().setLootConfig(Utils.loadConfig("loot")); + GTM.getCrateManager().loadCrates(); + s.sendMessage(Lang.LOOTCRATES.f("&7Loaded LootCrates!")); + return true; + case "save": + GTM.getCrateManager().saveCrates(); + s.sendMessage(Lang.LOOTCRATES.f("&7Saved LootCrates!")); + return true; + default: + s.sendMessage(Utils.f("&c/lootcrates add")); + s.sendMessage(Utils.f("&c/lootcrates remove")); + s.sendMessage(Utils.f("&c/lootcrates cooldown <minutes> ")); + s.sendMessage(Utils.f("&c/lootcrates check")); + s.sendMessage(Utils.f("&c/lootcrates restock")); + s.sendMessage(Utils.f("&c/lootcrates list [page]")); + s.sendMessage(Utils.f("&c/lootcrates item <itemName> <chance> <min> <max>")); + s.sendMessage(Utils.f("&c/lootcrates removeitem <itemName>")); + s.sendMessage(Utils.f("&c/lootcrates load")); + s.sendMessage(Utils.f("&c/lootcrates save")); + return true; + } + } + +} \ No newline at end of file diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/lootcrates/LootItem.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/lootcrates/LootItem.java new file mode 100644 index 0000000..ec498ea --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/lootcrates/LootItem.java @@ -0,0 +1,126 @@ +package net.grandtheftmc.gtm.lootcrates; + +import java.util.Optional; + +import org.bukkit.inventory.ItemStack; + +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.drugs.Drug; +import net.grandtheftmc.gtm.drugs.DrugService; +import net.grandtheftmc.gtm.drugs.item.DrugItem; +import net.grandtheftmc.gtm.items.GameItem; + +public class LootItem { + + /** The identifier for this loot item */ + private String identifier; + /** The name of the item to drop, usually the game item */ + private String itemName; + private double chance; + private int min; + private int max; + /** Star rating for weapons */ + private int stars; + private boolean isDrug; + + public LootItem(String identifier, String itemName, double chance, int min, int max, int stars, boolean isDrug) { + this.identifier = identifier; + this.itemName = itemName; + this.chance = chance; + this.min = min; + this.max = max; + this.stars = stars; + this.isDrug = isDrug; + } + + /** + * Get the identifier for this loot item. + * <p> + * This is what the id is for the yml. + * </p> + * + * @return The identifier for this loot item. + */ + public String getIdentifier() { + return identifier; + } + + /** + * Set the identifier for this loot item. + * <p> + * This is what the id is for the yml. + * </p> + * @param identifier - the new identifier + */ + public void setIdentifier(String identifier) { + this.identifier = identifier; + } + + public String getItemName() { + return this.itemName; + } + + public void setItemName(String itemName) { + this.itemName = itemName; + } + + public GameItem getGameItem() { + if(!isDrug){ + return GTM.getItemManager().getItem(this.itemName); + } else { + Optional<Drug> drug = ((DrugService) GTM.getInstance().getDrugManager().getService()).getDrug(itemName); + if (!drug.isPresent()) { + return null; + } + DrugItem itema = DrugItem.getByDrug(drug.get()); + ItemStack is = itema.getItemStack(); + return new GameItem(itemName, is, is.getItemMeta().getDisplayName()); + } + } + + public boolean isDrug(){ + return isDrug; + } + + public double getChance() { + return this.chance; + } + + public void setChance(double chance) { + this.chance = chance; + } + + public int getMin() { + return this.min; + } + + public void setMin(int min) { + this.min = min; + } + + public int getMax() { + return this.max; + } + + public void setMax(int max) { + this.max = max; + } + + /** + * Get the stars/rarity associated with this loot item. + * + * @return The stars/rarity associated with this loot item. + */ + public int getStars() { + return stars; + } + + /** + * Set the stars/rarity associated with this loot item. + * + * @param stars - the new stars + */ + public void setStars(int stars) { + this.stars = stars; + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/tasks/GlassesTask.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/tasks/GlassesTask.java new file mode 100644 index 0000000..a21af5a --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/tasks/GlassesTask.java @@ -0,0 +1,36 @@ +package net.grandtheftmc.gtm.tasks; + +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.GTMUtils; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitRunnable; + +public class GlassesTask extends BukkitRunnable { + private Long ct; + + @Override + public void run() { + this.ct = System.currentTimeMillis(); + Bukkit.getOnlinePlayers().forEach(player -> checkGlasses(player)); + } + + public void checkGlasses(Player player) { + if(player.getInventory().getHelmet() == null) return; + if(player.getInventory().getHelmet().getType() != Material.CHAINMAIL_HELMET) return; + player.getNearbyEntities(30, 30, 30).forEach(entity -> { + if(entity.getType() != EntityType.PLAYER) return; + Player target = (Player)entity; + new BukkitRunnable() { + @Override + public void run() { + GTMUtils.sendGlow(player, target, 12); + } + }.runTaskAsynchronously(GTM.getInstance()); + }); + player.playSound(player.getLocation(), Sound.UI_BUTTON_CLICK, 20, 20); + } +} \ No newline at end of file diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/tasks/Lottery.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/tasks/Lottery.java new file mode 100644 index 0000000..dd161ea --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/tasks/Lottery.java @@ -0,0 +1,295 @@ +package net.grandtheftmc.gtm.tasks; + +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.temporal.ChronoUnit; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.UUID; + +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitRunnable; + +import com.gmail.filoghost.holographicdisplays.api.Hologram; +import com.gmail.filoghost.holographicdisplays.api.HologramsAPI; +import com.gmail.filoghost.holographicdisplays.api.line.TextLine; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.GTMUtils; +import net.grandtheftmc.gtm.users.GTMUser; +import net.grandtheftmc.gtm.utils.WeightedRandomCollection; + +/** + * Created by Liam on 11/01/2017. + */ +public class Lottery { + + private final List<TextLine> textLines = new ArrayList<>(); + private final List<LotteryPlayer> lotteryPlayers = new ArrayList<>(); + private LocalDateTime end; + private Location hologramLocation; + private Hologram hologram; + private List<LotteryPlayer> winners = new ArrayList<>(3); + + public Lottery() { + this.loadConfig(); + this.startScheduler(); + } + + public static void test() { + WeightedRandomCollection<String> collection = new WeightedRandomCollection<>(); + collection.add(50, "Top Guy"); + collection.add(5, "Medium Guy"); + collection.add(3, "Mediocre Guy"); + collection.add(2, "Peasant1"); + collection.add(2, "Peasant2"); + collection.add(2, "Peasant3"); + collection.add(2, "Peasant4"); + collection.add(2, "Peasant5"); + collection.add(1, "Slave1"); + collection.add(1, "Slave2"); + collection.add(1, "Slave3"); + collection.add(1, "Slave4"); + collection.add(1, "Slave5"); + List<String> names = new ArrayList<>(); + Bukkit.broadcastMessage("--- " + collection.values().size()); + for (int i = 0; i < 13; i++) + if (!names.contains(collection.next())) + names.add(collection.last()); + + names.forEach(Bukkit::broadcastMessage); + } + + public void loadConfig() { + YamlConfiguration c = GTM.getSettings().getLotteryConfig(); + this.hologramLocation = Utils.teleportLocationFromString(c.getString("hologramLocation")); + this.end = c.get("end") == null ? LocalDateTime.now(ZoneId.of("UTC")).plusDays(1) + : LocalDateTime.of(c.getInt("end.year"), c.getInt("end.month"), c.getInt("end.day"), c.getInt("end.hour"), c.getInt("end.minute")); + this.winners.clear(); + if (c.get("winners") != null) + for (String s : c.getConfigurationSection("winners").getKeys(false)) { + try { + UUID uuid = UUID.fromString(c.getString("winners." + s + ".uuid")); + String name = c.getString("winners." + s + ".name"); + double amnt = c.getDouble("winners." + s + ".amount"); + boolean paid = c.getBoolean("winners." + s + ".paid"); + LotteryPlayer player = new LotteryPlayer(uuid, name); + player.setAmount(amnt); + player.setPaid(paid); + this.winners.add(player); + } catch (Exception e) { + Core.log("Error while loading lottery winner " + s); + e.printStackTrace(); + } + } + this.lotteryPlayers.clear(); + if (c.get("players") != null) + for (String s : c.getConfigurationSection("players").getKeys(false)) + try { + UUID uuid = UUID.fromString(s); + LotteryPlayer player = new LotteryPlayer(uuid, c.getString("players." + uuid + ".name")); + player.setTickets(c.getInt("players." + uuid + ".tickets")); + this.lotteryPlayers.add(player); + } catch (Exception e) { + Core.log("Error while loading lottery player " + s); + e.printStackTrace(); + } + } + + public void saveConfig() { + YamlConfiguration c = GTM.getSettings().getLotteryConfig(); + for (String s : c.getKeys(false)) + c.set(s, null); + c.set("hologramLocation", Utils.teleportLocationToString(this.hologramLocation)); + c.set("end.year", this.end.getYear()); + c.set("end.month", this.end.getMonthValue()); + c.set("end.day", this.end.getDayOfMonth()); + c.set("end.hour", this.end.getHour()); + c.set("end.minute", this.end.getMinute()); + for (int i = 0; i < 3; i++) { + LotteryPlayer player = this.getWinner(i); + if (player == null) continue; + c.set("winners." + i + ".uuid", player.getUUID().toString()); + c.set("winners." + i + ".name", player.getName()); + c.set("winners." + i + ".amount", player.getAmount()); + c.set("winners." + i + ".paid", player.isPaid()); + } + for (LotteryPlayer player : this.lotteryPlayers) { + c.set("players." + player.getUUID() + ".name", player.getName()); + c.set("players." + player.getUUID() + ".tickets", player.getTickets()); + } + Utils.saveConfig(c, "lottery"); + } + + private void startScheduler() { + new BukkitRunnable() { + @Override + public void run() { + if (Lottery.this.end != null && Lottery.this.end.isBefore(LocalDateTime.now(ZoneId.of("UTC")))) + Lottery.this.end(); + Lottery.this.updateHologram(); + } + }.runTaskTimer(GTM.getInstance(), 20, 20); + + } + + public void end() { + this.end = LocalDateTime.now(ZoneId.of("UTC")).plusDays(1); + WeightedRandomCollection<LotteryPlayer> players = new WeightedRandomCollection<>(); + for (LotteryPlayer player : this.lotteryPlayers) { + if(player.getTickets() <= 0) continue; + players.add(player.getTickets(), player); + } + this.winners = players.getUniqueElements(3); + double value = this.getPotValue(); + LotteryPlayer winner1 = this.getWinner(0); + LotteryPlayer winner2 = this.getWinner(1); + LotteryPlayer winner3 = this.getWinner(2); + if (winner1 != null) winner1.addAmount(0.5 * value); + if (winner2 != null) winner2.addAmount(0.2 * value); + if (winner3 != null) winner3.addAmount(0.1 * value); + GTMUtils.log("lottery", winner1.getName() + " has won the lottery prize of " + 0.5 * value + "(50% of the pot)"); + GTMUtils.log("lottery", winner2.getName() + " has won the lottery prize of " + 0.2 * value + "(20% of the pot)"); + GTMUtils.log("lottery", winner3.getName() + " has won the lottery prize of " + 0.1 * value + "(10% of the pot)"); + this.lotteryPlayers.clear(); + for (Player p : Bukkit.getOnlinePlayers()) + p.sendMessage(new String[]{"", Utils.f(GTMUtils.HEADER), "", + Utils.fc("&e&lLottery Results"), "", + Utils.fc("&7For a total pot of &a&l" + Utils.formatMoney(value)), + Utils.fc("&a#&l1&7: &r" + winner1 + " &a&l" + Utils.formatMoney(0.5 * value) + "&7 (&a50%&7 of the pot)"), + Utils.fc("&a#&l2&7: &r" + winner2 + " &a&l" + Utils.formatMoney(0.2 * value) + "&7 (&a20%&7 of the pot)"), + Utils.fc("&a#&l3&7: &r" + winner3 + " &a&l" + Utils.formatMoney(0.1 * value) + "&7 (&a10%&7 of the pot)"), + "", Utils.fc("&e&lCongratulations to the winners!"), + "", Utils.f(GTMUtils.FOOTER), ""}); + + for (int i = 0; i < 3 && i < this.winners.size(); i++) { + LotteryPlayer winner = this.winners.get(i); + if (winner != null && !winner.isPaid()) { + Player player = Bukkit.getPlayer(winner.getUUID()); + if (player == null) continue; + GTMUser user = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + user.addBank(winner.getAmount()); + winner.setPaid(true); + player.sendMessage(Lang.LOTTERY.f("&7You've won the lottery, coming in " + (i == 0 ? "1st" : i == 1 ? "2nd" : i == 2 ? "3rd" : "error") + "! &a" + Utils.formatMoney(winner.getAmount()) + "&7 was added to your bank account.")); + GTMUtils.updateBoard(player, user); + } + } + + } + + + public void updateHologram() { + if (this.hologramLocation == null) return; + LotteryPlayer winner1 = this.winners.isEmpty() ? null : this.winners.get(0); + LotteryPlayer winner2 = this.winners.size() > 1 ? this.winners.get(1) : null; + LotteryPlayer winner3 = this.winners.size() > 2 ? this.winners.get(2) : null; + if (this.hologram == null) { + this.hologram = HologramsAPI.createHologram(GTM.getInstance(), this.hologramLocation.clone().add(0.5, 4, 0.5)); + this.textLines.add(this.hologram.appendTextLine(Utils.f("&e&lLottery"))); + this.textLines.add(this.hologram.appendTextLine(Utils.f("&7&oGo big or go home!"))); + this.textLines.add(this.hologram.appendTextLine("")); + this.textLines.add(this.hologram.appendTextLine(Utils.f("&7Pot value:"))); + this.textLines.add(this.hologram.appendTextLine(Utils.f("&a&l" + Utils.formatMoney(this.getPotValue())))); + this.textLines.add(this.hologram.appendTextLine("")); + this.textLines.add(this.hologram.appendTextLine(Utils.f("&7Time until jackpot:"))); + this.textLines.add(this.hologram.appendTextLine(Utils.f("&a&l" + this.timeToEnd()))); + this.textLines.add(this.hologram.appendTextLine("")); + this.textLines.add(this.hologram.appendTextLine(Utils.f("&7Last week's winners:"))); + this.textLines.add(this.hologram.appendTextLine(Utils.f(winner1 == null ? "" : ("&a#&l1&7: &r" + winner1 + " &a" + Utils.formatMoney(winner1.getAmount()) + "&7 (&a50%&7 of the pot)")))); + this.textLines.add(this.hologram.appendTextLine(Utils.f(winner2 == null ? "" : ("&a#&l2&7: &r" + winner2 + " &a" + Utils.formatMoney(winner2.getAmount()) + "&7 (&a20%&7 of the pot)")))); + this.textLines.add(this.hologram.appendTextLine(Utils.f(winner3 == null ? "" : ("&a#&l3&7: &r" + winner3 + " &a" + Utils.formatMoney(winner3.getAmount()) + "&7 (&a10%&7 of the pot)")))); + } else { + this.textLines.get(4).setText(Utils.f("&a&l" + Utils.formatMoney(this.getPotValue()))); + this.textLines.get(7).setText(Utils.f("&a&l" + this.timeToEnd())); + this.textLines.get(10).setText(Utils.f("&a#&l1&7: &r" + (winner1 == null ? "" : (winner1 + " &a" + Utils.formatMoney(winner1.getAmount()) + "&7 (&a50%&7 of the pot)")))); + this.textLines.get(11).setText(Utils.f("&a#&l2&7: &r" + (winner2 == null ? "" : (winner2 + " &a" + Utils.formatMoney(winner2.getAmount()) + "&7 (&a20%&7 of the pot)")))); + this.textLines.get(12).setText(Utils.f("&a#&l2&7: &r" + (winner3 == null ? "" : (winner3 + " &a" + Utils.formatMoney(winner3.getAmount()) + "&7 (&a10%&7 of the pot)")))); + + } + } + + public String timeToEnd() { + if (this.end == null) this.end = LocalDateTime.now(ZoneId.of("UTC")).plusDays(1); + return Utils.timeInSecondsToText(ChronoUnit.SECONDS.between(LocalDateTime.now(ZoneId.of("UTC")), this.end)); + } + + public List<LotteryPlayer> getTickets() { + return this.lotteryPlayers; + } + + public LotteryPlayer getLotteryPlayer(UUID uuid) { + return this.lotteryPlayers.stream().filter(player -> Objects.equals(player.getUUID(), uuid)).findFirst().orElse(null); + } + + public LotteryPlayer getLotteryPlayer(String name) { + return this.lotteryPlayers.stream().filter(player -> Objects.equals(player.getName(), name)).findFirst().orElse(null); + } + + public LotteryPlayer getWinner(UUID uuid) { + return this.winners.stream().filter(player -> Objects.equals(player.getUUID(), uuid)).findFirst().orElse(null); + } + + + public LotteryPlayer getWinner(int i) { + return this.winners.size() > i ? this.winners.get(i) : null; + } + + public double getPotValue() { + return 500 * this.lotteryPlayers.stream().mapToInt(LotteryPlayer::getTickets).sum(); + } + + public void joinCheck(Player player, User user, GTMUser gtmUser) { + for (int i = 0; i < 3 && i < this.winners.size(); i++) { + LotteryPlayer winner = this.winners.get(i); + if (winner != null && !winner.isPaid() && Objects.equals(winner.getUUID(), player.getUniqueId())) { + gtmUser.addBank(winner.getAmount()); + winner.setPaid(true); + player.sendMessage(Lang.LOTTERY.f("&7You won the lottery, coming in " + (i == 0 ? "1st" : i == 1 ? "2nd" : i == 2 ? "3rd" : "error") + "! &a&l" + Utils.formatMoney(winner.getAmount()) + "&7 was added to your bank account.")); + } + } + if (user.isSpecial()) { + LotteryPlayer p = this.getLotteryPlayer(player.getUniqueId()); + if (p != null) return; + p = new LotteryPlayer(player.getUniqueId(), player.getName()); + this.lotteryPlayers.add(p); + p.addTickets(GTMUtils.getFreeLotteryTickets(user.getUserRank())); + player.sendMessage(Lang.LOTTERY.f("&7Thank you for supporting " + Core.getSettings().getServer_GTM_shortName() + "! You have been given &a&l" + p.getTickets() + "&7 free lottery tickets for today's draw.")); + } + } + + public List<LotteryPlayer> getLastWinners() { + return this.winners; + } + + public void addLotteryPlayer(LotteryPlayer p) { + this.lotteryPlayers.add(p); + } + + public Location getHologramLocation() { + return this.hologramLocation; + } + + public void setHologramLocation(Location hologramLocation) { + this.hologramLocation = hologramLocation; + } + + public LocalDateTime getEnd() { + return this.end; + } + + public void setEnd(LocalDateTime end) { + this.end = end; + } + + public List<LotteryPlayer> getLotteryPlayers() { + return new ArrayList<>(this.lotteryPlayers); + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/tasks/LotteryPlayer.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/tasks/LotteryPlayer.java new file mode 100644 index 0000000..053a2e2 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/tasks/LotteryPlayer.java @@ -0,0 +1,64 @@ +package net.grandtheftmc.gtm.tasks; + +import java.util.UUID; + +public class LotteryPlayer { + private final UUID uuid; + private String name = "Presidentx"; + private int tickets; + + private double amount; + private boolean paid; + + public LotteryPlayer(UUID uuid, String name) { + this.uuid = uuid; + this.name = name; + } + + public UUID getUUID() { + return this.uuid; + } + + public String getName() { + return this.name; + } + + public int getTickets() { + return this.tickets; + } + + public void setTickets(int tickets) { + this.tickets = tickets; + } + + public void addTickets(int tickets) { + this.tickets += tickets; + } + + public void setAmount(double amount) { + this.amount = amount; + } + + public void addAmount(double amount) { + this.amount += amount; + } + + public double getAmount() { + return this.amount; + } + + public void setPaid(boolean b) { + this.paid = b; + } + + public boolean isPaid() { + return this.paid; + } + + @Override + public String toString() { + return this.name; + } + + +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/tasks/PlayerTask.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/tasks/PlayerTask.java new file mode 100644 index 0000000..69342a8 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/tasks/PlayerTask.java @@ -0,0 +1,173 @@ +package net.grandtheftmc.gtm.tasks; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.ThreadLocalRandom; + +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.block.Block; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; +import org.bukkit.scheduler.BukkitRunnable; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.users.CompassTarget; +import net.grandtheftmc.gtm.users.GTMUser; +import net.grandtheftmc.gtm.users.GTMUserManager; +import net.grandtheftmc.houses.Houses; +import net.grandtheftmc.houses.users.HouseUser; + +public class PlayerTask extends BukkitRunnable { + public static List<Block> fireBlocks = new ArrayList<>(); + private Long ct; + + @Override + public void run() { + this.ct = System.currentTimeMillis(); + if (!fireBlocks.isEmpty()) checkFire(); + for (Player player : Bukkit.getOnlinePlayers()) { + + GTMUser gtmUser = GTMUserManager.getInstance().getUser(player.getUniqueId()).orElse(null); + if (gtmUser != null){ + this.checkCombatTagExpiration(player, gtmUser); + this.checkCompassRefresh(player, gtmUser); + this.checkTpaRequestExpiration(player, gtmUser); + this.checkJailRelease(player, gtmUser); + this.checkDualWield(player); + this.checkElytra(player); + this.checkHouses(player); + gtmUser.checkBackupExpiration(player); + } + } + } + + private void checkHouses(Player player) { + if (player.getInventory().getChestplate() == null) return; + HouseUser houseUser = Houses.getUserManager().getLoadedUser(player.getUniqueId()); + if (houseUser.isInsidePremiumHouse() || houseUser.isInsideHouse()) { + if (player.getInventory().getChestplate().getType() == Material.ELYTRA + || player.getInventory().getChestplate().getType() == Material.GOLD_CHESTPLATE) { + Utils.giveItems(player, player.getInventory().getChestplate()); + player.getInventory().setChestplate(null); + player.sendMessage(Lang.HOUSES.f("&7You cannot equip this gear while in a house!")); + } + } + } + + private void checkFire() { + Block block = fireBlocks.get(ThreadLocalRandom.current().nextInt(fireBlocks.size())); + if (block.getChunk().isLoaded()) block.setType(Material.AIR); + fireBlocks.remove(block); + } + + private void checkElytra(Player player) { + if (player.isGliding()) { + if (player.getInventory().contains(Material.COAL)) { + if (player.isSneaking()) { + ItemStack fuel = player.getInventory().getItem(player.getInventory().first(Material.COAL)); + if (fuel.getAmount() <= 1 || fuel.getAmount() - 5 < 1) { + player.getInventory().remove(fuel); + } else { + fuel.setAmount(fuel.getAmount() - 5); + } + player.getWorld().playSound(player.getLocation(), Sound.ENTITY_ITEM_PICKUP, 1.0F, 1.0F); + player.getInventory().getChestplate().setDurability((short) 0); + } + } else { + player.sendMessage(Lang.VEHICLES.f("&7Elytra requires (jetpack) fuel to fly!")); + player.setGliding(false); + if (player.getInventory().firstEmpty() == -1) { + player.getWorld().dropItem(player.getLocation(), player.getInventory().getChestplate()); + } else { + player.getInventory().addItem(player.getInventory().getChestplate()); + } + player.getInventory().setChestplate(null); + player.setFallDistance(-50); + } + } + } + + private void checkDualWield(Player player) { + if (player.getInventory().getItemInOffHand() != null && player.getInventory().firstEmpty() != -1) { + if (player.getInventory().getItemInOffHand().getType() == Material.SHIELD) return; + player.getInventory().addItem(player.getInventory().getItemInOffHand()); + } + player.getInventory().setItemInOffHand(null); + } + + private void checkJailRelease(Player player, GTMUser gtmUser) { + int timer = gtmUser.getJailTimer(); + if (!gtmUser.isArrested() || timer < 0) + return; + if (timer == 600 || timer == 300 || timer == 180 || timer == 120 || timer == 60 || timer == 30 + || timer == 15 || timer == 10 || (timer <= 5 && timer > 0)) { + player.sendMessage( + Lang.JAIL.f("&7You will be released in &a" + Utils.timeInSecondsToText(timer) + "&7!")); + if (timer == 1) { + player.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, 50, 0)); + player.playSound(player.getLocation(), Sound.BLOCK_LAVA_EXTINGUISH, 0.5F, 1); + } else + player.playSound(player.getLocation(), Sound.UI_BUTTON_CLICK, 4.0F / timer, 2); + } + if (timer == 0) { + gtmUser.resetJail(); + player.teleport(GTM.getWarpManager().getSpawn().getLocation()); + player.sendMessage(Lang.JAIL.f("&7You were released from jail!")); + player.removePotionEffect(PotionEffectType.SLOW); + player.getActivePotionEffects().clear(); + return; + } + gtmUser.setJailTimer(timer - 1); + } + + + private void checkCombatTagExpiration(Player player, GTMUser user) { + if (user.isInCombat() || user.getLastTag() == -1) + return; + user.setLastTag(-1); + player.sendMessage(Utils.f(Lang.COMBATTAG + "&7You are no longer in combat. You may log out safely.")); + } + + private void checkCompassRefresh(Player player, GTMUser gtmUser) { + if (gtmUser.hasCompassTarget() && gtmUser.getLastCompassRefresh() + 60000 < this.ct) + gtmUser.refreshCompassTarget(player, Core.getUserManager().getLoadedUser(player.getUniqueId())); + ItemStack item = player.getInventory().getItemInMainHand(); + if (item == null || item.getType() != Material.COMPASS || !gtmUser.hasCompassTarget()) return; + CompassTarget target = gtmUser.getCompassTarget(); + if(target.getTargetPlayer()==null && target.getType()== CompassTarget.TargetType.PLAYER) { + player.sendMessage(Lang.GTM.f("&7The player that you were tracking has logged off or died, resetting your tracker.")); + gtmUser.unsetCompassTarget(player, Core.getUserManager().getLoadedUser(player.getUniqueId())); + return; + } + double i = Utils.getAngleBetweenVectors(player, player.getCompassTarget()); + boolean negative = i < 0; + i = Math.abs(i); + String s = target.getType() == CompassTarget.TargetType.PLAYER ? Utils.f("&c&l" + target.getTargetPlayer().getName()) : ""; + if (i < 30) + Utils.sendActionBar(player, "^ " + s + " ^"); + else if (i < 60) + Utils.sendActionBar(player, negative ? "&e< " + s : s + " &e>"); + else if (i < 90) + Utils.sendActionBar(player, negative ? "&e<< " + s : s + " &e>>"); + else if (i < 120) + Utils.sendActionBar(player, negative ? "&c<&e< " + s : s + " &e>&c>"); + else if (i < 150) + Utils.sendActionBar(player, negative ? "&c<&e<< " + s : s + " &e>>&c>"); + else + Utils.sendActionBar(player, negative ? "&c<<< " + s : s + " &c>>>"); + // TODO make fancier and cooler and stuff + } + + private void checkTpaRequestExpiration(Player player, GTMUser gtmUser) { + if (gtmUser.getLastTpaRequest() > 0 && gtmUser.getLastTpaRequest() + 60000 < this.ct) { + gtmUser.unsetTpaRequests(); + } + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/tasks/TaskManager.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/tasks/TaskManager.java new file mode 100644 index 0000000..8b419e5 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/tasks/TaskManager.java @@ -0,0 +1,24 @@ +package net.grandtheftmc.gtm.tasks; + +import net.grandtheftmc.gtm.GTM; + +public class TaskManager { + private PlayerTask playerTask; + private GlassesTask glassesTask; + + public TaskManager() { + this.startTasks(); + } + + private void startTasks() { + this.playerTask = new PlayerTask(); + this.playerTask.runTaskTimer(GTM.getInstance(), 20, 20); + this.glassesTask = new GlassesTask(); + this.glassesTask.runTaskTimer(GTM.getInstance(), 100, 100); + } + + public PlayerTask getPlayerTask() { + return this.playerTask; + } + +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/trashcan/TrashCanManager.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/trashcan/TrashCanManager.java new file mode 100644 index 0000000..b00d1ec --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/trashcan/TrashCanManager.java @@ -0,0 +1,322 @@ +package net.grandtheftmc.gtm.trashcan; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.UUID; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +import org.apache.commons.lang3.StringUtils; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.block.BlockState; +import org.bukkit.block.Dropper; +import org.bukkit.entity.HumanEntity; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryCloseEvent; +import org.bukkit.event.inventory.InventoryType; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.scheduler.BukkitRunnable; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.GTMUtils; +import net.grandtheftmc.gtm.items.GameItem; +import net.grandtheftmc.gtm.users.GTMUser; +import net.grandtheftmc.gtm.users.GTMUserManager; + +public class TrashCanManager implements Listener { + + public static void openTrashCan(Player player) { + + GTMUser gtmUser = GTMUserManager.getInstance().getUser(player.getUniqueId()).orElse(null); + + if (gtmUser == null){ + player.sendMessage(Lang.TRASH_CAN.f("&7Error opening trash can! Please rejoin!")); + return; + } + + if (gtmUser.isArrested()) { + player.sendMessage(Lang.JAIL.f("&7You can't sell items in jail!")); + return; + } + + Inventory inv = Bukkit.createInventory(null, 54, Utils.f("&8&lTrash Can")); + int[] paneSlots = new int[] { 9, 10, 11, 12, 13, 14, 15, 16, 17, 27, 28, 29, 30, 31, 32, 33, 34, 35, 45, 46, 47, + 48, 49, 50, 51, 52 }; + for (int i : paneSlots) + inv.setItem(i, Utils.createItem(Material.STAINED_GLASS_PANE, 7, "&a")); + // inv.setItem(52, Utils.createItem(Material.DIAMOND, "&6&lSell Entire Inventory", "&7Total Value: &a$&l" + getTotalInvPrice(player))); + inv.setItem(53, Utils.createItem(Material.PAPER, "&a&lConfirm", "&7Total Reward: &a$&l0")); + inv.setItem(44, Utils.createItem(Material.REDSTONE, "&c&lCancel", "&7Return all items!")); + player.openInventory(inv); + } + + private void m(int i) { + this.m(String.valueOf(i)); + } + + private void m(String s) { + Bukkit.broadcastMessage(s); + } + + @EventHandler + public void onInteract(PlayerInteractEvent e) { + if (e.getAction() != Action.RIGHT_CLICK_BLOCK) return; + BlockState block = e.getClickedBlock().getState(); + if (block.getType() != Material.DROPPER) return; + if (!e.getPlayer().getWorld().getName().equalsIgnoreCase("spawn")) { + e.setCancelled(false); + return; + } + + if (e.getPlayer().isSneaking()) return; + Dropper dropper = (Dropper) block; + e.setCancelled(true); + + if (Objects.equals("Trash Can", ChatColor.stripColor(dropper.getInventory().getTitle()))) + openTrashCan(e.getPlayer()); + } + + @EventHandler + public void onClick(InventoryClickEvent e) { + Player player = (Player) e.getWhoClicked(); + Inventory inv = e.getView().getTopInventory(); + if (inv == null || e.getClickedInventory() == null || inv.getType() != InventoryType.CHEST + || !"Trash Can".equalsIgnoreCase(ChatColor.stripColor(inv.getTitle()))) + return; + + ItemStack c = e.getCurrentItem(); + if (c != null) { + switch (c.getType()) { + case PAPER: + e.setCancelled(true); + player.closeInventory(); + return; + + case DIAMOND: + case REDSTONE: + e.setCancelled(true); + List<ItemStack> items = itemSlots.stream().mapToInt(i -> i).mapToObj(inv::getItem).filter(Objects::nonNull).collect(Collectors.toList()); + + for (int i : itemSlots) { + inv.setItem(i, null); + inv.setItem(i + 9, Utils.createItem(Material.STAINED_GLASS_PANE, 7, "&a")); + } + + player.closeInventory(); + Utils.giveItems(player, items.toArray(new ItemStack[items.size()])); + + if (c.getType() == Material.REDSTONE) + player.sendMessage(Utils.f(Lang.TRASH_CAN + "&7The items have been added back to your inventory.")); + + if (c.getType() == Material.DIAMOND) + player.sendMessage(Utils.f(" &c&lERROR&8&l> &cThis feature is currently disabled, try again soon!")); + + return; + + /* + case DIAMOND://TODO, Fix sell-all, It causes alot of lag! + e.setCancelled(true); +// double price = getTotalInvPrice(player); +// if (price == 0) return; + player.closeInventory(); +// GTMUser user = GTM.getUserManager().getLoadedUser(player.getUniqueId()); +// user.setSellInvConfirmAmt(price); +// MenuManager.openMenu(player, "sellinvconfirm"); + + //TODO, Remove message after fixing lag. + player.sendMessage(Utils.f(" &c&lERROR&8&l> &cThis feature is currently disabled, try again soon!")); + return; + */ + + default: + break; + } + } + + if (Objects.equals(e.getClickedInventory(), inv) && !itemSlots.contains(e.getSlot())) { + e.setCancelled(true); + player.updateInventory(); + return; + } + UUID uuid = player.getUniqueId(); + new BukkitRunnable() { + @Override + public void run() { + Player p = Bukkit.getPlayer(uuid); + if (p == null) + return; + Inventory inv = p.getOpenInventory().getTopInventory(); + if (inv != null && Objects.equals("Trash Can", ChatColor.stripColor(inv.getTitle()))) { + TrashCanManager.this.updateTrashCan(inv); + } + + } + }.runTaskLater(GTM.getInstance(), 1); + } + + + private double calculateItem(Inventory inv, int slot, boolean updateInventory) { + ItemStack item = inv.getItem(slot); + if (item == null) { + if(updateInventory) + inv.setItem(slot + 9, Utils.createItem(Material.STAINED_GLASS_PANE, 7, "&a")); + return 0; + } + if(item.getType() == Material.SKULL_ITEM) { + return 0; + } + GameItem gameItem = GTMUtils.isArmor(item.getType()) ? GTM.getItemManager().getSellableItem(item, true) : GTM.getItemManager().getSellableItem(item); + + if (gameItem == null) { + gameItem = GTM.getItemManager().getSellableItem(item, 8); + if (gameItem == null) { + if(updateInventory) + inv.setItem(slot + 9, Utils.createItem(Material.STAINED_GLASS_PANE, 7, "&a")); + return 0; + } + } + + if (gameItem.getType() == GameItem.ItemType.DRUG || gameItem.getType() == GameItem.ItemType.VEHICLE) { + if(updateInventory) + inv.setItem(slot + 9, Utils.createItem(Material.STAINED_GLASS_PANE, 7, "&a")); + return 0; + } + + if(!gameItem.canSell()) { + if(updateInventory) + inv.setItem(slot + 9, Utils.createItem(Material.STAINED_GLASS_PANE, 14, "&c&lReward: &c$&l0")); + return 0; + } + + double price = gameItem.getSellPrice(); + if(GTMUtils.isArmor(item.getType())) { + price *= (double)(item.getType().getMaxDurability() - item.getDurability()) / item.getType().getMaxDurability(); + } + + price *= item.getAmount(); + DecimalFormat df = new DecimalFormat("#.##"); + if(updateInventory) + inv.setItem(slot + 9, Utils.createItem(Material.STAINED_GLASS_PANE, 13,"&a&lReward: &a$&l" + df.format(price))); + return price; + } + + private double updateTrashCan(Inventory inv) { + Optional<HumanEntity> viewer = inv.getViewers().stream().findFirst(); + Player player = (Player) viewer.get(); + List<Integer> itemSlots = Arrays.asList(0, 1, 2, 3, 4, 5, 6, 7, 8, 18, 19, 20, 21, 22, 23, 24, 25, 26, 36, 37, 38, 39, 40, 41, 42, 43); + double totalPrice = itemSlots.stream().mapToDouble(i -> this.calculateItem(inv, i, true)).sum(); + //inv.setItem(52, Utils.createItem(Material.DIAMOND, "&6&lSell Entire Inventory", "&7Total Value: &a$&l" + getTotalInvPrice(player))); + DecimalFormat df = new DecimalFormat("#.##"); + + inv.setItem(53, Utils.createItem(Material.PAPER, "&a&lConfirm", "&7Total Reward: &a$&l" + df.format(totalPrice))); + inv.setItem(44, Utils.createItem(Material.REDSTONE, "&c&lCancel", "&7Return all items!")); + return totalPrice; + } + + public double getTotalInvPrice(Player player) { + double invPrice = IntStream.range(0, 36).mapToDouble(i -> this.calculateItem(player.getInventory(), i, false)).sum(); + for(int i =9; i<36; i++){ + ItemStack is = player.getInventory().getItem(i); + if(is==null || is.getType()==Material.AIR) + continue; + GameItem item = GTM.getItemManager().getSellableItem(is); + if(item==null || item.getType()== GameItem.ItemType.DRUG) + continue; + invPrice += item.getSellPrice() * is.getAmount() ; + } + return invPrice; + } + + private final List<Integer> itemSlots = Arrays.asList(0, 1, 2, 3, 4, 5, 6, 7, 8, 18, 19, 20, 21, 22, 23, 24, 25, 26, 36, 37, 38, 39, 40, 41, 42, 43); + public Collection<GameItem> getSellableItems(Inventory inv) { + Collection<GameItem> items = new ArrayList<>(); + + for (int slot : itemSlots) { + if (inv.getItem(slot) != null) { + ItemStack itemStack = inv.getItem(slot); + GameItem gameItem = GTM.getItemManager().getSellableItem(itemStack, GTMUtils.isArmor(itemStack.getType())); + if (gameItem == null || gameItem.getType()== GameItem.ItemType.DRUG) continue; + gameItem.getItem().setAmount(itemStack.getAmount()); + items.add(gameItem); + } + } + + //I think this causes selling problems. +// itemSlots.stream().forEachOrdered(i -> { +// if (inv.getItem(i) != null) { +// ItemStack itemStack = inv.getItem(i); +// GameItem gameItem = GTM.getItemManager().getSellableItem(itemStack, GTMUtils.isArmor(itemStack.getType())); +// if (gameItem == null || gameItem.getType()== GameItem.ItemType.DRUG) return; +// gameItem.getItem().setAmount(itemStack.getAmount()); +// items.add(gameItem); +// } +// }); + + return items; + } + + @EventHandler + public void onClose(InventoryCloseEvent e) { + + // grab event variables + Player player = (Player) e.getPlayer(); + Inventory inv = e.getInventory(); + + // skip improper menu/inventories + if (e.getInventory().getType() != InventoryType.CHEST || !"Trash Can".equalsIgnoreCase(ChatColor.stripColor(inv.getTitle()))){ + return; + } + + GTMUser user = GTMUserManager.getInstance().getUser(player.getUniqueId()).orElse(null); + if (user == null){ + player.sendMessage(Lang.TRASH_CAN.f("&7Error selling contents in trash can! Please rejoin!")); + return; + } + + Collection<GameItem> sellableItems = getSellableItems(inv); + double totalPrice = this.updateTrashCan(inv); + + if (!sellableItems.isEmpty()) { + Collection<String> items = new ArrayList<>(); + sellableItems.forEach(gameItem -> items.add(gameItem.getName())); + + String itemsSold = StringUtils.join(items, ", "); + + GTMUtils.log("trashcan", player.getName() + " sold the following for $" + totalPrice + + ": " + itemsSold); + } + + /*for (ItemStack itemStack : inv.getStorageContents()) { + if (itemStack == null) continue; + if (!itemStack.hasItemMeta()) continue; + if (itemStack.getItemMeta().getDisplayName() == null) continue; + Optional<DrugItem> drugItem = ((DrugService) GTM.getDrugManager().getService()).getDrugItem(itemStack.getItemMeta().getDisplayName()); + if (drugItem.isPresent()) { + Optional<DrugDealerItem> drugDealerItem = DrugDealerItem.byDrugItem(drugItem.get()); + if (!drugDealerItem.isPresent()) continue; + drugDealerItem.get().setStockRemaining(drugDealerItem.get().getStockRemaining() + 1); + } + }*/ + + if (totalPrice > 0) { + user.addMoney(totalPrice); + GTMUtils.updateBoard(player, user); + player.sendMessage(Utils.f(Lang.MONEY_ADD.toString() + Math.round(totalPrice))); + } + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/ChatAction.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/ChatAction.java new file mode 100644 index 0000000..93f7fe4 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/ChatAction.java @@ -0,0 +1,19 @@ +package net.grandtheftmc.gtm.users; + +/** + * Created by Timothy Lampen on 2017-10-18. + */ +public enum ChatAction { + BRIBING, + BIDDING_HEAD, + PICKING_BOUNTY, + PICKING_BOUNTY_TARGET, + BANK_DEPOSITING, + BANK_WITHDRAWING, + BANK_TRANSFERRING, + BUYING_LOTTERY_TICKETS, + GANG_CHAT_ACTION, + SANTA_NAUGHTY_LIST, + CONFIRM_TRANSFER, + CONFIRM_TRANSFER_2 +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/CheatCode.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/CheatCode.java new file mode 100644 index 0000000..f253c04 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/CheatCode.java @@ -0,0 +1,235 @@ +package net.grandtheftmc.gtm.users; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Optional; + +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.util.C; +import net.grandtheftmc.core.util.State; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.items.ItemManager; + +/** + * Created by Timothy Lampen on 8/21/2017. + */ +public enum CheatCode { + + KATANA(UserRank.ADMIN, Utils.createItem(Material.DIAMOND_SWORD, (short)421, "KATANA", "&7Chop off heads with this masterful weapon!", "&7Delay: &e&l3 days."), true, false, "katana_cc", null), + SNEAKY(UserRank.ADMIN, Utils.createItem(Material.GLASS_BOTTLE, "SNEAKY", "&7Gain invisibility for the duration of your teleport protection "), true, true, null, null), + FEED(UserRank.SPONSOR, Utils.createItem(Material.COOKED_BEEF, "FEED", "&7Have access to the feed command."), true, false, null, null), + FUCKME(UserRank.ADMIN, Utils.createItem(Material.SAPLING, 1, "FUCKME", "&7Gives a dildo so you can go fuck yourself.", "&7Delay: &e&l3 days."), true, false, "fuckme_cc", null), + WINGSUIT(UserRank.ADMIN, Utils.createItem(Material.ELYTRA, "WINGSUIT", "&7Recieve a single wingsuit and 5 stacks of jetpack fuel.", "&7Delay: &e&l3 days."), true, false, "wingsuit_cc", null), + FIXHAND(UserRank.VIP, Utils.createItem(Material.ANVIL, "FIXHAND", "&7Gain access to the /fix hand command."), true, false, null, null), + FIXALL(UserRank.SUPREME, Utils.createItem(Material.CHEST, "FIXALL", "&7Have the ability to do /fix all."), true, false, null, null), + STACK(UserRank.SUPREME, Utils.createItem(Material.GOLD_INGOT, "STACK", "&7Be able to do the /stack command."), true, false, null, "&7This cheatcode comes with the " + UserRank.SUPREME.getColoredNameBold() + "&7 rank."), + DRUGS(UserRank.ADMIN, Utils.createItem(Material.FLINT_AND_STEEL, 5, "DRUGS", "&7Recieve the drugs kit.", "&7Delay: &e&l3 days&7."), true, false, "drugs_cc", null), + QUICKSELL(UserRank.SUPREME, Utils.createItem(Material.DISPENSER, "QUICK SELL", "&7Have the ability to sell items", "&7without having to travel back", "&7to spawn!"), true, false, null, "&7To unlock this cheatcode, purchase the &c&lSUPREME&7 rank or the &2&lQUICKSELL&7 cheatcode at &a&lstore.grandtheftmc.net&7!"), + ; + + private final ItemStack displayItem; + private final boolean toggleable, defaultToggle; + private final UserRank rank; + private String cooldownID, lockedLore; + + CheatCode(UserRank rank, ItemStack displayItem, boolean defaultToggle, boolean toggleable, String cooldownID, String lockedLore) { + ItemMeta im = displayItem.getItemMeta(); + im.setUnbreakable(true); + im.addItemFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE); + displayItem.setItemMeta(im); + this.defaultToggle = defaultToggle; + this.lockedLore = Utils.f(lockedLore == null ? "&7You can purchase this cheatcode at &a&l" + Core.getSettings().getStoreLink() + "&7!" : lockedLore); + this.displayItem = displayItem; + this.toggleable = toggleable; + this.rank = rank; + this.cooldownID = cooldownID; + } + + public UserRank getMinmumRank() { + return rank; + } + + public State getDefaultState() { + return this.defaultToggle ? State.ON : State.OFF; + } + + public String getLockedLore() { + return this.lockedLore; + } + + public boolean isToggleable() { + return toggleable; + } + + public ItemStack getDisplayItem(User user, State state) { + ItemStack is = displayItem.clone(); + ItemMeta im = is.getItemMeta(); + im.setUnbreakable(true); + im.addItemFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE); + if (state == State.LOCKED) { + ArrayList<String> lore = new ArrayList<>(im.getLore()); + lore.add(" "); + lore.add(Utils.f("&4&lLOCKED")); + if (this.rank.isHigherThan(UserRank.DEFAULT) && !this.rank.isHigherThan(UserRank.YOUTUBER)) { + lore.add(Utils.f("&4&lUnlocked with rank: " + rank.getColoredNameBold())); + } + im.setDisplayName(Utils.f(getStateColor(state) + im.getDisplayName())); + im.setLore(lore); + is.setItemMeta(im); + return is; + } + + if (user != null && this.cooldownID != null) { + boolean stillOnCooldown = user.isOnCooldown(this.cooldownID); + state = stillOnCooldown ? State.OFF : State.ON; + List<String> lore = new ArrayList<>(im.getLore()); + if (stillOnCooldown) + lore.set(1, Utils.f("&7Delay: &e&l" + Utils.timeInSecondsToText(user.getCooldownTimeLeft(this.cooldownID), C.RED, C.RED, C.GRAY) + "&7.")); + } + im.setDisplayName(Utils.f(getStateColor(state) + im.getDisplayName())); + is.setItemMeta(im); + return is; + } + + public static String seralizeCheatCodes(HashMap<CheatCode, CheatCodeState> codes) { + StringBuilder sb = new StringBuilder(); + codes.forEach((codea, statea) -> sb.append(codea.toString()).append("#").append(statea.getState()).append("#").append(statea.isPurchased()).append("-")); + sb.deleteCharAt(sb.length() - 1); + return sb.toString(); + } + + public void activate(User coreUser, GTMUser user, Player player, CheatCodeState cState) { + if (user.isArrested()) { + player.sendMessage(Lang.CHEAT_CODES.f("&7You cannot use this cheat code while you are arrested!")); + return; + } + if (cState.getState() == State.LOCKED) { + player.sendMessage(Lang.CHEAT_CODES.f("&7You haven't unlocked this cheat code yet!")); + return; + } + if (!this.isToggleable()) {//the non-toggleables + if (coreUser.isOnCooldown(this.cooldownID)) { +// player.sendMessage(Lang.CHEAT_CODES.f("&7You must wait &a" + coreUser.getFormattedCooldown(this.cooldownID, true) + " &7before using this cheatcode again!")); + player.sendMessage(Lang.CHEAT_CODES.f("&7You must wait &a" + Utils.timeInSecondsToText(coreUser.getCooldownTimeLeft(this.cooldownID), C.RED, C.RED, C.GRAY) + " &7before using this cheatcode again!")); + return; + } + switch (this) { + case KATANA: + + if (!GTM.getSettings().isGlobalCheatcodes()){ + player.sendMessage(ChatColor.RED + "Cheatcodes are temporarily disabled."); + return; + } + + if (Utils.giveItems(player, GTM.getItemManager().getItem("katana").getItem())) { + player.sendMessage(Utils.f(Lang.CHEAT_CODES + "&cYour inventory was full so some items were dropped on the ground!")); + } + coreUser.addCooldown(this.cooldownID, 60 * 60 * 24 * 3, true, true); + player.sendMessage(Lang.CHEAT_CODES.f("&7You have used your katana cheat code!")); + break; + case FUCKME: + + if (!GTM.getSettings().isGlobalCheatcodes()){ + player.sendMessage(ChatColor.RED + "Cheatcodes are temporarily disabled."); + return; + } + + if (Utils.giveItems(player, GTM.getItemManager().getItem("dildo").getItem())) { + player.sendMessage(Utils.f(Lang.CHEAT_CODES + "&cYour inventory was full so some items were dropped on the ground!")); + } + coreUser.addCooldown(this.cooldownID, 60 * 60 * 24 * 3, true, true); + player.sendMessage(Lang.CHEAT_CODES.f("&7You have used your fuck me cheat code!")); + break; + case WINGSUIT: { + + if (!GTM.getSettings().isGlobalCheatcodes()){ + player.sendMessage(ChatColor.RED + "Cheatcodes are temporarily disabled."); + return; + } + + ItemStack[] items = new ItemStack[]{GTM.getItemManager().getItem("wingsuit").getItem(), GTM.getItemManager().getItem("jetpackfuel").getItem(64), GTM.getItemManager().getItem("jetpackfuel").getItem(64), GTM.getItemManager().getItem("jetpackfuel").getItem(64), GTM.getItemManager().getItem("jetpackfuel").getItem(64), GTM.getItemManager().getItem("jetpackfuel").getItem(64)}; + if (Utils.giveItems(player, items)) { + player.sendMessage(Utils.f(Lang.CHEAT_CODES + "&cYour inventory was full so some items were dropped on the ground!")); + } + coreUser.addCooldown(this.cooldownID, 60 * 60 * 24 * 3, true, true); + player.sendMessage(Lang.CHEAT_CODES.f("&7You have used your wingsuit cheat code!")); + break; + } + case DRUGS: + + if (!GTM.getSettings().isGlobalCheatcodes()){ + player.sendMessage(ChatColor.RED + "Cheatcodes are temporarily disabled."); + return; + } + + ItemManager im = GTM.getItemManager(); + if (im.giveKit(player, coreUser, user, "drugs")) { + coreUser.addCooldown(this.cooldownID, 60 * 60 * 24 * 3, true, true); + player.sendMessage(Lang.CHEAT_CODES.f("&7You have used your drugs cheat code!")); + } + break; + case STACK: + + if (!GTM.getSettings().isGlobalCheatcodes()){ + player.sendMessage(ChatColor.RED + "Cheatcodes are temporarily disabled."); + return; + } + + player.chat("/stack"); + break; + case FIXALL: + player.chat("/fix all"); + break; + case FIXHAND: + player.chat("/fix hand"); + break; + case FEED: + player.chat("/feed"); + break; + case QUICKSELL: + player.closeInventory(); + player.chat("/qsell"); + break; + } + } else { + player.sendMessage(Lang.CHEAT_CODES.f("&7You turned " + (cState.getState() == State.OFF ? "&a&lon &7" : "&c&loff &7") + (this.toString().toLowerCase().replace("_", " ")))); + } + user.setCheatCodeState(this, new CheatCodeState(cState.getState() == State.ON && this.isToggleable() ? State.OFF : State.ON, cState.isPurchased())); + } + + private String getStateColor(State state) { + switch (state) { + case ON: + return "&a&l"; + case OFF: + return "&c&l"; + case LOCKED: + return "&4&l"; + } + return null; + } + + public static Optional<CheatCode> getCheatCodeFromItemStack(ItemStack stack) { + if (stack == null) + return Optional.empty(); + return Arrays.stream(CheatCode.getCodes()).filter(code -> code.getDisplayItem(null, State.ON).getType() == stack.getType() && code.getDisplayItem(null, State.ON).getDurability() == stack.getDurability()).findFirst(); + } + + private static CheatCode[] sisterCodes = new CheatCode[]{CheatCode.KATANA, CheatCode.SNEAKY, CheatCode.FEED, CheatCode.WINGSUIT, CheatCode.FIXHAND, CheatCode.FIXALL, CheatCode.STACK, CheatCode.QUICKSELL}; + public static CheatCode[] getCodes() { + return Core.getSettings().isSister() ? sisterCodes : values(); + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/CheatCodeState.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/CheatCodeState.java new file mode 100644 index 0000000..9855e6e --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/CheatCodeState.java @@ -0,0 +1,26 @@ +package net.grandtheftmc.gtm.users; + + +import net.grandtheftmc.core.util.State; + +/** + * Created by Timothy Lampen on 2017-08-26. + */ +public class CheatCodeState { + + private final State state; + private final boolean purchased; + + public CheatCodeState(State state, boolean purchased) { + this.state = state; + this.purchased = purchased; + } + + public State getState() { + return state; + } + + public boolean isPurchased() { + return purchased; + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/CompassTarget.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/CompassTarget.java new file mode 100644 index 0000000..8981b8b --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/CompassTarget.java @@ -0,0 +1,152 @@ +package net.grandtheftmc.gtm.users; + +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.gtm.GTMUtils; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; + +import java.util.Objects; +import java.util.Random; +import java.util.UUID; + +public class CompassTarget { + + private TargetType type; + + private UUID targetPlayer; + private UUID targetEntity; + private Location location; + + public CompassTarget() { + this.type = TargetType.NONE; + } + + public CompassTarget(Player player) { + this.type = TargetType.PLAYER; + this.targetPlayer = player.getUniqueId(); + } + + public CompassTarget(Entity entity) { + this.type = TargetType.ENTITY; + this.targetEntity = entity.getUniqueId(); + } + + public CompassTarget(Location position) { + this.type = TargetType.LOCATION; + this.location = position; + } + + public CompassTarget(PersonalVehicle vehicle) { + this.type = TargetType.VEHICLE; + this.targetEntity = vehicle.getEntityUUID(); + } + + public TargetType getType() { + return this.type; + } + + public void setType(TargetType type) { + this.type = type; + } + + public UUID getTargetPlayerUUID() { + return this.targetPlayer; + } + + public Player getTargetPlayer() { + if (this.targetPlayer == null) + return null; + return Bukkit.getPlayer(this.targetPlayer); + } + + public void setTargetPlayer(UUID targetPlayer) { + this.targetPlayer = targetPlayer; + this.type = TargetType.PLAYER; + } + + public UUID getTargetEntityUUID() { + return this.targetEntity; + } + + public Entity getTargetEntity() { + if (this.targetEntity == null) + return null; + for (World w : Bukkit.getWorlds()) + for (Entity e : w.getEntities()) + if (Objects.equals(e.getUniqueId(), this.targetEntity)) + return e; + this.targetEntity = null; + return null; + } + + public void setTargetEntity(UUID targetEntity) { + this.targetEntity = targetEntity; + this.type = TargetType.ENTITY; + } + + public void setTargetEntity(Entity targetEntity) { + this.targetEntity = targetEntity == null ? null : targetEntity.getUniqueId(); + this.type = TargetType.ENTITY; + } + + public Location getLocation() { + return this.location; + } + + public void setLocation(Location location) { + this.location = location; + } + + public Location getExactLocation(Player player) { + Location loc = null; + switch (this.type) { + case LOCATION: + loc = this.location; + break; + case ENTITY: + Entity entity = this.getTargetEntity(); + if (entity != null) + loc = entity.getLocation(); + break; + case PLAYER: + Player targetPlayer = this.getTargetPlayer(); + if (targetPlayer != null) + loc = targetPlayer.getLocation(); + break; + case VEHICLE: + Entity vehicle = this.getTargetEntity(); + if (vehicle != null) + loc = vehicle.getLocation(); + break; + default: + break; + } + if (loc == null || !Objects.equals(player.getLocation().getWorld(), loc.getWorld())) { + return player.getLocation(); + } + return loc; + } + + public Location getApproximateLocation(Player player, int radius) { + Random rand = Utils.getRandom(); + return this.getExactLocation(player).add(rand.nextInt(radius << 1) - radius, 0, rand.nextInt(radius << 1) - radius); + } + + public Location getApproximateLocation(Player player, User u) { + return this.getApproximateLocation(player, GTMUtils.getCompassRadius(u.getUserRank())); + } + + + public enum TargetType { + NONE, + PLAYER, + ENTITY, + LOCATION, + VEHICLE + } + +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/GTMRank.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/GTMRank.java new file mode 100644 index 0000000..6497835 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/GTMRank.java @@ -0,0 +1,157 @@ +package net.grandtheftmc.gtm.users; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Objects; + +import org.bukkit.ChatColor; +import org.bukkit.Material; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.util.Utils; + +public enum GTMRank { + + HOBO(0, 0, 0, 0, Material.CHEST), + CRIMINAL(10000, 0, 0, 5.0, Material.WOOD_SWORD), + HOMIE(25000, 0, 0, 10.0, Material.LEATHER_HELMET), + THUG(50000, 1, 0, 15.0, Material.WOOD_HOE), + GANGSTER(75000, 1, 2, 20.0, Material.IRON_HELMET), + MUGGER(100000, 2, 3, 25.0, Material.WOOD_SWORD), + HUNTER(250000, 2, 5, 30.0, Material.WOOD_AXE), + DEALER(500000, 2, 5, 35.0, Material.SUGAR), + PIMP(1000000, 2, 10, 40.0, Material.IRON_SWORD), + MOBSTER(2000000, 3, 10, 45.0, Material.IRON_SPADE), + GODFATHER(5000000, 3, 20, 50.0, Material.DIAMOND_CHESTPLATE); + + private final int price; + private final List<String> perms; + private final Material material; + private final int houses; + private final int gangMembers; + /** The additional tax applied to this rank */ + private final double serverTax; + + GTMRank(int price, int houses, int gangMembers, double serverTax, Material material, String... perms) { + this.price = price; + this.perms = Arrays.asList(perms); + this.houses = houses; + this.material = material; + this.gangMembers = gangMembers; + this.serverTax = serverTax; + } + + public List<String> getAllPerms() { + List<String> permissions = new ArrayList<>(); + for (GTMRank uc : getGTMRanks()) { + permissions.addAll(uc.perms); + if (uc == this) + return permissions; + } + return permissions; + } + + private List<String> getPerms() { + return this.perms; + } + + public int getPrice() { + return this.price; + } + + public String getName() { + if (Core.getSettings().isSister()) { + if (this == DEALER) + return "HUSTLER"; + if (this == PIMP) + return "UNDERBOSS"; + } + return this.toString(); + } + + public ChatColor getColor() { + return this == GTMRank.HOBO ? ChatColor.GRAY : ChatColor.YELLOW; + } + + public String getColoredName() { + return Utils.f(this.getColor() + this.getName() + "&r"); + } + + public String getColoredNameBold() { + return Utils.f(this.getColor() + "&l" + this.getName() + "&r"); + } + + public GTMRank getNext() { + String rankName = this.getName(); + if ("GODFATHER".equalsIgnoreCase(rankName)) + return null; + int go = 0; + + GTMRank rank = null; + for (GTMRank r : getGTMRanks()) + if (go == 0) { + if (Objects.equals(r.getName(), rankName)) { + go = 1; + } + } + else if (go == 1) { + rank = r; + break; + } + return rank; + } + + public static GTMRank[] getGTMRanks() { + return GTMRank.class.getEnumConstants(); + } + + public static GTMRank fromString(String string) { + return Arrays.stream(GTMRank.getGTMRanks()).filter(uc -> uc.getName().equalsIgnoreCase(string) || uc.name().equalsIgnoreCase(string)).findFirst().orElse(GTMRank.HOBO); + } + + public Material getMaterial() { + return this.material; + } + + public static GTMRank getRankOrNull(String name) { + if (name == null) + return null; + return Arrays.stream(getGTMRanks()).filter(r -> r.getName().equalsIgnoreCase(name) || r.name().equalsIgnoreCase(name)).findFirst().orElse(null); + } + + public boolean isHigherThan(GTMRank rank) { + if (rank == null) + return false; + for (GTMRank r : getGTMRanks()) + if (r == this) + return false; + else if (r == rank) + return true; + return false; + } + + public int getHouses() { + return this.houses; + } + + public int getGangMembers() { + return this.gangMembers; + } + + /** + * Get the additional server tax applied for this GTMRank. + * <p> + * If this player dies, some of their money drops, which can be picked up. + * This variable increases or decreases the amount of money they drop. + * + * Note: 5.0 represents 5% increase. + * </p> + * + * @return The additional server tax applied for this GTMRank. + */ + public double getServerTax() { + return serverTax; + } + +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/GTMTag.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/GTMTag.java new file mode 100644 index 0000000..0b56bfd --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/GTMTag.java @@ -0,0 +1,21 @@ +package net.grandtheftmc.gtm.users; + +import org.bukkit.ChatColor; + +/** + * Created by Timothy Lampen on 2017-12-16. + * + * @deprecated - unused due to net.grandtheftmc.core.users.eventtag.EventTag. + */ +public enum GTMTag { + FESTIVE("&b&lFestive"), + XMAS("&2&lXMAS"), + SNOWMAN("&r&lSnowman"), + SANTA("&c&lSanta"), + HOHOHO("&c&lH&2&lo&c&lH&2&lo&c&lH&2&lo"); + + private final String disp; + GTMTag(String disp) { + this.disp = ChatColor.translateAlternateColorCodes('&', disp); + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/GTMUser.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/GTMUser.java new file mode 100644 index 0000000..3cdc332 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/GTMUser.java @@ -0,0 +1,1832 @@ +package net.grandtheftmc.gtm.users; + +import java.sql.Blob; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.UUID; +import java.util.logging.Level; +import java.util.stream.Collectors; + +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.scheduler.BukkitRunnable; + +import com.j0ach1mmall3.wastedguns.api.events.ranged.AmmoUpdateEvent; +import com.j0ach1mmall3.wastedvehicles.api.VehicleProperties; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.achivements.Achievement; +import net.grandtheftmc.core.currency.Currency; +import net.grandtheftmc.core.currency.Purse; +import net.grandtheftmc.core.database.BaseDatabase; +import net.grandtheftmc.core.database.dao.CurrencyDAO; +import net.grandtheftmc.core.database.mutex.Mutexable; +import net.grandtheftmc.core.nametags.NametagManager; +import net.grandtheftmc.core.users.Pref; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserDAO; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.util.NMSUtil; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.core.util.State; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.util.debug.Log; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.GTMUtils; +import net.grandtheftmc.gtm.database.dao.AmmoDAO; +import net.grandtheftmc.gtm.events.WantedLevelChangeEvent; +import net.grandtheftmc.gtm.gang.member.GangMember; +import net.grandtheftmc.gtm.gang.member.GangRole; +import net.grandtheftmc.gtm.items.AmmoType; +import net.grandtheftmc.gtm.items.ArmorUpgrade; +import net.grandtheftmc.gtm.items.GameItem; +import net.grandtheftmc.gtm.items.Head; +import net.grandtheftmc.gtm.items.Kit; +import net.grandtheftmc.gtm.utils.Stats; +import net.grandtheftmc.gtm.weapon.skins.WeaponSkinDAO; +import net.grandtheftmc.guns.weapon.Weapon; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.md_5.bungee.api.chat.ClickEvent; +import net.md_5.bungee.api.chat.ComponentBuilder; + +public class GTMUser extends Mutexable { + + /** The uuid of the user */ + private final UUID uuid; + /** The name of the user */ + private final String name; + private final Map<AmmoType, Integer> ammo = new HashMap<>(); + private final List<PersonalVehicle> vehicles = new ArrayList<>(); + private double sellInvConfirmAmt = 0; + private ChatAction currentChatAction = null; + private Object currentChatValue = null; + private final int[] wantedLevels = new int[] { 0, 1, 2, 4, 10, 25 }; + private GTMRank rank; + private int kills; + private boolean dead = false; + private int transferID = -1; + private int deaths; + // private double money; + private double bank; + private final HashMap<CheatCode, CheatCodeState> cheatCodes = new HashMap<>(); + private int killCounter; + private int killStreak; + // private int permits; + private JobMode jobMode = JobMode.CRIMINAL; + private long lastJobMode = -1; + private ItemStack[] backpackContents; + private HashMap<String, Long> kitExpiries = new HashMap<>(); + private String gang; + private GangRole gangRole; + private Long playtime; + private Long jointime; + private CompassTarget compassTarget; + private long lastCompassRefresh; + private PersonalVehicle personalVehicle; + private int vehicleTaskId = -1; + private int vehicleTimer; + private PersonalVehicle nextVehicle; + private boolean sendAway; + private String actionVehicle; + private int taxiTaskId = -1; + private TaxiTarget taxiTarget; + private int taxiPrice; + private int taxiTimer; + private UUID tpaRequestUUID; + private UUID tpaRequestSentUUID; + private boolean tpaHere; + private long lastTpaRequest = -1; + private long lastTeleport = -1; + private UUID bountyUUID; + private String bountyName; + private int bountyAmount = -1; + private List<String> gangInvites = new ArrayList<>(); + private String viewingGang; + private GangMember viewingGangMember; + private boolean gangChat; + private boolean addingLootCrate; + private boolean removingLootCrate; + private boolean checkingLootCrate; + private boolean restockingLootCrate; + private int jailTimer; + private UUID jailCop; + private String jailCopName; + private double bribe; + private long lastBackupRequest; + private ArmorUpgrade buyingArmorUpgrade; + private boolean kicked; + private long lastCopSpawn; + private long lastTag = -1; + private long lastJetpackCancel; + private long enableJetpackTime; + private String biddingHead; + private long biddingExpiry; + private boolean backpackOpen; + private Map<Short, List<Short>> unlockedWeaponSkins = new HashMap<>(); + private Map<Short, Short> equippedWeaponSkins = new HashMap<>(); + + // TODO test remove for debugging + public Map<String, Integer> methodCallCounter = new HashMap<>(); + + /** + * Holds currencies + */ + private Purse purse; + + /** + * Construct a new GTMUser. + * + * @param uuid - the uuid of the user + * @param name - the name of the user + */ + public GTMUser(UUID uuid, String name) { + this.uuid = uuid; + this.name = name; + this.purse = new Purse(); + + // initialize all currencies in purse + for (Currency curr : Currency.values()) { + purse.registerCurrency(curr); + } + + // initialize all ammo types + for (AmmoType type : AmmoType.getTypes()) { + if (!type.isInInventory()) { + this.ammo.put(type, 0); + } + } + + // TODO debug remove + // seeing how many method calls are being invoked per player + methodCallCounter.put("saveBackpackContents", 0); + methodCallCounter.put("saveBackpackContentsSync", 0); + methodCallCounter.put("setRank", 0); + methodCallCounter.put("setKills", 0); + methodCallCounter.put("addKills", 0); + methodCallCounter.put("setDeaths", 0); + methodCallCounter.put("addDeaths", 0); + // methodCallCounter.put("setMoney", 0); + // methodCallCounter.put("addMoney", 0); + // methodCallCounter.put("takeMoney", 0); + methodCallCounter.put("setBank", 0); + methodCallCounter.put("addBank", 0); + methodCallCounter.put("takeBank", 0); + methodCallCounter.put("depositToBank", 0); + methodCallCounter.put("withdrawFromBank", 0); + methodCallCounter.put("setPlaytime", 0); + // methodCallCounter.put("setKillCounter", 0); + // methodCallCounter.put("addKillCounter", 0); + // methodCallCounter.put("takeKillCounter", 0); + // methodCallCounter.put("setKillStreak", 0); + // methodCallCounter.put("addKillStreak", 0); + // methodCallCounter.put("takeKillStreak", 0); + // methodCallCounter.put("addPermits", 0); + // methodCallCounter.put("takePermits", 0); + // methodCallCounter.put("setPermits", 0); + // methodCallCounter.put("setJobMode", 0); + // methodCallCounter.put("setLastJobMode", 0); + // methodCallCounter.put("setAmmo", 0); + // methodCallCounter.put("addAmmo", 0); + // methodCallCounter.put("resetJail", 0); + // methodCallCounter.put("giveVehiclePerm", 0); + // methodCallCounter.put("removeVehiclePerm", 0); + // methodCallCounter.put("setCheatCodeState", 0); + } + + /** + * Called when we need to load data pertaining to the user. + * + * @param conn - the database connection thread + * + * @return {@code true} if the data was loaded, {@code false} otherwise. + */ + public boolean onLoad(Connection conn) { + + // TODO test remove + long start = System.currentTimeMillis(); + + String query = "SELECT * FROM " + Core.name() + " WHERE uuid=UNHEX(?) LIMIT 1;"; + + try (PreparedStatement statement = conn.prepareStatement(query)) { + statement.setString(1, getUUID().toString().replaceAll("-", "")); + + try (ResultSet result = statement.executeQuery()) { + if (result.next()) { + this.rank = GTMRank.fromString(result.getString("rank")); + this.kills = result.getInt("kills"); + this.deaths = result.getInt("deaths"); + this.bank = result.getDouble("bank"); + this.killCounter = result.getInt("killCounter"); + this.killStreak = result.getInt("killStreak"); + this.jobMode = JobMode.getMode(result.getString("jobMode")); + this.lastJobMode = result.getLong("lastJobMode"); + this.backpackContents = GTMUtils.fromBase64(result.getString("backpackContents")); + this.kitExpiries = new HashMap<>(); + this.jailTimer = result.getInt("jailTimer"); + try { + this.jailCop = result.getString("jailCop") == null ? null : UUID.fromString(result.getString("jailCop")); + } + catch (Exception ignored) { + } + this.playtime = (long) result.getInt("playtime"); + this.jailCopName = result.getString("jailCopName"); + String s = result.getString("kitExpiries"); + this.kitExpiries = new HashMap<>(); + if (s != null) { + try { + String[] expiries = s.split(","); + for (String e : expiries) { + String[] a = e.split(":"); + String kit = a[0]; + Kit k = GTM.getItemManager().getKit(kit); + if (kit == null || a.length < 2) + continue; + long expiry; + try { + expiry = Long.parseLong(a[1]); + } + catch (NumberFormatException ex) { + continue; + } + if (expiry > System.currentTimeMillis()) + this.kitExpiries.put(k.getName().toLowerCase(), expiry); + } + + } + catch (Exception e) { + GTM.getInstance().getLogger().log(Level.ALL, "Error while loading kitExpiries for player " + result.getString("name")); + e.printStackTrace(); + } + } + + for (VehicleProperties properties : GTM.getWastedVehicles().getBabies().getVehicleProperties()) { + if (result.getBoolean(properties.getIdentifier().toLowerCase())) { + PersonalVehicle v = new PersonalVehicle(properties.getIdentifier()); + this.vehicles.add(v); + String st = result.getString(properties.getIdentifier().toLowerCase() + ":info"); + if (st == null) + continue; + String[] a = st.split(":"); + if (a == null | a.length == 0) + continue; + v.setHealth(Double.parseDouble(a[0])); + } + } + + this.loadCheatCodes(conn, result); + } + } + } + catch (SQLException e) { + e.printStackTrace(); + } + + // load skins + this.unlockedWeaponSkins = WeaponSkinDAO.getUnlockedSkins(conn, this.uuid); + this.equippedWeaponSkins = WeaponSkinDAO.getEquippedSkins(conn, this.uuid); + + for (Currency curr : Currency.values()){ + switch(curr){ + case MONEY: + case PERMIT: + + // grab currency based off serverKey + int amount = CurrencyDAO.getCurrency(conn, curr.getServerKey(), getUUID(), curr); + // set in the purse + getPurse().set(curr, amount); + + // TODO remove debug messages + Core.log("[GTMUser] uuid=" + uuid.toString() + ", curr=" + curr.getId() + ", amount=" + getPurse().getBalance(curr)); + break; + } + } + + // load ammo + Map<AmmoType, Integer> ammoMap = AmmoDAO.getAllAmmo(conn, getUUID(), Core.name().toUpperCase()); + + // populate local variable + // as each k/v is init to 0 + ammoMap.forEach((k, v) -> { + // TODO remove + Core.log("[GTMUser][AmmoTest] uuid=" + uuid.toString() + "Type=" + k + " was found, amt=" + v); + ammo.put(k, v); + }); + + // TODO test remove + Log.info("[GTMUser][TEST]", "Finished onLoad() for " + getName() + " in " + (System.currentTimeMillis() - start) + " msecs."); + + return true; + } + + /** + * Call when we need to save data pertaining to the user. + * + * @param conn - the database connection thread + * + * @return {@code true} if the data was saved, {@code false} otherwise. + */ + public boolean onSave(Connection conn) { + + // save all the currencies + for (Currency curr : getPurse().getCurrencies().keySet()) { + + // only save + switch(curr){ + case MONEY: + case PERMIT: + int balance = getPurse().getBalance(curr); + + // TODO test remove + Core.log("[GTMUser][CurrencyTest] Saving user uuid=" + getUUID().toString() + ", currency=: " + curr.getId() + ", amt=" + balance); + CurrencyDAO.saveCurrency(conn, curr.getServerKey(), getUUID(), curr, balance); + break; + } + } + + // save all the ammo in user_ammo + AmmoDAO.saveAllAmmo(conn, getUUID(), Core.name().toUpperCase(), getAmmo()); + + // TODO debug statements please remove + StringBuilder builder = new StringBuilder(); + for (AmmoType at : ammo.keySet()) { + builder.append(at.name().toLowerCase() + "="); + builder.append(ammo.get(at) + ","); + } + Core.log("[GTMUser][AmmoTest] Saving user ammo of: " + builder.toString()); + + // TODO debug statements please remove + StringBuilder methodBuilder = new StringBuilder(); + methodCallCounter.forEach((k, v) -> { + methodBuilder.append(k + "=" + v + ", "); + }); + Core.log("[GTMUser][MethodCounter] User " + uuid.toString() + " call counter: " + methodBuilder.toString()); + + return true; + } + + public void dataCheck() { + + // TODO remove + Log.info("[GTMUser][TEST]", "Core name=" + getUUID().toString().replaceAll("-", "")); + + // TODO note: inline queries like this are subject to SQL injection + BaseDatabase.runCustomQuery("INSERT INTO " + Core.name() + "(`uuid`,`name`,`bank`) VALUES(UNHEX('" + getUUID().toString().replaceAll("-", "") + "'),'" + name + "','5000') ON DUPLICATE KEY UPDATE `name`='" + name + "';"); + + // TODO this shouldn't be how we set duplicate names + + // TODO note: inline queries like this are subject to SQL injection + BaseDatabase.runCustomQuery("UPDATE " + Core.name() + " SET `name`='ERROR' WHERE `name`='" + name + "' AND uuid != UNHEX('" + getUUID().toString().replaceAll("-", "") + "');"); + } + + /** + * Get the UUID of the user. + * + * @return The UUID of the user. + */ + public UUID getUUID() { + return this.uuid; + } + + /** + * Get the name of the user. + * + * @return The name of the user. + */ + public String getName() { + return this.name; + } + + public HashMap<CheatCode, CheatCodeState> getCheatCodes() { + return cheatCodes; + } + + private void loadCheatCodes(Connection conn, ResultSet rs) throws SQLException { + + if (rs.getBlob("cheatcodes") != null) { + Blob b = rs.getBlob("cheatcodes"); + String cheatCodesBlob = new String(b.getBytes(1, (int) b.length())); + for (String serializedCheatCode : cheatCodesBlob.split("-")) { + String[] split = serializedCheatCode.split("#"); + try { + this.cheatCodes.put(CheatCode.valueOf(split[0]), new CheatCodeState(State.valueOf(split[1]), Boolean.valueOf(split[2]))); + } + catch (Exception e) { + } + } + } + + // we get rank this way b/c user might not be loaded in container yet + UserRank highestRank = UserDAO.getHighestRank(conn, getUUID()); + + // TOOD user might not be loaded yet + for (CheatCode code : CheatCode.getCodes()) { + if (highestRank == code.getMinmumRank() || highestRank.isHigherThan(code.getMinmumRank())) { + if (!this.cheatCodes.containsKey(code) || this.cheatCodes.get(code).getState() == State.LOCKED) { + this.cheatCodes.put(code, new CheatCodeState(code.getDefaultState(), false)); + } + } + else { + if (this.cheatCodes.containsKey(code) && !this.cheatCodes.get(code).isPurchased()) { + this.cheatCodes.put(code, new CheatCodeState(State.LOCKED, false)); + } + } + } + + for (CheatCode code : CheatCode.getCodes()) + if (!this.cheatCodes.containsKey(code)) + this.cheatCodes.put(code, new CheatCodeState(State.LOCKED, false)); + + if (Core.getPermsManager().hasPerm(this.uuid, "kit.drugs")) { + this.cheatCodes.put(CheatCode.DRUGS, new CheatCodeState(CheatCode.DRUGS.getDefaultState(), true)); + Core.getPermsManager().removePerm(this.uuid, "kits.drugs"); + } + } + + public void saveBackpackContents() { + Bukkit.getScheduler().runTaskAsynchronously(GTM.getInstance(), () -> { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE " + Core.name() + " SET `backpackContents`=? WHERE `uuid`=UNHEX(?);")) { + statement.setString(1, this.backpackContents == null ? null : GTMUtils.toBase64(this.backpackContents)); + statement.setString(2, getUUID().toString().replaceAll("-", "")); + statement.execute(); + } + } + catch (SQLException e) { + e.printStackTrace(); + } + + }); + + // TODO remove test counter + methodCallCounter.put("saveBackpackContents", methodCallCounter.get("saveBackpackContents") + 1); + } + + public void saveBackpackContentsSync(Connection connection) { +// try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE " + Core.name() + " SET `backpackContents`=? WHERE `uuid`=UNHEX(?);")) { + statement.setString(1, this.backpackContents == null ? null : GTMUtils.toBase64(this.backpackContents)); + statement.setString(2, getUUID().toString().replaceAll("-", "")); + statement.execute(); + } + catch (SQLException e) { + e.printStackTrace(); + } + + // TODO remove test counter + methodCallCounter.put("saveBackpackContentsSync", methodCallCounter.get("saveBackpackContentsSync") + 1); + } + + public GTMRank getRank() { + return this.rank; + } + + public boolean isRank(GTMRank rank) { + if (rank == null || this.rank == null) + return false; + return this.rank == rank || this.rank.isHigherThan(rank); + } + + public void setTransferID(int transferID) { + this.transferID = transferID; + } + + public int getTransferID() { + return transferID; + } + + public void setRank(GTMRank r, Player player, User u) { + this.rank = r; + + ServerUtil.runTaskAsync(() -> GTMUserDAO.setRank(this.uuid, r)); + + NametagManager.updateNametag(Bukkit.getPlayer(this.uuid)); + u.setPerms(player); + + // TODO remove test counter + methodCallCounter.put("setRank", methodCallCounter.get("setRank") + 1); + } + + public void rankup(Player player, User u) { + GTMRank nextRank = this.rank.getNext(); + if (nextRank == null) { + player.sendMessage(Utils.f(Lang.RANKUP + "&7You can't rank up any more!")); + return; + } + int price = nextRank.getPrice(); + if (!this.hasMoney(price)) { + player.sendMessage(Utils.f(Lang.RANKUP + "&7You don't have the &c$&l" + price + "&7 required to rank up!")); + return; + } + this.takeMoney(price); + this.setRank(nextRank, player, u); + GTMUtils.updateBoard(player, u, this); + Utils.broadcastExcept(player, Lang.RANKUP + "&7" + u.getColoredName(player) + "&7 ranked up to " + nextRank.getColoredNameBold() + "&7!"); + player.sendMessage(Lang.MONEY_TAKE.toString() + price); + player.sendMessage(Utils.f(Lang.RANKUP + "&7You ranked up to " + nextRank.getColoredNameBold() + "&7!")); + } + + public int getKills() { + return this.kills; + } + + public void setKills(int i) { + this.kills = i; + + ServerUtil.runTaskAsync(() -> GTMUserDAO.setKills(this.uuid, this.kills)); + + // TODO remove test counter + methodCallCounter.put("setKills", methodCallCounter.get("setKills") + 1); + } + + public void addKills(int i) { + this.kills += i; + + ServerUtil.runTaskAsync(() -> GTMUserDAO.setKills(this.uuid, this.kills)); + + // TODO remove test counter + methodCallCounter.put("addKills", methodCallCounter.get("addKills") + 1); + } + + public int getDeaths() { + return this.deaths; + } + + public void setDeaths(int i) { + this.deaths = i; + + ServerUtil.runTaskAsync(() -> GTMUserDAO.setDeaths(this.uuid, this.deaths)); + + // TODO remove test counter + methodCallCounter.put("setDeaths", methodCallCounter.get("setDeaths") + 1); + } + + public void addDeaths(int i) { + this.deaths += i; + + ServerUtil.runTaskAsync(() -> GTMUserDAO.setDeaths(this.uuid, this.deaths)); + + // TODO remove test counter + methodCallCounter.put("addDeaths", methodCallCounter.get("addDeaths") + 1); + } + + /** + * Get the purse that holds the currency for this player. + * + * @return The purse that holds the currency for this player. + */ + public Purse getPurse() { + return purse; + } + + public double getMoney() { + if (getPurse().getBalance(Currency.MONEY) < 0) { + getPurse().set(Currency.MONEY, 0); + } + + return getPurse().getBalance(Currency.MONEY); + } + + public void setMoney(double amount) { + getPurse().set(Currency.MONEY, (int) amount); + + GTMUtils.updateBoard(Bukkit.getPlayer(this.uuid), this); + } + + public void addMoney(double amount) { + if (amount < 0) + return; + + getPurse().set(Currency.MONEY, getPurse().getBalance(Currency.MONEY) + (int) amount); + } + + public void takeMoney(double amount) { + getPurse().set(Currency.MONEY, getPurse().getBalance(Currency.MONEY) - (int) amount); + } + + public boolean hasMoney(double amount) { + return getPurse().getBalance(Currency.MONEY) >= amount; + } + + public double getBank() { + if (this.bank < 0) + this.setBank(0); + return this.bank; + } + + public void setBank(double amount) { + double old = this.bank; + this.bank = amount; + + ServerUtil.runTaskAsync(() -> { + GTMUserDAO.setBank(this.uuid, this.bank); + String name = Bukkit.getPlayer(this.uuid) == null ? "ERROR" : Bukkit.getPlayer(this.uuid).getName(); + Utils.insertLog(this.uuid, name, "BANK", "SET", old + " -> " + this.bank, amount, 0); + }); + + // TODO remove test counter + methodCallCounter.put("setBank", methodCallCounter.get("setBank") + 1); + } + + public void addBank(double amount) { + double old = this.bank; + this.bank += amount; + + ServerUtil.runTaskAsync(() -> { + GTMUserDAO.setBank(this.uuid, this.bank); + String name = Bukkit.getPlayer(this.uuid) == null ? "ERROR" : Bukkit.getPlayer(this.uuid).getName(); + Utils.insertLog(this.uuid, name, "BANK", "ADD", old + " -> " + this.bank, amount, 0); + }); + + // TODO remove test counter + methodCallCounter.put("addBank", methodCallCounter.get("addBank") + 1); + } + + public void takeBank(double amount) { + double old = this.bank; + this.bank -= amount; + + ServerUtil.runTaskAsync(() -> { + GTMUserDAO.setBank(this.uuid, this.bank); + String name = Bukkit.getPlayer(this.uuid) == null ? "ERROR" : Bukkit.getPlayer(this.uuid).getName(); + Utils.insertLog(this.uuid, name, "BANK", "TAKE", old + " -> " + this.bank, amount, 0); + }); + + // TODO remove test counter + methodCallCounter.put("takeBank", methodCallCounter.get("takeBank") + 1); + } + + public void depositToBank(double amount) { + double old = this.bank; + this.bank += amount; + + getPurse().set(Currency.MONEY, getPurse().getBalance(Currency.MONEY) - (int) amount); + // TODO stephen + ServerUtil.runTaskAsync(() -> { + try (Connection conn = BaseDatabase.getInstance().getConnection()) { + CurrencyDAO.saveCurrency(conn, Currency.MONEY.getServerKey(), this.uuid, Currency.MONEY, getPurse().getBalance(Currency.MONEY)); + } + catch (Exception e) { + e.printStackTrace(); + } + }); + + ServerUtil.runTaskAsync(() -> { + GTMUserDAO.setBank(this.uuid, this.bank); + String name = Bukkit.getPlayer(this.uuid) == null ? "ERROR" : Bukkit.getPlayer(this.uuid).getName(); + Utils.insertLog(this.uuid, name, "BANK", "DEPOSIT", old + " -> " + this.bank, amount, 0); + }); + + // TODO remove test counter + methodCallCounter.put("depositToBank", methodCallCounter.get("depositToBank") + 1); + } + + public void withdrawFromBank(double amount) { + double old = this.bank; + this.bank -= amount; + + getPurse().set(Currency.MONEY, getPurse().getBalance(Currency.MONEY) + (int) amount); + // TODO stephen + ServerUtil.runTaskAsync(() -> { + try (Connection conn = BaseDatabase.getInstance().getConnection()) { + CurrencyDAO.saveCurrency(conn, Currency.MONEY.getServerKey(), this.uuid, Currency.MONEY, getPurse().getBalance(Currency.MONEY)); + } + catch (Exception e) { + e.printStackTrace(); + } + }); + + ServerUtil.runTaskAsync(() -> { + GTMUserDAO.setBank(this.uuid, this.bank); + String name = Bukkit.getPlayer(this.uuid) == null ? "ERROR" : Bukkit.getPlayer(this.uuid).getName(); + Utils.insertLog(this.uuid, name, "BANK", "WITHDRAW", old + " -> " + this.bank, amount, 0); + }); + + // TODO remove test counter + methodCallCounter.put("withdrawFromBank", methodCallCounter.get("withdrawFromBank") + 1); + } + + public boolean hasBank(double i) { + return this.bank >= i; + } + + public int getWantedLevel() { + int wantedLevel = 0; + for (int i = 0; i < this.wantedLevels.length; i++) + if (this.killCounter >= this.wantedLevels[i]) + wantedLevel = i; + return wantedLevel; + } + + public Long getPlaytime() { + return this.playtime; + } + + public void setPlaytime(Long playtime) { + this.playtime = playtime; + + ServerUtil.runTaskAsync(() -> GTMUserDAO.setPlaytime(this.uuid, this.playtime)); + + // TODO remove test counter + methodCallCounter.put("setPlaytime", methodCallCounter.get("setPlaytime") + 1); + } + + public Long getJoinTime() { + return this.jointime; + } + + public void setJointime(Long jointime) { + this.jointime = jointime; + } + + public int getKillCounter() { + return this.killCounter; + } + + public void setKillCounter(int i) { + int wantedLevel = this.getWantedLevel(); + this.killCounter = i; + + ServerUtil.runTaskAsync(() -> GTMUserDAO.setKillCounter(this.uuid, this.killCounter)); + + Player player = Bukkit.getPlayer(this.uuid); + int wantedLevelAfter = this.getWantedLevel(); + if (wantedLevel != wantedLevelAfter) + Bukkit.getPluginManager().callEvent(new WantedLevelChangeEvent(player, this, wantedLevelAfter)); + } + + public void addKillCounter(int i) { + int wantedLevel = this.getWantedLevel(); + this.killCounter += i; + + ServerUtil.runTaskAsync(() -> GTMUserDAO.setKillCounter(this.uuid, this.killCounter)); + + Player player = Bukkit.getPlayer(this.uuid); + int wantedLevelAfter = this.getWantedLevel(); + if (wantedLevel != wantedLevelAfter) + Bukkit.getPluginManager().callEvent(new WantedLevelChangeEvent(player, this, wantedLevelAfter)); + } + + public void takeKillCounter(int i) { + int wantedLevel = this.getWantedLevel(); + this.killCounter -= i; + + ServerUtil.runTaskAsync(() -> GTMUserDAO.setKillCounter(this.uuid, this.killCounter)); + + Player player = Bukkit.getPlayer(this.uuid); + int wantedLevelAfter = this.getWantedLevel(); + if (wantedLevel != wantedLevelAfter) + Bukkit.getPluginManager().callEvent(new WantedLevelChangeEvent(player, this, wantedLevelAfter)); + } + + public int getKillStreak() { + return this.killStreak; + } + + public void setKillStreak(int i) { + this.killStreak = i; + ServerUtil.runTaskAsync(() -> GTMUserDAO.setKillstreak(this.uuid, this.killStreak)); + } + + public void addKillStreak(int i) { + this.killStreak += i; + ServerUtil.runTaskAsync(() -> GTMUserDAO.setKillstreak(this.uuid, this.killStreak)); + } + + public void takeKillStreak(int i) { + this.killStreak -= i; + ServerUtil.runTaskAsync(() -> GTMUserDAO.setKillstreak(this.uuid, this.killStreak)); + } + + public void addPermits(int amount) { + getPurse().set(Currency.PERMIT, getPurse().getBalance(Currency.PERMIT) + amount); + } + + public void takePermits(int amount) { + getPurse().set(Currency.PERMIT, getPurse().getBalance(Currency.PERMIT) - amount); + } + + public int getPermits() { + return getPurse().getBalance(Currency.PERMIT); + } + + public void setPermits(int amount) { + getPurse().set(Currency.PERMIT, amount); + } + + public boolean hasPermits(int amount) { + return getPurse().getBalance(Currency.PERMIT) >= amount; + } + + public JobMode getJobMode() { + return this.jobMode == null ? JobMode.CRIMINAL : this.jobMode; + } + + public void setJobMode(JobMode jobMode) { + if (jobMode == null || JobMode.CRIMINAL != jobMode) { + User u = Core.getUserManager().getLoadedUser(this.uuid); + u.setEquipedTag(null); + } + + this.jobMode = jobMode; + this.lastJobMode = System.currentTimeMillis(); +// Core.sql.updateAsyncLater( +// "update " + Core.name() + " set jobMode='" + this.jobMode + "', lastJobMode=" + this.lastJobMode + " where uuid='" + this.uuid + "';"); + ServerUtil.runTaskAsync(() -> BaseDatabase.runCustomQuery("update " + Core.name() + " set jobMode='" + this.jobMode + "', lastJobMode=" + this.lastJobMode + " where uuid=UNHEX('" + getUUID().toString().replaceAll("-", "") + "');")); + + if (Bukkit.getPlayer(this.uuid) != null) { + Player player = Bukkit.getPlayer(this.uuid); + player.setAllowFlight(false); + player.setFlying(false); + } + } + + public boolean canSwitchJobMode(UserRank rank) { + return this.lastJobMode <= 0 || this.lastJobMode + (GTMUtils.getJobModeDelay(rank) * 1000) < System.currentTimeMillis(); + } + + public long getTimeUntilJobModeSwitch(UserRank rank) { + return this.lastJobMode + (GTMUtils.getJobModeDelay(rank) * 1000L) - System.currentTimeMillis(); + } + + public long getLastJobMode() { + return this.lastJobMode; + } + + public void setLastJobMode(int lastJobMode) { + this.lastJobMode = lastJobMode; +// Core.sql.updateAsyncLater( +// "update " + Core.name() + " set jobMode='" + this.jobMode + "', lastJobMode=" + this.lastJobMode + " where uuid='" + this.uuid + "';"); + ServerUtil.runTaskAsync(() -> BaseDatabase.runCustomQuery("update " + Core.name() + " set jobMode='" + this.jobMode + "', lastJobMode=" + this.lastJobMode + " where uuid=UNHEX('" + getUUID().toString().replaceAll("-", "") + "');")); + } + + public boolean isInCombat() { + return (this.lastTag + 20000) > System.currentTimeMillis(); + } + + public Long getLastTag() { + return this.lastTag; + } + + public void setLastTag(long i) { + this.lastTag = i; + } + + public CompassTarget getCompassTarget() { + return this.compassTarget; + } + + public boolean hasCompassTarget() { + return this.compassTarget != null; + } + + public void setCompassTarget(Player player, User u, CompassTarget compassTarget) { + this.compassTarget = compassTarget; + this.refreshCompassTarget(player, u); + } + + public void unsetCompassTarget(Player player, User u) { + this.compassTarget = null; + player.setCompassTarget(player.getLocation()); + } + + public boolean refreshCompassTarget(Player player, User u) { + if (this.compassTarget == null) + return false; + if (this.getCompassTarget().getExactLocation(player).equals(player.getLocation())) { + this.unsetCompassTarget(player, Core.getUserManager().getLoadedUser(uuid)); + player.sendMessage(Utils.f(Lang.GPS + "&7Your GPS target was unset as you are in a different worlds compared to your target.")); + return false; + } + this.lastCompassRefresh = System.currentTimeMillis(); + player.setCompassTarget(this.compassTarget.getApproximateLocation(player, u)); + return true; + } + + public Long getLastCompassRefresh() { + return this.lastCompassRefresh; + } + + public void setLastCompassRefresh(Long lastCompassRefresh) { + this.lastCompassRefresh = lastCompassRefresh; + } + + public boolean isUsingTaxi() { + return this.taxiTarget != null; + } + + public TaxiTarget getTaxiTarget() { + return this.taxiTarget; + } + + public void setTaxiTarget(TaxiTarget t) { + this.taxiTarget = t; + } + + public void unsetTaxiTarget() { + this.taxiTarget = null; + this.taxiTaskId = -1; + this.taxiPrice = 0; + this.taxiTimer = 0; + } + + public int getTaxiPrice() { + return this.taxiPrice; + } + + public void setTaxiPrice(int i) { + this.taxiPrice = i; + } + + public int getTaxiTimer() { + return this.taxiTimer; + } + + public void setTaxiTimer(int i) { + this.taxiTimer = i; + } + + public UUID getTpaRequestUUID() { + return this.tpaRequestUUID; + } + + public void setTpaRequestUUID(UUID tpaRequestUUID) { + this.tpaRequestUUID = tpaRequestUUID; + this.lastTpaRequest = tpaRequestUUID == null ? -1 : System.currentTimeMillis(); + } + + public UUID getTpaRequestSentUUID() { + return this.tpaRequestSentUUID; + } + + public void setTpaRequestSentUUID(UUID uuid) { + this.tpaRequestSentUUID = uuid; + } + + public Long getLastTpaRequest() { + return this.lastTpaRequest; + } + + public void setLastTpaRequest(Long lastTpaRequest) { + this.lastTpaRequest = lastTpaRequest; + } + + public boolean hasTpaRequest() { + return !(this.lastTpaRequest > 0 && this.lastTpaRequest + 60000 < System.currentTimeMillis()); + } + + public boolean isTpaHere() { + return this.tpaHere; + } + + public void setTpaHere(boolean b) { + this.tpaHere = b; + } + + public void unsetTpaRequests() { + this.lastTpaRequest = -1L; + this.tpaRequestSentUUID = null; + this.tpaRequestUUID = null; + this.tpaHere = false; + } + + public UUID getBountyUUID() { + return this.bountyUUID; + } + + public void setBountyUUID(UUID bountyUUID) { + this.bountyUUID = bountyUUID; + } + + public String getBountyName() { + return this.bountyName; + } + + public void setBountyName(String bountyName) { + this.bountyName = bountyName; + } + + public ItemStack[] getBackpackContents() { + return this.backpackContents; + } + + public void setBackpackContents(ItemStack[] backpackContents) { + this.backpackContents = backpackContents; + this.saveBackpackContents(); + } + + public boolean canUseKit(String name) { + return !(this.kitExpiries.containsKey(name.toLowerCase()) && this.kitExpiries.get(name.toLowerCase()) > System.currentTimeMillis()); + } + + public long getKitExpiry(String name) { + return this.kitExpiries.containsKey(name.toLowerCase()) ? this.kitExpiries.get(name.toLowerCase()) : -1; + } + + public void setKitExpiry(String name, int delay) { // delay is IN SECONDS + this.kitExpiries.put(name.toLowerCase(), System.currentTimeMillis() + (delay * 1000)); + this.updateExpiries(); + } + + public Map<String, Long> getKitExpiries() { + return this.kitExpiries; + } + + public String getKitExpiriesString() { + String expiries = ""; + for (Map.Entry<String, Long> entry : this.kitExpiries.entrySet()) { + Long l = entry.getValue(); + if (l > System.currentTimeMillis()) + expiries += entry.getKey() + ':' + l + ','; + } + return expiries.endsWith(",") ? expiries.substring(0, expiries.length() - 1) : expiries; + } + + public void updateExpiries() { +// Core.sql.updateAsyncLater( +// "update " + Core.name() + " set kitExpiries='" + this.getKitExpiriesString() + "' where uuid='" + this.uuid + "';"); + ServerUtil.runTaskAsync(() -> BaseDatabase.runCustomQuery("update " + Core.name() + " set kitExpiries='" + this.getKitExpiriesString() + "' where uuid=UNHEX('" + getUUID().toString().replaceAll("-", "") + "');")); + } + + public long getLastCopSpawn() { + return this.lastCopSpawn; + } + + public void setLastCopSpawn(long lastCopSpawn) { + this.lastCopSpawn = lastCopSpawn; + } + + public double getKDR() { + return Utils.round(this.deaths == 0 ? this.kills : this.kills / (double) this.deaths); + } + + public boolean isAddingLootCrate() { + return this.addingLootCrate; + } + + public void setAddingLootCrate(boolean addingLootCrate) { + this.addingLootCrate = addingLootCrate; + } + + public boolean isRemovingLootCrate() { + return this.removingLootCrate; + } + + public void setRemovingLootCrate(boolean removingLootCrate) { + this.removingLootCrate = removingLootCrate; + } + + public boolean isCheckingLootCrate() { + return this.checkingLootCrate; + } + + public void setCheckingLootCrate(boolean checkingLootCrate) { + this.checkingLootCrate = checkingLootCrate; + } + + public boolean isRestockingLootCrate() { + return this.restockingLootCrate; + } + + public void setRestockingLootCrate(boolean restockingLootCrate) { + this.restockingLootCrate = restockingLootCrate; + } + + public Map<AmmoType, Integer> getAmmo() { + return this.ammo; + } + + public int getAmmoInInventory(Player player, AmmoType type) { + GameItem gameItem = type.getGameItem(); + if (gameItem == null || player == null) + return 0; + return Arrays.stream(player.getInventory().getContents()).filter(item -> item != null && item.isSimilar(gameItem.getItem())).mapToInt(ItemStack::getAmount).sum(); + } + + public int getAmmo(AmmoType type) { + if (type.isInInventory()) + return this.getAmmoInInventory(Bukkit.getPlayer(this.uuid), type); + else + return this.ammo.containsKey(type) ? this.ammo.get(type) : 0; + } + + public void setAmmoInInventory(Player player, AmmoType type, int amount) { + int ammo = this.getAmmoInInventory(Bukkit.getPlayer(this.uuid), type); + if (ammo > amount) + this.removeAmmoFromInventory(player, type, ammo - amount); + else if (ammo < amount) + this.addAmmoToInventory(player, type, amount - ammo); + this.updateAmmo(); + } + + public void setAmmo(AmmoType type, int amount) { + if (type.isInInventory()) { + this.setAmmoInInventory(Bukkit.getPlayer(this.uuid), type, amount); + return; + } + this.ammo.put(type, amount); + +// Core.sql.updateAsyncLater("update " + Core.name() + " set " + type.name() + '=' + i + " where uuid='" + this.uuid + "';"); +// ServerUtil.runTaskAsync(() -> BaseDatabase.runCustomQuery("update " + Core.name() + " set " + type.name() + '=' + amount + " where uuid='" + this.uuid + "';")); + + this.updateAmmo(); + } + + public void addAmmoToInventory(Player player, AmmoType type, int amount) { + GameItem gameItem = type.getGameItem(); + if (gameItem == null) + return; + ItemStack item = gameItem.getItem(); + item.setAmount(amount); + Utils.giveItems(player, item); + this.updateAmmo(); + } + + public void addAmmo(AmmoType type, int amount) { + if (type.isInInventory()) { + this.addAmmoToInventory(Bukkit.getPlayer(this.uuid), type, amount); + return; + } + this.ammo.put(type, this.ammo.get(type) + amount); + +// Core.sql.updateAsyncLater("update " + Core.name() + " set " + type.name() + '=' + type.name() + '+' + i +// + " where uuid='" + this.uuid + "';"); +// ServerUtil.runTaskAsync(() -> BaseDatabase.runCustomQuery("update " + Core.name() + " set " + type.name() + '=' + type.name() + '+' + amount + " where uuid='" + this.uuid + "';")); + + this.updateAmmo(); + } + + public void removeAmmoFromInventory(Player player, AmmoType type, int toRemove) { + GameItem gameItem = type.getGameItem(); + if (gameItem == null) + return; + Utils.takeItems(player, toRemove, gameItem.getItem()); + this.updateAmmo(); + } + + public void removeAmmo(AmmoType type, int toRemove) { + if (type.isInInventory()) { + this.removeAmmoFromInventory(Bukkit.getPlayer(this.uuid), type, toRemove); + return; + } + + this.ammo.put(type, this.ammo.get(type) >= toRemove ? this.ammo.get(type) - toRemove : 0); + + // NOTE: THIS IS CALLED EVERY RELOAD WHICH IS BAD! +// Core.sql.updateAsyncLater("update " + Core.name() + " set " + type.name() + '=' + type.name() + '-' + i +// + " where uuid='" + this.uuid + "';"); + // ServerUtil.runTaskAsync(() -> BaseDatabase.runCustomQuery("update " + + // Core.name() + " set " + type.name() + '=' + type.name() + '-' + i + " + // where uuid='" + this.uuid + "';")); + + this.updateAmmo(); + } + + public boolean hasAmmoInInventory(Player player, AmmoType type, int amount) { + return this.getAmmoInInventory(player, type) >= amount; + } + + public boolean hasAmmo(AmmoType type, int amount) { + if (type.isInInventory()) + return this.hasAmmoInInventory(Bukkit.getPlayer(this.uuid), type, amount); + return this.ammo.get(type) >= amount; + } + + public void updateAmmo() { + Bukkit.getPluginManager().callEvent(new AmmoUpdateEvent(Bukkit.getPlayer(this.uuid))); + } + + public void updateAmmoLater() { + new BukkitRunnable() { + @Override + public void run() { + Bukkit.getPluginManager().callEvent(new AmmoUpdateEvent(Bukkit.getPlayer(GTMUser.this.uuid))); + } + }.runTaskLater(GTM.getInstance(), 1); + + } + + public boolean isKicked() { + return this.kicked; + } + + public void setKicked(boolean kicked) { + this.kicked = kicked; + } + + public void jail(int jailTimer, Player cop) { + this.jailTimer = jailTimer; + this.jailCop = cop.getUniqueId(); + this.jailCopName = cop.getName(); + +// Core.sql.updateAsyncLater( +// "update " + Core.name() + " set jailTimer=" + this.jailTimer + ", jailCop='" + this.jailCop + "', jailCopName='" + this.jailCopName + "' where uuid='" + this.uuid + "';"); + ServerUtil.runTaskAsync(() -> BaseDatabase.runCustomQuery("update " + Core.name() + " set jailTimer=" + this.jailTimer + ", jailCop='" + this.jailCop + "', jailCopName='" + this.jailCopName + "' where uuid=UNHEX('" + getUUID().toString().replaceAll("-", "") + "');")); + } + + public boolean isArrested() { + return this.jailTimer >= 0; + } + + public int getJailTimer() { + return this.jailTimer; + } + + public void setJailTimer(int jailTimer) { + this.jailTimer = jailTimer; +// Core.sql.updateAsyncLater( +// "update " + Core.name() + " set jailTimer=" + jailTimer + " where uuid='" + this.uuid + "';"); + ServerUtil.runTaskAsync(() -> BaseDatabase.runCustomQuery("update " + Core.name() + " set jailTimer=" + jailTimer + " where uuid=UNHEX('" + getUUID().toString().replaceAll("-", "") + "');")); + } + + public UUID getJailCop() { + return this.jailCop; + } + + public void resetJail() { + this.jailTimer = -1; + this.jailCop = null; + this.jailCopName = null; + this.bribe = 0; +// Core.sql.updateAsyncLater( +// "update " + Core.name() + " set jailTimer=-1, jailCop=NULL, jailCopName=NULL where uuid='" + this.uuid + "';"); + ServerUtil.runTaskAsync(() -> BaseDatabase.runCustomQuery("update " + Core.name() + " set jailTimer=-1, jailCop=NULL, jailCopName=NULL where uuid=UNHEX('" + getUUID().toString().replaceAll("-", "") + "');")); + } + + public String getJailCopName() { + return this.jailCopName; + } + + public void updateTintHealth(Player player, User user) { + if (!user.getPref(Pref.TINT_HEALTH) || player.getHealth() >= player.getMaxHealth()) { +// new JLibPlayer(player).setWorldborderTint(0); + NMSUtil.setWorldBoarderTint(player, 0); + return; + } + UUID uuid = player.getUniqueId(); + new BukkitRunnable() { + @Override + public void run() { + Player player = Bukkit.getPlayer(uuid); + if (player != null) { + NMSUtil.setWorldBoarderTint(player, (int) ((player.getHealth() * 100) / player.getMaxHealth())); +// new JLibPlayer(player).setWorldborderTint(100 - (int) (player.getHealth() * 100 / player.getMaxHealth())); + } + } + }.runTaskLater(GTM.getInstance(), 1); + } + + public PersonalVehicle getPersonalVehicle() { + return this.personalVehicle; + } + + public void setPersonalVehicle(PersonalVehicle personalVehicle) { + this.personalVehicle = personalVehicle; + } + + public boolean hasPersonalVehicle() { + return this.personalVehicle != null; + } + + public List<PersonalVehicle> getVehicles() { + return this.vehicles; + } + + public boolean isDead() { + return dead; + } + + public void setDead(boolean dead) { + this.dead = dead; + } + + public List<VehicleProperties> getVehicleProperties() { + return this.vehicles.stream().filter(v -> v.getVehicleProperties() != null).map(PersonalVehicle::getVehicleProperties).collect(Collectors.toList()); + } + + public boolean hasVehicle(String vehicle) { + return this.vehicles.stream().anyMatch(v -> v.getVehicle().equalsIgnoreCase(vehicle)); + } + + public void giveVehiclePerm(Player player, VehicleProperties vehicle) { +// Core.sql.updateAsyncLater( +// "update " + Core.name() + " set `" + vehicle.getIdentifier().toLowerCase() + "`=true where uuid='" + this.uuid + "';"); + ServerUtil.runTaskAsync(() -> BaseDatabase.runCustomQuery("update " + Core.name() + " set `" + vehicle.getIdentifier().toLowerCase() + "`=true where uuid=UNHEX('" + getUUID().toString().replaceAll("-", "") + "');")); + + if (!this.hasVehicle(vehicle.getIdentifier())) + this.vehicles.add(new PersonalVehicle(vehicle.getIdentifier())); + } + + public void removeVehiclePerm(Player player, VehicleProperties vehicle) { +// Core.sql.updateAsyncLater( +// "update " + Core.name() + " set `" + vehicle.getIdentifier().toLowerCase() + "`=false where uuid='" + this.uuid + "';"); + ServerUtil.runTaskAsync(() -> BaseDatabase.runCustomQuery("update " + Core.name() + " set `" + vehicle.getIdentifier().toLowerCase() + "`=false where uuid=UNHEX('" + getUUID().toString().replaceAll("-", "") + "');")); + + if (this.personalVehicle != null && this.personalVehicle.getVehicle().equalsIgnoreCase(vehicle.getIdentifier())) + this.personalVehicle = null; + new ArrayList<>(this.vehicles).stream().filter(v -> v.getVehicle().equalsIgnoreCase(vehicle.getIdentifier())).forEach(this.vehicles::remove); + } + + public PersonalVehicle getPersonalVehicle(String s) { + if (this.personalVehicle != null && this.personalVehicle.getVehicle().equalsIgnoreCase(s)) + return this.personalVehicle; + return this.vehicles.stream().filter(v -> v.getVehicle().equalsIgnoreCase(s)).findFirst().orElse(null); + } + + public void setPersonalVehicle(Player player, User user, PersonalVehicle vehicle) { + if (this.personalVehicle != null && this.personalVehicle.onMap()) { + this.nextVehicle = vehicle; + this.personalVehicle.teleport(player, user, this, true); + return; + } + if (!this.vehicles.contains(vehicle)) { + player.sendMessage(Lang.VEHICLES.f("&7You do not own that vehicle!")); + return; + } + this.personalVehicle = vehicle; + this.nextVehicle = null; + player.sendMessage(Lang.VEHICLES.f("&7You set " + vehicle.getDisplayName() + "&7 as your personal vehicle!")); + this.personalVehicle.call(player, user, this); + } + + public boolean cancelVehicleTeleport() { + if (this.vehicleTaskId == -1) + return false; + Bukkit.getScheduler().cancelTask(this.vehicleTaskId); + this.nextVehicle = null; + this.sendAway = false; + this.vehicleTimer = -1; + return true; + } + + public int getVehicleTaskId() { + return this.vehicleTaskId; + } + + public void setVehicleTaskId(int vehicleTaskId) { + this.vehicleTaskId = vehicleTaskId; + } + + public int getVehicleTimer() { + return this.vehicleTimer; + } + + public void setVehicleTimer(int vehicleTimer) { + this.vehicleTimer = vehicleTimer; + } + + public PersonalVehicle getNextVehicle() { + return this.nextVehicle; + } + + public void setNextVehicle(PersonalVehicle nextVehicle) { + this.nextVehicle = nextVehicle; + } + + public boolean isSendAway() { + return this.sendAway; + } + + public void setSendAway(boolean sendAway) { + this.sendAway = sendAway; + } + + public String getActionVehicle() { + return this.actionVehicle; + } + + public void setActionVehicle(String actionVehicle) { + this.actionVehicle = actionVehicle; + } + + public long getLastTeleport() { + return this.lastTeleport; + } + + public void setLastTeleport(long lastTeleport) { + this.lastTeleport = lastTeleport; + } + + public void setLastTeleport() { + this.lastTeleport = System.currentTimeMillis(); + } + + public boolean hasTeleportProtection() { + return this.lastTeleport + 10000 > System.currentTimeMillis(); + } + + public long getTimeUntilTeleportProtectionExpires() { + return this.lastTeleport + 10000 - System.currentTimeMillis(); + } + + public ChatAction getCurrentChatAction() { + return this.currentChatAction; + } + + public long getBiddingExpiry() { + return this.biddingExpiry; + } + + public void setBiddingExpiry(long biddingExpiry) { + this.biddingExpiry = biddingExpiry; + } + + public Head getBiddingHead() { + Head head = GTM.getShopManager().getHead(this.biddingHead, this.biddingExpiry); + if (head == null) { + this.biddingHead = null; + this.biddingExpiry = -1; + } + return head; + } + + public CheatCodeState getCheatCodeState(CheatCode code) { + if (this.cheatCodes.containsKey(code)) + return this.cheatCodes.get(code); + this.cheatCodes.put(code, new CheatCodeState(State.LOCKED, false)); + return new CheatCodeState(State.LOCKED, false); + } + + public void setBribe(double bribe) { + this.bribe = bribe; + } + + public void setBountyAmount(int bountyAmount) { + this.bountyAmount = bountyAmount; + } + + public int getBountyAmount() { + return bountyAmount; + } + + public double getBribe() { + return this.bribe; + } + + /** + * @param code the enum cheatcode that you are setting + * @param state the state of the cheatcode (which can be gotten from new + * CheatCodeState) + * @apiNote this method immediately updates ALL the cheatcodes to the MySQL + * server. + */ + public void setCheatCodeState(CheatCode code, CheatCodeState state) { + this.cheatCodes.put(code, state); +// Core.sql.updateAsyncLater( +// "update " + Core.name() + " set cheatcodes='" + CheatCode.seralizeCheatCodes(this.cheatCodes) + "' where uuid='" + this.uuid + "';"); + ServerUtil.runTaskAsync(() -> BaseDatabase.runCustomQuery("update " + Core.name() + " set cheatcodes='" + CheatCode.seralizeCheatCodes(this.cheatCodes) + "' where uuid=UNHEX('" + getUUID().toString().replaceAll("-", "") + "');")); + } + + public void setBiddingHead(String biddingHead) { + this.biddingHead = biddingHead; + } + + public long getLastJetpackCancel() { + return this.lastJetpackCancel; + } + + public void setLastJetpackCancel(long lastJetpackCancel) { + this.lastJetpackCancel = lastJetpackCancel; + } + + public long getEnableJetpackTime() { + return enableJetpackTime; + } + + public void setEnableJetpackTime(long enableJetpackTime) { + this.enableJetpackTime = enableJetpackTime; + } + + public boolean canUseJetpack(){ + return System.currentTimeMillis()>this.enableJetpackTime; + } + + public void disableJetpack(){ + if(System.currentTimeMillis() + 10000 > this.enableJetpackTime)this.enableJetpackTime=System.currentTimeMillis() + 10000; + } + + public ArmorUpgrade getBuyingArmorUpgrade() { + return this.buyingArmorUpgrade; + } + + public void setBuyingArmorUpgrade(ArmorUpgrade buyingArmorUpgrade) { + this.buyingArmorUpgrade = buyingArmorUpgrade; + } + + public boolean getBackpackOpen() { + return this.backpackOpen; + } + + public void setBackpackOpen(boolean backpackOpen) { + this.backpackOpen = backpackOpen; + } + + public boolean hasRequestedBackup() { + Player player = Bukkit.getPlayer(uuid); + return this.lastBackupRequest + 60000 > System.currentTimeMillis(); + } + + public long getTimeUntilBackupRequestExpires() { + return 60000 + this.lastBackupRequest - System.currentTimeMillis(); + } + + public void checkBackupExpiration(Player player) { + if (this.lastBackupRequest > 0) { + if (this.lastBackupRequest + 60000 < System.currentTimeMillis()) { + this.lastBackupRequest = -1; + player.spigot().sendMessage(new ComponentBuilder(Lang.COP_MODE.s()).append("Your backup request has expired! Click to extend it: ").color(net.md_5.bungee.api.ChatColor.GRAY).append(" [ACCEPT] ").color(net.md_5.bungee.api.ChatColor.GREEN).bold(true).event(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/backup")).create()); + } + + } + } + + public void setLastBackupRequest(long l) { + this.lastBackupRequest = l; + } + + public void checkAchievements() { + User user = Core.getUserManager().getLoadedUser(getUUID()); + Player player = Bukkit.getPlayer(this.uuid); + if (!user.getUnlockedAchievements().contains(Achievement.Hobo)) + user.addAchievement(Achievement.Hobo); + if (!user.getUnlockedAchievements().contains(Achievement.CRIMINAL) && isRank(GTMRank.CRIMINAL)) + user.addAchievement(Achievement.CRIMINAL); + if (!user.getUnlockedAchievements().contains(Achievement.HOMIE) && isRank(GTMRank.HOMIE)) + user.addAchievement(Achievement.HOMIE); + if (!user.getUnlockedAchievements().contains(Achievement.THUG) && isRank(GTMRank.THUG)) + user.addAchievement(Achievement.THUG); + if (!user.getUnlockedAchievements().contains(Achievement.GANGSTER) && isRank(GTMRank.GANGSTER)) + user.addAchievement(Achievement.GANGSTER); + if (!user.getUnlockedAchievements().contains(Achievement.MUGGER) && isRank(GTMRank.MUGGER)) + user.addAchievement(Achievement.MUGGER); + if (!user.getUnlockedAchievements().contains(Achievement.HUNTER) && isRank(GTMRank.HUNTER)) + user.addAchievement(Achievement.HUNTER); + if (!user.getUnlockedAchievements().contains(Achievement.DEALER) && isRank(GTMRank.DEALER)) + user.addAchievement(Achievement.DEALER); + if (!user.getUnlockedAchievements().contains(Achievement.PIMP) && isRank(GTMRank.PIMP)) + user.addAchievement(Achievement.PIMP); + if (!user.getUnlockedAchievements().contains(Achievement.MOBSTER) && isRank(GTMRank.MOBSTER)) + user.addAchievement(Achievement.MOBSTER); + if (!user.getUnlockedAchievements().contains(Achievement.GODFATHER) && isRank(GTMRank.GODFATHER)) + user.addAchievement(Achievement.GODFATHER); + if (!user.getUnlockedAchievements().contains(Achievement.Psychopath) && getKills() >= 10000) + user.addAchievement(Achievement.Psychopath); + if (!user.getUnlockedAchievements().contains(Achievement.GTM_God) && Stats.getInstance().getHoursPlayedRaw(Bukkit.getPlayer(user.getUUID())) > 1000) + user.addAchievement(Achievement.GTM_God); + user.updateNameTag(Bukkit.getPlayer(user.getUUID())); + if (!user.getUnlockedAchievements().contains(Achievement.Witness)) { + Bukkit.getOnlinePlayers().forEach(target -> { + if (target.getUniqueId().toString().equals("0e4a6028-3d9a-4a2e-9797-eb1ddcb0aca9")) { + user.addAchievement(Achievement.Witness); + } + }); + } + } + + private int chatActionExpireRunnable = -1; + + /** + * @param action the ChatAction that the next thing the player says will be + * registered with. + * @param value if there is a 'second-level' the 'first-level' value should + * be inserted here. For exmaple if a player chose an amount to + * pay a player, then was asked to say the name of the player + * they were sending the money to, 'first-level' would be the + * amount, which would then run setCurrentChatAction(action, + * amount) where the amount is the amount that was chosen by the + * player. Then this amount would be passed to the 'second-level' + * where the player is paid. + */ + public void setCurrentChatAction(ChatAction action, Object value) { + Player player = Bukkit.getPlayer(this.uuid); + if (this.chatActionExpireRunnable != -1) + Bukkit.getScheduler().cancelTask(chatActionExpireRunnable); + + this.currentChatValue = value; + this.currentChatAction = action; + this.chatActionExpireRunnable = new BukkitRunnable() { + @Override + public void run() { + if (currentChatAction != null) { + if (player.isOnline()) + player.sendMessage(Lang.GTM.f("&7Your chat response for &a" + (action.toString().toLowerCase().replace("_", " ") + "&7 has &4expired&7."))); + clearCurrentChatAction(); + } + } + }.runTaskLater(GTM.getInstance(), 20 * 20).getTaskId(); + } + + /** + * @param value the value to reset the timer with. Using example from above + * if you were exiting out of the second-level because the string + * inputted wasn't a player, you would do + * resetCurrentChatActionTimer(amount) where amount is from the + * first-level so that value isn't erased. + * @apiNote this method basically gives the player another 20 seconds to + * answer the prompt before it expires. + */ + public void resetCurrentChatActionTimer(Object value) { + if (this.chatActionExpireRunnable != -1) { + Bukkit.getScheduler().cancelTask(chatActionExpireRunnable); + this.currentChatValue = value; + } + } + + /** + * @apiNote clears and resets the chat action + */ + public void clearCurrentChatAction() { + switch (this.currentChatAction) { + case BIDDING_HEAD: + biddingExpiry = -1; + biddingHead = null; + } + currentChatAction = null; + currentChatValue = null; + if (chatActionExpireRunnable != -1) + Bukkit.getScheduler().cancelTask(chatActionExpireRunnable); + } + + public Object getCurrentChatValue() { + return this.currentChatValue; + } + + public double getSellInvConfirmAmt() { + return sellInvConfirmAmt; + } + + public void setSellInvConfirmAmt(double sellInvConfirmAmt) { + this.sellInvConfirmAmt = sellInvConfirmAmt; + } + + /* + * public void figureOutSpawn() { Player player = Bukkit.getPlayer(uuid); + * String s = (String) + * Core.getUserManager().getLoadedUser(uuid).getPref(Pref.SPAWN_LOCATION); + * if(!Core.getUserManager().getLoadedUser(uuid).isRank(UserRank.PREMIUM) && + * !s.equals("spawn")){ + * Core.getUserManager().getLoadedUser(uuid).setPref(player, + * Pref.SPAWN_LOCATION, "spawn"); + * player.teleport(GTM.getWarpManager().getSpawn().getLocation()); return; } + * if (!s.equals("spawn")) { if (s.contains("warp")) { String name = + * s.split(":")[1]; if (GTM.getWarpManager().getWarp(name) == null) { + * player.sendMessage(Lang.PREFS.f( + * "&7Tried to teleport you to the warp with name: " + name + + * " but couldn't find the warp.")); } else + * player.teleport(GTM.getWarpManager().getWarp(name).getLocation()); } else + * if (Utils.isInteger(s.split(":")[1])) { int id = + * Integer.parseInt(s.split(":")[1]); if (s.contains("houseId")) { HouseUser + * houseUser = Houses.getUserManager().getLoadedUser(player.getUniqueId()); + * if (!houseUser.ownsHouse(id)) { player.sendMessage(Lang.PREFS.f( + * "&7Tried to teleport you to your house with id " + id + + * " but it seems you do not own it.")); + * player.teleport(GTM.getWarpManager().getSpawn().getLocation()); } else { + * houseUser.teleportInOrOutHouse(player, + * Houses.getHousesManager().getHouse(id)); } } else if + * (s.contains("premiumHouseId")) { HouseUser houseUser = + * Houses.getUserManager().getLoadedUser(player.getUniqueId()); if + * (houseUser.getPremiumHouse(id) == null) { + * player.sendMessage(Lang.PREFS.f( + * "&7Tried to teleport you to your premium house with id " + id + + * " but it seems you do not own it.")); + * player.teleport(GTM.getWarpManager().getSpawn().getLocation()); } else { + * houseUser.teleportInOrOutPremiumHouse(player, + * houseUser.getPremiumHouse(id)); } } } } else { + * player.teleport(GTM.getWarpManager().getSpawn().getLocation()); } } + */ + + public void lockWeaponSkin(Weapon<?> weapon, WeaponSkin skin) { + if (this.unlockedWeaponSkins.get(weapon.getUniqueIdentifier()) != null) { + this.unlockedWeaponSkins.get(weapon.getUniqueIdentifier()).remove((Object) (short) (skin.getIdentifier() - weapon.getWeaponIdentifier())); + + ServerUtil.runTaskAsync(() -> { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + WeaponSkinDAO.lockSkin(connection, this.uuid, weapon, skin); + } + catch (SQLException e) { + e.printStackTrace(); + } + }); + } + } + + public void unlockWeaponSkin(Weapon<?> weapon, WeaponSkin skin) { + if (this.unlockedWeaponSkins.get(weapon.getUniqueIdentifier()) == null) { + this.unlockedWeaponSkins.put(weapon.getUniqueIdentifier(), new ArrayList<Short>()); + } + + if (!this.hasSkinUnlocked(weapon, skin)) { + this.unlockedWeaponSkins.get(weapon.getUniqueIdentifier()).add((short) (skin.getIdentifier() - weapon.getWeaponIdentifier())); + + ServerUtil.runTaskAsync(() -> { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + WeaponSkinDAO.unlockSkin(connection, this.uuid, weapon, skin); + } + catch (SQLException e) { + e.printStackTrace(); + } + }); + } + } + + public void equipWeaponSkin(Weapon<?> weapon, WeaponSkin skin) { + short currentSkin = this.equippedWeaponSkins.containsKey(weapon.getUniqueIdentifier()) ? this.equippedWeaponSkins.get(weapon.getUniqueIdentifier()) : 0; + + ServerUtil.runTaskAsync(() -> { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + if (currentSkin != weapon.getWeaponIdentifier()) { + WeaponSkinDAO.disableSkin(connection, this.uuid, weapon, currentSkin); + } + + if (skin.getIdentifier() != weapon.getWeaponIdentifier()) { + WeaponSkinDAO.enableSkin(connection, this.uuid, weapon, (short) (skin.getIdentifier() - weapon.getWeaponIdentifier())); + } + } + catch (SQLException e) { + e.printStackTrace(); + } + }); + + this.equippedWeaponSkins.put(weapon.getUniqueIdentifier(), (short) (skin.getIdentifier() - weapon.getWeaponIdentifier())); + } + + public boolean hasSkinUnlocked(Weapon<?> weapon, WeaponSkin skin) { + if (this.getUnlockedWeaponSkins(weapon) != null) { + for (short skinID : this.getUnlockedWeaponSkins(weapon)) { + if (skinID == (short) (skin.getIdentifier() - weapon.getWeaponIdentifier())) { + return true; + } + } + } + + return false; + } + + public List<Short> getUnlockedWeaponSkins(Weapon<?> weapon) { + return this.unlockedWeaponSkins.get(weapon.getUniqueIdentifier()); + } + + public Map<Short, List<WeaponSkin>> getUnlockedWeaponSkins() { + Map<Short, List<WeaponSkin>> skins = new HashMap<Short, List<WeaponSkin>>(); + + for (short weaponID : this.unlockedWeaponSkins.keySet()) { + Optional<Weapon<?>> weaponOpt = GTM.getWastedGuns().getWeaponManager().getWeaponFromUniqueIdentifier(weaponID); + + if (weaponOpt.isPresent()) { + Weapon<?> weapon = weaponOpt.get(); + List<WeaponSkin> skinSubArray = new ArrayList<WeaponSkin>(); + + for (short skinID : this.unlockedWeaponSkins.get(weaponID)) { + skinSubArray.add(GTM.getWeaponSkinManager().getWeaponSkinFromIdentifier(weapon, skinID)); + } + + skins.put(weaponID, skinSubArray); + } + } + + return skins; + } + + public Map<Short, List<Short>> getRawUnlockedWeaponSkins() { + return this.unlockedWeaponSkins; + } + + public WeaponSkin getEquippedWeaponSkin(Weapon<?> weapon) { + if (equippedWeaponSkins != null) { + if (equippedWeaponSkins.containsKey(weapon.getUniqueIdentifier())) { + short weaponUnique = equippedWeaponSkins.get(weapon.getUniqueIdentifier()); + + return GTM.getWeaponSkinManager().getWeaponSkinFromIdentifier(weapon, weaponUnique); + } + } + + if (weapon.getWeaponSkins() != null) { + return weapon.getWeaponSkins()[0]; + } + + return null; + } + + public Map<Short, WeaponSkin> getEquippedWeaponSkins() { + Map<Short, WeaponSkin> skins = new HashMap<Short, WeaponSkin>(); + + for (short weaponID : this.equippedWeaponSkins.values()) { + Optional<Weapon<?>> weaponOpt = GTM.getWastedGuns().getWeaponManager().getWeaponFromUniqueIdentifier(weaponID); + + if (weaponOpt.isPresent()) { + skins.put(weaponID, GTM.getWeaponSkinManager().getWeaponSkinFromIdentifier(weaponOpt.get(), this.equippedWeaponSkins.get(weaponID))); + } + } + + return skins; + } +} \ No newline at end of file diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/GTMUserDAO.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/GTMUserDAO.java new file mode 100644 index 0000000..b34341e --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/GTMUserDAO.java @@ -0,0 +1,331 @@ +package net.grandtheftmc.gtm.users; + +import java.sql.Blob; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.UUID; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.currency.Currency; +import net.grandtheftmc.core.database.BaseDatabase; +import net.grandtheftmc.core.database.dao.CurrencyDAO; +import net.grandtheftmc.core.users.UserDAO; + +public class GTMUserDAO { + + /** + * @param uuid the player's uuid that is transfering. The player should be kicked before doing this, also should be done with a delay. + * @param server the gtm server number that the player is transfering to. + */ + public static boolean transferData(UUID uuid, int server){ + String query = "SELECT * FROM " + Core.name() + " WHERE uuid = UNHEX(?)"; + String targetServerQuery = "INSERT INTO gtm" + server + " (uuid,name,rank,backpackContents,cheatcodes,bank) VALUES(UNHEX(?),?,?,?,?,?) ON DUPLICATE KEY UPDATE `name`=?, `rank`=?, `backpackContents`=?, `cheatcodes`=?, `bank`=?";; + String originServerQuery = "DELETE FROM " + Core.name() + " WHERE `uuid` = UNHEX('" + uuid.toString().replaceAll("-", "") +"')"; + + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + double bank; + GTMRank rank; + String backpack; + Blob cheatcodes; + String name; + int money = CurrencyDAO.getCurrency(connection, Currency.MONEY.getServerKey(), uuid, Currency.MONEY); + int permits = CurrencyDAO.getCurrency(connection, Currency.PERMIT.getServerKey(), uuid, Currency.PERMIT); + try (PreparedStatement statement = connection.prepareStatement(query)) { + + statement.setString(1, uuid.toString().replaceAll("-", "")); + try (ResultSet set = statement.executeQuery()){ + + set.next(); + + bank = set.getDouble("bank"); + rank = GTMRank.fromString(set.getString("rank")); + backpack = set.getString("backpackContents");; + cheatcodes = set.getBlob("cheatcodes"); + name = set.getString("name"); + Core.log("[TransferCommand] [uuid=" + uuid.toString() + "] Got " + bank + " / " + rank + " / " + backpack + " / " + cheatcodes + " / " + name + ". Transfering data to GTM" + server); + } + catch (SQLException e){ + e.printStackTrace(); + return false; + } + } + + /** + * delete the entire record of the current player. + */ + connection.prepareStatement(originServerQuery).execute(); + Core.log("[TransferCommand] [uuid=" + uuid + "] Deleted player's record from original server."); + CurrencyDAO.saveCurrency(connection, Core.name().toUpperCase(), uuid, Currency.MONEY, 0); + CurrencyDAO.saveCurrency(connection, Core.name().toUpperCase(), uuid, Currency.PERMIT, 0); + + /** + * Transfer values over to the new server. + */ + try (PreparedStatement statement = connection.prepareStatement(targetServerQuery)){ + statement.setString(1, uuid.toString().replaceAll("-", "")); + statement.setString(2, name); + statement.setString(3, rank.toString()); + statement.setString(4, backpack); + statement.setBlob(5, cheatcodes); + statement.setDouble(6, bank); + + statement.setString(7, name); + statement.setString(8, rank.toString()); + statement.setString(9, backpack); + statement.setBlob(10, cheatcodes); + statement.setDouble(11, bank); + + Core.log("[TransferCommand] [uuid=" + uuid.toString() + "] Sent information to target server with following statement: " + statement.toString()); + + statement.execute(); + } + CurrencyDAO.saveCurrency(connection, "GTM"+server, uuid, Currency.MONEY, money); + CurrencyDAO.saveCurrency(connection, "GTM"+server, uuid, Currency.PERMIT, permits); + Core.log("[TransferCommand] [uuid=" + uuid + "] Updated player's currencies money=" + money + ", permits=" + permits); + + + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + + + return true; + } + + public static boolean setRank(String name, GTMRank rank) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE " + Core.name() + " SET `rank`=? WHERE `name`=?;")) { + statement.setString(1, rank.getName()); + statement.setString(2, name); + statement.execute(); + } + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + + return true; + } + + public static boolean setRank(UUID uuid, GTMRank rank) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE " + Core.name() + " SET `rank`=? WHERE `uuid`=UNHEX(?);")) { + statement.setString(1, rank.getName()); + statement.setString(2, uuid.toString().replaceAll("-", "")); + statement.execute(); + } + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + + return true; + } + + public static boolean setKills(String name, int value) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE " + Core.name() + " SET `kills`=? WHERE `name`=?;")) { + statement.setInt(1, value); + statement.setString(2, name); + statement.execute(); + } + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + + return true; + } + + public static boolean setKills(UUID uuid, int value) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE " + Core.name() + " SET `kills`=? WHERE `uuid`=UNHEX(?);")) { + statement.setInt(1, value); + statement.setString(2, uuid.toString().replaceAll("-", "")); + statement.execute(); + } + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + + return true; + } + + public static boolean setDeaths(String name, int value) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE " + Core.name() + " SET `deaths`=? WHERE `name`=?;")) { + statement.setInt(1, value); + statement.setString(2, name); + statement.execute(); + } + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + + return true; + } + + public static boolean setDeaths(UUID uuid, int value) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE " + Core.name() + " SET `deaths`=? WHERE `uuid`=UNHEX(?);")) { + statement.setInt(1, value); + statement.setString(2, uuid.toString().replaceAll("-", "")); + statement.execute(); + } + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + + return true; + } + + /** + * Hard sets the value of the money currency in the user_currency table, + * using another DAO to help. + * + * @deprecated - Please see CurrencyDAO for how to use this global currency. + */ + @Deprecated + public static boolean setMoney(String name, double value) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + UUID uuid = UserDAO.getUuidByName(name); + if (uuid != null){ + return CurrencyDAO.saveCurrency(connection, Currency.MONEY.getServerKey(), uuid, Currency.MONEY, (int) value); + } + } catch (SQLException e) { + e.printStackTrace(); + } + + return false; + } + + /** + * Hard sets the value of the money currency in the user_currency table, + * using another DAO to help. + * + * @deprecated - Please see CurrencyDAO for how to use this global currency. + */ + @Deprecated + public static boolean setMoney(UUID uuid, double value) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + return CurrencyDAO.saveCurrency(connection, Currency.MONEY.getServerKey(), uuid, Currency.MONEY, (int) value); + } catch (SQLException e) { + e.printStackTrace(); + } + + return false; + } + + public static boolean setBank(String name, double value) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE " + Core.name() + " SET `bank`=? WHERE `name`=?;")) { + statement.setDouble(1, value); + statement.setString(2, name); + statement.execute(); + } + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + + return true; + } + + public static boolean setBank(UUID uuid, double value) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE " + Core.name() + " SET `bank`=? WHERE `uuid`=UNHEX(?);")) { + statement.setDouble(1, value); + statement.setString(2, uuid.toString().replaceAll("-", "")); + statement.execute(); + } + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + + return true; + } + + public static boolean addBank(UUID uuid, double value) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE " + Core.name() + " SET bank = bank + ? WHERE uuid = UNHEX(?);")) { + statement.setDouble(1, value); + statement.setString(2, uuid.toString().replaceAll("-", "")); + statement.executeUpdate(); + } + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + + return true; + } + + public static boolean setPlaytime(UUID uuid, long value) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE " + Core.name() + " SET `playtime`=? WHERE `uuid`=UNHEX(?);")) { + statement.setLong(1, value); + statement.setString(2, uuid.toString().replaceAll("-", "")); + statement.execute(); + } + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + + return true; + } + + public static boolean setKillCounter(UUID uuid, int value) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE " + Core.name() + " SET `killCounter`=? WHERE `uuid`=UNHEX(?);")) { + statement.setInt(1, value); + statement.setString(2, uuid.toString().replaceAll("-", "")); + statement.execute(); + } + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + + return true; + } + + public static boolean setKillstreak(UUID uuid, int value) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE " + Core.name() + " SET `killStreak`=? WHERE `uuid`=UNHEX(?);")) { + statement.setInt(1, value); + statement.setString(2, uuid.toString().replaceAll("-", "")); + statement.execute(); + } + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + + return true; + } + + /** + * Hard sets the value of the permit currency in the user_currency table, + * using another DAO to help. + * + * @deprecated - Please see CurrencyDAO for how to use this global currency. + */ + @Deprecated + public static boolean setPermits(UUID uuid, int value) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + return CurrencyDAO.saveCurrency(connection, Currency.PERMIT.getServerKey(), uuid, Currency.PERMIT, value); + } catch (SQLException e) { + e.printStackTrace(); + } + + return false; + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/GTMUserManager.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/GTMUserManager.java new file mode 100644 index 0000000..ecd55a1 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/GTMUserManager.java @@ -0,0 +1,190 @@ +package net.grandtheftmc.gtm.users; + +import java.util.Collection; +import java.util.Collections; +import java.util.Map; +import java.util.Optional; +import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; + +public class GTMUserManager { + + /** Singleton of this class */ + private static GTMUserManager instance; + /** Mapping of uuid to gtm user objects */ + private Map<UUID, GTMUser> users = new ConcurrentHashMap<>(); + + /** + * Private constructor since singletons cannot be initialized + */ + private GTMUserManager() { + } + + /** + * Gets the instance of the singleton. + * + * @return The singleton of this class. + */ + public static GTMUserManager getInstance() { + if (instance == null) { + instance = new GTMUserManager(); + } + + return instance; + } + + /** + * Add a new gtm user to the container. + * + * @param user - the gtm user to add + * + * @return {@code true} if the gtm user was successfully added, + * {@code false} if the user already exists. + */ + public boolean addUser(GTMUser user) { + if (!users.containsKey(user.getUUID())) { + users.put(user.getUUID(), user); + return true; + } + + return false; + } + + /** + * Get whether or not the container has a gtm user with the specified uuid. + * + * @param uuid - the uuid to lookup + * + * @return {@code true} if the gtm user exists already in the container, + * {@code false} otherwise. + */ + public boolean hasUser(UUID uuid) { + if (users.containsKey(uuid)) { + return true; + } + + return false; + } + + /** + * Get whether or not the container has a gtm user with the specified name. + * + * @param name - the name to lookup + * + * @return {@code true} if the gtm user exists already in the container, + * {@code false} otherwise. + */ + public boolean hasUser(String name) { + + for (GTMUser user : users.values()) { + if (user.getName().equalsIgnoreCase(name)) { + return true; + } + } + + return false; + } + + /** + * Get the gtm user with the specified uuid from the container. + * + * @param uuid - the uuid to lookup + * + * @return The gtm user with the specified uuid, if one exists, otherwise + * empty. + */ + public Optional<GTMUser> getUser(UUID uuid) { + if (users.containsKey(uuid)) { + return Optional.of(users.get(uuid)); + } + + return Optional.empty(); + } + + /** + * Get the gtm user with the specified name from the container. + * + * @param name - the name to lookup + * + * @return The gtm user with the specified name, if one exists, otherwise + * empty. + */ + public Optional<GTMUser> getUser(String name) { + for (GTMUser user : users.values()) { + if (user.getName().equalsIgnoreCase(name)) { + return Optional.of(user); + } + } + + return Optional.empty(); + } + + /** + * Removes the gtm user with the specified uuid. + * + * @param uuid - the uuid of the gtm user to remove + * + * @return The gtm user that was removed, if one was found, otherwise empty. + */ + public Optional<GTMUser> removeUser(UUID uuid) { + if (users.containsKey(uuid)) { + return Optional.of(users.remove(uuid)); + } + + return Optional.empty(); + } + + /** + * Removes the gtm user with the specified name. + * + * @param name - the name of the gtm user to remove + * + * @return The gtm user that was removed, if one was found, otherwise empty. + */ + public Optional<GTMUser> removeUser(String name) { + + // lookup user + GTMUser user = getUser(name).orElse(null); + + if (user != null) { + if (users.containsKey(user.getUUID())) { + return Optional.of(users.remove(user.getUUID())); + } + } + + return Optional.empty(); + } + + /** + * Get all gtm users in this container. + * + * @return {@link Collection} of {@link GTMUser}s inside this container. + */ + public Collection<GTMUser> getUsers() { + return Collections.unmodifiableCollection(users.values()); + } + + /** + * A wrapper around {@link Map#size()}. + * + * @return The size of the collection that contains the gtm users. + */ + public int size() { + return users.size(); + } + + /** + * Get the gtm user from this manager. + * + * @param uuid - the uuid of the user to lookup + * + * @return The gtm user from this manager, if one is found. + * + * @deprecated - Please use {@link #getUser(UUID)}} instead as the result + * can be {@code null} + */ + @Deprecated + public GTMUser getLoadedUser(UUID uuid) { + return getUser(uuid).orElse(null); + } +} \ No newline at end of file diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/JobMode.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/JobMode.java new file mode 100644 index 0000000..287594c --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/JobMode.java @@ -0,0 +1,86 @@ +package net.grandtheftmc.gtm.users; + +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.users.UserRank; +import org.bukkit.Material; + +import java.util.Arrays; + +public enum JobMode { + + CRIMINAL("e"), + COP("3", GTMRank.GANGSTER, UserRank.PREMIUM), + HITMAN("8", GTMRank.HUNTER, UserRank.ELITE), + ; + + private final String color; + private final GTMRank rank; + private final UserRank userRank; + + JobMode(String color) { + this.color = color; + this.rank = null; + this.userRank = null; + } + + JobMode(String color, GTMRank rank, UserRank userRank) { + this.color = color; + this.rank = rank; + this.userRank = userRank; + } + + public boolean canUse(GTMRank rank, UserRank userRank) { + return (this.userRank == null && this.rank == null) || rank == this.rank || rank.isHigherThan(this.rank) || userRank == this.userRank || userRank.isHigherThan(this.userRank); + } + + public String getName() { + return this.toString(); + } + + public static JobMode getMode(String string) { + return Arrays.stream(getJobModes()).filter(mode -> mode.toString().equalsIgnoreCase(string)).findFirst().orElse(JobMode.CRIMINAL); + } + + public static JobMode getModeOrNull(String string) { + return Arrays.stream(getJobModes()).filter(mode -> mode.getName().equalsIgnoreCase(string)).findFirst().orElse(null); + } + + public static JobMode[] getJobModes() { + return JobMode.class.getEnumConstants(); + } + + public String getColoredName() { + return Utils.f('&' + this.color + this.getName()); + } + + public String getColoredNameBold() { + return Utils.f('&' + this.color + "&l" + this.getName()); + } + + public String getColor() { + return '&' + this.color; + } + + public Material getMaterial() { + switch (this) { + case COP: + return Material.LEATHER_CHESTPLATE; + case HITMAN: + return Material.SKULL_ITEM; + default: + return Material.WOOD_SWORD; + } + } + + public String getColorChar() { + return this.color; + } + + public GTMRank getRank() { + return this.rank; + } + + public UserRank getUserRank() { + return this.userRank; + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/LockedWeapon.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/LockedWeapon.java new file mode 100644 index 0000000..47a3e3f --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/LockedWeapon.java @@ -0,0 +1,54 @@ +package net.grandtheftmc.gtm.users; + +import net.grandtheftmc.core.users.UserRank; + +import java.util.Arrays; + +public enum LockedWeapon { + + MARKSMANPISTOL(GTMRank.HOMIE, UserRank.VIP), + HEAVYSHOTGUN(GTMRank.THUG, UserRank.VIP), + CHAINSAW(GTMRank.GANGSTER, UserRank.PREMIUM), + GUSENBERGSWEEPER(GTMRank.GANGSTER, UserRank.PREMIUM), + RPG(GTMRank.MUGGER, UserRank.PREMIUM), + HEAVYSNIPER(GTMRank.HUNTER, UserRank.ELITE), + SPECIALCARBINE(GTMRank.DEALER, UserRank.ELITE), + GRENADELAUNCHER(GTMRank.PIMP, UserRank.SPONSOR), + COMBATMG(GTMRank.MOBSTER, UserRank.SPONSOR), + HOMINGLAUNCHER(GTMRank.GODFATHER, UserRank.SUPREME), + MINIGUN(GTMRank.GODFATHER, UserRank.SUPREME); + + private final GTMRank rank; + private final UserRank userRank; + + LockedWeapon(GTMRank rank, UserRank userRank) { + this.rank = rank; + this.userRank = userRank; + } + + public static boolean canUseWeapon(String identifier, GTMRank rank, UserRank userRank) { + LockedWeapon w = getWeapon(identifier); + return w == null || w.canUseWeapon(rank, userRank); + } + + public static LockedWeapon getWeapon(String identifier) { + return Arrays.stream(LockedWeapon.values()).filter(w -> w.toString().equalsIgnoreCase(identifier)).findFirst().orElse(null); + } + + public GTMRank getGTMRank() { + return this.rank; + } + + public UserRank getUserRank() { + return this.userRank; + } + +// public boolean canUseWeapon(GTMRank rank, UserRank userRank) { +// return this.rank == rank || rank.isHigherThan(this.rank) || this.userRank == userRank || userRank.isHigherThan(this.userRank); +// } + + public boolean canUseWeapon(GTMRank rank, UserRank userRank) { + if(rank == null || userRank == null) return false; + return this.rank == rank || rank.isHigherThan(this.rank) || this.userRank == userRank || userRank.isHigherThan(this.userRank); + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/PersonalVehicle.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/PersonalVehicle.java new file mode 100644 index 0000000..8814462 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/PersonalVehicle.java @@ -0,0 +1,368 @@ +package net.grandtheftmc.gtm.users; + +import java.util.Objects; +import java.util.Optional; +import java.util.UUID; + +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.World; +import org.bukkit.block.BlockFace; +import org.bukkit.entity.ArmorStand; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitRunnable; + +import com.j0ach1mmall3.jlib.methods.Random; +import com.j0ach1mmall3.wastedvehicles.api.VehicleProperties; +import com.j0ach1mmall3.wastedvehicles.api.vehicles.WastedVehicle; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.database.BaseDatabase; +import net.grandtheftmc.core.menus.MenuManager; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.GTMUtils; +import net.grandtheftmc.gtm.events.TPEvent; +import net.grandtheftmc.gtm.items.GameItem; +import net.grandtheftmc.houses.Houses; +import net.grandtheftmc.houses.users.HouseUser; + +/** + * Created by Liam on 24/09/2016. + */ +public class PersonalVehicle { + + private String vehicle; + private double health = -1; + private UUID entityUUID; + private boolean stolen; + + public PersonalVehicle(String vehicle) { + this.vehicle = vehicle; + } + + public String getVehicle() { + return this.vehicle; + } + + public void setVehicle(String vehicle) { + this.vehicle = vehicle; + } + + public String getDisplayName() { + VehicleProperties p = this.getVehicleProperties(); + return p == null ? "Error" : p.getItem().getItemMeta().getDisplayName(); + } + + public VehicleProperties getVehicleProperties() { + Optional<VehicleProperties> opt = GTM.getWastedVehicles().getVehicle(this.vehicle); + return opt.isPresent() ? opt.get() : null; + } + + public String getFormattedHealth() { + if (this.isDestroyed()) return "&c&lDestroyed"; + return GTM.getWastedVehicles().formatHealth(this.getHealth(), this.getVehicleProperties().getMaxHealth()); + } + + public double getHealth() { + return this.health < 0 ? this.getVehicleProperties().getMaxHealth() : this.health; + } + + public boolean isStolen() { + if (this.getEntity() == null) this.stolen = false; + return this.stolen; + } + + public double getPrice() { + GameItem item = GTM.getItemManager().getItemFromVehicle(this.vehicle); + return item == null ? -1 : item.getSellPrice() * 2; + } + + public double getSellPrice() { + return this.getPrice() / 2 - this.getRepairPrice(); + } + + public double getRepairPrice() { + if(!this.isDestroyed()) return 0; + return this.getPrice() / 100; + } + + public void setStolen(boolean b) { + this.stolen = b; + } + + public void setHealth(double health) { + this.health = health; + } + + public UUID getEntityUUID() { + return this.entityUUID; + } + + public void setEntityUUID(UUID entityUUID) { + this.entityUUID = entityUUID; + } + + public ArmorStand getEntity() { + if (this.entityUUID == null) return null; + for (World world : Bukkit.getWorlds()) + for (ArmorStand e : world.getEntitiesByClass(ArmorStand.class)) + if (Objects.equals(e.getUniqueId(), this.entityUUID)) { + this.health = e.getHealth(); + return e; + } + this.entityUUID = null; + return null; + } + + public boolean isDestroyed() { + return this.getHealth() <= 1; + } + + public void updateVehicleInDatabase(Player player, double health) { + VehicleProperties v = this.getVehicleProperties(); + this.health = health; + if (v != null) { +// Core.sql.updateAsyncLater("update " + Core.name() + " set `" + v.getIdentifier().toLowerCase() + ":info`='" + (this.isStolen() ? 0 : this.health) + "' where uuid='" + player.getUniqueId() + "';"); + ServerUtil.runTaskAsync(() -> BaseDatabase.runCustomQuery("update " + Core.name() + " set `" + v.getIdentifier().toLowerCase() + ":info`='" + (this.isStolen() ? 0 : this.health) + "' where uuid=UNHEX('" + player.getUniqueId().toString().replaceAll("-", "") + "');")); + } + } + + public boolean onMap() { + return this.getEntity() != null; + } + + public void call(Player player, User user, GTMUser gtmUser) { + this.teleport(player, user, gtmUser, false); + } + + public void sendAway(Player player, User user, GTMUser gtmUser) { + this.teleport(player, user, gtmUser, true); + } + + public void teleport(Player player, User user, GTMUser gtmUser, boolean sendAway) { + GTMUtils.giveGameItems(player); + UUID uuid = player.getUniqueId(); + if (gtmUser.getVehicleTaskId() != -1) + Bukkit.getScheduler().cancelTask(gtmUser.getVehicleTaskId()); + if (gtmUser.isInCombat()) { + player.sendMessage(Lang.COMBATTAG.f("&7You can't " + (sendAway ? "send away" : "call") + " your vehicle in combat!")); + return; + } + if (user.isInTutorial()) return; + if (!sendAway && Objects.equals("spawn", player.getWorld().getName())) { + player.sendMessage(Lang.VEHICLES.f("&7You can't call vehicles to spawn!")); + return; + } + if (gtmUser.isArrested()) { + player.sendMessage(Lang.JAIL.f("&7You can't " + (sendAway ? "send away" : "call") + " your vehicle in jail!")); + return; + } + if (this.isDestroyed()) { + player.sendMessage(Lang.VEHICLES.f("&7Your " + this.getDisplayName() + "&7 was destroyed, call the mechanic to fix it first!")); + return; + } + if (sendAway && !this.onMap()) { + player.sendMessage(Lang.VEHICLES.f("&7Your vehicle can not be sent away!")); + return; + } + if (this.stolen) { + player.sendMessage(Lang.VEHICLES.f("&7Your " + this.getDisplayName() + "&7 was stolen!")); + return; + } + if (!gtmUser.hasMoney(200)) { + player.sendMessage(Lang.VEHICLES.f("&7You can't afford to pay &c$&l200&7 for driver!")); + return; + } + player.sendMessage(Lang.VEHICLES.f("&7A driver is coming to " + (sendAway ? "pick up" : "drop off") + " your " + this.getDisplayName() + "&7!")); + gtmUser.setVehicleTimer(GTMUtils.getWarpDelay(user.getUserRank())); + gtmUser.setSendAway(sendAway); + gtmUser.setVehicleTaskId(new BukkitRunnable() { + @Override + public void run() { + Player player = Bukkit.getPlayer(uuid); + if (player == null) { + this.cancel(); + return; + } + GTMUser gtmUser = GTM.getUserManager().getLoadedUser(uuid); + int timer = gtmUser.getVehicleTimer(); + boolean sendAway = gtmUser.isSendAway(); + PersonalVehicle vehicle = gtmUser.getPersonalVehicle(); + + if (timer == 15 || timer == 10 || (timer <= 5 && timer > 0)) { + player.sendMessage(Lang.VEHICLES.f("&7Your vehicle is " + (sendAway ? "being picked up" : "arriving") + " in " + timer + " &7second" + + (timer == 1 ? "" : "s") + '!')); + if (timer == 1) + player.playSound(player.getLocation(), Sound.BLOCK_LAVA_EXTINGUISH, 0.5F, 1); + else + player.playSound(player.getLocation(), Sound.UI_BUTTON_CLICK, 4.0F / timer, 2); + } + if (timer == 0) { + if (vehicle == null) { + gtmUser.cancelVehicleTeleport(); + player.sendMessage(Lang.VEHICLES.f("&7You have no vehicle to teleport!")); + return; + } + if (gtmUser.isInCombat()) { + gtmUser.cancelVehicleTeleport(); + player.sendMessage(Lang.COMBATTAG.f("&7You can't " + (sendAway ? "send away" : "call") + " your vehicle in combat!")); + return; + } + if (user.isInTutorial()) return; + if (gtmUser.isArrested()) { + gtmUser.cancelVehicleTeleport(); + player.sendMessage(Lang.JAIL.f("&7You can't " + (sendAway ? "send away" : "call") + " your vehicle in jail!")); + return; + } + if(Objects.equals("spawn", player.getWorld().getName())) { + gtmUser.cancelVehicleTeleport(); + player.sendMessage(Lang.JAIL.f("&7You can't " + (sendAway ? "send away" : "call") + " your vehicle in spawn!")); + return; + } + if (vehicle.isDestroyed()) { + gtmUser.cancelVehicleTeleport(); + player.sendMessage(Lang.VEHICLES.f("&7Your " + vehicle.getDisplayName() + "&7 was destroyed, call the mechanic to fix it first!")); + return; + } + if (sendAway && !vehicle.onMap()) { + gtmUser.cancelVehicleTeleport(); + player.sendMessage(Lang.VEHICLES.f("&7Your vehicle can not be sent away!")); + return; + } + if (vehicle.stolen) { + gtmUser.cancelVehicleTeleport(); + player.sendMessage(Lang.VEHICLES.f("&7Your " + vehicle.getDisplayName() + "&7 was stolen!")); + return; + } + if (!gtmUser.hasMoney(200)) { + gtmUser.cancelVehicleTeleport(); + player.sendMessage(Lang.VEHICLES.f("&7You can't afford to pay &c$&l200&7 for driver!")); + return; + } + TPEvent e = new TPEvent(player, player, + sendAway ? TPEvent.TPType.VEHICLE_SEND_AWAY : TPEvent.TPType.VEHICLE_CALL).call(); + if (e.isCancelled()) { + gtmUser.cancelVehicleTeleport(); + player.sendMessage(Lang.VEHICLES.f(e.getCancelMessage())); + return; + } + PersonalVehicle next = gtmUser.getNextVehicle(); + gtmUser.cancelVehicleTeleport(); + if (sendAway) { + if (!vehicle.sendAway(player, true)) return; + } else if (!vehicle.teleport(player, true)) return; + gtmUser.takeMoney(200); + player.sendMessage(Lang.MONEY_TAKE.f("200")); + GTMUtils.updateBoard(player, Core.getUserManager().getLoadedUser(player.getUniqueId()), gtmUser); + if (sendAway && next != null) { + gtmUser.setPersonalVehicle(null); + gtmUser.setNextVehicle(null); + gtmUser.setPersonalVehicle(player, Core.getUserManager().getLoadedUser(uuid), next); + } + MenuManager.updateMenu(player, "vehicles"); + MenuManager.updateMenu(player, "personalvehicle"); + return; + } + gtmUser.setVehicleTimer(timer - 1); + } + }.runTaskTimer(GTM.getInstance(), 20, 20).getTaskId()); + } + + private Location getLocationAround(Player player) { + VehicleProperties prop = this.getVehicleProperties(); + for (int i = 0; i < 50; i++) { + Location l = player.getLocation().add(Random.getInt(-7, 7), 0, Random.getInt(-7, 7)); + Material m = l.getBlock().getRelative(BlockFace.DOWN).getType(); + if (m == Material.AIR) + m = l.getBlock().getRelative(BlockFace.DOWN).getRelative(BlockFace.DOWN).getType(); + if (prop.getAllowedBlocks().contains(m.toString())) return l; + } + return null; + } + + private boolean teleport(Player player) { + return this.teleport(player, false); + } + + private boolean teleport(Player player, boolean sendMessage) { + ArmorStand e = this.getEntity(); + HouseUser houseUser = Houses.getUserManager().getLoadedUser(player.getUniqueId()); + if (houseUser.isInsideHouse() || houseUser.isInsidePremiumHouse()) { + player.sendMessage(Lang.VEHICLES.f("&7You can't call your vehicle inside a house!")); + return false; + } + if (e == null) { + VehicleProperties v = this.getVehicleProperties(); + if (v == null) { + if (sendMessage) + player.sendMessage(Lang.VEHICLES.f("&7That vehicle does not exist!")); + return false; + } + Location loc = this.getLocationAround(player); + if (loc == null) { + player.sendMessage(Lang.VEHICLES.f("&7Your vehicle can not be placed near you!")); + return false; + } + ArmorStand wv = GTM.getWastedVehicles().spawnVehicle(v, loc, player, (this.health > v.getMaxHealth() || this.health < 0) ? v.getMaxHealth() : this.health); + this.entityUUID = wv.getUniqueId(); + if (sendMessage) + player.sendMessage(Lang.VEHICLES.f("&7The driver dropped off your vehicle" + (houseUser.isInsideHouse() || houseUser.isInsidePremiumHouse() ? " at your door" : "") + '!')); + return true; + } + if (this.stolen) { + if (sendMessage) + player.sendMessage(Lang.VEHICLES.f("&7Your " + this.getDisplayName() + "&7 was stolen!")); + return false; + } + Location loc = this.getLocationAround(player); + if (loc == null) { + player.sendMessage(Lang.VEHICLES.f("&7Your vehicle can not be placed near you!")); + return false; + } + e.teleport(loc); + if (sendMessage) + player.sendMessage(Lang.VEHICLES.f("&7The driver dropped off your vehicle" + (houseUser.isInsideHouse() || houseUser.isInsidePremiumHouse() ? " at your door" : "") + '!')); + return true; + } + + private boolean sendAway(Player player) { + return this.sendAway(player, false); + } + + private boolean sendAway(Player player, boolean sendMessage) { + ArmorStand e = this.getEntity(); + if (this.isDestroyed()) { + if (sendMessage) + player.sendMessage(Lang.VEHICLES.f("&7Your " + this.getDisplayName() + "&7 is destroyed!")); + return false; + } + if (e == null) { + if (sendMessage) + player.sendMessage(Lang.VEHICLES.f("&7You can't send away your vehicle!")); + return false; + } + if (e.getPassenger() != null) { + if (sendMessage) + player.sendMessage(Lang.VEHICLES.f("&7Your vehicle is not empty!")); + return false; + } + ((WastedVehicle) e.getMetadata("WastedVehicle").get(0).value()).onDismount(e); + ((WastedVehicle) e.getMetadata("WastedVehicle").get(0).value()).getPassengers().forEach(passenger -> { + passenger.eject(); + passenger.remove(); + }); + GTM.getWastedVehicles().getEntityQueue().remove(e); + e.remove(); + this.entityUUID = null; + if (sendMessage) + player.sendMessage(Lang.VEHICLES.f("&7The driver picked up your vehicle!")); + return true; + } + + +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/TaxiTarget.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/TaxiTarget.java new file mode 100644 index 0000000..214760d --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/TaxiTarget.java @@ -0,0 +1,134 @@ +package net.grandtheftmc.gtm.users; + +import net.grandtheftmc.gtm.warps.Warp; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; + +import java.util.Objects; +import java.util.UUID; + +public class TaxiTarget { + private TargetType type; + + private UUID targetPlayer; + private UUID targetEntity; + private Location location; + private Warp warp; + + public TaxiTarget() { + this.type = TargetType.NONE; + } + + public TaxiTarget(Player player) { + this.type = TargetType.PLAYER; + this.targetPlayer = player.getUniqueId(); + } + + public TaxiTarget(Entity entity) { + this.type = TargetType.ENTITY; + this.targetEntity = entity.getUniqueId(); + } + + public TaxiTarget(Location position) { + this.type = TargetType.LOCATION; + this.location = position; + } + + public TaxiTarget(Warp warp) { + this.type = TargetType.WARP; + this.warp = warp; + } + + public TargetType getType() { + return this.type; + } + + public void setType(TargetType type) { + this.type = type; + } + + public UUID getTargetPlayerUUID() { + return this.targetPlayer; + } + + public Player getTargetPlayer() { + if (this.targetPlayer == null) + return null; + return Bukkit.getPlayer(this.targetPlayer); + } + + public void setTargetPlayer(UUID targetPlayer) { + this.targetPlayer = targetPlayer; + this.type = TargetType.PLAYER; + } + + public UUID getTargetEntityUUID() { + return this.targetEntity; + } + + public Entity getTargetEntity() { + if (this.targetEntity == null) + return null; + for (World w : Bukkit.getWorlds()) + for (Entity e : w.getEntities()) + if (Objects.equals(e.getUniqueId(), this.targetEntity)) + return e; + this.targetEntity = null; + return null; + } + + public void setTargetEntity(UUID targetEntity) { + this.targetEntity = targetEntity; + this.type = TargetType.ENTITY; + } + + public void setTargetEntity(Entity targetEntity) { + this.targetEntity = targetEntity == null ? null : targetEntity.getUniqueId(); + this.type = TargetType.ENTITY; + } + + public Location getLocation() { + return this.location; + } + + public void setLocation(Location location) { + this.location = location; + } + + public Warp getWarp() { + return this.warp; + } + + public void setWarp(Warp w) { + this.warp = w; + } + + public Location getExactLocation() { + switch (this.type) { + case LOCATION: + return this.location; + case ENTITY: + Entity e = this.getTargetEntity(); + return e == null ? null : e.getLocation(); + case PLAYER: + Player p = this.getTargetPlayer(); + return p == null ? null : p.getLocation(); + case WARP: + return this.warp == null ? null : this.warp.getLocation(); + default: + return null; + } + } + + public enum TargetType { + NONE, + PLAYER, + ENTITY, + LOCATION, + WARP + } + +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/npcs/ArmorNPC.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/npcs/ArmorNPC.java new file mode 100644 index 0000000..3b1f503 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/npcs/ArmorNPC.java @@ -0,0 +1,109 @@ +package net.grandtheftmc.gtm.users.npcs; + +import java.util.Collections; + +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import net.citizensnpcs.api.event.NPCCollisionEvent; +import net.citizensnpcs.api.event.NPCLeftClickEvent; +import net.citizensnpcs.api.event.NPCPushEvent; +import net.citizensnpcs.api.event.NPCRightClickEvent; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.Utils; +import net.grandtheftmc.core.inventory.CoreMenu; +import net.grandtheftmc.core.inventory.CoreMenuFlag; +import net.grandtheftmc.core.inventory.button.ClickableItem; +import net.grandtheftmc.core.npc.CoreNPC; +import net.grandtheftmc.core.npc.interfaces.ClickableNPC; +import net.grandtheftmc.core.npc.interfaces.CollideableNPC; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.GTMUtils; +import net.grandtheftmc.gtm.items.GameItem; +import net.grandtheftmc.gtm.users.GTMUser; + +/** + * Created by Timothy Lampen on 1/14/2018. + */ +public class ArmorNPC extends CoreNPC implements ClickableNPC, CollideableNPC { + private static final String[] ARMOR_GAMEITEMS = new String[]{"shirt", "kevlarvest", "ceramicvest", "titaniumvest", "jetpackfuel10", "jetpack", "jetpackfuel100", "nikes", "pants", "baseballcap", "tacticalmask","titaniumhelmet"}; + public ArmorNPC(Location loc) { + super(loc, EntityType.PLAYER, "&c&lFrank Sheathson", "&7&oBuy armor and clothes here!"); + } + + @Override + protected void generateNewNPC() { + setLookClose(true); + setSkin("eyJ0aW1lc3RhbXAiOjE1MTU5ODM2NDk2NjgsInByb2ZpbGVJZCI6IjdjZjc2MTFkYmY2YjQxOWRiNjlkMmQzY2Q4NzUxZjRjIiwicHJvZmlsZU5hbWUiOiJrYXJldGg5OTkiLCJzaWduYXR1cmVSZXF1aXJlZCI6dHJ1ZSwidGV4dHVyZXMiOnsiU0tJTiI6eyJ1cmwiOiJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzI4Y2RkZmQxM2Y1NmI3YzJjNGYxZjNkNmI4MjY5Y2UxOTgxYjJjYTlhOWFmMjEzODVhNDQ2YTUzMTEifX19", "f2GaPKFyc2hG+I8+7CnIbDZcxU56RG+gbYZzKt58n2PWifyjoR7USPSsQEV9eDM8EnJuay5vhbSuFODX8O2w1Fkz0M9MyjDg41J3ERwOVD8B7VnAS3P24gISwpAmKSL5QQ8Va8gUZvx4Cgc07XJflfw60YdZ4DpinW4XQh2b1rEMTdHBFilmFj4GVbejcMSRGp9aOY60TXX4+aD4Uww/CVuAaAE7tAcX0V1NkmP/sUBGtKtZLTxzVnUWYsMEjvOTlgy4gd4OsK+pCegG092k2KNoI5q93TG1oMNGRQtpD5Yd4jwA8uO5vUaHBw1tIxe+pn85j3qS3KIB0QDMHIM2NNi+tHKEkLO0+ScILD7Ud2vqfXxI0oO2j8olcVBGivScssKp+8k7p1tHL2kQxYt/K6y+Xiw76H0aYoabWOnwkw7ZobDMHKoWMSBxbxqDjJ4n8itTtIO1Qn5UQZ9zAbEojGwwBZ82fqZmZkKBPX1b2/9yJ2jkVCKmEV3sSUBgovjPtm44ZyONFqf0HkmI1r19cCgzzY1xy13sueokOgevYn0trkLJsitpJEt6Z3pbnZ99k3aqjtsi+FMUqxqHHe8U8Kp7AKxW/BNnZOBFcFArXjy/C9ia8g8QajUWBt+YRr+RiDhEpCDON1WPYGhyq95FWIJf9Uz3/z59mMTNhUZAA9c="); + setCollideable(true); + } + + @Override + public void onRightClick(NPCRightClickEvent event) { + Player player = event.getClicker(); + + if (!GTM.getSettings().canBuy()){ + player.sendMessage(ChatColor.RED + "Buying things is currently disabled."); + return; + } + + new ArmorMenu().openInventory(player); + } + + @Override + public void onLeftClick(NPCLeftClickEvent npcLeftClickEvent) { + + } + + @Override + public void onCollide(NPCCollisionEvent event) { + + } + + @Override + public void onPush(NPCPushEvent event) { + + } + + private class ArmorMenu extends CoreMenu { + private final int[] ARMOR_SPOTS = new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 38, 39, 40, 41, 42, 47, 48, 49, 50, 51}; + public ArmorMenu() { + super(6, Utils.f("&8&lArmor Seller"), CoreMenuFlag.PHONE_LAYOUT); + + int counter = 0; + for(String armor : ARMOR_GAMEITEMS) { + GameItem item = armor.contains("jetpackfuel") ? GTM.getItemManager().getItem("jetpackfuel") : GTM.getItemManager().getItem(armor); + if(!item.canBuy()) + continue; + int amt = 1; + if(armor.contains("jetpackfuel")) { + amt = Integer.parseInt(armor.replace("jetpackfuel", "")); + } + double price = item.getBuyPrice()*amt; + ItemStack is = item.getItem(); + ItemMeta im = is.getItemMeta(); + im.setDisplayName(Utils.f("&6&l" + amt+ "x " + im.getDisplayName())); + im.setLore(Collections.singletonList(Utils.f("&6&lPrice: $&a" + (price)))); + is.setItemMeta(im); + + int finalAmt = amt; + addItem(new ClickableItem(ARMOR_SPOTS[counter], is, ((player, clickType) -> { + GTMUser user = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + if(!user.hasMoney(price)){ + player.sendMessage(Lang.SHOP.f("&cYou do not have enough money for this item!")); + return; + } + user.takeMoney(price); + GTMUtils.updateBoard(player, GTM.getUserManager().getLoadedUser(player.getUniqueId())); + Utils.giveItems(player, item.getItem(finalAmt)); + }), false)); + counter++; + + } + } + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/npcs/BankTellerNPC.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/npcs/BankTellerNPC.java new file mode 100644 index 0000000..8e5a3e9 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/npcs/BankTellerNPC.java @@ -0,0 +1,51 @@ +package net.grandtheftmc.gtm.users.npcs; + +import net.citizensnpcs.api.event.NPCCollisionEvent; +import net.citizensnpcs.api.event.NPCLeftClickEvent; +import net.citizensnpcs.api.event.NPCPushEvent; +import net.citizensnpcs.api.event.NPCRightClickEvent; +import net.grandtheftmc.core.menus.MenuManager; +import net.grandtheftmc.core.npc.CoreNPC; +import net.grandtheftmc.core.npc.interfaces.ClickableNPC; +import net.grandtheftmc.core.npc.interfaces.CollideableNPC; + +import org.bukkit.Location; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; + +/** + * Created by Timothy Lampen on 1/14/2018. + */ +public class BankTellerNPC extends CoreNPC implements ClickableNPC, CollideableNPC { + public BankTellerNPC(Location loc) { + super(loc, EntityType.PLAYER, "&a&lSacha Goldman", "&7&oAccess your bank here!"); + } + + @Override + protected void generateNewNPC() { + setLookClose(true); + setSkin("eyJ0aW1lc3RhbXAiOjE1MTU5ODIyMzkzMTUsInByb2ZpbGVJZCI6IjcwOTU2NDU0NTJkOTRiYTI5YzcwZDFmYTY3YjhkYTQyIiwicHJvZmlsZU5hbWUiOiJIaWRkdXMiLCJzaWduYXR1cmVSZXF1aXJlZCI6dHJ1ZSwidGV4dHVyZXMiOnsiU0tJTiI6eyJ1cmwiOiJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzNmZjM3ZjdiYTBlYzlmMDczYWJhM2VlYTk0OGI3NDMzYzg3YmVmZWNkNzNmYjdjOWQyNjExYWZhMmVlNzY2In19fQ==", "d1UU+O/OvjxxspCnb7gRPXVW0RxpfpcG2ygVWiCZeBC9Mz5ztKRgsska9jqk3bOlupJR+ApefO88DgWrhHIsT0SZyG5e+kqg1r0pYWvE2LpYKmFyL4kgWs9om+KKXP1NGHXVJT9yJ+SdCHwAsqjosuLpg0IGs6e9V+2Tw9Lw3Fhq7GvQuufZjnvpWOKXsMnMRzil8bX3AlLkAvRnYXwOAmWeK/L6BGtT7olb+ewOjZwoKIbLH13kXJJ6BTEoOoFLlczTU+bCYx/Lc5tEkTqJoiTZtxV6oWZaLK7Q8YxdOsegP1yo7ZLGyH6IuKPPmtTVOC9C09PqBA9sWkBJUIKP5iA+gfNnPxkApo4ooY/gMEenzaPihHPt+USvpLvgvB/GtNkjSmtSXuYygyRAg6ukejM9PC+3waecH0rGtYuNZ2gKzdAboPMIlL7Z066A3b7+xrqbicYVtmKRrtdJZ3nuztNcFFhD6sBkl2fY6i2Xf8bYbE45LiNSrKB8a+DrgFRCuhlgtagesFALik5a9zBSSVIARMFlDgZqrJimQIbsTwprIAuqoUN2MDMTlmKIFzDheOZHyo8IGp+JyXztttzWz35RfPP68stJWJ0+2t5X2HFw6ERBTLpXeg/2RZ/CgHWNKJxBhOGKZONFZUOwPGy6BDQq9TX+ZQG6T3Eyhbg0zFM="); + setCollideable(true); + } + + @Override + public void onRightClick(NPCRightClickEvent event) { + Player player = event.getClicker(); + MenuManager.openMenu(player, "bank"); + } + + @Override + public void onLeftClick(NPCLeftClickEvent event) { + + } + + @Override + public void onCollide(NPCCollisionEvent event) { + + } + + @Override + public void onPush(NPCPushEvent event) { + + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/npcs/CarNPC.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/npcs/CarNPC.java new file mode 100644 index 0000000..eef80fc --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/npcs/CarNPC.java @@ -0,0 +1,96 @@ +package net.grandtheftmc.gtm.users.npcs; + +import java.util.List; + +import org.bukkit.Location; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import net.citizensnpcs.api.event.NPCCollisionEvent; +import net.citizensnpcs.api.event.NPCLeftClickEvent; +import net.citizensnpcs.api.event.NPCPushEvent; +import net.citizensnpcs.api.event.NPCRightClickEvent; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Utils; +import net.grandtheftmc.core.inventory.CoreMenu; +import net.grandtheftmc.core.inventory.CoreMenuFlag; +import net.grandtheftmc.core.inventory.button.ClickableItem; +import net.grandtheftmc.core.menus.MenuManager; +import net.grandtheftmc.core.npc.CoreNPC; +import net.grandtheftmc.core.npc.interfaces.ClickableNPC; +import net.grandtheftmc.core.npc.interfaces.CollideableNPC; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.items.GameItem; +import net.grandtheftmc.gtm.users.GTMUser; + +/** + * Created by Timothy Lampen on 1/14/2018. + */ +public class CarNPC extends CoreNPC implements ClickableNPC, CollideableNPC { + + public CarNPC(Location loc) { + super(loc, EntityType.PLAYER, "&d&lSlimy Patrick", "&7&oBest vehicles in the world!"); + } + + @Override + protected void generateNewNPC() { + setLookClose(true); + setSkin("eyJ0aW1lc3RhbXAiOjE1MTU5ODM1NDI2ODAsInByb2ZpbGVJZCI6IjNlMjZiMDk3MWFjZDRjNmQ5MzVjNmFkYjE1YjYyMDNhIiwicHJvZmlsZU5hbWUiOiJOYWhlbGUiLCJzaWduYXR1cmVSZXF1aXJlZCI6dHJ1ZSwidGV4dHVyZXMiOnsiU0tJTiI6eyJ1cmwiOiJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzdiYmUxMjdlMmFiYjQxNTNkMmVlZDQ0M2M3OGM0ZmVlNmQzOWVjNjZjMTA4MDkyNTBlYmIwNzQyZjYyMWVmNSJ9fX0=", "Reqe3QaLLd+i19gsDZZv8RrFgeOHb0sNvX/aqw/fEcp65YNV4rMCJWP0aDb60rt53mAedi3h4CR9BKIEgBEk1R2zbFJNwGQnHi5CH0yggiaSdjFzc90oAY/QPvsqya9Il/WQ+YutVQXTG3iMG62jfAm5xsX9I098eHkEqoWGhY4MNjFkTuX5u6XTi5knXj2dkWP8bD+6wwFRpyou5arwyZS3cVjMsvBUwZv34kLL7asUfEg+Ud3k1RNjJrwz92+YW2DqRH2R2ZFwhofSvawi3a2uPf8wpefARIkzM1AZ1MW3mj9CplUw1FHCz8tiu0eM2O4fyrqgVIfNsJoCpYqEDvSByMQo8svwhXLZr/JaQjYneYqTueJ2QGwhbVwKq8862VQLJRaRMMYgKRdPaBTpmvYOHN/LMhWBLVYsMqT7RE5jYybAcXR1Ad9/wtR66/BtXPgd0/0t7GAAA8KY2xw80k7XXfdSJCS6snVMPxuzvc0mGmGPq+FG8kb6/NQcGTtTyUVP5HA/qW0b+yQ2qlYRe/F6D//LVWM/1+Qo8U9z9eqHM+G7c/i+bQPa8NxYR8H2B4Hf/dQMnpMIgiclCuX6OcqPQr8ikDpJ8AQCmA1FR8S9uqxE92je5hFMy1+84jMfGLUKecs/wxFy+uUYHYbs2FH0eALMsP/XkbYfyOJmidc="); + setCollideable(true); + } + + @Override + public void onRightClick(NPCRightClickEvent event) { + Player player = event.getClicker(); + new CarMenu(player).openInventory(player); + } + + @Override + public void onLeftClick(NPCLeftClickEvent event) { + + } + + @Override + public void onCollide(NPCCollisionEvent event) { + + } + + @Override + public void onPush(NPCPushEvent event) { + + } + + private class CarMenu extends CoreMenu{ + + private final String[] CARS = new String[]{"zentorno", "entity_xf", "9f", "armoredkuruma", "primo", "attackmaverick", "maverick", "bmx", "dinghy", "hydra", "rhino"}; + private final int[] CAR_SPOTS = new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 38, 39, 40, 41, 42, 47, 48, 49, 50, 51}; + public CarMenu(Player p) { + super(6, Utils.f("&d&lPurchase Cars"), CoreMenuFlag.PHONE_LAYOUT); + int counter = 0; + GTMUser user = GTM.getUserManager().getLoadedUser(p.getUniqueId()); + for(String s : CARS){ + GameItem item = GTM.getItemManager().getItem(s); + if(item==null){ + Core.error("[CarMenu] Unable to load car: " + s + " from game item."); + continue; + } + ItemStack is = item.getItem(); + if(user.hasVehicle(s)){ + ItemMeta im = is.getItemMeta(); + List<String> lore = im.getLore(); + lore.add(Utils.f("&a&lPurchased")); + im.setLore(lore); + is.setItemMeta(im); + } + addItem(new ClickableItem(CAR_SPOTS[counter], is, (player, clickType) -> { + user.setActionVehicle(s); + player.closeInventory(); + MenuManager.openMenu(player, "vehicleshop"); + }, false)); + counter++; + } + } + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/npcs/CasinoNPC.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/npcs/CasinoNPC.java new file mode 100644 index 0000000..7f2f523 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/npcs/CasinoNPC.java @@ -0,0 +1,36 @@ +package net.grandtheftmc.gtm.users.npcs; + +import net.citizensnpcs.api.event.NPCLeftClickEvent; +import net.citizensnpcs.api.event.NPCRightClickEvent; +import net.grandtheftmc.core.casino.coins.VendorMenu; +import net.grandtheftmc.core.npc.CoreNPC; +import net.grandtheftmc.core.npc.interfaces.ClickableNPC; +import org.bukkit.Location; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; + +/** + * Created by Timothy Lampen on 3/23/2018. + */ +public class CasinoNPC extends CoreNPC implements ClickableNPC { + public CasinoNPC(Location loc) { + super(loc, EntityType.PLAYER, "&eMr. Goldman", "&7&oGet you're casino chips here!"); + } + + @Override + protected void generateNewNPC() { + setLookClose(true); + setSkin("eyJ0aW1lc3RhbXAiOjE1MjE4NTQyNjM3OTgsInByb2ZpbGVJZCI6IjkxOGEwMjk1NTlkZDRjZTZiMTZmN2E1ZDUzZWZiNDEyIiwicHJvZmlsZU5hbWUiOiJCZWV2ZWxvcGVyIiwic2lnbmF0dXJlUmVxdWlyZWQiOnRydWUsInRleHR1cmVzIjp7IlNLSU4iOnsidXJsIjoiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS9mYTRjNThlNTFjZDY1MjJhMTdlNWY3MGE5YzUzMDJkMTVjNzU4MThhNzY1NGNiNGM4ZTM2Zjk5Njk2NTg5OTkifX19", "EwjF5VIfbHDAaAp+UEE9ctxqoD3IpyboYOMBIMtGZWikS4FAa5Ju56Ip5cuCW9vZj2Oo4ZvGrK6Jzm0BkMz+uXlzNYjUVOFgfatVa2Ibr+CGn4KdbMFAXb0vK4moVWVurapYeXkDs9wih5evf3CI/9g2deoyRNul/iGdG8hbIUq910Cc2m0JHFMeRVyRivnyw7l7SWhcL54m/+goiRtklpYnKcqiQSaHhfi5rPBNldvRF0T6f1raJzTrh3hGriiRRz2et5zP8ZBphWGUzij07kUZLuVSXm9FMltQGrOzFrePejSrGE9tjIefHphVqScM0+tqbCyC7b7TtZ0aYCFpv2DLDlYt/wCrbyxpi7l1hDvB4xK3aLfm8HRD4HK8lgpiqcD17WNCg0P2+m43jbuIIMK/AWDr74LAL0mblp66vqaR3fr2ifp7bbgXXiV7hoykkJ5B+ozxGV73J4u58fEPgZRGVUQaALeRyQsNLaeLGgkvsu3FFnqvHf0CBA9tEjElHt+7XleHoKkvVKmaVTkq/APiItowHbDDgeWGcAHi+6jPnfz5d7k0P/KcePYCCcRMPK+1/UP/StXJ80Dj+tFyiUVg82nLiLvq0Uv2thrqZQvNxL0YvkFuRjYIKspu4jXJvCfEPNVjczdmYNFxtO56P9oEPL+6byvzPPbXW/Q4L0Q="); + } + + @Override + public void onRightClick(NPCRightClickEvent event) { + Player player = event.getClicker(); + new VendorMenu().openInventory(player); + } + + @Override + public void onLeftClick(NPCLeftClickEvent npcLeftClickEvent) { + + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/npcs/CriminalNPC.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/npcs/CriminalNPC.java new file mode 100644 index 0000000..15fec24 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/npcs/CriminalNPC.java @@ -0,0 +1,59 @@ +package net.grandtheftmc.gtm.users.npcs; + +import net.citizensnpcs.api.event.NPCCollisionEvent; +import net.citizensnpcs.api.event.NPCLeftClickEvent; +import net.citizensnpcs.api.event.NPCPushEvent; +import net.citizensnpcs.api.event.NPCRightClickEvent; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.npc.CoreNPC; +import net.grandtheftmc.core.npc.interfaces.ClickableNPC; +import net.grandtheftmc.core.npc.interfaces.CollideableNPC; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.GTMUtils; +import net.grandtheftmc.gtm.users.JobMode; +import org.bukkit.Location; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; + +public class CriminalNPC extends CoreNPC implements ClickableNPC, CollideableNPC { + + public CriminalNPC(Location loc) { + super(loc, EntityType.PLAYER, "&3&lCriminal", "&o&7Back to simple criminal lifestyle.."); + } + + @Override + protected void generateNewNPC() { + setLookClose(true); + setSkin("eyJ0aW1lc3RhbXAiOjE1MjEyMjg4MDMyNjgsInByb2ZpbGVJZCI6IjExODAxYzEzMGNiYzQ5MGY4YmEzM2E0MTMxMTZiNzk1IiwicHJvZmlsZU5hbWUiOiIweDE5ZCIsInNpZ25hdHVyZVJlcXVpcmVkIjp0cnVlLCJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNGQ2ZjlhY2NiN2JhMjM1ZWY3ODZmNzFkOWFkNjUzOTE5NjIyYjZhYWE1MjE5NDk5ODA1N2U2Y2JiMDczYSJ9fX0=", + "XkAbsDP7YR1guq32Xh/FZRQx4nmHK5JnR7FMonif3ynlRD07eLEacxob3PhUpilqPb3+/UNsho+dTSt7rqiTcEXHI971bSi+v/rtOW7nsjMnNnCB0Wi30by6kIw0qd231VVD17046hkVUis+N9HptnN1QqtMV1J9+HTldC+OmepoyNV6Ir0Usyl1d/oqNZWRCVebCMCEX9y0PuV6HQx5wdl4MtEKl78HMf5epdGOcgUaP0qF/RdNQ88dizlgMNHYa5+eq3N2npYlwR+DevSzIJEnokcJkG0wb0Kz9x/3UNLtNR+9/K6T2UVCCPZqV6iWZ+ryL3tExFBByaJYL4Gd8PcjfYVdA0jovN55db7OSZtfix7Uj9k5mqiw4Egj2WfilQ2HLebOm5+jkwWDIchoOWsl15xy+1INrwFi2uRMeV3/ajy0SFXg2WlkAc6XmOPNfYpYNYzd2+fUp4X0RzOyXeqx+BV2moGcUHoJVghK2ddPoIU70H4OxMjwio+A/bOshWrJlDfrnuWlzWRaiIeNIgP2O+P/ojb9jnjWywbRzMy5386Ng6U0GteWQaxxw+RD5iv7ryaziVr4j8oMj20z57StqfgXGZXoC7vMU7lDd55fm5br8cnpKTwCok5E5F2bZFPvx+IenMaVZsGBFpH2EJalOHT6lnQ9K80xlLTLDVc="); + } + + @Override + public void onRightClick(NPCRightClickEvent event) { + Player player = event.getClicker(); + + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + if (Core.getSettings().isUseEditMode() && user.hasEditMode()) + return; + + JobMode mode = JobMode.getModeOrNull("CRIMINAL"); + if (mode == null) return; + GTMUtils.chooseJobMode(player, user, GTM.getUserManager().getLoadedUser(player.getUniqueId()), mode); + } + + @Override + public void onLeftClick(NPCLeftClickEvent event) { + + } + + @Override + public void onCollide(NPCCollisionEvent event) { + + } + + @Override + public void onPush(NPCPushEvent event) { + + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/npcs/FoodNPC.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/npcs/FoodNPC.java new file mode 100644 index 0000000..376f110 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/npcs/FoodNPC.java @@ -0,0 +1,104 @@ +package net.grandtheftmc.gtm.users.npcs; + +import java.util.Collections; + +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import net.citizensnpcs.api.event.NPCCollisionEvent; +import net.citizensnpcs.api.event.NPCLeftClickEvent; +import net.citizensnpcs.api.event.NPCPushEvent; +import net.citizensnpcs.api.event.NPCRightClickEvent; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.Utils; +import net.grandtheftmc.core.inventory.CoreMenu; +import net.grandtheftmc.core.inventory.CoreMenuFlag; +import net.grandtheftmc.core.inventory.button.ClickableItem; +import net.grandtheftmc.core.npc.CoreNPC; +import net.grandtheftmc.core.npc.interfaces.ClickableNPC; +import net.grandtheftmc.core.npc.interfaces.CollideableNPC; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.items.GameItem; +import net.grandtheftmc.gtm.users.GTMUser; + +/** + * Created by Timothy Lampen on 1/14/2018. + */ +public class FoodNPC extends CoreNPC implements ClickableNPC, CollideableNPC { + + private static final String[] FOOD_GAMEITEMS = new String[]{"burrito", "burger", "chocolatechipcookie", "friedchicken", "carrot", "chickensoup", "pie"}; + + public FoodNPC(Location loc) { + super(loc, EntityType.PLAYER, "&c&lBenjamin Baker", "&7&oBuy different food here!"); + } + + @Override + protected void generateNewNPC() { + setLookClose(true); + setSkin("eyJ0aW1lc3RhbXAiOjE1MTU5ODM3MDczNjMsInByb2ZpbGVJZCI6ImUzYjQ0NWM4NDdmNTQ4ZmI4YzhmYTNmMWY3ZWZiYThlIiwicHJvZmlsZU5hbWUiOiJNaW5pRGlnZ2VyVGVzdCIsInNpZ25hdHVyZVJlcXVpcmVkIjp0cnVlLCJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvODIzNzI3MTZmMDczMTYxOTJjZTg5MTk3YWY5MjQzMjY4MzZiZGQ0OWI1NWE0YmMyMTFiNjczNjg2NjFhMzU2NyJ9fX0=", "BwAEZYJEJRpiipEyWGUiWbWOfRYCxd1B1JDDwfJfXFKjLB7DzT9wAgXVr+WBA1fr6eU8sU8lSHZ9TL8NWRZVoqbyQjX04d18pz2XaBXH8yu02qOK8od3VhAihVId4pLh1W3zwApGGlP5iHQI1xZ3PZsqJxmuGEugHfg+9E1031lls0alA4WLImuocZx0Xjt/gHphAtQgw0K2WLm1U+78kZ2mBl7B+mSgWMz19b1UfkgLoYeusUxPbNXhEwX/A0H1wQS20TZuYabHBxp5yG4jYt8UZoetTtNQ5u927AhoiYbTtd8mWHRxOqc15EsPw91dO8Vy7ZFEQbALX2kFp6ghYo5D6sLoPPk41GXSi/Z0m0md1nKcqH2QRWmaX0KfssHZz1iVPlQtBBDWTVX6/xmUaMnUH2/fyVIDVf2d1zw2JxucSQ3X9k7s6Gm9BekKyMVtX8qwveemGf1/fVH6aTztYXrNoPC0GEcYu0fmQ4UnDuwFeqIAtLOtAwB3jAXxss04Xc4AnH09Q5CdE+OpK2pd949jj65Y84wjbj3Vkelur5xc8WcRBg6uoO/Xx8nQr9vNY9MUvFpIhATS/GHb3gP+U8hGUNYIwG7ff/neD4pSqZqBcTq4Vf7qC4eTsoepWXdGFLyT2qm2EY6XSkndyIuSMWMEI3aKoLKrjOBC8U8OhDY="); + setCollideable(true); + } + + @Override + public void onRightClick(NPCRightClickEvent event) { + Player player = event.getClicker(); + + if (!GTM.getSettings().canBuy()){ + player.sendMessage(ChatColor.RED + "Buying things is currently disabled."); + return; + } + + new FoodMenu().openInventory(player); + } + + @Override + public void onLeftClick(NPCLeftClickEvent npcLeftClickEvent) { + + } + + @Override + public void onCollide(NPCCollisionEvent event) { + + } + + @Override + public void onPush(NPCPushEvent event) { + + } + + private class FoodMenu extends CoreMenu { + private final int[] FOOD_SPOTS = new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 38, 39, 40, 41, 42, 47, 48, 49, 50, 51}; + public FoodMenu() { + super(6, Utils.f("&c&lFood Seller"), CoreMenuFlag.PHONE_LAYOUT); + + int counter = 0; + for(String food : FOOD_GAMEITEMS) { + GameItem item = GTM.getItemManager().getItem(food); + if(!item.canSell()) + continue; + double price = item.getSellPrice()*8; + ItemStack is = item.getItem(); + ItemMeta im = is.getItemMeta(); + im.setDisplayName(Utils.f("&6&l8x " + im.getDisplayName())); + im.setLore(Collections.singletonList(Utils.f("&6&lPrice: $&a" + price))); + is.setItemMeta(im); + + addItem(new ClickableItem(FOOD_SPOTS[counter], is, ((player, clickType) -> { + GTMUser user = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + if(!user.hasMoney(price)){ + player.sendMessage(Lang.SHOP.f("&cYou do not have enough money for this item!")); + return; + } + user.takeMoney(price); + Utils.giveItems(player, item.getItem(8)); + }), false)); + counter++; + + } + } + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/npcs/HeadSellerNPC.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/npcs/HeadSellerNPC.java new file mode 100644 index 0000000..c2fe8df --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/npcs/HeadSellerNPC.java @@ -0,0 +1,55 @@ +package net.grandtheftmc.gtm.users.npcs; + +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +import net.citizensnpcs.api.event.NPCCollisionEvent; +import net.citizensnpcs.api.event.NPCLeftClickEvent; +import net.citizensnpcs.api.event.NPCPushEvent; +import net.citizensnpcs.api.event.NPCRightClickEvent; +import net.grandtheftmc.core.menus.MenuManager; +import net.grandtheftmc.core.npc.CoreNPC; +import net.grandtheftmc.core.npc.interfaces.ClickableNPC; +import net.grandtheftmc.core.npc.interfaces.CollideableNPC; + +/** + * Created by Timothy Lampen on 1/14/2018. + */ +public class HeadSellerNPC extends CoreNPC implements ClickableNPC, CollideableNPC { + public HeadSellerNPC(Location loc) { + super(loc, EntityType.PLAYER, "&a&lHead Seller", "&7&oSell your heads here!"); + } + + @Override + protected void generateNewNPC() { + setLookClose(true); + setSkin("eyJ0aW1lc3RhbXAiOjE1MTU5ODIyMzkzMTUsInByb2ZpbGVJZCI6IjcwOTU2NDU0NTJkOTRiYTI5YzcwZDFmYTY3YjhkYTQyIiwicHJvZmlsZU5hbWUiOiJIaWRkdXMiLCJzaWduYXR1cmVSZXF1aXJlZCI6dHJ1ZSwidGV4dHVyZXMiOnsiU0tJTiI6eyJ1cmwiOiJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzNmZjM3ZjdiYTBlYzlmMDczYWJhM2VlYTk0OGI3NDMzYzg3YmVmZWNkNzNmYjdjOWQyNjExYWZhMmVlNzY2In19fQ==", "d1UU+O/OvjxxspCnb7gRPXVW0RxpfpcG2ygVWiCZeBC9Mz5ztKRgsska9jqk3bOlupJR+ApefO88DgWrhHIsT0SZyG5e+kqg1r0pYWvE2LpYKmFyL4kgWs9om+KKXP1NGHXVJT9yJ+SdCHwAsqjosuLpg0IGs6e9V+2Tw9Lw3Fhq7GvQuufZjnvpWOKXsMnMRzil8bX3AlLkAvRnYXwOAmWeK/L6BGtT7olb+ewOjZwoKIbLH13kXJJ6BTEoOoFLlczTU+bCYx/Lc5tEkTqJoiTZtxV6oWZaLK7Q8YxdOsegP1yo7ZLGyH6IuKPPmtTVOC9C09PqBA9sWkBJUIKP5iA+gfNnPxkApo4ooY/gMEenzaPihHPt+USvpLvgvB/GtNkjSmtSXuYygyRAg6ukejM9PC+3waecH0rGtYuNZ2gKzdAboPMIlL7Z066A3b7+xrqbicYVtmKRrtdJZ3nuztNcFFhD6sBkl2fY6i2Xf8bYbE45LiNSrKB8a+DrgFRCuhlgtagesFALik5a9zBSSVIARMFlDgZqrJimQIbsTwprIAuqoUN2MDMTlmKIFzDheOZHyo8IGp+JyXztttzWz35RfPP68stJWJ0+2t5X2HFw6ERBTLpXeg/2RZ/CgHWNKJxBhOGKZONFZUOwPGy6BDQq9TX+ZQG6T3Eyhbg0zFM="); + setCollideable(true); + } + + @Override + public void onRightClick(NPCRightClickEvent event) { + Player player = event.getClicker(); + //MenuManager.openMenu(player, "heads"); + ItemStack item = player.getInventory().getItemInMainHand(); + MenuManager.openMenu(player, item != null && item.getType() == Material.SKULL_ITEM ? "auctionhead" : "heads"); + } + + @Override + public void onLeftClick(NPCLeftClickEvent event) { + + } + + @Override + public void onCollide(NPCCollisionEvent event) { + + } + + @Override + public void onPush(NPCPushEvent event) { + + } +} \ No newline at end of file diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/npcs/HitmanNPC.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/npcs/HitmanNPC.java new file mode 100644 index 0000000..743c9bd --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/npcs/HitmanNPC.java @@ -0,0 +1,59 @@ +package net.grandtheftmc.gtm.users.npcs; + +import net.citizensnpcs.api.event.NPCCollisionEvent; +import net.citizensnpcs.api.event.NPCLeftClickEvent; +import net.citizensnpcs.api.event.NPCPushEvent; +import net.citizensnpcs.api.event.NPCRightClickEvent; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.npc.CoreNPC; +import net.grandtheftmc.core.npc.interfaces.ClickableNPC; +import net.grandtheftmc.core.npc.interfaces.CollideableNPC; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.GTMUtils; +import net.grandtheftmc.gtm.users.JobMode; +import org.bukkit.Location; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; + +public class HitmanNPC extends CoreNPC implements ClickableNPC, CollideableNPC { + + public HitmanNPC(Location loc) { + super(loc, EntityType.PLAYER, "&3&lHitman", "&o&7Seek down bounties for money."); + } + + @Override + protected void generateNewNPC() { + setLookClose(true); + setSkin("eyJ0aW1lc3RhbXAiOjE1MjEyMjg5MTkxMTYsInByb2ZpbGVJZCI6IjExODAxYzEzMGNiYzQ5MGY4YmEzM2E0MTMxMTZiNzk1IiwicHJvZmlsZU5hbWUiOiIweDE5ZCIsInNpZ25hdHVyZVJlcXVpcmVkIjp0cnVlLCJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZjM3MDEwYzRiNjZkZjQwNzcyZDY0NDU0YTZlZGI5N2MzYjFkYTNhNzM3ZDY1YjVmYjViOGFmZTk3ZTcwNjIifX19", + "qPMTqj42MLzHgymB8piUecAgQyGR+kjS7euyOZV0mLoVAfmJXfSWX2GWOmykBuQ8B2jy66AAT/EzGFFMJFdNsilXsGgdYamEV2hLXUfk36yOzKcqGDS3KNoRy352vIlbeVvZVooVhcTsB7sE5uZYx5Qkaqj1+1D3lyruC7ZffbZLFhRXeNlqsGCds9pG8Fp2jUjrYSDNN6aXEZ9p28AKL6PG0NjxuIav0MfITC8HizND1PuN36P2F2qqnxAU4VfIBYaCSLFXicCp/S6A87RclHEQLrXUDzDcJFrkXtcvp0RQsHhmLNAryaVbFwmDRzJ4jyPTc3aFS+66aVf/SbDkGylPl+sDRVltg0q8sbLc7k4y3exhdGUQRs2N55gzwcUBFcZ6ple/B640xy1uoTHNZs3xqUJhQK8jM9odgIxeLIQ/fktQ1OXnQmgrm1S7owJ9t3vy5/yR2mSix/b+2WCARIS/4A73YKKyFkt2X020ElFaQHB0d3D+RHJE9j4cLNNEps/vWgX8FN8G2JFXXV0lDq7an7vE8hJTqdqNBp3Lb3Ly2poasFNQn/gIasp6U008k8mhWvb0BYhL4eLhN9BwSVtdZ6uYxKyH4NCdhkYFVydSCIYvvNDiSGN5DmfiGHM0DUCvCSjr+rvAoulaXQT7Axby+XaO7937LskIjYsVC7k="); + } + + @Override + public void onRightClick(NPCRightClickEvent event) { + Player player = event.getClicker(); + + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + if (Core.getSettings().isUseEditMode() && user.hasEditMode()) + return; + + JobMode mode = JobMode.getModeOrNull("HITMAN"); + if (mode == null) return; + GTMUtils.chooseJobMode(player, user, GTM.getUserManager().getLoadedUser(player.getUniqueId()), mode); + } + + @Override + public void onLeftClick(NPCLeftClickEvent event) { + + } + + @Override + public void onCollide(NPCCollisionEvent event) { + + } + + @Override + public void onPush(NPCPushEvent event) { + + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/npcs/MechanicNPC.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/npcs/MechanicNPC.java new file mode 100644 index 0000000..097135b --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/npcs/MechanicNPC.java @@ -0,0 +1,52 @@ +package net.grandtheftmc.gtm.users.npcs; + +import org.bukkit.Location; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; + +import net.citizensnpcs.api.event.NPCCollisionEvent; +import net.citizensnpcs.api.event.NPCLeftClickEvent; +import net.citizensnpcs.api.event.NPCPushEvent; +import net.citizensnpcs.api.event.NPCRightClickEvent; +import net.grandtheftmc.core.menus.MenuManager; +import net.grandtheftmc.core.npc.CoreNPC; +import net.grandtheftmc.core.npc.interfaces.ClickableNPC; +import net.grandtheftmc.core.npc.interfaces.CollideableNPC; + +/** + * Created by Timothy Lampen on 1/14/2018. + */ +public class MechanicNPC extends CoreNPC implements ClickableNPC, CollideableNPC { + public MechanicNPC(Location loc) { + super(loc, EntityType.PLAYER, "&a&lMechanic Gary", "&7&oRepair your vehicles here!"); + } + + @Override + protected void generateNewNPC() { + setLookClose(true); + setSkin("eyJ0aW1lc3RhbXAiOjE1MTU5ODIyMzkzMTUsInByb2ZpbGVJZCI6IjcwOTU2NDU0NTJkOTRiYTI5YzcwZDFmYTY3YjhkYTQyIiwicHJvZmlsZU5hbWUiOiJIaWRkdXMiLCJzaWduYXR1cmVSZXF1aXJlZCI6dHJ1ZSwidGV4dHVyZXMiOnsiU0tJTiI6eyJ1cmwiOiJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzNmZjM3ZjdiYTBlYzlmMDczYWJhM2VlYTk0OGI3NDMzYzg3YmVmZWNkNzNmYjdjOWQyNjExYWZhMmVlNzY2In19fQ==", "d1UU+O/OvjxxspCnb7gRPXVW0RxpfpcG2ygVWiCZeBC9Mz5ztKRgsska9jqk3bOlupJR+ApefO88DgWrhHIsT0SZyG5e+kqg1r0pYWvE2LpYKmFyL4kgWs9om+KKXP1NGHXVJT9yJ+SdCHwAsqjosuLpg0IGs6e9V+2Tw9Lw3Fhq7GvQuufZjnvpWOKXsMnMRzil8bX3AlLkAvRnYXwOAmWeK/L6BGtT7olb+ewOjZwoKIbLH13kXJJ6BTEoOoFLlczTU+bCYx/Lc5tEkTqJoiTZtxV6oWZaLK7Q8YxdOsegP1yo7ZLGyH6IuKPPmtTVOC9C09PqBA9sWkBJUIKP5iA+gfNnPxkApo4ooY/gMEenzaPihHPt+USvpLvgvB/GtNkjSmtSXuYygyRAg6ukejM9PC+3waecH0rGtYuNZ2gKzdAboPMIlL7Z066A3b7+xrqbicYVtmKRrtdJZ3nuztNcFFhD6sBkl2fY6i2Xf8bYbE45LiNSrKB8a+DrgFRCuhlgtagesFALik5a9zBSSVIARMFlDgZqrJimQIbsTwprIAuqoUN2MDMTlmKIFzDheOZHyo8IGp+JyXztttzWz35RfPP68stJWJ0+2t5X2HFw6ERBTLpXeg/2RZ/CgHWNKJxBhOGKZONFZUOwPGy6BDQq9TX+ZQG6T3Eyhbg0zFM="); + setCollideable(true); + } + + @Override + public void onRightClick(NPCRightClickEvent event) { + Player player = event.getClicker(); + //MenuManager.openMenu(player, "vehicles"); + MenuManager.openMenu(player, "mechanic"); + } + + @Override + public void onLeftClick(NPCLeftClickEvent event) { + + } + + @Override + public void onCollide(NPCCollisionEvent event) { + + } + + @Override + public void onPush(NPCPushEvent event) { + + } +} \ No newline at end of file diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/npcs/PoliceNPC.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/npcs/PoliceNPC.java new file mode 100644 index 0000000..ddc62a0 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/npcs/PoliceNPC.java @@ -0,0 +1,61 @@ +package net.grandtheftmc.gtm.users.npcs; + +import net.citizensnpcs.api.event.NPCCollisionEvent; +import net.citizensnpcs.api.event.NPCLeftClickEvent; +import net.citizensnpcs.api.event.NPCPushEvent; +import net.citizensnpcs.api.event.NPCRightClickEvent; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.menus.MenuManager; +import net.grandtheftmc.core.npc.CoreNPC; +import net.grandtheftmc.core.npc.interfaces.ClickableNPC; +import net.grandtheftmc.core.npc.interfaces.CollideableNPC; + +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.GTMUtils; +import net.grandtheftmc.gtm.users.JobMode; +import org.bukkit.Location; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; + +public class PoliceNPC extends CoreNPC implements ClickableNPC, CollideableNPC { + + public PoliceNPC(Location loc) { + super(loc, EntityType.PLAYER, "&3&lCop", "&o&7Become a Cop and fight crime!"); + } + + @Override + protected void generateNewNPC() { + setLookClose(true); + setSkin("eyJ0aW1lc3RhbXAiOjE1MjEyMjg2NTk5NjEsInByb2ZpbGVJZCI6IjExODAxYzEzMGNiYzQ5MGY4YmEzM2E0MTMxMTZiNzk1IiwicHJvZmlsZU5hbWUiOiIweDE5ZCIsInNpZ25hdHVyZVJlcXVpcmVkIjp0cnVlLCJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMTU5MGFmOGIzNTNiZjk4MzRiMTlhMjk0ZWZhNTUzYmM3NjM5OTEzOTkzNjRlYTRlY2Y4YzBjNjNkOTNhYTU3In19fQ==", + "LlCVPj90DakqMhenHks4mEwK2sHPYf/H3Np4F6dgtkDeUDAVmG7ZJiAewEPtjTXeLcD9RdF1NmZJoLT+FOy4ZVDYTuIMCYis8IHRUCm5zPwV6kqvHFO6ZWBpj4SQEdRE/QeaUVyBpFMHVUx4uknti4gw42pSXnBuik/xMv3Jhf8Qe80YG6CLMB+0mIjb9l1ImlT1O5BGtAlC2gk+mnk1R4sNaW4oy+C4RT7K//T/S+v7YUzjwHQf/0065Cx7EoyhfBXcldnOYdxWDqpYo8JLmq0utuR9g3CDZBwTznu4TLByDmJnFutPNVVXSU1cAYUEPXfAnm5Zkgj1WwnytAh4xG+zn0psk567Po+2ouT7zEiYEfK1jAAU3VkjmrSAgCTu2hisXAZibMzKgBubcnquIipfQin4lGQ9Kp4s51u5tOvl33zsINsTNZi+bSks9j9pN7fqYQmzu3DWIBKKxFwW+LaMY5uGlzaeaYSmSlFEpcreMDsbxTKnJ7oNWOGOwmX6vwJw74is1MmI54g3y6HxCsBCGXvg6LhEjKF7lgwgvV1PLP0B0AgFZkc8H+mF/uU9fNaE95TC0zq7KetNE8/93tnF7G2UyJv6IdM/ZYDEMP1Bi/41T6FTIFRuW2tviri2JwyAF7QnoXmB39M2n8lzqWhFYnfb5w/yQQEbp1v1AWc="); + } + + @Override + public void onRightClick(NPCRightClickEvent event) { + Player player = event.getClicker(); + + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + if (Core.getSettings().isUseEditMode() && user.hasEditMode()) + return; + + JobMode mode = JobMode.getModeOrNull("COP"); + if (mode == null) return; + GTMUtils.chooseJobMode(player, user, GTM.getUserManager().getLoadedUser(player.getUniqueId()), mode); + } + + @Override + public void onLeftClick(NPCLeftClickEvent event) { + + } + + @Override + public void onCollide(NPCCollisionEvent event) { + + } + + @Override + public void onPush(NPCPushEvent event) { + + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/npcs/RewardsNPC.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/npcs/RewardsNPC.java new file mode 100644 index 0000000..8386c73 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/npcs/RewardsNPC.java @@ -0,0 +1,52 @@ +package net.grandtheftmc.gtm.users.npcs; + +import net.citizensnpcs.api.event.NPCCollisionEvent; +import net.citizensnpcs.api.event.NPCLeftClickEvent; +import net.citizensnpcs.api.event.NPCPushEvent; +import net.citizensnpcs.api.event.NPCRightClickEvent; +import net.grandtheftmc.core.menus.MenuManager; +import net.grandtheftmc.core.npc.CoreNPC; +import net.grandtheftmc.core.npc.interfaces.ClickableNPC; +import net.grandtheftmc.core.npc.interfaces.CollideableNPC; + +import org.bukkit.Location; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; + +/** + * Created by Timothy Lampen on 1/14/2018. + */ +public class RewardsNPC extends CoreNPC implements ClickableNPC, CollideableNPC { + + public RewardsNPC(Location loc) { + super(loc, EntityType.PLAYER, "&2&lFree Tony", "&7&oClaim rewards and vote here!"); + } + + @Override + protected void generateNewNPC() { + setLookClose(true); + setSkin("eyJ0aW1lc3RhbXAiOjE1MTU5ODM4MzE4NDYsInByb2ZpbGVJZCI6IjdkYTJhYjNhOTNjYTQ4ZWU4MzA0OGFmYzNiODBlNjhlIiwicHJvZmlsZU5hbWUiOiJHb2xkYXBmZWwiLCJzaWduYXR1cmVSZXF1aXJlZCI6dHJ1ZSwidGV4dHVyZXMiOnsiU0tJTiI6eyJ1cmwiOiJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2I1ZGMyNmUzMjZhNTY5ODUxOTgyM2FiYWFlZWQyODM1YTk3YzY5Yzk4Y2JhMTNhMmYxNDdkMTI5MWU1ZTgifX19", "UonaJdHIdT7paVOCZ5sNTrrV2tMT6lIdGOC/AG5oleC0m1QXuPkoEiWlf26IOzHMV9KfZuTCZPcc35f9+X8ySG+8cMSMXvhAzM6sCxbidB8XoQ8MgfAt/eUBQzyhRU/f02pRpefTaYfNVmjucrpI+GK5Hrq6PfmqxFRyiFVaFcWxL6ZQ23j5REy7lHvbhcqIFy10VRJqzIy4TeNCh9X3aBRoNK/nosUHR+M0qQiTYrAM8eRFFTu/d55ofAZx0dgs7XM4Mp/UswGa1yUdgIwtJSKsVVxgiwQ5/Gj1iWY6SAmcBF9ueySiqSLtopC8NSUzzD8HxiuBvq0yQPSsnxzGljBFcwKUzzCu+c03b8XfcppwV5WXa3uXGDNRHL/MzE9Sdp7vi4Pg2e44kNnakuGA/w0jEMNu4EPz+lgBHL9QIzL1mLZiXc9xGquvDtNVR1QePYY8uRbqVTahXDJmHe/1D0wisrLjiaKQPHhjHsRqk6H6D/Zr+3U1/wH+XHdHqVWhAh4dqznOD3gLCmXmaegRLvkNi0LHhnnurdP1y/CY4UCL/VdC86Q2LANeKCxqx3BSnXctRyMXiL/ZUwK41flbdeiOv3zvR7QwBilqAufQ+zXZCeMUTBU0RDeXeXDUV3LY3LkKIpmO1LqK0PK7uOEDTvW8fX/s/cxXxBcUO15b1mQ="); + setCollideable(true); + } + + @Override + public void onRightClick(NPCRightClickEvent event) { + Player player = event.getClicker(); + MenuManager.openMenu(player, "rewards"); + } + + @Override + public void onLeftClick(NPCLeftClickEvent event) { + + } + + @Override + public void onCollide(NPCCollisionEvent event) { + + } + + @Override + public void onPush(NPCPushEvent event) { + + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/npcs/ShopNPC.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/npcs/ShopNPC.java new file mode 100644 index 0000000..147d86c --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/npcs/ShopNPC.java @@ -0,0 +1,275 @@ +package net.grandtheftmc.gtm.users.npcs; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Optional; +import java.util.Set; +import java.util.stream.Collectors; + +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.inventory.meta.SkullMeta; + +import net.citizensnpcs.api.event.NPCCollisionEvent; +import net.citizensnpcs.api.event.NPCLeftClickEvent; +import net.citizensnpcs.api.event.NPCPushEvent; +import net.citizensnpcs.api.event.NPCRightClickEvent; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.Utils; +import net.grandtheftmc.core.inventory.CoreMenu; +import net.grandtheftmc.core.inventory.CoreMenuFlag; +import net.grandtheftmc.core.inventory.button.ClickableItem; +import net.grandtheftmc.core.npc.CoreNPC; +import net.grandtheftmc.core.npc.interfaces.ClickableNPC; +import net.grandtheftmc.core.npc.interfaces.CollideableNPC; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.items.GameItem; +import net.grandtheftmc.gtm.trashcan.TrashCanManager; +import net.grandtheftmc.gtm.users.GTMUser; +import net.grandtheftmc.guns.WeaponManager; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.Weapon; +import net.grandtheftmc.guns.weapon.WeaponType; + +/** + * Created by Timothy Lampen on 1/14/2018. + */ +public class ShopNPC extends CoreNPC implements ClickableNPC, CollideableNPC { + + private static final Set<String> DISABLED = new HashSet<>(Arrays.asList("clausinator")); + private static final HashMap<AmmoType, Integer> AMMO_MULTIPLIERS = new HashMap<>(); + private final WeaponManager weaponManager; + + static { + AMMO_MULTIPLIERS.put(AmmoType.ASSAULT_RIFLE, 50); + AMMO_MULTIPLIERS.put(AmmoType.GRENADE, 5); + AMMO_MULTIPLIERS.put(AmmoType.ROCKET, 1); + AMMO_MULTIPLIERS.put(AmmoType.LAUNCHER, 1); + AMMO_MULTIPLIERS.put(AmmoType.MINIGUN, 600); + AMMO_MULTIPLIERS.put(AmmoType.PISTOL, 20); + AMMO_MULTIPLIERS.put(AmmoType.SMG, 60); + AMMO_MULTIPLIERS.put(AmmoType.LMG, 40); + AMMO_MULTIPLIERS.put(AmmoType.SHOTGUN, 12); + AMMO_MULTIPLIERS.put(AmmoType.SNIPER, 10); + AMMO_MULTIPLIERS.put(AmmoType.FUEL, 64); + } + + public ShopNPC(WeaponManager weaponManager, Location loc) { + super(loc, EntityType.PLAYER, "&9&lGary McNaggins", "&7&oBuy the best guns and ammo here!"); + this.weaponManager = weaponManager; + } + + @Override + protected void generateNewNPC() { + setLookClose(true); + setSkin("eyJ0aW1lc3RhbXAiOjE1MDc2MTM5NzI2NDUsInByb2ZpbGVJZCI6ImUzYjQ0NWM4NDdmNTQ4ZmI4YzhmYTNmMWY3ZWZiYThlIiwicHJvZmlsZU5hbWUiOiJNaW5pRGlnZ2VyVGVzdCIsInNpZ25hdHVyZVJlcXVpcmVkIjp0cnVlLCJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZGUyYjUwYzI4NDQ1YmQyOWE2OGRmZTIyM2M0YzlmZDYyZTYyOWNkNWU1ZDdjMTc3NzIwNmU4YjRkNjMxIn19fQ==", "gza3eHED3BMmxRjZmDDUQQliH10Q4e8U5uKNv0RaGfOKdPOxMToH2rqSpyNeS+odXQvAq6cDZulKk5LZgcs89kpv+Jkb3sfWdUb6HnJvqkeA+4iTw3n9BxRZpoC0lyBmiJSQPlSwywgjmd9cybGPtgX3+WpbExRDYy90X8ii3iN9dlFlNWFiInNZjBUUjslcqnD8VEkItonJwNbPbXkgvHu0qmiBon6bWmnI81cO0DekrxOGAbQQynNosnGVbV7oGTAtN87G9zM7McNvMXK+1BJqAxdqad3U2Jfnu3PHDZ1pDCJIA+5yQiiTblQPzYx9Fp73E2NpS51239/P5B0bWOa8MWGK2fKCznxRy/lZTd/3Ewojxu9guWann0ALLeYyvXA/FDY1vY6clRF50JyhgBR6Tf58lOF8kkq964gdpYlhtldI1ZWf8jn/inK//b3rNmqu046oKQLuhYjxVNoV4lrzzb+pzjjKx2/iBXqzxnWTjrTLZv6n6jLS9aFghryaLbUXc4IETj+MsZ5Z9WdPCG02V3f3Z+5aFZfMg2zkj1qQxDVhrdJr/87lE23ZupYDV1szocx39JF1gtwbKhTugVKlDV4UQZHokFdcFRtMLSpX7zJwNLiVK/+aMN1YbGQzdwII9CFXN2DtgawzTnQQafEBwNiyp3GAcPTE9VqffFY="); + setCollideable(true); + } + + @Override + public void onRightClick(NPCRightClickEvent event) { + Player player = event.getClicker(); + + if (!GTM.getSettings().canBuy()){ + player.sendMessage(ChatColor.RED + "Buying things is currently disabled."); + return; + } + + new CategoryMenu().openInventory(player); + } + + @Override + public void onLeftClick(NPCLeftClickEvent npcLeftClickEvent) { + + } + + @Override + public void onCollide(NPCCollisionEvent event) { + + } + + @Override + public void onPush(NPCPushEvent event) { + + } + + private class CategoryMenu extends CoreMenu { + private final int[] CATEGORY_SLOTS = new int[]{20, 21, 22, 23, 24, 29, 30, 31, 32, 33}; + private int counter = 0; + + protected CategoryMenu() { + super(6, Utils.f("&c&lChoose Category"), CoreMenuFlag.PHONE_LAYOUT); + addItem(getCategoryPlaceholder(WeaponType.THROWABLE, Utils.f("&7&oRemember: Don't miss!"))); + addItem(getCategoryPlaceholder(WeaponType.MELEE, Utils.f("&7&oFor when you need to get close and personal."))); + addItem(getCategoryPlaceholder(WeaponType.PISTOL, Utils.f("&7&oA basic gun; point, shoot, kill."))); + addItem(getCategoryPlaceholder(WeaponType.LMG, Utils.f("&7&oSlow and steady wins the race... so do a lot of bullets."))); + addItem(getCategoryPlaceholder(WeaponType.SMG, Utils.f("&7&oFor when you need to get close and personal."))); + addItem(getCategoryPlaceholder(WeaponType.SHOTGUN, Utils.f("&7&oDamage? Check! Spread? Check!"), Utils.f("&7&oOverall coolness factor? What more could you want!?"))); + addItem(getCategoryPlaceholder(WeaponType.ASSAULT, Utils.f("&7&oNow we're talking!"))); + addItem(getCategoryPlaceholder(WeaponType.LAUNCHER, Utils.f("&7&oWhen you're too lazy to throw..."))); + addItem(getCategoryPlaceholder(WeaponType.SNIPER, Utils.f("&7&oNot all battles are fought at close range."))); + addItem(getCategoryPlaceholder(WeaponType.SPECIAL, Utils.f("&7&oRespect comes in many forms..."), Utils.f("&7&oespecially that of a giant death machine!"))); + + addItem(getSellWeaponsButton()); + } + + private ClickableItem getCategoryPlaceholder(WeaponType type, String... lore) { + Optional<Weapon<?>> optWeapon = type == WeaponType.SPECIAL ? weaponManager.getWeapon("minigun") : weaponManager.getRegisteredWeapons().stream().filter(w -> w.getWeaponType() == type && GTM.getItemManager().getItemFromWeapon(w.getCompactName()) != null && GTM.getItemManager().getItemFromWeapon(w.getCompactName()).canBuy()).findFirst(); + if (!optWeapon.isPresent()) { + return new ClickableItem(CATEGORY_SLOTS[counter++], new ItemStack(Material.STONE), ((player, clickType) -> { + new ShopMenu(type).openInventory(player); + }), false); + } + + ItemStack is = optWeapon.get().getBaseItemStack().clone(); + ItemMeta im = is.getItemMeta(); + im.setDisplayName(Utils.f("&a&l" + type.toString())); + im.setLore(Arrays.asList(lore)); + im.setUnbreakable(true); + im.setUnbreakable(true); + im.addItemFlags(ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ATTRIBUTES); + is.setItemMeta(im); + return new ClickableItem(CATEGORY_SLOTS[counter++], is, ((player, clickType) -> { + new ShopMenu(type).openInventory(player); + }), false); + } + + private ClickableItem getSellWeaponsButton() { + ItemStack is = new ItemStack(Material.PAPER); + ItemMeta im = is.getItemMeta(); + im.setDisplayName(Utils.f("&a&lSell Weapons")); + is.setItemMeta(im); + + return new ClickableItem(49, is, ((player, clickType) -> { + player.closeInventory(); + TrashCanManager.openTrashCan(player); + })); + } + } + + private class ShopMenu extends CoreMenu { + + private final int[] WEAPON_SPOTS = new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 38, 39, 40, 41, 42}; + + /** + * PAGE LEGEND + * 1 - GRENADES + * 2 - MELEE + * 3 - PISTOLS + * 4 - SMGS + * 5 - LMGS + * 6 - SHOTGUNS + * 7 - ASSAULT + * 8 - LAUNCHER + * 9 - SPECIAL + */ + protected ShopMenu(WeaponType type) { + super(6, Utils.f("&9&lPurchase " + type.toString()), CoreMenuFlag.PHONE_LAYOUT); + addItem(getBackwardSelector()); + + int counter = 0; + Set<Weapon<?>> filtered = weaponManager.getRegisteredWeapons().stream().filter(w -> { + if (w == null) + return false; + if (DISABLED.contains(w.getName().toLowerCase())) + return false; + return w.getWeaponType() == type || (type == WeaponType.SPECIAL && (w.getWeaponType() != WeaponType.MELEE && w.getWeaponType() != WeaponType.ASSAULT && w.getWeaponType() != WeaponType.LAUNCHER && w.getWeaponType() != WeaponType.THROWABLE && w.getWeaponType() != WeaponType.SMG && w.getWeaponType() != WeaponType.LMG && w.getWeaponType() != WeaponType.SHOTGUN && w.getWeaponType() != WeaponType.PISTOL && w.getWeaponType() != WeaponType.SNIPER)); + }).collect(Collectors.toSet()); + + for (Weapon<?> w : filtered) { + GameItem item = GTM.getItemManager().getItemFromWeapon(w.getCompactName()); + if (item == null) { + Core.error("[ShopNPC] Unable to load gameitem from weapon: " + w.getCompactName()); + continue; + } + if (!item.canBuy()) { + ServerUtil.debug("[ShopNPC] Unable to find buy price for weapon: " + w.getCompactName() + " is it suppose to be like that?"); + continue; + } + ItemStack is = item.getItem(); + ItemMeta im = is.getItemMeta(); + im.setDisplayName(Utils.f("&6" + w.getName())); + List<String> lore = new ArrayList<>(); + lore.add(Utils.f("&6&lBuy Weapon &8(&6Left Click&8)&6: $&a" + item.getBuyPrice())); + + GameItem ammoItem = null; + if (type != WeaponType.THROWABLE && type != WeaponType.MELEE && w.getAmmoType() != AmmoType.NONE) { + if (type == WeaponType.LMG) + ammoItem = net.grandtheftmc.gtm.items.AmmoType.MG.getGameItem();//because of how the naming of the wastedguns / gtmguns is :( + else + ammoItem = net.grandtheftmc.gtm.items.AmmoType.getAmmoType(w.getAmmoType().toString()).getGameItem(); + if (ammoItem == null) { + Core.error("[ShopNPC] Unable to load ammo from string: " + w.getAmmoType() + " for weapon: " + w.getName()); + return; + } + + lore.add(Utils.f("&6&lBuy x&b&l" + AMMO_MULTIPLIERS.get(w.getAmmoType()) + "&6&l Ammo &8(&6Right Click&8)&6: $&a" + (ammoItem.getBuyPrice() * AMMO_MULTIPLIERS.get(w.getAmmoType())))); + } + im.setLore(lore); + is.setItemMeta(im); + + final GameItem finalAmmoItem = ammoItem; + + addItem(new ClickableItem(WEAPON_SPOTS[counter], is, (player, clickType) -> { + GTMUser user = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + switch (clickType) { + case LEFT: + case SHIFT_LEFT: + if (!user.hasMoney(item.getBuyPrice())) { + player.sendMessage(Lang.SHOP.f("&cYou do not have enough money for this item!")); + return; + } + user.takeMoney(item.getBuyPrice()); + Utils.giveItems(player, item.getItem()); + break; + case RIGHT: + case SHIFT_RIGHT: + + if (finalAmmoItem == null) + return; + if (!user.hasMoney(finalAmmoItem.getBuyPrice() * AMMO_MULTIPLIERS.get(w.getAmmoType()))) { + player.sendMessage(Lang.SHOP.f("&cYou do not have enough money for this item!")); + return; + } + + net.grandtheftmc.gtm.items.AmmoType ammoType = net.grandtheftmc.gtm.items.AmmoType.getAmmoType(w.getAmmoType().getType()); + + // for some reason this can be null + if (ammoType == null){ + return; + } + + user.takeMoney(finalAmmoItem.getBuyPrice() * AMMO_MULTIPLIERS.get(w.getAmmoType())); + user.addAmmo(ammoType, AMMO_MULTIPLIERS.get(w.getAmmoType())); + player.sendMessage(Lang.AMMO_ADD.f(AMMO_MULTIPLIERS.get(w.getAmmoType()) + "&7 " + w.getAmmoType().toString())); + break; + } + }, false)); + counter++; + } + } + + + private ClickableItem getBackwardSelector() { + ItemStack is = new ItemStack(Material.SKULL_ITEM, 1, (short) 3); + SkullMeta im = (SkullMeta) is.getItemMeta(); + im.setOwner("MHF_ArrowLeft"); + im.setDisplayName(Utils.f("&cBack")); + is.setItemMeta(im); + return new ClickableItem(47, is, ((player, clickType) -> { + new CategoryMenu().openInventory(player); + })); + } + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/npcs/SkinsNPC.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/npcs/SkinsNPC.java new file mode 100644 index 0000000..6d76901 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/npcs/SkinsNPC.java @@ -0,0 +1,47 @@ +package net.grandtheftmc.gtm.users.npcs; + +import org.bukkit.Location; +import org.bukkit.entity.EntityType; + +import net.citizensnpcs.api.event.NPCCollisionEvent; +import net.citizensnpcs.api.event.NPCLeftClickEvent; +import net.citizensnpcs.api.event.NPCPushEvent; +import net.citizensnpcs.api.event.NPCRightClickEvent; +import net.grandtheftmc.core.npc.CoreNPC; +import net.grandtheftmc.core.npc.interfaces.ClickableNPC; +import net.grandtheftmc.core.npc.interfaces.CollideableNPC; +import net.grandtheftmc.gtm.weapon.skins.menu.MainMenu; + +public class SkinsNPC extends CoreNPC implements ClickableNPC, CollideableNPC { + public SkinsNPC(Location location) { + super(location, EntityType.PLAYER, "&9&lMr Skinner", "&7&oManage and view your weapon skins here!"); + } + + @Override + protected void generateNewNPC() { + setLookClose(true); + setSkin("eyJ0aW1lc3RhbXAiOjE1MTg1NjMxNzk3MDEsInByb2ZpbGVJZCI6Ijc2MTJhZWU1YTk5YjQxZWRiYTg3Nzg4MGMyMjZiMzM2IiwicHJvZmlsZU5hbWUiOiJGbG91cmVrIiwic2lnbmF0dXJlUmVxdWlyZWQiOnRydWUsInRleHR1cmVzIjp7IlNLSU4iOnsidXJsIjoiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS8yNjE0ODNmMGIxNjc2OWQ2NGFlMTI5Yjg5ZDYyY2M3N2M1Mzk0OGRlZTVmYzQ2MmFlNTQ1OTQyZWYwNDdjNzliIn19fQ==", + "svzvIYm7x02JAMpjnW+oKQAM48jpzTNvKtLVSPGuL7DjWjZOuH+fjrw6tqGWKAHZYbR7QaIfNiHKk/uKbF8gGij9jxphAZuD47p53ALODYwbopir2lSdmMl+flPggTS7dWYmPfQsnSa4t13O1yLZMmdtFUTzyJQYZqFeU+Ss7CAiU0Xxvi5SNqlrLlm+utDaQQoobfkHeuHBe1/bFDNrTx7iYGYuPqn3Y5T8YtqgyRVaQsoDyeAmONNJE5R/o8MVOEFKtqE/MqL5ONpAFkkM1iDlajj+C3lhJ/3ORnpA6HTTyAGvLLZJNXBNM2+nl4x7hyEMw6kQJ5JCh3uFGbJamXvpi/pFQS2rBI1OZVzhZbYIE9/dfqxK6MH7A9Z1XlCPYQPFmQzh0unJH8y4OTBxfUsEjaIgB8AG61SjuyJqFo5oeJ2DJ1kO8ua72tLl13ron/fk+AfGeW16LuwxIy1XaUki4UC5MRcE0wj7ou68ME1gR/XmjpQDuaPaJj7yf+epFHc9lDARtb21yqOkYJXAKiN6ec8HU7uhIXW142K+bhzFGTfUZ6jxnL54TQ6qWojwpM/VEM8ewsMaL4Xf3Kh5hPzuXeylca4qPZzhsJ2I9Bf09i1TknDVTnW8qgmz4WZynyBNMdWZ60w25q/afM1DB9QuzUo2Qa+y2z7MSDALMCw="); + setCollideable(true); + } + + @Override + public void onRightClick(NPCRightClickEvent event) { + new MainMenu(event.getClicker()).open(); + } + + @Override + public void onLeftClick(NPCLeftClickEvent npcLeftClickEvent) { + + } + + @Override + public void onCollide(NPCCollisionEvent event) { + + } + + @Override + public void onPush(NPCPushEvent event) { + + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/npcs/TaxiNPC.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/npcs/TaxiNPC.java new file mode 100644 index 0000000..f1650f1 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/users/npcs/TaxiNPC.java @@ -0,0 +1,112 @@ +package net.grandtheftmc.gtm.users.npcs; + +import net.citizensnpcs.api.event.NPCCollisionEvent; +import net.citizensnpcs.api.event.NPCLeftClickEvent; +import net.citizensnpcs.api.event.NPCPushEvent; +import net.citizensnpcs.api.event.NPCRightClickEvent; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.menus.MenuManager; +import net.grandtheftmc.core.npc.CoreNPC; +import net.grandtheftmc.core.npc.interfaces.ClickableNPC; +import net.grandtheftmc.core.npc.interfaces.CollideableNPC; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.users.GTMRank; +import net.grandtheftmc.gtm.users.GTMUser; +import net.grandtheftmc.gtm.users.TaxiTarget; +import org.bukkit.ChatColor; +import org.bukkit.Color; +import org.bukkit.Location; +import org.bukkit.Particle; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; +import org.bukkit.scheduler.BukkitRunnable; + +/** + * Created by Timothy Lampen on 1/14/2018. + */ +public class TaxiNPC extends CoreNPC implements ClickableNPC, CollideableNPC { + + public TaxiNPC(Location loc) { + super(loc, EntityType.PLAYER, "&e&lGerald Hackney", "&7&oGo to the game world!"); + } + + @Override + protected void generateNewNPC() { + setSkin("eyJ0aW1lc3RhbXAiOjE1MTU5NzAzNjYzNDUsInByb2ZpbGVJZCI6ImFkMWM2Yjk1YTA5ODRmNTE4MWJhOTgyMzY0OTllM2JkIiwicHJvZmlsZU5hbWUiOiJGdXJrYW5iejAwIiwic2lnbmF0dXJlUmVxdWlyZWQiOnRydWUsInRleHR1cmVzIjp7IlNLSU4iOnsidXJsIjoiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS9jYzUzZWQyMzJlYWQyNmU4Y2I0NzJiMGFmOGIyMDQyYjdhZjljZDMyOGRlM2M0YTZlNGQzNjNiNDNiZDlmNDUifX19", "hLKOkCuejv8K7bwWS/SKY6jrxJXNojg4eiv1/TPkKJ/1Hc+njUE99IPLCuexppJASlUEMe2815FfDwS4PTzMzgxBeLPdcB/xJR8BZw4FuvodIXfLubmVkxme245u0hRHfVlPLk31l4dyPFEwRMhbSmHacVroB8pebEov6+164p3fUnctqlM48bf6lNfpsbhY46nvqPVRVtv9ljTL6FwBPDvnZL97zTSsUqjKjLUJMTtuHIaAj26Q9+M9y4rP1VMInDWrgfXpEuwz32xy/2HiHHQrGMrNxU9MmshDX1BTJ4UAxmipmj+pJENRSon3GrIgLE7t/yP0Z1ZCcfHFqZtzLHKPXzt+u4jW5hl9bFUU9d9HSUEV0qt+nD68a1yNiWPE2rB0l549v+AZ5D8bktSpvdLy574/uBLLXbM8JJk8g1iFgyeEpQS8TJuHfnyV62KU6lML5+MTt7/zBXlRh2+Vz89Ti0fbZs1g6NdcJWQisCTtVPMBiws9yoitmSsqKk+8/8WYQX7EYXLGilL7gavoBZhlIyP0P8ltTc4oHfcwoOtoZvPivauUv8lHZu18tZpOE1kq28lNuBdytLTWTuJckDzeRwbB8pHCQKB628nRLt2Xp1N57CNnc9XW/3sWY+rKTRHRNw7BvVqoaCAXP4tNo+c7frELxv+CgWMxRcE2g5E="); + setLookClose(true); + setCollideable(true); + setGlowing(ChatColor.GREEN); + + new BukkitRunnable() { + @Override + public void run() { + if (!getNPC().isSpawned()) { + this.cancel(); + } else { + getStartingLoc().getWorld().spawnParticle(Particle.VILLAGER_HAPPY, getStartingLoc(), 25, 1.2, 1, 1.2); + +// LivingEntity entity = (LivingEntity) TaxiNPC.this.getNPC().getEntity(); +// if (entity.hasPotionEffect(PotionEffectType.GLOWING)) +// entity.removePotionEffect(PotionEffectType.GLOWING); +// +// entity.addPotionEffect(new PotionEffect(PotionEffectType.GLOWING, 20, 0, false, false, colors[i[0]])); + } + } + }.runTaskTimer(GTM.getInstance(), 20, 20); + } + + @Override + public void onRightClick(NPCRightClickEvent event) { + Player player = event.getClicker(); + + GTMUser user = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + if (player.isSneaking() || user.getRank() == GTMRank.HOBO) { + GTM.getWarpManager().warp( + player, + Core.getUserManager().getLoadedUser(player.getUniqueId()), + user, + new TaxiTarget(GTM.getWarpManager().getRandomWarp()), + 0, + Core.getUserManager().getLoadedUser(player.getUniqueId()).isPremium() ? 1 : 10 + ); + + return; + } + + MenuManager.openMenu(player, "taxi"); + } + + @Override + public void onLeftClick(NPCLeftClickEvent event) { + Player player = event.getClicker(); + + GTMUser user = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + if (player.isSneaking() || user.getRank() == GTMRank.HOBO) { + GTM.getWarpManager().warp( + player, + Core.getUserManager().getLoadedUser(player.getUniqueId()), + user, + new TaxiTarget(GTM.getWarpManager().getRandomWarp()), + 0, + Core.getUserManager().getLoadedUser(player.getUniqueId()).isPremium() ? 1 : 10 + ); + + return; + } + + MenuManager.openMenu(player, "taxi"); + } + + @Override + public void onCollide(NPCCollisionEvent event) { + + } + + @Override + public void onPush(NPCPushEvent event) { + + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/utils/ItemStackUtil.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/utils/ItemStackUtil.java new file mode 100644 index 0000000..77527bf --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/utils/ItemStackUtil.java @@ -0,0 +1,82 @@ +package net.grandtheftmc.gtm.utils; + +import net.grandtheftmc.core.util.ItemStackManager; +import net.minecraft.server.v1_12_R1.NBTTagCompound; +import net.minecraft.server.v1_12_R1.NBTTagInt; +import net.minecraft.server.v1_12_R1.NBTTagString; +import org.bukkit.Material; +import org.bukkit.craftbukkit.v1_12_R1.inventory.CraftItemStack; +import org.bukkit.inventory.ItemStack; + +/** + * Created by Luke Bingham on 06/08/2017. + */ +public class ItemStackUtil { + + public static ItemStack makeStackable(org.bukkit.inventory.ItemStack itemStack, int stacksize) { + if(itemStack == null || itemStack.getType() == Material.AIR) return itemStack; + + ItemStackManager.STACKABLES.put(itemStack.getType(), stacksize); + + net.minecraft.server.v1_12_R1.ItemStack stack = org.bukkit.craftbukkit.v1_12_R1.inventory.CraftItemStack.asNMSCopy(itemStack); + stack.getItem().d(stacksize); + itemStack = org.bukkit.craftbukkit.v1_12_R1.inventory.CraftItemStack.asBukkitCopy(stack); + + return itemStack; + } + + public static ItemStack removeStackable(org.bukkit.inventory.ItemStack itemStack) { + if(itemStack == null || itemStack.getType() == Material.AIR) return itemStack; + + net.minecraft.server.v1_12_R1.ItemStack stack = org.bukkit.craftbukkit.v1_12_R1.inventory.CraftItemStack.asNMSCopy(itemStack); + stack.getItem().d(1); + itemStack = org.bukkit.craftbukkit.v1_12_R1.inventory.CraftItemStack.asBukkitCopy(stack); + + return itemStack; + } + + public static ItemStack addTag(ItemStack itemStack, String key, int value) { + net.minecraft.server.v1_12_R1.ItemStack nmsItem = CraftItemStack.asNMSCopy(itemStack); + NBTTagCompound compound = nmsItem.hasTag() ? nmsItem.getTag() : new NBTTagCompound(); + if (compound == null) compound = new NBTTagCompound(); + + compound.set(key, new NBTTagInt(value)); + nmsItem.setTag(compound); + nmsItem.save(compound); + + return CraftItemStack.asBukkitCopy(nmsItem); + } + + public static ItemStack addTag(ItemStack itemStack, String key, String value) { + net.minecraft.server.v1_12_R1.ItemStack nmsItem = CraftItemStack.asNMSCopy(itemStack); + NBTTagCompound compound = nmsItem.hasTag() ? nmsItem.getTag() : new NBTTagCompound(); + if (compound == null) compound = new NBTTagCompound(); + + compound.set(key, new NBTTagString(value)); + nmsItem.setTag(compound); + nmsItem.save(compound); + + return CraftItemStack.asBukkitCopy(nmsItem); + } + + public static boolean hasTag(ItemStack itemStack, String key) { + net.minecraft.server.v1_12_R1.ItemStack nmsItem = CraftItemStack.asNMSCopy(itemStack); + return nmsItem.hasTag() && nmsItem.getTag() != null && nmsItem.getTag().hasKey(key); + } + + private static boolean hasTag(net.minecraft.server.v1_12_R1.ItemStack nmsItem, String key) { + return nmsItem.hasTag() && nmsItem.getTag() != null && nmsItem.getTag().hasKey(key); + } + + public static int getIntTag(ItemStack itemStack, String key) { + net.minecraft.server.v1_12_R1.ItemStack nmsItem = CraftItemStack.asNMSCopy(itemStack); + NBTTagCompound tag = nmsItem.getTag(); + return Integer.parseInt(tag.get(key).toString()); + } + + public static Object getTag(ItemStack itemStack, String key) { + net.minecraft.server.v1_12_R1.ItemStack nmsItem = CraftItemStack.asNMSCopy(itemStack); + NBTTagCompound tag = nmsItem.getTag(); + return tag.get(key).toString(); + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/utils/ParticleColor.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/utils/ParticleColor.java new file mode 100644 index 0000000..6a5aba2 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/utils/ParticleColor.java @@ -0,0 +1,206 @@ +package net.grandtheftmc.gtm.utils; + + import java.util.Arrays; + import java.util.List; + +/** + * Represents a particle color + */ +@SuppressWarnings("WeakerAccess") +public class ParticleColor { + // Standard Minecraft Chat Colors + public static final ParticleColor BLACK = new ParticleColor(0, 0, 0); // 0x000000 + public static final ParticleColor DARK_BLUE = new ParticleColor(0, 0, 170); // 0x0000AA + public static final ParticleColor DARK_GREEN = new ParticleColor(0, 170, 0); // 0x00AA00 + public static final ParticleColor DARK_AQUA = new ParticleColor(0, 170, 170); // 0x00AAAA + public static final ParticleColor DARK_RED = new ParticleColor(170, 0, 0); // 0xAA0000 + public static final ParticleColor DARK_PURPLE = new ParticleColor(170, 0, 170); // 0xAA00AA + public static final ParticleColor GOLD = new ParticleColor(255, 170, 0); // 0xFFAA00 + public static final ParticleColor GRAY = new ParticleColor(170, 170, 170); // 0xAAAAAA + public static final ParticleColor DARK_GRAY = new ParticleColor(85, 85, 85); // 0x555555 + public static final ParticleColor BLUE = new ParticleColor(85, 85, 255); // 0x5555FF + public static final ParticleColor GREEN = new ParticleColor(85, 255, 85); // 0x55FF55 + public static final ParticleColor AQUA = new ParticleColor(85, 255, 255); // 0x55FFFF + public static final ParticleColor RED = new ParticleColor(255, 85, 85); // 0xFF5555 + public static final ParticleColor LIGHT_PURPLE = new ParticleColor(255, 85, 255); // 0xFF55FF + public static final ParticleColor YELLOW = new ParticleColor(255, 255, 85); // 0xFFFF55 + public static final ParticleColor WHITE = new ParticleColor(255, 255, 255); // 0xFFFFFF + + /** + * List of all pre-named colors + */ + public static final List<String> names = Arrays.asList( + "black", + "dark-blue", + "dark-green", + "dark-aqua", + "dark-red", + "dark-purple", + "gold", + "gray", + "dark-gray", + "blue", + "green", + "aqua", + "red", + "light-purple", + "yellow", + "white" + ); + + private final float red; + private final float green; + private final float blue; + + /** + * Creates a new particle color from RGB values 0 - 255 + * + * @param red Red value + * @param green Green value + * @param blue Blue value + */ + public ParticleColor(int red, int green, int blue) { + // values of 0 are changed to 0.0001 for black + // due to the way the particle packet works + this.red = (red == 0 ? 0.0001F : red) / 255; + this.green = (green == 0 ? 0.0001F : green) / 255; + this.blue = (blue == 0 ? 0.0001F : blue) / 255; + } + + /** + * Get the red value + * <p> + * The values 0.0 - 1.0 represent 0 - 255 + * + * @return Red value + */ + public float getRed() { + return red; + } + + /** + * Get the green value + * <p> + * The values 0.0 - 1.0 represent 0 - 255 + * + * @return Green value + */ + public float getGreen() { + return green; + } + + /** + * Get the blue value + * <p> + * The values 0.0 - 1.0 represent 0 - 255 + * + * @return Blue value + */ + public float getBlue() { + return blue; + } + + /** + * Get the hexadecimal color code for this color + * + * @return Hexadecimal color code + */ + public String getHex() { + return String.format("#%02x%02x%02x", (int) (red * 255), (int) (green * 255), (int) (blue * 255)).toUpperCase(); + } + + /** + * Get color by name or hex code + * <p> + * Invalid colors will default to RED + * + * @param color Color name or hex code + * @return ParticleColor + */ + public static ParticleColor getColor(String color) { + ParticleColor actual = getColorExact(color); + return actual == null ? RED : actual; + } + + /** + * Get color by name or hex code + * <p> + * Invalid colors return NULL + * + * @param color Color name or hex code + * @return ParticleColor + */ + public static ParticleColor getColorExact(String color) { + switch (color.toUpperCase()) { + case "BLACK": + return BLACK; + case "DARK_BLUE": + return DARK_BLUE; + case "DARK_GREEN": + return DARK_GREEN; + case "DARK_AQUA": + return DARK_AQUA; + case "DARK_RED": + return DARK_RED; + case "DARK_PURPLE": + return DARK_PURPLE; + case "GOLD": + return GOLD; + case "GRAY": + return GRAY; + case "DARK_GRAY": + return DARK_GRAY; + case "BLUE": + return BLUE; + case "GREEN": + return GREEN; + case "AQUA": + return AQUA; + case "RED": + return RED; + case "LIGHT_PURPLE": + return LIGHT_PURPLE; + case "YELLOW": + return YELLOW; + case "WHITE": + return WHITE; + } + + if (color.startsWith("#")) { + color = color.substring(1); // remove # sign if present + } + + ParticleColor particleColor = null; + + if (color.length() < 6) { + return null; + } + + try { + particleColor = new ParticleColor( + Integer.valueOf(color.substring(0, 2), 16), + Integer.valueOf(color.substring(2, 4), 16), + Integer.valueOf(color.substring(4, 6), 16) + ); + } catch (Exception ignore) { + } + + return particleColor; + } + + /** + * Get a human readable String representation of this color + * + * @return Human readable String representation of color + */ + @Override + public String toString() { + return "ParticleColor[red:[" + + red + + "], green:[" + + green + + "], blue:[" + + blue + + "]]"; + } +} \ No newline at end of file diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/utils/RandomUtil.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/utils/RandomUtil.java new file mode 100644 index 0000000..25d00cc --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/utils/RandomUtil.java @@ -0,0 +1,7 @@ +package net.grandtheftmc.gtm.utils; + +import java.util.Random; + +public class RandomUtil { + public static final Random RANDOM = new Random(); +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/utils/ReflectionUtil.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/utils/ReflectionUtil.java new file mode 100644 index 0000000..3024cb5 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/utils/ReflectionUtil.java @@ -0,0 +1,210 @@ +package net.grandtheftmc.gtm.utils; + +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; + +import java.lang.reflect.Constructor; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.HashMap; +import java.util.Map; + +public final class ReflectionUtil { + + /* + * The server version string to location NMS & OBC classes + */ + private static String versionString; + + /* + * Cache of NMS classes that we've searched for + */ + private static final Map<String, Class<?>> LOADED_NMS_CLASSES = new HashMap<>(); + + /* + * Cache of OBS classes that we've searched for + */ + private static final Map<String, Class<?>> LOADED_OBC_CLASSES = new HashMap<>(); + + /* + * Cache of methods that we've found in particular classes + */ + private static final Map<Class<?>, Map<String, Method>> LOADED_METHODS; + + static { + LOADED_METHODS = new HashMap<>(); + } + + /* + * Cache of fields that we've found in particular classes + */ + private static final Map<Class<?>, Map<String, Field>> LOADED_FIELDS = new HashMap<>(); + + private ReflectionUtil() { + } + + /** + * Gets the version string for NMS & OBC class paths + * + * @return The version string of OBC and NMS packages + */ + public static String getVersion() { + if (versionString == null) { + String name = Bukkit.getServer().getClass().getPackage().getName(); + versionString = name.substring(name.lastIndexOf('.') + 1) + '.'; + } + + return versionString; + } + + /** + * Get an NMS Class + * + * @param nmsClassName The name of the class + * @return The class + */ + public static Class<?> getNMSClass(String nmsClassName) { + if (LOADED_NMS_CLASSES.containsKey(nmsClassName)) { + return LOADED_NMS_CLASSES.get(nmsClassName); + } + + String clazzName = "net.minecraft.server." + getVersion() + nmsClassName; + Class<?> clazz; + + try { + clazz = Class.forName(clazzName); + } catch (Throwable t) { + t.printStackTrace(); + return LOADED_NMS_CLASSES.put(nmsClassName, null); + } + + LOADED_NMS_CLASSES.put(nmsClassName, clazz); + return clazz; + } + + /** + * Get a class from the org.bukkit.craftbukkit package + * + * @param obcClassName the path to the class + * @return the found class at the specified path + */ + public static synchronized Class<?> getOBCClass(String obcClassName) { + if (LOADED_OBC_CLASSES.containsKey(obcClassName)) { + return LOADED_OBC_CLASSES.get(obcClassName); + } + + String clazzName = "org.bukkit.craftbukkit." + getVersion() + obcClassName; + Class<?> clazz; + + try { + clazz = Class.forName(clazzName); + } catch (Throwable t) { + t.printStackTrace(); + LOADED_OBC_CLASSES.put(obcClassName, null); + return null; + } + + LOADED_OBC_CLASSES.put(obcClassName, clazz); + return clazz; + } + + /** + * Get a Bukkit {@link Player} players NMS playerConnection object + * + * @param player The player + * @return The players connection + */ + public static Object getConnection(Player player) { + Method getHandleMethod = getMethod(player.getClass(), "getHandle"); + + if (getHandleMethod != null) { + try { + Object nmsPlayer = getHandleMethod.invoke(player); + Field playerConField = getField(nmsPlayer.getClass(), "playerConnection"); + return playerConField.get(nmsPlayer); + } catch (Exception e) { + e.printStackTrace(); + } + } + + return null; + } + + /** + * Get a classes constructor + * + * @param clazz The constructor class + * @param params The parameters in the constructor + * @return The constructor object + */ + public static Constructor<?> getConstructor(Class<?> clazz, Class<?>... params) { + try { + return clazz.getConstructor(params); + } catch (NoSuchMethodException e) { + return null; + } + } + + /** + * Get a method from a class that has the specific paramaters + * + * @param clazz The class we are searching + * @param methodName The name of the method + * @param params Any parameters that the method has + * @return The method with appropriate paramaters + */ + public static Method getMethod(Class<?> clazz, String methodName, Class<?>... params) { + if (!LOADED_METHODS.containsKey(clazz)) { + LOADED_METHODS.put(clazz, new HashMap<>()); + } + + Map<String, Method> methods = LOADED_METHODS.get(clazz); + + if (methods.containsKey(methodName)) { + return methods.get(methodName); + } + + try { + Method method = clazz.getMethod(methodName, params); + methods.put(methodName, method); + LOADED_METHODS.put(clazz, methods); + return method; + } catch (Exception e) { + e.printStackTrace(); + methods.put(methodName, null); + LOADED_METHODS.put(clazz, methods); + return null; + } + } + + /** + * Get a field with a particular name from a class + * + * @param clazz The class + * @param fieldName The name of the field + * @return The field object + */ + public static Field getField(Class<?> clazz, String fieldName) { + if (!LOADED_FIELDS.containsKey(clazz)) { + LOADED_FIELDS.put(clazz, new HashMap<>()); + } + + Map<String, Field> fields = LOADED_FIELDS.get(clazz); + + if (fields.containsKey(fieldName)) { + return fields.get(fieldName); + } + + try { + Field field = clazz.getField(fieldName); + fields.put(fieldName, field); + LOADED_FIELDS.put(clazz, fields); + return field; + } catch (Exception e) { + e.printStackTrace(); + fields.put(fieldName, null); + LOADED_FIELDS.put(clazz, fields); + return null; + } + } +} \ No newline at end of file diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/utils/Stats.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/utils/Stats.java new file mode 100644 index 0000000..2dd98f4 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/utils/Stats.java @@ -0,0 +1,111 @@ +package net.grandtheftmc.gtm.utils; + +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.util.TimeFormatter; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.GTMUtils; +import net.grandtheftmc.gtm.gang.Gang; +import net.grandtheftmc.gtm.gang.GangManager; +import net.grandtheftmc.gtm.users.GTMUser; +import net.grandtheftmc.gtm.users.JobMode; +import net.grandtheftmc.houses.Houses; +import net.grandtheftmc.houses.users.HouseUser; +import org.bukkit.ChatColor; +import org.bukkit.Statistic; +import org.bukkit.entity.Player; + +import java.text.NumberFormat; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.TimeUnit; + +public class Stats { + private static Stats stats; + + public static Stats getInstance() { + if (stats == null) stats = new Stats(); + return stats; + } + + public List<String> getStats(Player target) { + List<String> stats = new ArrayList<>(); + GTMUser user = GTM.getUserManager().getLoadedUser(target.getUniqueId()); + HouseUser houseUser = Houses.getUserManager().getLoadedUser(target.getUniqueId()); + stats.add(Utils.f(target.getDisplayName())); + stats.add(this.format("Playtime", this.getHoursPlayed(target))); + stats.add(this.format("Money", '$' + this.numberFormat(user.getMoney()))); + stats.add(this.format("Bank", '$' + this.numberFormat(user.getBank()))); + + Gang gang = GangManager.getInstance().getGangByMember(target.getUniqueId()).orElse(null); + if (gang != null) { + stats.add(this.format("Gang", gang.getName())); + } + + if (user.getJobMode() == JobMode.CRIMINAL && user.getWantedLevel() > 0) { + stats.add(this.format("Wanted Level", ChatColor.WHITE + GTMUtils.getWantedLevelStars(user.getWantedLevel()))); + } + else if (user.getJobMode() != JobMode.CRIMINAL) { + stats.add(this.format("Job", user.getJobMode().getColoredNameBold())); + } + + if (!houseUser.getPremiumHouses().isEmpty()) { + stats.add(this.format("Premium Houses", String.valueOf(houseUser.getPremiumHouses().size()))); + } + + if (!houseUser.getHouses().isEmpty()) { + stats.add(this.format("Houses", String.valueOf(houseUser.getHouses().size()))); + } + + stats.add(this.format("Kills", this.getKillAmount(target))); + stats.add(this.format("Deaths", this.getDeathAmount(target))); + stats.add(this.format("K/D", this.getKDRatio(target))); + return stats; + } + + public String getKDRatio(Player player) { + int kills = player.getStatistic(Statistic.PLAYER_KILLS); + int deaths = player.getStatistic(Statistic.DEATHS); + if (kills == 0 && deaths == 0) { + return "0.0"; + } + double kd = (double) kills / deaths; + return String.valueOf(kd).substring(0, 3); + } + + public String getDeathAmount(Player player) { + int deaths = player.getStatistic(Statistic.DEATHS); + return this.numberFormat(deaths); + } + + public String getKillAmount(Player player) { + int kills = player.getStatistic(Statistic.PLAYER_KILLS); + return this.numberFormat(kills); + } + + public long getHoursPlayedRaw(Player player) { + if (player == null) return 0; + int ticks = player.getStatistic(Statistic.PLAY_ONE_TICK); + long minutes = ticks / 20 / 60; + TimeFormatter tf = Utils.timeFormatter(TimeUnit.MINUTES, minutes); + return tf.getHours(); + } + + public String getHoursPlayed(Player player) { + int ticks = player.getStatistic(Statistic.PLAY_ONE_TICK); + long minutes = ticks / 20 / 60; + TimeFormatter tf = Utils.timeFormatter(TimeUnit.MINUTES, minutes); + return tf.getDays() + "d " + tf.getHours() + "h " + tf.getMinutes() + "m"; + } + + public String numberFormat(int num) { + return NumberFormat.getInstance().format(num); + } + + public String numberFormat(double num) { + return NumberFormat.getInstance().format(num); + } + + public String format(String key, String value) { + return ChatColor.GRAY + key + ": " + ChatColor.GREEN + value; + } +} \ No newline at end of file diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/utils/WeightedRandomCollection.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/utils/WeightedRandomCollection.java new file mode 100644 index 0000000..6a341b4 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/utils/WeightedRandomCollection.java @@ -0,0 +1,91 @@ +package net.grandtheftmc.gtm.utils; +/* + * Copyright (C) 2013-Current Carter Gale (Ktar5) <buildfresh@gmail.com> + * + * This file is part of gtm. + * + * gtm can not be copied and/or distributed without the express + * permission of the aforementioned owner. + */ + +import com.google.common.collect.Lists; + +import java.util.*; +import java.util.concurrent.ThreadLocalRandom; + +/** + * A utility collection created in order to simplify the selection of a random + * element based on its corresponding relative weight + * <p> + * "Relative weight" means that, for example, each "weight" is a lottery ticket thrown + * into the "total weight". We pick a random ticket, and then return that element. Thus, + * the higher the weight, the higher the chance it will be picked. + * + * @param <E> the type of element to be placed into this collection + */ +public class WeightedRandomCollection<E> { + private final NavigableMap<Double, E> map = new TreeMap<>(); + private E last; + private double total; + + /** + * Add an item to the random collection with the + * specified weight + * + * @param weight the weight (relative to the others) + * @param result the item that corresponds to this weight + */ + public WeightedRandomCollection<E> add(double weight, E result) { + if (weight <= 0) throw new NumberFormatException("Weights cannot be less than zero. Idiot."); + this.total += weight; + this.map.put(this.total, result); + this.last = result; + return this; + } + + public E last() { + return this.last; + } + + /** + * Return a set of all the values + * + * @return a set of all the values + */ + public Set<E> values() { + return new HashSet<>(this.map.values()); + } + + /** + * Returns #amount of unique elements chosen randomly for a lottery-type system + * + * @param amount the max amount of unique elements you want returned + * @return a list containing maximum #amount unique elements, unless there are + * less than that many elements in the collection + */ + public List<E> getUniqueElements(int amount) { + if (this.map.size() <= amount) { + return Lists.newArrayList(this.map.values()); + } + List<E> uniqueElements = new ArrayList<>(amount); + while (uniqueElements.size() < amount && uniqueElements.size() < this.map.size()) { + if (!uniqueElements.contains(this.next())) { + uniqueElements.add(this.last()); + } + } + return uniqueElements; + } + + /** + * Select a random item from the list based on the chance + * Uses a ThreadLocalRandom because Random sucks shit + * ThreadLocalRandom is faster + * + * @return a random element from the collection, selected based on its relative weight + */ + public E next() { + double value = ThreadLocalRandom.current().nextDouble() * this.total; + this.last = this.map.ceilingEntry(value).getValue(); + return this.last; + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/warps/SpawnCommand.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/warps/SpawnCommand.java new file mode 100644 index 0000000..40a0b16 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/warps/SpawnCommand.java @@ -0,0 +1,53 @@ +package net.grandtheftmc.gtm.warps; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.users.TaxiTarget; + +public class SpawnCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command c, String lbl, String[] args) { + if (!(s instanceof Player)) { + s.sendMessage(Lang.NOTPLAYER.s()); + return true; + } + WarpManager wm = GTM.getWarpManager(); + Player player = (Player) s; + if (args.length == 0) { + wm.warp(player, Core.getUserManager().getLoadedUser(player.getUniqueId()), + GTM.getUserManager().getLoadedUser(player.getUniqueId()), new TaxiTarget(wm.getSpawn()), 0, -1); + return true; + } + if (!s.hasPermission("warps.admin")) { + s.sendMessage(Lang.NOPERM.s()); + return true; + } + switch (args[0].toLowerCase()) { + case "setspawn": + wm.setSpawn(player.getLocation()); + s.sendMessage(Utils.f("&aYou set the spawn!")); + return true; + case "settutorialspawn": + wm.setTutorialSpawn(player.getLocation()); + s.sendMessage(Utils.f("&aYou set the tutorial spawn!")); + return true; + case "setjail": + wm.setJail(player.getLocation()); + s.sendMessage(Utils.f("&aYou set the jail spawn!")); + return true; + default: + s.sendMessage(Utils.f("&c/spawn")); + s.sendMessage(Utils.f("&c/spawn setspawn")); + s.sendMessage(Utils.f("&c/spawn settutorialspawn")); + return true; + } + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/warps/TpaCommand.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/warps/TpaCommand.java new file mode 100644 index 0000000..dd7d29e --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/warps/TpaCommand.java @@ -0,0 +1,59 @@ +package net.grandtheftmc.gtm.warps; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.users.GTMUser; +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.UUID; + +public class TpaCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command c, String lbl, String[] args) { + if (!(s instanceof Player)) { + s.sendMessage(Utils.f(Lang.TAXI + "&eYou are not a player!")); + return true; + } + WarpManager wm = GTM.getWarpManager(); + Player player = (Player) s; + UUID uuid = player.getUniqueId(); + User user = Core.getUserManager().getLoadedUser(uuid); + GTMUser gtmUser = GTM.getUserManager().getLoadedUser(uuid); + switch (lbl) { + case "tpa": + if (args.length != 1) { + s.sendMessage(Utils.f("&c/tpa <player>")); + return true; + } + wm.tpa(player, user, gtmUser, Bukkit.getPlayer(args[0])); + return true; + case "tpahere": + if (args.length != 1) { + s.sendMessage(Utils.f("&c/tpahere <player>")); + return true; + } + wm.tpaHere(player, user, gtmUser, Bukkit.getPlayer(args[0])); + return true; + case "tpdeny": + case "tpno": + wm.tpDeny(player, user, gtmUser); + return true; + default: + if (args.length != 0) { + s.sendMessage(Utils.f("&c/" + lbl)); + return true; + } + wm.tpAccept(player, user, gtmUser); + return true; + } + } + +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/warps/Warp.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/warps/Warp.java new file mode 100644 index 0000000..74a6a09 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/warps/Warp.java @@ -0,0 +1,31 @@ +package net.grandtheftmc.gtm.warps; + +import org.bukkit.Location; + +public class Warp { + + private String name; + private Location location; + + public Warp(String name, Location location) { + this.name = name; + this.location = location; + } + + public String getName() { + return this.name; + } + + public void setName(String name) { + this.name = name; + } + + public Location getLocation() { + return this.location; + } + + public void setLocation(Location location) { + this.location = location; + } + +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/warps/WarpCache.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/warps/WarpCache.java new file mode 100644 index 0000000..6b4b066 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/warps/WarpCache.java @@ -0,0 +1,46 @@ +package net.grandtheftmc.gtm.warps; + +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.gtm.users.GTMUser; +import net.grandtheftmc.gtm.users.TaxiTarget; + +import java.util.UUID; + +/** + * Created by Luke Bingham on 13/08/2017. + */ +public class WarpCache { + + private final User user; + private final GTMUser gtmUser; + private final TaxiTarget target; + private final int price, delay; + + public WarpCache(User user, GTMUser gtmUser, TaxiTarget target, int price, int delay) { + this.user = user; + this.gtmUser = gtmUser; + this.target = target; + this.price = price; + this.delay = delay; + } + + public User getUser() { + return user; + } + + public GTMUser getGtmUser() { + return gtmUser; + } + + public TaxiTarget getTarget() { + return target; + } + + public int getPrice() { + return price; + } + + public int getDelay() { + return delay; + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/warps/WarpCommand.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/warps/WarpCommand.java new file mode 100644 index 0000000..79dbfac --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/warps/WarpCommand.java @@ -0,0 +1,138 @@ +package net.grandtheftmc.gtm.warps; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.users.TaxiTarget; +import org.bukkit.Location; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.List; + +public class WarpCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command cmd, String label, String[] args) { + if (!(s instanceof Player)) { + s.sendMessage(Lang.NOTPLAYER.s()); + return true; + } + WarpManager wm = GTM.getWarpManager(); + Player player = (Player) s; + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + if (args.length == 0) { + if (!s.hasPermission("warps.admin")) { + GTM.getWarpManager().warp(player, user, GTM.getUserManager().getLoadedUser(player.getUniqueId()), + new TaxiTarget(GTM.getWarpManager().getRandomWarp()), 0, user.isPremium() ? 1 : 10); + return true; + } + s.sendMessage(Utils.f("&c/warp list")); + s.sendMessage(Utils.f("&c/warp set <name>")); + s.sendMessage(Utils.f("&c/warp delete <name>")); + s.sendMessage(Utils.f("&c/warp <warp>")); + s.sendMessage(Utils.f("&c/warp load")); + s.sendMessage(Utils.f("&c/warp save")); + return true; + } + if (!s.hasPermission("warps.admin")) return true; + switch (args[0].toLowerCase()) { + case "list": + List<Warp> list = wm.getWarps(); + s.sendMessage(Utils.f("&aWarps&7: (&a" + list.size() + "&7)")); + if (list.isEmpty()) { + s.sendMessage(Utils.f("&cNone!")); + return true; + } + String msg = "&a" + list.get(0).getName(); + for (int i = 1; i < wm.getWarps().size(); i++) + msg = msg + "&7, &a" + list.get(i).getName(); + s.sendMessage(Utils.f(msg)); + return true; + case "set": { + if (args.length != 2) { + s.sendMessage(Utils.f("&c/warp set <name>")); + return true; + } + + String warpName = args[1]; + switch (warpName.toLowerCase()) { + case "spawn": + wm.setSpawn(player.getLocation()); + s.sendMessage(Utils.f("&aYou set the spawn!")); + return true; + case "tutorialspawn": + wm.setTutorialSpawn(player.getLocation()); + s.sendMessage(Utils.f("&aYou set the tutorial spawn!")); + return true; + case "jail": + wm.setJail(player.getLocation()); + s.sendMessage(Utils.f("&aYou set the jail spawn!")); + return true; + default: + break; + } + Warp warp = wm.getWarp(warpName); + if (warp != null) { + warp.setLocation(player.getLocation()); + warp.setName(warpName); + s.sendMessage(Utils.f("&7Warp &a" + warpName + "&7 was set to your current location!")); + return true; + } + warp = new Warp(warpName, player.getLocation()); + wm.addWarp(warp); + s.sendMessage(Utils.f("&7A new warp with the name &a" + warpName + "&7 was set to your current location!")); + return true; + } + case "delete": { + if (args.length != 2) { + s.sendMessage(Utils.f("&c/warp delete <name>")); + return true; + } + String warpName = args[1]; + Warp warp = wm.getWarp(warpName); + if (warp == null) { + s.sendMessage(Utils.f("&cThat warp does not exist!")); + return true; + } + Location loc = warp.getLocation(); + wm.removeWarp(warp); + s.sendMessage(Utils.f("&cWarp &a" + warpName + "&c at &a" + loc.getX() + "&c," + loc.getY() + "&c," + + loc.getZ() + "&c was removed.")); + return true; + } + case "load": + GTM.getSettings().setWarpsConfig(Utils.loadConfig("warps")); + GTM.getWarpManager().loadWarps(); + s.sendMessage(Lang.WARP.f("&7Loaded Warps!")); + return true; + case "save": + GTM.getWarpManager().saveWarps(); + s.sendMessage(Lang.WARP.f("&7Saved Warps!")); + return true; + default: + if (args.length != 1) { + s.sendMessage(Utils.f("&c/warp list")); + s.sendMessage(Utils.f("&c/warp set <name>")); + s.sendMessage(Utils.f("&c/warp delete <name>")); + s.sendMessage(Utils.f("&c/warp <warp>")); + s.sendMessage(Utils.f("&c/warp load")); + s.sendMessage(Utils.f("&c/warp save")); + return true; + } + String warpName = args[0]; + Warp warp = wm.getWarp(warpName); + if (warp == null) { + s.sendMessage(Utils.f("&cThat warp does not exist!")); + return true; + } + s.sendMessage(Utils.f("&7Warping to warp &a" + warp.getName() + "&7!")); + player.teleport(warp.getLocation()); + return true; + } + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/warps/WarpManager.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/warps/WarpManager.java new file mode 100644 index 0000000..263a102 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/warps/WarpManager.java @@ -0,0 +1,601 @@ +package net.grandtheftmc.gtm.warps; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.UUID; +import java.util.stream.Collectors; + +import org.bukkit.Bukkit; +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.block.BlockFace; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; +import org.bukkit.scheduler.BukkitRunnable; + +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.users.Pref; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.util.State; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.GTMUtils; +import net.grandtheftmc.gtm.events.TPEvent; +import net.grandtheftmc.gtm.events.TPEvent.TPType; +import net.grandtheftmc.gtm.users.CheatCode; +import net.grandtheftmc.gtm.users.GTMUser; +import net.grandtheftmc.gtm.users.JobMode; +import net.grandtheftmc.gtm.users.TaxiTarget; +import net.grandtheftmc.gtm.users.TaxiTarget.TargetType; + +public class WarpManager { + + private Warp tutorialSpawn; + private Warp spawn; + private Warp jail; + private List<Warp> warps = new ArrayList<>(); + private Map<Location, String> warpPads = new HashMap<>(); + private final HashMap<UUID, WarpCache> warpCache = Maps.newHashMap(); + private final HashSet<UUID> toRemove = Sets.newHashSet(); + + public WarpManager() { + this.loadWarps(); + + new BukkitRunnable() { + @Override public void run() { + if(!warpCache.isEmpty()) { + + // for each player + for (UUID uuid : warpCache.keySet()) { + + try{ + Player player = Bukkit.getPlayer(uuid); + if (player == null || !player.isOnline()) { + toRemove.add(uuid); + continue; + } + + WarpCache cache = warpCache.get(uuid); + if (cache == null) { + toRemove.add(uuid); + continue; + } + + int timer = cache.getGtmUser().getTaxiTimer(); + if (cache.getGtmUser().isInCombat()) { + player.sendMessage(Utils.f(Lang.COMBATTAG + "&7You can't call a cab while in combat!")); + cache.getGtmUser().unsetTaxiTarget(); + toRemove.add(uuid); + continue; + } + + if (timer == 15 || timer == 10 || (timer <= 5 && timer > 0)) { + player.sendMessage(Utils.f(Lang.TAXI + "&eYour taxi is arriving in &a" + timer + " &esecond" + + (timer == 1 ? "" : "s") + '!')); + if (timer == 1) { + player.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, 50, 0)); + player.playSound(player.getLocation(), Sound.BLOCK_LAVA_EXTINGUISH, 0.5F, 1); + } else + player.playSound(player.getLocation(), Sound.UI_BUTTON_CLICK, 4.0F / timer, 2); + } + + if (timer == 0) { + if (!cache.getUser().isRank(UserRank.ELITE)) { + if (!cache.getGtmUser().hasMoney(cache.getGtmUser().getTaxiPrice())) { + if (cache.getGtmUser().hasBank(cache.getGtmUser().getTaxiPrice())) { + cache.getGtmUser().withdrawFromBank(cache.getGtmUser().getTaxiPrice()); + } else { + player.sendMessage(Utils.f(Lang.TAXI + "&eYou can't afford to pay &a$&l" + + cache.getGtmUser().getTaxiPrice() + "&e for the ride! Taxi cancelled.")); + toRemove.add(uuid); + continue; + } + } + } + + TaxiTarget target = cache.getGtmUser().getTaxiTarget(); + if (target == null) { + cache.getGtmUser().unsetTaxiTarget(); + player.sendMessage(Lang.TAXI.f("&eYour target could not be reached!")); + toRemove.add(uuid); + continue; + } + + Location tpLoc = target.getExactLocation(); + TPEvent e = new TPEvent(player, target.getTargetPlayer(), + target.getType() == TargetType.PLAYER ? TPType.TP_COMPLETE : TPType.WARP).call(); + if (e.isCancelled()) { + cache.getGtmUser().unsetTaxiTarget(); + toRemove.add(uuid); + player.sendMessage(Lang.TAXI.f(e.getCancelMessage())); + continue; + } + + if (e.targetLocationIsChanged()) + tpLoc = e.getTargetLocation(); + + // if warping an entity or player + if (target.getType() == TargetType.ENTITY || target.getType() == TargetType.PLAYER){ + + // if they are tping to air + if (tpLoc != null && tpLoc.getBlock().getRelative(BlockFace.DOWN).getType() == Material.AIR){ + tpLoc = tpLoc.getWorld().getHighestBlockAt(tpLoc).getLocation(); + } + } + + if (tpLoc == null) { + cache.getGtmUser().unsetTaxiTarget(); + toRemove.add(uuid); + player.sendMessage(Lang.TAXI.f("&eYour destination could not be reached!")); + continue; + } + + player.teleport(tpLoc); + cache.getGtmUser().setLastTeleport(); + if(cache.getGtmUser().getCheatCodeState(CheatCode.SNEAKY).getState()== State.ON) { + player.addPotionEffect(new PotionEffect(PotionEffectType.INVISIBILITY, 20*10, 0)); + } + int price = cache.getGtmUser().getTaxiPrice(); + cache.getGtmUser().unsetTaxiTarget(); + player.sendMessage(Utils.f(Lang.TAXI + "&eThe taxi dropped you off at your destination" + (target.getWarp() != null ? " (" + target.getWarp().getName() + ")" : "."))); + if (price > 0 && !cache.getUser().isRank(UserRank.ELITE)) { + + // If user has money on hand, take it. + if (cache.getGtmUser().hasMoney(price)) + cache.getGtmUser().takeMoney(price); + + // If user has money in bank, take it. + else if (cache.getGtmUser().hasBank(price)) + cache.getGtmUser().takeBank(price); + + GTMUtils.updateBoard(player, Core.getUserManager().getLoadedUser(player.getUniqueId()), cache.getGtmUser()); + Lang.MONEY_TAKE.f(String.valueOf(price)); + } + + toRemove.add(uuid); + continue; + } + + cache.getGtmUser().setTaxiTimer(timer - 1); + } + catch(Exception e){ + // if we get here there's a null pointer somewhere + // stops bug affecting multiple users + e.printStackTrace(); + toRemove.add(uuid); + } + } + } + + if(toRemove.isEmpty()) return; + for(UUID uuid : toRemove) warpCache.remove(uuid); + toRemove.clear(); + } + }.runTaskTimer(GTM.getInstance(), 20L, 20L); + } + + public Warp getTutorialSpawn() { + return this.tutorialSpawn; + } + + public void setTutorialSpawn(Location location) { + this.tutorialSpawn = new Warp("tutorialSpawn", location); + } + + public Warp getSpawn() { + return this.spawn; + } + + public void setSpawn(Location location) { + this.spawn = new Warp("spawn", location); + } + + public Warp getJail() { + return this.jail; + } + + public void setJail(Location location) { + this.jail = new Warp("jail", location); + } + + public List<Warp> getWarps() { + return this.warps; + } + + public Warp getRandomWarp() { + if (this.warps.isEmpty()) + return null; + return this.warps.get(Utils.getRandom().nextInt(this.warps.size())); + } + + public Warp getWarp(String warpName) { + return this.warps.stream().filter(warp -> warp.getName().equalsIgnoreCase(warpName)).findFirst().orElse(null); + } + + public void addWarp(Warp warp) { + this.warps.add(warp); + } + + public void removeWarp(Warp warp) { + this.warps.remove(warp); + } + + public boolean cancelTaxi(Player player, GTMUser gtmUser) { +// if (gtmUser.getTaxiTaskId() == -1) +// return false; +// Bukkit.getScheduler().cancelTask(gtmUser.getTaxiTaskId()); + if(player == null || gtmUser == null) return false; + if(!warpCache.containsKey(player.getUniqueId())) return false; + + gtmUser.unsetTaxiTarget(); + warpCache.remove(player.getUniqueId()); + + return true; + } + + public void warp(Player player, User user, GTMUser gtmUser, TaxiTarget target) { + this.warp(player, user, gtmUser, target, 0, -1, null); + } + + public void warp(Player player, User user, GTMUser gtmUser, TaxiTarget target, int price) { + this.warp(player, user, gtmUser, target, price, -1, null); + } + + public void warp(Player player, User user, GTMUser gtmUser, TaxiTarget target, int price, int delay) { + this.warp(player, user, gtmUser, target, price, delay, null); + } + + public void warp(Player player, User user, GTMUser gtmUser, TaxiTarget target, int price, int delay, String msg) { + GTMUtils.giveGameItems(player); + if (delay < 0) delay = GTMUtils.getWarpDelay(user.getUserRank()); + UUID uuid = player.getUniqueId(); + + if (gtmUser.cancelVehicleTeleport()) + player.sendMessage(Lang.VEHICLES.f("&7You cancelled " + (gtmUser.isSendAway() ? "sending away" : "calling") + " your personal vehicle!")); + + if (this.cancelTaxi(player, gtmUser)) + player.sendMessage(Utils.f(Lang.TAXI + "&eThe previous taxi was cancelled.")); + + if (player.getGameMode() == GameMode.SPECTATOR) { + player.sendMessage(Lang.TAXI.f("&7You can't teleport to players while you're dead!")); + return; + } + + if (gtmUser.isInCombat()) { + player.sendMessage(Utils.f(Lang.COMBATTAG + "&7You can't call a cab while in combat!")); + return; + } + + if (user.isInTutorial()) return; + if (gtmUser.isArrested()) { + player.sendMessage(Lang.JAIL.f("&7You can't teleport in jail!")); + return; + } + + if (price > 0 && !user.isRank(UserRank.ELITE)) { + if (!gtmUser.hasMoney(price) && !gtmUser.hasBank(price)) { + player.sendMessage(Utils.f(Lang.TAXI + "&eYou can't afford to pay &a$&l" + + price + "&e for the ride! Taxi cancelled.")); + } + } + + if (target == null || target.getExactLocation() == null) { + player.sendMessage(Utils.f(Lang.TAXI + "&eThat location does not exist!")); + return; + } + + player.sendMessage(Utils.f(Lang.TAXI + "&eYou called a taxi!")); + gtmUser.setTaxiTimer(delay); + gtmUser.setTaxiTarget(target); + gtmUser.setTaxiPrice(price); + + this.warpCache.put(uuid, new WarpCache(user, gtmUser, target, price, delay)); + } + + public void tpa(Player player, User user, GTMUser gtmUser, Player target) { + GTMUtils.giveGameItems(player); + if (target == null) { + player.sendMessage(Utils.f(Lang.TAXI + "&eThat player is not online!")); + return; + } + GTMUser targetGTMUser = GTM.getUserManager().getLoadedUser(target.getUniqueId()); + if (!user.isSpecial()) { + player.sendMessage(Utils.f(Lang.TAXI + + "&eYou don't have access to teleport to other players! Buy &6&lVIP&e to unlock it!")); + return; + } + if (player.getGameMode() == GameMode.SPECTATOR) { + player.sendMessage(Lang.TAXI.f("&7You can't teleport to players while you're dead!")); + return; + } + if (gtmUser.isInCombat()) { + player.sendMessage(Utils.f(Lang.COMBATTAG + "&7You can't call a cab while in combat!")); + return; + } + if (targetGTMUser.isInCombat()) { + player.sendMessage(Utils.f(Lang.COMBATTAG + target.getDisplayName() + "&7 is in combat!")); + return; + } + if (user.isInTutorial()) return; + if (gtmUser.isArrested()) { + player.sendMessage(Lang.JAIL.f("&7You can't teleport in jail!")); + return; + } + UUID uuid = player.getUniqueId(); + if (gtmUser.cancelVehicleTeleport()) + player.sendMessage(Lang.VEHICLES.f("&7You cancelled " + (gtmUser.isSendAway() ? "sending away" : "calling") + " your personal vehicle!")); + if (this.cancelTaxi(player, gtmUser)) + player.sendMessage(Utils.f(Lang.TAXI + "&eThe previous taxi was cancelled.")); + + User targetUser = Core.getUserManager().getLoadedUser(target.getUniqueId()); + if (!targetUser.getPref(Pref.TP_REQUESTS)) { + player.sendMessage(Utils.f(Lang.TAXI + "&eThat player has disabled teleport requests!")); + return; + } + if (targetUser.isInTutorial()) { + player.sendMessage(Lang.TUTORIALS.f("&7That player is in a tutorial!")); + return; + } + TPEvent e = new TPEvent(player, target, TPType.TPA_REQ).call(); + if (e.isCancelled()) { + gtmUser.unsetTpaRequests(); + player.sendMessage(Lang.TAXI.f(e.getCancelMessage())); + return; + } + player.sendMessage( + Utils.f(Lang.TAXI + "&eYou requested to teleport to " + targetUser.getColoredName(target) + "&e!")); + target.sendMessage(Utils.f(Lang.TAXI + user.getColoredName(player) + + "&e requested to teleport to you. Use &a\'/tpaccept\'&e to accept.")); + GTMUser targetGtmUser = GTM.getUserManager().getLoadedUser(target.getUniqueId()); + gtmUser.setTpaRequestSentUUID(target.getUniqueId()); + gtmUser.setTpaHere(false); + targetGtmUser.setTpaRequestUUID(uuid); + } + + public void tpaHere(Player player, User user, GTMUser gtmUser, Player target) { + GTMUtils.giveGameItems(player); + if (target == null) { + player.sendMessage(Utils.f(Lang.TAXI + "&eThat player is not online!")); + return; + } + GTMUser targetGTMUser = GTM.getUserManager().getLoadedUser(target.getUniqueId()); + if (!user.getUserRank().isHigherThan(UserRank.PREMIUM)) { + player.sendMessage(Utils.f(Lang.TAXI + + "&eYou don't have access to teleport other players to yourself! Buy &b&lELITE&e to unlock it!")); + return; + } + if (player.getGameMode() == GameMode.SPECTATOR) { + player.sendMessage(Lang.TAXI.f("&7You can't teleport players to you while you're dead!")); + return; + } + if (gtmUser.isArrested()) { + player.sendMessage(Lang.JAIL.f("&7You can't teleport players to yourself in jail!")); + return; + } + if (gtmUser.isInCombat()) { + player.sendMessage(Utils.f(Lang.COMBATTAG + "&7You can't request teleportation while in combat!")); + return; + } + if (targetGTMUser.isInCombat()) { + player.sendMessage(Utils.f(Lang.COMBATTAG + target.getDisplayName() + "&7 is in combat!")); + return; + } + if (user.isInTutorial()) return; + if (target.getGameMode() == GameMode.SPECTATOR) { + player.sendMessage(Lang.TAXI.f("&7You can't teleport dead players to you!")); + return; + } + UUID uuid = player.getUniqueId(); + if (gtmUser.cancelVehicleTeleport()) + player.sendMessage(Lang.VEHICLES.f("&7You cancelled " + (gtmUser.isSendAway() ? "sending away" : "calling") + " your personal vehicle!")); + if (this.cancelTaxi(player, gtmUser)) + player.sendMessage(Utils.f(Lang.TAXI + "&eThe previous taxi was cancelled.")); + User targetUser = Core.getUserManager().getLoadedUser(target.getUniqueId()); + if (!targetUser.getPref(Pref.TP_REQUESTS)) { + player.sendMessage(Utils.f(Lang.TAXI + "&eThat player has disabled teleport requests!")); + return; + } + if (targetUser.isInTutorial()) { + player.sendMessage(Lang.TUTORIALS.f("&7That player is in a tutorial!")); + return; + } + TPEvent e = new TPEvent(player, target, TPType.TPAHERE_REQ).call(); + if (e.isCancelled()) { + gtmUser.unsetTpaRequests(); + player.sendMessage(Lang.TAXI.f(e.getCancelMessage())); + return; + } + player.sendMessage( + Utils.f(Lang.TAXI + "&eYou requested " + targetUser.getColoredName(target) + "&e to teleport to you!")); + target.sendMessage(Utils.f(Lang.TAXI + user.getColoredName(player) + + "&e requested you to teleport to them. Use &a\'/tpaccept\'&e to accept.")); + GTMUser targetGtmUser = GTM.getUserManager().getLoadedUser(target.getUniqueId()); + gtmUser.setTpaRequestSentUUID(target.getUniqueId()); + gtmUser.setTpaHere(true); + targetGtmUser.setTpaRequestUUID(uuid); + } + + public void tpDeny(Player player, User user, GTMUser gtmUser) { + GTMUtils.giveGameItems(player); + if (!gtmUser.hasTpaRequest()) { + player.sendMessage(Utils.f(Lang.TAXI + "&eNobody has requested to teleport to you!")); + return; + } + if (user.isInTutorial()) return; + Player target = Bukkit.getPlayer(gtmUser.getTpaRequestUUID()); + if (target == null) { + player.sendMessage(Utils.f(Lang.TAXI + "&eNobody has requested to teleport to you!")); + return; + } + User targetUser = Core.getUserManager().getLoadedUser(target.getUniqueId()); + GTMUser targetGtmUser = GTM.getUserManager().getLoadedUser(target.getUniqueId()); + if (!targetUser.isInTutorial()) + target.sendMessage(Lang.TAXI.f("&a" + user.getColoredName(player) + "&e denied your request!")); + player.sendMessage(Lang.TAXI.f("&e You denied &a" + targetUser.getColoredName(target) + "&e's request!")); + targetGtmUser.unsetTpaRequests(); + gtmUser.unsetTpaRequests(); + } + + public void tpAccept(Player target, User targetUser, GTMUser targetGtmUser) { + GTMUtils.giveGameItems(target); + if (!targetGtmUser.hasTpaRequest()) { + target.sendMessage(Utils.f(Lang.TAXI + "&eNobody has requested to teleport to you!")); + return; + } + if (target.getGameMode() == GameMode.SPECTATOR) { + target.sendMessage(Lang.VEHICLES.f("&7You can't teleport while you're dead!")); + return; + } + if (targetGtmUser.isArrested()) { + target.sendMessage(Lang.JAIL.f("&7You can't teleport in jail!")); + return; + } + if (targetUser.isInTutorial()) return; + UUID uuid = targetGtmUser.getTpaRequestUUID(); + Player player = Bukkit.getPlayer(uuid); + if (player == null) { + target.sendMessage(Utils.f(Lang.TAXI + "&eNobody has requested to teleport to you!")); + return; + } + GTMUser gtmUser = GTM.getUserManager().getLoadedUser(uuid); + if (gtmUser.isInCombat()) { + player.sendMessage(Utils.f(Lang.COMBATTAG + "&7Teleport cancelled due to combat tag!")); + return; + } + if (targetGtmUser.isInCombat()) { + player.sendMessage(Utils.f(Lang.COMBATTAG + "&7Teleport cancelled due to combat tag!")); + return; + } + if (player.getGameMode() == GameMode.SPECTATOR) { + target.sendMessage(Lang.VEHICLES.f("&7You can't teleport to a dead player!")); + return; + } + if (gtmUser.isArrested()) { + target.sendMessage(Lang.JAIL.f("&7You can't teleport in jail!")); + return; + } + User user = Core.getUserManager().getLoadedUser(uuid); + if (user.isInTutorial()) { + target.sendMessage(Lang.TUTORIALS.f("&7That player is in a tutorial!")); + return; + } + if (gtmUser.isTpaHere()) { + int delay = GTMUtils.getWarpDelay(targetUser.getUserRank()); + TPEvent e = new TPEvent(target, player, TPType.TPAHERE_ACCEPT).call(); + if (e.isCancelled()) { + targetGtmUser.unsetTpaRequests(); + gtmUser.unsetTpaRequests(); + target.sendMessage(Lang.TAXI.f(e.getCancelMessage())); + return; + } + target.sendMessage(Utils.f(Lang.TAXI + "&eYou accepted &a" + user.getColoredName(player) + + "&e's request to teleport to them!")); + player.sendMessage(Utils.f(Lang.TAXI + "&a" + targetUser.getColoredName(target) + "&e accepted your request to teleport to them! Their cab will arrive in &a" + delay + "&e second" + (delay == 1 ? "" : "s"))); + targetGtmUser.unsetTpaRequests(); + gtmUser.unsetTpaRequests(); + this.warp(target, targetUser, targetGtmUser, new TaxiTarget(player), 0, delay); + return; + } + int delay = GTMUtils.getWarpDelay(user.getUserRank()); + TPEvent e = new TPEvent(player, target, TPType.TPA_ACCEPT).call(); + if (e.isCancelled()) { + targetGtmUser.unsetTpaRequests(); + gtmUser.unsetTpaRequests(); + player.sendMessage(Lang.TAXI.f(e.getCancelMessage())); + return; + } + target.sendMessage(Utils.f(Lang.TAXI + "&eYou accepted &a" + user.getColoredName(player) + + "&e's teleport request. Their cab will arrive in &a" + delay + "&e second" + (delay == 1 ? "" : "s") + + '!')); + player.sendMessage( + Utils.f(Lang.TAXI + "&a" + targetUser.getColoredName(target) + "&e accepted your teleport request!")); + targetGtmUser.unsetTpaRequests(); + gtmUser.unsetTpaRequests(); + this.warp(player, user, gtmUser, new TaxiTarget(target), 0, delay); + } + + public void backupAccept(Player player, GTMUser gtmUser, Player target, GTMUser targetGtmUser) { + User targetUser = Core.getUserManager().getLoadedUser(target.getUniqueId()); + GTMUtils.giveGameItems(target); + if (targetUser.isInTutorial()) return; + if (gtmUser.getJobMode() != JobMode.COP) { + player.sendMessage(Lang.COP_MODE.f("&7You must be in &3&lCOP Mode&7 to request backup!")); + return; + } + if (player.getGameMode() == GameMode.SPECTATOR) { + player.sendMessage(Lang.VEHICLES.f("&7You can't teleport while you're dead!")); + return; + } + if (target.getGameMode() == GameMode.SPECTATOR || !targetGtmUser.hasRequestedBackup()) { + player.sendMessage(Lang.COP_MODE.f("&7That player has not requested backup!")); + return; + } + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + if (user.isInTutorial()) + return; + + int delay = GTMUtils.getWarpDelay(user.getUserRank()); + TPEvent e = new TPEvent(player, target, TPType.BACKUP).call(); + if (e.isCancelled()) { + player.sendMessage(Lang.COP_MODE.f(e.getCancelMessage())); + return; + } + target.sendMessage(Lang.COP_MODE.f("&7" + user.getColoredName(player) + "&7 has accepted your backup request. They will arrive in &a" + delay + "&e second" + (delay == 1 ? "" : "s") + + '!')); + player.sendMessage( + Utils.f(Lang.COP_MODE.f("&7You are providing backup to " + targetUser.getColoredName(target) + "&7!"))); + this.warp(player, user, gtmUser, new TaxiTarget(target), 0, delay); + } + + + public Warp getWarpFromPad(Location blockLocation) { + String name = this.warpPads.get(blockLocation); + if (name == null) + return null; + if ("random".equalsIgnoreCase(name)) + return this.warps.get(Utils.getRandom().nextInt(this.warps.size())); + return this.getWarp(name); + } + + public void loadWarps() { + YamlConfiguration c = GTM.getSettings().getWarpsConfig(); + this.tutorialSpawn = new Warp("spawn", Utils.teleportLocationFromString(c.getString("tutorialSpawn"))); + this.spawn = new Warp("tutorialSpawn", Utils.teleportLocationFromString(c.getString("spawn"))); + this.jail = new Warp("jail", Utils.teleportLocationFromString(c.getString("jail"))); + this.warps = new ArrayList<>(); + if (c.get("warps") != null) + this.warps.addAll(c.getConfigurationSection("warps").getKeys(false).stream().map(s -> new Warp(s, Utils.teleportLocationFromString(c.getString("warps." + s)))).collect(Collectors.toList())); + this.warpPads = new HashMap<>(); + if (c.get("warpPads") != null) + for (String loc : c.getConfigurationSection("warpPads").getKeys(false)) + this.warpPads.put(Utils.blockLocationFromString(loc), c.getString("warpPads." + loc)); + + } + + public void saveWarps() { + YamlConfiguration c = GTM.getSettings().getWarpsConfig(); + c.set("spawn", Utils.teleportLocationToString(this.spawn.getLocation())); + c.set("tutorialSpawn", Utils.teleportLocationToString(this.tutorialSpawn.getLocation())); + c.set("jail", Utils.teleportLocationToString(this.jail.getLocation())); + c.set("warps", null); + for (Warp warp : this.warps) + c.set("warps." + warp.getName(), Utils.teleportLocationToString(warp.getLocation())); + c.set("warpPads", null); + for (Map.Entry<Location, String> locationStringEntry : this.warpPads.entrySet()) + c.set(Utils.blockLocationToString(locationStringEntry.getKey()), this.warpPads.get(locationStringEntry.getKey())); + Utils.saveConfig(c, "warps"); + } + +} \ No newline at end of file diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/wastedbarrels/BarrelListener.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/wastedbarrels/BarrelListener.java new file mode 100644 index 0000000..04ca888 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/wastedbarrels/BarrelListener.java @@ -0,0 +1,41 @@ +package net.grandtheftmc.gtm.wastedbarrels; + +import net.grandtheftmc.gtm.GTM; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.entity.ArmorStand; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.player.PlayerMoveEvent; + +public class BarrelListener implements Listener { + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void playerMoveEvent(PlayerMoveEvent event) { + if (GTM.getBarrelManager().getUnloadedBarrels().isEmpty()) return; + GTM.getBarrelManager().getUnloadedBarrels().forEach(location -> { + if (event.getTo().getWorld() != location.getWorld()) return; + if (location.distance(event.getTo()) < 10) { + GTM.getBarrelManager().spawnWastedBarrel(location); + GTM.getBarrelManager().getUnloadedBarrels().remove(location); + } + }); + } + + @EventHandler + public void entityDamageEntityEvent(EntityDamageByEntityEvent event) { + if (!(event.getDamager() instanceof Player)) return; + if (!(event.getEntity() instanceof ArmorStand)) return; + Player player = (Player) event.getDamager(); + ArmorStand armorStand = (ArmorStand) event.getEntity(); + if(armorStand.getHelmet().getType() != Material.TNT) return; + WastedBarrel wastedBarrel; + wastedBarrel = armorStand.hasMetadata("WastedBarrel") ? (WastedBarrel) armorStand.getMetadata("WastedBarrel").get(0).value() : new WastedBarrel(armorStand); + wastedBarrel.onDamage(event.getDamage(), player); + player.getWorld().playSound(player.getLocation(), Sound.BLOCK_METAL_HIT, 5.0F, 5.0F); + event.setCancelled(true); + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/wastedbarrels/BarrelManager.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/wastedbarrels/BarrelManager.java new file mode 100644 index 0000000..d2eba56 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/wastedbarrels/BarrelManager.java @@ -0,0 +1,95 @@ +package net.grandtheftmc.gtm.wastedbarrels; + +import com.j0ach1mmall3.jlib.methods.ReflectionAPI; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.GTMUtils; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.ArmorStand; +import org.bukkit.entity.EntityType; +import org.bukkit.inventory.ItemStack; +import org.bukkit.metadata.FixedMetadataValue; +import org.bukkit.scheduler.BukkitRunnable; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Optional; + +public class BarrelManager { + private Collection<WastedBarrel> wastedBarrels; + private Collection<Location> unloadedBarrels; + + public BarrelManager() { + if (this.wastedBarrels == null) this.wastedBarrels = new ArrayList<>(); + if (this.unloadedBarrels == null) this.unloadedBarrels = new ArrayList<>(); + new BukkitRunnable() { + @Override + public void run() { + BarrelManager.this.loadBarrels(); + } + }.runTaskLater(GTM.getInstance(), 100); + } + + public Collection<WastedBarrel> getWastedBarrels() { + return this.wastedBarrels; + } + + public Collection<Location> getUnloadedBarrels() { + return this.unloadedBarrels; + } + + public WastedBarrel spawnWastedBarrel(Location location) { + ArmorStand armorStand = location.getWorld().spawn(location, ArmorStand.class); + armorStand.setHelmet(new ItemStack(Material.TNT)); + armorStand.setBasePlate(false); + armorStand.setSmall(false); + armorStand.setArms(false); + armorStand.setAI(false); + armorStand.setCanPickupItems(false); + armorStand.setGravity(false); + armorStand.setMaxHealth(50.0D); + armorStand.setHealth(50.0D); + armorStand.setVisible(false); + armorStand.setSilent(true); + armorStand.setRemoveWhenFarAway(false); + armorStand.setHelmet(new ItemStack(Material.TNT)); + + try { + Object handle = ReflectionAPI.getHandle((Object) armorStand); + handle.getClass().getMethod("setSize", float.class, float.class).invoke(handle, 1.00F, 1.50F); + } catch (Exception e) { + e.printStackTrace(); + } + + WastedBarrel wastedBarrel = new WastedBarrel(armorStand); + armorStand.setMetadata("WastedBarrel", new FixedMetadataValue(GTM.getInstance(), wastedBarrel)); + return wastedBarrel; + } + + public void loadBarrels() { + for (String string : GTM.getSettings().getBarrelsConfig().getStringList("barrels")) { + Optional<Location> loc = GTMUtils.deserializeLocation(string); + if (!loc.isPresent()) continue; + Optional<ArmorStand> barrel = Arrays.stream(loc.get().getChunk().getEntities()).filter(entity -> !(entity.getLocation().distance(loc.get()) > 2)).filter(entity -> entity.getType() == EntityType.ARMOR_STAND).map(entity -> (ArmorStand) entity).filter(armorStand -> armorStand.getHelmet().getType() == Material.TNT).findFirst().map(Optional::of).orElse(Optional.empty()); + if (barrel.isPresent()) { + new WastedBarrel(barrel.get()); + } else { + this.unloadedBarrels.add(loc.get()); + } + } + } + + public void unloadBarrels() { + YamlConfiguration barrelsConfig = GTM.getSettings().getBarrelsConfig(); + Collection<String> barrelLocations = new ArrayList<>(); + this.wastedBarrels.forEach(wastedBarrel -> { + barrelLocations.add(GTMUtils.serializeLocation(wastedBarrel.getArmorStand().getLocation())); + wastedBarrel.respawn(); + }); + barrelsConfig.set("barrels", barrelLocations); + Utils.saveConfig(barrelsConfig, "barrels"); + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/wastedbarrels/WastedBarrel.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/wastedbarrels/WastedBarrel.java new file mode 100644 index 0000000..c2628fa --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/wastedbarrels/WastedBarrel.java @@ -0,0 +1,133 @@ +package net.grandtheftmc.gtm.wastedbarrels; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.stream.Collectors; + +import org.bukkit.Bukkit; +import org.bukkit.Effect; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.entity.ArmorStand; +import org.bukkit.entity.LivingEntity; +import org.bukkit.inventory.ItemStack; +import org.bukkit.metadata.FixedMetadataValue; +import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.scheduler.BukkitScheduler; + +import com.j0ach1mmall3.wastedguns.MathUtil; +import com.j0ach1mmall3.wastedguns.api.events.explosives.ExplosionDamageEntityEvent; + +import net.grandtheftmc.gtm.GTM; + +public class WastedBarrel { + private final ArmorStand armorStand; + private final Collection<Integer> tasks; + + public WastedBarrel(ArmorStand armorStand) { + this.armorStand = armorStand; + this.tasks = new ArrayList<>(); + GTM.getBarrelManager().getWastedBarrels().add(this); + if (!armorStand.hasMetadata("WastedBarrel")) { + this.armorStand.setMetadata("WastedBarrel", new FixedMetadataValue(GTM.getInstance(), this)); + } + } + + public ArmorStand getArmorStand() { + return this.armorStand; + } + + public Collection<Integer> getTasks() { + return this.tasks; + } + + public void onDamage(double amount, LivingEntity shooter) { + double afterDamage = this.armorStand.getHealth() - amount; + if (afterDamage < 1) { + this.onDestroy(shooter); + } else if (afterDamage > 0 && afterDamage <= 15) { + this.armorStand.setHealth(afterDamage); + this.damageEffects(2, shooter); + } else if (afterDamage > 15 && afterDamage <= 25) { + this.armorStand.setHealth(afterDamage); + this.damageEffects(3, shooter); + } else if (afterDamage > 25 && afterDamage <= 50) { + this.armorStand.setHealth(afterDamage); + this.armorStand.getWorld().playSound(this.armorStand.getLocation(), Sound.ENTITY_SHULKER_BULLET_HIT, 3.0F, 3.0F); + } else { + this.armorStand.setHealth(50.0D); + } + } + + public void onDestroy(LivingEntity shooter) { + this.damageEffects(1, shooter); + this.armorStand.setHelmet(null); + this.armorStand.setFireTicks(0); + new BukkitRunnable() { + @Override + public void run() { + WastedBarrel.this.respawn(); + } + }.runTaskLater(GTM.getInstance(), 6000); + this.tasks.forEach(task -> GTM.getInstance().getServer().getScheduler().cancelTask(task)); + } + + public void respawn() { + this.armorStand.setHelmet(new ItemStack(Material.TNT)); + this.armorStand.setMaxHealth(50.0D); + this.armorStand.setHealth(50.0D); + } + + public void damageEffects(int tier, LivingEntity shooter) { + BukkitScheduler scheduler = GTM.getInstance().getServer().getScheduler(); + if (tier == 1) { + this.armorStand.getWorld().spigot().playEffect(this.armorStand.getLocation(), Effect.EXPLOSION_LARGE, 0, 0, 0, 0, 0, 0.01F, 50, 50); + this.armorStand.getWorld().playSound(this.armorStand.getLocation(), Sound.ENTITY_GENERIC_EXPLODE, 10.0F, 10.0F); + + // get nearby entities + Collection<LivingEntity> eventVictims = MathUtil.getNearbyEntities(this.armorStand, 7).collect(Collectors.toList()); + + // call explosion evnet + ExplosionDamageEntityEvent damageEntityEvent = new ExplosionDamageEntityEvent(shooter, null, eventVictims, null); + Bukkit.getServer().getPluginManager().callEvent(damageEntityEvent); + if (damageEntityEvent.isCancelled()) return; + + // for each entity + Collection<LivingEntity> victims = damageEntityEvent.getVictims(); + if (!victims.isEmpty()) { + victims.forEach(e -> { + + // damage them + double damage = 40.0 / this.armorStand.getLocation().distance(e.getLocation()); + e.damage(damage); + if (!(e instanceof ArmorStand)) e.setVelocity(e.getLocation().getDirection().multiply(-2.5F)); + }); + } + for (int x = 0; x < 2; x++) { + for (int z = 0; z < 2; z++) { + this.armorStand.getWorld().spigot().playEffect(this.armorStand.getLocation().add(x, 0, z), + Effect.FLAME, 0, 0, 0.5F, 0.5F, 0.5F, 0.001F, 50, 50); + this.armorStand.getWorld().spigot().playEffect(this.armorStand.getLocation().add(x, 0, z), + Effect.MOBSPAWNER_FLAMES, 0, 0, 0.5F, 0.5F, 0.5F, 0.001F, 50, 50); + this.armorStand.getWorld().spigot().playEffect(this.armorStand.getLocation().add(x, 0, z), + Effect.LARGE_SMOKE, 0, 0, 0.5F, 0.5F, 0.5F, 0.001F, 50, 50); + } + } + } else if (tier == 2) { + this.tasks.add(scheduler.scheduleSyncRepeatingTask(GTM.getInstance(), () -> { + if (this.armorStand.getHelmet().getType() != Material.TNT || this.armorStand.isDead()) + this.tasks.forEach(scheduler::cancelTask); + this.armorStand.getWorld().spigot().playEffect(this.armorStand.getLocation(), Effect.SMALL_SMOKE, 0, 0, 0.5F, 0.5F, 0.5F, 0.001F, 50, 50); + this.armorStand.getWorld().spigot().playEffect(this.armorStand.getLocation(), Effect.FLAME, 0, 0, 0.5F, 0.5F, 0.5F, 0.001F, 30, 30); + this.armorStand.getWorld().spigot().playEffect(this.armorStand.getLocation(), Effect.LARGE_SMOKE, 0, 0, 0.5F, 0.5F, 0.5F, 0.001F, 30, 50); + }, 0L, 20L)); + } else if (tier == 3) { + this.tasks.add(scheduler.scheduleSyncRepeatingTask(GTM.getInstance(), () -> { + if (this.armorStand.getHelmet().getType() != Material.TNT || this.armorStand.isDead()) + this.tasks.forEach(scheduler::cancelTask); + this.armorStand.getWorld().spigot().playEffect(this.armorStand.getLocation(), Effect.FLAME, 0, 0, 0.5F, 0.5F, 0.5F, 0.001F, 3, 10); + this.armorStand.getWorld().spigot().playEffect(this.armorStand.getLocation(), Effect.LARGE_SMOKE, 0, 0, 0.5F, 0.5F, 0.5F, 0.001F, 5, 40); + }, 0L, 20L)); + } + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/README.MD b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/README.MD new file mode 100644 index 0000000..c1e78cb --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/README.MD @@ -0,0 +1,61 @@ +# Weapons: + +### --Ranged: +<p><b>Pistols:</b><br> +Pistol 1<br> +StunGun 11<br> +CombatPistol 21<br> +HeavyPistol 31<br> +MarksmanPistol 41<br><br> + +<b>SMG:</b><br> +MicroSMG 51<br> +SMG 61<br> +AssaultSMG 71<br> +CombatPDW 81<br> +GusenbergSweeper 91<br><br> + +<b>Shotgun:</b><br> +SawedoffShotgun 101<br> +PumpShotgun 111<br> +Musket 121<br> +AssaultShotgun 131<br> +HeavyShotgun 141<br><br> + +<b>Assault:</b><br> +AssaultRifle 151<br> +CarbineRifle 161<br> +BullpupRifle 171<br> +AdvancedRifle 181<br> +SpecialCarbine 191<br><br> + +<b>LMG:</b><br> +MG 201<br> +CombatMG 211<br><br> + +<b>Sniper:</b><br> +SniperRifle 221<br> +HeavySniper 231<br><br> + +<b>Special:</b><br> +Minigun 241<br><br> + +<b>Launcher:</b><br> +RPG 251<br> +HomingLauncher 261<br> +GrenadeLauncher 271<br></p><br><br> + + +### --Melee: +<p>BaseballBat 281<br> +Chainsaw 291<br> +Knife 301<br> +NightStick 311<br> +Rake 321<br></p><br><br> + +### --Throwable: +<p>Grenade 331<br> +MolotovCocktail 341<br> +ProximityMine 351<br> +StickyBomb 361<br> +TearGas 371<br></p> diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/WeaponRegistry.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/WeaponRegistry.java new file mode 100644 index 0000000..36079c1 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/WeaponRegistry.java @@ -0,0 +1,419 @@ +package net.grandtheftmc.gtm.weapon; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.LinkedList; +import java.util.List; +import java.util.Set; +import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.World; +import org.bukkit.entity.ArmorStand; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.player.PlayerArmorStandManipulateEvent; +import org.bukkit.event.player.PlayerChangedWorldEvent; +import org.bukkit.event.player.PlayerInteractAtEntityEvent; +import org.bukkit.event.player.PlayerMoveEvent; +import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.plugin.java.JavaPlugin; + +import com.gmail.filoghost.holographicdisplays.api.Hologram; +import com.gmail.filoghost.holographicdisplays.api.HologramsAPI; +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.C; +import net.grandtheftmc.core.util.Component; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.GTMUtils; +import net.grandtheftmc.gtm.items.GameItem; +import net.grandtheftmc.gtm.users.GTMUser; +import net.grandtheftmc.gtm.weapon.explosive.Grenade; +import net.grandtheftmc.gtm.weapon.explosive.MolotovCocktail; +import net.grandtheftmc.gtm.weapon.explosive.ProximityMine; +import net.grandtheftmc.gtm.weapon.explosive.StickyBomb; +import net.grandtheftmc.gtm.weapon.explosive.TearGas; +import net.grandtheftmc.gtm.weapon.melee.BaseballBat; +import net.grandtheftmc.gtm.weapon.melee.Chainsaw; +import net.grandtheftmc.gtm.weapon.melee.Dildo; +import net.grandtheftmc.gtm.weapon.melee.Katana; +import net.grandtheftmc.gtm.weapon.melee.Knife; +import net.grandtheftmc.gtm.weapon.melee.NightStick; +import net.grandtheftmc.gtm.weapon.melee.Rake; +import net.grandtheftmc.gtm.weapon.ranged.assault.AdvancedRifle; +import net.grandtheftmc.gtm.weapon.ranged.assault.AssaultRifle; +import net.grandtheftmc.gtm.weapon.ranged.assault.BullpupRifle; +import net.grandtheftmc.gtm.weapon.ranged.assault.CarbineRifle; +import net.grandtheftmc.gtm.weapon.ranged.assault.SpecialCarbine; +import net.grandtheftmc.gtm.weapon.ranged.launcher.GrenadeLauncher; +import net.grandtheftmc.gtm.weapon.ranged.launcher.HomingLauncher; +import net.grandtheftmc.gtm.weapon.ranged.launcher.NetLauncher; +import net.grandtheftmc.gtm.weapon.ranged.launcher.RPG; +import net.grandtheftmc.gtm.weapon.ranged.lmg.CombatMG; +import net.grandtheftmc.gtm.weapon.ranged.lmg.MG; +import net.grandtheftmc.gtm.weapon.ranged.pistol.CombatPistol; +import net.grandtheftmc.gtm.weapon.ranged.pistol.HeavyPistol; +import net.grandtheftmc.gtm.weapon.ranged.pistol.MarksmanPistol; +import net.grandtheftmc.gtm.weapon.ranged.pistol.Pistol; +import net.grandtheftmc.gtm.weapon.ranged.pistol.StunGun; +import net.grandtheftmc.gtm.weapon.ranged.shotgun.AssaultShotgun; +import net.grandtheftmc.gtm.weapon.ranged.shotgun.HeavyShotgun; +import net.grandtheftmc.gtm.weapon.ranged.shotgun.Musket; +import net.grandtheftmc.gtm.weapon.ranged.shotgun.PumpShotgun; +import net.grandtheftmc.gtm.weapon.ranged.shotgun.SawedoffShotgun; +import net.grandtheftmc.gtm.weapon.ranged.smg.AssaultSMG; +import net.grandtheftmc.gtm.weapon.ranged.smg.CombatPDW; +import net.grandtheftmc.gtm.weapon.ranged.smg.GusenbergSweeper; +import net.grandtheftmc.gtm.weapon.ranged.smg.MicroSMG; +import net.grandtheftmc.gtm.weapon.ranged.smg.SMG; +import net.grandtheftmc.gtm.weapon.ranged.sniper.HeavySniper; +import net.grandtheftmc.gtm.weapon.ranged.sniper.SniperRifle; +import net.grandtheftmc.gtm.weapon.ranged.special.Clausinator; +import net.grandtheftmc.gtm.weapon.ranged.special.Flamethrower; +import net.grandtheftmc.gtm.weapon.ranged.special.GoldMinigun; +import net.grandtheftmc.gtm.weapon.ranged.special.Minigun; +import net.grandtheftmc.guns.WeaponManager; +import net.grandtheftmc.guns.weapon.Weapon; +import net.grandtheftmc.guns.weapon.WeaponSkin; + +/** + * Created by Luke Bingham on 25/07/2017. + */ +public class WeaponRegistry implements Component<WeaponRegistry, GTM> { + + private static final Set<Material> EMPTY_SET = Sets.newHashSet(); + + private final ConcurrentHashMap<UUID, PlayerStateCache> playerCache = new ConcurrentHashMap<>(); + private final ConcurrentHashMap<String, Hologram> weaponHolograms = new ConcurrentHashMap<>(); + private final Location minLoc, maxLoc; + + public WeaponRegistry(JavaPlugin plugin, WeaponManager weaponManager) { + List<Weapon<?>> list = new ArrayList<Weapon<?>>(); + + Bukkit.getPluginManager().registerEvents(this, plugin); + + if (!Core.getSettings().isSister()) { + list.add(new Dildo()); + } + + list.addAll(Arrays.asList( + + //PISTOL + new Pistol(), + new StunGun(), + new CombatPistol(), + new MarksmanPistol(), + new HeavyPistol(), + + //SMG + new SMG(), + new MicroSMG(), + new CombatPDW(), + new GusenbergSweeper(), + new AssaultSMG(), + + //SHOTGUN + new SawedoffShotgun(), + new PumpShotgun(), + new Musket(), + new AssaultShotgun(), + new HeavyShotgun(), + + //ASSAULT RIFLE + new AssaultRifle(), + new CarbineRifle(), + new BullpupRifle(), + new AdvancedRifle(), + new SpecialCarbine(), + + //LMG + new MG(), + new CombatMG(), + + //SNIPER + new SniperRifle(), + new HeavySniper(), + + //SPECIAL + new Minigun(), + new GoldMinigun(), + new NetLauncher(), + new Flamethrower(), + new Clausinator(), + + //LAUNCHER + new RPG(), + new HomingLauncher(), + new GrenadeLauncher(), + + //MELEE + new Knife(), + new BaseballBat(), + new Rake(), + new NightStick(), + new Chainsaw(), + new Katana(), +// new Dildo(), + + //THROWABLE + new Grenade(), + new MolotovCocktail(), + new ProximityMine(), + new StickyBomb(), + new TearGas() + )); + + + weaponManager.registerWeapons(list); + + final World spawn = Bukkit.getWorld("spawn"); + this.minLoc = new Location(spawn, -358.0, 0, 226.0); + this.maxLoc = new Location(spawn, -378.0, 0, 247.0); + + for (Weapon<?> weapon : list) { + if (!(weapon instanceof WeaponVisualStatue)) continue; + WeaponVisualStatue statue = (WeaponVisualStatue) weapon; + + Location origin = statue.getOrigin(spawn); + if (!origin.getChunk().isLoaded()) origin.getChunk().load(); + for (Entity entity : origin.getWorld().getNearbyEntities(origin, 2, 2, 2)) { + if (entity.getType() != EntityType.ARMOR_STAND) continue; + entity.remove(); + } + } + + ServerUtil.runTaskLater(() -> { + for (Weapon<?> weapon : list) { + if (!(weapon instanceof WeaponVisualStatue)) continue; + ((WeaponVisualStatue) weapon).spawnVisual(spawn); + } + }, 20 * 15); + } + + @EventHandler + protected final void onArmorstandInteract(PlayerArmorStandManipulateEvent event) { + if (event.getRightClicked() == null) return; + if (!event.getRightClicked().hasMetadata("statue")) return; + event.setCancelled(true); + } + + @EventHandler + protected final void onPlayerMove(PlayerMoveEvent event) { + Player player = event.getPlayer(); + if (!player.getWorld().equals(this.maxLoc.getWorld())) return; + + ServerUtil.runTaskAsync(() -> { + if (!this.isInRegion(player)) return; + + for (Entity entity : player.getWorld().getNearbyEntities(player.getLocation(), 6, 6, 6)) { + if (entity == null) return; + if (entity.getType() != EntityType.ARMOR_STAND) continue; + if (!this.isLookingAt(player, (LivingEntity) entity)) continue; + + ArmorStand statue = (ArmorStand) entity; + if (!statue.hasMetadata("statueview")) continue; + + this.createAndShow(player, statue); + break; + } + }); + } + + @EventHandler + protected final void onEntityDamage(EntityDamageEvent event) { + if (event.getEntity() == null) return; + if (!event.getEntity().hasMetadata("statue")) return; + event.setCancelled(true); + } + + @EventHandler + protected final void onArmorstandInteract(PlayerInteractAtEntityEvent event) { + if (event.getRightClicked() == null) return; + if (!event.getRightClicked().hasMetadata("statue")) return; + event.setCancelled(true); + + Weapon<?> weapon = (Weapon<?>) event.getRightClicked().getMetadata("statueview").get(0).value(); + if (weapon == null) return; + + Player player = event.getPlayer(); + GTMUser user = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + + if (!GTM.getSettings().canBuy()){ + player.sendMessage(ChatColor.RED + "Buying things is currently disabled."); + return; + } + + GameItem gi = GTM.getItemManager().getItem(weapon.getCompactName()); + double price = gi.getBuyPrice(); + if (user.hasMoney(price)) { + user.takeMoney(price); + player.sendMessage(Lang.MONEY_TAKE.f(String.valueOf(price))); + } else { + if (user.hasBank(price)) { + user.takeBank(price); + player.sendMessage(Lang.BANK_TAKE.f(String.valueOf(price))); + } else { + player.sendMessage(Lang.MONEY.f("&7You do not have enough money!")); + return; + } + } + GTMUtils.updateBoard(player, Core.getUserManager().getLoadedUser(player.getUniqueId()), user); + + ItemStack stack = gi.getItem(); + WeaponSkin weaponSkin = user.getEquippedWeaponSkin(weapon); + + if (weaponSkin != null){ + stack.setDurability(weaponSkin.getIdentifier()); + } + + Utils.giveItems(player, stack); + } + + private Location getLocationFromSize(Location original, double x, double y, double z, int size) { + Location loc = original.clone(); + loc.setY((loc.getY() + y) + (0.25 * size)); + loc.setX(loc.getX() + x); + loc.setZ(loc.getZ() + z); + return loc; + } + + @EventHandler + protected final void onWorldChange(PlayerChangedWorldEvent event) { + for (Hologram otherHologram : weaponHolograms.values()) { + otherHologram.getVisibilityManager().hideTo(event.getPlayer()); + } + } + + @EventHandler + protected final void onLeave(PlayerQuitEvent event) { + for (Hologram otherHologram : weaponHolograms.values()) { + otherHologram.getVisibilityManager().hideTo(event.getPlayer()); + } + } + + private synchronized void createAndShow(Player player, ArmorStand statue) { + Weapon<?> weapon = (Weapon<?>) statue.getMetadata("statue").get(0).value(); + if (weapon == null) { + return; + } + + //IN DEV (works, movement event doesn't) + if (this.playerCache.containsKey(player.getUniqueId())) { + PlayerStateCache cache = this.playerCache.get(player.getUniqueId()); + if (cache.expired()) { + cache.weapon = weapon; + cache.time = System.currentTimeMillis() + 6000; + } + else { + if (cache.weapon.getCompactName().equals(weapon.getCompactName())) + return; + + cache.weapon = weapon; + cache.time = System.currentTimeMillis() + 6000; + } + } + else { + this.playerCache.put(player.getUniqueId(), new PlayerStateCache(weapon, System.currentTimeMillis() + 6000)); + } + + if (weaponHolograms.containsKey(weapon.getCompactName())) { + Hologram hologram = weaponHolograms.get(weapon.getCompactName()); + + for (Hologram otherHologram : weaponHolograms.values()) { + if (otherHologram.equals(hologram)) continue; + otherHologram.getVisibilityManager().hideTo(player); + } + + if (hologram.getVisibilityManager().isVisibleTo(player)) + hologram.getVisibilityManager().hideTo(player); + else hologram.getVisibilityManager().showTo(player); + return; + } + + ItemStack weaponClone = weapon.createItemStack().clone(); + LinkedList<String> displayList = Lists.newLinkedList(); + + double price = GTM.getItemManager().getItem(weapon.getCompactName()).getBuyPrice(); + + //Name & Spacer. + displayList.add(C.YELLOW + C.BOLD + weapon.getName() + C.RESET + C.GREEN + " $" + C.BOLD + price + C.RESET); + displayList.add(" "); + + //Load the weapon description into the List. + for (String str : weapon.getDescription()) { + displayList.add(C.GRAY + C.ITALIC + str + C.RESET); + } + + //Spacer + displayList.add(" "); + + //Load the weapon stats into the List. + for (String str : weaponClone.getItemMeta().getLore()) { + if (!ChatColor.stripColor(str).contains("::::::::")) continue; + displayList.add(str + C.RESET); + } + + ServerUtil.runTask(() -> { + double x = 0, y = 0, z = 0; + if (statue.hasMetadata("statue_X")) x = (double) statue.getMetadata("statue_X").get(0).value(); + if (statue.hasMetadata("statue_Y")) y = (double) statue.getMetadata("statue_Y").get(0).value(); + if (statue.hasMetadata("statue_Z")) z = (double) statue.getMetadata("statue_Z").get(0).value(); + + Hologram hologram = HologramsAPI.createHologram(GTM.getInstance(), this.getLocationFromSize(((WeaponVisualStatue) weapon).getOrigin(statue.getWorld()), x, y, z, displayList.size())); + for (String str : displayList) hologram.appendTextLine(str); + hologram.getVisibilityManager().setVisibleByDefault(false); + + weaponHolograms.put(weapon.getCompactName(), hologram); + + for (Hologram otherHologram : weaponHolograms.values()) { + if (otherHologram.equals(hologram)) continue; + otherHologram.getVisibilityManager().hideTo(player); + } + + hologram.getVisibilityManager().showTo(player); + }); + } + + private boolean isInRegion(Player player) { + Location loc = player.getLocation(); + return (loc.getX() > this.maxLoc.getX() && loc.getX() < this.minLoc.getX()) && + (loc.getZ() < this.maxLoc.getZ() && loc.getZ() > this.minLoc.getZ()); + } + + private boolean isLookingAt(Player player, LivingEntity entity) { + Location eye = player.getEyeLocation(); + org.bukkit.util.Vector toEntity = entity.getEyeLocation().toVector().subtract(eye.toVector()); + double dot = toEntity.normalize().dot(eye.getDirection()); + + return dot > 0.99D; + } + + private class PlayerStateCache { + public Weapon<?> weapon = null; + public long time; + + public PlayerStateCache(Weapon<?> weapon, long time) { + this.weapon = weapon; + this.time = time; + } + + public boolean expired() { + return System.currentTimeMillis() >= time; + } + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/WeaponVisualStatue.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/WeaponVisualStatue.java new file mode 100644 index 0000000..f3cccb8 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/WeaponVisualStatue.java @@ -0,0 +1,52 @@ +package net.grandtheftmc.gtm.weapon; + +import net.grandtheftmc.core.util.C; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.guns.weapon.Weapon; +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.entity.ArmorStand; +import org.bukkit.metadata.FixedMetadataValue; + +public interface WeaponVisualStatue { + + Location spawnVisual(World world); + + Location getOrigin(World world); + + default ArmorStand spawnEntity(Location location, Weapon<?> weapon, VisualType visualType) { + ArmorStand entity = location.getWorld().spawn(location, ArmorStand.class); + if (visualType == VisualType.NAME && weapon != null) { +// entity.setCustomName(C.YELLOW + C.BOLD + weapon.getName()); +// entity.setCustomNameVisible(true); + entity.setMetadata("statueview", new FixedMetadataValue(GTM.getInstance(), weapon)); + } + else if (visualType == VisualType.PRICE && weapon != null) { +// double price = 0.0; +// entity.setCustomName(C.GREEN + C.BOLD + "$" + price); +// entity.setCustomNameVisible(true); + } + + entity.setGravity(false); + entity.setRemoveWhenFarAway(false); + entity.setAI(false); +// entity.setInvulnerable(true); + entity.setBasePlate(true); + entity.setVisible(false); + entity.setInvulnerable(true); +// entity.setCollidable(false); + entity.setMetadata("statue", new FixedMetadataValue(GTM.getInstance(), weapon)); + extras(entity); + + return entity; + } + + default void extras(ArmorStand entity) {} + + public static enum VisualType { + NAME, + PRICE, + NONE, + ; + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/airstrike/Airstrike.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/airstrike/Airstrike.java new file mode 100644 index 0000000..f483c22 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/airstrike/Airstrike.java @@ -0,0 +1,34 @@ +package net.grandtheftmc.gtm.weapon.airstrike; + +import org.bukkit.Material; +import org.bukkit.Sound; + +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.guns.weapon.AirstrikeWeapon; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponType; + +/** + * Created by Luke Bingham on 18/07/2017. + */ +public class Airstrike extends AirstrikeWeapon { + + /** + * Construct a new Weapon. + */ + public Airstrike() { + super( + (short) 51, + "Airstrke", //Name + WeaponType.DROPPABLE, //Weapon Type + AmmoType.NONE, //AmmoType + new ItemFactory(Material.WOOD_BUTTON).build(), //ItemStack + new Sound[] { + Sound.ENTITY_SKELETON_SHOOT, + Sound.ENTITY_BAT_TAKEOFF, + Sound.ENTITY_BAT_TAKEOFF, + Sound.ENTITY_GENERIC_EXPLODE + } + ); + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/airstrike/Nuke.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/airstrike/Nuke.java new file mode 100644 index 0000000..9aa505e --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/airstrike/Nuke.java @@ -0,0 +1,33 @@ +package net.grandtheftmc.gtm.weapon.airstrike; + +import org.bukkit.Material; +import org.bukkit.Sound; + +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.guns.weapon.AirstrikeWeapon; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponType; + +/** + * Created by Luke Bingham on 18/07/2017. + */ +public class Nuke extends AirstrikeWeapon { + + /** + * Construct a new Weapon. + */ + public Nuke() { + super( + (short) 52, + "Nuke", //Name + WeaponType.DROPPABLE, //Weapon Type + AmmoType.NONE, //AmmoType + new ItemFactory(Material.WOOD_BUTTON).build(), //ItemStack + new Sound[] { + Sound.ENTITY_SKELETON_SHOOT, + Sound.ENTITY_BAT_TAKEOFF, + Sound.ENTITY_BAT_TAKEOFF, + } + ); + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/explosive/Grenade.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/explosive/Grenade.java new file mode 100644 index 0000000..670dcf2 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/explosive/Grenade.java @@ -0,0 +1,83 @@ +package net.grandtheftmc.gtm.weapon.explosive; + +import org.bukkit.Effect; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.World; +import org.bukkit.entity.ArmorStand; +import org.bukkit.inventory.ItemStack; +import org.bukkit.metadata.FixedMetadataValue; + +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.weapon.WeaponVisualStatue; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.ThrowableWeapon; +import net.grandtheftmc.guns.weapon.WeaponType; + +/** + * Created by Luke Bingham on 18/07/2017. + */ +public class Grenade extends ThrowableWeapon implements WeaponVisualStatue { + + /** + * Construct a new Weapon. + */ + public Grenade() { + super( + (short) 34, + "Grenade", //Name + WeaponType.THROWABLE, //Weapon Type + AmmoType.EXPLOSIVE, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 331).build(), //ItemStack + new Sound[] { //Gun Sounds + Sound.ENTITY_SKELETON_SHOOT, + Sound.ENTITY_BAT_TAKEOFF, + Sound.ENTITY_BAT_TAKEOFF, + Sound.ENTITY_GENERIC_EXPLODE + } + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.FIREWORK_CHARGE).setName(getName()).build()); + setDescription("How to clear a room", "in 3..2..1."); + + this.particles = Effect.EXPLOSION_HUGE; + this.delay = 55; + this.damage = 12; + this.meleeDamage = 1.0; + this.explosionSize = 6.0; + this.explosionDelay = 60; + this.explosionStrength = 2.0; + this.scaledDamage = false; + } + + @Override + public Location spawnVisual(World world) { + Location origin = getOrigin(world); + ArmorStand glass = spawnEntity(origin.clone(), this, VisualType.NAME); + glass.setHelmet(new ItemStack(Material.GLASS)); + + Location weaponLoc = origin.clone().add(0.3, 0.85, -0.5); + weaponLoc.setYaw(-30.0f); + ArmorStand weapon = spawnEntity(weaponLoc, this, VisualType.NONE); + weapon.setArms(true); + weapon.setItemInHand(this.createItemStack().clone()); + weapon.setMarker(true); + + + + return origin; + } + + @Override + public Location getOrigin(World world) { + return new Location(world, -365.5, 25.5, 233.5, -0.0f, 0.0f); + } + + @Override + public void extras(ArmorStand entity) { + entity.setMetadata("statue_Y", new FixedMetadataValue(GTM.getInstance(), 2.25)); + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/explosive/MolotovCocktail.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/explosive/MolotovCocktail.java new file mode 100644 index 0000000..43c8cef --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/explosive/MolotovCocktail.java @@ -0,0 +1,81 @@ +package net.grandtheftmc.gtm.weapon.explosive; + +import net.grandtheftmc.core.util.AngleUtil; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.weapon.WeaponVisualStatue; +import org.bukkit.*; + +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.ThrowableWeapon; +import net.grandtheftmc.guns.weapon.WeaponType; +import org.bukkit.entity.ArmorStand; +import org.bukkit.inventory.ItemStack; +import org.bukkit.metadata.FixedMetadataValue; +import org.bukkit.util.EulerAngle; + +/** + * Created by Luke Bingham on 18/07/2017. + */ +public class MolotovCocktail extends ThrowableWeapon implements WeaponVisualStatue { + + /** + * Construct a new Weapon. + */ + public MolotovCocktail() { + super( + (short) 36, + "Molotov Cocktail", //Name + WeaponType.THROWABLE, //Weapon Type + AmmoType.EXPLOSIVE, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 351).build(), //ItemStack + new Sound[] { //Gun Sounds + Sound.ENTITY_SKELETON_SHOOT, + Sound.ENTITY_BAT_TAKEOFF, + Sound.ENTITY_BAT_TAKEOFF, + Sound.ENTITY_GENERIC_EXPLODE + } + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.MAGMA_CREAM).setName(getName()).build()); + setDescription("Nothing says angst quite", "as much as a bottle of", "liquid fire."); + + this.particles = Effect.FLAME; + this.delay = 60; + this.flammable = true; + this.duration = 140; + this.damage = 20; + this.explosionSize = 5.0; + this.explosionDelay = 40; + this.explosionStrength = 0.3; + } + + @Override + public Location spawnVisual(World world) { + Location origin = getOrigin(world); + ArmorStand glass = spawnEntity(origin.clone(), this, VisualType.NAME); + glass.setHelmet(new ItemStack(Material.GLASS)); + + Location weaponLoc = origin.clone().add(0.3, 0.85, -0.5); + weaponLoc.setYaw(-30.0f); + ArmorStand weapon = spawnEntity(weaponLoc, this, VisualType.NONE); + weapon.setArms(true); + weapon.setItemInHand(this.createItemStack().clone()); + weapon.setMarker(true); + + + + return origin; + } + + @Override + public Location getOrigin(World world) { + return new Location(world, -365.5, 25.5, 235.5, -0.0f, 0.0f); + } + + @Override + public void extras(ArmorStand entity) { + entity.setMetadata("statue_Y", new FixedMetadataValue(GTM.getInstance(), 2.25)); + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/explosive/ProximityMine.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/explosive/ProximityMine.java new file mode 100644 index 0000000..cc1dd3b --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/explosive/ProximityMine.java @@ -0,0 +1,88 @@ +package net.grandtheftmc.gtm.weapon.explosive; + +import org.bukkit.Effect; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.World; +import org.bukkit.entity.ArmorStand; +import org.bukkit.inventory.ItemStack; +import org.bukkit.metadata.FixedMetadataValue; +import org.bukkit.util.EulerAngle; + +import net.grandtheftmc.core.util.AngleUtil; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.weapon.WeaponVisualStatue; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.ThrowableWeapon; +import net.grandtheftmc.guns.weapon.WeaponType; + +/** + * Created by Luke Bingham on 18/07/2017. + */ +public class ProximityMine extends ThrowableWeapon implements WeaponVisualStatue { + + /** + * Construct a new Weapon. + */ + public ProximityMine() { + super( + (short) 38, + "Proximity Mine", //Name + WeaponType.THROWABLE, //Weapon Type + AmmoType.EXPLOSIVE, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 371).build(), //ItemStack + new Sound[] { //Gun Sounds + Sound.ENTITY_SKELETON_SHOOT, + Sound.ENTITY_BAT_TAKEOFF, + Sound.ENTITY_BAT_TAKEOFF, + Sound.ENTITY_GENERIC_EXPLODE + } + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.GLOWSTONE_DUST).setName(getName()).build()); + setDescription("Enjoy your spawn camping..."); + + this.particles = Effect.EXPLOSION_HUGE; + this.delay = 40; + this.proximity = true; +// this.duration = 100; + this.damage = 10; + this.meleeDamage = 1.0; + this.explosionSize = 5.0; + this.explosionDelay = 0; + this.explosionStrength = 3.0; + this.scaledDamage = false; + } + + @Override + public Location spawnVisual(World world) { + Location origin = getOrigin(world); + ArmorStand glass = spawnEntity(origin.clone(), this, VisualType.NAME); + glass.setHelmet(new ItemStack(Material.GLASS)); + + Location weaponLoc = origin.clone().add(0.9, 0.3, -0.5); + weaponLoc.setYaw(-30.0f); + ArmorStand weapon = spawnEntity(weaponLoc, this, VisualType.NONE); + weapon.setArms(true); + weapon.setItemInHand(this.createItemStack().clone()); + weapon.setRightArmPose(new EulerAngle(0, AngleUtil.getRadianFromDegree(180), AngleUtil.getRadianFromDegree(90))); + weapon.setMarker(true); + + + + return origin; + } + + @Override + public Location getOrigin(World world) { + return new Location(world, -367.5, 25.5, 233.5, -0.0f, 0.0f); + } + + @Override + public void extras(ArmorStand entity) { + entity.setMetadata("statue_Y", new FixedMetadataValue(GTM.getInstance(), 2.25)); + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/explosive/StickyBomb.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/explosive/StickyBomb.java new file mode 100644 index 0000000..969d691 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/explosive/StickyBomb.java @@ -0,0 +1,89 @@ +package net.grandtheftmc.gtm.weapon.explosive; + +import org.bukkit.Effect; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.World; +import org.bukkit.entity.ArmorStand; +import org.bukkit.inventory.ItemStack; +import org.bukkit.metadata.FixedMetadataValue; +import org.bukkit.util.EulerAngle; + +import net.grandtheftmc.core.util.AngleUtil; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.weapon.WeaponVisualStatue; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.ThrowableWeapon; +import net.grandtheftmc.guns.weapon.WeaponType; + +/** + * Created by Luke Bingham on 18/07/2017. + */ +public class StickyBomb extends ThrowableWeapon implements WeaponVisualStatue { + + /** + * Construct a new Weapon. + */ + public StickyBomb() { + super( + (short) 37, + "Sticky Bomb", //Name + WeaponType.THROWABLE, //Weapon Type + AmmoType.EXPLOSIVE, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 361).build(), //ItemStack + new Sound[] { //Gun Sounds + Sound.ENTITY_SKELETON_SHOOT, + Sound.ENTITY_BAT_TAKEOFF, + Sound.ENTITY_BAT_TAKEOFF, + Sound.ENTITY_GENERIC_EXPLODE + } + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.FIREBALL).setName(getName()).build()); + setDescription("It's like the explosion", "is hugging you!"); + + this.particles = Effect.EXPLOSION_HUGE; + this.delay = 60; + this.sticky = true; +// this.duration = 100; + this.damage = 16; + this.explosionSize = 5.0; + //this.explosionDelay = 100; + this.meleeDamage = 1; + //this.tntFuseDelay = 80; + this.explosionStrength = 0.9; + this.scaledDamage = true; + } + + @Override + public Location spawnVisual(World world) { + Location origin = getOrigin(world); + ArmorStand glass = spawnEntity(origin.clone(), this, VisualType.NAME); + glass.setHelmet(new ItemStack(Material.GLASS)); + + Location weaponLoc = origin.clone().add(0.85, 0.3, -0.5); + weaponLoc.setYaw(-30.0f); + ArmorStand weapon = spawnEntity(weaponLoc, this, VisualType.NONE); + weapon.setArms(true); + weapon.setItemInHand(this.createItemStack().clone()); + weapon.setRightArmPose(new EulerAngle(0, AngleUtil.getRadianFromDegree(180), AngleUtil.getRadianFromDegree(90))); + weapon.setMarker(true); + + + + return origin; + } + + @Override + public Location getOrigin(World world) { + return new Location(world, -366.5, 25.5, 233.5, -0.0f, 0.0f); + } + + @Override + public void extras(ArmorStand entity) { + entity.setMetadata("statue_Y", new FixedMetadataValue(GTM.getInstance(), 2.25)); + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/explosive/TearGas.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/explosive/TearGas.java new file mode 100644 index 0000000..8a484dd --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/explosive/TearGas.java @@ -0,0 +1,82 @@ +package net.grandtheftmc.gtm.weapon.explosive; + +import net.grandtheftmc.core.util.AngleUtil; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.weapon.WeaponVisualStatue; +import org.bukkit.*; + +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.ThrowableWeapon; +import net.grandtheftmc.guns.weapon.WeaponType; +import org.bukkit.entity.ArmorStand; +import org.bukkit.inventory.ItemStack; +import org.bukkit.metadata.FixedMetadataValue; +import org.bukkit.util.EulerAngle; + +/** + * Created by Luke Bingham on 18/07/2017. + */ +public class TearGas extends ThrowableWeapon implements WeaponVisualStatue { + + /** + * Construct a new Weapon. + */ + public TearGas() { + super( + (short) 35, + "Tear Gas", //Name + WeaponType.THROWABLE, //Weapon Type + AmmoType.EXPLOSIVE, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 341).build(), //ItemStack + new Sound[] { //Gun Sounds + Sound.ENTITY_SKELETON_SHOOT, + Sound.ENTITY_BAT_TAKEOFF, + Sound.ENTITY_BAT_TAKEOFF, + Sound.BLOCK_LAVA_EXTINGUISH + } + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.GHAST_TEAR).setName(getName()).build()); + setDescription("This will make them", "cry more than your ex."); + + this.particles = Effect.CLOUD; + this.delay = 60; + this.teargas = true; + this.duration = 140; + this.damage = 1.0; + this.meleeDamage = 1.0; + this.explosionSize = 5.0; + this.explosionDelay = 40; + this.explosionStrength = 0.0; + } + + @Override + public Location spawnVisual(World world) { + Location origin = getOrigin(world); + ArmorStand glass = spawnEntity(origin.clone(), this, VisualType.NAME); + glass.setHelmet(new ItemStack(Material.GLASS)); + + Location weaponLoc = origin.clone().add(0.3, 0.85, -0.5); + weaponLoc.setYaw(-30.0f); + ArmorStand weapon = spawnEntity(weaponLoc, this, VisualType.NONE); + weapon.setArms(true); + weapon.setItemInHand(this.createItemStack().clone()); + weapon.setMarker(true); + + + + return origin; + } + + @Override + public Location getOrigin(World world) { + return new Location(world, -365.5, 25.5, 234.5, -0.0f, 0.0f); + } + + @Override + public void extras(ArmorStand entity) { + entity.setMetadata("statue_Y", new FixedMetadataValue(GTM.getInstance(), 2.25)); + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/melee/BaseballBat.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/melee/BaseballBat.java new file mode 100644 index 0000000..beb9f69 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/melee/BaseballBat.java @@ -0,0 +1,104 @@ +package net.grandtheftmc.gtm.weapon.melee; + +import net.grandtheftmc.core.util.AngleUtil; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.weapon.WeaponVisualStatue; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; + +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.MeleeWeapon; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; +import org.bukkit.World; +import org.bukkit.entity.ArmorStand; +import org.bukkit.metadata.FixedMetadataValue; +import org.bukkit.util.EulerAngle; + +/** + * Created by Luke Bingham on 18/07/2017. + */ +public class BaseballBat extends MeleeWeapon implements WeaponVisualStatue { + + /** + * Construct a new Weapon. + */ + public BaseballBat() { + super( + (short) 4, + "Baseball Bat", //Name + WeaponType.MELEE, //Weapon Type + AmmoType.MELEE, //AmmoType + + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 31).build(), //ItemStack + new Sound[] { //Sounds + Sound.ENTITY_PLAYER_ATTACK_STRONG, + Sound.ITEM_ARMOR_EQUIP_GENERIC, + Sound.ITEM_ARMOR_EQUIP_GENERIC + } + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.IRON_BARDING).setName(getName()).build()); + setDescription("Are you a cave man?"); + + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), "&6&lPurple") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.delay = 7; + this.meleeDamage = 6.5; + } + + @Override + public Location spawnVisual(World world) { + Location origin = this.getOrigin(world); + Location clickLoc = origin.clone().add(0.4, 1.5, 0.4); + clickLoc.setYaw(-45.0f); + ArmorStand clickable = spawnEntity(clickLoc, this, WeaponVisualStatue.VisualType.NAME); + clickable.setSmall(true); + + ArmorStand weapon = spawnEntity(origin.clone().add(-0.3, 1.25, 0.125), this, WeaponVisualStatue.VisualType.NONE); + weapon.setArms(true); + weapon.setItemInHand(this.createItemStack().clone()); + weapon.setRightArmPose(new EulerAngle(AngleUtil.getRadianFromDegree(260), 0, AngleUtil.getRadianFromDegree(180))); + weapon.setMarker(true); + +// Location hookLoc = origin.clone().add(0.045, 1.02, -0.68); +// hookLoc.setPitch(0); +// hookLoc.setYaw(0); +// ArmorStand hook = spawnEntity(hookLoc, this, WeaponVisualStatue.VisualType.NONE); +// hook.setHelmet(new ItemStack(Material.TRIPWIRE_HOOK)); +// hook.setHeadPose(new EulerAngle(AngleUtil.getRadianFromDegree(45), 0, 0)); +// hook.setSmall(true); +// hook.setMarker(true); + + return origin; + } + + @Override + public Location getOrigin(World world) { + return new Location(world, -370.5, 25.5, 228.5, 180.0f, 0.0f); + } + + @Override + public void extras(ArmorStand entity) { + entity.setMetadata("statue_Y", new FixedMetadataValue(GTM.getInstance(), 2.5)); + entity.setMetadata("statue_X", new FixedMetadataValue(GTM.getInstance(), 0.4)); + entity.setMetadata("statue_Z", new FixedMetadataValue(GTM.getInstance(), 0.4)); + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/melee/Chainsaw.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/melee/Chainsaw.java new file mode 100644 index 0000000..8371da2 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/melee/Chainsaw.java @@ -0,0 +1,131 @@ +package net.grandtheftmc.gtm.weapon.melee; + +import net.grandtheftmc.core.util.AngleUtil; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.weapon.WeaponVisualStatue; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; + +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.MeleeWeapon; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.attribute.RankedWeapon; +import org.bukkit.World; +import org.bukkit.entity.ArmorStand; +import org.bukkit.metadata.FixedMetadataValue; +import org.bukkit.util.EulerAngle; + +/** + * Created by Luke Bingham on 18/07/2017. + */ +public class Chainsaw extends MeleeWeapon implements RankedWeapon, WeaponVisualStatue { + + /** + * Construct a new Weapon. + */ + public Chainsaw() { + super( + (short) 5, + "Chainsaw", //Name + WeaponType.MELEE, //Weapon Type + AmmoType.ENERGY, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 41).build(), //ItemStack + new Sound[] { //Sounds + Sound.ENTITY_WOLF_GROWL, + Sound.ITEM_ARMOR_EQUIP_GENERIC, + Sound.ITEM_ARMOR_EQUIP_GENERIC + } + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.DIAMOND_BARDING).setName(getName()).build()); + setDescription("A chainsaw?", "You absolute monster!"); + + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), "&6&lPurple") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.delay = 5; + this.meleeDamage = 6.5; + this.range = 2.5; + } + + /*@Override + public void onRightClick(Player player) { + ServerUtil.debug("20"); + MathUtil.getNearbyEntities(player, this.range).forEach(e -> { + ServerUtil.debug("21"); + if (player.hasLineOfSight(e)) { + ServerUtil.debug("they have line of sight.2"); + Vector toEntity = e.getLocation().toVector().subtract(player.getLocation().toVector()); + double dot = toEntity.normalize().dot(player.getLocation().getDirection()); + ServerUtil.debug(dot + " / dot2"); + if (dot <= 1 && dot >= 0) { + ServerUtil.debug("yup.2"); + e.setNoDamageTicks(0); + e.damage(getMeleeDamage(), player); + } + } + }); + Sounds.broadcastSound(getSounds()[0], player.getEyeLocation()); + }//todo: moved to the meleeweapon class, don't know why this isn't working.*/ + + @Override + public UserRank requiredRank() { + return UserRank.PREMIUM; + } + + @Override + public Location spawnVisual(World world) { + Location origin = this.getOrigin(world); + Location clickLoc = origin.clone().add(0.4, 1.5, -0.4); + clickLoc.setYaw(-135.0f); + ArmorStand clickable = spawnEntity(clickLoc, this, WeaponVisualStatue.VisualType.NAME); + clickable.setSmall(true); + + ArmorStand weapon = spawnEntity(origin.clone().add(0.25, 0.45, -0.65), this, WeaponVisualStatue.VisualType.NONE); + weapon.setArms(true); + weapon.setItemInHand(this.createItemStack().clone()); + weapon.setRightArmPose(new EulerAngle(AngleUtil.getRadianFromDegree(280), 0, 0)); + weapon.setMarker(true); + +// Location hookLoc = origin.clone().add(0.045, 1.02, -0.68); +// hookLoc.setPitch(0); +// hookLoc.setYaw(0); +// ArmorStand hook = spawnEntity(hookLoc, this, WeaponVisualStatue.VisualType.NONE); +// hook.setHelmet(new ItemStack(Material.TRIPWIRE_HOOK)); +// hook.setHeadPose(new EulerAngle(AngleUtil.getRadianFromDegree(45), 0, 0)); +// hook.setSmall(true); +// hook.setMarker(true); + + return origin; + } + + @Override + public Location getOrigin(World world) { + return new Location(world, -375.5, 25.5, 243.5, 0.0f, 0.0f); + } + + @Override + public void extras(ArmorStand entity) { + entity.setMetadata("statue_Y", new FixedMetadataValue(GTM.getInstance(), 2.5)); + entity.setMetadata("statue_X", new FixedMetadataValue(GTM.getInstance(), 0.4)); + entity.setMetadata("statue_Z", new FixedMetadataValue(GTM.getInstance(), -0.4)); + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/melee/Dildo.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/melee/Dildo.java new file mode 100644 index 0000000..27ff033 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/melee/Dildo.java @@ -0,0 +1,58 @@ +package net.grandtheftmc.gtm.weapon.melee; + +import org.bukkit.Material; +import org.bukkit.Sound; + +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.MeleeWeapon; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; + +/** + * Created by Luke Bingham on 03/08/2017. + */ +public class Dildo extends MeleeWeapon { + + /** + * Construct a new Weapon. + */ + public Dildo() { + super( + (short) 41, + "Dildo", //Name + WeaponType.MELEE, //Weapon Type + AmmoType.MELEE, //AmmoType + + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 401).build(), //ItemStack + new Sound[] { //Sounds + Sound.ENTITY_PLAYER_ATTACK_STRONG, + Sound.ITEM_ARMOR_EQUIP_GENERIC, + Sound.ITEM_ARMOR_EQUIP_GENERIC + } + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.SAPLING, (byte) 1).setName(getName()).build()); + setDescription("Certified 'me time'."); + + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), "&6&lPurple") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.delay = 7; + this.meleeDamage = 9; + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/melee/Katana.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/melee/Katana.java new file mode 100644 index 0000000..e8c2d18 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/melee/Katana.java @@ -0,0 +1,59 @@ +package net.grandtheftmc.gtm.weapon.melee; + +import org.bukkit.Material; +import org.bukkit.Sound; + +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.MeleeWeapon; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; + +/** + * Created by Luke Bingham on 03/08/2017. + */ +public class Katana extends MeleeWeapon { + + /** + * Construct a new Weapon. + */ + public Katana() { + super( + (short) 43, + "Katana", //Name + WeaponType.MELEE, //Weapon Type + AmmoType.MELEE, //AmmoType + + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 421).build(), //ItemStack + new Sound[] { //Sounds + Sound.ENTITY_PLAYER_ATTACK_STRONG, + Sound.ITEM_ARMOR_EQUIP_GENERIC, + Sound.ITEM_ARMOR_EQUIP_GENERIC + } + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.FLINT_AND_STEEL).setDurability((short) 56).setName(getName()).build()); + setDescription("An cold-iron forged,", "ancient Japanese samurai sword"); + + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), "&6&lPurple") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.delay = 12; + this.meleeDamage = 10; + } +} + diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/melee/Knife.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/melee/Knife.java new file mode 100644 index 0000000..9ab362a --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/melee/Knife.java @@ -0,0 +1,103 @@ +package net.grandtheftmc.gtm.weapon.melee; + +import net.grandtheftmc.core.util.AngleUtil; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.weapon.WeaponVisualStatue; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; + +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.MeleeWeapon; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; +import org.bukkit.World; +import org.bukkit.entity.ArmorStand; +import org.bukkit.metadata.FixedMetadataValue; +import org.bukkit.util.EulerAngle; + +/** + * Created by Luke Bingham on 18/07/2017. + */ +public class Knife extends MeleeWeapon implements WeaponVisualStatue { + + /** + * Construct a new Weapon. + */ + public Knife() { + super( + (short) 3, + "Knife", //Name + WeaponType.MELEE, //Weapon Type + AmmoType.MELEE, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 21).build(), //ItemStack + new Sound[] { //Sounds + Sound.ENTITY_SKELETON_SHOOT, + Sound.ITEM_ARMOR_EQUIP_GENERIC, + Sound.ITEM_ARMOR_EQUIP_GENERIC + } + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.GOLD_BARDING).setName(getName()).build()); + setDescription("Don't bring a knife", "to a gun fight."); + + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), "&6&lPurple") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.delay = 7; + this.meleeDamage = 7.5; + } + + @Override + public Location spawnVisual(World world) { + Location origin = this.getOrigin(world); + Location clickLoc = origin.clone().add(0.4, 1.5, 0.4); + clickLoc.setYaw(-45.0f); + ArmorStand clickable = spawnEntity(clickLoc, this, WeaponVisualStatue.VisualType.NAME); + clickable.setSmall(true); + + ArmorStand weapon = spawnEntity(origin.clone().add(-0.3, 0.74, -0.3), this, WeaponVisualStatue.VisualType.NONE); + weapon.setArms(true); + weapon.setItemInHand(this.createItemStack().clone()); + weapon.setRightArmPose(new EulerAngle(AngleUtil.getRadianFromDegree(260), 0, AngleUtil.getRadianFromDegree(180))); + weapon.setMarker(true); + +// Location hookLoc = origin.clone().add(0.045, 1.02, -0.68); +// hookLoc.setPitch(0); +// hookLoc.setYaw(0); +// ArmorStand hook = spawnEntity(hookLoc, this, WeaponVisualStatue.VisualType.NONE); +// hook.setHelmet(new ItemStack(Material.TRIPWIRE_HOOK)); +// hook.setHeadPose(new EulerAngle(AngleUtil.getRadianFromDegree(45), 0, 0)); +// hook.setSmall(true); +// hook.setMarker(true); + + return origin; + } + + @Override + public Location getOrigin(World world) { + return new Location(world, -371.5, 25.5, 229.5, -70.0f, 0.0f); + } + + @Override + public void extras(ArmorStand entity) { + entity.setMetadata("statue_Y", new FixedMetadataValue(GTM.getInstance(), 2.5)); + entity.setMetadata("statue_X", new FixedMetadataValue(GTM.getInstance(), 0.4)); + entity.setMetadata("statue_Z", new FixedMetadataValue(GTM.getInstance(), 0.4)); + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/melee/NightStick.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/melee/NightStick.java new file mode 100644 index 0000000..404a001 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/melee/NightStick.java @@ -0,0 +1,103 @@ +package net.grandtheftmc.gtm.weapon.melee; + +import net.grandtheftmc.core.util.AngleUtil; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.weapon.WeaponVisualStatue; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; + +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.MeleeWeapon; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; +import org.bukkit.World; +import org.bukkit.entity.ArmorStand; +import org.bukkit.metadata.FixedMetadataValue; +import org.bukkit.util.EulerAngle; + +/** + * Created by Luke Bingham on 18/07/2017. + */ +public class NightStick extends MeleeWeapon implements WeaponVisualStatue { + + /** + * Construct a new Weapon. + */ + public NightStick() { + super( + (short) 2, + "Night Stick", //Name + WeaponType.MELEE, //Weapon Type + AmmoType.MELEE, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 11).build(), //ItemStack + new Sound[] { //Sounds + Sound.ENTITY_PLAYER_ATTACK_WEAK, + Sound.ITEM_ARMOR_EQUIP_GENERIC, + Sound.ITEM_ARMOR_EQUIP_GENERIC + } + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.BLAZE_ROD).setName(getName()).build()); + setDescription("Enjoy trying to beat", "armed criminals to death."); + + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), "&6&lPurple") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.delay = 5; + this.meleeDamage = 5.5; + } + + @Override + public Location spawnVisual(World world) { + Location origin = this.getOrigin(world); + Location clickLoc = origin.clone().add(-0.4, 1.5, -0.4); + clickLoc.setYaw(-45.0f); + ArmorStand clickable = spawnEntity(clickLoc, this, WeaponVisualStatue.VisualType.NAME); + clickable.setSmall(true); + + ArmorStand weapon = spawnEntity(origin.clone().add(0.3, 1.1, -0.2), this, WeaponVisualStatue.VisualType.NONE); + weapon.setArms(true); + weapon.setItemInHand(this.createItemStack().clone()); + weapon.setRightArmPose(new EulerAngle(AngleUtil.getRadianFromDegree(260), 0, AngleUtil.getRadianFromDegree(180))); + weapon.setMarker(true); + +// Location hookLoc = origin.clone().add(0.045, 1.02, -0.68); +// hookLoc.setPitch(0); +// hookLoc.setYaw(0); +// ArmorStand hook = spawnEntity(hookLoc, this, WeaponVisualStatue.VisualType.NONE); +// hook.setHelmet(new ItemStack(Material.TRIPWIRE_HOOK)); +// hook.setHeadPose(new EulerAngle(AngleUtil.getRadianFromDegree(45), 0, 0)); +// hook.setSmall(true); +// hook.setMarker(true); + + return origin; + } + + @Override + public Location getOrigin(World world) { + return new Location(world, -361.5, 25.5, 239.5, 0.0f, 0.0f); + } + + @Override + public void extras(ArmorStand entity) { + entity.setMetadata("statue_Y", new FixedMetadataValue(GTM.getInstance(), 2.5)); + entity.setMetadata("statue_X", new FixedMetadataValue(GTM.getInstance(), -0.4)); + entity.setMetadata("statue_Z", new FixedMetadataValue(GTM.getInstance(), -0.4)); + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/melee/Rake.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/melee/Rake.java new file mode 100644 index 0000000..2e77684 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/melee/Rake.java @@ -0,0 +1,103 @@ +package net.grandtheftmc.gtm.weapon.melee; + +import net.grandtheftmc.core.util.AngleUtil; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.weapon.WeaponVisualStatue; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; + +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.MeleeWeapon; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; +import org.bukkit.World; +import org.bukkit.entity.ArmorStand; +import org.bukkit.metadata.FixedMetadataValue; +import org.bukkit.util.EulerAngle; + +/** + * Created by Luke Bingham on 18/07/2017. + */ +public class Rake extends MeleeWeapon implements WeaponVisualStatue { + + /** + * Construct a new Weapon. + */ + public Rake() { + super( + (short) 1, + "Rake", //Name + WeaponType.MELEE, //Weapon Type + AmmoType.MELEE, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 1).build(), //ItemStack + new Sound[] { //Sounds + Sound.ENTITY_PLAYER_ATTACK_NODAMAGE, + Sound.ITEM_ARMOR_EQUIP_GENERIC, + Sound.ITEM_ARMOR_EQUIP_GENERIC + } + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.STICK).setName(getName()).build()); + setDescription("This...isn't even a", "proper weapon."); + + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), "&6&lPurple") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.delay = 6; + this.meleeDamage = 4; + } + + @Override + public Location spawnVisual(World world) { + Location origin = this.getOrigin(world); + Location clickLoc = origin.clone().add(-0.4, 1.5, -0.4); + clickLoc.setYaw(-45.0f); + ArmorStand clickable = spawnEntity(clickLoc, this, WeaponVisualStatue.VisualType.NAME); + clickable.setSmall(true); + + ArmorStand weapon = spawnEntity(origin.clone().add(-0.225, 1.1, -0.26), this, WeaponVisualStatue.VisualType.NONE); + weapon.setArms(true); + weapon.setItemInHand(this.createItemStack().clone()); + weapon.setRightArmPose(new EulerAngle(AngleUtil.getRadianFromDegree(260), 0, AngleUtil.getRadianFromDegree(180))); + weapon.setMarker(true); + +// Location hookLoc = origin.clone().add(0.045, 1.02, -0.68); +// hookLoc.setPitch(0); +// hookLoc.setYaw(0); +// ArmorStand hook = spawnEntity(hookLoc, this, WeaponVisualStatue.VisualType.NONE); +// hook.setHelmet(new ItemStack(Material.TRIPWIRE_HOOK)); +// hook.setHeadPose(new EulerAngle(AngleUtil.getRadianFromDegree(45), 0, 0)); +// hook.setSmall(true); +// hook.setMarker(true); + + return origin; + } + + @Override + public Location getOrigin(World world) { + return new Location(world, -360.5, 25.5, 238.5, -90.0f, 0.0f); + } + + @Override + public void extras(ArmorStand entity) { + entity.setMetadata("statue_Y", new FixedMetadataValue(GTM.getInstance(), 2.5)); + entity.setMetadata("statue_X", new FixedMetadataValue(GTM.getInstance(), -0.4)); + entity.setMetadata("statue_Z", new FixedMetadataValue(GTM.getInstance(), -0.4)); + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/assault/AdvancedRifle.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/assault/AdvancedRifle.java new file mode 100644 index 0000000..57d7ee9 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/assault/AdvancedRifle.java @@ -0,0 +1,114 @@ +package net.grandtheftmc.gtm.weapon.ranged.assault; + +import org.bukkit.Effect; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.World; +import org.bukkit.entity.ArmorStand; +import org.bukkit.metadata.FixedMetadataValue; +import org.bukkit.util.EulerAngle; + +import net.grandtheftmc.core.util.AngleUtil; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.weapon.WeaponVisualStatue; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.ranged.attachment.Attachment; +import net.grandtheftmc.guns.weapon.ranged.guns.AssultRifleWeapon; + +/** + * Created by Luke Bingham on 17/07/2017. + */ +public class AdvancedRifle extends AssultRifleWeapon implements WeaponVisualStatue { + /** + * Construct a new RangedWeapon. + */ + public AdvancedRifle() { + super( + (short) 24, + "Advanced Rifle", //Name + WeaponType.ASSAULT, //Weapon Type + AmmoType.ASSAULT_RIFLE, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 231).build(), //ItemStack + new Sound[] { //Gun Sounds + Sound.ENTITY_ITEM_BREAK, + Sound.ITEM_ARMOR_EQUIP_IRON, + Sound.ITEM_ARMOR_EQUIP_IRON, + Sound.ENTITY_SKELETON_AMBIENT, + }, + Effect.VOID_FOG //Particles + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.STONE_AXE).setName(getName()).build()); + setDescription("Bit egotistical to name", "your gun 'advanced', no?"); + + setSupportedAttachments(Attachment.SUPPRESSOR, Attachment.EXTENDED_MAGS, Attachment.GRIP, Attachment.SCOPE); + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), "&6&lPurple") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.walkSpeed = 0.18; //Weapon + + this.damage = 3.5; //RangedWeapon + this.meleeDamage = 5.0; //RangedWeapon + this.accuracy = 0.015; //RangedWeapon + this.magSize = 30; //RangedWeapon + this.reloadTime = 35; //RangedWeapon + this.range = 45; //RangedWeapon + this.recoil = 0.1; //RangedWeapon + this.zoom = 3; //RangedWeapon + this.rps = 8; + this.rpm = 500; //AssultRifleWeapon + this.multiShoot = true; + } + + @Override + public Location spawnVisual(World world) { + Location origin = this.getOrigin(world); + ArmorStand clickable = spawnEntity(origin.clone().add(0, 1.5, 0), this, WeaponVisualStatue.VisualType.NAME); + clickable.setSmall(true); + + ArmorStand weapon = spawnEntity(origin.clone().add(-0.2, 0, 0.4), this, WeaponVisualStatue.VisualType.NONE); + weapon.setArms(true); + weapon.setItemInHand(this.createItemStack().clone()); + weapon.setRightArmPose(new EulerAngle(AngleUtil.getRadianFromDegree(180), 0, AngleUtil.getRadianFromDegree(20))); + weapon.setMarker(true); + +// Location hookLoc = origin.clone().add(0.045, 1.02, -0.68); +// hookLoc.setPitch(0); +// hookLoc.setYaw(0); +// ArmorStand hook = spawnEntity(hookLoc, this, WeaponVisualStatue.VisualType.NONE); +// hook.setHelmet(new ItemStack(Material.TRIPWIRE_HOOK)); +// hook.setHeadPose(new EulerAngle(AngleUtil.getRadianFromDegree(45), 0, 0)); +// hook.setSmall(true); +// hook.setMarker(true); + + return origin; + } + + @Override + public Location getOrigin(World world) { + return new Location(world, -371.5, 25.5, 244.5, 90.0f, 0.0f); + } + + @Override + public void extras(ArmorStand entity) { + entity.setMetadata("statue_Y", new FixedMetadataValue(GTM.getInstance(), 2.5)); + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/assault/AssaultRifle.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/assault/AssaultRifle.java new file mode 100644 index 0000000..bb2ba11 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/assault/AssaultRifle.java @@ -0,0 +1,114 @@ +package net.grandtheftmc.gtm.weapon.ranged.assault; + +import org.bukkit.Effect; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.World; +import org.bukkit.entity.ArmorStand; +import org.bukkit.metadata.FixedMetadataValue; +import org.bukkit.util.EulerAngle; + +import net.grandtheftmc.core.util.AngleUtil; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.weapon.WeaponVisualStatue; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.ranged.attachment.Attachment; +import net.grandtheftmc.guns.weapon.ranged.guns.AssultRifleWeapon; + +/** + * Created by Luke Bingham on 17/07/2017. + */ +public class AssaultRifle extends AssultRifleWeapon implements WeaponVisualStatue { + /** + * Construct a new RangedWeapon. + */ + public AssaultRifle() { + super( + (short) 21, + "Assault Rifle", //Name + WeaponType.ASSAULT, //Weapon Type + AmmoType.ASSAULT_RIFLE, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 201).build(), //ItemStack + new Sound[] { //Gun Sounds + Sound.ENTITY_ITEM_BREAK, + Sound.ITEM_ARMOR_EQUIP_IRON, + Sound.ITEM_ARMOR_EQUIP_IRON, + Sound.ENTITY_SKELETON_AMBIENT, + }, + Effect.VOID_FOG //Particles + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.STONE_SWORD).setName(getName()).build()); + setDescription("Great stock weapon for", "medium range gunfights."); + + setSupportedAttachments(Attachment.SUPPRESSOR, Attachment.EXTENDED_MAGS, Attachment.GRIP, Attachment.SCOPE); + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), "&6&lPurple") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.walkSpeed = 0.18; //Weapon + + this.damage = 2.75; //RangedWeapon + this.meleeDamage = 5.0; //RangedWeapon + this.accuracy = 0.025; //RangedWeapon + this.magSize = 30; //RangedWeapon + this.reloadTime = 40; //RangedWeapon + this.range = 45; //RangedWeapon + this.recoil = 0.15; //RangedWeapon + this.zoom = 2; //RangedWeapon + this.rps = 6; + this.rpm = 380; //AssultRifleWeapon + this.multiShoot = true; + } + + @Override + public Location spawnVisual(World world) { + Location origin = this.getOrigin(world); + ArmorStand clickable = spawnEntity(origin.clone().add(0, 1.5, 0), this, WeaponVisualStatue.VisualType.NAME); + clickable.setSmall(true); + + ArmorStand weapon = spawnEntity(origin.clone().add(-0.2, -0.16, 0.325), this, WeaponVisualStatue.VisualType.NONE); + weapon.setArms(true); + weapon.setItemInHand(this.createItemStack().clone()); + weapon.setRightArmPose(new EulerAngle(AngleUtil.getRadianFromDegree(180), 0, AngleUtil.getRadianFromDegree(20))); + weapon.setMarker(true); + +// Location hookLoc = origin.clone().add(0.045, 1.02, -0.68); +// hookLoc.setPitch(0); +// hookLoc.setYaw(0); +// ArmorStand hook = spawnEntity(hookLoc, this, WeaponVisualStatue.VisualType.NONE); +// hook.setHelmet(new ItemStack(Material.TRIPWIRE_HOOK)); +// hook.setHeadPose(new EulerAngle(AngleUtil.getRadianFromDegree(45), 0, 0)); +// hook.setSmall(true); +// hook.setMarker(true); + + return origin; + } + + @Override + public Location getOrigin(World world) { + return new Location(world, -368.5, 25.5, 244.5, 90.0f, 0.0f); + } + + @Override + public void extras(ArmorStand entity) { + entity.setMetadata("statue_Y", new FixedMetadataValue(GTM.getInstance(), 2.5)); + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/assault/BullpupRifle.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/assault/BullpupRifle.java new file mode 100644 index 0000000..d2082bf --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/assault/BullpupRifle.java @@ -0,0 +1,114 @@ +package net.grandtheftmc.gtm.weapon.ranged.assault; + +import org.bukkit.Effect; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.World; +import org.bukkit.entity.ArmorStand; +import org.bukkit.metadata.FixedMetadataValue; +import org.bukkit.util.EulerAngle; + +import net.grandtheftmc.core.util.AngleUtil; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.weapon.WeaponVisualStatue; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.ranged.attachment.Attachment; +import net.grandtheftmc.guns.weapon.ranged.guns.AssultRifleWeapon; + +/** + * Created by Luke Bingham on 17/07/2017. + */ +public class BullpupRifle extends AssultRifleWeapon implements WeaponVisualStatue { + /** + * Construct a new RangedWeapon. + */ + public BullpupRifle() { + super( + (short) 23, + "Bullpup Rifle", //Name + WeaponType.ASSAULT, //Weapon Type + AmmoType.ASSAULT_RIFLE, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 221).build(), //ItemStack + new Sound[] { //Gun Sounds + Sound.ENTITY_ITEM_BREAK, + Sound.ITEM_ARMOR_EQUIP_IRON, + Sound.ITEM_ARMOR_EQUIP_IRON, + Sound.ENTITY_SKELETON_AMBIENT, + }, + Effect.VOID_FOG //Particles + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.STONE_PICKAXE).setName(getName()).build()); + setDescription("It's a bit like the", "normal AR, but Chinese..", "很好!"); + + setSupportedAttachments(Attachment.SUPPRESSOR, Attachment.EXTENDED_MAGS, Attachment.GRIP, Attachment.SCOPE); + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), "&6&lPurple") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.walkSpeed = 0.18; //Weapon + + this.damage = 3.0; //RangedWeapon + this.meleeDamage = 5.0; //RangedWeapon + this.accuracy = 0.02; //RangedWeapon + this.magSize = 30; //RangedWeapon + this.reloadTime = 40; //RangedWeapon + this.range = 45; //RangedWeapon + this.recoil = 0.3; //RangedWeapon + this.zoom = 2; //RangedWeapon + this.rps = 9; + this.rpm = 500; //AssultRifleWeapon + this.multiShoot = true; + } + + @Override + public Location spawnVisual(World world) { + Location origin = this.getOrigin(world); + ArmorStand clickable = spawnEntity(origin.clone().add(0, 1.5, 0), this, WeaponVisualStatue.VisualType.NAME); + clickable.setSmall(true); + + ArmorStand weapon = spawnEntity(origin.clone().add(-0.2, -0.08, 0.4), this, WeaponVisualStatue.VisualType.NONE); + weapon.setArms(true); + weapon.setItemInHand(this.createItemStack().clone()); + weapon.setRightArmPose(new EulerAngle(AngleUtil.getRadianFromDegree(180), 0, AngleUtil.getRadianFromDegree(20))); + weapon.setMarker(true); + +// Location hookLoc = origin.clone().add(0.045, 1.02, -0.68); +// hookLoc.setPitch(0); +// hookLoc.setYaw(0); +// ArmorStand hook = spawnEntity(hookLoc, this, WeaponVisualStatue.VisualType.NONE); +// hook.setHelmet(new ItemStack(Material.TRIPWIRE_HOOK)); +// hook.setHeadPose(new EulerAngle(AngleUtil.getRadianFromDegree(45), 0, 0)); +// hook.setSmall(true); +// hook.setMarker(true); + + return origin; + } + + @Override + public Location getOrigin(World world) { + return new Location(world, -370.5, 25.5, 244.5, 90.0f, 0.0f); + } + + @Override + public void extras(ArmorStand entity) { + entity.setMetadata("statue_Y", new FixedMetadataValue(GTM.getInstance(), 2.5)); + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/assault/CarbineRifle.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/assault/CarbineRifle.java new file mode 100644 index 0000000..d976ac9 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/assault/CarbineRifle.java @@ -0,0 +1,114 @@ +package net.grandtheftmc.gtm.weapon.ranged.assault; + +import org.bukkit.Effect; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.World; +import org.bukkit.entity.ArmorStand; +import org.bukkit.metadata.FixedMetadataValue; +import org.bukkit.util.EulerAngle; + +import net.grandtheftmc.core.util.AngleUtil; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.weapon.WeaponVisualStatue; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.ranged.attachment.Attachment; +import net.grandtheftmc.guns.weapon.ranged.guns.AssultRifleWeapon; + +/** + * Created by Luke Bingham on 17/07/2017. + */ +public class CarbineRifle extends AssultRifleWeapon implements WeaponVisualStatue { + /** + * Construct a new RangedWeapon. + */ + public CarbineRifle() { + super( + (short) 22, + "Carbine Rifle", //Name + WeaponType.ASSAULT, //Weapon Type + AmmoType.ASSAULT_RIFLE, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 211).build(), //ItemStack + new Sound[] { //Gun Sounds + Sound.ENTITY_ITEM_BREAK, + Sound.ITEM_ARMOR_EQUIP_IRON, + Sound.ITEM_ARMOR_EQUIP_IRON, + Sound.ENTITY_SKELETON_AMBIENT, + }, + Effect.VOID_FOG //Particles + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.STONE_SPADE).setName(getName()).build()); + setDescription("A longer range version", "of your stock AR."); + + setSupportedAttachments(Attachment.SUPPRESSOR, Attachment.EXTENDED_MAGS, Attachment.GRIP, Attachment.SCOPE); + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), "&6&lPurple") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.walkSpeed = 0.18; //Weapon + + this.damage = 3; //RangedWeapon + this.meleeDamage = 5.0; //RangedWeapon + this.accuracy = 0.005; //RangedWeapon + this.magSize = 30; //RangedWeapon + this.reloadTime = 40; //RangedWeapon + this.range = 45; //RangedWeapon + this.recoil = 0.1; //RangedWeapon + this.zoom = 2; //RangedWeapon + this.rps = 7; + this.rpm = 445; //AssultRifleWeapon + this.multiShoot = true; + } + + @Override + public Location spawnVisual(World world) { + Location origin = this.getOrigin(world); + ArmorStand clickable = spawnEntity(origin.clone().add(0, 1.5, 0), this, WeaponVisualStatue.VisualType.NAME); + clickable.setSmall(true); + + ArmorStand weapon = spawnEntity(origin.clone().add(-0.2, -0.1, 0.35), this, WeaponVisualStatue.VisualType.NONE); + weapon.setArms(true); + weapon.setItemInHand(this.createItemStack().clone()); + weapon.setRightArmPose(new EulerAngle(AngleUtil.getRadianFromDegree(180), 0, AngleUtil.getRadianFromDegree(20))); + weapon.setMarker(true); + +// Location hookLoc = origin.clone().add(0.045, 1.02, -0.68); +// hookLoc.setPitch(0); +// hookLoc.setYaw(0); +// ArmorStand hook = spawnEntity(hookLoc, this, WeaponVisualStatue.VisualType.NONE); +// hook.setHelmet(new ItemStack(Material.TRIPWIRE_HOOK)); +// hook.setHeadPose(new EulerAngle(AngleUtil.getRadianFromDegree(45), 0, 0)); +// hook.setSmall(true); +// hook.setMarker(true); + + return origin; + } + + @Override + public Location getOrigin(World world) { + return new Location(world, -369.5, 25.5, 244.5, 90.0f, 0.0f); + } + + @Override + public void extras(ArmorStand entity) { + entity.setMetadata("statue_Y", new FixedMetadataValue(GTM.getInstance(), 2.5)); + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/assault/SpecialCarbine.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/assault/SpecialCarbine.java new file mode 100644 index 0000000..7fe7315 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/assault/SpecialCarbine.java @@ -0,0 +1,121 @@ +package net.grandtheftmc.gtm.weapon.ranged.assault; + +import org.bukkit.Effect; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.World; +import org.bukkit.entity.ArmorStand; +import org.bukkit.metadata.FixedMetadataValue; +import org.bukkit.util.EulerAngle; + +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.util.AngleUtil; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.weapon.WeaponVisualStatue; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.attribute.RankedWeapon; +import net.grandtheftmc.guns.weapon.ranged.attachment.Attachment; +import net.grandtheftmc.guns.weapon.ranged.guns.AssultRifleWeapon; + +/** + * Created by Luke Bingham on 17/07/2017. + */ +public class SpecialCarbine extends AssultRifleWeapon implements RankedWeapon, WeaponVisualStatue { + /** + * Construct a new RangedWeapon. + */ + public SpecialCarbine() { + super( + (short) 25, + "Special Carbine", //Name + WeaponType.ASSAULT, //Weapon Type + AmmoType.ASSAULT_RIFLE, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 241).build(), //ItemStack + new Sound[] { //Gun Sounds + Sound.ENTITY_ITEM_BREAK, + Sound.ITEM_ARMOR_EQUIP_IRON, + Sound.ITEM_ARMOR_EQUIP_IRON, + Sound.ENTITY_SKELETON_AMBIENT, + }, + Effect.VOID_FOG //Particles + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.STONE_HOE).setName(getName()).build()); + setDescription("Super solid gun choice;", "very versatile."); + + setSupportedAttachments(Attachment.SUPPRESSOR, Attachment.EXTENDED_MAGS, Attachment.GRIP, Attachment.SCOPE); + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), "&6&lPurple") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.walkSpeed = 0.18; //Weapon + + this.damage = 4; //RangedWeapon + this.meleeDamage = 5.0; //RangedWeapon + this.accuracy = 0.005; //RangedWeapon + this.magSize = 30; //RangedWeapon + this.reloadTime = 30; //RangedWeapon + this.range = 35; //RangedWeapon + this.recoil = 0.05; //RangedWeapon + this.zoom = 3; //RangedWeapon + this.rps = 7; + this.rpm = 445; //AssultRifleWeapon + this.multiShoot = true; + } + + @Override + public UserRank requiredRank() { + return UserRank.ELITE; + } + + @Override + public Location spawnVisual(World world) { + Location origin = this.getOrigin(world); + ArmorStand clickable = spawnEntity(origin.clone().add(0, 1.5, 0), this, WeaponVisualStatue.VisualType.NAME); + clickable.setSmall(true); + + ArmorStand weapon = spawnEntity(origin.clone().add(-0.2, -0.18, 0.4), this, WeaponVisualStatue.VisualType.NONE); + weapon.setArms(true); + weapon.setItemInHand(this.createItemStack().clone()); + weapon.setRightArmPose(new EulerAngle(AngleUtil.getRadianFromDegree(180), 0, AngleUtil.getRadianFromDegree(20))); + weapon.setMarker(true); + +// Location hookLoc = origin.clone().add(0.045, 1.02, -0.68); +// hookLoc.setPitch(0); +// hookLoc.setYaw(0); +// ArmorStand hook = spawnEntity(hookLoc, this, WeaponVisualStatue.VisualType.NONE); +// hook.setHelmet(new ItemStack(Material.TRIPWIRE_HOOK)); +// hook.setHeadPose(new EulerAngle(AngleUtil.getRadianFromDegree(45), 0, 0)); +// hook.setSmall(true); +// hook.setMarker(true); + + return origin; + } + + @Override + public Location getOrigin(World world) { + return new Location(world, -372.5, 25.5, 244.5, 90.0f, 0.0f); + } + + @Override + public void extras(ArmorStand entity) { + entity.setMetadata("statue_Y", new FixedMetadataValue(GTM.getInstance(), 2.5)); + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/launcher/GrenadeLauncher.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/launcher/GrenadeLauncher.java new file mode 100644 index 0000000..37b5f54 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/launcher/GrenadeLauncher.java @@ -0,0 +1,84 @@ +package net.grandtheftmc.gtm.weapon.ranged.launcher; + +import org.bukkit.Effect; +import org.bukkit.Material; +import org.bukkit.Sound; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.attribute.RankedWeapon; +import net.grandtheftmc.guns.weapon.ranged.attachment.Attachment; +import net.grandtheftmc.guns.weapon.ranged.guns.LauncherWeapon; + +/** + * Created by Luke Bingham on 17/07/2017. + */ +public class GrenadeLauncher extends LauncherWeapon implements RankedWeapon { + + /** + * Construct a new RangedWeapon. + */ + public GrenadeLauncher() { + super( + (short) 31, + "Grenade Launcher", //Name + WeaponType.LAUNCHER, //Weapon Type + AmmoType.GRENADE, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 301).build(), //ItemStack + new Sound[] { //Gun Sounds + Sound.ENTITY_CHICKEN_EGG, + Sound.ITEM_ARMOR_EQUIP_DIAMOND, + Sound.ITEM_ARMOR_EQUIP_DIAMOND, + Sound.BLOCK_PISTON_CONTRACT, + }, + Effect.FIREWORKS_SPARK //Particles + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.SHEARS).setName(getName()).build()); + setDescription("For if your throwing", "game is weak " + (Core.getSettings().isSister() ? "." : "AF.")); + + setSupportedAttachments(Attachment.GRIP); + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), "&6&lPurple") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.walkSpeed = 0.12; //Weapon + this.delay = 40; + + this.damage = 12; //RangedWeapon + this.meleeDamage = 3.0; //RangedWeapon + this.accuracy = 0.02; //RangedWeapon + this.magSize = 6; //RangedWeapon + this.reloadTime = 50; //RangedWeapon + this.range = 50; //RangedWeapon + this.recoil = 0.5; //RangedWeapon + this.zoom = 1; //RangedWeapon + + this.blowOnHit = false; //LauncherWeapon + this.blowDelay = 5; + this.explosionSize = 5; + this.scaledDamage = true; + } + + @Override + public UserRank requiredRank() { + return UserRank.SPONSOR; + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/launcher/HomingLauncher.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/launcher/HomingLauncher.java new file mode 100644 index 0000000..6a0ad3d --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/launcher/HomingLauncher.java @@ -0,0 +1,129 @@ +package net.grandtheftmc.gtm.weapon.ranged.launcher; + +import org.bukkit.Effect; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.World; +import org.bukkit.entity.ArmorStand; +import org.bukkit.inventory.ItemStack; +import org.bukkit.metadata.FixedMetadataValue; +import org.bukkit.util.EulerAngle; + +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.util.AngleUtil; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.weapon.WeaponVisualStatue; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.attribute.RankedWeapon; +import net.grandtheftmc.guns.weapon.ranged.attachment.Attachment; +import net.grandtheftmc.guns.weapon.ranged.guns.LauncherWeapon; + +/** + * Created by Luke Bingham on 17/07/2017. + */ +public class HomingLauncher extends LauncherWeapon implements RankedWeapon, WeaponVisualStatue { + + /** + * Construct a new RangedWeapon. + */ + public HomingLauncher() { + super( + (short) 32, + "Homing Launcher", //Name + WeaponType.LAUNCHER, //Weapon Type + AmmoType.ROCKET, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 311).build(), //ItemStack + new Sound[] { //Gun Sounds + Sound.ENTITY_FIREWORK_LAUNCH, + Sound.ITEM_ARMOR_EQUIP_DIAMOND, + Sound.ITEM_ARMOR_EQUIP_DIAMOND, + Sound.BLOCK_PISTON_CONTRACT, + }, + Effect.FIREWORKS_SPARK //Particles + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.SULPHUR).setName(getName()).build()); + setDescription("Imagine a homing pidgeon.", "But it explodes."); + + setSupportedAttachments(Attachment.GRIP); + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), "&6&lPurple") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.walkSpeed = 0.12; //Weapon + this.delay = 60; + + this.damage = 16; //RangedWeapon + this.meleeDamage = 4.0; //RangedWeapon + this.accuracy = 0.003; //RangedWeapon + this.magSize = 1; //RangedWeapon + this.reloadTime = 80; //RangedWeapon + this.range = 100; //RangedWeapon + this.recoil = 1.0; //RangedWeapon + this.zoom = 1; //RangedWeapon + + this.homingLauncher = true; //LauncherWeapon + this.rocketSpeed = 1.0; //LauncherWeapon + this.explosionSize = 2.5; //LauncherWeapon + this.explosionStrength = 1.7; //LauncherWeapon + } + + @Override + public UserRank requiredRank() { + return UserRank.SUPREME; + } + + @Override + public Location spawnVisual(World world) { + Location origin = this.getOrigin(world); + + ArmorStand clickable = spawnEntity(origin.clone().add(0.2, 0.5, 0), this, WeaponVisualStatue.VisualType.NAME); +// clickable.setVisible(true); + + ArmorStand clickable2 = spawnEntity(origin.clone().add(-0.6, 0.5, 0), this, WeaponVisualStatue.VisualType.NAME); +// clickable2.setVisible(true); + + Location weaponLoc = origin.clone().add(0.3, 0.02, 0.4); + weaponLoc.setYaw(90.0f); + ArmorStand weapon = spawnEntity(weaponLoc, this, WeaponVisualStatue.VisualType.NONE); + weapon.setArms(true); + weapon.setItemInHand(this.createItemStack().clone()); + weapon.setRightArmPose(new EulerAngle(AngleUtil.getRadianFromDegree(255), 0f, 0f)); + weapon.setMarker(true); + + ArmorStand support = spawnEntity(origin.clone().add(-0.92, -0.4, 0.25), this, WeaponVisualStatue.VisualType.NONE); + support.setHelmet(new ItemStack(Material.END_ROD)); + support.setHeadPose(new EulerAngle(AngleUtil.getRadianFromDegree(300), 0f, 0f)); + support.setMarker(true); + + return origin; + } + + @Override + public Location getOrigin(World world) { + return new Location(world, -367.5, 25.5, 241.5, 0.0f, 0.0f); + } + + @Override + public void extras(ArmorStand entity) { + entity.setMetadata("statue_Y", new FixedMetadataValue(GTM.getInstance(), 2.25)); + entity.setMetadata("statue_X", new FixedMetadataValue(GTM.getInstance(), -0.2d)); + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/launcher/NetLauncher.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/launcher/NetLauncher.java new file mode 100644 index 0000000..5cabf75 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/launcher/NetLauncher.java @@ -0,0 +1,132 @@ +package net.grandtheftmc.gtm.weapon.ranged.launcher; + +import org.bukkit.Effect; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.gtm.users.GTMUser; +import net.grandtheftmc.gtm.users.GTMUserManager; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.ranged.attachment.Attachment; +import net.grandtheftmc.guns.weapon.ranged.guns.LauncherWeapon; + +/** + * Created by Luke Bingham on 03/08/2017. + */ +public class NetLauncher extends LauncherWeapon { + + /** + * Construct a new RangedWeapon. + */ + public NetLauncher() { + super( + (short) 39, + "Net Launcher", //Name + WeaponType.NETGUN, //TODO Weapon Type + AmmoType.ROCKET, //TODO AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 381).build(), //ItemStack + new Sound[] { //Gun Sounds + Sound.ENTITY_SHULKER_SHOOT, + Sound.ITEM_ARMOR_EQUIP_DIAMOND, + Sound.ITEM_ARMOR_EQUIP_DIAMOND, + Sound.BLOCK_PISTON_CONTRACT, + }, + Effect.BLAZE_SHOOT //Particles + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.SAPLING).setName(getName()).build()); + setDescription("It's like discount,", (Core.getSettings().isSister() ? "weak" : "shitty") + " spiderman."); + + setSupportedAttachments(Attachment.GRIP); + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), "&6&lPurple") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.walkSpeed = 0.12; //Weapon + this.delay = 50; + + this.damage = 1.5; //RangedWeapon + this.meleeDamage = 1.0; //RangedWeapon + this.accuracy = 0.005; //RangedWeapon + this.magSize = 4; //RangedWeapon + this.reloadTime = 80; //RangedWeapon + this.range = 35; //RangedWeapon + this.recoil = 1.0; //RangedWeapon + this.zoom = 1; //RangedWeapon + + this.baseNetgunStun = 20; + + //this.netgun = true; //Launcher weapon todo: disabled because it was updating the actual class, now it just uses getName().equalsignorecase("net launcher") + } + + /** + * Called when the netgun hits an entity. + * + * @param location - the location of the hit + * @param shooter - the shooter of the netgun + * @param target - the target being shot, if one is specified + */ + @Override + public void onNetgunHit(Location location, Player shooter, LivingEntity target) { + + // call super method + super.onNetgunHit(location, shooter, target); + + // if target is valid + if (target != null && !target.isDead()){ + if (target instanceof Player){ + + // grab player + Player targetPlayer = (Player) target; + GTMUser gtmUser = GTMUserManager.getInstance().getUser(targetPlayer.getUniqueId()).orElse(null); + if (gtmUser != null){ + + // disable jetpack for length of stun + int disableTicks = (int) (baseNetgunStun * 2.0); + // convert from ticks to milliseconds + gtmUser.setEnableJetpackTime(System.currentTimeMillis() + (disableTicks * 50)); + + // disable fly + targetPlayer.setFlying(false); + } + } + } + } +} + + + + + + + + + + + + + + + + + diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/launcher/RPG.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/launcher/RPG.java new file mode 100644 index 0000000..ec0ee16 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/launcher/RPG.java @@ -0,0 +1,90 @@ +package net.grandtheftmc.gtm.weapon.ranged.launcher; + +import org.bukkit.Effect; +import org.bukkit.Material; +import org.bukkit.Sound; + +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.ranged.attachment.Attachment; +import net.grandtheftmc.guns.weapon.ranged.guns.LauncherWeapon; + +/** + * Created by Luke Bingham on 17/07/2017. + */ +public class RPG extends LauncherWeapon { + + /** + * Construct a new RangedWeapon. + */ + public RPG() { + super( + (short) 30, + "RPG", //Name + WeaponType.LAUNCHER, //Weapon Type + AmmoType.ROCKET, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 291).build(), //ItemStack + new Sound[] { //Gun Sounds + Sound.ENTITY_FIREWORK_LAUNCH, + Sound.ITEM_ARMOR_EQUIP_DIAMOND, + Sound.ITEM_ARMOR_EQUIP_DIAMOND, + Sound.BLOCK_PISTON_CONTRACT, + }, + Effect.FIREWORKS_SPARK //Particles + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.FEATHER).setName(getName()).build()); + setDescription("Want to take out", "the side of a building?", "Use this."); + + setSupportedAttachments(Attachment.GRIP); + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), "&6&lPurple") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.walkSpeed = 0.12; //Weapon + this.delay = 80; + + this.damage = 16; //RangedWeapon + this.meleeDamage = 4.0; //RangedWeapon + this.accuracy = 0.005; //RangedWeapon + this.magSize = 1; //RangedWeapon + this.reloadTime = 80; //RangedWeapon + this.range = 60; //RangedWeapon + this.recoil = 1.0; //RangedWeapon + this.zoom = 1; //RangedWeapon + + this.rocketSpeed = 2.0; //LauncherWeapon + this.explosionSize = 6.0; //LauncherWeapon + this.explosionStrength = 1.7; //LauncherWeapon + this.scaledDamage = true; + } +} + + + + + + + + + + + + + + diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/lmg/CombatMG.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/lmg/CombatMG.java new file mode 100644 index 0000000..d56acee --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/lmg/CombatMG.java @@ -0,0 +1,81 @@ +package net.grandtheftmc.gtm.weapon.ranged.lmg; + +import org.bukkit.Effect; +import org.bukkit.Material; +import org.bukkit.Sound; + +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.attribute.RankedWeapon; +import net.grandtheftmc.guns.weapon.ranged.attachment.Attachment; +import net.grandtheftmc.guns.weapon.ranged.guns.LMGWeapon; + +/** + * Created by Luke Bingham on 17/07/2017. + */ +public class CombatMG extends LMGWeapon implements RankedWeapon { + + /** + * Construct a new RangedWeapon. + */ + public CombatMG() { + super( + (short) 27, + "Combat MG", //Name + WeaponType.LMG, //Weapon Type + AmmoType.LMG, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 261).build(), //ItemStack + new Sound[] { //Gun Sounds + Sound.BLOCK_NOTE_SNARE, + Sound.ITEM_ARMOR_EQUIP_DIAMOND, + Sound.ITEM_ARMOR_EQUIP_DIAMOND, + Sound.ENTITY_SKELETON_STEP, + }, + Effect.VOID_FOG //Particles + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.DIAMOND_SPADE).setName(getName()).build()); + setDescription("Cover me,", "I'm going in! (Military style)"); + + setSupportedAttachments(Attachment.SUPPRESSOR, Attachment.EXTENDED_MAGS, Attachment.GRIP, Attachment.SCOPE); + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), "&6&lPurple") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.walkSpeed = 0.14; //Weapon + //this.delay = 5; + + this.damage = 3.0; //RangedWeapon + this.meleeDamage = 6.0; //RangedWeapon + this.accuracy = 0.035; //RangedWeapon + this.magSize = 75; //RangedWeapon + this.reloadTime = 80; //RangedWeapon + this.range = 60; //RangedWeapon + this.recoil = 0.05; //RangedWeapon + this.zoom = 5; //RangedWeapon + this.rps = 9; + this.rpm = 550; //LMGWeapon + this.multiShoot = true; + } + + @Override + public UserRank requiredRank() { + return UserRank.SPONSOR; + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/lmg/MG.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/lmg/MG.java new file mode 100644 index 0000000..8a7a30b --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/lmg/MG.java @@ -0,0 +1,74 @@ +package net.grandtheftmc.gtm.weapon.ranged.lmg; + +import org.bukkit.Effect; +import org.bukkit.Material; +import org.bukkit.Sound; + +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.ranged.attachment.Attachment; +import net.grandtheftmc.guns.weapon.ranged.guns.LMGWeapon; + +/** + * Created by Luke Bingham on 17/07/2017. + */ +public class MG extends LMGWeapon { + + /** + * Construct a new RangedWeapon. + */ + public MG() { + super( + (short) 26, + "MG", //Name + WeaponType.LMG, //Weapon Type + AmmoType.LMG, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 251).build(), //ItemStack + new Sound[] { //Gun Sounds + Sound.BLOCK_NOTE_SNARE, + Sound.ITEM_ARMOR_EQUIP_DIAMOND, + Sound.ITEM_ARMOR_EQUIP_DIAMOND, + Sound.ENTITY_SKELETON_STEP, + }, + Effect.VOID_FOG //Particles + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.DIAMOND_SWORD).setName(getName()).build()); + setDescription("Cover me,", "I'm going in!"); + + setSupportedAttachments(Attachment.SUPPRESSOR, Attachment.EXTENDED_MAGS, Attachment.GRIP, Attachment.SCOPE); + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), "&6&lPurple") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.walkSpeed = 0.14; //Weapon + //this.delay = 5; + + this.damage = 2.5; //RangedWeapon + this.meleeDamage = 6.0; //RangedWeapon + this.accuracy = 0.055; //RangedWeapon + this.magSize = 55; //RangedWeapon + this.reloadTime = 50; //RangedWeapon + this.range = 60; //RangedWeapon + this.recoil = 0.1; //RangedWeapon + this.zoom = 3; //RangedWeapon + this.rpm = 760; //LMGWeapon + this.rps = 7; + this.multiShoot = true; + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/pistol/CombatPistol.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/pistol/CombatPistol.java new file mode 100644 index 0000000..a9bddb1 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/pistol/CombatPistol.java @@ -0,0 +1,100 @@ +package net.grandtheftmc.gtm.weapon.ranged.pistol; + +import net.grandtheftmc.core.util.AngleUtil; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.weapon.WeaponVisualStatue; +import org.bukkit.*; + +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.ranged.attachment.Attachment; +import net.grandtheftmc.guns.weapon.ranged.guns.PistolWeapon; +import org.bukkit.entity.ArmorStand; +import org.bukkit.inventory.ItemStack; +import org.bukkit.metadata.FixedMetadataValue; +import org.bukkit.util.EulerAngle; + +/** + * Created by Luke Bingham on 17/07/2017. + */ +public class CombatPistol extends PistolWeapon implements WeaponVisualStatue { + + /** + * Construct a new RangedWeapon. + */ + public CombatPistol() { + super( + (short) 8, + "Combat Pistol", //Name + WeaponType.PISTOL, //Weapon Type + AmmoType.PISTOL, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 71).build(), //ItemStack + new Sound[] { //Gun Sounds + Sound.ENTITY_FIREWORK_BLAST, + Sound.ITEM_ARMOR_EQUIP_LEATHER, + Sound.ITEM_ARMOR_EQUIP_LEATHER, + Sound.BLOCK_NOTE_HAT, + }, + Effect.CRIT //Particles + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.WOOD_PICKAXE).setName(getName()).build()); + setDescription("Standard Military grade", "Pistol, Don't bring it", "to a proper gunfight."); + + setSupportedAttachments(Attachment.SUPPRESSOR, Attachment.EXTENDED_MAGS, Attachment.GRIP, Attachment.SCOPE); + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), "&6&lPurple") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.walkSpeed = 0.2; //Weapon + this.delay = 5; //Weapon + + this.damage = 4; //RangedWeapon + this.meleeDamage = 3.0; //RangedWeapon + this.accuracy = 0.015; //RangedWeapon + this.magSize = 12; //RangedWeapon + this.reloadTime = 30; //RangedWeapon + this.range = 30; //RangedWeapon + this.zoom = 4; //RangedWeapon + } + + @Override + public Location spawnVisual(World world) { + Location origin = getOrigin(world); + ArmorStand glass = spawnEntity(origin.clone(), this, WeaponVisualStatue.VisualType.NAME); + glass.setHelmet(new ItemStack(Material.GLASS)); + + ArmorStand weapon = spawnEntity(origin.clone().add(-0.12, 0.2, -1.05), this, WeaponVisualStatue.VisualType.NONE); + weapon.setArms(true); + weapon.setItemInHand(this.createItemStack().clone()); + weapon.setRightArmPose(new EulerAngle(0, AngleUtil.getRadianFromDegree(25), AngleUtil.getRadianFromDegree(90))); + weapon.setMarker(true); + + return origin; + } + + @Override + public Location getOrigin(World world) { + return new Location(world, -359.5, 25.5, 233.5, -90.0f, 0.0f); + } + + @Override + public void extras(ArmorStand entity) { + entity.setMetadata("statue_Y", new FixedMetadataValue(GTM.getInstance(), 2.25)); + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/pistol/HeavyPistol.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/pistol/HeavyPistol.java new file mode 100644 index 0000000..5a30949 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/pistol/HeavyPistol.java @@ -0,0 +1,101 @@ +package net.grandtheftmc.gtm.weapon.ranged.pistol; + +import net.grandtheftmc.core.util.AngleUtil; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.weapon.WeaponVisualStatue; +import org.bukkit.*; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.ranged.attachment.Attachment; +import net.grandtheftmc.guns.weapon.ranged.guns.PistolWeapon; +import org.bukkit.entity.ArmorStand; +import org.bukkit.inventory.ItemStack; +import org.bukkit.metadata.FixedMetadataValue; +import org.bukkit.util.EulerAngle; + +/** + * Created by Luke Bingham on 17/07/2017. + */ +public class HeavyPistol extends PistolWeapon implements WeaponVisualStatue { + + /** + * Construct a new RangedWeapon. + */ + public HeavyPistol() { + super( + (short) 9, + "Heavy Pistol", //Name + WeaponType.PISTOL, //Weapon Type + AmmoType.PISTOL, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 81).build(), //ItemStack + new Sound[] { //Gun Sounds + Sound.ENTITY_FIREWORK_BLAST, + Sound.ITEM_ARMOR_EQUIP_LEATHER, + Sound.ITEM_ARMOR_EQUIP_LEATHER, + Sound.BLOCK_NOTE_HAT, + }, + Effect.CRIT //Particles + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.WOOD_AXE).setName(getName()).build()); + setDescription("Like the" + (Core.getSettings().isSister() ? "" : " bitch") + " basic", "pistol, but bigger.", "And badder."); + + setSupportedAttachments(Attachment.SUPPRESSOR, Attachment.EXTENDED_MAGS, Attachment.GRIP, Attachment.SCOPE); + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), "&6&lPurple") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.walkSpeed = 0.2; //Weapon + this.delay = 6; //Weapon + + this.damage = 5.5; //RangedWeapon + this.meleeDamage = 5.0; //RangedWeapon + this.accuracy = 0.01; //RangedWeapon + this.magSize = 18; //RangedWeapon + this.reloadTime = 40; //RangedWeapon + this.range = 35; //RangedWeapon + this.zoom = 4; //RangedWeapon + } + + @Override + public Location spawnVisual(World world) { + Location origin = getOrigin(world); + ArmorStand glass = spawnEntity(origin.clone(), this, WeaponVisualStatue.VisualType.NAME); + glass.setHelmet(new ItemStack(Material.GLASS)); + + ArmorStand weapon = spawnEntity(origin.clone().add(-0.12, 0.2, -1.05), this, WeaponVisualStatue.VisualType.NONE); + weapon.setArms(true); + weapon.setItemInHand(this.createItemStack().clone()); + weapon.setRightArmPose(new EulerAngle(0, AngleUtil.getRadianFromDegree(25), AngleUtil.getRadianFromDegree(90))); + weapon.setMarker(true); + + return origin; + } + + @Override + public Location getOrigin(World world) { + return new Location(world, -359.5, 25.5, 234.5, -90.0f, 0.0f); + } + + @Override + public void extras(ArmorStand entity) { + entity.setMetadata("statue_Y", new FixedMetadataValue(GTM.getInstance(), 2.25)); + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/pistol/MarksmanPistol.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/pistol/MarksmanPistol.java new file mode 100644 index 0000000..d06aa74 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/pistol/MarksmanPistol.java @@ -0,0 +1,105 @@ +package net.grandtheftmc.gtm.weapon.ranged.pistol; + +import net.grandtheftmc.core.util.AngleUtil; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.weapon.WeaponVisualStatue; +import org.bukkit.*; + +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.attribute.RankedWeapon; +import net.grandtheftmc.guns.weapon.ranged.guns.PistolWeapon; +import org.bukkit.entity.ArmorStand; +import org.bukkit.inventory.ItemStack; +import org.bukkit.metadata.FixedMetadataValue; +import org.bukkit.util.EulerAngle; + +/** + * Created by Luke Bingham on 17/07/2017. + */ +public class MarksmanPistol extends PistolWeapon implements RankedWeapon, WeaponVisualStatue { + + /** + * Construct a new RangedWeapon. + */ + public MarksmanPistol() { + super( + (short) 10, + "Marksman Pistol", //Name + WeaponType.PISTOL, //Weapon Type + AmmoType.PISTOL, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 91).build(), //ItemStack + new Sound[] { //Gun Sounds + Sound.ENTITY_FIREWORK_BLAST, + Sound.ITEM_ARMOR_EQUIP_LEATHER, + Sound.ITEM_ARMOR_EQUIP_LEATHER, + Sound.BLOCK_NOTE_HAT, + }, + Effect.CRIT //Particles + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.WOOD_HOE).setName(getName()).build()); + setDescription("For when you can't afford", "a real sniper rifle."); + + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), "&6&lPurple") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.walkSpeed = 0.2; //Weapon + this.delay = 47; //Weapon + + this.damage = 12.5; //RangedWeapon + this.meleeDamage = 4.0; //RangedWeapon + this.accuracy = 0.03; //RangedWeaponz + this.magSize = 1; //RangedWeapon + this.reloadTime = 50; //RangedWeapon + this.range = 30; //RangedWeapon + this.zoom = 4; //RangedWeapon + } + + @Override + public UserRank requiredRank() { + return UserRank.VIP; + } + + @Override + public Location spawnVisual(World world) { + Location origin = getOrigin(world); + ArmorStand glass = spawnEntity(origin.clone(), this, WeaponVisualStatue.VisualType.NAME); + glass.setHelmet(new ItemStack(Material.GLASS)); + + ArmorStand weapon = spawnEntity(origin.clone().add(-0.12, 0.2, -1.1625), this, WeaponVisualStatue.VisualType.NONE); + weapon.setArms(true); + weapon.setItemInHand(this.createItemStack().clone()); + weapon.setRightArmPose(new EulerAngle(0, AngleUtil.getRadianFromDegree(25), AngleUtil.getRadianFromDegree(90))); + weapon.setMarker(true); + + return origin; + } + + @Override + public Location getOrigin(World world) { + return new Location(world, -359.5, 25.5, 235.5, -90.0f, 0.0f); + } + + @Override + public void extras(ArmorStand entity) { + entity.setMetadata("statue_Y", new FixedMetadataValue(GTM.getInstance(), 2.25)); + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/pistol/Pistol.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/pistol/Pistol.java new file mode 100644 index 0000000..f90aa55 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/pistol/Pistol.java @@ -0,0 +1,103 @@ +package net.grandtheftmc.gtm.weapon.ranged.pistol; + +import net.grandtheftmc.core.util.AngleUtil; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.weapon.WeaponVisualStatue; +import org.bukkit.*; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.ranged.attachment.Attachment; +import net.grandtheftmc.guns.weapon.ranged.guns.PistolWeapon; +import org.bukkit.entity.ArmorStand; +import org.bukkit.inventory.ItemStack; +import org.bukkit.metadata.FixedMetadataValue; +import org.bukkit.util.EulerAngle; + +/** + * Created by Luke Bingham on 17/07/2017. + */ +public class Pistol extends PistolWeapon implements WeaponVisualStatue { + + /** + * Construct a new RangedWeapon. + */ + public Pistol() { + super( + (short) 6, + "Pistol", //Name + WeaponType.PISTOL, //Weapon Type + AmmoType.PISTOL, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 51).build(), //ItemStack + new Sound[] { //Gun Sounds + Sound.ENTITY_FIREWORK_BLAST, + Sound.ITEM_ARMOR_EQUIP_LEATHER, + Sound.ITEM_ARMOR_EQUIP_LEATHER, + Sound.BLOCK_NOTE_HAT, + }, + Effect.CRIT //Particles + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.WOOD_SWORD).setName(getName()).build()); + setDescription((Core.getSettings().isSister() ? "." : "Bitch ") + "basic pistol,", "great for scaring the cat"); + + setSupportedAttachments(Attachment.SUPPRESSOR, Attachment.EXTENDED_MAGS, Attachment.GRIP, Attachment.SCOPE); + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), "&6&lPurple") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.walkSpeed = 0.2; //Weapon + this.delay = 5; //Weapon + + this.damage = 3.5; //RangedWeapon + this.meleeDamage = 3.0; //RangedWeapon + this.accuracy = 0.02; //RangedWeapon + this.magSize = 12; //RangedWeapon + this.reloadTime = 40; //RangedWeapon + this.range = 25; //RangedWeapon + this.zoom = 4; //RangedWeapon + } + + @Override + public Location spawnVisual(World world) { + Location origin = getOrigin(world); + ArmorStand glass = spawnEntity(origin.clone(), this, VisualType.NAME); + glass.setHelmet(new ItemStack(Material.GLASS)); + + ArmorStand weapon = spawnEntity(origin.clone().add(-0.12, 0.2, -1.05), this, VisualType.NONE); + weapon.setArms(true); + weapon.setItemInHand(this.createItemStack().clone()); + weapon.setRightArmPose(new EulerAngle(0, AngleUtil.getRadianFromDegree(25), AngleUtil.getRadianFromDegree(90))); + weapon.setMarker(true); + + + + return origin; + } + + @Override + public Location getOrigin(World world) { + return new Location(world, -359.5, 25.5, 231.5, -90.0f, 0.0f); + } + + @Override + public void extras(ArmorStand entity) { + entity.setMetadata("statue_Y", new FixedMetadataValue(GTM.getInstance(), 2.25)); + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/pistol/StunGun.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/pistol/StunGun.java new file mode 100644 index 0000000..646ecab --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/pistol/StunGun.java @@ -0,0 +1,108 @@ +package net.grandtheftmc.gtm.weapon.ranged.pistol; + +import org.bukkit.Effect; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.World; +import org.bukkit.entity.ArmorStand; +import org.bukkit.inventory.ItemStack; +import org.bukkit.metadata.FixedMetadataValue; +import org.bukkit.util.EulerAngle; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.util.AngleUtil; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.weapon.WeaponVisualStatue; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.ranged.attachment.Attachment; +import net.grandtheftmc.guns.weapon.ranged.guns.PistolWeapon; + +/** + * Created by Luke Bingham on 17/07/2017. + */ +public class StunGun extends PistolWeapon implements WeaponVisualStatue { + + /** + * Construct a new RangedWeapon. + */ + public StunGun() { + super( + (short) 7, + "Stun Gun", //Name + WeaponType.PISTOL, //Weapon Type + AmmoType.NONE, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 61).build(), //ItemStack + new Sound[] { //Gun Sounds + Sound.BLOCK_DISPENSER_DISPENSE, + Sound.ITEM_ARMOR_EQUIP_LEATHER, + Sound.ITEM_ARMOR_EQUIP_LEATHER, + Sound.BLOCK_NOTE_HAT, + }, + Effect.MAGIC_CRIT //Particles + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.WOOD_SPADE).setName(getName()).build()); + setDescription("Nothing quite like", "50,000 volts straight", "to the " + (Core.getSettings().isSister() ? "head." : "nipples.")); + + setSupportedAttachments(Attachment.GRIP); + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), "&6&lPurple") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.walkSpeed = 0.2; //Weapon + this.delay = 47; //Weapon + + this.damage = 2.5; //RangedWeapon + this.meleeDamage = 3.0; //RangedWeaponz + this.accuracy = 0.015 ; //RangedWeapon + this.magSize = 1; //RangedWeapon + this.reloadTime = 40; //RangedWeapon + this.range = 20; //RangedWeapon + this.zoom = 0; //RangedWeapon + + this.stun = true; //PistolWeapon + this.duration = 120; //PistolWeapon + } + + @Override + public Location spawnVisual(World world) { + Location origin = getOrigin(world); + ArmorStand glass = spawnEntity(origin.clone(), this, WeaponVisualStatue.VisualType.NAME); + glass.setHelmet(new ItemStack(Material.GLASS)); + + ArmorStand weapon = spawnEntity(origin.clone().add(-0.12, 0.2, -1.05), this, WeaponVisualStatue.VisualType.NONE); + weapon.setArms(true); + weapon.setItemInHand(this.createItemStack().clone()); + weapon.setRightArmPose(new EulerAngle(0, AngleUtil.getRadianFromDegree(25), AngleUtil.getRadianFromDegree(90))); + weapon.setMarker(true); + + return origin; + } + + @Override + public Location getOrigin(World world) { + return new Location(world, -359.5, 25.5, 232.5, -90.0f, 0.0f); + } + + @Override + public void extras(ArmorStand entity) { + entity.setMetadata("statue_Y", new FixedMetadataValue(GTM.getInstance(), 2.25)); + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/shotgun/AssaultShotgun.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/shotgun/AssaultShotgun.java new file mode 100644 index 0000000..390eac4 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/shotgun/AssaultShotgun.java @@ -0,0 +1,116 @@ +package net.grandtheftmc.gtm.weapon.ranged.shotgun; + +import org.bukkit.Effect; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.World; +import org.bukkit.entity.ArmorStand; +import org.bukkit.metadata.FixedMetadataValue; +import org.bukkit.util.EulerAngle; + +import net.grandtheftmc.core.util.AngleUtil; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.weapon.WeaponVisualStatue; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.ranged.attachment.Attachment; +import net.grandtheftmc.guns.weapon.ranged.guns.ShotgunWeapon; + +/** + * Created by Luke Bingham on 17/07/2017. + */ +public class AssaultShotgun extends ShotgunWeapon implements WeaponVisualStatue { + + /** + * Construct a new RangedWeapon. + */ + public AssaultShotgun() { + super( + (short) 19, + "Assault Shotgun", //Name + WeaponType.SHOTGUN, //Weapon Type + AmmoType.SHOTGUN, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 181).build(), //ItemStack + new Sound[] { //Gun Sounds + Sound.ENTITY_ZOMBIE_ATTACK_DOOR_WOOD, + Sound.ITEM_ARMOR_EQUIP_CHAIN, + Sound.ITEM_ARMOR_EQUIP_CHAIN, + Sound.ENTITY_IRONGOLEM_ATTACK, + }, + Effect.SMALL_SMOKE //Particles + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.GOLD_AXE).setName(getName()).build()); + setDescription("Aggressive? Yes.", "Overkill? Most definitely."); + + setSupportedAttachments(Attachment.SUPPRESSOR, Attachment.EXTENDED_MAGS, Attachment.GRIP, Attachment.SCOPE); + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), "&6&lPurple") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.walkSpeed = 0.14; //Weapon + this.delay = 5; + + this.damage = 4.0; //RangedWeapon + this.meleeDamage = 5.0; //RangedWeapon + //this.accuracy = 0.035; //RangedWeapon + this.accuracy = 0.15; //RangedWeapon + this.magSize = 8; //RangedWeapon + this.reloadTime = 40; //RangedWeapon + this.range = 8; //RangedWeapon + this.recoil = 0.15; //RangedWeapon + this.zoom = 2; //RangedWeapon + + this.shellSize = 6; //AssultRifleWeapon + } + + @Override + public Location spawnVisual(World world) { + Location origin = this.getOrigin(world); + ArmorStand clickable = spawnEntity(origin.clone().add(0, 1.5, 0), this, WeaponVisualStatue.VisualType.NAME); + clickable.setSmall(true); + + ArmorStand weapon = spawnEntity(origin.clone().add(-0.35, 0.02, -0.1), this, WeaponVisualStatue.VisualType.NONE); + weapon.setArms(true); + weapon.setItemInHand(this.createItemStack().clone()); + weapon.setRightArmPose(new EulerAngle(AngleUtil.getRadianFromDegree(180), 0, AngleUtil.getRadianFromDegree(20))); + weapon.setMarker(true); + +// Location hookLoc = origin.clone().add(0.045, 1.02, -0.68); +// hookLoc.setPitch(0); +// hookLoc.setYaw(0); +// ArmorStand hook = spawnEntity(hookLoc, this, WeaponVisualStatue.VisualType.NONE); +// hook.setHelmet(new ItemStack(Material.TRIPWIRE_HOOK)); +// hook.setHeadPose(new EulerAngle(AngleUtil.getRadianFromDegree(45), 0, 0)); +// hook.setSmall(true); +// hook.setMarker(true); + + return origin; + } + + @Override + public Location getOrigin(World world) { + return new Location(world, -376.5, 25.5, 237.5, 180.0f, 0.0f); + } + + @Override + public void extras(ArmorStand entity) { + entity.setMetadata("statue_Y", new FixedMetadataValue(GTM.getInstance(), 2.5)); + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/shotgun/HeavyShotgun.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/shotgun/HeavyShotgun.java new file mode 100644 index 0000000..54931e6 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/shotgun/HeavyShotgun.java @@ -0,0 +1,123 @@ +package net.grandtheftmc.gtm.weapon.ranged.shotgun; + +import org.bukkit.Effect; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.World; +import org.bukkit.entity.ArmorStand; +import org.bukkit.metadata.FixedMetadataValue; +import org.bukkit.util.EulerAngle; + +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.util.AngleUtil; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.weapon.WeaponVisualStatue; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.attribute.RankedWeapon; +import net.grandtheftmc.guns.weapon.ranged.attachment.Attachment; +import net.grandtheftmc.guns.weapon.ranged.guns.ShotgunWeapon; + +/** + * Created by Luke Bingham on 17/07/2017. + */ +public class HeavyShotgun extends ShotgunWeapon implements RankedWeapon, WeaponVisualStatue { + + /** + * Construct a new RangedWeapon. + */ + public HeavyShotgun() { + super( + (short) 20, + "Heavy Shotgun", //Name + WeaponType.SHOTGUN, //Weapon Type + AmmoType.SHOTGUN, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 191).build(), //ItemStack + new Sound[] { //Gun Sounds + Sound.ENTITY_ZOMBIE_ATTACK_DOOR_WOOD, + Sound.ITEM_ARMOR_EQUIP_CHAIN, + Sound.ITEM_ARMOR_EQUIP_CHAIN, + Sound.ENTITY_IRONGOLEM_ATTACK, + }, + Effect.SMALL_SMOKE //Particles + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.GOLD_HOE).setName(getName()).build()); + setDescription("Like your normal shotgun,", "but even heftier."); + + setSupportedAttachments(Attachment.SUPPRESSOR, Attachment.EXTENDED_MAGS, Attachment.GRIP, Attachment.SCOPE); + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), "&6&lPurple") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.walkSpeed = 0.12; //Weapon + this.delay = 6; + + this.damage = 6.5; //RangedWeapon + this.meleeDamage = 6.0; //RangedWeapon + //this.accuracy = 0.075; //RangedWeapon + this.accuracy = 0.15; //RangedWeapon + this.magSize = 6; //RangedWeapon + this.reloadTime = 40; //RangedWeapon + this.range = 8; //RangedWeapon + this.recoil = 0.15; //RangedWeapon + this.zoom = 3; //RangedWeapon + + this.shellSize = 6; //AssultRifleWeapon + } + + @Override + public UserRank requiredRank() { + return UserRank.VIP; + } + + @Override + public Location spawnVisual(World world) { + Location origin = this.getOrigin(world); + ArmorStand clickable = spawnEntity(origin.clone().add(0, 1.5, 0), this, WeaponVisualStatue.VisualType.NAME); + clickable.setSmall(true); + + ArmorStand weapon = spawnEntity(origin.clone().add(-0.35, 0.08, -0.1), this, WeaponVisualStatue.VisualType.NONE); + weapon.setArms(true); + weapon.setItemInHand(this.createItemStack().clone()); + weapon.setRightArmPose(new EulerAngle(AngleUtil.getRadianFromDegree(180), 0, AngleUtil.getRadianFromDegree(20))); + weapon.setMarker(true); + +// Location hookLoc = origin.clone().add(0.045, 1.02, -0.68); +// hookLoc.setPitch(0); +// hookLoc.setYaw(0); +// ArmorStand hook = spawnEntity(hookLoc, this, WeaponVisualStatue.VisualType.NONE); +// hook.setHelmet(new ItemStack(Material.TRIPWIRE_HOOK)); +// hook.setHeadPose(new EulerAngle(AngleUtil.getRadianFromDegree(45), 0, 0)); +// hook.setSmall(true); +// hook.setMarker(true); + + return origin; + } + + @Override + public Location getOrigin(World world) { + return new Location(world, -376.5, 25.5, 236.5, 180.0f, 0.0f); + } + + @Override + public void extras(ArmorStand entity) { + entity.setMetadata("statue_Y", new FixedMetadataValue(GTM.getInstance(), 2.5)); + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/shotgun/Musket.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/shotgun/Musket.java new file mode 100644 index 0000000..26281f7 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/shotgun/Musket.java @@ -0,0 +1,113 @@ +package net.grandtheftmc.gtm.weapon.ranged.shotgun; + +import org.bukkit.Effect; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.World; +import org.bukkit.entity.ArmorStand; +import org.bukkit.metadata.FixedMetadataValue; +import org.bukkit.util.EulerAngle; + +import net.grandtheftmc.core.util.AngleUtil; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.weapon.WeaponVisualStatue; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.ranged.guns.ShotgunWeapon; + +/** + * Created by Luke Bingham on 17/07/2017. + */ +public class Musket extends ShotgunWeapon implements WeaponVisualStatue { + + /** + * Construct a new RangedWeapon. + */ + public Musket() { + super( + (short) 18, + "Musket", //Name + WeaponType.SHOTGUN, //Weapon Type + AmmoType.SHOTGUN, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 171).build(), //ItemStack + new Sound[] { //Gun Sounds + Sound.ENTITY_ZOMBIE_ATTACK_DOOR_WOOD, + Sound.ITEM_ARMOR_EQUIP_CHAIN, + Sound.ITEM_ARMOR_EQUIP_CHAIN, + Sound.ENTITY_IRONGOLEM_ATTACK, + }, + Effect.SMOKE //Particles + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.GOLD_PICKAXE).setName(getName()).build()); + setDescription("Great if you want to", "roleplay a battle in 1776"); + + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), "&6&lPurple") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.walkSpeed = 0.14; //Weapon + this.delay = 82; + + this.damage = 20; //RangedWeapon + this.meleeDamage = 4.0; //RangedWeapon + this.accuracy = 0.025; //RangedWeapon + this.magSize = 1; //RangedWeapon + this.reloadTime = 90; //RangedWeapon + this.range = 100; //RangedWeapon + this.recoil = 0.4; //RangedWeapon + this.zoom = 4; //RangedWeapon + + this.shellSize = 1; //AssultRifleWeapon + } + + @Override + public Location spawnVisual(World world) { + Location origin = this.getOrigin(world); + ArmorStand clickable = spawnEntity(origin.clone().add(0, 1.5, 0), this, WeaponVisualStatue.VisualType.NAME); + clickable.setSmall(true); + + ArmorStand weapon = spawnEntity(origin.clone().add(-0.2, -0.05, -0.2), this, WeaponVisualStatue.VisualType.NONE); + weapon.setArms(true); + weapon.setItemInHand(this.createItemStack().clone()); + weapon.setRightArmPose(new EulerAngle(AngleUtil.getRadianFromDegree(180), 0, AngleUtil.getRadianFromDegree(20))); + weapon.setMarker(true); + +// Location hookLoc = origin.clone().add(0.045, 1.02, -0.68); +// hookLoc.setPitch(0); +// hookLoc.setYaw(0); +// ArmorStand hook = spawnEntity(hookLoc, this, WeaponVisualStatue.VisualType.NONE); +// hook.setHelmet(new ItemStack(Material.TRIPWIRE_HOOK)); +// hook.setHeadPose(new EulerAngle(AngleUtil.getRadianFromDegree(45), 0, 0)); +// hook.setSmall(true); +// hook.setMarker(true); + + return origin; + } + + @Override + public Location getOrigin(World world) { + return new Location(world, -376.5, 25.5, 238.5, 180.0f, 0.0f); + } + + @Override + public void extras(ArmorStand entity) { + entity.setMetadata("statue_Y", new FixedMetadataValue(GTM.getInstance(), 2.5)); + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/shotgun/PumpShotgun.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/shotgun/PumpShotgun.java new file mode 100644 index 0000000..66d0905 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/shotgun/PumpShotgun.java @@ -0,0 +1,115 @@ +package net.grandtheftmc.gtm.weapon.ranged.shotgun; + +import org.bukkit.Effect; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.World; +import org.bukkit.entity.ArmorStand; +import org.bukkit.metadata.FixedMetadataValue; +import org.bukkit.util.EulerAngle; + +import net.grandtheftmc.core.util.AngleUtil; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.weapon.WeaponVisualStatue; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.ranged.guns.ShotgunWeapon; + +/** + * Created by Luke Bingham on 17/07/2017. + */ +public class PumpShotgun extends ShotgunWeapon implements WeaponVisualStatue { + + /** + * Construct a new RangedWeapon. + */ + public PumpShotgun() { + super( + (short) 17, + "Pump Shotgun", //Name + WeaponType.SHOTGUN, //Weapon Type + AmmoType.SHOTGUN, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 161).build(), //ItemStack + new Sound[] { //Gun Sounds + Sound.ENTITY_ZOMBIE_ATTACK_DOOR_WOOD, + Sound.ITEM_ARMOR_EQUIP_CHAIN, + Sound.ITEM_ARMOR_EQUIP_CHAIN, + Sound.ENTITY_IRONGOLEM_ATTACK, + }, + Effect.SMALL_SMOKE //Particles + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.GOLD_SPADE).setName(getName()).build()); + setDescription("Standard, solid shotgun.", "This'll keep you going."); + + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), "&6&lPurple") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.walkSpeed = 0.14; //Weapon + this.delay = 13; + + this.damage = 2.5; //RangedWeapon + this.meleeDamage = 5.0; //RangedWeapon + //this.accuracy = 0.025; //RangedWeapon + this.accuracy = 0.12; //RangedWeapon + this.magSize = 8; //RangedWeapon + this.reloadTime = 56; //RangedWeapon + this.range = 10; //RangedWeapon + this.recoil = 0.25; //RangedWeapon + this.zoom = 6; //RangedWeapon + this.reloadShoot = true; + + this.shellSize = 8; //AssultRifleWeapon + } + + @Override + public Location spawnVisual(World world) { + Location origin = this.getOrigin(world); + ArmorStand clickable = spawnEntity(origin.clone().add(0, 1.5, 0), this, WeaponVisualStatue.VisualType.NAME); + clickable.setSmall(true); + + ArmorStand weapon = spawnEntity(origin.clone().add(-0.35, 0.08, -0.1), this, WeaponVisualStatue.VisualType.NONE); + weapon.setArms(true); + weapon.setItemInHand(this.createItemStack().clone()); + weapon.setRightArmPose(new EulerAngle(AngleUtil.getRadianFromDegree(180), 0, AngleUtil.getRadianFromDegree(20))); + weapon.setMarker(true); + +// Location hookLoc = origin.clone().add(0.045, 1.02, -0.68); +// hookLoc.setPitch(0); +// hookLoc.setYaw(0); +// ArmorStand hook = spawnEntity(hookLoc, this, WeaponVisualStatue.VisualType.NONE); +// hook.setHelmet(new ItemStack(Material.TRIPWIRE_HOOK)); +// hook.setHeadPose(new EulerAngle(AngleUtil.getRadianFromDegree(45), 0, 0)); +// hook.setSmall(true); +// hook.setMarker(true); + + return origin; + } + + @Override + public Location getOrigin(World world) { + return new Location(world, -376.5, 25.5, 239.5, 180.0f, 0.0f); + } + + @Override + public void extras(ArmorStand entity) { + entity.setMetadata("statue_Y", new FixedMetadataValue(GTM.getInstance(), 2.5)); + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/shotgun/SawedoffShotgun.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/shotgun/SawedoffShotgun.java new file mode 100644 index 0000000..2e31408 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/shotgun/SawedoffShotgun.java @@ -0,0 +1,115 @@ +package net.grandtheftmc.gtm.weapon.ranged.shotgun; + +import org.bukkit.Effect; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.World; +import org.bukkit.entity.ArmorStand; +import org.bukkit.metadata.FixedMetadataValue; +import org.bukkit.util.EulerAngle; + +import net.grandtheftmc.core.util.AngleUtil; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.weapon.WeaponVisualStatue; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.ranged.guns.ShotgunWeapon; + +/** + * Created by Luke Bingham on 17/07/2017. + */ +public class SawedoffShotgun extends ShotgunWeapon implements WeaponVisualStatue { + + /** + * Construct a new RangedWeapon. + */ + public SawedoffShotgun() { + super( + (short) 16, + "Sawed-off Shotgun", //Name + WeaponType.SHOTGUN, //Weapon Type + AmmoType.SHOTGUN, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 151).build(), //ItemStack + new Sound[] { //Gun Sounds + Sound.ENTITY_ZOMBIE_ATTACK_DOOR_WOOD, + Sound.ITEM_ARMOR_EQUIP_CHAIN, + Sound.ITEM_ARMOR_EQUIP_CHAIN, + Sound.ENTITY_IRONGOLEM_ATTACK, + }, + Effect.SMALL_SMOKE //Particles + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.GOLD_SWORD).setName(getName()).build()); + setDescription("Yehaw, time t'shoot me", "some uppities!"); + + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), "&6&lPurple") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.walkSpeed = 0.18; //Weapon + this.delay = 18; + + this.damage = 3.0; //RangedWeapon + this.meleeDamage = 4.0; //RangedWeapon + //this.accuracy = 0.04; //RangedWeapon + this.accuracy = 0.18; //RangedWeapon + this.magSize = 2; //RangedWeapon + this.reloadTime = 20; //RangedWeapon + this.range = 10; //RangedWeapon + this.recoil = 0.3; //RangedWeapon + this.zoom = 6; //RangedWeapon + this.reloadShoot = true; + + this.shellSize = 8; //AssultRifleWeapon + } + + @Override + public Location spawnVisual(World world) { + Location origin = this.getOrigin(world); + ArmorStand clickable = spawnEntity(origin.clone().add(0, 1.5, 0), this, WeaponVisualStatue.VisualType.NAME); + clickable.setSmall(true); + + ArmorStand weapon = spawnEntity(origin.clone().add(-0.35, -0.2, -0.2), this, WeaponVisualStatue.VisualType.NONE); + weapon.setArms(true); + weapon.setItemInHand(this.createItemStack().clone()); + weapon.setRightArmPose(new EulerAngle(AngleUtil.getRadianFromDegree(180), 0, AngleUtil.getRadianFromDegree(20))); + weapon.setMarker(true); + +// Location hookLoc = origin.clone().add(0.045, 1.02, -0.68); +// hookLoc.setPitch(0); +// hookLoc.setYaw(0); +// ArmorStand hook = spawnEntity(hookLoc, this, WeaponVisualStatue.VisualType.NONE); +// hook.setHelmet(new ItemStack(Material.TRIPWIRE_HOOK)); +// hook.setHeadPose(new EulerAngle(AngleUtil.getRadianFromDegree(45), 0, 0)); +// hook.setSmall(true); +// hook.setMarker(true); + + return origin; + } + + @Override + public Location getOrigin(World world) { + return new Location(world, -376.5, 25.5, 240.5, 180.0f, 0.0f); + } + + @Override + public void extras(ArmorStand entity) { + entity.setMetadata("statue_Y", new FixedMetadataValue(GTM.getInstance(), 2.5)); + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/smg/AssaultSMG.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/smg/AssaultSMG.java new file mode 100644 index 0000000..d4420b4 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/smg/AssaultSMG.java @@ -0,0 +1,117 @@ +package net.grandtheftmc.gtm.weapon.ranged.smg; + +import org.bukkit.Effect; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.World; +import org.bukkit.entity.ArmorStand; +import org.bukkit.inventory.ItemStack; +import org.bukkit.metadata.FixedMetadataValue; +import org.bukkit.util.EulerAngle; + +import net.grandtheftmc.core.util.AngleUtil; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.weapon.WeaponVisualStatue; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.ranged.attachment.Attachment; +import net.grandtheftmc.guns.weapon.ranged.guns.SMGWeapon; + +/** + * Created by Luke Bingham on 17/07/2017. + */ +public class AssaultSMG extends SMGWeapon implements WeaponVisualStatue { + + /** + * Construct a new RangedWeapon. + */ + public AssaultSMG() { + super( + (short) 13, + "Assault SMG", //Name + WeaponType.SMG, //Weapon Type + AmmoType.SMG, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 121).build(), //ItemStack + new Sound[] { //Gun Sounds + Sound.ENTITY_BLAZE_HURT, + Sound.ITEM_ARMOR_EQUIP_GOLD, + Sound.ITEM_ARMOR_EQUIP_GOLD, + Sound.BLOCK_WOODEN_DOOR_OPEN, + }, + Effect.FLYING_GLYPH //Particles + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.IRON_PICKAXE).setName(getName()).build()); + setDescription("A solid,", "Military grade weapon.", "Good for mowing down enemies."); + + setSupportedAttachments(Attachment.SUPPRESSOR, Attachment.EXTENDED_MAGS, Attachment.GRIP, Attachment.SCOPE); + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), "&6&lPurple") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.walkSpeed = 0.2; //Weapon + + this.damage = 2.0; //RangedWeapon + this.meleeDamage = 4.0; //RangedWeapon + this.accuracy = 0.03; //RangedWeapon + this.magSize = 30; //RangedWeapon + this.reloadTime = 50; //RangedWeapon + this.range = 35; //RangedWeapon + this.recoil = 0.0; //RangedWeapon + this.zoom = 4; //RangedWeapon + + this.rpm = 460; //AssultRifleWeapon + this.rps = 7; + this.multiShoot = true; + } + + @Override + public Location spawnVisual(World world) { + Location origin = this.getOrigin(world); + ArmorStand clickable = spawnEntity(origin.clone().add(0, 1.5, 0), this, WeaponVisualStatue.VisualType.NAME); + clickable.setSmall(true); + + ArmorStand weapon = spawnEntity(origin.clone().add(0.2, -0.1, -0.4), this, WeaponVisualStatue.VisualType.NONE); + weapon.setArms(true); + weapon.setItemInHand(this.createItemStack().clone()); + weapon.setRightArmPose(new EulerAngle(AngleUtil.getRadianFromDegree(180), 0, AngleUtil.getRadianFromDegree(20))); + weapon.setMarker(true); + + Location hookLoc = origin.clone().add(0.045, 1.02, -0.68); + hookLoc.setPitch(0); + hookLoc.setYaw(0); + ArmorStand hook = spawnEntity(hookLoc, this, WeaponVisualStatue.VisualType.NONE); + hook.setHelmet(new ItemStack(Material.TRIPWIRE_HOOK)); + hook.setHeadPose(new EulerAngle(AngleUtil.getRadianFromDegree(45), 0, 0)); + hook.setSmall(true); + hook.setMarker(true); + + return origin; + } + + @Override + public Location getOrigin(World world) { + return new Location(world, -365.5, 25.5, 227.5, -90.0f, 0.0f); + } + + @Override + public void extras(ArmorStand entity) { + entity.setMetadata("statue_Y", new FixedMetadataValue(GTM.getInstance(), 2.5)); + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/smg/CombatPDW.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/smg/CombatPDW.java new file mode 100644 index 0000000..58613e5 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/smg/CombatPDW.java @@ -0,0 +1,117 @@ +package net.grandtheftmc.gtm.weapon.ranged.smg; + +import org.bukkit.Effect; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.World; +import org.bukkit.entity.ArmorStand; +import org.bukkit.inventory.ItemStack; +import org.bukkit.metadata.FixedMetadataValue; +import org.bukkit.util.EulerAngle; + +import net.grandtheftmc.core.util.AngleUtil; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.weapon.WeaponVisualStatue; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.ranged.attachment.Attachment; +import net.grandtheftmc.guns.weapon.ranged.guns.SMGWeapon; + +/** + * Created by Luke Bingham on 17/07/2017. + */ +public class CombatPDW extends SMGWeapon implements WeaponVisualStatue { + + /** + * Construct a new RangedWeapon. + */ + public CombatPDW() { + super( + (short) 14, + "Combat PDW", //Name + WeaponType.SMG, //Weapon Type + AmmoType.SMG, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 131).build(), //ItemStack + new Sound[] { //Gun Sounds + Sound.ENTITY_BLAZE_HURT, + Sound.ITEM_ARMOR_EQUIP_GOLD, + Sound.ITEM_ARMOR_EQUIP_GOLD, + Sound.BLOCK_WOODEN_DOOR_OPEN, + }, + Effect.FLYING_GLYPH //Particles + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.IRON_AXE).setName(getName()).build()); + setDescription("It's a defensive weapon.", "With a supressor.", "Thanks, Congress!"); + + setSupportedAttachments(Attachment.SUPPRESSOR, Attachment.EXTENDED_MAGS, Attachment.GRIP, Attachment.SCOPE); + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), "&6&lPurple") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.walkSpeed = 0.2; //Weapon + + this.damage = 2.1; //RangedWeapon + this.meleeDamage = 4.0; //RangedWeapon + this.accuracy = 0.025; //RangedWeapon + this.magSize = 30; //RangedWeapon + this.reloadTime = 40; //RangedWeapon + this.range = 40; //RangedWeapon + this.recoil = 0.0; //RangedWeapon + this.zoom = 4; //RangedWeapon + + this.rpm = 450; //AssultRifleWeapon + this.rps = 7; + this.multiShoot = true; + } + + @Override + public Location spawnVisual(World world) { + Location origin = this.getOrigin(world); + ArmorStand clickable = spawnEntity(origin.clone().add(0, 1.5, 0), this, WeaponVisualStatue.VisualType.NAME); + clickable.setSmall(true); + + ArmorStand weapon = spawnEntity(origin.clone().add(0.2, -0.15, -0.38), this, WeaponVisualStatue.VisualType.NONE); + weapon.setArms(true); + weapon.setItemInHand(this.createItemStack().clone()); + weapon.setRightArmPose(new EulerAngle(AngleUtil.getRadianFromDegree(180), 0, AngleUtil.getRadianFromDegree(20))); + weapon.setMarker(true); + + Location hookLoc = origin.clone().add(0.045, 1.07, -0.7); + hookLoc.setPitch(0); + hookLoc.setYaw(0); + ArmorStand hook = spawnEntity(hookLoc, this, WeaponVisualStatue.VisualType.NONE); + hook.setHelmet(new ItemStack(Material.TRIPWIRE_HOOK)); + hook.setHeadPose(new EulerAngle(AngleUtil.getRadianFromDegree(45), 0, 0)); + hook.setSmall(true); + hook.setMarker(true); + + return origin; + } + + @Override + public Location getOrigin(World world) { + return new Location(world, -364.5, 25.5, 227.5, -90.0f, 0.0f); + } + + @Override + public void extras(ArmorStand entity) { + entity.setMetadata("statue_Y", new FixedMetadataValue(GTM.getInstance(), 2.5)); + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/smg/GusenbergSweeper.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/smg/GusenbergSweeper.java new file mode 100644 index 0000000..26fc0c4 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/smg/GusenbergSweeper.java @@ -0,0 +1,124 @@ +package net.grandtheftmc.gtm.weapon.ranged.smg; + +import org.bukkit.Effect; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.World; +import org.bukkit.entity.ArmorStand; +import org.bukkit.inventory.ItemStack; +import org.bukkit.metadata.FixedMetadataValue; +import org.bukkit.util.EulerAngle; + +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.util.AngleUtil; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.weapon.WeaponVisualStatue; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.attribute.RankedWeapon; +import net.grandtheftmc.guns.weapon.ranged.attachment.Attachment; +import net.grandtheftmc.guns.weapon.ranged.guns.SMGWeapon; + +/** + * Created by Luke Bingham on 17/07/2017. + */ +public class GusenbergSweeper extends SMGWeapon implements RankedWeapon, WeaponVisualStatue { + + /** + * Construct a new RangedWeapon. + */ + public GusenbergSweeper() { + super( + (short) 15, + "Gusenberg Sweeper", //Name + WeaponType.SMG, //Weapon Type + AmmoType.SMG, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 141).build(), //ItemStack + new Sound[] { //Gun Sounds + Sound.ENTITY_BLAZE_HURT, + Sound.ITEM_ARMOR_EQUIP_GOLD, + Sound.ITEM_ARMOR_EQUIP_GOLD, + Sound.BLOCK_WOODEN_DOOR_OPEN, + }, + Effect.FLYING_GLYPH //Particles + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.IRON_HOE).setName(getName()).build()); + setDescription("With this gun, you can", "make them an offer they", "can't refuse."); + + setSupportedAttachments(Attachment.SUPPRESSOR, Attachment.EXTENDED_MAGS, Attachment.GRIP, Attachment.SCOPE); + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), "&6&lPurple") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.walkSpeed = 0.2; //Weapon + + this.damage = 2.25; //RangedWeapon + this.meleeDamage = 5.0; //RangedWeapon + this.accuracy = 0.025; //RangedWeapon + this.magSize = 50; //RangedWeapon + this.reloadTime = 40; //RangedWeapon + this.range = 40; //RangedWeapon + this.recoil = 0.0; //RangedWeapon + this.zoom = 2; //RangedWeapon + + this.rpm = 555; //AssultRifleWeapon + this.rps = 9; + this.multiShoot = true; + } + + @Override + public UserRank requiredRank() { + return UserRank.PREMIUM; + } + + @Override + public Location spawnVisual(World world) { + Location origin = this.getOrigin(world); + ArmorStand clickable = spawnEntity(origin.clone().add(0, 1.5, 0), this, WeaponVisualStatue.VisualType.NAME); + clickable.setSmall(true); + + ArmorStand weapon = spawnEntity(origin.clone().add(0.2, -0.06, -0.4), this, WeaponVisualStatue.VisualType.NONE); + weapon.setArms(true); + weapon.setItemInHand(this.createItemStack().clone()); + weapon.setRightArmPose(new EulerAngle(AngleUtil.getRadianFromDegree(180), 0, AngleUtil.getRadianFromDegree(20))); + weapon.setMarker(true); + + Location hookLoc = origin.clone().add(0.01, 1.22, -0.75); + hookLoc.setPitch(0); + hookLoc.setYaw(0); + ArmorStand hook = spawnEntity(hookLoc, this, WeaponVisualStatue.VisualType.NONE); + hook.setHelmet(new ItemStack(Material.TRIPWIRE_HOOK)); + hook.setHeadPose(new EulerAngle(AngleUtil.getRadianFromDegree(45), 0, 0)); + hook.setSmall(true); + hook.setMarker(true); + + return origin; + } + + @Override + public Location getOrigin(World world) { + return new Location(world, -363.5, 25.5, 227.5, -90.0f, 0.0f); + } + + @Override + public void extras(ArmorStand entity) { + entity.setMetadata("statue_Y", new FixedMetadataValue(GTM.getInstance(), 2.5)); + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/smg/MicroSMG.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/smg/MicroSMG.java new file mode 100644 index 0000000..76206f9 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/smg/MicroSMG.java @@ -0,0 +1,117 @@ +package net.grandtheftmc.gtm.weapon.ranged.smg; + +import org.bukkit.Effect; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.World; +import org.bukkit.entity.ArmorStand; +import org.bukkit.inventory.ItemStack; +import org.bukkit.metadata.FixedMetadataValue; +import org.bukkit.util.EulerAngle; + +import net.grandtheftmc.core.util.AngleUtil; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.weapon.WeaponVisualStatue; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.ranged.attachment.Attachment; +import net.grandtheftmc.guns.weapon.ranged.guns.SMGWeapon; + +/** + * Created by Luke Bingham on 17/07/2017. + */ +public class MicroSMG extends SMGWeapon implements WeaponVisualStatue { + + /** + * Construct a new RangedWeapon. + */ + public MicroSMG() { + super( + (short) 11, + "Micro SMG", //Name + WeaponType.SMG, //Weapon Type + AmmoType.SMG, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 101).build(), //ItemStack + new Sound[] { //Gun Sounds + Sound.ENTITY_BLAZE_HURT, + Sound.ITEM_ARMOR_EQUIP_GOLD, + Sound.ITEM_ARMOR_EQUIP_GOLD, + Sound.BLOCK_WOODEN_DOOR_OPEN, + }, + Effect.FLYING_GLYPH //Particles + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.IRON_SWORD).setName(getName()).build()); + setDescription("It's like a peashooter,", "on steriods."); + + setSupportedAttachments(Attachment.SUPPRESSOR, Attachment.EXTENDED_MAGS, Attachment.GRIP, Attachment.SCOPE); + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), "&6&lPurple") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.walkSpeed = 0.2; //Weapon + + this.damage = 1.6; //RangedWeapon + this.meleeDamage = 4.0; //RangedWeapon + this.accuracy = 0.03; //RangedWeapon + this.magSize = 16; //RangedWeapon + this.reloadTime = 40; //RangedWeapon + this.range = 25; //RangedWeapon + this.recoil = 0.0; //RangedWeapon + this.zoom = 4; //RangedWeapon + + this.rpm = 600; //AssultRifleWeapon + this.rps = 10; + this.multiShoot = true; + } + + @Override + public Location spawnVisual(World world) { + Location origin = this.getOrigin(world); + ArmorStand clickable = spawnEntity(origin.clone().add(0, 1.5, 0), this, VisualType.NAME); + clickable.setSmall(true); + + ArmorStand weapon = spawnEntity(origin.clone().add(0.2, 0.21, -0.4), this, VisualType.NONE); + weapon.setArms(true); + weapon.setItemInHand(this.createItemStack().clone()); + weapon.setRightArmPose(new EulerAngle(AngleUtil.getRadianFromDegree(180), 0, AngleUtil.getRadianFromDegree(20))); + weapon.setMarker(true); + + Location hookLoc = origin.clone().add(-0.03, 1.2, -0.64); + hookLoc.setPitch(0); + hookLoc.setYaw(0); + ArmorStand hook = spawnEntity(hookLoc, this, VisualType.NONE); + hook.setHelmet(new ItemStack(Material.TRIPWIRE_HOOK)); + hook.setHeadPose(new EulerAngle(AngleUtil.getRadianFromDegree(45), 0, 0)); + hook.setSmall(true); + hook.setMarker(true); + + return origin; + } + + @Override + public Location getOrigin(World world) { + return new Location(world, -367.5, 25.5, 227.5, -90.0f, 0.0f); + } + + @Override + public void extras(ArmorStand entity) { + entity.setMetadata("statue_Y", new FixedMetadataValue(GTM.getInstance(), 2.5)); + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/smg/SMG.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/smg/SMG.java new file mode 100644 index 0000000..6681086 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/smg/SMG.java @@ -0,0 +1,117 @@ +package net.grandtheftmc.gtm.weapon.ranged.smg; + +import org.bukkit.Effect; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.World; +import org.bukkit.entity.ArmorStand; +import org.bukkit.inventory.ItemStack; +import org.bukkit.metadata.FixedMetadataValue; +import org.bukkit.util.EulerAngle; + +import net.grandtheftmc.core.util.AngleUtil; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.weapon.WeaponVisualStatue; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.ranged.attachment.Attachment; +import net.grandtheftmc.guns.weapon.ranged.guns.SMGWeapon; + +/** + * Created by Luke Bingham on 17/07/2017. + */ +public class SMG extends SMGWeapon implements WeaponVisualStatue { + + /** + * Construct a new RangedWeapon. + */ + public SMG() { + super( + (short) 12, + "SMG", //Name + WeaponType.SMG, //Weapon Type + AmmoType.SMG, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 111).build(), //ItemStack + new Sound[] { //Gun Sounds + Sound.ENTITY_BLAZE_HURT, + Sound.ITEM_ARMOR_EQUIP_GOLD, + Sound.ITEM_ARMOR_EQUIP_GOLD, + Sound.BLOCK_WOODEN_DOOR_OPEN, + }, + Effect.FLYING_GLYPH //Particles + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.IRON_SPADE).setName(getName()).build()); + setDescription("The intro to proper", "gang warfare."); + + setSupportedAttachments(Attachment.SUPPRESSOR, Attachment.EXTENDED_MAGS, Attachment.GRIP, Attachment.SCOPE); + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), "&6&lPurple") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.walkSpeed = 0.2; //Weapon + + this.damage = 1.9; //RangedWeapon + this.meleeDamage = 4.0; //RangedWeapon + this.accuracy = 0.03; //RangedWeapon + this.magSize = 30; //RangedWeapon + this.reloadTime = 50; //RangedWeapon + this.range = 35; //RangedWeapon + this.recoil = 0.0; //RangedWeapon + this.zoom = 4; //RangedWeapon + + this.rpm = 510; //AssultRifleWeapon + this.rps = 9; + this.multiShoot = true; + } + + @Override + public Location spawnVisual(World world) { + Location origin = this.getOrigin(world); + ArmorStand clickable = spawnEntity(origin.clone().add(0, 1.5, 0), this, WeaponVisualStatue.VisualType.NAME); + clickable.setSmall(true); + + ArmorStand weapon = spawnEntity(origin.clone().add(0.2, -0.15, -0.35), this, WeaponVisualStatue.VisualType.NONE); + weapon.setArms(true); + weapon.setItemInHand(this.createItemStack().clone()); + weapon.setRightArmPose(new EulerAngle(AngleUtil.getRadianFromDegree(180), 0, AngleUtil.getRadianFromDegree(20))); + weapon.setMarker(true); + + Location hookLoc = origin.clone().add(0, 1.05, -0.64); + hookLoc.setPitch(0); + hookLoc.setYaw(0); + ArmorStand hook = spawnEntity(hookLoc, this, WeaponVisualStatue.VisualType.NONE); + hook.setHelmet(new ItemStack(Material.TRIPWIRE_HOOK)); + hook.setHeadPose(new EulerAngle(AngleUtil.getRadianFromDegree(45), 0, 0)); + hook.setSmall(true); + hook.setMarker(true); + + return origin; + } + + @Override + public Location getOrigin(World world) { + return new Location(world, -366.5, 25.5, 227.5, -90.0f, 0.0f); + } + + @Override + public void extras(ArmorStand entity) { + entity.setMetadata("statue_Y", new FixedMetadataValue(GTM.getInstance(), 2.5)); + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/sniper/HeavySniper.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/sniper/HeavySniper.java new file mode 100644 index 0000000..659d03e --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/sniper/HeavySniper.java @@ -0,0 +1,124 @@ +package net.grandtheftmc.gtm.weapon.ranged.sniper; + +import org.bukkit.Effect; +import org.bukkit.Material; +import org.bukkit.Sound; + +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.util.AngleUtil; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.weapon.WeaponVisualStatue; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.attribute.RankedWeapon; +import net.grandtheftmc.guns.weapon.ranged.attachment.Attachment; +import net.grandtheftmc.guns.weapon.ranged.guns.SniperWeapon; +import org.bukkit.*; +import org.bukkit.entity.ArmorStand; +import org.bukkit.metadata.FixedMetadataValue; +import org.bukkit.util.EulerAngle; + +/** + * Created by Luke Bingham on 17/07/2017. + */ +public class HeavySniper extends SniperWeapon implements RankedWeapon, WeaponVisualStatue { + + /** + * Construct a new RangedWeapon. + */ + public HeavySniper() { + super( + (short) 29, + "Heavy Sniper", //Name + WeaponType.SNIPER, //Weapon Type + AmmoType.SNIPER, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 281).build(), //ItemStack + new Sound[] { //Gun Sounds + Sound.ENTITY_IRONGOLEM_HURT, + Sound.ITEM_ARMOR_EQUIP_DIAMOND, + Sound.ITEM_ARMOR_EQUIP_DIAMOND, + Sound.BLOCK_PISTON_EXTEND, + }, + Effect.CLOUD //Particles + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.DIAMOND_AXE).setName(getName()).build()); + setDescription("When you really like", "killing people without", "getting your hands dirty."); + + setSupportedAttachments(Attachment.SUPPRESSOR, Attachment.GRIP, Attachment.ADVANCED_SCOPE); + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), "&6&lPurple") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.walkSpeed = 0.14; //Weapon + this.delay = 40; + + this.damage = 20; //RangedWeapon + this.meleeDamage = 6.0; //RangedWeapon + this.accuracy = 0.003; //RangedWeapon + this.magSize = 6; //RangedWeapon + this.reloadTime = 80; //RangedWeapon + this.range = 100; //RangedWeapon + this.recoil = 0.3; //RangedWeapon + this.zoom = 9; //RangedWeapon + } + + @Override + public UserRank requiredRank() { + return UserRank.ELITE; + } + + @Override + public Location spawnVisual(World world) { + Location origin = this.getOrigin(world); + + Location clickLoc = origin.clone().add(0, 0.2, 0.6); + clickLoc.setYaw(90); + ArmorStand clickable = spawnEntity(clickLoc, this, WeaponVisualStatue.VisualType.NAME); +// clickable.setVisible(true); + + Location clickLoc2 = origin.clone().add(0, 0.2, 0); + clickLoc2.setYaw(90); + ArmorStand clickable2 = spawnEntity(clickLoc2, this, WeaponVisualStatue.VisualType.NAME); +// clickable2.setVisible(true); + + Location weaponLoc = origin.clone().add(0.3, 0.28, -0.7); + ArmorStand weapon = spawnEntity(weaponLoc, this, WeaponVisualStatue.VisualType.NONE); + weapon.setArms(true); + weapon.setItemInHand(this.createItemStack().clone()); + weapon.setRightArmPose(new EulerAngle(AngleUtil.getRadianFromDegree(280), 0f, 0f)); + weapon.setMarker(true); + +// ArmorStand support = spawnEntity(origin.clone().add(-1.75, -0.34, 0.25), this, WeaponVisualStatue.VisualType.NONE); +// support.setHelmet(new ItemStack(Material.END_ROD)); +// support.setHeadPose(new EulerAngle(AngleUtil.getRadianFromDegree(300), 0f, 0f)); +// support.setMarker(true); + + return origin; + } + + @Override + public Location getOrigin(World world) { + return new Location(world, -373.5, 25.5, 235.5, 0.0f, 0.0f); + } + + @Override + public void extras(ArmorStand entity) { + entity.setMetadata("statue_Y", new FixedMetadataValue(GTM.getInstance(), 2.25)); + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/sniper/SniperRifle.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/sniper/SniperRifle.java new file mode 100644 index 0000000..598dc89 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/sniper/SniperRifle.java @@ -0,0 +1,113 @@ +package net.grandtheftmc.gtm.weapon.ranged.sniper; + +import net.grandtheftmc.core.util.AngleUtil; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.weapon.WeaponVisualStatue; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.ranged.attachment.Attachment; +import net.grandtheftmc.guns.weapon.ranged.guns.SniperWeapon; +import org.bukkit.*; +import org.bukkit.entity.ArmorStand; +import org.bukkit.metadata.FixedMetadataValue; +import org.bukkit.util.EulerAngle; + +/** + * Created by Luke Bingham on 17/07/2017. + */ +public class SniperRifle extends SniperWeapon implements WeaponVisualStatue { + + /** + * Construct a new RangedWeapon. + */ + public SniperRifle() { + super( + (short) 28, + "Sniper Rifle", //Name + WeaponType.SNIPER, //Weapon Type + AmmoType.SNIPER, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 271).build(), //ItemStack + new Sound[] { //Gun Sounds + Sound.ENTITY_IRONGOLEM_HURT, + Sound.ITEM_ARMOR_EQUIP_DIAMOND, + Sound.ITEM_ARMOR_EQUIP_DIAMOND, + Sound.BLOCK_PISTON_EXTEND, + }, + Effect.CLOUD //Particles + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.DIAMOND_PICKAXE).setName(getName()).build()); + setDescription("When you like killing", "people without getting", "your hands dirty."); + + setSupportedAttachments(Attachment.SUPPRESSOR, Attachment.GRIP, Attachment.ADVANCED_SCOPE); + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), "&6&lPurple") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.walkSpeed = 0.14; //Weapon + this.delay = 50; + + this.damage = 18; //RangedWeapon + this.meleeDamage = 5.0; //RangedWeapon + this.accuracy = 0.005; //RangedWeapon + this.magSize = 10; //RangedWeapon + this.reloadTime = 80; //RangedWeapon + this.range = 95; //RangedWeapon + this.recoil = 0.3; //RangedWeapon + this.zoom = 8; //RangedWeapon + } + + @Override + public Location spawnVisual(World world) { + Location origin = this.getOrigin(world); + + Location clickLoc = origin.clone().add(0, 0.2, -0.6); + clickLoc.setYaw(90); + ArmorStand clickable = spawnEntity(clickLoc, this, WeaponVisualStatue.VisualType.NAME); +// clickable.setVisible(true); + + Location clickLoc2 = origin.clone().add(0, 0.2, 0); + clickLoc2.setYaw(90); + ArmorStand clickable2 = spawnEntity(clickLoc2, this, WeaponVisualStatue.VisualType.NAME); +// clickable2.setVisible(true); + + Location weaponLoc = origin.clone().add(0.3, 0.28, -1.2); + ArmorStand weapon = spawnEntity(weaponLoc, this, WeaponVisualStatue.VisualType.NONE); + weapon.setArms(true); + weapon.setItemInHand(this.createItemStack().clone()); + weapon.setRightArmPose(new EulerAngle(AngleUtil.getRadianFromDegree(280), 0f, 0f)); + weapon.setMarker(true); + +// ArmorStand support = spawnEntity(origin.clone().add(-1.75, -0.34, 0.25), this, WeaponVisualStatue.VisualType.NONE); +// support.setHelmet(new ItemStack(Material.END_ROD)); +// support.setHeadPose(new EulerAngle(AngleUtil.getRadianFromDegree(300), 0f, 0f)); +// support.setMarker(true); + + return origin; + } + + @Override + public Location getOrigin(World world) { + return new Location(world, -373.5, 25.5, 233.5, 0.0f, 0.0f); + } + + @Override + public void extras(ArmorStand entity) { + entity.setMetadata("statue_Y", new FixedMetadataValue(GTM.getInstance(), 2.25)); + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/special/Clausinator.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/special/Clausinator.java new file mode 100644 index 0000000..197408c --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/special/Clausinator.java @@ -0,0 +1,51 @@ +package net.grandtheftmc.gtm.weapon.ranged.special; + +import org.bukkit.Effect; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.inventory.ItemStack; + +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.ranged.guns.PistolWeapon; + +/** + * Created by Timothy Lampen on 2017-12-12. + */ +public class Clausinator extends PistolWeapon { + public Clausinator() { + super( + (short) 50, + "Clausinator", //Name + WeaponType.CLAUSINATOR, //Weapon Type + AmmoType.NONE, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 1011).build(), + new Sound[] { //Gun Sounds + Sound.ENTITY_ZOMBIE_ATTACK_IRON_DOOR, + Sound.ITEM_ARMOR_EQUIP_DIAMOND, + Sound.ITEM_ARMOR_EQUIP_DIAMOND, + Sound.ITEM_FLINTANDSTEEL_USE, + }, + Effect.FLYING_GLYPH //Particles + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setDescription("Snowball fight!"); + + setOldItemStack(new ItemStack(Material.ACACIA_DOOR_ITEM)); + + + + this.walkSpeed = 0.1; //Weapon + this.delay = 40; //Weapon + + this.damage = 0.001; //RangedWeapon + this.meleeDamage = 3.0; //RangedWeapon + this.accuracy = 0.025; //RangedWeapon + this.magSize = 600; //RangedWeapon + this.reloadTime = 40; //RangedWeapon + this.range = 25; //RangedWeapon + this.zoom = 4; //RangedWeapon + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/special/Flamethrower.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/special/Flamethrower.java new file mode 100644 index 0000000..ea4472b --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/special/Flamethrower.java @@ -0,0 +1,85 @@ +package net.grandtheftmc.gtm.weapon.ranged.special; + +import org.bukkit.Effect; +import org.bukkit.Material; +import org.bukkit.Sound; + +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.ranged.attachment.Attachment; +import net.grandtheftmc.guns.weapon.ranged.guns.ShotgunWeapon; + +/** + * Created by Luke Bingham on 03/08/2017. + */ +public class Flamethrower extends ShotgunWeapon { + + /** + * Construct a new RangedWeapon. + */ + public Flamethrower() { + super( + (short) 40, + "Flamethrower", //Name + WeaponType.FLAMETHROWER, //TODO Weapon Type + AmmoType.NONE, //TODO AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 391).build(), //ItemStack + new Sound[] { //Gun Sounds + Sound.ITEM_FIRECHARGE_USE, + Sound.ITEM_ARMOR_EQUIP_DIAMOND, + Sound.ITEM_ARMOR_EQUIP_DIAMOND, + Sound.UI_BUTTON_CLICK, + }, + Effect.MOBSPAWNER_FLAMES //Particles + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.FLINT_AND_STEEL).setDurability((short) 10).setName(getName()).build()); + setDescription("Is it me, or is it", "getting hot in here?"); + + setSupportedAttachments(Attachment.GRIP); + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), "&6&lPurple") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.walkSpeed = 0.2; //Weapon + this.delay = 2; + + this.damage = 3.0; //RangedWeapon + this.meleeDamage = 3.0; //RangedWeapon + this.accuracy = 0.04; //RangedWeapon + this.magSize = 25; //RangedWeapon + this.reloadTime = 100; //RangedWeapon + this.range = 25; //RangedWeapon + this.recoil = 0.001; //RangedWeapon + this.zoom = 3; //RangedWeapon + this.shellSize = 5; + +// this.flamethrower = true; //SpecialWeapon +// this.rpm = 200; //SpecialWeapon + } + + @Override + public int getRpm() { + return 200; + } + + @Override + public boolean isAutomatic() { + return true; + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/special/GoldMinigun.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/special/GoldMinigun.java new file mode 100644 index 0000000..4cfc511 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/special/GoldMinigun.java @@ -0,0 +1,83 @@ +package net.grandtheftmc.gtm.weapon.ranged.special; + +import org.bukkit.Effect; +import org.bukkit.Material; +import org.bukkit.Sound; + +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.attribute.RankedWeapon; +import net.grandtheftmc.guns.weapon.ranged.attachment.Attachment; +import net.grandtheftmc.guns.weapon.ranged.guns.SpecialWeapon; + +/** + * Created by Luke Bingham on 03/08/2017. + */ +public class GoldMinigun extends SpecialWeapon implements RankedWeapon { + + /** + * Construct a new RangedWeapon. + */ + public GoldMinigun() { + super( + (short) 42, + "Gold Minigun", //Name + WeaponType.MINIGUN, //Weapon Type + AmmoType.MINIGUN, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 411).build(), //ItemStack + new Sound[] { //Gun Sounds + Sound.ENTITY_ZOMBIE_ATTACK_IRON_DOOR, + Sound.ITEM_ARMOR_EQUIP_DIAMOND, + Sound.ITEM_ARMOR_EQUIP_DIAMOND, + Sound.ITEM_FLINTANDSTEEL_USE, + }, + Effect.FLYING_GLYPH //Particles + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.DIAMOND_HOE).setDurability((short) -1/* IDK?.. */).setName(getName()).build());//TODO Unknown at the moment. + setDescription("Is it me, or is it", "getting hot in here?"); + + setSupportedAttachments(Attachment.GRIP); + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), "&6&lPurple") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.walkSpeed = 0.1; //Weapon + + this.damage = 2.25; //RangedWeapon + this.meleeDamage = 3.0; //RangedWeapon + this.accuracy = 0.05; //RangedWeapon + this.magSize = 600; //RangedWeapon + this.reloadTime = 100; //RangedWeapon + this.range = 55; //RangedWeapon + this.recoil = 0.05; //RangedWeapon + this.zoom = 3; //RangedWeapon + this.reloadShoot = true; + + this.minigun = true; //SpecialWeapon + this.rpm = 1200; //SpecialWeapon + this.rps = 20; + this.multiShoot = true; + } + + @Override + public UserRank requiredRank() { + return UserRank.SUPREME; + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/special/Handcuffs.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/special/Handcuffs.java new file mode 100644 index 0000000..e284d5f --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/special/Handcuffs.java @@ -0,0 +1,43 @@ +package net.grandtheftmc.gtm.weapon.ranged.special; + +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.inventory.ItemStack; + +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.MeleeWeapon; +import net.grandtheftmc.guns.weapon.WeaponType; + +/** + * Created by Timothy Lampen on 2017-11-22. + */ +public class Handcuffs extends MeleeWeapon { + public Handcuffs() { + super((short) 57, + "Handcuffs", + WeaponType.MELEE, + AmmoType.MELEE, + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 1003).build(), + new Sound[] { + Sound.ENTITY_SKELETON_SHOOT, + Sound.ITEM_ARMOR_EQUIP_GENERIC, + Sound.ITEM_ARMOR_EQUIP_GENERIC + }); + setOldItemStack(new ItemStack(Material.ACACIA_DOOR)); + setDescription("Multipurpose tool", "for work or for kink"); + + + this.delay = 10; + this.meleeDamage = 1.0; + } + +// @Override +// public void onHit(EntityDamageByEntityEvent event){ +// if(event.getDamager() instanceof Player && event.getEntity() instanceof Player){ +// Player player = (Player)event.getDamager(); +// Player victim = (Player)event.getEntity(); +// GTMUtils.arrestPlayer(event, this, player, victim); +// } +// } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/special/Minigun.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/special/Minigun.java new file mode 100644 index 0000000..949c205 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/ranged/special/Minigun.java @@ -0,0 +1,129 @@ +package net.grandtheftmc.gtm.weapon.ranged.special; + +import org.bukkit.Effect; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.World; +import org.bukkit.entity.ArmorStand; +import org.bukkit.inventory.ItemStack; +import org.bukkit.metadata.FixedMetadataValue; +import org.bukkit.util.EulerAngle; + +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.util.AngleUtil; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.weapon.WeaponVisualStatue; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.attribute.RankedWeapon; +import net.grandtheftmc.guns.weapon.ranged.attachment.Attachment; +import net.grandtheftmc.guns.weapon.ranged.guns.SpecialWeapon; + +/** + * Created by Luke Bingham on 17/07/2017. + */ +public class Minigun extends SpecialWeapon implements RankedWeapon, WeaponVisualStatue { + + /** + * Construct a new RangedWeapon. + */ + public Minigun() { + super( + (short) 33, + "Minigun", //Name + WeaponType.MINIGUN, //Weapon Type + AmmoType.MINIGUN, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 321).build(), //ItemStack + new Sound[] { //Gun Sounds + Sound.ENTITY_ZOMBIE_ATTACK_IRON_DOOR, + Sound.ITEM_ARMOR_EQUIP_DIAMOND, + Sound.ITEM_ARMOR_EQUIP_DIAMOND, + Sound.ITEM_FLINTANDSTEEL_USE, + }, + Effect.FLYING_GLYPH //Particles + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.DIAMOND_HOE).setName(getName()).build()); + setDescription("Say hello to my", "little friend."); + + setSupportedAttachments(Attachment.GRIP); + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), "&6&lPurple") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.walkSpeed = 0.1; //Weapon + + this.damage = 2.25; //RangedWeapon + this.meleeDamage = 3.0; //RangedWeapon + this.accuracy = 0.05; //RangedWeapon + this.magSize = 600; //RangedWeapon + this.reloadTime = 100; //RangedWeapon + this.range = 55; //RangedWeapon + this.recoil = 0.05; //RangedWeapon + this.zoom = 3; //RangedWeapon + this.reloadShoot = true; + + this.minigun = true; //SpecialWeapon + this.rpm = 1200; //SpecialWeapon + this.rps = 20; + this.multiShoot = true; + } + + @Override + public UserRank requiredRank() { + return UserRank.SUPREME; + } + + @Override + public Location spawnVisual(World world) { + Location origin = this.getOrigin(world); + + ArmorStand clickable = spawnEntity(origin.clone().add(-0.6, 0.6, 0), this, WeaponVisualStatue.VisualType.NAME); +// clickable.setVisible(true); + + ArmorStand clickable2 = spawnEntity(origin.clone().add(-1.4, 0.6, 0), this, WeaponVisualStatue.VisualType.NAME); +// clickable2.setVisible(true); + + Location weaponLoc = origin.clone().add(-0.3, 1.1, 0.4); + weaponLoc.setYaw(90.0f); + ArmorStand weapon = spawnEntity(weaponLoc, this, WeaponVisualStatue.VisualType.NONE); + weapon.setArms(true); + weapon.setItemInHand(this.createItemStack().clone()); + weapon.setRightArmPose(new EulerAngle(AngleUtil.getRadianFromDegree(315), 0f, 0f)); + weapon.setMarker(true); + + ArmorStand support = spawnEntity(origin.clone().add(-1.75, -0.34, 0.25), this, WeaponVisualStatue.VisualType.NONE); + support.setHelmet(new ItemStack(Material.END_ROD)); + support.setHeadPose(new EulerAngle(AngleUtil.getRadianFromDegree(300), 0f, 0f)); + support.setMarker(true); + + return origin; + } + + @Override + public Location getOrigin(World world) { + return new Location(world, -364.5, 25.5, 241.5, 0.0f, 0.0f); + } + + @Override + public void extras(ArmorStand entity) { + entity.setMetadata("statue_Y", new FixedMetadataValue(GTM.getInstance(), 2.25)); + entity.setMetadata("statue_X", new FixedMetadataValue(GTM.getInstance(), -1d)); + } +} diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/skins/WeaponSkinDAO.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/skins/WeaponSkinDAO.java new file mode 100644 index 0000000..c13e36c --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/skins/WeaponSkinDAO.java @@ -0,0 +1,136 @@ +package net.grandtheftmc.gtm.weapon.skins; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.guns.weapon.Weapon; +import net.grandtheftmc.guns.weapon.WeaponSkin; + +public class WeaponSkinDAO { + public static boolean lockSkin(Connection connection, UUID uuid, Weapon<?> weapon, WeaponSkin skin) { + String query = "DELETE FROM user_weapon_skin WHERE weapon_id=? AND skin_id=? AND uuid=UNHEX(?);"; + + try (PreparedStatement statement = connection.prepareStatement(query)) { + statement.setShort(1, weapon.getUniqueIdentifier()); + statement.setShort(2, (short) (skin.getIdentifier() - weapon.getWeaponIdentifier())); + statement.setString(3, uuid.toString().replaceAll("-", "")); + statement.executeUpdate(); + } catch (SQLException e) { + e.printStackTrace(); + + return false; + } + + return true; + } + + public static boolean unlockSkin(Connection connection, UUID uuid, Weapon<?> weapon, WeaponSkin skin) { + String query = "INSERT INTO user_weapon_skin (uuid, server_key, weapon_id, skin_id) VALUES (UNHEX(?), ?, ?, ?);"; + + try (PreparedStatement statement = connection.prepareStatement(query)) { + statement.setString(1, uuid.toString().replaceAll("-", "")); + statement.setString(2, Core.name().toUpperCase()); + statement.setShort(3, weapon.getUniqueIdentifier()); + statement.setShort(4, (short) (skin.getIdentifier() - weapon.getWeaponIdentifier())); + statement.executeUpdate(); + } catch (SQLException e) { + e.printStackTrace(); + + return false; + } + + return true; + } + + public static boolean enableSkin(Connection connection, UUID uuid, Weapon<?> weapon, short skinID) { + String query = "UPDATE user_weapon_skin SET enabled=1 WHERE server_key=? AND weapon_id=? AND skin_id=? AND uuid=UNHEX(?);"; + + try (PreparedStatement statement = connection.prepareStatement(query)) { + statement.setString(1, Core.name().toUpperCase()); + statement.setShort(2, weapon.getUniqueIdentifier()); + statement.setShort(3, skinID); + statement.setString(4, uuid.toString().replaceAll("-", "")); + statement.executeUpdate(); + } catch (SQLException e) { + e.printStackTrace(); + + return false; + } + + return true; + } + + public static boolean disableSkin(Connection connection, UUID uuid, Weapon<?> weapon, short skinID) { + String query = "UPDATE user_weapon_skin SET enabled=0 WHERE server_key=? AND weapon_id=? AND skin_id=? AND uuid=UNHEX(?);"; + + try (PreparedStatement statement = connection.prepareStatement(query)) { + statement.setString(1, Core.name().toUpperCase()); + statement.setShort(2, weapon.getUniqueIdentifier()); + statement.setShort(3, skinID); + statement.setString(4, uuid.toString().replaceAll("-", "")); + statement.executeUpdate(); + } catch (SQLException e) { + e.printStackTrace(); + + return false; + } + + return true; + } + + public static Map<Short, List<Short>> getUnlockedSkins(Connection connection, UUID uuid) { + Map<Short, List<Short>> skins = new HashMap<Short, List<Short>>(); + String query = "SELECT * FROM user_weapon_skin WHERE server_key=? AND uuid=UNHEX(?);"; + + try (PreparedStatement statement = connection.prepareStatement(query)) { + statement.setString(1, Core.name().toUpperCase()); + statement.setString(2, uuid.toString().replaceAll("-", "")); + + try (ResultSet result = statement.executeQuery()) { + while (result.next()) { + short weaponID = result.getShort("weapon_id"); + + if (skins.containsKey(weaponID)) { + skins.get(weaponID).add(result.getShort("skin_id")); + } else { + skins.put(weaponID, new ArrayList<Short>()); + skins.get(weaponID).add(result.getShort("skin_id")); + } + } + } + } catch (SQLException e) { + e.printStackTrace(); + } + + return skins; + } + + public static Map<Short, Short> getEquippedSkins(Connection connection, UUID uuid) { + Map<Short, Short> skins = new HashMap<Short, Short>(); + String query = "SELECT * FROM user_weapon_skin WHERE server_key=? AND uuid=UNHEX(?) AND enabled=?;"; + + try (PreparedStatement statement = connection.prepareStatement(query)) { + statement.setString(1, Core.name().toUpperCase()); + statement.setString(2, uuid.toString().replaceAll("-", "")); + statement.setShort(3, (short) 1); + + try (ResultSet result = statement.executeQuery()) { + while (result.next()) { + skins.put(result.getShort("weapon_id"), result.getShort("skin_id")); + } + } + } catch (SQLException e) { + e.printStackTrace(); + } + + return skins; + } +} \ No newline at end of file diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/skins/WeaponSkinManager.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/skins/WeaponSkinManager.java new file mode 100644 index 0000000..c170d19 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/skins/WeaponSkinManager.java @@ -0,0 +1,246 @@ +package net.grandtheftmc.gtm.weapon.skins; + +import java.util.Arrays; +import java.util.Optional; + +import net.grandtheftmc.core.util.C; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.craftbukkit.v1_12_R1.inventory.CraftItemStack; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryMoveItemEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.InventoryHolder; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import com.j0ach1mmall3.wastedguns.api.events.WeaponDropEvent; +import com.j0ach1mmall3.wastedguns.api.events.WeaponPickupEvent; + +import net.grandtheftmc.core.Utils; +import net.grandtheftmc.core.gui.ConfirmationMenu; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.users.GTMUser; +import net.grandtheftmc.guns.WeaponManager; +import net.grandtheftmc.guns.weapon.Weapon; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.minecraft.server.v1_12_R1.NBTTagCompound; + +public class WeaponSkinManager { + + public WeaponSkinManager() { + Bukkit.getPluginManager().registerEvents(new SkinListener(), GTM.getInstance()); + } + + public void updateWeaponSkin(Player player, Weapon<?> weapon, WeaponSkin skin) { + GTMUser user = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + user.equipWeaponSkin(weapon, skin); + + for (ItemStack stack : player.getInventory().getContents()) { + Optional<Weapon<?>> weaponOpt = GTM.getWastedGuns().getWeaponManager().getWeapon(stack); + + if (weaponOpt.isPresent()) { + if (weaponOpt.get().getUniqueIdentifier() == weapon.getUniqueIdentifier()) { + stack.setDurability(skin.getIdentifier()); + } + } + } + } + + public WeaponSkin getHeldItemWeaponSkin(ItemStack stack) { + WeaponManager weaponManager = GTM.getWastedGuns().getWeaponManager(); + + if (stack != null) { + Optional<Weapon<?>> weaponOpt = weaponManager.getWeapon(stack); + + if (weaponOpt.isPresent()) { + Weapon<?> weapon = weaponOpt.get(); + + if (weapon.getWeaponSkins() != null) { + for (WeaponSkin skin : weapon.getWeaponSkins()) { + if (stack.getDurability() == skin.getIdentifier()) { + return skin; + } + } + } + } + } + + return null; + } + + public WeaponSkin getWeaponSkinFromIdentifier(Weapon<?> weapon, short identifier) { + for (WeaponSkin skin : weapon.getWeaponSkins()) { + if ((skin.getIdentifier() - weapon.getWeaponIdentifier()) == identifier) { + return skin; + } + } + + return null; + } + + public ItemStack createSkinItem(Weapon<?> weapon, WeaponSkin skin) { + ItemStack stack = new ItemStack(Material.ENCHANTED_BOOK); + ItemMeta meta = stack.getItemMeta(); + + meta.setLore(Arrays.asList( + Utils.f("&7Included skin:"), + Utils.f("&8- &7" + ChatColor.stripColor(Utils.f(skin.getDisplayName())) + " (" + weapon.getName() + ")")) + ); + + String color = "&f"; + short id = (short) (skin.getIdentifier() - weapon.getWeaponIdentifier()); + if (id == 5 || id == 7) color = "&a"; + else if (id == 2 || id == 6) color = "&9"; + + meta.setDisplayName(Utils.f(color + "&lWeapon Skin")); + stack.setItemMeta(meta); + + net.minecraft.server.v1_12_R1.ItemStack nmsStack = CraftItemStack.asNMSCopy(stack); + NBTTagCompound compound = nmsStack.getTag(); + compound.setShort("weapon_id", weapon.getUniqueIdentifier()); + compound.setShort("skin_id", (short) (skin.getIdentifier() - weapon.getWeaponIdentifier())); + nmsStack.setTag(compound); + + return CraftItemStack.asBukkitCopy(nmsStack); + } + + private class SkinListener implements Listener { + @EventHandler + public void onWeaponPickup(WeaponPickupEvent event) { + ItemStack stack = event.getItem().getItemStack(); + Optional<Weapon<?>> weaponOpt = GTM.getWastedGuns().getWeaponManager().getWeapon(stack); + + if (weaponOpt.isPresent()) { + + // grab living entity + LivingEntity le = event.getLivingEntity(); + + if (le instanceof Player){ + Player player = (Player) le; + + GTMUser gtmUser = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + + if (gtmUser != null){ + // might not have any skins + WeaponSkin weaponSkin = gtmUser.getEquippedWeaponSkin(weaponOpt.get()); + + if (weaponSkin != null){ + stack.setDurability(weaponSkin.getIdentifier()); + } + } + } + } + } + + @EventHandler + public void onWeaponDrop(WeaponDropEvent event) { + ItemStack stack = event.getItemDrop().getItemStack(); +// if (stack.getType() == Material.ENCHANTED_BOOK) { +// if (event.getLivingEntity() instanceof Player) +// ((Player) event.getLivingEntity()).closeInventory(); +// } + + Optional<Weapon<?>> weaponOpt = GTM.getWastedGuns().getWeaponManager().getWeapon(stack); + + if (weaponOpt.isPresent()) { + stack.setDurability(weaponOpt.get().getWeaponIdentifier()); + } + } + + @EventHandler + public void onItemMove(InventoryMoveItemEvent event) { + InventoryHolder holder = event.getSource().getHolder(); + + if (holder instanceof Player) { + Player player = (Player) holder; + + if (event.getDestination() != player.getInventory()) { + ItemStack stack = event.getItem(); + Optional<Weapon<?>> weaponOpt = GTM.getWastedGuns().getWeaponManager().getWeapon(stack); + + if (weaponOpt.isPresent() && stack.getDurability() != 0) { + stack.setDurability(weaponOpt.get().getWeaponIdentifier()); + } + } else { + ItemStack stack = event.getItem(); + Optional<Weapon<?>> weaponOpt = GTM.getWastedGuns().getWeaponManager().getWeapon(stack); + + if (weaponOpt.isPresent()) { + stack.setDurability(GTM.getUserManager().getLoadedUser(player.getUniqueId()).getEquippedWeaponSkin(weaponOpt.get()).getIdentifier()); + } + } + } + } + + @EventHandler + public void onItemRightClick(PlayerInteractEvent event) { + if (event.getAction() == Action.LEFT_CLICK_AIR || event.getAction() == Action.RIGHT_CLICK_AIR) { + ItemStack item = event.getItem(); + + net.minecraft.server.v1_12_R1.ItemStack nmsStack = CraftItemStack.asNMSCopy(item); + NBTTagCompound compound = nmsStack.getTag(); + + if (compound != null && compound.hasKey("weapon_id") && compound.hasKey("skin_id") && item.getType() == Material.ENCHANTED_BOOK) { + + ItemStack updated = event.getPlayer().getInventory().getItemInMainHand(); + if (updated == null || updated.getType() == Material.AIR) + return; + + ConfirmationMenu menu = new ConfirmationMenu(GTM.getInstance(), event.getItem()) { + @Override + protected void onConfirm(InventoryClickEvent e, Player p) { + ItemStack updated = event.getPlayer().getInventory().getItemInMainHand(); + if (updated == null || updated.getType() == Material.AIR) + return; + + net.minecraft.server.v1_12_R1.ItemStack nmsStack = CraftItemStack.asNMSCopy(event.getItem()); + NBTTagCompound compound = nmsStack.getTag(); + + short weaponID = compound.getShort("weapon_id"); + short skinID = compound.getShort("skin_id"); + + Optional<Weapon<?>> weaponOpt = GTM.getWastedGuns().getWeaponManager().getWeaponFromUniqueIdentifier(weaponID); + if (weaponOpt.isPresent()) { + Weapon<?> weapon = weaponOpt.get(); + WeaponSkin skin = getWeaponSkinFromIdentifier(weapon, skinID); + + GTMUser user = GTM.getUserManager().getLoadedUser(p.getUniqueId()); + + if (!user.hasSkinUnlocked(weapon, skin)) { + user.unlockWeaponSkin(weapon, skin); + + for (int i = 0; i < p.getInventory().getSize(); i++) { + ItemStack found = p.getInventory().getItem(i); + if (found == null || found.getType() == Material.AIR) continue; + if (!found.isSimilar(event.getItem())) continue; + + if (found.getAmount() > 1) found.setAmount(found.getAmount() - 1); + else p.getInventory().setItem(i, new ItemStack(Material.AIR)); + break; + } +// p.getInventory().remove(event.getItem()); + p.updateInventory(); + + p.sendMessage(Utils.f("&aYou have unlocked a " + skin.getDisplayName() + " Skin &afor &6&l" + weapon.getName() + "&a! Please go to Mr Skinner at spawn to equip it.")); + } else { + p.sendMessage(Utils.f("&cYou already have this skin unlocked!")); + } + + event.setCancelled(true); + } + } + }; + + menu.open(event.getPlayer()); + } + } + } + } +} \ No newline at end of file diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/skins/menu/MainMenu.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/skins/menu/MainMenu.java new file mode 100644 index 0000000..c9cf553 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/skins/menu/MainMenu.java @@ -0,0 +1,171 @@ +package net.grandtheftmc.gtm.weapon.skins.menu; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Optional; + +import org.bukkit.ChatColor; +import org.bukkit.DyeColor; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import net.grandtheftmc.core.inventory.CoreMenu; +import net.grandtheftmc.core.inventory.button.ClickableItem; +import net.grandtheftmc.core.inventory.button.MenuItem; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.items.GameItem; +import net.grandtheftmc.gtm.users.GTMUser; +import net.grandtheftmc.gtm.weapon.melee.Dildo; +import net.grandtheftmc.gtm.weapon.ranged.special.GoldMinigun; +import net.grandtheftmc.guns.weapon.MeleeWeapon; +import net.grandtheftmc.guns.weapon.Weapon; +import net.grandtheftmc.guns.weapon.ranged.RangedWeapon; + +public class MainMenu extends CoreMenu { + private final Player holder; + private final int page; + + public MainMenu(Player holder) { + super(5, "Weapon Skins"); + + this.holder = holder; + this.page = 0; + + this.setup(); + } + + private MainMenu(Player holder, int page) { + super(5, "Weapon Skins"); + + this.holder = holder; + this.page = page; + + this.setup(); + } + + @SuppressWarnings("deprecation") + protected void setup() { + for (int i = 0; i < 45; i++) { + ItemStack stack = new ItemStack(Material.STAINED_GLASS_PANE, 1, DyeColor.BLACK.getWoolData()); + ItemMeta meta = stack.getItemMeta(); + meta.setDisplayName(""); + stack.setItemMeta(meta); + + this.addItem(new MenuItem(i, stack, false)); + } + + this.createMenuContent(); + } + + private void createMenuContent() { + List<Weapon<?>> weapons = new ArrayList<Weapon<?>>(); + List<Weapon<?>> pageWeapons = null; + + for (GameItem gameItem : GTM.getItemManager().getItems()) { + if (gameItem.getType() == GameItem.ItemType.WEAPON) { + + Optional<Weapon<?>> optional = GTM.getWastedGuns().getWeaponManager().getWeapon(gameItem.getWeaponOrVehicleOrDrug()); + + if (optional.isPresent()) { + Weapon<?> weapon = optional.get(); + + if (weapon instanceof GoldMinigun || weapon instanceof Dildo) + continue; + + if ((weapon instanceof RangedWeapon || weapon instanceof MeleeWeapon) && weapon.getWeaponSkins().length > 1) { + weapons.add(weapon); + } + } + } + } + + try { + pageWeapons = weapons.subList(this.page * 15, (this.page * 15) + 15); + } catch (IndexOutOfBoundsException e) { + pageWeapons = weapons.subList(this.page * 15, weapons.size()); + } + + int index = 11; + for (int i = 0; i < pageWeapons.size(); i++) { + Weapon<?> weapon = weapons.get(i + (this.page * 15)); + + this.addItem(new ClickableItem(index, this.createSkinButton(weapon), (player, action) -> { + new SkinsMenu(player, weapon).open(); + })); + + if (i == 4 || i == 9) { + index += 5; + } else { + index++; + } + } + + this.createNextPageButtons((int) Math.ceil((weapons.size()) / 15.0)); + this.createPreviousPageButtons(); + } + + @SuppressWarnings("deprecation") + private void createNextPageButtons(int numPages) { + for (int i = 0; i < 3; i++) { + if (numPages > 1 && (this.page + 1) < numPages) { + ItemStack stack = new ItemStack(Material.STAINED_GLASS_PANE, 1, DyeColor.LIME.getWoolData()); + ItemMeta meta = stack.getItemMeta(); + meta.setDisplayName("Next Page"); + stack.setItemMeta(meta); + + this.addItem(new ClickableItem((i * 9) + 17, stack, (player, action) -> { + new MainMenu(this.holder, this.page + 1).open(); + })); + } + } + } + + @SuppressWarnings("deprecation") + private void createPreviousPageButtons() { + for (int i = 0; i < 3; i++) { + if (this.page != 0) { + ItemStack stack = new ItemStack(Material.STAINED_GLASS_PANE, 1, DyeColor.RED.getWoolData()); + ItemMeta meta = stack.getItemMeta(); + meta.setDisplayName("Next Page"); + stack.setItemMeta(meta); + + this.addItem(new ClickableItem((i * 9) + 9, stack, (player, action) -> { + new MainMenu(this.holder, this.page - 1).open(); + })); + } + } + } + + private ItemStack createSkinButton(Weapon<?> weapon) { + ItemStack stack = weapon.createItemStack(); + ItemMeta meta = stack.getItemMeta(); + meta.setDisplayName(ChatColor.translateAlternateColorCodes('&', "&e&l" + weapon.getName())); + + int unlockedSkins = 0; + GTMUser user = GTM.getUserManager().getLoadedUser(this.holder.getUniqueId()); + + if (user.getUnlockedWeaponSkins(weapon) != null) { + unlockedSkins = user.getUnlockedWeaponSkins(weapon).size(); + } + + meta.setLore(Arrays.asList( + ChatColor.translateAlternateColorCodes('&', "&6Unlocked:&r " + (1 + unlockedSkins) + "/" + weapon.getWeaponSkins().length), " ", + ChatColor.translateAlternateColorCodes('&', "&7Click to view the skins for this weapon.") + )); + + stack.setItemMeta(meta); + + return stack; + } + + public void open() { + this.openInventory(this.holder); + } + + protected Player getHolder() { + return this.holder; + } +} \ No newline at end of file diff --git a/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/skins/menu/SkinsMenu.java b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/skins/menu/SkinsMenu.java new file mode 100644 index 0000000..5d88c3c --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/java/net/grandtheftmc/gtm/weapon/skins/menu/SkinsMenu.java @@ -0,0 +1,173 @@ +package net.grandtheftmc.gtm.weapon.skins.menu; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +import org.bukkit.ChatColor; +import org.bukkit.DyeColor; +import org.bukkit.Material; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import net.grandtheftmc.core.inventory.CoreMenu; +import net.grandtheftmc.core.inventory.button.ClickableItem; +import net.grandtheftmc.core.inventory.button.MenuItem; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.users.GTMUser; +import net.grandtheftmc.guns.weapon.Weapon; +import net.grandtheftmc.guns.weapon.WeaponSkin; + +public class SkinsMenu extends CoreMenu { + + private static final int[] SKIN_SLOTS = {11, 13, 15, 30, 32}; + + private final Player holder; + private final Weapon<?> weapon; + + public SkinsMenu(Player holder, Weapon<?> weapon) { + super(6, "Weapon Skins"); + + this.holder = holder; + this.weapon = weapon; + + this.setup(); + } + + private void setup() { + GTMUser user = GTM.getUserManager().getLoadedUser(this.holder.getUniqueId()); + List<WeaponSkin> unlockedSkins = user.getUnlockedWeaponSkins().get(this.weapon.getUniqueIdentifier()); + + for (int i = 0; i < 54; i++) { + ItemStack stack = new ItemStack(Material.STAINED_GLASS_PANE, 1, DyeColor.BLACK.getWoolData()); + ItemMeta meta = stack.getItemMeta(); + meta.setDisplayName(""); + stack.setItemMeta(meta); + + this.addItem(new MenuItem(i, stack, false)); + } + + for (int i = 0; i < this.weapon.getWeaponSkins().length; i++) { + WeaponSkin skin = this.weapon.getWeaponSkins()[i]; + + if ((unlockedSkins != null && unlockedSkins.contains(skin)) || (skin.getIdentifier() - this.weapon.getWeaponIdentifier()) == 0) { + WeaponSkin currentSkin = user.getEquippedWeaponSkin(this.weapon); + boolean selected = false; + + if (currentSkin != null) { + if (skin == currentSkin) { + selected = true; + } + } + + this.addItem(selected ? + new MenuItem(SKIN_SLOTS[i], this.createSkinStack(skin, true), false) : + new ClickableItem(SKIN_SLOTS[i], this.createSkinStack(skin, false), (player, action) -> { + GTM.getWeaponSkinManager().updateWeaponSkin(this.holder, this.weapon, skin); + + new SkinsMenu(this.holder, this.weapon).open(); + }) + ); + continue; +// if (i >= 0 && i <= 2) { +// if (!selected) { +// this.addItem(new ClickableItem(i + 12, this.createSkinStack(skin, selected), (player, action) -> { +// GTM.getWeaponSkinManager().updateWeaponSkin(this.holder, this.weapon, skin); +// +// new SkinsMenu(this.holder, this.weapon).open(); +// })); +// } else { +// this.addItem(new MenuItem(i + 12, this.createSkinStack(skin, selected), false)); +// } +// } else { +// if (!selected) { +// this.addItem(new ClickableItem(22, this.createSkinStack(skin, selected), (player, action) -> { +// GTM.getWeaponSkinManager().updateWeaponSkin(this.holder, this.weapon, skin); +// +// new SkinsMenu(this.holder, this.weapon).open(); +// })); +// } else { +// this.addItem(new MenuItem(22, this.createSkinStack(skin, selected), false)); +// } +// } + } + + this.addItem(new MenuItem(SKIN_SLOTS[i], this.createLockedSkinStack(), false)); + } + + //Back button. + this.addItem(new ClickableItem(49, this.createBackStack(), (player, action) -> new MainMenu(player).open())); + } + + private ItemStack createBackStack() { + ItemStack stack = new ItemStack(Material.REDSTONE, 1); + + ItemMeta meta = stack.getItemMeta(); + meta.setDisplayName(ChatColor.translateAlternateColorCodes('&', "&c&lBack")); + meta.setLore(Collections.singletonList( + ChatColor.translateAlternateColorCodes('&', "&7Return to the home page!") + )); + + stack.setItemMeta(meta); + + return stack; + } + + private ItemStack createSkinStack(WeaponSkin skin, boolean selected) { + ItemStack stack = this.weapon.createItemStack(skin); + + ItemMeta meta = stack.getItemMeta(); + meta.setDisplayName(ChatColor.translateAlternateColorCodes('&', skin.getDisplayName())); + + if (selected) { + meta.setLore(Arrays.asList( + ChatColor.translateAlternateColorCodes('&', "&7This is the currently selected skin"), + ChatColor.translateAlternateColorCodes('&', "&7for this weapon.") + )); + + meta.addEnchant(Enchantment.SILK_TOUCH, 1, false); + meta.addItemFlags(ItemFlag.HIDE_ENCHANTS); + } + else { + meta.setLore(Collections.singletonList( + ChatColor.translateAlternateColorCodes('&', "&7Click to change the selected skin.") + )); + } + + stack.setItemMeta(meta); + + return stack; + } + + private ItemStack createLockedSkinStack() { + ItemStack stack = new ItemStack(Material.STRING); + + ItemMeta meta = stack.getItemMeta(); + meta.setDisplayName(ChatColor.translateAlternateColorCodes('&', "&4&l????")); + meta.setLore(Arrays.asList( + ChatColor.translateAlternateColorCodes('&', "&7Unknown skin. Find it at the following places:"), + ChatColor.translateAlternateColorCodes('&', "&8- &7Skin Crates"), + ChatColor.translateAlternateColorCodes('&', "&8- &7Loot Chests"), + ChatColor.translateAlternateColorCodes('&', "&8- &7Crowbar Crates") + )); + + stack.setItemMeta(meta); + + return stack; + } + + public void open() { + this.openInventory(this.holder); + } + + protected Player getHolder() { + return this.holder; + } + + protected Weapon<?> getWeapon() { + return this.weapon; + } +} \ No newline at end of file diff --git a/gtm-master@bf01c650f8f/src/main/resources/barrels.yml b/gtm-master@bf01c650f8f/src/main/resources/barrels.yml new file mode 100644 index 0000000..ef3597d --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/resources/barrels.yml @@ -0,0 +1 @@ +barrels: diff --git a/gtm-master@bf01c650f8f/src/main/resources/bounties.yml b/gtm-master@bf01c650f8f/src/main/resources/bounties.yml new file mode 100644 index 0000000..6c37909 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/resources/bounties.yml @@ -0,0 +1,11 @@ +0e4a6028-3d9a-4a2e-9797-eb1ddcb0aca9: + name: Presidentx + placers: + b5d6834b-465b-4593-8b8d-c2cba400015c: + name: Samuri629 + amount: 10000 + anonymous: true + 5c8bb461-a075-4526-b0e1-e3a701c2dc98: + name: 2Legiit4U + amount: 5000 + anonymous: false \ No newline at end of file diff --git a/gtm-master@bf01c650f8f/src/main/resources/christmasdrops.yml b/gtm-master@bf01c650f8f/src/main/resources/christmasdrops.yml new file mode 100644 index 0000000..ff316dd --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/resources/christmasdrops.yml @@ -0,0 +1,2 @@ +locs: + - "spawn,1,1,1" \ No newline at end of file diff --git a/gtm-master@bf01c650f8f/src/main/resources/drugblocks.yml b/gtm-master@bf01c650f8f/src/main/resources/drugblocks.yml new file mode 100644 index 0000000..6a40527 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/resources/drugblocks.yml @@ -0,0 +1 @@ +blocks: diff --git a/gtm-master@bf01c650f8f/src/main/resources/drugdealer.yml b/gtm-master@bf01c650f8f/src/main/resources/drugdealer.yml new file mode 100644 index 0000000..edc2c23 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/resources/drugdealer.yml @@ -0,0 +1,57 @@ +drugs: + alcohol: + min: 10 + max: 20 + chance: 50 + minprice: 100 + maxprice: 100 + roofied_chocolate: + min: 15 + max: 45 + chance: 50 + minprice: 125 + maxprice: 320 + cocaine: + min: 5 + max: 19 + chance: 50 + minprice: 400 + maxprice: 750 + lsd: + min: 13 + max: 54 + chance: 50 + minprice: 250 + maxprice: 500 + mdma: + min: 1 + max: 89 + chance: 50 + minprice: 75 + maxprice: 150 + weed: + min: 43 + max: 910 + chance: 50 + minprice: 75 + maxprice: 150 + heroin: + min: 10 + max: 23 + chance: 12 + minprice: 250 + maxprice: 500 + meth: + min: 10 + max: 23 + chance: 43 + minprice: 250 + maxprice: 500 + "anabolic steroids": + min: 3 + max: 129 + chance: 100 + minprice: 500 + maxprice: 1000 + +locs: diff --git a/gtm-master@bf01c650f8f/src/main/resources/gtm.yml b/gtm-master@bf01c650f8f/src/main/resources/gtm.yml new file mode 100644 index 0000000..54ca728 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/resources/gtm.yml @@ -0,0 +1 @@ +map: test \ No newline at end of file diff --git a/gtm-master@bf01c650f8f/src/main/resources/items.yml b/gtm-master@bf01c650f8f/src/main/resources/items.yml new file mode 100644 index 0000000..e69de29 diff --git a/gtm-master@bf01c650f8f/src/main/resources/kits.yml b/gtm-master@bf01c650f8f/src/main/resources/kits.yml new file mode 100644 index 0000000..116d3e7 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/resources/kits.yml @@ -0,0 +1,13 @@ +hobo: + delay: 300 + items: + - chicken + - beef,pork +kak: + cost: 50 + delay: 300 + items: + - chicken + - beef:40,pork:50 +vip: + delay: 86400 \ No newline at end of file diff --git a/gtm-master@bf01c650f8f/src/main/resources/loot.yml b/gtm-master@bf01c650f8f/src/main/resources/loot.yml new file mode 100644 index 0000000..3f468b8 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/resources/loot.yml @@ -0,0 +1,6 @@ +loot: + chicken: + chance: 5 + min: 2 + max: 5 +lootcrates: {} \ No newline at end of file diff --git a/gtm-master@bf01c650f8f/src/main/resources/lootcrates.yml b/gtm-master@bf01c650f8f/src/main/resources/lootcrates.yml new file mode 100644 index 0000000..5a61cd1 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/resources/lootcrates.yml @@ -0,0 +1,2 @@ +lootcrates: +cooldown: 30 \ No newline at end of file diff --git a/gtm-master@bf01c650f8f/src/main/resources/plugin.yml b/gtm-master@bf01c650f8f/src/main/resources/plugin.yml new file mode 100644 index 0000000..ba51112 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/resources/plugin.yml @@ -0,0 +1,76 @@ +name: GTM +version: 1.0 +description: GTMPlugin +author: Presidentx +main: net.grandtheftmc.gtm.GTM +depend: [Core,ProtocolLib,JLib,WastedGuns,WastedVehicles,BuycraftX] +commands: + ammo: + lootcrates: + aliases: ["lc", "lootc", "lcrates", "lootcrate", "lcrate"] + warp: + spawn: + gtmadmin: + gameitem: + aliases: [gi, gamei, gitem] + kit: + aliases: [kits] + shop: + gtmrank: + rankup: + drugcheck: + aliases: [dc] + drugdealer: + gangadmin: + aliases: [ga, ganga, gadmin] + gangchat: + aliases: ["gc", "gangc", "gchat"] + money: + aliases: [bal,balance,eco,economy,cash] + pay: + tpa: + tpahere: + tpaccept: + aliases: [tpyes] + tpdeny: + aliases: [tpdeny] + permits: + kill: + suicide: + picker: + aliases: [modepicker, armorstandpicker] + feed: + aliases: [eat,food,saturate] + vehicle: + aliases: [wv, vehicles, wastedvehicles, wastedvehicle, wvehicle, wvehicles, wastedv] + backpack: + aliases: [bp, backp, bpack] + bribe: + aliases: [bail] + reset: + tokenshop: + antiaura: + clear: + aliases: [clearinventory, cleari, ci, clearinv] + fix: + aliases: [repair] + near: + teleport: + aliases: [tp, tpo] + spectator: + aliases: [gm3staff, spectatormode] + backup: + lottery: + speed: + chunkunload: + topkillers: + stats: + aliases: [stat] + resourcepack: + aliases: [respack, rp, texturepack, texpack] + drugs: + aliases: [drug] + gtmranks: + aliases: [ranks] + stack: + event: \ No newline at end of file diff --git a/gtm-master@bf01c650f8f/src/main/resources/rules.yml b/gtm-master@bf01c650f8f/src/main/resources/rules.yml new file mode 100644 index 0000000..7da18e6 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/resources/rules.yml @@ -0,0 +1,5 @@ +rules: + - "" + - "" + - "" + - "" \ No newline at end of file diff --git a/gtm-master@bf01c650f8f/src/main/resources/salemenus.yml b/gtm-master@bf01c650f8f/src/main/resources/salemenus.yml new file mode 100644 index 0000000..61dcfd6 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/resources/salemenus.yml @@ -0,0 +1,60 @@ +#sale-menu-name: +# menu-title: +# subcategories: +# subcategoryA: +# category-name: +# display-item: +# subcategories: +# subcategoryAa: +# category-name: +# display-item: +# sale-items: +# -game-item-name +# -game-item-name +# -game-item-name +# subcategoryAb: +# category-name: +# display-item: +# subcategories: +# subcategoryAba: +# category-name: +# display-item: +# sale-items: +# -game-item-name +# -game-item-name +# -game-item-name +# +#All subcategories MUST terminate with a sale-items array. + +weapons: + menu-title: "&a&lWeapons" + subcategories: + smgs: + display-item: 267 + sale-items: + - smg + - microsmg + - assaultsmg + - combatpdw + rifles: + display-item: 272 + sale-items: + - assaultrifle + - carbinerifle + pistols: + display-item: 268 + sale-items: + - pistol + - stungun + - combatpistol + - heavypistol + - marksmanpistol + shotguns: + display-item: 284 + sale-items: + - sawedoffshotgun + - pumpshotgun + - assaultshotgun + - heavyshotgun + + \ No newline at end of file diff --git a/gtm-master@bf01c650f8f/src/main/resources/warps.yml b/gtm-master@bf01c650f8f/src/main/resources/warps.yml new file mode 100644 index 0000000..5b73fb1 --- /dev/null +++ b/gtm-master@bf01c650f8f/src/main/resources/warps.yml @@ -0,0 +1,3 @@ +firstSpawn: spawn,0,0,0,0,0 +spawn: spawn,0,50,0,0,0 +warps: {} \ No newline at end of file diff --git a/houses-master@c2d95d8e6a6/.gitignore b/houses-master@c2d95d8e6a6/.gitignore new file mode 100644 index 0000000..49750e2 --- /dev/null +++ b/houses-master@c2d95d8e6a6/.gitignore @@ -0,0 +1,103 @@ + +\.idea/ + +target/classes/ + +target/ + +*.iml + +/bin/ +/build/ + +##### Gradle ##### +.gradle +# Ignore Gradle GUI config +gradle-app.setting + +# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) +!gradle-wrapper.jar + +# Cache of project +.gradletasknamecache + +# # Work around https://youtrack.jetbrains.com/issue/IDEA-116898 +# gradle/wrapper/gradle-wrapper.properties + +##### Eclipse ##### +.metadata +bin/ +tmp/ +*.tmp +*.bak +*.swp +*~.nib +local.properties +.settings/ +.loadpath +.recommenders + +.project + +# External tool builders +.externalToolBuilders/ + +# Locally stored "Eclipse launch configurations" +*.launch + +# PyDev specific (Python IDE for Eclipse) +*.pydevproject + +# CDT-specific (C/C++ Development Tooling) +.cproject + +# JDT-specific (Eclipse Java Development Tools) +.classpath + +# Java annotation processor (APT) +.factorypath + +# PDT-specific (PHP Development Tools) +.buildpath + +# sbteclipse plugin +.target + +# Tern plugin +.tern-project + +# TeXlipse plugin +.texlipse + +# STS (Spring Tool Suite) +.springBeans + +# Code Recommenders +.recommenders/ + +*.class + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files # +*.jar +*.war +*.ear + + +##### IntelliJ ##### +*.iml +*.ipr +*.iws +.idea/ + +##### NetBeans ##### +/.nb-gradle/ + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* + +##### MacOS ##### +.DS_Store + diff --git a/houses-master@c2d95d8e6a6/README.md b/houses-master@c2d95d8e6a6/README.md new file mode 100644 index 0000000..fdaec0e --- /dev/null +++ b/houses-master@c2d95d8e6a6/README.md @@ -0,0 +1 @@ +First commit. \ No newline at end of file diff --git a/houses-master@c2d95d8e6a6/pom.xml b/houses-master@c2d95d8e6a6/pom.xml new file mode 100644 index 0000000..0fb0f5d --- /dev/null +++ b/houses-master@c2d95d8e6a6/pom.xml @@ -0,0 +1,128 @@ +<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + + <groupId>net.grandtheftmc</groupId> + <artifactId>houses</artifactId> + <version>1.0.5</version> + <name>Houses</name> + + <repositories> + <repository> + <id>spigot-repo</id> + <url>https://hub.spigotmc.org/nexus/content/repositories/public/</url> + </repository> + <repository> + <id>jitpack.io</id> + <url>https://jitpack.io</url> + </repository> + <repository> + <id>sk89q-repo</id> + <url>>http://maven.sk89q.com/repo/</url> + </repository> + <repository> + <id>nexus-release</id> + <url>http://nexus.grandtheftmc.net/content/repositories/releases</url> + </repository> + </repositories> + + <distributionManagement> + <repository> + <id>nexus-release</id> + <name>Internal Releases</name> + <url>http://nexus.grandtheftmc.net/content/repositories/releases</url> + </repository> + <snapshotRepository> + <id>nexus-snapshot</id> + <name>Internal Snapshots</name> + <url>http://nexus.grandtheftmc.net/content/repositories/snapshots</url> + </snapshotRepository> + </distributionManagement> + + <dependencies> + <dependency> + <groupId>com.sk89q.worldedit</groupId> + <artifactId>worldedit-bukkit</artifactId> + <version>6.1.5</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>net.grandtheftmc</groupId> + <artifactId>wastedguns</artifactId> + <version>1.0.9.rewrite</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>org.spigotmc</groupId> + <artifactId>spigot-api</artifactId> + <version>LATEST</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>com.github.j0ach1mmall3</groupId> + <artifactId>JLib</artifactId> + <version>LATEST</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>net.grandtheftmc</groupId> + <artifactId>core</artifactId> + <version>2.3.2.develop</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>net.grandtheftmc</groupId> + <artifactId>gtm</artifactId> + <version>2.4</version> + <scope>provided</scope> + </dependency> + </dependencies> + + <properties> + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + <maven.compiler.source>1.8</maven.compiler.source> + <maven.compiler.target>1.8</maven.compiler.target> + </properties> + + <build> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-shade-plugin</artifactId> + <configuration> + <finalName>Houses</finalName> + </configuration> + <executions> + <execution> + <phase>package</phase> + <goals> + <goal>shade</goal> + </goals> + </execution> + </executions> + </plugin> + + <!-- Nexus deploy --> + <plugin> + <groupId>org.sonatype.plugins</groupId> + <artifactId>nexus-staging-maven-plugin</artifactId> + <version>1.6.8</version> + <extensions>true</extensions> + <executions> + <execution> + <id>default-deploy</id> + <phase>deploy</phase> + <goals> + <goal>deploy</goal> + </goals> + </execution> + </executions> + <configuration> + <serverId>nexus</serverId> + <nexusUrl>http://nexus.grandtheftmc.net/</nexusUrl> + <skipStaging>true</skipStaging> + </configuration> + </plugin> + </plugins> + </build> +</project> \ No newline at end of file diff --git a/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/HouseUtils.java b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/HouseUtils.java new file mode 100644 index 0000000..3f6f5c2 --- /dev/null +++ b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/HouseUtils.java @@ -0,0 +1,220 @@ +package net.grandtheftmc.houses; + +import com.google.common.collect.Lists; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.menus.MenuManager; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.houses.houses.House; +import net.grandtheftmc.houses.houses.PremiumHouse; +import net.grandtheftmc.houses.users.HouseUser; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.block.Block; +import org.bukkit.entity.Player; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +public final class HouseUtils { + + private HouseUtils() { + } + + public static void openHouseMenu(Player player, House house, HouseUser user) { + if (player == null || house == null) + return; + player.sendMessage(Utils.f(Lang.HOUSES + "&7Opening up the menu for house &a" + house.getId() + "&7.")); + user.setMenuHouseId(house.getId()); + MenuManager.openMenu(player, "house"); + + } + + public static void openPremiumHouseMenu(Player player, PremiumHouse house, HouseUser user) { + if (player == null || house == null) + return; + player.sendMessage(Utils.f(Lang.HOUSES + "&7Opening up the menu for premium house &a" + house.getId() + "&7.")); + user.setMenuHouseId(house.getId()); + MenuManager.openMenu(player, "premiumhouse"); + } + + public static void openPremiumHouseGuestMenu(Player player, PremiumHouse house, HouseUser user) { + if (player == null || house == null) + return; + player.sendMessage( + Utils.f(Lang.HOUSES + "&7Opening up the guest menu for premium house &a" + house.getId() + "&7.")); + user.setMenuHouseId(house.getId()); + MenuManager.openMenu(player, "guests"); + } + + public static void openChangeBlocksMenu(Player player, PremiumHouse house, HouseUser user) { + if (player == null || house == null) + return; + player.sendMessage( + Utils.f(Lang.HOUSES + "&7Opening up the change blocks menu for premium house &a" + house.getId() + "&7.")); + user.setMenuHouseId(house.getId()); + MenuManager.openMenu(player, "editblocks"); + } + + public static void openAddGuestMenu(Player player, PremiumHouse house) { + + } + + public static void openRemoveGuestMenu(Player player, PremiumHouse house, HouseUser user) { + if (player == null || house == null) + return; + player.sendMessage(Utils + .f(Lang.HOUSES + "&7Opening up the remove guest menu for premium house &a" + house.getId() + "&7.")); + user.setMenuHouseId(house.getId()); + MenuManager.openMenu(player, "removeguests"); + } + + public static void openHousesMenu(Player player, HouseUser user) { + if (player == null) + return; + player.sendMessage(Utils.f(Lang.HOUSES + "&7Opening up the houses menu.")); + MenuManager.openMenu(player, "houses"); + } + + public static void openHelpMenu(Player player) { + if (player == null) + return; + player.sendMessage(Utils.f(Lang.HOUSES + "&7Opening up the houses help menu.")); + MenuManager.openMenu(player, "houseshelp"); + } + + public static int getHouses(UserRank userRank) { + switch (userRank) { + case DEFAULT: + return 0; + case VIP: + return 1; + case PREMIUM: + return 2; + case ELITE: + return 3; + case SPONSOR: + return 5; + default: + return 10; + } + } + + public static int getHouseDelay(UserRank userRank) { + switch (userRank) { + case DEFAULT: + return 60; + case VIP: + return 50; + case PREMIUM: + return 40; + case ELITE: + return 30; + default: + return 12; + } + } + + public static Collection<Block> getBlocks(Location loc1, Location loc2) { + Collection<Block> blocks = new ArrayList<>(); + + int topBlockX = (loc1.getBlockX() < loc2.getBlockX() ? loc2.getBlockX() : loc1.getBlockX()); + int bottomBlockX = (loc1.getBlockX() > loc2.getBlockX() ? loc2.getBlockX() : loc1.getBlockX()); + + int topBlockY = (loc1.getBlockY() < loc2.getBlockY() ? loc2.getBlockY() : loc1.getBlockY()); + int bottomBlockY = (loc1.getBlockY() > loc2.getBlockY() ? loc2.getBlockY() : loc1.getBlockY()); + + int topBlockZ = (loc1.getBlockZ() < loc2.getBlockZ() ? loc2.getBlockZ() : loc1.getBlockZ()); + int bottomBlockZ = (loc1.getBlockZ() > loc2.getBlockZ() ? loc2.getBlockZ() : loc1.getBlockZ()); + + for (int x = bottomBlockX; x <= topBlockX; x++) { + for (int z = bottomBlockZ; z <= topBlockZ; z++) { + for (int y = bottomBlockY; y <= topBlockY; y++) { + Block block = loc1.getWorld().getBlockAt(x, y, z); + blocks.add(block); + } + } + } + + return blocks; + } + + public static JSONObject dataToJson(KeyVal<String, String>[] keyVal) { + JSONObject json = new JSONObject(); + for (KeyVal<String, String> obj : keyVal) { + json.append(obj.getKey(), obj.getVal()); + } + return json; + } + + public static JSONObject dataToJson(String data) { + if (data == null) return new JSONObject(); + + try { + JSONObject object = new JSONObject(data); + return object; + } catch (Exception e) { + return new JSONObject(); + } + } + + public static Location getLocationFromString(String data) { + String[] s = data.split(","); + World w = Bukkit.getWorld(s[0]); + double x = Double.parseDouble(s[1]), y = Double.parseDouble(s[2]), z = Double.parseDouble(s[3]); + if (s.length > 4) { + double yaw = Double.parseDouble(s[4]), pitch = Double.parseDouble(s[5]); + return new Location(w, x, y, z, (float)yaw, (float)pitch); + } + return new Location(w, x, y, z); + } + + public static Location[] getLocationArrayFromString(String data) { + List<Location> locationList = Lists.newArrayList(); + + for(String loc : data.split(";")) { + String[] s = loc.split(","); + World w = Bukkit.getWorld(s[0]); + double x = Double.parseDouble(s[1]), y = Double.parseDouble(s[2]), z = Double.parseDouble(s[3]); + if (s.length > 4) { + double yaw = Double.parseDouble(s[4]), pitch = Double.parseDouble(s[5]); + locationList.add(new Location(w, x, y, z, (float) yaw, (float) pitch)); + } + locationList.add(new Location(w, x, y, z)); + } + + return locationList.toArray(new Location[locationList.size()]); + } + + public static String locationToString(Location location) { + return location.getWorld().getName() + "," + location.getX() + "," + location.getY() + "," + location.getZ() + "," + location.getYaw() + "," + location.getPitch(); + } + + public static String locationsToString(List<Location> locations) { + StringBuilder str = new StringBuilder(); + for (Location l : locations) { + str.append(l.getWorld().getName()).append(",") + .append(l.getX()).append(",") + .append(l.getY()).append(",") + .append(l.getZ()).append(",") + .append(l.getYaw()).append(",") + .append(l.getPitch()).append(";"); + } + + str.setLength(str.length() - 1); + return str.toString(); + } + + public static boolean locEqualsLoc(Location loc1, Location loc2, boolean pitchYaw) { + if (loc1 == null || loc2 == null) return false; + if (!loc1.getWorld().equals(loc2.getWorld())) return false; + if (loc1.getX() == loc2.getX() && loc1.getY() == loc2.getY() && loc1.getZ() == loc2.getZ()) { + if (pitchYaw) return loc1.getPitch() == loc2.getPitch() && loc1.getYaw() == loc2.getYaw(); + return true; + } + return false; + } +} diff --git a/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/Houses.java b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/Houses.java new file mode 100644 index 0000000..5745a03 --- /dev/null +++ b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/Houses.java @@ -0,0 +1,233 @@ +package net.grandtheftmc.houses; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.SQLException; +import java.util.Optional; +import java.util.logging.Level; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.entity.Player; +import org.bukkit.event.HandlerList; +import org.bukkit.plugin.PluginManager; +import org.bukkit.plugin.java.JavaPlugin; + +import com.sk89q.worldedit.bukkit.WorldEditPlugin; + +import net.grandtheftmc.core.database.BaseDatabase; +import net.grandtheftmc.core.menus.MenuManager; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.gtm.GTMUtils; +import net.grandtheftmc.houses.commands.HouseChestCommand; +import net.grandtheftmc.houses.commands.HouseDisableCommand; +import net.grandtheftmc.houses.commands.HouseDoorCommand; +import net.grandtheftmc.houses.commands.HouseSignCommand; +import net.grandtheftmc.houses.commands.HouseTrashcanCommand; +import net.grandtheftmc.houses.commands.HousesCommand; +import net.grandtheftmc.houses.houses.HousesManager; +import net.grandtheftmc.houses.listeners.BreakBlock; +import net.grandtheftmc.houses.listeners.Chat; +import net.grandtheftmc.houses.listeners.Damage; +import net.grandtheftmc.houses.listeners.Death; +import net.grandtheftmc.houses.listeners.Interact; +import net.grandtheftmc.houses.listeners.InventoryClose; +import net.grandtheftmc.houses.listeners.InventoryInteract; +import net.grandtheftmc.houses.listeners.Join; +import net.grandtheftmc.houses.listeners.Leave; +import net.grandtheftmc.houses.listeners.Login; +import net.grandtheftmc.houses.listeners.MenuListener; +import net.grandtheftmc.houses.listeners.PetListener; +import net.grandtheftmc.houses.listeners.Teleport; +import net.grandtheftmc.houses.listeners.WeaponShoot; +import net.grandtheftmc.houses.users.HouseUser; +import net.grandtheftmc.houses.users.HouseUserManager; +import net.grandtheftmc.houses.users.UserHouse; + +public class Houses extends JavaPlugin { + + public static boolean ENABLED = true; + + private static Houses instance; + + private static HouseUserManager um; + private static HousesManager hm; + + private static HousesSettings settings; + private static WorldEditPlugin worldEditPlugin; + + public static Houses getInstance() { + return instance; + } + + public static HouseUserManager getUserManager() { + return um; + } + + public static HousesManager getManager() { + return hm; + } + + public static HousesManager getHousesManager() { + return hm; + } + + public static HousesSettings getSettings() { + return settings; + } + + public static void log(String s) { + Houses.getInstance().getLogger().log(Level.ALL, s); + } + + public static void error(String s) { + Houses.getInstance().getLogger().log(Level.SEVERE, s); + } + + public static Optional<WorldEditPlugin> getWorldEdit() { + return Optional.of(worldEditPlugin); + } + + @Override + public void onEnable() { + instance = this; + settings = new HousesSettings(); + this.load(); + this.setupDatabase(); + um = new HouseUserManager(); + hm = new HousesManager(); + + this.registerListeners(); + this.registerCommands(); + } + + @Override + public void onDisable() { + + System.out.println("[Houses] Disabling houses..."); + + HandlerList.unregisterAll(this); + + // note that this is sync because any async calls will not run + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + for (Player player : Bukkit.getOnlinePlayers()) { + if (player.getOpenInventory() == null) return; + + // TODO remove later + System.out.println("[Houses] Player " + player.getName() + " has open inventory: " + player.getOpenInventory().getTitle()); + + // TODO remove later + if (player.getOpenInventory() != null && player.getOpenInventory().getTopInventory() != null){ + System.out.println("[Houses] Player " + player.getName() + " has open TOP inventory: " + player.getOpenInventory().getTopInventory().getTitle()); + } + + HouseUser user = Houses.getUserManager().getLoadedUser(player.getUniqueId()); + if (user != null){ + System.out.println("[Houses] Player " + player.getName() + " is inside house: " + user.isInsideHouse() + " and lastChest=" + user.getLastChestId()); + } + + if (user.isInsideHouse() && user.getLastChestId() != -1) { + + // TODO remove later + System.out.println("[Houses] Player " + player.getName() + " is inside house with last chest ID: " + user.getLastChestId()); + + // If chest is open. + if (player.getOpenInventory() != null && player.getOpenInventory().getTopInventory() != null) { + String name = ChatColor.stripColor(player.getOpenInventory().getTopInventory().getTitle()).toLowerCase(); + + // TODO remove later + System.out.println("[Houses] Player " + player.getName() + " top inventory stripped: " + name); + + if (!name.contains("chest:")) continue; + + UserHouse house = user.getUserHouse(user.getInsideHouse()); + + // TODO remove later + System.out.println("[Houses] Player " + player.getName() + " is inside house id=" + house.getId() + " with chest id=" + user.getLastChestId()); + + try (PreparedStatement statement = connection.prepareStatement( + "UPDATE gtm_house_chest SET content=? WHERE house_id=? AND uuid=UNHEX(?) AND chest_id=?")) { + statement.setString(1, GTMUtils.toBase64(player.getOpenInventory().getTopInventory().getContents())); + statement.setInt(2, house.getUniqueId()); + statement.setString(3, player.getUniqueId().toString().replaceAll("-", "")); + statement.setInt(4, user.getLastChestId()); + + statement.executeUpdate(); + } catch (SQLException e) { + e.printStackTrace(); + } + + player.closeInventory(); + } + } + } + } catch (SQLException e) { + e.printStackTrace(); + } + + this.save(); + } + + private void load() { + settings.setHousesConfig(Utils.loadConfig("houses")); + settings.setPremiumHousesConfig(Utils.loadConfig("premiumHouses")); + this.setupDatabase(); + this.loadMenus(); + if(Bukkit.getPluginManager().getPlugin("WorldEdit") != null) { + worldEditPlugin = (WorldEditPlugin)Bukkit.getPluginManager().getPlugin("WorldEdit"); + } + } + + private void save() { + hm.save(); + } + + private void registerListeners() { + PluginManager pm = Bukkit.getPluginManager(); + pm.registerEvents(new BreakBlock(), this); + pm.registerEvents(new Damage(), this); + pm.registerEvents(new Death(), this); + pm.registerEvents(new Interact(), this); + pm.registerEvents(new InventoryClose(), this); + pm.registerEvents(new InventoryInteract(), this); + pm.registerEvents(new Join(), this); + pm.registerEvents(new Leave(), this); + pm.registerEvents(new Login(this), this); + pm.registerEvents(new Teleport(), this); + pm.registerEvents(new MenuListener(), this); + pm.registerEvents(new PetListener(), this); + pm.registerEvents(new Chat(), this); + pm.registerEvents(new WeaponShoot(), this); + } + + private void registerCommands() { + this.getCommand("houses").setExecutor(new HousesCommand()); + this.getCommand("premiumhouses").setExecutor(new HousesCommand()); + this.getCommand("housechest").setExecutor(new HouseChestCommand()); + this.getCommand("housedoor").setExecutor(new HouseDoorCommand()); + this.getCommand("housesign").setExecutor(new HouseSignCommand()); + this.getCommand("housetrashcan").setExecutor(new HouseTrashcanCommand()); + new HouseDisableCommand(); + } + + public void setupDatabase() { +// BaseDatabase.runCustomQuery("create table if not exists " + Core.name() + "_houses(uuid varchar(255), name varchar(255), houseId integer)"); +// BaseDatabase.runCustomQuery("create table if not exists " + Core.name() + "_houses_chests(uuid varchar(255), houseId integer, chestId integer, contents blob);"); + } + + private void loadMenus() { + MenuManager.addMenu("houses", 54, "&3&lMy Houses"); + MenuManager.addMenu("house", 54, "&3&lHouse"); + MenuManager.addMenu("premiumhouse", 54, "&3&lPremium House"); + MenuManager.addMenu("buyhouse", 54, "&3&lBuy House"); + MenuManager.addMenu("buypremiumhouse", 54, "&3&lBuy Premium House"); + MenuManager.addMenu("sellhouse", 54, "&3&lSell House"); + MenuManager.addMenu("sellpremiumhouse", 54, "&3&lSell Premium House"); + MenuManager.addMenu("guests", 54, "&3&lPremium House Guests"); + MenuManager.addMenu("removeguests", 54, "&3&lRemove Guests"); + MenuManager.addMenu("houseshelp", 54, "&3&lHouses Help"); + MenuManager.addMenu("editblocks", 54, "&3&lChange Blocks"); + MenuManager.addMenu("buytrashcan", 54, "&3&lBuy Trashcan"); + MenuManager.addMenu("confirmtrashcanbuy", 54, "&3&lConfirm Purchase"); + } +} diff --git a/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/HousesSettings.java b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/HousesSettings.java new file mode 100644 index 0000000..e1cae5b --- /dev/null +++ b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/HousesSettings.java @@ -0,0 +1,24 @@ +package net.grandtheftmc.houses; + +import org.bukkit.configuration.file.YamlConfiguration; + +public class HousesSettings { + private YamlConfiguration housesConfig; + private YamlConfiguration premiumHousesConfig; + + public YamlConfiguration getHousesConfig() { + return this.housesConfig; + } + + public void setHousesConfig(YamlConfiguration c) { + this.housesConfig = c; + } + public YamlConfiguration getPremiumHousesConfig() { + return this.premiumHousesConfig; + } + + public void setPremiumHousesConfig(YamlConfiguration c) { + this.premiumHousesConfig = c; + } + +} diff --git a/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/JSONHelper.java b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/JSONHelper.java new file mode 100644 index 0000000..641249a --- /dev/null +++ b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/JSONHelper.java @@ -0,0 +1,31 @@ +package net.grandtheftmc.houses; + +import org.json.JSONObject; + +public class JSONHelper { + + private final JSONObject object; + + public JSONHelper() { + this.object = new JSONObject(); + } + + public JSONHelper put(String k, int v) { + object.put(k, v); + return this; + } + + public JSONHelper put(String k, String v) { + object.put(k, v); + return this; + } + + public JSONHelper put(String k, boolean v) { + object.put(k, v); + return this; + } + + public String string() { + return object.toString(); + } +} diff --git a/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/KeyVal.java b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/KeyVal.java new file mode 100644 index 0000000..f1e29fa --- /dev/null +++ b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/KeyVal.java @@ -0,0 +1,19 @@ +package net.grandtheftmc.houses; + +public class KeyVal<K, V> { + private final K key; + private final V val; + + public KeyVal(K key, V val) { + this.key = key; + this.val = val; + } + + public K getKey() { + return key; + } + + public V getVal() { + return val; + } +} diff --git a/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/commands/HouseChestCommand.java b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/commands/HouseChestCommand.java new file mode 100644 index 0000000..1c1dc80 --- /dev/null +++ b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/commands/HouseChestCommand.java @@ -0,0 +1,156 @@ +package net.grandtheftmc.houses.commands; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.houses.Houses; +import net.grandtheftmc.houses.houses.House; +import net.grandtheftmc.houses.houses.HouseChest; +import net.grandtheftmc.houses.houses.PremiumHouse; +import net.grandtheftmc.houses.houses.PremiumHouseChest; +import net.grandtheftmc.houses.users.HouseUser; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.List; +import java.util.UUID; + +public class HouseChestCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command cmd, String label, String[] args) { + if (!(s instanceof Player)) { + s.sendMessage(Utils.f("&cYou are not a player!")); + return true; + } + Player player = (Player) s; + UUID uuid = player.getUniqueId(); + if (!s.hasPermission("houses.admin")) { + s.sendMessage(Utils.f("&cYou don't have permission to execute this command!")); + return true; + } + if (args.length == 0) { + s.sendMessage(Utils.f(Lang.HOUSES + "&7&lChests Help")); + s.sendMessage(Utils.f("&3/housechest&7 add")); + s.sendMessage(Utils.f("&3/housechest&7 remove")); + s.sendMessage(Utils.f("&3/housechest&7 removeall")); + s.sendMessage(Utils.f("&3/housechest&7 stop")); + s.sendMessage(Utils.f("&3/housechest&7 list")); + return true; + } + HouseUser user = Houses.getUserManager().getLoadedUser(uuid); + House house = user.getEditingHouse(); + PremiumHouse premiumHouse = user.getEditingPremiumHouse(); + if (house == null && premiumHouse == null) { + s.sendMessage(Utils.f(Lang.HOUSES + "&7You are not editing any house! Use &3/house edit &a<id>&7.")); + return true; + } + switch (args[0].toLowerCase()) { + case "add": + if (args.length != 1) { + s.sendMessage(Utils.f("&c/housechest add")); + return true; + } + user.setAddingChests(true); + user.setRemovingChests(false); + s.sendMessage(Utils.f(Lang.HOUSES + "&7Right click chests to add them!")); + return true; + case "remove": + if (args.length != 1) { + s.sendMessage(Utils.f("&c/housechest add")); + return true; + } + user.setRemovingChests(true); + user.setAddingChests(false); + s.sendMessage(Utils.f(Lang.HOUSES + + "&7Right click chests to remove them! Warning: removing a chest will remove all stored items for all owners from that chest!")); + return true; + case "removeall": + if (args.length > 2) { + s.sendMessage(Utils.f("&c/housechest removeall")); + return true; + } + if (args.length == 1) { + s.sendMessage(Utils.f(Lang.HOUSES + + "&7Are you sure? This will delete all chests and their contents for all owners of this house! Type &3/house removeall confirm&7 to proceed...")); + return true; + } + if (!"confirm".equalsIgnoreCase(args[1])) { + s.sendMessage(Utils.f("&c/housechest removeall")); + return true; + } + if (house == null) { + premiumHouse.removeAllChests(); + s.sendMessage(Utils.f(Lang.HOUSES + "&7All chests were removed from this premium house.")); + return true; + } + house.removeAllChests(); + s.sendMessage(Utils.f(Lang.HOUSES + "&7All chests were removed from this house.")); + return true; + case "stop": + if (args.length != 1) { + s.sendMessage(Utils.f("&c/housechest stop")); + return true; + } + user.setRemovingChests(false); + user.setAddingChests(false); + s.sendMessage(Utils.f(Lang.HOUSES + "&7You are no longer adding/removing chests to/from " + + (house == null ? "premium house &a" + premiumHouse.getId() : "house &a" + house.getId()) + + "&7.")); + return true; + case "list": + int page = 1; + if (args.length > 1) { + try { + page = Integer.parseInt(args[1]); + } catch (NumberFormatException e) { + page = 1; + } + } + int start = (page << 3) - 7; + int end = page << 3; + if (house == null) { + List<PremiumHouseChest> chests = user.getEditingPremiumHouse().getChests(start, end); + s.sendMessage(Utils.f(Lang.HOUSES + "&3&lPage &a" + page + " &3&lTotal Premium Chests: &a" + + user.getEditingPremiumHouse().getChests().size())); + for (PremiumHouseChest chest : chests) + s.sendMessage(Utils.f(" &3&lID: &a" + chest.getId() + " &3&lLocation 1: &a" + + Utils.blockLocationToString(chest.getLoc1()) + (chest.getLoc2() == null ? "" : " &3&lLocation 2: &a" + Utils.blockLocationToString(chest.getLoc2())))); + return true; + } + List<HouseChest> chests = user.getEditingHouse().getChests(start, end); + s.sendMessage(Utils.f(Lang.HOUSES + "&3&lPage &a" + page + " &3&lTotal Chests: &a" + + user.getEditingHouse().getChests().size())); + for (HouseChest chest : chests) + s.sendMessage(Utils.f(" &3&lID: &a" + chest.getId() + " &3&lLocation 1: &a" + + Utils.blockLocationToString(chest.getLoc1()) + (chest.getLoc2() == null ? "" : " &3&lLocation 2: &a" + Utils.blockLocationToString(chest.getLoc2())))); + return true; + case "clear": + if (args.length == 1) { + premiumHouse.getChests().forEach(premiumHouseChest -> { + premiumHouseChest.clear(); + player.sendMessage(Lang.HOUSES.f("&7Cleared chest &a" + premiumHouseChest.getId() + + " &7of premium house &a" + premiumHouse.getId())); + }); + } else if (args[1].equalsIgnoreCase("all")) { + Houses.getHousesManager().getPremiumHouses().forEach(targetHouse -> { + targetHouse.getChests().forEach(premiumHouseChest -> { + premiumHouseChest.clear(); + player.sendMessage(Lang.HOUSES.f("&7Cleared chest &a" + premiumHouseChest.getId() + + " &7of premium house &a" + targetHouse.getId())); + }); + }); + } + return true; + default: + s.sendMessage(Utils.f(Lang.HOUSES + "&7&lChests Help")); + s.sendMessage(Utils.f("&3/housechest&7 add")); + s.sendMessage(Utils.f("&3/housechest&7 remove")); + s.sendMessage(Utils.f("&3/housechest&7 removeall")); + s.sendMessage(Utils.f("&3/housechest&7 stop")); + s.sendMessage(Utils.f("&3/housechest&7 list")); + return true; + } + } +} diff --git a/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/commands/HouseDisableCommand.java b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/commands/HouseDisableCommand.java new file mode 100644 index 0000000..b4db7a8 --- /dev/null +++ b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/commands/HouseDisableCommand.java @@ -0,0 +1,26 @@ +package net.grandtheftmc.houses.commands; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.commands.CoreCommand; +import net.grandtheftmc.core.commands.RankedCommand; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.houses.Houses; +import org.bukkit.entity.Player; + +public class HouseDisableCommand extends CoreCommand<Player> implements RankedCommand { + + public HouseDisableCommand() { + super("housedisable", "Temp command to disable house features."); + } + + @Override + public void execute(Player sender, String[] strings) { + Houses.ENABLED = !Houses.ENABLED; + sender.sendMessage(Lang.HOUSES.f("&cBuying/Selling & Info editing is " + (Houses.ENABLED ? "Enabled." : "Disabled!"))); + } + + @Override + public UserRank requiredRank() { + return UserRank.ADMIN; + } +} diff --git a/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/commands/HouseDoorCommand.java b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/commands/HouseDoorCommand.java new file mode 100644 index 0000000..a00ad45 --- /dev/null +++ b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/commands/HouseDoorCommand.java @@ -0,0 +1,227 @@ +package net.grandtheftmc.houses.commands; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.houses.Houses; +import net.grandtheftmc.houses.houses.House; +import net.grandtheftmc.houses.houses.HouseDoor; +import net.grandtheftmc.houses.houses.PremiumHouse; +import net.grandtheftmc.houses.houses.PremiumHouseDoor; +import net.grandtheftmc.houses.users.HouseUser; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.List; +import java.util.UUID; + +public class HouseDoorCommand implements CommandExecutor { + @Override + public boolean onCommand(CommandSender s, Command cmd, String label, String[] args) { + if (!s.hasPermission("houses.admin") ) { + s.sendMessage(Utils.f("&cYou don't have permission to execute this command!")); + return true; + } + if (!(s instanceof Player)) { + s.sendMessage(Utils.f("&cYou are not a player!")); + return true; + } + if (args.length == 0) { + s.sendMessage(Utils.f(Lang.HOUSES + "&7&lChests Help")); + s.sendMessage(Utils.f("&3/housedoor&7 add")); + s.sendMessage(Utils.f("&3/housedoor&7 remove &a(id)")); + s.sendMessage(Utils.f("&3/housedoor&7 stop")); + s.sendMessage(Utils.f("&3/housedoor&7 removeall")); + s.sendMessage(Utils.f("&3/housedoor&7 list")); + return true; + } + Player player = (Player) s; + UUID uuid = player.getUniqueId(); + HouseUser user = Houses.getUserManager().getLoadedUser(uuid); + House house = user.getEditingHouse(); + PremiumHouse premiumHouse = user.getEditingPremiumHouse(); + if (house == null && premiumHouse == null) { + s.sendMessage(Utils.f(Lang.HOUSES + "&7You are not editing any house! Use &3/house edit &a<id>&7.")); + return true; + } + switch (args[0].toLowerCase()) { + case "add": { + if (args.length != 1) { + s.sendMessage(Utils.f("&c/housedoor add")); + return true; + } + + if (house == null) { + premiumHouse.addDoor(result -> { + if (result == null) return; + + ServerUtil.runTask(() -> { + user.setAddingPremiumDoor(result); + s.sendMessage(Utils.f(Lang.HOUSES + "&7You are adding a door with id &a" + result.getId() + "&7. Please right click the door to add it. After that, right click to set the outside location and left click to set the inside location.")); + }); + }); +// user.setAddingPremiumDoor(door); +// s.sendMessage(Utils.f(Lang.HOUSES + "&7You are adding a door with id &a" + door.getId() +// + "&7. Please right click the door to add it. After that, right click to set the outside location and left click to set the inside location.")); + return true; + } + + house.addDoor(result -> { + if (result != null) { + ServerUtil.runTask(() -> { + user.setAddingDoor(result); + s.sendMessage(Utils.f(Lang.HOUSES + "&7You are adding a door with id " + result.getId() + ". Please right click the door to add it. After that, right click to set the outside location and left click to set the inside location.")); + }); + } + }); + +// user.setAddingDoor(door); +// s.sendMessage(Utils.f(Lang.HOUSES + "&7You are adding a door with id " + door.getId() +// + ". Please right click the door to add it. After that, right click to set the outside location and left click to set the inside location.")); + return true; + } + case "remove": + if (args.length == 2) { + int id; + try { + id = Integer.parseInt(args[1]); + } catch (NumberFormatException e) { + s.sendMessage(Lang.HOUSES.f("&7The id must be a number!")); + return true; + } + if (house == null) { + PremiumHouseDoor door = premiumHouse.getDoor(id); + if (door == null) { + s.sendMessage(Lang.HOUSES.f("&7No door with id &a" + id + "&7 exists in this premium house!")); + return true; + } + premiumHouse.removeDoor(door); + player.sendMessage(Utils.f(Lang.HOUSES + "&7You removed a door with id &a" + door.getId() + + "&7 from premium house &a" + premiumHouse.getId() + "&7.")); + return true; + } + HouseDoor door = house.getDoor(id); + if (door == null) { + s.sendMessage(Lang.HOUSES.f("&7No door with id &a" + id + "&7 exists in this house!")); + return true; + } + house.removeDoor(door); + player.sendMessage(Utils.f(Lang.HOUSES + "&7You removed a door with id &a" + door.getId() + + "&7 from house &a" + premiumHouse.getId() + "&7.")); + return true; + + } + if (args.length != 1) { + s.sendMessage(Utils.f("&c/housedoor remove")); + return true; + } + user.setRemovingDoor(true); + user.setAddingDoor(null); + s.sendMessage(Utils.f(Lang.HOUSES + "&7Right click doors to remove them!")); + return true; + + case "removeall": + if (args.length > 2) { + s.sendMessage(Utils.f("&c/housedoor removeall")); + return true; + } + if (args.length == 1) { + s.sendMessage(Utils.f(Lang.HOUSES + "&7Are you sure you want to do this? Type &3/" + label + + " removeall confirm&7 to proceed...")); + return true; + } + if (!"confirm".equals(args[1])) { + s.sendMessage(Utils.f("&c/housedoor removeall")); + return true; + } + if (house == null) { + premiumHouse.removeAllDoors(); + player.sendMessage(Utils.f( + Lang.HOUSES + "&7You removed all doors from premium house &a" + premiumHouse.getId() + "&7.")); + return true; + } + house.removeAllDoors(); + player.sendMessage( + Utils.f(Lang.HOUSES + "&7You removed all doors from house &a" + premiumHouse.getId() + "&7.")); + return true; + + case "stop": + if (args.length != 1) { + s.sendMessage(Utils.f("&c/housedoor add")); + return true; + } + if (house == null) { + if (user.isAddingPremiumDoor()) { + premiumHouse.removeDoor(user.getAddingPremiumDoor()); + user.setAddingPremiumDoor(null); + s.sendMessage(Lang.HOUSES.f("&7The door you were adding was deleted from premium house &a" + + premiumHouse.getId() + "&7.")); + return true; + } else if (user.isRemovingDoor()) { + user.setRemovingDoor(false); + s.sendMessage(Lang.HOUSES.f( + "&7You are no longer removing doors from premium house &a" + premiumHouse.getId() + "&7.")); + return true; + } + s.sendMessage(Lang.HOUSES.f("&7You are not adding/removing doors!")); + return true; + } + if (user.isAddingDoor()) { + house.removeDoor(user.getAddingDoor()); + user.setAddingDoor(null); + s.sendMessage( + Lang.HOUSES.f("&7The door you were adding was deleted from house &a" + house.getId() + "&7.")); + return true; + } else if (user.isRemovingDoor()) { + user.setRemovingDoor(false); + s.sendMessage( + Lang.HOUSES.f("&7You are no longer removing doors from house &a" + house.getId() + "&7.")); + return true; + } + s.sendMessage(Lang.HOUSES.f("&7You are not adding/removing doors!")); + return true; + case "list": + int page = 1; + if (args.length > 1) { + try { + page = Integer.parseInt(args[1]); + } catch (NumberFormatException ignored) { + } + } + int start = (page << 3) - 7; + int end = page << 3; + if (house == null) { + List<PremiumHouseDoor> doors = user.getEditingPremiumHouse().getDoors(start, + end); + s.sendMessage(Utils.f(Lang.HOUSES + "&3&lPage &a" + page + " &3&lTotal Premium Doors: &a" + + premiumHouse.getDoors().size())); + for (PremiumHouseDoor door : doors) + s.sendMessage(Utils.f(" &3&lID: &a" + door.getId() + " &3&lLocation: &a" + + Utils.blockLocationToString(door.getLocation()) + " &3&lOutside: &a" + + Utils.teleportLocationToString(door.getOutsideLocation()) + " &3&lInside: &a" + + Utils.teleportLocationToString(door.getInsideLocation()))); + return true; + } + List<HouseDoor> doors = user.getEditingHouse().getDoors(start, + end); + s.sendMessage( + Utils.f(Lang.HOUSES + "&3&lPage &a" + page + " &3&lTotal Doors: &a" + house.getDoors().size())); + for (HouseDoor door : doors) + s.sendMessage(Utils.f(" &3&lID: &a" + door.getId() + " &3&lLocation: &a" + + Utils.blockLocationToString(door.getLocation()) + " &3&lOutside: &a" + + Utils.teleportLocationToString(door.getOutsideLocation()) + " &3&lInside: &a" + + Utils.teleportLocationToString(door.getInsideLocation()))); + return true; + default: + s.sendMessage(Utils.f(Lang.HOUSES + "&7&lChests Help")); + s.sendMessage(Utils.f("&3/housedoor&7 add")); + s.sendMessage(Utils.f("&3/housedoor&7 remove")); + s.sendMessage(Utils.f("&3/housedoor&7 stop")); + s.sendMessage(Utils.f("&3/housedoor&7 removeall")); + s.sendMessage(Utils.f("&3/housedoor&7 list")); + return true; + } + } +} diff --git a/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/commands/HouseSignCommand.java b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/commands/HouseSignCommand.java new file mode 100644 index 0000000..8975ce3 --- /dev/null +++ b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/commands/HouseSignCommand.java @@ -0,0 +1,181 @@ +package net.grandtheftmc.houses.commands; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.houses.Houses; +import net.grandtheftmc.houses.houses.House; +import net.grandtheftmc.houses.houses.HouseSign; +import net.grandtheftmc.houses.houses.PremiumHouse; +import net.grandtheftmc.houses.users.HouseUser; +import org.bukkit.Location; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.List; +import java.util.UUID; + +public class HouseSignCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command cmd, String label, String[] args) { + if (!s.hasPermission("houses.admin") ) { + s.sendMessage(Utils.f("&cYou don't have permission to execute this command!")); + return true; + } + if (!(s instanceof Player)) { + s.sendMessage(Utils.f("&cYou are not a player!")); + return true; + } + Player player = (Player) s; + UUID uuid = player.getUniqueId(); + if (args.length == 0) { + s.sendMessage(Utils.f(Lang.HOUSES + "&7&lSigns Help")); + s.sendMessage(Utils.f("&3/housesign&7 add")); + s.sendMessage(Utils.f("&3/housesign&7 remove")); + s.sendMessage(Utils.f("&3/housesign&7 removeall")); + s.sendMessage(Utils.f("&3/housesign&7 stop")); + s.sendMessage(Utils.f("&3/housesign&7 list")); + s.sendMessage(Utils.f("&3/housesign&7 update &a<all>")); + return true; + } + HouseUser user = Houses.getUserManager().getLoadedUser(uuid); + House house = user.getEditingHouse(); + PremiumHouse premiumHouse = user.getEditingPremiumHouse(); + switch (args[0].toLowerCase()) { + case "add": + if (house == null && premiumHouse == null) { + s.sendMessage(Utils.f(Lang.HOUSES + "&7You are not editing any house! Use &3/house edit &a<id>&7.")); + return true; + } + if (args.length != 1) { + s.sendMessage(Utils.f("&c/housesign add")); + return true; + } + user.setAddingSigns(true); + user.setRemovingSigns(false); + s.sendMessage(Utils.f(Lang.HOUSES + "&7Right click signs to add them!")); + return true; + case "remove": + if (house == null && premiumHouse == null) { + s.sendMessage(Utils.f(Lang.HOUSES + "&7You are not editing any house! Use &3/house edit &a<id>&7.")); + return true; + } + if (args.length != 1) { + s.sendMessage(Utils.f("&c/housesign add")); + return true; + } + user.setRemovingSigns(true); + user.setAddingChests(false); + s.sendMessage(Utils.f(Lang.HOUSES + + "&7Right click signs to remove them!")); + return true; + case "removeall": + if (house == null && premiumHouse == null) { + s.sendMessage(Utils.f(Lang.HOUSES + "&7You are not editing any house! Use &3/house edit &a<id>&7.")); + return true; + } + if (args.length > 2) { + s.sendMessage(Utils.f("&c/housesign removeall")); + return true; + } + if (args.length == 1) { + s.sendMessage(Utils.f(Lang.HOUSES + + "&7Are you sure? This will delete all signs of this house! Type &3/housesign removeall confirm&7 to proceed...")); + return true; + } + if (!"confirm".equalsIgnoreCase(args[1])) { + s.sendMessage(Utils.f("&c/housesign removeall")); + return true; + } + if (house == null) { + premiumHouse.removeAllSigns(); + s.sendMessage(Utils.f(Lang.HOUSES + "&7All signs were removed from this premium house.")); + return true; + } + house.removeAllSigns(); + s.sendMessage(Utils.f(Lang.HOUSES + "&7All signs were removed from this house.")); + return true; + case "stop": + if (house == null && premiumHouse == null) { + s.sendMessage(Utils.f(Lang.HOUSES + "&7You are not editing any house! Use &3/house edit &a<id>&7.")); + return true; + } + if (args.length != 1) { + s.sendMessage(Utils.f("&c/housesign stop")); + return true; + } + user.setRemovingSigns(false); + user.setAddingSigns(false); + s.sendMessage(Utils.f(Lang.HOUSES + "&7You are no longer adding/removing signs to/from " + + (house == null ? "premium house &a" + premiumHouse.getId() : "house &a" + house.getId()) + + "&7.")); + return true; + case "list": + if (house == null && premiumHouse == null) { + s.sendMessage(Utils.f(Lang.HOUSES + "&7You are not editing any house! Use &3/house edit &a<id>&7.")); + return true; + } + int page = 1; + if (args.length > 1) { + try { + page = Integer.parseInt(args[1]); + } catch (NumberFormatException e) { + page = 1; + } + } + int start = (page << 3) - 8; + int end = (page << 3) - 1; + + if (house == null) { + int size = user.getEditingPremiumHouse().getSigns().size(); + List<HouseSign> signs = user.getEditingPremiumHouse().getSigns(start, end > size ? size : end); + s.sendMessage(Utils.f(Lang.HOUSES + "&3&lPage &a" + page + " &3&lTotal Premium House Signs: &a" + user.getEditingPremiumHouse().getSigns().size())); + for (HouseSign loc : signs) + s.sendMessage(Utils.f(" &3&lLocation: &a" + Utils.blockLocationToString(loc.getLocation()))); + return true; + } + + int size = user.getEditingHouse().getSigns().size(); + List<HouseSign> signs = user.getEditingHouse().getSigns().subList(start, end > size ? size : end); + s.sendMessage(Utils.f(Lang.HOUSES + "&3&lPage &a" + page + " &3&lTotal House Signs: &a" + user.getEditingHouse().getSigns().size())); + for (HouseSign loc : signs) + s.sendMessage(Utils.f(" &3&lLocation: &a" + Utils.blockLocationToString(loc.getLocation()))); + return true; + + case "update": + if (user.getEditingPremiumHouse() != null) { + PremiumHouse premHouse = user.getEditingPremiumHouse(); + premHouse.updateSigns(); + s.sendMessage(Utils.f(Lang.HOUSES + "&7You updated the signs of premium house &a" + premHouse.getId())); + return true; + } else if (user.getEditingHouse() != null) { + house = user.getEditingHouse(); + house.updateSigns(); + s.sendMessage(Utils.f(Lang.HOUSES + "&7You updated the signs of house &a" + house.getId())); + } else { + if (args.length == 2) { + if (args[1].equalsIgnoreCase("all")) { + Houses.getHousesManager().getPremiumHouses().forEach(PremiumHouse::updateSigns); + s.sendMessage(Utils.f(Lang.HOUSES + "&7You updated the signs of &aALL &7premium houses")); + } else { + s.sendMessage(Utils.f("&3/housesign&7 update <all>")); + } + return true; + } + s.sendMessage(Utils.f(Lang.HOUSES + "&7You are not editing any house!")); + } + return true; + default: + s.sendMessage(Utils.f(Lang.HOUSES + "&7&lChests Help")); + s.sendMessage(Utils.f("&3/housesign&7 add")); + s.sendMessage(Utils.f("&3/housesign&7 remove")); + s.sendMessage(Utils.f("&3/housesign&7 removeall")); + s.sendMessage(Utils.f("&3/housesign&7 stop")); + s.sendMessage(Utils.f("&3/housesign&7 list")); + s.sendMessage(Utils.f("&3/housesign&7 update &a<all>")); + return true; + } + } +} diff --git a/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/commands/HouseTrashcanCommand.java b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/commands/HouseTrashcanCommand.java new file mode 100644 index 0000000..c1c1b90 --- /dev/null +++ b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/commands/HouseTrashcanCommand.java @@ -0,0 +1,80 @@ +package net.grandtheftmc.houses.commands; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.houses.Houses; +import net.grandtheftmc.houses.houses.PremiumHouse; +import net.grandtheftmc.houses.users.HouseUser; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.UUID; + +public class HouseTrashcanCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command cmd, String label, String[] args) { + if (!(s instanceof Player)) { + s.sendMessage(Utils.f("&cYou are not a player!")); + return true; + } + Player player = (Player) s; + UUID uuid = player.getUniqueId(); + if (!s.hasPermission("houses.admin")) { + s.sendMessage(Utils.f("&cYou don't have permission to execute this command!")); + return true; + } + if (args.length == 0) { + s.sendMessage(Utils.f(Lang.HOUSES + "&7&lTrashCan Help")); + s.sendMessage(Utils.f("&3/housetrashcan&7 add")); + s.sendMessage(Utils.f("&3/housetrashcan&7 remove")); + s.sendMessage(Utils.f("&3/housetrashcan&7 stop")); + return true; + } + HouseUser user = Houses.getUserManager().getLoadedUser(uuid); + PremiumHouse premiumHouse = user.getEditingPremiumHouse(); + if (premiumHouse == null) { + s.sendMessage(Utils.f(Lang.HOUSES + "&7You are not editing any house! Use &3/house edit &a<id>&7.")); + return true; + } + switch (args[0].toLowerCase()) { + case "add": + if (args.length != 1) { + s.sendMessage(Utils.f("&c/housetrashcan add")); + return true; + } + user.setAddingTrashcans(true); + user.setRemovingTrashcans(false); + s.sendMessage(Utils.f(Lang.HOUSES + "&7Right click trashcans to add them!")); + return true; + case "remove": + if (args.length != 1) { + s.sendMessage(Utils.f("&c/housechest add")); + return true; + } + user.setRemovingTrashcans(true); + user.setAddingTrashcans(false); + s.sendMessage(Utils.f(Lang.HOUSES + + "&7Right click trashcans to remove them!")); + return true; + case "stop": + if (args.length != 1) { + s.sendMessage(Utils.f("&c/housechest stop")); + return true; + } + user.setRemovingTrashcans(false); + user.setAddingTrashcans(false); + s.sendMessage(Utils.f(Lang.HOUSES + "&7You are no longer adding/removing trashcans to/from " + + "premium house &a" + premiumHouse.getId())); + return true; + default: + s.sendMessage(Utils.f(Lang.HOUSES + "&7&lTrashCan Help")); + s.sendMessage(Utils.f("&3/housetrashcan&7 add")); + s.sendMessage(Utils.f("&3/housetrashcan&7 remove")); + s.sendMessage(Utils.f("&3/housetrashcan&7 stop")); + return true; + } + } +} \ No newline at end of file diff --git a/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/commands/HousesCommand.java b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/commands/HousesCommand.java new file mode 100644 index 0000000..1183291 --- /dev/null +++ b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/commands/HousesCommand.java @@ -0,0 +1,942 @@ +package net.grandtheftmc.houses.commands; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Objects; +import java.util.UUID; +import java.util.stream.Collectors; + +import org.bukkit.Bukkit; +import org.bukkit.block.Block; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitRunnable; + +import com.sk89q.worldedit.bukkit.WorldEditPlugin; +import com.sk89q.worldedit.bukkit.selections.Selection; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.users.UserDAO; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.houses.HouseUtils; +import net.grandtheftmc.houses.Houses; +import net.grandtheftmc.houses.houses.Blocks; +import net.grandtheftmc.houses.houses.EditableBlock; +import net.grandtheftmc.houses.houses.House; +import net.grandtheftmc.houses.houses.HouseDoor; +import net.grandtheftmc.houses.houses.HousesManager; +import net.grandtheftmc.houses.houses.PremiumHouse; +import net.grandtheftmc.houses.houses.PremiumHouseDoor; +import net.grandtheftmc.houses.houses.PremiumHouseGuest; +import net.grandtheftmc.houses.users.HouseUser; +import net.grandtheftmc.houses.users.UserHouse; + +public class HousesCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command cmd, String label, String[] args) { + boolean isPremium = "premiumhouses".equalsIgnoreCase(cmd.getName()); + if (args.length == 0) { + if (!s.hasPermission("houses.admin.all")) { + s.sendMessage(Utils.f("&cYou don't have permission to execute this command!")); + return true; + } + s.sendMessage(Lang.HOUSES.f("&7&lHouses Help")); + s.sendMessage(Utils.f("&3/" + label + "&7 add")); + s.sendMessage(Utils.f("&3/" + label + "&7 edit &a<id>")); + s.sendMessage(Utils.f("&3/" + label + "&7 stop")); + s.sendMessage(Utils.f("&3/" + label + "&7 setprice &a<price>")); + s.sendMessage(Utils.f("&3/" + label + "&7 remove &a<id>")); + s.sendMessage(Utils.f("&3/" + label + "&7 list &a[page]")); + s.sendMessage(Utils.f("&3/" + label + "&7 setowner &a<id> <player>")); + s.sendMessage(Utils.f("&3/" + label + "&7 removeowner &a<id>" + (isPremium ? "" : " <player>"))); + s.sendMessage(Utils.f("&3/" + label + "&7 tp &a<id>")); + s.sendMessage(Utils.f("&3/" + label + "&7 info &a<id>")); + if (isPremium) { + s.sendMessage(Utils.f("&3/" + label + "&7 owner &a<id>")); + s.sendMessage(Utils.f("&3/" + label + "&7 addblocks/delblocks &a<we>")); + s.sendMessage(Utils.f("&3/" + label + "&7 reset &a<id>")); + } + s.sendMessage(Utils.f("&3/" + label + "&7 player &a<player>")); + return true; + } + HousesManager hm = Houses.getManager(); + if (!s.hasPermission("houses.admin.all")) { + if (!s.hasPermission("houses.admin." + args[0].toLowerCase())) { + s.sendMessage(Utils.f("&cYou don't have permission to execute this command!")); + return true; + } + } + switch (args[0].toLowerCase()) { + case "add": { + if (!(s instanceof Player)) { + s.sendMessage(Utils.f("&cYou are not a player!")); + return true; + } + Player player = (Player) s; + UUID uuid = player.getUniqueId(); + HouseUser user = Houses.getUserManager().getLoadedUser(uuid); + if (args.length != 1) { + s.sendMessage(Utils.f("&c/" + label + " add")); + return true; + } + if (isPremium) { + hm.createPremiumHouse(result -> { + if (result == null) { + ServerUtil.runTask(() -> s.sendMessage("Something went wrong, contact Luke. (#err02784)")); + return; + } + + ServerUtil.runTask(() -> { + user.setEditingHouse(null); + user.setEditingPremiumHouse(result); + Core.getUserManager().getLoadedUser(uuid).setEditMode(true); + s.sendMessage(Utils.f(Lang.HOUSES + "&7A premium house with id &a" + result.getId() + "&7 has been created! You are now editing this premium house, you should set the price, add doors and add chests.")); + }); + }); + return true; + } + hm.createHouse(result -> { + if (result == null) { + ServerUtil.runTask(() -> s.sendMessage("Something went wrong, contact Luke. (#err02783)")); + return; + } + + ServerUtil.runTask(() -> { + user.setEditingHouse(result); + user.setEditingPremiumHouse(null); + Core.getUserManager().getLoadedUser(uuid).setEditMode(true); + s.sendMessage(Utils.f(Lang.HOUSES + "&7A house with id &a" + result.getId() + "&7 has been created! You are now editing this house, you should set the price, add doors and add chests.")); + }); + }); +// user.setEditingHouse(house); +// user.setEditingPremiumHouse(null); +// Core.getUserManager().getLoadedUser(uuid).setEditMode(true); +// s.sendMessage(Utils.f(Lang.HOUSES + "&7A house with id &a" + house.getId() +// + "&7 has been created! You are now editing this house, you should set the price, add doors and add chests.")); + return true; + } + case "edit": { + if (!(s instanceof Player)) { + s.sendMessage(Utils.f("&cYou are not a player!")); + return true; + } + Player player = (Player) s; + UUID uuid = player.getUniqueId(); + HouseUser user = Houses.getUserManager().getLoadedUser(uuid); + if (args.length != 2) { + s.sendMessage(Utils.f("&c/" + label + " edit <id>")); + return true; + } + int id; + try { + id = Integer.parseInt(args[1]); + } catch (NumberFormatException e) { + s.sendMessage(Utils.f(Lang.HOUSES + "&7The id must be a number!")); + return true; + } + if (id < 1) { + s.sendMessage(Utils.f(Lang.HOUSES + "&7The id must be bigger than 0!")); + return true; + } + if (isPremium) { + PremiumHouse house = hm.getPremiumHouse(id); + if (house == null) { + s.sendMessage(Utils.f(Lang.HOUSES + "&7No premium house with that ID exists!")); + return true; + } + user.setAddingChests(false); + user.setAddingDoor(null); + user.setAddingPremiumDoor(null); + user.setRemovingChests(false); + user.setRemovingDoor(false); + user.setEditingPremiumHouse(house); + user.setEditingHouse(null); + Core.getUserManager().getLoadedUser(uuid).setEditMode(true); + s.sendMessage(Utils.f(Lang.HOUSES + "&7You are now editing premium house &a" + house.getId() + "&7.")); + return true; + } + House house = hm.getHouse(id); + if (house == null) { + s.sendMessage(Utils.f(Lang.HOUSES + "&7No house with that ID exists!")); + return true; + } + user.setAddingChests(false); + user.setAddingDoor(null); + user.setAddingPremiumDoor(null); + user.setRemovingChests(false); + user.setRemovingDoor(false); + user.setEditingPremiumHouse(null); + user.setEditingHouse(house); + Core.getUserManager().getLoadedUser(uuid).setEditMode(true); + s.sendMessage(Utils.f(Lang.HOUSES + "&7You are now editing house &a" + house.getId() + "&7.")); + return true; + + } + case "stop": { + if (!(s instanceof Player)) { + s.sendMessage(Utils.f("&cYou are not a player!")); + return true; + } + if (args.length != 1) { + s.sendMessage(Utils.f("&c/" + label + " stop <id>")); + return true; + } + Player player = (Player) s; + UUID uuid = player.getUniqueId(); + HouseUser user = Houses.getUserManager().getLoadedUser(uuid); + if (isPremium) { + PremiumHouse premiumHouse = user.getEditingPremiumHouse(); + if (premiumHouse == null) { + s.sendMessage(Utils.f(Lang.HOUSES + "&7You are not editing any premium house!")); + return true; + } + user.setAddingChests(false); + user.setAddingDoor(null); + user.setAddingPremiumDoor(null); + user.setRemovingChests(false); + user.setRemovingDoor(false); + user.setEditingHouse(null); + user.setEditingPremiumHouse(null); + s.sendMessage(Utils.f( + Lang.HOUSES + "&7You are no longer editing premium house &a" + premiumHouse.getId() + "&7.")); + return true; + } + House house = user.getEditingHouse(); + if (house == null) { + s.sendMessage(Utils.f(Lang.HOUSES + "&7You are not editing any house!")); + return true; + } + user.setAddingChests(false); + user.setAddingDoor(null); + user.setAddingPremiumDoor(null); + user.setRemovingChests(false); + user.setRemovingDoor(false); + user.setEditingHouse(null); + user.setEditingPremiumHouse(null); + s.sendMessage(Utils.f(Lang.HOUSES + "&7You are no longer editing house &a" + house.getId() + "&7.")); + return true; + } + case "setprice": { + if (!(s instanceof Player)) { + s.sendMessage(Utils.f("&cYou are not a player!")); + return true; + } + if (args.length != 2) { + s.sendMessage(Utils.f("&c/" + label + " setprice <amnt>")); + return true; + } + Player player = (Player) s; + UUID uuid = player.getUniqueId(); + HouseUser user = Houses.getUserManager().getLoadedUser(uuid); + int amnt; + try { + amnt = Integer.parseInt(args[1]); + } catch (NumberFormatException e) { + s.sendMessage(Utils.f(Lang.HOUSES + "&7The amount must be a number!")); + return true; + } + if (amnt < 1) { + s.sendMessage(Utils.f(Lang.HOUSES + "&7The amount must be bigger than 0!")); + return true; + } + if (isPremium) { + PremiumHouse house = user.getEditingPremiumHouse(); + if (house == null) { + s.sendMessage(Utils.f(Lang.HOUSES + "&7You are not editing any premium house!")); + return true; + } + house.setPermits(amnt); + s.sendMessage(Utils.f(Lang.HOUSES + "&7You set the price of premium house &a" + house.getId() + + "&7 to &3&l" + house.getPermits() + " Permits&7.")); + return true; + } + House house = user.getEditingHouse(); + if (house == null) { + s.sendMessage(Utils.f(Lang.HOUSES + "&7You are not editing any house!")); + return true; + } + house.setPrice(amnt); + s.sendMessage(Utils.f(Lang.HOUSES + "&7You set the price of house &a" + house.getId() + "&7 to &a$&l" + house.getPrice() + "&7.")); + return true; + } + case "remove": { + if (args.length > 3) { + s.sendMessage(Utils.f("&c/" + label + " remove <id>")); + return true; + } + if (args.length == 2) { + s.sendMessage(Utils.f(Lang.HOUSES + "&7Are you sure you want to do this? Type &3/" + label + + " remove &a<id>&3 confirm&7 to proceed...")); + return true; + } + if (!Objects.equals("confirm", args[2])) { + s.sendMessage(Utils.f("&c/" + label + " remove <id>")); + return true; + } + int id; + try { + id = Integer.parseInt(args[1]); + } catch (NumberFormatException e) { + s.sendMessage(Utils.f(Lang.HOUSES + "&7The id must be a number!")); + return true; + } + if (id < 1) { + s.sendMessage(Utils.f(Lang.HOUSES + "&7The id must be bigger than 0!")); + return true; + } + if (isPremium) { + PremiumHouse house = hm.getPremiumHouse(id); + if (house == null) { + s.sendMessage(Utils.f(Lang.HOUSES + "&7That premium house does not exist!")); + return true; + } + hm.removePremiumHouse(house); + s.sendMessage(Utils.f(Lang.HOUSES + "&7You removed the premium house &a" + house.getId() + "&7.")); + return true; + } + House house = hm.getHouse(id); + if (house == null) { + s.sendMessage(Utils.f(Lang.HOUSES + "&7That house does not exist!")); + return true; + } + hm.removeHouse(house); + if (s instanceof Player) { + HouseUser user = Houses.getUserManager().getLoadedUser(((Player) s).getUniqueId()); + user.setAddingChests(false); + user.setAddingDoor(null); + user.setAddingPremiumDoor(null); + user.setRemovingChests(false); + user.setRemovingDoor(false); + user.setEditingHouse(null); + user.setEditingPremiumHouse(null); + } + Utils.insertLogLater((s instanceof Player) ? ((Player)s).getUniqueId() : UUID.randomUUID(), s.getName(), "remove" + (isPremium ? "Premium" : "") + "House", "REMOVE_" + (isPremium ? "PREMIUM" : "") + "_HOUSE", (isPremium ? "Premium" : "") + "House ID: " + id, -1, -1); + s.sendMessage(Utils.f(Lang.HOUSES + "&7You removed the house &a" + house.getId() + "&7.")); + return true; + } + case "list": { + int page = 1; + if (args.length > 1) { + try { + page = Integer.parseInt(args[1]); + } catch (NumberFormatException ignored) { + } + } + + int batch = 8; + int start = batch * (page - 1); + + if (isPremium) { + s.sendMessage(Utils.f(Lang.HOUSES + "&3&lPage &a" + page + " &3&lTotal Premium Houses: &a" + hm.getPremiumHouses().size())); + + for (int i = start; i < start + batch; i++) { + if (hm.getPremiumHouses().size() > i) { + PremiumHouse premiumHouse = hm.getPremiumHouse(i + 1); + s.sendMessage(Utils.f(" &3&lID: &a" + premiumHouse.getId() + " &3&lPermits: &a" + premiumHouse.getPermits() + " &3&lChests: &a" + premiumHouse.getAmountOfChests() + " &3&lDoors: &a" + premiumHouse.getDoors().size())); + } + } + +// for (PremiumHouse premiumHouse : hm.getPremiumHouses()) { +// if (premiumHouse != null) { +// n++; +// s.sendMessage(Utils.f(" &3&lID: &a" + premiumHouse.getId() + " &3&lPermits: &a" + premiumHouse.getPermits() + " &3&lChests: &a" + premiumHouse.getAmountOfChests() + " &3&lDoors: &a" + premiumHouse.getDoors().size())); +// } +// if (n == 8) break; +// } + return true; + } + else { + s.sendMessage(Utils.f(Lang.HOUSES + "&3&lPage &a" + page + " &3&lTotal Houses: &a" + hm.getHouses().size())); + + for (int i = start; i < start + batch; i++) { + if (hm.getHouses().size() > i) { + House house = hm.getHouse(i + 1); + s.sendMessage(Utils.f(" &3&lID: &a" + house.getId() + " &3&lPrice: &a" + house.getPrice() + " &3&lChests: &a" + house.getAmountOfChests() + " &3&lDoors: &a" + house.getDoors().size())); + } + } + +// int n = 0; +// for (int i = 0; i < hm.getHouses().size(); i++) { +// House house = hm.getHouse(start + i); +// if (house != null) { +// n++; +// s.sendMessage(Utils.f(" &3&lID: &a" + house.getId() + " &3&lPrice: &a" + house.getPrice() + " &3&lChests: &a" + house.getAmountOfChests() + " &3&lDoors: &a" + house.getDoors().size())); +// } +// if (n == 8) break; +// } + } + return true; + } + case "unowned": { + int page = 1; + if (args.length > 1) { + try { + page = Integer.parseInt(args[1]); + } catch (NumberFormatException ignored) { + } + } + int start = (page << 3) - 7; + if (isPremium) { + List<PremiumHouse> unowned = new ArrayList<>(); + hm.getPremiumHouses().forEach(premiumHouse -> { + if (premiumHouse.getOwner() == null) unowned.add(premiumHouse); + }); + s.sendMessage(Utils.f(Lang.HOUSES + "&3&lPage &a" + page + " &3&lTotal &a&l(Unowned) &3&lPremium Houses: &a" + + unowned.size())); + int n = 0; + for (int i = 0; i < unowned.size(); i++) { + if (unowned.size() <= start + i) break; + PremiumHouse house = unowned.get(start + i); + if (house != null && house.getOwner() == null) { + n++; + s.sendMessage(Utils.f(" &3&lID: &a" + house.getId() + " &3&lPermits: &a" + house.getPermits() + + " &3&lChests: &a" + house.getAmountOfChests() + " &3&lDoors: &a" + + house.getDoors().size())); + } + if (n == 8) break; + } + } else { + s.sendMessage(Lang.HOUSES.f("&7Premium Houses only! (/ph)")); + } + return true; + } + case "setowner": { + if (args.length != 3) { + s.sendMessage(Utils.f("&c/" + label + " setowner <id> <player>")); + return true; + } + + int id; + try { + id = Integer.parseInt(args[1]); + } catch (NumberFormatException e) { + s.sendMessage(Utils.f(Lang.HOUSES + "&7The id must be a number!")); + return true; + } + if (id < 1) { + s.sendMessage(Utils.f(Lang.HOUSES + "&7The id must be bigger than 0!")); + return true; + } + Player player = Bukkit.getPlayer(args[2]); + if (isPremium) { + + // if player is not online + if (player == null) { + if (!(s instanceof Player)) { + s.sendMessage(Lang.NOTPLAYER.s()); + return true; + } + s.sendMessage(Lang.HOUSES.f("&7Please hold on while data is pulled from the database for the offline player.")); + UUID senderUUID = ((Player) s).getUniqueId(); + new BukkitRunnable() { + @Override + public void run() { + UUID uuid = null; + String name = null; + + uuid = UserDAO.getUuidByName(args[2]); + if (uuid != null){ + // this call is perhaps for case sensitivity + name = UserDAO.getNameByUuid(uuid); + } + +// try (Connection connection = BaseDatabase.getInstance().getConnection()) { +// try (PreparedStatement statement = connection.prepareStatement("select uuid,lastname from users where lastname='" + args[2] + "';")) { +// try (ResultSet result = statement.executeQuery()) { +// uuid = UUID.fromString(result.getString("uuid")); +// name = result.getString("lastname"); +// } +// } +// } catch (SQLException e) { +// e.printStackTrace(); +// } + + UUID finalUuid = uuid; + String finalName = name; + new BukkitRunnable() { + @Override + public void run() { + Player sender = Bukkit.getPlayer(senderUUID); + if (sender == null) return; + PremiumHouse house = hm.getPremiumHouse(id); + if (house == null) { + s.sendMessage(Utils.f(Lang.HOUSES + "&7That premium house does not exist!")); + return; + } + + Player newOwner = Bukkit.getPlayer(finalUuid); + if (newOwner != null) { + + house.forceSetOwner(player); + Utils.insertLogLater(sender.getUniqueId(), sender.getName(), "setOwner" + (isPremium ? "Premium" : "") + "HouseTo" + finalName, "SET_OWNER_" + (isPremium ? "PREMIUM" : "") + "_HOUSE", (isPremium ? "Premium" : "") + "House ID: " + id, -1, -1); + s.sendMessage(Lang.HOUSES + .f("&7Player &a" + player.getName() + "&7 now owns premium house &a" + house.getId() + "&7!")); + return; + } + + Player old = Bukkit.getPlayer(house.getOwner()); + if (old != null) { + HouseUser user = Houses.getUserManager().getLoadedUser(old.getUniqueId()); + old.sendMessage(Lang.HOUSES.f("&7You no longer own premium house &a" + house.getId() + "&7!")); + if (user.isInsidePremiumHouse(house.getId())) + user.teleportInOrOutPremiumHouse(old, house); + } + + house.setOwner(finalUuid, finalName, true); + } + }.runTask(Houses.getInstance()); + } + }.runTaskAsynchronously(Houses.getInstance()); + return true; + } + + + PremiumHouse house = hm.getPremiumHouse(id); + if (house == null) { + s.sendMessage(Utils.f(Lang.HOUSES + "&7That premium house does not exist!")); + return true; + } + + + + house.forceSetOwner(player); + s.sendMessage(Lang.HOUSES + .f("&7Player &a" + player.getName() + "&7 now owns premium house &a" + house.getId() + "&7!")); + return true; + } + + if (player == null) { + s.sendMessage(Utils.f(Lang.HOUSES + "&7That player is not online!")); + return true; + } + + House house = hm.getHouse(id); + if (house == null) { + s.sendMessage(Utils.f(Lang.HOUSES + "&7That house does not exist!")); + return true; + } + + HouseUser user = Houses.getUserManager().getLoadedUser(player.getUniqueId()); + house.addOwner(player, user); + s.sendMessage(Lang.HOUSES.f("&7Player &a" + player.getName() + "&7 now owns house &a" + house.getId() + "&7!")); + return true; + } + case "removeowner": { + if (isPremium) { + if (args.length != 2) { + s.sendMessage(Utils.f("&c/" + label + " removeowner <id>")); + return true; + } + } else if (args.length != 3) { + s.sendMessage(Utils.f("&c/" + label + " removeowner <id> <player>")); + return true; + } + + int id; + try { + id = Integer.parseInt(args[1]); + } catch (NumberFormatException e) { + s.sendMessage(Utils.f(Lang.HOUSES + "&7The id must be a number!")); + return true; + } + + if (id < 1) { + s.sendMessage(Utils.f(Lang.HOUSES + "&7The id must be bigger than 0!")); + return true; + } + + if (isPremium) { + PremiumHouse house = hm.getPremiumHouse(id); + if (house == null) { + s.sendMessage(Utils.f(Lang.HOUSES + "&7That premium house does not exist!")); + return true; + } + s.sendMessage(Lang.HOUSES.f("&7Player &a" + house.getOwner() + "&7 no longer owns premium house &a" + house.getId() + "&7!")); + house.removeOwner(true); + return true; + + } + + House house = hm.getHouse(id); + if (house == null) { + s.sendMessage(Utils.f(Lang.HOUSES + "&7That house does not exist!")); + return true; + } + + Player player = Bukkit.getPlayer(args[2]); + if (player == null) { +// Core.sql.updateAsyncLater("delete from " + Core.name() + "_houses where houseId=" + id + " and name='" + args[2] + "';"); + ServerUtil.runTaskAsync(() -> { +// BaseDatabase.runCustomQuery("delete from " + Core.name() + "_houses where houseId=" + id + " and name='" + args[2] + "';"); + + }); + s.sendMessage(Lang.HOUSES.f("&7That player is not online, so the house was removed from them in the database.")); + return true; + } + + HouseUser user = Houses.getUserManager().getLoadedUser(player.getUniqueId()); + if (!user.ownsHouse(id)) { + s.sendMessage(Lang.HOUSES.f("&7That player does not own house &a" + id + "&7!")); + return true; + } + house.removeOwner(player, user); + s.sendMessage(Lang.HOUSES + .f("&7Player &a" + player.getName() + "&7 no longer owns house &a" + house.getId() + "&7!")); + Utils.insertLogLater(s instanceof Player ? ((Player)s).getUniqueId() : UUID.randomUUID(), s.getName(), "removeOwner" + (isPremium ? "Premium" : "") + "House" , "REMOVE_OWNER_" + (isPremium ? "PREMIUM" : "") + "_HOUSE", (isPremium ? "Premium" : "") + "House ID: " + id, -1, -1); + return true; + } + case "owners": + case "owner": { + if (args.length != 2) { + s.sendMessage(Utils.f("&c/houses owner" + (isPremium ? "" : "s") + " <id>")); + return true; + } + + if (!(s instanceof Player)) { + s.sendMessage(Lang.NOTPLAYER.s()); + return true; + } + + int id; + try { + id = Integer.parseInt(args[1]); + } catch (NumberFormatException e) { + s.sendMessage(Utils.f(Lang.HOUSES + "&7The id must be a number!")); + return true; + } + if (id < 1) { + s.sendMessage(Utils.f(Lang.HOUSES + "&7The id must be bigger than 0!")); + return true; + } + + if (isPremium) { + PremiumHouse house = hm.getPremiumHouse(id); + if (house == null) { + s.sendMessage(Lang.HOUSES.f("&7That premium house does not exist!")); + return true; + } + s.sendMessage(Lang.HOUSES.f("&7The owner of premium house &a" + house.getId() + "&7 is &a" + house.getOwner() + "&7!")); + return true; + } + + House house = hm.getHouse(id); + if (house == null) { + s.sendMessage(Lang.HOUSES.f("&7That house does not exist!")); + return true; + } + + s.sendMessage(Lang.HOUSES.f("&7Pulling house owners from the database! Please wait a couple of (milli)seconds!")); + int houseId = house.getId(); + UUID uuid = ((Player) s).getUniqueId(); + +// new BukkitRunnable() { +// @Override +// public void run() { +// List<String> names = new ArrayList<>(); +// try (Connection connection = BaseDatabase.getInstance().getConnection()) { +// try (PreparedStatement statement = connection.prepareStatement("select * from " + Core.name() + "_houses where houseId=" + houseId + ';')) { +// try (ResultSet result = statement.executeQuery()) { +// while (result.next()) { +// names.add(result.getString("name")); +// } +// } +// } +// } catch (SQLException e) { +// e.printStackTrace(); +// } +// +// List<String> copy = new ArrayList<>(names); +// new BukkitRunnable() { +// @Override +// public void run() { +// Player player = Bukkit.getPlayer(uuid); +// if (player == null) +// return; +// player.sendMessage(Lang.HOUSES.f("&7Owners of House &a" + houseId + "&7:")); +// String msg = ""; +// for (String s : copy) +// msg = msg + "&a" + s + "&7, "; +// if (msg.endsWith("&7, ")) +// msg = msg.substring(0, msg.length() - 4); +// player.sendMessage(Utils.f(msg)); +// } +// }.runTask(Houses.getInstance()); +// } +// }.runTaskAsynchronously(Houses.getInstance()); + + return true; + } + case "player": + if (args.length != 2 && args.length != 3) { + s.sendMessage(Utils.f("&c/" + label + " player <player> [page]")); + return true; + } + int page = 1; + if (args.length == 3) + try { + page = Integer.parseInt(args[1]); + } catch (NumberFormatException ignored) { + } + int start = (page << 3) - 7; + int end = page << 3; + Player player = Bukkit.getPlayer(args[1]); + if (isPremium) { + List<PremiumHouse> allHouses = Houses.getHousesManager().getPremiumHouses().stream().filter(house -> house.getOwnerName() != null && house.getOwnerName().equalsIgnoreCase(args[1])).collect(Collectors.toList()); + List<PremiumHouse> listHouses = start < 0 || end > allHouses.size() ? allHouses : allHouses.subList(start, end); + if (allHouses.isEmpty() || listHouses == null) { + s.sendMessage(Lang.HOUSES.f("&7That player has no houses!")); + return true; + } + + s.sendMessage(Utils.f(Lang.HOUSES + "&3&lPage &a" + page + " &a&l" + (player == null ? args[1] : player.getName()) + "&3&l's Premium Houses: &a" + allHouses.size())); + for (PremiumHouse house : listHouses) { + s.sendMessage(Utils.f(" &3&lID: &a" + house.getId() + " &3&lPermits: &a" + house.getPermits() + " &3&lChests: &a" + house.getAmountOfChests() + " &3&lDoors: &a" + house.getDoors().size())); + } + return true; + } + + if (player == null) { + s.sendMessage(Lang.HOUSES.f("&7That player is not online!")); + return true; + } + + HouseUser user = Houses.getUserManager().getLoadedUser(player.getUniqueId()); + List<UserHouse> houses = user.getHouses(start, end); + if (houses.isEmpty() || houses == null) { + s.sendMessage(Lang.HOUSES.f("&7That player has no houses!")); + return true; + } + + s.sendMessage(Utils.f(Lang.HOUSES + "&3&lPage &a" + page + " &a&l" + player.getName() + "&3&l's Houses: &a" + user.getHouses().size())); + for (UserHouse house : houses) { + House h = hm.getHouse(house.getId()); + s.sendMessage(Utils.f(" &3&lID: &a" + house.getId() + " &3&lPrice: &a" + h.getPrice() + " &3&lChests: &a" + h.getAmountOfChests() + " &3&lDoors: &a" + h.getDoors().size())); + } + return true; + case "tp": { + if (args.length != 2) { + s.sendMessage(Utils.f("&c/" + label + " tp <id>")); + return true; + } + int id; + try { + id = Integer.parseInt(args[1]); + } catch (NumberFormatException e) { + s.sendMessage(Utils.f(Lang.HOUSES + "&7The id must be a number!")); + return true; + } + if (id < 1) { + s.sendMessage(Utils.f(Lang.HOUSES + "&7The id must be bigger than 0!")); + return true; + } + if (isPremium) { + PremiumHouse house = hm.getPremiumHouse(id); + if (house == null) { + s.sendMessage(Lang.HOUSES.f("&7That premium house does not exist!")); + return true; + } + PremiumHouseDoor door = house.getDoor(); + if (door == null) { + s.sendMessage(Lang.HOUSES.f("&7That premium house doesn't have any doors!")); + return true; + } + ((Player) s).teleport(door.getOutsideLocation()); + s.sendMessage(Lang.HOUSES.f("&7You were teleported to the outside location of door &a" + door.getId() + + "&7 of premium house &a" + house.getId() + "&7!")); + return true; + } + House house = hm.getHouse(id); + if (house == null) { + s.sendMessage(Lang.HOUSES.f("&7That house does not exist!")); + return true; + } + HouseDoor door = house.getDoor(); + if (door == null) { + s.sendMessage(Lang.HOUSES.f("&7That house doesn't have any doors!")); + return true; + } + ((Player) s).teleport(door.getOutsideLocation()); + s.sendMessage(Lang.HOUSES.f("&7You were teleported to the outside location of door &a" + door.getId() + + "&7 of house &a" + house.getId() + "&7!")); + return true; + } + case "info": + if (args.length != 2) { + s.sendMessage(Utils.f("&c/" + label + " info <id>")); + return true; + } + int id; + try { + id = Integer.parseInt(args[1]); + } catch (NumberFormatException e) { + s.sendMessage(Utils.f(Lang.HOUSES + "&7The id must be a number!")); + return true; + } + if (id < 1) { + s.sendMessage(Utils.f(Lang.HOUSES + "&7The id must be bigger than 0!")); + return true; + } + if (isPremium) { + PremiumHouse house = hm.getPremiumHouse(id); + if (house == null) { + s.sendMessage(Lang.HOUSES.f("&7That premium house does not exist!")); + return true; + } + s.sendMessage(Lang.HOUSES.f("&3&lInfo of Premium House &a&l" + house.getId())); + s.sendMessage(Utils.f("&3&lChests: &a&l" + house.getAmountOfChests())); + s.sendMessage(Utils.f("&3&lDoors: &a&l" + house.getDoors().size())); + s.sendMessage(Utils.f("&3&lSigns: &a&l" + house.getSigns().size())); + s.sendMessage(Utils.f("&3&lPermits: &a&l" + house.getPermits())); + if (house.isOwned()) { + s.sendMessage(Utils.f("&3&lOwner: &a&l" + house.getOwnerName())); + String guests = ""; + for (PremiumHouseGuest guest : house.getGuests()) + guests = guests + "&a" + guest.getName() + "&7, "; + if (guests.endsWith("&7, ")) + guests = guests.substring(0, guests.length() - 2); + guests += "."; + s.sendMessage(Utils.f("&3&lGuests: &a&l" + guests)); + } + return true; + + } + House house = hm.getHouse(id); + if (house == null) { + s.sendMessage(Lang.HOUSES.f("&7That house does not exist!")); + return true; + } + s.sendMessage(Lang.HOUSES.f("&3&lInfo of House &a&l" + house.getId())); + s.sendMessage(Utils.f("&3&lChests: &a&l" + house.getAmountOfChests())); + s.sendMessage(Utils.f("&3&lDoors: &a&l" + house.getDoors().size())); + s.sendMessage(Utils.f("&3&lSigns: &a&l" + house.getSigns().size())); + s.sendMessage(Utils.f("&3&lPrice: &a&l" + house.getPrice())); + return true; + case "addblocks": + player = (Player) s; + user = Houses.getUserManager().getLoadedUser(player.getUniqueId()); + if (user.getEditingPremiumHouse() != null) { + if (args.length == 2 && args[1].equalsIgnoreCase("we")) { + if (Houses.getWorldEdit().isPresent()) { + WorldEditPlugin we = Houses.getWorldEdit().get(); + if (we.getSelection(player) != null) { + Selection selection = we.getSelection(player); + Collection<Block> blocks = HouseUtils.getBlocks(selection.getMinimumPoint(), selection.getMaximumPoint()); + int before = user.getEditingPremiumHouse().getEditableBlocks().size(); + blocks.forEach(block -> { + if (Blocks.getMaterials().contains(block.getType())) { + user.getEditingPremiumHouse().addEditableBlock(block.getLocation(), block.getType(), block.getData(), res -> {}); + } + }); + int after = user.getEditingPremiumHouse().getEditableBlocks().size(); + player.sendMessage(Lang.HOUSES.f("&a" + String.valueOf(after - before) + " &7blocks have been added.")); + } else { + player.sendMessage(Lang.HOUSES.f("&7You must make a selection with WorldEdit first!")); + } + } else { + player.sendMessage(Lang.HOUSES.f("&cError! Contact a manager.")); + } + return true; + } + if (user.isAddingBlocks()) { + user.setAddingBlocks(false); + player.sendMessage(Lang.HOUSES.f("&7You're no longer adding blocks.")); + } else { + if (user.isRemovingBlocks()) user.setRemovingBlocks(false); + user.setAddingBlocks(true); + player.sendMessage(Lang.HOUSES.f("&7You're now adding blocks.")); + } + } + return true; + case "delblocks": + player = (Player) s; + user = Houses.getUserManager().getLoadedUser(player.getUniqueId()); + if (user.getEditingPremiumHouse() != null) { + if (args.length == 2 && args[1].equalsIgnoreCase("we")) { + if (Houses.getWorldEdit().isPresent()) { + WorldEditPlugin we = Houses.getWorldEdit().get(); + if (we.getSelection(player) != null) { + Selection selection = we.getSelection(player); + Collection<EditableBlock> blocks = new ArrayList<>(); + int before = user.getEditingPremiumHouse().getEditableBlocks().size(); + user.getEditingPremiumHouse().getEditableBlocks().forEach(editableBlock -> { + if (selection.contains(editableBlock.getLocation())) { + blocks.add(editableBlock); + } + }); + user.getEditingPremiumHouse().getEditableBlocks().removeAll(blocks); + int after = user.getEditingPremiumHouse().getEditableBlocks().size(); + player.sendMessage(Lang.HOUSES.f("&a" + String.valueOf(before - after) + " &7blocks have been removed.")); + } else { + player.sendMessage(Lang.HOUSES.f("&7You must make a selection with WorldEdit first!")); + } + } else { + player.sendMessage(Lang.HOUSES.f("&cError! Contact a manager.")); + } + return true; + } + if (user.isRemovingBlocks()) { + user.setRemovingBlocks(false); + player.sendMessage(Lang.HOUSES.f("&7You're no longer removing blocks.")); + } else { + if (user.isAddingBlocks()) user.setAddingBlocks(false); + user.setRemovingBlocks(true); + player.sendMessage(Lang.HOUSES.f("&7You're now removing blocks.")); + } + } + return true; + case "wipedata": + if (s instanceof Player) { + s.sendMessage("console only"); + return true; + } + Houses.getHousesManager().getPremiumHouses().forEach(premiumHouse -> premiumHouse.removeOwner(true)); + Houses.getHousesManager().save(); + s.sendMessage(Lang.HOUSES.f("&cAll house data wiped")); + return true; + case "reset": + if (args.length != 2) { + s.sendMessage(Utils.f("&c/" + label + " reset <id>")); + return true; + } + player = (Player) s; + String houseId = args[1]; + PremiumHouse premiumHouse = Houses.getHousesManager().getPremiumHouse(Integer.valueOf(houseId)); + if (premiumHouse == null) { + s.sendMessage(Lang.HOUSES.f("&7Could not find house with ID " + houseId)); + return true; + } + if (!premiumHouse.isOwned()) { + s.sendMessage(Lang.HOUSES.f("&7That house isn't owned!")); + return true; + } + Utils.insertLogLater(player.getUniqueId(), player.getName(), "reset" + (isPremium ? "Premium" : "") + "House" , "RESET_" + (isPremium ? "PREMIUM" : "") + "_HOUSE", (isPremium ? "Premium" : "") + "House ID: " + houseId, -1, -1); + Houses.getHousesManager().forceSell(premiumHouse, player); + return true; + default: + s.sendMessage(Lang.HOUSES.f("&7&lHouses Help")); + s.sendMessage(Utils.f("&3/" + label + "&7 add")); + s.sendMessage(Utils.f("&3/" + label + "&7 edit &a<id>")); + s.sendMessage(Utils.f("&3/" + label + "&7 stop")); + s.sendMessage(Utils.f("&3/" + label + "&7 setprice &a<price>")); + s.sendMessage(Utils.f("&3/" + label + "&7 remove &a<id>")); + s.sendMessage(Utils.f("&3/" + label + "&7 list &a[page]")); + s.sendMessage(Utils.f("&3/" + label + "&7 setowner &a<id> <player>")); + s.sendMessage(Utils.f("&3/" + label + "&7 removeowner &a<id>" + (isPremium ? "" : " <player>"))); + s.sendMessage(Utils.f("&3/" + label + "&7 tp &a<id>")); + s.sendMessage(Utils.f("&3/" + label + "&7 info &a<id>")); + s.sendMessage(Utils.f("&3/" + label + "&7 player &a<player>")); + if (isPremium) { + s.sendMessage(Utils.f("&3/" + label + "&7 owner &a<id>")); + s.sendMessage(Utils.f("&3/" + label + "&7 addblocks/delblocks &a<we>")); + s.sendMessage(Utils.f("&3/" + label + "&7 reset &a<id>")); + } + return true; + } + } +} diff --git a/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/dao/HouseDAO.java b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/dao/HouseDAO.java new file mode 100644 index 0000000..acbb546 --- /dev/null +++ b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/dao/HouseDAO.java @@ -0,0 +1,681 @@ +package net.grandtheftmc.houses.dao; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; +import java.util.UUID; + +import org.bukkit.Location; +import org.bukkit.inventory.ItemStack; +import org.json.JSONObject; + +import com.google.common.collect.Lists; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.gtm.GTMUtils; +import net.grandtheftmc.houses.HouseUtils; +import net.grandtheftmc.houses.JSONHelper; +import net.grandtheftmc.houses.houses.House; +import net.grandtheftmc.houses.houses.HouseChest; +import net.grandtheftmc.houses.houses.HouseDoor; +import net.grandtheftmc.houses.houses.HouseSign; +import net.grandtheftmc.houses.houses.HousesManager; +import net.grandtheftmc.houses.users.HouseUser; +import net.grandtheftmc.houses.users.UserHouse; +import net.grandtheftmc.houses.users.UserHouseChest; + +public class HouseDAO { + + public static List<House> loadHouses(Connection connection) { + List<House> list = Lists.newArrayList(); + + try (PreparedStatement statement = connection.prepareStatement( + "SELECT id, house_num, price FROM gtm_house WHERE server_key=? AND premium=?;")) { + statement.setString(1, Core.name().toUpperCase()); + statement.setBoolean(2, false); + + try (ResultSet result = statement.executeQuery()) { + while (result.next()) { + int uniqueHouseIdentifier = result.getInt("id"); + House house = new House(uniqueHouseIdentifier, result.getInt("house_num"), result.getInt("price")); + loadChests(connection, uniqueHouseIdentifier, house); + loadDoors(connection, uniqueHouseIdentifier, house); + loadSigns(connection, uniqueHouseIdentifier, house); + list.add(house); + } + + return list; + } + + } catch (SQLException e) { + e.printStackTrace(); + } + return list; + } + + public static House addHouse(Connection connection, int houseId, int price) { + try (PreparedStatement statement = connection.prepareStatement( + "INSERT INTO gtm_house (house_num, server_key, premium, currency, price) VALUES (?, ?, ?, ?, ?);", Statement.RETURN_GENERATED_KEYS)) { + statement.setInt(1, houseId); + statement.setString(2, Core.name().toUpperCase()); + statement.setBoolean(3, false); + statement.setString(4, "MONEY"); + statement.setInt(5, price); + + statement.executeUpdate(); + + try (ResultSet result = statement.getGeneratedKeys()) { + if(result.next()) { + return new House(result.getInt(1), houseId, price); + } + } + + } catch (SQLException e) { + e.printStackTrace(); + } + return null; + } + + public static House deleteHouse(Connection connection, int uniqueHouseId) { + try (PreparedStatement statement = connection.prepareStatement( + "DELETE FROM gtm_house WHERE id=?")) { + statement.setInt(1, uniqueHouseId); + + statement.execute(); + + } catch (SQLException e) { + e.printStackTrace(); + } + return null; + } + + public static boolean loadChests(Connection connection, int uniqueHouseIdentifier, House house) { + + // keep track of invalid chests (by hotspot) + List<Integer> invalidChests = new ArrayList<>(); + + try (PreparedStatement statement = connection.prepareStatement( + "SELECT hotspot_id, data FROM gtm_house_data WHERE house_id=? AND hotspot_type=?;")) { + statement.setInt(1, uniqueHouseIdentifier); + statement.setString(2, "CHEST"); + + try (ResultSet result = statement.executeQuery()) { + while (result.next()) { + int hotspotID = result.getInt("hotspot_id"); + JSONObject object = HouseUtils.dataToJson(result.getString("data")); + + try { + if (object.has("id")) { + int data_id = object.getInt("id"); + Location loc1 = HouseUtils.getLocationFromString(object.getString("loc1")); + + if (object.has("loc2")) { + Location loc2 = HouseUtils.getLocationFromString(object.getString("loc2")); + house.addChest(new HouseChest(hotspotID, data_id, house.getId(), loc1, loc2)); + } else { + house.addChest(new HouseChest(hotspotID, data_id, house.getId(), loc1)); + } + } + } catch (Exception e) { +// e.printStackTrace(); + Core.error("House (" + uniqueHouseIdentifier + ") couldn't load CHEST."); + invalidChests.add(hotspotID); + } + } + } + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + + // set invalid in db so we can fix + if (!invalidChests.isEmpty()){ + for (Integer hotspotID : invalidChests){ + setValidData(connection, uniqueHouseIdentifier, hotspotID, false); + } + } + + return true; + } + + public static boolean loadDoors(Connection connection, int uniqueHouseIdentifier, House house) { + + // keep track of invalid doors (by hotspot) + List<Integer> invalidDoors = new ArrayList<>(); + + try (PreparedStatement statement = connection.prepareStatement( + "SELECT data, hotspot_id FROM gtm_house_data WHERE house_id=? AND hotspot_type=?;")) { + statement.setInt(1, uniqueHouseIdentifier); + statement.setString(2, "DOOR"); + + try (ResultSet result = statement.executeQuery()) { + while (result.next()) { + int hotspotID = result.getInt("hotspot_id"); + JSONObject object = HouseUtils.dataToJson(result.getString("data")); + + try { + if (object.has("id")) { + int data_id = object.getInt("id"); +// System.out.println(object.toString()); + + Location location = null, inside = null, outside = null; + if (object.has("location")) { + location = HouseUtils.getLocationFromString(object.getString("location")); + } + + if (object.has("insideLocation")) { + inside = HouseUtils.getLocationFromString(object.getString("insideLocation")); + } + + if (object.has("outsideLocation")) { + outside = HouseUtils.getLocationFromString(object.getString("outsideLocation")); + } + + house.addDoor(new HouseDoor(hotspotID, data_id, house.getId(), location, inside, outside)); + + // if we get here it's valid + // this must be async because if its not, connection leak +// ServerUtil.runTaskAsync(() -> { +// try (Connection conn = BaseDatabase.getInstance().getConnection()){ +// setValidData(conn, uniqueHouseIdentifier, hotspotID, true); +// } +// catch(Exception exc){ +// exc.printStackTrace(); +// } +// }); + } + } catch (Exception e) { +// e.printStackTrace(); + Core.error("House (" + uniqueHouseIdentifier + ") couldn't load DOOR."); + invalidDoors.add(hotspotID); + } + } + } + + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + + // set invalid in db so we can fix + if (!invalidDoors.isEmpty()){ + for (Integer hotspotID : invalidDoors){ + setValidData(connection, uniqueHouseIdentifier, hotspotID, false); + } + } + + return true; + } + + public static boolean loadSigns(Connection connection, int uniqueHouseIdentifier, House house) { + + // keep track of invalid doors (by hotspot) + List<Integer> invalidSigns = new ArrayList<>(); + + try (PreparedStatement statement = connection.prepareStatement( + "SELECT data, hotspot_id FROM gtm_house_data WHERE house_id=? AND hotspot_type=?;")) { + statement.setInt(1, uniqueHouseIdentifier); + statement.setString(2, "SIGN"); + + try (ResultSet result = statement.executeQuery()) { + while (result.next()) { + int hotspotID = result.getInt("hotspot_id"); + JSONObject object = HouseUtils.dataToJson(result.getString("data")); + + try { + if (object.has("loc")) { + Location loc = HouseUtils.getLocationFromString(object.getString("loc")); + house.addSign(new HouseSign(hotspotID, uniqueHouseIdentifier, loc)); + + // if we get here it's valid + // this must be async because if its not, connection leak +// ServerUtil.runTaskAsync(() -> { +// try (Connection conn = BaseDatabase.getInstance().getConnection()){ +// setValidData(conn, uniqueHouseIdentifier, hotspotID, true); +// } +// catch(Exception exc){ +// exc.printStackTrace(); +// } +// }); + } + } catch (Exception e) { +// e.printStackTrace(); + Core.error("House (" + uniqueHouseIdentifier + ") couldn't load SIGN."); + invalidSigns.add(hotspotID); + } + } + } + + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + + // set invalid in db so we can fix + if (!invalidSigns.isEmpty()){ + for (Integer hotspotID : invalidSigns){ + setValidData(connection, uniqueHouseIdentifier, hotspotID, false); + } + } + + return true; + } + + public static boolean addChest(Connection connection, int uniqueHouseId, HouseChest chest, JSONHelper data) { + try (PreparedStatement statement = connection.prepareStatement("INSERT INTO gtm_house_data (house_id, hotspot_type, data) VALUES (?, ?, ?);", Statement.RETURN_GENERATED_KEYS)) { + statement.setInt(1, uniqueHouseId); + statement.setString(2, "CHEST"); + statement.setString(3, data == null ? null : data.string()); + + statement.executeUpdate(); + + try (ResultSet result = statement.getGeneratedKeys()) { + if (result.next()) { + chest.setHotspotId(result.getInt(1)); + return true; + } + } + + } catch (SQLException e) { + e.printStackTrace(); + } + + return false; + } + + public static boolean addDoor(Connection connection, int uniqueHouseId, HouseDoor door, JSONHelper data) { + try (PreparedStatement statement = connection.prepareStatement("INSERT INTO gtm_house_data (house_id, hotspot_type, data) VALUES (?, ?, ?);", Statement.RETURN_GENERATED_KEYS)) { + statement.setInt(1, uniqueHouseId); + statement.setString(2, "DOOR"); + statement.setString(3, data == null ? null : data.string()); + + statement.executeUpdate(); + + try (ResultSet result = statement.getGeneratedKeys()) { + if (result.next()) { + door.setHotspotId(result.getInt(1)); + return true; + } + } + + } catch (SQLException e) { + e.printStackTrace(); + } + + return false; + } + + public static boolean addSign(Connection connection, int uniqueHouseId, HouseSign sign, JSONHelper data) { + try (PreparedStatement statement = connection.prepareStatement("INSERT INTO gtm_house_data (house_id, hotspot_type, data) VALUES (?, ?, ?);", Statement.RETURN_GENERATED_KEYS)) { + statement.setInt(1, uniqueHouseId); + statement.setString(2, "SIGN"); + statement.setString(3, data == null ? null : data.string()); + + statement.executeUpdate(); + + try (ResultSet result = statement.getGeneratedKeys()) { + if (result.next()) { + sign.setHotspotId(result.getInt(1)); + return true; + } + } + + } catch (SQLException e) { + e.printStackTrace(); + } + + return false; + } + + public static boolean deleteSign(Connection connection, int hotspotId) { + try (PreparedStatement statement = connection.prepareStatement("DELETE FROM gtm_house_data WHERE hotspot_id=?;")) { + statement.setInt(1, hotspotId); + + statement.execute(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return false; + } + + public static boolean deleteAllSigns(Connection connection, int uniqueHouseId) { + try (PreparedStatement statement = connection.prepareStatement("DELETE FROM gtm_house_data WHERE house_id=? AND hotspot_type=?;")) { + statement.setInt(1, uniqueHouseId); + statement.setString(2, "SIGN"); + + statement.execute(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return false; + } + + public static boolean updateData(Connection connection, int hotspotId, JSONHelper data) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE gtm_house_data SET data=? WHERE hotspot_id=?;")) { + statement.setString(1, data == null ? null : data.string()); + statement.setInt(2, hotspotId); + + statement.executeUpdate(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return false; + } + + public static boolean updateDoor(Connection connection, int hotspotId, int doorId, Location door, Location inside, Location outside) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE gtm_house_data SET data=? WHERE hotspot_id=?;")) { + JSONHelper helper = new JSONHelper().put("id", doorId); + helper.put("location", HouseUtils.locationToString(door)); + helper.put("insideLocation", HouseUtils.locationToString(inside)); + helper.put("outsideLocation", HouseUtils.locationToString(outside)); + statement.setString(1, helper.string()); + statement.setInt(2, hotspotId); + + statement.executeUpdate(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return false; + } + + public static boolean deleteChestData(Connection connection, int hotspotId) { + try (PreparedStatement statement = connection.prepareStatement("DELETE FROM gtm_house_data WHERE hotspot_id=?;")) { + statement.setInt(1, hotspotId); + + statement.executeUpdate(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return false; + } + + public static boolean deleteUserChest(Connection connection, int uniqueHouseId, int chestId) { + try (PreparedStatement statement = connection.prepareStatement("DELETE FROM gtm_house_chest WHERE house_id=? AND chest_id=?;")) { + statement.setInt(1, uniqueHouseId); + statement.setInt(2, chestId); + + statement.executeUpdate(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return false; + } + + public static boolean deleteAllChestData(Connection connection, int uniqueHouseId) { + try (PreparedStatement statement = connection.prepareStatement("DELETE FROM gtm_house_data WHERE house_id=? AND hotspot_type=?;")) { + statement.setInt(1, uniqueHouseId); + statement.setString(2, Core.name().toUpperCase()); + + statement.executeUpdate(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return false; + } + + public static boolean deleteAllUserChest(Connection connection, int uniqueHouseId) { + try (PreparedStatement statement = connection.prepareStatement("DELETE FROM gtm_house_chest WHERE house_id=?;")) { + statement.setInt(1, uniqueHouseId); + + statement.executeUpdate(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return false; + } + + public static boolean deleteAllOwners(Connection connection, int uniqueHouseId) { + try (PreparedStatement statement = connection.prepareStatement("DELETE FROM gtm_house_user WHERE house_id=?;")) { + statement.setInt(1, uniqueHouseId); + + statement.executeUpdate(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return false; + } + + public static boolean deleteOwner(Connection connection, int uniqueHouseId, UUID uuid) { + try (PreparedStatement statement = connection.prepareStatement("DELETE FROM gtm_house_user WHERE uuid=UNHEX(?) AND house_id=?;")) { + statement.setString(1, uuid.toString().replaceAll("-", "")); + statement.setInt(2, uniqueHouseId); + + statement.executeUpdate(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return false; + } + + public static boolean setPrice(Connection connection, int uniqueHouseId, int price) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE gtm_house SET price=? WHERE id=?;")) { + statement.setInt(1, price); + statement.setInt(2, uniqueHouseId); + + statement.executeUpdate(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return false; + } + + public static boolean removeDoor(Connection connection, int uniqueHouseId, int hotspotId) { + try (PreparedStatement statement = connection.prepareStatement("DELETE FROM gtm_house_data WHERE hotspot_id=? AND house_id=?;")) { + statement.setInt(1, hotspotId); + statement.setInt(2, uniqueHouseId); + + statement.executeUpdate(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return false; + } + + public static boolean removeAllDoors(Connection connection, int uniqueHouseId) { + try (PreparedStatement statement = connection.prepareStatement("DELETE FROM gtm_house_data WHERE house_id=? AND hotspot_type=?;")) { + statement.setInt(1, uniqueHouseId); + statement.setString(2, "DOOR"); + + statement.executeUpdate(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return false; + } + + public static boolean addChestContent(Connection connection, int uniqueHouseId, int chestId, UUID uuid, ItemStack[] content) { + try (PreparedStatement statement = connection.prepareStatement( + "INSERT INTO gtm_house_chest (house_id, uuid, chest_id, content) VALUES (?, UNHEX(?), ?, ?) ON DUPLICATE KEY UPDATE content=?;")) { + statement.setInt(1, uniqueHouseId); + statement.setString(2, uuid.toString().replaceAll("-", "")); + statement.setInt(3, chestId); + statement.setString(4, GTMUtils.toBase64(content)); + statement.setString(5, GTMUtils.toBase64(content)); + + statement.execute(); + return true; + + } catch (SQLException e) { + e.printStackTrace(); + } + return false; + } + + public static boolean updateChestContent(Connection connection, int uniqueHouseId, int chestId, UUID uuid, ItemStack[] content) { + try (PreparedStatement statement = connection.prepareStatement( + "UPDATE gtm_house_chest SET content=? WHERE house_id=? AND uuid=UNHEX(?) AND chest_id=?")) { + statement.setString(1, GTMUtils.toBase64(content)); + statement.setInt(2, uniqueHouseId); + statement.setString(3, uuid.toString().replaceAll("-", "")); + statement.setInt(4, chestId); + + statement.executeUpdate(); + return true; + + } catch (SQLException e) { + e.printStackTrace(); + } + return false; + } + + public static boolean getChestContent(Connection connection, HouseUser houseUser, UUID uuid) { + try (PreparedStatement statement = connection.prepareStatement( + "SELECT * FROM gtm_house_chest WHERE uuid=UNHEX(?);")) { + statement.setString(1, uuid.toString().replaceAll("-", "")); + + try (ResultSet result = statement.executeQuery()) { + while (result.next()) { + int id = result.getInt("house_id"); + int chestId = result.getInt("chest_id"); + UserHouse userHouse = houseUser.getUserHouseByUniqueId(id); + if (userHouse == null) continue; + + UserHouseChest chest = userHouse.getChestOrNull(chestId); + if (chest == null) { + userHouse.addChest(new UserHouseChest(id, chestId, GTMUtils.fromBase64(result.getString("content")))); + } else { + chest.setContents(GTMUtils.fromBase64(result.getString("content"))); + } + } + } + return true; + + } catch (SQLException e) { + e.printStackTrace(); + } + return false; + } + + public static Optional<List<UserHouse>> loadUser(Connection connection, HousesManager housesManager, UUID uuid) { + List<UserHouse> list = Lists.newArrayList(); + + try (PreparedStatement statement = connection.prepareStatement("SELECT HU.house_id, H.house_num FROM gtm_house_user HU, gtm_house H WHERE HU.uuid=UNHEX(?) AND HU.house_id=H.id AND server_key=? AND H.premium=?;")) { + statement.setString(1, uuid.toString().replaceAll("-", "")); + statement.setString(2, Core.name().toUpperCase()); + statement.setBoolean(3, false); + + try (ResultSet result = statement.executeQuery()) { + while (result.next()) { + int uniqueId = result.getInt("house_id"); + int number = result.getInt("house_num"); + + System.out.println("Debug 1"); + House house = housesManager.getHouse(number); + if (house == null) continue; + + System.out.println("Debug 2"); + list.add(new UserHouse(uuid, uniqueId, house.getId())); + } + return Optional.of(list); + } + + } catch (SQLException e) { + e.printStackTrace(); + } + return Optional.empty(); + } + + public static void addUser(Connection connection, int uniqueHouseId, UUID uuid) { + List<UserHouse> list = Lists.newArrayList(); + + try (PreparedStatement statement = connection.prepareStatement( + "INSERT INTO gtm_house_user (house_id, uuid, is_owner) VALUES (?, UNHEX(?), ?);")) { + statement.setInt(1, uniqueHouseId); + statement.setString(2, uuid.toString().replaceAll("-", "")); + statement.setBoolean(3, true); + + statement.execute(); + + } catch (SQLException e) { + e.printStackTrace(); + } + } + + /** + * Sets the record for the house data as valid or invalid depending on the arguments. + * <p> + * This is used to see which records are getting loaded correctly, and which aren't. + * </p> + * + * @param conn - the database connection thread + * @param uniqueHouseId - the unique id for the house, generated by the db + * @param hotspotId - the unique id for the hotspot, generated by the db + * @param isValid - {@code true} if this is valid data that was loaded, {@code false} for invalid + * + * @return {@code true} if the query ran, {@code false} otherwise. + */ + public static boolean setValidData(Connection conn, int uniqueHouseId, int hotspotId, boolean isValid){ + + String query = "UPDATE gtm_house_data SET is_valid=? WHERE house_id=? AND hotspot_id=?;"; + + try (PreparedStatement ps = conn.prepareStatement(query)){ + ps.setBoolean(1, isValid); + ps.setInt(2, uniqueHouseId); + ps.setInt(3, hotspotId); + + ps.executeUpdate(); + return true; + } + catch (SQLException e){ + e.printStackTrace(); + } + + return false; + } + + /** + * Resets all house data in the database as valid, in order to reset to not valid if it's still broken. + * <p> + * This is needed so during every server start up we can see if houses have been fixed. + * </p> + * + * @param conn - the database connection thread + * + * @return {@code true} if the query ran, {@code false} otherwise. + */ + public static boolean resetValidData(Connection conn){ + + String query = "UPDATE gtm_house_data SET is_valid=1 WHERE house_id IN (SELECT id FROM gtm_house WHERE server_key=?)"; + try (PreparedStatement ps = conn.prepareStatement(query)){ + ps.setString(1, Core.name().toUpperCase()); + ps.executeUpdate(); + return true; + } + catch(SQLException exc){ + exc.printStackTrace(); + } + + return false; + } +} diff --git a/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/dao/PremiumHouseDAO.java b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/dao/PremiumHouseDAO.java new file mode 100644 index 0000000..748e59b --- /dev/null +++ b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/dao/PremiumHouseDAO.java @@ -0,0 +1,503 @@ +package net.grandtheftmc.houses.dao; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +import org.bukkit.Location; +import org.bukkit.Material; +import org.json.JSONObject; + +import com.google.common.collect.Lists; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.util.UUIDUtil; +import net.grandtheftmc.houses.HouseUtils; +import net.grandtheftmc.houses.JSONHelper; +import net.grandtheftmc.houses.houses.EditableBlock; +import net.grandtheftmc.houses.houses.HouseSign; +import net.grandtheftmc.houses.houses.PremiumHouse; +import net.grandtheftmc.houses.houses.PremiumHouseChest; +import net.grandtheftmc.houses.houses.PremiumHouseDoor; +import net.grandtheftmc.houses.houses.PremiumHouseGuest; +import net.grandtheftmc.houses.houses.PremiumHouseTrashcan; + +public class PremiumHouseDAO { + + public static List<PremiumHouse> loadHouses(Connection connection) { + List<PremiumHouse> list = Lists.newArrayList(); + + try (PreparedStatement statement = connection.prepareStatement( + "SELECT id, house_num, price FROM gtm_house WHERE server_key=? AND premium=?;")) { + statement.setString(1, Core.name().toUpperCase()); + statement.setBoolean(2, true); + + try (ResultSet result = statement.executeQuery()) { + while (result.next()) { + int uniqueHouseIdentifier = result.getInt("id"); + PremiumHouse house = new PremiumHouse(uniqueHouseIdentifier, result.getInt("house_num"), result.getInt("price")); + loadChests(connection, uniqueHouseIdentifier, house); + loadDoors(connection, uniqueHouseIdentifier, house); + loadSigns(connection, uniqueHouseIdentifier, house); + loadTrashcans(connection, uniqueHouseIdentifier, house); + loadEditableBlocks(connection, uniqueHouseIdentifier, house); + loadUsers(connection, uniqueHouseIdentifier, house); + list.add(house); + } + + return list; + } + + } catch (SQLException e) { + e.printStackTrace(); + } + return list; + } + + public static PremiumHouse addHouse(Connection connection, int houseId, int price) { + try (PreparedStatement statement = connection.prepareStatement( + "INSERT INTO gtm_house (house_num, server_key, premium, currency, price) VALUES (?, ?, ?, ?, ?);", Statement.RETURN_GENERATED_KEYS)) { + statement.setInt(1, houseId); + statement.setString(2, Core.name().toUpperCase()); + statement.setBoolean(3, true); + statement.setString(4, "PERMIT"); + statement.setInt(5, price); + + statement.executeUpdate(); + + try (ResultSet result = statement.getGeneratedKeys()) { + if (result.next()) { + return new PremiumHouse(result.getInt(1), houseId, price); + } + } + + } catch (SQLException e) { + e.printStackTrace(); + } + return null; + } + + public static boolean loadChests(Connection connection, int uniqueHouseIdentifier, PremiumHouse house) { + + // keep track of invalid chests (by hotspot) + List<Integer> invalidChests = new ArrayList<>(); + + try (PreparedStatement statement = connection.prepareStatement( + "SELECT hotspot_id, data FROM gtm_house_data WHERE house_id=? AND hotspot_type=?;")) { + statement.setInt(1, uniqueHouseIdentifier); + statement.setString(2, "CHEST"); + + try (ResultSet result = statement.executeQuery()) { + while (result.next()) { + int hotspotID = result.getInt("hotspot_id"); + JSONObject object = HouseUtils.dataToJson(result.getString("data")); + + try { + if (object.has("id")) { + int data_id = object.getInt("id"); + Location loc1 = HouseUtils.getLocationFromString(object.getString("loc1")); + + if (object.has("loc2")) { + Location loc2 = HouseUtils.getLocationFromString(object.getString("loc2")); + house.addChest(new PremiumHouseChest(hotspotID, data_id, house.getId(), loc1, loc2)); + } else { + house.addChest(new PremiumHouseChest(hotspotID, data_id, house.getId(), loc1)); + } + } + } catch (Exception e) { +// e.printStackTrace(); + Core.error("House (" + uniqueHouseIdentifier + ") couldn't load CHEST."); + invalidChests.add(hotspotID); + } + } + } + + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + + // set invalid in db so we can fix + if (!invalidChests.isEmpty()){ + for (Integer hotspotID : invalidChests){ + HouseDAO.setValidData(connection, uniqueHouseIdentifier, hotspotID, false); + } + } + + return true; + } + + public static boolean loadDoors(Connection connection, int uniqueHouseIdentifier, PremiumHouse house) { + + // keep track of invalid chests (by hotspot) + List<Integer> invalidDoors = new ArrayList<>(); + + try (PreparedStatement statement = connection.prepareStatement( + "SELECT hotspot_id, data FROM gtm_house_data WHERE house_id=? AND hotspot_type=?;")) { + statement.setInt(1, uniqueHouseIdentifier); + statement.setString(2, "DOOR"); + + try (ResultSet result = statement.executeQuery()) { + while (result.next()) { + int hotspotID = result.getInt("hotspot_id"); + JSONObject object = HouseUtils.dataToJson(result.getString("data")); + + try { + if (object.has("id")) { + int data_id = object.getInt("id"); +// Location location = HouseUtils.getLocationFromString(object.getString("location")); +// +// if (object.has("insideLocation") && object.has("outsideLocation")) { +// Location inside = HouseUtils.getLocationFromString(object.getString("insideLocation")); +// Location outside = HouseUtils.getLocationFromString(object.getString("outsideLocation")); +// house.addDoor(new PremiumHouseDoor(result.getInt("hotspot_id"), data_id, house.getId(), location, inside, outside)); +// } else { +// house.addDoor(new PremiumHouseDoor(result.getInt("hotspot_id"), data_id, house.getId(), location)); +// } + + Location location = null, inside = null, outside = null; + if (object.has("location")) { + location = HouseUtils.getLocationFromString(object.getString("location")); + } + + if (object.has("insideLocation")) { + inside = HouseUtils.getLocationFromString(object.getString("insideLocation")); + } + + if (object.has("outsideLocation")) { + outside = HouseUtils.getLocationFromString(object.getString("outsideLocation")); + } + + house.addDoor(new PremiumHouseDoor(hotspotID, data_id, house.getId(), location, inside, outside)); + } + } catch (Exception e) { +// e.printStackTrace(); + Core.error("House (" + uniqueHouseIdentifier + ") couldn't load DOOR."); + invalidDoors.add(hotspotID); + } + } + } + + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + + // set invalid in db so we can fix + if (!invalidDoors.isEmpty()){ + for (Integer hotspotID : invalidDoors){ + HouseDAO.setValidData(connection, uniqueHouseIdentifier, hotspotID, false); + } + } + + return true; + } + + public static boolean loadSigns(Connection connection, int uniqueHouseIdentifier, PremiumHouse house) { + + // keep track of invalid chests (by hotspot) + List<Integer> invalidSigns = new ArrayList<>(); + + try (PreparedStatement statement = connection.prepareStatement( + "SELECT hotspot_id, data FROM gtm_house_data WHERE house_id=? AND hotspot_type=?;")) { + statement.setInt(1, uniqueHouseIdentifier); + statement.setString(2, "SIGN"); + + try (ResultSet result = statement.executeQuery()) { + while (result.next()) { + int hotspotID = result.getInt("hotspot_id"); + JSONObject object = HouseUtils.dataToJson(result.getString("data")); + + try { + if (object.has("loc")) { + Location loc = HouseUtils.getLocationFromString(object.getString("loc")); + house.addSign(new HouseSign(hotspotID, uniqueHouseIdentifier, loc)); + } + } catch (Exception e) { +// e.printStackTrace(); + Core.error("House (" + uniqueHouseIdentifier + ") couldn't load SIGN."); + invalidSigns.add(hotspotID); + } + } + } + + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + + // set invalid in db so we can fix + if (!invalidSigns.isEmpty()){ + for (Integer hotspotID : invalidSigns){ + HouseDAO.setValidData(connection, uniqueHouseIdentifier, hotspotID, false); + } + } + + return true; + } + + public static boolean loadTrashcans(Connection connection, int uniqueHouseIdentifier, PremiumHouse house) { + + // keep track of invalid chests (by hotspot) + List<Integer> invalidTrashcans = new ArrayList<>(); + + try (PreparedStatement statement = connection.prepareStatement( + "SELECT hotspot_id, data FROM gtm_house_data WHERE house_id=? AND hotspot_type=?;")) { + statement.setInt(1, uniqueHouseIdentifier); + statement.setString(2, "TRASH"); + + try (ResultSet result = statement.executeQuery()) { + while (result.next()) { + int hotspotID = result.getInt("hotspot_id"); + JSONObject object = HouseUtils.dataToJson(result.getString("data")); + + try { + if (object.has("loc") && object.has("id") && object.has("owned")) { + Location loc = HouseUtils.getLocationFromString(object.getString("loc")); + int data_id = object.getInt("id"); + boolean owned = object.getBoolean("owned"); + house.addTrashcan(new PremiumHouseTrashcan(hotspotID, data_id, house.getId(), loc, owned)); + } + } catch (Exception e) { +// e.printStackTrace(); + invalidTrashcans.add(hotspotID); + Core.error("House (" + uniqueHouseIdentifier + ") couldn't load TRASHCAN."); + } + } + } + + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + + // set invalid in db so we can fix + if (!invalidTrashcans.isEmpty()){ + for (Integer hotspotID : invalidTrashcans){ + HouseDAO.setValidData(connection, uniqueHouseIdentifier, hotspotID, false); + } + } + + return true; + } + + public static boolean loadEditableBlocks(Connection connection, int uniqueHouseIdentifier, PremiumHouse house) { + + // keep track of invalid chests (by hotspot) + List<Integer> invalidBlocks = new ArrayList<>(); + + try (PreparedStatement statement = connection.prepareStatement( + "SELECT hotspot_id, data FROM gtm_house_data WHERE house_id=? AND hotspot_type=?;")) { + statement.setInt(1, uniqueHouseIdentifier); + statement.setString(2, "BLOCK"); + + try (ResultSet result = statement.executeQuery()) { + while (result.next()) { + int hotspotID = result.getInt("hotspot_id"); + JSONObject object = HouseUtils.dataToJson(result.getString("data")); + + try { + if (object.has("loc") && object.has("block_data")) { + Location loc = HouseUtils.getLocationFromString(object.getString("loc")); + String[] split = object.getString("block_data").split(","); + house.addEditableBlock(new EditableBlock(hotspotID, loc, Material.valueOf(split[0]), Byte.parseByte(split[1]))); + } + } catch (Exception e) { +// e.printStackTrace(); + Core.error("House (" + uniqueHouseIdentifier + ") couldn't load BLOCK."); + invalidBlocks.add(hotspotID); + } + } + } + + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + + // set invalid in db so we can fix + if (!invalidBlocks.isEmpty()){ + for (Integer hotspotID : invalidBlocks){ + HouseDAO.setValidData(connection, uniqueHouseIdentifier, hotspotID, false); + } + } + + return true; + } + + public static boolean loadUsers(Connection connection, int uniqueHouseIdentifier, PremiumHouse house) { + try (PreparedStatement statement = connection.prepareStatement( + "SELECT HEX(HU.uuid) as uid, U.name, HU.is_owner FROM gtm_house_user HU, user U WHERE HU.house_id=? AND U.uuid=HU.uuid;")) { + statement.setInt(1, uniqueHouseIdentifier); + + try (ResultSet result = statement.executeQuery()) { + while (result.next()) { + UUID uuid = UUIDUtil.createUUID(result.getString("uid")).orElse(null); + if (result.getBoolean("is_owner")) { + house.setOwner(uuid, result.getString("name")); + } else { + house.addGuest(new PremiumHouseGuest(uuid, result.getString("name"))); + } + } + + return true; + } + + } catch (SQLException e) { + e.printStackTrace(); + } + return false; + } + + public static boolean addChest(Connection connection, int uniqueHouseId, PremiumHouseChest chest, JSONHelper data) { + try (PreparedStatement statement = connection.prepareStatement("INSERT INTO gtm_house_data (house_id, hotspot_type, data) VALUES (?, ?, ?);", Statement.RETURN_GENERATED_KEYS)) { + statement.setInt(1, uniqueHouseId); + statement.setString(2, "CHEST"); + statement.setString(3, data == null ? null : data.string()); + + statement.executeUpdate(); + + try (ResultSet result = statement.getGeneratedKeys()) { + if (result.next()) { + chest.setHotspotId(result.getInt(1)); + return true; + } + } + + } catch (SQLException e) { + e.printStackTrace(); + } + + return false; + } + + public static boolean addDoor(Connection connection, int uniqueHouseId, PremiumHouseDoor door, JSONHelper data) { + try (PreparedStatement statement = connection.prepareStatement("INSERT INTO gtm_house_data (house_id, hotspot_type, data) VALUES (?, ?, ?);", Statement.RETURN_GENERATED_KEYS)) { + statement.setInt(1, uniqueHouseId); + statement.setString(2, "DOOR"); + statement.setString(3, data == null ? null : data.string()); + + statement.executeUpdate(); + + try (ResultSet result = statement.getGeneratedKeys()) { + if (result.next()) { + door.setHotspotId(result.getInt(1)); + return true; + } + } + + } catch (SQLException e) { + e.printStackTrace(); + } + + return false; + } + + public static boolean addBlock(Connection connection, int uniqueHouseId, EditableBlock block, JSONHelper data) { + try (PreparedStatement statement = connection.prepareStatement("INSERT INTO gtm_house_data (house_id, hotspot_type, data) VALUES (?, ?, ?);", Statement.RETURN_GENERATED_KEYS)) { + statement.setInt(1, uniqueHouseId); + statement.setString(2, "BLOCK"); + statement.setString(3, data == null ? null : data.string()); + + statement.executeUpdate(); + + try (ResultSet result = statement.getGeneratedKeys()) { + if (result.next()) { + block.setHotspotId(result.getInt(1)); + return true; + } + } + + } catch (SQLException e) { + e.printStackTrace(); + } + + return false; + } + + public static boolean addTrashcan(Connection connection, int uniqueHouseId, PremiumHouseTrashcan trashcan, JSONHelper data) { + try (PreparedStatement statement = connection.prepareStatement("INSERT INTO gtm_house_data (house_id, hotspot_type, data) VALUES (?, ?, ?);", Statement.RETURN_GENERATED_KEYS)) { + statement.setInt(1, uniqueHouseId); + statement.setString(2, "TRASH"); + statement.setString(3, data == null ? null : data.string()); + + statement.executeUpdate(); + + try (ResultSet result = statement.getGeneratedKeys()) { + if (result.next()) { + trashcan.setHotspotId(result.getInt(1)); + return true; + } + } + + } catch (SQLException e) { + e.printStackTrace(); + } + + return false; + } + + public static boolean deleteHouseUsers(Connection connection, int uniqueHouseId, boolean owner) { + try (PreparedStatement statement = connection.prepareStatement("DELETE FROM gtm_house_user WHERE house_id=? AND is_owner=?;")) { + statement.setInt(1, uniqueHouseId); + statement.setBoolean(2, owner); + + statement.executeUpdate(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return false; + } + + public static boolean deleteHouseGuest(Connection connection, int uniqueHouseId, UUID uuid) { + try (PreparedStatement statement = connection.prepareStatement("DELETE FROM gtm_house_user WHERE house_id=? AND uuid=UNHEX(?);")) { + statement.setInt(1, uniqueHouseId); + statement.setString(2, uuid.toString().replaceAll("-", "")); + + statement.executeUpdate(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return false; + } + + public static boolean addHouseGuest(Connection connection, int uniqueHouseId, UUID uuid, boolean owner) { + try (PreparedStatement statement = connection.prepareStatement( + "INSERT INTO gtm_house_user (house_id, uuid, is_owner) VALUES (?,UNHEX(?),?) ON DUPLICATE KEY UPDATE is_owner=VALUES(is_owner);")) { + statement.setInt(1, uniqueHouseId); + statement.setString(2, uuid.toString().replaceAll("-", "")); + statement.setBoolean(3, owner); + + statement.executeUpdate(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return false; + } + + public static boolean setTrashcanOwned(Connection connection, int hotspotId, JSONHelper helper) { + try (PreparedStatement statement = connection.prepareStatement( + "UPDATE gtm_house_data SET data=? WHERE hotspot_id=?")) { + statement.setString(1, helper.string()); + statement.setInt(2, hotspotId); + + statement.executeUpdate(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return false; + } +} diff --git a/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/houses/Blocks.java b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/houses/Blocks.java new file mode 100644 index 0000000..fd4a500 --- /dev/null +++ b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/houses/Blocks.java @@ -0,0 +1,96 @@ +package net.grandtheftmc.houses.houses; + +import org.bukkit.Material; + +import java.util.ArrayList; +import java.util.Collection; + +public enum Blocks { + + STONE(Material.STONE, (byte)0), + GRASS(Material.GRASS, (byte)0), + DIRT(Material.DIRT, (byte)0), + COBBLESTONE(Material.COBBLESTONE, (byte)0), + OAK_WOOD(Material.WOOD, (byte)0), + SPRUCE_WOOD(Material.WOOD, (byte)1), + BIRCH_WOOD(Material.WOOD, (byte)2), + JUNGLE_WOOD(Material.WOOD, (byte)3), + ACACIA_WOOD(Material.WOOD, (byte)4), + DARKOAK_WOOD(Material.WOOD, (byte)5), + SAND(Material.SAND, (byte)0), + GRAVEL(Material.GRAVEL, (byte)0), + LOG(Material.LOG, (byte)0), + GLASS(Material.THIN_GLASS, (byte)0), + GLOWSTONE(Material.GLOWSTONE, (byte)0), + SEA_LANTERN(Material.SEA_LANTERN, (byte)0), + COAL_BLOCK(Material.COAL_BLOCK, (byte)0), + GLASS_0(Material.STAINED_GLASS, (byte)0), + GLASS_7(Material.STAINED_GLASS, (byte)7), + GLASS_8(Material.STAINED_GLASS, (byte)8), + CARPET_0(Material.CARPET, (byte)0), + CARPET_1(Material.CARPET, (byte)1), + CARPET_2(Material.CARPET, (byte)2), + CARPET_3(Material.CARPET, (byte)3), + CARPET_4(Material.CARPET, (byte)4), + CARPET_6(Material.CARPET, (byte)6), + CARPET_7(Material.CARPET, (byte)7), + CARPET_8(Material.CARPET, (byte)8), + CARPET_9(Material.CARPET, (byte)9), + CARPET_10(Material.CARPET, (byte)10), + CARPET_11(Material.CARPET, (byte)11), + CARPET_12(Material.CARPET, (byte)12), + CARPET_13(Material.CARPET, (byte)13), + CARPET_14(Material.CARPET, (byte)14), + CARPET_15(Material.CARPET, (byte)15), + CLAY_0(Material.STAINED_CLAY, (byte)0), + CLAY_1(Material.STAINED_CLAY, (byte)1), + CLAY_2(Material.STAINED_CLAY, (byte)2), + CLAY_3(Material.STAINED_CLAY, (byte)3), + CLAY_4(Material.STAINED_CLAY, (byte)4), + CLAY_5(Material.STAINED_CLAY, (byte)5), + CLAY_6(Material.STAINED_CLAY, (byte)6), + CLAY_7(Material.STAINED_CLAY, (byte)7), + CLAY_8(Material.STAINED_CLAY, (byte)8), + CLAY_9(Material.STAINED_CLAY, (byte)9), + CLAY_10(Material.STAINED_CLAY, (byte)10), + CLAY_11(Material.STAINED_CLAY, (byte)11), + CLAY_12(Material.STAINED_CLAY, (byte)12), + CLAY_13(Material.STAINED_CLAY, (byte)13), + CLAY_14(Material.STAINED_CLAY, (byte)14), + CLAY_15(Material.STAINED_CLAY, (byte)15), + DIAMOND_BLOCK(Material.DIAMOND_BLOCK, (byte)0); + + public static Collection<Material> materials; + private Material type; + private byte data; + + Blocks(Material type, byte data) { + this.type = type; + this.data = data; + } + + public static Collection<Material> getMaterials() { + if(materials == null || materials.isEmpty()) { + materials = new ArrayList<>(); + for (Blocks mat : values()) { + materials.add(mat.getType()); + } + } + return materials; + } + + public static Blocks match(Material material, Byte data) { + for(Blocks block : Blocks.values()) { + if(block.getType() == material && block.getData() == data) return block; + } + return null; + } + + public Material getType() { + return this.type; + } + + public byte getData() { + return data; + } +} diff --git a/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/houses/EditableBlock.java b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/houses/EditableBlock.java new file mode 100644 index 0000000..77e1944 --- /dev/null +++ b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/houses/EditableBlock.java @@ -0,0 +1,52 @@ +package net.grandtheftmc.houses.houses; + +import org.bukkit.Location; +import org.bukkit.Material; + +public class EditableBlock { + + private int hotspotId; + + private Location location; + private Material defaultType; + private byte defaultData; + + public EditableBlock(int hotspotId, Location location, Material defaultType, byte defaultData) { + this.hotspotId = hotspotId; + this.location = location; + this.defaultType = defaultType; + this.defaultData = defaultData; + } + + public int getHotspotId() { + return hotspotId; + } + + public void setHotspotId(int hotspotId) { + this.hotspotId = hotspotId; + } + + public Location getLocation() { + return location; + } + + public void setLocation(Location location) { + this.location = location; + } + + public Material getDefaultType() { + return defaultType; + } + + public void setDefaultType(Material defaultType) { + this.defaultType = defaultType; + } + + public byte getDefaultData() { + return defaultData; + } + + public void setDefaultData(byte defaultData) { + this.defaultData = defaultData; + } +} diff --git a/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/houses/House.java b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/houses/House.java new file mode 100644 index 0000000..28d3a57 --- /dev/null +++ b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/houses/House.java @@ -0,0 +1,515 @@ +package net.grandtheftmc.houses.houses; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.database.BaseDatabase; +import net.grandtheftmc.core.util.Callback; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.gtm.GTMUtils; +import net.grandtheftmc.gtm.users.GTMUser; +import net.grandtheftmc.houses.HouseUtils; +import net.grandtheftmc.houses.Houses; +import net.grandtheftmc.houses.JSONHelper; +import net.grandtheftmc.houses.dao.HouseDAO; +import net.grandtheftmc.houses.users.HouseUser; +import net.grandtheftmc.houses.users.UserHouse; +import net.grandtheftmc.houses.users.UserHouseChest; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.block.BlockState; +import org.bukkit.block.Sign; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.InventoryType; +import org.bukkit.inventory.Inventory; +import org.bukkit.scheduler.BukkitRunnable; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +public class House { + + private int uniqueIdentifier; + + private final int id; + private int price; + private List<HouseChest> chests = new ArrayList<>(); + private List<HouseDoor> doors = new ArrayList<>(); + private List<HouseSign> signs = new ArrayList<>(); + + public House(int uniqueIdentifier, int id) { + this.uniqueIdentifier = uniqueIdentifier; + this.id = id; + } + + public House(int uniqueIdentifier, int id, int price) { + this.uniqueIdentifier = uniqueIdentifier; + this.id = id; + this.price = price; + } + + public House(int uniqueIdentifier, int id, int price, List<HouseChest> chests, List<HouseDoor> doors, List<HouseSign> signs) { + this.uniqueIdentifier = uniqueIdentifier; + this.id = id; + this.price = price; + this.chests = chests; + this.doors = doors; + this.signs = signs; + } + + public int getUniqueIdentifier() { + return uniqueIdentifier; + } + + public void setUniqueIdentifier(int uniqueIdentifier) { + this.uniqueIdentifier = uniqueIdentifier; + } + + public int getId() { + return this.id; + } + + public List<HouseChest> getChests() { + return this.chests; + } + + public List<HouseChest> getChests(int start, int end) { + return this.chests.stream().filter(door -> door.getId() >= start && door.getId() <= end).collect(Collectors.toList()); + } + + public int getAmountOfChests() { + int i = this.chests.size(); + for (HouseChest chest : this.chests) + if (chest.getLoc2() != null) + i++; + return i; + } + + public HouseChest getChest(int id) { + for (HouseChest chest : this.chests) + if (chest.getId() == id) + return chest; + return null; + } + + public HouseChest getChest(Location loc) { + for (HouseChest chest : this.chests) + if (chest.getLoc1().equals(loc) && chest.getLoc2().equals(loc)) + return chest; + return null; + } + + public List<HouseDoor> getDoors() { + return this.doors; + } + + public List<HouseDoor> getDoors(int start, int end) { + return this.doors.stream().filter(door -> door.getId() >= start && door.getId() <= end).collect(Collectors.toList()); + } + + public HouseDoor getDoor(int id) { + for (HouseDoor door : this.doors) + if (door.getId() == id) + return door; + return null; + } + + public HouseDoor getDoor() { + if (this.doors.isEmpty()) + return null; + for (int i = 1; ; i++) { + HouseDoor door = this.getDoor(i); + if (door != null) + return door; + } + } + + public void removeAllDoors() { + + ServerUtil.runTaskAsync(() -> { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + HouseDAO.removeAllDoors(connection, this.uniqueIdentifier); + } catch (SQLException e) { + e.printStackTrace(); + } + }); + + this.doors.clear(); + //TODO Remove all house doors from Database. + } + + public int getPrice() { + return this.price; + } + + public void setPrice(int i) { + //TODO Set database price. + this.price = i; + + ServerUtil.runTaskAsync(() -> { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + HouseDAO.setPrice(connection, this.uniqueIdentifier, i); + } catch (SQLException e) { + e.printStackTrace(); + } + }); + + this.updateSigns(); + } + + public int getUnusedChestId() { + for (int i = 1; ; i++) + if (this.getChest(i) == null) + return i; + } + + /** + * Only use for data pulled from the Database. + * @param chest + */ + public void addChest(HouseChest chest) { + this.chests.add(chest); + int chestId = chest.getId(); + Houses.getUserManager().getLoadedUsers().stream().filter(user -> user.ownsHouse(this.id)).forEach(user -> user.getUserHouse(this.id).getChest(chestId)); + this.updateSigns(); + } + + public void addChest(int chestId, int houseId, Location first, Location second, Callback<HouseChest> callback) { +// this.chests.add(chest); +// int chestId = chest.getId(); +// Houses.getUserManager().getLoadedUsers().stream().filter(user -> user.ownsHouse(this.id)).forEach(user -> user.getUserHouse(this.id).getChest(chestId)); +// this.updateSigns(); + + ServerUtil.runTaskAsync(() -> { + HouseChest chest = new HouseChest(-1, chestId, houseId, first); + if (second != null) chest.setLoc2(second); + + JSONHelper helper = new JSONHelper(); + helper.put("id", chestId); + helper.put("loc1", HouseUtils.locationToString(first)); + if (second != null) helper.put("loc2", HouseUtils.locationToString(second)); + + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + HouseDAO.addChest(connection, this.uniqueIdentifier, chest, helper); + } catch (SQLException e) { + e.printStackTrace(); + callback.call(null); + return; + } + + this.chests.add(chest); + Houses.getUserManager().getLoadedUsers().stream().filter(user -> user.ownsHouse(this.id)).forEach(user -> user.getUserHouse(this.id).getChest(chestId)); + this.updateSigns(); + + callback.call(chest); + }); + } + + public void removeChest(HouseChest chest) { + this.chests.remove(chest); + +// Core.sql.updateAsyncLater("delete from " + Core.name() + "_houses_chests where houseId=" + this.id + " and chestId=" +// + chest.getId() + ';'); +// ServerUtil.runTaskAsync(() -> BaseDatabase.runCustomQuery("delete from " + Core.name() + "_houses_chests where houseId=" + this.id + " and chestId=" + chest.getId() + ';')); + //TODO Remove house chest. + ServerUtil.runTaskAsync(() -> { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + HouseDAO.deleteChestData(connection, chest.getHotspotId()); + HouseDAO.deleteUserChest(connection, this.uniqueIdentifier, chest.getId()); + } catch (SQLException e) { + e.printStackTrace(); + } + }); + + Houses.getUserManager().getLoadedUsers().stream().filter(user -> user.ownsHouse(this.id)).forEach(user -> user.getUserHouse(this.id).removeChest(chest.getId())); + this.updateSigns(); + } + + public void removeAllChestsNonDB() { + this.chests.clear(); + Houses.getUserManager().getLoadedUsers().stream().filter(user -> user.ownsHouse(this.id)).forEach(user -> user.getUserHouse(this.id).removeChests()); + this.updateSigns(); + } + + public void removeAllChests() { + this.chests.clear(); + +// Core.sql.updateAsyncLater("delete from " + Core.name() + "_houses_chests where houseId=" + this.id + ';'); +// ServerUtil.runTaskAsync(() -> BaseDatabase.runCustomQuery("delete from " + Core.name() + "_houses_chests where houseId=" + this.id + ';')); + //TODO Remove all house chests. + ServerUtil.runTaskAsync(() -> { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + HouseDAO.deleteAllChestData(connection, this.uniqueIdentifier); + HouseDAO.deleteAllUserChest(connection, this.uniqueIdentifier); + } catch (SQLException e) { + e.printStackTrace(); + } + }); + + Houses.getUserManager().getLoadedUsers().stream().filter(user -> user.ownsHouse(this.id)).forEach(user -> user.getUserHouse(this.id).removeChests()); + this.updateSigns(); + } + + public void removeAllOwnersNonDB() { + Houses.getUserManager().getLoadedUsers().stream().filter(user -> user.ownsHouse(this.id)).forEach(user -> user.removeHouse(Bukkit.getPlayer(user.getUUID()), this)); + this.updateSigns(); + } + + public void removeAllOwners() { +// Core.sql.updateAsyncLater("delete from " + Core.name() + "_houses where houseId=" + this.id + ';'); +// ServerUtil.runTaskAsync(() -> BaseDatabase.runCustomQuery("delete from " + Core.name() + "_houses where houseId=" + this.id + ';')); + //TODO Remove all house owners. + ServerUtil.runTaskAsync(() -> { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + HouseDAO.deleteAllOwners(connection, this.uniqueIdentifier); + } catch (SQLException e) { + e.printStackTrace(); + } + }); + + Houses.getUserManager().getLoadedUsers().stream().filter(user -> user.ownsHouse(this.id)).forEach(user -> user.removeHouse(Bukkit.getPlayer(user.getUUID()), this)); + this.updateSigns(); + } + + public void addDoor(Callback<HouseDoor> callback) { + ServerUtil.runTaskAsync(() -> { + HouseDoor door = new HouseDoor(-1, this.getUnusedDoorId(), this.id); + + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + HouseDAO.addDoor(connection, this.uniqueIdentifier, door, null); + } catch (SQLException e) { + e.printStackTrace(); + callback.call(null); + return; + } + + this.doors.add(door); + callback.call(door); + }); + +// HouseDoor door = new HouseDoor(-1, this.getUnusedDoorId(), this.id); +// +// this.doors.add(door); +// return door; + } + + public HouseDoor addDoor(HouseDoor door) { + this.doors.add(door); + return door; + } + + private int getUnusedDoorId() { + for (int i = 1; ; i++) + if (this.getDoor(i) == null) + return i; + } + + public void removeDoor(HouseDoor door) { + this.doors.remove(door); + //TODO Remove door from Database. + ServerUtil.runTaskAsync(() -> { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + HouseDAO.removeDoor(connection, this.uniqueIdentifier, door.getHotspotId()); + } catch (SQLException e) { + e.printStackTrace(); + } + }); + } + + public List<HouseSign> getSigns() { + return this.signs; + } + + /** + * Only used when pulling from database. + * @param sign + */ + public void addSign(HouseSign sign) { + this.signs.add(sign); + ServerUtil.runTask(() -> this.updateSign(sign.getLocation())); +// this.updateSign(sign.getLocation()); + } + + public void addSign(Location loc, Callback<HouseSign> callback) { + //TODO Add sign to database. + ServerUtil.runTaskAsync(() -> { + HouseSign sign = new HouseSign(-1, this.uniqueIdentifier, loc); + + JSONHelper helper = new JSONHelper(); + helper.put("loc", HouseUtils.locationToString(loc)); + + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + HouseDAO.addSign(connection, this.uniqueIdentifier, sign, helper); + } catch (SQLException e) { + e.printStackTrace(); + callback.call(null); + return; + } + + this.signs.add(sign); + + ServerUtil.runTask(() -> this.updateSign(sign.getLocation())); +// this.updateSign(sign.getLocation()); + callback.call(sign); + }); + } + + public void removeSign(Location loc) { + HouseSign sign = this.signs.stream().filter(s -> loc.equals(s.getLocation())).findFirst().orElse(null); + if (sign == null) return; + this.signs.remove(sign); + //TODO Remove sign from Database. + ServerUtil.runTaskAsync(() -> { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + HouseDAO.deleteSign(connection, sign.getHotspotId()); + } catch (SQLException e) { + e.printStackTrace(); + } + }); + + } + + public void removeAllSigns() { + this.signs.clear(); + //TODO Remove all sign from Database. + ServerUtil.runTaskAsync(() -> { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + HouseDAO.deleteAllSigns(connection, this.uniqueIdentifier); + } catch (SQLException e) { + e.printStackTrace(); + } + }); + } + + public void updateSigns() { + int id = this.id; + new BukkitRunnable() { + @Override + public void run() { + House house = Houses.getHousesManager().getHouse(id); + if (house != null) + new ArrayList<>(house.getSigns()).forEach(s -> updateSign(s.getLocation())); + } + }.runTask(Houses.getInstance()); + } + + public void updateSign(Location loc) { + if (loc == null) return; + + BlockState state = loc.getBlock().getState(); + if (!(state instanceof Sign)) { + this.removeSign(loc); + return; + } + + Sign sign = (Sign) state; + sign.setLine(0, Utils.f("&3&lHouse")); + sign.setLine(1, Utils.f("&8Chests: &a&l" + this.getAmountOfChests())); + sign.setLine(2, Utils.f("&8Price:")); + sign.setLine(3, Utils.f("&a$&l" + this.price)); + sign.update(); + } + + public void openChest(Player player, Location chestLoc, HouseUser user, HouseChest chest) { + if (!user.ownsHouse(this.id)) { + player.sendMessage(Utils.f(Lang.HOUSES + "&7You don't own this house!")); + return; + } + + if(player.getOpenInventory().getType() == InventoryType.CHEST) return; + boolean isDub = chest.getLoc2() != null; + UserHouse userHouse = user.getUserHouse(this.id); + UserHouseChest userChest = userHouse.getChest(chest.getId()); + Inventory inv = Bukkit.createInventory(null, isDub ? 54 : 27, Utils.f("&3&lChest: &a&l" + this.id + ',' + chest.getId())); + inv.setContents(userChest.getContents()); + + if (chestLoc != null) + Utils.playChestAnimation(player, chestLoc, true); + + player.openInventory(inv); + } + + public boolean buyHouse(Player player, User user, GTMUser gtmUser, HouseUser houseUser) { + if (houseUser.ownsHouse(this.id)) { + player.sendMessage(Utils.f(Lang.HOUSES + "&7You already own this house!")); + return true; + } + + if (houseUser.hasMaxHouses(player, user, gtmUser)) { + player.sendMessage(Lang.HOUSES.f("&7You have hit the maximum amount of houses you can own!")); + return false; + } + + if (!gtmUser.hasMoney(this.price)) { + player.sendMessage(Lang.HOUSES.f("&7You can not afford the &a$&l" + this.price + "&7 to pay for this house!")); + return true; + } + + if (!Houses.ENABLED) { + player.sendMessage(Lang.HOUSES.f("&cHouses is currently disabled, try again soon!")); + return true; + } + + gtmUser.takeMoney(this.price); + GTMUtils.updateBoard(player, gtmUser); + houseUser.addHouse(this);//TODO Make sure this method updates database. + Utils.insertLogLater(player.getUniqueId(), player.getName(), "buyHouseMethod", "BUY_HOUSE", "House ID: " + this.id,1,this.price); + player.sendMessage(Lang.HOUSES.f("&7You bought house &a" + this.id + "&7 for &a$&l" + this.price + "&7!")); + return true; + } + + public void addOwner(Player player, HouseUser user) { + + if (!Houses.ENABLED) { + player.sendMessage(Lang.HOUSES.f("&cHouses is currently disabled, try again soon!")); + return; + } + + if (user.getUserHouse(this.id) == null) { + player.sendMessage(Lang.HOUSES.f("&7You now own house &a" + this.id + "&7!")); + user.addHouse(this);//TODO Make sure this method adds a user house. + } else + player.sendMessage(Lang.HOUSES.f("&7You already own house &a" + this.id + "&7!")); + } + + public boolean sellHouse(Player player, GTMUser gtmUser, HouseUser user) { + if (!user.ownsHouse(this.id)) { + player.sendMessage(Utils.f(Lang.HOUSES + "&7You don't own this house!")); + return true; + } + + if (!Houses.ENABLED) { + player.sendMessage(Lang.HOUSES.f("&cHouses is currently disabled, try again soon!")); + return true; + } + + gtmUser.addMoney(this.price / 2); + GTMUtils.updateBoard(player, gtmUser); + user.removeHouse(player, this);//TODO Make sure this method removes all data. + Utils.insertLogLater(player.getUniqueId(), player.getName(), "sellHouseMethod", "SELL_HOUSE", "House ID: " + this.id,1,this.price/2); + player.sendMessage(Lang.HOUSES.f("&7You sold house &a" + this.id + "&7 for &a$&l" + (this.price / 2) + "&7!")); + return true; + } + + public void removeOwner(Player player, HouseUser user) { + + if (!Houses.ENABLED) { + player.sendMessage(Lang.HOUSES.f("&cHouses is currently disabled, try again soon!")); + return; + } + + if (user.ownsHouse(this.id)) { + player.sendMessage(Lang.HOUSES.f("&7You no longer own house &a" + this.id + "&7!")); + user.removeHouse(player, this);//TODO Make sure this method removes all data. + if (user.isInsideHouse(this.id)) + user.teleportInOrOutHouse(player, this); + } else + player.sendMessage(Lang.HOUSES.f("&7You don't own house &a" + this.id + "&7!")); + } + + +} diff --git a/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/houses/HouseChest.java b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/houses/HouseChest.java new file mode 100644 index 0000000..3d05f7e --- /dev/null +++ b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/houses/HouseChest.java @@ -0,0 +1,61 @@ +package net.grandtheftmc.houses.houses; + +import org.bukkit.Location; + +public class HouseChest { + + private int hotspotId; + + private final int chestId; + private final int houseId; + private Location loc1; + private Location loc2; + + public HouseChest(int hotspotId, int chestId, int houseId, Location loc1) { + this.hotspotId = hotspotId; + this.chestId = chestId; + this.houseId = houseId; + this.loc1 = loc1; + } + + public HouseChest(int hotspotId, int chestId, int houseId, Location loc1, Location loc2) { + this.hotspotId = hotspotId; + this.chestId = chestId; + this.houseId = houseId; + this.loc1 = loc1; + this.loc2 = loc2; + } + + public int getHotspotId() { + return hotspotId; + } + + public void setHotspotId(int hotspotId) { + this.hotspotId = hotspotId; + } + + public int getId() { + return this.chestId; + } + + public Location getLoc1() { + return this.loc1; + } + + public void setLoc1(Location l) { + this.loc1 = l; + } + + public Location getLoc2() { + return this.loc2; + } + + public void setLoc2(Location l) { + this.loc2 = l; + } + + public int getHouseId() { + return this.houseId; + } + +} diff --git a/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/houses/HouseDoor.java b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/houses/HouseDoor.java new file mode 100644 index 0000000..dcb13c5 --- /dev/null +++ b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/houses/HouseDoor.java @@ -0,0 +1,78 @@ +package net.grandtheftmc.houses.houses; + +import org.bukkit.Location; + +public class HouseDoor { + + private int hotspotId; + + private final int doorId; + private final int houseId; + private Location doorLocation; + private Location insideLocation; + private Location outsideLocation; + + public HouseDoor(int hotspotId, int doorId, int houseId) { + this.hotspotId = hotspotId; + this.doorId = doorId; + this.houseId = houseId; + } + + public HouseDoor(int hotspotId, int doorId, int houseId, Location doorLocation) { + this.hotspotId = hotspotId; + this.doorId = doorId; + this.houseId = houseId; + this.doorLocation = doorLocation; + } + + public HouseDoor(int hotspotId, int doorId, int houseId, Location doorLocation, Location insideLocation, Location outsideLocation) { + this.hotspotId = hotspotId; + this.doorId = doorId; + this.houseId = houseId; + this.doorLocation = doorLocation; + this.insideLocation = insideLocation; + this.outsideLocation = outsideLocation; + } + + public int getHotspotId() { + return hotspotId; + } + + public void setHotspotId(int hotspotId) { + this.hotspotId = hotspotId; + } + + public int getId() { + return this.doorId; + } + + public int getHouseId() { + return this.houseId; + } + + public Location getLocation() { + return this.doorLocation; + } + + public void setLocation(Location doorLocation) { + this.doorLocation = doorLocation; + } + + public Location getInsideLocation() { + return this.insideLocation; + } + + public void setInsideLocation(Location insideLocation) { + this.insideLocation = insideLocation; + } + + public Location getOutsideLocation() { + return this.outsideLocation; + } + + public void setOutsideLocation(Location outsideLocation) { + this.outsideLocation = outsideLocation; + } + + +} diff --git a/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/houses/HouseSign.java b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/houses/HouseSign.java new file mode 100644 index 0000000..dea00aa --- /dev/null +++ b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/houses/HouseSign.java @@ -0,0 +1,37 @@ +package net.grandtheftmc.houses.houses; + +import org.bukkit.Location; + +public class HouseSign { + + private int hotspotId; + + private final int houseId; + private Location location; + + public HouseSign(int hotspotId, int houseId, Location location) { + this.hotspotId = hotspotId; + this.houseId = houseId; + this.location = location; + } + + public int getHotspotId() { + return hotspotId; + } + + public void setHotspotId(int hotspotId) { + this.hotspotId = hotspotId; + } + + public int getHouseId() { + return houseId; + } + + public Location getLocation() { + return location; + } + + public void setLocation(Location location) { + this.location = location; + } +} diff --git a/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/houses/HousesManager.java b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/houses/HousesManager.java new file mode 100644 index 0000000..276843d --- /dev/null +++ b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/houses/HousesManager.java @@ -0,0 +1,553 @@ +package net.grandtheftmc.houses.houses; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.stream.Collectors; + +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.block.Block; +import org.bukkit.block.Chest; +import org.bukkit.entity.Player; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.database.BaseDatabase; +import net.grandtheftmc.core.util.Callback; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.houses.HouseUtils; +import net.grandtheftmc.houses.Houses; +import net.grandtheftmc.houses.dao.HouseDAO; +import net.grandtheftmc.houses.dao.PremiumHouseDAO; + +public class HousesManager { + + private List<House> houses = new ArrayList<>(); + private List<PremiumHouse> premiumHouses = new ArrayList<>(); + + public HousesManager() { + this.load(); + this.saveTask(); + } + + public void saveTask() { +// Bukkit.getScheduler().scheduleSyncRepeatingTask(Houses.getInstance(), new Runnable() { +// @Override +// public void run() { +// HousesManager.this.save(); +// } +// }, 600L, 36000L); // 30 minutes + } + + public House getHouse(int id) { + for (House house : this.houses) + if (house.getId() == id) + return house; + return null; + } + + public List<House> getHouses() { + return this.houses; + } + + public void addHouse(int id, int price, Callback<House> callback) { +// House house = new House(id, price); +// this.houses.add(house); +// return house; + + ServerUtil.runTaskAsync(() -> { + House house = null; + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + house = HouseDAO.addHouse(connection, id, price); + } catch (SQLException e) { + e.printStackTrace(); + callback.call(null); + return; + } + + if (house == null) { + callback.call(null); + return; + } + + this.houses.add(house); + callback.call(house); + }); + } + + public PremiumHouse getPremiumHouse(int id) { + for (PremiumHouse house : this.premiumHouses) + if (house.getId() == id) + return house; + return null; + } + + public List<PremiumHouse> getPremiumHouses() { + return this.premiumHouses; + } + + public void addPremiumHouse(int id, int permits, Callback<PremiumHouse> callback) { +// PremiumHouse house = new PremiumHouse(id, permits); +// this.premiumHouses.add(house); +// return house; + ServerUtil.runTaskAsync(() -> { + PremiumHouse house = null; + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + house = PremiumHouseDAO.addHouse(connection, id, permits); + } catch (SQLException e) { + e.printStackTrace(); + callback.call(null); + return; + } + + if (house == null) { + callback.call(null); + return; + } + + this.premiumHouses.add(house); + callback.call(house); + }); + } + + public House getHouseFromChest(Location loc) { + for (House house : this.houses) + for (HouseChest chest : house.getChests()) + if (HouseUtils.locEqualsLoc(loc, chest.getLoc1(), false) || HouseUtils.locEqualsLoc(loc, chest.getLoc2(), false)) + return house; + return null; + } + + public Object[] getHouseAndChest(Location loc) { + for (House house : this.houses) + for (HouseChest chest : house.getChests()) +// if (loc.equals(chest.getLoc1()) || loc.equals(chest.getLoc2())) + if (HouseUtils.locEqualsLoc(loc, chest.getLoc1(), false) || HouseUtils.locEqualsLoc(loc, chest.getLoc2(), false)) + return new Object[]{house, chest}; + + for (PremiumHouse house : this.premiumHouses) + for (PremiumHouseChest chest : house.getChests()) +// if (loc.equals(chest.getLoc1()) || loc.equals(chest.getLoc2())) + if (HouseUtils.locEqualsLoc(loc, chest.getLoc1(), false) || HouseUtils.locEqualsLoc(loc, chest.getLoc2(), false)) + return new Object[]{house, chest}; + return null; + } + + public House getHouseFromDoor(Location loc) { + for (House house : this.houses) + for (HouseDoor door : house.getDoors()) +// if (loc.equals(door.getLocation())) + if (HouseUtils.locEqualsLoc(loc, door.getLocation(), false)) + return house; + return null; + } + + public Object[] getHouseAndDoor(Location loc) { + for (House house : this.houses) + for (HouseDoor door : house.getDoors()) +// if (loc.equals(door.getLocation())) + if (HouseUtils.locEqualsLoc(loc, door.getLocation(), false)) + return new Object[]{house, door}; + + for (PremiumHouse house : this.premiumHouses) + for (PremiumHouseDoor door : house.getDoors()) +// if (loc.equals(door.getLocation())) + if (HouseUtils.locEqualsLoc(loc, door.getLocation(), false)) + return new Object[]{house, door}; + return null; + } + + public PremiumHouse getPremiumHouseFromChest(Location loc) { + for (PremiumHouse house : this.premiumHouses) + for (PremiumHouseChest chest : house.getChests()) +// if (loc.equals(chest.getLoc1()) || loc.equals(chest.getLoc2())) + if (HouseUtils.locEqualsLoc(loc, chest.getLoc1(), false) || HouseUtils.locEqualsLoc(loc, chest.getLoc2(), false)) + return house; + return null; + } + + public void load() { + this.houses = new ArrayList<>(); + this.premiumHouses = new ArrayList<>(); + + ServerUtil.runTaskAsync(() -> { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + long start = System.currentTimeMillis(); + + // set all house data to valid + HouseDAO.resetValidData(connection); + + this.houses.addAll(HouseDAO.loadHouses(connection)); + System.out.println("Houses and data loaded. [" + this.houses.size() + "] (took " + (System.currentTimeMillis() - start) + "ms)"); + + start = System.currentTimeMillis(); + this.premiumHouses.addAll(PremiumHouseDAO.loadHouses(connection)); + System.out.println("PremiumHouses and data loaded. [" + this.premiumHouses.size() + "] (took " + (System.currentTimeMillis() - start) + "ms)"); + + } catch (SQLException e) { + e.printStackTrace(); + } + }); + +// YamlConfiguration c = Houses.getSettings().getHousesConfig(); +// for (String idString : c.getKeys(false)) { +// try { +// int id; +// try { +// id = Integer.parseInt(idString); +// } catch (NumberFormatException e) { +// continue; +// } +// int price = c.getInt(id + ".price"); +// List<HouseDoor> doors = new ArrayList<>(); +// if (c.get(id + ".doors") != null) +// for (String doorIdString : c.getConfigurationSection(id + ".doors").getKeys(false)) { +// int doorId; +// try { +// doorId = Integer.parseInt(doorIdString); +// } catch (NumberFormatException e) { +// continue; +// } +// Location doorLocation = Utils +// .blockLocationFromString(c.getString(id + ".doors." + doorId + ".location")); +// Location insideLocation = Utils +// .teleportLocationFromString(c.getString(id + ".doors." + doorId + ".insideLocation")); +// Location outsideLocation = Utils +// .teleportLocationFromString(c.getString(id + ".doors." + doorId + ".outsideLocation")); +// doors.add(new HouseDoor(doorId, id, doorLocation, insideLocation, outsideLocation)); +// } +// List<HouseChest> chests = new ArrayList<>(); +// if (c.get(id + ".chests") != null) +// for (String chestIdString : c.getConfigurationSection(id + ".chests").getKeys(false)) { +// int chestId; +// try { +// chestId = Integer.parseInt(chestIdString); +// } catch (NumberFormatException e) { +// continue; +// } +// Location loc1 = Utils.blockLocationFromString(c.getString(id + ".chests." + chestId + ".loc1")); +// Location loc2 = Utils.blockLocationFromString(c.getString(id + ".chests." + chestId + ".loc2")); +// chests.add(new HouseChest(chestId, id, loc1, loc2)); +// } +// List<Location> signs = new ArrayList<>(); +// if (c.get(id + ".signs") != null) +// signs.addAll(c.getStringList(id + ".signs").stream().map(Utils::blockLocationFromString).collect(Collectors.toList())); +// this.houses.add(new House(id, price, chests, doors, signs)); +// } catch (Exception e) { +// Houses.error("Error while parsing house " + idString); +// e.printStackTrace(); +// } +// } + +// this.premiumHouses = new ArrayList<>(); +// c = Houses.getSettings().getPremiumHousesConfig(); +// for (String idString : c.getKeys(false)) { +// try { +// int id; +// try { +// id = Integer.parseInt(idString); +// } catch (NumberFormatException e) { +// continue; +// } +// int permits = c.get(id + ".permits") == null ? 1000 : c.getInt(id + ".permits"); +// UUID owner = c.get(id + ".owner") == null ? null : UUID.fromString(c.getString(id + ".owner")); +// String ownerName = c.getString(id + ".ownerName"); +// List<PremiumHouseDoor> doors = new ArrayList<>(); +// if (c.get(id + ".doors") != null) { +// for (String doorIdString : c.getConfigurationSection(id + ".doors").getKeys(false)) { +// int doorId; +// try { +// doorId = Integer.parseInt(doorIdString); +// } catch (NumberFormatException e) { +// continue; +// } +// Location doorLocation = Utils +// .blockLocationFromString(c.getString(id + ".doors." + doorId + ".location")); +// Location insideLocation = Utils +// .teleportLocationFromString(c.getString(id + ".doors." + doorId + ".insideLocation")); +// Location outsideLocation = Utils +// .teleportLocationFromString(c.getString(id + ".doors." + doorId + ".outsideLocation")); +// doors.add(new PremiumHouseDoor(doorId, id, doorLocation, insideLocation, outsideLocation)); +// } +// } +// List<PremiumHouseChest> chests = new ArrayList<>(); +// if (c.get(id + ".chests") != null) { +// for (String chestIdString : c.getConfigurationSection(id + ".chests").getKeys(false)) { +// int chestId; +// try { +// chestId = Integer.parseInt(chestIdString); +// } catch (NumberFormatException e) { +// continue; +// } +// Location loc1 = Utils.blockLocationFromString(c.getString(id + ".chests." + chestId + ".loc1")); +// Location loc2 = Utils.blockLocationFromString(c.getString(id + ".chests." + chestId + ".loc2")); +// chests.add(new PremiumHouseChest(chestId, id, loc1, loc2)); +// } +// } +// List<Location> signs = new ArrayList<>(); +// if (c.get(id + ".signs") != null) { +// signs.addAll(c.getStringList(id + ".signs").stream().map(Utils::blockLocationFromString).collect(Collectors.toList())); +// } +// List<PremiumHouseGuest> guests = new ArrayList<>(); +// if (c.get(id + ".guests") != null) { +// for (String uuidString : c.getConfigurationSection(id + ".guests").getKeys(false)) { +// guests.add(new PremiumHouseGuest(UUID.fromString(uuidString), +// c.getString(id + ".guests." + uuidString))); +// } +// } +// Collection<EditableBlock> editableBlocks = new ArrayList<>(); +// if(c.contains(id + ".blocks")) { +// for(String loc : c.getConfigurationSection(id + ".blocks").getKeys(false)) { +// String[] original = String.valueOf(c.get(id + ".blocks." + loc + ".default")).split(","); +// String originalMaterial = String.valueOf(original[0]); +// byte originalData = Byte.valueOf(original[1]); +// editableBlocks.add(new EditableBlock(Utils.blockLocationFromString(loc), Material.matchMaterial(originalMaterial), originalData)); +// } +// } +// Collection<PremiumHouseTrashcan> trashcans = new ArrayList<>(); +// if (c.contains(id + ".trashcans")) { +// for (String trashcanIdString : c.getConfigurationSection(id + ".trashcans").getKeys(false)) { +// int trashcanId; +// try { +// trashcanId = Integer.parseInt(trashcanIdString); +// } catch (NumberFormatException e) { +// continue; +// } +// Location location = Utils.blockLocationFromString(c.getString(id + ".trashcans." + trashcanIdString + ".loc")); +// boolean owned = c.getBoolean(id + ".trashcans." + trashcanIdString + ".owned"); +// trashcans.add(new PremiumHouseTrashcan(trashcanId, id, location, owned)); +// } +// } +// this.premiumHouses.add(new PremiumHouse(id, permits, owner, ownerName, doors, chests, signs, guests, editableBlocks, trashcans)); +// } catch (Exception e) { +// Houses.error("Error while parsing premium house " + idString); +// e.printStackTrace(); +// } +// } + } + + public void save() { +// YamlConfiguration c = Houses.getSettings().getHousesConfig(); +// for (String s : c.getKeys(false)) +// c.set(s, null); +// +// for (House house : this.houses) { +// int id = house.getId(); +// c.set(id + ".price", house.getPrice()); +// +// //Door save +// for (HouseDoor door : house.getDoors()) { +// int doorId = door.getId(); +// c.set(id + ".doors." + doorId + ".location", Utils.blockLocationToString(door.getLocation())); +// c.set(id + ".doors." + doorId + ".insideLocation", Utils.teleportLocationToString(door.getInsideLocation())); +// c.set(id + ".doors." + doorId + ".outsideLocation", Utils.teleportLocationToString(door.getOutsideLocation())); +// } +// +// //Chest save +// for (HouseChest chest : house.getChests()) { +// int chestId = chest.getId(); +// c.set(id + ".chests." + chestId + ".loc1", Utils.blockLocationToString(chest.getLoc1())); +// c.set(id + ".chests." + chestId + ".loc2", Utils.blockLocationToString(chest.getLoc2())); +// } +// +// //Sign save +// c.set(id + ".signs", house.getSigns().stream().map(Utils::blockLocationToString).collect(Collectors.toList())); +// } +// Utils.saveConfig(c, "houses"); +// +// c = Houses.getSettings().getPremiumHousesConfig(); +// for (String s : c.getKeys(false)) +// c.set(s, null); +// +// for (PremiumHouse house : this.premiumHouses) { +// int id = house.getId(); +// c.set(id + ".permits", house.getPermits()); +// c.set(id + ".owner", house.getOwner() == null ? null : house.getOwner().toString()); +// c.set(id + ".ownerName", house.getOwnerName()); +// +// //Door save +// for (PremiumHouseDoor door : house.getDoors()) { +// int doorId = door.getId(); +// c.set(id + ".doors." + doorId + ".location", Utils.blockLocationToString(door.getLocation())); +// c.set(id + ".doors." + doorId + ".insideLocation", +// Utils.teleportLocationToString(door.getInsideLocation())); +// c.set(id + ".doors." + doorId + ".outsideLocation", +// Utils.teleportLocationToString(door.getOutsideLocation())); +// } +// +// //Chest save +// for (PremiumHouseChest chest : house.getChests()) { +// int chestId = chest.getId(); +// c.set(id + ".chests." + chestId + ".loc1", Utils.blockLocationToString(chest.getLoc1())); +// c.set(id + ".chests." + chestId + ".loc2", Utils.blockLocationToString(chest.getLoc2())); +// } +// +// //Sign save +// c.set(id + ".signs", house.getSigns().stream().map(Utils::blockLocationToString).collect(Collectors.toList())); +// +// //Guest save +// for (PremiumHouseGuest guest : house.getGuests()) { +// String name = guest.getName(); +// c.set(id + ".guests." + guest.getUuid(), name == null ? guest.getUuid().toString() : name); +// } +// +// //Blocks save +// for(EditableBlock location : house.getEditableBlocks()) { +// c.set(id + ".blocks." + Utils.blockLocationToString(location.getLocation()) +// + ".default", location.getDefaultType().name() + "," + location.getDefaultData()); +// } +// +// //Trashcan save +// for (PremiumHouseTrashcan premiumHouseTrashcan : house.getTrashcans()) { +// int trashcanId = premiumHouseTrashcan.getId(); +// String location = Utils.blockLocationToString(premiumHouseTrashcan.getLocation()); +// c.set(id + ".trashcans." + trashcanId + ".loc", location); +// c.set(id + ".trashcans." + trashcanId + ".owned", premiumHouseTrashcan.isOwned()); +// } +// } +// Utils.saveConfig(c, "premiumHouses"); + } + + public void createHouse(Callback<House> callback) { +// House house = new House(this.getUnusedHouseId()); +// this.houses.add(house); +// return house; + + ServerUtil.runTaskAsync(() -> { + House house = null; + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + house = HouseDAO.addHouse(connection, this.getUnusedHouseId(), 1); + } catch (SQLException e) { + e.printStackTrace(); + callback.call(null); + return; + } + + if (house == null) { + callback.call(null); + return; + } + + this.houses.add(house); + callback.call(house); + }); + } + + public void createPremiumHouse(Callback<PremiumHouse> callback) { +// PremiumHouse house = new PremiumHouse(this.getUnusedPremiumHouseId()); +// this.premiumHouses.add(house); +// return house; + ServerUtil.runTaskAsync(() -> { + PremiumHouse house = null; + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + house = PremiumHouseDAO.addHouse(connection, this.getUnusedPremiumHouseId(), 1); + } catch (SQLException e) { + e.printStackTrace(); + callback.call(null); + return; + } + + if (house == null) { + callback.call(null); + return; + } + + this.premiumHouses.add(house); + callback.call(house); + }); + } + + public void removeHouse(House house) { + house.removeAllChestsNonDB(); + house.removeAllOwnersNonDB(); + this.houses.remove(house); + + ServerUtil.runTaskAsync(() -> { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + HouseDAO.deleteHouse(connection, house.getUniqueIdentifier()); + } catch (SQLException e) { + e.printStackTrace(); + } + }); + } + + public void removePremiumHouse(PremiumHouse house) { + this.premiumHouses.remove(house); + ServerUtil.runTaskAsync(() -> { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + HouseDAO.deleteHouse(connection, house.getUniqueIdentifier()); + } catch (SQLException e) { + e.printStackTrace(); + } + }); + } + + public int getUnusedHouseId() { + for (int i = 1; i < Integer.MAX_VALUE; i++) { + if (this.getHouse(i) == null) + return i; + } + + return -1; + } + + public int getUnusedPremiumHouseId() { + for (int i = 1; i < Integer.MAX_VALUE; i++) { + if (this.getPremiumHouse(i) == null) + return i; + } + + return -1; + } + + public List<House> getHouses(int start, int end) { + return this.houses.stream().filter(house -> house.getId() >= start && house.getId() <= end).collect(Collectors.toList()); + } + + public List<PremiumHouse> getPremiumHouses(int start, int end) { + return this.premiumHouses.stream().filter(house -> house.getId() >= start && house.getId() <= end).collect(Collectors.toList()); + } + + public House getHouseFromSign(Location loc) { +// for (House house : this.houses) +// for (Location l : house.getSigns()) +// if (l.equals(loc)) +// return house; + + return this.houses.stream().filter(h -> h.getSigns().stream().anyMatch(sign -> loc.equals(sign.getLocation()))).findFirst().orElse(null); + } + + public PremiumHouse getPremiumHouseFromSign(Location loc) { +// for (PremiumHouse house : this.premiumHouses) +// for (Location l : house.getSigns()) +// if (l.equals(loc)) +// return house; + + return this.premiumHouses.stream().filter(h -> h.getSigns().stream().anyMatch(sign -> loc.equals(sign.getLocation()))).findFirst().orElse(null); + } + + public void forceSell(PremiumHouse premiumHouse, Player sender) { + Integer permits = premiumHouse.getPermits(); + premiumHouse.getChests().forEach(PremiumHouseChest::clear); + premiumHouse.getEditableBlocks().forEach(block -> { + block.getLocation().getBlock().setType(block.getDefaultType()); + block.getLocation().getBlock().setData(block.getDefaultData()); + }); + Collection<PremiumHouseTrashcan> trashcans = premiumHouse.getTrashcans().stream().filter(PremiumHouseTrashcan::isOwned).collect(Collectors.toList()); + trashcans.forEach(trashCan -> trashCan.setOwned(false)); + permits += trashcans.size() * 5; + +// Core.sql.update("update " + Core.name() + " set permits=permits+" + permits + " where uuid='" + premiumHouse.getOwner().toString() + "';"); + Integer finalPermits = permits; + ServerUtil.runTaskAsync(() -> { + BaseDatabase.runCustomQuery("update " + Core.name() + " set permits=permits+" + finalPermits + " where uuid='" + premiumHouse.getOwner().toString() + "';"); + }); + + Bukkit.broadcastMessage(Lang.HOUSES.f(premiumHouse.getOwnerName() + " &7sold premium house " + "&a" + premiumHouse.getId() + " &7for &3&l" + premiumHouse.getPermits() + " Permits&7!")); + premiumHouse.removeOwner(true); + Houses.getHousesManager().save(); + } +} diff --git a/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/houses/PremiumHouse.java b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/houses/PremiumHouse.java new file mode 100644 index 0000000..98e58cd --- /dev/null +++ b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/houses/PremiumHouse.java @@ -0,0 +1,744 @@ +package net.grandtheftmc.houses.houses; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.UUID; +import java.util.stream.Collectors; + +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.block.BlockState; +import org.bukkit.block.Sign; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitRunnable; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.database.BaseDatabase; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.util.Callback; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.gtm.users.GTMUser; +import net.grandtheftmc.houses.HouseUtils; +import net.grandtheftmc.houses.Houses; +import net.grandtheftmc.houses.JSONHelper; +import net.grandtheftmc.houses.dao.HouseDAO; +import net.grandtheftmc.houses.dao.PremiumHouseDAO; +import net.grandtheftmc.houses.users.HouseUser; + +public class PremiumHouse { + + private int uniqueIdentifier; + + private final int id; + private int permits; + private UUID owner; + private String ownerName; + private List<PremiumHouseChest> chests = new ArrayList<>(); + private List<PremiumHouseDoor> doors = new ArrayList<>(); + private List<PremiumHouseGuest> guests = new ArrayList<>(); + private List<HouseSign> signs = new ArrayList<>(); + private Collection<EditableBlock> editableBlocks = new ArrayList<>(); + private Collection<PremiumHouseTrashcan> trashcans = new ArrayList<>(); + + public PremiumHouse(int uniqueIdentifier, int id) { + this.uniqueIdentifier = uniqueIdentifier; + this.id = id; + } + + public PremiumHouse(int uniqueIdentifier, int id, int permits) { + this.uniqueIdentifier = uniqueIdentifier; + this.id = id; + this.permits = permits; + } + + public PremiumHouse(int uniqueIdentifier, int id, int permits, UUID owner, String ownerName, List<PremiumHouseDoor> doors, + List<PremiumHouseChest> chests, List<HouseSign> signs, List<PremiumHouseGuest> guests, + Collection<EditableBlock> editableBlocks, Collection<PremiumHouseTrashcan> trashcans) { + this.uniqueIdentifier = uniqueIdentifier; + this.id = id; + this.permits = permits; + this.owner = owner; + this.ownerName = ownerName; + this.doors = doors; + this.chests = chests; + this.signs = signs; + this.guests = guests; + this.editableBlocks = editableBlocks; + this.trashcans = trashcans; + } + + public int getUniqueIdentifier() { + return uniqueIdentifier; + } + + public void setUniqueIdentifier(int uniqueIdentifier) { + this.uniqueIdentifier = uniqueIdentifier; + } + + public int getId() { + return this.id; + } + + public UUID getOwner() { + return this.owner; + } + + public void setOwner(Player player) { + if (this.owner != null) { + if (Objects.equals(this.owner, player.getUniqueId())) { + player.sendMessage(Lang.HOUSES.f("&7You already own premium house &a" + this.id + "&7!")); + return; + } + player.sendMessage(Utils.f(Lang.HOUSES + "&7Someone already owns premium house &a" + this.id + "&7!")); + return; + } + player.sendMessage(Lang.HOUSES.f("&7You now own premium house &a" + this.id + "&7!")); + this.setOwner(player.getUniqueId(), player.getName(), true); + } + + public boolean isOwner(UUID uuid) { + return Objects.equals(uuid, this.owner); + } + + public int getPermits() { + return this.permits; + } + + public void setPermits(int i) { + this.permits = i; + + ServerUtil.runTaskAsync(() -> { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + HouseDAO.setPrice(connection, this.uniqueIdentifier, i); + } catch (SQLException e) { + e.printStackTrace(); + } + }); + + this.updateSigns(); + } + + public List<PremiumHouseChest> getChests() { + return this.chests; + } + + public List<PremiumHouseChest> getChests(int start, int end) { + return this.chests.stream().filter(chest -> chest.getId() >= start && chest.getId() <= end).collect(Collectors.toList()); + } + + public int getAmountOfChests() { + int i = this.chests.size(); + i += this.chests.stream().filter(chest -> chest.getLoc2() != null).count(); + return i; + } + + public PremiumHouseChest getChest(int id) { + return this.chests.stream().filter(chest -> chest.getId() == id).findFirst().orElse(null); + } + + public List<PremiumHouseGuest> getGuests() { + return this.guests; + } + + public PremiumHouseGuest getGuest(UUID uuid) { + return this.guests.stream().filter(guest -> Objects.equals(guest.getUuid(), uuid)).findFirst().orElse(null); + } + + public PremiumHouseGuest getGuest(String name) { + return this.guests.stream().filter(guest -> Objects.equals(guest.getName(), name)).findFirst().orElse(null); + } + + public void addGuest(UUID uuid, String name) { + if (this.getGuest(uuid) == null) { + this.guests.add(new PremiumHouseGuest(uuid, name)); + } + } + + /** + * Only use when pulling from database. + * @param guest + */ + public void addGuest(PremiumHouseGuest guest) { + this.guests.add(guest); + } + + public boolean isGuest(UUID uuid) { + return this.getGuest(uuid) != null; + } + + public boolean isGuest(String guest) { + return this.getGuest(guest) != null; + } + + public boolean hasAccess(Player player, HouseUser user) { + return player.isOp() || this.isGuest(player.getUniqueId()) || this.isOwner(player.getUniqueId()); + } + + public List<PremiumHouseDoor> getDoors() { + return this.doors; + } + + public List<PremiumHouseDoor> getDoors(int start, int end) { + return this.doors.stream().filter(door -> door.getId() >= start && door.getId() <= end).collect(Collectors.toList()); + } + + public PremiumHouseDoor getDoor(int id) { + return this.doors.stream().filter(door -> door.getId() == id).findFirst().orElse(null); + } + + public PremiumHouseDoor getDoor() { + if (this.doors.isEmpty()) + return null; + for (int i = 1; ; i++) { + PremiumHouseDoor door = this.getDoor(i); + if (door != null) + return door; + } + } + + public String getOwnerName() { + return this.ownerName; + } + + public void setOwnerName(String ownerName) { + this.ownerName = ownerName; + this.updateSigns(); + } + + public boolean isOwned() { + return this.owner != null; + } + + public int getUnusedChestId() { + for (int i = 1; ; i++) + if (this.getChest(i) == null) + return i; + } + + /** + * Only use for data pulled from the Database. + * @param chest + */ + public PremiumHouseChest addChest(PremiumHouseChest chest) { + this.chests.add(chest); + this.updateSigns(); + return chest; + } + + public void addChest(int chestId, int houseId, Location first, Location second, Callback<PremiumHouseChest> callback) { +// this.chests.add(chest); +// this.updateSigns(); +// return chest; + + ServerUtil.runTaskAsync(() -> { + PremiumHouseChest chest = new PremiumHouseChest(-1, chestId, houseId, first); + if (second != null) chest.setLoc2(second); + + JSONHelper helper = new JSONHelper(); + helper.put("id", chestId); + helper.put("loc1", HouseUtils.locationToString(first)); + if (second != null) helper.put("loc2", HouseUtils.locationToString(second)); + + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + PremiumHouseDAO.addChest(connection, this.uniqueIdentifier, chest, helper); + } catch (SQLException e) { + e.printStackTrace(); + callback.call(null); + return; + } + + this.chests.add(chest); + Houses.getUserManager().getLoadedUsers().stream().filter(user -> user.ownsHouse(this.id)).forEach(user -> user.getUserHouse(this.id).getChest(chestId)); + this.updateSigns(); + + callback.call(chest); + }); + } + + public void removeChest(PremiumHouseChest chest) { + this.chests.remove(chest); + + //TODO Remove house chest. + ServerUtil.runTaskAsync(() -> { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + HouseDAO.deleteChestData(connection, chest.getHotspotId()); + } catch (SQLException e) { + e.printStackTrace(); + } + }); + + this.updateSigns(); + } + + public void removeAllChests() { + this.chests.clear(); + + //TODO Remove all house chests. + ServerUtil.runTaskAsync(() -> { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + HouseDAO.deleteAllChestData(connection, this.uniqueIdentifier); + } catch (SQLException e) { + e.printStackTrace(); + } + }); + + this.updateSigns(); + } + + public void addDoor(Callback<PremiumHouseDoor> callback) { + ServerUtil.runTaskAsync(() -> { + PremiumHouseDoor door = new PremiumHouseDoor(-1, this.getUnusedDoorId(), this.id); + + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + PremiumHouseDAO.addDoor(connection, this.uniqueIdentifier, door, null); + } catch (SQLException e) { + e.printStackTrace(); + callback.call(null); + return; + } + + this.doors.add(door); + callback.call(door); + }); + } + + public PremiumHouseDoor addDoor(PremiumHouseDoor door) { + this.doors.add(door); + return door; + } + + private int getUnusedDoorId() { + for (int i = 1; ; i++) + if (this.getDoor(i) == null) + return i; + } + + public void removeDoor(PremiumHouseDoor door) { + this.doors.remove(door); + ServerUtil.runTaskAsync(() -> { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + HouseDAO.removeDoor(connection, this.uniqueIdentifier, door.getHotspotId()); + } catch (SQLException e) { + e.printStackTrace(); + } + }); + } + + public void removeAllDoors() { + this.doors.clear(); + + ServerUtil.runTaskAsync(() -> { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + HouseDAO.removeAllDoors(connection, this.uniqueIdentifier); + } catch (SQLException e) { + e.printStackTrace(); + } + }); + } + + public List<HouseSign> getSigns() { + return this.signs; + } + + /** + * Only used when pulling from database. + * @param sign + */ + public void addSign(HouseSign sign) { + this.signs.add(sign); + ServerUtil.runTask(() -> this.updateSign(sign.getLocation())); +// this.updateSign(sign.getLocation()); + } + + public void addSign(Location loc, Callback<HouseSign> callback) { + ServerUtil.runTaskAsync(() -> { + HouseSign sign = new HouseSign(-1, this.uniqueIdentifier, loc); + + JSONHelper helper = new JSONHelper(); + helper.put("loc", HouseUtils.locationToString(loc)); + + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + HouseDAO.addSign(connection, this.uniqueIdentifier, sign, helper); + } catch (SQLException e) { + e.printStackTrace(); + callback.call(null); + return; + } + + this.signs.add(sign); + ServerUtil.runTask(() -> this.updateSign(sign.getLocation())); +// this.updateSign(sign.getLocation()); + callback.call(sign); + }); + } + + public void removeSign(Location loc) { + HouseSign sign = this.signs.stream().filter(s -> loc.equals(s.getLocation())).findFirst().orElse(null); + if (sign == null) return; + this.signs.remove(sign); + + ServerUtil.runTaskAsync(() -> { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + HouseDAO.deleteSign(connection, sign.getHotspotId()); + } catch (SQLException e) { + e.printStackTrace(); + } + }); + } + + public void removeAllSigns() { + this.signs.clear(); + ServerUtil.runTaskAsync(() -> { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + HouseDAO.deleteAllSigns(connection, this.uniqueIdentifier); + } catch (SQLException e) { + e.printStackTrace(); + } + }); + } + + public List<HouseSign> getSigns(int start, int end) { + return this.signs.subList(start, end); + } + + public void updateSigns() { + int id = this.id; + new BukkitRunnable() { + @Override + public void run() { + PremiumHouse house = Houses.getHousesManager().getPremiumHouse(id); + if (house != null) + new ArrayList<>(house.getSigns()).forEach(s -> updateSign(s.getLocation())); + } + }.runTask(Houses.getInstance()); + + } + + public void updateSign(Location loc) { + BlockState state = loc.getBlock().getState(); + if (!(state instanceof Sign)) { + this.removeSign(loc); + return; + } + Sign sign = (Sign) state; + sign.setLine(0, Utils.f("&3&lPremium House &a&l" + this.id)); + sign.setLine(1, Utils.f("&8Chests: &a&l" + this.getAmountOfChests())); + sign.setLine(2, Utils.f("&8Permits: &a&l" + this.permits)); + sign.setLine(3, Utils.f(this.isOwned() ? "&cOwned" : "&aVacant")); + sign.update(); + } + + public void buy(Player player, User user, GTMUser gtmUser, HouseUser houseUser) { + if (!Houses.ENABLED) { + player.sendMessage(Lang.HOUSES.f("&cHouses is currently disabled, try again soon!")); + return; + } + + if (this.owner != null) { + if (Objects.equals(this.owner, player.getUniqueId())) { + player.sendMessage(Utils.f(Lang.HOUSES + "&7You already own this premium house!")); + return; + } + player.sendMessage(Utils.f(Lang.HOUSES + "&7This premium house is already owned by &a" + this.owner + "&7!")); + return; + } + + /** + * Prevent house from being bought. + * + * Ignore the silly if check, it's so i can find the if statement later. + */ +// if ("disable".equalsIgnoreCase("disable")) { +// player.sendMessage(Utils.f(Lang.HOUSES + "&7Purchasing premium houses is temporarily disabled.")); +// player.sendMessage(Utils.f(Lang.HOUSES + "&7Try again later..")); +// return; +// } + + if (houseUser.hasMaxHouses(player, user, gtmUser)) { + player.sendMessage(Lang.HOUSES.f("&7You have hit the maximum amount of houses you can own!")); + return; + } + if (!gtmUser.hasPermits(this.permits)) { + player.sendMessage(Lang.HOUSES.f("&7You can not afford the &3&l" + this.permits + " Permits&7 to pay for this premium house!")); + return; + } + gtmUser.takePermits(this.permits); + this.setOwner(player.getUniqueId(), player.getName(), true);//TODO Make sure this method updates database. + player.sendMessage(Lang.HOUSES.f("&7You bought premium house &a" + this.id + "&7 for &3&l" + this.permits + " Permits&7!")); + Utils.insertLogLater(player.getUniqueId(), player.getName(), "buyPremiumHouseMethod", "BUY_PREMIUM_HOUSE", "Premium House ID: " + this.id,1,this.permits); + Bukkit.broadcastMessage(Lang.HOUSES.f(user.getColoredName(player) + " &7bought premium house " + "&a" + this.id + " &7for &3&l" + this.permits + " Permits&7!")); + Houses.getHousesManager().save(); + } + + public void forceSetOwner(Player player) { + if (!Houses.ENABLED) { + player.sendMessage(Lang.HOUSES.f("&cHouses is currently disabled, try again soon!")); + return; + } + + Player own = Bukkit.getPlayer(this.owner); + if (own != null) { + HouseUser user = Houses.getUserManager().getLoadedUser(own.getUniqueId()); + own.sendMessage(Lang.HOUSES.f("&7You no longer own premium house &a" + this.id + "&7!")); + if (user.isInsidePremiumHouse(this.id)) + user.teleportInOrOutPremiumHouse(own, this); + } + player.sendMessage(Lang.HOUSES.f("&7You now own premium house &a" + this.id + "&7!")); + this.setOwner(player.getUniqueId(), player.getName(), true);//TODO Make sure this method updates database. + } + + public void setOwner(UUID uuid, String name, boolean clearGuests) { + this.owner = uuid; + this.ownerName = name; + if (clearGuests) + this.guests.clear(); + + + //TODO Set owner of premium house. + ServerUtil.runTaskAsync(() -> { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + + // if we clear guests + if (clearGuests){ + // delete all guests + PremiumHouseDAO.deleteHouseUsers(connection, this.uniqueIdentifier, false); + } + + // add the owner as the owner of the house + PremiumHouseDAO.addHouseGuest(connection, this.uniqueIdentifier, uuid, true); + } catch (SQLException e) { + e.printStackTrace(); + } + + ServerUtil.runTask(this::updateSigns); + }); + } + + /** + * Only use for setting data via DAO's + */ + public void setOwner(UUID uuid, String name) { + this.owner = uuid; + this.ownerName = name; + + this.updateSigns(); + } + + public void sell(Player player, GTMUser gtmUser, HouseUser houseUser) { + if (this.owner == null) { + player.sendMessage(Utils.f(Lang.HOUSES + "&7No one owns this premium house!")); + return; + } + + if (!Houses.ENABLED) { + player.sendMessage(Lang.HOUSES.f("&cHouses is currently disabled, try again soon!")); + return; + } + + if (!Objects.equals(this.owner, player.getUniqueId())) { + player.sendMessage(Utils.f(Lang.HOUSES + "&7You don't own this premium house!")); + return; + } + + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + gtmUser.addPermits(this.permits); + this.removeOwner(true);//TODO Make sure this method updates database. + if (houseUser.isInsidePremiumHouse(this.id)) + houseUser.teleportInOrOutPremiumHouse(player, this); + this.getEditableBlocks().forEach(block -> { + block.getLocation().getBlock().setType(block.getDefaultType()); + block.getLocation().getBlock().setData(block.getDefaultData()); + }); + this.getTrashcans().stream().filter(PremiumHouseTrashcan::isOwned).forEach(trashCan -> { + trashCan.setOwned(false);//TODO Make sure this method updates database. + gtmUser.addPermits(5); + }); + this.getChests().forEach(PremiumHouseChest::clear); + Utils.insertLogLater(player.getUniqueId(), player.getName(), "sellPremiumHouseMethod", "SELL_PREMIUM_HOUSE", "Premium House ID: " + this.id,1,this.permits); + Bukkit.broadcastMessage(Lang.HOUSES.f(user.getColoredName(player) + " &7sold premium house " + "&a" + this.id + " &7for &3&l" + this.permits + " Permits&7!")); + Houses.getHousesManager().save(); + } + + public void removeOwner(Player player, HouseUser user) { + if (!Objects.equals(this.owner, player.getUniqueId())) { + player.sendMessage(Lang.HOUSES.f("&7You don't own premium house &a" + this.id + "&7!")); + return; + } + + if (!Houses.ENABLED) { + player.sendMessage(Lang.HOUSES.f("&cHouses is currently disabled, try again soon!")); + return; + } + + player.sendMessage(Lang.HOUSES.f("&7You no longer own premium house &a" + this.id + "&7!")); + this.removeOwner(true);//TODO Make sure this method updates database. + if (user.isInsidePremiumHouse(this.id)) + user.teleportInOrOutPremiumHouse(player, this); + } + + public void removeOwner(boolean clearGuests) { + this.owner = null; + this.ownerName = null; + if (clearGuests) + this.guests.clear(); + + ServerUtil.runTaskAsync(() -> { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + PremiumHouseDAO.deleteHouseUsers(connection, this.uniqueIdentifier, true); + if (clearGuests) PremiumHouseDAO.deleteHouseUsers(connection, this.uniqueIdentifier, false); + } catch (SQLException e) { + e.printStackTrace(); + } + }); + + this.updateSigns(); + } + + public void addGuest(Player sender, Player target, HouseUser user) { + if (!Objects.equals(this.owner, sender.getUniqueId())) { + sender.sendMessage(Utils.f(Lang.HOUSES + "&7You don't own this premium house!")); + return; + } + + if (Objects.equals(sender, target)) { + sender.sendMessage(Utils.f(Lang.HOUSES + "&7You can't add yourself as a guest!")); + return; + } + + if (this.isGuest(target.getUniqueId())) { + sender.sendMessage(Utils.f(Lang.HOUSES + "&7That player is already a guest of this premium house!")); + return; + } + + sender.sendMessage(Lang.HOUSES.f("&7You added &a" + target.getName() + "&7 as a guest to premium house &a" + this.id + '!')); + target.sendMessage(Lang.HOUSES.f("&a" + sender.getName() + "&7 added you a guest to premium house &a" + this.id + "&7!")); + this.addGuest(target);//TODO Make sure this method updates database. + } + + public void addGuest(Player player) { + this.guests.add(new PremiumHouseGuest(player.getUniqueId(), player.getName())); + + ServerUtil.runTaskAsync(() -> { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + PremiumHouseDAO.addHouseGuest(connection, this.uniqueIdentifier, player.getUniqueId(), false); + } catch (SQLException e) { + e.printStackTrace(); + } + }); + } + + public void removeGuest(Player sender, Player target, HouseUser user) { + if (!Objects.equals(this.owner, sender.getUniqueId())) { + sender.sendMessage(Utils.f(Lang.HOUSES + "&7You don't own this premium house!")); + return; + } + + if (!this.isGuest(target.getUniqueId())) { + sender.sendMessage(Utils.f(Lang.HOUSES + "&7That player is not a guest of this premium house!")); + return; + } + + if (user.isInsidePremiumHouse(this.id)) + user.teleportInOrOutPremiumHouse(target, this); + + sender.sendMessage(Lang.HOUSES.f("&7You removed &a" + target.getName() + "&7 as a guest from premium house &a" + this.id + '!')); + target.sendMessage(Lang.HOUSES.f("&a" + sender.getName() + "&7 removed you as a guest from premium house &a" + this.id + "&7!")); + this.removeGuest(target.getUniqueId());//TODO Make sure this method updates database. + } + + public void removeGuest(Player sender, String guest) { + if (!Objects.equals(this.owner, sender.getUniqueId())) { + sender.sendMessage(Utils.f(Lang.HOUSES + "&7You don't own this premium house!")); + return; + } + + if (!this.isGuest(guest)) { + sender.sendMessage(Utils.f(Lang.HOUSES + "&7That player is not a guest of this premium house!")); + return; + } + + this.removeGuest(guest);//TODO Make sure this method updates database. + sender.sendMessage(Lang.HOUSES.f("&7You removed &a" + guest + "&7 as a guest from premium house &a" + this.id + "!&")); + } + + public void removeGuest(UUID uuid) { + this.guests.remove(this.getGuest(uuid)); + + ServerUtil.runTaskAsync(() -> { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + PremiumHouseDAO.deleteHouseGuest(connection, this.uniqueIdentifier, uuid); + } catch (SQLException e) { + e.printStackTrace(); + } + }); + } + + public void removeGuest(String name) { + removeGuest(this.getGuest(name).getUuid()); + } + + public Collection<EditableBlock> getEditableBlocks() { + return this.editableBlocks; + } + + public Collection<PremiumHouseTrashcan> getTrashcans() { + return trashcans; + } + + public Optional<PremiumHouseTrashcan> getTrashcan(Location location) { + if (this.trashcans.isEmpty()) return Optional.empty(); + return this.trashcans.stream().filter(trashcan -> trashcan.getLocation().equals(location)).findFirst(); + } + + public void addTrashcan(PremiumHouseTrashcan trashcan) { + this.trashcans.add(trashcan); + } + + public void addTrashcan(int trashcanId, int houseId, Location location, boolean owned, Callback<PremiumHouseTrashcan> callback) { + ServerUtil.runTaskAsync(() -> { + PremiumHouseTrashcan block = new PremiumHouseTrashcan(-1, trashcanId, houseId, location, owned); + + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + PremiumHouseDAO.addTrashcan(connection, this.uniqueIdentifier, block, new JSONHelper() + .put("id", trashcanId).put("loc", HouseUtils.locationToString(location)).put("owned", owned)); + } catch (SQLException e) { + e.printStackTrace(); + callback.call(null); + return; + } + + this.trashcans.add(block); + callback.call(block); + }); + } + + public void addEditableBlock(EditableBlock block) { + this.editableBlocks.add(block); + } + + public void addEditableBlock(Location location, Material material, byte data, Callback<EditableBlock> callback) { + ServerUtil.runTaskAsync(() -> { + EditableBlock block = new EditableBlock(-1, location, material, data); + + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + PremiumHouseDAO.addBlock(connection, this.uniqueIdentifier, block, new JSONHelper() + .put("loc", HouseUtils.locationToString(location)).put("block_data", material.name() + "," + data)); + } catch (SQLException e) { + e.printStackTrace(); + callback.call(null); + return; + } + + this.editableBlocks.add(block); + callback.call(block); + }); + } +} diff --git a/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/houses/PremiumHouseChest.java b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/houses/PremiumHouseChest.java new file mode 100644 index 0000000..63f0987 --- /dev/null +++ b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/houses/PremiumHouseChest.java @@ -0,0 +1,77 @@ +package net.grandtheftmc.houses.houses; + +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.block.BlockState; +import org.bukkit.block.Chest; + +public class PremiumHouseChest { + + private int hotspotId; + + private final int chestId; + private final int houseId; + private Location loc1; + private Location loc2; + + public PremiumHouseChest(int hotspotId, int chestId, int houseId, Location loc1) { + this.hotspotId = hotspotId; + this.chestId = chestId; + this.houseId = houseId; + this.loc1 = loc1; + } + + public PremiumHouseChest(int hotspotId, int chestId, int houseId, Location loc1, Location loc2) { + this.hotspotId = hotspotId; + this.chestId = chestId; + this.houseId = houseId; + this.loc1 = loc1; + this.loc2 = loc2; + } + + public int getHotspotId() { + return hotspotId; + } + + public void setHotspotId(int hotspotId) { + this.hotspotId = hotspotId; + } + + public int getId() { + return this.chestId; + } + + public int getHouseId() { + return this.houseId; + } + + public Location getLoc1() { + return this.loc1; + } + + public void setLoc1(Location loc1) { + this.loc1 = loc1; + } + + public Location getLoc2() { + return this.loc2; + } + + public void setLoc2(Location loc2) { + this.loc2 = loc2; + } + + public void clear() { + BlockState state = this.getLoc1().getBlock().getState(); + if (state.getType() != Material.CHEST) return; + Chest chest = (Chest) state; + chest.getBlockInventory().clear(); + if (this.getLoc2() != null) { + state = this.getLoc2().getBlock().getState(); + if (state.getType() != Material.CHEST) return; + chest = (Chest) state; + chest.getBlockInventory().clear(); + } + } + +} diff --git a/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/houses/PremiumHouseDoor.java b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/houses/PremiumHouseDoor.java new file mode 100644 index 0000000..5a0bea0 --- /dev/null +++ b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/houses/PremiumHouseDoor.java @@ -0,0 +1,76 @@ +package net.grandtheftmc.houses.houses; + +import org.bukkit.Location; + +public class PremiumHouseDoor { + + private int hotspotId; + + private final int doorId; + private final int houseId; + private Location doorLocation; + private Location insideLocation; + private Location outsideLocation; + + public PremiumHouseDoor(int hotspotId, int doorId, int houseId) { + this.hotspotId = hotspotId; + this.doorId = doorId; + this.houseId = houseId; + } + + public PremiumHouseDoor(int hotspotId, int doorId, int houseId, Location doorLocation) { + this.hotspotId = hotspotId; + this.doorId = doorId; + this.houseId = houseId; + this.doorLocation = doorLocation; + } + + public PremiumHouseDoor(int hotspotId, int doorId, int houseId, Location doorLocation, Location insideLocation, Location outsideLocation) { + this.hotspotId = hotspotId; + this.doorId = doorId; + this.houseId = houseId; + this.doorLocation = doorLocation; + this.insideLocation = insideLocation; + this.outsideLocation = outsideLocation; + } + + public int getHotspotId() { + return hotspotId; + } + + public void setHotspotId(int hotspotId) { + this.hotspotId = hotspotId; + } + + public int getId() { + return this.doorId; + } + + public int getHouseId() { + return this.houseId; + } + + public Location getLocation() { + return this.doorLocation; + } + + public void setLocation(Location doorLocation) { + this.doorLocation = doorLocation; + } + + public Location getInsideLocation() { + return this.insideLocation; + } + + public void setInsideLocation(Location insideLocation) { + this.insideLocation = insideLocation; + } + + public Location getOutsideLocation() { + return this.outsideLocation; + } + + public void setOutsideLocation(Location outsideLocation) { + this.outsideLocation = outsideLocation; + } +} diff --git a/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/houses/PremiumHouseGuest.java b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/houses/PremiumHouseGuest.java new file mode 100644 index 0000000..1f016d6 --- /dev/null +++ b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/houses/PremiumHouseGuest.java @@ -0,0 +1,35 @@ +package net.grandtheftmc.houses.houses; + +import java.util.UUID; + +public class PremiumHouseGuest { + + private UUID uuid; + private String name; + + public PremiumHouseGuest(UUID uuid) { + this.uuid = uuid; + } + + public PremiumHouseGuest(UUID uuid, String name) { + this.uuid = uuid; + this.name = name; + } + + public UUID getUuid() { + return this.uuid; + } + + public void setUuid(UUID uuid) { + this.uuid = uuid; + } + + public String getName() { + return this.name; + } + + public void setName(String name) { + this.name = name; + } + +} diff --git a/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/houses/PremiumHouseTrashcan.java b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/houses/PremiumHouseTrashcan.java new file mode 100644 index 0000000..d021a93 --- /dev/null +++ b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/houses/PremiumHouseTrashcan.java @@ -0,0 +1,69 @@ +package net.grandtheftmc.houses.houses; + +import net.grandtheftmc.core.database.BaseDatabase; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.houses.HouseUtils; +import net.grandtheftmc.houses.JSONHelper; +import net.grandtheftmc.houses.dao.PremiumHouseDAO; +import org.bukkit.Location; + +import java.sql.Connection; +import java.sql.SQLException; + +public class PremiumHouseTrashcan { + + private int hotspotId; + + private final int trashcanId; + private final int houseId; + private boolean owned = false; + private Location location; + + public PremiumHouseTrashcan(int hotspotId, int trashcanId, int houseId, Location location, boolean owned) { + this.hotspotId = hotspotId; + this.trashcanId = trashcanId; + this.houseId = houseId; + this.location = location; + this.owned = owned; + } + + public int getHotspotId() { + return hotspotId; + } + + public void setHotspotId(int hotspotId) { + this.hotspotId = hotspotId; + } + + public int getId() { + return this.trashcanId; + } + + public int getHouseId() { + return this.houseId; + } + + public Location getLocation() { + return this.location; + } + + public void setLocation(Location location) { + this.location = location; + } + + public boolean isOwned() { + return this.owned; + } + + public void setOwned(boolean owned) { + this.owned = owned; + + ServerUtil.runTaskAsync(() -> { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + PremiumHouseDAO.setTrashcanOwned(connection, this.hotspotId, new JSONHelper().put("id", this.trashcanId).put("loc", HouseUtils.locationToString(this.location)).put("owned", owned)); + } catch (SQLException e) { + e.printStackTrace(); + } + }); + } +} diff --git a/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/listeners/BreakBlock.java b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/listeners/BreakBlock.java new file mode 100644 index 0000000..7f6d2c3 --- /dev/null +++ b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/listeners/BreakBlock.java @@ -0,0 +1,44 @@ +package net.grandtheftmc.houses.listeners; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.houses.Houses; +import net.grandtheftmc.houses.houses.*; +import org.bukkit.Material; +import org.bukkit.block.BlockState; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockBreakEvent; + +public class BreakBlock implements Listener { + + @EventHandler(priority = EventPriority.HIGH) + public void onBreak(BlockBreakEvent e) { + if (e.isCancelled()) + return; + BlockState block = e.getBlock().getState(); + if (block.getType() != Material.CHEST) + return; + HousesManager hm = Houses.getManager(); + Object[] houseAndChest = hm.getHouseAndChest(block.getLocation()); + if (houseAndChest == null) + return; + e.setCancelled(true); + Player player = e.getPlayer(); + if (houseAndChest[0] instanceof PremiumHouse) { + PremiumHouse house = (PremiumHouse) houseAndChest[0]; + PremiumHouseChest chest = (PremiumHouseChest) houseAndChest[1]; + if (player.hasPermission("houses.admin")) + player.sendMessage(Utils.f(Lang.HOUSES + "&7This PremiumHouseChest with ID &a" + chest.getId() + "&7 belongs to premium house &a" + house.getId() + + "&7! Please remove it with &3/hc remove &a<id>&7 before breaking it!")); + } + House house = (House) houseAndChest[0]; + HouseChest chest = (HouseChest) houseAndChest[1]; + if (player.hasPermission("houses.admin")) + player.sendMessage(Utils.f(Lang.HOUSES + "&7This HouseChest with ID &a" + chest.getId() + "&7 belongs to house &a" + house.getId() + + "&7! Please remove it with &3/hc remove &a<id>&7 before breaking it!")); + } + +} diff --git a/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/listeners/Chat.java b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/listeners/Chat.java new file mode 100644 index 0000000..189bb5c --- /dev/null +++ b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/listeners/Chat.java @@ -0,0 +1,63 @@ +package net.grandtheftmc.houses.listeners; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.menus.MenuManager; +import net.grandtheftmc.houses.Houses; +import net.grandtheftmc.houses.houses.PremiumHouse; +import net.grandtheftmc.houses.users.HouseUser; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.scheduler.BukkitRunnable; + +import java.util.UUID; + +public class Chat implements Listener { + + @EventHandler(priority = EventPriority.LOW) + public void onChat(AsyncPlayerChatEvent e) { + Player player = e.getPlayer(); + UUID uuid = player.getUniqueId(); + String msg = e.getMessage(); + HouseUser user = Houses.getUserManager().getLoadedUser(uuid); + if (user.isAddingGuest()) { + e.setCancelled(true); + new BukkitRunnable() { + @Override + public void run() { + Player player = Bukkit.getPlayer(uuid); + if (player == null) + return; + + HouseUser user = Houses.getUserManager().getLoadedUser(uuid); + if ("quit".equalsIgnoreCase(msg)) { + player.sendMessage(Utils.f(Lang.HOUSES + "&7You quit adding a guest!")); + user.setMenuHouseId(user.getAddingGuest()); + user.setAddingGuest(-1); + MenuManager.openMenu(player, "guests"); + return; + } + + Player target = Bukkit.getPlayer(msg); + if (target == null) { + player.sendMessage(Utils.f(Lang.HOUSES + "&7That player is not online!")); + user.setMenuHouseId(user.getAddingGuest()); + user.setAddingGuest(-1); + MenuManager.openMenu(player, "guests"); + return; + } + + PremiumHouse house = Houses.getManager().getPremiumHouse(user.getAddingGuest()); + house.addGuest(player, target, user); + user.setMenuHouseId(user.getAddingGuest()); + user.setAddingGuest(-1); + MenuManager.openMenu(player, "guests"); + } + }.runTask(Houses.getInstance()); + } + } +} diff --git a/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/listeners/Damage.java b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/listeners/Damage.java new file mode 100644 index 0000000..39910a9 --- /dev/null +++ b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/listeners/Damage.java @@ -0,0 +1,57 @@ +package net.grandtheftmc.houses.listeners; + +import com.j0ach1mmall3.wastedguns.api.events.explosives.ExplosionDamageEntityEvent; +import net.grandtheftmc.houses.Houses; +import net.grandtheftmc.houses.users.HouseUser; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.EntityDamageEvent; + +import java.util.ArrayList; +import java.util.Collection; + +public class Damage implements Listener { + + @EventHandler + public void onExplosionDamage(ExplosionDamageEntityEvent event) { + Collection<LivingEntity> remove = new ArrayList<>(); + event.getVictims().forEach(livingEntity -> { + if(livingEntity.getType() != EntityType.PLAYER) return; + Player target = (Player)livingEntity; + HouseUser houseUser = Houses.getUserManager().getLoadedUser(target.getUniqueId()); + if(houseUser.isInsidePremiumHouse() || houseUser.isInsideHouse()) { + remove.add(livingEntity); + } + }); + event.getVictims().removeAll(remove); + } + + @EventHandler(priority = EventPriority.HIGHEST) + public void onDamage(EntityDamageEvent event) { + if (event.getEntity().getType() != EntityType.PLAYER) return; + Player player = (Player) event.getEntity(); + HouseUser user = Houses.getUserManager().getLoadedUser(player.getUniqueId()); + if (user.isInsideHouse() || user.isInsidePremiumHouse()) { + event.setCancelled(true); + } + } + + @EventHandler(priority = EventPriority.HIGHEST) + public void onEntityDamageEntity(EntityDamageByEntityEvent event) { + if (event.getEntity().getType() != EntityType.PLAYER) return; + if (event.getDamager().getType() != EntityType.PLAYER) return; + + HouseUser victim = Houses.getUserManager().getLoadedUser(event.getEntity().getUniqueId()); + HouseUser attacker = Houses.getUserManager().getLoadedUser(event.getEntity().getUniqueId()); + + if ((victim.isInsideHouse() || victim.isInsidePremiumHouse()) + || (attacker.isInsideHouse() || attacker.isInsidePremiumHouse())) { + event.setCancelled(true); + } + } +} \ No newline at end of file diff --git a/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/listeners/Death.java b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/listeners/Death.java new file mode 100644 index 0000000..0d165a2 --- /dev/null +++ b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/listeners/Death.java @@ -0,0 +1,21 @@ +package net.grandtheftmc.houses.listeners; + +import net.grandtheftmc.houses.Houses; +import net.grandtheftmc.houses.users.HouseUser; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; + +public class Death implements Listener { + + @EventHandler + public void onDeath(PlayerDeathEvent e) { + Player player = e.getEntity(); + HouseUser user = Houses.getUserManager().getLoadedUser(player.getUniqueId()); + if (user.isInsideHouse()) { + user.setInsideHouse(-1); + user.updateVisibility(player); + } + } +} diff --git a/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/listeners/Interact.java b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/listeners/Interact.java new file mode 100644 index 0000000..cf4f61a --- /dev/null +++ b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/listeners/Interact.java @@ -0,0 +1,714 @@ +package net.grandtheftmc.houses.listeners; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.Arrays; +import java.util.Collection; +import java.util.Objects; +import java.util.Optional; +import java.util.UUID; + +import net.grandtheftmc.core.database.BaseDatabase; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.houses.dao.HouseDAO; +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; +import org.bukkit.block.BlockState; +import org.bukkit.block.Chest; +import org.bukkit.block.Sign; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.inventory.InventoryCloseEvent; +import org.bukkit.event.inventory.InventoryType; +import org.bukkit.event.player.PlayerInteractEntityEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.EquipmentSlot; +import org.bukkit.inventory.Inventory; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.menus.MenuManager; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.gtm.trashcan.TrashCanManager; +import net.grandtheftmc.houses.HouseUtils; +import net.grandtheftmc.houses.Houses; +import net.grandtheftmc.houses.houses.Blocks; +import net.grandtheftmc.houses.houses.EditableBlock; +import net.grandtheftmc.houses.houses.House; +import net.grandtheftmc.houses.houses.HouseChest; +import net.grandtheftmc.houses.houses.HouseDoor; +import net.grandtheftmc.houses.houses.HousesManager; +import net.grandtheftmc.houses.houses.PremiumHouse; +import net.grandtheftmc.houses.houses.PremiumHouseChest; +import net.grandtheftmc.houses.houses.PremiumHouseDoor; +import net.grandtheftmc.houses.houses.PremiumHouseTrashcan; +import net.grandtheftmc.houses.users.HouseUser; + +public class Interact implements Listener { + + @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) + protected final void onInteract(PlayerInteractEvent e) { + + if (e.getHand() != EquipmentSlot.HAND) { + return; + } + + Player player = e.getPlayer(); + UUID uuid = player.getUniqueId(); + User u = Core.getUserManager().getLoadedUser(uuid); + if (!u.hasEditMode()) return; + BlockState state = e.getClickedBlock() == null ? null : e.getClickedBlock().getState(); + HousesManager hm = Houses.getManager(); + HouseUser user = Houses.getUserManager().getLoadedUser(uuid); + + if (u.isAdmin() && user.isRemovingDoor() && state != null && state.getType() == Material.IRON_DOOR_BLOCK) { + e.setCancelled(true); + Block underneath = e.getClickedBlock().getRelative(BlockFace.DOWN); + if (underneath.getType() == Material.IRON_DOOR_BLOCK) + state = underneath.getState(); + Location loc = state.getLocation(); + Object[] houseAndDoor = hm.getHouseAndDoor(loc); + if (houseAndDoor == null) { + player.sendMessage(Utils.f(Lang.HOUSES + "&7This door doesn't belong to any house!")); + return; + } + if (houseAndDoor[0] instanceof PremiumHouse) { + PremiumHouse premiumHouse = (PremiumHouse) houseAndDoor[0]; + if (!premiumHouse.equals(user.getEditingPremiumHouse())) { + player.sendMessage(Lang.HOUSES + .f("&7This door does not belong to the house you are editing! It belongs to premium house &a" + + premiumHouse.getId() + "&7!")); + return; + } + PremiumHouseDoor door = (PremiumHouseDoor) houseAndDoor[1]; + premiumHouse.removeDoor(door); + player.sendMessage(Utils.f(Lang.HOUSES + "&7You removed a door with id &a" + door.getId() + + "&7 from premium house &a" + premiumHouse.getId() + "&7.")); + return; + } + House house = (House) houseAndDoor[0]; + if (!house.equals(user.getEditingHouse())) { + player.sendMessage(Utils.f( + Lang.HOUSES + "&7This door does not belong to the house you are editing! It belongs to house &a" + + house.getId() + "&7!")); + return; + } + HouseDoor door = (HouseDoor) houseAndDoor[1]; + house.removeDoor(door); + player.sendMessage(Utils.f(Lang.HOUSES + "&7You removed a door with id &a" + door.getId() + + "&7 from house &a" + house.getId() + "&7.")); + return; + } + + if (u.isAdmin() && (user.isAddingDoor() || user.isAddingPremiumDoor())) { + if (((user.isAddingDoor() && user.getAddingDoor().getLocation() == null) || (user.isAddingPremiumDoor() && user.getAddingPremiumDoor().getLocation() == null)) && state != null && state.getType() == Material.IRON_DOOR_BLOCK) { + e.setCancelled(true); + Block underneath = e.getClickedBlock().getRelative(BlockFace.DOWN); + if (underneath.getType() == Material.IRON_DOOR_BLOCK) + state = underneath.getState(); + Location loc = state.getLocation(); + Object[] houseAndDoor = hm.getHouseAndDoor(loc); + if (houseAndDoor != null) { + if (houseAndDoor[0] instanceof PremiumHouse) { + PremiumHouse house = (PremiumHouse) houseAndDoor[0]; + player.sendMessage(Utils.f(Lang.HOUSES + "&7This door is added to premium house &a" + house.getId() + "&7 already!")); + return; + } + House house = (House) houseAndDoor[0]; + player.sendMessage(Utils.f(Lang.HOUSES + "&7This door is added to house &a" + house.getId() + "&7 already!")); + return; + } + + if (user.isAddingPremiumDoor()) { + PremiumHouseDoor door = user.getAddingPremiumDoor(); + door.setLocation(state.getLocation()); + player.sendMessage(Utils + .f(Lang.HOUSES + "&7You set the door location for premium door &a" + door.getId() + "&7.")); + if (door.getLocation() != null && door.getInsideLocation() != null + && door.getOutsideLocation() != null) { + user.setAddingPremiumDoor(null); + player.sendMessage(Utils.f(Lang.HOUSES + "&7You have completed the setup for door &a" + door.getId() + "&7!")); + ServerUtil.runTaskAsync(() -> { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + HouseDAO.updateDoor(connection, door.getHotspotId(), door.getId(), door.getLocation(), door.getInsideLocation(), door.getOutsideLocation()); + } catch (SQLException ex) { + ex.printStackTrace(); + } + }); + } + return; + } + + HouseDoor door = user.getAddingDoor(); + door.setLocation(state.getLocation()); + player.sendMessage(Utils.f(Lang.HOUSES + "&7You set the door location for door &a" + door.getId() + "&7.")); + if (door.getLocation() != null && door.getInsideLocation() != null && door.getOutsideLocation() != null) { + user.setAddingDoor(null); + player.sendMessage(Utils.f(Lang.HOUSES + "&7You have completed the setup for door &a" + door.getId() + "&7!")); + ServerUtil.runTaskAsync(() -> { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + HouseDAO.updateDoor(connection, door.getHotspotId(), door.getId(), door.getLocation(), door.getInsideLocation(), door.getOutsideLocation()); + } catch (SQLException ex) { + ex.printStackTrace(); + } + }); + } + + return; + } + switch (e.getAction()) { + case LEFT_CLICK_AIR: + case LEFT_CLICK_BLOCK: { + e.setCancelled(true); + if (user.isAddingPremiumDoor()) { + PremiumHouseDoor door = user.getAddingPremiumDoor(); + door.setInsideLocation(player.getLocation()); + player.sendMessage(Utils.f(Lang.HOUSES + "&7You set the inside location for door &a" + door.getId() + "&7.")); + if (door.getLocation() != null && door.getInsideLocation() != null && door.getOutsideLocation() != null) { + user.setAddingPremiumDoor(null); + player.sendMessage(Utils.f(Lang.HOUSES + "&7You have completed the setup for door &a" + door.getId() + "&7!")); + ServerUtil.runTaskAsync(() -> { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + HouseDAO.updateDoor(connection, door.getHotspotId(), door.getId(), door.getLocation(), door.getInsideLocation(), door.getOutsideLocation()); + } catch (SQLException ex) { + ex.printStackTrace(); + } + }); + } + return; + } + HouseDoor door = user.getAddingDoor(); + door.setInsideLocation(player.getLocation()); + player.sendMessage(Utils.f(Lang.HOUSES + "&7You set the inside location for door &a" + door.getId() + "&7.")); + if (door.getLocation() != null && door.getInsideLocation() != null && door.getOutsideLocation() != null) { + user.setAddingDoor(null); + player.sendMessage(Utils.f(Lang.HOUSES + "&7You have completed the setup for door &a" + door.getId() + "&7!")); + ServerUtil.runTaskAsync(() -> { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + HouseDAO.updateDoor(connection, door.getHotspotId(), door.getId(), door.getLocation(), door.getInsideLocation(), door.getOutsideLocation()); + } catch (SQLException ex) { + ex.printStackTrace(); + } + }); + } + return; + } + case RIGHT_CLICK_AIR: + case RIGHT_CLICK_BLOCK: + e.setCancelled(true); + if (user.isAddingPremiumDoor()) { + PremiumHouseDoor door = user.getAddingPremiumDoor(); + door.setOutsideLocation(player.getLocation()); + player.sendMessage( + Utils.f(Lang.HOUSES + "&7You set the outside location for door &a" + door.getId() + "&7.")); + if (door.getLocation() != null && door.getInsideLocation() != null + && door.getOutsideLocation() != null) { + user.setAddingPremiumDoor(null); + player.sendMessage(Utils + .f(Lang.HOUSES + "&7You have completed the setup for door &a" + door.getId() + "&7!")); + ServerUtil.runTaskAsync(() -> { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + HouseDAO.updateDoor(connection, door.getHotspotId(), door.getId(), door.getLocation(), door.getInsideLocation(), door.getOutsideLocation()); + } catch (SQLException ex) { + ex.printStackTrace(); + } + }); + } + return; + } + HouseDoor door = user.getAddingDoor(); + door.setOutsideLocation(player.getLocation()); + player.sendMessage( + Utils.f(Lang.HOUSES + "&7You set the outside location for door &a" + door.getId() + "&7.")); + if (door.getLocation() != null && door.getInsideLocation() != null + && door.getOutsideLocation() != null) { + user.setAddingDoor(null); + player.sendMessage( + Utils.f(Lang.HOUSES + "&7You have completed the setup for door &a" + door.getId() + "&7!")); + ServerUtil.runTaskAsync(() -> { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + HouseDAO.updateDoor(connection, door.getHotspotId(), door.getId(), door.getLocation(), door.getInsideLocation(), door.getOutsideLocation()); + } catch (SQLException ex) { + ex.printStackTrace(); + } + }); + } + return; + default: + return; + } + } + + switch (e.getAction()) { + case RIGHT_CLICK_BLOCK: + if (user.isAddingBlocks()) { + PremiumHouse premiumHouse = user.getEditingPremiumHouse(); + if (!Blocks.getMaterials().contains(e.getClickedBlock().getType())) { + player.sendMessage(Lang.HOUSES.f("&7This block type cannot be added.")); + return; + } + boolean a = false; + for (EditableBlock editableBlock : premiumHouse.getEditableBlocks()) { + if (editableBlock.getLocation().getBlockX() == e.getClickedBlock().getLocation().getBlockX() + && editableBlock.getLocation().getBlockY() == e.getClickedBlock().getLocation().getBlockY() + && editableBlock.getLocation().getBlockZ() == e.getClickedBlock().getLocation().getBlockZ()) { + a = true; + } + } + if (a) { + player.sendMessage(Lang.HOUSES.f("&7Block has already been added!")); + } else { +// EditableBlock editableBlock = new EditableBlock(e.getClickedBlock().getLocation(), e.getClickedBlock().getType(), e.getClickedBlock().getData()); +// premiumHouse.getEditableBlocks().add(editableBlock); +// player.sendMessage(Lang.HOUSES.f("&7Block has been added!")); + + premiumHouse.addEditableBlock(e.getClickedBlock().getLocation(), e.getClickedBlock().getType(), e.getClickedBlock().getData(), result -> { + if (result == null) return; + + ServerUtil.runTask(() -> player.sendMessage(Lang.HOUSES.f("&7Block has been added!"))); + }); + } + return; + } else if (user.isRemovingBlocks()) { + PremiumHouse premiumHouse = user.getEditingPremiumHouse(); + EditableBlock editableBlock = null; + for (EditableBlock block : premiumHouse.getEditableBlocks()) { + if (block.getLocation().getBlockX() == e.getClickedBlock().getLocation().getBlockX() + && block.getLocation().getBlockY() == e.getClickedBlock().getLocation().getBlockY() + && block.getLocation().getBlockZ() == e.getClickedBlock().getLocation().getBlockZ()) { + editableBlock = block; + break; + } + } + if (editableBlock != null) { + premiumHouse.getEditableBlocks().remove(editableBlock); + player.sendMessage(Lang.HOUSES.f("&7Block has been removed.")); + } + return; + } + switch (state.getType()) { + case TRAPPED_CHEST: + case CHEST: { + Chest chestBlock = (Chest) state; + Location loc = chestBlock.getLocation(); + Object[] houseAndChest = hm.getHouseAndChest(loc); + if (user.isAddingChests()) { + e.setCancelled(true); + if (houseAndChest != null) { + if (houseAndChest[0] instanceof PremiumHouse) { + PremiumHouse premiumHouse = (PremiumHouse) houseAndChest[0]; + player.sendMessage(Utils.f(Lang.HOUSES + "&7This chest is added to premium house &a" + + premiumHouse.getId() + "&7 already!")); + return; + } + House house = (House) houseAndChest[0]; + player.sendMessage(Utils + .f(Lang.HOUSES + "&7This chest is added to house &a" + house.getId() + "&7 already!")); + return; + } + Block secondBlock = Utils.getSecondHalfChest(e.getClickedBlock()); + boolean isDub = secondBlock != null; + House house = user.getEditingHouse(); + if (house == null) { + PremiumHouse premiumHouse = user.getEditingPremiumHouse(); + if (premiumHouse == null) { + user.setAddingChests(false); + return; + } + +// PremiumHouseChest chest = premiumHouse.addChest(new PremiumHouseChest(premiumHouse.getUnusedChestId(), premiumHouse.getId(), +// chestBlock.getLocation(), isDub ? secondBlock.getState().getLocation() : null)); +// player.sendMessage(Utils.f(Lang.HOUSES + "&7You have added a" + (isDub ? " double" : "") + " chest with id &a" + chest.getId() + "&7 to premium house &a" + premiumHouse.getId() + "&7.")); + + premiumHouse.addChest(premiumHouse.getUnusedChestId(), premiumHouse.getId(), chestBlock.getLocation(), isDub ? secondBlock.getState().getLocation() : null, result -> { + if (result == null) return; + + ServerUtil.runTask(() -> player.sendMessage(Utils.f(Lang.HOUSES + "&7You have added a" + (isDub ? " double" : "") + " chest with id &a" + result.getId() + "&7 to premium house &a" + premiumHouse.getId() + "&7."))); + }); + return; + } + +// HouseChest chest = house.addChest(new HouseChest(house.getUnusedChestId(), house.getId(), +// chestBlock.getLocation(), isDub ? secondBlock.getState().getLocation() : null)); + + house.addChest(house.getUnusedChestId(), house.getId(), chestBlock.getLocation(), isDub ? secondBlock.getState().getLocation() : null, result -> { + if (result != null) { + ServerUtil.runTask(() -> player.sendMessage(Utils.f(Lang.HOUSES + "&7You have added a" + (isDub ? " double" : "") + " chest with id &a" + result.getId() + "&7 to house &a" + house.getId() + "&7."))); + } + }); + +// player.sendMessage(Utils.f(Lang.HOUSES + "&7You have added a" + (isDub ? " double" : "") +// + " chest with id &a" + chest.getId() + "&7 to house &a" + house.getId() + "&7.")); + return; + } else if (user.isRemovingChests()) { + e.setCancelled(true); + if (houseAndChest == null) { + player.sendMessage(Utils.f(Lang.HOUSES + "&7This chest does not belong to any house!")); + return; + } + if (houseAndChest[0] instanceof PremiumHouse) { + PremiumHouse premiumHouse = (PremiumHouse) houseAndChest[0]; + if (!premiumHouse.equals(user.getEditingPremiumHouse())) { + player.sendMessage(Utils.f(Lang.HOUSES + + "&7This chest does not belong to the house you are editing! It belongs to premium house &a" + + premiumHouse.getId() + "&7!")); + return; + } + PremiumHouseChest chest = (PremiumHouseChest) houseAndChest[1]; + premiumHouse.removeChest(chest); + player.sendMessage(Utils.f(Lang.HOUSES + "&7You removed a chest with id &a" + chest.getId() + + "&7 from premium house &a" + premiumHouse.getId() + "&7.")); + return; + } + House house = (House) houseAndChest[0]; + if (!house.equals(user.getEditingHouse())) { + player.sendMessage(Utils.f(Lang.HOUSES + + "&7This chest does not belong to the house you are editing! It belongs to house &a" + + house.getId() + "&7!")); + return; + } + HouseChest chest = (HouseChest) houseAndChest[1]; + house.removeChest(chest); + player.sendMessage(Utils.f(Lang.HOUSES + "&7You removed a chest with id &a" + chest.getId() + + "&7 from house &a" + house.getId() + "&7.")); + return; + } + return; + } + case DROPPER: { + Location loc = state.getLocation(); + if (user.getEditingPremiumHouse() == null) { + player.sendMessage(Lang.HOUSES.f("&7You must be editing a premium house!")); + return; + } + PremiumHouse premiumHouse = user.getEditingPremiumHouse(); + if (user.isAddingTrashcans()) { + for (PremiumHouseTrashcan trashcan : premiumHouse.getTrashcans()) { + if (trashcan.getLocation().equals(loc)) { + player.sendMessage(Lang.HOUSES.f("&cThis Trashcan has already been added!")); + return; + } + } + int trashcanId = premiumHouse.getTrashcans().size() + 1; +// PremiumHouseTrashcan trashcan = new PremiumHouseTrashcan(trashcanId, premiumHouse.getId(), loc, false); +// premiumHouse.getTrashcans().add(trashcan); +// player.sendMessage(Lang.HOUSES.f("&7Trashcan &a" + trashcanId + " &7has been added to premium house &a" + premiumHouse.getId() + "&7!")); + + premiumHouse.addTrashcan(trashcanId, premiumHouse.getId(), loc, false, result -> { + if (result == null) return; + + ServerUtil.runTask(() -> player.sendMessage(Lang.HOUSES.f("&7Trashcan &a" + trashcanId + " &7has been added to premium house &a" + premiumHouse.getId() + "&7!"))); + }); + + e.setCancelled(true); + } else if (user.isRemovingTrashcans()) { + boolean found = false; + for (PremiumHouseTrashcan trashcan : premiumHouse.getTrashcans()) { + if (trashcan.getLocation().equals(loc)) { + player.sendMessage(Lang.HOUSES.f("&7Trashcan &a" + trashcan.getId() + + " &7has been removed from premium house &a" + premiumHouse.getId() + "&7!")); + premiumHouse.getTrashcans().remove(trashcan); + found = true; + return; + } + } + if (!found) { + player.sendMessage(Lang.HOUSES.f("&cTrashcan is not registered.")); + } + e.setCancelled(true); + } + return; + } + case SIGN_POST: + case WALL_SIGN: + Sign signBlock = (Sign) state; + Location loc = signBlock.getLocation(); + if (user.isAddingSigns()) { + e.setCancelled(true); + House house = hm.getHouseFromSign(loc); + if (house != null) { + player.sendMessage(Utils + .f(Lang.HOUSES + "&7This sign is added to house &a" + house.getId() + "&7 already!")); + return; + } + PremiumHouse premiumHouse = hm.getPremiumHouseFromSign(loc); + if (premiumHouse != null) { + player.sendMessage(Utils.f(Lang.HOUSES + "&7This sign is added to premium house &a" + + premiumHouse.getId() + "&7 already!")); + return; + } + House h = user.getEditingHouse(); + if (h == null) { + PremiumHouse ph = user.getEditingPremiumHouse(); + if (ph == null) { + user.setAddingSigns(false); + return; + } +// ph.addSign(loc); +// player.sendMessage(Utils.f(Lang.HOUSES + "&7You have added a sign to premium house &a" +// + ph.getId() + "&7 at location &a" + Utils.blockLocationToString(loc) + "&7.")); + ph.addSign(loc, result -> { + if (result == null) return; + ServerUtil.runTask(() -> player.sendMessage(Utils.f(Lang.HOUSES + "&7You have added a sign to premium house &a" + ph.getId() + "&7 at location &a" + Utils.blockLocationToString(loc) + "&7."))); + }); + return; + } +// h.addSign(loc); +// player.sendMessage(Utils.f(Lang.HOUSES + "&7You have added a sign to house &a" + h.getId() +// + "&7 at location &a" + Utils.blockLocationToString(loc) + "&7.")); + + h.addSign(loc, result -> { + if (result == null) return; + ServerUtil.runTask(() -> player.sendMessage(Utils.f(Lang.HOUSES + "&7You have added a sign to house &a" + h.getId() + "&7 at location &a" + Utils.blockLocationToString(loc) + "&7."))); + }); + return; + } else if (user.isRemovingSigns()) { + e.setCancelled(true); + House house = hm.getHouseFromSign(loc); + PremiumHouse premiumHouse = hm.getPremiumHouseFromSign(loc); + + if (house == null) { + if (premiumHouse == null) { + player.sendMessage(Utils.f(Lang.HOUSES + "&7This sign does not belong to any house!")); + return; + } + if (!premiumHouse.equals(user.getEditingPremiumHouse())) { + player.sendMessage(Utils.f(Lang.HOUSES + + "&7This sign does not belong to the house you are editing! It belongs to premium house &a" + + premiumHouse.getId() + "&7!")); + return; + } + premiumHouse.removeSign(loc); + player.sendMessage(Utils + .f(Lang.HOUSES + "&7You removed a sign from premium house &a" + premiumHouse.getId() + + "&7 at location &a" + Utils.blockLocationToString(loc) + "&7.")); + return; + } + if (!house.equals(user.getEditingHouse())) { + player.sendMessage(Utils.f(Lang.HOUSES + + "&7This sign does not belong to the house you are editing! It belongs to house &a" + + house.getId() + "&7!")); + return; + } + house.removeSign(loc); + player.sendMessage(Utils.f(Lang.HOUSES + "&7You removed a sign from house &a" + house.getId() + + "&7 at location &a" + Utils.blockLocationToString(loc) + "&7.")); + return; + } + return; + + default: + break; + } + default: + break; + } + } + + @EventHandler + public void onOpenChest(PlayerInteractEvent e) { + if (e.isCancelled()) return; + if (e.getHand() != EquipmentSlot.HAND) return; + + Player player = e.getPlayer(); + UUID uuid = player.getUniqueId(); + BlockState state = e.getClickedBlock().getState(); + HousesManager hm = Houses.getManager(); + HouseUser user = Houses.getUserManager().getLoadedUser(uuid); + switch (e.getAction()) { + case RIGHT_CLICK_BLOCK: + switch (state.getType()) { + case TRAPPED_CHEST: + case CHEST: { + Chest chestBlock = (Chest) state; + Location loc = chestBlock.getLocation(); + Object[] houseAndChest = hm.getHouseAndChest(loc); + if (houseAndChest == null) { +// e.setCancelled(true); +// player.sendMessage(Utils.f(Lang.HOUSES + "&7This house is having issues loading (&ferr2937&7)!")); + return; + } + + if (houseAndChest[0] instanceof PremiumHouse) { + PremiumHouse house = (PremiumHouse) houseAndChest[0]; + if (!house.hasAccess(player, user)) { + e.setCancelled(true); + player.sendMessage(Utils.f(Lang.HOUSES + "&7You don't own this premium house!")); + return; + } + user.setOpenChest(houseAndChest[1]); + return; + } + House house = (House) houseAndChest[0]; + e.setCancelled(true); + + if(!user.isInsidePremiumHouse() && !user.isInsideHouse()) { + player.sendMessage(Lang.HOUSES.f("&cError opening chest, Leave your house and re-enter to try again!")); + return; + } + + HouseChest chest = (HouseChest) houseAndChest[1]; + + user.setLastChestId(chest == null ? -1 : chest.getId()); + user.setOpenChest(chest); + house.openChest(player, loc, user, chest); + return; + } + case IRON_DOOR_BLOCK: { + Block underneath = e.getClickedBlock().getRelative(BlockFace.DOWN); + if (underneath.getType() == Material.IRON_DOOR_BLOCK) + state = underneath.getState(); + Location loc = state.getLocation(); + Object[] houseAndDoor = hm.getHouseAndDoor(loc); + if (houseAndDoor == null) + return; + if (houseAndDoor[0] instanceof PremiumHouse) { + PremiumHouse house = (PremiumHouse) houseAndDoor[0]; + if (user.isTeleporting()) + return; + if (!house.hasAccess(player, user) || player.isSneaking()) { + HouseUtils.openPremiumHouseMenu(player, house, user); + return; + } + PremiumHouseDoor door = (PremiumHouseDoor) houseAndDoor[1]; + user.teleportInOrOutPremiumHouse(player, door); + return; + } + House house = (House) houseAndDoor[0]; + if (!user.ownsHouse(house.getId())) { + HouseUtils.openHouseMenu(player, house, user); + return; + } + if (user.isTeleporting()) + return; + if (player.isSneaking()) { + HouseUtils.openHouseMenu(player, house, user); + return; + } + HouseDoor door = (HouseDoor) houseAndDoor[1]; + user.teleportInOrOutHouse(player, door); + return; + } + case SIGN: + case SIGN_POST: + case WALL_SIGN: { + Sign signBlock = (Sign) state; + Location loc = signBlock.getLocation(); + House house = hm.getHouseFromSign(loc); + if (house != null) { + HouseUtils.openHouseMenu(player, house, user); + } + PremiumHouse premiumHouse = hm.getPremiumHouseFromSign(loc); + if (premiumHouse != null) { + HouseUtils.openPremiumHouseMenu(player, premiumHouse, user); + } + return; + } + case DROPPER: { + Location location = state.getLocation(); + if (!user.isInsidePremiumHouse()) return; + PremiumHouse premiumHouse = Houses.getHousesManager().getPremiumHouse(user.getInsidePremiumHouse()); + if (Objects.equals(premiumHouse.getOwner(), player.getUniqueId()) + || premiumHouse.isGuest(player.getUniqueId())) { + Optional<PremiumHouseTrashcan> trashcanOptional = premiumHouse.getTrashcan(location); + PremiumHouseTrashcan trashcan = null; + if (!trashcanOptional.isPresent()) { + int trashcanId = premiumHouse.getTrashcans().size() + 1; +// trashcan = new PremiumHouseTrashcan(trashcanId, premiumHouse.getId(), location, false); +// premiumHouse.getTrashcans().add(trashcan); + + premiumHouse.addTrashcan(trashcanId, premiumHouse.getId(), location, false, result -> { + if (result == null) return; + ServerUtil.runTask(() -> result.setOwned(true)); + }); + } else { + trashcan = trashcanOptional.get(); + } + + if (trashcan == null) return; + + user.setOpenTrashcan(trashcan); + e.setCancelled(true); + player.closeInventory(); + if (trashcan.isOwned()) { + TrashCanManager.openTrashCan(player); + } else { + MenuManager.openMenu(player, "buytrashcan"); + } + } else { + player.sendMessage(Lang.HOUSES.f("&7You do not have access to this trashcan!")); + } + return; + } + default: + break; + } + default: + break; + } + } + + @EventHandler + public void onClose(InventoryCloseEvent e) { + Player player = (Player) e.getPlayer(); + HouseUser houseUser = Houses.getUserManager().getLoadedUser(player.getUniqueId()); + Inventory inv = e.getInventory(); + Collection<String> invNames = Arrays.asList("Trash Can", "Confirm Trashcan Purchase"); + if (e.getInventory().getType() != InventoryType.CHEST + || !invNames.contains(ChatColor.stripColor(inv.getTitle()))) + return; + houseUser.setOpenTrashcan(null); + } + + + @EventHandler + public void onInteractEntity(PlayerInteractEntityEvent e) { + Player player = e.getPlayer(); + HouseUser user = Houses.getUserManager().getLoadedUser(player.getUniqueId()); + if (user.isInsideHouse() || user.isInsidePremiumHouse()) + e.setCancelled(true); + } + + @EventHandler(priority = EventPriority.HIGHEST) + public void onBlockClick(PlayerInteractEvent event) { + Player player = event.getPlayer(); + if (event.getAction() != Action.RIGHT_CLICK_BLOCK) return; + if (event.getClickedBlock() == null) return; + if (!Blocks.getMaterials().contains(event.getClickedBlock().getType())) return; + UUID uuid = player.getUniqueId(); + HouseUser houseUser = Houses.getUserManager().getLoadedUser(uuid); + if (!houseUser.isChangingBlocks()) return; + if (!houseUser.isInsidePremiumHouse()) return; + PremiumHouse premiumHouse = houseUser.getPremiumHouse(houseUser.getInsidePremiumHouse()); + if (!premiumHouse.getOwnerName().equalsIgnoreCase(player.getName())) return; + boolean a = false; + for (EditableBlock editableBlock : premiumHouse.getEditableBlocks()) { + if (editableBlock.getLocation().getBlockX() == event.getClickedBlock().getLocation().getBlockX() + && editableBlock.getLocation().getBlockY() == event.getClickedBlock().getLocation().getBlockY() + && editableBlock.getLocation().getBlockZ() == event.getClickedBlock().getLocation().getBlockZ()) { + a = true; + } + } + if (!a) { + player.sendMessage(Lang.HOUSES.f("&7This block cannot be changed!")); + } else { + houseUser.setEditingBlock(event.getClickedBlock()); + if (player.isSneaking() && houseUser.getLastUsedMaterial() != null) { + Blocks lastUsed = houseUser.getLastUsedMaterial(); + houseUser.getEditingBlock().setType(lastUsed.getType()); + houseUser.getEditingBlock().setData(lastUsed.getData()); + houseUser.setEditingBlock(null); + player.sendMessage(Lang.HOUSES.f("&7Block has been set to &a" + lastUsed.getType().name() + "&7!")); + return; + } + HouseUtils.openChangeBlocksMenu(player, premiumHouse, houseUser); + } + } +} diff --git a/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/listeners/InventoryClose.java b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/listeners/InventoryClose.java new file mode 100644 index 0000000..b656e05 --- /dev/null +++ b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/listeners/InventoryClose.java @@ -0,0 +1,85 @@ +package net.grandtheftmc.houses.listeners; + +import java.util.Arrays; +import java.util.UUID; + +import org.bukkit.ChatColor; +import org.bukkit.entity.HumanEntity; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryCloseEvent; +import org.bukkit.event.inventory.InventoryType; +import org.bukkit.inventory.Inventory; + +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.houses.Houses; +import net.grandtheftmc.houses.houses.House; +import net.grandtheftmc.houses.houses.HouseChest; +import net.grandtheftmc.houses.houses.HousesManager; +import net.grandtheftmc.houses.users.HouseUser; +import net.grandtheftmc.houses.users.UserHouse; +import net.grandtheftmc.houses.users.UserHouseChest; + +public class InventoryClose implements Listener { + + @EventHandler + public void onClose(InventoryCloseEvent e) { + Inventory inv = e.getInventory(); + if (inv.getType() != InventoryType.CHEST) + return; + Player player = (Player) e.getPlayer(); + UUID uuid = player.getUniqueId(); + String title = ChatColor.stripColor(inv.getTitle()).replace("Chest: ", ""); + String[] ids = title.split(","); + if (ids.length != 2) + return; + int houseId; + int chestId; + try { + houseId = Integer.parseInt(ids[0]); + chestId = Integer.parseInt(ids[1]); + } catch (NumberFormatException ex) { + return; + } + HousesManager hm = Houses.getManager(); + House house = hm.getHouse(houseId); + if (house == null) + return; + HouseChest chest = house.getChest(chestId); + if (chest == null) + return; + HouseUser user = Houses.getUserManager().getLoadedUser(uuid); + UserHouse userHouse = user.getUserHouse(houseId); + if (userHouse == null) + return; + UserHouseChest userChest = userHouse.getChest(chestId); + if (userChest == null || Arrays.equals(userChest.getContents(), inv.getContents())) + return; + userChest.setContents(inv.getContents()); + user.setOpenChest(null); + // userChest.updateContents(uuid); + Utils.playChestAnimation(player, chest.getLoc1(), false); + } + + @EventHandler + public void onChestClose(InventoryCloseEvent e) { + Inventory inv = e.getInventory(); + HumanEntity entity = e.getPlayer(); + + if (inv.getType() != InventoryType.CHEST) { + return; + } + + if (!(entity instanceof Player)) { + return; + } + + Player player = (Player) entity; + HouseUser user = Houses.getUserManager().getLoadedUser(player.getUniqueId()); + + if (user.hasChestOpen()) { + user.setOpenChest(null); + } + } +} diff --git a/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/listeners/InventoryInteract.java b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/listeners/InventoryInteract.java new file mode 100644 index 0000000..356ec3f --- /dev/null +++ b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/listeners/InventoryInteract.java @@ -0,0 +1,84 @@ +package net.grandtheftmc.houses.listeners; + +import org.bukkit.Location; +import org.bukkit.entity.HumanEntity; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryDragEvent; +import org.bukkit.event.inventory.InventoryInteractEvent; +import org.bukkit.event.inventory.InventoryType; +import org.bukkit.inventory.Inventory; + +import net.grandtheftmc.houses.Houses; +import net.grandtheftmc.houses.houses.House; +import net.grandtheftmc.houses.houses.HouseChest; +import net.grandtheftmc.houses.houses.HousesManager; +import net.grandtheftmc.houses.houses.PremiumHouse; +import net.grandtheftmc.houses.houses.PremiumHouseChest; +import net.grandtheftmc.houses.users.HouseUser; + +public class InventoryInteract implements Listener { + @EventHandler + private void onInventoryClick(InventoryClickEvent event) { + this.onInventoryInteract(event); + } + + @EventHandler + private void onInventoryDrag(InventoryDragEvent event) { + this.onInventoryInteract(event); + } + + @EventHandler + private void onInventoryInteract(InventoryInteractEvent event) { + Inventory inv = event.getInventory(); + HumanEntity entity = event.getWhoClicked(); + + if (inv.getType() != InventoryType.CHEST) { + return; + } + + if (!(entity instanceof Player)) { + return; + } + + if(inv.getLocation() == null) { + return; + } + + Player player = (Player) entity; + HousesManager hm = Houses.getManager(); + Object[] houseAndChest = hm.getHouseAndChest(new Location(inv.getLocation().getWorld(), inv.getLocation().getBlockX(), inv.getLocation().getBlockY(), inv.getLocation().getBlockZ())); + + if (houseAndChest == null || houseAndChest[0] == null || houseAndChest[1] == null) { + return; + } + + if (houseAndChest[0] instanceof PremiumHouse) { + this.managePremiumHouse(event, player, (PremiumHouse) houseAndChest[0], (PremiumHouseChest) houseAndChest[1]); + } else { + this.manageHouse(event, player, (House) houseAndChest[0], (HouseChest) houseAndChest[1]); + } + } + + private void managePremiumHouse(InventoryInteractEvent event, Player player, PremiumHouse house, PremiumHouseChest chest) { + HouseUser user = Houses.getUserManager().getLoadedUser(player.getUniqueId()); + + if (user.hasChestOpen() && user.getOpenChest() == chest) { + return; + } + + event.setCancelled(true); + } + + private void manageHouse(InventoryInteractEvent event, Player player, House house, HouseChest chest) { + HouseUser user = Houses.getUserManager().getLoadedUser(player.getUniqueId()); + + if (user.hasChestOpen() && user.getOpenChest() == chest) { + return; + } + + event.setCancelled(true); + } +} \ No newline at end of file diff --git a/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/listeners/Join.java b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/listeners/Join.java new file mode 100644 index 0000000..6f78eaa --- /dev/null +++ b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/listeners/Join.java @@ -0,0 +1,20 @@ +package net.grandtheftmc.houses.listeners; + +import net.grandtheftmc.houses.Houses; +import net.grandtheftmc.houses.users.HouseUser; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerJoinEvent; + +public class Join implements Listener { + + @EventHandler + public void onJoin(PlayerJoinEvent e) { + Player player = e.getPlayer(); + HouseUser user = Houses.getUserManager().getLoadedUser(player.getUniqueId()); + user.updateVisibility(player); + + user.loadChests((call) -> {}); + } +} diff --git a/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/listeners/Leave.java b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/listeners/Leave.java new file mode 100644 index 0000000..c3850af --- /dev/null +++ b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/listeners/Leave.java @@ -0,0 +1,45 @@ +package net.grandtheftmc.houses.listeners; + +import net.grandtheftmc.houses.houses.House; +import net.grandtheftmc.houses.houses.PremiumHouse; +import net.grandtheftmc.houses.houses.PremiumHouseChest; +import net.grandtheftmc.houses.users.UserHouse; +import net.grandtheftmc.houses.users.UserHouseChest; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.potion.PotionEffectType; + +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.houses.Houses; +import net.grandtheftmc.houses.users.HouseUser; + +public class Leave implements Listener { + + @EventHandler + public void onLeave(PlayerQuitEvent e) { + Player player = e.getPlayer(); + HouseUser user = Houses.getUserManager().getLoadedUser(player.getUniqueId()); + if (user.isTeleporting()) { + user.setTeleporting(false); + player.removePotionEffect(PotionEffectType.BLINDNESS); + } + if (user.isInsideHouse() || user.isInsidePremiumHouse()) { + player.teleport(GTM.getWarpManager().getSpawn().getLocation()); + } + + for(UserHouse userHouse : user.getHouses()) { + for(UserHouseChest chest : userHouse.getChests()) { + chest.updateContents(player.getUniqueId(), userHouse.getUniqueId()); + } + } + } + + @EventHandler(priority = EventPriority.MONITOR) + public void onLeaveMonitor(PlayerQuitEvent e) { + Houses.getUserManager().unloadUser(e.getPlayer().getUniqueId()); + } + +} diff --git a/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/listeners/Login.java b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/listeners/Login.java new file mode 100644 index 0000000..fffe688 --- /dev/null +++ b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/listeners/Login.java @@ -0,0 +1,43 @@ +package net.grandtheftmc.houses.listeners; + +import java.util.UUID; + +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.player.AsyncPlayerPreLoginEvent; +import org.bukkit.event.player.PlayerLoginEvent; +import org.bukkit.event.player.PlayerLoginEvent.Result; +import org.bukkit.plugin.java.JavaPlugin; + +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.houses.Houses; +import net.grandtheftmc.houses.users.HouseUser; + +public class Login implements Listener { + + public Login(JavaPlugin plugin) { + } + + @EventHandler + public void onAsyncLogin(AsyncPlayerPreLoginEvent e) { + HouseUser user = Houses.getUserManager().getLoadedUser(e.getUniqueId()); +// user.dataCheck(e.getName()); + if (!user.updateDataFromDb()) + e.disallow(org.bukkit.event.player.AsyncPlayerPreLoginEvent.Result.KICK_OTHER, "&cAn error occured while trying to fetch your data from the database. Please try again in a few seconds!"); + } + + @EventHandler(priority=EventPriority.MONITOR) + public void onLoginMonitor(PlayerLoginEvent e) { + Player player = e.getPlayer(); + UUID uuid = player.getUniqueId(); + HouseUser user = Houses.getUserManager().getLoadedUser(uuid); + + if (!user.hasUpdated()) + e.disallow(PlayerLoginEvent.Result.KICK_OTHER, Utils.f("&cThe server is still restarting! Please try again in a few seconds!")); + + if (e.getResult() != Result.ALLOWED) + Houses.getUserManager().unloadUser(uuid); + } +} diff --git a/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/listeners/MenuListener.java b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/listeners/MenuListener.java new file mode 100644 index 0000000..7d0a528 --- /dev/null +++ b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/listeners/MenuListener.java @@ -0,0 +1,704 @@ +package net.grandtheftmc.houses.listeners; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.menus.Menu; +import net.grandtheftmc.core.menus.MenuClickEvent; +import net.grandtheftmc.core.menus.MenuManager; +import net.grandtheftmc.core.menus.MenuOpenEvent; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.users.GTMUser; +import net.grandtheftmc.houses.Houses; +import net.grandtheftmc.houses.houses.*; +import net.grandtheftmc.houses.users.HouseUser; +import net.grandtheftmc.houses.users.UserHouse; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Color; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; + +import java.util.*; + +public class MenuListener implements Listener { + + public void setPhoneDefaults(MenuOpenEvent e) { + ItemStack whiteGlass = Utils.createItem(Material.STAINED_GLASS_PANE, "&a"); + ItemStack grayGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 7, "&a"); + ItemStack blackGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 15, "&a"); + ItemStack lightGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 8, "&a"); + + for (int i : new int[]{0, 8, 9, 17, 18, 26, 27, 35, 36, 44, 45, 53}) e.setItem(i, lightGlass); + for (int i : new int[]{1, 10, 19, 28, 37, 46, 7, 16, 25, 34, 43, 52}) + e.setItem(i, whiteGlass); + for (int i : new int[]{2, 3, 4, 5, 6}) + e.setItem(i, blackGlass); + for (int i : new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 38, 39, 40, 41, 42, 47, 48, 49, 50, 51}) + e.setItem(i, grayGlass); + } + + public void setPhoneDefaults(Inventory inv) { + ItemStack whiteGlass = Utils.createItem(Material.STAINED_GLASS_PANE, "&a"); + ItemStack grayGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 7, "&a"); + ItemStack blackGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 15, "&a"); + ItemStack lightGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 8, "&a"); + + for (int i : new int[]{0, 8, 9, 17, 18, 26, 27, 35, 36, 44, 45, 53}) inv.setItem(i, lightGlass); + for (int i : new int[]{1, 10, 19, 28, 37, 46, 7, 16, 25, 34, 43, 52}) + inv.setItem(i, whiteGlass); + for (int i : new int[]{2, 3, 4, 5, 6}) + inv.setItem(i, blackGlass); + for (int i : new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 38, 39, 40, 41, 42, 47, 48, 49, 50, 51}) + inv.setItem(i, grayGlass); + } + + public void setConfirmDefaults(MenuOpenEvent e) { + this.setConfirmDefaults(e, "&a&lConfirm", "&c&lCancel"); + } + + public void setConfirmDefaults(MenuOpenEvent e, String confirmMessage, String cancelMessage) { + ItemStack whiteGlass = Utils.createItem(Material.STAINED_GLASS_PANE, "&a"); + ItemStack grayGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 7, "&a"); + ItemStack blackGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 15, "&a"); + ItemStack greenGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 5, confirmMessage); + ItemStack redGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 14, cancelMessage); + ItemStack lightGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 8, "&a"); + + for (int i : new int[]{0, 8, 9, 17, 18, 26, 27, 35, 36, 44, 45, 53}) e.setItem(i, lightGlass); + for (int i : new int[]{1, 10, 19, 28, 37, 46, 7, 16, 25, 34, 43, 52}) + e.setItem(i, whiteGlass); + for (int i : new int[]{2, 3, 4, 5, 6}) + e.setItem(i, blackGlass); + for (int i : new int[]{13, 22, 31, 40, 49,}) + e.setItem(i, grayGlass); + for (int i : new int[]{11, 12, 20, 21, 29, 30, 38, 39, 47, 48}) + e.setItem(i, greenGlass); + for (int i : new int[]{14, 15, 23, 24, 32, 33, 41, 42, 50, 51}) + e.setItem(i, redGlass); + } + + @EventHandler + public void onMenuOpen(MenuOpenEvent e) { + Player player = e.getPlayer(); + UUID uuid = player.getUniqueId(); + Menu menu = e.getMenu(); + switch (menu.getName()) { + case "houses": { + this.setPhoneDefaults(e); + int[] slots = new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 38, 39, 40, 41, 42, 47, 48, 49, 50, 51}; + HouseUser user = Houses.getUserManager().getLoadedUser(player.getUniqueId()); + List<UserHouse> houses = user.getHouses(); + List<PremiumHouse> premiumHouses = user.getPremiumHousesAsGuest(); + Iterator<UserHouse> it = houses.iterator(); + Iterator<PremiumHouse> it2 = premiumHouses.iterator(); + int size = houses.size() + premiumHouses.size(); + int max = user.getMaxHouses(player, Core.getUserManager().getLoadedUser(uuid), GTM.getUserManager().getLoadedUser(uuid)); + for (int i = 0; i < 20; i++) { + PremiumHouse premiumHouse = it.hasNext() ? null : it2.hasNext() ? it2.next() : null; + UserHouse userHouse = it.hasNext() ? it.next() : null; + if (premiumHouse == null && userHouse == null) + break; + if (premiumHouse != null) { + e.setItem(slots[i], + Utils.addGlow(Utils.createItem(Material.IRON_DOOR, "&3&lPremium House: &a&l" + premiumHouse.getId(), + Arrays.asList("&7Permits: &a&l" + premiumHouse.getPermits(), "&7Chests: &a&l" + premiumHouse.getChests().size(), + "&7Owned by &a" + (player.getUniqueId().equals(premiumHouse.getOwner()) ? "me" : premiumHouse.getOwnerName()) + "&7.")))); + continue; + } + House house = Houses.getHousesManager().getHouse(userHouse.getId()); + e.setItem(slots[i], Utils.createItem(Material.IRON_DOOR, "&3&lHouse: &a&l" + house.getId(), + Arrays.asList("&7Price: &a$&l" + house.getPrice(), "&7Chests: &a&l" + house.getChests().size()))); + } + e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the home page!")); + e.setItem(49, Utils.setArmorColor(Utils.createItem(Material.IRON_DOOR, "&3&lMy Houses", "&7Click on a house to open its menu!"), Color.fromRGB(102, 127, 51))); + if (size > 20) + e.setItem(50, Utils.createItem(Material.ARROW, "&3&lNext Page", "&7Page 2")); + e.setItem(51, Utils.createItem(Material.BOOK, "&3&lMax Houses: &a&l" + size + "&7/&a&l" + max, + size >= max ? "&7Go to &a" + Core.getSettings().getStoreLink() + "&7 to get access to more houses!" : "&7You can own &a" + (max - size) + "&7 more houses!")); + return; + } + case "house": { + HouseUser user = Houses.getUserManager().getLoadedUser(uuid); + int id = user.getMenuHouseId(); + House house = Houses.getManager().getHouse(id); + this.setPhoneDefaults(e); + e.setItem(11, Utils.createItem(Material.CHEST, "&3&lChests: &a&l" + house.getAmountOfChests())); + e.setItem(13, Utils.createItem(Material.PAPER, "&3&lPrice: &a$&l" + house.getPrice())); + e.setItem(15, Utils.createItem(Material.DARK_OAK_DOOR_ITEM, "&3&lDoors: &a&l" + house.getDoors().size())); + if (user.ownsHouse(house.getId())) + e.setItem(31, Utils.createItem(Material.INK_SACK, 1, "&c&lSell House", Collections.singletonList("&7Reward: &a$&l" + (house.getPrice() / 2)))); + else + e.setItem(31, Utils.createItem(Material.SLIME_BALL, "&a&lBuy House", Collections.singletonList("&7Price: &a$&l" + house.getPrice()))); + e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the houses menu!")); + e.setItem(49, Utils.createItem(Material.IRON_DOOR, "&3&lHouse: &a&l" + id, "&7A place to crash!")); + int size = user.getHouses().size() + user.getPremiumHousesAsGuest().size(); + int max = user.getMaxHouses(player, Core.getUserManager().getLoadedUser(uuid), GTM.getUserManager().getLoadedUser(uuid)); + e.setItem(51, Utils.createItem(Material.BOOK, "&3&lMax Houses: &a&l" + size + "&7/&a&l" + max, + size >= max ? "&7Go to &a" + Core.getSettings().getStoreLink() + "&7 to get access to more houses!" : "&7You can own &a" + (max - size) + "&7 more houses!")); + return; + } + case "premiumhouse": { + HouseUser user = Houses.getUserManager().getLoadedUser(uuid); + int id = user.getMenuHouseId(); + PremiumHouse house = Houses.getManager().getPremiumHouse(id); + this.setPhoneDefaults(e); + + e.setItem(11, Utils.createItem(Material.CHEST, "&3&lChests: &a&l" + house.getAmountOfChests())); + e.setItem(13, Utils.createItem(Material.PAINTING, "&3&lPermits: &a&l" + house.getPermits(), + "&7You have &a&l" + GTM.getUserManager().getLoadedUser(uuid).getPermits() + "&7 Permits!")); + e.setItem(15, Utils.createItem(Material.IRON_DOOR, "&3&lDoors: &a&l" + house.getDoors().size())); + if (!house.getEditableBlocks().isEmpty()) { + e.setItem(29, Utils.createItem(Material.SNOW_BLOCK, "&3&lCustomize House")); + } + if (!house.isOwned()) + e.setItem(31, Utils.createItem(Material.SLIME_BALL, "&a&lBuy House", Collections.singletonList("&7Price: &a&l" + house.getPermits() + " Permits"))); + else if (player.getUniqueId().equals(house.getOwner())) + e.setItem(31, Utils.createItem(Material.INK_SACK, 1, "&c&lSell House", Collections.singletonList("&7Reward: &a&l" + house.getPermits() + " Permits"))); + else + e.setItem(31, Utils.setSkullOwner(Utils.createItem(Material.SKULL_ITEM, "&3&lOwner: &a&l" + house.getOwnerName()), house.getOwnerName())); + e.setItem(33, Utils.createItem(Material.TRIPWIRE_HOOK, "&3&lView Guests")); + e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the houses menu!")); + e.setItem(49, Utils.createItem(Material.IRON_DOOR, "&3&lPremium House: &a&l" + id, "&7A place to crash!")); + int size = user.getHouses().size() + user.getPremiumHousesAsGuest().size(); + int max = user.getMaxHouses(player, Core.getUserManager().getLoadedUser(uuid), GTM.getUserManager().getLoadedUser(uuid)); + e.setItem(51, Utils.createItem(Material.BOOK, "&3&lMax Houses: &a&l" + size + "&7/&a" + max, + size >= max ? "&7Go to &a" + Core.getSettings().getStoreLink() + "&7 to get access to more houses!" : "&7You can own &a" + (max - size) + "&7 more houses!")); + return; + } + case "buyhouse": + this.setConfirmDefaults(e, "&a&lClick to buy this house!", "&c&lClick to cancel!"); + return; + case "sellhouse": + this.setConfirmDefaults(e, "&a&lClick to sell this house!", "&c&lClick to cancel!"); + return; + case "buypremiumhouse": + this.setConfirmDefaults(e, "&a&lClick to buy this premium house!", "&c&lClick to cancel!"); + return; + case "sellpremiumhouse": + this.setConfirmDefaults(e, "&a&lClick to sell this premium house!", "&c&lClick to cancel!"); + return; + case "guests": { + this.setPhoneDefaults(e); + int[] slots = new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 38, 39, 40, 41, 42, 47, 48, 49, 50, 51}; + HouseUser user = Houses.getUserManager().getLoadedUser(uuid); + int id = user.getMenuHouseId(); + PremiumHouse house = Houses.getManager().getPremiumHouse(id); + List<PremiumHouseGuest> guests = house.getGuests(); + Iterator<PremiumHouseGuest> it = guests.iterator(); + for (int i = 0; i < 20; i++) { + if (!it.hasNext()) + break; + PremiumHouseGuest guest = it.next(); + e.setItem(slots[i], Utils.setSkullOwner(Utils.createItem(Material.SKULL_ITEM, 2, "&3&l" + guest.getName()), guest.getName())); + } + e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the premium house menu!")); + if (house.isOwner(uuid)) { + e.setItem(49, Utils.createItem(Material.SLIME_BALL, "&a&lAdd Guest")); + e.setItem(51, Utils.createItem(Material.INK_SACK, 1, "&c&lRemove Guest")); + } + if (guests.size() > 20) + e.setItem(50, Utils.createItem(Material.ARROW, "&3&lNext Page", "&7Page 2")); + return; + } + case "removeguests": { + this.setPhoneDefaults(e); + int[] slots = new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 38, 39, 40, 41, 42, 47, 48, 49, 50, 51}; + HouseUser user = Houses.getUserManager().getLoadedUser(uuid); + int id = user.getMenuHouseId(); + PremiumHouse house = Houses.getManager().getPremiumHouse(id); + List<PremiumHouseGuest> guests = house.getGuests(); + Iterator<PremiumHouseGuest> it = guests.iterator(); + for (int i = 0; i < 20; i++) { + if (!it.hasNext()) + break; + PremiumHouseGuest guest = it.next(); + e.setItem(slots[i], Utils.setSkullOwner(Utils.createItem(Material.SKULL_ITEM, 2, "&3&l" + guest.getName(), "&7Click to remove!"), guest.getName())); + } + e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the premium house menu!")); + e.setItem(49, Utils.createItem(Material.SLIME_BALL, "&a&lAdd Guest")); + e.setItem(51, Utils.createItem(Material.INK_SACK, 1, "&c&lStop Removing Guests")); + if (guests.size() > 20) + e.setItem(50, Utils.createItem(Material.ARROW, "&3&lNext Page", "&7Page 2")); + return; + } + case "houseshelp": { + this.setPhoneDefaults(e); + e.setItem(11, Utils.createItem(Material.EMPTY_MAP, "&3&lWhat are houses?", "", "&7A house is a safezone where you can store items in chests.")); + e.setItem(12, Utils.createItem(Material.EMPTY_MAP, "&3&lCan I share my house with someone?", "", "&7Multiple people can buy the same house.", + "&7Inside of the house, everyone is invisible", "&7and the chests are unique to every owner.")); + e.setItem(13, Utils.createItem(Material.EMPTY_MAP, "&3&lWhat's so special about Premium Houses?", "", "&7The owner of a Premium House can add guests to it", + "&7who can also open the chests!")); + e.setItem(14, Utils.createItem(Material.EMPTY_MAP, "&3&lHow can I buy a Premium House?", "", "&7Premium Houses can only be purchased through donating.", + "&7Get House Permits at &a" + Core.getSettings().getStoreLink() + "&7", "&7to buy a Premium House!")); + e.setItem(15, Utils.createItem(Material.EMPTY_MAP, "&3&lHow many houses can I buy?", "", "&7Ranking up gets you access to more houses,", + "&7as well as getting a donor rank at &a" + Core.getSettings().getStoreLink() + "&7!")); + e.setItem(20, Utils.createItem(Material.EMPTY_MAP, "&3&lFor how long do I get to keep my house?", "", "&7After you buy it, you can keep it forever!")); + e.setItem(21, Utils.createItem(Material.EMPTY_MAP, "&3&lDo I get my money back when I sell a house?", "", "&7When you sell a house, you get back half of the price.", + "&7If you sell a Premium House, all of the Permits will get refunded!")); + e.setItem(22, Utils.createItem(Material.EMPTY_MAP, "&3&lCan I give my permits to someone else?", "", "&7No, you may not. Sorry!")); + e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the houses menu!")); + return; + } + case "editblocks": { + int count = -1; + for (Blocks material : Blocks.values()) { + if (count == 53) break; + count += 1; + ItemStack itemStack = new ItemStack(material.getType()); + itemStack.setDurability(material.getData()); + e.setItem(count, itemStack); + } + return; + } + case "buytrashcan": { + HouseUser user = Houses.getUserManager().getLoadedUser(uuid); + PremiumHouseTrashcan trashcan = user.getOpenTrashcan(); + PremiumHouse house = Houses.getHousesManager().getPremiumHouse(user.getInsidePremiumHouse()); + this.setPhoneDefaults(e); + + e.setItem(11, Utils.createItem(Material.CHEST, "&3&lChests: &a&l" + house.getAmountOfChests())); + e.setItem(13, Utils.createItem(Material.PAINTING, "&3&lPermits: &a&l" + house.getPermits(), + "&7You have &a&l" + GTM.getUserManager().getLoadedUser(uuid).getPermits() + "&7 Permits!")); + e.setItem(15, Utils.createItem(Material.IRON_DOOR, "&3&lDoors: &a&l" + house.getDoors().size())); + + e.setItem(31, Utils.createItem(Material.SLIME_BALL, "&a&lBuy Trashcan", Collections.singletonList("&7Price: &a&l5 Permits"))); + e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Close this menu")); + e.setItem(49, Utils.createItem(Material.DROPPER, "&3&lTrash Can: &a&l" + trashcan.getId(), "&7Sell your loot!")); + + int size = user.getHouses().size() + user.getPremiumHousesAsGuest().size(); + int max = user.getMaxHouses(player, Core.getUserManager().getLoadedUser(uuid), GTM.getUserManager().getLoadedUser(uuid)); + e.setItem(51, Utils.createItem(Material.BOOK, "&3&lMax Houses: &a&l" + size + "&7/&a" + max, + size >= max ? "&7Go to &a" + Core.getSettings().getStoreLink() + "&7 to get access to more houses!" : "&7You can own &a" + (max - size) + "&7 more houses!")); + return; + } + case "confirmtrashcanbuy": { + this.setConfirmDefaults(e, "&a&lClick to buy this Trash Can for 5 permits", "&c&lClick to cancel!"); + return; + } + default: + break; + } + } + + @EventHandler + public void onMenuClick(MenuClickEvent e) { + Player player = e.getPlayer(); + UUID uuid = player.getUniqueId(); + Menu menu = e.getMenu(); + ItemStack item = e.getItem(); + Inventory inv = e.getInv(); + HouseUser user = Houses.getUserManager().getLoadedUser(uuid); + switch (menu.getName()) { + case "houses": + if (item == null) + return; + switch (item.getType()) { + case REDSTONE: + MenuManager.openMenu(player, "phone"); + return; + case IRON_DOOR: + String s = ChatColor.stripColor(item.getItemMeta().getDisplayName()); + if ("Find House".equals(s)) + return; + if (s.startsWith("Premium House: ")) { + int id; + try { + id = Integer.parseInt(s.replace("Premium House: ", "")); + } catch (NumberFormatException e1) { + player.sendMessage(Utils.f(Lang.HOUSES + "&7That House ID is invalid!")); + return; + } + PremiumHouse house = Houses.getHousesManager().getPremiumHouse(id); + if (house == null) { + player.sendMessage(Lang.HOUSES.f("&7That premium house does not exist!")); + return; + } + user.setMenuHouseId(house.getId()); + MenuManager.openMenu(player, "premiumhouse"); + return; + } else if (s.startsWith("House: ")) { + int id; + try { + id = Integer.parseInt(s.replace("House: ", "")); + } catch (NumberFormatException ex) { + player.sendMessage(Utils.f(Lang.HOUSES + "&7That House ID is invalid!")); + return; + } + House house = Houses.getHousesManager().getHouse(id); + if (house == null) { + player.sendMessage(Lang.HOUSES.f("&7That house does not exist!")); + return; + } + user.setMenuHouseId(house.getId()); + MenuManager.openMenu(player, "house"); + return; + } + return; + case ARROW: + int page = Integer.parseInt(ChatColor.stripColor(item.getItemMeta().getLore().get(0)).replace("Page ", "")); + this.setPhoneDefaults(inv); + int[] slots = new int[]{10, 11, 12, 13, 14, 15, 16, 19, 20, 21, 22, 23, 24, 25, 28, 29, 30, 31, 32, 33, 34, 37, 38, 39, 40, 41, 42, 43}; + List<UserHouse> houses = user.getHouses(); + List<PremiumHouse> premiumHouses = user.getPremiumHousesAsGuest(); + Iterator<UserHouse> it = houses.iterator(); + Iterator<PremiumHouse> it2 = premiumHouses.iterator(); + int size = houses.size() + premiumHouses.size(); + int max = user.getMaxHouses(player, Core.getUserManager().getLoadedUser(uuid), GTM.getUserManager().getLoadedUser(uuid)); + for (int i = 0; i < (page * 20); i++) { + PremiumHouse premiumHouse = it.hasNext() ? null : it2.hasNext() ? it2.next() : null; + UserHouse userHouse = it.hasNext() ? it.next() : null; + if (premiumHouse == null && userHouse == null) + break; + if (i < (page - 1) * 20) + continue; + if (premiumHouse != null) { + inv.setItem(slots[i - (page - 1) * 20], + Utils.addGlow(Utils.createItem(Material.IRON_DOOR, "&3&lPremium House: &a&l" + premiumHouse.getId(), + Arrays.asList("Permits: &a&l" + premiumHouse.getPermits(), "&7Chests: &a&l" + premiumHouse.getChests().size(), + "&7Owned by &a" + (player.getUniqueId().equals(premiumHouse.getOwner()) ? "me" : premiumHouse.getOwnerName()) + '.')))); + continue; + } + + House house = Houses.getHousesManager().getHouse(userHouse.getId()); + inv.setItem(slots[i - (page - 1) * 20], Utils.createItem(Material.IRON_DOOR, "&3&lHouse: &a&l" + house.getId(), + Arrays.asList("&7Price: &$a&l" + house.getPrice(), "&7Chests: &a&l" + house.getChests().size()))); + } + inv.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the home page!")); + if (page > 1) + inv.setItem(48, Utils.createItem(Material.ARROW, "&3llPrevious Page", "&7Page " + (page - 1))); + inv.setItem(49, Utils.setArmorColor(Utils.createItem(Material.IRON_DOOR, "&3&lMy Houses", "&7Click on a house to open its menu!"), Color.fromRGB(102, 127, 51))); + if ((houses.size() + premiumHouses.size()) > (20 * page)) + inv.setItem(50, Utils.createItem(Material.ARROW, "&3&lNext Page", "&7Page 2")); + inv.setItem(51, Utils.createItem(Material.BOOK, "&3&lMax Houses: &a&l" + size + "&7/&a" + max, + size >= max ? "&7Go to &a" + Core.getSettings().getStoreLink() + "&7 to get access to more houses!" : "&7You can own &a" + (max - size) + "&7 more houses!")); + return; + default: + return; + + } + case "house": + if (item == null) + return; + switch (item.getType()) { + case SLIME_BALL: + MenuManager.openMenu(player, "buyhouse"); + return; + case INK_SACK: + MenuManager.openMenu(player, "sellhouse"); + return; + case REDSTONE: + MenuManager.openMenu(player, "houses"); + default: + return; + } + case "editblocks": + if (item == null) return; + if (!user.isInsidePremiumHouse()) { + return; + } + if (user.getEditingBlock() == null) return; + if (!Blocks.getMaterials().contains(item.getType())) return; + user.getEditingBlock().setType(item.getType(), false); + user.getEditingBlock().setData(item.getData().getData()); + user.setEditingBlock(null); + player.sendMessage(Lang.HOUSES.f("&7Block has been set to &a" + item.getType().name() + "&7!")); + user.setLastUsedMaterial(Blocks.match(item.getType(), item.getData().getData())); + player.closeInventory(); + return; + case "premiumhouse": + if (item == null) + return; + switch (item.getType()) { + case SLIME_BALL: + MenuManager.openMenu(player, "buypremiumhouse"); + return; + case INK_SACK: + MenuManager.openMenu(player, "sellpremiumhouse"); + return; + case TRIPWIRE_HOOK: + MenuManager.openMenu(player, "guests"); + return; + case REDSTONE: + MenuManager.openMenu(player, "houses"); + return; + case SNOW_BLOCK: + PremiumHouse house = Houses.getHousesManager().getPremiumHouse(user.getMenuHouseId()); + if (!house.getOwnerName().equalsIgnoreCase(player.getName())) return; + if (!user.isInsidePremiumHouse()) { + user.teleportInOrOutPremiumHouse(player, house); + } + if (user.isChangingBlocks()) { + player.sendMessage(Lang.HOUSES.f("&7House Editing disabled")); + } else { + player.sendMessage(Core.getAnnouncer().getHeader()); + player.sendMessage(Lang.HOUSES.f("&7You are now editing your house, right click a block to begin!")); + player.sendMessage(Lang.HOUSES.f("&7SHIFT + Right click a block to automatically set it to your last used block" + + " (for quick changing)")); + player.sendMessage(Lang.HOUSES.f("&7Once you're finished, leave your house to disable house editing." + + " (You can also use your door GUI to disable it)")); + player.sendMessage(Core.getAnnouncer().getFooter()); + } + user.setChangingBlocks(!user.isChangingBlocks()); + return; + default: + return; + } + case "sellhouse": + if (item == null) + return; + switch (item.getType()) { + case STAINED_GLASS_PANE: + switch (item.getDurability()) { + case 5: + House house = Houses.getHousesManager().getHouse(user.getMenuHouseId()); + if (house == null) { + player.sendMessage(Lang.HOUSES.f("&7That house does not exist!")); + return; + } + house.sellHouse(player, GTM.getUserManager().getLoadedUser(uuid), user); + case 14: + MenuManager.openMenu(player, "house"); + return; + default: + return; + } + default: + return; + } + + case "buyhouse": + if (item == null) + return; + switch (item.getType()) { + case STAINED_GLASS_PANE: + switch (item.getDurability()) { + case 5: + House house = Houses.getHousesManager().getHouse(user.getMenuHouseId()); + if (house == null) { + player.sendMessage(Lang.HOUSES.f("&7That house does not exist!")); + return; + } + house.buyHouse(player, Core.getUserManager().getLoadedUser(uuid), GTM.getUserManager().getLoadedUser(uuid), user); + case 14: + MenuManager.openMenu(player, "house"); + return; + default: + return; + } + default: + return; + } + + case "sellpremiumhouse": + if (item == null) + return; + switch (item.getType()) { + case STAINED_GLASS_PANE: + switch (item.getDurability()) { + case 5: + PremiumHouse house = Houses.getHousesManager().getPremiumHouse(user.getMenuHouseId()); + house.sell(player, GTM.getUserManager().getLoadedUser(uuid), user); + case 14: + MenuManager.openMenu(player, "premiumhouse"); + return; + default: + return; + } + default: + return; + } + case "buypremiumhouse": + if (item == null) + return; + switch (item.getType()) { + case STAINED_GLASS_PANE: + switch (item.getDurability()) { + case 5: + PremiumHouse house = Houses.getHousesManager().getPremiumHouse(user.getMenuHouseId()); + house.buy(player, Core.getUserManager().getLoadedUser(uuid), GTM.getUserManager().getLoadedUser(uuid), user); + case 14: + MenuManager.openMenu(player, "premiumhouse"); + return; + default: + return; + } + default: + return; + } + case "guests": + if (item == null) + return; + switch (item.getType()) { + case ARROW: { + int page = Integer.parseInt(ChatColor.stripColor(item.getItemMeta().getLore().get(0)).replace("Page ", "")); + this.setPhoneDefaults(inv); + int[] slots = new int[]{10, 11, 12, 13, 14, 15, 16, 19, 20, 21, 22, 23, 24, 25, 28, 29, 30, 31, 32, 33, 34, 37, 38, 39, 40, 41, 42, 43}; + PremiumHouse house = Houses.getManager().getPremiumHouse(user.getMenuHouseId()); + List<PremiumHouseGuest> guests = house.getGuests(); + Iterator<PremiumHouseGuest> it = guests.iterator(); + for (int i = 0; i < (page * 20); i++) { + if (!it.hasNext()) + break; + PremiumHouseGuest guest = it.next(); + if (i < (page - 1) * 20) + continue; + inv.setItem(slots[i - (page - 1) * 20], Utils.setSkullOwner(Utils.createItem(Material.SKULL_ITEM, 2, "&3&l" + guest.getName()), guest.getName())); + } + inv.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the premium house menu!")); + if (page > 1) + inv.setItem(48, Utils.createItem(Material.ARROW, "&3&lPrevious Page", "&7Page " + (page - 1))); + if (house.getOwner().equals(player.getUniqueId())) { + inv.setItem(49, Utils.createItem(Material.SLIME_BALL, "&a&lAdd Guest")); + inv.setItem(51, Utils.createItem(Material.INK_SACK, 1, "&c&lRemove Guest")); + } else + inv.setItem(49, Utils.setArmorColor(Utils.createItem(Material.TRIPWIRE_HOOK, "&3&lPremium House Guests", "&7Players that can access this house!"), + Color.fromRGB(102, 127, 51))); + if (guests.size() > (20 * page)) + inv.setItem(50, Utils.createItem(Material.ARROW, "&3&lNext Page", "&7Page 2")); + + return; + } + case SLIME_BALL: { + PremiumHouse house = Houses.getManager().getPremiumHouse(user.getMenuHouseId()); + if (house.isOwner(uuid)) + player.closeInventory(); + user.addGuest(player, house); + return; + } + case INK_SACK: + PremiumHouse house = Houses.getManager().getPremiumHouse(user.getMenuHouseId()); + if (house.getOwner().equals(user.getUUID())) + MenuManager.openMenu(player, "removeguests"); + else + player.sendMessage(Utils.f(Lang.HOUSES + "&7You don't own this house!")); + return; + case REDSTONE: + MenuManager.openMenu(player, "premiumhouse"); + return; + default: + return; + } + case "removeguests": + if (item == null) + return; + switch (item.getType()) { + case ARROW: { + int page = Integer.parseInt(ChatColor.stripColor(item.getItemMeta().getLore().get(0)).replace("Page ", "")); + this.setPhoneDefaults(inv); + int[] slots = new int[]{10, 11, 12, 13, 14, 15, 16, 19, 20, 21, 22, 23, 24, 25, 28, 29, 30, 31, 32, 33, 34, 37, 38, 39, 40, 41, 42, 43}; + PremiumHouse house = Houses.getManager().getPremiumHouse(user.getMenuHouseId()); + List<PremiumHouseGuest> guests = house.getGuests(); + Iterator<PremiumHouseGuest> it = guests.iterator(); + for (int i = 0; i < (page * 20); i++) { + if (!it.hasNext()) + break; + PremiumHouseGuest guest = it.next(); + if (i < (page - 1) * 20) + continue; + inv.setItem(slots[i - (page - 1) * 20], + Utils.setSkullOwner(Utils.createItem(Material.SKULL_ITEM, 2, "&3&l" + guest.getName(), "&7Click to remove this guest!"), guest.getName())); + } + inv.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the premium house menu!")); + if (page > 1) + inv.setItem(48, Utils.createItem(Material.ARROW, "&3&lPrevious Page", "&7Page " + (page - 1))); + if (house.getOwner().equals(player.getUniqueId())) { + inv.setItem(49, Utils.createItem(Material.SLIME_BALL, "&a&lAdd Guest")); + inv.setItem(51, Utils.createItem(Material.INK_SACK, 1, "&c&lStop Removing Guests")); + } else + inv.setItem(49, Utils.setArmorColor(Utils.createItem(Material.TRIPWIRE_HOOK, "&3&lPremium House Guests", "&7Players that can access this house!"), + Color.fromRGB(102, 127, 51))); + if (guests.size() > (20 * page)) + inv.setItem(50, Utils.createItem(Material.ARROW, "&3&lNext Page", "&7Page 2")); + return; + } + case SLIME_BALL: { + PremiumHouse house = Houses.getManager().getPremiumHouse(user.getMenuHouseId()); + player.closeInventory(); + user.addGuest(player, house); + return; + } + case SKULL_ITEM: + PremiumHouse house = Houses.getHousesManager().getPremiumHouse(user.getMenuHouseId()); + String guest = ChatColor.stripColor(item.getItemMeta().getDisplayName()); + Player target = Bukkit.getPlayer(guest); + if (target == null) house.removeGuest(player, guest); + else + house.removeGuest(player, target, Houses.getUserManager().getLoadedUser(target.getUniqueId())); + MenuManager.openMenu(player, "removeguests"); + return; + case INK_SACK: + MenuManager.openMenu(player, "guests"); + return; + case REDSTONE: + MenuManager.openMenu(player, "guests"); + return; + default: + return; + + } + case "houseshelp": + if (item == null) return; + switch (item.getType()) { + case REDSTONE: + MenuManager.openMenu(player, "houses"); + return; + default: + break; + } + case "buytrashcan": + if (item == null) return; + switch (item.getType()) { + case SLIME_BALL: { + MenuManager.openMenu(player, "confirmtrashcanbuy"); + return; + } + case REDSTONE: + player.closeInventory(); + return; + default: + return; + } + case "confirmtrashcanbuy": { + if (item == null) return; + switch (item.getType()) { + case STAINED_GLASS_PANE: + switch (item.getDurability()) { + case 5: + if (user.getOpenTrashcan() == null) return; + GTMUser gtmUser = GTM.getUserManager().getLoadedUser(uuid); + PremiumHouseTrashcan trashcan = user.getOpenTrashcan(); + PremiumHouse premiumHouse = Houses.getHousesManager().getPremiumHouse(trashcan.getHouseId()); + if (!premiumHouse.getOwnerName().equalsIgnoreCase(player.getName())) { + player.sendMessage(Lang.HOUSES.f("&7Only the house owner may purchase house extensions!")); + return; + } + if (gtmUser.hasPermits(5)) { + gtmUser.takePermits(5); + trashcan.setOwned(true); + Houses.getHousesManager().save(); + Utils.insertLogLater(player.getUniqueId(), player.getName(), "confirmtrashcanbuyMenu", "BUY_TRASHCAN", "Premium House ID: " + trashcan.getHouseId(),1,5); + player.sendMessage(Lang.HOUSES.f("&7Trash Can purchased for &3&l5 permits&7!")); + } else { + player.sendMessage(Lang.HOUSES.f("&7You don't have the required 5 permits to purchase this!")); + } + player.closeInventory(); + return; + case 14: + MenuManager.openMenu(player, "buytrashcan"); + return; + default: + return; + } + default: + return; + } + } + } + } + +} diff --git a/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/listeners/PetListener.java b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/listeners/PetListener.java new file mode 100644 index 0000000..c3c6373 --- /dev/null +++ b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/listeners/PetListener.java @@ -0,0 +1,35 @@ +package net.grandtheftmc.houses.listeners; + +/*import com.dsh105.echopet.compat.api.event.PetInteractEvent; +import com.dsh105.echopet.compat.api.event.PetTeleportEvent; +import net.grandtheftmc.houses.Houses; +import net.grandtheftmc.houses.houses.House; +import net.grandtheftmc.houses.houses.HouseDoor; +import net.grandtheftmc.houses.users.HouseUser; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler;*/ +import org.bukkit.event.Listener; + +public class PetListener implements Listener { + + /* @EventHandler + public void onTeleport(PetTeleportEvent e) { + Player player = e.getPet().getOwner(); + HouseUser houseUser = Houses.getUserManager().getLoadedUser(player.getUniqueId()); + if (!houseUser.isInsideHouse()) return; + e.setCancelled(true); + House house = Houses.getHousesManager().getHouse(houseUser.getInsideHouse()); + if (house != null) { + HouseDoor door = house.getDoor(); + if (door != null) + e.setTo(door.getOutsideLocation()); + } + } + + @EventHandler + public void onPetInteract(PetInteractEvent e) { + Player player = e.getPet().getOwner(); + HouseUser houseUser = Houses.getUserManager().getLoadedUser(player.getUniqueId()); + if (houseUser.isInsideHouse() || houseUser.isInsidePremiumHouse()) e.setCancelled(true); + }*/ +} diff --git a/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/listeners/Teleport.java b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/listeners/Teleport.java new file mode 100644 index 0000000..7963b74 --- /dev/null +++ b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/listeners/Teleport.java @@ -0,0 +1,55 @@ +package net.grandtheftmc.houses.listeners; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.gtm.GTM; +import net.grandtheftmc.gtm.events.TPEvent; +import net.grandtheftmc.gtm.users.GTMUser; +import net.grandtheftmc.houses.Houses; +import net.grandtheftmc.houses.users.HouseUser; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerTeleportEvent; +import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; + +public class Teleport implements Listener { + + @EventHandler + public void onTeleport(PlayerTeleportEvent e) { + if (e.getCause() == TeleportCause.END_PORTAL) return; + Player player = e.getPlayer(); + HouseUser user = Houses.getUserManager().getLoadedUser(player.getUniqueId()); + if (user.isInsideHouse()) { + user.setInsideHouse(-1); + user.updateVisibility(player); + } + if (user.isInsidePremiumHouse()) user.setInsidePremiumHouse(-1); + } + + @EventHandler + public void onTP(TPEvent e) { + if (e.getTarget() == null) + return; + Player player = e.getPlayer(); + GTMUser user = GTM.getUserManager().getLoadedUser(player.getUniqueId()); + switch (e.getType()) { + case TP_COMPLETE: + HouseUser targetUser = Houses.getUserManager().getLoadedUser(e.getTarget().getUniqueId()); + if (targetUser.isInsideHouse()) { + e.setTargetLocation( + Houses.getHousesManager().getHouse(targetUser.getInsideHouse()).getDoor().getOutsideLocation()); + } else if (targetUser.isInsidePremiumHouse()) { + e.setTargetLocation(Houses.getHousesManager().getPremiumHouse(targetUser.getInsidePremiumHouse()).getDoor() + .getOutsideLocation()); + } + return; + case PREMIUM_HOUSE_LEAVE: + case HOUSE_LEAVE: + user.setLastTeleport(); + break; + default: + break; + } + } + +} diff --git a/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/listeners/WeaponShoot.java b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/listeners/WeaponShoot.java new file mode 100644 index 0000000..4425242 --- /dev/null +++ b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/listeners/WeaponShoot.java @@ -0,0 +1,22 @@ +package net.grandtheftmc.houses.listeners; + +import com.j0ach1mmall3.wastedguns.api.events.ranged.RangedWeaponShootEvent; +import net.grandtheftmc.houses.Houses; +import net.grandtheftmc.houses.users.HouseUser; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; + +public class WeaponShoot implements Listener { + + @EventHandler + public void rangedWeaponShoot(RangedWeaponShootEvent event) { + if (event.getLivingEntity().getType() != EntityType.PLAYER) return; + Player player = (Player) event.getLivingEntity(); + HouseUser houseUser = Houses.getUserManager().getLoadedUser(player.getUniqueId()); + if (houseUser.isTeleporting()) { + event.setCancelled(true); + } + } +} diff --git a/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/users/HouseUser.java b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/users/HouseUser.java new file mode 100644 index 0000000..f5eecae --- /dev/null +++ b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/users/HouseUser.java @@ -0,0 +1,756 @@ +package net.grandtheftmc.houses.users; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.database.BaseDatabase; +import net.grandtheftmc.core.util.Callback; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.gtm.GTMUtils; +import net.grandtheftmc.gtm.events.TPEvent; +import net.grandtheftmc.gtm.users.GTMUser; +import net.grandtheftmc.houses.HouseUtils; +import net.grandtheftmc.houses.Houses; +import net.grandtheftmc.houses.dao.HouseDAO; +import net.grandtheftmc.houses.houses.*; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.Sound; +import org.bukkit.block.Block; +import org.bukkit.entity.Player; +import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; +import org.bukkit.scheduler.BukkitRunnable; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.*; +import java.util.stream.Collectors; + +public class HouseUser { + + private final UUID uuid; + private boolean hasUpdated; + private List<UserHouse> houses = new ArrayList<>(); + + private int insideHouse; + private int insidePremiumHouse; + private boolean teleporting; + + private House editingHouse; + private PremiumHouse editingPremiumHouse; + private boolean addingChests; + private boolean removingChests; + private HouseDoor addingDoor; + private PremiumHouseDoor addingPremiumDoor; + private boolean removingDoor; + private int addingGuest; + private boolean addingSigns; + private boolean removingSigns; + private boolean addingBlocks; + private boolean removingBlocks; + private boolean loadedChests = false; + + private int lastChestId = -1; + + private Object openChest; + + private PremiumHouseTrashcan openTrashcan; + private boolean addingTrashcans; + private boolean removingTrashcans; + + private int menuHouseId; + + private int maxHouses = -1; + + private Block editingBlock; + private boolean changingBlocks; + private Blocks lastUsedMaterial; + + public HouseUser(UUID uuid) { + this.uuid = uuid; + } + + public UUID getUUID() { + return this.uuid; + } + + public void dataCheck(String name) { + for (PremiumHouse house : Houses.getManager().getPremiumHouses()) { + if (house.isOwner(this.uuid)) + house.setOwnerName(name); + PremiumHouseGuest guest = house.getGuest(this.uuid); + if (guest != null) + guest.setName(name); + } + + String table = Core.name(); + +// Core.sql.update("update " + Core.name() + "_houses set name='" + name + "' where uuid='" + this.uuid + "';"); +// BaseDatabase.runCustomQuery("update " + Core.name() + "_houses set name='" + name + "' where uuid='" + this.uuid + "';"); + + //Not used. +// Core.sql.update("update " + Core.name() + " set name='ERROR' where name='" + name + "' and uuid!='" + this.uuid + "';"); + } + + public void loadChests(Callback<Boolean> callback) { + new BukkitRunnable() { + @Override public void run() { + boolean b = true; + + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + + HouseDAO.getChestContent(connection, HouseUser.this, uuid); + +// try (PreparedStatement statement = connection.prepareStatement("select * from " + Core.name() + "_houses_chests where uuid='" + HouseUser.this.uuid + "' LIMIT 10000;")) { +// try (ResultSet result = statement.executeQuery()) { +// while (result.next()) { +// int id = result.getInt("houseId"); +// int chestId = result.getInt("chestId"); +// UserHouse userHouse = HouseUser.this.getUserHouse(id); +// if (userHouse == null) +// continue; +// UserHouseChest chest = userHouse.getChestOrNull(chestId); +// if (chest == null) { +// userHouse.addChest(new UserHouseChest(id, chestId, GTMUtils.fromBase64(result.getString("contents")))); +// } else { +// chest.setContents(GTMUtils.fromBase64(result.getString("contents"))); +// } +// } +// } +// } + } catch (SQLException e) { + e.printStackTrace(); + b = false; + } + +// try { +// ResultSet rs = Core.sql.query("select * from " + Core.name() + "_houses_chests where uuid='" + HouseUser.this.uuid + "' LIMIT 10000;"); +// // HousesChests(uuid varchar(255), houseId integer, chestId +// // integer, contents blob); +// while (rs.next()) { +// int id = rs.getInt("houseId"); +// int chestId = rs.getInt("chestId"); +// UserHouse userHouse = HouseUser.this.getUserHouse(id); +// if (userHouse == null) +// continue; +// UserHouseChest chest = userHouse.getChestOrNull(chestId); +// if (chest == null) { +// userHouse.addChest(new UserHouseChest(id, chestId, GTMUtils.fromBase64(rs.getString("contents")))); +// } else { +// chest.setContents(GTMUtils.fromBase64(rs.getString("contents"))); +// } +// } +// rs.close(); +// } catch (SQLException e) { +// e.printStackTrace(); +// b = false; +// } + + HouseUser.this.loadedChests = true; + callback.call(b); + } + }.runTaskAsynchronously(Core.getInstance()); + } + + public boolean updateDataFromDb() { + HousesManager hm = Houses.getHousesManager(); + this.houses = new ArrayList<>(); + boolean b = true; + + Optional<List<UserHouse>> optional = Optional.empty(); + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + optional = HouseDAO.loadUser(connection, hm, this.uuid); + } catch (SQLException e) { + e.printStackTrace(); + b = false; + } + + if (!optional.isPresent()) { + System.out.println("ERROR, OPTIONAL WASN'T PRESENT."); + } + else { + optional.get().stream().forEach(userHouse -> { + System.out.println("ID - " + userHouse.getId()); + this.houses.add(userHouse); + }); + } + +// try (Connection connection = BaseDatabase.getInstance().getConnection()) { +// try (PreparedStatement statement = connection.prepareStatement("select * from " + Core.name() + "_houses where uuid='" + this.uuid + "' LIMIT 500;")) { +// try (ResultSet result = statement.executeQuery()) { +// while (result.next()) { +// int id = result.getInt("houseId"); +// House house = hm.getHouse(id); +// if (house == null) +// continue; +// UserHouse userHouse = new UserHouse(this.uuid, house.getId()); +// this.houses.add(userHouse); +// } +// } +// } +// } catch (SQLException e) { +// e.printStackTrace(); +// b = false; +// } + +// try { +// ResultSet rs = Core.sql.query("select * from " + Core.name() + "_houses where uuid='" + this.uuid + "' LIMIT 500;"); +// while (rs.next()) { +// int id = rs.getInt("houseId"); +// House house = hm.getHouse(id); +// if (house == null) +// continue; +// UserHouse userHouse = new UserHouse(this.uuid, house.getId()); +// this.houses.add(userHouse); +// } +// rs.close(); +// } catch (SQLException e) { +// e.printStackTrace(); +// b = false; +// } + + this.hasUpdated = true; + return b; + } + + public int getMaxHouses(Player player, User user, GTMUser gtmUser) { + if (this.maxHouses >= 0) return this.maxHouses; + int amnt = gtmUser.getRank().getHouses() + HouseUtils.getHouses(user.getUserRank()); + for (int i = 20; i > 0; i--) + if (player.hasPermission("houses.own." + i)) { + amnt += i; + break; + } + for (int i = 20; i > 0; i--) + if (player.hasPermission("houses.extra." + i)) + amnt += i; + this.maxHouses = amnt; + return amnt; + } + + public boolean hasMaxHouses(Player player, User user, GTMUser gtmUser) { + return this.getMaxHouses(player, user, gtmUser) <= (this.houses.size() + this.getPremiumHouses().size()); + } + + public UserHouse getUserHouse(int id) { + for (UserHouse house : this.houses) + if (house.getId() == id) + return house; + return null; + } + + public UserHouse getUserHouseByUniqueId(int uniqueId) { + for (UserHouse house : this.houses) + if (house.getUniqueId() == uniqueId) + return house; + return null; + } + + public boolean ownsHouse(int id) { + return this.getUserHouse(id) != null; + } + + public List<UserHouse> getHouses() { + return this.houses; + } + + public List<UserHouse> getHouses(int start, int end) { + if (start < 0 || end > this.houses.size()) return this.houses; + return this.houses.subList(start, end); + } + + public PremiumHouse getPremiumHouse(int id) { + for (PremiumHouse house : this.getPremiumHouses()) + if (house.getId() == id) + return house; + return null; + } + + public boolean ownsPremiumHouse(int id) { + return this.getPremiumHouse(id) != null; + } + + public List<PremiumHouse> getPremiumHouses() { + return Houses.getManager().getPremiumHouses().stream().filter(house -> this.uuid.equals(house.getOwner())).collect(Collectors.toList()); + } + + public List<PremiumHouse> getPremiumHouses(int start, int end) { + if (start < 0 || end > this.getPremiumHouses().size()) { + return this.getPremiumHouses(); + } + return this.getPremiumHouses().subList(start, end); + } + + public List<PremiumHouse> getPremiumHousesAsGuest() { + return Houses.getManager().getPremiumHouses().stream().filter(house -> this.uuid.equals(house.getOwner()) || house.isGuest(this.uuid)).collect(Collectors.toList()); + } + + public List<PremiumHouse> getPremiumHousesOnlyAsGuest() { + return Houses.getManager().getPremiumHouses().stream().filter(house -> house.isGuest(this.uuid)).collect(Collectors.toList()); + } + + public boolean isInsideHouse() { + return this.insideHouse > 0; + } + + public boolean isInsideHouse(int id) { + return this.insideHouse == id; + } + + public int getInsideHouse() { + return this.insideHouse; + } + + public void setInsideHouse(int i) { + this.insideHouse = i; + } + + public boolean isInsidePremiumHouse() { + return this.insidePremiumHouse > 0; + } + + public boolean isInsidePremiumHouse(int id) { + return this.insidePremiumHouse == id; + } + + public int getInsidePremiumHouse() { + return this.insidePremiumHouse; + } + + public void setInsidePremiumHouse(int i) { + this.insidePremiumHouse = i; + } + + public boolean isTeleporting() { + return this.teleporting; + } + + public void setTeleporting(boolean b) { + this.teleporting = b; + } + + public void updateVisibility(Player player) { + // IF PLAYER IS IN NORMAL HOUSE -> CANT SEE ANYONE + // IF PLAYER IS NOT IN HOUSE -> CAN SEE EVERYONE THAT IS NOT IN A NORMAL + // HOUSE + HouseUserManager um = Houses.getUserManager(); + boolean viewInvisible = player.hasPermission("houses.viewinvisible"); + if (this.isInsideHouse()) + for (Player p : Bukkit.getOnlinePlayers()) { + if (!viewInvisible) player.hidePlayer(p); + if (!p.hasPermission("houses.viewinvisible")) p.hidePlayer(player); + } + else { + + for (Player p : Bukkit.getOnlinePlayers()) { + HouseUser u = um.getLoadedUser(p.getUniqueId()); + if (u.isInsideHouse()) { + if (!p.hasPermission("houses.viewinvisible")) + p.hidePlayer(player); + if (!viewInvisible) + player.hidePlayer(player); + } else { + p.showPlayer(player); + player.showPlayer(p); + } + } + } + } + + + public String getHousesString() { + String s = ""; + Iterator<UserHouse> it = this.houses.iterator(); + while (it.hasNext()) + s = s + it.next().getId() + (it.hasNext() ? "," : ""); + return s; + } + + public void teleportInOrOutHouse(Player player, House house) { + this.teleportInOrOutHouse(player, Core.getUserManager().getLoadedUser(player.getUniqueId()), house.getDoors().get(0)); + } + + public void teleportInOrOutHouse(Player player, HouseDoor door) { + this.teleportInOrOutHouse(player, Core.getUserManager().getLoadedUser(player.getUniqueId()), door); + } + + public void teleportInOrOutHouse(Player player, User user, House house) { + this.teleportInOrOutHouse(player, user, house.getDoors().get(0)); + } + + public void teleportInOrOutHouse(Player player, User user, HouseDoor door) { + UUID finalUUID = this.uuid; + int houseId = door.getHouseId(); + int doorId = door.getId(); + this.teleporting = true; + int cooldown = HouseUtils.getHouseDelay(user.getUserRank()); + player.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, cooldown + 20, 0)); + player.sendMessage(Lang.HOUSES.f("&7" + (this.isInsideHouse() ? "Leaving" : "Entering") + " your house" + (cooldown < 20 ? "." : " in &a&l" + (cooldown / 20) + " &7seconds." + (user.isSpecial() ? "" : "Buy a rank to speed it up.")))); + new BukkitRunnable() { + @Override + public void run() { + Player player = Bukkit.getPlayer(finalUUID); + if (player == null) + return; + HouseUser user = Houses.getUserManager().getLoadedUser(finalUUID); + if (!user.isTeleporting()) + return; + House house = Houses.getManager().getHouse(houseId); + if (house == null) + return; + HouseDoor door = house.getDoor(doorId); + if (door == null) + door = house.getDoor(); + user.setTeleporting(false); + user.setInsidePremiumHouse(-1); + TPEvent e = new TPEvent(player, player, user.isInsideHouse() ? TPEvent.TPType.HOUSE_LEAVE : TPEvent.TPType.HOUSE_ENTER).call(); + if (e.isCancelled()) { + player.sendMessage(Lang.HOUSES.f(e.getCancelMessage())); + return; + } + Location tpLoc = user.isInsideHouse() ? door.getOutsideLocation() : door.getInsideLocation(); + user.setInsideHouse(user.isInsideHouse() ? -1 : houseId); + player.teleport(new Location(tpLoc.getWorld(), tpLoc.getX(), tpLoc.getY(), tpLoc.getZ(), player.getLocation().getYaw(), player.getLocation().getPitch()), TeleportCause.END_PORTAL); + HouseUser.this.updateVisibility(player); + if(!loadedChests) + loadChests((call) -> {}); + } + }.runTaskLater(Houses.getInstance(), cooldown); + } + + public void teleportInOrOutPremiumHouse(Player player, PremiumHouse house) { + this.teleportInOrOutPremiumHouse(player, house.getDoors().get(0)); + } + + public void teleportInOrOutPremiumHouse(Player player, PremiumHouseDoor door) { + UUID finalUUID = this.uuid; + int houseId = door.getHouseId(); + int doorId = door.getId(); + this.teleporting = true; + player.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, 30, 0)); + new BukkitRunnable() { + @Override + public void run() { + Player player = Bukkit.getPlayer(finalUUID); + if (player == null) + return; + HouseUser user = Houses.getUserManager().getLoadedUser(finalUUID); + if (!user.isTeleporting()) + return; + PremiumHouse house = Houses.getHousesManager().getPremiumHouse(houseId); + if (house == null) + return; + PremiumHouseDoor door = house.getDoor(doorId); + if (door == null) + door = house.getDoor(); + user.setTeleporting(false); + user.setInsideHouse(-1); + TPEvent e = new TPEvent(player, player, user.isInsideHouse() ? TPEvent.TPType.PREMIUM_HOUSE_LEAVE : TPEvent.TPType.PREMIUM_HOUSE_ENTER).call(); + if (e.isCancelled()) { + player.sendMessage(Lang.HOUSES.f(e.getCancelMessage())); + return; + } + player.playSound(player.getLocation(), + user.isInsidePremiumHouse() ? Sound.BLOCK_IRON_DOOR_CLOSE : Sound.BLOCK_IRON_DOOR_OPEN, + 1.0F, 1.0F); + Location tpLoc = user.isInsidePremiumHouse() ? door.getOutsideLocation() : door.getInsideLocation(); + user.setInsidePremiumHouse(user.isInsidePremiumHouse() ? -1 : houseId); + player.teleport(new Location(tpLoc.getWorld(), tpLoc.getX(), tpLoc.getY(), tpLoc.getZ(), player.getLocation().getYaw(), player.getLocation().getPitch()), TeleportCause.END_PORTAL); + HouseUser.this.updateVisibility(player); + if (!user.isInsidePremiumHouse()) { + if (user.isChangingBlocks()) { + player.sendMessage(Lang.HOUSES.f("&7House Editing disabled")); + user.setChangingBlocks(false); + } + } + } + }.runTaskLater(Houses.getInstance(), 12); + } + + public House getEditingHouse() { + return this.editingHouse; + } + + public void setEditingHouse(House editingHouse) { + this.editingHouse = editingHouse; + } + + public PremiumHouse getEditingPremiumHouse() { + return this.editingPremiumHouse; + } + + public void setEditingPremiumHouse(PremiumHouse editingPremiumHouse) { + this.editingPremiumHouse = editingPremiumHouse; + } + + public boolean isAddingChests() { + return this.addingChests; + } + + public void setAddingChests(boolean addingChests) { + this.addingChests = addingChests; + } + + public boolean isRemovingChests() { + return this.removingChests; + } + + public void setRemovingChests(boolean removingChests) { + this.removingChests = removingChests; + } + + public HouseDoor getAddingDoor() { + return this.addingDoor; + } + + public boolean isAddingDoor() { + return this.addingDoor != null; + } + + public void setAddingDoor(HouseDoor addingDoor) { + this.addingDoor = addingDoor; + } + + public PremiumHouseDoor getAddingPremiumDoor() { + return this.addingPremiumDoor; + } + + public boolean isAddingPremiumDoor() { + return this.addingPremiumDoor != null; + } + + public void setAddingPremiumDoor(PremiumHouseDoor addingPremiumDoor) { + this.addingPremiumDoor = addingPremiumDoor; + } + + public int getMenuHouseId() { + return this.menuHouseId; + } + + public void setMenuHouseId(int menuHouseId) { + this.menuHouseId = menuHouseId; + } + + public boolean isRemovingDoor() { + return this.removingDoor; + } + + public void setRemovingDoor(boolean removingDoor) { + this.removingDoor = removingDoor; + } + + public void addHouse(House house) { + List<UserHouseChest> chests = house.getChests().stream().map(chest -> new UserHouseChest(house.getId(), chest.getId())).collect(Collectors.toList()); + this.houses.add(new UserHouse(this.uuid, house.getUniqueIdentifier(), house.getId(), chests)); + int houseId = house.getId(); + UUID uuid = this.uuid; + + ServerUtil.runTaskAsync(() -> { + House h = Houses.getHousesManager().getHouse(houseId); + if (h == null) return; + + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + HouseDAO.addUser(connection, house.getUniqueIdentifier(), uuid); + + for (HouseChest chest : house.getChests()) { + HouseDAO.addChestContent(connection, house.getUniqueIdentifier(), chest.getId(), uuid, null); + } + } catch (SQLException e) { + e.printStackTrace(); + } + }); + +// new BukkitRunnable() { +// @Override +// public void run() { +// House house = Houses.getHousesManager().getHouse(houseId); +// if (house == null) return; +// +// HouseDAO.addUser(connection, house.getUniqueIdentifier(), uuid); +// +// for (HouseChest chest : house.getChests()) { +//// BaseDatabase.runCustomQuery("insert into " + Core.name() + "_houses_chests(uuid,houseId,chestId) values ('" + uuid.toString() + "','" + house.getId() + "','" + chest.getId() + "');"); +// HouseDAO.addChestContent(connection, house.getUniqueIdentifier(), chest.getId(), uuid, null); +// } +// +// BaseDatabase.runCustomQuery("insert into " + Core.name() + "_houses(uuid,houseId) values ('" + uuid + "', " + house.getId() + ");"); +// +//// try { +//// +//// PreparedStatement statement = Core.sql.prepareStatement( +//// "insert into " + Core.name() + "_houses_chests(uuid,houseId,chestId) values (?,?,?);"); +//// for (HouseChest chest : house.getChests()) { +//// statement.setString(1, uuid.toString()); +//// statement.setInt(2, house.getId()); +//// statement.setInt(3, chest.getId()); +//// statement.executeUpdate(); +//// } +//// statement.close(); +//// } catch (SQLException e) { +//// e.printStackTrace(); +//// } +//// Core.sql.update("insert into " + Core.name() + "_houses(uuid,houseId) values ('" + uuid +//// + "', " + house.getId() + ");"); +// } +// }.runTaskAsynchronously(Houses.getInstance()); + } + + public void removeHouse(Player player, House house) { + UserHouse userHouse = this.getUserHouse(house.getId()); + this.houses.remove(userHouse); + if (this.isInsideHouse(house.getId())) + this.teleportInOrOutHouse(player, Core.getUserManager().getLoadedUser(player.getUniqueId()), house); +// Core.sql.updateAsyncLater("delete from " + Core.name() + "_houses_chests where uuid='" + this.uuid +// + "' and houseId=" + house.getId() + ';'); +// Core.sql.updateAsyncLater("delete from " + Core.name() + "_houses where uuid='" + this.uuid +// + "' and houseId=" + house.getId() + ';'); + + ServerUtil.runTaskAsync(() -> { +// BaseDatabase.runCustomQuery("delete from " + Core.name() + "_houses_chests where uuid='" + this.uuid + "' and houseId=" + house.getId() + ';'); +// BaseDatabase.runCustomQuery("delete from " + Core.name() + "_houses where uuid='" + this.uuid + "' and houseId=" + house.getId() + ';'); + + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + HouseDAO.deleteOwner(connection, house.getUniqueIdentifier(), this.uuid); + //TODO Should delete from `gtm_house_chest` automatically. + } catch (SQLException e) { + e.printStackTrace(); + } + }); + } + + public boolean hasUpdated() { + return this.hasUpdated; + } + + public void setHasUpdated(boolean hasUpdated) { + this.hasUpdated = hasUpdated; + } + + public void addGuest(Player sender, PremiumHouse house) { + if (!house.isOwner(this.uuid)) { + sender.sendMessage(Utils.f(Lang.HOUSES.f("&7You don't own this house!"))); + return; + } + + this.addingGuest = house.getId(); + sender.sendMessage(Lang.HOUSES.f("&7Please type the name of the player you want to add as a guest, or type &a\"quit\"&7 to quit!")); + } + + public int getAddingGuest() { + return this.addingGuest; + } + + public boolean isAddingGuest() { + return this.addingGuest > 0; + } + + public void setAddingGuest(int addingGuest) { + this.addingGuest = addingGuest; + } + + public boolean isAddingSigns() { + return this.addingSigns; + } + + public void setAddingSigns(boolean addingSigns) { + this.addingSigns = addingSigns; + } + + public boolean isRemovingSigns() { + return this.removingSigns; + } + + public void setRemovingSigns(boolean removingSigns) { + this.removingSigns = removingSigns; + } + + public Block getEditingBlock() { + return this.editingBlock; + } + + public void setEditingBlock(Block loc) { + this.editingBlock = loc; + } + + public boolean isAddingBlocks() { + return this.addingBlocks; + } + + public void setAddingBlocks(boolean a) { + this.addingBlocks = a; + } + + public boolean isRemovingBlocks() { + return removingBlocks; + } + + public void setRemovingBlocks(boolean removingBlocks) { + this.removingBlocks = removingBlocks; + } + + public boolean isChangingBlocks() { + return changingBlocks; + } + + public void setChangingBlocks(boolean changingBlocks) { + this.changingBlocks = changingBlocks; + } + + public Blocks getLastUsedMaterial() { + return lastUsedMaterial; + } + + public void setLastUsedMaterial(Blocks lastUsedMaterial) { + this.lastUsedMaterial = lastUsedMaterial; + } + + public boolean isAddingTrashcans() { + return addingTrashcans; + } + + public void setAddingTrashcans(boolean addingTrashcans) { + this.addingTrashcans = addingTrashcans; + } + + public boolean isRemovingTrashcans() { + return removingTrashcans; + } + + public void setRemovingTrashcans(boolean removingTrashcans) { + this.removingTrashcans = removingTrashcans; + } + + public PremiumHouseTrashcan getOpenTrashcan() { + return openTrashcan; + } + + public void setOpenTrashcan(PremiumHouseTrashcan openTrashcan) { + this.openTrashcan = openTrashcan; + } + + public int getLastChestId() { + return lastChestId; + } + + public void setLastChestId(int lastChestId) { + this.lastChestId = lastChestId; + } + + public void setOpenChest(Object openChest) { + this.openChest = openChest; + } + + public boolean hasChestOpen() { + return this.openChest != null; + } + + public Object getOpenChest() { + return this.openChest; + } +} + diff --git a/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/users/HouseUserManager.java b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/users/HouseUserManager.java new file mode 100644 index 0000000..990f321 --- /dev/null +++ b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/users/HouseUserManager.java @@ -0,0 +1,34 @@ +package net.grandtheftmc.houses.users; + +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +public class HouseUserManager { + + private final List<HouseUser> loadedUsers = new ArrayList<>(); + + public List<HouseUser> getLoadedUsers() { + return this.loadedUsers; + } + + public boolean unloadUser(UUID uuid) { + if (uuid == null) + return false; + for (HouseUser user : this.loadedUsers.toArray(new HouseUser[this.loadedUsers.size()])) + if (uuid.equals(user.getUUID())) + return this.loadedUsers.remove(user); + return false; + } + + public HouseUser getLoadedUser(UUID uuid) { + if (uuid == null) return null; + for (HouseUser u : this.loadedUsers.toArray(new HouseUser[this.loadedUsers.size()])) + if (uuid.equals(u.getUUID())) + return u; + HouseUser user = new HouseUser(uuid); + this.loadedUsers.add(user); + return user; + } + +} diff --git a/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/users/UserHouse.java b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/users/UserHouse.java new file mode 100644 index 0000000..e4ea492 --- /dev/null +++ b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/users/UserHouse.java @@ -0,0 +1,97 @@ +package net.grandtheftmc.houses.users; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.database.BaseDatabase; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.houses.Houses; +import net.grandtheftmc.houses.dao.HouseDAO; +import net.grandtheftmc.houses.houses.House; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +public class UserHouse { + + private int uniqueId; + private final UUID uuid; + private final int houseId; + private List<UserHouseChest> chests = new ArrayList<>(); + + public UserHouse(UUID uuid, int uniqueId, int houseId) { + this.uuid = uuid; + this.uniqueId = uniqueId; + this.houseId = houseId; + } + + public UserHouse(UUID uuid, int uniqueId, int houseId, List<UserHouseChest> chests) { + this.uuid = uuid; + this.uniqueId = uniqueId; + this.houseId = houseId; + this.chests = chests; + } + + public int getUniqueId() { + return uniqueId; + } + + public void setUniqueId(int uniqueId) { + this.uniqueId = uniqueId; + } + + public int getId() { + return this.houseId; + } + + public UserHouseChest getChestOrNull(int id) { + for (UserHouseChest chest : this.chests) + if (chest.getId() == id) + return chest; + return null; + } + + public UserHouseChest getChest(int id) { + for (UserHouseChest chest : this.chests) + if (chest.getId() == id) + return chest; + + House house = Houses.getHousesManager().getHouse(this.houseId); + if (house.getChest(id) != null) { + UserHouseChest chest = new UserHouseChest(this.houseId, id); + +// Core.sql.updateAsyncLater("insert into " + Core.name() + "_houses_chests(uuid,houseId,chestId) values ('" + this.uuid + "'," + this.houseId + ',' + id + ");"); + ServerUtil.runTaskAsync(() -> { +// BaseDatabase.runCustomQuery("insert into " + Core.name() + "_houses_chests(uuid,houseId,chestId) values ('" + this.uuid + "'," + this.houseId + ',' + id + ");"); + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + HouseDAO.addChestContent(connection, house.getUniqueIdentifier(), id, this.uuid, null); + } catch (SQLException e) { + e.printStackTrace(); + } + }); + + this.chests.add(chest); + return chest; + } + return null; + } + + public void addChest(UserHouseChest chest) { + UserHouseChest old = this.getChestOrNull(chest.getId()); + if (old == null) this.chests.add(chest); + else old.setContents(chest.getContents()); + } + + public void removeChest(int id) { + this.chests.remove(this.getChest(id)); + } + + public void removeChests() { + this.chests.clear(); + } + + public List<UserHouseChest> getChests() { + return chests; + } +} diff --git a/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/users/UserHouseChest.java b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/users/UserHouseChest.java new file mode 100644 index 0000000..217494a --- /dev/null +++ b/houses-master@c2d95d8e6a6/src/main/java/net/grandtheftmc/houses/users/UserHouseChest.java @@ -0,0 +1,81 @@ +package net.grandtheftmc.houses.users; + +import net.grandtheftmc.core.database.BaseDatabase; +import net.grandtheftmc.houses.Houses; +import net.grandtheftmc.houses.dao.HouseDAO; +import net.grandtheftmc.houses.houses.House; +import org.bukkit.inventory.ItemStack; +import org.bukkit.scheduler.BukkitRunnable; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.UUID; + +public class UserHouseChest { + + private final int houseId; + private final int chestId; + private ItemStack[] contents; + + public UserHouseChest(int houseId, int chestId) { + this.houseId = houseId; + this.chestId = chestId; + this.contents = new ItemStack[]{}; + } + + public UserHouseChest(int houseId, int chestId, ItemStack[] contents) { + this.houseId = houseId; + this.chestId = chestId; + this.contents = contents; + } + + public int getId() { + return this.chestId; + } + + public int getHouseId() { + return this.houseId; + } + + public ItemStack[] getContents() { + return this.contents; + } + + public void setContents(ItemStack[] i) { + this.contents = i; + } + + public void updateContents(UUID uuid, int uniqueId) { + ItemStack[] contents = this.contents; + new BukkitRunnable() { + @Override + public void run() { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { +// try (PreparedStatement statement = connection.prepareStatement("update " + Core.name() + "_houses_chests set contents=? where uuid=? and houseId=? and chestId=?;")) { +// statement.setString(1, GTMUtils.toBase64(contents)); +// statement.setString(2, uuid.toString()); +// statement.setInt(3, UserHouseChest.this.houseId); +// statement.setInt(4, UserHouseChest.this.chestId); +// statement.execute(); +// } + HouseDAO.updateChestContent(connection, uniqueId, chestId, uuid, contents); + } catch (SQLException e) { + e.printStackTrace(); + } + +// PreparedStatement ps = Core.sql.prepareStatement("update " + Core.name() + "_houses_chests set contents=? where uuid=? and houseId=? and chestId=?;"); +// try { +// ps.setString(1, GTMUtils.toBase64(contents)); +// ps.setString(2, uuid.toString()); +// ps.setInt(3, UserHouseChest.this.houseId); +// ps.setInt(4, UserHouseChest.this.chestId); +// ps.execute(); +// } catch (SQLException e) { +// e.printStackTrace(); +// } + } + }.runTaskAsynchronously(Houses.getInstance()); + + } + +} diff --git a/houses-master@c2d95d8e6a6/src/main/resources/houses.yml b/houses-master@c2d95d8e6a6/src/main/resources/houses.yml new file mode 100644 index 0000000..930620e --- /dev/null +++ b/houses-master@c2d95d8e6a6/src/main/resources/houses.yml @@ -0,0 +1,13 @@ +'1': + price: 50000 + doors: + '1': + location: world,0,0,0 + insideLocation: world,0,0,0 + outsideLocation: world,0,0,0 + chests: + '1': + loc1: world,0,0,0 + '2': + loc1: world,0,0,0 + loc2: world,0,0,0 \ No newline at end of file diff --git a/houses-master@c2d95d8e6a6/src/main/resources/plugin.yml b/houses-master@c2d95d8e6a6/src/main/resources/plugin.yml new file mode 100644 index 0000000..8406e71 --- /dev/null +++ b/houses-master@c2d95d8e6a6/src/main/resources/plugin.yml @@ -0,0 +1,20 @@ +name: Houses +version: 1.0 +description: Houses Plugin +author: Presidentx +main: net.grandtheftmc.houses.Houses +softdepend: [WorldEdit] +depend: [Core,GTM] +commands: + houses: + aliases: [h, house] + premiumhouses: + aliases: [ph, phouse, premh, premhouse, premiumhouse] + housedoor: + aliases: [hd, hdoor, housesdoor, housesdoors] + housechest: + aliases: [hc, hchest, houseschest, houseschests] + housesign: + aliases: [hs, hsign, housessign, housessigns] + housetrashcan: + aliases: [htc] \ No newline at end of file diff --git a/houses-master@c2d95d8e6a6/src/main/resources/premiumHouses.yml b/houses-master@c2d95d8e6a6/src/main/resources/premiumHouses.yml new file mode 100644 index 0000000..aadf300 --- /dev/null +++ b/houses-master@c2d95d8e6a6/src/main/resources/premiumHouses.yml @@ -0,0 +1,18 @@ +'1': + permits: 5 + doors: + '1': + location: world,0,0,0 + insideLocation: world,0,0,0 + outsideLocation: world,0,0,0 + chests: + '1': + loc1: world,0,0,0 + '2': + loc1: world,0,0,0 + loc2: world,0,0,0 + owner: some-random-uuid-dqsd + ownerName: An-Owner + guests: + some-other-uuid-dqsd: Other_faggot + some-faggot-samuri-dqsd: Samuri \ No newline at end of file diff --git a/hub-master@949a7e78421/.gitignore b/hub-master@949a7e78421/.gitignore new file mode 100644 index 0000000..ad7f541 --- /dev/null +++ b/hub-master@949a7e78421/.gitignore @@ -0,0 +1,8 @@ + +\.idea/ + +target/classes/ + +target/ + +*.iml \ No newline at end of file diff --git a/hub-master@949a7e78421/README.md b/hub-master@949a7e78421/README.md new file mode 100644 index 0000000..fdaec0e --- /dev/null +++ b/hub-master@949a7e78421/README.md @@ -0,0 +1 @@ +First commit. \ No newline at end of file diff --git a/hub-master@949a7e78421/pom.xml b/hub-master@949a7e78421/pom.xml new file mode 100644 index 0000000..43de6d0 --- /dev/null +++ b/hub-master@949a7e78421/pom.xml @@ -0,0 +1,119 @@ +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + + <groupId>net.grandtheftmc</groupId> + <artifactId>hub</artifactId> + <version>1.3.0</version> + <name>Hub</name> + + <repositories> + <repository> + <id>viaversion-repo</id> + <url>https://repo.viaversion.com</url> + </repository> + <repository> + <id>nexus-release</id> + <url>http://nexus.grandtheftmc.net/content/repositories/releases</url> + </repository> + </repositories> + + <distributionManagement> + <repository> + <id>nexus-release</id> + <name>Internal Releases</name> + <url>http://nexus.grandtheftmc.net/content/repositories/releases</url> + </repository> + <snapshotRepository> + <id>nexus-snapshot</id> + <name>Internal Snapshots</name> + <url>http://nexus.grandtheftmc.net/content/repositories/snapshots</url> + </snapshotRepository> + </distributionManagement> + + <dependencies> + <dependency> + <groupId>org.spigotmc.1.12</groupId> + <artifactId>spigot</artifactId> + <version>1.12.0</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>net.grandtheftmc</groupId> + <artifactId>core</artifactId> + <version>2.3.10</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>us.myles</groupId> + <artifactId>viaversion</artifactId> + <version>1.0.3</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>com.comphenix.protocol</groupId> + <artifactId>ProtocolLib</artifactId> + <version>1.0.0</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>net.grandtheftmc</groupId> + <artifactId>common</artifactId> + <version>1.1.2</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>org.inventivetalent</groupId> + <artifactId>mapmanager</artifactId> + <version>1.4.0</version> + <scope>provided</scope> + </dependency> + </dependencies> + + <properties> + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + <maven.compiler.source>1.8</maven.compiler.source> + <maven.compiler.target>1.8</maven.compiler.target> + </properties> + + <build> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-shade-plugin</artifactId> + <configuration> + <finalName>Hub</finalName> + </configuration> + <executions> + <execution> + <phase>package</phase> + <goals> + <goal>shade</goal> + </goals> + </execution> + </executions> + </plugin> + + <!-- Nexus deploy --> + <plugin> + <groupId>org.sonatype.plugins</groupId> + <artifactId>nexus-staging-maven-plugin</artifactId> + <version>1.6.8</version> + <extensions>true</extensions> + <executions> + <execution> + <id>default-deploy</id> + <phase>deploy</phase> + <goals> + <goal>deploy</goal> + </goals> + </execution> + </executions> + <configuration> + <serverId>nexus</serverId> + <nexusUrl>http://nexus.grandtheftmc.net/</nexusUrl> + <skipStaging>true</skipStaging> + </configuration> + </plugin> + </plugins> + </build> +</project> diff --git a/hub-master@949a7e78421/src/main/java/net/grandtheftmc/hub/Hub.java b/hub-master@949a7e78421/src/main/java/net/grandtheftmc/hub/Hub.java new file mode 100644 index 0000000..f16c04c --- /dev/null +++ b/hub-master@949a7e78421/src/main/java/net/grandtheftmc/hub/Hub.java @@ -0,0 +1,156 @@ +package net.grandtheftmc.hub; + +import net.grandtheftmc.ServerType; +import net.grandtheftmc.ServerTypeId; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Settings; +import net.grandtheftmc.core.alert.AlertManager; +import net.grandtheftmc.core.servers.menu.GTMTranzitMenu; +import net.grandtheftmc.core.servers.menu.TranzitMenu; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.hub.commands.SpawnCommand; +import net.grandtheftmc.hub.listeners.*; +import net.grandtheftmc.hub.patch.InventoryFillPatch; +import net.grandtheftmc.jedis.JedisChannel; +import net.grandtheftmc.jedis.JedisManager; +import net.grandtheftmc.jedis.message.ServerQueueNotifyMessage; +import org.bukkit.*; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.plugin.PluginManager; +import org.bukkit.plugin.java.JavaPlugin; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +public class Hub extends JavaPlugin { + private static Hub instance; + private YamlConfiguration hubConfig; + private Collection<Location> spawnPoints; + private Location spawn; + private AlertsComponent alertsComponent; + private int progress = 0; + + private TranzitMenu tranzitMenu; + + public static Hub getInstance() { + return instance; + } + + public TranzitMenu getTranzitMenu() { + return tranzitMenu; + } + + @Override + public void onEnable() { + instance = this; + + this.load(); + this.alertsComponent = new AlertsComponent(Core.getInstance().getAlertManager()).onEnable(this); + + GTMTranzitMenu gtmTranzitMenu = new GTMTranzitMenu(); + this.tranzitMenu = new TranzitMenu(gtmTranzitMenu); + + Bukkit.getScheduler().runTaskTimer(Core.getInstance(), () -> { + tranzitMenu.rotate(); + tranzitMenu.refreshEdge(); + + gtmTranzitMenu.rotate(); + gtmTranzitMenu.refreshEdge(); + + if (progress == 3) { + tranzitMenu.refreshButtons(); + gtmTranzitMenu.refreshButtons(); + progress = 0; + return; + } + + progress++; + }, 60, 6); + + new PortalComponent(this).onEnable(this); + + this.registerCommands(); + this.registerListeners(); + } + + @Override + public void onDisable() { + Bukkit.getScheduler().cancelTasks(this); + this.unload(); + this.alertsComponent.onDisable(this); + } + + private void registerListeners() { + PluginManager pm = Bukkit.getPluginManager(); + pm.registerEvents(new Damage(), this); + pm.registerEvents(new Death(), this); + pm.registerEvents(new Drop(), this); + pm.registerEvents(new Interact(), this); + pm.registerEvents(new Join(), this); + pm.registerEvents(new Update(), this); + pm.registerEvents(new Chat(), this); + pm.registerEvents(new Move(), this); + pm.registerEvents(new PortalEnter(), this); + pm.registerEvents(new BlockPlace(), this); + + //Protocol Listeners + new InventoryFillPatch(); + } + + private void registerCommands() { + this.getCommand("spawn").setExecutor(new SpawnCommand()); + } + + public void load() { + this.spawnPoints = new ArrayList<>(); + this.hubConfig = Utils.loadConfig("hub"); + YamlConfiguration c = this.hubConfig; + this.spawn = Utils.teleportLocationFromString(c.getString("spawn")); + c.getStringList("spawnpoints").forEach(point -> { + this.spawnPoints.add(HubUtils.deserializeLocation(point)); + }); + this.loadSettings(); + } + + public void unload() { + List<String> points = new ArrayList<>(); + this.spawnPoints.forEach(point -> points.add(HubUtils.serializeLocation(point))); + this.hubConfig.set("spawnpoints", points); + Utils.saveConfig(this.hubConfig, "hub"); + } + + private void loadSettings() { + Settings settings = Core.getSettings(); + settings.setDefaultGameMode(GameMode.ADVENTURE); + settings.setUseEditMode(true); + settings.setJoinLeaveMessagesEnabled(false); + settings.setLoadCosmetics(true); + for (World world : Bukkit.getWorlds()) { + world.setGameRuleValue("commandBlockOutput", "false"); + world.setGameRuleValue("doDaylightCycle", "true"); + world.setGameRuleValue("doFireTick", "false"); + world.setGameRuleValue("doMobSpawning", "false"); + world.setGameRuleValue("doTileDrops", "false"); + world.setGameRuleValue("keepInventory", "false"); + world.setGameRuleValue("mobGriefing", "false"); + world.setGameRuleValue("naturalRegeneration", "true"); + world.setPVP(false); + world.setAutoSave(false); + world.setDifficulty(Difficulty.NORMAL); + world.setTime(18000); + settings.setStopChunkLoad(world.getName()); + settings.setStopHungerChange(world.getName()); + settings.setStopWeatherChange(world.getName()); + } + } + + public Location getSpawn() { + return this.spawn; + } + + public Collection<Location> getSpawnPoints() { + return this.spawnPoints; + } +} diff --git a/hub-master@949a7e78421/src/main/java/net/grandtheftmc/hub/HubUtils.java b/hub-master@949a7e78421/src/main/java/net/grandtheftmc/hub/HubUtils.java new file mode 100644 index 0000000..9f4a866 --- /dev/null +++ b/hub-master@949a7e78421/src/main/java/net/grandtheftmc/hub/HubUtils.java @@ -0,0 +1,104 @@ +package net.grandtheftmc.hub; + +import org.bukkit.Bukkit; +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.World; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.PlayerInventory; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.boards.Board; +import net.grandtheftmc.core.boards.BoardType; +import net.grandtheftmc.core.servers.Server; +import net.grandtheftmc.core.users.Pref; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.util.Utils; + +public final class HubUtils { + + private HubUtils() {} + + public static void giveItems(Player player) { + if (player == null) return; + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + player.setHealth(20); + player.setMaxHealth(20); + player.setFoodLevel(20); + player.setGameMode(GameMode.SURVIVAL); + PlayerInventory inv = player.getInventory(); + inv.clear(); + player.getInventory().setHeldItemSlot(4); + // inv.setItem(0, Utils.createItem(Material.ENDER_CHEST, "&6&lCosmetics &7&lRight Click")); + inv.setItem(3, Utils.createItem(Material.COMPASS, "&e&lServer Warper &7&lRight Click")); + inv.setItem(5, Utils.createItem(Material.WATCH, "&d&lHub Warper &7&lRight Click")); + String b = user.getPref(Pref.PLAYERS_SHOWN) ? "&c&lHide" : "&a&lShow"; + inv.setItem(8, Utils.createItem(Material.REDSTONE_COMPARATOR, b + " Players &7&lRight Click")); + player.getActivePotionEffects().clear(); + inv.setArmorContents(null); + inv.setChestplate(new ItemStack(Material.ELYTRA)); + player.updateInventory(); + } + + public static void sendJoinMessage(Player p, User user) { + p.sendMessage(new String[]{"", "", "", "", "", "", "", "", ""}); + String[] header = Core.getAnnouncer().getHeader(); + if (header != null && header.length > 0) ; + p.sendMessage(Utils.f(Core.getAnnouncer().getHeader())); + p.sendMessage(new String[]{ + Utils.fc("Welcome, " + user.getColoredName(p) + "&r to the &7&l" + Core.getSettings().getNetworkShortName() + " &6&lHub&r!"), + Utils.fc("&e&l&oGTA in Minecraft!"), "", Utils.fc("&e&lSTORE &r&n" + Core.getSettings().getStoreLink()), + Utils.fc("&a&lSITE &r&n" + Core.getSettings().getWebsiteLink() + " "), "", Utils.fc("&7Use the &eserver warper&7 to play!")}); + String[] footer = Core.getAnnouncer().getFooter(); + if (footer != null && footer.length > 0) ; + p.sendMessage(Utils.f(Core.getAnnouncer().getFooter())); + } + + public static void updateBoard(Player player, User user) { + String rank = "No Rank"; + if (user.isSpecial()) + rank = user.getUserRank().getColoredNameBold(); + Board board = new Board("lobby", Core.getSettings().getType().getScoreboardHeader(), BoardType.KEY_VALUE); + if (Core.getSettings().isSister()) { + + int online = 0; + for (Server server : Core.getServerManager().getServers()) + online += server.getOnlinePlayers(); + board.addValue("d", "Players Online", online + ""); + + board.addValue("6", "Rank", rank); + board.addValue("6", "Server IP", Core.getSettings().getNetworkIP()); + } + else { + board.addValue("a", "Tokens", String.valueOf(user.getTokens())); + board.addValue("e", "Crowbars", String.valueOf(Math.max(user.getCrowbars(), 0))); + board.addValue("6", "Rank", rank); + board.addValue("6", "Server IP", Core.getSettings().getNetworkIP()); + //board.addValue("6", "Server IP", user.getjoin) + } + board.updateFor(player, user); + } + + public static String serializeLocation(Location location) { + String world = location.getWorld().getName(); + String x = String.valueOf(location.getX()); + String y = String.valueOf(location.getY()); + String z = String.valueOf(location.getZ()); + String yaw = String.valueOf(location.getYaw()); + String pitch = String.valueOf(location.getPitch()); + return world + ':' + x + ':' + y + ':' + z + ':' + yaw + ':' + pitch; + } + + public static Location deserializeLocation(String loc) { + String[] args = loc.split(":"); + World world = Bukkit.getWorld(args[0]); + double x = Double.valueOf(args[1]); + double y = Double.valueOf(args[2]); + double z = Double.valueOf(args[3]); + float yaw = Float.valueOf(args[4]); + float pitch = Float.valueOf(args[5]); + return new Location(world, x, y, z, yaw, pitch); + } +} diff --git a/hub-master@949a7e78421/src/main/java/net/grandtheftmc/hub/Testing.java b/hub-master@949a7e78421/src/main/java/net/grandtheftmc/hub/Testing.java new file mode 100644 index 0000000..a2c0c3f --- /dev/null +++ b/hub-master@949a7e78421/src/main/java/net/grandtheftmc/hub/Testing.java @@ -0,0 +1,41 @@ +package net.grandtheftmc.hub; + +import java.util.Arrays; + +public class Testing { + + private static Integer[][] array = new Integer[5][5]; + private static int idk = 6; + + public static void main(String[] args) { + for (int i = 0; i < 5; i++) { + for (int x = 0; x < 5; x++) { + array[i][x] = i + 1; + } + } + + for (int i = 0; i < 5; i ++) { + + for (int x = 0; x < array.length; x++) { + System.out.println(Arrays.toString(array[x])); + } + + move(); + System.out.println(""); + } + } + + private static void move() { + Integer[][] temp = new Integer[array.length][array[0].length]; + for (int i = array.length - 1; i > 0; i--) { + temp[i - 1] = array[i]; + } + + for (int x = 0; x < array[array.length - 1].length; x++) { + temp[array.length - 1][x] = idk; + } + + idk += 1; + array = temp; + } +} diff --git a/hub-master@949a7e78421/src/main/java/net/grandtheftmc/hub/commands/SpawnCommand.java b/hub-master@949a7e78421/src/main/java/net/grandtheftmc/hub/commands/SpawnCommand.java new file mode 100644 index 0000000..363f824 --- /dev/null +++ b/hub-master@949a7e78421/src/main/java/net/grandtheftmc/hub/commands/SpawnCommand.java @@ -0,0 +1,46 @@ +package net.grandtheftmc.hub.commands; + +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.hub.Hub; +import org.bukkit.Location; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class SpawnCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command c, String lbl, String[] args) { + if (!(s instanceof Player)) { + s.sendMessage(Utils.f("&cYou are not a player!")); + return true; + } + Player player = (Player) s; + if(args.length == 1) { + if(args[0].equalsIgnoreCase("add")) { + Hub.getInstance().getSpawnPoints().add(player.getLocation()); + player.sendMessage(player.getLocation().toString() + " added"); + } else if(args[0].equalsIgnoreCase("remove")) { + Location loc = getNearestLocation(player.getLocation()); + Hub.getInstance().getSpawnPoints().remove(loc); + player.sendMessage(loc.toString() + " removed"); + } + } else { + player.teleport(Hub.getInstance().getSpawn()); + player.sendMessage(Utils.f("&aYou were teleported to spawn!")); + } + return true; + } + + public static Location getNearestLocation(Location location) { + Location nearestLocation = null; + for(Location point : Hub.getInstance().getSpawnPoints()) { + if(nearestLocation == null || point.distance(location) < point.distance(location)) { + nearestLocation = point; + } + } + return nearestLocation; + } + +} diff --git a/hub-master@949a7e78421/src/main/java/net/grandtheftmc/hub/listeners/AlertsComponent.java b/hub-master@949a7e78421/src/main/java/net/grandtheftmc/hub/listeners/AlertsComponent.java new file mode 100644 index 0000000..512a661 --- /dev/null +++ b/hub-master@949a7e78421/src/main/java/net/grandtheftmc/hub/listeners/AlertsComponent.java @@ -0,0 +1,268 @@ +package net.grandtheftmc.hub.listeners; + +import java.io.IOException; +import java.net.URL; +import java.util.HashMap; +import java.util.UUID; +import java.util.concurrent.ThreadLocalRandom; + +import javax.imageio.ImageIO; + +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.player.AsyncPlayerPreLoginEvent; +import org.bukkit.event.player.PlayerInteractAtEntityEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.inventory.EquipmentSlot; +import org.bukkit.inventory.ItemStack; +import org.inventivetalent.mapmanager.MapManagerPlugin; +import org.inventivetalent.mapmanager.controller.MapController; +import org.inventivetalent.mapmanager.manager.MapManager; +import org.inventivetalent.mapmanager.wrapper.MapWrapper; + +import com.google.common.collect.Maps; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.Utils; +import net.grandtheftmc.core.alert.Alert; +import net.grandtheftmc.core.alert.AlertManager; +import net.grandtheftmc.core.util.Component; +import net.grandtheftmc.core.util.ImageRenderer; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.core.util.title.NMSTitle; +import net.grandtheftmc.hub.Hub; + +/** + * Created by Luke Bingham on 12/09/2017. + */ +public class AlertsComponent implements Component<AlertsComponent, Hub> { + + private final HashMap<UUID, Alert> userAlerts; + private final HashMap<Integer, MapData> renders; + private final AlertManager alertManager; + private final NMSTitle title; + + private final MapManager mapManager = ((MapManagerPlugin) Bukkit.getPluginManager().getPlugin("MapManager")).getMapManager(); + + public AlertsComponent(AlertManager alertManager) { + this.alertManager = alertManager; + this.userAlerts = Maps.newHashMap(); + this.renders = Maps.newHashMap(); + this.title = new NMSTitle(); + } + + @Override + public AlertsComponent onEnable(Hub plugin) { + Bukkit.getPluginManager().registerEvents(this, plugin); + log(true); + return this; + } + + @Override + public AlertsComponent onDisable(Hub plugin) { + this.userAlerts.clear(); + return this; + } + + @EventHandler + protected final void onPreJoin(AsyncPlayerPreLoginEvent event) { + if(event.getLoginResult() == AsyncPlayerPreLoginEvent.Result.ALLOWED) { + if(this.alertManager.getAlerts().size() > 0 && this.alertManager.getAvailableAlerts().size() > 0) { + this.alertManager.getAvailableAlertsForPlayer(event.getUniqueId(), alerts -> { + if(alerts.size() > 0) { + Alert alert = alerts.get(ThreadLocalRandom.current().nextInt(alerts.size())); + this.userAlerts.putIfAbsent(event.getUniqueId(), alert); + } + }); + } + } + } + + @EventHandler(priority = EventPriority.HIGH) + protected final void onPlayerJoin(PlayerJoinEvent event) { + if(event.getPlayer() == null) return; + UUID uuid = event.getPlayer().getUniqueId(); + if(this.userAlerts.containsKey(uuid)) { + Alert alert = this.userAlerts.get(uuid); + +// ItemStack map = new ItemStack(Material.MAP); +// MapMeta meta = (MapMeta) map.getItemMeta(); +// meta.setScaling(false); +// meta.setDisplayName(C.GREEN + C.BOLD + alert.getName()); +// map.setItemMeta(meta); + + +// MapView view = Bukkit.getMap(map.getDurability()); +// for (MapRenderer mapRenderer : view.getRenderers()) +// view.removeRenderer(mapRenderer); + + try { +// ImageRenderer renderer = null; + + MapData mapData; + if(!this.renders.containsKey(alert.getUniqueIdentifier())) { +// renderer = new ImageRenderer(alert.getImageUrl()); +// this.renders.put(alert.getUniqueIdentifier(), renderer); + MapWrapper mapWrapper = mapManager.wrapImage(ImageIO.read(new URL(alert.getImageUrl()))); + mapData = new MapData(mapManager.wrapImage(ImageIO.read(new URL(alert.getImageUrl()))), mapWrapper.getController()); + this.renders.putIfAbsent(alert.getUniqueIdentifier(), mapData); + } + else mapData = this.renders.get(alert.getUniqueIdentifier()); + +// view.addRenderer(renderer); + +// event.getPlayer().getInventory().setItem(4, map); +// event.getPlayer().updateInventory(); + + MapController controller = mapData.getController(); + controller.addViewer(event.getPlayer());//TODO Remove on join. + controller.sendContent(event.getPlayer()); + + ServerUtil.runTaskLater(() -> { + if(Bukkit.getPlayer(uuid) != null){ + controller.showInInventory(Bukkit.getPlayer(uuid), 4, true, alert.getName()); + //controller.showInInventory(Bukkit.getPlayer(uuid), 4, true); + } + }, 10); + + Location current = event.getPlayer().getLocation(); + current.setPitch(50); + event.getPlayer().teleport(current); + + this.alertManager.alertShown(event.getPlayer(), alert, aBoolean -> {}); + + } catch (IOException e) { + this.userAlerts.remove(uuid); + event.getPlayer().getInventory().setItem(4, new ItemStack(Material.AIR)); + event.getPlayer().updateInventory(); + e.printStackTrace(); + } + } + } + + @EventHandler + protected final void onLeave(PlayerQuitEvent event) { + if(event.getPlayer() == null) return; + if(this.userAlerts.containsKey(event.getPlayer().getUniqueId())) { + this.userAlerts.remove(event.getPlayer().getUniqueId()); + ImageRenderer.RENDERED_USERS.remove(event.getPlayer().getUniqueId()); + } + + for(MapData data : this.renders.values()) { + data.controller.removeViewer(event.getPlayer()); + } + } + + @EventHandler + protected final void onInteract(PlayerInteractEvent event) { +// if(event.getItem() == null) return; +// ItemStack item = event.getItem(); +// if(!item.hasItemMeta()) return; +// String name = ChatColor.stripColor(item.getItemMeta().getDisplayName()); +// +// for(Alert alert : this.userAlerts.values()) { +// if(alert == null) continue; +// if(alert.getName() == null || alert.getLink() == null) continue; +// if(alert.getName().equals(name)) { +// event.getPlayer().sendMessage(Lang.ALERTS.f(alert.getLink())); +// this.title.sendTitle(event.getPlayer(), "", Utils.f("&eClick the link in chat!"), 1, 1, 1); +// break; +// } +// } + + if(event.getHand() != EquipmentSlot.HAND) return; + if(event.getPlayer().getInventory().getHeldItemSlot() != 4) return; + + if(this.userAlerts.containsKey(event.getPlayer().getUniqueId())) { + Alert alert = this.userAlerts.get(event.getPlayer().getUniqueId()); + event.getPlayer().sendMessage(Lang.ALERTS.f(alert.getLink())); + NMSTitle.sendTitle(event.getPlayer(), "", Utils.f("&eClick the link in chat!"), 30, 20, 20); + } + } + + @EventHandler + protected final void onInteract(PlayerInteractAtEntityEvent event) { +// if(event.getHand() == EquipmentSlot.OFF_HAND) return; +// ItemStack item = event.getPlayer().getInventory().getItemInMainHand(); +// if(item == null || item.getType() != Material.MAP) return; +// if(!item.hasItemMeta()) return; +// String name = ChatColor.stripColor(item.getItemMeta().getDisplayName()); +// System.out.println(name); +// +// for(UUID uuid : this.userAlerts.keySet()) { +// +// if(alert == null) continue; +// if(alert.getName() == null) continue; +// if(alert.getName().equals(name)) { +// event.getPlayer().sendMessage(Lang.ALERTS.f(alert.getLink())); +// this.title.sendTitle(event.getPlayer(), "", Utils.f("&eClick the link in chat!"), 1, 1, 1); +// break; +// } +// } + + if(event.getHand() != EquipmentSlot.HAND) return; + if(event.getPlayer().getInventory().getHeldItemSlot() != 4) return; + + if(this.userAlerts.containsKey(event.getPlayer().getUniqueId())) { + Alert alert = this.userAlerts.get(event.getPlayer().getUniqueId()); + event.getPlayer().sendMessage(Lang.ALERTS.f(alert.getLink())); + NMSTitle.sendTitle(event.getPlayer(), "", Utils.f("&eClick the link in chat!"), 1, 1, 1); + } + } + +// private final Random random = new Random(); +// +// @EventHandler +// protected final void onMapInitialize(MapInitializeEvent event) { +// MapView mapView = event.getMap(); +// mapView.getRenderers().clear(); +// +// +// +// mapView.addRenderer(new Renderer()); +// } +// +// public class Renderer extends MapRenderer { +// @Override +// public void render(MapView mapView, MapCanvas mapCanvas, Player player) { +// for (int x = 25; x < 50; x++) { +// for (int y = 25; y < 50; y++) { +// mapCanvas.setPixel(x, y, MapPalette.RED); +// } +// } +// +// mapCanvas.drawText(15, 15, MinecraftFont.Font, player.getName()); +// +// byte[] dirs = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}, color = {0,1,2,3,4,5,6,7}; +// MapCursorCollection cursors = new MapCursorCollection(); +// for(int i = 0; i < 10; i++) { +// cursors.addCursor(random.nextInt(128), random.nextInt(128), dirs[random.nextInt(dirs.length)], color[random.nextInt(color.length)]); +// } +// +// mapCanvas.setCursors(cursors); +// } +// } + + public class MapData { + private final MapWrapper mapWrapper; + private final MapController controller; + + public MapData(MapWrapper mapWrapper, MapController controller) { + this.mapWrapper = mapWrapper; + this.controller = controller; + } + + public MapWrapper getMapWrapper() { + return mapWrapper; + } + + public MapController getController() { + return controller; + } + } +} diff --git a/hub-master@949a7e78421/src/main/java/net/grandtheftmc/hub/listeners/BlockPlace.java b/hub-master@949a7e78421/src/main/java/net/grandtheftmc/hub/listeners/BlockPlace.java new file mode 100644 index 0000000..613bc43 --- /dev/null +++ b/hub-master@949a7e78421/src/main/java/net/grandtheftmc/hub/listeners/BlockPlace.java @@ -0,0 +1,17 @@ +package net.grandtheftmc.hub.listeners; + +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockPlaceEvent; + +public class BlockPlace implements Listener { + + @EventHandler(priority = EventPriority.HIGHEST) + public void blockPlaceEvent(BlockPlaceEvent event) { + if (!event.getPlayer().isOp()) { + event.setBuild(false); + event.setCancelled(true); + } + } +} diff --git a/hub-master@949a7e78421/src/main/java/net/grandtheftmc/hub/listeners/Chat.java b/hub-master@949a7e78421/src/main/java/net/grandtheftmc/hub/listeners/Chat.java new file mode 100644 index 0000000..d133976 --- /dev/null +++ b/hub-master@949a7e78421/src/main/java/net/grandtheftmc/hub/listeners/Chat.java @@ -0,0 +1,37 @@ +package net.grandtheftmc.hub.listeners; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserRank; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.player.AsyncPlayerChatEvent; + +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.TimeUnit; + +public class Chat implements Listener { + private Map<String, Long> recentChats = new HashMap<>(); + + @EventHandler(priority = EventPriority.LOWEST) + public void onChat(AsyncPlayerChatEvent event) { + Player player = event.getPlayer(); + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + if (user.getUserRank() == UserRank.DEFAULT) { + if (recentChats.containsKey(player.getName())) { + if (recentChats.get(player.getName()) + TimeUnit.SECONDS.toMillis(2) >= System.currentTimeMillis()) { + player.sendMessage(Lang.HUB.f("&7You must wait a second before speaking again!")); + event.setCancelled(true); + } else { + recentChats.remove(player.getName()); + } + } else { + recentChats.put(player.getName(), System.currentTimeMillis()); + } + } + } +} \ No newline at end of file diff --git a/hub-master@949a7e78421/src/main/java/net/grandtheftmc/hub/listeners/Damage.java b/hub-master@949a7e78421/src/main/java/net/grandtheftmc/hub/listeners/Damage.java new file mode 100644 index 0000000..7fa8074 --- /dev/null +++ b/hub-master@949a7e78421/src/main/java/net/grandtheftmc/hub/listeners/Damage.java @@ -0,0 +1,29 @@ + +package net.grandtheftmc.hub.listeners; + +import net.grandtheftmc.hub.Hub; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityDamageEvent; + +public class Damage implements Listener { + + @EventHandler + public void onDamageByEntity(EntityDamageEvent event) { + if (!(event.getEntity() instanceof Player)) return; + event.getEntity().setFireTicks(0); + event.setCancelled(true); + switch (event.getCause()) { + case VOID: + case SUFFOCATION: + case CUSTOM: + event.getEntity().teleport(Hub.getInstance().getSpawn()); + break; + + default: + break; + } + } + +} diff --git a/hub-master@949a7e78421/src/main/java/net/grandtheftmc/hub/listeners/Death.java b/hub-master@949a7e78421/src/main/java/net/grandtheftmc/hub/listeners/Death.java new file mode 100644 index 0000000..d05ffad --- /dev/null +++ b/hub-master@949a7e78421/src/main/java/net/grandtheftmc/hub/listeners/Death.java @@ -0,0 +1,18 @@ +package net.grandtheftmc.hub.listeners; + +import net.grandtheftmc.hub.Hub; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; + +public class Death implements Listener { + + @EventHandler + public void onDeath(PlayerDeathEvent e) { + e.setDeathMessage(null); + Player player = e.getEntity(); + player.setHealth(20); + player.teleport(Hub.getInstance().getSpawn()); + } +} diff --git a/hub-master@949a7e78421/src/main/java/net/grandtheftmc/hub/listeners/Drop.java b/hub-master@949a7e78421/src/main/java/net/grandtheftmc/hub/listeners/Drop.java new file mode 100644 index 0000000..5644ede --- /dev/null +++ b/hub-master@949a7e78421/src/main/java/net/grandtheftmc/hub/listeners/Drop.java @@ -0,0 +1,22 @@ +package net.grandtheftmc.hub.listeners; + +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerDropItemEvent; +import org.bukkit.inventory.ItemStack; + +public class Drop implements Listener { + + @EventHandler(priority = EventPriority.MONITOR) + public void onDrop(PlayerDropItemEvent e) { + if (e.isCancelled()) e.setCancelled(false); + Player p = e.getPlayer(); + ItemStack item = e.getItemDrop().getItemStack().clone(); + item.setAmount(p.getInventory().getItemInMainHand().getAmount() + item.getAmount()); + e.getItemDrop().remove(); + p.getInventory().setItem(p.getInventory().getHeldItemSlot(), item); + p.updateInventory(); + } +} diff --git a/hub-master@949a7e78421/src/main/java/net/grandtheftmc/hub/listeners/Interact.java b/hub-master@949a7e78421/src/main/java/net/grandtheftmc/hub/listeners/Interact.java new file mode 100644 index 0000000..bf70f35 --- /dev/null +++ b/hub-master@949a7e78421/src/main/java/net/grandtheftmc/hub/listeners/Interact.java @@ -0,0 +1,160 @@ +package net.grandtheftmc.hub.listeners; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.menus.MenuManager; +import net.grandtheftmc.core.servers.Server; +import net.grandtheftmc.core.servers.ServerManager; +import net.grandtheftmc.core.users.Pref; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserManager; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.hub.Hub; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.block.Sign; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; +import java.util.UUID; +import java.util.concurrent.TimeUnit; + +public class Interact implements Listener { + private Map<String, Long> recentClicks = new HashMap<>(); + + @EventHandler + public void onInteract(PlayerInteractEvent event) { + UserManager um = Core.getUserManager(); + if (event.getAction() != Action.RIGHT_CLICK_AIR && event.getAction() != Action.RIGHT_CLICK_BLOCK) + return; + Player player = event.getPlayer(); + UUID uuid = player.getUniqueId(); + User user = Core.getUserManager().getLoadedUser(uuid); + ItemStack item = player.getInventory().getItemInMainHand(); + if (item != null) { + switch (item.getType()) { + case COMPASS: + if (!Core.getSettings().serverWarperEnabled()) + return; + event.setCancelled(true); +// MenuManager.openMenu(player, "serverwarper"); + Hub.getInstance().getTranzitMenu().openInventory(player); + return; + case WATCH: + if (!Core.getSettings().serverWarperEnabled()) + return; + event.setCancelled(true); + MenuManager.openMenu(player, "hubservers"); + return; + case BOOK: + return; + case ENDER_CHEST: + MenuManager.openMenu(player, "cosmetics"); + event.setCancelled(true); + return; + case REDSTONE_COMPARATOR: + if (recentClicks.containsKey(player.getName())) { + if (recentClicks.get(player.getName()) + TimeUnit.SECONDS.toMillis(3) >= System.currentTimeMillis()) { + player.sendMessage(Lang.HUB.f("&7You must wait before toggling this again!")); + event.setCancelled(true); + return; + } else { + recentClicks.put(player.getName(), System.currentTimeMillis()); + } + } else { + recentClicks.put(player.getName(), System.currentTimeMillis()); + } + if(user.getPref(Pref.PLAYERS_SHOWN)) { + player.sendMessage(Lang.PREFS.f("&7Players are now hidden")); + for (Player target : Bukkit.getOnlinePlayers()) { + User targetUser = Core.getUserManager().getLoadedUser(target.getUniqueId()); + if(targetUser.getPref(Pref.PLAYERS_SHOWN)) target.hidePlayer(player); + player.hidePlayer(target); + } + } else { + player.sendMessage(Lang.PREFS.f("&7Players are now shown")); + for (Player target : Bukkit.getOnlinePlayers()) { + User targetUser = Core.getUserManager().getLoadedUser(target.getUniqueId()); + if(targetUser.getPref(Pref.PLAYERS_SHOWN)) target.showPlayer(player); + player.showPlayer(target); + } + } + user.setPref(player, Pref.PLAYERS_SHOWN, !user.getPref(Pref.PLAYERS_SHOWN)); + ItemMeta meta = item.getItemMeta(); + String b = user.getPref(Pref.PLAYERS_SHOWN) ? "&c&lHide" : "&a&lShow"; + meta.setDisplayName(Utils.f(b + " Players &7&lRight Click")); + item.setItemMeta(meta); + event.setCancelled(true); + return; + case EXP_BOTTLE: + event.setCancelled(true); + player.updateInventory(); + MenuManager.openMenu(player, "rewards"); + return; + default: + break; + } + + } + Block block = event.getClickedBlock(); + if (block == null) return; + if (block.getType() == Material.WALL_SIGN) { + Sign sign = (Sign) block.getState(); + Server server = null; + ServerManager sm = Core.getServerManager(); + for (Server s : sm.getServers()) { + if (s.getJoinSigns().contains(sign.getLocation())) { + server = s; + break; + } + } + if (server == null) return; + if (server.needsRankToJoin() && server.getRankToJoin().isHigherThan(user.getUserRank())) { + player.sendMessage(Utils.f("&cSorry, this game is for " + server.getRankToJoin().getColoredNameBold() + + "&c and up only! Go to " + Core.getSettings().getStoreLink() + " to purchase a rank!")); + return; + } + + if (Objects.equals(server.getGameState(), "INGAME") && !user.isSpecial()) { + player.sendMessage(Utils.f( + "&cThis game is in progress! You must be &6&lVIP&c or above to spectate games! Go to " + Core.getSettings().getStoreLink() + " to purchase a rank!")); + return; + } else if (Objects.equals(server.getGameState(), "END")) { + player.sendMessage(Utils.f("&cThis game is ending! There is no point in joining now!")); + return; + } + + if (server.isFull() && (!user.isSpecial() || user.getUserRank() == UserRank.VIP)) { + player.sendMessage( + Utils.f("&cSorry, this server is full! You must be &a&lPREMIUM&c or up to join full games!")); + return; + } + player.sendMessage(Utils.f("&7Joining server &a&l" + server.getName().toUpperCase() + "&7...")); + sm.sendToServer(player, server.getName()); + } + } + + @EventHandler(ignoreCancelled = true) + protected final void onInventoryClick(InventoryClickEvent event) { + Player player = (Player) event.getWhoClicked(); + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + if (user == null) { + event.setCancelled(true); + return; + } + + if (!user.hasEditMode()) + event.setCancelled(true); + } +} \ No newline at end of file diff --git a/hub-master@949a7e78421/src/main/java/net/grandtheftmc/hub/listeners/Join.java b/hub-master@949a7e78421/src/main/java/net/grandtheftmc/hub/listeners/Join.java new file mode 100644 index 0000000..808bb69 --- /dev/null +++ b/hub-master@949a7e78421/src/main/java/net/grandtheftmc/hub/listeners/Join.java @@ -0,0 +1,82 @@ +package net.grandtheftmc.hub.listeners; + +import java.util.Random; + +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerMoveEvent; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.database.mutex.Mutexable; +import net.grandtheftmc.core.database.mutex.event.MutexLoadCompleteEvent; +import net.grandtheftmc.core.users.Pref; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.hub.Hub; +import net.grandtheftmc.hub.HubUtils; +import us.myles.ViaVersion.api.Via; + +public class Join implements Listener { + + @EventHandler + public void onJoin(PlayerJoinEvent e) { + + // grab event variables + Player player = e.getPlayer(); + + // see below method + } + + @EventHandler + public void onMutexLoadComplete(MutexLoadCompleteEvent event) { + + // grab event variables + Mutexable mutexable = event.getMutexable(); + if (mutexable instanceof User) { + User user = (User) mutexable; + + // make sure still online + Player player = Bukkit.getPlayer(user.getUUID()); + if (player != null) { + + HubUtils.sendJoinMessage(player, user); + HubUtils.giveItems(player); + HubUtils.updateBoard(player, user); + user.setPref(player, Pref.PLAYERS_SHOWN, true); + player.addPotionEffect(new PotionEffect(PotionEffectType.JUMP, Integer.MAX_VALUE, 2)); + + if (Bukkit.getPluginManager().getPlugin("ViaVersion") != null) { + int playerVersion = Via.getAPI().getPlayerVersion(player.getUniqueId()); + if (playerVersion < 210) { + player.sendMessage(Lang.HEY.f("&7It appears you're using an older version of Minecraft. " + "It is highly recommended you use the latest Minecraft version for the best experience!")); + } + } + + if (Hub.getInstance().getSpawn() != null) { + if (Hub.getInstance().getSpawnPoints().isEmpty()) { + player.teleport(Hub.getInstance().getSpawn()); + return; + } + int size = Hub.getInstance().getSpawnPoints().size(); + player.teleport((Location) Hub.getInstance().getSpawnPoints().toArray()[new Random().nextInt(size)]); + } + } + } + } + + @EventHandler + public void onMove(PlayerMoveEvent event) { + Player player = event.getPlayer(); + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + if (!user.hasMoved()) { + user.setHasMoved(); + user.updateVisibility(player); + } + } +} diff --git a/hub-master@949a7e78421/src/main/java/net/grandtheftmc/hub/listeners/Move.java b/hub-master@949a7e78421/src/main/java/net/grandtheftmc/hub/listeners/Move.java new file mode 100644 index 0000000..073fab8 --- /dev/null +++ b/hub-master@949a7e78421/src/main/java/net/grandtheftmc/hub/listeners/Move.java @@ -0,0 +1,25 @@ +package net.grandtheftmc.hub.listeners; + +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerMoveEvent; +import org.bukkit.util.Vector; + +public class Move implements Listener { + + @EventHandler + public void onPlayerMove(PlayerMoveEvent event) { + if(event.getFrom() == event.getTo()) return; + Player player = event.getPlayer(); + if (player.isGliding() && player.isSneaking()) { + double pitch = -event.getTo().getPitch(); + if (pitch < 10 || pitch > 90) return; + Vector vector = player.getLocation().getDirection(); + player.setVelocity(vector.multiply(1.6)); + player.getWorld().playSound(player.getLocation(), Sound.ENTITY_ARROW_SHOOT, 1.0F, 2.0F); + player.getInventory().getChestplate().setDurability((short) 0); + } + } +} diff --git a/hub-master@949a7e78421/src/main/java/net/grandtheftmc/hub/listeners/PortalComponent.java b/hub-master@949a7e78421/src/main/java/net/grandtheftmc/hub/listeners/PortalComponent.java new file mode 100644 index 0000000..723feb9 --- /dev/null +++ b/hub-master@949a7e78421/src/main/java/net/grandtheftmc/hub/listeners/PortalComponent.java @@ -0,0 +1,187 @@ +package net.grandtheftmc.hub.listeners; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.wrappers.BlockPosition; +import com.comphenix.protocol.wrappers.WrappedBlockData; +import net.grandtheftmc.core.util.Component; +import net.grandtheftmc.core.wrapper.packet.AbstractPacket; +import net.grandtheftmc.hub.Hub; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.World; +import org.bukkit.block.Block; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.player.PlayerMoveEvent; +import org.bukkit.plugin.java.JavaPlugin; +import org.bukkit.util.Vector; + +import java.util.Random; + +public class PortalComponent implements Component<PortalComponent, Hub> { + + private CustomPlayServerBlockChange[][] positions; + private final Random random; + + public PortalComponent(JavaPlugin plugin) { + this.positions = new CustomPlayServerBlockChange[23][17]; + this.random = new Random(); + + Bukkit.getPluginManager().registerEvents(this, plugin); + + World world = Bukkit.getWorld("world"); + Location loc1 = new Location(world, 351.5, 134, -130.5); + Location loc2 = new Location(world, 337.5, 112, -130.5); + + int arr1 = -1; + for (int y = loc1.getBlockY(); y > loc2.getBlockY() - 1; y--) { + arr1++; + + int arr2 = -1; + for (int x = loc1.getBlockX(); x > loc2.getBlockX() - 1; x--) { + arr2++; + + boolean b = random.nextInt(2) == 1; + WrappedBlockData blockData = WrappedBlockData.createData(b ? Material.STAINED_GLASS : Material.STAINED_GLASS_PANE, b ? (random.nextBoolean() ? 5 : 13) : 8); + + CustomPlayServerBlockChange info = new CustomPlayServerBlockChange(); + info.setLocation(new BlockPosition(x, y, loc1.getBlockZ())); + info.setBlockData(blockData); + + this.positions[arr1][arr2] = info; + } + } + } + + @Override + public PortalComponent onEnable(Hub plugin) { + + //Scrolling portal effect +// Bukkit.getScheduler().runTaskTimerAsynchronously(plugin, () -> { +// for (CustomPlayServerBlockChange[] array : this.positions) { +// for (CustomPlayServerBlockChange packet : array) { +// if (packet == null) continue; +// if (!packet.isVisible()) continue; +// +// for (Player player : Bukkit.getOnlinePlayers()) { +// packet.sendPacket(player); +// } +// } +// } +// +// moveDown(); +// }, 100, 1); + return this; + } + + private final Location loc1 = new Location(Bukkit.getWorld("world"), 351.5, 134, -131.5); + private final Location loc2 = new Location(Bukkit.getWorld("world"), 337.5, 112, -130.5); + private Location spawn = null; + + @EventHandler + protected final void onPlayerMove(PlayerMoveEvent event) { + Location loc = event.getTo(); +// if (event.getPlayer().getOpenInventory() != null) { +// if (event.getPlayer().getOpenInventory().getTopInventory() != null) { +// return; +// } +// } + + if (event.getFrom().getBlockX() == event.getTo().getBlockX() && event.getFrom().getBlockY() == event.getTo().getBlockY() && event.getFrom().getBlockZ() == event.getTo().getBlockZ()) return; + + if ((loc.getBlockX() <= loc1.getBlockX() && loc.getBlockX() >= loc2.getBlockX()) && + (loc.getBlockY() <= loc1.getBlockY() && loc.getBlockY() >= loc2.getBlockY()) && + (Math.abs(loc.getBlockZ()) <= Math.abs(loc1.getBlockZ()) && Math.abs(loc.getBlockZ()) >= Math.abs(loc2.getBlockZ()))) { + Hub.getInstance().getTranzitMenu().openInventory(event.getPlayer()); + + if (spawn == null) { + spawn = ((Location) Hub.getInstance().getSpawnPoints().toArray()[0]).clone(); + } + + Vector to = spawn.toVector().subtract(loc.toVector()).normalize(); + to.setY(to.getY() + 1); + + event.getPlayer().setVelocity(to); + } + } + + private void moveDown() { + CustomPlayServerBlockChange[][] temp = new CustomPlayServerBlockChange[this.positions.length][this.positions[0].length]; + + for (int i = this.positions.length - 1; i > 0; i--) { + temp[i - 1] = this.positions[i]; + } + + for (int x = 0; x < this.positions[this.positions.length - 1].length; x++) { + CustomPlayServerBlockChange blockChange = this.positions[0][x]; + if (blockChange == null) continue; + + boolean b = random.nextInt(2) == 1; + blockChange.setBlockData(WrappedBlockData.createData(b ? Material.STAINED_GLASS : Material.STAINED_GLASS_PANE, b ? (random.nextBoolean() ? 5 : 13) : 8)); + + temp[this.positions.length - 1][x] = blockChange; + } + + this.positions = temp; + } + + /** + * This is a Wrapped block change packet, + * I have a custom one for visibility option. + */ + private static class CustomPlayServerBlockChange extends AbstractPacket { + public static final PacketType TYPE; + private boolean existing; + + public CustomPlayServerBlockChange() { + super(new PacketContainer(TYPE), TYPE); + this.handle.getModifier().writeDefaults(); + } + + public CustomPlayServerBlockChange(PacketContainer packet) { + super(packet, TYPE); + } + + public BlockPosition getLocation() { + return (BlockPosition)this.handle.getBlockPositionModifier().read(0); + } + + public void setLocation(BlockPosition value) { + this.handle.getBlockPositionModifier().write(0, value); + } + + public Location getBukkitLocation(World world) { + return this.getLocation().toVector().toLocation(world); + } + + public WrappedBlockData getBlockData() { + return (WrappedBlockData)this.handle.getBlockData().read(0); + } + + public void setBlockData(WrappedBlockData value) { + this.handle.getBlockData().write(0, value); + } + + public boolean isExisting() { + return existing; + } + + public void setExisting(boolean existing) { + this.existing = existing; + } + + public boolean isVisible() { + World world = Bukkit.getWorld("world"); + Location loc = getBukkitLocation(world); + Block block = world.getBlockAt(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()); + boolean b = block.getType() == Material.STAINED_GLASS || block.getType() == Material.STAINED_GLASS_PANE; + return b; + } + + static { + TYPE = PacketType.Play.Server.BLOCK_CHANGE; + } + } +} diff --git a/hub-master@949a7e78421/src/main/java/net/grandtheftmc/hub/listeners/PortalEnter.java b/hub-master@949a7e78421/src/main/java/net/grandtheftmc/hub/listeners/PortalEnter.java new file mode 100644 index 0000000..e0b0ea5 --- /dev/null +++ b/hub-master@949a7e78421/src/main/java/net/grandtheftmc/hub/listeners/PortalEnter.java @@ -0,0 +1,23 @@ +package net.grandtheftmc.hub.listeners; + +import net.grandtheftmc.core.menus.MenuManager; +import org.bukkit.Sound; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityPortalEnterEvent; +import org.bukkit.event.inventory.InventoryType; + +public class PortalEnter implements Listener { + + @EventHandler + public void playerPortalEvent(EntityPortalEnterEvent event) { + if (event.getEntityType() != EntityType.PLAYER) return; + Player player = (Player) event.getEntity(); + if (player.getOpenInventory() != null && player.getOpenInventory().getType() == InventoryType.CHEST) return; + player.playSound(player.getLocation(), Sound.UI_BUTTON_CLICK, 1F, 1F); + player.setVelocity(player.getLocation().getDirection().setY(2).multiply(-1)); + MenuManager.openMenu(player, "serverwarper"); + } +} diff --git a/hub-master@949a7e78421/src/main/java/net/grandtheftmc/hub/listeners/Update.java b/hub-master@949a7e78421/src/main/java/net/grandtheftmc/hub/listeners/Update.java new file mode 100644 index 0000000..387dfbd --- /dev/null +++ b/hub-master@949a7e78421/src/main/java/net/grandtheftmc/hub/listeners/Update.java @@ -0,0 +1,41 @@ +package net.grandtheftmc.hub.listeners; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.events.UpdateEvent; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.hub.HubUtils; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; + +public class Update implements Listener { + + @EventHandler + public void onUpdate(UpdateEvent e) { + Player player = e.getPlayer(); + switch (e.getReason()) { + case BOARD: + case BUCKS: + case TOKENS: + case RANK: + HubUtils.updateBoard(player, Core.getUserManager().getLoadedUser(player.getUniqueId())); + break; + case PREF: + switch (e.getPref()) { + case PLAYERS_SHOWN: + User u = Core.getUserManager().getLoadedUser(player.getUniqueId()); + u.setLastPlayersToggle(System.currentTimeMillis()); + u.updateVisibility(player); + break; + case USE_SCOREBOARD: + HubUtils.updateBoard(player, Core.getUserManager().getLoadedUser(player.getUniqueId())); + break; + default: + break; + } + break; + default: + break; + } + } +} diff --git a/hub-master@949a7e78421/src/main/java/net/grandtheftmc/hub/patch/InventoryFillPatch.java b/hub-master@949a7e78421/src/main/java/net/grandtheftmc/hub/patch/InventoryFillPatch.java new file mode 100644 index 0000000..2e1571d --- /dev/null +++ b/hub-master@949a7e78421/src/main/java/net/grandtheftmc/hub/patch/InventoryFillPatch.java @@ -0,0 +1,60 @@ +package net.grandtheftmc.hub.patch; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.ProtocolLibrary; +import com.comphenix.protocol.events.ListeningWhitelist; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.events.PacketEvent; +import com.comphenix.protocol.events.PacketListener; +import com.comphenix.protocol.injector.GamePhase; +import net.grandtheftmc.hub.Hub; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.plugin.Plugin; + +/** + * Created by Luke Bingham on 12/08/2017. + */ +public class InventoryFillPatch implements PacketListener { + + public InventoryFillPatch() { + ProtocolLibrary.getProtocolManager().addPacketListener(this); + } + + @Override + public void onPacketSending(PacketEvent packetEvent) { + PacketContainer packet = packetEvent.getPacket(); + Player player = packetEvent.getPlayer(); + + if(packet.getType().equals(PacketType.Play.Server.WINDOW_ITEMS)) { + packet.getItemListModifier().read(0).forEach(item -> { + if(item.getTypeId() == 386) { + item.setType(Material.AIR); + packetEvent.setCancelled(true); + } + }); + } + } + + @Override + public void onPacketReceiving(PacketEvent packetEvent) { + //Nothing here. + } + + @Override + public ListeningWhitelist getSendingWhitelist() { + return ListeningWhitelist.newBuilder().normal().gamePhase(GamePhase.PLAYING).types( + PacketType.Play.Server.WINDOW_ITEMS + ).build(); + } + + @Override + public ListeningWhitelist getReceivingWhitelist() { + return ListeningWhitelist.EMPTY_WHITELIST; + } + + @Override + public Plugin getPlugin() { + return Hub.getInstance(); + } +} diff --git a/hub-master@949a7e78421/src/main/resources/hub.yml b/hub-master@949a7e78421/src/main/resources/hub.yml new file mode 100644 index 0000000..0812e6f --- /dev/null +++ b/hub-master@949a7e78421/src/main/resources/hub.yml @@ -0,0 +1,4 @@ +spawn: world,0,0,0,0,0 + +spawnpoints: +- world:0:0:0:0:0 \ No newline at end of file diff --git a/hub-master@949a7e78421/src/main/resources/plugin.yml b/hub-master@949a7e78421/src/main/resources/plugin.yml new file mode 100644 index 0000000..1cdaef0 --- /dev/null +++ b/hub-master@949a7e78421/src/main/resources/plugin.yml @@ -0,0 +1,11 @@ + name: Hub + version: 1.0 + description: Hub + author: Presidentx + main: net.grandtheftmc.hub.Hub + depend: [Core, MapManager] + commands: + spawn: + description: Teleport to the spawn point + usage: /spawn + default: true diff --git a/vice-master@f8937e1dbf1/.gitignore b/vice-master@f8937e1dbf1/.gitignore new file mode 100644 index 0000000..ad7f541 --- /dev/null +++ b/vice-master@f8937e1dbf1/.gitignore @@ -0,0 +1,8 @@ + +\.idea/ + +target/classes/ + +target/ + +*.iml \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/README.md b/vice-master@f8937e1dbf1/README.md new file mode 100644 index 0000000..fdaec0e --- /dev/null +++ b/vice-master@f8937e1dbf1/README.md @@ -0,0 +1 @@ +First commit. \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/chests/abandoned_mineshaft.json b/vice-master@f8937e1dbf1/loot_tables/chests/abandoned_mineshaft.json new file mode 100644 index 0000000..d3b0e2e --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/chests/abandoned_mineshaft.json @@ -0,0 +1,276 @@ +{ + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:golden_apple", + "weight": 20 + }, + { + "type": "item", + "name": "minecraft:golden_apple", + "weight": 1, + "functions": [ + { + "function": "set_data", + "data": 1 + } + ] + }, + { + "type": "item", + "name": "minecraft:name_tag", + "weight": 30 + }, + { + "type": "item", + "name": "minecraft:book", + "weight": 10, + "functions": [ + { + "function": "enchant_randomly" + } + ] + }, + { + "type": "item", + "name": "minecraft:iron_pickaxe", + "weight": 5 + }, + { + "type": "empty", + "weight": 5 + } + ] + }, + { + "rolls": { + "min": 2, + "max": 4 + }, + "entries": [ + { + "type": "item", + "name": "minecraft:iron_ingot", + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 5 + } + } + ], + "weight": 10 + }, + { + "type": "item", + "name": "minecraft:gold_ingot", + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 3 + } + } + ], + "weight": 5 + }, + { + "type": "item", + "name": "minecraft:redstone", + "functions": [ + { + "function": "set_count", + "count": { + "min": 4, + "max": 9 + } + } + ], + "weight": 5 + }, + { + "type": "item", + "name": "minecraft:dye", + "functions": [ + { + "function": "set_data", + "data": 4 + }, + { + "function": "set_count", + "count": { + "min": 4, + "max": 9 + } + } + ], + "weight": 5 + }, + { + "type": "item", + "name": "minecraft:diamond", + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 2 + } + } + ], + "weight": 3 + }, + { + "type": "item", + "name": "minecraft:coal", + "functions": [ + { + "function": "set_count", + "count": { + "min": 3, + "max": 8 + } + } + ], + "weight": 10 + }, + { + "type": "item", + "name": "minecraft:bread", + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 3 + } + } + ], + "weight": 15 + }, + { + "type": "item", + "name": "minecraft:melon_seeds", + "functions": [ + { + "function": "set_count", + "count": { + "min": 2, + "max": 4 + } + } + ], + "weight": 10 + }, + { + "type": "item", + "name": "minecraft:pumpkin_seeds", + "functions": [ + { + "function": "set_count", + "count": { + "min": 2, + "max": 4 + } + } + ], + "weight": 10 + }, + { + "type": "item", + "name": "minecraft:beetroot_seeds", + "functions": [ + { + "function": "set_count", + "count": { + "min": 2, + "max": 4 + } + } + ], + "weight": 10 + } + ] + }, + { + "rolls": 3, + "entries": [ + { + "type": "item", + "name": "minecraft:rail", + "functions": [ + { + "function": "set_count", + "count": { + "min": 4, + "max": 8 + } + } + ], + "weight": 20 + }, + { + "type": "item", + "name": "minecraft:golden_rail", + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 4 + } + } + ], + "weight": 5 + }, + { + "type": "item", + "name": "minecraft:detector_rail", + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 4 + } + } + ], + "weight": 5 + }, + { + "type": "item", + "name": "minecraft:activator_rail", + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 4 + } + } + ], + "weight": 5 + }, + { + "type": "item", + "name": "minecraft:torch", + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 16 + } + } + ], + "weight": 15 + } + ] + } + ] +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/chests/desert_pyramid.json b/vice-master@f8937e1dbf1/loot_tables/chests/desert_pyramid.json new file mode 100644 index 0000000..235911f --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/chests/desert_pyramid.json @@ -0,0 +1,235 @@ +{ + "pools": [ + { + "rolls": { + "min": 2, + "max": 4 + }, + "entries": [ + { + "type": "item", + "name": "minecraft:diamond", + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 3 + } + } + ], + "weight": 5 + }, + { + "type": "item", + "name": "minecraft:iron_ingot", + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 5 + } + } + ], + "weight": 15 + }, + { + "type": "item", + "name": "minecraft:gold_ingot", + "functions": [ + { + "function": "set_count", + "count": { + "min": 2, + "max": 7 + } + } + ], + "weight": 15 + }, + { + "type": "item", + "name": "minecraft:emerald", + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 3 + } + } + ], + "weight": 15 + }, + { + "type": "item", + "name": "minecraft:bone", + "functions": [ + { + "function": "set_count", + "count": { + "min": 4, + "max": 6 + } + } + ], + "weight": 25 + }, + { + "type": "item", + "name": "minecraft:spider_eye", + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 3 + } + } + ], + "weight": 25 + }, + { + "type": "item", + "name": "minecraft:rotten_flesh", + "functions": [ + { + "function": "set_count", + "count": { + "min": 3, + "max": 7 + } + } + ], + "weight": 25 + }, + { + "type": "item", + "name": "minecraft:saddle", + "weight": 20 + }, + { + "type": "item", + "name": "minecraft:iron_horse_armor", + "weight": 15 + }, + { + "type": "item", + "name": "minecraft:golden_horse_armor", + "weight": 10 + }, + { + "type": "item", + "name": "minecraft:diamond_horse_armor", + "weight": 5 + }, + { + "type": "item", + "name": "minecraft:book", + "weight": 20, + "functions": [ + { + "function": "enchant_randomly" + } + ] + }, + { + "type": "item", + "name": "minecraft:golden_apple", + "weight": 20 + }, + { + "type": "item", + "name": "minecraft:golden_apple", + "weight": 2, + "functions": [ + { + "function": "set_data", + "data": 1 + } + ] + }, + { + "type": "empty", + "weight": 15 + } + ] + }, + { + "rolls": 4, + "entries": [ + { + "type": "item", + "name": "minecraft:bone", + "weight": 10, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 8 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:gunpowder", + "weight": 10, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 8 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:rotten_flesh", + "weight": 10, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 8 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:string", + "weight": 10, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 8 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:sand", + "weight": 10, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 8 + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/chests/end_city_treasure.json b/vice-master@f8937e1dbf1/loot_tables/chests/end_city_treasure.json new file mode 100644 index 0000000..892f3c0 --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/chests/end_city_treasure.json @@ -0,0 +1,162 @@ +{ + "pools": [ + { + "rolls": { + "min": 2, + "max": 6 + }, + "entries": [ + { + "type": "item", + "name": "minecraft:diamond", + "weight": 5, + "functions": [ + { + "function": "set_count", + "count": { + "min": 2, + "max": 7 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:iron_ingot", + "weight": 10, + "functions": [ + { + "function": "set_count", + "count": { + "min": 4, + "max": 8 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:gold_ingot", + "weight": 15, + "functions": [ + { + "function": "set_count", + "count": { + "min": 2, + "max": 7 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:emerald", + "weight": 2, + "functions": [ + { + "function": "set_count", + "count": { + "min": 2, + "max": 6 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:beetroot_seeds", + "weight": 5, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 10 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:saddle", + "weight": 3 + }, + { + "type": "item", + "name": "minecraft:iron_horse_armor", + "weight": 1 + }, + { + "type": "item", + "name": "minecraft:golden_horse_armor", + "weight": 1 + }, + { + "type": "item", + "name": "minecraft:diamond_horse_armor", + "weight": 1 + }, + { + "type": "item", + "name": "minecraft:diamond_pickaxe", + "weight": 3, + "functions": [ + { + "function": "enchant_with_levels", + "treasure": true, + "levels": { + "min": 20, + "max": 39 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:diamond_shovel", + "weight": 3, + "functions": [ + { + "function": "enchant_with_levels", + "treasure": true, + "levels": { + "min": 20, + "max": 39 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:iron_pickaxe", + "weight": 3, + "functions": [ + { + "function": "enchant_with_levels", + "treasure": true, + "levels": { + "min": 20, + "max": 39 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:iron_shovel", + "weight": 3, + "functions": [ + { + "function": "enchant_with_levels", + "treasure": true, + "levels": { + "min": 20, + "max": 39 + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/chests/igloo_chest.json b/vice-master@f8937e1dbf1/loot_tables/chests/igloo_chest.json new file mode 100644 index 0000000..5121be6 --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/chests/igloo_chest.json @@ -0,0 +1,93 @@ +{ + "pools": [ + { + "rolls": { + "min": 2, + "max": 8 + }, + "entries": [ + { + "type": "item", + "name": "minecraft:apple", + "weight": 15, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1, + "max": 3 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:coal", + "weight": 15, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1, + "max": 4 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:gold_nugget", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1, + "max": 3 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:stone_axe", + "weight": 2 + }, + { + "type": "item", + "name": "minecraft:rotten_flesh", + "weight": 10 + }, + { + "type": "item", + "name": "minecraft:emerald", + "weight": 1 + }, + { + "type": "item", + "name": "minecraft:wheat", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 2, + "max": 3 + } + } + ] + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:golden_apple", + "weight": 1 + } + ] + } + ] +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/chests/jungle_temple.json b/vice-master@f8937e1dbf1/loot_tables/chests/jungle_temple.json new file mode 100644 index 0000000..d308cff --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/chests/jungle_temple.json @@ -0,0 +1,128 @@ +{ + "pools": [ + { + "rolls": { + "min": 2, + "max": 6 + }, + "entries": [ + { + "type": "item", + "name": "minecraft:diamond", + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 3 + } + } + ], + "weight": 3 + }, + { + "type": "item", + "name": "minecraft:iron_ingot", + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 5 + } + } + ], + "weight": 10 + }, + { + "type": "item", + "name": "minecraft:gold_ingot", + "functions": [ + { + "function": "set_count", + "count": { + "min": 2, + "max": 7 + } + } + ], + "weight": 15 + }, + { + "type": "item", + "name": "minecraft:emerald", + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 3 + } + } + ], + "weight": 2 + }, + { + "type": "item", + "name": "minecraft:bone", + "functions": [ + { + "function": "set_count", + "count": { + "min": 4, + "max": 6 + } + } + ], + "weight": 20 + }, + { + "type": "item", + "name": "minecraft:rotten_flesh", + "functions": [ + { + "function": "set_count", + "count": { + "min": 3, + "max": 7 + } + } + ], + "weight": 16 + }, + { + "type": "item", + "name": "minecraft:saddle", + "weight": 3 + }, + { + "type": "item", + "name": "minecraft:iron_horse_armor", + "weight": 1 + }, + { + "type": "item", + "name": "minecraft:golden_horse_armor", + "weight": 1 + }, + { + "type": "item", + "name": "minecraft:diamond_horse_armor", + "weight": 1 + }, + { + "type": "item", + "name": "minecraft:book", + "weight": 1, + "functions": [ + { + "function": "enchant_with_levels", + "levels": 30, + "treasure": true + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/chests/jungle_temple_dispenser.json b/vice-master@f8937e1dbf1/loot_tables/chests/jungle_temple_dispenser.json new file mode 100644 index 0000000..38c0e62 --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/chests/jungle_temple_dispenser.json @@ -0,0 +1,26 @@ +{ + "pools": [ + { + "rolls": { + "min": 1, + "max": 2 + }, + "entries": [ + { + "type": "item", + "name": "minecraft:arrow", + "functions": [ + { + "function": "set_count", + "count": { + "min": 2, + "max": 7 + } + } + ], + "weight": 30 + } + ] + } + ] +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/chests/nether_bridge.json b/vice-master@f8937e1dbf1/loot_tables/chests/nether_bridge.json new file mode 100644 index 0000000..f345149 --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/chests/nether_bridge.json @@ -0,0 +1,107 @@ +{ + "pools": [ + { + "rolls": { + "min": 2, + "max": 4 + }, + "entries": [ + { + "type": "item", + "name": "minecraft:diamond", + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 3 + } + } + ], + "weight": 5 + }, + { + "type": "item", + "name": "minecraft:iron_ingot", + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 5 + } + } + ], + "weight": 5 + }, + { + "type": "item", + "name": "minecraft:gold_ingot", + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 3 + } + } + ], + "weight": 15 + }, + { + "type": "item", + "name": "minecraft:flint_and_steel", + "weight": 5 + }, + { + "type": "item", + "name": "minecraft:nether_wart", + "functions": [ + { + "function": "set_count", + "count": { + "min": 3, + "max": 7 + } + } + ], + "weight": 5 + }, + { + "type": "item", + "name": "minecraft:saddle", + "weight": 10 + }, + { + "type": "item", + "name": "minecraft:golden_horse_armor", + "weight": 8 + }, + { + "type": "item", + "name": "minecraft:iron_horse_armor", + "weight": 5 + }, + { + "type": "item", + "name": "minecraft:diamond_horse_armor", + "weight": 3 + }, + { + "type": "item", + "name": "minecraft:obsidian", + "functions": [ + { + "function": "set_count", + "count": { + "min": 2, + "max": 4 + } + } + ], + "weight": 2 + } + ] + } + ] +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/chests/simple_dungeon.json b/vice-master@f8937e1dbf1/loot_tables/chests/simple_dungeon.json new file mode 100644 index 0000000..087e170 --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/chests/simple_dungeon.json @@ -0,0 +1,264 @@ +{ + "pools": [ + { + "rolls": { + "min": 1, + "max": 3 + }, + "entries": [ + { + "type": "item", + "name": "minecraft:saddle", + "weight": 20 + }, + { + "type": "item", + "name": "minecraft:golden_apple", + "weight": 15 + }, + { + "type": "item", + "name": "minecraft:golden_apple", + "weight": 2, + "functions": [ + { + "function": "set_data", + "data": 1 + } + ] + }, + { + "type": "item", + "name": "minecraft:record_13", + "weight": 15 + }, + { + "type": "item", + "name": "minecraft:record_cat", + "weight": 15 + }, + { + "type": "item", + "name": "minecraft:name_tag", + "weight": 20 + }, + { + "type": "item", + "name": "minecraft:golden_horse_armor", + "weight": 10 + }, + { + "type": "item", + "name": "minecraft:iron_horse_armor", + "weight": 15 + }, + { + "type": "item", + "name": "minecraft:diamond_horse_armor", + "weight": 5 + }, + { + "type": "item", + "name": "minecraft:book", + "weight": 10, + "functions": [ + { + "function": "enchant_randomly" + } + ] + } + ] + }, + { + "rolls": { + "min": 1, + "max": 4 + }, + "entries": [ + { + "type": "item", + "name": "minecraft:iron_ingot", + "weight": 10, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 4 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:gold_ingot", + "weight": 5, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 4 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:bread", + "weight": 20 + }, + { + "type": "item", + "name": "minecraft:wheat", + "weight": 20, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 4 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:bucket", + "weight": 10 + }, + { + "type": "item", + "name": "minecraft:redstone", + "weight": 15, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 4 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:coal", + "weight": 15, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 4 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:melon_seeds", + "functions": [ + { + "function": "set_count", + "count": { + "min": 2, + "max": 4 + } + } + ], + "weight": 10 + }, + { + "type": "item", + "name": "minecraft:pumpkin_seeds", + "functions": [ + { + "function": "set_count", + "count": { + "min": 2, + "max": 4 + } + } + ], + "weight": 10 + }, + { + "type": "item", + "name": "minecraft:beetroot_seeds", + "functions": [ + { + "function": "set_count", + "count": { + "min": 2, + "max": 4 + } + } + ], + "weight": 10 + } + ] + }, + { + "rolls": 3, + "entries": [ + { + "type": "item", + "name": "minecraft:bone", + "weight": 10, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 8 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:gunpowder", + "weight": 10, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 8 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:rotten_flesh", + "weight": 10, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 8 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:string", + "weight": 10, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 8 + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/chests/spawn_bonus_chest.json b/vice-master@f8937e1dbf1/loot_tables/chests/spawn_bonus_chest.json new file mode 100644 index 0000000..455107c --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/chests/spawn_bonus_chest.json @@ -0,0 +1,160 @@ +{ + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:stone_axe", + "weight": 1 + }, + { + "type": "item", + "name": "minecraft:wooden_axe", + "weight": 3 + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:stone_pickaxe", + "weight": 1 + }, + { + "type": "item", + "name": "minecraft:wooden_pickaxe", + "weight": 3 + } + ] + }, + { + "rolls": 3, + "entries": [ + { + "type": "item", + "name": "minecraft:apple", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1, + "max": 2 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:bread", + "weight": 3, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1, + "max": 2 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:fish", + "weight": 3, + "functions": [ + { + "function": "minecraft:set_data", + "data": 1 + }, + { + "function": "minecraft:set_count", + "count": { + "min": 1, + "max": 2 + } + } + ] + } + ] + }, + { + "rolls": 4, + "entries": [ + { + "type": "item", + "name": "minecraft:stick", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1, + "max": 12 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:planks", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1, + "max": 12 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:log", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1, + "max": 3 + } + }, + { + "function": "minecraft:set_data", + "data": { + "min": 0, + "max": 3 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:log2", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1, + "max": 3 + } + }, + { + "function": "minecraft:set_data", + "data": { + "min": 0, + "max": 1 + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/chests/stronghold_corridor.json b/vice-master@f8937e1dbf1/loot_tables/chests/stronghold_corridor.json new file mode 100644 index 0000000..80f6087 --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/chests/stronghold_corridor.json @@ -0,0 +1,143 @@ +{ + "pools": [ + { + "rolls": { + "min": 2, + "max": 3 + }, + "entries": [ + { + "type": "item", + "name": "minecraft:ender_pearl", + "weight": 10 + }, + { + "type": "item", + "name": "minecraft:diamond", + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 3 + } + } + ], + "weight": 3 + }, + { + "type": "item", + "name": "minecraft:iron_ingot", + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 5 + } + } + ], + "weight": 10 + }, + { + "type": "item", + "name": "minecraft:gold_ingot", + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 3 + } + } + ], + "weight": 5 + }, + { + "type": "item", + "name": "minecraft:redstone", + "functions": [ + { + "function": "set_count", + "count": { + "min": 4, + "max": 9 + } + } + ], + "weight": 5 + }, + { + "type": "item", + "name": "minecraft:bread", + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 3 + } + } + ], + "weight": 15 + }, + { + "type": "item", + "name": "minecraft:apple", + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 3 + } + } + ], + "weight": 15 + }, + { + "type": "item", + "name": "minecraft:iron_pickaxe", + "weight": 5 + }, + { + "type": "item", + "name": "minecraft:golden_apple", + "weight": 1 + }, + { + "type": "item", + "name": "minecraft:saddle", + "weight": 1 + }, + { + "type": "item", + "name": "minecraft:iron_horse_armor", + "weight": 1 + }, + { + "type": "item", + "name": "minecraft:golden_horse_armor", + "weight": 1 + }, + { + "type": "item", + "name": "minecraft:diamond_horse_armor", + "weight": 1 + }, + { + "type": "item", + "name": "minecraft:book", + "weight": 1, + "functions": [ + { + "function": "enchant_with_levels", + "levels": 30, + "treasure": true + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/chests/stronghold_crossing.json b/vice-master@f8937e1dbf1/loot_tables/chests/stronghold_crossing.json new file mode 100644 index 0000000..3ae1faf --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/chests/stronghold_crossing.json @@ -0,0 +1,113 @@ +{ + "pools": [ + { + "rolls": { + "min": 1, + "max": 4 + }, + "entries": [ + { + "type": "item", + "name": "minecraft:iron_ingot", + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 5 + } + } + ], + "weight": 10 + }, + { + "type": "item", + "name": "minecraft:gold_ingot", + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 3 + } + } + ], + "weight": 5 + }, + { + "type": "item", + "name": "minecraft:redstone", + "functions": [ + { + "function": "set_count", + "count": { + "min": 4, + "max": 9 + } + } + ], + "weight": 5 + }, + { + "type": "item", + "name": "minecraft:coal", + "functions": [ + { + "function": "set_count", + "count": { + "min": 3, + "max": 8 + } + } + ], + "weight": 10 + }, + { + "type": "item", + "name": "minecraft:bread", + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 3 + } + } + ], + "weight": 15 + }, + { + "type": "item", + "name": "minecraft:apple", + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 3 + } + } + ], + "weight": 15 + }, + { + "type": "item", + "name": "minecraft:iron_pickaxe", + "weight": 1 + }, + { + "type": "item", + "name": "minecraft:book", + "weight": 1, + "functions": [ + { + "function": "enchant_with_levels", + "levels": 30, + "treasure": true + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/chests/stronghold_library.json b/vice-master@f8937e1dbf1/loot_tables/chests/stronghold_library.json new file mode 100644 index 0000000..1805bb6 --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/chests/stronghold_library.json @@ -0,0 +1,62 @@ +{ + "pools": [ + { + "rolls": { + "min": 2, + "max": 10 + }, + "entries": [ + { + "type": "item", + "name": "minecraft:book", + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 3 + } + } + ], + "weight": 20 + }, + { + "type": "item", + "name": "minecraft:paper", + "functions": [ + { + "function": "set_count", + "count": { + "min": 2, + "max": 7 + } + } + ], + "weight": 20 + }, + { + "type": "item", + "name": "minecraft:map", + "weight": 1 + }, + { + "type": "item", + "name": "minecraft:compass", + "weight": 1 + }, + { + "type": "item", + "name": "minecraft:book", + "weight": 10, + "functions": [ + { + "function": "enchant_with_levels", + "levels": 30, + "treasure": true + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/chests/village_blacksmith.json b/vice-master@f8937e1dbf1/loot_tables/chests/village_blacksmith.json new file mode 100644 index 0000000..b8421fb --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/chests/village_blacksmith.json @@ -0,0 +1,135 @@ +{ + "pools": [ + { + "rolls": { + "min": 3, + "max": 8 + }, + "entries": [ + { + "type": "item", + "name": "minecraft:diamond", + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 3 + } + } + ], + "weight": 3 + }, + { + "type": "item", + "name": "minecraft:iron_ingot", + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 5 + } + } + ], + "weight": 10 + }, + { + "type": "item", + "name": "minecraft:gold_ingot", + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 3 + } + } + ], + "weight": 5 + }, + { + "type": "item", + "name": "minecraft:bread", + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 3 + } + } + ], + "weight": 15 + }, + { + "type": "item", + "name": "minecraft:apple", + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 3 + } + } + ], + "weight": 15 + }, + { + "type": "item", + "name": "minecraft:iron_pickaxe", + "weight": 5 + }, + { + "type": "item", + "name": "minecraft:obsidian", + "functions": [ + { + "function": "set_count", + "count": { + "min": 3, + "max": 7 + } + } + ], + "weight": 5 + }, + { + "type": "item", + "name": "minecraft:sapling", + "functions": [ + { + "function": "set_count", + "count": { + "min": 3, + "max": 7 + } + } + ], + "weight": 5 + }, + { + "type": "item", + "name": "minecraft:saddle", + "weight": 3 + }, + { + "type": "item", + "name": "minecraft:iron_horse_armor", + "weight": 1 + }, + { + "type": "item", + "name": "minecraft:golden_horse_armor", + "weight": 1 + }, + { + "type": "item", + "name": "minecraft:diamond_horse_armor", + "weight": 1 + } + ] + } + ] +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/chests/woodland_mansion.json b/vice-master@f8937e1dbf1/loot_tables/chests/woodland_mansion.json new file mode 100644 index 0000000..12a6de7 --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/chests/woodland_mansion.json @@ -0,0 +1,254 @@ +{ + "pools": [ + { + "rolls": { + "min": 1, + "max": 3 + }, + "entries": [ + { + "type": "item", + "name": "minecraft:lead", + "weight": 20 + }, + { + "type": "item", + "name": "minecraft:golden_apple", + "weight": 15 + }, + { + "type": "item", + "name": "minecraft:golden_apple", + "weight": 2, + "functions": [ + { + "function": "set_data", + "data": 1 + } + ] + }, + { + "type": "item", + "name": "minecraft:record_13", + "weight": 15 + }, + { + "type": "item", + "name": "minecraft:record_cat", + "weight": 15 + }, + { + "type": "item", + "name": "minecraft:name_tag", + "weight": 20 + }, + { + "type": "item", + "name": "minecraft:diamond_hoe", + "weight": 15 + }, + { + "type": "item", + "name": "minecraft:book", + "weight": 10, + "functions": [ + { + "function": "enchant_randomly" + } + ] + } + ] + }, + { + "rolls": { + "min": 1, + "max": 4 + }, + "entries": [ + { + "type": "item", + "name": "minecraft:iron_ingot", + "weight": 10, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 4 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:gold_ingot", + "weight": 5, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 4 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:bread", + "weight": 20 + }, + { + "type": "item", + "name": "minecraft:wheat", + "weight": 20, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 4 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:bucket", + "weight": 10 + }, + { + "type": "item", + "name": "minecraft:redstone", + "weight": 15, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 4 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:coal", + "weight": 15, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 4 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:melon_seeds", + "functions": [ + { + "function": "set_count", + "count": { + "min": 2, + "max": 4 + } + } + ], + "weight": 10 + }, + { + "type": "item", + "name": "minecraft:pumpkin_seeds", + "functions": [ + { + "function": "set_count", + "count": { + "min": 2, + "max": 4 + } + } + ], + "weight": 10 + }, + { + "type": "item", + "name": "minecraft:beetroot_seeds", + "functions": [ + { + "function": "set_count", + "count": { + "min": 2, + "max": 4 + } + } + ], + "weight": 10 + } + ] + }, + { + "rolls": 3, + "entries": [ + { + "type": "item", + "name": "minecraft:bone", + "weight": 10, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 8 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:gunpowder", + "weight": 10, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 8 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:rotten_flesh", + "weight": 10, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 8 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:string", + "weight": 10, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 8 + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/empty.json b/vice-master@f8937e1dbf1/loot_tables/empty.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/empty.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/entities/bat.json b/vice-master@f8937e1dbf1/loot_tables/entities/bat.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/entities/bat.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/entities/blaze.json b/vice-master@f8937e1dbf1/loot_tables/entities/blaze.json new file mode 100644 index 0000000..78be797 --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/entities/blaze.json @@ -0,0 +1,35 @@ +{ + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:blaze_rod", + "weight": 1, + "functions": [ + { + "function": "set_count", + "count": { + "min": 0, + "max": 1 + } + }, + { + "function": "looting_enchant", + "count": { + "min": 0, + "max": 1 + } + } + ] + } + ], + "conditions": [ + { + "condition": "killed_by_player" + } + ] + } + ] +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/entities/cave_spider.json b/vice-master@f8937e1dbf1/loot_tables/entities/cave_spider.json new file mode 100644 index 0000000..d0f7a8f --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/entities/cave_spider.json @@ -0,0 +1,61 @@ +{ + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:string", + "weight": 1, + "functions": [ + { + "function": "set_count", + "count": { + "min": 0, + "max": 2 + } + }, + { + "function": "looting_enchant", + "count": { + "min": 0, + "max": 1 + } + } + ] + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:spider_eye", + "weight": 1, + "functions": [ + { + "function": "set_count", + "count": { + "min": -1, + "max": 1 + } + }, + { + "function": "looting_enchant", + "count": { + "min": 0, + "max": 1 + } + } + ] + } + ], + "conditions": [ + { + "condition": "killed_by_player" + } + ] + } + ] +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/entities/chicken.json b/vice-master@f8937e1dbf1/loot_tables/entities/chicken.json new file mode 100644 index 0000000..f771d3b --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/entities/chicken.json @@ -0,0 +1,61 @@ +{ + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:feather", + "weight": 1, + "functions": [ + { + "function": "set_count", + "count": { + "min": 0, + "max": 2 + } + }, + { + "function": "looting_enchant", + "count": { + "min": 0, + "max": 1 + } + } + ] + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:chicken", + "weight": 1, + "functions": [ + { + "function": "furnace_smelt", + "conditions": [ + { + "condition": "entity_properties", + "entity": "this", + "properties": { + "on_fire": true + } + } + ] + }, + { + "function": "looting_enchant", + "count": { + "min": 0, + "max": 1 + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/entities/cow.json b/vice-master@f8937e1dbf1/loot_tables/entities/cow.json new file mode 100644 index 0000000..14839a6 --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/entities/cow.json @@ -0,0 +1,68 @@ +{ + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:leather", + "weight": 1, + "functions": [ + { + "function": "set_count", + "count": { + "min": 0, + "max": 2 + } + }, + { + "function": "looting_enchant", + "count": { + "min": 0, + "max": 1 + } + } + ] + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:beef", + "weight": 1, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 3 + } + }, + { + "function": "furnace_smelt", + "conditions": [ + { + "condition": "entity_properties", + "entity": "this", + "properties": { + "on_fire": true + } + } + ] + }, + { + "function": "looting_enchant", + "count": { + "min": 0, + "max": 1 + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/entities/creeper.json b/vice-master@f8937e1dbf1/loot_tables/entities/creeper.json new file mode 100644 index 0000000..ba3bac4 --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/entities/creeper.json @@ -0,0 +1,30 @@ +{ + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:gunpowder", + "weight": 1, + "functions": [ + { + "function": "set_count", + "count": { + "min": 0, + "max": 2 + } + }, + { + "function": "looting_enchant", + "count": { + "min": 0, + "max": 1 + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/entities/donkey.json b/vice-master@f8937e1dbf1/loot_tables/entities/donkey.json new file mode 100644 index 0000000..2c87ecc --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/entities/donkey.json @@ -0,0 +1,29 @@ +{ + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:leather", + "functions": [ + { + "function": "set_count", + "count": { + "min": 0, + "max": 2 + } + }, + { + "function": "looting_enchant", + "count": { + "min": 0, + "max": 1 + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/entities/elder_guardian.json b/vice-master@f8937e1dbf1/loot_tables/entities/elder_guardian.json new file mode 100644 index 0000000..8e74cab --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/entities/elder_guardian.json @@ -0,0 +1,120 @@ +{ + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:prismarine_shard", + "weight": 1, + "functions": [ + { + "function": "set_count", + "count": { + "min": 0, + "max": 2 + } + }, + { + "function": "looting_enchant", + "count": { + "min": 0, + "max": 1 + } + } + ] + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:fish", + "weight": 3, + "functions": [ + { + "function": "looting_enchant", + "count": { + "min": 0, + "max": 1 + } + }, + { + "function": "furnace_smelt", + "conditions": [ + { + "condition": "entity_properties", + "entity": "this", + "properties": { + "on_fire": true + } + } + ] + } + ] + }, + { + "type": "item", + "name": "minecraft:prismarine_crystals", + "weight": 2, + "functions": [ + { + "function": "looting_enchant", + "count": { + "min": 0, + "max": 1 + } + } + ] + }, + { + "type": "empty", + "weight": 1 + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:sponge", + "weight": 1, + "functions": [ + { + "function": "set_data", + "data": 1 + } + ] + } + ], + "conditions": [ + { + "condition": "killed_by_player" + } + ] + }, + { + "conditions": [ + { + "condition": "killed_by_player" + }, + { + "condition": "random_chance_with_looting", + "chance": 0.025, + "looting_multiplier": 0.01 + } + ], + "rolls": 1, + "entries": [ + { + "type": "loot_table", + "name": "minecraft:gameplay/fishing/fish", + "weight": 1 + } + ] + } + ] +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/entities/ender_dragon.json b/vice-master@f8937e1dbf1/loot_tables/entities/ender_dragon.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/entities/ender_dragon.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/entities/enderman.json b/vice-master@f8937e1dbf1/loot_tables/entities/enderman.json new file mode 100644 index 0000000..67bc046 --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/entities/enderman.json @@ -0,0 +1,30 @@ +{ + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:ender_pearl", + "weight": 1, + "functions": [ + { + "function": "set_count", + "count": { + "min": 0, + "max": 1 + } + }, + { + "function": "looting_enchant", + "count": { + "min": 0, + "max": 1 + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/entities/endermite.json b/vice-master@f8937e1dbf1/loot_tables/entities/endermite.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/entities/endermite.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/entities/evocation_illager.json b/vice-master@f8937e1dbf1/loot_tables/entities/evocation_illager.json new file mode 100644 index 0000000..ddcfd0b --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/entities/evocation_illager.json @@ -0,0 +1,44 @@ +{ + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:totem_of_undying" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:emerald", + "weight": 1, + "functions": [ + { + "function": "set_count", + "count": { + "min": 0, + "max": 1 + } + }, + { + "function": "looting_enchant", + "count": { + "min": 0, + "max": 1 + } + } + ] + } + ], + "conditions": [ + { + "condition": "killed_by_player" + } + ] + } + ] +} diff --git a/vice-master@f8937e1dbf1/loot_tables/entities/ghast.json b/vice-master@f8937e1dbf1/loot_tables/entities/ghast.json new file mode 100644 index 0000000..ebf4b0e --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/entities/ghast.json @@ -0,0 +1,56 @@ +{ + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:ghast_tear", + "weight": 1, + "functions": [ + { + "function": "set_count", + "count": { + "min": 0, + "max": 1 + } + }, + { + "function": "looting_enchant", + "count": { + "min": 0, + "max": 1 + } + } + ] + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:gunpowder", + "weight": 1, + "functions": [ + { + "function": "set_count", + "count": { + "min": 0, + "max": 2 + } + }, + { + "function": "looting_enchant", + "count": { + "min": 0, + "max": 1 + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/entities/giant.json b/vice-master@f8937e1dbf1/loot_tables/entities/giant.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/entities/giant.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/entities/guardian.json b/vice-master@f8937e1dbf1/loot_tables/entities/guardian.json new file mode 100644 index 0000000..e14b3ac --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/entities/guardian.json @@ -0,0 +1,99 @@ +{ + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:prismarine_shard", + "weight": 1, + "functions": [ + { + "function": "set_count", + "count": { + "min": 0, + "max": 2 + } + }, + { + "function": "looting_enchant", + "count": { + "min": 0, + "max": 1 + } + } + ] + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:fish", + "weight": 2, + "functions": [ + { + "function": "looting_enchant", + "count": { + "min": 0, + "max": 1 + } + }, + { + "function": "furnace_smelt", + "conditions": [ + { + "condition": "entity_properties", + "entity": "this", + "properties": { + "on_fire": true + } + } + ] + } + ] + }, + { + "type": "item", + "name": "minecraft:prismarine_crystals", + "weight": 2, + "functions": [ + { + "function": "looting_enchant", + "count": { + "min": 0, + "max": 1 + } + } + ] + }, + { + "type": "empty", + "weight": 1 + } + ] + }, + { + "conditions": [ + { + "condition": "killed_by_player" + }, + { + "condition": "random_chance_with_looting", + "chance": 0.025, + "looting_multiplier": 0.01 + } + ], + "rolls": 1, + "entries": [ + { + "type": "loot_table", + "name": "minecraft:gameplay/fishing/fish", + "weight": 1 + } + ] + } + ] +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/entities/horse.json b/vice-master@f8937e1dbf1/loot_tables/entities/horse.json new file mode 100644 index 0000000..2c87ecc --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/entities/horse.json @@ -0,0 +1,29 @@ +{ + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:leather", + "functions": [ + { + "function": "set_count", + "count": { + "min": 0, + "max": 2 + } + }, + { + "function": "looting_enchant", + "count": { + "min": 0, + "max": 1 + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/entities/husk.json b/vice-master@f8937e1dbf1/loot_tables/entities/husk.json new file mode 100644 index 0000000..593a80c --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/entities/husk.json @@ -0,0 +1,60 @@ +{ + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:rotten_flesh", + "weight": 1, + "functions": [ + { + "function": "set_count", + "count": { + "min": 0, + "max": 2 + } + }, + { + "function": "looting_enchant", + "count": { + "min": 0, + "max": 1 + } + } + ] + } + ] + }, + { + "conditions": [ + { + "condition": "killed_by_player" + }, + { + "condition": "random_chance_with_looting", + "chance": 0.025, + "looting_multiplier": 0.01 + } + ], + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:iron_ingot", + "weight": 1 + }, + { + "type": "item", + "name": "minecraft:carrot", + "weight": 1 + }, + { + "type": "item", + "name": "minecraft:potato", + "weight": 1 + } + ] + } + ] +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/entities/iron_golem.json b/vice-master@f8937e1dbf1/loot_tables/entities/iron_golem.json new file mode 100644 index 0000000..d79d75b --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/entities/iron_golem.json @@ -0,0 +1,42 @@ +{ + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:red_flower", + "weight": 1, + "functions": [ + { + "function": "set_count", + "count": { + "min": 0, + "max": 2 + } + } + ] + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:iron_ingot", + "weight": 1, + "functions": [ + { + "function": "set_count", + "count": { + "min": 3, + "max": 5 + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/entities/llama.json b/vice-master@f8937e1dbf1/loot_tables/entities/llama.json new file mode 100644 index 0000000..2c87ecc --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/entities/llama.json @@ -0,0 +1,29 @@ +{ + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:leather", + "functions": [ + { + "function": "set_count", + "count": { + "min": 0, + "max": 2 + } + }, + { + "function": "looting_enchant", + "count": { + "min": 0, + "max": 1 + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/entities/magma_cube.json b/vice-master@f8937e1dbf1/loot_tables/entities/magma_cube.json new file mode 100644 index 0000000..b2035db --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/entities/magma_cube.json @@ -0,0 +1,30 @@ +{ + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:magma_cream", + "weight": 1, + "functions": [ + { + "function": "set_count", + "count": { + "min": -2, + "max": 1 + } + }, + { + "function": "looting_enchant", + "count": { + "min": 0, + "max": 1 + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/entities/mule.json b/vice-master@f8937e1dbf1/loot_tables/entities/mule.json new file mode 100644 index 0000000..2c87ecc --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/entities/mule.json @@ -0,0 +1,29 @@ +{ + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:leather", + "functions": [ + { + "function": "set_count", + "count": { + "min": 0, + "max": 2 + } + }, + { + "function": "looting_enchant", + "count": { + "min": 0, + "max": 1 + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/entities/mushroom_cow.json b/vice-master@f8937e1dbf1/loot_tables/entities/mushroom_cow.json new file mode 100644 index 0000000..14839a6 --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/entities/mushroom_cow.json @@ -0,0 +1,68 @@ +{ + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:leather", + "weight": 1, + "functions": [ + { + "function": "set_count", + "count": { + "min": 0, + "max": 2 + } + }, + { + "function": "looting_enchant", + "count": { + "min": 0, + "max": 1 + } + } + ] + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:beef", + "weight": 1, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 3 + } + }, + { + "function": "furnace_smelt", + "conditions": [ + { + "condition": "entity_properties", + "entity": "this", + "properties": { + "on_fire": true + } + } + ] + }, + { + "function": "looting_enchant", + "count": { + "min": 0, + "max": 1 + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/entities/ocelot.json b/vice-master@f8937e1dbf1/loot_tables/entities/ocelot.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/entities/ocelot.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/entities/parrot.json b/vice-master@f8937e1dbf1/loot_tables/entities/parrot.json new file mode 100644 index 0000000..4d0c212 --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/entities/parrot.json @@ -0,0 +1,30 @@ +{ + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:feather", + "weight": 1, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 2 + } + }, + { + "function": "looting_enchant", + "count": { + "min": 0, + "max": 1 + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/entities/pig.json b/vice-master@f8937e1dbf1/loot_tables/entities/pig.json new file mode 100644 index 0000000..7247911 --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/entities/pig.json @@ -0,0 +1,42 @@ +{ + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:porkchop", + "weight": 1, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 3 + } + }, + { + "function": "furnace_smelt", + "conditions": [ + { + "condition": "entity_properties", + "entity": "this", + "properties": { + "on_fire": true + } + } + ] + }, + { + "function": "looting_enchant", + "count": { + "min": 0, + "max": 1 + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/entities/polar_bear.json b/vice-master@f8937e1dbf1/loot_tables/entities/polar_bear.json new file mode 100644 index 0000000..09f02ef --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/entities/polar_bear.json @@ -0,0 +1,59 @@ +{ + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:fish", + "weight": 3, + "functions": [ + { + "function": "set_count", + "count": { + "min": 0, + "max": 2 + } + }, + { + "function": "looting_enchant", + "count": { + "min": 0, + "max": 1 + } + }, + { + "function": "set_data", + "data": 0 + } + ] + }, + { + "type": "item", + "name": "minecraft:fish", + "weight": 1, + "functions": [ + { + "function": "set_count", + "count": { + "min": 0, + "max": 2 + } + }, + { + "function": "looting_enchant", + "count": { + "min": 0, + "max": 1 + } + }, + { + "function": "set_data", + "data": 1 + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/entities/rabbit.json b/vice-master@f8937e1dbf1/loot_tables/entities/rabbit.json new file mode 100644 index 0000000..f7bc3e4 --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/entities/rabbit.json @@ -0,0 +1,88 @@ +{ + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:rabbit_hide", + "weight": 1, + "functions": [ + { + "function": "set_count", + "count": { + "min": 0, + "max": 1 + } + }, + { + "function": "looting_enchant", + "count": { + "min": 0, + "max": 1 + } + } + ] + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:rabbit", + "weight": 1, + "functions": [ + { + "function": "set_count", + "count": { + "min": 0, + "max": 1 + } + }, + { + "function": "furnace_smelt", + "conditions": [ + { + "condition": "entity_properties", + "entity": "this", + "properties": { + "on_fire": true + } + } + ] + }, + { + "function": "looting_enchant", + "count": { + "min": 0, + "max": 1 + } + } + ] + } + ] + }, + { + "conditions": [ + { + "condition": "killed_by_player" + }, + { + "condition": "random_chance_with_looting", + "chance": 0.1, + "looting_multiplier": 0.03 + } + ], + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:rabbit_foot", + "weight": 1 + } + ] + } + ] +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/entities/sheep.json b/vice-master@f8937e1dbf1/loot_tables/entities/sheep.json new file mode 100644 index 0000000..a567656 --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/entities/sheep.json @@ -0,0 +1,42 @@ +{ + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:mutton", + "weight": 1, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 2 + } + }, + { + "function": "furnace_smelt", + "conditions": [ + { + "condition": "entity_properties", + "entity": "this", + "properties": { + "on_fire": true + } + } + ] + }, + { + "function": "looting_enchant", + "count": { + "min": 0, + "max": 1 + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/entities/sheep/black.json b/vice-master@f8937e1dbf1/loot_tables/entities/sheep/black.json new file mode 100644 index 0000000..71c38e9 --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/entities/sheep/black.json @@ -0,0 +1,30 @@ +{ + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:wool", + "weight": 1, + "functions": [ + { + "function": "minecraft:set_data", + "data": 15 + } + ] + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "loot_table", + "name": "minecraft:entities/sheep", + "weight": 1 + } + ] + } + ] +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/entities/sheep/blue.json b/vice-master@f8937e1dbf1/loot_tables/entities/sheep/blue.json new file mode 100644 index 0000000..b1d4ba5 --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/entities/sheep/blue.json @@ -0,0 +1,30 @@ +{ + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:wool", + "weight": 1, + "functions": [ + { + "function": "minecraft:set_data", + "data": 11 + } + ] + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "loot_table", + "name": "minecraft:entities/sheep", + "weight": 1 + } + ] + } + ] +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/entities/sheep/brown.json b/vice-master@f8937e1dbf1/loot_tables/entities/sheep/brown.json new file mode 100644 index 0000000..a74e0ec --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/entities/sheep/brown.json @@ -0,0 +1,30 @@ +{ + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:wool", + "weight": 1, + "functions": [ + { + "function": "minecraft:set_data", + "data": 12 + } + ] + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "loot_table", + "name": "minecraft:entities/sheep", + "weight": 1 + } + ] + } + ] +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/entities/sheep/cyan.json b/vice-master@f8937e1dbf1/loot_tables/entities/sheep/cyan.json new file mode 100644 index 0000000..b9e1cff --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/entities/sheep/cyan.json @@ -0,0 +1,30 @@ +{ + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:wool", + "weight": 1, + "functions": [ + { + "function": "minecraft:set_data", + "data": 9 + } + ] + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "loot_table", + "name": "minecraft:entities/sheep", + "weight": 1 + } + ] + } + ] +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/entities/sheep/gray.json b/vice-master@f8937e1dbf1/loot_tables/entities/sheep/gray.json new file mode 100644 index 0000000..dcc0559 --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/entities/sheep/gray.json @@ -0,0 +1,30 @@ +{ + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:wool", + "weight": 1, + "functions": [ + { + "function": "minecraft:set_data", + "data": 7 + } + ] + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "loot_table", + "name": "minecraft:entities/sheep", + "weight": 1 + } + ] + } + ] +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/entities/sheep/green.json b/vice-master@f8937e1dbf1/loot_tables/entities/sheep/green.json new file mode 100644 index 0000000..6761903 --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/entities/sheep/green.json @@ -0,0 +1,30 @@ +{ + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:wool", + "weight": 1, + "functions": [ + { + "function": "minecraft:set_data", + "data": 13 + } + ] + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "loot_table", + "name": "minecraft:entities/sheep", + "weight": 1 + } + ] + } + ] +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/entities/sheep/light_blue.json b/vice-master@f8937e1dbf1/loot_tables/entities/sheep/light_blue.json new file mode 100644 index 0000000..8663d87 --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/entities/sheep/light_blue.json @@ -0,0 +1,30 @@ +{ + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:wool", + "weight": 1, + "functions": [ + { + "function": "minecraft:set_data", + "data": 3 + } + ] + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "loot_table", + "name": "minecraft:entities/sheep", + "weight": 1 + } + ] + } + ] +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/entities/sheep/lime.json b/vice-master@f8937e1dbf1/loot_tables/entities/sheep/lime.json new file mode 100644 index 0000000..c92be36 --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/entities/sheep/lime.json @@ -0,0 +1,30 @@ +{ + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:wool", + "weight": 1, + "functions": [ + { + "function": "minecraft:set_data", + "data": 5 + } + ] + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "loot_table", + "name": "minecraft:entities/sheep", + "weight": 1 + } + ] + } + ] +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/entities/sheep/magenta.json b/vice-master@f8937e1dbf1/loot_tables/entities/sheep/magenta.json new file mode 100644 index 0000000..f687521 --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/entities/sheep/magenta.json @@ -0,0 +1,30 @@ +{ + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:wool", + "weight": 1, + "functions": [ + { + "function": "minecraft:set_data", + "data": 2 + } + ] + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "loot_table", + "name": "minecraft:entities/sheep", + "weight": 1 + } + ] + } + ] +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/entities/sheep/orange.json b/vice-master@f8937e1dbf1/loot_tables/entities/sheep/orange.json new file mode 100644 index 0000000..e3a8de9 --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/entities/sheep/orange.json @@ -0,0 +1,30 @@ +{ + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:wool", + "weight": 1, + "functions": [ + { + "function": "minecraft:set_data", + "data": 1 + } + ] + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "loot_table", + "name": "minecraft:entities/sheep", + "weight": 1 + } + ] + } + ] +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/entities/sheep/pink.json b/vice-master@f8937e1dbf1/loot_tables/entities/sheep/pink.json new file mode 100644 index 0000000..93aea36 --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/entities/sheep/pink.json @@ -0,0 +1,30 @@ +{ + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:wool", + "weight": 1, + "functions": [ + { + "function": "minecraft:set_data", + "data": 6 + } + ] + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "loot_table", + "name": "minecraft:entities/sheep", + "weight": 1 + } + ] + } + ] +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/entities/sheep/purple.json b/vice-master@f8937e1dbf1/loot_tables/entities/sheep/purple.json new file mode 100644 index 0000000..ac85e9b --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/entities/sheep/purple.json @@ -0,0 +1,30 @@ +{ + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:wool", + "weight": 1, + "functions": [ + { + "function": "minecraft:set_data", + "data": 10 + } + ] + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "loot_table", + "name": "minecraft:entities/sheep", + "weight": 1 + } + ] + } + ] +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/entities/sheep/red.json b/vice-master@f8937e1dbf1/loot_tables/entities/sheep/red.json new file mode 100644 index 0000000..df6239d --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/entities/sheep/red.json @@ -0,0 +1,30 @@ +{ + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:wool", + "weight": 1, + "functions": [ + { + "function": "minecraft:set_data", + "data": 14 + } + ] + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "loot_table", + "name": "minecraft:entities/sheep", + "weight": 1 + } + ] + } + ] +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/entities/sheep/silver.json b/vice-master@f8937e1dbf1/loot_tables/entities/sheep/silver.json new file mode 100644 index 0000000..26b14c1 --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/entities/sheep/silver.json @@ -0,0 +1,30 @@ +{ + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:wool", + "weight": 1, + "functions": [ + { + "function": "minecraft:set_data", + "data": 8 + } + ] + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "loot_table", + "name": "minecraft:entities/sheep", + "weight": 1 + } + ] + } + ] +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/entities/sheep/white.json b/vice-master@f8937e1dbf1/loot_tables/entities/sheep/white.json new file mode 100644 index 0000000..12856c3 --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/entities/sheep/white.json @@ -0,0 +1,30 @@ +{ + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:wool", + "weight": 1, + "functions": [ + { + "function": "minecraft:set_data", + "data": 0 + } + ] + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "loot_table", + "name": "minecraft:entities/sheep", + "weight": 1 + } + ] + } + ] +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/entities/sheep/yellow.json b/vice-master@f8937e1dbf1/loot_tables/entities/sheep/yellow.json new file mode 100644 index 0000000..4a775ad --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/entities/sheep/yellow.json @@ -0,0 +1,30 @@ +{ + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:wool", + "weight": 1, + "functions": [ + { + "function": "minecraft:set_data", + "data": 4 + } + ] + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "loot_table", + "name": "minecraft:entities/sheep", + "weight": 1 + } + ] + } + ] +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/entities/shulker.json b/vice-master@f8937e1dbf1/loot_tables/entities/shulker.json new file mode 100644 index 0000000..43abeff --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/entities/shulker.json @@ -0,0 +1,20 @@ +{ + "pools": [ + { + "conditions": [ + { + "condition": "random_chance_with_looting", + "chance": 0.5, + "looting_multiplier": 0.0625 + } + ], + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:shulker_shell" + } + ] + } + ] +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/entities/silverfish.json b/vice-master@f8937e1dbf1/loot_tables/entities/silverfish.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/entities/silverfish.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/entities/skeleton.json b/vice-master@f8937e1dbf1/loot_tables/entities/skeleton.json new file mode 100644 index 0000000..630df5b --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/entities/skeleton.json @@ -0,0 +1,56 @@ +{ + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:arrow", + "weight": 1, + "functions": [ + { + "function": "set_count", + "count": { + "min": 0, + "max": 2 + } + }, + { + "function": "looting_enchant", + "count": { + "min": 0, + "max": 1 + } + } + ] + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:bone", + "weight": 1, + "functions": [ + { + "function": "set_count", + "count": { + "min": 0, + "max": 2 + } + }, + { + "function": "looting_enchant", + "count": { + "min": 0, + "max": 1 + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/entities/skeleton_horse.json b/vice-master@f8937e1dbf1/loot_tables/entities/skeleton_horse.json new file mode 100644 index 0000000..a998e9e --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/entities/skeleton_horse.json @@ -0,0 +1,30 @@ +{ + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:bone", + "weight": 1, + "functions": [ + { + "function": "set_count", + "count": { + "min": 0, + "max": 2 + } + }, + { + "function": "looting_enchant", + "count": { + "min": 0, + "max": 1 + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/entities/slime.json b/vice-master@f8937e1dbf1/loot_tables/entities/slime.json new file mode 100644 index 0000000..0e2ebe8 --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/entities/slime.json @@ -0,0 +1,30 @@ +{ + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:slime_ball", + "weight": 1, + "functions": [ + { + "function": "set_count", + "count": { + "min": 0, + "max": 2 + } + }, + { + "function": "looting_enchant", + "count": { + "min": 0, + "max": 1 + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/entities/snowman.json b/vice-master@f8937e1dbf1/loot_tables/entities/snowman.json new file mode 100644 index 0000000..270433e --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/entities/snowman.json @@ -0,0 +1,23 @@ +{ + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:snowball", + "weight": 1, + "functions": [ + { + "function": "set_count", + "count": { + "min": 0, + "max": 15 + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/entities/spider.json b/vice-master@f8937e1dbf1/loot_tables/entities/spider.json new file mode 100644 index 0000000..d0f7a8f --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/entities/spider.json @@ -0,0 +1,61 @@ +{ + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:string", + "weight": 1, + "functions": [ + { + "function": "set_count", + "count": { + "min": 0, + "max": 2 + } + }, + { + "function": "looting_enchant", + "count": { + "min": 0, + "max": 1 + } + } + ] + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:spider_eye", + "weight": 1, + "functions": [ + { + "function": "set_count", + "count": { + "min": -1, + "max": 1 + } + }, + { + "function": "looting_enchant", + "count": { + "min": 0, + "max": 1 + } + } + ] + } + ], + "conditions": [ + { + "condition": "killed_by_player" + } + ] + } + ] +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/entities/squid.json b/vice-master@f8937e1dbf1/loot_tables/entities/squid.json new file mode 100644 index 0000000..4d7926f --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/entities/squid.json @@ -0,0 +1,34 @@ +{ + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:dye", + "weight": 1, + "functions": [ + { + "function": "set_count", + "count": { + "min": 1, + "max": 3 + } + }, + { + "function": "set_data", + "data": 0 + }, + { + "function": "looting_enchant", + "count": { + "min": 0, + "max": 1 + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/entities/stray.json b/vice-master@f8937e1dbf1/loot_tables/entities/stray.json new file mode 100644 index 0000000..9501595 --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/entities/stray.json @@ -0,0 +1,92 @@ +{ + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:arrow", + "weight": 1, + "functions": [ + { + "function": "set_count", + "count": { + "min": 0, + "max": 2 + } + }, + { + "function": "looting_enchant", + "count": { + "min": 0, + "max": 1 + } + } + ] + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:bone", + "weight": 1, + "functions": [ + { + "function": "set_count", + "count": { + "min": 0, + "max": 2 + } + }, + { + "function": "looting_enchant", + "count": { + "min": 0, + "max": 1 + } + } + ] + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:tipped_arrow", + "weight": 1, + "functions": [ + { + "function": "set_count", + "count": { + "min": 0, + "max": 1 + } + }, + { + "function": "looting_enchant", + "count": { + "min": 0, + "max": 1 + }, + "limit": 1 + }, + { + "function": "set_nbt", + "tag": "{Potion:\"minecraft:slowness\"}" + } + ] + } + ], + "conditions": [ + { + "condition": "killed_by_player" + } + ] + } + ] +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/entities/vex.json b/vice-master@f8937e1dbf1/loot_tables/entities/vex.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/entities/vex.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/entities/villager.json b/vice-master@f8937e1dbf1/loot_tables/entities/villager.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/entities/villager.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/entities/vindication_illager.json b/vice-master@f8937e1dbf1/loot_tables/entities/vindication_illager.json new file mode 100644 index 0000000..0a03c37 --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/entities/vindication_illager.json @@ -0,0 +1,35 @@ +{ + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:emerald", + "weight": 1, + "functions": [ + { + "function": "set_count", + "count": { + "min": 0, + "max": 1 + } + }, + { + "function": "looting_enchant", + "count": { + "min": 0, + "max": 1 + } + } + ] + } + ], + "conditions": [ + { + "condition": "killed_by_player" + } + ] + } + ] +} diff --git a/vice-master@f8937e1dbf1/loot_tables/entities/witch.json b/vice-master@f8937e1dbf1/loot_tables/entities/witch.json new file mode 100644 index 0000000..d7d47bb --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/entities/witch.json @@ -0,0 +1,159 @@ +{ + "pools": [ + { + "rolls": { + "min": 1, + "max": 3 + }, + "entries": [ + { + "type": "item", + "name": "minecraft:glowstone_dust", + "weight": 1, + "functions": [ + { + "function": "set_count", + "count": { + "min": 0, + "max": 2 + } + }, + { + "function": "looting_enchant", + "count": { + "min": 0, + "max": 1 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:sugar", + "weight": 1, + "functions": [ + { + "function": "set_count", + "count": { + "min": 0, + "max": 2 + } + }, + { + "function": "looting_enchant", + "count": { + "min": 0, + "max": 1 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:redstone", + "weight": 1, + "functions": [ + { + "function": "set_count", + "count": { + "min": 0, + "max": 2 + } + }, + { + "function": "looting_enchant", + "count": { + "min": 0, + "max": 1 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:spider_eye", + "weight": 1, + "functions": [ + { + "function": "set_count", + "count": { + "min": 0, + "max": 2 + } + }, + { + "function": "looting_enchant", + "count": { + "min": 0, + "max": 1 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:glass_bottle", + "weight": 1, + "functions": [ + { + "function": "set_count", + "count": { + "min": 0, + "max": 2 + } + }, + { + "function": "looting_enchant", + "count": { + "min": 0, + "max": 1 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:gunpowder", + "weight": 1, + "functions": [ + { + "function": "set_count", + "count": { + "min": 0, + "max": 2 + } + }, + { + "function": "looting_enchant", + "count": { + "min": 0, + "max": 1 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:stick", + "weight": 2, + "functions": [ + { + "function": "set_count", + "count": { + "min": 0, + "max": 2 + } + }, + { + "function": "looting_enchant", + "count": { + "min": 0, + "max": 1 + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/entities/wither_skeleton.json b/vice-master@f8937e1dbf1/loot_tables/entities/wither_skeleton.json new file mode 100644 index 0000000..04d18fb --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/entities/wither_skeleton.json @@ -0,0 +1,82 @@ +{ + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:coal", + "weight": 1, + "functions": [ + { + "function": "set_count", + "count": { + "min": -1, + "max": 1 + } + }, + { + "function": "looting_enchant", + "count": { + "min": 0, + "max": 1 + } + } + ] + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:bone", + "weight": 1, + "functions": [ + { + "function": "set_count", + "count": { + "min": 0, + "max": 2 + } + }, + { + "function": "looting_enchant", + "count": { + "min": 0, + "max": 1 + } + } + ] + } + ] + }, + { + "conditions": [ + { + "condition": "killed_by_player" + }, + { + "condition": "random_chance_with_looting", + "chance": 0.025, + "looting_multiplier": 0.01 + } + ], + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:skull", + "weight": 1, + "functions": [ + { + "function": "set_data", + "data": 1 + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/entities/wolf.json b/vice-master@f8937e1dbf1/loot_tables/entities/wolf.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/entities/wolf.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/entities/zombie.json b/vice-master@f8937e1dbf1/loot_tables/entities/zombie.json new file mode 100644 index 0000000..593a80c --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/entities/zombie.json @@ -0,0 +1,60 @@ +{ + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:rotten_flesh", + "weight": 1, + "functions": [ + { + "function": "set_count", + "count": { + "min": 0, + "max": 2 + } + }, + { + "function": "looting_enchant", + "count": { + "min": 0, + "max": 1 + } + } + ] + } + ] + }, + { + "conditions": [ + { + "condition": "killed_by_player" + }, + { + "condition": "random_chance_with_looting", + "chance": 0.025, + "looting_multiplier": 0.01 + } + ], + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:iron_ingot", + "weight": 1 + }, + { + "type": "item", + "name": "minecraft:carrot", + "weight": 1 + }, + { + "type": "item", + "name": "minecraft:potato", + "weight": 1 + } + ] + } + ] +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/entities/zombie_horse.json b/vice-master@f8937e1dbf1/loot_tables/entities/zombie_horse.json new file mode 100644 index 0000000..12669bf --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/entities/zombie_horse.json @@ -0,0 +1,30 @@ +{ + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:rotten_flesh", + "weight": 1, + "functions": [ + { + "function": "set_count", + "count": { + "min": 0, + "max": 2 + } + }, + { + "function": "looting_enchant", + "count": { + "min": 0, + "max": 1 + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/entities/zombie_pigman.json b/vice-master@f8937e1dbf1/loot_tables/entities/zombie_pigman.json new file mode 100644 index 0000000..5d31ee1 --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/entities/zombie_pigman.json @@ -0,0 +1,76 @@ +{ + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:rotten_flesh", + "weight": 1, + "functions": [ + { + "function": "set_count", + "count": { + "min": 0, + "max": 1 + } + }, + { + "function": "looting_enchant", + "count": { + "min": 0, + "max": 1 + } + } + ] + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:gold_nugget", + "weight": 1, + "functions": [ + { + "function": "set_count", + "count": { + "min": 0, + "max": 1 + } + }, + { + "function": "looting_enchant", + "count": { + "min": 0, + "max": 1 + } + } + ] + } + ] + }, + { + "conditions": [ + { + "condition": "killed_by_player" + }, + { + "condition": "random_chance_with_looting", + "chance": 0.025, + "looting_multiplier": 0.01 + } + ], + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:gold_ingot", + "weight": 1 + } + ] + } + ] +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/entities/zombie_villager.json b/vice-master@f8937e1dbf1/loot_tables/entities/zombie_villager.json new file mode 100644 index 0000000..593a80c --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/entities/zombie_villager.json @@ -0,0 +1,60 @@ +{ + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:rotten_flesh", + "weight": 1, + "functions": [ + { + "function": "set_count", + "count": { + "min": 0, + "max": 2 + } + }, + { + "function": "looting_enchant", + "count": { + "min": 0, + "max": 1 + } + } + ] + } + ] + }, + { + "conditions": [ + { + "condition": "killed_by_player" + }, + { + "condition": "random_chance_with_looting", + "chance": 0.025, + "looting_multiplier": 0.01 + } + ], + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:iron_ingot", + "weight": 1 + }, + { + "type": "item", + "name": "minecraft:carrot", + "weight": 1 + }, + { + "type": "item", + "name": "minecraft:potato", + "weight": 1 + } + ] + } + ] +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/gameplay/fishing.json b/vice-master@f8937e1dbf1/loot_tables/gameplay/fishing.json new file mode 100644 index 0000000..c345821 --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/gameplay/fishing.json @@ -0,0 +1,27 @@ +{ + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "loot_table", + "name": "minecraft:gameplay/fishing/junk", + "weight": 10, + "quality": -2 + }, + { + "type": "loot_table", + "name": "minecraft:gameplay/fishing/treasure", + "weight": 5, + "quality": 2 + }, + { + "type": "loot_table", + "name": "minecraft:gameplay/fishing/fish", + "weight": 85, + "quality": -1 + } + ] + } + ] +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/gameplay/fishing/fish.json b/vice-master@f8937e1dbf1/loot_tables/gameplay/fishing/fish.json new file mode 100644 index 0000000..3376910 --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/gameplay/fishing/fish.json @@ -0,0 +1,53 @@ +{ + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:fish", + "functions": [ + { + "function": "set_data", + "data": 0 + } + ], + "weight": 60 + }, + { + "type": "item", + "name": "minecraft:fish", + "functions": [ + { + "function": "set_data", + "data": 1 + } + ], + "weight": 25 + }, + { + "type": "item", + "name": "minecraft:fish", + "functions": [ + { + "function": "set_data", + "data": 2 + } + ], + "weight": 2 + }, + { + "type": "item", + "name": "minecraft:fish", + "functions": [ + { + "function": "set_data", + "data": 3 + } + ], + "weight": 13 + } + ] + } + ] +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/loot_tables/gameplay/fishing/junk.json b/vice-master@f8937e1dbf1/loot_tables/gameplay/fishing/junk.json new file mode 100644 index 0000000..7d0eba6 --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/gameplay/fishing/junk.json @@ -0,0 +1,98 @@ +{ + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:leather_boots", + "weight": 10, + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0, + "max": 0.90 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:leather", + "weight": 10 + }, + { + "type": "item", + "name": "minecraft:bone", + "weight": 10 + }, + { + "type": "item", + "name": "minecraft:potion", + "weight": 10, + "functions": [ + { + "function": "set_nbt", + "tag": "{Potion:\"minecraft:water\"}" + } + ] + }, + { + "type": "item", + "name": "minecraft:string", + "weight": 5 + }, + { + "type": "item", + "name": "minecraft:fishing_rod", + "weight": 2, + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0, + "max": 0.90 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:bowl", + "weight": 10 + }, + { + "type": "item", + "name": "minecraft:stick", + "weight": 5 + }, + { + "type": "item", + "name": "minecraft:dye", + "weight": 1, + "functions": [ + { + "function": "set_data", + "data": 0 + }, + { + "function": "set_count", + "count": 10 + } + ] + }, + { + "type": "item", + "name": "minecraft:tripwire_hook", + "weight": 10 + }, + { + "type": "item", + "name": "minecraft:rotten_flesh", + "weight": 10 + } + ] + } + ] +} diff --git a/vice-master@f8937e1dbf1/loot_tables/gameplay/fishing/treasure.json b/vice-master@f8937e1dbf1/loot_tables/gameplay/fishing/treasure.json new file mode 100644 index 0000000..eb443fa --- /dev/null +++ b/vice-master@f8937e1dbf1/loot_tables/gameplay/fishing/treasure.json @@ -0,0 +1,74 @@ +{ + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "item", + "name": "minecraft:waterlily", + "weight": 1 + }, + { + "type": "item", + "name": "minecraft:name_tag", + "weight": 1 + }, + { + "type": "item", + "name": "minecraft:saddle", + "weight": 1 + }, + { + "type": "item", + "name": "minecraft:bow", + "weight": 1, + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0, + "max": 0.25 + } + }, + { + "function": "enchant_with_levels", + "levels": 30, + "treasure": true + } + ] + }, + { + "type": "item", + "name": "minecraft:fishing_rod", + "weight": 1, + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0, + "max": 0.25 + } + }, + { + "function": "enchant_with_levels", + "levels": 30, + "treasure": true + } + ] + }, + { + "type": "item", + "name": "minecraft:book", + "weight": 1, + "functions": [ + { + "function": "enchant_with_levels", + "levels": 30, + "treasure": true + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/pom.xml b/vice-master@f8937e1dbf1/pom.xml new file mode 100644 index 0000000..ed44196 --- /dev/null +++ b/vice-master@f8937e1dbf1/pom.xml @@ -0,0 +1,220 @@ +<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + + <groupId>net.grandtheftmc</groupId> + <artifactId>vice</artifactId> + <version>1.1.0</version> + <name>Vice</name> + + <repositories> + <repository> + <id>paperspigot-repo</id> + <url>https://repo.destroystokyo.com/repository/maven-public/</url> + </repository> + <repository> + <id>dmulloy2-repo</id> + <url>http://repo.dmulloy2.net/nexus/repository/public/</url> + </repository> + <repository> + <id>jitpack.io</id> + <url>https://jitpack.io</url> + </repository> + <repository> + <id>worldedit-repo</id> + <url>http://maven.sk89q.com/repo/</url> + </repository> + <repository> + <id>viaversion-repo</id> + <url>https://repo.viaversion.com</url> + </repository> + <repository> + <id>central</id> + <name>Central Repository</name> + <url>http://repo.maven.apache.org/maven2</url> + <layout>default</layout> + <snapshots> + <enabled>false</enabled> + </snapshots> + </repository> + <repository> + <id>everything</id> + <url>http://repo.citizensnpcs.co</url> + </repository> + <repository> + <id>nexus-release</id> + <url>https://nexus.grandtheftmc.net/content/repositories/releases/</url> + </repository> + </repositories> + + <distributionManagement> + <repository> + <id>nexus-release</id> + <name>Internal Releases</name> + <url>https://nexus.grandtheftmc.net/content/repositories/releases/</url> + </repository> + <snapshotRepository> + <id>nexus-snapshot</id> + <name>Internal Snapshots</name> + <url>https://nexus.grandtheftmc.net/content/repositories/snapshots/</url> + </snapshotRepository> + </distributionManagement> + + <dependencies> + <dependency> + <groupId>org.spigotmc.1.12</groupId> + <artifactId>spigot</artifactId> + <version>1.12.0</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>de.slikey</groupId> + <artifactId>EffectLib</artifactId> + <version>5.2</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>com.sk89q.worldedit</groupId> + <artifactId>worldedit-bukkit</artifactId> + <version>LATEST</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>com.sk89q.worldguard</groupId> + <artifactId>worldguard-bukkit</artifactId> + <version>6.2.1</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>com.sk89q</groupId> + <artifactId>worldedit</artifactId> + <version>6.1.7.3</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>us.myles</groupId> + <artifactId>viaversion</artifactId> + <version>1.0.3</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>com.comphenix.protocol</groupId> + <artifactId>ProtocolLib-API</artifactId> + <version>4.2.1</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>com.github.j0ach1mmall3</groupId> + <artifactId>JLib</artifactId> + <version>1.10.0</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>net.grandtheftmc</groupId> + <artifactId>wastedguns</artifactId> + <version>1.1.1</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>net.grandtheftmc</groupId> + <artifactId>wastedvehicles</artifactId> + <version>1.0.3.rewrite</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>net.grandtheftmc</groupId> + <artifactId>wastedcops</artifactId> + <version>1.0.1</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>com.gmail.filoghost.holographicdisplays</groupId> + <artifactId>HolographicDisplays</artifactId> + <version>1.0.0</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>net.grandtheftmc</groupId> + <artifactId>core</artifactId> + <version>2.3.7.2</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>com.massivecraft</groupId> + <artifactId>Cartels</artifactId> + <version>1.7.1</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>net.citizensnpcs</groupId> + <artifactId>citizensapi</artifactId> + <version>2.0.22</version> + <scope>provided</scope> + </dependency> + <!--<dependency>--> + <!--<groupId>mkremins</groupId>--> + <!--<artifactId>fanciful</artifactId>--> + <!--<version>0.4.0-SNAPSHOT</version>--> + <!--<scope>compile</scope>--> + <!--<exclusions>--> + <!--<exclusion>--> + <!--<artifactId>gson</artifactId>--> + <!--<groupId>com.google.code.gson</groupId>--> + <!--</exclusion>--> + <!--</exclusions>--> + <!--</dependency>--> + </dependencies> + + <properties> + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + <maven.compiler.source>1.8</maven.compiler.source> + <maven.compiler.target>1.8</maven.compiler.target> + </properties> + + <build> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-shade-plugin</artifactId> + <configuration> + <finalName>Vice</finalName> + <artifactSet> + <excludes> + <exclude>us.myles:*:*:*</exclude> + </excludes> + </artifactSet> + </configuration> + <executions> + <execution> + <phase>package</phase> + <goals> + <goal>shade</goal> + </goals> + </execution> + </executions> + </plugin> + + <!-- Nexus deploy --> + <plugin> + <groupId>org.sonatype.plugins</groupId> + <artifactId>nexus-staging-maven-plugin</artifactId> + <version>1.6.8</version> + <extensions>true</extensions> + <executions> + <execution> + <id>default-deploy</id> + <phase>deploy</phase> + <goals> + <goal>deploy</goal> + </goals> + </execution> + </executions> + <configuration> + <serverId>nexus</serverId> + <nexusUrl>http://nexus.grandtheftmc.net/</nexusUrl> + <skipStaging>true</skipStaging> + </configuration> + </plugin> + </plugins> + </build> +</project> \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/Vice.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/Vice.java new file mode 100644 index 0000000..6020994 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/Vice.java @@ -0,0 +1,716 @@ +package net.grandtheftmc.vice; + +import java.util.logging.Level; + +import org.bukkit.Bukkit; +import org.bukkit.Chunk; +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.plugin.Plugin; +import org.bukkit.plugin.PluginManager; +import org.bukkit.plugin.java.JavaPlugin; + +import com.comphenix.protocol.ProtocolLibrary; +import com.comphenix.protocol.ProtocolManager; +import com.massivecraft.factions.Factions; + +import de.slikey.effectlib.EffectManager; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Settings; +import net.grandtheftmc.core.casino.CoreCasino; +import net.grandtheftmc.core.casino.slot.SlotMachine; +import net.grandtheftmc.core.menus.MenuManager; +import net.grandtheftmc.core.resourcepack.RSPack_1_12; +import net.grandtheftmc.core.resourcepack.ResourcePack; +import net.grandtheftmc.core.resourcepack.ResourcePackManager; +import net.grandtheftmc.core.util.NMSVersion; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.util.title.NMSTitle; +import net.grandtheftmc.guns.GTMGuns; +import net.grandtheftmc.vice.areas.AreaManager; +import net.grandtheftmc.vice.combatlog.CombatLogManager; +import net.grandtheftmc.vice.commands.AmmoCommand; +import net.grandtheftmc.vice.commands.AntiAuraCommand; +import net.grandtheftmc.vice.commands.AreaCommand; +import net.grandtheftmc.vice.commands.BackpackCommand; +import net.grandtheftmc.vice.commands.BackupCommand; +import net.grandtheftmc.vice.commands.BaltopCommand; +import net.grandtheftmc.vice.commands.BondsCommand; +import net.grandtheftmc.vice.commands.BribeCommand; +import net.grandtheftmc.vice.commands.CheatCodeCommand; +import net.grandtheftmc.vice.commands.ChunkUnloadCommand; +import net.grandtheftmc.vice.commands.ClearCommand; +import net.grandtheftmc.vice.commands.CopCommand; +import net.grandtheftmc.vice.commands.CoreNPCCommand; +import net.grandtheftmc.vice.commands.DrugCheckCommand; +import net.grandtheftmc.vice.commands.FeedCommand; +import net.grandtheftmc.vice.commands.FixCommand; +import net.grandtheftmc.vice.commands.HomeCommand; +import net.grandtheftmc.vice.commands.KillCommand; +import net.grandtheftmc.vice.commands.LotteryCommand; +import net.grandtheftmc.vice.commands.MoneyCommand; +import net.grandtheftmc.vice.commands.PayCommand; +import net.grandtheftmc.vice.commands.PrestigeCommand; +import net.grandtheftmc.vice.commands.RTPCommand; +import net.grandtheftmc.vice.commands.RankupCommand; +import net.grandtheftmc.vice.commands.ResetCommand; +import net.grandtheftmc.vice.commands.ResetStatsCommand; +import net.grandtheftmc.vice.commands.ResourcePackCommand; +import net.grandtheftmc.vice.commands.SellCommand; +import net.grandtheftmc.vice.commands.SkinCommand; +import net.grandtheftmc.vice.commands.SkinsCommand; +import net.grandtheftmc.vice.commands.SpawnCommand; +import net.grandtheftmc.vice.commands.SpectatorCommand; +import net.grandtheftmc.vice.commands.SpeedCommand; +import net.grandtheftmc.vice.commands.StackCommand; +import net.grandtheftmc.vice.commands.StatsCommand; +import net.grandtheftmc.vice.commands.TeleportCommand; +import net.grandtheftmc.vice.commands.TokenShopCommand; +import net.grandtheftmc.vice.commands.TopKillersCommand; +import net.grandtheftmc.vice.commands.TpaCommand; +import net.grandtheftmc.vice.commands.VehicleCommand; +import net.grandtheftmc.vice.commands.ViceAdminCommand; +import net.grandtheftmc.vice.commands.ViceRankCommand; +import net.grandtheftmc.vice.commands.ViceRanksCommand; +import net.grandtheftmc.vice.commands.WarpCommand; +import net.grandtheftmc.vice.commands.ZoneCommand; +import net.grandtheftmc.vice.display.DisplayManager; +import net.grandtheftmc.vice.dropship.DropShipManager; +import net.grandtheftmc.vice.drugs.DrugCommand; +import net.grandtheftmc.vice.drugs.DrugComponent; +import net.grandtheftmc.vice.drugs.DrugManager; +import net.grandtheftmc.vice.drugs.events.listener.DrugListener; +import net.grandtheftmc.vice.drugs.events.listener.DrugPlacementListener; +import net.grandtheftmc.vice.durability.DurabilityListener; +import net.grandtheftmc.vice.holidays.HolidayManager; +import net.grandtheftmc.vice.hologram.HologramManager; +import net.grandtheftmc.vice.items.BackpackManager; +import net.grandtheftmc.vice.items.GameItemCommand; +import net.grandtheftmc.vice.items.ItemManager; +import net.grandtheftmc.vice.items.KitCommand; +import net.grandtheftmc.vice.items.ShopCommand; +import net.grandtheftmc.vice.items.ShopManager; +import net.grandtheftmc.vice.listeners.ArmorEquip; +import net.grandtheftmc.vice.listeners.BlockDispense; +import net.grandtheftmc.vice.listeners.BlockPlace; +import net.grandtheftmc.vice.listeners.BreakBlock; +import net.grandtheftmc.vice.listeners.ChangeWorld; +import net.grandtheftmc.vice.listeners.Chat; +import net.grandtheftmc.vice.listeners.ChunkLoad; +import net.grandtheftmc.vice.listeners.CommandPreProcess; +import net.grandtheftmc.vice.listeners.CraftItem; +import net.grandtheftmc.vice.listeners.Damage; +import net.grandtheftmc.vice.listeners.Death; +import net.grandtheftmc.vice.listeners.Dispense; +import net.grandtheftmc.vice.listeners.Drop; +import net.grandtheftmc.vice.listeners.Enchant; +import net.grandtheftmc.vice.listeners.FoodChange; +import net.grandtheftmc.vice.listeners.Interact; +import net.grandtheftmc.vice.listeners.InventoryClick; +import net.grandtheftmc.vice.listeners.InventoryOpen; +import net.grandtheftmc.vice.listeners.InventoryPickupItem; +import net.grandtheftmc.vice.listeners.ItemBreak; +import net.grandtheftmc.vice.listeners.ItemComponent; +import net.grandtheftmc.vice.listeners.ItemSpawn; +import net.grandtheftmc.vice.listeners.ItemStack; +import net.grandtheftmc.vice.listeners.JetpackFuelUse; +import net.grandtheftmc.vice.listeners.Join; +import net.grandtheftmc.vice.listeners.Leave; +import net.grandtheftmc.vice.listeners.Login; +import net.grandtheftmc.vice.listeners.MenuListener; +import net.grandtheftmc.vice.listeners.MobSpawn; +import net.grandtheftmc.vice.listeners.Move; +import net.grandtheftmc.vice.listeners.PetListener; +import net.grandtheftmc.vice.listeners.Pickup; +import net.grandtheftmc.vice.listeners.PlayerEnterZone; +import net.grandtheftmc.vice.listeners.PlayerLeaveZone; +import net.grandtheftmc.vice.listeners.PortalEnter; +import net.grandtheftmc.vice.listeners.RenameComponent; +import net.grandtheftmc.vice.listeners.SmeltItem; +import net.grandtheftmc.vice.listeners.SwapHandItems; +import net.grandtheftmc.vice.listeners.Teleport; +import net.grandtheftmc.vice.listeners.UpdateListener; +import net.grandtheftmc.vice.listeners.VehicleUse; +import net.grandtheftmc.vice.listeners.VoteReward; +import net.grandtheftmc.vice.listeners.WeaponShoot; +import net.grandtheftmc.vice.listeners.WeaponUse; +import net.grandtheftmc.vice.lootcrates.CrateManager; +import net.grandtheftmc.vice.lootcrates.LootCrateCommand; +import net.grandtheftmc.vice.machine.MachineManager; +import net.grandtheftmc.vice.pickers.PickerCommand; +import net.grandtheftmc.vice.pickers.PickerManager; +import net.grandtheftmc.vice.redstone.RedstoneManager; +import net.grandtheftmc.vice.season.SeasonManager; +import net.grandtheftmc.vice.tasks.Lottery; +import net.grandtheftmc.vice.tasks.TaskManager; +import net.grandtheftmc.vice.users.AntiAfkTimer; +import net.grandtheftmc.vice.users.ViceUser; +import net.grandtheftmc.vice.users.ViceUserDAO; +import net.grandtheftmc.vice.users.ViceUserManager; +import net.grandtheftmc.vice.users.npcs.MachineNPC; +import net.grandtheftmc.vice.users.npcs.SkinsNPC; +import net.grandtheftmc.vice.users.npcs.TaxiNPC; +import net.grandtheftmc.vice.users.npcs.TrashCanManager; +import net.grandtheftmc.vice.users.npcs.shopnpc.ShopNPC; +import net.grandtheftmc.vice.users.storage.BooleanStorageType; +import net.grandtheftmc.vice.weapon.WeaponRegistry; +import net.grandtheftmc.vice.weapon.skins.WeaponSkinManager; +import net.grandtheftmc.vice.world.WorldManager; + +public class Vice extends JavaPlugin { + + private static DrugManager drugManager; + private static Vice instance; + private static ViceUserManager um; + private static TaskManager tm; + private static BackpackManager bam; + private static WorldManager worldm; + private static ItemManager im; + private static ShopManager sm; + private static CrateManager cm; + private static TrashCanManager tcm; + private static Lottery lottery; + private static HolidayManager hm; + private static GTMGuns wg; + private static com.j0ach1mmall3.wastedvehicles.Main wv; + private static CombatLogManager clm; + private static ProtocolManager pm; + private MachineManager machineManager; + private static ViceSettings settings; + private static EffectManager effectLib; + private static Factions cartels; + private static PickerManager pim; + private static WeaponSkinManager wsm; + private CoreCasino<Vice> coreCasino; + private HologramManager hologramManager; + private SeasonManager seasonManager; + private DisplayManager displayManager; + private AreaManager areaManager; + + public static boolean WEAPON_SKINS_FEATURE_FLAG = false; + +// private TagManager<Vice> tagManager; + + + public static WorldManager getWorldManager() { + return worldm; + } + + public static CombatLogManager getCombatLogManager() { + return clm; + } + + public static Vice getInstance() { + return instance; + } + + public MachineManager getMachineManager() { + return machineManager; + } + + public static ViceUserManager getUserManager() { + return um; + } + + public static EffectManager getEffectLib() { + return effectLib; + } + + public static TaskManager getTaskManager() { + return tm; + } + + public static BackpackManager getBackpackManager() { + return bam; + } + + public static ItemManager getItemManager() { + return im; + } + + public static ViceSettings getSettings() { + return settings; + } + + public static ShopManager getShopManager() { + return sm; + } + + public static CrateManager getCrateManager() { + return cm; + } + + public static ProtocolManager getProtocolManager() { + return pm; + } + + public static HolidayManager getHolidayManager() { + return hm; + } + + public static DrugManager getDrugManager() { + return drugManager; + } + + public static WeaponSkinManager getWeaponSkinManager() { + return wsm; + } + + public static Factions getCartels() { + if (cartels == null) cartels = Factions.getInstance(); + return cartels; + } + + + public static TrashCanManager getTrashCanManager() { + return tcm; + } + + public static GTMGuns getWastedGuns() { + return wg; + } + + public static com.j0ach1mmall3.wastedvehicles.Main getWastedVehicles() { + return wv; + } + + public static Lottery getLottery() { + return lottery; + } + + public static PickerManager getPickerManager() { + return pim; + } + + public static ResourcePackManager getResourcePackManager() { + return Core.resourcePackManager; + } + + public static void log(Level level, String message) { + System.out.println("[Vice][" + level.toString() + "] " + message); + } + + public static void log(String message) { + log(Level.INFO, message); + } + + public static void error(String message) { + log(Level.SEVERE, message); + } + + public DisplayManager getDisplayManager() { + return this.displayManager; + } + + public SeasonManager getSeasonManager() { + return this.seasonManager; + } + + public AreaManager getAreaManager() { + return this.areaManager; + } + + @Override + public void onEnable() { + + // TODO remove + System.out.println("[Vice] Test."); + + instance = this; + settings = new ViceSettings(); + this.load(); + this.loadDependencies(); + effectLib = new EffectManager(this); + um = new ViceUserManager(); + tm = new TaskManager(); + drugManager = new DrugManager(); + drugManager.start(); + im = new ItemManager(); + drugManager.loadDrugRecipes(); + bam = new BackpackManager(); + sm = new ShopManager(); + cm = new CrateManager(); + lottery = new Lottery(); + hm = new HolidayManager(); + wsm = new WeaponSkinManager(); + worldm = new WorldManager(); + worldm.load(); + clm = new CombatLogManager(); + clm.load(); + tcm = new TrashCanManager(); + pm = ProtocolLibrary.getProtocolManager(); + this.pim = new PickerManager(); +// this.tagManager = new TagManager<Vice>(this, NMSVersion.MC_1_12).onEnable(this); +// new CartelsComponent(this, this.tagManager); +// new NametagComponent(this, this.tagManager); + Core.resourcePackManager = new ResourcePackManager(this, new RSPack_1_12(), new NMSTitle()); + Core.resourcePackManager.setResourcePack(NMSVersion.UNKNOWN, new ResourcePack("http://cdn.grandtheftmc.net/VICE-2.0.8-1.11.zip", "27D482BCBAB4431CEAD764728543B42F")); + Core.resourcePackManager.setResourcePack(NMSVersion.MC_1_12_2, new ResourcePack("http://cdn.grandtheftmc.net/VICE-2.0.8-1.11.zip", "27D482BCBAB4431CEAD764728543B42F")); + Core.resourcePackManager.setResourcePack(NMSVersion.MC_1_12_1, new ResourcePack("http://cdn.grandtheftmc.net/VICE-2.0.8-1.11.zip", "27D482BCBAB4431CEAD764728543B42F")); + Core.resourcePackManager.setResourcePack(NMSVersion.MC_1_12, new ResourcePack("http://cdn.grandtheftmc.net/VICE-2.0.8-1.11.zip", "27D482BCBAB4431CEAD764728543B42F")); + Core.resourcePackManager.setResourcePack(NMSVersion.MC_1_11_2, new ResourcePack("http://cdn.grandtheftmc.net/VICE-2.0.8-1.11.zip", "27D482BCBAB4431CEAD764728543B42F")); + Core.resourcePackManager.setResourcePack(NMSVersion.MC_1_11, new ResourcePack("http://cdn.grandtheftmc.net/VICE-2.0.8-1.11.zip", "27D482BCBAB4431CEAD764728543B42F")); + Core.resourcePackManager.setResourcePack(NMSVersion.MC_1_10, new ResourcePack("http://cdn.grandtheftmc.net/VICE-2.0.8-1.10.zip", "33862C9199CFFB217D6808EFE06392DB")); + Core.resourcePackManager.setResourcePack(NMSVersion.MC_1_9_4, new ResourcePack("http://cdn.grandtheftmc.net/VICE-2.0.8-1.10.zip", "33862C9199CFFB217D6808EFE06392DB")); + Core.resourcePackManager.setResourcePack(NMSVersion.MC_1_9_2, new ResourcePack("http://cdn.grandtheftmc.net/VICE-2.0.8-1.10.zip", "33862C9199CFFB217D6808EFE06392DB")); + Core.resourcePackManager.setResourcePack(NMSVersion.MC_1_9_1, new ResourcePack("http://cdn.grandtheftmc.net/VICE-2.0.8-1.10.zip", "33862C9199CFFB217D6808EFE06392DB")); + Core.resourcePackManager.setResourcePack(NMSVersion.MC_1_9, new ResourcePack("http://cdn.grandtheftmc.net/VICE-2.0.8-1.10.zip", "33862C9199CFFB217D6808EFE06392DB")); + + this.coreCasino = new CoreCasino<Vice>(this, new NMSTitle(), NMSVersion.MC_1_12); + + ServerUtil.runTaskLater(() -> { + coreCasino.addGame(new SlotMachine(coreCasino, new Location(Bukkit.getWorld("spawn"), 131, 77.1875, 173.5, 0f, 0f))); + coreCasino.addGame(new SlotMachine(coreCasino, new Location(Bukkit.getWorld("spawn"), 144, 77.1875, 173.5, 0f, 0f))); + + coreCasino.enabledAllGames(); + }, 15*20); + + Bukkit.getScheduler().runTaskTimer(this, new AntiAfkTimer(), 0, 20*60*10); + + new WeaponRegistry(wg.getWeaponManager()); + + this.hologramManager = new HologramManager(this); + this.displayManager = new DisplayManager(this, this.hologramManager); + this.seasonManager = new SeasonManager(this, this.hologramManager); + + this.areaManager = new AreaManager(this); + + this.machineManager = new MachineManager(this); +// new GunTestingListener().onEnable(this); //TODO: TESTING. + new DrugComponent(this); + new DropShipManager(this, this.areaManager, im); + new RedstoneManager(); + + this.registerCommands(); + this.registerListeners(); + + // Utils.startEnchantmentShineRemover(pm, this); + + //EventCatcher +// detector.addListener((plugin, event) -> { +// log(event.getEventName() + " cancelled by: " + plugin.getName()); +// }); + + World spawn = Bukkit.getWorld("spawn"); + Core.getNPCManager().registerCoreNPC(new ShopNPC(new Location(spawn, 91, 79, 214.5))); + Core.getNPCManager().registerCoreNPC(new MachineNPC(this.machineManager, new Location(spawn, 159, 77, 217))); + Core.getNPCManager().registerCoreNPC(new TaxiNPC(new Location(spawn, 137.5, 77, 230.5))); + + if(WEAPON_SKINS_FEATURE_FLAG) { + Core.getNPCManager().registerCoreNPC(new SkinsNPC(new Location(spawn, -325.5, 25, 206.5))); + } + + for (World world : Bukkit.getWorlds()) { + world.setGameRuleValue("announceAdvancements", "false"); + if (world.getName().equals("world")) { + for (Chunk chunk : world.getLoadedChunks()) { + chunk.unload(); + } + } + } + } + + private void loadDependencies() { + PluginManager plm = Bukkit.getPluginManager(); + Plugin wastedGunsPlugin = plm.getPlugin("WastedGuns"); + if (wastedGunsPlugin == null) { + log("Error while enabling WastedGuns dependency. Is it installed?"); + } else { + wg = (GTMGuns) wastedGunsPlugin; + } + Plugin wastedVehiclesPlugin = plm.getPlugin("WastedVehicles"); + if (wastedVehiclesPlugin == null) { + log("Error while enabling WastedVehicles dependency. Is it installed?"); + } else { + wv = (com.j0ach1mmall3.wastedvehicles.Main) wastedVehiclesPlugin; + } + } + + @Override + public void onDisable() { + Bukkit.getScheduler().cancelTasks(this); + + this.seasonManager.onDisable(this); + this.hologramManager.onDisable(this); + this.machineManager.onDisable(this); + +// this.tagManager.onDisable(this); + for (Player player : Bukkit.getOnlinePlayers()) { + ViceUser user = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + user.setBooleanToStorage(BooleanStorageType.KICKED, true); + if (user.isInCombat()) user.setLastTag(-1); + Vice.getUserManager().unloadUser(player.getUniqueId()); + } + + this.save(); + this.coreCasino.removeAllGames(); + } + + private void registerListeners() { + PluginManager pm = Bukkit.getPluginManager(); + pm.registerEvents(new Death(), this); + pm.registerEvents(new ItemStack(), this); + pm.registerEvents(new Login(), this); + pm.registerEvents(new Leave(), this); + pm.registerEvents(new MenuListener(), this); + pm.registerEvents(new Join(this.hologramManager), this); + pm.registerEvents(new Pickup(), this); + pm.registerEvents(new WeaponUse(), this); + pm.registerEvents(new Drop(), this); + pm.registerEvents(new Interact(), this); + pm.registerEvents(new Chat(), this); + pm.registerEvents(new InventoryClick(), this); + pm.registerEvents(new InventoryOpen(), this); + pm.registerEvents(new BlockDispense(), this); + pm.registerEvents(new BackpackManager(), this); + pm.registerEvents(new UpdateListener(), this); + pm.registerEvents(new Move(), this); + pm.registerEvents(new Damage(), this); + pm.registerEvents(new ChangeWorld(), this); + pm.registerEvents(new FoodChange(), this); + pm.registerEvents(new VehicleUse(), this); + pm.registerEvents(new PetListener(), this); + pm.registerEvents(new ItemBreak(), this); + pm.registerEvents(new BreakBlock(), this); + pm.registerEvents(new WeaponShoot(), this); + pm.registerEvents(new SwapHandItems(), this); + pm.registerEvents(new DrugListener(), this); + pm.registerEvents(new DrugPlacementListener(), this); +// pm.registerEvents(new ResourcePack(), this); +// pm.registerEvents(new FireListener(), this); + pm.registerEvents(new VoteReward(), this); + pm.registerEvents(new CraftItem(), this); + pm.registerEvents(new SmeltItem(), this); + pm.registerEvents(new Enchant(), this); + pm.registerEvents(new DurabilityListener(), this); + pm.registerEvents(new InventoryPickupItem(), this); + pm.registerEvents(new CommandPreProcess(), this); + pm.registerEvents(new ArmorEquip(), this); + pm.registerEvents(new BlockPlace(), this); + pm.registerEvents(new ChunkLoad(), this); + pm.registerEvents(new Dispense(), this); + pm.registerEvents(new MobSpawn(), this); + pm.registerEvents(new JetpackFuelUse(), this); + pm.registerEvents(new Teleport(), this); + pm.registerEvents(new JetpackFuelUse(), this); + pm.registerEvents(new PlayerEnterZone(), this); + pm.registerEvents(new PlayerLeaveZone(), this); + pm.registerEvents(new PortalEnter(), this); + pm.registerEvents(new ItemSpawn(), this); + pm.registerEvents(tcm, this); + new HomeCommand(); + new PrestigeCommand(); + new CoreNPCCommand(this.machineManager); + // new LogoutCommand(); + new ItemComponent(); + new RenameComponent(this); + + this.getServer().getMessenger().registerOutgoingPluginChannel(this, "BungeeCord"); + } + + private void registerCommands() { + this.getCommand("ammo").setExecutor(new AmmoCommand()); + this.getCommand("feed").setExecutor(new FeedCommand()); + this.getCommand("lootcrate").setExecutor(new LootCrateCommand()); + this.getCommand("spawn").setExecutor(new SpawnCommand()); + this.getCommand("warp").setExecutor(new WarpCommand()); + this.getCommand("viceadmin").setExecutor(new ViceAdminCommand()); + this.getCommand("gameitem").setExecutor(new GameItemCommand()); + this.getCommand("kit").setExecutor(new KitCommand()); + this.getCommand("shop").setExecutor(new ShopCommand()); + this.getCommand("vicerank").setExecutor(new ViceRankCommand()); + this.getCommand("money").setExecutor(new MoneyCommand()); + new BaltopCommand(); + this.getCommand("pay").setExecutor(new PayCommand()); + this.getCommand("rankup").setExecutor(new RankupCommand()); + this.getCommand("tpa").setExecutor(new TpaCommand()); + this.getCommand("tpahere").setExecutor(new TpaCommand()); + this.getCommand("tpaccept").setExecutor(new TpaCommand()); + this.getCommand("tpdeny").setExecutor(new TpaCommand()); + this.getCommand("bonds").setExecutor(new BondsCommand()); + this.getCommand("kill").setExecutor(new KillCommand()); + this.getCommand("suicide").setExecutor(new KillCommand()); + this.getCommand("picker").setExecutor(new PickerCommand()); + this.getCommand("vehicle").setExecutor(new VehicleCommand()); + this.getCommand("backpack").setExecutor(new BackpackCommand()); + this.getCommand("bribe").setExecutor(new BribeCommand()); + this.getCommand("reset").setExecutor(new ResetCommand()); + this.getCommand("tokenshop").setExecutor(new TokenShopCommand()); + this.getCommand("antiaura").setExecutor(new AntiAuraCommand()); + this.getCommand("clear").setExecutor(new ClearCommand()); + this.getCommand("fix").setExecutor(new FixCommand()); +// this.getCommand("near").setExecutor(new NearCommand()); Not wanted on vice. + this.getCommand("teleport").setExecutor(new TeleportCommand()); + this.getCommand("spectator").setExecutor(new SpectatorCommand()); + this.getCommand("backup").setExecutor(new BackupCommand()); + this.getCommand("resetstats").setExecutor(new ResetStatsCommand()); + this.getCommand("lottery").setExecutor(new LotteryCommand()); + this.getCommand("speed").setExecutor(new SpeedCommand()); + this.getCommand("chunkunload").setExecutor(new ChunkUnloadCommand()); + this.getCommand("topkillers").setExecutor(new TopKillersCommand()); + this.getCommand("stats").setExecutor(new StatsCommand()); + this.getCommand("drugs").setExecutor(new DrugCommand()); + this.getCommand("resourcepack").setExecutor(new ResourcePackCommand()); + this.getCommand("drugcheck").setExecutor(new DrugCheckCommand()); + this.getCommand("viceranks").setExecutor(new ViceRanksCommand()); + this.getCommand("stack").setExecutor(new StackCommand()); + this.getCommand("cop").setExecutor(new CopCommand()); + this.getCommand("rtp").setExecutor(new RTPCommand()); + this.getCommand("area").setExecutor(new AreaCommand(this)); + new CheatCodeCommand(); + new ZoneCommand(); + new SellCommand(); + + if(WEAPON_SKINS_FEATURE_FLAG) { + new SkinCommand(); + new SkinsCommand(); + } + } + + private void load() { + this.setupTables(); + settings.setPlayerCacheConfig(Utils.loadConfig("playercache")); + settings.setViceConfig(Utils.loadConfig("vice")); + settings.setWarpsConfig(Utils.loadConfig("warps")); + settings.setItemsConfig(Utils.loadConfig("items")); + settings.setKitsConfig(Utils.loadConfig("kits")); + settings.setLootConfig(Utils.loadConfig("loot")); + settings.setLootCratesConfig(Utils.loadConfig("lootcrates")); + settings.setLotteryConfig(Utils.loadConfig("lottery")); + settings.setDrugBlocksConfig(Utils.loadConfig("drugblocks")); + settings.setDrugDealersConfig(Utils.loadConfig("drugdealers")); + settings.setPickersConfig(Utils.loadConfig("pickers")); + settings.setUpgradeContainersConfig(Utils.loadConfig("upgradedcontainers")); + settings.setHomesConfig(Utils.loadConfig("homes")); + settings.setZoneConfig(Utils.loadConfig("zones")); + YamlConfiguration c = settings.getViceConfig(); + settings.setMap(c.getString("map")); + this.loadMenus(); + this.loadSettings(); + settings.setOneElevenRespack("http://cdn.grandtheftmc.net/VICE-2.0.8-1.11.zip"); + settings.setOneElevenHash("27D482BCBAB4431CEAD764728543B42F"); + settings.setOneTenRespack("http://cdn.grandtheftmc.net/VICE-2.0.8-1.10.zip"); + settings.setOneTenHash("33862C9199CFFB217D6808EFE06392DB"); + } + + public void reload() { + this.load(); + im.loadItems(); + im.loadKits(); + cm.loadCrates(); + worldm.load(); + lottery.loadConfig(); + } + + public void save() { + im.saveItems(); + cm.saveCrates(); + im.saveKits(); + worldm.save(); + // lottery.saveConfig(); + this.drugManager.stop(); + effectLib.dispose(); + pim.save(); + clm.save(); + } + + public void setupTables() { + // TODO redo this shit +// Core.sql.updateAsyncLater("CREATE TABLE IF NOT EXISTS " + Core.name() + "(uuid varchar(40) NOT NULL, name varchar(17) NOT NULL, rank varchar(255) DEFAULT 'HOBO', copRank varchar(366) DEFAULT NULL, kills int(11) default 0, deaths int(11) default 0, money double default 0, killStreak int(11) default 0, bonds int(11) default 0, backpackContents longtext, kitExpiries varchar(255), houses varchar(255), gang varchar(255), gangRank varchar(255) NOT NULL DEFAULT 'member', jailTimer int(11) DEFAULT -1, jailCop varchar(255) default NULL, jailCopName varchar(255) default NULL, personalVehicle varchar(255), cheatcodes BLOB, PRIMARY KEY (uuid))"); + ServerUtil.runTaskAsync(() -> { + ViceUserDAO.createTable(); + ViceUserDAO.managePlaytime(); + }); + +// new BukkitRunnable() { +// @Override +// public void run() { +// try (ResultSet rs = Core.sql.query("select * from " + Core.name() + " LIMIT 1;")) { +// ResultSetMetaData metaData = rs.getMetaData(); +// List<String> columns = new ArrayList<>(); +// +// for (int i = 1; i <= metaData.getColumnCount(); i++) +// columns.add(metaData.getColumnName(i).toLowerCase()); +// +// if (!columns.contains("playtime")) +// Core.sql.updateAsyncLater("ALTER TABLE " + Core.name() + " ADD COLUMN playtime BIGINT(20) NOT NULL DEFAULT 0;"); +// +// for (AmmoType type : AmmoType.values()) +// if (!type.isInInventory() && !columns.contains(type.toString().toLowerCase())) +// Core.sql.update("alter table " + Core.name() + " add column " + type.toString().toLowerCase() + " int(11) default 0;"); +// +// for (VehicleProperties vehicle : Vice.getWastedVehicles().getBabies().getVehicleProperties()) { +// if (!columns.contains(vehicle.getIdentifier().toLowerCase())) +// Core.sql.update("alter table " + Core.name() + " add column " + vehicle.getIdentifier().toLowerCase() + " BOOLEAN not null default 0;"); +// +// if (!columns.contains(vehicle.getIdentifier().toLowerCase() + ":info")) +// Core.sql.update("alter table " + Core.name() + " add column `" + vehicle.getIdentifier().toLowerCase() + ":info` VARCHAR(255);"); +// } +// rs.close(); +// } catch (SQLException e) { +// Core.error("Error while altering " + Core.name() + " table: "); +// e.printStackTrace(); +// } +// } +// }.runTaskAsynchronously(this); + } + + private void loadMenus() { + MenuManager.addMenu("phone", 54, "&7&lPhone"); + + MenuManager.addMenu("account", 54, "&d&lMy Account"); + MenuManager.addMenu("ranks", 54, "&a&lRanks"); + MenuManager.addMenu("vicestats", 54, "&d&lStats"); + MenuManager.addMenu("prefs", 54, "&5&lPreferences"); + MenuManager.addMenu("contacts", 54, "&6&lContacts"); + + MenuManager.addMenu("kits", 54, "&b&lKits"); + + MenuManager.addMenu("taxi", 54, "&e&lTaxi Service"); + MenuManager.addMenu("taxiplayers", 54, "&e&lTaxi Service: Players"); + MenuManager.addMenu("taxihouses", 54, "&e&lTaxi Service: &3&lHouses"); + MenuManager.addMenu("taxiotherplayers", 54, "&e&lPick up a player!"); + MenuManager.addMenu("taxiwarps", 54, "&e&lTaxi Service: Warps"); + + MenuManager.addMenu("ammopouch", 36, "&c&lAmmo Pouch"); + + MenuManager.addMenu("jail", 54, "&c&lJail"); + + MenuManager.addMenu("property", 54, "&2&lProperty"); + MenuManager.addMenu("vehicles", 54, "&4&lVehicles"); + MenuManager.addMenu("vehicleshop", 54, "&4&lVehicle Shop"); + MenuManager.addMenu("buyvehicle", 54, "&4&lBuy Vehicle Shop"); + MenuManager.addMenu("sellvehicle", 54, "&4&lSell Vehicle"); + MenuManager.addMenu("repairvehicle", 54, "&4&lRepair Vehicle"); + MenuManager.addMenu("personalvehicle", 54, "&4&lPersonal Vehicle"); + MenuManager.addMenu("mechanic", 54, "&4&lMechanic"); + + MenuManager.addMenu("cheatcodes", 54, "&2&lCheat Codes"); + MenuManager.addMenu("choose_villager_type", 54, "&2&lChoose The Villager's Job"); + + MenuManager.addMenu("armorupgrade", 54, "&b&lArmor Upgrade"); + + MenuManager.addMenu("lottery", 54, "&e&lLottery"); + + MenuManager.addMenu("drugdealer", 54, "&c&lDrug Dealer"); + + } + + private void loadSettings() { + Settings settings = Core.getSettings(); + settings.setDefaultGameMode(GameMode.SURVIVAL); + settings.setPetsVulnerable(true); + settings.setServerWarperEnabled(false); + settings.setTokenShopEnabled(true); + settings.setCanOpenChests(true); + settings.setCanInteractInventory(true); + settings.setLoadCosmetics(true); + settings.setCanCraft(true); + //World plots = Bukkit.getWorld(Vice.getSettings().getPlotsWorld()); + //plots.setPVP(false); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/ViceSettings.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/ViceSettings.java new file mode 100644 index 0000000..aace7b7 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/ViceSettings.java @@ -0,0 +1,214 @@ +package net.grandtheftmc.vice; + +import org.bukkit.configuration.file.YamlConfiguration; + +public class ViceSettings { + private YamlConfiguration viceConfig; + private YamlConfiguration warpsConfig; + private YamlConfiguration bountiesConfig; + private YamlConfiguration itemsConfig; + private YamlConfiguration kitsConfig; + private YamlConfiguration lootConfig; + private YamlConfiguration lootCratesConfig; + private YamlConfiguration barrelsConfig; + private YamlConfiguration lotteryConfig; + private YamlConfiguration drugDealersConfig; + private YamlConfiguration drugBlocksConfig; + private YamlConfiguration viceShopMenuConfig; + private YamlConfiguration pickersConfig; + private YamlConfiguration homesConfig; + private YamlConfiguration upgradeContainersConfig; + private YamlConfiguration playerCacheConfig; + private YamlConfiguration zoneConfig; + + private String oneTenRespack; + private String oneTenHash; + + private String oneElevenRespack; + private String oneElevenHash; + + private String map; + + public YamlConfiguration getZoneConfig() { + return zoneConfig; + } + + public void setZoneConfig(YamlConfiguration zoneConfig) { + this.zoneConfig = zoneConfig; + } + + public YamlConfiguration getPlayerCacheConfig() { + return playerCacheConfig; + } + + public void setPlayerCacheConfig(YamlConfiguration playerCacheConfig) { + this.playerCacheConfig = playerCacheConfig; + } + + public void setHomesConfig(YamlConfiguration homesConfig) { + this.homesConfig = homesConfig; + } + + public YamlConfiguration getHomesConfig() { + return homesConfig; + } + + public void setViceShopMenuConfig(YamlConfiguration viceShopMenuConfig) { + this.viceShopMenuConfig = viceShopMenuConfig; + } + + public void setUpgradeContainersConfig(YamlConfiguration upgradeContainersConfig) { + this.upgradeContainersConfig = upgradeContainersConfig; + } + + public YamlConfiguration getUpgradeContainersConfig() { + return upgradeContainersConfig; + } + + public YamlConfiguration getViceShopMenuConfig() { + return viceShopMenuConfig; + } + + public YamlConfiguration getDrugBlocksConfig() { + return drugBlocksConfig; + } + + public YamlConfiguration getDrugDealerConfig() { + return null; + }//todo: added to allow jar to file + + public void setDrugDealerConfig(YamlConfiguration c) { + } + + public void setDrugBlocksConfig(YamlConfiguration drugBlocksConfig) { + this.drugBlocksConfig = drugBlocksConfig; + } + + public YamlConfiguration getDrugDealersConfig() { + return drugDealersConfig; + } + + public void setDrugDealersConfig(YamlConfiguration drugDealersConfig) { + this.drugDealersConfig = drugDealersConfig; + } + + public YamlConfiguration getViceConfig() { + return this.viceConfig; + } + + public void setViceConfig(YamlConfiguration viceConfig) { + this.viceConfig = viceConfig; + } + + public YamlConfiguration getWarpsConfig() { + return this.warpsConfig; + } + + public void setWarpsConfig(YamlConfiguration warpsConfig) { + this.warpsConfig = warpsConfig; + } + + public YamlConfiguration getBountiesConfig() { + return this.bountiesConfig; + } + + public void setBountiesConfig(YamlConfiguration bountiesConfig) { + this.bountiesConfig = bountiesConfig; + } + + public YamlConfiguration getItemsConfig() { + return this.itemsConfig; + } + + public void setItemsConfig(YamlConfiguration itemsConfig) { + this.itemsConfig = itemsConfig; + } + + public YamlConfiguration getKitsConfig() { + return this.kitsConfig; + } + + public void setKitsConfig(YamlConfiguration kitsConfig) { + this.kitsConfig = kitsConfig; + } + + public YamlConfiguration getBarrelsConfig() { + return this.barrelsConfig; + } + + public void setBarrelsConfig(YamlConfiguration barrelsConfig) { + this.barrelsConfig = barrelsConfig; + } + + public String getMap() { + return this.map; + } + + public void setMap(String map) { + this.map = map; + } + + public YamlConfiguration getLootCratesConfig() { + return this.lootCratesConfig; + } + + public void setLootCratesConfig(YamlConfiguration lootCratesConfig) { + this.lootCratesConfig = lootCratesConfig; + } + + public YamlConfiguration getLootConfig() { + return this.lootConfig; + } + + public void setLootConfig(YamlConfiguration lootConfig) { + this.lootConfig = lootConfig; + } + + public YamlConfiguration getLotteryConfig() { + return this.lotteryConfig; + } + + public void setLotteryConfig(YamlConfiguration lotteryConfig) { + this.lotteryConfig = lotteryConfig; + } + + public String getOneElevenRespack() { + return oneElevenRespack; + } + + public String getOneElevenHash() { + return oneElevenHash; + } + + public String getOneTenRespack() { + return oneTenRespack; + } + + public String getOneTenHash() { + return oneTenHash; + } + + public void setOneElevenRespack(String oneElevenRespack) { + this.oneElevenRespack = oneElevenRespack; + } + + public void setOneElevenHash(String oneElevenHash) { + this.oneElevenHash = oneElevenHash; + } + + public void setOneTenRespack(String oneTenRespack) { + this.oneTenRespack = oneTenRespack; + } + + public void setOneTenHash(String oneTenHash) { + this.oneTenHash = oneTenHash; + } + + public YamlConfiguration getPickersConfig() { + return this.pickersConfig; + } + + public void setPickersConfig(YamlConfiguration pickersConfig) { + this.pickersConfig = pickersConfig; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/ViceUtils.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/ViceUtils.java new file mode 100644 index 0000000..7b85e2f --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/ViceUtils.java @@ -0,0 +1,916 @@ +package net.grandtheftmc.vice; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.wrappers.WrappedDataWatcher; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.boards.Board; +import net.grandtheftmc.core.boards.BoardType; +import net.grandtheftmc.core.database.BaseDatabase; +import net.grandtheftmc.core.users.Pref; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.vice.items.GameItem; +import net.grandtheftmc.vice.items.Schedule; +import net.grandtheftmc.vice.users.ViceRank; +import net.grandtheftmc.vice.users.ViceUser; +import net.grandtheftmc.vice.utils.ReflectionUtil; +import net.grandtheftmc.vice.world.warps.Warp; +import org.bukkit.*; +import org.bukkit.block.Block; +import org.bukkit.entity.ArmorStand; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.SkullMeta; +import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.util.io.BukkitObjectInputStream; +import org.bukkit.util.io.BukkitObjectOutputStream; +import org.yaml.snakeyaml.external.biz.base64Coder.Base64Coder; + +import java.io.*; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.text.NumberFormat; +import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.Month; +import java.time.ZoneId; +import java.util.*; +import java.util.concurrent.ThreadLocalRandom; +import java.util.logging.Level; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.stream.Collectors; + +public final class ViceUtils { + + public static final String HEADER = Utils.f( + " &7&l▀&d&l▄&7&l▀&d&l▄&7&l▀&d&l▄&7&l▀&d&l▄&7&l▀&d&l▄&7&l▀&d&l▄&7&l▀&d&l▄&7&l▀&d&l▄&7&l▀&d&l▄&7&l▀&d&l▄&7&l▀&d&l▄&7&l▀&d&l▄&7&l▀&d&l▄&7&l▀&d&l▄&7&l▀&d&l▄&7&l▀"); + public static final String FOOTER = Utils.f( + " &7&l▄&d&l▀&7&l▄&d&l▀&7&l▄&d&l▀&7&l▄&d&l▀&7&l▄&d&l▀&7&l▄&d&l▀&7&l▄&d&l▀&7&l▄&d&l▀&7&l▄&d&l▀&7&l▄&d&l▀&7&l▄&d&l▀&7&l▄&d&l▀&7&l▄&d&l▀&7&l▄&d&l▀&7&l▄&d&l▀&7&l▄"); + + private ViceUtils() { + } + + public static Material getSeedVersionOfMaterial(Material material) { + String sMat = material + "_SEEDS"; + return Material.getMaterial(sMat) == null ? material : Material.getMaterial(sMat); + } + + public static ViceUser getViceUser(Player player) { + return Vice.getUserManager().getLoadedUser(player.getUniqueId()); + } + + public static User getUser(Player player) { + return Core.getUserManager().getLoadedUser(player.getUniqueId()); + } + + public static UserRank getRank(Player player) { + return Core.getUserManager().getLoadedUser(player.getUniqueId()).getUserRank(); + } + + public static void updateBoard(Player player, ViceUser viceUser) { + updateBoard(player, Core.getUserManager().getLoadedUser(player.getUniqueId()), viceUser); + } + + public static boolean canPlantOn(Material plant, Material block){ + switch (plant){ + case CARROT_ITEM: + case POTATO_ITEM: + case SEEDS: + case BEETROOT_SEEDS: + case MELON_SEEDS: + case PUMPKIN_SEEDS: + return block==Material.SOIL; + case NETHER_STALK: + return block== Material.SOUL_SAND; + case SUGAR_CANE: + return block== Material.DIRT || block== Material.SAND; + case CACTUS: + return block== Material.SAND; + } + return true; + } + + public static void updateBoard(Player player, User user, ViceUser viceUser) { + if (!user.getPref(Pref.USE_SCOREBOARD) || user.isInTutorial()) { + player.setScoreboard(Bukkit.getScoreboardManager().getNewScoreboard()); + return; + } + Board board = new Board("vice", "&d&lVice&7&lMC", BoardType.LIST); + board.addLine("&a&lMoney"); + board.addLine(' ' + Utils.formatMoney(viceUser.getMoney())); + board.addLine("&a"); + if (viceUser.isCop()) { + board.addLine("&3&lCop Rank"); + board.addLine(' ' + viceUser.getCopRank().getName()); + } else { + ViceRank rank = viceUser.getRank(); + ViceRank next = rank.getNext(); + int cost = next == null ? 0 : next.getPrice(); + board.addLine(Utils.f("&e&lRank Info")); + board.addLine(Utils.f(" &7Current: &r" + viceUser.getRank())); + if (next != null) { + board.addLine(Utils.f(" &7Next: &r" + next.getColoredName())); + board.addLine(Utils.f(" &7Cost: &r" + Utils.formatMoney(next.getPrice()))); + board.addLine(Utils.f(viceUser.hasMoney(cost) ? " &7Use &a/rankup&7 to progress!" : " &7Progress: &r" + (100 * Utils.round(viceUser.getMoney() / cost)) + "%")); + } + } + board.addLine(Utils.f("&b")); + board.addLine(Utils.f("&6&lServer IP")); + board.addLine(Utils.f(" mc-gtm.net")); + board.updateFor(player, Core.getUserManager().getLoadedUser(player.getUniqueId())); + } + + public static void removeBoard(Player player) { + player.setScoreboard(Bukkit.getScoreboardManager().getNewScoreboard()); + } + + public static String getWantedLevelStars(int i) { + String[] wantedLevels = new String[]{"✩✩✩✩✩", "✮✩✩✩✩", "✮✮✩✩✩", "✮✮✮✩✩", "✮✮✮✮✩", "✮✮✮✮✮"}; + return wantedLevels[i]; + } + + public static void giveGameItems(Player player) { + ItemStack phone = Utils.createItem(Material.WATCH, "&7&lPhone"); + ItemStack bp = Utils.createItem(Material.CHEST, "&6&lBackpack"); + ItemStack ammoPouch = Utils.createItem(Material.CHEST, "&c&lAmmo Pouch"); + Inventory inv = player.getInventory(); + if (!inv.contains(phone)) + if (inv.getItem(8) == null) + inv.setItem(8, phone); + else + inv.addItem(phone); + if(!inv.contains(bp)) + inv.setItem(17, bp); + if(!inv.contains(ammoPouch)) + inv.setItem(16, ammoPouch); + } + + + + public static boolean isPhone(ItemStack item) { + return item != null && Objects.equals(item, Utils.createItem(Material.WATCH, "&7&lPhone")); + } + + public static String getMessageKilledBy(String name) { + String[] msges = new String[]{"Shanked by " + name, "Rekt by " + name, "Killed by " + name, + name + " killed you", name + " clapped yo ass", name + " killed you"}; + return msges[Utils.getRandom().nextInt(msges.length)]; + } + + public static void sendJoinMessage(Player p, User u) { + p.sendMessage(new String[]{"", "", "", "", "", "", "", "", "", "", Utils.f(HEADER), "", + Utils.fc("Welcome, " + u.getColoredName(p) + "&r to &d&lVice&7&lMC&r! "), + Utils.fc("&e&l&oDrug Cartels in Minecraft! "), "", Utils.fc("&e&lSTORE &r&nstore.grandtheftmc.net"), + Utils.fc("&a&lSITE &r&ngrandtheftmc.net "), "", Utils.fc("&7Use &a/tutorial&7 to get started!"), + "", Utils.f(FOOTER), ""}); + + } + + public static List<ViceUser> getCops() { + return Vice.getUserManager().getLoadedUsers().stream().filter(ViceUser::isCop).collect(Collectors.toList()); + } + + public static Map<ViceUser, Integer> sort(Map<ViceUser, Integer> unsortMap) { + List<Map.Entry<ViceUser, Integer>> list = new LinkedList<>(unsortMap.entrySet()); + list.sort(Comparator.comparing(obj -> obj.getValue())); + Map<ViceUser, Integer> sortedMap = new LinkedHashMap<>(); + for (Map.Entry<ViceUser, Integer> entry : list) { + sortedMap.put(entry.getKey(), entry.getValue()); + } + return sortedMap; + } + + public static List<Player> getJailedPlayers() { + List<Player> players = new ArrayList<>(); + for (Player p : Bukkit.getOnlinePlayers()) { + ViceUser viceUser = Vice.getUserManager().getLoadedUser(p.getUniqueId()); + if (viceUser.isArrested()) { + players.add(p); + } + } + return players; + } + + public static String toBase64(ItemStack[] array) { + if (array == null) + return null; + try { + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + try (BukkitObjectOutputStream dataOutput = new BukkitObjectOutputStream(outputStream)) { + + dataOutput.writeInt(array.length); + for (ItemStack stack : array) + dataOutput.writeObject(stack); + dataOutput.close(); + } + return Base64Coder.encodeLines(outputStream.toByteArray()); + } catch (Exception e) { + Vice.getInstance().getLogger().log(Level.ALL, "Error while serializing items!"); + e.printStackTrace(); + return null; + } + } + + public static ItemStack[] fromBase64(String data) { + if (data == null) + return new ItemStack[0]; + try { + ByteArrayInputStream inputStream = new ByteArrayInputStream(Base64Coder.decodeLines(data)); + ItemStack[] array; + try (BukkitObjectInputStream dataInput = new BukkitObjectInputStream(inputStream)) { + array = new ItemStack[dataInput.readInt()]; + // Read the serialized inventory + for (int i = 0; i < array.length; i++) + array[i] = (ItemStack) dataInput.readObject(); + + dataInput.close(); + } + return array; + } catch (Exception e) { + Vice.getInstance().getLogger().log(Level.ALL, "Error while deserializing items: " + data); + e.printStackTrace(); + return new ItemStack[0]; + } + } + + public static int getGangMembers(UserRank userRank) { + switch (userRank) { + case DEFAULT: + return 0; + case VIP: + return 2; + case PREMIUM: + return 5; + case ELITE: + return 10; + case SPONSOR: + return 15; + default: + return 20; + } + } + + private final static List<String> DEFAULT_ITEMS = new ArrayList<>(Arrays.asList("Phone", "Backpack", "Ammo Pouch")); + public static boolean isDefaultPlayerItem(ItemStack is) { + return is!=null && is.hasItemMeta() && is.getItemMeta().hasDisplayName() && DEFAULT_ITEMS.contains(ChatColor.stripColor(is.getItemMeta().getDisplayName())); + } + + public static String upperCaseFirst(String s) { + return s.substring(0, 1).toUpperCase() + s.substring(1, s.length()).toLowerCase(); + } + + public static int getTimeInJailForDrugs(Player player) { // IN SECONDS + Map<Schedule, Integer> drugs = new HashMap<>(); + for (ItemStack item : player.getInventory().getContents()) { + GameItem gameItem = Vice.getItemManager().getItem(item); + if (gameItem != null && gameItem.isScheduled()) { + Schedule s = gameItem.getSchedule(); + drugs.put(s, drugs.getOrDefault(s, 0) + item.getAmount()); + } + } + int i = drugs.entrySet().stream().mapToInt(entry -> (int) (getTimeInJail(entry.getValue()) * entry.getKey().getJailMultiplier())).sum(); + return i > 900 ? 900 : i; + } + + private static int getTimeInJail(int drugs) { // IN SECONDS + if (drugs <= 64) + return 60; + if (drugs <= 256) + return 120; + if (drugs <= 512) + return 180; + return 300; + } + + public static int getCopMoney(int wl) { + return new int[]{0, 2000, 5000, 10000, 20000, 50000}[wl]; + } + + public static int getFeedDelay(UserRank rank) {// IN SECONDS + switch (rank) { + case DEFAULT: + return 1800; + case VIP: + return 900; + case PREMIUM: + return 600; + case ELITE: + return 300; + case SPONSOR: + return 180; + default: + return 120; + } + + } + public static int getFixHandDelay(UserRank rank) {// IN SECONDS + switch (rank) { + case DEFAULT: + return 60*60; + case VIP: + return 60*30; + case PREMIUM: + return 60*20; + case ELITE: + return 60*15; + case SPONSOR: + return 60*10; + case SUPREME: + return 60*5; + default: + return 60*5; + } + + } + + public static boolean isTool(Material mat) { + String s = mat.toString(); + return s.contains("SPADE") || s.contains("PICKAXE") || s.contains("AXE") || s.contains("HOE"); + } + + public static boolean isArmorPiece(Material mat) { + String s = mat.toString(); + return s.contains("LEGGINGS") || s.contains("BOOTS") || s.contains("HELMET") || s.contains("CHESTPLATE"); + } + + public static int getFixAllDelay(UserRank rank) {// IN SECONDS + switch (rank) { + default: + return 60*60*24; + } + + } + + public static int getSetHomes(ViceRank rank) { + switch (rank) { + case JUNKIE: + case FALCON: + case THUG: + case DEALER: + return 0; + case GROWER: + case SMUGGLER: + case CHEMIST: + case DRUGLORD: + return 2; + default: + return 3; + } + } + + public static int getSetHomes(UserRank rank) { + switch (rank) { + case DEFAULT: + return 1; + case VIP: + return 2; + case PREMIUM: + return 4; + case ELITE: + return 7; + case SPONSOR: + return 12; + default: + return 20; + } + } + + public static int getBackpackRows(UserRank rank) { + switch (rank) { + case DEFAULT: + return 2; + case VIP: + return 3; + case PREMIUM: + return 5; + case ELITE: + return 7; + case SPONSOR: + return 9; + default: + return 11; + } + } + + public static int getStartingMoney(UserRank rank) { + switch (rank) { + case DEFAULT: + return 5000; + case VIP: + return 100000; + case PREMIUM: + return 250000; + case ELITE: + return 500000; + case SPONSOR: + return 1000000; + default: + return 2000000; + } + } + + public static int getStartingBonds(UserRank rank) { + switch (rank) { + case DEFAULT: + case VIP: + case PREMIUM: + case ELITE: + return 0; + case SPONSOR: + return 5; + default: + return 10; + } + } + + + public static int getFreeLotteryTickets(UserRank userRank) { + switch (userRank) { + case DEFAULT: + return 0; + case VIP: + return 1; + case PREMIUM: + return 2; + case ELITE: + return 5; + case SPONSOR: + return 10; + default: + return 20; + } + } + + public static int getWarpDelay(UserRank userRank) { + switch (userRank) { + case DEFAULT: + return 15; + case VIP: + return 12; + case PREMIUM: + return 10; + case ELITE: + return 8; + case SPONSOR: + return 6; + default: + return 5; + } + } + + public static int getNearRange(UserRank rank) { + switch (rank) { + case VIP: + return 50; + case PREMIUM: + return 75; + case ELITE: + return 100; + case SPONSOR: + return 125; + case SUPREME: + return 150; + default: + return 100; + } + } + + public static int getStackDelay(UserRank rank) { + switch (rank) { + case HELPOP: + case MOD: + case SRMOD: + case ADMIN: + return 30; + case DEV: + case MANAGER: + case OWNER: + return 1; + default: + return 60; + } + } + + public static double getDrugSellModifier(UserRank rank){ + switch (rank) { + case DEFAULT: + return 1; + case VIP: + return 1.05; + case PREMIUM: + return 1.1; + case ELITE: + return 1.2; + case SPONSOR: + return 1.3; + case SUPREME: + return 1.5; + default: + return 1.5; + } + } + + /* + * public static String serialize(ItemStack[] a) { StringBuilder b = new + * StringBuilder(); for (int i = 0; i < a.length; i++) { if (i > 0) + * b.append(","); ItemStack items = a[i]; try { + * b.append(StreamSerializer.getDefault().serializeItemStack(items)); } catch + * (Exception e) { b.append("null"); System.out.println( + * "Error while serializing an items (" + i + "): " + + * e.getCause().getMessage()); } } return b.toString(); } + * + * public static ItemStack[] deserialize(String s) { if (s == null || + * s.length() == 0) return new ItemStack[0]; String[] a = s.split(","); + * ItemStack[] array = new ItemStack[a.length]; for (int i = 0; i < + * a.length; i++) { try { array[i] = + * StreamSerializer.getDefault().deserializeItemStack(a[i]); } catch + * (Exception e) { array[i] = null; System.out.println( + * "Error while deserializing an items (" + i + "): " + e.getMessage()); } } + * return array; } + */ + + public static boolean isValidURL(String string) { + String urlRegex = "^((https?|ftp)://|(www|ftp)\\.)?[a-z0-9-]+(\\.[a-z0-9-]+)+([/?].*)?$"; + Pattern p = Pattern.compile(urlRegex); + Matcher m = p.matcher(string); + return m.find(); + } + + public static double getCrossProduct(LivingEntity livingEntity, Location target) { + if (livingEntity.getWorld() != target.getWorld()) return 10000; + Location head = livingEntity.getLocation(); + org.bukkit.util.Vector look = livingEntity.getLocation().getDirection().normalize(); + org.bukkit.util.Vector direction = head.subtract(target).toVector().normalize(); + org.bukkit.util.Vector cp = direction.crossProduct(look); + return cp.length(); + } + + public static String serializeLocation(Location location) { + if (location == null) + return null; + String world = location.getWorld() == null ? null : location.getWorld().getName(); + String x = String.valueOf(location.getX()); + String y = String.valueOf(location.getY()); + String z = String.valueOf(location.getZ()); + String yaw = String.valueOf(location.getYaw()); + String pitch = String.valueOf(location.getPitch()); + return world + '@' + x + '@' + y + '@' + z + '@' + yaw + '@' + pitch; + } + + public static Optional<Location> deserializeLocation(String loc) { + String[] args = loc.split("@"); + World world = Bukkit.getWorld(args[0]); + double x = Double.valueOf(args[1]); + double y = Double.valueOf(args[2]); + double z = Double.valueOf(args[3]); + float yaw = Float.valueOf(args[4]); + float pitch = Float.valueOf(args[5]); + Location location = new Location(world, x, y, z, yaw, pitch); + return Optional.ofNullable(location); + } + + public static String convertItemStackToJson(ItemStack itemStack) { + Class<?> craftItemStackClazz = ReflectionUtil.getOBCClass("inventory.CraftItemStack"); + Method asNMSCopyMethod = ReflectionUtil.getMethod(craftItemStackClazz, "asNMSCopy", ItemStack.class); + Class<?> nmsItemStackClazz = ReflectionUtil.getNMSClass("ItemStack"); + Class<?> nbtTagCompoundClazz = ReflectionUtil.getNMSClass("NBTTagCompound"); + Method saveNmsItemStackMethod = ReflectionUtil.getMethod(nmsItemStackClazz, "save", nbtTagCompoundClazz); + + Object nmsNbtTagCompoundObj; + Object nmsItemStackObj; + Object itemAsJsonObject; + + try { + nmsNbtTagCompoundObj = nbtTagCompoundClazz.newInstance(); + nmsItemStackObj = asNMSCopyMethod.invoke(null, itemStack); + itemAsJsonObject = saveNmsItemStackMethod.invoke(nmsItemStackObj, nmsNbtTagCompoundObj); + } catch (Throwable t) { + return null; + } + + return itemAsJsonObject.toString(); + } + + public static double getRecentTPS() { + return 20; + } + + public static void moneylog(Player sender, Player target, double amount) { + NumberFormat formatter = NumberFormat.getCurrencyInstance(); + String fileName = new SimpleDateFormat("MM-dd-yy").format(new Date()); + File file = new File("vicelogs/moneylog_" + fileName + ".txt"); + try { + if (!file.isFile() || !file.exists()) + file.createNewFile(); + } catch (IOException exception) { + exception.printStackTrace(); + } + String date = new SimpleDateFormat("MM/dd/yy - h:mm a").format(new Date()); + try (BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(file, true))) { + bufferedWriter.write(date + " - " + sender.getName() + " sent " + formatter.format(amount) + " to " + target.getName() + '\n'); + bufferedWriter.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public static void log(String logName, String msg) { + String fileName = new SimpleDateFormat("MM-dd-yy").format(new Date()); + File file = new File("Vicelogs/" + logName + '_' + fileName + ".txt"); + try { + if (!file.isFile() || !file.exists()) { + file.createNewFile(); + } + String date = new SimpleDateFormat("MM/dd/yy - h:mm a").format(new Date()); + FileWriter fileWriter = new FileWriter(file, true); + try (BufferedWriter bufferedWriter = new BufferedWriter(fileWriter)) { + bufferedWriter.write(date + " - " + msg + '\n'); + } + } catch (IOException exception) { + exception.printStackTrace(); + } + } + + public static GameItem getRandomGameItem() { + List<GameItem> gameItems = Vice.getItemManager().getItems().stream().filter(gameItem -> gameItem.getType() == GameItem.ItemType.ITEMSTACK || gameItem.getType() == GameItem.ItemType.WEAPON).collect(Collectors.toList()); + return gameItems.get(ThreadLocalRandom.current().nextInt(gameItems.size())); + } + + public static Warp getNearestWarp(Location location) { + Warp nearestWarp = null; + for (Warp warp : Vice.getWorldManager().getWarpManager().getWarps()) { + if (warp.getLocation().getWorld() != location.getWorld()) continue; + if (nearestWarp == null || + warp.getLocation().distance(location) < nearestWarp.getLocation().distance(location)) { + nearestWarp = warp; + } + } + return nearestWarp; + } + + public static Map<String, Integer> getTopKillers(int count) { + Map<String, Integer> topKillers = new HashMap<>(); +// try { +// ResultSet resultSet = Core.getSQL().query("SELECT * FROM " + Core.name() + " ORDER BY kills DESC LIMIT " + count + ';'); +// while (resultSet.next()) { +// topKillers.put(resultSet.getString("name"), resultSet.getInt("kills")); +// } +// resultSet.close(); +// } catch (Exception ignored) { +// } + + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("SELECT * FROM " + Core.name() + " ORDER BY kills DESC LIMIT " + count + ';')) { + try (ResultSet result = statement.executeQuery()) { + while (result.next()) { + topKillers.put(result.getString("name"), result.getInt("kills")); + } + } + } + } catch (SQLException e) { + e.printStackTrace(); + } + + return topKillers; + } + + public static <K, V extends Comparable<? super V>> Map<K, V> sortByValue(Map<K, V> map) { + return map.entrySet() + .stream() + .sorted(Map.Entry.comparingByValue(Collections.reverseOrder())) + .collect(Collectors.toMap( + Map.Entry::getKey, + Map.Entry::getValue, + (e1, e2) -> e1, + LinkedHashMap::new + )); + } + + public static boolean isInteger(String s) { + try { + Integer.parseInt(s); + } catch (NumberFormatException e) { + return false; + } + return true; + } + + public static void spawnTinyArmorStand(Location location, String username, String title) { + ArmorStand armorStand = (ArmorStand) location.getWorld().spawnEntity(location, EntityType.ARMOR_STAND); + armorStand.setSmall(true); + armorStand.setBasePlate(false); + ItemStack skull = Utils.createItem(Material.SKULL_ITEM, 3, Utils.f(username)); + SkullMeta meta = (SkullMeta) skull.getItemMeta(); + meta.setOwner(username); + skull.setItemMeta(meta); + armorStand.setHelmet(skull); + armorStand.setCustomNameVisible(true); + armorStand.setCustomName(Utils.f(title)); + } + + public static void sendGlow(Player player, Player target, long time) { + PacketContainer packet = Vice.getProtocolManager().createPacket(PacketType.Play.Server.ENTITY_METADATA); + packet.getIntegers().write(0, target.getEntityId()); + WrappedDataWatcher watcher = new WrappedDataWatcher(); + WrappedDataWatcher.Serializer serializer = WrappedDataWatcher.Registry.get(Byte.class); + watcher.setEntity(target); + watcher.setObject(0, serializer, (byte) 0x40); + packet.getWatchableCollectionModifier().write(0, watcher.getWatchableObjects()); + try { + Vice.getProtocolManager().sendServerPacket(player, packet); + } catch (InvocationTargetException e) { + e.printStackTrace(); + } + new BukkitRunnable() { + @Override + public void run() { + removeGlow(player, target); + } + }.runTaskLaterAsynchronously(Vice.getInstance(), time); + } + + public static void removeGlow(Player player, Player target) { + PacketContainer packet = Vice.getProtocolManager().createPacket(PacketType.Play.Server.ENTITY_METADATA); + packet.getIntegers().write(0, target.getEntityId()); + WrappedDataWatcher watcher = new WrappedDataWatcher(); + WrappedDataWatcher.Serializer serializer = WrappedDataWatcher.Registry.get(Byte.class); + watcher.setEntity(target); + watcher.setObject(0, serializer, (byte) 0x0); + packet.getWatchableCollectionModifier().write(0, watcher.getWatchableObjects()); + try { + Vice.getProtocolManager().sendServerPacket(player, packet); + } catch (InvocationTargetException e) { + e.printStackTrace(); + } + } + + public static Month getMonth() { + return LocalDate.now(ZoneId.systemDefault()).getMonth(); + + } + + public static int getDay() { + return LocalDate.now(ZoneId.systemDefault()).getDayOfMonth(); + } + + public static ChatColor randomColor() { + int a = ThreadLocalRandom.current().nextInt(16); + switch (a) { + case 1: + return ChatColor.GREEN; + case 2: + return ChatColor.DARK_GREEN; + case 3: + return ChatColor.BLUE; + case 4: + return ChatColor.DARK_RED; + case 5: + return ChatColor.DARK_PURPLE; + case 6: + return ChatColor.GOLD; + case 7: + return ChatColor.GRAY; + case 8: + return ChatColor.DARK_GRAY; + case 9: + return ChatColor.DARK_BLUE; + case 10: + return ChatColor.GREEN; + case 11: + return ChatColor.AQUA; + case 12: + return ChatColor.RED; + case 13: + return ChatColor.LIGHT_PURPLE; + case 14: + return ChatColor.YELLOW; + default: + return ChatColor.AQUA; + } + } + +// public static CoreNPC createNPC(Location location, String uuid, String displayName) { +// GameProfile prof; +// try { +// prof = new ProfileBuilder(displayName).applySkin(UUID.fromString(uuid)).build(); +// } catch (SkinLookupException e) { +// e.printStackTrace(); +// return null; +// } +// +// try { +// CoreNPC npc = new CoreNPC_1_12_R1(location, UUID.randomUUID().toString(), prof); +// npc.setArmour(); +// npc.spawn(); +// return npc; +// } catch (DuplicateIdentifierException e) { +// e.printStackTrace(); +// return null; +// } +// } + + /* Property example: + skin18488.getProperties().put("textures", new Property( + "textures", + "eyJ0aW1lc3RhbXAiOjE0OTk2OTMzMDMzODEsInByb2ZpbGVJZCI6IjQzYTgzNzNkNjQyOTQ1MTBhOWFhYjMwZjViM2NlYmIzIiwicHJvZmlsZU5hbWUiOiJTa3VsbENsaWVudFNraW42Iiwic2lnbmF0dXJlUmVxdWlyZWQiOnRydWUsInRleHR1cmVzIjp7IlNLSU4iOnsidXJsIjoiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS82ZDg2NmFmYmZiNGFkMDE4YWYzZDUzY2M3ZjMyMmFlNzUwYTUyZjQ3OTNkNzg5YTcxNTI1YmJlZmRlOTI4M2MifX19", + "HLaxBLtNoquUFZNH4OTD/C1lGgTgYsde5qVp3Qm6cIAUZISG3KPIG/Rd53NupJgbYVe/lgA/QlnxjJ8QvpWhZOT9qPCVicAUHKGk5lVZGx3zTgf0DYHgNwd++lYFIHzFzke5VGtrd4DRtev/NplmO3KJ7orRbNFWwL1HqI9OQQNH/6cE6WKz3ecfohdwhA9E2LsL3Tljr4b3Q5heK5Q5WdSsTa7GCX/sxSFp8XHqedQEMWMc2Q72dXlGuiJ3+9HVu8XTzfE30sCYUdXk4CkZ5lWaL2M521lsve+c+gbfDXakZzmcAXd1E11sGEzrGnsr/78KMSie6u/noRFFb5lgGN3scQogRClHgHNql25S0o5QW6NWnwHEd5+fOfcpRZq45XW57aj0qTZLxZpWrn6mWddZHs5OWJ99wChsUj6Tj3Z+rtptHBqEBdj4Cd33zFT6B9Os3GveEpDx1MOV+dG6l6zBVdWy5Sg1oGJxQlYbLy5/FesYIXLXpkK9sU1mPQFmNg2YlF9j87bo8PHU6GngN6fqA+xwlEaLYVkaRkbaQMwD8eotTWKJRFyAEkCnjOBeOG/bQKpIbRfJ+k/N9/K18oUoazd6dnEtDVOogQTVvQPxlV8iZO08GwCfbBJBZzIijw7CPc7RkreFeye0hhfUjuFpSPDkqarccINA0C0d+VE=")); + */ + public static void createNPC(Location location, String uuid, String displayName, com.mojang.authlib.properties.Property texture) { +// GameProfile prof; +// try { +// prof = new ProfileBuilder(displayName).applySkin(UUID.fromString(uuid)).build(); +// } catch (SkinLookupException e) { +// e.printStackTrace(); +// return; +// } +// +// try { +// GameProfile skin18488 = new GameProfile(UUID.fromString(uuid), displayName); +// skin18488.getProperties().put("textures", texture); +// +// CoreNPC npc = new CoreNPC(location, UUID.randomUUID().toString(), skin18488); +// npc.setArmour(); +// npc.setHeadRotation(0F); +// npc.spawn(); +// } catch (DuplicateIdentifierException e) { +// e.printStackTrace(); +// } + } + public static boolean isInSpawnRange(Player player, double range) { + return Vice.getWorldManager().getWarpManager().getSpawn() != null && Vice.getWorldManager().getWarpManager().getSpawn().getLocation().distance(player.getLocation()) < range; +} + + public static boolean ascendLevel(Player player) { + Location pos = player.getLocation(); + int x = pos.getBlockX(); + int y = Math.max(0, pos.getBlockY()); + int z = pos.getBlockZ(); + World world = pos.getWorld(); + + byte free = 0; + byte spots = 0; + while (y <= 256 + 2) { + if (world.getBlockAt(x, y, z).isEmpty()) { + free += 1; + } else { + free = 0; + } + if (free == 2) { + spots += 1; + if (spots == 2) { + Block block = world.getBlockAt(x, y - 2, z); + int type = block.getTypeId(); + if ((type == 10) || (type == 11)) { + return false; + } + + player.teleport(new Location(world, pos.getX(), y - 1, pos.getZ(), pos.getYaw(), pos.getPitch())); + return true; + } + } + y++; + } + return false; + } + + public static boolean descendLevel(Player player) { + Location pos = player.getLocation(); + int x = pos.getBlockX(); + int y = Math.max(0, pos.getBlockY() - 1); + int z = pos.getBlockZ(); + World world = pos.getWorld(); + + byte free = 0; + while (y >= 1) { + if (world.getBlockAt(x, y, z).isEmpty()) { + free += 1; + } else { + free = 0; + } + if (free == 2) { + while (y >= 0) { + Block block = world.getBlockAt(x, y, z); + int type = block.getTypeId(); + if ((type != 0) && (type != 10) && (type != 11)) { + player.teleport(new Location(world, pos.getX(), y + 1, pos.getZ(), pos.getYaw(), pos.getPitch())); + return true; + } + y--; + } + return false; + } + y--; + } + return false; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/areas/AreaManager.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/areas/AreaManager.java new file mode 100644 index 0000000..d47c6a0 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/areas/AreaManager.java @@ -0,0 +1,301 @@ +package net.grandtheftmc.vice.areas; + +import com.google.common.collect.Sets; +import com.massivecraft.factions.integration.Worldguard; +import com.sk89q.worldedit.BlockVector; +import com.sk89q.worldguard.bukkit.WorldGuardPlugin; +import com.sk89q.worldguard.protection.flags.BooleanFlag; +import com.sk89q.worldguard.protection.managers.RegionManager; +import com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion; +import com.sk89q.worldguard.protection.regions.ProtectedRegion; +import net.grandtheftmc.core.util.Component; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.areas.builder.AreaBuilder; +import net.grandtheftmc.vice.areas.dao.AreaDAO; +import net.grandtheftmc.vice.areas.listeners.AreaBuilderListener; +import net.grandtheftmc.vice.areas.listeners.AreaListener; +import net.grandtheftmc.vice.areas.obj.Area; +import net.grandtheftmc.vice.areas.obj.AreaUser; +import net.grandtheftmc.vice.areas.tasks.AreaUpdater; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.block.Chest; +import org.bukkit.block.DoubleChest; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.scheduler.BukkitTask; + +import java.util.Arrays; +import java.util.List; +import java.util.Set; +import java.util.UUID; + +public class AreaManager implements Component<AreaManager, Vice>{ + + private final Vice plugin; + private BukkitTask updateTask; + + private Set<AreaUser> areaUsers; + private Set<Area> areas; + private Set<AreaBuilder> builders; + + private final AreaListener areaListener; + private final AreaBuilderListener areaBuilderListener; + + public AreaManager(Vice plugin) { + this.plugin = plugin; + + this.areaUsers = Sets.newConcurrentHashSet(); + this.areas = Sets.newHashSet(); + this.builders = Sets.newConcurrentHashSet(); + + this.areaListener = new AreaListener(plugin, this); + this.areaBuilderListener = new AreaBuilderListener(plugin, this); + + updateTask = Bukkit.getScheduler().runTaskTimer(plugin, new AreaUpdater(this), 20L, 20L); + + Vice.getCrateManager().getCrates().clear(); + Vice.getCrateManager().saveCrates(); + + WorldGuardPlugin worldguard = WorldGuardPlugin.inst(); + ServerUtil.runTaskAsync(() -> { + Set<Area> set = AreaDAO.loadBySeason(plugin.getSeasonManager().getCurrentSeason().getNumber()); + for (Area a : set) { + RegionManager manager = worldguard.getRegionManager(a.getWorld()); + + ProtectedRegion region = null; + boolean exists = manager.hasRegion(a.getName()); + if (!exists) region = new ProtectedCuboidRegion(a.getName(), new BlockVector(a.getMaxX(), a.getWorld().getMaxHeight(), a.getMaxZ()), new BlockVector(a.getMinX(), 1, a.getMinZ())); + else region = manager.getRegion(a.getName()); + + if (region != null) { + region.setFlag(new BooleanFlag("build"), true); + region.setFlag(new BooleanFlag("entity-item-frame-destroy"), true); + region.setFlag(new BooleanFlag("vehicle-place"), true); + region.setFlag(new BooleanFlag("creeper-explosion"), true); + region.setFlag(new BooleanFlag("enderdragon-block-damage"), true); + region.setFlag(new BooleanFlag("ghast-fireball"), true); + region.setFlag(new BooleanFlag("other-explosion"), true); + region.setFlag(new BooleanFlag("fire-spread"), true); + region.setFlag(new BooleanFlag("enderman-grief"), true); + region.setFlag(new BooleanFlag("entity-painting-destroy"), true); + region.setFlag(new BooleanFlag("entity-item-frame-destroy"), true); + region.setFlag(new BooleanFlag("leaf-decay"), true); + + if (!exists) { + manager.addRegion(region); + System.out.println("Region created: " + a.getName()); + } + } + + this.areas.add(a); + + + ServerUtil.runTask(() -> { + for (int x = a.getRealMinX(); x < a.getRealMaxX(); x++) { + for (int z = a.getRealMinZ(); z < a.getRealMaxZ(); z++) { + for (int y = 0; y < a.getWorld().getMaxHeight(); y++) { + + Block block = a.getWorld().getBlockAt(x, y, z); + if (block.getType() != Material.CHEST) continue; + if (block.getState() == null) continue; + if (!(block.getState() instanceof Chest)) continue; + if (block.getState() instanceof DoubleChest) continue; + + a.addChest((Chest) block.getState()); + Vice.getCrateManager().addCrate(block.getState().getLocation()); + System.out.println("Added chest(" + a.getChests().size() + ") for Area: " + a.getName()); + } + } + } + }); + } + }); + } + + @Override + public AreaManager onDisable(Vice plugin) { + this.updateTask.cancel(); + return this; + } + + /** + * Returns a new Area object based on the given info + * @param name + * @param c1 + * @param c2 + * @return + */ + public Area createArea(String name, Location c1, Location c2) { + return new Area( + (areas.size() + 1), + plugin.getSeasonManager().getCurrentSeason().getNumber(), + name, + c1.getWorld().getName(), + c1.getBlockX(), + c2.getBlockX(), + c1.getBlockZ(), + c2.getBlockZ()); + } + + /** + * Returns a new AreaBuilder object based on the given info + * @param name + * @param creator + * @return + */ + public AreaBuilder createBuilder(String name, UUID creator) { + return new AreaBuilder( + name, + creator + ); + } + + /** + * Returns a new Area object from the given AreaBuilder object + * @param builder + * @return + */ + public Area convertBuilderToArea(AreaBuilder builder) { + return createArea(builder.getName(), builder.getCorner1(), builder.getCorner2()); + } + + /** + * Returns true if the given UUID is currently are the given Area + * @param uuid + * @param area + * @return + */ + public boolean isAt(UUID uuid, Area area) { + AreaUser user = getUserByUUID(uuid); + + if(user == null || user.getCurrent() == -1) return false; + + int resultId = user.getCurrent(); + int id = area.getID(); + + return resultId == id; + } + + /** + * Returns true if the given UUID is building an Area + * @param uuid + * @return + */ + public boolean isBuilding(UUID uuid) { + return getBuilderByUserUUID(uuid) != null; + } + + /** + * Returns an Area object matching the given ID + * @param id + * @return + */ + public Area getAreaById(int id) { + return areas.stream().filter(area -> area.getID() == id).findFirst().orElse(null); + } + + /** + * Returns an Area object matching the given name + * @param name + * @return + */ + public Area getAreaByName(String name) { + return areas.stream().filter(area -> area.getName().equalsIgnoreCase(name)).findFirst().orElse(null); + } + + /** + * Returns an AreaUser object matching the given UUID + * @param uuid + * @return + */ + public AreaUser getUserByUUID(UUID uuid) { + return areaUsers.stream().filter(user -> user.getUUID().equals(uuid)).findFirst().orElse(null); + } + + /** + * Returns an AreaBuilder object matching the given Area Creator UUID + * @param uuid + * @return + */ + public AreaBuilder getBuilderByUserUUID(UUID uuid) { + return builders.stream().filter(builder -> builder.getCreator().equals(uuid)).findFirst().orElse(null); + } + + /** + * Returns a fancy claiming stick in the form of an ItemStack + * @return + */ + public ItemStack getAreaClaimStick() { + ItemStack item = new ItemStack(Material.STICK); + ItemMeta meta = item.getItemMeta(); + + meta.setDisplayName(ChatColor.GOLD + "Area Claiming Stick"); + meta.setLore(Arrays.asList( + ChatColor.BLUE + "Step 1" + ChatColor.WHITE + ": Left-click the first corner of the claim", + ChatColor.BLUE + "Step 2" + ChatColor.WHITE + ": Right-click the second corner of the claim", + ChatColor.BLUE + "Step 3" + ChatColor.WHITE + ": Left-click while sneaking to confirm the claim", + ChatColor.DARK_RED + "Optional" + ChatColor.WHITE + ": Right-click the air while sneaking to clear claim selection")); + + item.setItemMeta(meta); + + return item; + } + + /** + * Inefficiently sends perimeter block changes to the given player + * @param player + */ + public void drawNearby(Player player) { + final Location location = player.getLocation(); + Set<Location> toRefresh = Sets.newHashSet(); + + int areaColor = 1; + + for (Area area : areas) { + if (!area.getWorld().equals(player.getWorld())) continue; + + for (int i = location.getBlockY() - 2; i < location.getBlockY() + 5; i++) { + List<Location> perimeter = area.getPerimeter(area.getWorld().getUID(), i); + + for (Location blocks : perimeter) { + if (blocks.distance(location) > 40 || blocks.getBlock().getType().equals(Material.AIR)) continue; + + player.sendBlockChange(blocks, Material.WOOL, (byte)areaColor); + toRefresh.add(blocks); + } + } + + areaColor++; + } + + // Refreshing the blockstate 15 seconds later + ServerUtil.runTaskLater(() -> toRefresh.forEach(refreshedBlock -> refreshedBlock.getBlock().getState().update()), 15 * 20L); + } + + public Set<AreaUser> getAreaUsers() { + return this.areaUsers; + } + + public Set<Area> getAreas() { + return this.areas; + } + + public Set<AreaBuilder> getBuilders() { + return this.builders; + } + + public AreaListener getAreaListener() { + return this.areaListener; + } + + public AreaBuilderListener getAreaBuilderListener() { + return this.areaBuilderListener; + } + +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/areas/builder/AreaBuilder.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/areas/builder/AreaBuilder.java new file mode 100644 index 0000000..31b1107 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/areas/builder/AreaBuilder.java @@ -0,0 +1,42 @@ +package net.grandtheftmc.vice.areas.builder; + +import org.bukkit.Location; + +import java.util.UUID; + +public class AreaBuilder { + + private String name; + private UUID creator; + private Location c1, c2; + + public AreaBuilder(String name, UUID creator) { + this.name = name; + this.creator = creator; + } + + public String getName() { + return this.name; + } + + public UUID getCreator() { + return this.creator; + } + + public Location getCorner1() { + return this.c1; + } + + public Location getCorner2() { + return this.c2; + } + + public void setCorner1(Location location) { + this.c1 = location; + } + + public void setCorner2(Location location) { + this.c2 = location; + } + +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/areas/dao/AreaDAO.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/areas/dao/AreaDAO.java new file mode 100644 index 0000000..72abfa0 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/areas/dao/AreaDAO.java @@ -0,0 +1,175 @@ +package net.grandtheftmc.vice.areas.dao; + +import com.google.common.collect.Sets; +import net.grandtheftmc.core.database.BaseDatabase; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.areas.obj.Area; + +import java.sql.*; +import java.util.Set; + +public class AreaDAO { + + /* + Create: + CREATE TABLE IF NOT EXISTS area (id INT NOT NULL AUTO_INCREMENT,season INT NOT NULL,name VARCHAR(36) NOT NULL,world VARCHAR(16) NOT NULL,min_x INT NOT NULL,max_x INT NOT NULL,min_z INT NOT NULL,max_z INT NOT NULL,PRIMARY KEY (id)); + */ + + /** + * Insert the area in to the database + * Updates the Area ID upon completion + * @param area + * @return + */ + public static boolean insert(Area area) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("INSERT INTO `area` (`season`,`name`,`world`,`min_x`,`max_x`,`min_z`,`max_z`) VALUES(?,?,?,?,?,?,?);", Statement.RETURN_GENERATED_KEYS)) { + statement.setInt(1, area.getSeason()); + statement.setString(2, area.getName()); + statement.setString(3, area.getWorld().getName()); + statement.setInt(4, area.getMinX()); + statement.setInt(5, area.getMaxX()); + statement.setInt(6, area.getMinZ()); + statement.setInt(7, area.getMaxZ()); + + statement.executeUpdate(); + + try (ResultSet result = statement.getGeneratedKeys()) { + if (result.next()) { + area.setID(result.getInt(1)); + Vice.log("[AreaDAO] Updated area '" + area.getName() + "' ID to " + area.getID()); + + return true; + } + + Vice.error("[AreaDAO] Failed to find generated ID in 'insert' on Area: " + area.getName()); + return false; + } + } + } catch (SQLException e) { + Vice.error("[AreaDAO] Failed to execute 'insert' on Area: " + area.getName()); + e.printStackTrace(); + + return false; + } + } + + /** + * Delete the area by ID from the database + * @param id + * @return + */ + public static boolean delete(int id) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("DELETE FROM `area` WHERE `id`=?;")) { + statement.setInt(1, id); + + statement.execute(); + + return true; + } + } catch (SQLException e) { + Vice.error("[AreaDAO] Failed to execute 'delete' on Area: " + id); + e.printStackTrace(); + + return false; + } + } + + /** + * Update the name of the given area by ID in the database to the newly given name + * @param id + * @param newName + * @return + */ + public static boolean updateName(int id, String newName) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE `area` SET `name`=? WHERE `id`=?;")) { + statement.setString(1, newName); + statement.setInt(2, id); + + statement.execute(); + + return true; + } + } catch (SQLException e) { + Vice.error("[AreaDAO] Failed to execute 'updateName' on Area: " + id); + e.printStackTrace(); + + return false; + } + } + + /** + * Loads all seasons, regardless of season + * @return + */ + public static Set<Area> loadAll() { + Set<Area> areas = Sets.newHashSet(); + + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("SELECT * FROM `area`;")) { + try (ResultSet result = statement.executeQuery()) { + while (result.next()) { + int id = result.getInt("id"); + int season = result.getInt("season"); + String name = result.getString("name"); + String world = result.getString("world"); + int x1 = result.getInt("min_x"); + int x2 = result.getInt("max_x"); + int z1 = result.getInt("min_z"); + int z2 = result.getInt("max_z"); + + areas.add(new Area(id, season, name, world, x1, x2, z1, z2)); + } + + Vice.log("Loaded " + areas.size() + " Areas"); + return areas; + } + } + } catch (SQLException e) { + Vice.error("[AreaDAO] Failed to execute 'loadAll'"); + e.printStackTrace(); + + return areas; + } + } + + /** + * Loads all areas for a specific season + * @param season + * @return + */ + public static Set<Area> loadBySeason(int season) { + Set<Area> areas = Sets.newHashSet(); + + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("SELECT * FROM `area` WHERE `season`=?;")) { + statement.setInt(1, season); + + try (ResultSet result = statement.executeQuery()) { + while (result.next()) { + int id = result.getInt("id"); + String name = result.getString("name"); + String world = result.getString("world"); + int x1 = result.getInt("min_x"); + int x2 = result.getInt("max_x"); + int z1 = result.getInt("min_z"); + int z2 = result.getInt("max_z"); + + areas.add(new Area(id, season, name, world, x1, x2, z1, z2)); + } + + Vice.log("Loaded " + areas.size() + " Areas"); + return areas; + } + } + } catch (SQLException e) { + Vice.error("[AreaDAO] Failed to execute 'loadBySeason(" + season + ")'"); + e.printStackTrace(); + + return areas; + } + } + +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/areas/dao/DiscoveryDAO.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/areas/dao/DiscoveryDAO.java new file mode 100644 index 0000000..4327022 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/areas/dao/DiscoveryDAO.java @@ -0,0 +1,136 @@ +package net.grandtheftmc.vice.areas.dao; + +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import net.grandtheftmc.core.database.BaseDatabase; +import net.grandtheftmc.vice.Vice; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.Map; +import java.util.Set; +import java.util.UUID; + +public class DiscoveryDAO { + + /** + * Inserts the given values to the Discovery table + */ + public static boolean insert(UUID uuid, int season, int area) { + String id = uuid.toString().replaceAll("-", ""); + + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("INSERT INTO `discovery` (`uuid`,`season`,`area`) VALUES(UNHEX(?),?,?);")) { + statement.setString(1, id); + statement.setInt(2, season); + statement.setInt(3, area); + + statement.execute(); + + return true; + } + } catch (SQLException e) { + Vice.error("[DiscoveryDAO] Failed to execute 'insert'"); + e.printStackTrace(); + + return false; + } + } + + /** + * Removes all discoveries which match the given area ID + * @param area + * @return + */ + public static boolean deleteByArea(int area) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("DELETE FROM `discovery` WHERE `area`=?;")) { + statement.setInt(1, area); + + statement.execute(); + + return true; + } + } catch (SQLException e) { + Vice.error("[DiscoveryDAO] Failed to execute 'deleteByArea'"); + e.printStackTrace(); + + return false; + } + } + + /** + * Returns a Map containing all areas ever discovered by the given UUID + * Map<Season #, Set<Area ID>> + * @param uuid + * @return + */ + public static Map<Integer, Set<Integer>> getAllByUUID(UUID uuid) { + Map<Integer, Set<Integer>> areas = Maps.newHashMap(); + String id = uuid.toString().replaceAll("-", ""); + + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("SELECT * FROM `discovery` WHERE `uuid`=HEX(?);")) { + statement.setString(1, id); + + try (ResultSet result = statement.executeQuery()) { + while (result.next()) { + int season = result.getInt("season"); + int area = result.getInt("area"); + + if (areas.containsKey(season)) { + areas.get(season).add(area); + } else { + Set<Integer> newSet = Sets.newHashSet(); + newSet.add(area); + areas.put(season, newSet); + } + } + + return areas; + } + } + } catch (SQLException e) { + Vice.error("[DiscoveryDAO] Failed to execute 'getAllByUUID'"); + e.printStackTrace(); + + return areas; + } + } + + /** + * Returns a set containing all areas discovered by the given UUID during the given season + * @param uuid + * @param season + * @return + */ + public static Set<Integer> getSeasonByUUID(UUID uuid, int season) { + Set<Integer> areas = Sets.newHashSet(); + String id = uuid.toString().replaceAll("-", ""); + + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("SELECT * FROM `discovery` WHERE `uuid`=UNHEX(?) AND `season`=?;")) { + statement.setString(1, id); + statement.setInt(2, season); + + try (ResultSet result = statement.executeQuery()) { + while (result.next()) { + int area = result.getInt("area"); + + areas.add(area); + } + + return areas; + } + } + } catch (SQLException e) { + Vice.error("[DiscoveryDAO] Failed to execute 'getSeasonByUUID'"); + e.printStackTrace(); + + return areas; + } + } + +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/areas/events/AreaEnterEvent.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/areas/events/AreaEnterEvent.java new file mode 100644 index 0000000..962547f --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/areas/events/AreaEnterEvent.java @@ -0,0 +1,36 @@ +package net.grandtheftmc.vice.areas.events; + +import net.grandtheftmc.vice.areas.obj.Area; +import org.bukkit.entity.Player; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +public class AreaEnterEvent extends Event { + + private static final HandlerList handlers = new HandlerList(); + private final Player player; + private final Area area; + + public AreaEnterEvent(final Player player, final Area area) { + this.player = player; + this.area = area; + } + + public static final HandlerList getHandlerList() { + return handlers; + } + + @Override + public final HandlerList getHandlers() { + return handlers; + } + + public final Player getPlayer() { + return this.player; + } + + public final Area getArea() { + return this.area; + } + +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/areas/events/AreaLeaveEvent.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/areas/events/AreaLeaveEvent.java new file mode 100644 index 0000000..0730bcd --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/areas/events/AreaLeaveEvent.java @@ -0,0 +1,36 @@ +package net.grandtheftmc.vice.areas.events; + +import net.grandtheftmc.vice.areas.obj.Area; +import org.bukkit.entity.Player; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +public class AreaLeaveEvent extends Event { + + private static final HandlerList handlers = new HandlerList(); + private final Player player; + private final Area area; + + public AreaLeaveEvent(final Player player, final Area area) { + this.player = player; + this.area = area; + } + + public static final HandlerList getHandlerList() { + return handlers; + } + + @Override + public final HandlerList getHandlers() { + return handlers; + } + + public final Player getPlayer() { + return this.player; + } + + public final Area getArea() { + return this.area; + } + +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/areas/listeners/AreaBuilderListener.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/areas/listeners/AreaBuilderListener.java new file mode 100644 index 0000000..487b72b --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/areas/listeners/AreaBuilderListener.java @@ -0,0 +1,141 @@ +package net.grandtheftmc.vice.areas.listeners; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.areas.AreaManager; +import net.grandtheftmc.vice.areas.builder.AreaBuilder; +import net.grandtheftmc.vice.areas.dao.AreaDAO; +import net.grandtheftmc.vice.areas.obj.Area; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.player.PlayerDropItemEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.inventory.ItemStack; + +public class AreaBuilderListener implements Listener { + + private final AreaManager areaManager; + + public AreaBuilderListener(Vice plugin, AreaManager areaManager) { + this.areaManager = areaManager; + + Bukkit.getPluginManager().registerEvents(this, plugin); + } + + /** + * Removes player from area builders upon disconnecting + * @param event + */ + @EventHandler + public void onPlayerQuit(PlayerQuitEvent event) { + Player player = event.getPlayer(); + AreaBuilder builder = areaManager.getBuilderByUserUUID(player.getUniqueId()); + + if (builder == null) return; + + areaManager.getBuilders().remove(builder); + + for (ItemStack contents : player.getInventory()) { + if (contents == null || !contents.getType().equals(Material.STICK)) continue; + + if (!contents.hasItemMeta() || !contents.getItemMeta().getDisplayName().equals(areaManager.getAreaClaimStick().getItemMeta().getDisplayName())) continue; + + player.getInventory().remove(contents); + } + } + + /** + * Handles the claiming interactions + * @param event + */ + @EventHandler + public void onPlayerInteract(PlayerInteractEvent event) { + Player player = event.getPlayer(); + Action action = event.getAction(); + Block clickedBlock = event.getClickedBlock(); + ItemStack hand = player.getInventory().getItemInMainHand(); + + if (hand == null || !hand.getType().equals(Material.STICK)) return; + + if (!areaManager.isBuilding(player.getUniqueId())) return; + + AreaBuilder builder = areaManager.getBuilderByUserUUID(player.getUniqueId()); + + event.setCancelled(true); + + if (action.equals(Action.LEFT_CLICK_AIR) && player.isSneaking()) { + if (builder.getCorner1() == null || builder.getCorner2() == null) { + player.sendMessage(Lang.VICE.f("&cYou have not set both corners yet")); + return; + } + + Area area = areaManager.convertBuilderToArea(builder); + + areaManager.getAreas().add(area); + areaManager.getBuilders().remove(builder); + + ServerUtil.runTaskAsync(() -> AreaDAO.insert(area)); + + player.sendMessage(Lang.VICE.f("&aArea has been created")); + player.getInventory().setItemInMainHand(null); + + boolean drawNearby = false; + + for(Area areas : areaManager.getAreas()) { + if (!areas.isOverlapping(area.getMinX(), area.getMaxX(), area.getMinZ(), area.getMaxZ(), area.getWorld().getName()) || areas.getID() == area.getID()) continue; + + player.sendMessage(Lang.VICE.f("&cWarning! This area is overlapping &6" + areas.getName())); + drawNearby = true; + } + + if(drawNearby) { + areaManager.drawNearby(player); + + player.sendMessage(Lang.VICE.f("&eNearby areas have been temporarily drawn on your screen")); + } + } + + if (action.equals(Action.LEFT_CLICK_BLOCK)) { + builder.setCorner1(clickedBlock.getLocation()); + player.sendMessage(Lang.VICE.f("&aCorner #1 has been updated")); + return; + } + + if (action.equals(Action.RIGHT_CLICK_BLOCK)) { + builder.setCorner2(clickedBlock.getLocation()); + player.sendMessage(Lang.VICE.f("&aCorner #2 has been updated")); + return; + } + + if (action.equals(Action.RIGHT_CLICK_AIR)) { + builder.setCorner1(null); + builder.setCorner2(null); + player.sendMessage(Lang.VICE.f("&eArea claims have been reset")); + } + } + + @EventHandler + public void onPlayerDropItem(PlayerDropItemEvent event) { + Player player = event.getPlayer(); + ItemStack item = event.getItemDrop().getItemStack(); + + if (!item.getType().equals(Material.STICK)) return; + + if (!item.hasItemMeta() || !item.getItemMeta().getDisplayName().equals(areaManager.getAreaClaimStick().getItemMeta().getDisplayName())) return; + + event.getItemDrop().setItemStack(null); + + if (areaManager.isBuilding(player.getUniqueId())) { + areaManager.getBuilders().remove(areaManager.getBuilderByUserUUID(player.getUniqueId())); + player.sendMessage(Lang.VICE.f("&eYou are no longer creating this area")); + } + } + +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/areas/listeners/AreaListener.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/areas/listeners/AreaListener.java new file mode 100644 index 0000000..79ffac2 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/areas/listeners/AreaListener.java @@ -0,0 +1,89 @@ +package net.grandtheftmc.vice.areas.listeners; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.areas.AreaManager; +import net.grandtheftmc.vice.areas.dao.DiscoveryDAO; +import net.grandtheftmc.vice.areas.events.AreaEnterEvent; +import net.grandtheftmc.vice.areas.events.AreaLeaveEvent; +import net.grandtheftmc.vice.areas.obj.Area; +import net.grandtheftmc.vice.areas.obj.AreaUser; +import net.grandtheftmc.vice.utils.TitleBuilder; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.AsyncPlayerPreLoginEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import java.util.Set; +import java.util.UUID; + +public class AreaListener implements Listener { + + private final Vice plugin; + private final AreaManager areaManager; + + public AreaListener(Vice plugin, AreaManager areaManager) { + this.plugin = plugin; + this.areaManager = areaManager; + + Bukkit.getPluginManager().registerEvents(this, plugin); + } + + @EventHandler + public void onPlayerLogin(AsyncPlayerPreLoginEvent event) { + UUID uuid = event.getUniqueId(); + + Set<Integer> discoveries = DiscoveryDAO.getSeasonByUUID(uuid, plugin.getSeasonManager().getCurrentSeason().getNumber()); + AreaUser user = new AreaUser(uuid, discoveries); + + areaManager.getAreaUsers().add(user); + } + + @EventHandler + public void onPlayerQuit(PlayerQuitEvent event) { + AreaUser user = areaManager.getUserByUUID(event.getPlayer().getUniqueId()); + areaManager.getAreaUsers().remove(user); + } + + @EventHandler + public void onPlayerEnterArea(AreaEnterEvent event) { + Player player = event.getPlayer(); + Area area = event.getArea(); + AreaUser user = areaManager.getUserByUUID(player.getUniqueId()); + + user.setCurrent(area.getID()); + + if (!user.hasVisited(area.getID())) { + user.getVisited().add(area.getID()); + ServerUtil.runTaskAsync(() -> DiscoveryDAO.insert(player.getUniqueId(), plugin.getSeasonManager().getCurrentSeason().getNumber(), area.getID())); + + new TitleBuilder() + .setTitleText(ChatColor.LIGHT_PURPLE + area.getName().replace("_", " ")) + .setSubTitleText(ChatColor.GOLD + "You found a hidden area!") + .setDuration(3) + .setFadeIn(1) + .setFadeOut(1) + .send(player); + } + + player.sendMessage(Lang.VICE.f("&dEntering&f: &6" + area.getName().replace("_", " "))); + } + + @EventHandler + public void onPlayerLeaveArea(AreaLeaveEvent event) { + Player player = event.getPlayer(); + Area area = event.getArea(); + AreaUser user = areaManager.getUserByUUID(player.getUniqueId()); + + user.setCurrent(-1); + + player.sendMessage(Lang.VICE.f("&dLeaving&f: &6" + area.getName().replace("_", " "))); + } + +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/areas/obj/Area.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/areas/obj/Area.java new file mode 100644 index 0000000..c4a057d --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/areas/obj/Area.java @@ -0,0 +1,182 @@ +package net.grandtheftmc.vice.areas.obj; + +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.block.Chest; + +import java.util.Arrays; +import java.util.List; +import java.util.Set; +import java.util.UUID; + +public class Area { + + private int id; + private final int season; + private final String name; + private final String worldName; + private final int xMin, xMax, zMin, zMax; + private final Set<Chest> chests; + + public Area(int id, int season, String name, String worldName, int x1, int x2, int z1, int z2) { + this.id = id; + this.season = season; + this.name = name; + this.worldName = worldName; + this.xMin = Math.min(x1, x2); + this.xMax = Math.max(x1, x2); + this.zMin = Math.min(z1, z2); + this.zMax = Math.max(z1, z2); + + this.chests = Sets.newHashSet(); + } + + /** + * Returns true if the given values are inside this area + * @param x + * @param z + * @param world + * @param isEntity + * @return + */ + public boolean isInside(double x, double z, String world, boolean isEntity) { + if(this.worldName == null || !this.worldName.equals(world)) return false; + + int xMin = getMinX(); int xMax = getMaxX(); int zMin = getMinZ(); int zMax = getMaxZ(); + + if(isEntity) { + ++xMax; + ++zMax; + } + + return x >= xMin && x <= xMax && z >= zMin && z <= zMax; + } + + /** + * Returns true if the given values overlap this area + * @param x1 + * @param x2 + * @param z1 + * @param z2 + * @param world + * @return + */ + public boolean isOverlapping(int x1, int x2, int z1, int z2, String world) { + if(this.worldName == null || !this.worldName.equals(world)) return false; + + double[] values = new double[2]; + + values[0] = x1; + values[1] = x2; + + Arrays.sort(values); + + if(getMinX() > values[1] || getMaxX() < values[0]) return false; + + values[0] = z1; + values[1] = z2; + + Arrays.sort(values); + + return !(getMinZ() > values[1]) && !(getMaxZ() < values[0]); + } + + /** + * Returns a list containing every block location surrounding the perimeter of an Area on the given Y level + * @param world + * @param y + * @return + */ + public List<Location> getPerimeter(UUID world, int y) { + List<Location> result = Lists.newArrayList(); + + for(int x = getMinX(); x <= getMaxX(); x++) { + for(int z = getMinZ(); z <= getMaxZ(); z++) { + + if(x == getMinX() || x == getMaxX() || z == getMinZ() || z == getMaxZ()) + result.add(new Location(Bukkit.getWorld(world), x, y, z)); + + } + } + + return result; + } + + public int getID() { + return this.id; + } + + public int getSeason() { + return this.season; + } + + public String getName() { + return this.name; + } + + public World getWorld() { + if (this.worldName == null) return null; + return Bukkit.getWorld(this.worldName); + } + + public int getMinX() { + return this.xMin; + } + + public int getMaxX() { + return this.xMax; + } + + public int getMinZ() { + return this.zMin; + } + + public int getMaxZ() { + return this.zMax; + } + + public Set<Chest> getChests() { + return chests; + } + + public void setID(int newId) { + this.id = newId; + } + + public void addChest(Chest chest) { + this.chests.add(chest); + } + + public AreaType getAreaType() { +// return this.chests.size() >= 30 ? AreaType.TOWN : AreaType.VILLAGE; + return this.getName().contains("_") ? AreaType.TOWN : AreaType.VILLAGE; + } + + public static enum AreaType { + TOWN, VILLAGE, + ; + } + + public static enum DropType { + MAJOR, MINOR, DEFAULT, ; + } + + public int getRealMinX() { + return this.xMin <= this.xMax ? this.xMin : this.xMax; + } + + public int getRealMaxX() { + return this.xMax >= this.xMin ? this.xMax : this.xMin; + } + + public int getRealMinZ() { + return this.zMin <= this.zMax ? this.zMin : this.zMax; + } + + public int getRealMaxZ() { + return this.zMax >= this.zMin ? this.zMax : this.zMin; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/areas/obj/AreaUser.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/areas/obj/AreaUser.java new file mode 100644 index 0000000..4053aac --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/areas/obj/AreaUser.java @@ -0,0 +1,37 @@ +package net.grandtheftmc.vice.areas.obj; + +import java.util.Set; +import java.util.UUID; + +public class AreaUser { + + private UUID uuid; + private int current; + private Set<Integer> visited; + + public AreaUser(UUID uuid, Set<Integer> visited) { + this.uuid = uuid; + this.current = -1; // -1 is considered none + this.visited = visited; + } + + public UUID getUUID() { + return this.uuid; + } + + public int getCurrent() { + return this.current; + } + + public Set<Integer> getVisited() { + return this.visited; + } + + public boolean hasVisited(int areaId) { + return visited.contains(areaId); + } + + public void setCurrent(int id) { + this.current = id; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/areas/tasks/AreaUpdater.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/areas/tasks/AreaUpdater.java new file mode 100644 index 0000000..10feebf --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/areas/tasks/AreaUpdater.java @@ -0,0 +1,45 @@ +package net.grandtheftmc.vice.areas.tasks; + +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.vice.areas.AreaManager; +import net.grandtheftmc.vice.areas.events.AreaEnterEvent; +import net.grandtheftmc.vice.areas.events.AreaLeaveEvent; +import net.grandtheftmc.vice.areas.obj.Area; +import org.bukkit.Bukkit; + +import java.util.UUID; + +public class AreaUpdater implements Runnable { + + private final AreaManager areaManager; + + public AreaUpdater(AreaManager areaManager) { + this.areaManager = areaManager; + } + + @Override + public void run() { + Bukkit.getOnlinePlayers().forEach(player -> { + UUID uuid = player.getUniqueId(); + String world = player.getLocation().getWorld().getName(); + int x = player.getLocation().getBlockX(); + int z = player.getLocation().getBlockZ(); + + ServerUtil.runTaskAsync(() -> { + for(Area area : areaManager.getAreas()) { + if (!area.isInside(x, z, world, true)) { + + if (areaManager.isAt(uuid, area)) + ServerUtil.runTask(() -> Bukkit.getPluginManager().callEvent(new AreaLeaveEvent(player, area))); + + continue; + } + + if (!areaManager.isAt(uuid, area)) + ServerUtil.runTask(() -> Bukkit.getPluginManager().callEvent(new AreaEnterEvent(player, area))); + } + }); + }); + } + +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/combatlog/CombatLogManager.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/combatlog/CombatLogManager.java new file mode 100644 index 0000000..8c90ef6 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/combatlog/CombatLogManager.java @@ -0,0 +1,128 @@ +package net.grandtheftmc.vice.combatlog; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.ViceUtils; +import net.grandtheftmc.vice.combatlog.task.DespawnTask; +import net.grandtheftmc.vice.users.ViceUser; +import net.grandtheftmc.vice.users.storage.BooleanStorageType; +import net.grandtheftmc.vice.world.ViceSelection; +import net.grandtheftmc.vice.world.ZoneFlag; +import org.bukkit.Material; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.NPC; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.metadata.FixedMetadataValue; + +import java.util.*; + +/** + * Created by Timothy Lampen on 2017-08-14. + */ +public class CombatLogManager { + private HashMap<NPC, CombatLogger> combatNPCs = new HashMap<>(); + private List<CombatLogger> destroyedNPCs = new ArrayList<>(); + + + public void spawnNPC(Player player, boolean fromSpawn) { + spawnNPC(player, fromSpawn, false); + } + + public void spawnNPC(Player player, boolean fromSpawn, boolean overrideKickCheck) { + ViceUser viceUser = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + if(fromSpawn) { + List<ViceSelection> selections = Vice.getWorldManager().getZones(player.getLocation()); + if(selections.stream().anyMatch(selection -> selection.getFlags().contains(ZoneFlag.COP_CANT_ARREST))) + return; + } + if(!overrideKickCheck && viceUser.getBooleanFromStorage(BooleanStorageType.KICKED)) { + return; + } + List<ItemStack> contents = new ArrayList<>(); + for(ItemStack is : player.getInventory().getContents()) { + if(is==null || is.getType()== Material.AIR || is.getType()==Material.WATCH) + continue; + if(ViceUtils.isDefaultPlayerItem(is)) + continue; + if(fromSpawn/* && (Vice.getItemManager().getItem(is)==null || !Vice.getItemManager().getItem(is).isScheduled())*/)//don't spawn an npc if the player is at spawn. + continue; + contents.add(is); + } + if(contents.size()==0) { + return; + } + NPC npc = (NPC) player.getWorld().spawnEntity(player.getLocation(), EntityType.VILLAGER); + npc.setCustomName(Utils.f(user.getUserRank().getColor() + player.getName() + "&7's Combat NPC &e15&7)")); + npc.setCustomNameVisible(true); + npc.setAI(false); + npc.setMetadata("loggedplayer", new FixedMetadataValue(Vice.getInstance(), player.getUniqueId().toString())); + combatNPCs.put(npc, new CombatLogger(player.getUniqueId(), contents, fromSpawn)); + new DespawnTask(npc, Utils.f(user.getUserRank().getColor() + player.getName())).runTaskTimer(Vice.getInstance(), 0, 20); + } + + public NPC getSpawnedNPCFromPlayer(UUID uuid){ + Optional<Map.Entry<NPC, CombatLogger>> log = this.combatNPCs.entrySet().stream().filter(entry -> entry.getValue().getUUID().equals(uuid)).findFirst(); + return log.map(Map.Entry::getKey).orElse(null); + } + + public void removeNPC(NPC villager) { + if(combatNPCs.containsKey(villager)) + combatNPCs.remove(villager); + } + + public List<ItemStack> getPlayerInventory(NPC npc){ + if(this.combatNPCs.containsKey(npc)) + return this.combatNPCs.get(npc).getContents(); + return null; + } + + public void addDestroyedNPC(NPC npc){ + this.destroyedNPCs.add(this.combatNPCs.get(npc)); + } + + public void clearRemovedItems(UUID uuid) { + Optional<CombatLogger> log = this.destroyedNPCs.stream().filter(logger -> logger.getUUID().equals(uuid)).findFirst(); + log.ifPresent(combatLogger -> this.destroyedNPCs.remove(combatLogger)); + } + + public Optional<CombatLogger> getDestroyedCombatLogger(UUID uuid){ + return this.destroyedNPCs.stream().filter(log -> log.getUUID().equals(uuid)).findFirst(); + } + + public void load(){ + YamlConfiguration config = Vice.getSettings().getPlayerCacheConfig(); + if(config.getConfigurationSection("")==null) + return; + for(String sUUID : config.getConfigurationSection("").getKeys(false)) { + if(config.contains(sUUID + ".destroyed-npcs")) { + this.destroyedNPCs.add(new CombatLogger(UUID.fromString(sUUID), null, config.getBoolean(sUUID + ".destroyed-npcs"))); + } + } + } + + public void save(){ + combatNPCs.keySet().forEach(Entity::remove); + + YamlConfiguration config = Vice.getSettings().getPlayerCacheConfig(); + if(config.getConfigurationSection("")!=null) { + for (String sUUID : config.getConfigurationSection("").getKeys(false)) { + config.set(sUUID + ".destroyed-npcs", null); + } + } + Utils.saveConfig(config, "playercache"); + for(CombatLogger log : destroyedNPCs){ + config.set(log.getUUID().toString() + ".destroyed-npcs", log.isFromSpawn()); + } + Utils.saveConfig(config, "playercache"); + } + + public Set<NPC> getCombatLogNPCs() { + return this.combatNPCs.keySet(); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/combatlog/CombatLogger.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/combatlog/CombatLogger.java new file mode 100644 index 0000000..490a02f --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/combatlog/CombatLogger.java @@ -0,0 +1,33 @@ +package net.grandtheftmc.vice.combatlog; + +import org.bukkit.inventory.ItemStack; + +import java.util.List; +import java.util.UUID; + +/** + * Created by Timothy Lampen on 2017-08-17. + */ +public class CombatLogger { + private final UUID uuid; + private final boolean fromSpawn; + private final List<ItemStack> contents; + + public CombatLogger(UUID uuid, List<ItemStack> contents, boolean fromSpawn) { + this.uuid = uuid; + this.fromSpawn = fromSpawn; + this.contents = contents; + } + + public List<ItemStack> getContents() { + return contents; + } + + public UUID getUUID() { + return uuid; + } + + public boolean isFromSpawn() { + return fromSpawn; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/combatlog/task/DespawnTask.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/combatlog/task/DespawnTask.java new file mode 100644 index 0000000..2b1cf64 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/combatlog/task/DespawnTask.java @@ -0,0 +1,35 @@ +package net.grandtheftmc.vice.combatlog.task; + +import net.grandtheftmc.vice.Vice; +import net.md_5.bungee.api.ChatColor; +import org.bukkit.entity.NPC; +import org.bukkit.entity.Player; +import org.bukkit.entity.Villager; +import org.bukkit.scheduler.BukkitRunnable; + +/** + * Created by Timothy Lampen on 2017-08-14. + */ +public class DespawnTask extends BukkitRunnable{ + + private final NPC villager; + private int counter = 15; + private final String name; + public DespawnTask(NPC villager, String name){ + this.villager = villager; + this.name =name; + } + + @Override + public void run() { + if(villager.isDead() || !villager.isValid() || counter==0) { + Vice.getCombatLogManager().removeNPC(villager); + villager.remove(); + cancel(); + return; + } + else + villager.setCustomName(name + ChatColor.GRAY + "'s Combat NPC (" + ChatColor.YELLOW + counter + ChatColor.GRAY + ")"); + counter--; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/AmmoCommand.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/AmmoCommand.java new file mode 100644 index 0000000..2582544 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/AmmoCommand.java @@ -0,0 +1,152 @@ +package net.grandtheftmc.vice.commands; + +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.items.AmmoType; +import net.grandtheftmc.vice.users.ViceUser; + +public class AmmoCommand implements CommandExecutor { + @Override + public boolean onCommand(CommandSender s, Command c, String l, String[] args) { + if (!s.hasPermission("command.ammo")) { + s.sendMessage(Lang.NOPERM.toString()); + return true; + } + if (args.length == 0) { + s.sendMessage(Utils.f("&c/ammo types")); + s.sendMessage(Utils.f("&c/ammo balance <player> <type>")); + s.sendMessage(Utils.f("&c/ammo give <player> <type> <amount>")); + s.sendMessage(Utils.f("&c/ammo take <player> <type> <amount>")); + return true; + } + switch (args[0].toLowerCase()) { + case "types": { + sendAmmoTypes(s); + return true; + } + case "balance": { + if (args.length != 3) { + s.sendMessage(Utils.f("&c/ammo balance <player> <type>")); + return true; + } + Player player = Bukkit.getPlayer(args[1]); + if (player == null) { + s.sendMessage(Lang.AMMO.f("&7That player is not online!")); + return true; + } + AmmoType type = AmmoType.getAmmoType(args[2]); + if (type == null) { + s.sendMessage(Lang.AMMO.f("&7That AmmoType does not exist!")); + sendAmmoTypes(s); + return true; + } + ViceUser user = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + s.sendMessage(Lang.AMMO.f("&a" + player.getName() + "&7 has &a&l" + user.getAmmo(type) + ' ' + + type.getGameItem().getDisplayName() + "&7!")); + return true; + } + case "give": { + if (args.length != 4) { + s.sendMessage(Utils.f("&c/ammo give <player> <type> <amount>")); + return true; + } + Player player = Bukkit.getPlayer(args[1]); + if (player == null) { + s.sendMessage(Lang.AMMO.f("&7That player is not online!")); + return true; + } + AmmoType type = AmmoType.getAmmoType(args[2]); + if (type == null) { + s.sendMessage(Lang.AMMO.f("&7That AmmoType does not exist!")); + sendAmmoTypes(s); + return true; + } + int amnt; + try { + amnt = Integer.parseInt(args[3]); + } catch (NumberFormatException e) { + s.sendMessage(Lang.AMMO.f("&7The amount must be a number!")); + return true; + } + if (amnt <= 0) { + s.sendMessage(Lang.AMMO.f("&7The amount must be positive!")); + return true; + } + ViceUser user = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + user.addAmmo(type, amnt); + s.sendMessage(Lang.AMMO.f("&7You gave &a&l" + amnt + ' ' + type.getGameItem().getDisplayName() + "&7 to &a" + + player.getName() + "&7!")); + player.sendMessage(Lang.AMMO.f("&7You were given &a&l" + amnt + ' ' + type.getGameItem().getDisplayName() + + "&7 by &a" + s.getName() + "&7!")); + return true; + } + case "take": + if (args.length != 3) { + s.sendMessage(Utils.f("&c/ammo take <player> <type> <amount>")); + return true; + } + Player player = Bukkit.getPlayer(args[1]); + if (player == null) { + s.sendMessage(Lang.AMMO.f("&7That player is not online!")); + return true; + } + AmmoType type = AmmoType.getAmmoType(args[2]); + if (type == null) { + s.sendMessage(Lang.AMMO.f("&7That AmmoType does not exist!")); + sendAmmoTypes(s); + return true; + } + int amnt; + try { + amnt = Integer.parseInt(args[3]); + } catch (NumberFormatException e) { + s.sendMessage(Lang.AMMO.f("&7The amount must be a number!")); + return true; + } + if (amnt <= 0) { + s.sendMessage(Lang.AMMO.f("&7The amount must be positive!")); + return true; + } + ViceUser user = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + if (!user.hasAmmo(type, amnt)) + amnt = user.getAmmo(type); + user.removeAmmo(type, amnt); + s.sendMessage(Lang.AMMO.f("&7You took &c&l" + amnt + ' ' + type.getGameItem().getDisplayName() + + "&7 from &a" + player.getName() + "&7!")); + player.sendMessage(Lang.AMMO.f("&c&l" + amnt + ' ' + type.getGameItem().getDisplayName() + + "&7 was taken from you by &a" + s.getName() + "&7!")); + return true; + default: + s.sendMessage(Utils.f("&c/ammo types")); + s.sendMessage(Utils.f("&c/ammo balance <player> <type>")); + s.sendMessage(Utils.f("&c/ammo give <player> <type> <amount>")); + s.sendMessage(Utils.f("&c/ammo take <player> <type> <amount>")); + return true; + } + } + + private String ammoTypes = null; + + private void sendAmmoTypes(CommandSender sender) { + if (ammoTypes == null) { + StringBuilder b = new StringBuilder("&7"); + for (AmmoType type : AmmoType.getTypes()) { + b.append(type).append("(").append(type.getGameItemName()).append("),"); + } + if (b.toString().endsWith(",")) { + b.setLength(b.length() - 1); + } + ammoTypes = b.toString(); + } + + sender.sendMessage(ammoTypes); + } + +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/AntiAuraCommand.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/AntiAuraCommand.java new file mode 100644 index 0000000..edb6c09 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/AntiAuraCommand.java @@ -0,0 +1,75 @@ +package net.grandtheftmc.vice.commands; + +import net.grandtheftmc.core.Lang; +import net.md_5.bungee.api.ChatColor; +import net.md_5.bungee.api.chat.ClickEvent; +import net.md_5.bungee.api.chat.ComponentBuilder; +import net.md_5.bungee.api.chat.HoverEvent; +import net.md_5.bungee.api.chat.TextComponent; +import org.apache.commons.lang.StringUtils; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.*; + +public class AntiAuraCommand implements CommandExecutor { + + //Checking for existance, hashsets are faster + public static final Set<String> TOGGLED_PLAYERS = new HashSet<>(); + + @Override + public boolean onCommand(CommandSender s, Command c, String lbl, String[] args) { + if (!s.hasPermission("antiaura.admin")) return false; + if (args.length == 0) { + s.sendMessage(Lang.ANTIAURA.f("&7/antiaura toggle")); + return false; + } + if (!(s instanceof Player)) { + if (args.length >= 1 && Objects.equals("notify", args[0])) { + this.notify(StringUtils.join(new ArrayList<>(Arrays.asList(args).subList(1, args.length)), " ")); + } else { + s.sendMessage(Lang.NOTPLAYER.s()); + } + return true; + } + Player player = (Player) s; + if (args.length >= 1) { + if ("toggle".equalsIgnoreCase(args[0])) { + if (TOGGLED_PLAYERS.contains(player.getName())) { + player.sendMessage(Lang.ANTIAURA.f("&7AntiAura notifications disabled.")); + TOGGLED_PLAYERS.remove(player.getName()); + } else { + player.sendMessage(Lang.ANTIAURA.f("&7AntiAura notifications enabled.")); + TOGGLED_PLAYERS.add(player.getName()); + } + } + } + return true; + } + + public void notify(String msg) { + for (String string : TOGGLED_PLAYERS) { + Player player; + if ((player = Bukkit.getPlayer(string)) != null) { + Player target = Bukkit.getPlayer(msg.split(" ")[0]); + if (target.isSprinting() && target.getInventory().getItemInMainHand().getType() == Material.DIAMOND_HOE + || "spawn".equals(target.getWorld().getName())) { + return; + } + + TextComponent component = new TextComponent(Lang.ANTIAURA.f("&7 " + msg)); + component.setColor(ChatColor.GRAY); + if (target != null) { + component.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/tp " + target.getName())); + component.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, + new ComponentBuilder("Click to teleport to " + target.getDisplayName()).create())); + } + player.spigot().sendMessage(component); + } + } + } +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/AreaCommand.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/AreaCommand.java new file mode 100644 index 0000000..8ff0877 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/AreaCommand.java @@ -0,0 +1,123 @@ +package net.grandtheftmc.vice.commands; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.Utils; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.areas.dao.AreaDAO; +import net.grandtheftmc.vice.areas.dao.DiscoveryDAO; +import net.grandtheftmc.vice.areas.obj.Area; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class AreaCommand implements CommandExecutor { + + private final Vice plugin; + + public AreaCommand(Vice plugin) { + this.plugin = plugin; + } + + @Override + public boolean onCommand(CommandSender s, Command c, String l, String[] args) { + if (!(s instanceof Player)) return true; + + Player player = (Player) s; + + if (!player.hasPermission("command.area")) { + s.sendMessage(Lang.NOPERM.toString()); + + return true; + } + + if (args.length < 2) { + s.sendMessage(Utils.f("&c/area create <name>")); + s.sendMessage(Utils.f("&c/area delete <name>")); + + return true; + } + + /* + Create + */ + if (args[0].equalsIgnoreCase("create")) { + if (plugin.getAreaManager().isBuilding(player.getUniqueId())) { + s.sendMessage(Lang.VICE.f("&cYou are already creating an Area")); + return true; + } + + StringBuilder areaName = new StringBuilder(); + + for (int i = 1; i < args.length; i++) + areaName.append(args[i]).append(" "); + + plugin.getAreaManager().getBuilders().add(plugin.getAreaManager().createBuilder(areaName.toString().trim(), player.getUniqueId())); + player.getInventory().setItemInMainHand(plugin.getAreaManager().getAreaClaimStick()); + + s.sendMessage(Lang.VICE.f("&aYou are now building '" + areaName.toString().trim() + "'")); + + return true; + } + + /* + Delete + */ + if (args[0].equalsIgnoreCase("delete")) { + StringBuilder areaName = new StringBuilder(); + + for (int i = 1; i < args.length; i++) + areaName.append(args[i]).append(" "); + + Area area = plugin.getAreaManager().getAreaByName(areaName.toString().trim()); + + if (area == null) { + s.sendMessage(Lang.VICE.f("&cArea not found")); + return true; + } + + plugin.getAreaManager().getAreas().remove(area); + + ServerUtil.runTaskAsync(() -> { + AreaDAO.delete(area.getID()); + DiscoveryDAO.deleteByArea(area.getID()); + }); + + plugin.getAreaManager().getAreaUsers().forEach(user -> { + if (user.getCurrent() == area.getID()) user.setCurrent(-1); + if (user.hasVisited(area.getID())) user.getVisited().remove(area.getID()); + }); + + s.sendMessage(Lang.VICE.f("&eYou have deleted '" + area.getName() + "'")); + + return true; + } + + /* + Cancel + */ + if (args[0].equalsIgnoreCase("cancel")) { + if (!plugin.getAreaManager().isBuilding(player.getUniqueId())) { + s.sendMessage(Lang.VICE.f("&cYou are not building an Area")); + return true; + } + + StringBuilder areaName = new StringBuilder(); + + for (int i = 1; i < args.length; i++) + areaName.append(args[i]).append(" "); + + plugin.getAreaManager().getBuilders().remove(plugin.getAreaManager().getBuilderByUserUUID(player.getUniqueId())); + + s.sendMessage(Lang.VICE.f("&eYou are no longer building '" + areaName.toString().trim() + "'")); + + return true; + } + + s.sendMessage(Utils.f("&c/area create <name>")); + s.sendMessage(Utils.f("&c/area delete <name>")); + + return false; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/BackpackCommand.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/BackpackCommand.java new file mode 100644 index 0000000..5421dbd --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/BackpackCommand.java @@ -0,0 +1,66 @@ +package net.grandtheftmc.vice.commands; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.users.ViceUser; +import net.grandtheftmc.vice.users.storage.BooleanStorageType; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.InventoryView; + +import java.util.Objects; + +public class BackpackCommand implements CommandExecutor { + @Override + public boolean onCommand(CommandSender s, Command c, String lbl, String[] args) { + if (args.length == 0 || !s.hasPermission("backpack.admin")) { + if (!(s instanceof Player)) { + s.sendMessage(Lang.NOTPLAYER.s()); + return true; + } + Player player = (Player) s; + Vice.getBackpackManager().openBackpack(player); + return true; + } + Player player = (Player) s; + if (Bukkit.getPlayer(args[0]) != null) { + Player target = Bukkit.getPlayer(args[0]); + if (target.getOpenInventory() != null && Objects.equals("Backpack", ChatColor.stripColor(target.getOpenInventory().getTitle()))) { + target.getOpenInventory().close(); + } + Inventory backpack = Vice.getBackpackManager().getBackpack(target, true); + player.openInventory(backpack); + Vice.getUserManager().getLoadedUser(target.getUniqueId()).setBooleanToStorage(BooleanStorageType.BACKPACK_OPEN, true); + return true; + } + switch (args[0]) { + case "reset": + if (args.length != 2) { + s.sendMessage(Utils.f("&c/backpack reset <player>")); + return true; + } + Player target = Bukkit.getPlayer(args[1]); + if (target == null) { + return true; + } + InventoryView inv = target.getOpenInventory(); + if (inv != null + && Objects.equals("Backpack", ChatColor.stripColor(inv.getTitle()))) + target.closeInventory(); + ViceUser targetViceUser = Vice.getUserManager().getLoadedUser(target.getUniqueId()); + targetViceUser.setBackpackContents(null); + s.sendMessage(Utils.f("&7You cleared the backpack of player &a" + target.getName() + "&7!")); + target.sendMessage(Utils.f("&a" + player.getName() + "&7 cleared your backpack.")); + return true; + default: + s.sendMessage(Utils.f("&c/backpack reset <player>")); + return true; + } + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/BackupCommand.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/BackupCommand.java new file mode 100644 index 0000000..36d4ed7 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/BackupCommand.java @@ -0,0 +1,70 @@ +package net.grandtheftmc.vice.commands; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.users.CopRank; +import net.grandtheftmc.vice.users.TaxiTarget; +import net.grandtheftmc.vice.users.ViceUser; +import net.md_5.bungee.api.chat.ClickEvent; +import net.md_5.bungee.api.chat.ComponentBuilder; +import org.bukkit.Bukkit; +import org.bukkit.GameMode; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.Objects; + +/** + * Created by Liam on 9/12/2016. + */ +public class BackupCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command cmd, String lbl, String[] args) { + if (!(s instanceof Player)) { + s.sendMessage(Lang.NOTPLAYER.s()); + return true; + } + Player player = (Player) s; + ViceUser user = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + if (args.length == 0) { + if (user.hasRequestedBackup()) { + s.sendMessage(Lang.COP_MODE.f("&7You have already called " + (user.isCop() ? "for backup" : "the police") + "! Please wait &c&l" + Utils.timeInMillisToText(user.getTimeUntilBackupRequestExpires()) + "&7 to request backup again!")); + return true; + } + player.sendMessage(Lang.COP_MODE.f("&7You have called " + (user.isCop() ? "for backup" : "the police") + "! A message has been sent to all officers, and they can teleport to you for 1 minute!")); + user.setLastBackupRequest(System.currentTimeMillis()); + for (ViceUser u : Vice.getUserManager().getLoadedUsers()) { + if (u.isCop()) { + Player p = Bukkit.getPlayer(u.getUUID()); + if (!Objects.equals(player, p)) + p.spigot().sendMessage(new ComponentBuilder(Lang.COP_MODE.f((user.isCop() ? "&3&lCop " : "&7Citizen ") + Core.getUserManager().getLoadedUser(player.getUniqueId()).getColoredName(player))).append(" is requesting " + (user.isCop() ? "backup" : "police assistance") + "! Teleport: ").color(net.md_5.bungee.api.ChatColor.GRAY). + append(" [ACCEPT] ").color(net.md_5.bungee.api.ChatColor.GREEN).bold(true).event(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/backup " + player.getName())).create()); + } + } + return true; + } + if (!user.isCop()) { + s.sendMessage(Lang.COP_MODE.f("&7You must be a " + CopRank.COP.getColoredNameBold() + "&7 to provide backup!")); + return true; + } + Player target = Bukkit.getPlayer(args[0]); + if (target == null) { + player.sendMessage(Lang.COP_MODE.f("&7That player is not online!")); + return true; + } + ViceUser targetUser = Vice.getUserManager().getLoadedUser(target.getUniqueId()); + if (target.getGameMode() == GameMode.SPECTATOR || !targetUser.hasRequestedBackup()) { + player.sendMessage(Lang.COP_MODE.f("&7That player has not requested backup!")); + return true; + } + Vice.getWorldManager().getWarpManager().warp(player, Core.getUserManager().getLoadedUser(player.getUniqueId()), user, new TaxiTarget(target), 0, -1); + target.sendMessage(Lang.COP_MODE.f("&7" + Core.getUserManager().getLoadedUser(player.getUniqueId()).getColoredName(player) + "&7 has accepted your " + (user.isCop() ? "backup" : "police assistance") + " request.")); + return true; + } + +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/BaltopCommand.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/BaltopCommand.java new file mode 100644 index 0000000..d5f4529 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/BaltopCommand.java @@ -0,0 +1,68 @@ +package net.grandtheftmc.vice.commands; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.commands.CoreCommand; +import net.grandtheftmc.core.util.Callback; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.users.ViceUserDAO; +import net.grandtheftmc.vice.utils.MapUtil; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitRunnable; + +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.*; + +/** + * Created by Luke Bingham on 26/08/2017. + */ +public class BaltopCommand extends CoreCommand<Player> { + + public BaltopCommand() { + super( + "baltop", + "Shows the baltop for money", + "moneytop", "balancetop" + ); + } + + @Override + public void execute(Player sender, String[] strings) { + UUID uuid = sender.getUniqueId(); + new BukkitRunnable() { + @Override public void run() { + getTopBalance(10, results -> new BukkitRunnable() { + @Override + public void run() { + Player player = Bukkit.getPlayer(uuid); + if (player == null) return; + player.sendMessage( Lang.MONEY.f("&7Money Top:")); + + int i = 0; + for (String key : results.keySet()) { + i++; + player.sendMessage(Utils.f("&a#&l" + (i) + "&7: &r" + key + "&7 &a" + Utils.formatMoney(results.get(key)))); + } + } + }.runTask(Vice.getInstance())); + } + }.runTaskAsynchronously(Vice.getInstance()); + } + + private void getTopBalance(int amount, Callback<LinkedHashMap<String, Double>> callback) { + LinkedHashMap<String, Double> results = new LinkedHashMap<>(); + + Optional<Object[][]> optional = ViceUserDAO.getBalanceTop(amount); + if(!optional.isPresent()) return; + + for(int i = 0; i < optional.get().length; i++) { + results.put((String)optional.get()[i][0], (double)optional.get()[i][1]); + } + + callback.call(results); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/BondsCommand.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/BondsCommand.java new file mode 100644 index 0000000..f46d6b1 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/BondsCommand.java @@ -0,0 +1,249 @@ +package net.grandtheftmc.vice.commands; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.users.UserDAO; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.users.ViceUser; +import net.grandtheftmc.vice.users.ViceUserDAO; +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitRunnable; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.Optional; +import java.util.UUID; + +public class BondsCommand implements CommandExecutor { + + + @Override + public boolean onCommand(CommandSender s, Command cmd, String label, String[] args) { + if (s instanceof Player && !s.hasPermission("command.bonds")) { + Player player = (Player) s; + ViceUser user = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + player.sendMessage(Utils.f("&aYou have &c" + user.getBonds() + " &abonds")); + return true; + } + if (args.length == 0) { + s.sendMessage(Utils.f("&c/bonds <balance> name")); + s.sendMessage(Utils.f("&c/bonds <set/give/take> <name> <amnt>")); + return true; + } + switch (args[0].toLowerCase()) { + case "balance": { + if (args.length != 2) { + s.sendMessage(Utils.f("&c/bonds <balance> name")); + return true; + } + Player player = Bukkit.getPlayerExact(args[1]); + if (player == null) { + UUID senderUUID = s instanceof Player ? ((Player) s).getUniqueId() : null; + s.sendMessage(Utils.f("&cThat player isn't online, so please wait while the bonds are pulled from the database.")); + new BukkitRunnable() { + @Override + public void run() { + + Optional<Object[]> optional = ViceUserDAO.getBondAndName(args[1]); + if(!optional.isPresent()) return; + +// ResultSet rs = Core.getSQL().query("select name,bonds from " + Core.name() + " where name='" + args[1] + "';"); + String name = (String) optional.get()[0]; + int bonds = (int) optional.get()[1]; +// try { +// if (rs.next()) { +// name = rs.getString("name"); +// bonds = rs.getInt("bonds"); +// rs.close(); +// } else { +// rs.close(); +// return; +// } +// } catch (SQLException e) { +// e.printStackTrace(); +// } + String finalName = name; + int finalBonds = bonds; + new BukkitRunnable() { + @Override + public void run() { + (senderUUID == null ? Bukkit.getConsoleSender() : Bukkit.getPlayer(senderUUID)).sendMessage(Utils.f("&a " + finalName + " has " + finalBonds + " Bonds.")); + } + }.runTask(Vice.getInstance()); + } + }.runTaskAsynchronously(Vice.getInstance()); + return true; + } + ViceUser user = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + s.sendMessage(Utils.f("&a" + player.getName() + " has " + user.getBonds() + " Bonds.")); + return true; + } + case "set": { + if (args.length != 3) { + s.sendMessage(Utils.f("&c/bonds <set/give/take> <name> <amnt>")); + return true; + } + int amnt; + try { + amnt = Integer.parseInt(args[2]); + } catch (NumberFormatException e) { + s.sendMessage(Utils.f("&cThe amount must be a number!")); + return true; + } + if (amnt < 0) { + s.sendMessage(Utils.f("&cThe amount must be bigger than 0!")); + return true; + } + Player player = Bukkit.getPlayerExact(args[1]); + if (player == null) { + s.sendMessage(Utils.f("&cThat player isn't online, so hold on a second while the bonds are forcibly updated in the database.")); + ServerUtil.runTaskAsync(() -> ViceUserDAO.setBonds(args[1], amnt)); +// Core.getSQL().updateAsyncLater("update " + Core.name() + " set bonds=" + amnt + " where name='" + args[1] + "';"); + new BukkitRunnable() { + @Override + public void run() { + UUID uuid = UserDAO.getUuidByName(args[1]); + +// ResultSet rs = Core.getSQL().query("select uuid,lastname from users where lastname='" + args[1] + "';"); +// UUID uuid = null; +// String name = args[1]; +// try { +// if (rs.next()) { +// uuid = UUID.fromString(rs.getString("uuid")); +// name = rs.getString("lastname"); +// } +// rs.close(); +// } catch (SQLException e) { +// e.printStackTrace(); +// } + if (uuid == null) Core.log("Error while logging setBondsCommand for uuid " + uuid + ", name " + args[1] + ", amnt " + amnt); + else Utils.insertLog(uuid, args[1], "setBondsCommand", "BONDS", amnt + " Bonds", amnt, 0); + + } + }.runTaskAsynchronously(Core.getInstance()); + return true; + } + ViceUser user = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + user.setBonds(amnt); + User u = Core.getUserManager().getLoadedUser(player.getUniqueId()); + u.insertLog(player, "setBondsCommand", "BONDS", amnt + " Bonds", amnt, 0); + s.sendMessage(Utils.f("&a" + player.getName() + " now has " + user.getBonds() + " bonds!")); + return true; + } + case "give": { + if (args.length != 3) { + s.sendMessage(Utils.f("&c/houses bonds <set/give/take> <name> <amnt>")); + return true; + } + int amnt; + try { + amnt = Integer.parseInt(args[2]); + } catch (NumberFormatException e) { + s.sendMessage(Utils.f("&cThe amount must be a number!")); + return true; + } + if (amnt < 0) { + s.sendMessage(Utils.f("&cThe amount must be bigger than 0!")); + return true; + } + Player player = Bukkit.getPlayerExact(args[1]); + if (player == null) { + s.sendMessage(Utils.f("&cThat player isn't online, so hold on a second while the bonds are forcibly updated in the database.")); +// Core.getSQL().updateAsyncLater("update " + Core.name() + " set bonds=bonds+" + amnt + " where name='" + args[1] + "';"); + ServerUtil.runTaskAsync(() -> ViceUserDAO.addBonds(args[1], amnt)); + + new BukkitRunnable() { + @Override public void run() { + UUID uuid = UserDAO.getUuidByName(args[1]); +// ResultSet rs = Core.getSQL().query("select uuid,lastname from users where lastname='" + args[1] + "';"); +// UUID uuid = null; +// String name = args[1]; +// try { +// if (rs.next()) { +// uuid = UUID.fromString(rs.getString("uuid")); +// name = rs.getString("lastname"); +// } +// rs.close(); +// } catch (SQLException e) { +// e.printStackTrace(); +// } + if (uuid == null) { + Core.log("Error while logging giveBondsCommand for uuid " + uuid + ", name " + args[1] + ", amnt " + amnt); + } else + Utils.insertLog(uuid, args[1], "giveBondsCommand", "BONDS", amnt + " Bonds", amnt, 0); + + } + }.runTaskAsynchronously(Core.getInstance()); + return true; + } + ViceUser user = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + user.giveBonds(amnt); + User u = Core.getUserManager().getLoadedUser(player.getUniqueId()); + u.insertLog(player, "giveBondsCommand", "BONDS", amnt + " Bonds", amnt, 0); + s.sendMessage(Utils.f("&a" + player.getName() + " now has " + user.getBonds() + " bonds!")); + + return true; + } + case "take": + if (args.length != 3) { + s.sendMessage(Utils.f("&c/houses bonds <set/give/take> <name> <amnt>")); + return true; + } + int amnt; + try { + amnt = Integer.parseInt(args[2]); + } catch (NumberFormatException e) { + s.sendMessage(Utils.f("&cThe amount must be a number!")); + return true; + } + if (amnt < 0) { + s.sendMessage(Utils.f("&cThe amount must be bigger than 0!")); + return true; + } + Player player = Bukkit.getPlayerExact(args[1]); + if (player == null) { + s.sendMessage(Utils.f("&cThat player isn't online, so hold on a second while the bonds are forcibly updated in the database.")); +// Core.getSQL().updateAsyncLater("update " + Core.name() + " set bonds=bonds-" + amnt + " where name='" + args[1] + "';"); + ServerUtil.runTaskAsync(() -> ViceUserDAO.takeBonds(args[1], amnt)); + + new BukkitRunnable() { + @Override + public void run() { + UUID uuid = UserDAO.getUuidByName(args[1]); +// ResultSet rs = Core.getSQL().query("select uuid,lastname from users where lastname='" + args[1] + "';"); +// UUID uuid = null; +// String name = args[1]; +// try { +// if (rs.next()) { +// uuid = UUID.fromString(rs.getString("uuid")); +// name = rs.getString("lastname"); +// } +// rs.close(); +// } catch (SQLException e) { +// e.printStackTrace(); +// } + if (uuid == null) { + Core.log("Error while logging takeBondsCommand for uuid " + uuid + ", name " + args[1] + ", amnt " + -amnt); + } else + Utils.insertLog(uuid, args[1], "takeBondsCommand", "BONDS", -amnt + " Bonds", -amnt, 0); + + } + }.runTaskAsynchronously(Core.getInstance()); + return true; + } + ViceUser user = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + user.takeBonds(amnt); + User u = Core.getUserManager().getLoadedUser(player.getUniqueId()); + u.insertLog(player, "takeBondsCommand", "BONDS", amnt + " Bonds", -amnt, 0); + s.sendMessage(Utils.f("&a" + player.getName() + " now has " + user.getBonds() + " bonds!")); + return true; + } + return true; + } +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/BribeCommand.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/BribeCommand.java new file mode 100644 index 0000000..a3666bd --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/BribeCommand.java @@ -0,0 +1,143 @@ +package net.grandtheftmc.vice.commands; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.ViceUtils; +import net.grandtheftmc.vice.users.ViceUser; +import net.md_5.bungee.api.ChatColor; +import net.md_5.bungee.api.chat.ClickEvent; +import net.md_5.bungee.api.chat.ComponentBuilder; +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +/** + * Created by Liam on 11/10/2016. + */ +public class BribeCommand implements CommandExecutor { + @Override + public boolean onCommand(CommandSender s, Command c, String lbl, String[] args) { + if (!(s instanceof Player)) { + s.sendMessage(Lang.NOTPLAYER.s()); + return true; + } + Player player = (Player) s; + if (args.length == 0) { + s.sendMessage(Lang.BRIBE.f("&7Help Command")); + s.sendMessage(Utils.f("&3/bribe &a<amount>&7 - Send a bribe offer to the cop who arrested you!")); + s.sendMessage(Utils.f("&3/bribe accept &a<prisoner>&7 - Accept the bribe of a prisoner you arrested!")); + s.sendMessage(Utils.f("&3/bribe deny &a<prisoner>&7 - Deny the bribe of a prisoner you arrested!")); + return true; + } + ViceUser user = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + switch (args[0]) { + case "accept": { + if (!user.isCop()) { + player.sendMessage(Lang.BRIBE.f("&7You need to be in &3&lCOP Mode&7 to accept bribes!")); + return true; + } + if (args.length != 2) { + player.sendMessage(Lang.BRIBE.f("&7Please specify the prisoner of whom you would like to accept the bribe!")); + return true; + } + Player prisoner = Bukkit.getPlayer(args[1]); + ViceUser prisonerUser = prisoner == null ? null : Vice.getUserManager().getLoadedUser(prisoner.getUniqueId()); + if (prisoner == null || !prisonerUser.isArrested()) { + player.sendMessage(Lang.BRIBE.f("&7That player is not in jail!")); + return true; + } + if (prisonerUser.getJailTimer() <= 5) { + player.sendMessage(Lang.BRIBE.f("&7That prisoner is already being released!")); + return true; + } + if (prisonerUser.getBribe() <= 0) { + player.sendMessage(Lang.BRIBE.f("&7That prisoner has not sent a bribe offer to you! You can negotiate with them using &a\"/msg " + prisoner.getName() + "\"&7!")); + return true; + } + if (!prisonerUser.hasMoney(prisonerUser.getBribe())) { + player.sendMessage(Lang.BRIBE.f("&7That prisoner does not have enough money to pay for his bribe!")); + return true; + } + double bribe = prisonerUser.getBribe(); + prisonerUser.takeMoney(bribe); + user.addMoney(bribe); + prisonerUser.setBribe(0); + prisonerUser.setJailTimer(5); + ViceUtils.updateBoard(prisoner, prisonerUser); + ViceUtils.updateBoard(player, user); + player.sendMessage(Lang.BRIBE.f("&7You accepted a bribe of &a$&l" + bribe + "&7 from &e&l" + prisoner.getName() + "&7!")); + prisoner.sendMessage(Lang.BRIBE.f("&3&l" + player.getName() + "&7 accepted your bribe of &a$&l" + bribe + "&7!")); + return true; + } + case "deny": + if (!user.isCop()) { + player.sendMessage(Lang.BRIBE.f("&7You need to be in &3&lCOP Mode&7 to accept bribes!")); + return true; + } + if (args.length != 2) { + player.sendMessage(Lang.BRIBE.f("&7Please specify the prisoner of whom you would like to accept the bribe!")); + return true; + } + Player prisoner = Bukkit.getPlayer(args[1]); + ViceUser prisonerUser = prisoner == null ? null : Vice.getUserManager().getLoadedUser(prisoner.getUniqueId()); + if (prisoner == null || !prisonerUser.isArrested()) { + player.sendMessage(Lang.BRIBE.f("&7That player is not in jail!")); + return true; + } + if (prisonerUser.getJailTimer() <= 5) { + player.sendMessage(Lang.BRIBE.f("&7That prisoner is already being released!")); + return true; + } + if (prisonerUser.getBribe() <= 0) { + player.sendMessage(Lang.BRIBE.f("&7That prisoner has not sent a bribe offer to you! You can negotiate with them using &a\"/msg " + prisoner.getName() + "\"&7!")); + return true; + } + double bribe = prisonerUser.getBribe(); + player.sendMessage(Lang.BRIBE.f("&7You denied a bribe of &a$&l" + bribe + "&7 from &e&l" + prisoner.getName() + "&7! You can negotiate with them using &a\"/msg " + prisoner.getName() + "\"&7!")); + player.sendMessage(Lang.BRIBE.f("&3&l" + player.getName() + "&7 denied your bribe of &a$&l" + bribe + "&7! You can negotiate with them using &a\"/msg " + prisoner.getName() + "\"&7!")); + return true; + default: + if (!user.isArrested()) { + player.sendMessage(Lang.BRIBE.f("&7You are not in jail!")); + return true; + } + if (user.getJailTimer() < 5) { + player.sendMessage(Lang.BRIBE.f("&7You are already being released!")); + return true; + } + Player cop = Bukkit.getPlayer(user.getJailCop()); + ViceUser copUser = cop == null ? null : Vice.getUserManager().getLoadedUser(cop.getUniqueId()); + if (cop == null || !copUser.isCop()) { + player.sendMessage(Lang.BRIBE.f("&7The cop who arrested you (&3&l" + user.getJailCopName() + "&7) is off duty!")); + return true; + } + double amnt; + try { + amnt = Double.parseDouble(args[0]); + } catch (NumberFormatException e) { + player.sendMessage(Lang.BRIBE.f("&7The amount must be a number! (double)")); + return true; + } + if (amnt < 5000) { + player.sendMessage(Lang.BRIBE.f("&7Bribes must be at least &a$&l5,000!")); + return true; + } + if (user.getBribe() * 1.05 > amnt) { + player.sendMessage(Lang.BRIBE.f("&7You must raise the bribe by at least &a&l5%&7 of &a$&l" + user.getBribe() + "&7 (&a$&l" + (user.getBribe() * 1.05) + "&7)!")); + return true; + } + if (!user.hasMoney(amnt)) { + player.sendMessage(Lang.BRIBE.f("&7You don't have &c$&l" + amnt + "&7! Please enter a valid number or type &a\"quit\"&7!")); + return true; + } + user.setBribe(amnt); + player.sendMessage(Lang.BRIBE.f("&7You sent a bribe offer of &a$&l" + amnt + "&7 to &3&l" + cop.getName() + "&7. You can negotiate with them using &a\"/msg " + cop.getName() + "\"&7!")); + cop.spigot().sendMessage(new ComponentBuilder(Lang.BRIBE.f("&7A bribe offer of &a$&l" + amnt + "&7 was sent to you by &3&l" + player.getName() + "&7!")).append(" [ACCEPT] ").color(ChatColor.GREEN).bold(true).event(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/bribe accept " + player.getName())).append("[DENY]").color(ChatColor.DARK_RED).bold(true).event(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/bribe deny " + player.getName())).create()); + return true; + } + + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/CheatCodeCommand.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/CheatCodeCommand.java new file mode 100644 index 0000000..21352e7 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/CheatCodeCommand.java @@ -0,0 +1,198 @@ +package net.grandtheftmc.vice.commands; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.commands.CoreCommand; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.util.State; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.dao.CheatCodeDAO; +import net.grandtheftmc.vice.users.CheatCode; +import net.grandtheftmc.vice.users.CheatCodeState; +import net.grandtheftmc.vice.users.ViceUser; +import org.bukkit.Bukkit; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitRunnable; + +import java.sql.Blob; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; + +/** + * Created by Timothy Lampen on 8/24/2017. + */ +public class CheatCodeCommand extends CoreCommand<CommandSender> { + + public CheatCodeCommand() { + super("cheatcode", "edit a player's unlocked cheat codes", "cc", "cheatcodes"); + } + + @Override + public void execute(CommandSender sender, String[] args) { + if(args.length==0) { + if(!(sender instanceof Player) || Core.getUserManager().getLoadedUser(((Player)sender).getUniqueId()).getUserRank().isHigherThan(UserRank.ADMIN)) { + sender.sendMessage(Utils.f("&e/cheatcode give <player> <cheatcode> &7- gives a certain player a PERM new cheatcode")); + sender.sendMessage(Utils.f("&e/cheatcode remove <player> <cheatcode> &7- removes a cheatcode from a player")); + sender.sendMessage(Utils.f("&e/cheatcode view <player> &7- view a player's cheatcodes")); + sender.sendMessage(Utils.f("&e/cheatcode list &7- lists all avaliable cheat codes.")); + sender.sendMessage(Utils.f("&e/cheatcode <cheatcode> &7- toggle / activate the specific cheatcode.")); + } + else { + sender.sendMessage(Utils.f("&e/cheatcode <cheatcode> &7- toggle / activate the specific cheatcode.")); + sender.sendMessage(Utils.f("&e/cheatcode list &7- lists all avaliable cheat codes.")); + } + return; + } + if(args.length==1) { + for (CheatCode code : CheatCode.values()) { + if (args[0].equalsIgnoreCase(code.toString())) { + if (!(sender instanceof Player)) { + sender.sendMessage(Lang.NOTPLAYER.f("")); + return; + } + Player player = (Player) sender; + ViceUser user = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + code.activate(Core.getUserManager().getLoadedUser(player.getUniqueId()), user, player, user.getCheatCodeState(code)); + return; + } + } + } + switch (args[0]) { + case "remove": { + if(sender instanceof Player && !Core.getUserManager().getLoadedUser(((Player)sender).getUniqueId()).getUserRank().isHigherThan(UserRank.ADMIN)) { + sender.sendMessage(Lang.NOPERM.f("")); + return; + } + Player target = Bukkit.getPlayer(args[1]); + if(target==null) { + sender.sendMessage(Lang.CHEAT_CODES.f("&7Cannot find the player &a" + args[1])); + return; + } + if (args.length != 3) { + sender.sendMessage(Lang.CHEAT_CODES.f("&c/cheatcode remove <player> <cheatcode>")); + return; + } + Optional<CheatCode> optCode = Arrays.stream(CheatCode.values()).filter(c -> c.toString().equalsIgnoreCase(args[2])).findFirst(); + if (!optCode.isPresent()) { + sender.sendMessage(Lang.CHEAT_CODES.f("&cUnable to find cheatcode with name &e" + args[2])); + return; + } + ViceUser user = Vice.getUserManager().getLoadedUser(target.getUniqueId()); + Core.getUserManager().getLoadedUser(target.getUniqueId()).insertLog(target,"takeCheatCodeCommand","CHEATCODE", optCode.get().toString(),1,0); + user.setCheatCodeState(optCode.get(), new CheatCodeState(State.LOCKED, false)); + target.sendMessage(Lang.CHEAT_CODES.f("&7The cheatcode &e" + optCode.get() + " &7has been removed from your account.")); + sender.sendMessage(Lang.CHEAT_CODES.f("&7You have removed the cheatcode &e" + optCode.get() + " &7from &b" + target.getName() + "&7's account.")); + break; + } + case "give": { + if(sender instanceof Player && !Core.getUserManager().getLoadedUser(((Player)sender).getUniqueId()).getUserRank().isHigherThan(UserRank.ADMIN)) { + sender.sendMessage(Lang.NOPERM.f("")); + return; + } + Player target = Bukkit.getPlayer(args[1]); + if(target==null) { + sender.sendMessage(Lang.CHEAT_CODES.f("&7Cannot find the player &a" + args[1])); + return; + } + if (args.length != 3) { + sender.sendMessage(Lang.CHEAT_CODES.f("&c/cheatcode give <player> <cheatcode>")); + return; + } + Optional<CheatCode> optCode = Arrays.stream(CheatCode.values()).filter(c -> c.toString().equalsIgnoreCase(args[2])).findFirst(); + if (!optCode.isPresent()) { + sender.sendMessage(Lang.CHEAT_CODES.f("&cUnable to find cheatcode with name &e" + args[2])); + return; + } + ViceUser user = Vice.getUserManager().getLoadedUser(target.getUniqueId()); + switch (optCode.get()) { + case STACK: + Core.getPermsManager().addPerm(target.getUniqueId(), "command.stack"); + break; + case FIXALL: + Core.getPermsManager().addPerm(target.getUniqueId(), "command.fix.all"); + break; + case FIXHAND: + Core.getPermsManager().addPerm(target.getUniqueId(), "command.fix.hand"); + break; + + } + Core.getUserManager().getLoadedUser(target.getUniqueId()).insertLog(target,"giveCheatCodeCommand","CHEATCODE", optCode.get().toString(),1,0); + user.setCheatCodeState(optCode.get(), new CheatCodeState(optCode.get().getDefaultState(), true)); + sender.sendMessage(Lang.CHEAT_CODES.f("&7You have given &b" + target.getName() + " &7the cheatcode &e" + optCode.get().toString() + "&7!")); + target.sendMessage(Lang.CHEAT_CODES.f("&7You have reiceved the cheatcode &e" + optCode.get().toString() + "&7, go into the kit menu located on your phone to toggle the effects.")); + break; + } + case "view": { + if(sender instanceof Player && !Core.getUserManager().getLoadedUser(((Player)sender).getUniqueId()).getUserRank().isHigherThan(UserRank.ADMIN)) { + sender.sendMessage(Lang.NOPERM.f("")); + return; + } + if(args.length !=2) { + sender.sendMessage(Utils.f("&e/cheatcode view <player>")); + return; + } + Player target = Bukkit.getPlayer(args[1]); + if (target == null) { + new BukkitRunnable() { + @Override + public void run() { + int counter = 0; + Optional<HashMap<CheatCode, CheatCodeState>> optional = CheatCodeDAO.getCheatCodes(args[1]); + if(!optional.isPresent()) { + sender.sendMessage(Lang.CHEAT_CODES.f("&cAn error occurred.")); + return; + } + + counter = optional.get().size(); + + if(counter == 0) { + sender.sendMessage(Lang.CHEAT_CODES.f("&cThat player cannot be found!")); + } + else { + sender.sendMessage(Utils.f("&7Player's Cheat Codes:")); + for(Map.Entry<CheatCode, CheatCodeState> entry : optional.get().entrySet()) { + sender.sendMessage(Utils.f("&2&l" + entry.getKey() + "&7: State: " + (entry.getValue().getState()==State.ON ? "&a " : "&c ") + entry.getValue().getState() + "&7, Purchased: " + (entry.getValue().isPurchased() ? "&atrue" : "&cfalse"))); + } + } + } + }.runTaskAsynchronously(Vice.getInstance()); + return; + } + ViceUser user = Vice.getUserManager().getLoadedUser(target.getUniqueId()); + sender.sendMessage(Utils.f("&7Player's Cheat Codes:")); + for(Map.Entry<CheatCode, CheatCodeState> entry : user.getCheatCodes().entrySet()) { + sender.sendMessage(Utils.f("&2&l" + entry.getKey() + "&7: State: " + (entry.getValue().getState()==State.ON ? "&a " : "&c ") + entry.getValue().getState() + "&7, Purchased: " + (entry.getValue().isPurchased() ? "&atrue" : "&cfalse"))); + } + break; + } + + case "list": { + StringBuilder sb = new StringBuilder("&7Cheat Codes:"); + Arrays.stream(CheatCode.values()).forEach(code -> sb.append(" &a" + code.toString() + "&7,")); + sb.deleteCharAt(sb.length()-1); + sender.sendMessage(Utils.f(sb.toString())); + break; + } + default: { + if(!(sender instanceof Player) || Core.getUserManager().getLoadedUser(((Player)sender).getUniqueId()).getUserRank().isHigherThan(UserRank.ADMIN)) { + sender.sendMessage(Utils.f("&e/cheatcode give <player> <cheatcode> &7- gives a certain player a new cheatcode")); + sender.sendMessage(Utils.f("&e/cheatcode remove <player> <cheatcode> &7- removes a cheatcode from a player")); + sender.sendMessage(Utils.f("&e/cheatcode view <player> &7- view a player's cheatcodes")); + sender.sendMessage(Utils.f("&e/cheatcode list &7- lists all avaliable cheat codes.")); + sender.sendMessage(Utils.f("&e/cheatcode <cheatcode> &7- toggle / activate the specific cheatcode.")); + } + else { + sender.sendMessage(Utils.f("&e/cheatcode <cheatcode> &7- toggle / activate the specific cheatcode.")); + sender.sendMessage(Utils.f("&e/cheatcode list &7- lists all avaliable cheat codes.")); + } + break; + } + } + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/ChunkUnloadCommand.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/ChunkUnloadCommand.java new file mode 100644 index 0000000..9ff092b --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/ChunkUnloadCommand.java @@ -0,0 +1,47 @@ +package net.grandtheftmc.vice.commands; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserRank; +import org.bukkit.Chunk; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; + +import java.util.Arrays; +import java.util.Collection; +import java.util.stream.Collectors; + +public class ChunkUnloadCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command c, String l, String[] args) { + if (!(s instanceof Player)) { + s.sendMessage(Lang.VICE.f("&cYou are not a player!")); + return true; + } + Player player = (Player)s; + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + if(!user.isRank(UserRank.DEV)) { + player.sendMessage(Lang.VICE.f("&7You don't have permission to use this command.")); + return true; + } + Collection<Chunk> chunks = Arrays + .stream(player.getWorld().getLoadedChunks()) + .collect(Collectors.toList()); + for(Chunk chunk : player.getWorld().getLoadedChunks()) { + for(Entity entity : chunk.getEntities()) { + if (entity.getType() == EntityType.PLAYER) { + chunks.remove(chunk); + break; + } + } + } + chunks.forEach(Chunk::unload); + return true; + } +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/ClearCommand.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/ClearCommand.java new file mode 100644 index 0000000..94f7bd3 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/ClearCommand.java @@ -0,0 +1,40 @@ +package net.grandtheftmc.vice.commands; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.vice.ViceUtils; +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class ClearCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command c, String l, String[] args) { + if (!s.hasPermission("command.clear")) { + s.sendMessage(Utils.f("&cYou do not have permission to execute this command!")); + return true; + } + if (!(s instanceof Player)) { + s.sendMessage(Lang.VICE.f("&cYou are not a player!")); + return true; + } + Player player; + if (args.length == 0) { + player = (Player) s; + } else { + if (Bukkit.getPlayer(args[0]) == null) { + s.sendMessage(Lang.VICE.f("&cThat player is not online!")); + return true; + } else { + player = Bukkit.getPlayer(args[0]); + } + } + player.getInventory().iterator().forEachRemaining(itemStack -> player.getInventory().remove(itemStack)); + player.sendMessage(Lang.VICE.f("&7Your inventory has been cleared!")); + ViceUtils.giveGameItems(player); + return true; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/CopCommand.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/CopCommand.java new file mode 100644 index 0000000..8384ec7 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/CopCommand.java @@ -0,0 +1,201 @@ +package net.grandtheftmc.vice.commands; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.ViceUtils; +import net.grandtheftmc.vice.users.CopRank; +import net.grandtheftmc.vice.users.ViceUser; +import net.grandtheftmc.vice.users.ViceUserDAO; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.command.ConsoleCommandSender; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitRunnable; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.*; + +/** + * Created by Liam on 3/07/2017. + */ +public class CopCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command cmd, String lbl, String[] args) { + if (args.length == 0) { + s.sendMessage(Utils.f("&3/cop&7 set <player> <copRank> - Set the player's cop rank")); + s.sendMessage(Utils.f("&3/cop&7 promote <player> - Promotes the player to a higher Cop Rank")); + s.sendMessage(Utils.f("&3/cop&7 resign - Resigns your current position")); + s.sendMessage(Utils.f("&3/cop&7 list - Lists all avaliable online and offline cops")); + s.sendMessage(Utils.f("&3/cop&7 fire <player> - Fire the player from being a Cop")); + return true; + } + switch (args[0].toLowerCase()) { + case "list": { + new BukkitRunnable() { + @Override + public void run() { + HashMap<String, CopRank> onlineCops = new HashMap<>(); + for(Player player : Bukkit.getOnlinePlayers()) { + ViceUser viceUser = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + if(viceUser.getCopRank()!=null) { + onlineCops.put(player.getName(), viceUser.getCopRank()); + } + } + HashMap<String, CopRank> offlineCops = new HashMap<>(); +// ResultSet rs = Core.sql.prepareStatement("SELECT * from " + Core.name() + " WHERE copRank IS NOT NULL;").executeQuery(); +// while (rs.next()) { +// String name = rs.getString("name"); +// if(onlineCops.containsKey(name)) +// continue; +// CopRank rank = CopRank.getRankOrNull(rs.getString("copRank")); +// offlineCops.put(name, rank); +// } + + ViceUserDAO.getCops(onlineCops, offlineCops); + + List<Map.Entry<String,CopRank>> sortedOnline = sortMapByCopRankValueDescending(onlineCops); + List<Map.Entry<String,CopRank>> sortedOffline = sortMapByCopRankValueDescending(offlineCops); + s.sendMessage(Lang.COP.f("&a&lONLINE COPS:")); + sortedOnline.forEach(entry -> {s.sendMessage(Utils.f(ChatColor.GREEN + entry.getKey() + " &7: &3" + entry.getValue()));}); + s.sendMessage(Lang.COP.f("&4&lOFFLINE COPS:")); + sortedOffline.forEach(entry -> {s.sendMessage(Utils.f(ChatColor.RED + entry.getKey() + " &7: &3" + entry.getValue()));}); + } + }.runTaskAsynchronously(Vice.getInstance()); + return true; + } + case "resign": { + if(!(s instanceof Player)) { + s.sendMessage(Lang.COP.f("&7You have to be a player to execute this command!")); + return false; + } + Player player = (Player)s; + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + ViceUser viceUser = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + if(viceUser.getCopRank()!=CopRank.WARDEN) { + viceUser.setCopRank(null, player, user); + s.sendMessage(Lang.COP.f("&7You have resigned as a cop. Thank you for your support with our police force.")); + ViceUtils.updateBoard(player, viceUser); + return true; + } + + new BukkitRunnable() { + @Override + public void run() { + int counter = ViceUserDAO.countCops(CopRank.WARDEN); + + if(counter>=2) { + viceUser.setCopRank(null, player, user); + ViceUtils.updateBoard(player, viceUser); + s.sendMessage(Lang.COP.f("&7You have resigned as a warden. Thank you for your support with our police force.")); + } + else { + s.sendMessage(Lang.COP.f("&7You cannot resign as there are no other wardens to take your place!")); + } + } + }.runTaskAsynchronously(Vice.getInstance()); + return true; + } + case "set": { + if (!senderHasPerms(s)) { + s.sendMessage(Lang.NOPERM.s()); + return false; + } + if (args.length != 3) { + s.sendMessage(Utils.f("&c/cop set <player> <copRank>")); + return false; + } + Player player = Bukkit.getPlayer(args[1]); + if (player == null) { + s.sendMessage(Lang.COPS.f("&7That player is not online!")); + return false; + } + ViceUser viceUser = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + CopRank copRank = CopRank.getRankOrNull(args[2]); + if (copRank == null) { + String msg = Lang.COPS + "&7There is no Cop Rank with the name &3" + args[2] + "&7! Valid ranks: "; + for (CopRank r : CopRank.values()) + msg = msg + "&3" + r.getColoredNameBold() + "&7, "; + if (msg.endsWith("&7, ")) + msg = msg.substring(0, msg.length() - 4); + msg += "&7."; + s.sendMessage(Utils.f(msg)); + return true; + } + ViceUtils.updateBoard(player, viceUser); + viceUser.setCopRank(copRank, player, Core.getUserManager().getLoadedUser(player.getUniqueId())); + s.sendMessage(Lang.COPS.f("&7You set &3&l" + player.getName() + "&7 to " + copRank.getColoredNameBold() + "&7!")); + player.sendMessage(Lang.COPS.f("&7You have been set to " + copRank.getColoredNameBold() + "&7 by &3&l" + s.getName() + "&7!")); + return true; + } + case "promote": { + if (!senderHasPerms(s)) { + s.sendMessage(Lang.NOPERM.s()); + return false; + } + if (args.length != 2) { + s.sendMessage(Utils.f("&c/cop promote <player>")); + return true; + } + Player player = Bukkit.getPlayer(args[1]); + if (player == null) { + s.sendMessage(Lang.COPS.f("&7That player is not online!")); + return true; + } + ViceUser viceUser = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + CopRank copRank = viceUser.isCop() ? viceUser.getCopRank().getNext() : CopRank.COP; + viceUser.setCopRank(copRank, player, Core.getUserManager().getLoadedUser(player.getUniqueId())); + ViceUtils.updateBoard(player, viceUser); + s.sendMessage(Lang.COPS.f("&7You promoted &3&l" + player.getName() + "&7 to " + copRank.getColoredNameBold() + "&7!")); + player.sendMessage(Lang.COPS.f("&7You have been promoted to " + copRank.getColoredNameBold() + "&7 by &3&l" + s.getName() + "&7!")); + return true; + } + case "fire": + if (!senderHasPerms(s)) { + s.sendMessage(Lang.NOPERM.s()); + return true; + } + if (args.length != 2) { + s.sendMessage(Utils.f("&c/cop fire <player>")); + return true; + } + Player player = Bukkit.getPlayer(args[1]); + if (player == null) { + s.sendMessage(Lang.COPS.f("&7That player is not online!")); + return true; + } + ViceUser viceUser = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + viceUser.setCopRank(null, player, Core.getUserManager().getLoadedUser(player.getUniqueId())); + ViceUtils.updateBoard(player, viceUser); + s.sendMessage(Lang.COPS.f("&7You fired &3&l" + player.getName() + "&7 from the police force!")); + player.sendMessage(Lang.COPS.f("&7You have been fired from the police force by &3&l" + s.getName() + "&7!")); + return true; + } + return true; + } + + private boolean senderHasPerms(CommandSender sender) { + if(sender instanceof Player) { + Player player = (Player)sender; + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + ViceUser viceUser = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + return user.isAdmin() && viceUser.getCopRank() == CopRank.WARDEN; + } + return true; + } + + private List<Map.Entry<String,CopRank>> sortMapByCopRankValueDescending(Map<String,CopRank> map) { + List<Map.Entry<String,CopRank>> sortedEntries = new ArrayList<>(map.entrySet()); + + Collections.sort(sortedEntries, (e1, e2) -> e2.getValue().compareTo(e1.getValue())); + + return sortedEntries; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/CoreNPCCommand.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/CoreNPCCommand.java new file mode 100644 index 0000000..6f3c5ca --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/CoreNPCCommand.java @@ -0,0 +1,68 @@ +package net.grandtheftmc.vice.commands; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.Utils; +import net.grandtheftmc.core.commands.CoreCommand; +import net.grandtheftmc.vice.machine.MachineManager; +import net.grandtheftmc.vice.users.npcs.MachineNPC; +import net.grandtheftmc.vice.users.npcs.shopnpc.ShopNPC; +import net.grandtheftmc.vice.users.npcs.TaxiNPC; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; + +/** + * Created by Timothy Lampen on 1/14/2018. + */ +public class CoreNPCCommand extends CoreCommand<Player> { + + private final MachineManager machineManager; + + public CoreNPCCommand(MachineManager machineManager) { + super("corenpc", "commands dealing with corenpcs"); + this.machineManager = machineManager; + } + + @Override + public void execute(Player player, String[] args) { + if(!player.isOp()) { + player.sendMessage(Lang.NOPERM.f("")); + return; + } + + if(args.length==0) { + player.sendMessage(Lang.GTM.f("&7Avaliable NPCs: ")); + player.sendMessage(Utils.f("&aTaxi&7- Opens the taxi menu")); + player.sendMessage(Utils.f("&aShop &7- Opens a food shop menu")); + player.sendMessage(Utils.f("&aMachine &7- NPC for trading machine shards")); + player.sendMessage(Lang.GTM.f("&c/corenpc delete &7- Removes the nearby entity (please stand within 1 block)")); + player.sendMessage(Lang.GTM.f("&c/corenpc spawn <npc>")); + return; + } + + if(args.length==1){ + switch (args[0].toLowerCase()) { + case "delete": + case "remove": + for(Entity e : player.getNearbyEntities(2,2,2)) + Core.getNPCManager().deleteNPC(e); + player.sendMessage(Lang.GTM.f("&cYou have removed nearby npcs.")); + break; + } + return; + } + + switch (args[1].toLowerCase()) { + case "shop": + new ShopNPC(player.getLocation()); + break; + case "machine": + new MachineNPC(this.machineManager, player.getLocation()); + break; + case "taxi": + new TaxiNPC(player.getLocation()); + break; + + } + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/DrugCheckCommand.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/DrugCheckCommand.java new file mode 100644 index 0000000..b2dabbe --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/DrugCheckCommand.java @@ -0,0 +1,33 @@ +package net.grandtheftmc.vice.commands; + +import net.grandtheftmc.core.Lang; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.potion.PotionEffect; + +/** + * Created by Timothy Lampen on 2017-04-22. + */ +public class DrugCheckCommand implements CommandExecutor { + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { + if (args.length != 1) { + sender.sendMessage(Lang.DRUGS.f("&7Syntax Error: /drugcheck <player>")); + return false; + } + Player target = Bukkit.getPlayer(args[0]); + if (target == null) { + sender.sendMessage(Lang.DRUGS.f("&7Error: The specified player is not online.")); + return false; + } + sender.sendMessage(Lang.DRUGS.f("&7Current potion effect portfolio for " + target.getName())); + for (PotionEffect pe : target.getActivePotionEffects()) { + sender.sendMessage(ChatColor.GREEN + pe.getType().getName() + ChatColor.BLUE + " : " + ChatColor.GREEN + pe.getAmplifier() + 1 + ChatColor.BLUE + " : " + ChatColor.GREEN + pe.getDuration() / 20 + "s"); + } + return true; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/FeedCommand.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/FeedCommand.java new file mode 100644 index 0000000..55d7501 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/FeedCommand.java @@ -0,0 +1,58 @@ +package net.grandtheftmc.vice.commands; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.util.C; +import net.grandtheftmc.core.util.State; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.ViceUtils; +import net.grandtheftmc.vice.users.CheatCode; +import net.grandtheftmc.vice.users.ViceUser; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + + +public class FeedCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command c, String l, String[] args) { + /* if (args.length > 0 && s.hasPermission("command.feed.others")) { + player = Bukkit.getPlayer(args[0]); + if (player == null) { + s.sendMessage(Lang.VICE.f("&7That player is not online!")); + return true; + } + player.setFoodLevel(20); + player.setSaturation(20); + s.sendMessage(Lang.VICE.f("&7You fed &a" + player.getName() + "&7!")); + return true; + }*/ + if (!(s instanceof Player)) { + s.sendMessage(Lang.NOTPLAYER.s()); + return true; + } + Player player = (Player) s; + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + ViceUser viceUser = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + if (viceUser.getCheatCodeState(CheatCode.FEED).getState()== State.LOCKED) { + player.sendMessage(Lang.CHEAT_CODES.f(CheatCode.FEED.getLockedLore())); + return true; + } + + if(user.isOnCooldown("feed_command")) { + player.sendMessage(Lang.CHEAT_CODES.f("&7You must wait &a" + Utils.timeInSecondsToText(user.getCooldownTimeLeft("feed_command"), C.RED, C.RED, C.GRAY) + " &7before using this cheatcode again!")); + return true; + } + + user.addCooldown("feed_command", ViceUtils.getFeedDelay(user.getUserRank()), false, true); + player.setFoodLevel(20); + player.setSaturation(20); + player.sendMessage(Lang.VICE.f("&7You fed yourself!")); + return true; + + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/FixCommand.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/FixCommand.java new file mode 100644 index 0000000..6f3c2b2 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/FixCommand.java @@ -0,0 +1,131 @@ +package net.grandtheftmc.vice.commands; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.util.C; +import net.grandtheftmc.core.util.State; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.ViceUtils; +import net.grandtheftmc.vice.durability.DurabilityItems; +import net.grandtheftmc.vice.users.CheatCode; +import net.grandtheftmc.vice.users.ViceUser; +import net.grandtheftmc.vice.utils.DurabilityUtil; +import org.bukkit.Material; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.concurrent.TimeUnit; + +public class FixCommand implements CommandExecutor { + private final List<Material> repairableItems = Arrays.asList( +// Material.LEATHER_CHESTPLATE, +// Material.CHAINMAIL_CHESTPLATE, Material.IRON_CHESTPLATE, +// Material.GOLD_CHESTPLATE, Material.DIAMOND_CHESTPLATE, +// Material.LEATHER_BOOTS, Material.LEATHER_LEGGINGS, +// Material.LEATHER_CHESTPLATE, Material.LEATHER_HELMET, +// Material.DIAMOND_HELMET, Material.ELYTRA + + Material.WOOD_PICKAXE, Material.STONE_PICKAXE,Material.GOLD_PICKAXE,Material.IRON_PICKAXE,Material.DIAMOND_PICKAXE, + Material.WOOD_SPADE, Material.STONE_SPADE,Material.GOLD_SPADE,Material.IRON_SPADE,Material.DIAMOND_SPADE, + Material.WOOD_AXE, Material.STONE_AXE,Material.GOLD_AXE,Material.IRON_AXE,Material.DIAMOND_AXE, + Material.WOOD_HOE, Material.STONE_HOE,Material.GOLD_HOE,Material.IRON_HOE,Material.DIAMOND_HOE + ); + + @Override + public boolean onCommand(CommandSender s, Command c, String l, String[] args) { + if (!(s instanceof Player)) { + s.sendMessage(Lang.NOTPLAYER.s()); + return true; + } + Player player = (Player) s; + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + ViceUser viceUser = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + if (args.length == 0 || args.length == 1 && "hand".equalsIgnoreCase(args[0])) { + if(viceUser.getCheatCodeState(CheatCode.FIXHAND).getState()== State.LOCKED) { + player.sendMessage(Lang.CHEAT_CODES.f(CheatCode.FIXHAND.getLockedLore())); + return false; + } + if(user.isOnCooldown("fix_hand_command")) { + player.sendMessage(Lang.CHEAT_CODES.f("&7You must wait &a" + Utils.timeInSecondsToText(user.getCooldownTimeLeft("fix_hand_command"), C.RED, C.RED, C.GRAY) + " &7before using this cheatcode again!")); + return false; + } + ItemStack item = player.getInventory().getItemInMainHand(); + + Optional<DurabilityItems> durabilityItem = DurabilityUtil.getDurabilityItem(item); + + if(this.repairableItems.contains(item.getType()) || durabilityItem.isPresent()) { + + if (durabilityItem.isPresent()) { + ItemStack newRepaired = repairDurability(item); + player.getInventory().setItem(player.getInventory().getHeldItemSlot(), newRepaired); + } else { + item.setDurability((short)0); + } + + player.sendMessage(Lang.VICE.f("&7You have repaired your " + (item.getItemMeta().getDisplayName() == null ? item.getType().name().toLowerCase().replace("_", "") : item.getItemMeta().getDisplayName()) + "&7!")); + user.addCooldown("fix_hand_command", ViceUtils.getFixHandDelay(user.getUserRank()), false, true); + } else { + player.sendMessage(Lang.VICE.f("&7That item may not be repaired.")); + } + return true; + } else if(args.length == 1 && "all".equalsIgnoreCase(args[0])) { + if(viceUser.getCheatCodeState(CheatCode.FIXALL).getState()== State.LOCKED) { + player.sendMessage(Lang.CHEAT_CODES.f(CheatCode.FIXALL.getLockedLore())); + return false; + } + if(user.isOnCooldown("fix_all_command")) { + player.sendMessage(Lang.CHEAT_CODES.f("&7You must wait &a" + Utils.timeInSecondsToText(user.getCooldownTimeLeft("fix_all_command"), C.RED, C.RED, C.GRAY) + " &7before using this cheatcode again!")); + return false; + } + for(ItemStack item : player.getInventory().getContents()) { + if(item == null) continue; + if(!this.repairableItems.contains(item.getType())) continue; + item.setDurability((short)0); + } + player.sendMessage(Lang.VICE.f("&7You have repaired all damaged items in your inventory!")); + user.addCooldown("fix_all_command", ViceUtils.getFixAllDelay(user.getUserRank()), false, true); + } else { + player.sendMessage(Lang.VICE.f("&7/fix hand - fixes the item in your hand.")); + player.sendMessage(Lang.VICE.f("&7/fix all - fixes all the items in your inventory.")); + return true; + } + return true; + + } + + private ItemStack repairDurability(ItemStack item) { + + Optional<DurabilityItems> durabilityItems = DurabilityUtil.getDurabilityItem(item); + + if (item == null || !durabilityItems.isPresent()) { + return null; + } + + if (item.getItemMeta() != null && !item.getItemMeta().isUnbreakable()) { + ItemMeta itemMeta = item.getItemMeta(); + itemMeta.setUnbreakable(true); + itemMeta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE); + item.setItemMeta(itemMeta); + } + + DurabilityItems durabilityItem = durabilityItems.get(); + + ItemStack newArmour = DurabilityUtil.setDurability(item, durabilityItem.getMaximumDurability()); + DurabilityUtil.setDurabilityLore(newArmour, durabilityItem.getMaximumDurability(), durabilityItem); + + return newArmour; + } +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/HomeCommand.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/HomeCommand.java new file mode 100644 index 0000000..b65c6ca --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/HomeCommand.java @@ -0,0 +1,125 @@ +package net.grandtheftmc.vice.commands; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.commands.CoreCommand; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.ViceUtils; +import net.grandtheftmc.vice.users.TaxiTarget; +import net.grandtheftmc.vice.users.ViceUser; +import net.grandtheftmc.vice.utils.LocationUtil; +import org.bukkit.ChatColor; +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.entity.Player; + +/** + * Created by Timothy Lampen on 2017-08-11. + */ +public class HomeCommand extends CoreCommand<Player> { + + + public HomeCommand() { + super("home", "sets / changes predefined homes for players", "vicesethome", "vicedelhome"); + } + + @Override + public void execute(Player player, String[] args) { + ViceUser user = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + UserRank rank = Core.getUserManager().getLoadedUser(player.getUniqueId()).getUserRankNonTrial(); + if (args.length == 0) { + player.sendMessage(ChatColor.GRAY + "Your " + rank.getColoredNameBold() + ChatColor.GRAY + " and " + user.getRank().getColoredNameBold() + ChatColor.GRAY + " ranks allows you to set " + ChatColor.YELLOW + ChatColor.BOLD + ((ViceUtils.getSetHomes(rank) + ViceUtils.getSetHomes(user.getRank())) - user.getHomes().size()) + ChatColor.GRAY + " more home(s)"); + player.sendMessage(ChatColor.YELLOW + "/home set <name> " + ChatColor.GRAY + "- sets your current location to a home"); + player.sendMessage(ChatColor.YELLOW + "/home delete <name> " + ChatColor.GRAY + "- deletes one of your existing homes"); + player.sendMessage(ChatColor.YELLOW + "/home <name> " + ChatColor.GRAY + "- teleports you to the predefined location"); + player.sendMessage(ChatColor.YELLOW + "/home list " + ChatColor.GRAY + "- lists all of your current homes"); + return; + } + + if(player.getGameMode() != GameMode.SURVIVAL) { + player.sendMessage(Lang.VICE.f("&cYou cannot do this command unless you are in survival!")); + return; + } + + if (args.length == 1) {//theyre teleporting + String id = args[0].toLowerCase(); + switch (args[0].toLowerCase()) { + case "list": { + StringBuilder sb = new StringBuilder("&7Your homes: "); + int counter = 1; + for (String homeName : user.getHomes().keySet()) { + if (counter == user.getHomes().size()) { + sb.append("&e").append(homeName).append("&7."); + } else { + sb.append("&e").append(homeName).append("&7, "); + } + counter++; + } + player.sendMessage(Lang.VICE.f(sb.toString())); + break; + } + default: { + if (user.getHomeLocation(id) != null) { + if (user.isInCombat()) { + player.sendMessage(Lang.COMBATTAG.f("&7You cannot issue this command while in combat!")); + return; + } + + Location destination = user.getHomeLocation(id); + Vice.getWorldManager().getWarpManager().warp(player, Core.getUserManager().getLoadedUser(player.getUniqueId()), user, new TaxiTarget(LocationUtil.isBlockUnsafe(destination.getWorld(), destination.getBlockX(), destination.getBlockY(), destination.getBlockZ()) ? LocationUtil.getSafeDestination(destination) : destination)); + } + + else { + player.sendMessage(Lang.VICE.f("&7You don't have a home named &e" + id)); + } + break; + } + } + } else if (args.length == 2) { + String id = args[1].toLowerCase(); + switch (args[0].toLowerCase()) { + + case "add": + case "set": { + if (user.getHomes().size() >= (ViceUtils.getSetHomes(rank) + ViceUtils.getSetHomes(user.getRank()))) { + player.sendMessage(Lang.VICE.f("&7You already have the maximum amount of homes!")); + return; + } + + if (Core.getWorldManager().usesEditMode(player.getWorld().getName())) { + player.sendMessage(Lang.VICE.f("&7You cannot set your home in this world!")); + return; + } + + user.setHomeLocation(id, player.getLocation()); + player.sendMessage(Lang.VICE.f("&7You have created a new home named &e" + id + " &7at your current location.")); + break; + } + + case "remove": + case "delete": { + if (!user.removeHomeLocation(id)) { + player.sendMessage(Lang.VICE.f("&7You don't have a home named &e" + id)); + break; + } + + player.sendMessage(Lang.VICE.f("&7You have deleted your home named &e" + id)); + break; + } + default: { + player.sendMessage(ChatColor.RED + "Your " + rank.getColoredNameBold() + ChatColor.RED + " rank(s) allows you to set " + ChatColor.YELLOW + (ViceUtils.getSetHomes(rank) + ViceUtils.getSetHomes(user.getRank())) + ChatColor.RED + " homes"); + player.sendMessage(ChatColor.RED + "/home set <name> - sets your current location to a home"); + player.sendMessage(ChatColor.RED + "/home delete <name> - deletes one of your existing homes"); + player.sendMessage(ChatColor.RED + "/home <name> - teleports to the predefined location"); + break; + } + } + } else { + player.sendMessage(ChatColor.RED + "Your " + rank.getColoredNameBold() + ChatColor.RED + " rank(s) allows you to set " + ChatColor.YELLOW + (ViceUtils.getSetHomes(rank) + ViceUtils.getSetHomes(user.getRank())) + ChatColor.RED + " homes"); + player.sendMessage(ChatColor.RED + "/home set <name> - sets your current location to a home"); + player.sendMessage(ChatColor.RED + "/home delete <name> - deletes one of your existing homes"); + player.sendMessage(ChatColor.RED + "/home <name> - teleports to the predefined location"); + } + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/KillCommand.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/KillCommand.java new file mode 100644 index 0000000..7079e1f --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/KillCommand.java @@ -0,0 +1,55 @@ +package net.grandtheftmc.vice.commands; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.vice.Vice; +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class KillCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command c, String lbl, String[] args) { + if (args.length == 0 || "suicide".equalsIgnoreCase(lbl)) { + if (!(s instanceof Player)) { + s.sendMessage(Lang.VICE.f("&cYou are not a player!")); + return true; + } + Player player = (Player) s; + if (Vice.getUserManager().getLoadedUser(player.getUniqueId()).isArrested()) { + player.sendMessage(Lang.JAIL.f("&7You can't kill yourself in jail!")); + return true; + } + player.getActivePotionEffects().forEach(effect -> { + player.removePotionEffect(effect.getType()); + }); + player.damage(player.getHealth()); + return true; + } + if (!s.hasPermission("command.kill")) { + s.sendMessage(Lang.NOPERM.s()); + return true; + } + if (args.length != 1) { + s.sendMessage(Utils.f("&c/kill <player>")); + return true; + } + Player target = Bukkit.getPlayer(args[0]); + if (target == null) { + s.sendMessage(Lang.VICE.f("&7That player is not online!")); + return true; + } + target.getActivePotionEffects().forEach(effect -> { + target.removePotionEffect(effect.getType()); + }); + target.damage(target.getHealth()); + s.sendMessage(Lang.VICE.f("&7You killed &a" + + Core.getUserManager().getLoadedUser(target.getUniqueId()).getColoredName(target) + "&7!")); + return true; + } +} + diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/LogoutCommand.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/LogoutCommand.java new file mode 100644 index 0000000..beb8ef7 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/LogoutCommand.java @@ -0,0 +1,52 @@ +package net.grandtheftmc.vice.commands; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.commands.CoreCommand; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.users.storage.BooleanStorageType; +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitRunnable; + +/** + * Created by Timothy Lampen on 2017-08-14. + */ +public class LogoutCommand extends CoreCommand<Player> { + public LogoutCommand() {//currently disabled, if enabled again, if a player logs out successfully, logs in, logs out without the command, the npc does not spawn see USED_LOGOUT + super("logout", "safetly logs out the user from the server without an NPC"); + } + + @Override + public void execute(Player player, String[] args) { + new LogoutTask(player).runTaskTimer(Vice.getInstance(), 0, 20); + } + + private class LogoutTask extends BukkitRunnable { + + private final Location location; + private int counter = 15; + private final Player player; + + public LogoutTask(Player player){ + this.player = player; + this.location = player.getLocation(); + } + + @Override + public void run() { + if(player.getLocation().distance(location)>1) { + cancel(); + player.sendMessage(Lang.COMBATTAG.f("&7Stopped logging your player out as you have moved.")); + return; + } + player.sendMessage(Lang.COMBATTAG.f("&7Logging your player out in &e&l" + counter + " &7second" + (counter==1 ? "s." : "."))); + if(counter==0){ + Vice.getUserManager().getLoadedUser(player.getUniqueId()).setBooleanToStorage(BooleanStorageType.USED_LOGOUT, true); + player.kickPlayer(Lang.COMBATTAG.f("&7You have successfully logged out.")); + } + else + counter--; + } + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/LotteryCommand.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/LotteryCommand.java new file mode 100644 index 0000000..0809ebf --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/LotteryCommand.java @@ -0,0 +1,92 @@ +package net.grandtheftmc.vice.commands; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.tasks.Lottery; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.time.LocalDateTime; +import java.time.ZoneId; + +public class LotteryCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command c, String l, String[] args) { + if (!s.hasPermission("command.lottery")) { + s.sendMessage(Lang.NOPERM.toString()); + return true; + } + if (args.length == 0) { + s.sendMessage(Utils.f("&c/lottery sethologram")); + s.sendMessage(Utils.f("&c/lottery start <year> <month> <day> <hour> <minute>")); + s.sendMessage(Utils.f("&c/lottery end")); + s.sendMessage(Utils.f("&c/lottery time")); + s.sendMessage(Utils.f("&c/lottery tickets balance <player>")); + s.sendMessage(Utils.f("&c/lottery tickets give/take <player> <amount>")); + return true; + } + switch (args[0].toLowerCase()) { + case "sethologram": + if (!(s instanceof Player)) { + s.sendMessage(Lang.NOTPLAYER.s()); + return true; + } + Player player = (Player) s; + Vice.getLottery().setHologramLocation(player.getLocation()); + s.sendMessage(Lang.LOTTERY.f("&7The hologram has been set at your location.")); + return true; + case "start": + if (args.length != 6) { + s.sendMessage(Lang.LOTTERY.f("&7Please specify when the lottery should end in the following format: /lottery start <year> <month> <day> <hour> <minute>")); + return true; + } + int year = Integer.parseInt(args[1]); + int month = Integer.parseInt(args[2]); + int day = Integer.parseInt(args[3]); + int hour = Integer.parseInt(args[4]); + int minute = Integer.parseInt(args[5]); + LocalDateTime end = LocalDateTime.of(year, month, day, hour, minute); + Vice.getLottery().setEnd(end); + return true; + case "end": { + Vice.getLottery().end(); + return true; + } + case "test": { + Lottery.test(); + return true; + } + case "time": { + s.sendMessage(Lang.LOTTERY.f("&7Current time: " + LocalDateTime.now(ZoneId.of("UTC")))); + s.sendMessage(Lang.LOTTERY.f("&7Time of end: " + Vice.getLottery().getEnd())); + s.sendMessage(Lang.LOTTERY.f("&7Time until end: " + Vice.getLottery().timeToEnd())); + return true; + } + case "tickets": { + if (args.length == 1) { + s.sendMessage(Utils.f("&c/lottery tickets balance <player>")); + s.sendMessage(Utils.f("&c/lottery tickets give/take <player> <amount>")); + return true; + } + switch (args[1]) { + case "balance": + return true; + case "give": + return true; + case "take": + return true; + } + return true; + } + default: + s.sendMessage(Utils.f("&c/lottery")); + return true; + } + } + +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/MoneyCommand.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/MoneyCommand.java new file mode 100644 index 0000000..967879b --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/MoneyCommand.java @@ -0,0 +1,228 @@ +package net.grandtheftmc.vice.commands; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Callback; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.ViceUtils; +import net.grandtheftmc.vice.users.ViceUser; +import net.grandtheftmc.vice.users.ViceUserDAO; +import net.grandtheftmc.vice.utils.MapUtil; +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitRunnable; + +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.*; + +public class MoneyCommand implements CommandExecutor { + @Override + public boolean onCommand(CommandSender s, Command c, String l, String[] args) { + if (args.length == 0) { + s.sendMessage(Utils.f("&c/money balance <player>")); + s.sendMessage(Utils.f("&c/money give <player> <amount>")); + s.sendMessage(Utils.f("&c/money take <player> <amount>")); + s.sendMessage(Utils.f("&c/money top [page] - Shows the baltop for money")); + return true; + } + switch (args[0].toLowerCase()) { + case "balance": { + if (!s.hasPermission("command.money")) { + s.sendMessage(Lang.NOPERM.toString()); + return true; + } + + if (args.length != 2) { + s.sendMessage(Utils.f("&c/money balance <player>")); + return true; + } + Player player = Bukkit.getPlayer(args[1]); + if (player == null) { + UUID senderUUID = s instanceof Player ? ((Player) s).getUniqueId() : null; + s.sendMessage(Utils.f("&cThat player isn't online, so please wait while the permits are pulled from the database.")); + new BukkitRunnable() { + @Override + public void run() { + + Optional<Object[]> objs = ViceUserDAO.getMoneyAndName(args[1]); + if (!objs.isPresent()) return; + + String name = (String) objs.get()[0]; + int money = (int) objs.get()[1]; +// try(ResultSet rs = Core.getSQL().query("select name,money from " + Core.name() + " where name='" + args[1] + "';")) { +// if (rs.next()) { +// name = rs.getString("name"); +// money = rs.getInt("money"); +// rs.close(); +// } else { +// rs.close(); +// return; +// } +// } catch (SQLException e) { +// e.printStackTrace(); +// } + String finalName = name; + int finalMoney = money; + new BukkitRunnable() { + @Override + public void run() { + (senderUUID == null ? Bukkit.getConsoleSender() : Bukkit.getPlayer(senderUUID)).sendMessage(Lang.MONEY.f("&a " + finalName + " has $" + finalMoney)); + } + }.runTask(Vice.getInstance()); + } + }.runTaskAsynchronously(Vice.getInstance()); + return true; + } + ViceUser user = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + s.sendMessage(Utils.f(Lang.MONEY + "&a" + player.getName() + "&7 has &a$&l" + user.getMoney() + "&7!")); + return true; + } + case "give": { + if (!s.hasPermission("command.money")) { + s.sendMessage(Lang.NOPERM.toString()); + return true; + } + + if (args.length != 3) { + s.sendMessage(Utils.f("&c/money give <player>")); + return true; + } + double amnt; + try { + amnt = Double.parseDouble(args[2]); + } catch (NumberFormatException e) { + s.sendMessage(Utils.f(Lang.MONEY + "&7The amount must be a number!")); + return true; + } + Player player = Bukkit.getPlayer(args[1]); + if (player == null) { + s.sendMessage(Utils.f("&cThat player isn't online, so hold on a second while the money is forcibly updated in the database.")); +// Core.getSQL().updateAsyncLater("update " + Core.name() + " set money=money+" + amnt + " where name='" + args[1] + "';"); + ServerUtil.runTaskAsync(() -> ViceUserDAO.addMoney(args[1], amnt)); + return true; + } + ViceUser user = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + user.addMoney(amnt); + ViceUtils.updateBoard(player, Core.getUserManager().getLoadedUser(player.getUniqueId()), user); + s.sendMessage(Utils.f(Lang.MONEY + "&7You gave &a$&l" + amnt + "&7 to &a" + player.getName() + "&7!")); + player.sendMessage( + Utils.f(Lang.MONEY + "&7You were given &a$&l" + amnt + "&7 by &a" + s.getName() + "&7!")); + return true; + } + case "take": { + if (!s.hasPermission("command.money")) { + s.sendMessage(Lang.NOPERM.toString()); + return true; + } + + if (args.length != 3) { + s.sendMessage(Utils.f("&c/money take <player>")); + return true; + } + double amnt; + try { + amnt = Double.parseDouble(args[2]); + } catch (NumberFormatException e) { + s.sendMessage(Utils.f(Lang.MONEY + "&7The amount must be a number!")); + return true; + } + Player player = Bukkit.getPlayer(args[1]); + if (player == null) { + s.sendMessage(Utils.f("&cThat player isn't online, so hold on a second while the money is forcibly updated in the database.")); +// Core.getSQL().updateAsyncLater("update " + Core.name() + " set money=money-" + amnt + " where name='" + args[1] + "';"); + double finalAmnt = amnt; + ServerUtil.runTaskAsync(() -> ViceUserDAO.takeMoney(args[1], finalAmnt)); + return true; + } + ViceUser user = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + if (!user.hasMoney(amnt)) + amnt = user.getMoney(); + user.takeMoney(amnt); + ViceUtils.updateBoard(player, Core.getUserManager().getLoadedUser(player.getUniqueId()), user); + s.sendMessage(Utils.f(Lang.MONEY + "&7You took &c$&l" + amnt + "&7 from &a" + player.getName() + "&7!")); + player.sendMessage( + Utils.f(Lang.MONEY + "&c$&l" + amnt + "&7 was taken from you by &a" + s.getName() + "&7!")); + return true; + } + + case "top": + if (!(s instanceof Player)) { + s.sendMessage(Lang.NOTPLAYER.s()); + return true; + } + + UUID uuid = ((Player) s).getUniqueId(); + new BukkitRunnable() { + @Override public void run() { + getTopBalance(10, results -> new BukkitRunnable() { + @Override + public void run() { + Player player = Bukkit.getPlayer(uuid); + if (player == null) return; + player.sendMessage( Lang.MONEY.f("&7Money Top:")); + + int i = 0; + for (String key : results.keySet()) { + i++; + player.sendMessage(Utils.f("&a#&l" + (i) + "&7: &r" + key + "&7 &a" + Utils.formatMoney(results.get(key)))); + } + } + }.runTask(Vice.getInstance())); + } + }.runTaskAsynchronously(Vice.getInstance()); + return true; + default: + if (s.hasPermission("command.money")) { + s.sendMessage(Utils.f("&c/money balance <player>")); + s.sendMessage(Utils.f("&c/money give <player> <amount>")); + s.sendMessage(Utils.f("&c/money take <player> <amount>")); + } + s.sendMessage(Utils.f("&c/money top - Shows the baltop for money")); + return true; + } + + } + + private void getTopBalance(int amount, Callback<LinkedHashMap<String, Double>> callback) { + LinkedHashMap<String, Double> results = new LinkedHashMap<>(); + + Optional<Object[][]> optional = ViceUserDAO.getBalanceTop(amount); + if(!optional.isPresent()) return; + + for(int i = 0; i < optional.get().length; i++) { + results.put((String)optional.get()[i][0], (double)optional.get()[i][1]); + } + + callback.call(results); + +// PreparedStatement statement = null; +// try { +// final String query = "SELECT `money`,`name` FROM `" + Core.name() + "` ORDER BY cast(`money` as double) DESC LIMIT " + amount + ";"; +// statement = Core.sql.prepareStatement(query); +// ResultSet set = statement.executeQuery(); +// while(set.next()) { +// results.put(set.getString("name"), set.getDouble("money")); +// } +// +// callback.call(results); +// } +// catch (SQLException e) { +// e.printStackTrace(); +// } +// finally { +// try { +// if(statement != null) +// statement.close(); +// } catch (SQLException e) { +// e.printStackTrace(); +// } +// } + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/NearCommand.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/NearCommand.java new file mode 100644 index 0000000..3efd747 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/NearCommand.java @@ -0,0 +1,54 @@ +package net.grandtheftmc.vice.commands; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.vice.ViceUtils; +import org.apache.commons.lang.StringUtils; +import org.bukkit.GameMode; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +public class NearCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command c, String l, String[] args) { + if (!(s instanceof Player)) { + s.sendMessage(Lang.VICE.f("&cYou are not a player!")); + return true; + } + Player player = (Player)s; + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + if (!user.isRank(UserRank.VIP)) { + player.sendMessage(Lang.VICE.f("&7You must be &6&lVIP+ &7to use this command!")); + return true; + } + Map<String, Integer> nearbySet = new HashMap<>(); + int range = ViceUtils.getNearRange(user.getUserRank()); + for(Entity entity : player.getNearbyEntities(range, range, range)) { + if(entity.getType() != EntityType.PLAYER) continue; + Player target = (Player)entity; + if(target.getGameMode() != GameMode.ADVENTURE && target.getGameMode() != GameMode.SURVIVAL) continue; + int distance = (int)player.getLocation().distance(target.getLocation()); + nearbySet.put(target.getDisplayName(), distance); + } + List<String> nearbyFormatted = nearbySet.keySet().stream().map(set -> set + " &f(&c" + nearbySet.get(set) + "b&f)").collect(Collectors.toList()); + if(nearbyFormatted.isEmpty()) { + player.sendMessage(Lang.VICE.f("&7No nearby players found.")); + } else { + String message = StringUtils.join(nearbyFormatted, ", "); + player.sendMessage(Lang.VICE.f("&7Players nearby:" + message)); + } + return true; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/PayCommand.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/PayCommand.java new file mode 100644 index 0000000..f46155b --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/PayCommand.java @@ -0,0 +1,68 @@ +package net.grandtheftmc.vice.commands; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.ViceUtils; +import net.grandtheftmc.vice.users.ViceUser; +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class PayCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command c, String l, String[] args) { + if (!(s instanceof Player)) { + s.sendMessage(Lang.NOTPLAYER.toString()); + return true; + } + if (args.length != 2) { + s.sendMessage(Utils.f("&c/pay <player> <amount>")); + return true; + } + Player player = (Player) s; + ViceUser user = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + double amnt; + try { + amnt = Utils.round(Double.parseDouble(args[1])); + } catch (NumberFormatException e) { + s.sendMessage(Utils.f(Lang.MONEY + "&7The amount must be a number!")); + return true; + } + if (amnt <= 0) { + s.sendMessage(Lang.MONEY.f("&7The amount must be greater than 0!")); + return true; + } + if (!user.hasMoney(amnt)) { + s.sendMessage(Utils.f(Lang.MONEY + "&7You don't have &c$&l" + amnt + "&7!")); + return true; + } + if (amnt % 1 != 0) { + s.sendMessage(Utils.f(Lang.MONEY + "&7Whole numbers only! No pennies.")); + return true; + } + Player target = Bukkit.getPlayer(args[0]); + if (target == null) { + s.sendMessage(Utils.f(Lang.MONEY + "&7That player is not online!")); + return true; + } + ViceUser targetUser = Vice.getUserManager().getLoadedUser(target.getUniqueId()); + User u = Core.getUserManager().getLoadedUser(player.getUniqueId()); + User tu = Core.getUserManager().getLoadedUser(target.getUniqueId()); + user.takeMoney(amnt); + targetUser.addMoney(amnt); + ViceUtils.updateBoard(player, u, user); + ViceUtils.updateBoard(target, tu, targetUser); + player.sendMessage(Utils.f(Lang.MONEY + "&7You sent &a$&l" + amnt + "&7 to " + tu.getColoredName(target) + "&7!")); + target.sendMessage(Utils.f(Lang.MONEY + "&7You received &a$&l" + amnt + "&7 from " + u.getColoredName(player) + "&7!")); + if (amnt > 100000) + ViceUtils.moneylog(player, target, amnt); + return true; + } + +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/PrestigeCommand.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/PrestigeCommand.java new file mode 100644 index 0000000..96838c1 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/PrestigeCommand.java @@ -0,0 +1,24 @@ +package net.grandtheftmc.vice.commands; + +import net.grandtheftmc.core.commands.CoreCommand; +import org.bukkit.ChatColor; +import org.bukkit.entity.Player; + +/** + * Created by Timothy Lampen on 2017-08-11. + */ +public class PrestigeCommand extends CoreCommand<Player> { + public PrestigeCommand() { + super("prestige", "gives rewards to players for continuing after regular ranks."); + } + + @Override + public void execute(Player player, String[] args) { + if(args.length==0){ + player.sendMessage(ChatColor.GRAY + "/prestige confirm " + ChatColor.YELLOW + " - prestige's your player account"); + player.sendMessage(ChatColor.GRAY + "/prestige list " + ChatColor.YELLOW + " - lists all prestige tiers avaliable and costs"); + player.sendMessage(""); + return; + } + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/RTPCommand.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/RTPCommand.java new file mode 100644 index 0000000..ccbad14 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/RTPCommand.java @@ -0,0 +1,70 @@ +package net.grandtheftmc.vice.commands; + +import com.massivecraft.factions.Board; +import com.massivecraft.factions.FLocation; +import com.massivecraft.factions.Faction; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.users.TaxiTarget; +import net.grandtheftmc.vice.users.ViceUser; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.World; +import org.bukkit.block.Biome; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.concurrent.ThreadLocalRandom; + +public class RTPCommand implements CommandExecutor { + + + @Override + public boolean onCommand(CommandSender s, Command c, String lbl, String[] args) { + if (!(s instanceof Player)) { + s.sendMessage(Lang.NOTPLAYER.s()); + return true; + } + Player player = (Player) s; + ViceUser viceUser = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + if (!viceUser.canRTP()) { + player.sendMessage(Lang.TAXI.f("&7Please wait &a&l" + Utils.timeInMillisToText(viceUser.getTimeUntilRTP()) + "&7 before using this command!")); + return true; + } + World world = Bukkit.getWorld("world"); + boolean unfit = true; + int tries = 0; + Location loc = new Location(world, 0, 0, 0); + while (unfit) { + if (tries > 100) { + player.sendMessage(Lang.TAXI.f("&7Could not find suitable location to teleport you to. Please try again.")); + return true; + } + loc = new Location(world, + ThreadLocalRandom.current().nextInt(5000), + 0, + ThreadLocalRandom.current().nextInt(5000)); + loc.setY(world.getHighestBlockYAt(loc)); + Faction factionAt = Board.getInstance().getFactionAt(new FLocation(loc)); + Biome biome = world.getBiome(loc.getBlockX(), loc.getBlockZ()); + Material material = loc.getWorld().getHighestBlockAt(loc).getType(); + unfit = !factionAt.isWilderness() + || biome == Biome.OCEAN || biome == Biome.DEEP_OCEAN + || biome == Biome.FROZEN_OCEAN || biome == Biome.SKY + || biome == Biome.VOID || biome == Biome.RIVER || material == Material.WATER || material == Material.STATIONARY_WATER || material == Material.LAVA || material == Material.STATIONARY_LAVA || material == Material.CACTUS; + tries += 1; + } + loc.setY(loc.getY() + 0.5); + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + viceUser.setLastRTP(); + Vice.getWorldManager().getWarpManager().warp(player, user, viceUser, new TaxiTarget(loc), 0, -1, + "&eYou called a taxi to take you to &a" + loc.getBlockX() + "&e, &a" + loc.getBlockY() + "&e, &a" + loc.getBlockZ() + "&e in the wilderness.."); + return true; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/RankupCommand.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/RankupCommand.java new file mode 100644 index 0000000..7eb9ba8 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/RankupCommand.java @@ -0,0 +1,49 @@ +package net.grandtheftmc.vice.commands; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.users.ViceRank; +import net.grandtheftmc.vice.users.ViceUser; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class RankupCommand implements CommandExecutor { + @Override + public boolean onCommand(CommandSender s, Command c, String l, String[] args) { + if (!(s instanceof Player)) { + s.sendMessage(Lang.NOTPLAYER.toString()); + return true; + } + Player player = (Player) s; + ViceUser user = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + User u = Core.getUserManager().getLoadedUser(player.getUniqueId()); + if (user.isArrested()) { + player.sendMessage(Lang.JAIL.f("&7You can't rank up in jail!")); + return true; + } + if (args.length == 1 && "confirm".equalsIgnoreCase(args[0])) { + user.rankup(player, u); + return true; + } + ViceRank nextRank = user.getRank().getNext(); + if (nextRank == null) { + player.sendMessage(Utils.f(Lang.RANKUP + "&7You can't rank up any more!")); + return true; + } + int price = nextRank.getPrice(); + + if (!user.hasMoney(price)) { + player.sendMessage(Utils.f(Lang.RANKUP + "&7You don't have the &c$&l" + price + "&7 required to rank up!")); + return true; + } + player.sendMessage(Utils.f(Lang.RANKUP + "&7Ranking up to " + nextRank.getColoredNameBold() + "&7 costs &a$&l" + price + "&7.")); + player.sendMessage(Utils.f(Lang.RANKUP + "&7Type &a/rankup confirm&7 to rank up!")); + return true; + } + +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/ResetCommand.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/ResetCommand.java new file mode 100644 index 0000000..54aac4e --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/ResetCommand.java @@ -0,0 +1,321 @@ +package net.grandtheftmc.vice.commands; + +import com.j0ach1mmall3.wastedvehicles.api.VehicleProperties; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.database.dao.VoteDAO; +import net.grandtheftmc.core.users.UserDAO; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.items.AmmoType; +import net.grandtheftmc.vice.users.ViceRank; +import net.grandtheftmc.vice.users.ViceUserDAO; +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.io.File; +import java.util.UUID; + +public class ResetCommand implements CommandExecutor { + + + @Override + public boolean onCommand(CommandSender s, Command c, String lbl, String[] args) { + if (!s.isOp()) { + s.sendMessage(Lang.NOPERM.s()); + return true; + } + + if (args.length < 2) { + s.sendMessage(Utils.f("&c/reset&7 <target> <category/all>")); + s.sendMessage(Utils.f("&7Categories: tokens, bucks, votes, dailyStreak," + + " lastDonorReward, cosmetics, rank (ViceRank), money, bonds," + + " backpack, kitExpiries, jail, ammo, vehicles, inventory (includes echest)")); + return true; + } + + if (args.length > 2) return true; + + String name = args[0]; + Player target = Bukkit.getPlayer(name); + UUID uuid = null; + if (target != null) { + name = target.getName(); + uuid = target.getUniqueId(); + target.kickPlayer("You are being reset by an admin."); + } + + String finalName = name; + UUID finalUniqueId = uuid; + + if ("all".equalsIgnoreCase(args[1])) { + ServerUtil.runTaskAsync(() -> { + if (finalUniqueId == null) { + UUID value = UserDAO.getUuidByName(finalName); + if (value != null) { + File file = new File(Bukkit.getWorldContainer() + "/" + Bukkit.getWorlds().get(0).getName() + "/playerdata/" + value.toString()); + if (file.exists()) file.delete(); + } + } + else { + File file = new File(Bukkit.getWorldContainer() + "/" + Bukkit.getWorlds().get(0).getName() + "/playerdata/" + finalUniqueId.toString()); + if (file.exists()) file.delete(); + } + +// Core.sql.updateAsyncLater("update users set tokens=0, bucks=0, votes=0, voteStreak=0, lastVoteStreak=0, dailyStreak=0, lastDailyReward=0, lastDonorReward=0 where lastname='" + name + "';"); + UserDAO.reset(finalName); + +// Core.sql.updateAsyncLater("delete from cosmetics where name='" + finalName + "';"); + UserDAO.deleteFromByName(finalName, "cosmetics"); + +// Core.sql.updateAsyncLater("delete from " + Core.name() + " where name='" + finalName + "';"); + UserDAO.deleteFromByName(finalName, Core.name()); + +// Core.sql.updateAsyncLater("update " + Core.name() + " set backpackContents=NULL where name='" + finalName + "';"); + ViceUserDAO.setBackpackContents(finalName, null); + + ServerUtil.runTask(() -> s.sendMessage(Utils.f("&7You fully reset player &a" + finalName + "&7!"))); + }); + +// if (finalName == null) { +// new BukkitRunnable() { +// @Override +// public void run() { +// ResultSet rs = Core.sql.query("select uuid from users where lastname='" + finalName + "';"); +// UUID uuid = null; +// try { +// if (rs.next()) { +// uuid = UUID.fromString(rs.getString("uuid")); +// rs.close(); +// return; +// } +// rs.close(); +// } catch (SQLException e) { +// e.printStackTrace(); +// } +// UUID uuid = UserDAO.getUuidByName(finalName); +// if (uuid != null) { +// File file = new File(Bukkit.getWorldContainer() + "/" + Bukkit.getWorlds().get(0).getName() + "/playerdata/" + uuid); +// if (file.exists()) file.delete(); +// } +// } +// }.runTaskAsynchronously(Vice.getInstance()); +// } else { +// File file = new File(Bukkit.getWorldContainer() + "/" + Bukkit.getWorlds().get(0).getName() + "/playerdata/" + uuid); +// if (file.exists()) file.delete(); +// } +// Core.sql.updateAsyncLater("update users set tokens=0, bucks=0, votes=0, voteStreak=0, lastVoteStreak=0, dailyStreak=0, lastDailyReward=0, lastDonorReward=0 where lastname='" + name + "';"); +// Core.sql.updateAsyncLater("delete from cosmetics where name='" + name + "';"); +// Core.sql.updateAsyncLater("delete from " + Core.name() + " where name='" + name + "';"); +// Core.sql.updateAsyncLater("update " + Core.name() + " set backpackContents=NULL where name='" + name + "';"); +// s.sendMessage(Utils.f("&7You fully reset player &a" + name + "&7!")); + return true; + } + + switch (args[1].toLowerCase()) { + case "inventory": + ServerUtil.runTaskAsync(() -> { + if (finalUniqueId == null) { + UUID value = UserDAO.getUuidByName(finalName); + if (value != null) { + File file = new File(Bukkit.getWorldContainer() + "/" + Bukkit.getWorlds().get(0).getName() + "/playerdata/" + value.toString()); + if (file.exists()) file.delete(); + } + } + else { + File file = new File(Bukkit.getWorldContainer() + "/" + Bukkit.getWorlds().get(0).getName() + "/playerdata/" + finalUniqueId.toString()); + if (file.exists()) file.delete(); + } + + ServerUtil.runTask(() -> s.sendMessage(Utils.f("&7You reset player &a" + finalName + "&7 for category &a" + args[1] + "&7!"))); + }); + +// if (uuid == null) { +// new BukkitRunnable() { +// @Override +// public void run() { +// ResultSet rs = Core.sql.query("select uuid from users where lastname='" + finalName + "';"); +// UUID uuid = null; +// try { +// if (rs.next()) { +// uuid = UUID.fromString(rs.getString("uuid")); +// rs.close(); +// return; +// } +// rs.close(); +// } catch (SQLException e) { +// e.printStackTrace(); +// } +// File file = new File(Bukkit.getWorldContainer() + "/" + Bukkit.getWorlds().get(0).getName() + "/playerdata/" + uuid); +// if (file.exists()) file.delete(); +// } +// }.runTaskAsynchronously(Vice.getInstance()); +// } else { +// UUID finalUuid = uuid; +// new BukkitRunnable() { +// @Override +// public void run() { +// File file = new File(Bukkit.getWorldContainer() + "/" + Bukkit.getWorlds().get(0).getName() + "/playerdata/" + finalUuid); +// if (file.exists()) file.delete(); +// } +// }.runTaskAsynchronously(Vice.getInstance()); +// } +// s.sendMessage(Utils.f("&7You reset player &a" + name + "&7 for category &a" + args[1] + "&7!")); + return true; + + case "tokens": +// Core.sql.updateAsyncLater("update users set tokens=0 where lastname='" + name + "';"); + ServerUtil.runTaskAsync(() -> UserDAO.updateUserTokensByName(finalName, 0)); + s.sendMessage(Utils.f("&7You reset player &a" + name + "&7 for category &a" + args[1] + "&7!")); + return true; + + case "bucks": +// Core.sql.updateAsyncLater("update users set bucks=0 where lastname='" + name + "';"); + ServerUtil.runTaskAsync(() -> UserDAO.updateUserBucksByName(finalName, 0)); + s.sendMessage(Utils.f("&7You reset player &a" + name + "&7 for category &a" + args[1] + "&7!")); + return true; + + case "votes": +// Core.sql.updateAsyncLater("update users set votes=0, voteStreak=0, lastVoteStreak=0 where lastname='" + name + "';"); + ServerUtil.runTaskAsync(() -> { + VoteDAO.updateVoteStreakByName(finalName, 0); + VoteDAO.updateUserVotesByName(finalName, 0); + VoteDAO.updateUserLastVoteStreakByName(finalName, 0); + + ServerUtil.runTask(() -> s.sendMessage(Utils.f("&7You reset player &a" + finalName + "&7 for category &a" + args[1] + "&7!"))); + }); + return true; + + case "dailystreak": +// Core.sql.updateAsyncLater("update users set dailyStreak=0, lastDailyReward=0 where lastname='" + name + "';"); + ServerUtil.runTaskAsync(() -> { + VoteDAO.updateUserDailyStreakByName(finalName, 0); + VoteDAO.updateUserLastDailyRewardByName(finalName, 0); + + ServerUtil.runTask(() -> s.sendMessage(Utils.f("&7You reset player &a" + finalName + "&7 for category &a" + args[1] + "&7!"))); + }); +// s.sendMessage(Utils.f("&7You reset player &a" + name + "&7 for category &a" + args[1] + "&7!")); + return true; + + case "lastdonorreward": +// Core.sql.updateAsyncLater("update users set lastDonorReward=0 where lastname='" + name + "';"); + ServerUtil.runTaskAsync(() -> { + UserDAO.updateUserLastDonorRewardByName(finalName, 0); + + ServerUtil.runTask(() -> s.sendMessage(Utils.f("&7You reset player &a" + finalName + "&7 for category &a" + args[1] + "&7!"))); + }); +// s.sendMessage(Utils.f("&7You reset player &a" + name + "&7 for category &a" + args[1] + "&7!")); + return true; + + case "cosmetics": +// Core.sql.updateAsyncLater("delete from cosmetics where name='" + name + "';"); + ServerUtil.runTaskAsync(() -> { + UserDAO.deleteFromByName(finalName, "cosmetic"); + + ServerUtil.runTask(() -> s.sendMessage(Utils.f("&7You reset player &a" + finalName + "&7 for category &a" + args[1] + "&7!"))); + }); +// s.sendMessage(Utils.f("&7You reset player &a" + name + "&7 for category &a" + args[1] + "&7!")); + return true; + + case "rank": +// Core.sql.updateAsyncLater("update " + Core.name() + " set rank='JUNKIE' where name='" + name + "';"); + ServerUtil.runTaskAsync(() -> { + ViceUserDAO.setRank(finalName, ViceRank.JUNKIE); + + ServerUtil.runTask(() -> s.sendMessage(Utils.f("&7You reset player &a" + finalName + "&7 for category &a" + args[1] + "&7!"))); + }); +// s.sendMessage(Utils.f("&7You reset player &a" + name + "&7 for category &a" + args[1] + "&7!")); + return true; + + case "money": +// Core.sql.updateAsyncLater("update " + Core.name() + " set money=0 where name='" + name + "';"); + ServerUtil.runTaskAsync(() -> { + ViceUserDAO.setMoney(finalName, 0); + + ServerUtil.runTask(() -> s.sendMessage(Utils.f("&7You reset player &a" + finalName + "&7 for category &a" + args[1] + "&7!"))); + }); +// s.sendMessage(Utils.f("&7You reset player &a" + name + "&7 for category &a" + args[1] + "&7!")); + return true; + + case "bonds": +// Core.sql.updateAsyncLater("update " + Core.name() + " set bonds=0 where name='" + name + "';"); + ServerUtil.runTaskAsync(() -> { + ViceUserDAO.setBonds(finalName, 0); + + ServerUtil.runTask(() -> s.sendMessage(Utils.f("&7You reset player &a" + finalName + "&7 for category &a" + args[1] + "&7!"))); + }); +// s.sendMessage(Utils.f("&7You reset player &a" + name + "&7 for category &a" + args[1] + "&7!")); + return true; + + case "backpack": +// Core.sql.updateAsyncLater("update " + Core.name() + " set backpackContents=NULL where name='" + name + "';"); + ServerUtil.runTaskAsync(() -> { + ViceUserDAO.setBackpackContents(finalName, null); + + ServerUtil.runTask(() -> s.sendMessage(Utils.f("&7You reset player &a" + finalName + "&7 for category &a" + args[1] + "&7!"))); + }); +// s.sendMessage(Utils.f("&7You reset player &a" + name + "&7 for category &a" + args[1] + "&7!")); + return true; + + case "kitexpiries": +// Core.sql.updateAsyncLater("update " + Core.name() + " set kitExpiries=null where name='" + name + "';"); + ServerUtil.runTaskAsync(() -> { + ViceUserDAO.updateKitExpiries(finalName, null); + + ServerUtil.runTask(() -> s.sendMessage(Utils.f("&7You reset player &a" + finalName + "&7 for category &a" + args[1] + "&7!"))); + }); +// s.sendMessage(Utils.f("&7You reset player &a" + name + "&7 for category &a" + args[1] + "&7!")); + return true; + + case "jail": +// Core.sql.updateAsyncLater("update " + Core.name() + " set jailTimer=-1, jailCop=NULL, jailCopName=NULL where name='" + name + "';"); + ServerUtil.runTaskAsync(() -> { + ViceUserDAO.resetJail(finalName); + ServerUtil.runTask(() -> s.sendMessage(Utils.f("&7You reset player &a" + finalName + "&7 for category &a" + args[1] + "&7!"))); + }); +// s.sendMessage(Utils.f("&7You reset player &a" + name + "&7 for category &a" + args[1] + "&7!")); + return true; + + case "ammo": { + String[] st = {""}; + for (AmmoType type : AmmoType.values()) + st[0] += type.getGameItemName() + "=0, "; + + if (st[0].endsWith(", ")) + st[0] = st[0].substring(0, st[0].length() - 2); + +// Core.sql.updateAsyncLater("update " + Core.name() + " set " + st + " where name='" + name + "';"); + ServerUtil.runTaskAsync(() -> { + ViceUserDAO.resetAllAmmo(finalName, st[0]); + ServerUtil.runTask(() -> s.sendMessage(Utils.f("&7You reset player &a" + finalName + "&7 for category &a" + args[1] + "&7!"))); + }); +// s.sendMessage(Utils.f("&7You reset player &a" + name + "&7 for category &a" + args[1] + "&7!")); + return true; + } + + case "vehicles": + String[] st = {"personalVehicle=NULL, "}; + for (VehicleProperties v : Vice.getWastedVehicles().getBabies().getVehicleProperties()) + st[0] += '`' + v.getIdentifier().toLowerCase() + "`=0, `" + v.getIdentifier().toLowerCase() + ":info`=NULL, "; + +// Core.sql.updateAsyncLater("update " + Core.name() + " set " + st + " where name='" + name + "';"); + ServerUtil.runTaskAsync(() -> { + ViceUserDAO.resetAllVehicles(finalName, st[0]); + ServerUtil.runTask(() -> s.sendMessage(Utils.f("&7You reset player &a" + finalName + "&7 for category &a" + args[1] + "&7!"))); + }); +// s.sendMessage(Utils.f("&7You reset player &a" + name + "&7 for category &a" + args[1] + "&7!")); + return true; + + default: + s.sendMessage(Utils.f("&c/reset&7 <target> <category/all>")); + s.sendMessage(Utils.f("&7Categories: tokens, bucks, votes, dailyStreak," + + " lastDonorReward, rank (ViceRank), money, bonds, backpack, kitExpiries, jail, ammo, vehicles")); + return true; + } + + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/ResetStatsCommand.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/ResetStatsCommand.java new file mode 100644 index 0000000..80f2b1d --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/ResetStatsCommand.java @@ -0,0 +1,33 @@ +package net.grandtheftmc.vice.commands; + +import net.grandtheftmc.core.Lang; +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.potion.PotionEffect; + +/** + * Created by Timothy Lampen on 2017-08-10. + */ +public class ResetStatsCommand implements CommandExecutor{ + @Override + public boolean onCommand(CommandSender sender, Command cmd, String s, String[] args) { + if(!sender.hasPermission("command.resetstats")) return false; + if(args.length==1) { + Player player = Bukkit.getPlayer(args[0]); + if (player == null){ + sender.sendMessage(Lang.VICE.f("&7That player is not online!")); + return false; + } + sender.sendMessage(Lang.VICE.f("&7You have reset the stats of &b" + player.getName() + "&7!")); + player.sendMessage(Lang.VICE.f("&7Your stats have been reset by &b" + sender.getName() + "&b!")); + player.setMaxHealth(20); + for(PotionEffect e : player.getActivePotionEffects()){ + player.removePotionEffect(e.getType()); + } + } + return true; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/ResourcePackCommand.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/ResourcePackCommand.java new file mode 100644 index 0000000..7087af2 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/ResourcePackCommand.java @@ -0,0 +1,48 @@ +package net.grandtheftmc.vice.commands; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.resourcepack.ResourcePack; +import net.grandtheftmc.core.util.NMSVersion; +import net.grandtheftmc.vice.Vice; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import us.myles.ViaVersion.api.Via; + +public class ResourcePackCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command c, String lbl, String[] args) { + if (!(s instanceof Player)) { + s.sendMessage(Lang.VICE.f("&cYou are not a player!")); + return true; + } + Player player = (Player) s; +// int version = Via.getAPI().getPlayerVersion(player.getUniqueId()); +// String url; +// if (version >= 315) { +// player.setResourcePack(Vice.getSettings().getOneElevenRespack()); +// url = Vice.getSettings().getOneElevenRespack(); +// } else { +// player.setResourcePack(Vice.getSettings().getOneTenRespack()); +// url = Vice.getSettings().getOneTenRespack(); +// } +// player.sendMessage(Lang.VICE.f("&cYou can download the server resource pack here: &b" + url)); + + NMSVersion version = NMSVersion.getVersion(player); + if(version== NMSVersion.MC_1_8) { + player.sendMessage(Lang.GTM.f("&4Your client version is not supported! Please use 1.9+")); + return false; + } + ResourcePack pack = Vice.getResourcePackManager().getResourcePack(version); + if(pack != null) { +// player.setResourcePack(pack.getPack(), pack.getHash().getBytes()); Correct hash? + player.setResourcePack(pack.getPack()); + } + else { + player.setResourcePack(Vice.getResourcePackManager().getResourcePack(NMSVersion.MC_1_11).getPack()); + } + return true; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/SellCommand.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/SellCommand.java new file mode 100644 index 0000000..8aa818f --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/SellCommand.java @@ -0,0 +1,38 @@ +package net.grandtheftmc.vice.commands; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Utils; +import net.grandtheftmc.core.commands.CoreCommand; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.util.C; +import net.grandtheftmc.core.util.State; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.users.CheatCode; +import net.grandtheftmc.vice.users.ViceUser; +import org.bukkit.entity.Player; + +public class SellCommand extends CoreCommand<Player> { + + public SellCommand() { + super("sell", "Quick sell, open a virtual trashcan", "qsell", "quicksell"); + } + + @Override + public void execute(Player sender, String[] strings) { + sender.closeInventory(); + User user = Core.getUserManager().getLoadedUser(sender.getUniqueId()); + ViceUser viceUser = Vice.getUserManager().getLoadedUser(sender.getUniqueId()); + if (viceUser.getCheatCodeState(CheatCode.QUICKSELL).getState() == State.LOCKED && !user.getUserRank().hasRank(UserRank.ELITE)) { + sender.sendMessage(Utils.f("&cThis command requires the &7QuickSell Cheatcode&c or &e&lELITE&c!")); + return; + } + + if (viceUser.isInCombat()) { + sender.sendMessage(C.RED + "You cannot sell items while in combat!"); + return; + } + + sender.sendMessage(C.RED + "You can only use this cheatcode in your House or at spawn."); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/SkinCommand.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/SkinCommand.java new file mode 100644 index 0000000..a266c80 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/SkinCommand.java @@ -0,0 +1,206 @@ +package net.grandtheftmc.vice.commands; + +import java.util.Optional; + +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Utils; +import net.grandtheftmc.core.commands.CoreCommand; +import net.grandtheftmc.core.commands.RankedCommand; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.guns.weapon.Weapon; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.users.ViceUser; + +public class SkinCommand extends CoreCommand<Player> implements RankedCommand { + public SkinCommand() { + super("skin", "A command used to manage weapon skins."); + } + + @Override + public void execute(Player sender, String[] args) { + User user = Core.getUserManager().getLoadedUser(sender.getUniqueId()); + ViceUser ViceUser = Vice.getUserManager().getLoadedUser(sender.getUniqueId()); + + if (user.isAdmin()) { + if (args.length == 3) { + if (args[0].equalsIgnoreCase("unlock")) { + Optional<Weapon<?>> weaponOpt = null; + + try { + short weaponID = Short.parseShort(args[1]); + + weaponOpt = Vice.getWastedGuns().getWeaponManager().getWeapon(weaponID); + } catch (NumberFormatException e) { + String weaponName = args[1]; + + weaponOpt = Vice.getWastedGuns().getWeaponManager().getWeapon(weaponName); + } + + if (weaponOpt.isPresent()) { + Weapon<?> weapon = weaponOpt.get(); + + try { + short skinID = Short.parseShort(args[2]); + WeaponSkin skin = weapon.getWeaponSkins().length > skinID ? weapon.getWeaponSkins()[skinID] : null; + + if (skin != null) { + if (ViceUser.getRawUnlockedWeaponSkins().get(weapon.getUniqueIdentifier()) == null + || !ViceUser.getRawUnlockedWeaponSkins().get(weapon.getUniqueIdentifier()).contains((short) (skin.getIdentifier() - weapon.getWeaponIdentifier()))) { + ViceUser.unlockWeaponSkin(weapon, skin); + + sender.sendMessage(Utils.f("&7You unlocked this skin!")); + } else { + sender.sendMessage(Utils.f("&cThis skin has already been unlocked!")); + } + } else { + sender.sendMessage(Utils.f("&cA skin with this ID does not exist!")); + } + } catch (NumberFormatException e) { + sender.sendMessage(Utils.f("&cThe skin ID has to be a number!")); + } + } else { + sender.sendMessage(Utils.f("&cA weapon with this name/ID does not exist!")); + } + } else if (args[0].equalsIgnoreCase("lock")) { + Optional<Weapon<?>> weaponOpt = null; + + try { + short weaponID = Short.parseShort(args[1]); + + weaponOpt = Vice.getWastedGuns().getWeaponManager().getWeapon(weaponID); + } catch (NumberFormatException e) { + String weaponName = args[1]; + + weaponOpt = Vice.getWastedGuns().getWeaponManager().getWeapon(weaponName); + } + + if (weaponOpt.isPresent()) { + Weapon<?> weapon = weaponOpt.get(); + + try { + short skinID = Short.parseShort(args[2]); + WeaponSkin skin = weapon.getWeaponSkins().length > skinID ? weapon.getWeaponSkins()[skinID] : null; + + if (skin != null) { + if (ViceUser.getRawUnlockedWeaponSkins().get(weapon.getUniqueIdentifier()) != null + && ViceUser.getRawUnlockedWeaponSkins().get(weapon.getUniqueIdentifier()).contains((short) (skin.getIdentifier() - weapon.getWeaponIdentifier()))) { + ViceUser.lockWeaponSkin(weapon, skin); + + sender.sendMessage(Utils.f("&7You locked this skin!")); + } else { + sender.sendMessage(Utils.f("&cThis skin has already been locked!")); + } + } else { + sender.sendMessage(Utils.f("&cA skin with this ID does not exist!")); + } + } catch (NumberFormatException e) { + sender.sendMessage(Utils.f("&cThe skin ID has to be a number!")); + } + } else { + sender.sendMessage(Utils.f("&cA weapon with this name/ID does not exist!")); + } + } + } else if (args.length == 4) { + if (args[0].equalsIgnoreCase("unlock")) { + Player otherPlayer = Bukkit.getPlayer(args[1]); + + if (otherPlayer != null && otherPlayer.isOnline()) { + ViceUser otherViceUser = Vice.getUserManager().getLoadedUser(otherPlayer.getUniqueId()); + Optional<Weapon<?>> weaponOpt = null; + + try { + short weaponID = Short.parseShort(args[2]); + + weaponOpt = Vice.getWastedGuns().getWeaponManager().getWeapon(weaponID); + } catch (NumberFormatException e) { + String weaponName = args[2]; + + weaponOpt = Vice.getWastedGuns().getWeaponManager().getWeapon(weaponName); + } + + if (weaponOpt.isPresent()) { + Weapon<?> weapon = weaponOpt.get(); + + try { + short skinID = Short.parseShort(args[3]); + WeaponSkin skin = weapon.getWeaponSkins().length > skinID ? weapon.getWeaponSkins()[skinID] : null; + + if (skin != null) { + if (otherViceUser.getRawUnlockedWeaponSkins().get(weapon.getUniqueIdentifier()) == null + || !otherViceUser.getRawUnlockedWeaponSkins().get(weapon.getUniqueIdentifier()).contains((short) (skin.getIdentifier() - weapon.getWeaponIdentifier()))) { + otherViceUser.unlockWeaponSkin(weapon, skin); + + sender.sendMessage(Utils.f("&7You unlocked this skin for &a" + otherPlayer.getName() + "!")); + } else { + sender.sendMessage(Utils.f("&a" + otherPlayer.getName() + " already has this skin unlocked!")); + } + } else { + sender.sendMessage(Utils.f("&cA skin with this ID does not exist!")); + } + } catch (NumberFormatException e) { + sender.sendMessage(Utils.f("&cThe skin ID has to be a number!")); + } + } else { + sender.sendMessage(Utils.f("&cA weapon with this name/ID does not exist!")); + } + } + } else if (args[0].equalsIgnoreCase("lock")) { + Player otherPlayer = Bukkit.getPlayer(args[1]); + + if (otherPlayer != null && otherPlayer.isOnline()) { + ViceUser otherViceUser = Vice.getUserManager().getLoadedUser(otherPlayer.getUniqueId()); + Optional<Weapon<?>> weaponOpt = null; + + try { + short weaponID = Short.parseShort(args[2]); + + weaponOpt = Vice.getWastedGuns().getWeaponManager().getWeapon(weaponID); + } catch (NumberFormatException e) { + String weaponName = args[2]; + + weaponOpt = Vice.getWastedGuns().getWeaponManager().getWeapon(weaponName); + } + + if (weaponOpt.isPresent()) { + Weapon<?> weapon = weaponOpt.get(); + + try { + short skinID = Short.parseShort(args[3]); + WeaponSkin skin = weapon.getWeaponSkins().length > skinID ? weapon.getWeaponSkins()[skinID] : null; + + if (skin != null) { + if (otherViceUser.getRawUnlockedWeaponSkins().get(weapon.getUniqueIdentifier()) != null + && otherViceUser.getRawUnlockedWeaponSkins().get(weapon.getUniqueIdentifier()).contains((short) (skin.getIdentifier() - weapon.getWeaponIdentifier()))) { + otherViceUser.lockWeaponSkin(weapon, skin); + + sender.sendMessage(Utils.f("&7You locked this skin for &a" + otherPlayer.getName() + "!")); + } else { + sender.sendMessage(Utils.f("&a" + otherPlayer.getName() + " already has this skin locked!")); + } + } else { + sender.sendMessage(Utils.f("&cA skin with this ID does not exist!")); + } + } catch (NumberFormatException e) { + sender.sendMessage(Utils.f("&cThe skin ID has to be a number!")); + } + } else { + sender.sendMessage(Utils.f("&cA weapon with this name/ID does not exist!")); + } + } + } + } + } else { + sender.sendMessage(Utils.f("&cYou do not have permission to execute this command!")); + } + } + + @Override + public UserRank requiredRank() { + return UserRank.DEFAULT; + } +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/SkinsCommand.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/SkinsCommand.java new file mode 100644 index 0000000..b0efc69 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/SkinsCommand.java @@ -0,0 +1,26 @@ +package net.grandtheftmc.vice.commands; + +import org.bukkit.entity.Player; + +import net.grandtheftmc.core.commands.CoreCommand; +import net.grandtheftmc.core.commands.RankedCommand; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.vice.weapon.skins.menu.MainMenu; + +public class SkinsCommand extends CoreCommand<Player> implements RankedCommand { + public SkinsCommand() { + super("skins", "View or equip your weapon skins."); + } + + @Override + public void execute(Player sender, String[] args) { + if (args.length == 0) { + new MainMenu(sender).open(); + } + } + + @Override + public UserRank requiredRank() { + return UserRank.DEFAULT; + } +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/SpawnCommand.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/SpawnCommand.java new file mode 100644 index 0000000..fabd2cc --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/SpawnCommand.java @@ -0,0 +1,54 @@ +package net.grandtheftmc.vice.commands; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.users.TaxiTarget; +import net.grandtheftmc.vice.world.warps.WarpManager; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class SpawnCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command c, String lbl, String[] args) { + if (!(s instanceof Player)) { + s.sendMessage(Lang.NOTPLAYER.s()); + return true; + } + WarpManager wm = Vice.getWorldManager().getWarpManager(); + Player player = (Player) s; + if (args.length == 0) { + wm.warp(player, Core.getUserManager().getLoadedUser(player.getUniqueId()), + Vice.getUserManager().getLoadedUser(player.getUniqueId()), new TaxiTarget(wm.getSpawn()), 0, -1); + + return true; + } + if (!s.hasPermission("warps.admin")) { + s.sendMessage(Lang.NOPERM.s()); + return true; + } + switch (args[0].toLowerCase()) { + case "setspawn": + wm.setSpawn(player.getLocation()); + s.sendMessage(Utils.f("&aYou set the spawn!")); + return true; + case "settutorialspawn": + wm.setTutorialSpawn(player.getLocation()); + s.sendMessage(Utils.f("&aYou set the tutorial spawn!")); + return true; + case "setjail": + wm.setJail(player.getLocation()); + s.sendMessage(Utils.f("&aYou set the jail spawn!")); + return true; + default: + s.sendMessage(Utils.f("&c/spawn")); + s.sendMessage(Utils.f("&c/spawn setspawn")); + s.sendMessage(Utils.f("&c/spawn settutorialspawn")); + return true; + } + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/SpectatorCommand.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/SpectatorCommand.java new file mode 100644 index 0000000..a6e0b70 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/SpectatorCommand.java @@ -0,0 +1,64 @@ +package net.grandtheftmc.vice.commands; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserRank; +import org.bukkit.Bukkit; +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.event.player.PlayerTeleportEvent; + +import java.util.ArrayList; +import java.util.List; + +public class SpectatorCommand implements CommandExecutor { + private static final List<String> ACTIVE_STAFF = new ArrayList<>(); + + public static List<String> getActiveStaff() { + return ACTIVE_STAFF; + } + + @Override + public boolean onCommand(CommandSender s, Command c, String l, String[] args) { + if (!(s instanceof Player)) { + s.sendMessage(Lang.NOTPLAYER.s()); + return true; + } + Player sender = (Player) s; + User coreSender = Core.getUserManager().getLoadedUser(sender.getUniqueId()); + if (!coreSender.isRank(UserRank.ADMIN)) { + sender.sendMessage(Lang.VICE.f("&7Permission denied!")); + return true; + } + if (ACTIVE_STAFF.contains(sender.getName())) { + ACTIVE_STAFF.remove(sender.getName()); + sender.sendMessage(Lang.VICE.f("&bSpectator Mode disabled!")); + sender.setGameMode(GameMode.SURVIVAL); + sender.teleport(Bukkit.getWorld("spawn").getSpawnLocation(), PlayerTeleportEvent.TeleportCause.COMMAND); + sender.setFlySpeed(0.1F); + } else { + ACTIVE_STAFF.add(sender.getName()); + sender.sendMessage(Lang.VICE.f("&bSpectator Mode enabled!")); + sender.teleport(this.getMapLocation(), PlayerTeleportEvent.TeleportCause.COMMAND); + sender.setGameMode(GameMode.SPECTATOR); + } + return true; + } + + private Location getMapLocation() { + Location loc = Bukkit.getWorlds().get(0).getSpawnLocation(); + if (Bukkit.getWorld("minesantos") == null) { + return loc; + } + loc.setWorld(Bukkit.getWorld("minesantos")); + loc.setX(-133.59); + loc.setY(96.000000); + loc.setZ(244.431); + return loc; + } +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/SpeedCommand.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/SpeedCommand.java new file mode 100644 index 0000000..3fd69e5 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/SpeedCommand.java @@ -0,0 +1,60 @@ +package net.grandtheftmc.vice.commands; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserRank; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class SpeedCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command c, String l, String[] args) { + if (!(s instanceof Player)) { + s.sendMessage(Lang.VICE.f("&cYou are not a player!")); + return true; + } + Player player = (Player)s; + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + if(SpectatorCommand.getActiveStaff().contains(player.getName()) || user.isRank(UserRank.ADMIN)) { + if(args.length != 1) { + player.sendMessage(Lang.VICE.f("&7Usage: /speed <1-10>")); + } else { + float speed = Float.valueOf(args[0]); + if(user.isRank(UserRank.ADMIN) && !player.isFlying()) { + speed = getRealMoveSpeed(speed, false); + player.setWalkSpeed(speed); + } else { + speed = getRealMoveSpeed(speed, true); + player.setFlySpeed(speed); + } + player.sendMessage(Lang.VICE.f("&7Your " + (player.isFlying() ? "fly" : "walk") + + " speed has been set to &a" + Integer.min(Integer.valueOf(args[0]), 10))); + } + } else if(user.isRank(UserRank.HELPOP)) { + player.sendMessage(Lang.VICE.f("&7You must be in spectator mode to use this command.")); + } + return true; + } + + private float getRealMoveSpeed(float userSpeed, final boolean isFly) { + final float defaultSpeed = isFly ? 0.1f : 0.2f; + float maxSpeed = 1f; + + if (userSpeed > 10f) { + userSpeed = 10f; + } else if (userSpeed < 0.0001f) { + userSpeed = 0.0001f; + } + + if (userSpeed < 1f) { + return defaultSpeed * userSpeed; + } else { + float ratio = ((userSpeed - 1) / 9) * (maxSpeed - defaultSpeed); + return ratio + defaultSpeed; + } + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/StackCommand.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/StackCommand.java new file mode 100644 index 0000000..1182a02 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/StackCommand.java @@ -0,0 +1,100 @@ +package net.grandtheftmc.vice.commands; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.util.C; +import net.grandtheftmc.core.util.State; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.ViceUtils; +import net.grandtheftmc.vice.items.ArmorUpgrade; +import net.grandtheftmc.vice.items.GameItem; +import net.grandtheftmc.vice.users.CheatCode; +import net.grandtheftmc.vice.users.ViceUser; +import net.grandtheftmc.vice.utils.DurabilityUtil; +import org.bukkit.Material; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.scheduler.BukkitRunnable; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class StackCommand implements CommandExecutor { + private static final List<Material> UNUSUAL_UNSTACKABLE_MATERIALS = new ArrayList<>(Arrays.asList(Material.CHEST, Material.WATCH, Material.SKULL, Material.SKULL_ITEM)); + @Override + public boolean onCommand(CommandSender s, Command c, String l, String[] args) { + if (!(s instanceof Player)) { + s.sendMessage(Lang.NOTPLAYER.toString()); + return true; + } + Player player = (Player) s; + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + ViceUser ViceUser = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + + if (ViceUser.getCheatCodeState(CheatCode.STACK).getState()== State.LOCKED) { + player.sendMessage(Lang.CHEAT_CODES.f(CheatCode.STACK.getLockedLore())); + return false; + } + if(user.isOnCooldown("stack_command")) { + player.sendMessage(Lang.CHEAT_CODES.f("&7You must wait &a" + Utils.timeInSecondsToText(user.getCooldownTimeLeft("stack_command"), C.RED, C.RED, C.GRAY) + " &7before using this cheatcode again!")); + return false; + } + int affected = 0; + for(int i = 0; i<player.getInventory().getSize(); i++) { + ItemStack is = player.getInventory().getItem(i); + if(is==null || is.getType()==Material.AIR) + continue; + if(UNUSUAL_UNSTACKABLE_MATERIALS.contains(is.getType()) && is.getAmount()>=1) + continue; + GameItem gameItem = Vice.getItemManager().getItem(is); + if(ViceUtils.isArmorPiece(is.getType()) && (DurabilityUtil.getDurability(is)-1!=is.getType().getMaxDurability())) + continue; + int maxStackSize = (ViceUtils.isTool(is.getType()) && is.getEnchantments().size()==0) || ViceUtils.isArmorPiece(is.getType()) || (gameItem!=null && (gameItem.getType()== GameItem.ItemType.DRUG || gameItem.getType()== GameItem.ItemType.WEAPON)) ? 64 : is.getMaxStackSize(); + if(is.getAmount()>=maxStackSize) + continue; + int amountNeeded = maxStackSize-is.getAmount(); + for(int j = i+1; j<player.getInventory().getSize(); j++) { + ItemStack compare = player.getInventory().getItem(j); + if(compare==null || compare.getDurability()!=is.getDurability() || compare.getType()!=is.getType() || (ViceUtils.isArmorPiece(compare.getType()) && ( DurabilityUtil.getDurability(compare)-1!=compare.getType().getMaxDurability()) || (is.getEnchantments().size()!=compare.getEnchantments().size() || !is.getEnchantments().keySet().containsAll(compare.getEnchantments().keySet())) || (ArmorUpgrade.getArmorUpgrades(is).size()!=ArmorUpgrade.getArmorUpgrades(compare).size() || !ArmorUpgrade.getArmorUpgrades(is).containsAll(ArmorUpgrade.getArmorUpgrades(compare))))) + continue; + if(is.getAmount()>=maxStackSize) + break; + if(compare.getAmount()>amountNeeded) { + is.setAmount(maxStackSize); + compare.setAmount(compare.getAmount()-amountNeeded); + affected++; + break; + } + else { + is.setAmount(is.getAmount()+compare.getAmount()); + amountNeeded -= compare.getAmount(); + player.getInventory().setItem(j, null); + affected++; + } + } + player.getInventory().setItem(i, is); + } + + if (affected > 0) { + // user.addCooldown("stack_command", ViceUtils.getStackDelay(user.getUserRank()), false, true); + new BukkitRunnable() { + @Override + public void run() { + player.updateInventory(); + } + }.runTaskLater(Core.getInstance(), 5); + player.sendMessage(Lang.VICE.f("&7Items compacted into stacks!")); + } else { + player.sendMessage(Lang.VICE.f("&7No stackable items found!")); + } + return true; + } + + +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/StatsCommand.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/StatsCommand.java new file mode 100644 index 0000000..39e953d --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/StatsCommand.java @@ -0,0 +1,39 @@ +package net.grandtheftmc.vice.commands; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.vice.utils.Stats; +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class StatsCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command c, String l, String[] args) { + if (!(s instanceof Player)) { + s.sendMessage(Lang.VICE.f("&cYou are not a player!")); + return true; + } + Player player = (Player)s; + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + if(args.length == 0) { + player.sendMessage(Core.getAnnouncer().getHeader()); + Stats.getInstance().getStats(player).forEach(message -> player.sendMessage(message)); + player.sendMessage(Core.getAnnouncer().getFooter()); + } else { + if(Bukkit.getPlayer(args[0]) != null) { + Player target = Bukkit.getPlayer(args[0]); + player.sendMessage(Core.getAnnouncer().getHeader()); + Stats.getInstance().getStats(target).forEach(message -> player.sendMessage(message)); + player.sendMessage(Core.getAnnouncer().getFooter()); + } else { + player.sendMessage(Lang.VICE.f("&7Player not found!")); + } + } + return true; + } +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/TeleportCommand.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/TeleportCommand.java new file mode 100644 index 0000000..f61217b --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/TeleportCommand.java @@ -0,0 +1,83 @@ +package net.grandtheftmc.vice.commands; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserRank; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class TeleportCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command c, String l, String[] args) { + if (!(s instanceof Player)) { + s.sendMessage(Lang.NOTPLAYER.s()); + return true; + } + Player sender = (Player) s; + User coreSender = Core.getUserManager().getLoadedUser(sender.getUniqueId()); + if (!coreSender.isRank(UserRank.HELPOP) || !coreSender.isRank(UserRank.ADMIN) && !SpectatorCommand.getActiveStaff().contains(sender.getName())) { + sender.sendMessage(Lang.VICE.f("&7Permission denied!")); + return true; + } + if (args.length == 1) { + Player target = Bukkit.getPlayer(args[0]); + if (target == null) { + sender.sendMessage(Lang.VICE.f("&7That player is not online!")); + return true; + } + if (Core.getUserManager().getLoadedUser(target.getUniqueId()).isRank(UserRank.ADMIN) && !coreSender.isRank(UserRank.ADMIN)) { + sender.sendMessage(Lang.VICE.f("&7You may not teleport to that player.")); + return true; + } + sender.teleport(target.getLocation()); + sender.sendMessage(Lang.VICE.f("&7You have been teleported to" + target.getDisplayName() + "&7!")); + } else if (args.length == 2) { + if (!coreSender.isRank(UserRank.ADMIN)) { + sender.sendMessage(Lang.VICE.f("&7Permission denied!")); + return true; + } + Player targetFrom = Bukkit.getPlayer(args[0]); + Player targetTo = Bukkit.getPlayer(args[1]); + if (targetFrom == null || targetTo == null) { + sender.sendMessage(Lang.VICE.f("&7Player(s) not found!")); + return true; + } + if (Core.getUserManager().getLoadedUser(targetFrom.getUniqueId()).isRank(UserRank.ADMIN) || + Core.getUserManager().getLoadedUser(targetTo.getUniqueId()).isRank(UserRank.ADMIN)) { + sender.sendMessage(Lang.VICE.f("&7You may not teleport that player.")); + return true; + } + targetFrom.teleport(targetTo.getLocation()); + sender.sendMessage(Lang.VICE.f("&7You teleported " + targetFrom.getDisplayName() + + " to " + targetTo.getDisplayName() + '!')); + } + else if(args.length==3){ + int[] coords = new int[3]; + for (int i = 0; i < 3; i++) { + try{ + coords[i] = Integer.parseInt(args[i]); + }catch (NumberFormatException nfe){ + sender.sendMessage(Lang.VICE.f("&7You did not input a number!")); + return false; + } + } + + sender.teleport(new Location(sender.getWorld(), coords[0], coords[1], coords[2])); + sender.sendMessage(Lang.VICE.f("&7You have been teleported to the selected coordinates.")); + } + else { + sender.sendMessage(Lang.VICE.f("&7Usage:")); + sender.sendMessage(Utils.f("&a/teleport <player>")); + sender.sendMessage(Utils.f("&a/teleport <playerfrom> <playerto>")); + sender.sendMessage(Utils.f("&a/teleport <x> <y> <z>")); + } + return true; + } +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/TokenShopCommand.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/TokenShopCommand.java new file mode 100644 index 0000000..5b36ea6 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/TokenShopCommand.java @@ -0,0 +1,24 @@ +package net.grandtheftmc.vice.commands; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.menus.MenuManager; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +/** + * Created by colt on 11/6/16. + */ +public class TokenShopCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command c, String l, String[] args) { + if (!(s instanceof Player)) { + s.sendMessage(Lang.NOTPLAYER.s()); + return true; + } + MenuManager.openMenu((Player)s, "tokenshop"); + return true; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/TopKillersCommand.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/TopKillersCommand.java new file mode 100644 index 0000000..8905be1 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/TopKillersCommand.java @@ -0,0 +1,36 @@ +package net.grandtheftmc.vice.commands; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.vice.ViceUtils; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.Iterator; +import java.util.Map; + +public class TopKillersCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command c, String l, String[] args) { + if (!(s instanceof Player)) { + s.sendMessage(Lang.VICE.f("&cYou are not a player!")); + return true; + } + Player player = (Player)s; + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + Map<String, Integer> topKillers = ViceUtils.sortByValue(ViceUtils.getTopKillers(5)); + Iterator iterator = topKillers.entrySet().iterator(); + int i = 1; + while (iterator.hasNext()) { + Map.Entry pair = (Map.Entry)iterator.next(); + player.sendMessage(Utils.f("&7#" + i++ + " &a" + pair.getKey() + " &7- " + pair.getValue() + " &7kills")); + iterator.remove(); + } + return true; + } +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/TpaCommand.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/TpaCommand.java new file mode 100644 index 0000000..d5eb528 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/TpaCommand.java @@ -0,0 +1,60 @@ +package net.grandtheftmc.vice.commands; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.users.ViceUser; +import net.grandtheftmc.vice.world.warps.WarpManager; +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.UUID; + +public class TpaCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command c, String lbl, String[] args) { + if (!(s instanceof Player)) { + s.sendMessage(Utils.f(Lang.TAXI + "&eYou are not a player!")); + return true; + } + WarpManager wm = Vice.getWorldManager().getWarpManager(); + Player player = (Player) s; + UUID uuid = player.getUniqueId(); + User user = Core.getUserManager().getLoadedUser(uuid); + ViceUser viceUser = Vice.getUserManager().getLoadedUser(uuid); + switch (lbl) { + case "tpa": + if (args.length != 1) { + s.sendMessage(Utils.f("&c/tpa <player>")); + return true; + } + wm.tpa(player, user, viceUser, Bukkit.getPlayer(args[0])); + return true; + case "tpahere": + if (args.length != 1) { + s.sendMessage(Utils.f("&c/tpahere <player>")); + return true; + } + wm.tpaHere(player, user, viceUser, Bukkit.getPlayer(args[0])); + return true; + case "tpdeny": + case "tpno": + wm.tpDeny(player, user, viceUser); + return true; + default: + if (args.length != 0) { + s.sendMessage(Utils.f("&c/" + lbl)); + return true; + } + wm.tpAccept(player, user, viceUser); + return true; + } + } + +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/VehicleCommand.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/VehicleCommand.java new file mode 100644 index 0000000..d25ac75 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/VehicleCommand.java @@ -0,0 +1,132 @@ +package net.grandtheftmc.vice.commands; + +import com.j0ach1mmall3.wastedvehicles.api.VehicleProperties; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.users.ViceUser; +import net.grandtheftmc.vice.users.ViceUserDAO; +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.List; +import java.util.Optional; + +/** + * Created by Liam on 24/09/2016. + */ +public class VehicleCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command cmd, String lbl, String[] args) { + if (!s.hasPermission("command.vehicle")) { + s.sendMessage(Lang.NOPERM.s()); + return true; + } + if (args.length == 0) { + s.sendMessage(Lang.VEHICLES.f("&7/vehicle list [player]")); + s.sendMessage(Lang.VEHICLES.f("&7/vehicle give <player> <name>")); + s.sendMessage(Lang.VEHICLES.f("&7/vehicle remove <player> <name>")); + return true; + } + switch (args[0].toLowerCase()) { + case "list": + if (args.length > 2) { + s.sendMessage(Utils.f("&c/vehicle list <type>")); + return true; + } + List<VehicleProperties> vehicles = Vice.getWastedVehicles().getBabies().getVehicleProperties(); + if (args.length == 2) { + Player player = Bukkit.getPlayer(args[1]); + if (player == null) { + s.sendMessage(Lang.VEHICLES.f("&7That player is not online!")); + return true; + } + ViceUser user = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + vehicles = user.getVehicleProperties(); + if (vehicles.isEmpty()) { + s.sendMessage(Lang.VEHICLES.f("&7That player has no vehicles!")); + return true; + } + String msg = ""; + for (VehicleProperties v : vehicles) + if (player == null || user.hasVehicle(v.getIdentifier())) + msg += "&c" + v.getIdentifier() + "&7, "; + if (msg.endsWith("&7, ")) + msg.substring(0, msg.length() - 4); + s.sendMessage(Lang.VEHICLES.f("&7List of vehicles of player " + player.getName() + "&7:")); + s.sendMessage(Utils.f(msg)); + return true; + } else if (vehicles.isEmpty()) { + s.sendMessage(Lang.VEHICLES.f("&7There are no vehicles!")); + return true; + } + String msg = ""; + for (VehicleProperties v : vehicles) + msg += "&c" + v.getIdentifier() + "&7, "; + if (msg.endsWith("&7, ")) + msg.substring(0, msg.length() - 4); + s.sendMessage(Lang.VEHICLES.f("&7List of vehicles:")); + s.sendMessage(Utils.f(msg)); + return true; + case "give": { + if (args.length != 3) { + s.sendMessage(Utils.f("&c/vehicle give <player> <name>")); + return true; + } + Player player = Bukkit.getPlayer(args[1]); + Optional<VehicleProperties> opt = Vice.getWastedVehicles().getVehicle(args[2]); + if (opt == null || !opt.isPresent() || opt.get() == null) { + s.sendMessage(Lang.VEHICLES.f("&7That vehicle does not exist!")); + return true; + } + VehicleProperties vehicle = opt.get(); + if (player == null) { +// Core.sql.updateAsyncLater("update " + Core.name() + " set `" + vehicle.getIdentifier().toLowerCase() + "`=true where name='" + args[1] + "';"); + ServerUtil.runTaskAsync(() -> ViceUserDAO.setVehiclePerm(args[1], vehicle, true)); + + s.sendMessage(Lang.VEHICLES.f("&7That player is not online, so his vehicles have been updated directly in the database!")); + return true; + } + ViceUser user = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + user.giveVehiclePerm(player, vehicle); + s.sendMessage(Lang.VEHICLES.f("&7You gave vehicle &a" + vehicle.getIdentifier() + "&7 to player " + player.getName() + "&7!")); + return true; + } + case "remove": + if (args.length != 3) { + s.sendMessage(Utils.f("&c/vehicle remove <player> <name>")); + return true; + } + Player player = Bukkit.getPlayer(args[1]); + Optional<VehicleProperties> opt = Vice.getWastedVehicles().getVehicle(args[2]); + if (opt == null || !opt.isPresent() || opt.get() == null) { + s.sendMessage(Lang.VEHICLES.f("&7That vehicle does not exist!")); + return true; + } + VehicleProperties vehicle = opt.get(); + if (player == null) { +// Core.sql.updateAsyncLater("update " + Core.name() + " set `" + vehicle.getIdentifier().toLowerCase() + "`=false where name='" + args[1] + "';"); + ServerUtil.runTaskAsync(() -> ViceUserDAO.setVehiclePerm(args[1], vehicle, false)); + + s.sendMessage(Lang.VEHICLES.f("&7That player is not online, so his vehicles have been updated directly in the database!")); + return true; + } + ViceUser user = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + user.removeVehiclePerm(player, vehicle); + s.sendMessage(Lang.VEHICLES.f("&7You removed vehicle &a" + vehicle.getIdentifier() + "&7 from player " + player.getName() + "&7!")); + return true; + default: + s.sendMessage(Lang.VEHICLES.f("&7/vehicle list [player]")); + s.sendMessage(Lang.VEHICLES.f("&7/vehicle give <player> <name>")); + s.sendMessage(Lang.VEHICLES.f("&7/vehicle remove <player> <name>")); + return true; + } + + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/ViceAdminCommand.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/ViceAdminCommand.java new file mode 100644 index 0000000..8d1a0d7 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/ViceAdminCommand.java @@ -0,0 +1,95 @@ +package net.grandtheftmc.vice.commands; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.users.ViceUser; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +import java.util.Map; + +public class ViceAdminCommand implements CommandExecutor { + + + @Override + public boolean onCommand(CommandSender s, Command c, String lbl, String[] args) { + if (!(s instanceof Player)) { + s.sendMessage(Lang.NOTPLAYER.s()); + return true; + } + if (!s.hasPermission("command.admin")) { + s.sendMessage(Lang.NOPERM.s()); + return true; + } + Player player = (Player) s; + if (args.length == 0) { + s.sendMessage(Utils.f("&c/viceadmin release <player>")); + s.sendMessage(Utils.f("&c/viceadmin target <player>")); + s.sendMessage(Utils.f("&c/viceadmin kitexpiries <player>")); + s.sendMessage(Utils.f("&c/viceadmin trashcan")); + s.sendMessage(Utils.f("&c/viceadmin gravity <modifier>")); + return true; + } + switch (args[0].toLowerCase()) { + case "trashcan": { + ItemStack item = Utils.createItem(Material.DROPPER, "&7&lTrash Can"); + //Utils.b(ArmorUpgrade.TANK.getEnchantment().getName()); + // items.addUnsafeEnchantment(ArmorUpgrade.TANK.getEnchantment(), 1); + for (Enchantment e : item.getEnchantments().keySet()) + Utils.b(e.getName()); + player.getInventory().addItem(item); + s.sendMessage(Utils.f("&7A Trash Can was added to your inventory. Place it so players can sell items in it.")); + return true; + } + case "kitexpiries": { + if (args.length != 2) { + s.sendMessage(Utils.f("&c/viceadmin kitexpiries <player>")); + return true; + } + Player p = Bukkit.getPlayer(args[1]); + if (p == null) { + s.sendMessage(Utils.f("&cThat player is not online!")); + return true; + } + ViceUser user = Vice.getUserManager().getLoadedUser(p.getUniqueId()); + s.sendMessage(Utils.f("&7Player &a" + p.getName() + "&7 has the following kit expiries:")); + for (Map.Entry<String, Long> entry : user.getKitExpiries().entrySet()) + s.sendMessage(entry.getKey() + ": expiry " + entry.getValue() + " time left " + (entry.getValue() - System.currentTimeMillis())); + s.sendMessage("KitExpiriesString: " + user.getKitExpiriesString()); + return true; + } + + case "release": { + if (args.length != 2) { + s.sendMessage(Utils.f("&c/viceadmin release <player>")); + return true; + } + Player p = Bukkit.getPlayer(args[1]); + if (p == null) { + s.sendMessage(Utils.f("&cThat player is not online!")); + return true; + } + ViceUser user = Vice.getUserManager().getLoadedUser(p.getUniqueId()); + user.setJailTimer(-1); + p.teleport(Vice.getWorldManager().getWarpManager().getSpawn().getLocation()); + s.sendMessage(Utils.f("&aYou released " + p.getName() + " from jail!")); + return true; + } + default: + s.sendMessage(Utils.f("&c/viceadmin release <player>")); + s.sendMessage(Utils.f("&c/viceadmin target <player>")); + s.sendMessage(Utils.f("&c/viceadmin kitexpiries <player>")); + s.sendMessage(Utils.f("&c/viceadmin trashcan")); + s.sendMessage(Utils.f("&c/viceadmin gravity <modifier>")); + return true; + } + } + +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/ViceRankCommand.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/ViceRankCommand.java new file mode 100644 index 0000000..eb3a843 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/ViceRankCommand.java @@ -0,0 +1,66 @@ +package net.grandtheftmc.vice.commands; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.users.ViceRank; +import net.grandtheftmc.vice.users.ViceUser; + +import net.grandtheftmc.vice.users.ViceUserDAO; +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class ViceRankCommand implements CommandExecutor { + + // TODO add command/support for CopRanks + + @Override + public boolean onCommand(CommandSender s, Command c, String l, String[] args) { + if (!s.hasPermission("command.ViceRank")) { + s.sendMessage(Utils.f("&cYou do not have permission to execute this command!")); + return true; + } + if (args.length == 0) { + s.sendMessage(Utils.f("&c/ViceRank set <player> <rank>")); + return true; + } + switch (args[0].toLowerCase()) { + case "set": + if (args.length != 3) { + s.sendMessage(Utils.f("&c/ViceRank set <player> <rank>")); + return true; + } + ViceRank rank = ViceRank.getRankOrNull(args[2]); + if (rank == null) { + String msg = Lang.RANKS + "&7There is no ViceRank with the name &a" + args[2] + "&7! Valid ranks: "; + for (ViceRank r : ViceRank.values()) + msg = msg + "&a" + r.getColoredNameBold() + "&7, "; + if (msg.endsWith("&7, ")) + msg = msg.substring(0, msg.length() - 4); + msg += "&c."; + s.sendMessage(Utils.f(msg)); + return true; + } + Player player = Bukkit.getPlayer(args[1]); + if (player == null) { +// Core.sql.updateAsyncLater("update vice set rank='" + rank.getName() + "' where name='" + args[1] + "';"); + ServerUtil.runTaskAsync(() -> ViceUserDAO.updateRankByName(args[1], rank)); + s.sendMessage(Utils.f(Lang.RANKS + "&7That player is not online, so his rank has been forcibly updated in the database.")); + return true; + } + ViceUser u = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + u.setRank(rank, player, Core.getUserManager().getLoadedUser(player.getUniqueId())); + s.sendMessage(Utils.f(Lang.RANKS + "&a" + player.getName() + " &7is now a &a" + u.getRank().getColoredNameBold() + "&7!")); + return true; + + default: + s.sendMessage(Utils.f("&c/ViceRank set <player> <rank>")); + return true; + } + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/ViceRanksCommand.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/ViceRanksCommand.java new file mode 100644 index 0000000..06cacc6 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/ViceRanksCommand.java @@ -0,0 +1,26 @@ +package net.grandtheftmc.vice.commands; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.vice.users.ViceRank; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class ViceRanksCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command c, String l, String[] args) { + if (!(s instanceof Player)) { + s.sendMessage(Lang.NOTPLAYER.s()); + return true; + } + Player player = (Player) s; + player.sendMessage(Lang.RANKS.s()); + for (ViceRank rank : ViceRank.values()) { + player.sendMessage(Utils.f(rank.getColoredNameBold() + " &7costs &a&l$" + rank.getPrice())); + } + return true; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/WarpCommand.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/WarpCommand.java new file mode 100644 index 0000000..c36dd14 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/WarpCommand.java @@ -0,0 +1,140 @@ +package net.grandtheftmc.vice.commands; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.users.TaxiTarget; +import net.grandtheftmc.vice.world.warps.Warp; +import net.grandtheftmc.vice.world.warps.WarpManager; +import org.bukkit.Location; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.List; + +public class WarpCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command cmd, String label, String[] args) { + if (!(s instanceof Player)) { + s.sendMessage(Lang.NOTPLAYER.s()); + return true; + } + WarpManager wm = Vice.getWorldManager().getWarpManager(); + Player player = (Player) s; + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + if (args.length == 0) { + if (!s.hasPermission("warps.admin")) { + Vice.getWorldManager().getWarpManager().warp(player, user, Vice.getUserManager().getLoadedUser(player.getUniqueId()), + new TaxiTarget(Vice.getWorldManager().getWarpManager().getRandomWarp()), 0, -1); + return true; + } + s.sendMessage(Utils.f("&c/warp list")); + s.sendMessage(Utils.f("&c/warp set <name>")); + s.sendMessage(Utils.f("&c/warp delete <name>")); + s.sendMessage(Utils.f("&c/warp <warp>")); + s.sendMessage(Utils.f("&c/warp load")); + s.sendMessage(Utils.f("&c/warp save")); + return true; + } + if (!s.hasPermission("warps.admin")) return true; + switch (args[0].toLowerCase()) { + case "list": + List<Warp> list = wm.getWarps(); + s.sendMessage(Utils.f("&aWarps&7: (&a" + list.size() + "&7)")); + if (list.isEmpty()) { + s.sendMessage(Utils.f("&cNone!")); + return true; + } + String msg = "&a" + list.get(0).getName(); + for (int i = 1; i < wm.getWarps().size(); i++) + msg = msg + "&7, &a" + list.get(i).getName(); + s.sendMessage(Utils.f(msg)); + return true; + case "set": { + if (args.length != 2) { + s.sendMessage(Utils.f("&c/warp set <name>")); + return true; + } + + String warpName = args[1]; + switch (warpName.toLowerCase()) { + case "spawn": + wm.setSpawn(player.getLocation()); + s.sendMessage(Utils.f("&aYou set the spawn!")); + return true; + case "tutorialspawn": + wm.setTutorialSpawn(player.getLocation()); + s.sendMessage(Utils.f("&aYou set the tutorial spawn!")); + return true; + case "jail": + wm.setJail(player.getLocation()); + s.sendMessage(Utils.f("&aYou set the jail spawn!")); + return true; + default: + break; + } + Warp warp = wm.getWarp(warpName); + if (warp != null) { + warp.setLocation(player.getLocation()); + warp.setName(warpName); + s.sendMessage(Utils.f("&7Warp &a" + warpName + "&7 was set to your current location!")); + return true; + } + warp = new Warp(warpName, player.getLocation()); + wm.addWarp(warp); + s.sendMessage(Utils.f("&7A new warp with the name &a" + warpName + "&7 was set to your current location!")); + return true; + } + case "delete": { + if (args.length != 2) { + s.sendMessage(Utils.f("&c/warp delete <name>")); + return true; + } + String warpName = args[1]; + Warp warp = wm.getWarp(warpName); + if (warp == null) { + s.sendMessage(Utils.f("&cThat warp does not exist!")); + return true; + } + Location loc = warp.getLocation(); + wm.removeWarp(warp); + s.sendMessage(Utils.f("&cWarp &a" + warpName + "&c at &a" + loc.getX() + "&c," + loc.getY() + "&c," + + loc.getZ() + "&c was removed.")); + return true; + } + case "load": + Vice.getSettings().setWarpsConfig(Utils.loadConfig("warps")); + Vice.getWorldManager().getWarpManager().loadWarps(); + s.sendMessage(Lang.WARP.f("&7Loaded Warps!")); + return true; + case "save": + Vice.getWorldManager().getWarpManager().saveWarps(); + s.sendMessage(Lang.WARP.f("&7Saved Warps!")); + return true; + default: + if (args.length != 1) { + s.sendMessage(Utils.f("&c/warp list")); + s.sendMessage(Utils.f("&c/warp set <name>")); + s.sendMessage(Utils.f("&c/warp delete <name>")); + s.sendMessage(Utils.f("&c/warp <warp>")); + s.sendMessage(Utils.f("&c/warp load")); + s.sendMessage(Utils.f("&c/warp save")); + return true; + } + String warpName = args[0]; + Warp warp = wm.getWarp(warpName); + if (warp == null) { + s.sendMessage(Utils.f("&cThat warp does not exist!")); + return true; + } + Vice.getWorldManager().getWarpManager().warp(player, user, Vice.getUserManager().getLoadedUser(player.getUniqueId()), + new TaxiTarget(warp), 200, -1); + return true; + } + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/ZoneCommand.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/ZoneCommand.java new file mode 100644 index 0000000..3d2360d --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/commands/ZoneCommand.java @@ -0,0 +1,179 @@ +package net.grandtheftmc.vice.commands; + +import com.sk89q.worldedit.bukkit.WorldEditPlugin; +import com.sk89q.worldedit.bukkit.selections.Selection; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.commands.CoreCommand; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.world.ViceSelection; +import net.grandtheftmc.vice.world.ZoneFlag; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; + +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; + +/** + * Created by Timothy Lampen on 8/25/2017. + */ +public class ZoneCommand extends CoreCommand<Player>{ + public ZoneCommand() { + super(" zone", "selects cubiod regions for various purposes"); + } + + @Override + public void execute(Player player, String[] args) { + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + if(!user.getUserRank().isHigherThan(UserRank.ADMIN) && !player.isOp()) { + player.sendMessage(Lang.NOPERM.f("")); + return; + } + if(args.length==0) { + + player.sendMessage(Utils.f("&e/zone add <name> <flag,flag,...> [ignoreheight] &7- makes your current selection into a police-free zone. [ignore height refers to if the zone should take into account the y coord.]")); + player.sendMessage(Utils.f("&e/zone remove <name> &7- removes the zone that you are currently in.")); + player.sendMessage(Utils.f("&e/zone addflag <name> <flag> &7- Adds a certain flag to the zone with the selected name.")); + player.sendMessage(Utils.f("&e/zone removeflag <name> <flag> &7- Removes a certain flag from the zone with the selected name.")); + player.sendMessage(Utils.f("&e/zone list [all]&7- Lists all the zones that you are currently standing in [or on the server].")); + player.sendMessage(Utils.f("&7Possible flags: &eCOP_TELEPORT_STATION&7, &eCOP_CANT_ARREST")); + return; + } + switch (args[0].toLowerCase()) { + case "addflag": { + if(args.length!=3) { + player.sendMessage(Lang.VICE.f("&7/zone addflag <name> <flag>")); + return; + } + Optional<ViceSelection> zone = Vice.getWorldManager().getZone(args[1]); + if(!zone.isPresent()) { + player.sendMessage(Lang.VICE.f("&7Unable to find zone with the name: &e" + args[1])); + return; + } + ZoneFlag flag; + try { + flag = ZoneFlag.valueOf(args[2].toUpperCase()); + }catch (Exception e){ + player.sendMessage(Lang.VICE.f("&7Unable to find flag with name: &e" + args[2].toUpperCase())); + return; + } + + if(zone.get().getFlags().contains(flag)) { + player.sendMessage(Lang.VICE.f("&7This zone already has this flag!")); + return; + } + + zone.get().addFlag(flag); + player.sendMessage(Lang.VICE.f("&7You have added the flag: &e" + flag.toString() + " &7to the zone with name: &e" + args[1] + "&7.")); + return; + } + case "removeflag": { + if(args.length!=3) { + player.sendMessage(Lang.VICE.f("&7/zone removeflag <name> <flag>")); + return; + } + Optional<ViceSelection> zone = Vice.getWorldManager().getZone(args[1]); + if(!zone.isPresent()) { + player.sendMessage(Lang.VICE.f("&7Unable to find zone with the name: &e" + args[1])); + return; + } + ZoneFlag flag; + try { + flag = ZoneFlag.valueOf(args[2].toUpperCase()); + }catch (Exception e){ + player.sendMessage(Lang.VICE.f("&7Unable to find flag with name: " + args[2].toUpperCase())); + return; + } + + if(!zone.get().removeFlag(flag)) { + player.sendMessage(Lang.VICE.f("&7This zone doesnt have this flag!")); + + } + + player.sendMessage(Lang.VICE.f("&7You have removed the flag: &e" + flag.toString() + " &7from the zone with name: &e" + args[1] + "&7.")); + return; + } + case "list": { + boolean all = args.length==2; + List<ViceSelection> zones; + if(all) + zones = Vice.getWorldManager().getZones(); + else + zones = Vice.getWorldManager().getZones(player.getLocation()); + if(zones.size()==0) { + player.sendMessage(Lang.VICE.f("&7Could not find any zones!")); + return; + } + player.sendMessage(Utils.f("&7Zones:")); + for(ViceSelection zone : zones) { + StringBuilder sb = new StringBuilder(); + zone.getFlags().forEach(flag -> sb.append("&e " + flag.toString() + "&e,")); + sb.deleteCharAt(sb.length()-1); + player.sendMessage(Utils.f("&7Name: &e" + zone.getName() + " &7| Flags: &e" + sb.toString())); + } + return; + } + case "remove": { + if(args.length < 2) { + player.sendMessage(Lang.VICE.f("&7/zone remove <name>")); + return; + } + String name = args[1]; + if(!Vice.getWorldManager().removeZone(name)) { + player.sendMessage(Lang.VICE.f("&7There is no existing zone with the name &e" + name + "&7!")); + return; + } + player.sendMessage(Lang.VICE.f("&7You have removed the zone with name: &e" + name + "&7.")); + return; + } + case "add": { + if(args.length < 2) { + player.sendMessage(Lang.VICE.f("&7/zone add <name> <flag,flag,...> [ignoreheight]")); + return; + } + WorldEditPlugin worldEdit = (WorldEditPlugin) Bukkit.getPluginManager().getPlugin("WorldEdit"); + Selection selction = worldEdit.getSelection(player); + if(selction==null) { + player.sendMessage(Lang.VICE.f("&7Please select a region using the world edit tool (found using //wand)")); + return; + } + + List<ZoneFlag> flags = new ArrayList<>(); + if(!args[2].contains(",")) { + ZoneFlag flag; + try { + flag = ZoneFlag.valueOf(args[2].toUpperCase()); + }catch (Exception e){ + player.sendMessage(Lang.VICE.f("&7Unable to find flag with name: " + args[2].toUpperCase())); + return; + } + flags.add(flag); + } + else{ + for(String s : args[2].toUpperCase().split(",")) { + ZoneFlag flag; + try { + flag = ZoneFlag.valueOf(s); + }catch (Exception e){ + player.sendMessage(Lang.VICE.f("&7Unable to find flag with name: " + s.toUpperCase())); + return; + } + flags.add(flag); + } + } + + boolean ignoreheight = args.length != 4 || !args[3].equalsIgnoreCase("false"); + + ViceSelection vSelection = new ViceSelection(args[1], flags, selction.getMaximumPoint(), selction.getMinimumPoint(), ignoreheight); + Vice.getWorldManager().addZone(vSelection); + player.sendMessage(Lang.VICE.f("&7You have created a zone with your current selection with flags: &e" + args[2].toUpperCase()) + "&7 and ignoreheight: &e" + ignoreheight); + return; + } + } + + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/dao/CheatCodeDAO.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/dao/CheatCodeDAO.java new file mode 100644 index 0000000..445c4ae --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/dao/CheatCodeDAO.java @@ -0,0 +1,42 @@ +package net.grandtheftmc.vice.dao; + +import com.google.common.collect.Maps; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.database.BaseDatabase; +import net.grandtheftmc.core.util.State; +import net.grandtheftmc.vice.users.CheatCode; +import net.grandtheftmc.vice.users.CheatCodeState; + +import java.sql.*; +import java.util.HashMap; +import java.util.Optional; + +public class CheatCodeDAO { + + public static Optional<HashMap<CheatCode, CheatCodeState>> getCheatCodes(String name) { + //"Select * from " + Core.name() + " where name='" + args[1] + "'" + HashMap<CheatCode, CheatCodeState> map = Maps.newHashMap(); + + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("SELECT `cheatcodes` FROM " + Core.name() + " WHERE `name`=?;")) { + try (ResultSet result = statement.executeQuery()) { + while (result.next()) { + Blob b = result.getBlob("cheatcodes"); + if(b!=null) { + String cheatCodesBlob = new String(b.getBytes(1, (int) b.length())); + for (String serializedCheatCode : cheatCodesBlob.split("-")) { + String[] split = serializedCheatCode.split("#"); + map.put(CheatCode.valueOf(split[0]), new CheatCodeState(State.valueOf(split[1]), Boolean.valueOf(split[2]))); + } + } + } + } + } + } catch (SQLException e) { + e.printStackTrace(); + return Optional.empty(); + } + + return Optional.of(map); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/dao/MachineDAO.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/dao/MachineDAO.java new file mode 100644 index 0000000..b8c9d7b --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/dao/MachineDAO.java @@ -0,0 +1,157 @@ +package net.grandtheftmc.vice.dao; + +import com.google.common.collect.Lists; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.vice.ViceUtils; +import net.grandtheftmc.vice.machine.BaseMachine; +import net.grandtheftmc.vice.machine.data.MachineDataType; +import net.grandtheftmc.vice.machine.type.*; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.inventory.ItemStack; + +import java.sql.*; +import java.util.List; +import java.util.Optional; + +public class MachineDAO { + +//CREATE TABLE IF NOT EXISTS vice_machine ( +//id INT NOT NULL AUTO_INCREMENT, +//server_key VARCHAR(10) NOT NULL, +//type INT NOT NULL, +//world VARCHAR(8) NOT NULL, +//x INT NOT NULL, +//y INT NOT NULL, +//z INT NOT NULL, +//PRIMARY KEY (id) +//); + +//CREATE TABLE IF NOT EXISTS vice_machine_data ( +//machine_id INT NOT NULL, +//fuel DOUBLE NOT NULL, +//durability DOUBLE NOT NULL, +//progress DOUBLE NOT NULL, +//content BLOB, +//PRIMARY KEY (machine_id), +//FOREIGN KEY (machine_id) REFERENCES vice_machine(id) ON DELETE CASCADE +//); + +//INSERT INTO vice_machine (server_key, type, world, x, y, z) VALUES (?, ?, ?, ?, ?, ?, ?); +//INSERT INTO vice_machine_data (machine_id, fuel, durability, progress, content) VALUES (?, ?, ?, ?, ?); + +//SELECT M.id, M.type, M.world, M.x, M.y, M.z, MD.fuel, MD.durability, MD.progress, MD.content +//FROM vice_machine M, vice_machine_data MD +//WHERE M.id=MD.id AND M.server_key=?; + +//DELETE FROM vice_machine WHERE id=?; + + public static List<BaseMachine> getMachines(Connection connection) { + final String query = "SELECT M.id, M.type, M.world, M.x, M.y, M.z, MD.fuel, MD.durability, MD.progress, MD.content" + + " FROM vice_machine M, vice_machine_data MD WHERE M.id=MD.machine_id AND M.server_key=?;"; + + List<BaseMachine> list = Lists.newArrayList(); + + try (PreparedStatement statement = connection.prepareStatement(query)) { + statement.setString(1, Core.name()); + try (ResultSet result = statement.executeQuery()) { + while (result.next()) { + int uniqueId = result.getInt("id"); + int machineType = result.getInt("type"); + String world = result.getString("world"); + int x = result.getInt("x"); + int y = result.getInt("y"); + int z = result.getInt("z"); + double fuel = result.getDouble("fuel"); + double durability = result.getDouble("durability"); + double progress = result.getDouble("progress"); + ItemStack[] content = ViceUtils.fromBase64(result.getString("content")); + + BaseMachine machine = null; + switch (machineType) { + case 1: machine = new MachineSmallDryingChamber(); break; + case 2: machine = new MachineMediumDryingChamber(); break; + case 3: machine = new MachineLargeDryingMachine(); break; + case 4: machine = new MachineBeerDistillery(); break; + case 5: machine = new MachineVodkaDistillery(); break; + case 6: machine = new MachineCocaProcessor(); break; + case 7: machine = new MachinePulpCondenser(); break; + case 8: machine = new MachineBasicMethProducer(); break; + case 9: machine = new MachineAdvancedMethProducer(); break; + case 10: machine = new MachineSugarBox(); break; + } + + if (machine == null) continue; + + machine.setUniqueIdentifier(uniqueId); + machine.setLocation(new Location(Bukkit.getWorld(world), x, y, z)); + machine.setContents(content); + + machine.getData(MachineDataType.FUEL).setCurrent(fuel); + machine.getData(MachineDataType.DURABILITY).setCurrent(durability); + machine.getData(MachineDataType.PROGRESS).setCurrent(progress); + + list.add(machine); + } + } + } catch (SQLException e) { + e.printStackTrace(); + } + + return list; + } + + public static <T extends BaseMachine> T addMachine(Connection connection, T machine) { + final String query = "INSERT INTO vice_machine (server_key, type, world, x, y, z) VALUES (?, ?, ?, ?, ?, ?);"; + try (PreparedStatement statement = connection.prepareStatement(query, Statement.RETURN_GENERATED_KEYS)) { + statement.setString(1, Core.name()); + statement.setInt(2, machine.getMachineIdentifier()); + statement.setString(3, machine.getLocation().getWorld().getName()); + statement.setInt(4, machine.getLocation().getBlockX()); + statement.setInt(5, machine.getLocation().getBlockY()); + statement.setInt(6, machine.getLocation().getBlockZ()); + + statement.executeUpdate(); + try (ResultSet result = statement.getGeneratedKeys()) { + if (result.next()) { + machine.setUniqueIdentifier(result.getInt(1)); + return machine; + } + + return null; + } + } catch (SQLException e) { + e.printStackTrace(); + } + return null; + } + + public static void updateMachineData(Connection connection, BaseMachine machine) { + final String query = "INSERT INTO vice_machine_data (machine_id, fuel, durability, progress, content) VALUES (?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE fuel=?, durability=?, progress=?, content=?;"; + try (PreparedStatement statement = connection.prepareStatement(query)) { + statement.setInt(1, machine.getUniqueIdentifier()); + statement.setDouble(2, machine.getData(MachineDataType.FUEL).getCurrent()); + statement.setDouble(3, machine.getData(MachineDataType.DURABILITY).getCurrent()); + statement.setDouble(4, machine.getData(MachineDataType.PROGRESS).getCurrent()); + statement.setString(5, ViceUtils.toBase64(machine.getContents())); + statement.setDouble(6, machine.getData(MachineDataType.FUEL).getCurrent()); + statement.setDouble(7, machine.getData(MachineDataType.DURABILITY).getCurrent()); + statement.setDouble(8, machine.getData(MachineDataType.PROGRESS).getCurrent()); + statement.setString(9, ViceUtils.toBase64(machine.getContents())); + + statement.execute(); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + public static void removeMachine(Connection connection, int uniqueIdentifier) { + final String query = "DELETE FROM vice_machine WHERE id=?;"; + try (PreparedStatement statement = connection.prepareStatement(query)) { + statement.setInt(1, uniqueIdentifier); + statement.execute(); + } catch (SQLException e) { + e.printStackTrace(); + } + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/display/DisplayManager.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/display/DisplayManager.java new file mode 100644 index 0000000..74df06d --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/display/DisplayManager.java @@ -0,0 +1,34 @@ +package net.grandtheftmc.vice.display; + +import net.grandtheftmc.core.util.Component; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.display.cont.CartelListener; +import net.grandtheftmc.vice.display.cont.PlayerStatsListener; +import net.grandtheftmc.vice.hologram.HologramManager; + +public class DisplayManager implements Component <DisplayManager, Vice> { + + // TODO: Find a better place for this to go + + private final PlayerStatsListener playerStatsListener; + private final CartelListener cartelListener; + + public DisplayManager(Vice plugin, HologramManager hologramManager) { + this.playerStatsListener = new PlayerStatsListener(plugin, hologramManager); + this.cartelListener = new CartelListener(plugin, hologramManager); + } + + @Override + public DisplayManager onDisable(Vice plugin) { + this.playerStatsListener.task.cancel(); + this.cartelListener.task[0].cancel(); + this.cartelListener.task[1].cancel(); + + this.playerStatsListener.hologram.destroy(); + this.cartelListener.hologram[0].destroy(); + this.cartelListener.hologram[1].destroy(); + + return this; + } + +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/display/cont/CartelListener.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/display/cont/CartelListener.java new file mode 100644 index 0000000..df3bc9d --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/display/cont/CartelListener.java @@ -0,0 +1,196 @@ +package net.grandtheftmc.vice.display.cont; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.massivecraft.factions.FPlayers; +import com.massivecraft.factions.Faction; +import com.massivecraft.factions.Factions; +import net.grandtheftmc.core.util.C; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.vice.hologram.CoreHologram; +import net.grandtheftmc.vice.hologram.Hologram; +import net.grandtheftmc.vice.hologram.HologramManager; +import net.grandtheftmc.vice.hologram.event.HologramReceiveEvent; +import net.grandtheftmc.vice.hologram.exception.HologramDuplicateException; +import net.grandtheftmc.vice.hologram.exception.HologramDuplicateNodeException; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.plugin.java.JavaPlugin; +import org.bukkit.scheduler.BukkitTask; + +import java.text.NumberFormat; +import java.util.*; + +public final class CartelListener implements Listener { + + private ArrayList<Faction> factionList = Lists.newArrayList(); + + public final Hologram[] hologram; + public final BukkitTask[] task; + + public CartelListener(JavaPlugin plugin, HologramManager hologramManager) { + this.hologram = new Hologram[2]; + this.task = new BukkitTask[2]; + + ServerUtil.runTaskLater(() -> { + Location origin = new Location(Bukkit.getWorld("spawn"), 145.5, 82, 220.5); // TODO: Figure out where this needs to go + + try { + + this.hologram[0] = hologramManager.create(4, origin); + this.hologram[0].addNode(1); + this.hologram[0].addNode(2); + this.hologram[0].addNode(3); + this.hologram[0].addNode(4); + + this.hologram[1] = hologramManager.create(5, new Location(Bukkit.getWorld("spawn"), 121.5, 80, 235.5)); + for (int i = 1; i < 15; i++) hologram[1].addNode(i); + + task[1] = Bukkit.getScheduler().runTaskTimerAsynchronously(plugin, () -> { + ServerUtil.runTask(() -> { + factionList.clear(); + + factionList = Factions.getInstance().getAllFactions(); + factionList.remove(Factions.getInstance().getWilderness()); + factionList.remove(Factions.getInstance().getSafeZone()); + factionList.remove(Factions.getInstance().getWarZone()); + factionList.sort((o1, o2) -> { +// double f1Worth = Math.pow(o1.getLandRounded() * 64, 2) + o1.getStash(); +// double f2Worth = Math.pow(o2.getLandRounded() * 64, 2) + o2.getStash(); + + double f1Worth = o1.getStash(); + if (o1.getAllClaims().size() > 0) f1Worth += 50000 * 1.05 * o1.getAllClaims().size(); + + double f2Worth = o2.getStash(); + if (o2.getAllClaims().size() > 0) f2Worth += 50000 * 1.05 * o2.getAllClaims().size(); + + if (f1Worth < f2Worth) + return 1; + else if (f1Worth > f2Worth) + return -1; + return 0; + }); + }); + }, 10L, 5 * 60 * 20); + + // Update Cartel stats every 15 seconds + task[0] = Bukkit.getScheduler().runTaskTimerAsynchronously(plugin, () -> { + this.hologram[0].refresh(); + this.hologram[1].refresh(); + }, 20L, 15 * 20L); + + } catch (HologramDuplicateException | HologramDuplicateNodeException e) { + e.printStackTrace(); + } + }, 5 * 20L); + + Bukkit.getPluginManager().registerEvents(this, plugin); + } + + @EventHandler(ignoreCancelled = true) + protected final void onPlayerJoin(PlayerJoinEvent event) { + if (this.hologram[0] != null) { + ServerUtil.runTaskLaterAsync(() -> this.hologram[0].spawn(event.getPlayer()), 20L); + } + + if (this.hologram[1] != null) { + ServerUtil.runTaskLaterAsync(() -> this.hologram[1].spawn(event.getPlayer()), 20L); + } + } + + @EventHandler(ignoreCancelled = true) + protected final void onHologramReceive(HologramReceiveEvent event) { + int id = event.getHologram().getId(); + int nodeId = event.getNode().getId(); + + if (id == 4) { + Player player = event.getPlayer(); + Faction cartel = FPlayers.getInstance().getByPlayer(player).getFaction(); + + // The player is not in a Cartel so lets display a little info message instead + if (cartel == null || cartel.isWilderness() || cartel.isWarZone()) { + if (nodeId == 1) { + event.setText("&6&lCartels"); + } else if (nodeId == 2) { + event.setText("&eCreate or join a Cartel and conquer Vice!"); + } else if (nodeId == 3) { + event.setText(" "); + event.setDisplay(false); + } else if (nodeId == 4) { + event.setText(" "); + event.setDisplay(false); + } + + return; + } + + int online = cartel.getOnlinePlayers().size(); + int size = cartel.getSize(); + int kills = cartel.getKills(); + int deaths = cartel.getDeaths(); + double stash = cartel.getStash(); + String formattedStash = NumberFormat.getCurrencyInstance(Locale.US).format(stash); + + // Cartel name + if (nodeId == 1) { + event.setText("&6&l" + ChatColor.stripColor(cartel.getTag())); + } + + // Cartel member count + else if (nodeId == 2) { + event.setText("&e" + online + "/" + size + " members online"); + } + + // Cartel balance or 'stash' + else if (nodeId == 3) { + event.setText("&eStash&f: " + formattedStash); // NumberFormat adds the '$' + } + + // Cartel Kills and Deaths + else if (nodeId == 4) { + event.setText("&aKills&f: " + kills + " &e| " + "&cDeaths&f: " + deaths); + } + } + + else if (id == 5) { + if (nodeId == 1) { + event.setText(C.GOLD + C.BOLD + "TOP CARTELS"); + return; + } + + if (nodeId == 12) { + event.setDisplay(false); + return; + } + + if (nodeId == 13) { + event.setText(C.YELLOW + C.ITALIC + "The Cartel leaderboard is"); + return; + } + + if (nodeId == 14) { + event.setText(C.YELLOW + C.ITALIC + "calculated via 'stash * land worth'"); + return; + } + + int correctNode = nodeId - 2; + if (this.factionList.size() > correctNode) { + Faction faction = this.factionList.get(correctNode); + + NumberFormat format = NumberFormat.getCurrencyInstance(Locale.US); + double worth = faction.getStash(); + if (faction.getAllClaims().size() > 0) worth += 50000 * 1.05 * faction.getAllClaims().size(); + event.setText(C.YELLOW + "#" + (correctNode + 1) + C.WHITE + " " + faction.getTag() + C.GRAY + " - " + C.GREEN + format.format(worth)); + return; + } + + event.setText(C.YELLOW + "#" + (correctNode + 1) + C.WHITE + " Unknown" + C.GRAY + " - " + C.GREEN + "$0.00"); + } + } + +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/display/cont/PlayerStatsListener.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/display/cont/PlayerStatsListener.java new file mode 100644 index 0000000..c5e33df --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/display/cont/PlayerStatsListener.java @@ -0,0 +1,127 @@ +package net.grandtheftmc.vice.display.cont; + +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.hologram.Hologram; +import net.grandtheftmc.vice.hologram.HologramManager; +import net.grandtheftmc.vice.hologram.event.HologramReceiveEvent; +import net.grandtheftmc.vice.hologram.exception.HologramDuplicateException; +import net.grandtheftmc.vice.hologram.exception.HologramDuplicateNodeException; +import net.grandtheftmc.vice.users.ViceRank; +import net.grandtheftmc.vice.users.ViceUser; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.plugin.java.JavaPlugin; +import org.bukkit.scheduler.BukkitTask; + +import java.text.DecimalFormat; +import java.text.NumberFormat; +import java.util.Locale; + +public class PlayerStatsListener implements Listener { + + public Hologram hologram; + public BukkitTask task; + + /** + * Registers listeners and creates the hologram object + * @param plugin + * @param hologramManager + */ + public PlayerStatsListener(JavaPlugin plugin, HologramManager hologramManager) { + ServerUtil.runTaskLater(() -> { + Location origin = new Location(Bukkit.getWorld("spawn"), 127.5, 82, 220.5); // TODO: Figure out where this needs to go + + try { + + this.hologram = hologramManager.create(3, origin); + this.hologram.addNode(1); + this.hologram.addNode(2); + this.hologram.addNode(3); + this.hologram.addNode(4); + this.hologram.addNode(5); + + // Updates the stats every 5 seconds + task = Bukkit.getScheduler().runTaskTimerAsynchronously(plugin, () -> { + this.hologram.refresh(2); + this.hologram.refresh(3); + this.hologram.refresh(4); + this.hologram.refresh(5); + }, 20L, 5 * 20L); + + } catch (HologramDuplicateException | HologramDuplicateNodeException e) { + e.printStackTrace(); + } + }, 5 * 20L); + + Bukkit.getPluginManager().registerEvents(this, plugin); + } + + /** + * Sends the hologram to the player 1 second after they join + * @param event + */ + @EventHandler + protected final void onPlayerJoin(PlayerJoinEvent event) { + if (this.hologram == null) return; + ServerUtil.runTaskLaterAsync(() -> this.hologram.spawn(event.getPlayer()), 20L); + } + + /** + * Fires when the player has received their hologram, information is set/removed/updated here + * @param event + */ + @EventHandler + protected final void onHologramReceive(HologramReceiveEvent event) { + int id = event.getHologram().getId(); + int nodeId = event.getNode().getId(); + + if(id != 3) return; + + Player player = event.getPlayer(); + ViceUser viceUser = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + + ViceRank rank = viceUser.getRank(); + int kills = viceUser.getKills(), deaths = viceUser.getDeaths(), killstreak = viceUser.getKillStreak(); + double kd = 0.00; + double money = viceUser.getMoney(); + String formattedMoney = NumberFormat.getCurrencyInstance(Locale.US).format(money); + + if(deaths == 0) // Need to check if deaths is 0, throws an ArithmeticException otherwise + kd = kills; + else if(kills > 0) + kd = kills / deaths; + + DecimalFormat decimalFormat = new DecimalFormat("0.00"); + + // Stats title + if(nodeId == 1) { + event.setText("&6&l" + player.getName() + "'s Stats"); + } + + // ViceRank + else if(nodeId == 2) { + event.setText("&eRank&f: " + rank.getColoredName()); + } + + // Kills, Deaths + else if(nodeId == 3) { + event.setText("&aKills&f: " + kills + " &e| " + "&cDeaths&f: " + deaths); + } + + // K/D and Killstreaks + else if(nodeId == 4) { + event.setText("&aK/D Ratio&f: " + decimalFormat.format(kd) + " &e| " + "&cKillstreak&f: " + killstreak); + } + + // Money + else if(nodeId == 5) { + event.setText("&2Money&f: " + formattedMoney); + } + } + +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/dropship/DropShip.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/dropship/DropShip.java new file mode 100644 index 0000000..392ef37 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/dropship/DropShip.java @@ -0,0 +1,88 @@ +package net.grandtheftmc.vice.dropship; + +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.areas.obj.Area; +import net.grandtheftmc.vice.lootcrates.LootCrate; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.block.Chest; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.plugin.java.JavaPlugin; + +import java.util.Optional; + +public final class DropShip { + + private final JavaPlugin plugin; + private final DropShipManager dropShipManager; + + private final DropShipTask dropShipTask; + private final Player caller; + private final Area settlement; + private final Area.DropType dropType; + + private DropShipState dropState = DropShipState.IDLE; + + public DropShip(JavaPlugin plugin, DropShipManager dropShipManager, Player caller, Area settlement, boolean major) { + this.plugin = plugin; + this.dropShipManager = dropShipManager; + this.dropShipTask = new DropShipTask(major, dropShipManager, this); + this.caller = caller; + this.settlement = settlement; + this.dropType = major ? Area.DropType.MAJOR : Area.DropType.MINOR; + } + + public void start() { + this.dropShipTask.runTaskTimer(this.plugin, 0, 20L); + this.setDropState(DropShipState.IN_PROGRESS); + } + + public void stop() { + this.setDropState(DropShipState.ENDING); + this.dropShipTask.stop(); + this.dropShipManager.reset(); + } + + protected void restock() { + System.out.println("Settlement '" + this.settlement.getName() + "' has " + this.settlement.getChests().size() + " Chests."); + for (Chest chest : this.settlement.getChests()) { + if (!chest.getChunk().isLoaded()) + chest.getChunk().load(); + + refill(chest).ifPresent(lootCrate -> lootCrate.restock(this.dropType)); + } + } + + private Optional<LootCrate> refill(Chest chest) { + for (LootCrate crate : Vice.getCrateManager().getCrates()) { + if (crate.getLocation().getBlock().getLocation().toString().equals(chest.getLocation().toString())) { + return Optional.of(crate); + } + } + + Vice.getCrateManager().addCrate(chest.getLocation()); + return Optional.of(Vice.getCrateManager().getCrate(chest.getLocation())); + } + + public DropShipTask getDropShipTask() { + return dropShipTask; + } + + public DropShipState getDropState() { + return dropState; + } + + public void setDropState(DropShipState dropState) { + this.dropState = dropState; + } + + public Player getCaller() { + return caller; + } + + public Area getSettlement() { + return settlement; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/dropship/DropShipConfirmationMenu.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/dropship/DropShipConfirmationMenu.java new file mode 100644 index 0000000..6fd9225 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/dropship/DropShipConfirmationMenu.java @@ -0,0 +1,4 @@ +package net.grandtheftmc.vice.dropship; + +public final class DropShipConfirmationMenu { +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/dropship/DropShipHandler.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/dropship/DropShipHandler.java new file mode 100644 index 0000000..7df57a7 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/dropship/DropShipHandler.java @@ -0,0 +1,118 @@ +package net.grandtheftmc.vice.dropship; + +import net.grandtheftmc.core.gui.ConfirmationMenu; +import net.grandtheftmc.core.util.C; +import net.grandtheftmc.core.util.Component; +import net.grandtheftmc.vice.dropship.event.DropShipStartEvent; +import net.grandtheftmc.vice.items.ItemManager; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.block.Action; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.EquipmentSlot; +import org.bukkit.inventory.ItemStack; +import org.bukkit.plugin.java.JavaPlugin; + +public final class DropShipHandler<T extends JavaPlugin> implements Component<DropShipManager, T> { + + private final DropShipManager dropShipManager; + private final ItemStack dropitem; + private final ItemStack majorDropitem; + private final T plugin; + + public DropShipHandler(DropShipManager dropShipManager, ItemManager itemManager, T plugin) { + this.dropShipManager = dropShipManager; + this.plugin = plugin; + this.dropitem = itemManager.getItem("dropship").getItem(); + this.majorDropitem = itemManager.getItem("majordropship").getItem(); + + Bukkit.getPluginManager().registerEvents(this, plugin); + } + + @Override + public DropShipManager onEnable(T plugin) { + return this.dropShipManager; + } + + @Override + public DropShipManager onDisable(T plugin) { + return this.dropShipManager; + } + + @EventHandler + protected final void onItemInteract(PlayerInteractEvent event) { + if (event.getHand() != EquipmentSlot.HAND) return; + if (event.getAction() != Action.RIGHT_CLICK_BLOCK && event.getAction() != Action.RIGHT_CLICK_AIR) return; + + ItemStack item = event.getItem(); + boolean small = false, major = false; + + if (item == null) + return; + + if (item.isSimilar(this.dropitem)) + small = true; + + if (item.isSimilar(this.majorDropitem)) + major = true; + + if (!small && !major) return; + + //Check if a player can start a drop ship. + if (!this.dropShipManager.canStartDrop()) { + event.setCancelled(true); + event.getPlayer().sendMessage(C.RED + "You cannot activate a dropship until the current event has finished.");//TODO, FORMAT. + return; + } + + boolean finalMajor = major; + ConfirmationMenu menu = new ConfirmationMenu(this.plugin, item.clone()) { + @Override + protected void onConfirm(InventoryClickEvent e, Player p) { + dropShipManager.getClosestArea(finalMajor, event.getPlayer(), area -> { + if (area == null) { + event.setCancelled(true); + event.getPlayer().sendMessage(C.RED + "Couldn't find a nearby settlement."); + return; + } + + if (item.getAmount() > 1) { + item.setAmount(item.getAmount() - 1); + } else { + event.getPlayer().getInventory().setItemInMainHand(new ItemStack(Material.AIR)); + } + + event.getPlayer().updateInventory(); + + dropShipManager.startDropShop(finalMajor, event.getPlayer(), area); + }); + } + + @Override + protected void onDeny(InventoryClickEvent e, Player p) { + event.setCancelled(true); + } + }; + + menu.open(event.getPlayer()); + } + + @EventHandler + protected final void onDropshipStart(DropShipStartEvent event) { + event.getDropShip().restock(); + } + + @EventHandler + protected final void onFallDamage(EntityDamageEvent event) { + if (!(event.getEntity() instanceof Player)) return; + Player player = (Player) event.getEntity(); + if (!this.dropShipManager.userDamageMap.containsKey(player.getUniqueId())) return; + + event.setCancelled(true); + this.dropShipManager.userDamageMap.remove(player.getUniqueId()); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/dropship/DropShipManager.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/dropship/DropShipManager.java new file mode 100644 index 0000000..1335967 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/dropship/DropShipManager.java @@ -0,0 +1,199 @@ +package net.grandtheftmc.vice.dropship; + +import net.grandtheftmc.core.util.C; +import net.grandtheftmc.core.util.Callback; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.areas.AreaManager; +import net.grandtheftmc.vice.areas.obj.Area; +import net.grandtheftmc.vice.items.ItemManager; +import net.grandtheftmc.vice.lootcrates.LootCrate; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.block.Chest; +import org.bukkit.entity.Player; +import org.bukkit.plugin.java.JavaPlugin; +import org.bukkit.scheduler.BukkitRunnable; + +import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; + +public final class DropShipManager { + + /** + * Drop item redeem - trigger for nearest city. + * Alert players in chat 60 seconds before, clickable : teleport + * Alert players in chat onStart, clickable : teleport + * Restock chests in city + * + * If a player started the dropship, they should be celebrated in chat. + * + * Chest drops are the same as they are on GTM - will most likely be slightly balanced / changed going forwards. + * + * + */ + + protected final ConcurrentHashMap<UUID, Long> userDamageMap = new ConcurrentHashMap<>(); + + private final JavaPlugin plugin; + private final AreaManager areaManager; + + private DropShip serverDropShip = null; + private DropShip dropShip = null; + + public DropShipManager(JavaPlugin plugin, AreaManager areaManager, ItemManager itemManager) { + this.plugin = plugin; + this.areaManager = areaManager; + + new DropShipHandler<JavaPlugin>(this, itemManager, plugin); + new DropShipTeleportCommand(this); + + new BukkitRunnable() { + /** + * When an object implementing interface <code>Runnable</code> is used + * to create a thread, starting the thread causes the object's + * <code>run</code> method to be called in that separately executing + * thread. + * <p> + * The general contract of the method <code>run</code> is that it may + * take any action whatsoever. + * + * @see Thread#run() + */ + @Override + public void run() { + for (Area area : areaManager.getAreas()) { + if (area.getAreaType() == Area.AreaType.TOWN) continue; + + for (Chest chest : area.getChests()) { + ServerUtil.runTask(() -> { + LootCrate lootCrate = Vice.getCrateManager().getCrate(chest.getLocation()); + if (lootCrate == null) return; + lootCrate.restock(Area.DropType.DEFAULT); + }); + } + } + + Bukkit.broadcastMessage(C.YELLOW + C.BOLD + "DROP SHIP"); + Bukkit.broadcastMessage(C.GOLD + "All settlement chests have been restocked."); + } + }.runTaskTimerAsynchronously(plugin, 20 * 60, 20 * 60 * 60 * 8); + + new BukkitRunnable() { + /** + * When an object implementing interface <code>Runnable</code> is used + * to create a thread, starting the thread causes the object's + * <code>run</code> method to be called in that separately executing + * thread. + * <p> + * The general contract of the method <code>run</code> is that it may + * take any action whatsoever. + * + * @see Thread#run() + */ + @Override + public void run() { + for (UUID uuid : userDamageMap.keySet()) { + long time = userDamageMap.get(uuid); + if (time <= System.currentTimeMillis()) { + userDamageMap.remove(uuid); + } + } + } + }.runTaskTimerAsynchronously(plugin, 20 * 10, 20 * 10); + } + + /** + * Start a drop ship event. + * @param player - Caller of the drop ship + * @param area - Settlement to start the event at + */ + public void startDropShop(boolean major, Player player, Area area) { + if (this.dropShip != null) return; + this.dropShip = new DropShip(plugin, this, player, area, major); + this.dropShip.setDropState(DropShipState.STARTING); + this.dropShip.start(); + } + + /** + * Force stop an event. + */ + public void forceStop() { + if (this.dropShip == null) return; + this.dropShip.stop(); + } + + public void reset() { + this.dropShip = null; + } + + /** + * Get the currently active drop ship event. + * + * @return currently active drop ship + */ + public DropShip getDropShip() { + return dropShip; + } + + /** + * Check if a drop ship can be started. + * + * @return active state + */ + public boolean canStartDrop() { + return this.dropShip == null; + } + + /** + * Check if a drop ship event is currently active. + * + * @return active state + */ + public boolean isActive() { + return !this.canStartDrop(); + } + + /** + * Get the closest Area to a players current location. + * + * @param player - The Player + * @param callback - The return function of the closest Area + */ + public void getClosestArea(boolean major, Player player, Callback<Area> callback) { + ServerUtil.runTaskAsync(() -> { + Area closest = null; + double distance = -1; + for (Area area : this.areaManager.getAreas()) { + if (area.getAreaType() != Area.AreaType.TOWN) continue; + + double a = getDistanceSquared(player, area.getMaxX(), area.getMaxZ()); + double b = getDistanceSquared(player, area.getMinX(), area.getMinZ()); + + if (closest == null) { + closest = area; + distance = a < b ? a : b; + continue; + } + + if (a < distance) { + closest = area; + distance = a; + } + + if (b < distance) { + closest = area; + distance = b; + } + } + + callback.call(closest); + }); + } + + private double getDistanceSquared(Player player, int x, int z) { + Location origin = player.getLocation().clone(); + origin.setY(0); + return origin.distanceSquared(new Location(origin.getWorld(), x, origin.getY(), z)); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/dropship/DropShipState.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/dropship/DropShipState.java new file mode 100644 index 0000000..b87b98d --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/dropship/DropShipState.java @@ -0,0 +1,17 @@ +package net.grandtheftmc.vice.dropship; + +public enum DropShipState { + + /** This is active while initialising */ + IDLE, + + /** This is active when the init process is complete */ + STARTING, + + /** This is active when the drop ship is in progress */ + IN_PROGRESS, + + /** This is active when the drop ship is finishing */ + ENDING, + ; +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/dropship/DropShipTask.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/dropship/DropShipTask.java new file mode 100644 index 0000000..f8dde81 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/dropship/DropShipTask.java @@ -0,0 +1,133 @@ +package net.grandtheftmc.vice.dropship; + +import com.google.common.collect.Sets; +import net.grandtheftmc.vice.dropship.event.DropShipCountdownEvent; +import net.grandtheftmc.vice.dropship.event.DropShipStartEvent; +import net.grandtheftmc.vice.utils.TextHelper; +import net.md_5.bungee.api.ChatColor; +import net.md_5.bungee.api.chat.ClickEvent; +import net.md_5.bungee.api.chat.HoverEvent; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.potion.PotionEffectType; +import org.bukkit.scheduler.BukkitRunnable; + +import java.util.Set; + +public final class DropShipTask extends BukkitRunnable { + + private final DropShipManager dropShipManager; + private final DropShip dropShip; + private final int[] announceTimes = new int[] { 60, 30, 10 }; + private int timer; + + private final Set<Player> players; + private boolean major; + + public DropShipTask(boolean major, DropShipManager dropShipManager, DropShip dropShip) { + this.dropShipManager = dropShipManager; + this.dropShip = dropShip; + this.timer = 60; + this.major = major; + + this.players = Sets.newHashSet(); + } + + /** + * When an object implementing interface <code>Runnable</code> is used + * to create a thread, starting the thread causes the object's + * <code>run</code> method to be called in that separately executing + * thread. + * <p> + * The general contract of the method <code>run</code> is that it may + * take any action whatsoever. + * + * @see Thread#run() + */ + @Override + public final void run() { + + for (Player player : this.players) { + if (player.hasPotionEffect(PotionEffectType.LEVITATION) && player.isOnGround()) { + player.removePotionEffect(PotionEffectType.LEVITATION); + } + } + + DropShipCountdownEvent countdownEvent = new DropShipCountdownEvent(this.dropShip, this.timer); + Bukkit.getPluginManager().callEvent(countdownEvent); + + if (!this.canBroadcast()) { + + if (this.isDone()) { + + TextHelper hover = new TextHelper().setText("Click here to teleport to\nthe drop ship event!").setColor(ChatColor.YELLOW).setItalic(true); + ClickEvent clickEvent = new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/dropshiptp"); + HoverEvent hoverEvent = new HoverEvent(HoverEvent.Action.SHOW_TEXT, hover.toBaseComponent()); + + TextHelper text = new TextHelper("DROP SHIP\n").setBold(true).setColor(ChatColor.YELLOW) + .setHover(hoverEvent).setClick(clickEvent) + .addExtra(new TextHelper(" A" + (this.major ? " major" : "n") + " event has started at ").setBold(false).setColor(ChatColor.WHITE).setItalic(true)) + .addExtra(new TextHelper(this.dropShip.getSettlement().getName().replace("_", " ")).setBold(false).setColor(ChatColor.GOLD).setItalic(true)) + .addExtra(new TextHelper(".").setBold(false).setColor(ChatColor.WHITE).setItalic(true)) + .addExtra(new TextHelper("\n Click this message to teleport to the " + (this.major ? "Town" : "Village") + " and collect the loot!").setBold(false).setColor(ChatColor.WHITE).setItalic(true)) + .addExtra(new TextHelper("\n")); + + for (Player player : Bukkit.getOnlinePlayers()) { + player.spigot().sendMessage(text.build()); + } + + DropShipStartEvent startEvent = new DropShipStartEvent(this.dropShip); + Bukkit.getPluginManager().callEvent(startEvent); + + this.dropShip.stop(); + return; + } + + timer -= 1; + return; + } + + TextHelper hover = new TextHelper().setText("Click here to teleport to\nthe drop ship event!").setColor(ChatColor.YELLOW).setItalic(true); + ClickEvent clickEvent = new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/dropshiptp"); + HoverEvent hoverEvent = new HoverEvent(HoverEvent.Action.SHOW_TEXT, hover.toBaseComponent()); + + TextHelper text = new TextHelper("DROP SHIP\n").setBold(true).setColor(ChatColor.YELLOW) + .setHover(hoverEvent).setClick(clickEvent) + .addExtra(new TextHelper(" A" + (this.major ? " major" : "n") + " event is starting at ").setBold(false).setColor(ChatColor.WHITE).setItalic(true)) + .addExtra(new TextHelper(this.dropShip.getSettlement().getName().replace("_", " ")).setBold(false).setColor(ChatColor.GOLD).setItalic(true)) + .addExtra(new TextHelper(" in " + this.timer + " seconds.").setBold(false).setColor(ChatColor.WHITE).setItalic(true)) + .addExtra(new TextHelper("\n Click this message to teleport to the " + (this.major ? "Town" : "Village") + " and collect the loot!").setBold(false).setColor(ChatColor.WHITE).setItalic(true)) + .addExtra(new TextHelper("\n")); + + for (Player player : Bukkit.getOnlinePlayers()) { + player.sendMessage(""); + player.spigot().sendMessage(text.build()); + } + + timer -= 1; + } + + public void stop() { + this.cancel(); + this.players.clear(); + } + + private final boolean canBroadcast() { + for (int i : this.announceTimes) { + if (i == this.timer) return true; + } + return false; + } + + private final boolean isDone() { + return this.timer <= 0; + } + + public void addPlayer(Player player) { + this.players.add(player); + } + + public boolean contains(Player player) { + return this.players.contains(player); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/dropship/DropShipTeleportCommand.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/dropship/DropShipTeleportCommand.java new file mode 100644 index 0000000..4e7bc5f --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/dropship/DropShipTeleportCommand.java @@ -0,0 +1,59 @@ +package net.grandtheftmc.vice.dropship; + +import net.grandtheftmc.core.commands.CoreCommand; +import net.grandtheftmc.core.util.C; +import net.grandtheftmc.vice.areas.obj.Area; +import org.bukkit.Location; +import org.bukkit.entity.Player; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; + +import java.util.Random; +import java.util.concurrent.ThreadLocalRandom; + +public class DropShipTeleportCommand extends CoreCommand<Player> { + + private final DropShipManager dropShipManager; + private final ThreadLocalRandom random; + + public DropShipTeleportCommand(DropShipManager dropShipManager) { + super("dropshiptp", "Teleport to a drop ship event."); + this.dropShipManager = dropShipManager; + this.random = ThreadLocalRandom.current(); + } + + @Override + public void execute(Player sender, String[] strings) { + if (!this.dropShipManager.isActive()) { + sender.sendMessage(C.RED + "There isn't an acitve drop ship event."); + return; + } + + if (this.dropShipManager.getDropShip().getDropShipTask().contains(sender)) { + sender.sendMessage(C.RED + "You can only teleport once.."); + return; + } + + this.dropShipManager.getDropShip().getDropShipTask().addPlayer(sender); + + Location location = this.getRandomLocation(); + if (location == null) { + sender.sendMessage(C.RED + "There was an error teleporting you, try again."); + return; + } + + sender.teleport(location); + + sender.removePotionEffect(PotionEffectType.LEVITATION); + sender.addPotionEffect(new PotionEffect(PotionEffectType.LEVITATION, 120 * 20, -4, true, false)); + this.dropShipManager.userDamageMap.put(sender.getUniqueId(), System.currentTimeMillis() + (1000 * 120)); + } + + private Location getRandomLocation() { + Area area = this.dropShipManager.getDropShip().getSettlement(); + int x = this.random.nextInt(area.getMinX(), area.getMaxX()); + int z = this.random.nextInt(area.getMinZ(), area.getMaxZ()); + int y = area.getWorld().getHighestBlockYAt(x, z) + this.random.nextInt(80, 100); + return new Location(area.getWorld(), x, y, z); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/dropship/event/DropShipCountdownEvent.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/dropship/event/DropShipCountdownEvent.java new file mode 100644 index 0000000..23716ef --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/dropship/event/DropShipCountdownEvent.java @@ -0,0 +1,24 @@ +package net.grandtheftmc.vice.dropship.event; + +import net.grandtheftmc.core.events.CoreEvent; +import net.grandtheftmc.vice.dropship.DropShip; + +public final class DropShipCountdownEvent extends CoreEvent { + + private final DropShip dropShip; + private final int timer; + + public DropShipCountdownEvent(DropShip dropShip, int timer) { + super(false); + this.dropShip = dropShip; + this.timer = timer; + } + + public DropShip getDropShip() { + return dropShip; + } + + public int getTimer() { + return timer; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/dropship/event/DropShipStartEvent.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/dropship/event/DropShipStartEvent.java new file mode 100644 index 0000000..bd1ec13 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/dropship/event/DropShipStartEvent.java @@ -0,0 +1,18 @@ +package net.grandtheftmc.vice.dropship.event; + +import net.grandtheftmc.core.events.CoreEvent; +import net.grandtheftmc.vice.dropship.DropShip; + +public final class DropShipStartEvent extends CoreEvent { + + private final DropShip dropShip; + + public DropShipStartEvent(DropShip dropShip) { + super(false); + this.dropShip = dropShip; + } + + public DropShip getDropShip() { + return dropShip; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/BaseDrug.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/BaseDrug.java new file mode 100644 index 0000000..560eb2d --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/BaseDrug.java @@ -0,0 +1,18 @@ +package net.grandtheftmc.vice.drug; + +public abstract class BaseDrug implements Drug { + + private final String name; + + /** + * Construct a drug + */ + public BaseDrug(String name) { + this.name = name; + } + + @Override + public String getName() { + return name; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/Drug.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/Drug.java new file mode 100644 index 0000000..e1ccab7 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/Drug.java @@ -0,0 +1,5 @@ +package net.grandtheftmc.vice.drug; + +public interface Drug { + String getName(); +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/DrugManager.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/DrugManager.java new file mode 100644 index 0000000..7374f7d --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/DrugManager.java @@ -0,0 +1,53 @@ +package net.grandtheftmc.vice.drug; + +import com.google.common.collect.Lists; +import net.grandtheftmc.vice.drug.attribute.DrugAttribute; +import net.grandtheftmc.vice.drug.item.*; +import net.grandtheftmc.vice.drug.item.beer.BeerBottle; +import net.grandtheftmc.vice.drug.item.beer.CraftBeer; +import net.grandtheftmc.vice.drug.item.beer.HumulusLupulusFruit; +import net.grandtheftmc.vice.drug.item.beer.HumulusLupulusSeed; +import net.grandtheftmc.vice.drug.item.meth.puremeth.Methylamine; +import net.grandtheftmc.vice.drug.item.meth.puremeth.PureMeth; +import net.grandtheftmc.vice.drug.item.meth.whitemeth.EphredraSinica; +import net.grandtheftmc.vice.drug.item.meth.whitemeth.EphredraSinicaSeeds; +import net.grandtheftmc.vice.drug.item.meth.whitemeth.WhiteMeth; +import org.bukkit.event.Event; + +import java.util.Arrays; +import java.util.List; + +public final class DrugManager { + + private final List<BaseDrugItem<? extends DrugAttribute>> drugList; + + public DrugManager() { + this.drugList = Lists.newArrayList(); +// this.drugList.addAll(Arrays.asList( +// new BeerBottle(), +// new CraftBeer(), +// new HumulusLupulusFruit(), +// new HumulusLupulusSeed(), +// new Methylamine(), +// new PureMeth(), +// new EphredraSinica(), +// new EphredraSinicaSeeds(), +// new WhiteMeth(), +// new Acid(), +// new Cocaine(), +// new ConcentratedMagicMushroom(), +// new Crack(), +// new DistilledVodka(), +// new DriedMagicMushroom(), +// new Hop(), +// new Joint(), +// new LSD(), +// new MagicMushroom(), +// new MarijuanaLeaf(), +// new MarijuanaSeed(), +// new PotBrownie(), +// new Vodka(), +// new WeedBuds() +// )); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/DrugType.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/DrugType.java new file mode 100644 index 0000000..00527d2 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/DrugType.java @@ -0,0 +1,17 @@ +package net.grandtheftmc.vice.drug; + +public enum DrugType { + BEER(), + VODKA(), + CRAFT_BEER(), + MARIJUANA(), + JOINT(), + POT_BROWNIE(), + MAGIC_MUSHROOM(), + CRACK(), + METH(), + LSD(), + COCAINE(), + ; + +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/attribute/DrugAttribute.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/attribute/DrugAttribute.java new file mode 100644 index 0000000..111875f --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/attribute/DrugAttribute.java @@ -0,0 +1,7 @@ +package net.grandtheftmc.vice.drug.attribute; + +import org.bukkit.event.Event; + +public interface DrugAttribute<T extends Event> { + void onEvent(T event); +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/attribute/DrugBrewable.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/attribute/DrugBrewable.java new file mode 100644 index 0000000..5d93253 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/attribute/DrugBrewable.java @@ -0,0 +1,28 @@ +package net.grandtheftmc.vice.drug.attribute; + +import org.bukkit.inventory.ItemStack; + +public interface DrugBrewable extends DrugAttribute { + + /** + * Brewing time in milliseconds. + * + * @return time + */ + int getBrewTime(); + + /** + * Cab the given item be brewed. + * + * @param item brewable item + * @return + */ + boolean isBrewable(ItemStack item); + + /** + * Get the Item that is returned from a finished brew. + * + * @return item + */ + ItemStack getBrewResult(); +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/attribute/DrugCraftable.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/attribute/DrugCraftable.java new file mode 100644 index 0000000..53d3192 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/attribute/DrugCraftable.java @@ -0,0 +1,13 @@ +package net.grandtheftmc.vice.drug.attribute; + +import net.grandtheftmc.vice.utils.recipe.ShapedRegister; +import net.grandtheftmc.vice.utils.recipe.ShapelessRegister; +import org.bukkit.event.inventory.PrepareItemCraftEvent; + +public interface DrugCraftable extends DrugAttribute< PrepareItemCraftEvent > { + + default ShapelessRegister getShapelessRecipe() { return null; } + default ShapedRegister getShapedRecipe() { return null; } + + boolean isShapeless(); +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/attribute/DrugDrinkable.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/attribute/DrugDrinkable.java new file mode 100644 index 0000000..c90c706 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/attribute/DrugDrinkable.java @@ -0,0 +1,4 @@ +package net.grandtheftmc.vice.drug.attribute; + +public interface DrugDrinkable extends DrugAttribute { +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/attribute/DrugGrowable.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/attribute/DrugGrowable.java new file mode 100644 index 0000000..c3ec587 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/attribute/DrugGrowable.java @@ -0,0 +1,20 @@ +package net.grandtheftmc.vice.drug.attribute; + +import org.bukkit.inventory.ItemStack; + +public interface DrugGrowable extends DrugAttribute { + + /** + * Growth time in milliseconds. + * + * @return time + */ + int getGrowthTime(); + + /** + * Get the Item that is returned from a fully grown plant. + * + * @return item + */ + ItemStack getPlantGrowthResult(); +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/attribute/DrugMachine.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/attribute/DrugMachine.java new file mode 100644 index 0000000..beaa6f7 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/attribute/DrugMachine.java @@ -0,0 +1,7 @@ +package net.grandtheftmc.vice.drug.attribute; + +import net.grandtheftmc.vice.drug.attribute.DrugAttribute; +import org.bukkit.event.Event; + +public interface DrugMachine<T extends Event> extends DrugAttribute<T> { +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/attribute/DrugPlaceable.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/attribute/DrugPlaceable.java new file mode 100644 index 0000000..1062719 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/attribute/DrugPlaceable.java @@ -0,0 +1,31 @@ +package net.grandtheftmc.vice.drug.attribute; + +import org.bukkit.Material; +import org.bukkit.event.block.BlockPlaceEvent; +import org.bukkit.inventory.ItemStack; + +public interface DrugPlaceable extends DrugAttribute< BlockPlaceEvent > { + + /** + * Check if the plant is of type. + * + * @param item Material type + * @return + */ + boolean isPlant(ItemStack item); + + /** + * Get the blocks that the plant can grow on. + * + * @return Material array + */ + Material[] getPlantableBlocks(); + + /** + * Check if a Material accepts plant growth. + * + * @param material Given Block type + * @return true = can be planted + */ + boolean canPlantOn(Material material); +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/attribute/DrugPlantable.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/attribute/DrugPlantable.java new file mode 100644 index 0000000..58ad7eb --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/attribute/DrugPlantable.java @@ -0,0 +1,32 @@ +package net.grandtheftmc.vice.drug.attribute; + +import org.bukkit.Material; +import org.bukkit.event.Event; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.ItemStack; + +public interface DrugPlantable extends DrugAttribute< PlayerInteractEvent > { + + /** + * Check if the plant is of type. + * + * @param item Material type + * @return + */ + boolean isPlant(ItemStack item); + + /** + * Get the blocks that the plant can grow on. + * + * @return Material array + */ + Material[] getPlantableBlocks(); + + /** + * Check if a Material accepts plant growth. + * + * @param material Given Block type + * @return true = can be planted + */ + boolean canPlantOn(Material material); +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/Acid.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/Acid.java new file mode 100644 index 0000000..ed5d12f --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/Acid.java @@ -0,0 +1,17 @@ +package net.grandtheftmc.vice.drug.item; + +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.drug.DrugType; +import net.grandtheftmc.vice.drug.attribute.DrugGrowable; + +public final class Acid extends BaseDrugItem<DrugGrowable> { + + /** + * Construct a new Drug Item + */ + public Acid() { + super("Acid", DrugType.MARIJUANA); + + setGameItem(Vice.getItemManager().getItem(super.getShortName())); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/BaseDrugItem.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/BaseDrugItem.java new file mode 100644 index 0000000..6c9aa65 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/BaseDrugItem.java @@ -0,0 +1,88 @@ +package net.grandtheftmc.vice.drug.item; + +import net.grandtheftmc.vice.drug.DrugType; +import net.grandtheftmc.vice.drug.attribute.DrugAttribute; +import net.grandtheftmc.vice.items.GameItem; + +public abstract class BaseDrugItem<T extends DrugAttribute> implements DrugItem<T> { + + private final String name, shortName; + private GameItem gameItem; + private final DrugType drugType; + + private T attribute = null; + + /** + * Construct a new Drug Item + */ + public BaseDrugItem(String name, DrugType drugType) { + this.name = name; + this.shortName = name.toLowerCase().replace(" ", ""); + this.drugType = drugType; + } + + /** + * Get the name of the DrugItem + * + * @return name + */ + @Override + public String getName() { + return name; + } + + /** + * Get the short name of the DrugItem + * + * @return name + */ + @Override + public String getShortName() { + return shortName; + } + + /** + * Get the GameItem version of this DrugItem. + * + * @return Game Item + */ + @Override + public GameItem getGameItem() { + return gameItem; + } + + /** + * Set the Game Item. + * + * @param gameItem Item + */ + @Override + public void setGameItem(GameItem gameItem) { + this.gameItem = gameItem; + } + + /** + * Get the Type of Drug this Item is affiliated with. + * + * @return Drug Type + */ + @Override + public DrugType getDrugType() { + return drugType; + } + + @Override + public T getAttribute() { + return attribute; + } + + @Override + public void setAttribute(T attribute) { + this.attribute = attribute; + } + + @Override + public String toString() { + return "" + this.name + ":{" + "DrugType:" + drugType.name() + ", Attribute:" + attribute.getClass().getSimpleName() + "}"; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/Cocaine.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/Cocaine.java new file mode 100644 index 0000000..cc2714c --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/Cocaine.java @@ -0,0 +1,17 @@ +package net.grandtheftmc.vice.drug.item; + +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.drug.DrugType; +import net.grandtheftmc.vice.drug.attribute.DrugGrowable; + +public final class Cocaine extends BaseDrugItem<DrugGrowable> { + + /** + * Construct a new Drug Item + */ + public Cocaine() { + super("Cocaine", DrugType.COCAINE); + + setGameItem(Vice.getItemManager().getItem(super.getShortName())); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/ConcentratedMagicMushroom.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/ConcentratedMagicMushroom.java new file mode 100644 index 0000000..8a43bef --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/ConcentratedMagicMushroom.java @@ -0,0 +1,17 @@ +package net.grandtheftmc.vice.drug.item; + +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.drug.DrugType; +import net.grandtheftmc.vice.drug.attribute.DrugGrowable; + +public final class ConcentratedMagicMushroom extends BaseDrugItem<DrugGrowable> { + + /** + * Construct a new Drug Item + */ + public ConcentratedMagicMushroom() { + super("Concentrated Magic Mushroom", DrugType.MAGIC_MUSHROOM); + + super.setGameItem(Vice.getItemManager().getItem(super.getShortName())); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/Crack.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/Crack.java new file mode 100644 index 0000000..9a91d2a --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/Crack.java @@ -0,0 +1,17 @@ +package net.grandtheftmc.vice.drug.item; + +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.drug.DrugType; +import net.grandtheftmc.vice.drug.attribute.DrugGrowable; + +public final class Crack extends BaseDrugItem<DrugGrowable> { + + /** + * Construct a new Drug Item + */ + public Crack() { + super("Crack", DrugType.CRACK); + + super.setGameItem(Vice.getItemManager().getItem(super.getShortName())); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/DistilledVodka.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/DistilledVodka.java new file mode 100644 index 0000000..40b0659 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/DistilledVodka.java @@ -0,0 +1,45 @@ +package net.grandtheftmc.vice.drug.item; + +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.drug.DrugType; +import net.grandtheftmc.vice.drug.attribute.DrugCraftable; +import net.grandtheftmc.vice.items.ItemManager; +import net.grandtheftmc.vice.utils.recipe.ShapelessRegister; +import org.bukkit.Material; +import org.bukkit.event.inventory.PrepareItemCraftEvent; +import org.bukkit.inventory.ItemStack; + +public final class DistilledVodka extends BaseDrugItem< DrugCraftable > { + + /** + * Construct a new Drug Item + */ + public DistilledVodka() { + super("Distilled Vodka", DrugType.VODKA); + + setGameItem(Vice.getItemManager().getItem(super.getShortName())); + + ShapelessRegister recipe = new ShapelessRegister(ItemManager.NAMESPACED_KEY, super.getGameItem().getItem().clone()); + + ItemStack vodka = Vodka.OUTPUT.clone(); + recipe.addIngredient(2, vodka); + + ItemStack arrow = new ItemStack(Material.ARROW); + recipe.addIngredient(1, arrow); + + recipe.register(); + + setAttribute(new DrugCraftable() { + @Override + public boolean isShapeless() { + return false; + } + + @Override + public void onEvent(PrepareItemCraftEvent event) { + + } + }); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/DriedMagicMushroom.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/DriedMagicMushroom.java new file mode 100644 index 0000000..6a16cc6 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/DriedMagicMushroom.java @@ -0,0 +1,25 @@ +package net.grandtheftmc.vice.drug.item; + +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.drug.DrugType; +import net.grandtheftmc.vice.drug.attribute.DrugMachine; +import org.bukkit.event.Event; + +public final class DriedMagicMushroom extends BaseDrugItem<DrugMachine> { + + /** + * Construct a new Drug Item + */ + public DriedMagicMushroom() { + super("Dried Magic Mushroom", DrugType.MAGIC_MUSHROOM); + + setGameItem(Vice.getItemManager().getItem(super.getShortName())); + + setAttribute(new DrugMachine() { + @Override + public void onEvent(Event event) { + + } + }); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/DrugItem.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/DrugItem.java new file mode 100644 index 0000000..c007da6 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/DrugItem.java @@ -0,0 +1,46 @@ +package net.grandtheftmc.vice.drug.item; + +import net.grandtheftmc.vice.drug.DrugType; +import net.grandtheftmc.vice.drug.attribute.DrugAttribute; +import net.grandtheftmc.vice.items.GameItem; + +public interface DrugItem<T extends DrugAttribute> { + + /** + * Get the name of the DrugItem + * + * @return name + */ + String getName(); + + /** + * Get the short name of the DrugItem + * + * @return name + */ + String getShortName(); + + /** + * Get the GameItem version of this DrugItem. + * + * @return Game Item + */ + GameItem getGameItem(); + + /** + * Set the Game Item. + * + * @param gameItem Item + */ + void setGameItem(GameItem gameItem); + + /** + * Get the Type of Drug this Item is affiliated with. + * + * @return Drug Type + */ + DrugType getDrugType(); + + T getAttribute(); + void setAttribute(T attribute); +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/Hop.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/Hop.java new file mode 100644 index 0000000..e4f9aa8 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/Hop.java @@ -0,0 +1,19 @@ +package net.grandtheftmc.vice.drug.item; + +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.drug.DrugType; +import net.grandtheftmc.vice.drug.attribute.DrugGrowable; + +public final class Hop extends BaseDrugItem<DrugGrowable> { + + /** + * Construct a new Drug Item + */ + public Hop() { + super("Hop", DrugType.BEER); + + setGameItem(Vice.getItemManager().getItem(super.getShortName())); + + setAttribute(null); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/Joint.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/Joint.java new file mode 100644 index 0000000..29e0ed3 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/Joint.java @@ -0,0 +1,78 @@ +package net.grandtheftmc.vice.drug.item; + +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.drug.DrugType; +import net.grandtheftmc.vice.drug.attribute.DrugCraftable; +import net.grandtheftmc.vice.items.ItemManager; +import net.grandtheftmc.vice.utils.recipe.ShapedRegister; +import org.bukkit.Material; +import org.bukkit.event.inventory.PrepareItemCraftEvent; +import org.bukkit.inventory.ItemStack; +import us.myles.ViaVersion.util.ConcurrentList; + +import java.util.Arrays; +import java.util.stream.Collectors; + +public final class Joint extends BaseDrugItem< DrugCraftable > { + + /** + * Construct a new Drug Item + */ + public Joint() { + super("Joint", DrugType.JOINT); + + setGameItem(Vice.getItemManager().getItem(super.getShortName())); + + ShapedRegister recipe = new ShapedRegister(ItemManager.NAMESPACED_KEY, super.getGameItem().getItem().clone()); + recipe.shape("000","010","222"); + ItemStack bud = MarijuanaLeaf.getOutput(); + recipe.setIngredient('1', bud); + ItemStack paper = new ItemStack(Material.PAPER); + recipe.setIngredient('2', paper); + recipe.register(); + + setAttribute(new DrugCraftable() { + @Override + public boolean isShapeless() { + return false; + } + + @Override + public void onEvent(PrepareItemCraftEvent event) { + if (event.getInventory() == null) return; + if (event.getRecipe().getResult() != recipe.getOutput()) return; + + ConcurrentList<ItemStack> matrix = new ConcurrentList<>(); + matrix.addAll(Arrays.stream(event.getInventory().getMatrix()).filter(i -> i != null && i.getType() != Material.AIR).collect(Collectors.toList())); + + int budCount = (int) matrix.stream().filter(item -> { + if (item != null && item.equals(bud)) { + matrix.remove(item); + return true; + } + return false; + }).count(); + int paperCount = (int) matrix.stream().filter(item -> { + if (item != null && item.getType() == paper.getType()) { + matrix.remove(item); + return true; + } + return false; + }).count(); + + if (!matrix.isEmpty()) { + event.getInventory().setResult(new ItemStack(Material.AIR)); + return; + } + + if (budCount == 1 && paperCount == 3) { + event.getInventory().setResult(recipe.getOutput()); + System.out.println("" + event.getInventory().getResult().getType().name()); + return; + } + + event.getInventory().setResult(new ItemStack(Material.AIR)); + } + }); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/LSD.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/LSD.java new file mode 100644 index 0000000..d48aa8e --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/LSD.java @@ -0,0 +1,17 @@ +package net.grandtheftmc.vice.drug.item; + +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.drug.DrugType; +import net.grandtheftmc.vice.drug.attribute.DrugGrowable; + +public final class LSD extends BaseDrugItem<DrugGrowable> { + + /** + * Construct a new Drug Item + */ + public LSD() { + super("LSD", DrugType.LSD); + + setGameItem(Vice.getItemManager().getItem(super.getShortName())); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/MagicMushroom.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/MagicMushroom.java new file mode 100644 index 0000000..08dcd75 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/MagicMushroom.java @@ -0,0 +1,17 @@ +package net.grandtheftmc.vice.drug.item; + +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.drug.DrugType; +import net.grandtheftmc.vice.drug.attribute.DrugGrowable; + +public class MagicMushroom extends BaseDrugItem<DrugGrowable> { + + /** + * Construct a new Drug Item + */ + public MagicMushroom() { + super("Magic Mushroom", DrugType.MAGIC_MUSHROOM); + + setGameItem(Vice.getItemManager().getItem(super.getShortName())); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/MarijuanaLeaf.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/MarijuanaLeaf.java new file mode 100644 index 0000000..01739fa --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/MarijuanaLeaf.java @@ -0,0 +1,35 @@ +package net.grandtheftmc.vice.drug.item; + +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.drug.DrugType; +import net.grandtheftmc.vice.drug.attribute.DrugMachine; +import org.bukkit.event.Event; +import org.bukkit.inventory.ItemStack; + +public final class MarijuanaLeaf extends BaseDrugItem<DrugMachine> { + + private static final ItemStack OUTPUT = Vice.getItemManager().getItem("").getItem(); + + /** + * Construct a new Drug Item + */ + public MarijuanaLeaf() { + super("Marijuana Leaf", DrugType.MARIJUANA); + + setGameItem(Vice.getItemManager().getItem(super.getShortName())); + + setAttribute(new DrugMachine() { + + //OUTPUT + + @Override + public void onEvent(Event event) { + + } + }); + } + + protected static ItemStack getOutput() { + return OUTPUT.clone(); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/MarijuanaSeed.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/MarijuanaSeed.java new file mode 100644 index 0000000..53ef942 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/MarijuanaSeed.java @@ -0,0 +1,54 @@ +package net.grandtheftmc.vice.drug.item; + +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.drug.DrugType; +import net.grandtheftmc.vice.drug.attribute.DrugPlaceable; +import org.bukkit.Material; +import org.bukkit.block.BlockFace; +import org.bukkit.event.block.BlockPlaceEvent; +import org.bukkit.inventory.ItemStack; + +public final class MarijuanaSeed extends BaseDrugItem< DrugPlaceable > { + + private static final Material[] ACCEPTED_BLOCKS = new Material[]{ Material.SAND, Material.DIRT, Material.GRASS, Material.SOIL }; + + /** + * Construct a new Drug Item + */ + public MarijuanaSeed() { + super("Marijuana Seed", DrugType.MARIJUANA); + + setGameItem(Vice.getItemManager().getItem(super.getShortName())); + + setAttribute(new DrugPlaceable() { + @Override + public boolean isPlant(ItemStack item) { + return item.isSimilar(MarijuanaSeed.super.getGameItem().getItem()); + } + + @Override + public Material[] getPlantableBlocks() { + return ACCEPTED_BLOCKS; + } + + @Override + public boolean canPlantOn(Material material) { + for (Material m : ACCEPTED_BLOCKS) { + if (material == m) return true; + } + return false; + } + + @Override + public void onEvent(BlockPlaceEvent event) { + if (!this.isPlant(event.getItemInHand())) return; + if (!this.canPlantOn(event.getBlockAgainst().getType())) { + event.setCancelled(true); + return; + } + + System.out.println("Placed plant: " + MarijuanaSeed.super.getName()); + } + }); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/PotBrownie.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/PotBrownie.java new file mode 100644 index 0000000..af229db --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/PotBrownie.java @@ -0,0 +1,78 @@ +package net.grandtheftmc.vice.drug.item; + +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.drug.DrugType; +import net.grandtheftmc.vice.drug.attribute.DrugCraftable; +import net.grandtheftmc.vice.items.ItemManager; +import net.grandtheftmc.vice.utils.recipe.ShapedRegister; +import org.bukkit.Material; +import org.bukkit.event.inventory.PrepareItemCraftEvent; +import org.bukkit.inventory.ItemStack; +import us.myles.ViaVersion.util.ConcurrentList; + +import java.util.Arrays; +import java.util.stream.Collectors; + +public final class PotBrownie extends BaseDrugItem< DrugCraftable > { + + /** + * Construct a new Drug Item + */ + public PotBrownie() { + super("Pot Brownie", DrugType.POT_BROWNIE); + + setGameItem(Vice.getItemManager().getItem(super.getShortName())); + + ShapedRegister recipe = new ShapedRegister(ItemManager.NAMESPACED_KEY, super.getGameItem().getItem().clone()); + recipe.shape("111","121","111"); + ItemStack cookie = new ItemStack(Material.PAPER); + recipe.setIngredient('1', cookie); + ItemStack bud = MarijuanaLeaf.getOutput(); + recipe.setIngredient('2', bud); + recipe.register(); + + setAttribute(new DrugCraftable() { + @Override + public boolean isShapeless() { + return false; + } + + @Override + public void onEvent(PrepareItemCraftEvent event) { + if (event.getInventory() == null) return; + if (event.getRecipe().getResult() != recipe.getOutput()) return; + + ConcurrentList<ItemStack> matrix = new ConcurrentList<>(); + matrix.addAll(Arrays.stream(event.getInventory().getMatrix()).filter(i -> i != null && i.getType() != Material.AIR).collect(Collectors.toList())); + + int budCount = (int) matrix.stream().filter(item -> { + if (item != null && item.equals(bud)) { + matrix.remove(item); + return true; + } + return false; + }).count(); + int cookieCount = (int) matrix.stream().filter(item -> { + if (item != null && item.getType() == cookie.getType()) { + matrix.remove(item); + return true; + } + return false; + }).count(); + + if (!matrix.isEmpty()) { + event.getInventory().setResult(new ItemStack(Material.AIR)); + return; + } + + if (budCount == 1 && cookieCount == 8) { + event.getInventory().setResult(recipe.getOutput()); + System.out.println("" + event.getInventory().getResult().getType().name()); + return; + } + + event.getInventory().setResult(new ItemStack(Material.AIR)); + } + }); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/Vodka.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/Vodka.java new file mode 100644 index 0000000..896f849 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/Vodka.java @@ -0,0 +1,22 @@ +package net.grandtheftmc.vice.drug.item; + +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.drug.DrugType; +import net.grandtheftmc.vice.drug.attribute.DrugBrewable; +import org.bukkit.inventory.ItemStack; + +public final class Vodka extends BaseDrugItem<DrugBrewable> { + + protected static final ItemStack OUTPUT = Vice.getItemManager().getItem("vodka").getItem(); + + /** + * Construct a new Drug Item + */ + public Vodka() { + super("Vodka", DrugType.VODKA); + + setGameItem(Vice.getItemManager().getItem(super.getShortName())); + + setAttribute(null); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/WeedBuds.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/WeedBuds.java new file mode 100644 index 0000000..d958d3b --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/WeedBuds.java @@ -0,0 +1,16 @@ +package net.grandtheftmc.vice.drug.item; + +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.drug.DrugType; + +public final class WeedBuds extends BaseDrugItem { + + /** + * Construct a new Drug Item + */ + public WeedBuds() { + super("Weed Buds", DrugType.MARIJUANA); + + setGameItem(Vice.getItemManager().getItem(super.getShortName())); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/beer/BeerBottle.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/beer/BeerBottle.java new file mode 100644 index 0000000..436a22c --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/beer/BeerBottle.java @@ -0,0 +1,23 @@ +package net.grandtheftmc.vice.drug.item.beer; + +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.drug.DrugType; +import net.grandtheftmc.vice.drug.attribute.DrugMachine; +import net.grandtheftmc.vice.drug.item.BaseDrugItem; +//import net.grandtheftmc.vice.machine.event.MachineRecipeCompleteEvent; + +public final class BeerBottle extends BaseDrugItem<DrugMachine> { + + /** + * Construct a new Drug Item + */ + public BeerBottle() { + super("Beer Bottle", DrugType.BEER); + + super.setGameItem(Vice.getItemManager().getItem(super.getShortName())); + + super.setAttribute(event -> { + + }); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/beer/CraftBeer.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/beer/CraftBeer.java new file mode 100644 index 0000000..66addef --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/beer/CraftBeer.java @@ -0,0 +1,21 @@ +package net.grandtheftmc.vice.drug.item.beer; + +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.drug.DrugType; +import net.grandtheftmc.vice.drug.attribute.DrugMachine; +import net.grandtheftmc.vice.drug.item.BaseDrugItem; +//import net.grandtheftmc.vice.machine.event.MachineRecipeCompleteEvent; + +public final class CraftBeer extends BaseDrugItem<DrugMachine> { + + /** + * Construct a new Drug Item + */ + public CraftBeer() { + super("Craft Beer", DrugType.CRAFT_BEER); + + setGameItem(Vice.getItemManager().getItem(super.getShortName())); + + setAttribute(null); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/beer/HumulusLupulusFruit.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/beer/HumulusLupulusFruit.java new file mode 100644 index 0000000..71248a1 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/beer/HumulusLupulusFruit.java @@ -0,0 +1,26 @@ +package net.grandtheftmc.vice.drug.item.beer; + +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.drug.DrugType; +import net.grandtheftmc.vice.drug.attribute.DrugMachine; +import net.grandtheftmc.vice.drug.item.BaseDrugItem; +import org.bukkit.event.Event; + +public final class HumulusLupulusFruit extends BaseDrugItem<DrugMachine> { + + /** + * Construct a new Drug Item + */ + public HumulusLupulusFruit() { + super("Humulus Lupulus Fruit", DrugType.BEER); + + setGameItem(Vice.getItemManager().getItem(super.getShortName())); + + setAttribute(new DrugMachine() { + @Override + public void onEvent(Event event) { + + } + }); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/beer/HumulusLupulusSeed.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/beer/HumulusLupulusSeed.java new file mode 100644 index 0000000..2b36b4e --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/beer/HumulusLupulusSeed.java @@ -0,0 +1,47 @@ +package net.grandtheftmc.vice.drug.item.beer; + +import net.grandtheftmc.vice.drug.DrugType; +import net.grandtheftmc.vice.drug.attribute.DrugPlantable; +import net.grandtheftmc.vice.drug.item.BaseDrugItem; +import org.bukkit.Material; +import org.bukkit.block.BlockFace; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.ItemStack; + +public final class HumulusLupulusSeed extends BaseDrugItem< DrugPlantable > { + + private static final Material[] ACCEPTED_BLOCKS = new Material[]{ Material.SAND }; + + /** + * Construct a new Drug Item + */ + public HumulusLupulusSeed() { + super("Humulus Lupulus Seed", DrugType.BEER); + + super.setAttribute(new DrugPlantable() { + @Override + public void onEvent(PlayerInteractEvent event) { + if (!this.isPlant(event.getItem())) return; + if (event.getBlockFace() != BlockFace.UP) return; + if (!this.canPlantOn(event.getClickedBlock().getType())) return; + + //TODO Plant seed. + } + + @Override + public boolean isPlant(ItemStack item) { + return item.isSimilar(HumulusLupulusSeed.super.getGameItem().getItem()); + } + + @Override + public Material[] getPlantableBlocks() { + return ACCEPTED_BLOCKS; + } + + @Override + public boolean canPlantOn(Material material) { + return material == ACCEPTED_BLOCKS[0]; + } + }); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/meth/puremeth/Methylamine.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/meth/puremeth/Methylamine.java new file mode 100644 index 0000000..9538092 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/meth/puremeth/Methylamine.java @@ -0,0 +1,18 @@ +package net.grandtheftmc.vice.drug.item.meth.puremeth; + +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.drug.DrugType; +import net.grandtheftmc.vice.drug.attribute.DrugGrowable; +import net.grandtheftmc.vice.drug.item.BaseDrugItem; + +public final class Methylamine extends BaseDrugItem<DrugGrowable> { + + /** + * Construct a new Drug Item + */ + public Methylamine() { + super("Methylamine", DrugType.METH); + + setGameItem(Vice.getItemManager().getItem(super.getShortName())); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/meth/puremeth/PureMeth.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/meth/puremeth/PureMeth.java new file mode 100644 index 0000000..4f9b72a --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/meth/puremeth/PureMeth.java @@ -0,0 +1,18 @@ +package net.grandtheftmc.vice.drug.item.meth.puremeth; + +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.drug.DrugType; +import net.grandtheftmc.vice.drug.attribute.DrugGrowable; +import net.grandtheftmc.vice.drug.item.BaseDrugItem; + +public final class PureMeth extends BaseDrugItem<DrugGrowable> { + + /** + * Construct a new Drug Item + */ + public PureMeth() { + super("Pure Meth", DrugType.METH); + + setGameItem(Vice.getItemManager().getItem(super.getShortName())); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/meth/whitemeth/EphredraSinica.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/meth/whitemeth/EphredraSinica.java new file mode 100644 index 0000000..bbd01a0 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/meth/whitemeth/EphredraSinica.java @@ -0,0 +1,18 @@ +package net.grandtheftmc.vice.drug.item.meth.whitemeth; + +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.drug.DrugType; +import net.grandtheftmc.vice.drug.attribute.DrugGrowable; +import net.grandtheftmc.vice.drug.item.BaseDrugItem; + +public final class EphredraSinica extends BaseDrugItem<DrugGrowable> { + + /** + * Construct a new Drug Item + */ + public EphredraSinica() { + super("Ephredra Sinica", DrugType.METH); + + super.setGameItem(Vice.getItemManager().getItem(super.getShortName())); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/meth/whitemeth/EphredraSinicaSeeds.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/meth/whitemeth/EphredraSinicaSeeds.java new file mode 100644 index 0000000..13376bd --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/meth/whitemeth/EphredraSinicaSeeds.java @@ -0,0 +1,50 @@ +package net.grandtheftmc.vice.drug.item.meth.whitemeth; + +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.drug.DrugType; +import net.grandtheftmc.vice.drug.attribute.DrugPlantable; +import net.grandtheftmc.vice.drug.item.BaseDrugItem; +import org.bukkit.Material; +import org.bukkit.block.BlockFace; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.ItemStack; + +public final class EphredraSinicaSeeds extends BaseDrugItem<DrugPlantable> { + + private static final Material[] ACCEPTED_BLOCKS = new Material[]{ Material.SAND }; + + /** + * Construct a new Drug Item + */ + public EphredraSinicaSeeds() { + super("Ephredra Sinica Seed", DrugType.METH); + + super.setGameItem(Vice.getItemManager().getItem(super.getShortName())); + + super.setAttribute(new DrugPlantable() { + @Override + public void onEvent(PlayerInteractEvent event) { + if (!this.isPlant(event.getItem())) return; + if (event.getBlockFace() != BlockFace.UP) return; + if (!this.canPlantOn(event.getClickedBlock().getType())) return; + + //TODO Plant seed. + } + + @Override + public boolean isPlant(ItemStack item) { + return item.isSimilar(EphredraSinicaSeeds.super.getGameItem().getItem()); + } + + @Override + public Material[] getPlantableBlocks() { + return ACCEPTED_BLOCKS; + } + + @Override + public boolean canPlantOn(Material material) { + return material == ACCEPTED_BLOCKS[0]; + } + }); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/meth/whitemeth/WhiteMeth.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/meth/whitemeth/WhiteMeth.java new file mode 100644 index 0000000..74ef2e5 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drug/item/meth/whitemeth/WhiteMeth.java @@ -0,0 +1,18 @@ +package net.grandtheftmc.vice.drug.item.meth.whitemeth; + +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.drug.DrugType; +import net.grandtheftmc.vice.drug.attribute.DrugGrowable; +import net.grandtheftmc.vice.drug.item.BaseDrugItem; + +public final class WhiteMeth extends BaseDrugItem<DrugGrowable> { + + /** + * Construct a new Drug Item + */ + public WhiteMeth() { + super("White Meth", DrugType.METH); + + setGameItem(Vice.getItemManager().getItem(super.getShortName())); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/Drug.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/Drug.java new file mode 100644 index 0000000..dd8032e --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/Drug.java @@ -0,0 +1,55 @@ +package net.grandtheftmc.vice.drugs; + +import net.grandtheftmc.vice.drugs.categories.DrugCategory; +import org.bukkit.entity.Player; + +import java.util.Optional; + +/** + * Created by Remco on 25-3-2017. + */ +public abstract class Drug { + + private final String name; + private int duration; + + protected Drug(String name, int duration) { + this.name = name; + this.duration = duration; + } + + /** + * General startpoint for applying drugs. + * + * @param player + * @return + */ + public abstract boolean apply(Player player); + + /** + * Name of the drug + * + * @return + */ + public String getName() { + return name; + } + + + /** + * Duration of the particle effects + * + * @return + */ + public int getDuration() { + return duration; + } + + public Optional<DrugCategory> getCategory() { + return DrugCategory.byDrug(this); + } + + protected Drug getInstance(){ + return this; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/DrugCommand.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/DrugCommand.java new file mode 100644 index 0000000..64aacdd --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/DrugCommand.java @@ -0,0 +1,52 @@ +package net.grandtheftmc.vice.drugs; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.ArrayList; +import java.util.Collection; + +public class DrugCommand implements CommandExecutor { + public static Collection<String> addingBlocks = new ArrayList<>(); + + @Override + public boolean onCommand(CommandSender s, Command c, String l, String[] args) { + if (!s.hasPermission("vice.drugs.admin")) { + s.sendMessage(Utils.f("&cYou do not have permission to execute this command!")); + return true; + } + if (!(s instanceof Player)) { + s.sendMessage(Lang.VICE.f("&cYou are not a player!")); + return true; + } + Player player = (Player) s; + if (args.length != 1) { + sendHelp(player); + return true; + } + switch (args[0]) { + case "lb": + case "lockedblock": + if (addingBlocks.contains(player.getName())) { + player.sendMessage(Lang.DRUGS.f("&cYou are no longer adding/removing locked blocks")); + addingBlocks.remove(player.getName()); + } else { + player.sendMessage(Lang.DRUGS.f("&aYou are now adding/removing locked blocks")); + addingBlocks.add(player.getName()); + } + return true; + default: + sendHelp(player); + } + return true; + } + + public void sendHelp(Player player) { + player.sendMessage(Lang.DRUGS.f("&7Usage:")); + player.sendMessage(Utils.f("&a/drugs [lb/lockedblock] &7- Enable/Disable the Adding or Removal of locked blocks")); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/DrugComponent.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/DrugComponent.java new file mode 100644 index 0000000..f8a9527 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/DrugComponent.java @@ -0,0 +1,131 @@ +package net.grandtheftmc.vice.drugs; + +import net.grandtheftmc.core.util.Component; +import net.grandtheftmc.vice.Vice; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; +import org.bukkit.event.EventHandler; +import org.bukkit.event.block.BlockBreakEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.scheduler.BukkitTask; + +import java.util.Random; + +public final class DrugComponent implements Component<DrugComponent, Vice> { + + private final Random random; + private BukkitTask task; + + public DrugComponent(Vice vice) { + this.random = new Random(); + + SeedType.init(); + + this.task = new BukkitRunnable() { + @Override + public void run() { + for (SeedType type : SeedType.values()) { + for (SeedDrop drop : type.getDrops()) { + if (System.currentTimeMillis() < drop.getLast()) continue; + drop.next(); + + Bukkit.getOnlinePlayers().forEach(player -> { + if (!player.getLocation().getWorld().getName().equals("spawn") && player.getLocation().getBlock().getBiome() == drop.getBiome()) { + dropItem(type.getItemStack(), player.getLocation(), drop.getRange()); + } + }); + } + } + } + }.runTaskTimer(vice, 1000, 20 * 10); + } + + @Override + public DrugComponent onDisable(Vice plugin) { + this.task.cancel(); + return this; + } + + private void dropItem(ItemStack itemStack, Location location, int radius) { + int x = this.random.nextInt(radius); + int z = this.random.nextInt(radius); + if (this.random.nextBoolean()) x = -x; + if (this.random.nextBoolean()) z = -z; + + Location loc = location.clone().add(x, 0, z); + loc.setY(loc.getWorld().getHighestBlockYAt(loc) + 1); + + loc.getWorld().dropItem(loc, itemStack.clone()); + } + + @EventHandler + protected final void onBlockBreak(BlockBreakEvent event) { + if (event.getBlock() == null) return; + + switch (event.getBlock().getType()) { + case CACTUS: + case SUGAR_CANE_BLOCK: { + int i = this.random.nextInt(100); + if (i <= 2) this.destroyPlant(event.getBlock(), event.getBlock().getType()); + break; + } + + case POTATO: { + int i = this.random.nextInt(100); + event.setDropItems(false); + if (i <= 90) event.getBlock().getWorld().dropItemNaturally(event.getBlock().getLocation(), new ItemStack(Material.POTATO_ITEM)); + event.getBlock().getWorld().dropItemNaturally(event.getBlock().getLocation(), new ItemStack(Material.POTATO_ITEM)); + break; + } + + case MELON_BLOCK: { + event.setDropItems(false); + event.getBlock().getWorld().dropItemNaturally(event.getBlock().getLocation(), Vice.getItemManager().getItem("cocaleaf").getItem()); + event.getBlock().getWorld().dropItemNaturally(event.getBlock().getLocation(), Vice.getItemManager().getItem("cocaleaf").getItem()); + + int i = this.random.nextInt(100); + if (i <= 3) { + for (BlockFace face : new BlockFace[] {BlockFace.NORTH, BlockFace.EAST, BlockFace.SOUTH, BlockFace.WEST}) { + if (event.getBlock().getRelative(face).getType() == Material.MELON_STEM) { + event.getBlock().getRelative(face).setType(Material.AIR); + break; + } + } + } + } + + case NETHER_STALK: + event.setDropItems(false); + event.getBlock().getWorld().dropItemNaturally(event.getBlock().getLocation(), Vice.getItemManager().getItem("ergotfungi").getItem()); + + int i = this.random.nextInt(100); + if (i <= 2) { + for (BlockFace face : new BlockFace[] {BlockFace.NORTH, BlockFace.EAST, BlockFace.SOUTH, BlockFace.WEST}) { + if (event.getBlock().getRelative(face).getType() == Material.NETHER_STALK) { + event.getBlock().getRelative(face).setType(Material.AIR); + break; + } + } + } + break; + + case LONG_GRASS: + event.setDropItems(false); + break; + } + } + + private void destroyPlant(Block block, Material material) { + Location origin = block.getLocation().clone(); + for (int i = block.getY() - 5; i < block.getY() + 5; i++) { + Block found = origin.getWorld().getBlockAt(origin.getBlockX(), i, origin.getBlockZ()); + if (found.getType() == material) { + found.setType(Material.AIR); + } + } + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/DrugEffect.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/DrugEffect.java new file mode 100644 index 0000000..9163db8 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/DrugEffect.java @@ -0,0 +1,13 @@ +package net.grandtheftmc.vice.drugs; + +import org.bukkit.entity.Player; + +/** + * Created by Remco on 25-3-2017. + */ +@FunctionalInterface +public interface DrugEffect { + + void apply(Drug drug, int duration, Player player); + +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/DrugHelper.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/DrugHelper.java new file mode 100644 index 0000000..e0c86b6 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/DrugHelper.java @@ -0,0 +1,26 @@ +package net.grandtheftmc.vice.drugs; + +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.drugs.internal.service.Helper; +import net.grandtheftmc.vice.drugs.internal.service.Service; + +/** + * Created by Remco on 25-3-2017. + */ +public class DrugHelper implements Helper { + + @Override + public String getHelperName() { + return "Drug Helper"; + } + + @Override + public Class<? extends Service> getServiceClass() { + return DrugService.class; + } + + private DrugService getService() { + return (DrugService) Vice.getInstance().getDrugManager().getService(); + } + +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/DrugManager.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/DrugManager.java new file mode 100644 index 0000000..de6e758 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/DrugManager.java @@ -0,0 +1,149 @@ +package net.grandtheftmc.vice.drugs; + +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.drugs.example.*; +import net.grandtheftmc.vice.drugs.internal.manager.Manager; +import net.grandtheftmc.vice.drugs.items.DrugItem; +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; + +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; +import java.util.concurrent.atomic.AtomicInteger; + +public class DrugManager extends Manager { + private EffectManager effectManager; + private LockedBlocks lockedBlocks; + private final Set<UUID> ods = new HashSet<>(); + private final Set<UUID> unmoveable = new HashSet<>(); + + public DrugManager() { + super("Drug Manager", new AtomicInteger(1), new DrugService()); + } + + @Override + public void start() { + DrugService service = (DrugService) this.getService(); + ItemStack mdma = DrugUtil.setDisplayName(new ItemStack(Material.DIAMOND_SWORD, 1, (short) 755), Utils.f("&e&lMDMA")); + mdma = DrugUtil.hideDurability(mdma); + mdma = DrugUtil.addLore(mdma, "&7Take me to a higher place!"); + service.addDrug(new MDMA(), new DrugItem(mdma, new MDMA())); + + ItemStack lsd = DrugUtil.setDisplayName(new ItemStack(Material.DIAMOND_SPADE, 1, (short) 16), Utils.f("&d&lLSD")); + lsd = DrugUtil.hideDurability(lsd); + DrugItem drugItem = new DrugItem(lsd, new LSD()); + service.addDrug(new LSD(), drugItem); + + + ItemStack weed = DrugUtil.setDisplayName(new ItemStack(Material.DIAMOND_SPADE, 1, (short) 7), Utils.f("&2&lWeed Buds")); + weed = DrugUtil.hideDurability(weed); + service.addDrug(new Weed(), new DrugItem(weed, new Weed())); + + ItemStack joint = DrugUtil.setDisplayName(new ItemStack(Material.DIAMOND_SWORD, 1, (short) 752), Utils.f("&2&lJoint")); + joint = DrugUtil.hideDurability(joint); + service.addDrug(new Joint(), new DrugItem(joint, new Joint())); + + ItemStack steroids = DrugUtil.setDisplayName(new ItemStack(Material.DIAMOND_SWORD, 1, (short) 758), Utils.f("&c&lBull Shark Testosterone")); + steroids = DrugUtil.hideDurability(steroids); + steroids = DrugUtil.addLore(steroids, "&7Don’t mess with me!"); + service.addDrug(new Steroids(), new DrugItem(steroids, new Steroids())); + + ItemStack alcohol = DrugUtil.setDisplayName(new ItemStack(Material.DIAMOND_SPADE, 1, (short) 2), Utils.f("&e&lBeer")); + alcohol = DrugUtil.hideDurability(alcohol); + service.addDrug(new Alcohol(), new DrugItem(alcohol, new Alcohol())); + + ItemStack meth = DrugUtil.setDisplayName(new ItemStack(Material.DIAMOND_SWORD, 1, (short) 759), Utils.f("&c&lMeth Pipe")); + meth = DrugUtil.hideDurability(meth); + service.addDrug(new Meth(), new DrugItem(meth, new Meth())); + + ItemStack cocaine = DrugUtil.setDisplayName(new ItemStack(Material.DIAMOND_SPADE, 1, (short) 14), Utils.f("&f&lCocaine")); + cocaine = DrugUtil.hideDurability(cocaine); + service.addDrug(new Cocaine(), new DrugItem(cocaine, new Cocaine())); + + ItemStack heroin = DrugUtil.setDisplayName(new ItemStack(Material.DIAMOND_SWORD, 1, (short) 760), Utils.f("&b&lHeroin Syringe")); + heroin = DrugUtil.hideDurability(heroin); + heroin = DrugUtil.addLore(heroin, "&7Stick this thing in my arm!"); + service.addDrug(new Heroin(), new DrugItem(heroin, new Heroin())); + + this.effectManager = new EffectManager(); + this.lockedBlocks = new LockedBlocks(); + } + + @Override + public void stop() { + this.lockedBlocks.save(); + } + + @Override + public boolean destroy() { + return false; + } + + /** + * @apiNote see note in ItemManager#loadRecipes() + */ + public void loadDrugRecipes() { +// Vice.getItemManager().registerCustomRecipe(new HeroinCraftingRecipe()); +// Vice.getItemManager().registerCustomRecipe(new OpiumCraftingRecipe()); +// Vice.getItemManager().registerCustomRecipe(new JointCraftingRecipe()); +// Vice.getItemManager().registerCustomRecipe(new PotBrownieCraftingRecipe()); +// Vice.getItemManager().registerCustomRecipe(new WeedBudCraftingRecipe()); +// Vice.getItemManager().registerCustomRecipe(new CocaineCraftingRecipe()); +// Vice.getItemManager().registerCustomRecipe(new LSDCraftingRecipe()); +// Vice.getItemManager().registerCustomRecipe(new MethPipeCraftingRecipe()); +// Vice.getItemManager().registerCustomRecipe(new MethBaggyBrewingRecipe()); +// Vice.getItemManager().registerCustomRecipe(new BeerBrewingRecipe()); +// Vice.getItemManager().registerCustomRecipe(new MDMABrewingRecipe()); +// Vice.getItemManager().registerCustomRecipe(new HopsCraftingRecipe()); +// Vice.getItemManager().registerCustomRecipe(new VodkaBrewingRecipe()); +// Vice.getItemManager().registerCustomRecipe(new HeroinSyringeCraftingRecipe()); +// Vice.getItemManager().registerCustomRecipe(new SyringeCraftingRecipe()); + } + + + public EffectManager getEffectManager() { + return this.effectManager; + } + + public LockedBlocks getLockedBlocks() { + return this.lockedBlocks; + } + + /** + * @param uuid the uuid of the player + * @return if the player CAN OD again + */ + public boolean inOD(UUID uuid) { + return this.ods.contains(uuid); + } + + + /*** + * @param uuid uuid of the player + * + * Use when a player has OD'd (at the start of the OD sequence) + */ + public void addOD(UUID uuid) { + if (!this.ods.contains(uuid)) { + this.ods.add(uuid); + } + } + + /** + * @param uuid the player + * <p> + * Use after the OD has completed (at the end of the same OD sequence) + */ + public void removeOD(UUID uuid) { + if (this.ods.contains(uuid)) { + this.ods.remove(uuid); + } + } + + public static boolean isDrug(ItemStack itemStack) { + return ((DrugService) Vice.getDrugManager().getService()).getAllDrugItems().stream().anyMatch(drugItem -> drugItem.getItemStack().isSimilar(itemStack)); + } + +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/DrugParam.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/DrugParam.java new file mode 100644 index 0000000..6256c94 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/DrugParam.java @@ -0,0 +1,17 @@ +package net.grandtheftmc.vice.drugs; + +import java.lang.annotation.Documented; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +/** + * Created by Remco on 25-3-2017. + */ + +@Documented +@Retention(RetentionPolicy.RUNTIME) +public @interface DrugParam { + + FunctionalInterface value(); + +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/DrugService.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/DrugService.java new file mode 100644 index 0000000..3a840e1 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/DrugService.java @@ -0,0 +1,70 @@ +package net.grandtheftmc.vice.drugs; + +import com.google.common.collect.HashBasedTable; +import com.google.common.collect.Table; +import net.grandtheftmc.vice.drugs.internal.service.Service; +import net.grandtheftmc.vice.drugs.items.DrugItem; +import org.bukkit.inventory.ItemStack; + +import java.util.Collection; +import java.util.Map; +import java.util.Optional; +import java.util.Set; + +/** + * Created by Remco on 25-3-2017. + */ +public class DrugService extends Service { + + //All items, sorted on: + private final Table<DrugParam[], DrugItem, Drug> items = HashBasedTable.create(); + + public DrugService() { + super("Drug Item Service", new DrugHelper()); + } + + public Drug addDrug(Drug drug, DrugItem item, DrugParam... params) { + if (this.items.columnKeySet().stream().noneMatch((match) -> false)) { + items.put(params, item, drug); + return drug; + } + return null; + } + + public final Collection<Drug> getDrugs() { + return items.values(); + } + + public final Set<DrugItem> getItems() { + return items.columnKeySet(); + } + + public Drug getDrug(ItemStack item) { + return getDrug(DrugItem.getByItemStack(item)); + } + + public Drug getDrug(DrugItem drugItem) { + return items.columnMap().values().stream().map(Map::values).filter(drugs -> drugs.stream().findFirst().isPresent() && drugs.stream().anyMatch(drugItem::isValid)).map((drug) -> drug.stream().findFirst().get()).findFirst().orElse(null); + } + + public Optional<Drug> getDrug(String name) { + Optional<Drug> drug = items.values().stream().filter(targetDrug -> targetDrug.getName().equalsIgnoreCase(name)).findFirst(); + if (!drug.isPresent()) return Optional.empty(); + return drug; + } + + public Optional<DrugItem> getDrugItem(String name) { + Optional<DrugItem> drug = items.columnKeySet().stream().filter(drugItem -> drugItem.getItemStack().getItemMeta().getDisplayName().equals(name)).findFirst(); + if (!drug.isPresent()) return Optional.empty(); + return drug; + } + + public Set<DrugItem> getAllDrugItems() { + return items.columnKeySet(); + } + + public Table<DrugParam[], DrugItem, Drug> getRawItems() { + return items; + } + +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/DrugUtil.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/DrugUtil.java new file mode 100644 index 0000000..314ecba --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/DrugUtil.java @@ -0,0 +1,195 @@ +package net.grandtheftmc.vice.drugs; + +import net.grandtheftmc.core.util.Utils; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.block.Block; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import java.util.*; +import java.util.concurrent.ThreadLocalRandom; + +public class DrugUtil { + private static Collection<Material> ignoreBlocks = Arrays.asList(Material.AIR, Material.SIGN, Material.SIGN_POST, + Material.WALL_SIGN, Material.IRON_DOOR, Material.IRON_DOOR_BLOCK, Material.CHEST, + Material.WOODEN_DOOR, Material.WOOD_DOOR); + + public static Sound getRandomParanoiaSound() { + int roll = ThreadLocalRandom.current().nextInt(0, 5); + switch (roll) { + default: + case 0: + return Sound.ENTITY_GHAST_SCREAM; + case 1: + return Sound.ENTITY_ZOMBIE_AMBIENT; + case 2: + return Sound.ENTITY_GHAST_AMBIENT; + case 3: + return Sound.ENTITY_SPIDER_AMBIENT; + case 4: + return Sound.ENTITY_CREEPER_PRIMED; + } + } + + public static Sound getRandomAmbientSound() { + int roll = ThreadLocalRandom.current().nextInt(0, 9); + switch (roll) { + default: + case 0: + return Sound.AMBIENT_CAVE; + case 1: + return Sound.ENTITY_RABBIT_AMBIENT; + case 2: + return Sound.ENTITY_BAT_AMBIENT; + case 3: + return Sound.ENTITY_CREEPER_PRIMED; + case 4: + return Sound.ENTITY_CAT_AMBIENT; + case 5: + return Sound.ENTITY_ENDERDRAGON_FIREBALL_EXPLODE; + case 6: + return Sound.BLOCK_CLOTH_BREAK; + case 7: + return Sound.ENTITY_ZOMBIE_INFECT; + case 8: + return Sound.ENTITY_ZOMBIE_PIG_ANGRY; + } + } + + public static String getParanoiaMessage(){ + switch(ThreadLocalRandom.current().nextInt( 10)){ + case 0: + return "They are always watching you"; + case 1: + return "I can see you"; + case 2: + return "I know where you live"; + case 3: + return "There is a camera in front of you, say hi :)"; + case 4: + return "Don't go home, it's not safe"; + case 5: + return "Even when you don't see me I am there"; + case 6: + return "The computer never turns off"; + case 7: + return "The police know what you have done"; + case 8: + return "I can see what you do behind closed doors"; + case 9: + return "I am the monster under your bed"; + default: + return ""; + } + } + + + /*ublic static void sendWorldEnvironment(Player player, World.Environment environment) { + CraftPlayer craftPlayer = (CraftPlayer) player; + CraftWorld world = (CraftWorld) player.getWorld(); + Location location = player.getLocation(); + + PacketPlayOutRespawn packet = new PacketPlayOutRespawn(environment.getId(), EnumDifficulty.getById(world.getDifficulty().getValue()), WorldType.NORMAL, EnumGamemode.getById(player.getGameMode().getValue())); + + craftPlayer.getHandle().playerConnection.sendPacket(packet); + + int viewDistance = Vice.getInstance().getServer().getViewDistance(); + + int xMin = location.getChunk().getX() - viewDistance; + int xMax = location.getChunk().getX() + viewDistance; + int zMin = location.getChunk().getZ() - viewDistance; + int zMax = location.getChunk().getZ() + viewDistance; + + for (int x = xMin; x < xMax; ++x){ + for (int z = zMin; z < zMax; ++z){ + world.refreshChunk(x, z); + } + } + + player.updateInventory(); + + player.teleport(player.getLocation()); + }*/ + + + public static Collection<Block> getNearbyBlocks(Location location, int radius) { + Collection<Block> blocks = new ArrayList<>(); + + for (int x = location.getBlockX() - radius ; x <= location.getBlockX() + radius ; x++) { + for (int z = location.getBlockZ() - radius ; z <= location.getBlockZ() + radius ; z++) { + for(int y = location.getBlockY() - radius ; y <= location.getBlockY() + radius; y++) { + Block block = location.getWorld().getBlockAt(x, y, z); + if (!block.isEmpty() && !ignoreBlocks.contains(block.getType())) { + blocks.add(block); + } + } + } + } + return blocks; + } + + public static ItemStack setDisplayName(ItemStack itemStack, String displayName) { + ItemMeta itemMeta = itemStack.getItemMeta(); + itemMeta.setDisplayName(displayName); + itemStack.setItemMeta(itemMeta); + return itemStack; + } + + public static ItemStack addLore(ItemStack itemStack, String... lore) { + ItemMeta itemMeta = itemStack.getItemMeta(); + List<String> lores = itemMeta.hasLore() ? itemMeta.getLore() : new ArrayList<>(); + for (String a : lore) lores.add(Utils.f(a)); + itemMeta.setLore(lores); + itemStack.setItemMeta(itemMeta); + return itemStack; + } + + public static ItemStack clearLore(ItemStack itemStack) { + ItemMeta itemMeta = itemStack.getItemMeta(); + itemMeta.setLore(new ArrayList<>()); + itemStack.setItemMeta(itemMeta); + return itemStack; + } + + public static ItemStack hideDurability(ItemStack itemStack) { + ItemStack is = itemStack.clone(); + ItemMeta itemMeta = is.getItemMeta(); + itemMeta.setUnbreakable(true); + itemMeta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES, + ItemFlag.HIDE_UNBREAKABLE, + ItemFlag.HIDE_PLACED_ON, + ItemFlag.HIDE_ENCHANTS, + ItemFlag.HIDE_POTION_EFFECTS, + ItemFlag.HIDE_DESTROYS); + is.setItemMeta(itemMeta); + return is; + } + + public static Optional<Map<Integer, ItemStack>> findItem(Inventory inventory, ItemStack itemStack) { + Map<Integer, ItemStack> map = new HashMap<>(); + for (int i = 0; i < inventory.getSize(); i++) { + if (inventory.getItem(i) == null) continue; + ItemStack search = inventory.getItem(i); + System.out.print(search.getType().toString() + " :: " + + itemStack.getType().toString()); + System.out.print(search.getData().getData() + " :: " + + itemStack.getData().getData()); + System.out.print(search.getItemMeta().getDisplayName() + " :: " + + itemStack.getItemMeta().getDisplayName()); + if (search.getType() == itemStack.getType() + && search.getData().getData() == itemStack.getData().getData() + && search.getItemMeta().getDisplayName().equals(itemStack.getItemMeta().getDisplayName())) { + map.put(i, search); + System.out.print("found"); + break; + } + } + return map.isEmpty() ? Optional.empty() : Optional.of(map); + } + + +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/EffectManager.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/EffectManager.java new file mode 100644 index 0000000..c5987db --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/EffectManager.java @@ -0,0 +1,48 @@ +package net.grandtheftmc.vice.drugs; + +import net.grandtheftmc.vice.Vice; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.potion.PotionEffect; + +import java.util.HashMap; +import java.util.UUID; + +public class EffectManager { + + private final HashMap<UUID, Long> cancelEffects = new HashMap<>(); + + /** + * @param player the player who will be getting the effect + * @param effect the effect that may be addded / extended + */ + public void addEffect(Player player, PotionEffect effect) { + Bukkit.getScheduler().runTask(Vice.getInstance(), () -> { + player.addPotionEffect(effect); + }); + } + + /** + * @param player the player who is being checked + * @param origTime the time that the player originally used the drug* + * @return true if the player is still able to have the drug effects + */ + public boolean canRecieveOngoingEffect(Player player, long origTime) { + return player.isOnline() && player.isValid() && cancelEffects.getOrDefault(player.getUniqueId(), (long) 0) <= origTime; + } + + + /** + * @param player the player whose effects will be cancelled + */ + public void cancelEffects(Player player) { + Bukkit.getScheduler().runTask(Vice.getInstance(), () -> { + if (!cancelEffects.containsKey(player.getUniqueId())) { + cancelEffects.put(player.getUniqueId(), System.currentTimeMillis()); + } + for (PotionEffect p : player.getActivePotionEffects()) { + player.removePotionEffect(p.getType()); + } + }); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/LockedBlocks.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/LockedBlocks.java new file mode 100644 index 0000000..e1f4b84 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/LockedBlocks.java @@ -0,0 +1,45 @@ +package net.grandtheftmc.vice.drugs; + +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.vice.Vice; +import org.bukkit.Location; +import org.bukkit.configuration.file.YamlConfiguration; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +public class LockedBlocks { + private Collection<Location> lockedBlocks; + private YamlConfiguration config; + + public LockedBlocks() { + this.lockedBlocks = new ArrayList<>(); + this.config = Vice.getSettings().getDrugBlocksConfig(); + load(); + } + + public void load() { + if (!config.getStringList("blocks").isEmpty()) { + for (String stringLoc : config.getStringList("blocks")) { + Location location = Utils.blockLocationFromString(stringLoc); + if (location != null) this.lockedBlocks.add(location); + } + } + } + + public void save() { + List<String> serializedLocs = new ArrayList<>(); + this.lockedBlocks.forEach(location -> { + if (location != null) + serializedLocs.add(Utils.blockLocationToString(location)); + }); + config.set("blocks", serializedLocs); + Utils.saveConfig(config, "drugblocks"); + } + + public Collection<Location> getLocations() { + return this.lockedBlocks; + } + +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/SeedDrop.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/SeedDrop.java new file mode 100644 index 0000000..ae9ab55 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/SeedDrop.java @@ -0,0 +1,44 @@ +package net.grandtheftmc.vice.drugs; + +import org.bukkit.block.Biome; + +public final class SeedDrop { + private final int uniqueId; + + private final int range; + private final int interval; + private final Biome biome; + + private long last; + + SeedDrop(int uniqueId, int range, int interval, Biome biome) { + this.uniqueId = uniqueId; + this.range = range; + this.interval = interval; + this.biome = biome; + } + + public int getUniqueId() { + return uniqueId; + } + + public int getRange() { + return range; + } + + public int getInterval() { + return interval; + } + + public Biome getBiome() { + return biome; + } + + public long getLast() { + return last; + } + + public void next() { + this.last = System.currentTimeMillis() + (this.interval * 1000); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/SeedType.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/SeedType.java new file mode 100644 index 0000000..f5633bc --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/SeedType.java @@ -0,0 +1,80 @@ +package net.grandtheftmc.vice.drugs; + +import net.grandtheftmc.vice.Vice; +import org.bukkit.Material; +import org.bukkit.block.Biome; +import org.bukkit.inventory.ItemStack; + +public final class SeedType { + protected static SeedType POTATO_SEED, ERGOT_FUNGI, COCA_SEED, MARIJUANA, HUMULUS_SEED; + + static { + POTATO_SEED = new SeedType( + new ItemStack(Material.POTATO), + new SeedDrop(1, 20, 30, Biome.BIRCH_FOREST), + new SeedDrop(2, 20, 40, Biome.FOREST)//Deciduous Forest + ); + + ERGOT_FUNGI = new SeedType( + Vice.getItemManager().getItem("ergotfungi").getItem(), + new SeedDrop(3, 20, 30, Biome.JUNGLE), + new SeedDrop(4, 20, 40, Biome.ROOFED_FOREST),//Fantasy Forest + new SeedDrop(5, 20, 40, Biome.MUSHROOM_ISLAND),//Farmland + new SeedDrop(6, 20, 40, Biome.MUTATED_ROOFED_FOREST)//Forgotten Forest + ); + + COCA_SEED = new SeedType( + Vice.getItemManager().getItem("cocaseed").getItem(), + new SeedDrop(7, 20, 40, Biome.DEEP_OCEAN), + new SeedDrop(8, 20, 40, Biome.DESERT), + new SeedDrop(9, 20, 30, Biome.TAIGA),//Mega Spruce Taiga + new SeedDrop(10, 20, 30, Biome.MUTATED_TAIGA),//Mega Taiga + new SeedDrop(11, 20, 30, Biome.MUTATED_REDWOOD_TAIGA),//Mega Taiga + new SeedDrop(12, 20, 30, Biome.MESA) + ); + + MARIJUANA = new SeedType( + Vice.getItemManager().getItem("marijuanaseed").getItem(), + new SeedDrop(13, 20, 30, Biome.JUNGLE), + new SeedDrop(14, 20, 40, Biome.BIRCH_FOREST),//Snowy Pine + new SeedDrop(15, 20, 40, Biome.MUTATED_BIRCH_FOREST),//Snowy Pine + new SeedDrop(16, 20, 40, Biome.MUTATED_SWAMPLAND),//Swamp Edge + new SeedDrop(17, 20, 40, Biome.SWAMPLAND) + ); + + HUMULUS_SEED = new SeedType( + Vice.getItemManager().getItem("humulusseed").getItem(), + new SeedDrop(18, 20, 30, Biome.OCEAN), + new SeedDrop(19, 20, 30, Biome.BIRCH_FOREST),//Pine Forest + new SeedDrop(20, 20, 30, Biome.PLAINS), + new SeedDrop(21, 20, 40, Biome.RIVER), + new SeedDrop(22, 20, 40, Biome.SAVANNA) + ); + } + + private static SeedType[] values; + + private final ItemStack itemStack; + private final SeedDrop[] drops; + + public SeedType(ItemStack itemStack, SeedDrop... drops) { + this.itemStack = itemStack; + this.drops = drops; + } + + public ItemStack getItemStack() { + return itemStack; + } + + public SeedDrop[] getDrops() { + return drops; + } + + public static void init() { + values = new SeedType[] {POTATO_SEED, ERGOT_FUNGI, COCA_SEED, MARIJUANA, HUMULUS_SEED}; + } + + public static SeedType[] values() { + return values; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/categories/DrugCategory.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/categories/DrugCategory.java new file mode 100644 index 0000000..9f3ef46 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/categories/DrugCategory.java @@ -0,0 +1,37 @@ +package net.grandtheftmc.vice.drugs.categories; + +import net.grandtheftmc.vice.drugs.Drug; +import net.grandtheftmc.vice.drugs.categories.examples.*; + +import java.util.Arrays; +import java.util.Optional; + +/** + * Created by Remco on 25-3-2017. + */ +public enum DrugCategory { + + STIMULANTS(Stimulants.class), + INHALANTS(Inhalants.class), + CANNABINOIDS(Cannabinoids.class), + DEPRESSANTS(Depressants.class), + OPIOIDS(Opioids.class), + ANABOLIC_STEROIDS(AnabolicSteroids.class), + HALLUCINOGENS(Hallucinogens.class), + ALCOHOL(AAlcohol.class), + PRESCRIPTION_DRUGS(PrescriptionDrugs.class); + + private final Class<?>[] categories; + + DrugCategory(Class<?>... categories) { + this.categories = categories; + } + + public Class<?>[] getCategories() { + return categories; + } + + public static Optional<DrugCategory> byDrug(Drug drug){ + return Arrays.stream(values()).filter((categorie) -> Arrays.stream(categorie.categories).anyMatch((categoryClass) -> categoryClass.equals(drug.getClass().getSuperclass()))).findFirst(); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/categories/IDrugCategory.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/categories/IDrugCategory.java new file mode 100644 index 0000000..3f586dd --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/categories/IDrugCategory.java @@ -0,0 +1,20 @@ +package net.grandtheftmc.vice.drugs.categories; + +/** + * Created by Remco on 25-3-2017. + */ +public interface IDrugCategory { + + /** + * The name of the current Category, so we can define it somewhere. + * @return name + */ + String name(); + + /** + * The general description of the category of Drug. + * @return description + */ + String description(); + +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/categories/examples/AAlcohol.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/categories/examples/AAlcohol.java new file mode 100644 index 0000000..07727e1 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/categories/examples/AAlcohol.java @@ -0,0 +1,24 @@ +package net.grandtheftmc.vice.drugs.categories.examples; + +import net.grandtheftmc.vice.drugs.Drug; +import net.grandtheftmc.vice.drugs.categories.IDrugCategory; + +/** + * Created by Remco on 25-3-2017. + */ +public abstract class AAlcohol extends Drug implements IDrugCategory { + + protected AAlcohol(String name, int duration) { + super(name, duration); + } + + @Override + public String name() { + return "Alcohol"; + } + + @Override + public String description() { + return "Can make you feel very special. You won't be walking straight if you drink too much though."; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/categories/examples/AnabolicSteroids.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/categories/examples/AnabolicSteroids.java new file mode 100644 index 0000000..f0baccc --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/categories/examples/AnabolicSteroids.java @@ -0,0 +1,24 @@ +package net.grandtheftmc.vice.drugs.categories.examples; + +import net.grandtheftmc.vice.drugs.Drug; +import net.grandtheftmc.vice.drugs.categories.IDrugCategory; + +/** + * Created by Remco on 25-3-2017. + */ +public abstract class AnabolicSteroids extends Drug implements IDrugCategory { + + protected AnabolicSteroids(String name, int duration) { + super(name, duration); + } + + @Override + public String name() { + return "Anabolic Steroids"; + } + + @Override + public String description() { + return "Improves physical performance, enlarges muscles and increases strength."; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/categories/examples/Cannabinoids.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/categories/examples/Cannabinoids.java new file mode 100644 index 0000000..d1afe10 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/categories/examples/Cannabinoids.java @@ -0,0 +1,24 @@ +package net.grandtheftmc.vice.drugs.categories.examples; + +import net.grandtheftmc.vice.drugs.Drug; +import net.grandtheftmc.vice.drugs.categories.IDrugCategory; + +/** + * Created by Remco on 25-3-2017. + */ +public abstract class Cannabinoids extends Drug implements IDrugCategory { + + protected Cannabinoids(String name, int duration) { + super(name, duration); + } + + @Override + public String name() { + return "Cannabinoids"; + } + + @Override + public String description() { + return "Give you a feeling of euphoria. May cause confusion, memory problems, anxiety and a higher heart rate."; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/categories/examples/Depressants.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/categories/examples/Depressants.java new file mode 100644 index 0000000..1cad7c7 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/categories/examples/Depressants.java @@ -0,0 +1,24 @@ +package net.grandtheftmc.vice.drugs.categories.examples; + +import net.grandtheftmc.vice.drugs.Drug; +import net.grandtheftmc.vice.drugs.categories.IDrugCategory; + +/** + * Created by Remco on 25-3-2017. + */ +public abstract class Depressants extends Drug implements IDrugCategory { + + protected Depressants(String name, int duration) { + super(name, duration); + } + + @Override + public String name() { + return "Depressants"; + } + + @Override + public String description() { + return "Slows down activity in the central nervous system. They slow down the body and give you the feeling of relaxation."; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/categories/examples/Hallucinogens.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/categories/examples/Hallucinogens.java new file mode 100644 index 0000000..b861b4c --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/categories/examples/Hallucinogens.java @@ -0,0 +1,24 @@ +package net.grandtheftmc.vice.drugs.categories.examples; + +import net.grandtheftmc.vice.drugs.Drug; +import net.grandtheftmc.vice.drugs.categories.IDrugCategory; + +/** + * Created by Remco on 25-3-2017. + */ +public abstract class Hallucinogens extends Drug implements IDrugCategory { + + protected Hallucinogens(String name, int duration) { + super(name, duration); + } + + @Override + public String name() { + return "Hallucinogens"; + } + + @Override + public String description() { + return "Change the mind and cause the appearance of things that are not really there."; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/categories/examples/Inhalants.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/categories/examples/Inhalants.java new file mode 100644 index 0000000..b905d07 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/categories/examples/Inhalants.java @@ -0,0 +1,23 @@ +package net.grandtheftmc.vice.drugs.categories.examples; + +import net.grandtheftmc.vice.drugs.Drug; +import net.grandtheftmc.vice.drugs.categories.IDrugCategory; + +/** + * Created by Remco on 25-3-2017. + */ +public abstract class Inhalants extends Drug implements IDrugCategory{ + + protected Inhalants(String name, int duration) { + super(name, duration); + } + @Override + public String name() { + return "Inhalants"; + } + + @Override + public String description() { + return "Give you immediate results. These can have sudden mental damage."; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/categories/examples/Opioids.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/categories/examples/Opioids.java new file mode 100644 index 0000000..773762c --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/categories/examples/Opioids.java @@ -0,0 +1,24 @@ +package net.grandtheftmc.vice.drugs.categories.examples; + +import net.grandtheftmc.vice.drugs.Drug; +import net.grandtheftmc.vice.drugs.categories.IDrugCategory; + +/** + * Created by Remco on 25-3-2017. + */ +public abstract class Opioids extends Drug implements IDrugCategory { + + protected Opioids(String name, int duration) { + super(name, duration); + } + + @Override + public String name() { + return "Opioids"; + } + + @Override + public String description() { + return "Can cause drowsiness, confusion, nausea, feeligns of euphoria, respiratory complications and relieve pain."; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/categories/examples/PrescriptionDrugs.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/categories/examples/PrescriptionDrugs.java new file mode 100644 index 0000000..cdb4ea7 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/categories/examples/PrescriptionDrugs.java @@ -0,0 +1,24 @@ +package net.grandtheftmc.vice.drugs.categories.examples; + +import net.grandtheftmc.vice.drugs.Drug; +import net.grandtheftmc.vice.drugs.categories.IDrugCategory; + +/** + * Created by Remco on 25-3-2017. + */ +public abstract class PrescriptionDrugs extends Drug implements IDrugCategory { + + protected PrescriptionDrugs(String name, int duration) { + super(name, duration); + } + + @Override + public String name() { + return "Prescription Drugs"; + } + + @Override + public String description() { + return "Can be very helpful (if used wisely). Can be very dangerous."; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/categories/examples/Stimulants.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/categories/examples/Stimulants.java new file mode 100644 index 0000000..2c5e4cf --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/categories/examples/Stimulants.java @@ -0,0 +1,25 @@ +package net.grandtheftmc.vice.drugs.categories.examples; + +import net.grandtheftmc.vice.drugs.Drug; +import net.grandtheftmc.vice.drugs.categories.IDrugCategory; + +/** + * Created by Remco on 25-3-2017. + */ +public abstract class Stimulants extends Drug implements IDrugCategory { + + protected Stimulants(String name, int duration) { + super(name, duration); + } + + @Override + public String name() { + return "Stimulants"; + } + + @Override + public String description() { + return "Speeds up your nevous system and make you feel very alive. Also known as \"uppers\" because of their ability to make you feel very awake."; + } + +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/events/DrugUseEvent.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/events/DrugUseEvent.java new file mode 100644 index 0000000..533b6aa --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/events/DrugUseEvent.java @@ -0,0 +1,52 @@ +package net.grandtheftmc.vice.drugs.events; + +import net.grandtheftmc.vice.drugs.Drug; +import org.bukkit.entity.Player; +import org.bukkit.event.Cancellable; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +/** + * Created by Remco on 25-3-2017. + */ +public class DrugUseEvent extends Event implements Cancellable { + + private final static HandlerList handlers = new HandlerList(); + + private boolean cancelled; + private final Player user; + private final Drug drug; + + public DrugUseEvent(Player user, Drug drug) { + this.user = user; + this.drug = drug; + this.cancelled = false; + } + + @Override + public boolean isCancelled() { + return cancelled; + } + + @Override + public void setCancelled(boolean b) { + this.cancelled = b; + } + + @Override + public HandlerList getHandlers() { + return handlers; + } + + public static HandlerList getHandlerList(){ + return handlers; + } + + public Player getUser() { + return user; + } + + public Drug getDrug() { + return drug; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/events/listener/DrugListener.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/events/listener/DrugListener.java new file mode 100644 index 0000000..34e66fd --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/events/listener/DrugListener.java @@ -0,0 +1,99 @@ +package net.grandtheftmc.vice.drugs.events.listener; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.drugs.Drug; +import net.grandtheftmc.vice.drugs.DrugService; +import net.grandtheftmc.vice.drugs.events.DrugUseEvent; +import net.grandtheftmc.vice.drugs.example.Alcohol; +import net.grandtheftmc.vice.drugs.example.Heroin; +import net.grandtheftmc.vice.drugs.example.Weed; +import net.grandtheftmc.vice.drugs.items.DrugItem; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.ItemStack; + +import java.util.Optional; + +public class DrugListener implements Listener { + + @EventHandler + public void onEat(PlayerInteractEvent event) { + Player player = event.getPlayer(); + ItemStack is = event.getItem(); + if (event.getAction() == Action.RIGHT_CLICK_AIR || event.getAction() == Action.RIGHT_CLICK_BLOCK) { + if (is != null && is.getItemMeta() != null) { + DrugItem item = DrugItem.getByItemStack(is); + DrugService drugService = (DrugService) Vice.getInstance().getDrugManager().getService(); + if (item != null) { + if (drugService.getDrugs().stream().anyMatch(item::isValid)) { + Drug drug = drugService.getDrug(item); + if (drug != null && !(drug instanceof Weed)) { + if (drug.apply(player)) { + if (event.getItem().getAmount() > 1) { + player.getInventory().getItemInMainHand().setAmount(event.getItem().getAmount() - 1); + } else { + player.getInventory().setItemInMainHand(null); + } + event.setCancelled(true); + } + } + } + } else { + if(Vice.getItemManager().getItem("vodka") != null) { + if (is.isSimilar(Vice.getItemManager().getItem("vodka").getItem())) { + Optional<Drug> alcohol = ((DrugService) Vice.getInstance().getDrugManager().getService()).getDrug("alcohol"); + if (alcohol.isPresent()) { + ((Alcohol) alcohol.get()).potentApply(player, true); + if (event.getItem().getAmount() > 1) { + player.getInventory().getItemInMainHand().setAmount(event.getItem().getAmount() - 1); + } else { + player.getInventory().setItemInMainHand(null); + } + event.setCancelled(true); + } + } + } + } + } + } + } + + @EventHandler + public void onHit(EntityDamageByEntityEvent event) { + if (event.getDamager() instanceof Player && event.getEntity() instanceof Player) { + Player damager = (Player) event.getDamager(); + Player hurt = (Player) event.getEntity(); + ItemStack itemStack = damager.getInventory().getItemInMainHand(); + if (itemStack != null && itemStack.getItemMeta() != null) { + DrugItem item = DrugItem.getByItemStack(itemStack); + DrugService drugService = (DrugService) Vice.getInstance().getDrugManager().getService(); + if (item != null) { + if (drugService.getDrugs().stream().anyMatch(item::isValid)) { + Drug drug = drugService.getDrug(item); + if (drug instanceof Heroin) { + hurt.damage(6); + drug.apply(hurt); + hurt.sendMessage(Lang.DRUGS.f("&7You have been drugged.")); + } + } + } + } + } + } + + @EventHandler + protected final void onDrugUse(DrugUseEvent event) { + if(event.getUser() == null || event.getDrug() == null) return; + if(event.getUser().getLocation().getWorld().getName().equalsIgnoreCase("spawn")) { + if(event.getDrug() instanceof Alcohol) { + event.setCancelled(true); + event.getUser().updateInventory(); + } + } + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/events/listener/DrugPlacementListener.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/events/listener/DrugPlacementListener.java new file mode 100644 index 0000000..a4fc8d0 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/events/listener/DrugPlacementListener.java @@ -0,0 +1,129 @@ +package net.grandtheftmc.vice.drugs.events.listener; + +import org.bukkit.event.Listener; + +public class DrugPlacementListener implements Listener { + + /*@EventHandler + public void onInteract(PlayerInteractEvent event) { + if (event.getClickedBlock() == null) return; + Player player = event.getPlayer(); + if (Objects.equals(player.getWorld().getName(), "spawn")) return; + Block block = event.getClickedBlock(); + Location blockLocation = block.getLocation(); + ItemStack hand = player.getInventory().getItemInMainHand(); + if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { + if (block.getType() == Material.BREWING_STAND) { + event.setCancelled(true); + LockedBlocks lockedBlocks = Vice.getDrugManager().getLockedBlocks(); + if (DrugCommand.addingBlocks.contains(player.getName())) { + if (lockedBlocks.getLocations().contains(block.getLocation())) { + player.sendMessage(Lang.DRUGS.f("&cBlock is no longer locked.")); + lockedBlocks.getLocations().remove(block.getLocation()); + } else { + player.sendMessage(Lang.DRUGS.f("&aBlock is now locked!")); + lockedBlocks.getLocations().add(block.getLocation()); + } + return; + } + if (player.isSneaking()) { + if (lockedBlocks.getLocations().contains(block.getLocation())) { + player.sendMessage(Lang.DRUGS.f("&7This Bong cannot be removed.")); + return; + } + + block.getWorld().dropItemNaturally(blockLocation, getBongItem()); + block.setType(Material.AIR); + player.playSound(blockLocation, Sound.BLOCK_GLASS_BREAK, 3.0F, 3.0F); + } else { + if (hand.getType() == getWeedItem().getType()) { + Optional<Drug> weed = ((DrugService) Vice.getDrugManager().getService()).getDrug("weed"); + if (weed.isPresent()) { + weed.get().apply(player); + if (hand.getAmount() > 1) { + hand.setAmount(hand.getAmount() - 1); + } else { + player.getInventory().remove(hand); + } + } else { + player.sendMessage(Lang.DRUGS + "" + ChatColor.RED + "Something went wrong internally, please tell a staff member."); + Vice.getInstance().getLogger().log(Level.SEVERE, "Unable to find weed drug (DrugPlacementListener)"); + } + } else { + player.sendMessage(Lang.DRUGS.f("&7Put some &2&lWeed &7in here to start smoking!")); + } + } + } else if (block.getType() == getCocaineBlock().getType() && block.getData() == getCocaineBlock().getData().getData()) { + event.setCancelled(true); + if (player.isSneaking()) { + + block.getWorld().dropItemNaturally(blockLocation, getCocaineBlock()); + block.setType(Material.AIR); + player.playSound(blockLocation, Sound.BLOCK_GLASS_BREAK, 3.0F, 3.0F); + } else { + block.setType(Material.AIR); + player.playSound(blockLocation, Sound.ENTITY_CAT_HISS, 1, 1); + Optional<Drug> cocaine = ((DrugService) Vice.getDrugManager().getService()).getDrug("cocaine"); + if (cocaine.isPresent()) { + cocaine.get().apply(player); + } else { + player.sendMessage(Lang.DRUGS.f("&7Unable to locate drug cocaine, report this bug to a staff member.")); + } + } + } else { + Block target = block.getWorld().getBlockAt(blockLocation.getBlockX(), + blockLocation.getBlockY() + 1, + blockLocation.getBlockZ()); + /*if (hand.getType() == getBongItem().getType() + && hand.getData().getData() == getBongItem().getData().getData()) { + if (target.getType() == Material.AIR) { + + target.setType(Material.BREWING_STAND); + if (hand.getAmount() > 1) { + hand.setAmount(hand.getAmount() - 1); + } else { + player.getInventory().remove(hand); + } + player.updateInventory(); + player.playSound(target.getLocation(), Sound.BLOCK_GLASS_PLACE, 3.0F, 3.0F); + } else if (target.getType() != Material.BREWING_STAND) { + player.sendMessage(Lang.VICE.f("&7Bong cannot be placed here!")); + } + } else if (hand.getType() == getCocaineItem().getType() + && hand.getData().getData() == getCocaineItem().getData().getData()) { + if (target.getType() == Material.AIR) { + + target.setType(getCocaineBlock().getType()); + target.setData(getCocaineBlock().getData().getData()); + if (hand.getAmount() > 1) { + hand.setAmount(hand.getAmount() - 1); + } else { + player.getInventory().remove(hand); + } + player.updateInventory(); + player.playSound(target.getLocation(), Sound.BLOCK_GLASS_PLACE, 3.0F, 3.0F); + } else if (target.getType() != getCocaineBlock().getType()) { + player.sendMessage(Lang.VICE.f("&7Bong cannot be placed here!")); + } + } + } +} + + } + + public ItemStack getWeedItem() { + return Vice.getItemManager().getItem("weed").getItem(); + } + + public ItemStack getBongItem() { + return Vice.getItemManager().getItem("bong").getItem(); + } + + public ItemStack getCocaineItem() { + return Vice.getItemManager().getItem("cocaine").getItem(); + } + + public ItemStack getCocaineBlock() { + return Vice.getItemManager().getItem("cocaineblock").getItem(); + }*/ +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/example/Alcohol.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/example/Alcohol.java new file mode 100644 index 0000000..5378a4b --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/example/Alcohol.java @@ -0,0 +1,94 @@ +package net.grandtheftmc.vice.drugs.example; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.drugs.DrugEffect; +import net.grandtheftmc.vice.drugs.DrugService; +import net.grandtheftmc.vice.drugs.categories.examples.AAlcohol; +import net.grandtheftmc.vice.drugs.events.DrugUseEvent; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.entity.Item; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; +import org.bukkit.util.Vector; + +import java.util.*; +import java.util.concurrent.ThreadLocalRandom; + +/** + * Created by Remco on 25-3-2017. + */ +public class Alcohol extends AAlcohol { + private final HashMap<UUID, List<Long>> drinkTimes = new HashMap<>(); + private static final int NEEDED_RATE = 3;//per X + private static final int TIMEFRAME = 300;//seconds + + public Alcohol() { + super("alcohol", 60); + } + + public boolean potentApply(Player p, boolean vodka) { + boolean[] failed = {false}; + UUID uuid = p.getUniqueId(); + DrugEffect effect = (drug, duration, player) -> { + final DrugService service = (DrugService) Vice.getInstance().getDrugManager().getService(); + player.playSound(player.getLocation(), Sound.ENTITY_PLAYER_BURP, 1, 1); + int effectDuration = (int) Math.round(duration + (duration * ThreadLocalRandom.current().nextDouble(-.25, .25))) * 20; //to make it +/-5-25% + Bukkit.getPluginManager().callEvent(new DrugUseEvent(player, this)); + if (isPlayerDrunk(uuid)) { + ItemStack item = player.getInventory().getItemInMainHand(); + if (item != null) + if (item.getAmount() > 1) { + player.getInventory().getItemInMainHand().setAmount(item.getAmount() - 1); + } else { + player.getInventory().setItemInMainHand(null); + } + for (ItemStack is : player.getInventory().getStorageContents()) { + if (is != null && is.getType() != Material.CHEST && is.getType() != Material.WATCH) { + Item drop = player.getWorld().dropItemNaturally(player.getLocation().add(ThreadLocalRandom.current().nextDouble(-1, 1), 1, ThreadLocalRandom.current().nextDouble(-1, 1)), is); + Vector velocity = player.getEyeLocation().getDirection().normalize(); + velocity.multiply(1.01); + drop.setVelocity(velocity); + player.getInventory().remove(is); + } + } + player.sendMessage(Lang.DRUGS.f("&2&oYou dont feel so good...")); + } + + Vice.getInstance().getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.SLOW, effectDuration, 2 + (vodka ? 1 : 0)))); + Vice.getInstance().getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.CONFUSION, effectDuration, 0))); + Vice.getInstance().getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.DAMAGE_RESISTANCE, effectDuration, 1 + (vodka ? 1 : 1)))); + Vice.getInstance().getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.INCREASE_DAMAGE, effectDuration, 1 + (vodka ? 1 : 2)))); + }; + effect.apply(this, this.getDuration(), p); + return !failed[0]; + } + + @Override + public boolean apply(Player p) { + return potentApply(p, false); + } + + private boolean isPlayerDrunk(UUID uuid) { + if (drinkTimes.containsKey(uuid)) { + List<Long> tempTimes = new ArrayList<>(); + ArrayList<Long> times = new ArrayList<>(drinkTimes.get(uuid)); + times.add(System.currentTimeMillis()); + times.forEach(l -> { + if ((l + (TIMEFRAME * 1000)) <= System.currentTimeMillis()) { + tempTimes.add(l); + } + }); + + times.removeAll(tempTimes); + drinkTimes.put(uuid, times); + return times.size() >= NEEDED_RATE; + } + drinkTimes.put(uuid, Arrays.asList(System.currentTimeMillis())); + return false; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/example/Cocaine.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/example/Cocaine.java new file mode 100644 index 0000000..1889425 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/example/Cocaine.java @@ -0,0 +1,119 @@ +package net.grandtheftmc.vice.drugs.example; + +import de.slikey.effectlib.effect.TurnEffect; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.drugs.DrugEffect; +import net.grandtheftmc.vice.drugs.DrugUtil; +import net.grandtheftmc.vice.drugs.categories.examples.Stimulants; +import net.grandtheftmc.vice.drugs.events.DrugUseEvent; +import net.grandtheftmc.vice.utils.TitleBuilder; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; +import org.bukkit.scheduler.BukkitRunnable; + +import java.util.HashSet; +import java.util.UUID; +import java.util.concurrent.ThreadLocalRandom; + +public class Cocaine extends Stimulants { + HashSet<UUID> unmoveable = new HashSet<>(); + + public Cocaine() { + super("cocaine", 120); + } + + @Override + public boolean apply(Player p) { + boolean[] failed = {false}; + UUID uuid = p.getUniqueId(); + DrugEffect effect = (drug, duration, player) -> { + player.playSound(player.getLocation(), Sound.ENTITY_CAT_HISS, 1, 1); + int effectDuration = (int) Math.round(duration + (duration * ThreadLocalRandom.current().nextDouble(-.25, .25))) * 20; //to make it +/-5-25% + + Bukkit.getPluginManager().callEvent(new DrugUseEvent(player, this)); + int roll = ThreadLocalRandom.current().nextInt(100); + + if (roll > 5 || Vice.getDrugManager().inOD(player.getUniqueId())) { + Vice.getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.SPEED, effectDuration / 2, 1))); + Vice.getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.FAST_DIGGING, effectDuration, 0))); + Vice.getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.INCREASE_DAMAGE, effectDuration, 1))); + } else { + Vice.getDrugManager().addOD(player.getUniqueId()); + Vice.getUserManager().getLoadedUser(player.getUniqueId()).setLastTag(System.currentTimeMillis()); + stageOne(player, System.currentTimeMillis()); + } + }; + effect.apply(this, this.getDuration(), p); + return !failed[0]; + } + + public boolean cantMove(UUID uuid) { + return unmoveable.contains(uuid); + } + + public void stageOne(Player player, long addTime){ + int speedLength = ThreadLocalRandom.current().nextInt(100, 200); + Vice.getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.SPEED, speedLength, 20))); + new BukkitRunnable() { + @Override + public void run() { + if (!Vice.getDrugManager().getEffectManager().canRecieveOngoingEffect(player, addTime)) + return; + stageTwo(player, addTime); + } + }.runTaskLater(Vice.getInstance(), speedLength); + } + + public void stageTwo(Player player, long addTime){ + player.setPlayerTime(18000, false); + unmoveable.add(player.getUniqueId()); + TurnEffect turnEffect = new TurnEffect(Vice.getEffectLib()); + turnEffect.setEntity(player); + turnEffect.infinite(); + turnEffect.period = 2; + turnEffect.start(); + int stageLength = ThreadLocalRandom.current().nextInt(10, 16); + long endTime = System.currentTimeMillis() + (stageLength*1000); + player.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, stageLength*20, 0)); + new BukkitRunnable() { + boolean flip = false; + @Override + public void run() { + if (System.currentTimeMillis() >= endTime || !Vice.getDrugManager().getEffectManager().canRecieveOngoingEffect(player, addTime)) { + turnEffect.cancel(); + cancel(); + return; + } + if(flip){ + player.playSound(player.getLocation(), DrugUtil.getRandomParanoiaSound(), 1, 1); + } + flip = !flip; + new TitleBuilder().setTitleText(ChatColor.RED + "" + ChatColor.MAGIC + "asd" + ChatColor.RED + DrugUtil.getParanoiaMessage() + "" + ChatColor.MAGIC + "asd").setFadeIn(0).setDuration(10).setFadeOut(0).send(player); + } + }.runTaskTimer(Vice.getInstance(), 0, 15); + + new BukkitRunnable() { + @Override + public void run() { + dispose(player); + if (Vice.getDrugManager().getEffectManager().canRecieveOngoingEffect(player, addTime)) { + stageThree(player); + return; + }} + }.runTaskLater(Vice.getInstance(), stageLength*20); + + } + + public void stageThree(Player player){ + Vice.getDrugManager().getEffectManager().addEffect(player, new PotionEffect(PotionEffectType.SLOW, 20 * 5, 2)); + } + + public void dispose(Player player) { + unmoveable.remove(player.getUniqueId()); + player.resetPlayerTime(); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/example/Heroin.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/example/Heroin.java new file mode 100644 index 0000000..26a660c --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/example/Heroin.java @@ -0,0 +1,78 @@ +package net.grandtheftmc.vice.drugs.example; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.drugs.DrugEffect; +import net.grandtheftmc.vice.drugs.categories.examples.Opioids; +import net.grandtheftmc.vice.drugs.events.DrugUseEvent; +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; +import org.bukkit.scheduler.BukkitRunnable; + +import java.util.UUID; +import java.util.concurrent.ThreadLocalRandom; + +public class Heroin extends Opioids{ + + public Heroin() { + super("heroin", 15); + } + + @Override + public boolean apply(Player p) { + boolean[] failed = {false}; + UUID uuid = p.getUniqueId(); + DrugEffect effect = (drug, duration, player) -> { + int roll = ThreadLocalRandom.current().nextInt(100); + int effectDuration = (int) Math.round(duration + (duration * ThreadLocalRandom.current().nextDouble(-.25, .25))) * 20; //to make it +/-5-25% + + Bukkit.getPluginManager().callEvent(new DrugUseEvent(player, this)); + player.playSound(player.getLocation(), Sound.ENTITY_SILVERFISH_AMBIENT, 1, 1); + final long addTime = System.currentTimeMillis(); + if (roll > 6 || (Vice.getDrugManager().inOD(player.getUniqueId()))) { + Vice.getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.SPEED, effectDuration, 1))); + Vice.getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.INCREASE_DAMAGE, effectDuration, 0))); + Vice.getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.FIRE_RESISTANCE, effectDuration, 1))); + + new BukkitRunnable() { + @Override + public void run() { + if (!Vice.getDrugManager().getEffectManager().canRecieveOngoingEffect(player, addTime)) { + cancel(); + return; + } + if (ThreadLocalRandom.current().nextInt(4) == 0) { + Vice.getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.WEAKNESS, Integer.MAX_VALUE, 0))); + player.sendMessage(Lang.DRUGS.f("&7&oWhy does everything feel so heavy all of a sudden?")); + } + } + }.runTaskLater(Vice.getInstance(), effectDuration); + } else { + Vice.getDrugManager().addOD(player.getUniqueId()); + Vice.getUserManager().getLoadedUser(player.getUniqueId()).setLastTag(System.currentTimeMillis()); + player.sendMessage(Lang.DRUGS.f("&7&oThis doesn't feel right...")); + Vice.getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.WITHER, 5 * 20, 1))); + Vice.getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.BLINDNESS, 5 * 20, 0))); + Vice.getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.SLOW, 5 * 20, 0))); + new BukkitRunnable() { + @Override + public void run() { + Vice.getDrugManager().removeOD(player.getUniqueId()); + if (ThreadLocalRandom.current().nextBoolean() && Vice.getDrugManager().getEffectManager().canRecieveOngoingEffect(player, addTime)) { + player.getActivePotionEffects().forEach(effect -> { + player.removePotionEffect(effect.getType()); + }); + player.damage(player.getHealth()); + player.sendMessage(Lang.DRUGS.f("&7&oIm never doing heroin again...")); + } + } + }.runTaskLater(Vice.getInstance(), 5 * 20); + } + }; + effect.apply(this, this.getDuration(), p); + return !failed[0]; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/example/Joint.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/example/Joint.java new file mode 100644 index 0000000..eaa119a --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/example/Joint.java @@ -0,0 +1,94 @@ +package net.grandtheftmc.vice.drugs.example; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.drugs.DrugEffect; +import net.grandtheftmc.vice.drugs.DrugService; +import net.grandtheftmc.vice.drugs.DrugUtil; +import net.grandtheftmc.vice.drugs.categories.examples.Cannabinoids; +import net.grandtheftmc.vice.drugs.events.DrugUseEvent; +import org.bukkit.Bukkit; +import org.bukkit.Particle; +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; +import org.bukkit.scheduler.BukkitRunnable; + +import java.util.Set; +import java.util.UUID; +import java.util.concurrent.ThreadLocalRandom; +import java.util.stream.Collectors; + +public class Joint extends Cannabinoids { + + public Joint() { + super("joint", 120); + } + + @Override + public boolean apply(Player p) { + boolean[] failed = {false}; + UUID uuid = p.getUniqueId(); + DrugEffect effect = (drug, duration, player) -> { + final DrugService service = (DrugService) Vice.getInstance().getDrugManager().getService(); + int effectDuration = (int) Math.round(duration + (duration * ThreadLocalRandom.current().nextDouble(-.25, .25))) * 20; //to make it +/-5-25% + player.playSound(player.getLocation(), Sound.ENTITY_TNT_PRIMED, 1, 1); + Bukkit.getPluginManager().callEvent(new DrugUseEvent(player, this)); + final long addTime = System.currentTimeMillis(); + int roll = ThreadLocalRandom.current().nextInt(100); + + if (roll > 4 || Vice.getInstance().getDrugManager().inOD(player.getUniqueId())) { + Vice.getInstance().getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.SLOW, effectDuration, 1))); + Vice.getInstance().getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.SLOW_DIGGING, effectDuration, 0))); + new BukkitRunnable() { + @Override + public void run() { + if (!Vice.getInstance().getDrugManager().getEffectManager().canRecieveOngoingEffect(player, addTime)) + return; + Vice.getInstance().getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.HUNGER, effectDuration, 1))); + player.sendMessage(Lang.DRUGS.f("&7&oDamn I could go for some McDonalds right now...")); + + } + }.runTaskLaterAsynchronously(Vice.getInstance(), 20 * 60 * 2); + final long startTime = System.currentTimeMillis(); + final Set<Player> nearby = player.getNearbyEntities(10, 10, 10).stream().filter(entity -> entity instanceof Player).map(entity -> (Player) entity).collect(Collectors.toSet()); + + new BukkitRunnable() { + @Override + public void run() { + if (startTime + (1000 * 2) <= System.currentTimeMillis()) cancel(); + for (int i = 0; i < 5; i++) { + double locX = player.getEyeLocation().getX() + (ThreadLocalRandom.current().nextDouble(0, 1) * (ThreadLocalRandom.current().nextBoolean() ? 1 : -1)); + double locZ = player.getEyeLocation().getZ() + (ThreadLocalRandom.current().nextDouble(0, 1) * (ThreadLocalRandom.current().nextBoolean() ? 1 : -1)); + double locY = player.getLocation().getY() + ThreadLocalRandom.current().nextDouble(1, 1.2); + nearby.forEach(p -> { + p.spawnParticle(Particle.FLAME, locX, locY, locZ, 1); + p.spawnParticle(Particle.SMOKE_NORMAL, locX, locY, locZ, 1); + }); + } + } + }.runTaskTimerAsynchronously(Vice.getInstance(), 0, 12); + } else { + Vice.getInstance().getDrugManager().addOD(player.getUniqueId()); + Vice.getUserManager().getLoadedUser(player.getUniqueId()).setLastTag(System.currentTimeMillis()); + Vice.getInstance().getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.BLINDNESS, effectDuration, 0))); + player.playSound(player.getLocation(), Sound.ENTITY_LIGHTNING_THUNDER, 10, 1); + final long endTime = System.currentTimeMillis() + (effectDuration / 20 * 1000); + new BukkitRunnable() { + @Override + public void run() { + if (System.currentTimeMillis() >= endTime || !Vice.getInstance().getDrugManager().getEffectManager().canRecieveOngoingEffect(player, addTime)) { + Vice.getInstance().getDrugManager().removeOD(player.getUniqueId()); + cancel(); + } + player.playSound(player.getLocation(), DrugUtil.getRandomParanoiaSound(), 10, ThreadLocalRandom.current().nextFloat() * 2); + } + }.runTaskTimerAsynchronously(Vice.getInstance(), 5, 15); + player.sendMessage(Lang.DRUGS.f("&7&oUghhh... That must've been a bad batch of K2...")); + } + }; + effect.apply(this, this.getDuration(), p); + return !failed[0]; + } +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/example/LSD.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/example/LSD.java new file mode 100644 index 0000000..b3377ed --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/example/LSD.java @@ -0,0 +1,187 @@ +package net.grandtheftmc.vice.drugs.example; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.drugs.DrugEffect; +import net.grandtheftmc.vice.drugs.DrugUtil; +import net.grandtheftmc.vice.drugs.categories.examples.Hallucinogens; +import net.grandtheftmc.vice.drugs.events.DrugUseEvent; +import org.bukkit.*; +import org.bukkit.block.Block; +import org.bukkit.entity.Player; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; +import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.scheduler.BukkitScheduler; + +import java.util.*; +import java.util.concurrent.ThreadLocalRandom; + +public class LSD extends Hallucinogens { + + private final Hashtable<UUID, HashSet<Location>> changedBlocks = new Hashtable<>(); + private final HashMap<UUID, Long> cooldown = new HashMap<>(); + private int task; + + public LSD() { + super("LSD",30); + } + + @Override + public boolean apply(Player p) { + boolean[] failed = {false}; + UUID uuid = p.getUniqueId(); + final long addTime = System.currentTimeMillis(); + final int stageDuration = getDuration() + (int)Math.round(getDuration()*ThreadLocalRandom.current().nextDouble(-.25, .25)); + + DrugEffect effect = (drug, duration, player) -> { + if (checkCooldown(uuid)) { + Bukkit.getPluginManager().callEvent(new DrugUseEvent(player, this)); + if (ThreadLocalRandom.current().nextInt(0, 100) <= 4 && !Vice.getInstance().getDrugManager().inOD(player.getUniqueId())) { + Vice.getUserManager().getLoadedUser(player.getUniqueId()).setLastTag(System.currentTimeMillis()); + Vice.getInstance().getDrugManager().addOD(player.getUniqueId()); + badTrip(player, addTime, duration); + return; + } + stageOne(player, addTime, stageDuration); + } else { + player.sendMessage(Lang.DRUGS.f("&7Hey man, I don't think that you should use it so soon, wait a while bro.")); + } + }; + effect.apply(this, this.getDuration(), p); + return !failed[0]; + } + + private void stageOne(Player player, long addTime, int length) { + if(player.isValid()) { + player.playSound(player.getLocation(), Sound.ENTITY_GENERIC_EAT, 1, 1); + Vice.getInstance().getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.SLOW, length*2*20, 2))); + Vice.getInstance().getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.CONFUSION, length*2*20, 1))); + Vice.getInstance().getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.REGENERATION, length*2*20, 1))); + Vice.getInstance().getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.DAMAGE_RESISTANCE, length*2*20, 1))); + player.setPlayerTime(18000, false); + new BukkitRunnable(){ + @Override + public void run() { + if(!Vice.getInstance().getDrugManager().getEffectManager().canRecieveOngoingEffect(player, addTime)) + return; + stageTwo(player, addTime, length); + } + }.runTaskLater(Vice.getInstance(), length*20); + } + } + + private void stageTwo(Player player, long addTime, int length) { + if(player.isValid()) { + player.removePotionEffect(PotionEffectType.SLOW); + player.removePotionEffect(PotionEffectType.CONFUSION); + Vice.getInstance().getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.SLOW_DIGGING, length*2*20, 1))); + final long endTime = System.currentTimeMillis() + (length*1000) + 10000; + BukkitScheduler scheduler = Vice.getInstance().getServer().getScheduler(); + scheduler.scheduleAsyncRepeatingTask(Vice.getInstance(), new Runnable() { + + @Override + public void run() { + if (System.currentTimeMillis()>=endTime || !Vice.getInstance().getDrugManager().getEffectManager().canRecieveOngoingEffect(player, addTime)) { + scheduler.cancelTask(task); + player.resetPlayerTime(); + return; + } + player.playSound(player.getLocation(), DrugUtil.getRandomAmbientSound(), 3.0F, 1.0F); + } + }, 0, 20L); + new BukkitRunnable(){ + @Override + public void run() { + if(!Vice.getInstance().getDrugManager().getEffectManager().canRecieveOngoingEffect(player, addTime)) + return; + stageThree(player, addTime, length); + } + }.runTaskLater(Vice.getInstance(), length*20); + } + } + + private void stageThree(Player player, long addTime, int length) { + final double stopTime = System.currentTimeMillis() + (length*1000); + new BukkitRunnable() { + @Override + public void run() { + if (System.currentTimeMillis()>=stopTime|| !Vice.getInstance().getDrugManager().getEffectManager().canRecieveOngoingEffect(player, addTime)) { + if(player.isOnline() && changedBlocks.containsKey(player.getUniqueId())){ + changedBlocks.get(player.getUniqueId()).forEach(block -> { + player.sendBlockChange(block, block.getWorld().getBlockAt(block).getType(), block.getWorld().getBlockAt(block).getData()); + }); + } + changedBlocks.remove(player.getUniqueId()); + cancel(); + return; + } + + HashSet<Location> blocks = changedBlocks.containsKey(player.getUniqueId()) ? changedBlocks.get(player.getUniqueId()) : new HashSet<>(); + Collection<Block> nearbyBlocks = DrugUtil.getNearbyBlocks(player.getLocation(), 10); + + nearbyBlocks.forEach(block -> { + if(!blocks.contains(block.getLocation())){ + blocks.add(block.getLocation()); + } + player.sendBlockChange(block.getLocation(), Material.WOOL, (byte)ThreadLocalRandom.current().nextInt(0, 15)); + }); + changedBlocks.put(player.getUniqueId(), blocks); + } + }.runTaskTimer(Vice.getInstance(), 0, 20); + new BukkitRunnable(){ + @Override + public void run() { + if(!Vice.getInstance().getDrugManager().getEffectManager().canRecieveOngoingEffect(player, addTime)) + return; + stageFive(player, addTime, length); + } + }.runTaskLater(Vice.getInstance(), length*20); + } + + private void stageFive(Player player, long addTime, int length) { + if(Vice.getInstance().getDrugManager().getEffectManager().canRecieveOngoingEffect(player, addTime)) { + Vice.getInstance().getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.CONFUSION, length*20*2, 2))); + Vice.getInstance().getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.WEAKNESS, length*20*2, 1))); + } + + } + + public void badTrip(Player player, long addTime, int length) { + if(Vice.getInstance().getDrugManager().getEffectManager().canRecieveOngoingEffect(player, addTime)) { + Vice.getInstance().getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.CONFUSION, length*4, 2))); + Vice.getInstance().getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.WEAKNESS, length*4, 1))); + Vice.getInstance().getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.SLOW, length*4, 2))); + BukkitScheduler scheduler = Vice.getInstance().getServer().getScheduler(); + task = scheduler.scheduleAsyncRepeatingTask(Vice.getInstance(), new Runnable() { + int count = 0; + + @Override + public void run() { + count += 1; + if (count >= 70 || !Vice.getInstance().getDrugManager().getEffectManager().canRecieveOngoingEffect(player, addTime)) { + scheduler.cancelTask(task); + Vice.getInstance().getDrugManager().removeOD(player.getUniqueId()); + return; + } + player.playSound(player.getLocation(), DrugUtil.getRandomParanoiaSound(), 3.0F, 1.0F); + player.playSound(player.getLocation(), DrugUtil.getRandomAmbientSound(), 3.0F, 1.0F); + player.playEffect(EntityEffect.WITCH_MAGIC); + player.playEffect(EntityEffect.ZOMBIE_TRANSFORM); + } + }, 10L, 20L); + } + } + + private boolean checkCooldown(UUID uuid){ + if(cooldown.containsKey(uuid)){ + if(System.currentTimeMillis()>=(cooldown.get(uuid)+(60*15*1000))){//cooldown has expired + cooldown.put(uuid, System.currentTimeMillis()); + return true; + } + return false; + } + cooldown.put(uuid, System.currentTimeMillis()); + return true; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/example/MDMA.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/example/MDMA.java new file mode 100644 index 0000000..27447f7 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/example/MDMA.java @@ -0,0 +1,92 @@ +package net.grandtheftmc.vice.drugs.example; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.drugs.DrugEffect; +import net.grandtheftmc.vice.drugs.categories.examples.Hallucinogens; +import net.grandtheftmc.vice.drugs.events.DrugUseEvent; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Particle; +import org.bukkit.entity.Player; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; +import org.bukkit.scheduler.BukkitRunnable; + +import java.util.ArrayList; +import java.util.Set; +import java.util.UUID; +import java.util.concurrent.ThreadLocalRandom; +import java.util.stream.Collectors; + +public class MDMA extends Hallucinogens { + + public MDMA() { + super("mdma", 120); + } + + private ArrayList<UUID> using = new ArrayList<>(); + + @Override + public boolean apply(Player p) { + boolean[] failed = {false}; + UUID uuid = p.getUniqueId(); + DrugEffect effect = (drug, duration, player) -> { + if (this.using.contains(player.getUniqueId())) { + failed[0] = true; + player.sendMessage(Lang.DRUGS + "" + ChatColor.RED + "I don't think its a good idea to do more than one..."); + return; + } + this.using.add(player.getUniqueId()); + int roll = ThreadLocalRandom.current().nextInt(100); + int effectDuration = (int) Math.round(duration + (duration * ThreadLocalRandom.current().nextDouble(-.25, .25))) * 20;//to make it +/-5-25% + Bukkit.getPluginManager().callEvent(new DrugUseEvent(player, this)); + + if (roll > 4 || !Vice.getDrugManager().inOD(player.getUniqueId())) { + final long addTime = System.currentTimeMillis(); + Vice.getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.SLOW, effectDuration, 0))); + //less anxiety? Or I might have to fool around with .setWalkSpeed etc + Vice.getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.CONFUSION, effectDuration, 0))); + final Set<Player> nearby = player.getNearbyEntities(10, 10, 10).stream().filter(entity -> entity instanceof Player).map(entity -> (Player) entity).collect(Collectors.toSet()); + nearby.add(player); + + new BukkitRunnable() { + @Override + public void run() { + if (System.currentTimeMillis() >= (addTime + effectDuration / 20 * 1000) || !Vice.getDrugManager().getEffectManager().canRecieveOngoingEffect(player, addTime)) { + cancel(); + using.remove(player.getUniqueId()); + return; + } + for (int i = 0; i < 5; i++) {//hopefully blinds the player's view with hearts. Haven't tested how many particles it will actually take. Could do a more systematic approach like draw a panel of hearts, but I think this is better. + double locX = player.getEyeLocation().getX() + (ThreadLocalRandom.current().nextDouble(-.5, .5)); + double locZ = player.getEyeLocation().getZ() + (ThreadLocalRandom.current().nextDouble(-.5, .5)); + double locY = player.getLocation().getY() + ThreadLocalRandom.current().nextDouble(2.1, 2.3); + nearby.forEach(p -> p.spawnParticle(Particle.HEART, locX, locY, locZ, 1)); + } + } + }.runTaskTimerAsynchronously(Vice.getInstance(), 0, 5); + + } else { + Vice.getDrugManager().addOD(player.getUniqueId()); + Vice.getUserManager().getLoadedUser(player.getUniqueId()).setLastTag(System.currentTimeMillis()); + Vice.getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.CONFUSION, 25 * 20, 0))); + Vice.getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.HUNGER, 25 * 20, 2))); + Vice.getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.POISON, 25 * 20, 2))); + Vice.getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.BLINDNESS, 25 * 20, 0))); + Vice.getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.SPEED, 25 * 20, 2))); + //message + new BukkitRunnable() { + @Override + public void run() { + Vice.getDrugManager().removeOD(player.getUniqueId()); + using.remove(player.getUniqueId()); + } + }.runTaskLaterAsynchronously(Vice.getInstance(), 25 * 20); + } + }; + effect.apply(this, this.getDuration(), p); + return !failed[0]; + } + +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/example/Meth.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/example/Meth.java new file mode 100644 index 0000000..7f2aae1 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/example/Meth.java @@ -0,0 +1,73 @@ +package net.grandtheftmc.vice.drugs.example; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.drugs.DrugEffect; +import net.grandtheftmc.vice.drugs.categories.examples.Stimulants; +import net.grandtheftmc.vice.drugs.events.DrugUseEvent; +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; +import org.bukkit.scheduler.BukkitRunnable; + +import java.util.UUID; +import java.util.concurrent.ThreadLocalRandom; + +/** + * Created by Timothy Lampen on 2017-04-06. + */ +public class Meth extends Stimulants{ + private static final int ADDITIONAL_HALF_HEARTS = 10; + public Meth() { + super("meth", 120); + } + + @Override + public boolean apply(Player p) { + boolean[] failed = {false}; + UUID uuid = p.getUniqueId(); + DrugEffect effect = (drug, duration, player) -> { + Vice.getUserManager().getLoadedUser(player.getUniqueId()).setLastTag(System.currentTimeMillis()); + player.playSound(player.getLocation(), Sound.ENTITY_TNT_PRIMED, 1, 1); + int effectDuration = (int) Math.round(duration + (duration * ThreadLocalRandom.current().nextDouble(-.25, .25))) * 20; + Vice.getInstance().getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.SPEED, effectDuration, 1))); + Vice.getInstance().getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.INCREASE_DAMAGE, effectDuration, 0))); + Vice.getInstance().getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.HEALTH_BOOST, effectDuration, 1))); + Vice.getInstance().getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.DAMAGE_RESISTANCE, effectDuration, 0))); + long addTime = System.currentTimeMillis(); + new BukkitRunnable() { + @Override + public void run() { + if (!Vice.getInstance().getDrugManager().getEffectManager().canRecieveOngoingEffect(player, addTime)) { + cancel(); + return; + } + Vice.getInstance().getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.SLOW, effectDuration, 0))); + Vice.getInstance().getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.WEAKNESS, effectDuration, 0))); + Vice.getInstance().getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.WITHER, effectDuration, 0))); + long endTime = System.currentTimeMillis() + ((effectDuration / 20) * 1000); + new BukkitRunnable() { + @Override + public void run() { + if (System.currentTimeMillis() >= endTime || !Vice.getInstance().getDrugManager().getEffectManager().canRecieveOngoingEffect(player, addTime)) { + player.setMaxHealth(20); + cancel(); + return; + } + Vice.getInstance().getDrugManager().getEffectManager().addEffect(player, new PotionEffect(PotionEffectType.BLINDNESS, ThreadLocalRandom.current().nextInt(2, 6) * 20, 0)); + } + }.runTaskTimer(Vice.getInstance(), 0, ThreadLocalRandom.current().nextInt(15, 41) * 20); + player.setMaxHealth(20); + player.sendMessage(Lang.DRUGS.f("&7&oUggh, I shouldn't have tried meth...")); + + } + }.runTaskLater(Vice.getInstance(), duration * 20); + + Bukkit.getPluginManager().callEvent(new DrugUseEvent(player, this)); + }; + effect.apply(this, this.getDuration(), p); + return !failed[0]; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/example/Steroids.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/example/Steroids.java new file mode 100644 index 0000000..5749638 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/example/Steroids.java @@ -0,0 +1,93 @@ +package net.grandtheftmc.vice.drugs.example; + +import com.j0ach1mmall3.jlib.player.JLibPlayer; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.drugs.DrugEffect; +import net.grandtheftmc.vice.drugs.categories.examples.AnabolicSteroids; +import net.grandtheftmc.vice.drugs.events.DrugUseEvent; +import net.grandtheftmc.vice.users.ViceUser; +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; +import org.bukkit.scheduler.BukkitRunnable; + +import java.util.*; +import java.util.concurrent.ThreadLocalRandom; + +/** + * Created by Timothy Lampen on 2017-04-01. + */ +public class Steroids extends AnabolicSteroids{ + + private final HashMap<UUID, List<Long>> injectTimes = new HashMap<>(); + private static final int NEEDED_RATE = 3;//per X + private static final int TIMEFRAME = 10;//seconds + public Steroids() { + super("steroids", 120); + } + + @Override + public boolean apply(Player p) { + boolean[] failed = {false}; + UUID uuid = p.getUniqueId(); + DrugEffect effect = (drug, duration, player) -> { + player.playSound(player.getLocation(), Sound.BLOCK_NOTE_SNARE, 1, 1); + int effectDuration = (int) Math.round(duration + (duration * ThreadLocalRandom.current().nextDouble(-.25, .25))) * 20; + Bukkit.getPluginManager().callEvent(new DrugUseEvent(player, this)); + if (playerCanRage(uuid)) { + for (PotionEffect type : player.getActivePotionEffects()) { + player.removePotionEffect(type.getType()); + } + Vice.getInstance().getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.WEAKNESS, effectDuration / 2, 0))); + Vice.getInstance().getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.SPEED, effectDuration / 2, 2))); + Vice.getInstance().getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.WITHER, effectDuration / 2, 1))); + Vice.getUserManager().getLoadedUser(player.getUniqueId()).setLastTag(System.currentTimeMillis()); + } else { + Vice.getInstance().getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.SPEED, effectDuration, 0))); + Vice.getInstance().getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.DAMAGE_RESISTANCE, effectDuration, 0))); + Vice.getInstance().getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.INCREASE_DAMAGE, effectDuration, 1))); + final long addTime = System.currentTimeMillis(); + new BukkitRunnable() { + @Override + public void run() { + new JLibPlayer(player).setWorldborderTint(100); + new BukkitRunnable() { + @Override + public void run() { + if (!Vice.getInstance().getDrugManager().getEffectManager().canRecieveOngoingEffect(player, addTime)) { + cancel(); + return; + } + ViceUser user = Vice.getUserManager().getLoadedUser(uuid); + user.updateTintHealth(player, Core.getUserManager().getLoadedUser(player.getUniqueId())); + } + }.runTaskLater(Vice.getInstance(), effectDuration / 20); + } + }.runTaskLater(Vice.getInstance(), 1); + } + }; + effect.apply(this, this.getDuration(), p); + return !failed[0]; + } + + private boolean playerCanRage(UUID uuid){ + if(injectTimes.containsKey(uuid)){ + List<Long> tempTimes = new ArrayList<>(); + ArrayList<Long> times = new ArrayList<>(injectTimes.get(uuid)); + times.add(System.currentTimeMillis()); + times.stream().forEach((l) -> { + if((l+(TIMEFRAME*1000))<=System.currentTimeMillis()){ + tempTimes.add(l); + } + }); + times.removeAll(tempTimes); + injectTimes.put(uuid, times); + return times.size()>=NEEDED_RATE; + } + injectTimes.put(uuid, Arrays.asList(System.currentTimeMillis())); + return false; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/example/Weed.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/example/Weed.java new file mode 100644 index 0000000..e7489e4 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/example/Weed.java @@ -0,0 +1,84 @@ +package net.grandtheftmc.vice.drugs.example; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.drugs.DrugEffect; +import net.grandtheftmc.vice.drugs.DrugUtil; +import net.grandtheftmc.vice.drugs.categories.examples.Cannabinoids; +import net.grandtheftmc.vice.drugs.events.DrugUseEvent; +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; +import org.bukkit.scheduler.BukkitRunnable; + +import java.util.UUID; +import java.util.concurrent.ThreadLocalRandom; + +public class Weed extends Cannabinoids { + + public Weed() { + super("weed", 120); + /*ShapelessRecipe rollingPaperRecipe = new ShapelessRecipe(Vice.getItemManager().getItem("rollingpaper").getItem()); + rollingPaperRecipe.addIngredient(3, Material.PAPER); + Bukkit.getServer().addRecipe(rollingPaperRecipe); + + ShapelessRecipe jointRecipe = new ShapelessRecipe(Vice.getItemManager().getItem("joint").getItem()); + jointRecipe.addIngredient(Vice.getItemManager().getItem("rollingpaper").getItem().getType()); + jointRecipe.addIngredient(Vice.getItemManager().getItem("groundweed").getItem().getType()); + Bukkit.getServer().addRecipe(jointRecipe);*/ + } + + @Override + public boolean apply(Player p) { + boolean[] failed = {false}; + UUID uuid = p.getUniqueId(); + DrugEffect effect = (drug, duration, player) -> { + int roll = ThreadLocalRandom.current().nextInt(100); + int effectDuration = (int) Math.round(duration + (duration * ThreadLocalRandom.current().nextDouble(-.25, .25))) * 20; + player.playSound(player.getLocation(), Sound.BLOCK_LAVA_POP, 1, 1); + Bukkit.getPluginManager().callEvent(new DrugUseEvent(player, this)); + final long addTime = System.currentTimeMillis(); + + if (roll > 4 || Vice.getInstance().getDrugManager().inOD(player.getUniqueId())) { + Vice.getInstance().getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.SLOW, effectDuration, 1))); + Vice.getInstance().getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.SLOW_DIGGING, effectDuration, 0))); + new BukkitRunnable() { + @Override + public void run() { + if (!Vice.getInstance().getDrugManager().getEffectManager().canRecieveOngoingEffect(player, addTime)) + return; + new BukkitRunnable() { + @Override + public void run() { + Vice.getInstance().getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.HUNGER, effectDuration, 1))); + } + }.runTask(Vice.getInstance()); + player.sendMessage(Lang.DRUGS.f("&7&oDamn I could go for some McDonalds right now...")); + + } + }.runTaskLaterAsynchronously(Vice.getInstance(), 20 * 60 * 2); + } else { + Vice.getInstance().getDrugManager().addOD(player.getUniqueId()); + Vice.getUserManager().getLoadedUser(player.getUniqueId()).setLastTag(System.currentTimeMillis()); + Vice.getInstance().getDrugManager().getEffectManager().addEffect(player, (new PotionEffect(PotionEffectType.BLINDNESS, effectDuration, 0))); + player.playSound(player.getLocation(), Sound.ENTITY_LIGHTNING_THUNDER, 10, 1); + final long endTime = System.currentTimeMillis() + (effectDuration / 20 * 1000); + new BukkitRunnable() { + @Override + public void run() { + if (System.currentTimeMillis() >= endTime || !Vice.getInstance().getDrugManager().getEffectManager().canRecieveOngoingEffect(player, addTime)) { + Vice.getInstance().getDrugManager().removeOD(player.getUniqueId()); + cancel(); + } + player.playSound(player.getLocation(), DrugUtil.getRandomParanoiaSound(), 10, ThreadLocalRandom.current().nextFloat() * 2); + } + }.runTaskTimerAsynchronously(Vice.getInstance(), 5, 15); + player.sendMessage(Lang.DRUGS.f("&7&oUghhh... That must've been a bad batch of K2...")); + } + }; + effect.apply(this, this.getDuration(), p); + return !failed[0]; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/internal/manager/Manager.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/internal/manager/Manager.java new file mode 100644 index 0000000..b8beaf6 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/internal/manager/Manager.java @@ -0,0 +1,46 @@ +package net.grandtheftmc.vice.drugs.internal.manager; + +import net.grandtheftmc.vice.drugs.internal.service.Service; + +import java.util.concurrent.atomic.AtomicInteger; + +/** + * Created by Remco on 25-3-2017. + */ +public abstract class Manager <S extends Service> { + + private final S service; + private volatile String name; + private AtomicInteger id; + + public Manager(String name, AtomicInteger id, S service) { + this.service = service; + this.name = name; + this.id = id; + } + + public abstract void start(); + public abstract void stop(); + public abstract boolean destroy(); + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public AtomicInteger getId() { + return id; + } + + public void setId(AtomicInteger id) { + this.id = id; + } + + public S getService() { + return service; + } +} + diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/internal/service/Helper.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/internal/service/Helper.java new file mode 100644 index 0000000..970a3d6 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/internal/service/Helper.java @@ -0,0 +1,11 @@ +package net.grandtheftmc.vice.drugs.internal.service; + +/** + * Created by Remco on 25-3-2017. + */ +public interface Helper { + + String getHelperName(); + Class<? extends Service> getServiceClass(); + +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/internal/service/Service.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/internal/service/Service.java new file mode 100644 index 0000000..e14b7b9 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/internal/service/Service.java @@ -0,0 +1,42 @@ +package net.grandtheftmc.vice.drugs.internal.service; + +/** + * Created by Remco on 25-3-2017. + */ +public abstract class Service { + + private volatile Service instance; + private volatile Helper helper; + + private final String name; + + public Service(String name, Helper helper) { + this.name = name; + this.helper = helper; + } + + protected synchronized void setHelper(Helper helper){ + this.helper = helper; + } + + protected Helper getHelper(){ + return helper; + } + + public String getName() { + return name; + } + + protected Service getInstance(){ + if(instance == null){ + synchronized(Service.class) { + try { + instance = Service.class.newInstance(); + } catch (InstantiationException | IllegalAccessException e) { + e.printStackTrace(); + } + } + } + return instance; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/items/DrugItem.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/items/DrugItem.java new file mode 100644 index 0000000..ba56bd9 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/drugs/items/DrugItem.java @@ -0,0 +1,107 @@ +package net.grandtheftmc.vice.drugs.items; + +import com.j0ach1mmall3.jlib.inventory.JLibItem; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.drugs.Drug; +import net.grandtheftmc.vice.drugs.DrugService; +import net.minecraft.server.v1_12_R1.NBTTagCompound; +import net.minecraft.server.v1_12_R1.NBTTagString; +import org.bukkit.Material; +import org.bukkit.craftbukkit.v1_12_R1.inventory.CraftItemStack; +import org.bukkit.inventory.ItemStack; + +import java.util.Map; +import java.util.UUID; + +public class DrugItem { + + private final static DrugService drugService = (DrugService) Vice.getDrugManager().getService(); + + private ItemStack itemStack; + private Drug drug; + + public DrugItem(Material material, int amount, UUID owner, Drug drug) { + this.itemStack = new ItemStack(material, amount); + this.drug = drug; + apply(); + } + + public DrugItem(ItemStack itemStack, UUID owner, Drug drug) { + this.itemStack = itemStack.clone(); + this.drug = drug; + apply(); + } + + + public DrugItem(ItemStack itemStack, Drug drug) { + this.itemStack = itemStack.clone(); + this.drug = drug; + apply(); + } + + public DrugItem(JLibItem item, Drug drug) { + this.itemStack = item.getItemStack(); + this.drug = drug; + apply(); + } + + protected DrugItem(ItemStack itemStack) { + this.itemStack = itemStack.clone(); + } + + public final static DrugItem getByItemStack(ItemStack itemStack) { + ItemStack clone = itemStack.clone(); + clone.setAmount(1); + DrugItem base = new DrugItem(clone); + if (drugService.getDrugs().stream().anyMatch(base::isValid) || drugService.getItems().contains(base)) + return base; + return null; + } + + public static DrugItem getByDrug(Drug drug) { + if (drugService.getRawItems().rowMap().values().stream().anyMatch(drugItemDrugMap -> drugItemDrugMap.containsValue(drug))) { + Map<DrugItem, Drug> drugs = drugService.getRawItems().rowMap().values().stream().filter(drugItemDrugMap -> drugItemDrugMap.containsValue(drug)).findFirst().get(); + for (DrugItem item : drugs.keySet()) { + if (drugs.get(item).equals(drug)) { + return item; + } + } + } + return null; + } + + public void apply() { + if (!isValid(drug)) { + net.minecraft.server.v1_12_R1.ItemStack nmsCopy = CraftItemStack.asNMSCopy(itemStack); + NBTTagCompound tag = nmsCopy.hasTag() ? nmsCopy.getTag() : new NBTTagCompound(); + NBTTagString drugName = new NBTTagString(drug.getName()); + assert tag != null; + tag.set("drugName", drugName); + nmsCopy.setTag(tag); + this.itemStack = CraftItemStack.asBukkitCopy(nmsCopy); + + } + } + + public final ItemStack getItemStack() { + return itemStack; + } + + public boolean isValid(Drug drug) { + if (itemStack != null && drug != null) { + net.minecraft.server.v1_12_R1.ItemStack nmsCopy = CraftItemStack.asNMSCopy(itemStack); + if (nmsCopy != null) { + NBTTagCompound tag = nmsCopy.hasTag() ? nmsCopy.getTag() : new NBTTagCompound(); + if ((tag != null ? tag.get("drugName") : null) != null) { + String name = tag.getString("drugName"); + return drugService.getDrugs().stream().map(Drug::getName).anyMatch(item -> item.equalsIgnoreCase(name) && drug.getName().equalsIgnoreCase(item)); + } + } + } + return false; + } + + public Drug getDrug() { + return drug; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/durability/DurabilityItems.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/durability/DurabilityItems.java new file mode 100644 index 0000000..d30aaf9 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/durability/DurabilityItems.java @@ -0,0 +1,65 @@ +package net.grandtheftmc.vice.durability; + +import org.bukkit.Material; + +/** + * Created by ThatAbstractWolf on 2017-08-02. + */ +public enum DurabilityItems { + + LEATHER_HELMET(Material.LEATHER_HELMET, 56), + LEATHER_CHESTPLATE(Material.LEATHER_CHESTPLATE, 81), + LEATHER_LEGGINGS(Material.LEATHER_LEGGINGS, 76), + LEATHER_BOOTS(Material.LEATHER_BOOTS, 66), + + GOLD_HELMET(Material.GOLD_HELMET, 78), + GOLD_CHESTPLATE(Material.GOLD_CHESTPLATE, 113), + GOLD_LEGGINGS(Material.GOLD_LEGGINGS, 106), + GOLD_BOOTS(Material.GOLD_BOOTS, 92), + + CHAINMAIL_HELMET(Material.CHAINMAIL_HELMET, 166), + CHAINMAIL_CHESTPLATE(Material.CHAINMAIL_CHESTPLATE, 241), + CHAINMAIL_LEGGINGS(Material.CHAINMAIL_LEGGINGS, 226), + CHAINMAIL_BOOTS(Material.CHAINMAIL_BOOTS, 196), + + IRON_HELMET(Material.IRON_HELMET, 166), + IRON_CHESTPLATE(Material.IRON_CHESTPLATE, 241), + IRON_LEGGINGS(Material.IRON_LEGGINGS, 226), + IRON_BOOTS(Material.IRON_BOOTS, 66), + + DIAMOND_HELMET(Material.DIAMOND_HELMET, 364), + DIAMOND_CHESTPLATE(Material.DIAMOND_CHESTPLATE, 529), + DIAMOND_LEGGINGS(Material.DIAMOND_LEGGINGS, 496), + DIAMOND_BOOTS(Material.DIAMOND_BOOTS, 430), + + JETPACK(Material.GOLD_CHESTPLATE, 50, "Jetpack") + ; + + private Material material; + private int maximumDurability; + + private String displayName; + + DurabilityItems(Material material, int maximumDurability) { + this.material = material; + this.maximumDurability = maximumDurability; + } + + DurabilityItems(Material material, int maximumDurability, String displayName) { + this.material = material; + this.maximumDurability = maximumDurability; + this.displayName = displayName; + } + + public Material getMaterial() { + return material; + } + + public int getMaximumDurability() { + return maximumDurability; + } + + public String getDisplayName() { + return displayName; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/durability/DurabilityListener.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/durability/DurabilityListener.java new file mode 100644 index 0000000..b97fc56 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/durability/DurabilityListener.java @@ -0,0 +1,204 @@ +package net.grandtheftmc.vice.durability; + +import net.grandtheftmc.vice.events.ArmorEquipEvent; +import net.grandtheftmc.vice.utils.DurabilityUtil; +import org.bukkit.ChatColor; +import org.bukkit.block.Block; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityDamageByBlockEvent; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.player.PlayerPickupItemEvent; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import java.util.List; +import java.util.Optional; + +/** + * Created by ThatAbstractWolf on 2017-08-02. + */ +public class DurabilityListener implements Listener { + + @EventHandler + public void onDurabilityDecrease(EntityDamageEvent event) { + if (event.getEntity() instanceof Player) { + Player player = (Player) event.getEntity(); + if (event.isCancelled()) return; + + int durabilityDecreaseAmount = 0; + switch (event.getCause()) { + case ENTITY_ATTACK: + case ENTITY_EXPLOSION: + case ENTITY_SWEEP_ATTACK: + case BLOCK_EXPLOSION: + case FALLING_BLOCK: + case PROJECTILE: + case LIGHTNING: + case THORNS: + durabilityDecreaseAmount = 1; + break; + + default: + break; + } + + runDecreaseChecks(player, durabilityDecreaseAmount); + } + } + + @EventHandler + public void onBlockDamage(EntityDamageByBlockEvent event) { + + if (event.getDamager() == null || event.getEntity() == null || event.getCause() == null) return; + + if (event.getEntity() instanceof Player) { + Player player = (Player) event.getEntity(); + Block damager = event.getDamager(); + if (event.isCancelled()) return; + + int durabilityDecreaseAmount = 0; + switch (damager.getType()) { + case CACTUS: + case LAVA: + case STATIONARY_LAVA: + case MAGMA: + case FIRE: + durabilityDecreaseAmount = 1; + break; + + default: + break; + } + + runDecreaseChecks(player, durabilityDecreaseAmount); + } + } + + @EventHandler + public void onArmourEquip(ArmorEquipEvent event) { + if (event.getNewArmorPiece() != null) { + ItemStack item = event.getNewArmorPiece(); + + switch (item.getType()) { + case CHAINMAIL_LEGGINGS: + case IRON_LEGGINGS: + case IRON_BOOTS: + case DIAMOND_LEGGINGS: + case DIAMOND_BOOTS: + case GOLD_LEGGINGS: + case GOLD_BOOTS: + event.setCancelled(true); + return; + } + + if (DurabilityUtil.getDurability(item) == -1) { + Optional<DurabilityItems> durabilityItems = DurabilityUtil.getDurabilityItem(item); + if (!durabilityItems.isPresent()) return; + + if (item.getItemMeta() != null && !item.getItemMeta().isUnbreakable()) { + ItemMeta itemMeta = item.getItemMeta(); + itemMeta.setUnbreakable(true); + itemMeta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE); + item.setItemMeta(itemMeta); + } + + DurabilityItems durabilityItem = durabilityItems.get(); + DurabilityUtil.setDurabilityOnArmour(event.getPlayer(), item, durabilityItem.getMaximumDurability()); + } + } + } + + @EventHandler + public void onInventoryClick(InventoryClickEvent event) { + + if (!(event.getWhoClicked() instanceof Player)) return; + Player player = (Player) event.getWhoClicked(); + if (player.getItemOnCursor() != null) { + ItemStack item = player.getItemOnCursor(); + if (item != null ) { + ItemStack itemStack = applyDurabilitySpecifics(item); + if (itemStack != null) { + player.setItemOnCursor(itemStack); + } + } + } + for (int i = 0; i < player.getInventory().getSize(); i++) { + ItemStack item = player.getInventory().getContents()[i]; + if (item == null) continue; + ItemStack itemStack = applyDurabilitySpecifics(item); + if (itemStack == null) continue; + player.getInventory().setItem(i, itemStack); + } + } + + @EventHandler + public void onPickup(PlayerPickupItemEvent event) { + Player player = event.getPlayer(); + ItemStack item = event.getItem().getItemStack(); + if (item != null) { + ItemStack itemStack = applyDurabilitySpecifics(item); + if (itemStack != null) { + for (int i = 0; i < player.getInventory().getSize(); i++) { + ItemStack check = player.getInventory().getContents()[i]; + if (check != null && check == item) { + player.getInventory().setItem(i, itemStack); + break; + } + } + } + } + } + + private void runDecreaseChecks(Player player, int durabilityDecreaseAmount) { + if (player.getInventory().getHelmet() != null && player.getInventory().getHelmet().getItemMeta().getLore() != null && !hasDurable(player.getInventory().getHelmet())) + DurabilityUtil.decreaseDurability(player, player.getInventory().getHelmet(), durabilityDecreaseAmount); + if (player.getInventory().getChestplate() != null && player.getInventory().getChestplate().getItemMeta().getLore() != null && !hasDurable(player.getInventory().getChestplate())) + DurabilityUtil.decreaseDurability(player, player.getInventory().getChestplate(), durabilityDecreaseAmount); + if (player.getInventory().getLeggings() != null && player.getInventory().getLeggings().getItemMeta().getLore() != null && !hasDurable(player.getInventory().getLeggings())) + DurabilityUtil.decreaseDurability(player, player.getInventory().getLeggings(), durabilityDecreaseAmount); + if (player.getInventory().getBoots() != null && player.getInventory().getBoots().getItemMeta().getLore() != null && !hasDurable(player.getInventory().getBoots())) + DurabilityUtil.decreaseDurability(player, player.getInventory().getBoots(), durabilityDecreaseAmount); + } + + private ItemStack applyDurabilitySpecifics(ItemStack item) { + + if (DurabilityUtil.getDurability(item) == -1) { + Optional<DurabilityItems> durabilityItems = DurabilityUtil.getDurabilityItem(item); + + if (item == null || !durabilityItems.isPresent()) return null; + + if (item.getItemMeta() != null && !item.getItemMeta().isUnbreakable()) { + ItemMeta itemMeta = item.getItemMeta(); + itemMeta.setUnbreakable(true); + itemMeta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE); + item.setItemMeta(itemMeta); + } + + DurabilityItems durabilityItem = durabilityItems.get(); + ItemStack newArmour = DurabilityUtil.setDurability(item, durabilityItem.getMaximumDurability()); + DurabilityUtil.setDurabilityLore(newArmour, durabilityItem.getMaximumDurability(), durabilityItem); + return newArmour; + } + + return null; + } + + private boolean hasDurable(ItemStack item) { + + if (item.getItemMeta().getLore() == null) return false; + + List<String> lore = item.getItemMeta().getLore(); + + for (String lorePart : lore) { + if (ChatColor.stripColor(lorePart).contains("Durable")) { + return true; + } + } + + return false; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/events/ArmorEquipEvent.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/events/ArmorEquipEvent.java new file mode 100644 index 0000000..f7b8424 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/events/ArmorEquipEvent.java @@ -0,0 +1,141 @@ +package net.grandtheftmc.vice.events; + +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.Cancellable; +import org.bukkit.event.HandlerList; +import org.bukkit.event.player.PlayerEvent; +import org.bukkit.inventory.ItemStack; + +/** + * @Author Borlea + * @Github https://github.com/borlea/ + * @Website http://codingforcookies.com/ + * @since Jul 30, 2015 + */ +public final class ArmorEquipEvent extends PlayerEvent implements Cancellable { + + private static final HandlerList handlers = new HandlerList(); + private boolean cancel = false; + private final EquipMethod equipType; + private final EquipArmorType type; + private ItemStack oldArmorPiece, newArmorPiece; + + /** + * Constructor for the ArmorEquipEvent. + * + * @param player The player who put on / removed the armor. + * @param type The EquipArmorType of the armor added + * @param oldArmorPiece The ItemStack of the armor removed. + * @param newArmorPiece The ItemStack of the armor added. + */ + public ArmorEquipEvent(final Player player, final EquipMethod equipType, final EquipArmorType type, final ItemStack oldArmorPiece, final ItemStack newArmorPiece){ + super(player); + this.equipType = equipType; + this.type = type; + this.oldArmorPiece = oldArmorPiece; + this.newArmorPiece = newArmorPiece; + } + + /** + * Gets a list of handlers handling this event. + * + * @return A list of handlers handling this event. + */ + public final static HandlerList getHandlerList(){ + return handlers; + } + + /** + * Gets a list of handlers handling this event. + * + * @return A list of handlers handling this event. + */ + @Override + public final HandlerList getHandlers(){ + return handlers; + } + + /** + * Sets if this event should be cancelled. + * + * @param cancel If this event should be cancelled. + */ + public final void setCancelled(final boolean cancel){ + this.cancel = cancel; + } + + /** + * Gets if this event is cancelled. + * + * @return If this event is cancelled + */ + public final boolean isCancelled(){ + return cancel; + } + + public final EquipArmorType getType(){ + return type; + } + + /** + * Returns the last equipped armor piece, could be a piece of armor, {@link Material Air}, or null. + */ + public final ItemStack getOldArmorPiece(){ + return oldArmorPiece; + } + + public final void setOldArmorPiece(final ItemStack oldArmorPiece){ + this.oldArmorPiece = oldArmorPiece; + } + + /** + * Returns the newly equipped armor, could be a piece of armor, {@link Material Air}, or null. + */ + public final ItemStack getNewArmorPiece(){ + return newArmorPiece; + } + + public final void setNewArmorPiece(final ItemStack newArmorPiece){ + this.newArmorPiece = newArmorPiece; + } + + /** + * Gets the method used to either equip or unequip an armor piece. + */ + public EquipMethod getMethod(){ + return equipType; + } + + public enum EquipMethod{ + /** + * When you shift click an armor piece to equip or unequip + */ + SHIFT_CLICK, + /** + * When you drag and drop the item to equip or unequip + */ + DRAG, + /** + * When you right click an armor piece in the hotbar without the inventory open to equip. + */ + HOTBAR, + /** + * When you press the hotbar slot number while hovering over the armor slot to equip or unequip + */ + HOTBAR_SWAP, + /** + * When in range of a dispenser that shoots an armor piece to equip. + */ + DISPENSER, + /** + * When an armor piece breaks to unequip + */ + BROKE, + /** + * When you die causing all armor to unequip + */ + DEATH, + ; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/events/EquipArmorType.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/events/EquipArmorType.java new file mode 100644 index 0000000..1bd0ab5 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/events/EquipArmorType.java @@ -0,0 +1,60 @@ +package net.grandtheftmc.vice.events; + +import org.bukkit.inventory.ItemStack; + +/** + * Created by Timothy Lampen on 2017-08-11. + */ +public enum EquipArmorType { + + HELMET(5), CHESTPLATE(6), LEGGINGS(7), BOOTS(8); + + private final int slot; + + EquipArmorType(int slot){ + this.slot = slot; + } + + /** + * Attempts to match the ArmorType for the specified ItemStack. + * + * @param itemStack The ItemStack to parse the type of. + * @return The parsed ArmorType. (null if none were found.) + */ + public final static EquipArmorType matchType(final ItemStack itemStack){ + if(itemStack == null) { return null; } + switch (itemStack.getType()){ + case DIAMOND_HELMET: + case GOLD_HELMET: + case IRON_HELMET: + case CHAINMAIL_HELMET: + case LEATHER_HELMET: + return HELMET; + case DIAMOND_CHESTPLATE: + case GOLD_CHESTPLATE: + case IRON_CHESTPLATE: + case CHAINMAIL_CHESTPLATE: + case LEATHER_CHESTPLATE: + return CHESTPLATE; + case DIAMOND_LEGGINGS: + case GOLD_LEGGINGS: + case IRON_LEGGINGS: + case CHAINMAIL_LEGGINGS: + case LEATHER_LEGGINGS: + return LEGGINGS; + case DIAMOND_BOOTS: + case GOLD_BOOTS: + case IRON_BOOTS: + case CHAINMAIL_BOOTS: + case LEATHER_BOOTS: + return BOOTS; + default: + return null; + } + } + + public int getSlot(){ + return slot; + } + +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/events/TPEvent.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/events/TPEvent.java new file mode 100644 index 0000000..60d4ed9 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/events/TPEvent.java @@ -0,0 +1,116 @@ +package net.grandtheftmc.vice.events; + +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.entity.Player; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +public class TPEvent extends Event { + private static final HandlerList HANDLERS = new HandlerList(); + + @Override + public HandlerList getHandlers() { + return HANDLERS; + } + + public static HandlerList getHandlerList() { + return HANDLERS; + } + + private Player sender; + private Player target; + private TPType type; + private String cancelMessage; + private Location targetLocation; + + public TPEvent(Player sender, TPType type) { + this.sender = sender; + this.type = type; + } + + public TPEvent(Player sender, Player target, TPType type) { + this.sender = sender; + this.target = target; + this.type = type; + } + + + public TPType getType() { + return this.type; + } + + public void setType(TPType type) { + this.type = type; + } + + public boolean isCancelled() { + return this.cancelMessage != null; + } + + public String getCancelMessage() { + return this.cancelMessage; + } + + public void setCancelled(String msg) { + this.cancelMessage = msg; + } + + public TPEvent call() { + Bukkit.getPluginManager().callEvent(this); + return this; + } + + public Location getTargetLocation() { + return this.targetLocation; + } + + public void setTargetLocation(Location targetLocation) { + this.targetLocation = targetLocation; + } + + public boolean targetLocationIsChanged() { + return this.targetLocation != null; + } + + + public Player getSender() { + return this.sender; + } + + public Player getPlayer() { + return this.sender; + } + + public void setSender(Player sender) { + this.sender = sender; + } + + + public Player getTarget() { + return this.target; + } + + public void setTarget(Player target) { + this.target = target; + } + + + public enum TPType { + TPA_REQ, + TPAHERE_REQ, + TPA_ACCEPT, + TPAHERE_ACCEPT, + TP_COMPLETE, + WARP, + VEHICLE_SEND_AWAY, + VEHICLE_CALL, + HOUSE_ENTER, + HOUSE_LEAVE, + PREMIUM_HOUSE_ENTER, + PREMIUM_HOUSE_LEAVE, + BACKUP + + } + +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/holidays/Holiday.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/holidays/Holiday.java new file mode 100644 index 0000000..3c63887 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/holidays/Holiday.java @@ -0,0 +1,6 @@ +package net.grandtheftmc.vice.holidays; + +public abstract class Holiday { + + public abstract boolean isActive(); +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/holidays/HolidayManager.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/holidays/HolidayManager.java new file mode 100644 index 0000000..c6a001f --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/holidays/HolidayManager.java @@ -0,0 +1,16 @@ +package net.grandtheftmc.vice.holidays; + +import net.grandtheftmc.vice.holidays.easter.Easter; + +public class HolidayManager { + private Easter easter; + + public HolidayManager() { + this.easter = new Easter(); + } + + public Easter getEaster() { + if (this.easter == null) this.easter = new Easter(); + return this.easter; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/holidays/easter/Easter.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/holidays/easter/Easter.java new file mode 100644 index 0000000..4533660 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/holidays/easter/Easter.java @@ -0,0 +1,81 @@ +package net.grandtheftmc.vice.holidays.easter; + +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.vice.ViceUtils; +import net.grandtheftmc.vice.holidays.Holiday; +import org.bukkit.Chunk; +import org.bukkit.Material; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Item; +import org.bukkit.entity.Rabbit; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import java.time.Month; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Optional; + +public class Easter extends Holiday { + private EasterTask easterTask; + + public Easter() { + new EasterListener(this); + if (this.isActive()) { + if (this.easterTask == null) this.easterTask = new EasterTask(this); + } + } + + public boolean isActive() { + return ViceUtils.getMonth() == Month.APRIL && ViceUtils.getDay() == 15 + || ViceUtils.getDay() == 16 || ViceUtils.getDay() == 17; + } + + public Optional<EasterTask> getEasterTask() { + return Optional.ofNullable(this.easterTask); + } + + public ItemStack getEasterEgg() { + ItemStack easterEgg = new ItemStack(Material.EGG); + ItemMeta meta = easterEgg.getItemMeta(); + meta.setDisplayName(Utils.f(ViceUtils.randomColor() + "&lEaster Egg")); + easterEgg.setItemMeta(meta); + return easterEgg; + } + + public ItemStack getChocolateBunny() { + ItemStack chocolateBunny = new ItemStack(Material.COOKED_RABBIT); + ItemMeta meta = chocolateBunny.getItemMeta(); + meta.setDisplayName(Utils.f(ViceUtils.randomColor() + "&lChocolate")); + chocolateBunny.setItemMeta(meta); + return chocolateBunny; + } + + public Rabbit.Type[] getAllowedTypes() { + Rabbit.Type[] allowed = {Rabbit.Type.BLACK, Rabbit.Type.BLACK_AND_WHITE, + Rabbit.Type.GOLD, Rabbit.Type.WHITE}; + return allowed; + } + + public Collection<Rabbit> getRabbitsByChunk(Chunk chunk) { + Collection<Rabbit> rabbits = new ArrayList<>(); + if (chunk == null || !chunk.isLoaded()) return rabbits; + for (Entity entity : chunk.getEntities()) { + if (entity.getType() != EntityType.RABBIT) continue; + rabbits.add((Rabbit) entity); + } + return rabbits; + } + + public Collection<Item> getItemsByChunk(Chunk chunk) { + Collection<Item> items = new ArrayList<>(); + if (chunk == null || !chunk.isLoaded()) return items; + for (Entity entity : chunk.getEntities()) { + if (entity.getType() != EntityType.DROPPED_ITEM) continue; + items.add((Item) entity); + } + return items; + } + +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/holidays/easter/EasterListener.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/holidays/easter/EasterListener.java new file mode 100644 index 0000000..ee63847 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/holidays/easter/EasterListener.java @@ -0,0 +1,78 @@ +package net.grandtheftmc.vice.holidays.easter; + +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.ViceUtils; +import org.bukkit.Bukkit; +import org.bukkit.Effect; +import org.bukkit.Sound; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.entity.Rabbit; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityDeathEvent; +import org.bukkit.event.entity.EntitySpawnEvent; +import org.bukkit.event.player.PlayerEggThrowEvent; +import org.bukkit.event.player.PlayerItemConsumeEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; + +import java.util.concurrent.ThreadLocalRandom; + +public class EasterListener implements Listener { + private Easter easter; + + public EasterListener(Easter easter) { +// Bukkit.getPluginManager().registerEvents(this, Vice.getInstance()); + this.easter = easter; + } + + @EventHandler + public void playerEggThrow(PlayerEggThrowEvent event) { + Player player = event.getPlayer(); + if (event.isHatching()) { + if (easter.isActive()) event.setHatchingType(EntityType.RABBIT); + if (player.getWorld().getName().equalsIgnoreCase("spawn") || !easter.isActive()) event.setHatching(false); + if (easter.getRabbitsByChunk(player.getLocation().getChunk()).size() > 50) event.setHatching(false); + player.playSound(event.getEgg().getLocation(), Sound.ENTITY_EXPERIENCE_ORB_PICKUP, 5.0F, 5.0F); + player.playSound(event.getEgg().getLocation(), Sound.ENTITY_FIREWORK_BLAST, 5.0F, 5.0F); + player.getWorld().spigot().playEffect(event.getEgg().getLocation(), Effect.FIREWORKS_SPARK); + player.getWorld().dropItemNaturally(event.getEgg().getLocation(), ViceUtils.getRandomGameItem().getItem()); + } + } + + @EventHandler + public void playerItemConsume(PlayerItemConsumeEvent event) { + Player player = event.getPlayer(); + ItemStack item = event.getItem(); + if (item.getType() == easter.getChocolateBunny().getType()) { + Vice.getDrugManager().getEffectManager().cancelEffects(player); + player.addPotionEffect(new PotionEffect(PotionEffectType.ABSORPTION, 600, 1)); + player.setFoodLevel(20); + player.setSaturation(20); + player.setExhaustion(0); + } + } + + @EventHandler + public void entityDeath(EntityDeathEvent event) { + if (!easter.isActive()) return; + if (event.getEntity().getType() != EntityType.RABBIT) return; + if (event.getEntity().getKiller() == null) return; + event.getDrops().clear(); + event.getDrops().add(Vice.getHolidayManager().getEaster().getChocolateBunny()); + } + + @EventHandler + public void entitySpawn(EntitySpawnEvent event) { + if (!easter.isActive()) return; + if (event.getEntityType() != EntityType.RABBIT) return; + Rabbit rabbit = (Rabbit) event.getEntity(); + rabbit.setAdult(); + rabbit.setCustomName(""); + rabbit.setCustomNameVisible(false); + Rabbit.Type targetType = easter.getAllowedTypes()[ThreadLocalRandom.current().nextInt(easter.getAllowedTypes().length)]; + rabbit.setRabbitType(targetType); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/holidays/easter/EasterTask.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/holidays/easter/EasterTask.java new file mode 100644 index 0000000..f321894 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/holidays/easter/EasterTask.java @@ -0,0 +1,45 @@ +package net.grandtheftmc.vice.holidays.easter; + +import net.grandtheftmc.vice.Vice; +import org.bukkit.Location; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Rabbit; +import org.bukkit.scheduler.BukkitRunnable; + +import java.util.concurrent.ThreadLocalRandom; + +public class EasterTask extends BukkitRunnable { + private Easter easter; + + public EasterTask(Easter easter) { + this.easter = easter; +// if (this.easter.getEasterTask().isPresent()) return; +// this.runTaskTimer(Vice.getInstance(), 0, 4800); + } + + @Override + public void run() { +// if(Vice.getWorldManager().getWarpManager().getRandomWarp()==null) +// return; +// Location location = Vice.getWorldManager().getWarpManager().getRandomWarp().getLocation(); +// if (easter.getRabbitsByChunk(location.getChunk()).size() > 10) return; +// Rabbit rabbit = (Rabbit) location.getWorld().spawnEntity(location, EntityType.RABBIT); +// Rabbit.Type type = easter.getAllowedTypes()[ThreadLocalRandom.current().nextInt(easter.getAllowedTypes().length)]; +// rabbit.setRabbitType(type); +// rabbit.setCustomName(""); +// rabbit.setCustomNameVisible(false); +// rabbit.setAdult(); +// rabbit.setBreed(true); +// rabbit.setRemoveWhenFarAway(true); +// location.getWorld().getLivingEntities() +// .stream() +// .filter(livingEntity -> livingEntity.getType() == EntityType.RABBIT) +// .forEach(livingEntity -> { +// livingEntity.setRemoveWhenFarAway(true); +// if (easter.getItemsByChunk(livingEntity.getLocation().getChunk()).size() > 50) return; +// if (ThreadLocalRandom.current().nextInt(3) == 1) { +// livingEntity.getWorld().dropItemNaturally(livingEntity.getLocation(), easter.getEasterEgg()); +// } +// }); + } +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/hologram/CoreHologram.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/hologram/CoreHologram.java new file mode 100644 index 0000000..c7ad54e --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/hologram/CoreHologram.java @@ -0,0 +1,164 @@ +package net.grandtheftmc.vice.hologram; + +import com.comphenix.protocol.wrappers.WrappedDataWatcher; +import com.google.common.collect.Lists; +import net.grandtheftmc.core.wrapper.packet.out.WrapperPlayServerEntityDestroy; +import net.grandtheftmc.core.wrapper.packet.out.WrapperPlayServerEntityMetadata; +import net.grandtheftmc.core.wrapper.packet.out.WrapperPlayServerNamedEntitySpawn; +import net.grandtheftmc.vice.hologram.exception.HologramDuplicateNodeException; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.entity.Player; + +import java.util.List; + +public final class CoreHologram implements Hologram { + + private final int id; + private final Location origin; + + protected final List<HologramNode> nodes; + + public CoreHologram(int id, Location origin) { + this.id = id; + this.origin = origin; + this.nodes = Lists.newArrayList(); + } + + @Override + public int getId() { + return id; + } + + @Override + public Location getOrigin() { + return origin; + } + + @Override + public List<HologramNode> getNodes() { + return nodes; + } + + @Override + public HologramNode getNode(int id) { + return this.nodes.stream().filter(n -> n.getId() == id).findFirst().orElse(null); + } + + @Override + public void spawn(Player player) { +// for (HologramNode node : this.nodes) { +// if (node.getEntity() == null || node.getEntity().isDead() || !node.getEntity().isValid()) { +// System.out.println("Entity is null"); +// continue; +// } +// +// WrapperPlayServerNamedEntitySpawn spawn = new WrapperPlayServerNamedEntitySpawn(); +// spawn.setEntityID(node.getEntity().getEntityId()); +// spawn.setX(node.getEntity().getLocation().getX()); +// spawn.setY(node.getEntity().getLocation().getY()); +// spawn.setZ(node.getEntity().getLocation().getZ()); +// +// WrappedDataWatcher dataWatcher = new WrappedDataWatcher(); +// dataWatcher.setEntity(node.getEntity()); +// +// WrappedDataWatcher.Serializer byteSerializer = WrappedDataWatcher.Registry.get(Byte.class); +// WrappedDataWatcher.Serializer booleanSerializer = WrappedDataWatcher.Registry.get(Boolean.class); +// WrappedDataWatcher.Serializer stringSerializer = WrappedDataWatcher.Registry.get(String.class); +// +// dataWatcher.setObject(new WrappedDataWatcher.WrappedDataWatcherObject(0, byteSerializer), (byte) 0x20); //Invisible +// dataWatcher.setObject(new WrappedDataWatcher.WrappedDataWatcherObject(2, stringSerializer), node.getText()); // Set custom name +// dataWatcher.setObject(new WrappedDataWatcher.WrappedDataWatcherObject(3, booleanSerializer), false); // Set custom name visible +// +// spawn.setMetadata(dataWatcher); +// +// spawn.sendPacket(player); +// } + + refresh(); + } + + @Override + public void refresh() { + this.nodes.forEach(node -> refresh(node.getId())); + } + + @Override + public void refresh(int nodeId) { + HologramNode node = this.getNode(nodeId); + if (node == null) return; + if (node.getEntity() == null) return; + + WrapperPlayServerEntityMetadata packet = new WrapperPlayServerEntityMetadata(); + packet.setEntityID(node.getEntity().getEntityId()); + + for (Player player : Bukkit.getOnlinePlayers()) { + if (player == null) continue; + if (packet == null) continue; + if (node == null) continue; + if (node.getEntity() == null) continue; + if (!player.getLocation().getWorld().getName().equals(origin.getWorld().getName())) + continue; + + packet.sendPacket(player); + } + } + + @Override + public void refresh(Player player) { + this.nodes.forEach(node -> refresh(node.getId(), player)); + } + + @Override + public void refresh(int nodeId, Player player) { + HologramNode node = this.getNode(nodeId); + if (node == null) return; + if (node.getEntity() == null) return; + if (!player.getLocation().getWorld().getName().equals(origin.getWorld().getName())) + return; + + WrapperPlayServerEntityMetadata packet = new WrapperPlayServerEntityMetadata(); + packet.setEntityID(node.getEntity().getEntityId()); + + packet.sendPacket(player); + } + + @Override + public void destroy() { + for (HologramNode node : this.nodes) { + WrapperPlayServerEntityDestroy destroy = new WrapperPlayServerEntityDestroy(); + destroy.setEntityId(node.getEntity().getEntityId()); + for (Player player : Bukkit.getOnlinePlayers()) { + destroy.sendPacket(player); + } + node.getEntity().remove(); + } + nodes.clear(); + } + + @Override + public HologramNode addNode(int id) throws HologramDuplicateNodeException { + if (nodes.stream().anyMatch(n -> n.getId() == id)) + throw new HologramDuplicateNodeException(this, id); + + HologramNode node = new CoreHologramNode(id, origin.clone().subtract(0, id * 0.25, 0)); + nodes.add(node); + return node; + } + + @Override + public HologramNode addNode(int id, String text) throws HologramDuplicateNodeException { + HologramNode node = this.addNode(id); + node.setText(text); + return node; + } + + @Override + public HologramNode addNode(HologramNode node) throws HologramDuplicateNodeException { + if (nodes.stream().anyMatch(n -> n.getId() == id)) + throw new HologramDuplicateNodeException(this, id); + + nodes.add(node); + return node; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/hologram/CoreHologramNode.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/hologram/CoreHologramNode.java new file mode 100644 index 0000000..ab2abf1 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/hologram/CoreHologramNode.java @@ -0,0 +1,74 @@ +package net.grandtheftmc.vice.hologram; + +import net.grandtheftmc.core.Utils; +import net.grandtheftmc.vice.Vice; +import org.bukkit.Location; +import org.bukkit.entity.ArmorStand; +import org.bukkit.metadata.FixedMetadataValue; + +import java.util.UUID; + +public final class CoreHologramNode implements HologramNode { + + private final int id; + private final ArmorStand entity; + private final Location location; + + private String text = UUID.randomUUID().toString(); + + protected CoreHologramNode(int id, Location location) { + this.id = id; + this.location = location; + this.entity = this.craftEntity(); + } + + protected CoreHologramNode(int id, Location location, String text) { + this(id, location); + this.text = text; + } + + @Override + public int getId() { + return id; + } + + @Override + public ArmorStand getEntity() { + return entity; + } + + @Override + public Location getLocation() { + return location; + } + + @Override + public String getText() { + return text; + } + + @Override + public void setText(String text) { + this.text = Utils.f(text); + this.entity.setCustomName(this.text); + } + + private ArmorStand craftEntity() { + HologramManager.CHUNKS.add(this.location.getChunk()); + this.location.getChunk().load(); + ArmorStand a = this.location.getWorld().spawn(this.location, ArmorStand.class); + a.setGravity(false); + a.setVisible(false); + a.setCustomName(this.text); + a.setCustomNameVisible(true); + a.setRemoveWhenFarAway(false); + a.setInvulnerable(true); + a.setAI(false); + a.setMarker(true); + a.setSmall(true); + + a.setMetadata("CoreHologram", new FixedMetadataValue(Vice.getInstance(), this)); + + return a; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/hologram/Hologram.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/hologram/Hologram.java new file mode 100644 index 0000000..f47fa9c --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/hologram/Hologram.java @@ -0,0 +1,27 @@ +package net.grandtheftmc.vice.hologram; + +import net.grandtheftmc.vice.hologram.exception.HologramDuplicateNodeException; +import org.bukkit.Location; +import org.bukkit.entity.Player; + +import java.util.List; + +public interface Hologram { + + int getId(); + Location getOrigin(); + + List<HologramNode> getNodes(); + HologramNode getNode(int id); + + void spawn(Player player); + void refresh(); + void refresh(int nodeId); + void refresh(Player player); + void refresh(int nodeId, Player player); + void destroy(); + + HologramNode addNode(int id) throws HologramDuplicateNodeException; + HologramNode addNode(int id, String text) throws HologramDuplicateNodeException; + HologramNode addNode(HologramNode node) throws HologramDuplicateNodeException; +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/hologram/HologramManager.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/hologram/HologramManager.java new file mode 100644 index 0000000..2d505f2 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/hologram/HologramManager.java @@ -0,0 +1,269 @@ +package net.grandtheftmc.vice.hologram; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.ProtocolLibrary; +import com.comphenix.protocol.events.ListenerPriority; +import com.comphenix.protocol.events.PacketAdapter; +import com.comphenix.protocol.events.PacketEvent; +import com.comphenix.protocol.wrappers.WrappedDataWatcher; +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; +import com.massivecraft.factions.P; +import net.grandtheftmc.core.util.Component; +import net.grandtheftmc.core.wrapper.packet.out.WrapperPlayServerEntityDestroy; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.hologram.event.HologramReceiveEvent; +import net.grandtheftmc.vice.hologram.exception.HologramDuplicateException; +import net.grandtheftmc.vice.hologram.exception.HologramDuplicateNodeException; +import net.minecraft.server.v1_12_R1.PacketPlayOutEntityMetadata; +import org.bukkit.Bukkit; +import org.bukkit.Chunk; +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.entity.ArmorStand; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.entity.EntitySpawnEvent; +import org.bukkit.event.player.PlayerArmorStandManipulateEvent; +import org.bukkit.event.world.ChunkUnloadEvent; +import org.bukkit.plugin.java.JavaPlugin; + +import java.util.HashSet; +import java.util.List; +import java.util.UUID; + +public class HologramManager implements Component<HologramManager, Vice> { + + protected static final HashSet<Chunk> CHUNKS = Sets.newHashSet(); + private final List<Hologram> holograms; + + public HologramManager(JavaPlugin plugin) { + this.holograms = Lists.newArrayList(); + + Bukkit.getPluginManager().registerEvents(this, plugin); + ProtocolLibrary.getProtocolManager().addPacketListener(new PacketAdapter(Vice.getInstance(), ListenerPriority.NORMAL, PacketType.Play.Server.ENTITY_METADATA) { + @Override + public void onPacketSending(PacketEvent event) { + int id = event.getPacket().getIntegers().read(0); + HologramData data = getById(id); + if (data == null) { + ArmorStand found = getEntityById(id); + if (found == null) return; + if (found.getCustomName() == null) return; + + String[] components = found.getCustomName().split("-"); + if (components.length == 5) { + + if (found.hasMetadata("CoreHologram")) { + CoreHologramNode node = (CoreHologramNode) found.getMetadata("CoreHologram").get(0).value(); + if (node == null) { + System.out.println("Node is null!"); + return; + } + + System.out.println("Found - " + node.getText()); + return; + } + + System.out.println("Doesn't consist of 'CoreHologram' --- " + found.getCustomName()); + + WrapperPlayServerEntityDestroy destroy = new WrapperPlayServerEntityDestroy(); + destroy.setEntityId(found.getEntityId()); + for (Player player : Bukkit.getOnlinePlayers()) { + destroy.sendPacket(player); + } + found.remove(); + } + return; + } + + HologramReceiveEvent receiveEvent = new HologramReceiveEvent(event.getPlayer(), data.getHologram(), data.getNode()); + Bukkit.getPluginManager().callEvent(receiveEvent); + if (receiveEvent.isCancelled()) { + event.setCancelled(true); + WrapperPlayServerEntityDestroy destroy = new WrapperPlayServerEntityDestroy(); + destroy.setEntityId(id); + destroy.sendPacket(event.getPlayer()); + } + + WrappedDataWatcher dataWatcher = new WrappedDataWatcher(); + dataWatcher.setEntity(data.getNode().getEntity()); + + WrappedDataWatcher.Serializer byteSerializer = WrappedDataWatcher.Registry.get(Byte.class); + WrappedDataWatcher.Serializer booleanSerializer = WrappedDataWatcher.Registry.get(Boolean.class); + WrappedDataWatcher.Serializer stringSerializer = WrappedDataWatcher.Registry.get(String.class); + + dataWatcher.setObject(new WrappedDataWatcher.WrappedDataWatcherObject(0, byteSerializer), (byte) 0x20); //Invisible + dataWatcher.setObject(new WrappedDataWatcher.WrappedDataWatcherObject(2, stringSerializer), receiveEvent.getText()); // Set custom name + dataWatcher.setObject(new WrappedDataWatcher.WrappedDataWatcherObject(3, booleanSerializer), receiveEvent.doDisplay()); // Set custom name visible + + event.getPacket().getWatchableCollectionModifier().write(0, dataWatcher.getWatchableObjects()); + } + }); + } + + @Override + public HologramManager onDisable(Vice plugin) { + this.holograms.forEach(Hologram::destroy); + return this; + } + + /** + * Create a Hologram. + * + * @return Hologram + */ + public Hologram create(int id, Location origin, HologramNode... nodes) throws HologramDuplicateException { + if (this.holograms.stream().anyMatch(h -> h.getId() == id)) + throw new HologramDuplicateException(id); + + for (Entity entity : origin.getWorld().getNearbyEntities(origin, 0.5, 15, 0.5)) { + if (entity instanceof ArmorStand && entity.getCustomName() != null) { + String[] components = entity.getCustomName().split("-"); + if (components.length == 5) { + + WrapperPlayServerEntityDestroy destroy = new WrapperPlayServerEntityDestroy(); + destroy.setEntityId(entity.getEntityId()); + for (Player player : Bukkit.getOnlinePlayers()) { + destroy.sendPacket(player); + } + + entity.remove(); + } + } + } + + Hologram hologram = new CoreHologram(id, origin); + for (HologramNode node : nodes) { + try { + hologram.addNode(node); + } catch (HologramDuplicateNodeException e) { + e.printStackTrace(); + } + } + + this.holograms.add(hologram); + System.out.println("HOLOGRAM CREATED, ID " + hologram.getId()); + + return hologram; + } + + public Hologram getHologram(int id) { + return this.holograms.stream().filter(h -> h.getId() == id).findFirst().orElse(null); + } + + public HologramData getByUniqueId(UUID uuid) { + for (Hologram hologram : this.holograms) { + for (HologramNode node : hologram.getNodes()) { + if (node.getEntity() == null) continue; + if (node.getEntity().getUniqueId().equals(uuid)) { + return new HologramData(hologram, node); + } + } + } + return null; + } + + public HologramData getById(int entityId) { + for (Hologram hologram : this.holograms) { + for (HologramNode node : hologram.getNodes()) { + if (node.getEntity() == null) continue; + if (node.getEntity().getEntityId() == entityId) { + return new HologramData(hologram, node); + } + } + } + return null; + } + + public boolean isHologramEntity(ArmorStand entity) { + for (Hologram hologram : this.holograms) { + for (HologramNode node : hologram.getNodes()) { + if (node.getEntity() == null) continue; + if (node.getEntity().getUniqueId().equals(entity.getUniqueId())) { + return true; + } + } + } + return false; + } + + @EventHandler (ignoreCancelled = true) + protected final void onArmorstandManipulate(PlayerArmorStandManipulateEvent event) { + if (event.getRightClicked() == null) return; + if (this.isHologramEntity(event.getRightClicked())) { + event.setCancelled(true); + } + } + + @EventHandler (priority = EventPriority.HIGHEST) + protected final void onEntityDamage(EntityDamageEvent event) { + if (event.getEntity().getType() != EntityType.ARMOR_STAND) return; + + if (event.getCause() != EntityDamageEvent.DamageCause.CUSTOM && this.isHologramEntity(((ArmorStand) event.getEntity()))) { + event.setCancelled(true); + } + } + + @EventHandler (priority = EventPriority.HIGHEST) + protected final void onEntitySpawn(EntitySpawnEvent event) { + if (!event.isCancelled()) return; + if (event.getEntity().getType() != EntityType.ARMOR_STAND) return; + + if (this.isHologramEntity(((ArmorStand) event.getEntity()))) { + event.setCancelled(false); + } + } + + @EventHandler + protected final void onChunkUnload(ChunkUnloadEvent event) { + for (Chunk chunk : CHUNKS) { + if (event.getChunk().equals(chunk)) { + event.setCancelled(true); + break; + } + } + +// for (Hologram hologram : this.holograms) { +// for (HologramNode node : hologram.getNodes()) { +// if (node.getEntity() == null) continue; +// if (node.getEntity().getLocation().getChunk().equals(event.getChunk())) { +// event.setCancelled(false); +// break; +// } +// } +// } + } + + private class HologramData { + private final Hologram hologram; + private final HologramNode node; + + HologramData(Hologram hologram, HologramNode node) { + this.hologram = hologram; + this.node = node; + } + + Hologram getHologram() { + return hologram; + } + + HologramNode getNode() { + return node; + } + } + + public ArmorStand getEntityById(int id) { + for (World world : Bukkit.getWorlds()) { + for (ArmorStand armorStand : world.getEntitiesByClass(ArmorStand.class)) { + if (armorStand.getEntityId() == id) return armorStand; + } + } + + return null; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/hologram/HologramNode.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/hologram/HologramNode.java new file mode 100644 index 0000000..72aba7e --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/hologram/HologramNode.java @@ -0,0 +1,18 @@ +package net.grandtheftmc.vice.hologram; + +import net.grandtheftmc.core.Utils; +import org.bukkit.Location; +import org.bukkit.entity.ArmorStand; + +import java.util.UUID; + +public interface HologramNode { + + int getId(); + + ArmorStand getEntity(); + Location getLocation(); + String getText(); + + void setText(String text); +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/hologram/TypeWriter.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/hologram/TypeWriter.java new file mode 100644 index 0000000..86e3d94 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/hologram/TypeWriter.java @@ -0,0 +1,64 @@ +package net.grandtheftmc.vice.hologram; + +import java.util.ArrayList; +import java.util.Arrays; + +public class TypeWriter { + + private static final char[] COLORS = {'l', 'm', 'n', 'k', 'o', 'r', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; + + private final String text; + private int progress = 0, waitTicks = 0; + + public TypeWriter(String text, int waitTicks) { + this.text = text; + this.waitTicks = waitTicks; + } + + public String next() { + if (this.progress >= this.text.length() - 1) { + if (this.progress >= (this.text.length() - 1) + this.waitTicks) { + this.progress = 0; + } else { + this.progress++; + return this.text; + } + } + + if (this.isColor(this.progress)) { + this.progress += 2; + return next(); + } + + return this.text.substring(0, this.progress++ + 1); + } + + private boolean isColor(int prog) { + char[] chars = this.text.toCharArray(); + if (chars[prog] == '&') { + char next = chars[prog + 1]; + for (char color : COLORS) { + if (next == color) { + return true; + } + } + } + + return false; + } + + public static void main(String[] args) { +// TypeWriter writer = new TypeWriter("&d&lVice&f&lMC Season &d&l2", 5); +// for (int i = 0; i < 50; i++) +// System.out.println(writer.next()); + + ArrayList<String> arrayList = new ArrayList<>(); + for (int i = 0; i < 63; i++) + arrayList.add("" + i); + + arrayList.subList(3, 27).clear(); + System.out.println(Arrays.toString(arrayList.toArray(new String[arrayList.size()]))); + + //CACTUS,COAL,AIR,RECORD_7,RECORD_7,AIR,AIR,CHEST,COAL,AIR,CHEST,CHEST,AIR,AIR,AIR,AIR,AIR,AIR,AIR,AIR,AIR,AIR,AIR,AIR,AIR,AIR,AIR,AIR,AIR,AIR,COAL,CHEST,AIR,AIR,AIR,AIR,AIR,AIR,WATCH + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/hologram/event/HologramReceiveEvent.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/hologram/event/HologramReceiveEvent.java new file mode 100644 index 0000000..61f208f --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/hologram/event/HologramReceiveEvent.java @@ -0,0 +1,64 @@ +package net.grandtheftmc.vice.hologram.event; + +import net.grandtheftmc.core.Utils; +import net.grandtheftmc.core.events.CoreEvent; +import net.grandtheftmc.vice.hologram.Hologram; +import net.grandtheftmc.vice.hologram.HologramNode; +import org.bukkit.entity.Player; +import org.bukkit.event.Cancellable; + +public class HologramReceiveEvent extends CoreEvent implements Cancellable { + + private final Player player; + private final Hologram hologram; + private final HologramNode node; + + private String text; + private boolean c, display = true; + + public HologramReceiveEvent(Player player, Hologram hologram, HologramNode node) { + super(false); + this.player = player; + this.hologram = hologram; + this.node = node; + this.text = node.getText(); + } + + public Player getPlayer() { + return player; + } + + public Hologram getHologram() { + return hologram; + } + + public HologramNode getNode() { + return node; + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = Utils.f(text); + } + + public boolean doDisplay() { + return display; + } + + public void setDisplay(boolean display) { + this.display = display; + } + + @Override + public boolean isCancelled() { + return this.c; + } + + @Override + public void setCancelled(boolean b) { + this.c = b; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/hologram/exception/HologramDuplicateException.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/hologram/exception/HologramDuplicateException.java new file mode 100644 index 0000000..bd631b4 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/hologram/exception/HologramDuplicateException.java @@ -0,0 +1,13 @@ +package net.grandtheftmc.vice.hologram.exception; + +public class HologramDuplicateException extends Exception { + + /** + * Constructs a new exception with the specified detail message. The + * cause is not initialized, and may subsequently be initialized by + * a call to {@link #initCause}. + */ + public HologramDuplicateException(int id) { + super("A Hologram with id " + id + " already exists!"); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/hologram/exception/HologramDuplicateNodeException.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/hologram/exception/HologramDuplicateNodeException.java new file mode 100644 index 0000000..dbe373d --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/hologram/exception/HologramDuplicateNodeException.java @@ -0,0 +1,15 @@ +package net.grandtheftmc.vice.hologram.exception; + +import net.grandtheftmc.vice.hologram.Hologram; + +public class HologramDuplicateNodeException extends Exception { + + /** + * Constructs a new exception with the specified detail message. The + * cause is not initialized, and may subsequently be initialized by + * a call to {@link #initCause}. + */ + public HologramDuplicateNodeException(Hologram hologram, int id) { + super("Hologram[" + hologram.getId() + "] already has a Node with id " + id); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/AmmoType.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/AmmoType.java new file mode 100644 index 0000000..001e79c --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/AmmoType.java @@ -0,0 +1,74 @@ +package net.grandtheftmc.vice.items; + +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; + +import net.grandtheftmc.vice.Vice; + +import java.util.Arrays; + +public enum AmmoType { + + PISTOL("pistolAmmo"), SMG("smgAmmo"), SHOTGUN("shotgunShell"), ASSAULT_RIFLE("assaultRifleAmmo"), MG( + "mgAmmo"), SNIPER("sniperRifleAmmo"), ROCKET("rocket"), MINIGUN("minigunAmmo"), GRENADE("grenade", true); + + private final String gameItem; + private final boolean inInventory; + + AmmoType(String gameItem) { + this.gameItem = gameItem; + this.inInventory = false; + } + + AmmoType(String gameItem, boolean inInventory) { + this.gameItem = gameItem; + this.inInventory = inInventory; + } + + public String getGameItemName() { + return this.gameItem; + } + + public GameItem getGameItem() { + return Vice.getItemManager().getItem(this.gameItem); + } + + public static AmmoType[] getTypes() { + return values(); + } + + public static AmmoType getAmmoType(Material material, short dataValue) { + for (AmmoType type : AmmoType.getTypes()) { + ItemStack item = type.getGameItem().getItem(); + if (material == item.getType() && dataValue == item.getDurability()) + return type; + } + return null; + } + + public static AmmoType getAmmoType(ItemStack itemStack) { + for (AmmoType type : AmmoType.getTypes()) { + ItemStack item = type.getGameItem().getItem(); + if (itemStack.getType() == item.getType() && itemStack.getDurability() == item.getDurability() && (itemStack.hasItemMeta() && itemStack.getItemMeta().hasDisplayName() && itemStack.getItemMeta().getDisplayName().contains("Ammo"))) + return type; + } + return null; + } + + public static AmmoType getAmmoType(String ammoType) { + return Arrays.stream(AmmoType.getTypes()).filter(type -> type.toString().equalsIgnoreCase(ammoType)).findFirst().orElse(null); + } + + public static AmmoType getAmmoTypeFriendly(String ammoType) { + return Arrays.stream(AmmoType.getTypes()).filter(type -> type.toString().equalsIgnoreCase(ammoType) || type.gameItem.equalsIgnoreCase(ammoType)).findFirst().orElse(null); + } + + public static boolean isAmmo(ItemStack item) { + return getAmmoType(item.getType(), item.getDurability()) != null; + } + + public boolean isInInventory() { + return this.inInventory; + } + +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/ArmorType.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/ArmorType.java new file mode 100644 index 0000000..7033c3c --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/ArmorType.java @@ -0,0 +1,77 @@ +package net.grandtheftmc.vice.items; + +import net.grandtheftmc.core.util.Slot; +import org.bukkit.inventory.ItemStack; + +import java.util.Arrays; + +/** + * Created by Timothy Lampen on 7/6/2017. + */ +public enum ArmorType { + HELMET(Slot.HEAD, 5, "titaniumhelmet", "tacticalmask", "pimpcrown", "nightvisiongoggles", "baseballcap"), + CHESTPLATE(Slot.CHEST, 6, "titaniumvest", "ceramicvest", "kevlarvest", "shirt"), + LEGGINGS(Slot.LEGS, 7, "pants"), + BOOTS(Slot.FEET, 8, "nikes", "samurisairjordans"), + JETPACK(Slot.CHEST, 6, "jetpack"), + WINGSUIT(Slot.CHEST, 6, "wingsuit"); + + private final Slot slot; + private final String[] gameItems; + private final int rawSlot; + + ArmorType(Slot slot, int rawSlot, String... gameItems) { + this.slot = slot; + this.rawSlot =rawSlot; + this.gameItems = gameItems; + } + + public String getName() { + String[] a = this.toString().split("_"); + String s = ""; + for (int i = 0; i < a.length; ++i) { + s = s + a[i].charAt(0) + a[i].substring(1).toLowerCase() + (i == a.length - 1 ? "" : " "); + } + return s; + } + + + public Slot getSlot() { + return this.slot; + } + + public String[] getGameItems() { + return this.gameItems; + } + + public boolean hasGameItem(String gameItem) { + return Arrays.stream(this.gameItems).anyMatch(s -> s.equalsIgnoreCase(gameItem)); + } + + public static ArmorType getArmorType(String gameItem) { + return Arrays.stream(ArmorType.values()).filter(type -> type.hasGameItem(gameItem)).findFirst().orElse(null); + } + + public int getRawSlot() { + return rawSlot; + } + + public static ArmorType matchType(ItemStack is){ + if(is==null) + return null; + String type = is.getType().toString().toLowerCase(); + if(type.contains("chestplate")){ + return ArmorType.CHESTPLATE; + } + else if(type.contains("leggings")){ + return ArmorType.LEGGINGS; + } + else if(type.contains("boots")){ + return ArmorType.BOOTS; + } + else if(type.contains("helmet")){ + return ArmorType.HELMET; + } + return null; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/ArmorUpgrade.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/ArmorUpgrade.java new file mode 100644 index 0000000..e650e28 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/ArmorUpgrade.java @@ -0,0 +1,325 @@ +package net.grandtheftmc.vice.items; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.util.Attribute; +import net.grandtheftmc.core.util.AttributeModifier; +import net.grandtheftmc.core.util.ItemAttributes; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.users.ViceRank; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; +import org.bukkit.scheduler.BukkitRunnable; + +import java.util.*; + + +/** + * Created by Liam on 25/10/2016. + */ +public enum ArmorUpgrade { + + LIGHT(35000, ViceRank.THUG, UserRank.VIP, ArmorType.CHESTPLATE), + DURABLE(30000, ViceRank.DEALER, UserRank.VIP, ArmorType.HELMET, ArmorType.CHESTPLATE, ArmorType.LEGGINGS, ArmorType.BOOTS), + ULTRA_LIGHT(100000, ViceRank.DEALER, UserRank.PREMIUM, ArmorType.CHESTPLATE), + TANK(40000, ViceRank.DEALER, UserRank.PREMIUM, ArmorType.HELMET, ArmorType.CHESTPLATE, ArmorType.LEGGINGS, ArmorType.BOOTS), + REINFORCED(25000, ViceRank.DEALER, UserRank.ELITE, ArmorType.HELMET, ArmorType.CHESTPLATE, ArmorType.JETPACK, ArmorType.WINGSUIT),//do not change types of armor from other than chestplte slot. If you do you have to check the glitch checker in armorequip (that checks if the max health != 20 or 30 + BOMB_SQUAD(50000, ViceRank.DEALER, UserRank.ELITE, ArmorType.HELMET, ArmorType.CHESTPLATE), + EXOSKELETON(175000, ViceRank.DEALER, UserRank.SPONSOR, ArmorType.CHESTPLATE), + ENHANCED(125000, ViceRank.GODFATHER, UserRank.SUPREME, ArmorType.CHESTPLATE), + NEON(50000, null, UserRank.VIP, ArmorType.HELMET, ArmorType.CHESTPLATE, ArmorType.LEGGINGS, ArmorType.BOOTS, ArmorType.JETPACK, ArmorType.WINGSUIT), + LEAD_LINED(1000000, null, null, ArmorType.HELMET, ArmorType.CHESTPLATE, ArmorType.LEGGINGS, ArmorType.BOOTS, ArmorType.JETPACK, ArmorType.WINGSUIT); + + + private final double price; + private final ViceRank rank; + private final UserRank userRank; + private final ArmorType[] types; + + ArmorUpgrade(double price, ViceRank rank, UserRank userRank, ArmorType... types) { + this.price = price; + this.rank = rank; + this.userRank = userRank; + this.types = types; + } + + public static void reloadArmorUpgrades(Player player){ + player.getAttribute(org.bukkit.attribute.Attribute.GENERIC_MAX_HEALTH).setBaseValue(player.getAttribute(org.bukkit.attribute.Attribute.GENERIC_MAX_HEALTH).getDefaultValue()); + for (PotionEffect e : player.getActivePotionEffects()) { + if(e.getType()==PotionEffectType.NIGHT_VISION) + continue; + player.removePotionEffect(e.getType()); + } + new BukkitRunnable() { + @Override + public void run() { + for(ItemStack is : player.getInventory().getArmorContents()){ + for(ArmorUpgrade upgrade : ArmorUpgrade.getArmorUpgrades(is)){ + if(upgrade==ArmorUpgrade.ENHANCED){ + player.getAttribute(org.bukkit.attribute.Attribute.GENERIC_MAX_HEALTH).setBaseValue(player.getAttribute(org.bukkit.attribute.Attribute.GENERIC_MAX_HEALTH).getBaseValue()+10); + } + HashSet<PotionEffect> effects = upgrade.getPotionEffects(); + for (PotionEffect effect : effects) { + if(player.hasPotionEffect(effect.getType())){ + int base = player.getPotionEffect(effect.getType()).getAmplifier()==0 ? 1 : player.getPotionEffect(effect.getType()).getAmplifier(); + int effectAmp = effect.getAmplifier()==0 ? 1 : effect.getAmplifier(); + player.removePotionEffect(effect.getType()); + player.addPotionEffect(new PotionEffect(effect.getType(), Integer.MAX_VALUE, base+effectAmp)); + } + else{ + player.addPotionEffect(effect); + } + } + } + } + } + }.runTaskLater(Vice.getInstance(), 1); + } + + public double getPrice() { + return this.price; + } + + /* public double getPrice(GameItem item) { + Core.log(item.getSellPrice() + " / " + this.price); + return this.price * item.getSellPrice(); + }*/ + + public ViceRank getViceRank() { + return this.rank; + } + + public UserRank getUserRank() { + return this.userRank; + } + + public boolean canUseUpgrade(ViceRank rank, UserRank userRank) { + return this.rank == rank || rank.isHigherThan(this.rank) || this.userRank == userRank || userRank.isHigherThan(this.userRank) || (userRank==null && rank==null); + } + + public String getDisplayName() { + String[] a = this.toString().split("_"); + String s = ""; + for (int i = 0; i < a.length; ++i) { + s = s + a[i].charAt(0) + a[i].substring(1).toLowerCase() + (i == a.length - 1 ? "" : " "); + } + return s; + } + + public ArmorType[] getTypes() { + return this.types; + } + + public String getTypesString() { + String s = ""; + int length = this.types.length; + for (int i = 0; i < length; i++) { + ArmorType type = this.types[i]; + s += type.getName() + (i == length - 1 ? "" : i == length - 2 ? " or " : ", "); + } + return s; + } + + public static boolean isArmorUpgrade(String s) { + try { + ArmorUpgrade.valueOf(s); + } catch (IllegalArgumentException | NullPointerException e) { + return false; + } + return true; + } + + public static boolean playerHasArmorUpgrade(Player victim, ArmorUpgrade upgrade){ + ItemStack[] armor = victim.getInventory().getArmorContents(); + for (ItemStack itemStack : armor) { + if(itemStack==null) + continue; + HashSet<ArmorUpgrade> upgrades = ArmorUpgrade.getArmorUpgrades(itemStack); + if (upgrades.stream().anyMatch(up -> up == upgrade)) { + return true; + } + } + return false; + } + + //Does not return null when no upgrades, returns an empty set. + public static HashSet<ArmorUpgrade> getArmorUpgrades(ItemStack is) { + HashSet<ArmorUpgrade> returnSet = new HashSet<>(); + if (is==null || is.getItemMeta() == null || is.getItemMeta().getLore() == null) + return returnSet; + List<String> lore = is.getItemMeta().getLore(); + lore.stream().forEach(line -> { + line = ChatColor.stripColor(line); + if (line.equalsIgnoreCase("") || !ArmorUpgrade.isArmorUpgrade(line.toUpperCase().replace(" ", "_"))) + return; + returnSet.add(ArmorUpgrade.valueOf(line.toUpperCase().replace(" ", "_"))); + }); + + return returnSet; + } + + public boolean canBeUsedOn(ArmorType type) { + return Arrays.stream(this.types).anyMatch(t -> t == type); + } + + public boolean canBeUsedOn(String gameItem) { + return Arrays.stream(this.types).anyMatch(t -> t.hasGameItem(gameItem)); + } + + public HashSet<PotionEffect> getPotionEffects() { + HashSet<PotionEffect> effects = new HashSet<>(); + switch (this) { + case ULTRA_LIGHT: + effects.add(new PotionEffect(PotionEffectType.FAST_DIGGING, Integer.MAX_VALUE, 0)); + break; + case EXOSKELETON: + effects.add(new PotionEffect(PotionEffectType.REGENERATION, Integer.MAX_VALUE, 0)); + effects.add(new PotionEffect(PotionEffectType.INCREASE_DAMAGE, Integer.MAX_VALUE, 0)); + break; + case NEON: + effects.add(new PotionEffect(PotionEffectType.GLOWING, Integer.MAX_VALUE, 0, true, false)); + } + + return effects; + } + + public ItemStack getUpgradedItem(GameItem gameItem, ItemStack item) { + if (gameItem == null) return item; + ArmorType type = ArmorType.getArmorType(gameItem.getName()); + if (type == null) return item; + ItemAttributes att = new ItemAttributes(); + ItemMeta meta = item.getItemMeta(); + List<String> lore = new ArrayList<>(meta.hasLore() ? meta.getLore() : Collections.singletonList("")); + if (ArmorUpgrade.getArmorUpgrades(item).size() == 0) { + lore.add(Utils.f("&7Upgrades:")); + lore.add(" "); + } + lore.add(Utils.f("&b&l" + this.getDisplayName())); + meta.setLore(lore); + meta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES); + meta.addItemFlags(ItemFlag.HIDE_ENCHANTS); + switch (this) { + case NEON: + case ENHANCED: + case LEAD_LINED: + case EXOSKELETON: + att.getFromStack(item); + item = att.apply(item); + break; + case LIGHT: + att.getFromStack(item); + att.addModifier(new AttributeModifier(Attribute.MOVEMENT_SPEED, "LightSpeed", type.getSlot(), 0, 0.02, UUID.randomUUID())); + item = att.apply(item); + meta.addEnchant(Enchantment.DEPTH_STRIDER, 1, true); + break; + case ULTRA_LIGHT: + att.getFromStack(item); + att.addModifier(new AttributeModifier(Attribute.MOVEMENT_SPEED, "UltraLightSpeed", type.getSlot(), 0, 0.04, UUID.randomUUID())); + item = att.apply(item); + meta.addEnchant(Enchantment.DEPTH_STRIDER, meta.getEnchantLevel(Enchantment.DEPTH_STRIDER) + 2, true); + meta.addEnchant(Enchantment.DIG_SPEED, meta.getEnchantLevel(Enchantment.DIG_SPEED) + 1, true); + break; + case TANK: { + att.getFromStack(item); + att.addModifier(new AttributeModifier(Attribute.MOVEMENT_SPEED, "TankSpeed", type.getSlot(), 0, -0.04, UUID.randomUUID())); + att.addModifier(new AttributeModifier(Attribute.KNOCKBACK_RESISTANCE, "TankKnockback", type.getSlot(), 0, .5d, UUID.randomUUID())); + item = att.apply(item); + meta.addEnchant(Enchantment.PROTECTION_ENVIRONMENTAL, 9, true); + break; + } + case REINFORCED: { + att.getFromStack(item); + item = att.apply(item); + meta.addEnchant(Enchantment.PROTECTION_ENVIRONMENTAL, 4, true); + break; + } + case DURABLE: + att.getFromStack(item); + item = att.apply(item); +// NOT NEEDED AS NEW DURABILITY UPDATE AUTO APPLIES UNBREAKABLE +// meta.addItemFlags(ItemFlag.HIDE_UNBREAKABLE); +// meta.spigot().setUnbreakable(true); + break; + case BOMB_SQUAD: + att.getFromStack(item); + att.addModifier(new AttributeModifier(Attribute.MOVEMENT_SPEED, "BombSquadSpeed", type.getSlot(), 0, -0.02, UUID.randomUUID())); + att.addModifier(new AttributeModifier(Attribute.KNOCKBACK_RESISTANCE, "BombSquadKnockback", type.getSlot(), 0, 0.5, UUID.randomUUID())); + item = att.apply(item); + meta.addEnchant(Enchantment.PROTECTION_EXPLOSIONS, 5, true); + meta.addEnchant(Enchantment.PROTECTION_FIRE, 5, true); + break; + } + item.setItemMeta(meta); + att.removeModifier(new AttributeModifier(Attribute.ARMOR)); + att.removeModifier(new AttributeModifier(Attribute.ARMOR_THOUGHNESS)); + att.addModifier(new AttributeModifier(Attribute.ARMOR, "darmor", type.getSlot(), 0, getDefaultArmorAttribute(item.getType()), UUID.randomUUID())); + att.addModifier(new AttributeModifier(Attribute.ARMOR_THOUGHNESS, "darmorthoughness", type.getSlot(), 0, getDefaultArmorToughness(item.getType()), UUID.randomUUID())); + item = att.apply(item); + //Utils.b(this.enchantment == null ? "null" : this.enchantment.getName()); + // item.addUnsafeEnchantment(this.enchantment, 1); + // for (Enchantment e : item.getEnchantments().keySet()) + // Utils.b(e.getName()); + return item; + } + + public static ArmorUpgrade getArmorUpgrade(String s) { + return Arrays.stream(ArmorUpgrade.values()).filter(u -> u.toString().equalsIgnoreCase(s)).findFirst().orElse(null); + } + + public static ArmorUpgrade getArmorUpgradeFromDisplayName(String s) { + return Arrays.stream(ArmorUpgrade.values()).filter(u -> u.toString().replace("_", " ").equalsIgnoreCase(s)).findFirst().orElse(null); + } + + private static int getDefaultArmorAttribute(Material material){ + switch (material){ + case IRON_BOOTS: + case LEATHER_LEGGINGS: + case CHAINMAIL_HELMET: + case GOLD_HELMET: + return 2; + case GOLD_CHESTPLATE: + case CHAINMAIL_CHESTPLATE: + case IRON_LEGGINGS: + return 5; + case GOLD_LEGGINGS: + case DIAMOND_HELMET: + case DIAMOND_BOOTS: + case LEATHER_CHESTPLATE: + return 3; + case CHAINMAIL_LEGGINGS: + return 4; + case LEATHER_BOOTS: + case LEATHER_HELMET: + case CHAINMAIL_BOOTS: + case IRON_HELMET: + case GOLD_BOOTS: + return 1; + case IRON_CHESTPLATE: + case DIAMOND_LEGGINGS: + return 6; + case DIAMOND_CHESTPLATE: + return 8; + } + return 0; + } + + private static int getDefaultArmorToughness(Material material){ + switch (material){ + case DIAMOND_CHESTPLATE: + case DIAMOND_LEGGINGS: + case DIAMOND_HELMET: + case DIAMOND_BOOTS: + return 2; + } + return 0; + } + +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/BackpackManager.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/BackpackManager.java new file mode 100644 index 0000000..c41a816 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/BackpackManager.java @@ -0,0 +1,121 @@ +package net.grandtheftmc.vice.items; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.ViceUtils; +import net.grandtheftmc.vice.users.CopRank; +import net.grandtheftmc.vice.users.ViceRank; +import net.grandtheftmc.vice.users.ViceUser; +import net.grandtheftmc.vice.users.storage.BooleanStorageType; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryCloseEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; + +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; + +public class BackpackManager implements Listener { + + private final Map<Integer, Inventory> corpses = new HashMap<>(); + + public void openBackpack(Player player) { + this.openBackpack(player, Vice.getUserManager().getLoadedUser(player.getUniqueId()), Core.getUserManager().getLoadedUser(player.getUniqueId())); + } + + public Inventory getBackpack(Player player, boolean monitor) { + ViceUser viceUser = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + User coreUser = Core.getUserManager().getLoadedUser(player.getUniqueId()); + int size = 9 * ViceUtils.getBackpackRows(coreUser.getUserRank()); + Inventory inv = Bukkit.createInventory(null, size, monitor ? Utils.f(player.getName()) : Utils.f("&6&lBackpack")); + ItemStack[] backpackContents = viceUser.getBackpackContents(); + if (backpackContents != null) + for (int i = 0; i < backpackContents.length && i < size; i++) + inv.setItem(i, backpackContents[i]); + return inv; + } + + public void openBackpack(Player player, ViceUser user, User u) { + if (user.isArrested()) { + player.sendMessage(Lang.JAIL.f("&7You can't open your backpack in jail!")); + return; + } + if (user.isInCombat()) { + player.sendMessage(Lang.COMBATTAG.f("&7You can't open your backpack in combat!")); + return; + } + if (user.getBooleanFromStorage(BooleanStorageType.BACKPACK_OPEN)) { + player.sendMessage(Lang.VICE.f("&7Your backpack may not be opened at this time!")); + return; + } + if (player.getOpenInventory() != null + && Objects.equals("Backpack", ChatColor.stripColor(player.getOpenInventory().getTitle()))) + return; + Inventory inv = this.getBackpack(player, false); + player.openInventory(inv); + user.setBooleanToStorage(BooleanStorageType.BACKPACK_OPEN, true); + } + + @EventHandler + public void onClose(InventoryCloseEvent e) { + Inventory inv = e.getInventory(); + if (!Objects.equals("Backpack", ChatColor.stripColor(inv.getTitle())) && Bukkit.getPlayer(inv.getTitle()) != null) { + Player target = Bukkit.getPlayer(inv.getTitle()); + if (target.getOpenInventory() != null && Objects.equals("Backpack", ChatColor.stripColor(target.getOpenInventory().getTitle()))) + target.getOpenInventory().close(); + ViceUser user = Vice.getUserManager().getLoadedUser(target.getUniqueId()); + user.setBackpackContents(inv.getContents()); + user.setBooleanToStorage(BooleanStorageType.BACKPACK_OPEN, false); + return; + } + if (!"backpack".equalsIgnoreCase(ChatColor.stripColor(inv.getTitle()))) + return; + Player player = (Player) e.getPlayer(); + ViceUser user = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + user.setBackpackContents(inv.getContents()); + user.setBooleanToStorage(BooleanStorageType.BACKPACK_OPEN, false); + } + + private final int[] glassSlots = new int[]{0, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17}; + private final ItemStack glass = Utils.createItem(Material.STAINED_GLASS_PANE, 7, "&a"); + + public void kitPreview(Player player, Kit kit) { + String name = kit.getName(); + UserRank ur = UserRank.getUserRankOrNull(kit.getName()); + ViceRank rank = ViceRank.getRankOrNull(kit.getName()); + CopRank copRank = CopRank.getRankOrNull(kit.getName()); + if (copRank != null) + name = copRank.getColoredNameBold(); + else if (ur != null) + name = ur.getColoredNameBold(); + else if (rank != null) + name = rank.getColoredNameBold(); + Inventory inv = Bukkit.createInventory(null, 54, Utils.f("&b&lKit Preview: " + name)); + + for (int i : this.glassSlots) + inv.setItem(i, this.glass); + inv.setItem(1, kit.getHelmet() == null ? this.glass : kit.getHelmet().getItem().getItem()); + inv.setItem(2, kit.getChestPlate() == null ? this.glass : kit.getChestPlate().getItem().getItem()); + inv.setItem(3, kit.getLeggings() == null ? this.glass : kit.getLeggings().getItem().getItem()); + inv.setItem(4, kit.getBoots() == null ? this.glass : kit.getBoots().getItem().getItem()); + inv.setItem(6, kit.getOffHand() == null ? this.glass : kit.getOffHand().getItem().getItem()); + for (int i = 0; i < kit.getItems().size(); i++) { + if (i < 9) + inv.setItem(45 + i, kit.getItems().get(i)); + else + inv.setItem(9 + i, kit.getItems().get(i)); + } + player.openInventory(inv); + } + +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/GameItem.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/GameItem.java new file mode 100644 index 0000000..c231ac3 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/GameItem.java @@ -0,0 +1,328 @@ +package net.grandtheftmc.vice.items; + +import com.j0ach1mmall3.jlib.methods.Parsing; +import com.j0ach1mmall3.wastedvehicles.api.VehicleProperties; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.guns.weapon.Weapon; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.drugs.Drug; +import net.grandtheftmc.vice.drugs.DrugService; +import net.grandtheftmc.vice.drugs.items.DrugItem; +import net.grandtheftmc.vice.utils.ItemStackUtil; +import org.bukkit.Material; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import java.util.*; + +public class GameItem { + + private final ItemType type; + private final String name; + private ItemStack item; + private String weaponOrVecicleOrDrug; + private String displayName; + private String shopCategory; + private double sellPrice; + private AmmoType ammoType; + private ArmorUpgrade armorUpgrade; + private boolean hideDurability; + private boolean canStack; + private int machineID; + + public GameItem(String name, ItemStack item, String displayName) { + this.type = ItemType.ITEMSTACK; + this.name = name; + this.item = item; + this.displayName = displayName; + this.hideDurability = false; + } + + public GameItem(String name, ItemStack item, String displayName, double sellPrice) { + this.type = ItemType.ITEMSTACK; + this.name = name; + this.item = item; + this.displayName = displayName; + this.sellPrice = sellPrice; + this.hideDurability = false; + } + + public GameItem(String name, ItemStack item, String displayName, double sellPrice, boolean hideDurability, boolean canStack, String category) { + this.type = ItemType.ITEMSTACK; + this.name = name; + this.shopCategory = category; + this.item = item; + this.displayName = displayName; + this.sellPrice = sellPrice; + this.hideDurability = hideDurability; + this.canStack = canStack; + } + + public GameItem(String name, ItemStack item, String displayName, double sellPrice, boolean hideDurability, boolean canStack) { + this.type = ItemType.ITEMSTACK; + this.name = name; + this.item = item; + this.displayName = displayName; + this.sellPrice = sellPrice; + this.hideDurability = hideDurability; + this.canStack = canStack; + } + + public GameItem(String name, ItemStack item, AmmoType type, String displayName, boolean hideDurability, boolean canStack) { + this.type = ItemType.AMMO; + this.name = name; + this.item = item; + this.ammoType = type; + this.displayName = displayName; + this.hideDurability = hideDurability; + this.canStack = canStack; + } + + public GameItem(String name, ItemStack item, AmmoType type, String displayName, double sellPrice, boolean hideDurability) { + this.type = ItemType.AMMO; + this.name = name; + this.item = item; + this.ammoType = type; + this.displayName = displayName; + this.sellPrice = sellPrice; + this.hideDurability = hideDurability; + } + + public GameItem(ItemType type, String name, String weaponOrVecicleOrDrug, String displayName) { + this.type = type; + this.name = name; + this.displayName = displayName; + this.weaponOrVecicleOrDrug = weaponOrVecicleOrDrug; + this.hideDurability = false; + this.getItem(); + } + + public GameItem(ItemType type, String name, String weaponOrVecicleOrDrug, String displayName, boolean hideDurability) { + this.type = type; + this.name = name; + this.displayName = displayName; + this.weaponOrVecicleOrDrug = weaponOrVecicleOrDrug; + this.hideDurability = hideDurability; + this.getItem(); + } + + public GameItem(ItemType type, String name, String weaponOrVecicleOrDrug, String displayName, double sellPrice) { + this.type = type; + this.name = name; + this.displayName = displayName; + this.weaponOrVecicleOrDrug = weaponOrVecicleOrDrug; + this.sellPrice = sellPrice; + this.hideDurability = false; + this.getItem(); + } + + public GameItem(ItemType type, String name, String weaponOrVecicleOrDrug, String displayName, double sellPrice, + boolean hideDurability) { + this.type = type; + this.name = name; + this.displayName = displayName; + this.weaponOrVecicleOrDrug = weaponOrVecicleOrDrug; + this.sellPrice = sellPrice; + this.hideDurability = hideDurability; + this.getItem(); + } + + /** + * @apiNote used soley for machines. + */ + public GameItem(String name, int machineID, String displayName, double sellPrice, boolean hideDurability) { + this.type = ItemType.MACHINE; + this.name = name; + this.displayName = displayName; + this.machineID = machineID; + this.sellPrice = sellPrice; + this.hideDurability = hideDurability; + this.getItem(); + } + + public GameItem(ItemType type, String name, String weaponOrVecicleOrDrug, String displayName, double sellPrice, + boolean hideDurability, boolean canStack) { + this.type = type; + this.name = name; + this.displayName = displayName; + this.weaponOrVecicleOrDrug = weaponOrVecicleOrDrug; + this.sellPrice = sellPrice; + this.hideDurability = hideDurability; + this.canStack = canStack; + this.getItem(); + } + + public GameItem(String name, ArmorUpgrade armorUpgrade, String displayName) { + this.type = ItemType.ARMOR_UPGRADE; + this.name = name; + this.armorUpgrade = armorUpgrade; + this.displayName = displayName; + this.hideDurability = false; + this.getItem(); + } + + public GameItem(String name, ArmorUpgrade armorUpgrade, String displayName, double sellPrice) { + this.type = ItemType.ARMOR_UPGRADE; + this.name = name; + this.displayName = displayName; + this.armorUpgrade = armorUpgrade; + this.sellPrice = sellPrice; + this.hideDurability = false; + this.getItem(); + } + + public GameItem(String name, ArmorUpgrade armorUpgrade, String displayName, double sellPrice, boolean hideDurability) { + this.type = ItemType.ARMOR_UPGRADE; + this.name = name; + this.displayName = displayName; + this.armorUpgrade = armorUpgrade; + this.sellPrice = sellPrice; + this.hideDurability = hideDurability; + this.getItem(); + }// + + public String getName() { + return this.name; + } + + public int getMachineID() { + return this.machineID; + } + + public ItemStack getItem() { + return getItem(1); + } + + public ItemStack getItem(int amount) { + switch (this.type) { + case WEAPON: { + Optional<Weapon<?>> opt = Vice.getWastedGuns().getWeaponManager().getWeapon(this.weaponOrVecicleOrDrug); + opt.ifPresent(weapon -> { + this.item = weapon.createItemStack(1, null); + }); + break; + } + case DRUG: { + Optional<Drug> drug = ((DrugService) Vice.getDrugManager().getService()).getDrug(this.weaponOrVecicleOrDrug); + if (drug.isPresent()) { + DrugItem drugItem = DrugItem.getByDrug(drug.get()); + if (drugItem != null) { + this.item = ItemStackUtil.makeStackable(drugItem.getItemStack(), 64); + } + } + else { + this.item = Parsing.parseItemStack(this.weaponOrVecicleOrDrug); + } + break; + } + case MACHINE: { + if(Vice.getInstance().getMachineManager()==null || Vice.getInstance().getMachineManager().getMachineItemById(this.machineID)==null) + this.item = new ItemStack(Material.STONE); + else + this.item = Vice.getInstance().getMachineManager().getMachineItemById(this.machineID); + break; + } + case VEHICLE: + Optional<VehicleProperties> opt = Vice.getWastedVehicles().getVehicle(this.weaponOrVecicleOrDrug); + opt.ifPresent(vehicleProperties -> { + this.item = vehicleProperties.getItem(); + }); + break; + case ARMOR_UPGRADE: + this.item = Utils.createItem(Material.LEATHER, "&e&l" + this.armorUpgrade.getDisplayName() + " Upgrade &a&lBUY&f: &a&l$" + this.armorUpgrade.getPrice()); + default: + break; + } + if (this.item == null) this.item = new ItemStack(Material.STONE); + if (this.canStack) this.item = ItemStackUtil.makeStackable(this.item, 64); + + if (this.hideDurability) { + ItemMeta itemMeta = this.item.getItemMeta(); + itemMeta.setUnbreakable(true); + itemMeta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE); + this.item.setItemMeta(itemMeta); + } + if (this.isScheduled()) { + ItemMeta itemMeta = this.item.getItemMeta(); + if (itemMeta.hasLore()) { + if (!Objects.equals(itemMeta.getLore().get(0), this.getSchedule().getDisp())) { + List<String> lore = new ArrayList<>(); + lore.add(this.getSchedule().getDisp()); + lore.addAll(itemMeta.getLore()); + itemMeta.setLore(lore); + } + } else itemMeta.setLore(Collections.singletonList(this.getSchedule().getDisp())); + this.item.setItemMeta(itemMeta); + } + ItemStack is = this.item.clone(); + is.setAmount(amount); + return is; + } + + public String getWeaponOrVehicleOrDrug() { + return this.weaponOrVecicleOrDrug; + } + + public String getDisplayName() { + if (this.displayName != null) + return this.displayName; + String name = (this.item.hasItemMeta() && this.item.getItemMeta().hasDisplayName()) ? this.item.getItemMeta().getDisplayName() + : this.item.getType().name(); + String amnt = this.item.getAmount() > 1 ? " &7x &a" + this.item.getAmount() : ""; + return name + amnt; + } + + public String getShopCategory() { + return this.shopCategory; + } + + public void setDisplayName(String s) { + this.displayName = s; + } + + public double getSellPrice() { + return this.sellPrice; + } + + public void setSellPrice(double i) { + this.sellPrice = i; + } + + public boolean canSell() { + return this.sellPrice > 0; + } + + public ItemType getType() { + return this.type; + } + + public AmmoType getAmmoType() { + return this.ammoType; + } + + public ArmorUpgrade getArmorUpgrade() { + return this.armorUpgrade; + } + + public boolean getHideDurability() { + return this.hideDurability; + } + + public boolean canStack() { + return canStack; + } + + public Schedule getSchedule() { + return Schedule.of(this.name); + } + + public boolean isScheduled() { + return this.getSchedule() != Schedule.NONE; + } + + public enum ItemType { + ITEMSTACK, WEAPON, VEHICLE, AMMO, ARMOR_UPGRADE, DRUG, MACHINE + } + +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/GameItemCommand.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/GameItemCommand.java new file mode 100644 index 0000000..9dd3e49 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/GameItemCommand.java @@ -0,0 +1,523 @@ +package net.grandtheftmc.vice.items; + +import com.j0ach1mmall3.wastedvehicles.api.VehicleProperties; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.guns.weapon.Weapon; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.drugs.Drug; +import net.grandtheftmc.vice.drugs.DrugService; +import net.grandtheftmc.vice.drugs.items.DrugItem; +import net.grandtheftmc.vice.items.GameItem.ItemType; +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import java.util.Iterator; +import java.util.List; +import java.util.Optional; + +public class GameItemCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command c, String l, String[] args) { + if (!s.hasPermission("command.gameitem")) { + s.sendMessage(Lang.NOPERM.s()); + return true; + } + + boolean consoleGive = false; + if (!(s instanceof Player)) { + if (!(args.length >= 1 && args[0].equalsIgnoreCase("give"))) { + s.sendMessage(Lang.NOTPLAYER.s()); + return true; + } else consoleGive = true; + } + +// Player player = (Player) s; + if (args.length == 0) { + s.sendMessage(Utils.f("&c/gameitem add <itemName> [displayName]")); + s.sendMessage(Utils.f("&c/gameitem adds <itemName> <sellPrice> [displayName]")); + s.sendMessage(Utils.f("&c/gameitem addweapon <itemName> <weapon> [displayName]")); + s.sendMessage(Utils.f("&c/gameitem addvehicle <itemName> <vehicle> [displayName]")); + s.sendMessage(Utils.f("&c/gameitem addarmorupgrade <itemName> <armorupgrade> [displayName]")); + s.sendMessage(Utils.f("&c/gameitem adddrug <itemName> <drug> [displayName]")); + s.sendMessage(Utils.f("&c/gameitem remove <itemName>")); + s.sendMessage(Utils.f("&c/gameitem displayName <itemName> [displayName]")); + s.sendMessage(Utils.f("&c/gameitem sellprice <itemName> <price>")); + s.sendMessage(Utils.f("&c/gameitem get <itemName> <amount>")); + s.sendMessage(Utils.f("&c/gameitem give <player> <itemName> <amount>")); + s.sendMessage(Utils.f("&c/gameitem list [page]")); + s.sendMessage(Utils.f("&c/gameitem load")); + s.sendMessage(Utils.f("&c/gameitem save")); + return true; + } + ItemManager im = Vice.getItemManager(); + switch (args[0].toLowerCase()) { + case "add": { + if (args.length < 2) { + s.sendMessage(Utils.f("&c/gameitem add <itemName> [displayName]")); + return true; + } + ItemStack item = ((Player) s).getInventory().getItemInMainHand(); + if (item == null) { + ((Player) s).sendMessage(Lang.GAMEITEMS.f("&cYou need to hold an item in your hand!")); + return true; + } + GameItem gi = im.getItem(args[1]); + if (gi != null) { + im.removeItem(gi); + ((Player) s).sendMessage(Lang.GAMEITEMS + .f("&7That item already existed, so it has been deleted and replaced with the new one.")); + } + + String displayName; + if (args.length > 2) { + displayName = args[2]; + for (int i = 3; i < args.length; i++) + displayName += ' ' + args[i]; + } else { + ItemMeta meta = item.getItemMeta(); + displayName = meta == null || meta.getDisplayName() == null ? item.getType().name() : meta.getDisplayName(); + + } + im.addItem(new GameItem(args[1], item, displayName)); + s.sendMessage(Lang.GAMEITEMS + .f("&7You added an item with name &a" + args[1] + "&7 and Display Name " + displayName + "&7!")); + return true; + } + case "adds": { + if (args.length < 3) { + s.sendMessage(Utils.f("&c/gameitem adds <itemName> <sellPrice> [displayName]")); + return true; + } + ItemStack item = ((Player) s).getInventory().getItemInMainHand(); + if (item == null) { + ((Player) s).sendMessage(Lang.GAMEITEMS.f("&cYou need to hold an item in your hand!")); + return true; + } + GameItem gi = im.getItem(args[1]); + if (gi != null) { + im.removeItem(gi); + ((Player) s).sendMessage(Lang.GAMEITEMS + .f("&7That item already existed, so it has been deleted and replaced with the new one.")); + } + double price; + try { + price = Double.parseDouble(args[2]); + } catch (NumberFormatException e) { + s.sendMessage(Lang.GAMEITEMS.f("&7The price must be a number! (double)")); + return true; + } + if (price < 0) { + s.sendMessage(Lang.GAMEITEMS.f("&7The price must be 0 or higher!")); + return true; + + } + String displayName; + if (args.length > 3) { + displayName = args[3]; + for (int i = 4; i < args.length; i++) + displayName = displayName + ' ' + args[i]; + } else { + ItemMeta meta = item.getItemMeta(); + displayName = meta == null || meta.getDisplayName() == null ? item.getType().name() : meta.getDisplayName(); + } + gi = im.addItem(new GameItem(args[1], item, displayName, price)); + s.sendMessage(Lang.GAMEITEMS.f("&7You added an item with name &a" + args[1] + "&7 and sell price &a$&l" + + gi.getSellPrice() + "&7 and Display Name " + displayName + "&7!")); + return true; + } + case "addweapon": { + if (args.length < 3) { + s.sendMessage(Utils.f("&c/gameitem addweapon <itemName> <weapon> [displayName]")); + return true; + } + GameItem gi = im.getItem(args[1]); + if (gi != null) { + im.removeItem(gi); + ((Player) s).sendMessage(Lang.GAMEITEMS + .f("&7That item already existed, so it has been deleted and replaced with the new one.")); + } + Optional<Weapon<?>> w = Vice.getWastedGuns().getWeaponManager().getWeapon(args[2]); + if (w == null || !w.isPresent()) { + s.sendMessage(Lang.GAMEITEMS.f("&7That weapon does not exist!")); + return true; + } + Weapon weapon = w.get(); + if (weapon == null) { + s.sendMessage(Lang.GAMEITEMS.f("&7That weapon does not exist!")); + return true; + } + String displayName; + if (args.length > 3) { + displayName = args[3]; + for (int i = 4; i < args.length; i++) + displayName = displayName + ' ' + args[i]; + } else { + ItemStack item = weapon.getBaseItemStack(); + ItemMeta meta = item.getItemMeta(); + displayName = meta == null || meta.getDisplayName() == null ? item.getType().name() : meta.getDisplayName(); + } + im.addItem(new GameItem(ItemType.WEAPON, args[1], weapon.getName(), displayName)); + s.sendMessage(Lang.GAMEITEMS.f("&7You added an item with name &a" + args[1] + "&7 and weapon &a" + + weapon.getUniqueIdentifier() + "&7 and Display Name " + displayName + "&7!")); + return true; + } + case "adddrug": { + if (args.length < 3) { + s.sendMessage(Utils.f("&c/gameitem addweapon <itemName> <weapon> [displayName]")); + return true; + } + GameItem gi = im.getItem(args[1]); + if (gi != null) { + im.removeItem(gi); + ((Player) s).sendMessage(Lang.GAMEITEMS + .f("&7That item already existed, so it has been deleted and replaced with the new one.")); + } + Optional<Drug> drug = ((DrugService) Vice.getInstance().getDrugManager().getService()).getDrug(args[2]); + if (drug.isPresent()) { + DrugItem drugItem = DrugItem.getByDrug(drug.get()); + if (drugItem == null) { + s.sendMessage(Lang.GAMEITEMS.f("&7That drug does not exist!")); + return true; + } + String displayName; + if (args.length > 3) { + displayName = args[3]; + for (int i = 4; i < args.length; i++) + displayName = displayName + ' ' + args[i]; + } else { + ItemStack item = drugItem.getItemStack(); + ItemMeta meta = item.getItemMeta(); + displayName = meta == null || meta.getDisplayName() == null ? item.getType().name() : meta.getDisplayName(); + } + im.addItem(new GameItem(ItemType.DRUG, args[1], drug.get().getName(), displayName)); + s.sendMessage(Lang.GAMEITEMS.f("&7You added an item with name &a" + args[1] + "&7 and drug &a" + + drug.get().getName() + "&7 and Display Name " + displayName + "&7!")); + } + return true; + } + case "addweapons": { + if (args.length < 4) { + s.sendMessage(Utils.f("&c/gameitem addweapons <itemName> <weapon> <sellPrice> [displayName]")); + return true; + } + GameItem gi = im.getItem(args[1]); + if (gi != null) { + im.removeItem(gi); + ((Player) s).sendMessage(Lang.GAMEITEMS + .f("&7That item already existed, so it has been deleted and replaced with the new one.")); + } + Optional<Weapon<?>> w = Vice.getWastedGuns().getWeaponManager().getWeapon(args[2]); + if (w == null || !w.isPresent()) { + s.sendMessage(Lang.GAMEITEMS.f("&7That weapon does not exist!")); + return true; + } + Weapon weapon = w.get(); + if (weapon == null) { + s.sendMessage(Lang.GAMEITEMS.f("&7That weapon does not exist!")); + return true; + } + double price; + try { + price = Double.parseDouble(args[3]); + } catch (NumberFormatException e) { + s.sendMessage(Lang.GAMEITEMS.f("&7The price must be a number! (double)")); + return true; + } + if (price < 0) { + s.sendMessage(Lang.GAMEITEMS.f("&7The price must be 0 or higher!")); + return true; + } + String displayName; + if (args.length > 4) { + displayName = args[4]; + for (int i = 5; i < args.length; i++) + displayName = displayName + ' ' + args[i]; + } else { + ItemStack item = weapon.getBaseItemStack(); + ItemMeta meta = item.getItemMeta(); + displayName = meta == null || meta.getDisplayName() == null ? item.getType().name() : meta.getDisplayName(); + } + im.addItem(new GameItem(ItemType.WEAPON, args[1], weapon.getName(), displayName)); + s.sendMessage(Lang.GAMEITEMS + .f("&7You added an item with name &a" + args[1] + "&7 and weapon &a" + weapon.getName() + + "&7 and sell price &a$&l" + price + "&7 and Display Name " + displayName + "&7!")); + return true; + } + case "addvehicle": { + if (args.length < 3) { + s.sendMessage(Utils.f("&c/gameitem addvehicle <itemName> <vehicle> [displayName]")); + return true; + } + GameItem gi = im.getItem(args[1]); + if (gi != null) { + im.removeItem(gi); + ((Player) s).sendMessage(Lang.GAMEITEMS + .f("&7That item already existed, so it has been deleted and replaced with the new one.")); + } + Optional<VehicleProperties> v = Vice.getWastedVehicles().getVehicle(args[2]); + if (v == null || !v.isPresent()) { + s.sendMessage(Lang.GAMEITEMS.f("&7That vehicle does not exist!")); + return true; + } + VehicleProperties vehicle = v.get(); + if (vehicle == null) { + s.sendMessage(Lang.GAMEITEMS.f("&7That vehicle does not exist!")); + return true; + } + String displayName; + if (args.length > 3) { + displayName = args[3]; + for (int i = 4; i < args.length; i++) + displayName += ' ' + args[i]; + } else { + ItemStack item = vehicle.getItem(); + ItemMeta meta = item.getItemMeta(); + displayName = meta == null || meta.getDisplayName() == null ? item.getType().name() : meta.getDisplayName(); + } + im.addItem(new GameItem(ItemType.VEHICLE, args[1], vehicle.getIdentifier(), displayName)); + s.sendMessage(Lang.GAMEITEMS.f("&7You added an item with name &a" + args[1] + "&7 and vehicle &a" + + vehicle.getIdentifier() + "&7 and Display Name " + displayName + "&7!")); + return true; + } +// case "addvehicles": { +// if (args.length < 3) { +// s.sendMessage(Utils.f("&c/gameitem addweapons <itemName> <vehicle> <sellPrice> [displayName]")); +// return true; +// } +// GameItem gi = im.getItem(args[1]); +// if (gi != null) { +// im.removeItem(gi); +// ((Player) s).sendMessage(Lang.GAMEITEMS +// .f("&7That item already existed, so it has been deleted and replaced with the new one.")); +// } +// Optional<VehicleProperties> v = Vice.getWastedVehicles().getVehicle(args[2]); +// if (v == null || !v.isPresent()) { +// s.sendMessage(Lang.GAMEITEMS.f("&7That vehicle does not exist!")); +// return true; +// } +// VehicleProperties vehicle = v.get(); +// if (vehicle == null) { +// s.sendMessage(Lang.GAMEITEMS.f("&7That vehicle does not exist!")); +// return true; +// } +// double price; +// try { +// price = Double.parseDouble(args[3]); +// } catch (NumberFormatException e) { +// s.sendMessage(Lang.GAMEITEMS.f("&7The price must be a number! (double)")); +// return true; +// } +// if (price < 0) { +// s.sendMessage(Lang.GAMEITEMS.f("&7The price must be 0 or higher!")); +// return true; +// } +// String displayName; +// if (args.length > 4) { +// displayName = args[4]; +// for (int i = 5; i < args.length; i++) +// displayName += ' ' + args[i]; +// } else { +// ItemStack item = vehicle.getItem(); +// ItemMeta meta = item.getItemMeta(); +// displayName = meta == null || meta.getDisplayName() == null ? item.getType().name() : meta.getDisplayName(); +// } +// im.addItem(new GameItem(ItemType.VEHICLE, args[1], vehicle.getIdentifier(), displayName, price, 0)); +// s.sendMessage(Lang.GAMEITEMS +// .f("&7You added an item with name &a" + args[1] + "&7 and vehicle &a" + vehicle.getIdentifier() +// + "&7 and sell price &a$&l" + price + "&7 and Display Name " + displayName + "&7!")); +// return true; +// } + case "addarmorupgrade": { + if (args.length < 3) { + s.sendMessage(Utils.f("&c/gameitem addarmorupgrade <itemName> <armorupgrade> [displayName]")); + return true; + } + GameItem gi = im.getItem(args[1]); + if (gi != null) { + im.removeItem(gi); + ((Player) s).sendMessage(Lang.GAMEITEMS + .f("&7That item already existed, so it has been deleted and replaced with the new one.")); + } + ArmorUpgrade upgrade = ArmorUpgrade.getArmorUpgrade(args[2]); + if (upgrade == null) { + s.sendMessage(Lang.GAMEITEMS.f("&7That vehicle does not exist!")); + return true; + } + String displayName = Utils.f("&b&l" + upgrade.getDisplayName() + " Armor Upgrade: &a" + upgrade.getDisplayName()); + im.addItem(new GameItem(args[1], upgrade, displayName)); + s.sendMessage(Lang.GAMEITEMS.f("&7You added an item with name &a" + args[1] + "&7 and armor upgrade &a" + + upgrade.getDisplayName() + "&7 and Display Name " + displayName + "&7!")); + return true; + } + case "remove": { + if (args.length < 2) { + s.sendMessage(Utils.f("&c/gameitem remove <itemName>")); + return true; + } + GameItem gi = im.getItem(args[1]); + if (gi == null) { + s.sendMessage(Lang.GAMEITEMS.f("&7That GameItem does not exist!")); + return true; + } + im.removeItem(gi); + s.sendMessage(Lang.GAMEITEMS.f("&7GameItem &a" + gi.getName() + "&7 was removed!")); + return true; + } + case "displayname": { + if (args.length < 2) { + s.sendMessage(Utils.f("&c/gameitem displayName <itemName> [displayName]")); + return true; + } + GameItem gi = im.getItem(args[1]); + if (gi == null) { + s.sendMessage(Lang.GAMEITEMS.f("&7That GameItem does not exist!")); + return true; + } + String displayName = args[2]; + for (int i = 3; i < args.length; i++) + displayName = displayName + ' ' + args[i]; + gi.setDisplayName(displayName); + s.sendMessage(Lang.GAMEITEMS.f("&7You set the display name of GameItem &a" + gi.getName() + "&7 to &a" + + gi.getDisplayName() + '!')); + return true; + } + case "sellprice": { + if (args.length < 2) { + s.sendMessage(Utils.f("&c/gameitem sellprice <itemName> <price>")); + return true; + } + GameItem gi = im.getItem(args[1]); + if (gi == null) { + s.sendMessage(Lang.GAMEITEMS.f("&7That GameItem does not exist!")); + return true; + } + double price; + try { + price = Double.parseDouble(args[2]); + } catch (NumberFormatException e) { + s.sendMessage(Lang.GAMEITEMS.f("&7The price must be a number! (double)")); + return true; + } + if (price < 0) { + s.sendMessage(Lang.GAMEITEMS.f("&7The price must be 0 or higher!")); + return true; + + } + gi.setSellPrice(price); + s.sendMessage(Lang.GAMEITEMS.f("&7You set the sell price of GameItem &a" + gi.getName() + "&7 to &a$&l" + + gi.getSellPrice() + '!')); + return true; + } + case "get": { + if (args.length < 2) { + s.sendMessage(Utils.f("&c/gameitem get <itemName> <amount>")); + return true; + } + GameItem gi = im.getItem(args[1]); + if (gi == null) { + s.sendMessage(Lang.GAMEITEMS.f("&7That GameItem does not exist!")); + return true; + } + ItemStack item = gi.getItem(); + if (args.length > 2) + try { + item.setAmount(Integer.parseInt(args[2])); + } catch (NumberFormatException e) { + s.sendMessage(Lang.GAMEITEMS.f("&7The amount must be a number! (integer)")); + return true; + } + ((Player) s).getInventory().addItem(item); + s.sendMessage(Lang.GAMEITEMS.f((args.length > 2 ? "&a" + args[2] + "&7 of " : "") + "&7GameItem &a" + + gi.getName() + "&7 was added to your inventory!")); + return true; + } + case "give": { + if (args.length < 3) { + s.sendMessage(Utils.f("&c/gameitem give <player> <itemName> <amount>")); + return true; + } + Player pl = Bukkit.getPlayer(args[1]); + if (pl == null) { + s.sendMessage(Lang.GAMEITEMS.f("&7That player is not online!")); + return true; + } + GameItem gi = im.getItem(args[2]); + if (gi == null) { + s.sendMessage(Lang.GAMEITEMS.f("&7That GameItem does not exist!")); + return true; + } + ItemStack item = gi.getItem(); + if (args.length > 3) + try { + item.setAmount(Integer.parseInt(args[3])); + } catch (NumberFormatException e) { + s.sendMessage(Lang.GAMEITEMS.f("&7The amount must be a number! (integer)")); + return true; + } + pl.getInventory().addItem(item); + s.sendMessage(Lang.GAMEITEMS.f("&7You gave " + (args.length > 3 ? "&a" + args[3] + "&7 of " : "") + + "GameItem &a" + gi.getName() + "&7 to &a" + pl.getName() + '!')); + return true; + } + case "list": + List<GameItem> items = Vice.getItemManager().getItems(); + int page = 1; + if (args.length > 1) { + try { + page = Integer.parseInt(args[1]); + } catch (NumberFormatException e) { + s.sendMessage(Lang.GAMEITEMS.f("&cThe page must be a number!")); + return true; + } + } + if (page < 1) { + s.sendMessage(Lang.GAMEITEMS.f("&7The page must be a positive number!")); + return true; + } + int pages = items.size() / 6 + 1; + s.sendMessage(Utils.f(" &7&m---------------&7[&a&l Game Items &7Page &a" + page + "&7/&a" + pages + + " &7&m]---------------")); + Iterator<GameItem> it = items.iterator(); + for (int i = 0; i < page * 6; i++) { + if (!it.hasNext()) + return true; + GameItem item = it.next(); + if (i < page * 6 - 6) + continue; + s.sendMessage(Utils.f("&a&l" + item.getType() + "&a " + item.getName() + + " &7| &7Display Name: &r" + item.getDisplayName() + + (item.getSellPrice() >= 0 ? "&7 Sell Price: &a$&l" + item.getSellPrice() : ""))); + } + return true; + case "load": + Vice.getSettings().setItemsConfig(Utils.loadConfig("items")); + Vice.getItemManager().loadItems(); + s.sendMessage(Lang.GAMEITEMS.f("&7Loaded GameItems!")); + return true; + case "save": + Vice.getItemManager().saveItems(); + s.sendMessage(Lang.GAMEITEMS.f("&7Saved GameItems!")); + return true; + default: + s.sendMessage(Utils.f("&c/gameitem add <itemName> [displayName]")); + s.sendMessage(Utils.f("&c/gameitem addweapon <itemName> [displayName]")); + s.sendMessage(Utils.f("&c/gameitem addvehicle <itemName> [displayName]")); + s.sendMessage(Utils.f("&c/gameitem remove <itemName>")); + s.sendMessage(Utils.f("&c/gameitem displayName <itemName> [displayName]")); + s.sendMessage(Utils.f("&c/gameitem sellprice <itemName> <price>")); + s.sendMessage(Utils.f("&c/gameitem get <itemName>")); + s.sendMessage(Utils.f("&c/gameitem give <player> <itemName>")); + s.sendMessage(Utils.f("&c/gameitem list [page]")); + s.sendMessage(Utils.f("&c/gameitem load")); + s.sendMessage(Utils.f("&c/gameitem save")); + return true; + } + } +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/Head.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/Head.java new file mode 100644 index 0000000..037dcb1 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/Head.java @@ -0,0 +1,245 @@ +package net.grandtheftmc.vice.items; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.database.BaseDatabase; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.ViceUtils; +import net.grandtheftmc.vice.users.ViceUser; +import net.grandtheftmc.vice.users.ViceUserDAO; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +import java.util.Objects; +import java.util.UUID; + +/** + * Created by Liam on 4/10/2016. + */ +public class Head { + + private final UUID sellerUUID; + private final String sellerName; + private final String head; + private final long expiry; + private boolean done; + private boolean paid; + private boolean gaveHead; + private UUID bidderUUID; + private String bidderName; + private double bid = -1; + + public Head(UUID sellerUUID, String sellerName, String head) { + this.sellerUUID = sellerUUID; + this.sellerName = sellerName; + this.head = head; + this.expiry = System.currentTimeMillis() + 86400000; + +// Core.sql.updateAsyncLater("insert into " + Core.name() + "_heads(sellerUUID, sellerName, head, expiry) values ('" + this.sellerUUID + "','" + this.sellerName + "','" + this.head + "'," + this.expiry + ");"); + ServerUtil.runTaskAsync(() -> ViceUserDAO.insertHead(sellerUUID, sellerName, head, expiry)); + } + + public Head(UUID sellerUUID, String sellerName, String head, long expiry, boolean done, boolean paid, boolean gaveHead, UUID bidderUUID, String bidderName, double bid) { + this.sellerUUID = sellerUUID; + this.sellerName = sellerName; + this.head = head; + this.expiry = expiry; + this.done = done; + this.paid = paid; + this.gaveHead = gaveHead; + this.bidderUUID = bidderUUID; + this.bidderName = bidderName; + this.bid = bid; + } + + public UUID getSellerUUID() { + return this.sellerUUID; + } + + public String getSellerName() { + return this.sellerName; + } + + public String getHead() { + return this.head; + } + + public long getExpiry() { + return this.expiry; + } + + public UUID getBidderUUID() { + return this.bidderUUID; + } + + public String getBidderName() { + return this.bidderName; + } + + public double getBid() { + return this.bid; + } + + public boolean hasBid() { + return this.bidderUUID != null; + } + + public boolean hasExpired() { + return this.hasBid() ? this.expiry < System.currentTimeMillis() : this.expiry - 82800000 < System.currentTimeMillis(); + } + + public boolean hasExpiredOverAWeekAgo() { + return this.expiry + 604800000 < System.currentTimeMillis(); + } + + public Long getTimeUntilExpiry() { + return this.expiry - System.currentTimeMillis(); + } + + public boolean isDone() { + return this.done; + } + + public boolean isPaid() { + return this.paid; + } + + public boolean gaveHead() { + return this.gaveHead; + } + + public ItemStack getItem() { + return Utils.setSkullOwner(Utils.createItem(Material.SKULL_ITEM, 3, "&e&l" + this.head + "'s Head", "&7Value: &a$&l" + (this.hasBid() ? "10,000" : this.bid), "&7Sell me in the sewer!"), this.head); + } + + public boolean giveHead() { + if (this.gaveHead) return false; + if (!this.hasBid()) { + this.gaveHead = true; + return true; + } + Player bidder = Bukkit.getPlayer(this.bidderUUID); + if (bidder == null) + return false; + + if (bidder.getInventory().firstEmpty() < 0) { + bidder.sendMessage(Lang.HEAD_AUCTION.f("&7The auction for &e&l" + this.head + "'s Head&7 has finished! Please clear a slot in your inventory and wait a few seconds.")); + return false; + } + bidder.getInventory().addItem(this.getItem()); + bidder.sendMessage(Lang.HEAD_AUCTION.f("&7The auction for &e&l" + this.head + "'s Head&7 has finished! Congratulations on winning the bid.")); + this.gaveHead = true; + return true; + } + + public boolean paySeller() { + if (this.paid) return false; + Player seller = Bukkit.getPlayer(this.sellerUUID); + if (seller == null) + return false; + ViceUser user = Vice.getUserManager().getLoadedUser(seller.getUniqueId()); + if (!this.hasBid()) { + seller.sendMessage(Lang.HEAD_AUCTION.f("&7The auction for &e&l" + this.head + "'s Head&7 has finished with no bids!")); + this.paid = true; + return true; + } + if (this.bid > 10000) + user.addMoney(this.bid - 10000); + ViceUtils.updateBoard(seller, user); + seller.sendMessage(Lang.HEAD_AUCTION.f("&7The auction for &e&l" + this.head + "'s Head&7 has finished with &a$&l" + this.bid + "&7! You received &a$&l" + (this.bid - 10000) + "&7 from &a&l" + this.bidderName + "&7!")); + this.paid = true; + return true; + } + + public boolean delete() { + if ((this.done && this.gaveHead && this.paid) || this.hasExpiredOverAWeekAgo()) { +// Core.sql.updateAsyncLater("delete from " + Core.name() + "_heads where sellerUUID='" + this.sellerUUID + "' and head='" + this.head + "' and expiry=" + this.expiry + ';'); + ServerUtil.runTaskAsync(() -> ViceUserDAO.deleteHead(sellerUUID, head, expiry)); + Vice.getShopManager().removeHead(this); + return true; + } + return false; + } + + public void update() { + if (!this.hasExpired()) + return; + boolean update = !this.done; + this.done = true; + if (this.giveHead()) update = true; + if (this.paySeller()) update = true; + if (this.delete()) update = true; + if (update) + this.updateDB(); + } + + + public void updateDB() { +// Core.sql.updateAsyncLater("update " + Core.name() + "_heads set paid=" + this.paid + ", gaveHead=" + this.gaveHead + ", done=" + this.done + ", bidderUUID=" + (this.bidderUUID == null ? null : "'" + this.bidderUUID + '\'') + ",bidderName = '" + +// this.bidderName + "', bid=" + this.bid + " where sellerUUID='" + this.sellerUUID + "' and head='" + this.head + "' and expiry=" + this.expiry + ';'); + ServerUtil.runTaskAsync(() -> BaseDatabase.runCustomQuery("update " + Core.name() + "_heads set paid=" + this.paid + ", gaveHead=" + this.gaveHead + ", done=" + this.done + ", bidderUUID=" + (this.bidderUUID == null ? null : "'" + this.bidderUUID + '\'') + ",bidderName = '" + + this.bidderName + "', bid=" + this.bid + " where sellerUUID='" + this.sellerUUID + "' and head='" + this.head + "' and expiry=" + this.expiry + ';')); + } + + public void returnBidderMoney() { + Player bidder = Bukkit.getPlayer(this.bidderUUID); + if (bidder == null) { +// Core.sql.updateAsyncLater("update " + Core.name() + " set bank=bank+" + this.bid + " where uuid='" + this.bidderUUID + "';"); + ServerUtil.runTaskAsync(() -> BaseDatabase.runCustomQuery("update " + Core.name() + " set bank=bank+" + this.bid + " where uuid='" + this.bidderUUID + "';")); + this.bidderName = null; + this.bidderUUID = null; + this.bid = -1; + return; + } + ViceUser user = Vice.getUserManager().getLoadedUser(bidder.getUniqueId()); + user.addMoney(this.bid); + ViceUtils.updateBoard(bidder, user); + bidder.sendMessage(Lang.HEAD_AUCTION.f("&7You were outbid for the &e&l" + this.head + "'s Head&7! Your bid of &a$&l" + this.bid + "&7 was returned to your bank account.")); + this.bidderName = null; + this.bidderUUID = null; + this.bid = -1; + } + + public void bid(Player player, ViceUser user, double bid) { + bid = Utils.round(bid); + if (this.hasExpired() || this.done) { + player.sendMessage(Lang.HEAD_AUCTION.f("&7The bidding has expired!")); + return; + } + if (!user.hasMoney(bid)) { + player.sendMessage(Lang.HEAD_AUCTION.f("&7You don't have &c$&l" + bid + "&7!")); + return; + } + + if (this.hasBid()) { + if (this.bid * 1.05 > bid) { + player.sendMessage(Lang.HEAD_AUCTION.f("&7You must bid at least &a&l5%&7 more than the current bid of &a$&l" + this.bid + "&7 (&a$&l" + (this.bid * 1.05) + "&7)!")); + return; + } + this.returnBidderMoney(); + } else if (bid < 10000) { + player.sendMessage(Lang.HEAD_AUCTION.f("&7You must bid at least the starting bid of &a$&l10,000&7!")); + return; + } + this.setBid(player, bid); + user.takeMoney(bid); + ViceUtils.updateBoard(player, user); + player.sendMessage(Lang.HEAD_AUCTION.f("&7You have bid &a$&l" + this.bid + "&7 for &e&l" + this.head + "'s Head&7! Please wait &c&l" + Utils.timeInMillisToText(this.getTimeUntilExpiry()) + "&7 for the auction to end.")); + Player seller = Bukkit.getPlayer(this.sellerUUID); + if (seller != null && !Objects.equals(seller, player)) + seller.sendMessage(Lang.HEAD_AUCTION.f("&a&l" + player.getName() + "&7 has bid &a$&l" + this.bid + "&7 on &e&l" + this.head + "'s Head&7!")); + } + + public void setBid(Player player, double bid) { + this.bidderUUID = player.getUniqueId(); + this.bidderName = player.getName(); + this.bid = bid; + this.updateDB(); + } + + +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/ItemManager.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/ItemManager.java new file mode 100644 index 0000000..c0255ae --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/ItemManager.java @@ -0,0 +1,489 @@ +package net.grandtheftmc.vice.items; + +import com.j0ach1mmall3.jlib.methods.Parsing; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.ViceUtils; +import net.grandtheftmc.vice.items.GameItem.ItemType; +import net.grandtheftmc.vice.items.recipes.BottleCraftingRecipe; +import net.grandtheftmc.vice.items.recipetypes.BrewingRecipeItem; +import net.grandtheftmc.vice.items.recipetypes.CraftingRecipeItem; +import net.grandtheftmc.vice.items.recipetypes.RecipeItem; +import net.grandtheftmc.vice.users.CopRank; +import net.grandtheftmc.vice.users.ViceRank; +import net.grandtheftmc.vice.users.ViceUser; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.NamespacedKey; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +import java.util.*; +import java.util.stream.Collectors; + +public class ItemManager { + + private List<GameItem> items = new ArrayList<>(); + private List<Kit> kits = new ArrayList<>(); + private HashMap<ItemStack, RecipeItem> customRecipes = new HashMap<>(); + private HashMap<ItemStack, ItemStack> replacedVanilla = new HashMap<>(); + private List<Material> bannedCraftingRecipes = new ArrayList<>(); + private HashSet<ItemStack> ingredients = new HashSet<>(); + public final static NamespacedKey NAMESPACED_KEY = new NamespacedKey(Vice.getInstance(), Vice.getInstance().getDescription().getName()); + private LinkedList<GameItem> shopItems = new LinkedList<>(); + + public ItemManager() { + this.loadItems(); + this.loadKits(); + this.loadReplacedVanilla(); + this.loadBannedCraftingRecipes(); + this.loadCraftingRecipes(); + } + + public void m(int i) { + Bukkit.broadcastMessage(String.valueOf(i)); + } + + public void m(String s) { + Bukkit.broadcastMessage(s); + } + + private void loadCraftingRecipes(){ + registerCustomRecipe(new BottleCraftingRecipe()); + } + + private void loadBannedCraftingRecipes() { + this.bannedCraftingRecipes.add(Material.LEATHER_LEGGINGS); + this.bannedCraftingRecipes.add(Material.LEATHER_BOOTS); + this.bannedCraftingRecipes.add(Material.CHAINMAIL_LEGGINGS); + this.bannedCraftingRecipes.add(Material.CHAINMAIL_BOOTS); + this.bannedCraftingRecipes.add(Material.GOLD_LEGGINGS); + this.bannedCraftingRecipes.add(Material.GOLD_BOOTS); + this.bannedCraftingRecipes.add(Material.IRON_LEGGINGS); + this.bannedCraftingRecipes.add(Material.IRON_BOOTS); + this.bannedCraftingRecipes.add(Material.DIAMOND_LEGGINGS); + this.bannedCraftingRecipes.add(Material.DIAMOND_BOOTS); + this.bannedCraftingRecipes.add(Material.WOOD_SWORD); + this.bannedCraftingRecipes.add(Material.STONE_SWORD); + this.bannedCraftingRecipes.add(Material.IRON_SWORD); + this.bannedCraftingRecipes.add(Material.GOLD_SWORD); + this.bannedCraftingRecipes.add(Material.DIAMOND_SWORD); + this.bannedCraftingRecipes.add(Material.SHIELD); + } + + private void loadReplacedVanilla() { + //this.replacedVanilla.put(new ItemStack(Material.CARROT_ITEM), getItem("opiumpoppies").getItem()); OLD VICE + this.replacedVanilla.put(new ItemStack(Material.SUGAR_CANE), getItem("marijuanaleaf").getItem()); + this.replacedVanilla.put(new ItemStack(Material.MELON), getItem("cocaleaf").getItem()); + this.replacedVanilla.put(new ItemStack(Material.CACTUS), getItem("humuluslupulusfruit").getItem()); + this.replacedVanilla.put(new ItemStack(Material.BEETROOT), getItem("ephedrasinica").getItem()); + this.replacedVanilla.put(new ItemStack(Material.NETHER_STALK), getItem("ergotfungi").getItem()); + this.replacedVanilla.put(new ItemStack(Material.BROWN_MUSHROOM), getItem("magicmushroombrown").getItem()); + this.replacedVanilla.put(new ItemStack(Material.RED_MUSHROOM), getItem("magicmushroomred").getItem()); + //this.replacedVanilla.put(new ItemStack(Material.CHORUS_FRUIT), getItem("safrole_oil").getItem()); OLD VICE + } + + + public void loadItems() { + this.items = new ArrayList<>(); + this.shopItems = new LinkedList<>(); + YamlConfiguration c = Vice.getSettings().getItemsConfig(); + if (c == null) + return; + for (String name : c.getKeys(false)) { + try { + String displayName = c.getString(name + ".displayName"); + double price = -1; + boolean hideDurability = false, canStack = false; + String shopCategory = ""; + + if (c.get(name + ".canStack") != null) canStack = c.getBoolean(name + ".canStack"); + if (c.get(name + ".sellPrice") != null) price = c.getDouble(name + ".sellPrice"); + if (c.get(name + ".hideDurability") != null) hideDurability = c.getBoolean(name + ".hideDurability"); + if(c.get(name + ".shopCategory") !=null) shopCategory = c.getString(name + ".shopCategory"); + if(c.get(name + ".machineID") !=null ) + this.items.add(new GameItem(name, c.getInt(name + ".machineID"), displayName, price, hideDurability)); + if (c.get(name + ".weapon") != null) + this.items.add(new GameItem(ItemType.WEAPON, name, c.getString(name + ".weapon"), displayName, price, hideDurability, canStack)); + else if (c.get(name + ".drug") != null) + this.items.add(new GameItem(ItemType.DRUG, name, c.getString(name + ".drug"), displayName, price, hideDurability, canStack)); + else if (c.get(name + ".vehicle") != null) + this.items.add(new GameItem(ItemType.VEHICLE, name, c.getString(name + ".vehicle"), displayName, price, hideDurability, canStack)); + else if (c.get(name + ".ammo") != null) + this.items.add(new GameItem(name, Parsing.parseItemStack(c.getString(name + ".item")), + AmmoType.getAmmoType(c.getString(name + ".ammo")), displayName, price, hideDurability)); + else if (c.get(name + ".armorupgrade") != null) { + ArmorUpgrade upgrade = ArmorUpgrade.getArmorUpgrade(c.getString(name + ".armorupgrade")); + if (upgrade == null) + Vice.error("Error while loading items " + name + ": " + c.getString(name + ".ammo") + " is not a valid ArmorUpgrade!"); + else + this.items.add(new GameItem(name, upgrade, displayName, price, hideDurability)); + } + else if(!shopCategory.equals("")) {//This is done so not all items have to be searched when generating the shop. + this.shopItems.add(new GameItem(name, Parsing.parseItemStack(c.getString(name + ".item")), displayName, price, hideDurability, canStack, shopCategory)); + this.items.add(new GameItem(name, Parsing.parseItemStack(c.getString(name + ".item")), displayName, price, hideDurability, canStack, shopCategory)); + } + else if (c.get(name + ".item") != null) + this.items.add(new GameItem(name, Parsing.parseItemStack(c.getString(name + ".item")), displayName, price, hideDurability, canStack)); + } catch (Exception e) { + Vice.error("Error while loading item " + name + '!'); + e.printStackTrace(); + } + } + } + + public void saveItems() { + YamlConfiguration c = Vice.getSettings().getItemsConfig(); + for (String s : c.getKeys(false)) + c.set(s, null); + for (GameItem item : this.items) { + String name = item.getName(); + if (item.canStack()) c.set(name + ".canStack", item.canStack()); + c.set(name + ".displayName", item.getDisplayName()); + if (item.getSellPrice() > 0) c.set(name + ".sellPrice", item.getSellPrice()); + + if (item.getHideDurability()) c.set(name + ".hideDurability", item.getHideDurability()); + + if(item.getShopCategory()!=null) c.set(name + ".shopCategory", item.getShopCategory()); + + if(item.getType() == ItemType.MACHINE) { + c.set(name + ".machineID", item.getMachineID()); + } + if (item.getType() == ItemType.WEAPON) { + c.set(name + ".weapon", item.getWeaponOrVehicleOrDrug()); + } else if (item.getType() == ItemType.DRUG) { + c.set(name + ".drug", item.getWeaponOrVehicleOrDrug()); + } else if (item.getType() == ItemType.VEHICLE) { + c.set(name + ".vehicle", item.getWeaponOrVehicleOrDrug()); + } else if (item.getType() == ItemType.AMMO) { + c.set(name + ".ammo", item.getAmmoType().toString().toLowerCase()); + c.set(name + ".item", Parsing.parseString(item.getItem())); + } else if (item.getType() == ItemType.ARMOR_UPGRADE) { + c.set(name + ".armorupgrade", item.getArmorUpgrade().toString().toLowerCase()); + } else { + c.set(name + ".item", Parsing.parseString(item.getItem())); + } + } + Utils.saveConfig(c, "items"); + } + + public void loadKits() { + YamlConfiguration c = Vice.getSettings().getKitsConfig(); + this.kits = new ArrayList<>(); + for (String name : c.getKeys(false)) { + try { + double cost = 0; + int delay = 60; + if (c.get(name + ".cost") != null) + cost = c.getDouble(name + ".cost"); + if (c.get(name + ".delay") != null) + delay = c.getInt(name + ".delay"); + List<KitItem> contents = c.getStringList(name + ".contents").stream().map(this::kitItemFromString).collect(Collectors.toList()); + KitItem helmet = this.kitItemFromString(c.getString(name + ".helmet")); + KitItem chestplate = this.kitItemFromString(c.getString(name + ".chestplate")); + KitItem leggings = this.kitItemFromString(c.getString(name + ".leggings")); + KitItem boots = this.kitItemFromString(c.getString(name + ".boots")); + KitItem offHand = this.kitItemFromString(c.getString(name + ".offHand")); + String perm = c.getString(name + ".permission"); + this.kits.add(new Kit(name, cost, delay, contents, helmet, chestplate, leggings, boots, offHand, perm)); + } catch (Exception e) { + Core.error("Error while loading kit " + name); + e.printStackTrace(); + } + } + } + + public KitItem kitItemFromString(String s) { + if (s == null) + return null; + String[] a = s.split(":"); + if (a.length == 0) + return null; + GameItem item = this.getItem(a[0]); + try { + return new KitItem(item, a.length > 1 ? Integer.parseInt(a[1]) : 1); + } catch (NumberFormatException e) { + Core.error("Error parsing kititem: " + s); + return null; + } + + } + + public void saveKits() { + YamlConfiguration c = Vice.getSettings().getKitsConfig(); + for (String s : c.getKeys(false)) + c.set(s, null); + for (Kit kit : this.kits) { + String name = kit.getName(); + try { + if (kit.getCost() > 0) + c.set(name + ".cost", kit.getCost()); + if (kit.getDelay() > 0) + c.set(name + ".delay", kit.getDelay()); + List<String> contents = kit.getContents().stream().map(this::kitItemToString).collect(Collectors.toList()); + c.set(name + ".contents", contents); + c.set(name + ".helmet", this.kitItemToString(kit.getHelmet())); + c.set(name + ".chestplate", this.kitItemToString(kit.getChestPlate())); + c.set(name + ".leggings", this.kitItemToString(kit.getLeggings())); + c.set(name + ".boots", this.kitItemToString(kit.getBoots())); + c.set(name + ".offHand", this.kitItemToString(kit.getOffHand())); + c.set(name + ".permission", kit.getPermission()); + } catch (Exception e) { + Core.error("Error while saving kit " + name); + e.printStackTrace(); + } + } + Utils.saveConfig(c, "kits"); + } + + public LinkedList<GameItem> getShopItems() { + return this.shopItems; + } + + public String kitItemToString(KitItem item) { + if (item == null || item.getGameItem() == null) + return null; + return item.getGameItem().getName() + (item.getAmount() > 1 ? ":" + item.getAmount() : ""); + } + + public GameItem getItem(String itemName) { + return this.items.stream().filter(item -> item.getName().equalsIgnoreCase(itemName)).findFirst().orElse(null); + + } + + public GameItem getItemFromDisplayName(String itemName) { + return this.items.stream().filter(item -> ChatColor.stripColor(Utils.f(item.getDisplayName())).equalsIgnoreCase(ChatColor.stripColor(Utils.f(itemName)))).findFirst().orElse(null); + } + + public GameItem getItem(ItemStack item) { + if (item != null) + return this.items.stream().filter(g -> { + boolean namesMatch = true; + if(g.getItem().hasItemMeta() && g.getItem().getItemMeta().hasDisplayName() && item.hasItemMeta() && item.getItemMeta().hasDisplayName()) { + if(g.getType()== ItemType.WEAPON && g.getItem().getItemMeta().getDisplayName().contains("»") && g.getItem().getItemMeta().getDisplayName().contains("«")) { + String a = ChatColor.stripColor(g.getItem().getItemMeta().getDisplayName()); + String b = ChatColor.stripColor(item.getItemMeta().getDisplayName()).replace("/0", ""); + if(!a.equalsIgnoreCase(b)) { + namesMatch = false; + } + } + } + return g.getItem().getType() == item.getType() && g.getItem().getDurability() == item.getDurability() && namesMatch; + }).findFirst().orElse(null); + return null; + } + + public GameItem getItem(Material material) { + return this.items.stream().filter(g -> g.getItem().getType() == material).findFirst().orElse(null); + } + + public GameItem getItemFromWeapon(String s) { + return this.items.stream().filter(g -> g.getType() == ItemType.WEAPON && g.getWeaponOrVehicleOrDrug().equalsIgnoreCase(s)).findFirst().orElse(null); + } + + public GameItem getItemFromVehicle(String s) { + return this.items.stream().filter(g -> g.getType() == ItemType.VEHICLE && g.getWeaponOrVehicleOrDrug().equalsIgnoreCase(s)).findFirst().orElse(null); + } + + public GameItem getItem(ArmorUpgrade upgrade) { + return this.items.stream().filter(g -> g.getType() == ItemType.ARMOR_UPGRADE && upgrade == g.getArmorUpgrade()).findFirst().orElse(null); + } + + /** + * @param damagableItem if the item can be damaged during normal use, ex. Armor + */ + public GameItem getSellableItem(ItemStack is, boolean damagableItem) { + return this.items.stream().filter(g -> g.canSell() && g.getItem().getType()==is.getType() && (damagableItem || g.getItem().getDurability() == is.getDurability())).findFirst().orElse(null); + } + + public GameItem getSellableItem(ItemStack is) { + return getSellableItem(is, false); + } + + + + public List<Kit> getKits() { + return this.kits; + } + + public boolean giveKit(Player player, User user, ViceUser viceUser, String kit){ + return giveKit(player, user, viceUser, this.getKit(kit)); + } + + public boolean giveKit(Player player, User user, ViceUser viceUser, Kit kit) { + if (viceUser.isArrested()) { + player.sendMessage(Lang.JAIL.f("&7You can't get a kit in jail!")); + return true; + } + if (kit == null) { + player.sendMessage(Utils.f(Lang.KITS.f("&cThat kit does not exist!"))); + return false; + } + if (kit.getPermission() != null && !player.hasPermission(kit.getPermission())) { + player.sendMessage(Lang.KITS.f("&7You don't have permission to use this kit!")); + return false; + } + UserRank ur = UserRank.getUserRankOrNull(kit.getName()); + ViceRank rank = ViceRank.getRankOrNull(kit.getName()); + CopRank copRank = CopRank.getRankOrNull(kit.getName()); + if (ur == null && copRank != null && !viceUser.isCopRank(copRank)) { + player.sendMessage(Lang.KITS.f("&7You need to be a " + copRank.getColoredNameBold() + + "&7 to use this kit!")); + return false; + } else if (ur != null && !(ur == user.getUserRank() + || (ur == UserRank.SUPREME && user.getUserRank().isHigherThan(UserRank.SUPREME)))) { + player.sendMessage( + Lang.KITS.f("&7You need to be " + ur.getColoredNameBold() + "&7 to use this kit!")); + return false; + } else if (rank != null && !(rank == ViceRank.JUNKIE || rank == viceUser.getRank())) { + player.sendMessage(Lang.KITS.f("&7You need to rank up to " + rank.getColoredNameBold() + + "&7 to use this kit!")); + return false; + } + if (kit.getCost() > 0 && !viceUser.hasMoney(kit.getCost())) { + player.sendMessage( + Lang.KITS.f("&7You do not have the &c$&l" + kit.getCost() + "&7 to pay for this kit!")); + return false; + } + if (!viceUser.canUseKit(kit.getName())) { + player.sendMessage(Lang.KITS.f("&7You need to wait &c" + + Utils.timeInMillisToText(viceUser.getKitExpiry(kit.getName()) - System.currentTimeMillis()) + + "&7 to use this kit again!")); + return false; + } + viceUser.setKitExpiry(kit.getName(), kit.getDelay()); + if (kit.getCost() > 0) { + viceUser.takeMoney(kit.getCost()); + player.sendMessage(Lang.MONEY_TAKE.toString() + kit.getCost()); + ViceUtils.updateBoard(player, user, viceUser); + } + player.sendMessage(Lang.KITS.f("&7You received the kit &b" + kit.getName() + "&7!")); + this.giveKitItems(player, viceUser, kit); + return true; + } + + public void giveKitItems(Player player, ViceUser viceUser, Kit kit) { + List<ItemStack> items = new ArrayList<>(kit.getItems()); + ItemStack helmet = this.kitItemToItemStack(kit.getHelmet()); + ItemStack chestPlate = this.kitItemToItemStack(kit.getChestPlate()); + ItemStack leggings = this.kitItemToItemStack(kit.getLeggings()); + ItemStack boots = this.kitItemToItemStack(kit.getBoots()); + ItemStack offHand = this.kitItemToItemStack(kit.getOffHand()); + if (helmet != null) + if (player.getInventory().getHelmet() == null) + player.getInventory().setHelmet(helmet); + else + items.add(helmet); + if (chestPlate != null) + if (player.getInventory().getChestplate() == null) + player.getInventory().setChestplate(chestPlate); + else + items.add(chestPlate); + if (leggings != null) + if (player.getInventory().getLeggings() == null) + player.getInventory().setLeggings(leggings); + else + items.add(leggings); + if (boots != null) + if (player.getInventory().getBoots() == null) + player.getInventory().setBoots(boots); + else + items.add(boots); + if (offHand != null) + if (player.getInventory().getItemInOffHand() == null) + player.getInventory().setItemInOffHand(offHand); + else + items.add(offHand); + for (ItemStack stack : new ArrayList<>(items)) { + AmmoType type = AmmoType.getAmmoType(stack.getType(), stack.getDurability()); + if (type != null && !type.isInInventory()) { + viceUser.addAmmo(type, stack.getAmount()); + player.sendMessage(Lang.AMMO_ADD.f(stack.getAmount() + "&7 " + type.getGameItem().getDisplayName())); + items.remove(stack); + } + } + if (Utils.giveItems(player, Utils.toArray(items))) + player.sendMessage(Utils.f(Lang.KITS + "&cYour inventory was full so some items were dropped on the ground!")); + } + + public ItemStack kitItemToItemStack(KitItem item) { + if (item == null || item.getGameItem() == null) + return null; + ItemStack i = item.getGameItem().getItem(); + i.setAmount(item.getAmount()); + return i; + } + + public Kit getKit(String name) { + return this.kits.stream().filter(kit -> kit.getName().equalsIgnoreCase(name)).findFirst().orElse(null); + } + + public GameItem addItem(GameItem gameItem) { + this.items.add(gameItem); + return gameItem; + } + + public void removeItem(GameItem gi) { + this.items.remove(gi); + + } + + public void addKit(Kit kit) { + this.kits.add(kit); + } + + public List<GameItem> getItems() { + return this.items; + } + + public HashMap<ItemStack, RecipeItem> getCustomRecipes() { + return this.customRecipes; + } + + public HashMap<ItemStack, ItemStack> getReplacedVanilla() { + return this.replacedVanilla; + } + + + @Deprecated + public void registerCustomRecipe(RecipeItem item) { + switch (item.getType()) { + case SHAPED_CRAFTING: + case FURNACE: + case SHAPELESS_CRAFTING: + //shaped / shapeless crafting doesnt work. + this.customRecipes.put(((CraftingRecipeItem) item).getRecipe().getResult(), item); + break; + case BREWING: + this.customRecipes.put(((BrewingRecipeItem) item).getResult(), item); + this.ingredients.add(((BrewingRecipeItem)item).getIngredient()); + break; + } + } + + public Optional<RecipeItem> getCraftingRecipe(ItemStack[] matrix) { + if (matrix == null) + return Optional.empty(); + return this.customRecipes.values().stream().filter(recipeItem -> { + if (!(recipeItem instanceof CraftingRecipeItem)) { + return false; + } + CraftingRecipeItem recipe = (CraftingRecipeItem) recipeItem; + return recipe.validate(matrix); + }).findFirst(); + } + + public List<Material> getBannedCraftingRecipes() { + return bannedCraftingRecipes; + } + + public HashSet<ItemStack> getPotionIngredients() { + return ingredients; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/Kit.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/Kit.java new file mode 100644 index 0000000..569df79 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/Kit.java @@ -0,0 +1,156 @@ +package net.grandtheftmc.vice.items; + +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.users.UserRank; +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; + +import java.util.ArrayList; +import java.util.List; + +public class Kit { + + private String name; + private double cost; + private int delay; + private List<KitItem> contents; + private KitItem helmet; + private KitItem chestPlate; + private KitItem leggings; + private KitItem boots; + private KitItem offHand; + + private String permission; + + public Kit(String name, double cost, int delay, List<KitItem> contents, KitItem helmet, KitItem chestPlate, + KitItem leggings, KitItem boots, KitItem offHand, String permission) { + this.name = name; + this.cost = cost; + this.delay = delay; + this.contents = contents; + this.helmet = helmet; + this.chestPlate = chestPlate; + this.leggings = leggings; + this.boots = boots; + this.offHand = offHand; + this.permission = permission; + } + + public List<ItemStack> getItems() { + List<ItemStack> items = new ArrayList<>(); + for (KitItem item : this.contents) { + GameItem g = item.getItem(); + if (g != null) { + ItemStack i = g.getItem(); + i.setAmount(item.getAmount()); + items.add(i); + } + } + return items; + + } + + public String getName() { + return this.name; + } + + public void setName(String name) { + this.name = name; + } + + public double getCost() { + return this.cost; + } + + public void setCost(double cost) { + this.cost = cost; + } + + public int getDelay() { + return this.delay; + } + + public void setDelay(int delay) { + this.delay = delay; + } + + public List<KitItem> getContents() { + return this.contents; + } + + public void setContents(List<KitItem> contents) { + this.contents = contents; + } + + public KitItem getHelmet() { + return this.helmet; + } + + public void setHelmet(KitItem helmet) { + this.helmet = helmet; + } + + public KitItem getChestPlate() { + return this.chestPlate; + } + + public void setChestPlate(KitItem chestPlate) { + this.chestPlate = chestPlate; + } + + public KitItem getLeggings() { + return this.leggings; + } + + public void setLeggings(KitItem leggings) { + this.leggings = leggings; + } + + public KitItem getBoots() { + return this.boots; + } + + public void setBoots(KitItem boots) { + this.boots = boots; + } + + public KitItem getOffHand() { + return this.offHand; + } + + public void setOffHand(KitItem offHand) { + this.offHand = offHand; + } + + public String getPermission() { + return this.permission; + } + + public void setPermission(String permission) { + this.permission = permission; + } + + public Material getMaterial() { + KitItem i = this.contents.get(0); + if (i == null) + return Material.STONE; + GameItem g = i.getItem(); + if (g == null) + return Material.STONE; + ItemStack it = g.getItem(); + if (it == null) + return Material.STONE; + return it.getType(); + } + + public String getDisplayName() { + UserRank rank = UserRank.getUserRankOrNull(this.name); + return Utils.f(rank == null ? "&e&l" + String.valueOf(this.name.charAt(0)).toUpperCase() + this.name.substring(1) + : rank.getColoredNameBold()); + } + + public boolean hasArmor() { + return this.helmet != null || this.chestPlate != null || this.leggings != null || this.boots != null; + } + +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/KitCommand.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/KitCommand.java new file mode 100644 index 0000000..b77d863 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/KitCommand.java @@ -0,0 +1,387 @@ +package net.grandtheftmc.vice.items; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.menus.MenuManager; +import net.grandtheftmc.vice.Vice; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.PlayerInventory; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +public class KitCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command c, String lbl, String[] args) { + if (s instanceof Player && !s.hasPermission("command.kit")) { + MenuManager.openMenu((Player) s, "kits"); + return true; + } + if (args.length == 0) { + s.sendMessage(Utils.f("&c/kit add <name> <cost> <delay> [permission]")); + s.sendMessage(Utils.f("&c/kit setcost <name> <cost>")); + s.sendMessage(Utils.f("&c/kit setdelay <name> <delay>")); + s.sendMessage(Utils.f("&c/kit give <player> <kit>")); + s.sendMessage(Utils.f("&c/kit give [r=5] <kit> <x,y,z>")); + s.sendMessage(Utils.f("&c/kit setpermission <name> <permission/none>")); + s.sendMessage(Utils.f("&c/kit set <name>")); + s.sendMessage(Utils.f("&c/kit list [page]")); + s.sendMessage(Utils.f("&c/kit load")); + s.sendMessage(Utils.f("&c/kit save")); + return true; + } + ItemManager im = Vice.getItemManager(); + switch (args[0]) { + case "setcost": { + if (args.length < 3) { + s.sendMessage(Utils.f("&c/kit setcost <name> <cost>")); + return true; + } + String name = args[1]; + Kit kit = im.getKit(name); + if (kit == null) { + s.sendMessage(Lang.KITS.f("&7That kit does not exist!")); + return true; + } + double cost = 0; + try { + cost = Double.parseDouble(args[2]); + } catch (NumberFormatException e) { + s.sendMessage(Lang.KITS.f("&7The cost must be a number!")); + } + kit.setCost(cost); + s.sendMessage( + Lang.KITS.f("&7The cost of kit &a" + kit.getName() + "&7 has been set to &a$&l" + cost + "&7!")); + return true; + } + case "setdelay": { + if (args.length < 3) { + s.sendMessage(Utils.f("&c/kit setdelay <name> <delay>")); + return true; + } + String name = args[1]; + Kit kit = im.getKit(name); + if (kit == null) { + s.sendMessage(Lang.KITS.f("&7That kit does not exist!")); + return true; + } + int delay = 0; + try { + delay = Integer.parseInt(args[2]); + } catch (NumberFormatException e) { + s.sendMessage(Lang.KITS.f("&7The cost must be a number!")); + } + kit.setDelay(delay); + s.sendMessage( + Lang.KITS.f("&7The delay of kit &a" + kit.getName() + "&7 has been set to &a" + delay + "&7!")); + return true; + } + case "setpermission": { + if (args.length < 3) { + s.sendMessage(Utils.f("&c/kit setpermission <name> <permission/none>")); + return true; + } + String name = args[1]; + Kit kit = im.getKit(name); + if (kit == null) { + s.sendMessage(Lang.KITS.f("&7That kit does not exist!")); + return true; + } + kit.setPermission("none".equalsIgnoreCase(args[2]) ? null : args[2]); + s.sendMessage( + Lang.KITS.f("&7The delay of kit &a" + kit.getName() + "&7 has been set to &a" + args[2] + "&7!")); + return true; + } + case "set": { + if (!(s instanceof Player)) { + s.sendMessage(Lang.NOTPLAYER.s()); + return true; + } + Player player = (Player)s; + if (args.length < 2) { + s.sendMessage(Utils.f("&c/kit set <name>")); + return true; + } + String name = args[1]; + Kit kit = im.getKit(name); + if (kit == null) { + s.sendMessage(Lang.KITS.f("&7That kit does not exist!")); + return true; + } + PlayerInventory inv = player.getInventory(); + List<KitItem> contents = new ArrayList<>(); + for (int i = 0; i <= 35; i++) { + ItemStack item = inv.getItem(i); + if (item == null || i == 16 || i == 17) + continue; + GameItem gameItem = im.getItem(item); + if (gameItem == null) { + s.sendMessage(Lang.KITS.f("&7The items in slot &a" + i + + "&7 of your inventory is not registered as a GameItem! Use &a/additem&7 or &a/addweapon&7 to add it!")); + return true; + } + contents.add(new KitItem(gameItem, item.getAmount())); + } + kit.setContents(contents); + if (inv.getHelmet() != null) { + GameItem item = im.getItem(inv.getHelmet()); + if (item == null) { + s.sendMessage(Lang.KITS.f( + "&7The items in your helmet slot is not registered as a GameItem! Use &a/additem&7 or &a/addweapon&7 to add it!")); + return true; + } + kit.setHelmet(new KitItem(item, inv.getHelmet().getAmount())); + } + if (inv.getChestplate() != null) { + GameItem item = im.getItem(inv.getChestplate()); + if (item == null) { + s.sendMessage(Lang.KITS.f( + "&7The items in your chestplate slot is not registered as a GameItem! Use &a/additem&7 or &a/addweapon&7 to add it!")); + return true; + } + kit.setChestPlate(new KitItem(item, inv.getChestplate().getAmount())); + } + if (inv.getLeggings() != null) { + GameItem item = im.getItem(inv.getLeggings()); + if (item == null) { + s.sendMessage(Lang.KITS.f( + "&7The items in your leggings slot is not registered as a GameItem! Use &a/additem&7 or &a/addweapon&7 to add it!")); + return true; + } + kit.setLeggings(new KitItem(item, inv.getLeggings().getAmount())); + } + if (inv.getBoots() != null) { + GameItem item = im.getItem(inv.getBoots()); + if (item == null) { + s.sendMessage(Lang.KITS.f( + "&7The items in your boots slot is not registered as a GameItem! Use &a/additem&7 or &a/addweapon&7 to add it!")); + return true; + } + kit.setBoots(new KitItem(item, inv.getBoots().getAmount())); + } + if (inv.getItemInOffHand() != null && inv.getItemInOffHand().getType() != Material.AIR) { + GameItem item = im.getItem(inv.getItemInOffHand()); + if (item == null) { + s.sendMessage(Lang.KITS.f( + "&7The items in your offhand items slot is not registered as a GameItem! Use &a/additem&7 or &a/addweapon&7 to add it!")); + return true; + } + kit.setOffHand(new KitItem(item, inv.getItemInOffHand().getAmount())); + } + s.sendMessage( + Lang.KITS.f("&7You set the contents, armor and offhand items for kit &a" + kit.getName() + "&7!")); + return true; + } + case "add": { + if (!(s instanceof Player)) { + s.sendMessage(Lang.NOTPLAYER.s()); + return true; + } + Player player = (Player)s; + if (args.length < 4) { + s.sendMessage(Utils.f("&c/kit add <name> <cost> <delay> [permission]")); + return true; + } + String name = args[1]; + Kit kit = im.getKit(name); + if (kit != null) { + s.sendMessage(Lang.KITS.f("&7A kit with that names already exists!")); + return true; + } + double cost = 0; + int delay = 0; + try { + cost = Double.parseDouble(args[2]); + delay = Integer.parseInt(args[3]); + } catch (NumberFormatException e) { + s.sendMessage(Lang.KITS.f("&7The cost/delay must be a number!")); + } + String permission = args.length > 4 ? args[4] : null; + PlayerInventory inv = player.getInventory(); + List<KitItem> contents = new ArrayList<>(); + for (int i = 0; i <= 35; i++) { + ItemStack item = inv.getItem(i); + if (item == null || i == 16 || i == 17) + continue; + GameItem gameItem = im.getItem(item); + if (gameItem == null) { + s.sendMessage(Lang.KITS.f("&7The items in slot &a" + i + + "&7 of your inventory is not registered as a GameItem! Use &a/additem&7 or &a/addweapon&7 to add it!")); + return true; + } + contents.add(new KitItem(gameItem, item.getAmount())); + } + KitItem helmet = null; + KitItem chestPlate = null; + KitItem leggings = null; + KitItem boots = null; + KitItem offHand = null; + if (inv.getHelmet() != null) { + GameItem item = im.getItem(inv.getHelmet()); + if (item == null) { + s.sendMessage(Lang.KITS.f( + "&7The items in your helmet slot is not registered as a GameItem! Use &a/additem&7 or &a/addweapon&7 to add it!")); + return true; + } + helmet = new KitItem(item, inv.getHelmet().getAmount()); + } + if (inv.getChestplate() != null) { + GameItem item = im.getItem(inv.getChestplate()); + if (item == null) { + s.sendMessage(Lang.KITS.f( + "&7The items in your chestplate slot is not registered as a GameItem! Use &a/additem&7 or &a/addweapon&7 to add it!")); + return true; + } + chestPlate = new KitItem(item, inv.getChestplate().getAmount()); + } + if (inv.getLeggings() != null) { + GameItem item = im.getItem(inv.getLeggings()); + if (item == null) { + s.sendMessage(Lang.KITS.f( + "&7The items in your leggings slot is not registered as a GameItem! Use &a/additem&7 or &a/addweapon&7 to add it!")); + return true; + } + leggings = new KitItem(item, inv.getLeggings().getAmount()); + } + if (inv.getBoots() != null) { + GameItem item = im.getItem(inv.getBoots()); + if (item == null) { + s.sendMessage(Lang.KITS.f( + "&7The items in your boots slot is not registered as a GameItem! Use &a/additem&7 or &a/addweapon&7 to add it!")); + return true; + } + boots = new KitItem(item, inv.getBoots().getAmount()); + } + if (inv.getItemInOffHand() != null && inv.getItemInOffHand().getType() != Material.AIR) { + GameItem item = im.getItem(inv.getItemInOffHand()); + if (item == null) { + s.sendMessage(Lang.KITS.f( + "&7The items in your offhand items slot is not registered as a GameItem! Use &a/additem&7 or &a/addweapon&7 to add it!")); + return true; + } + offHand = new KitItem(item, inv.getItemInOffHand().getAmount()); + } + s.sendMessage(Lang.KITS.f("&7Your kit with name &a" + name + "&7 has been added!")); + im.addKit(new Kit(name, cost, delay, contents, helmet, chestPlate, leggings, boots, offHand, permission)); + return true; + } + case "list": + List<Kit> kits = Vice.getItemManager().getKits(); + int page = 1; + if (args.length > 1) { + try { + page = Integer.parseInt(args[1]); + } catch (NumberFormatException e) { + s.sendMessage(Lang.KITS.f("&cThe page must be a number!")); + return true; + } + } + if (page < 1) { + s.sendMessage(Lang.KITS.f("&7The page must be a positive number!")); + return true; + } + int pages = kits.size() / 6 + 1; + s.sendMessage(Utils.f( + " &7&m---------------&7[&a&l Kits &7Page &a" + page + "&7/&a" + pages + " &7&m]---------------")); + Iterator<Kit> it = kits.iterator(); + for (int i = 0; i < page * 6; i++) { + if (!it.hasNext()) + return true; + Kit kit = it.next(); + if (i < page * 6 - 6) + continue; + s.sendMessage(Utils + .f(kit.getDisplayName() + "&7 | Cost: &a$&l" + kit.getCost() + "&7 Delay: &a&l" + kit.getDelay() + + (kit.getPermission() == null ? "" : "&7 Permission: &a" + kit.getPermission()))); + } + return true; + case "load": + Vice.getSettings().setKitsConfig(Utils.loadConfig("kits")); + Vice.getItemManager().loadKits(); + s.sendMessage(Lang.KITS.f("&7Loaded Kits!")); + return true; + case "save": + Vice.getItemManager().saveKits(); + s.sendMessage(Lang.KITS.f("&7Saved Kits!")); + return true; + case "give": + if (args.length != 3) { + if(args[1].contains("[r=")) { + Kit kit = im.getKit(args[2]); + if (kit == null) { + s.sendMessage(Lang.KITS.f("&7That kit does not exist!")); + return true; + } + Location point = new Location(Bukkit.getWorld("minesantos"), 0, 0, 0); + int radius; + try { + String[] test = args[1].split("="); + radius = Integer.valueOf(test[1].replace("]", "")); + if(args.length == 4) { + String[] cords = args[3].split(","); + point.setX(Integer.valueOf(cords[0])); + point.setY(Integer.valueOf(cords[1])); + point.setZ(Integer.valueOf(cords[2])); + } else { + s.sendMessage(Utils.f("Error in your syntax")); + s.sendMessage(Utils.f("Example: /kit give [r=5] hobo x,y,z")); + return true; + } + } catch (Exception exception) { + s.sendMessage(Utils.f("Error in your syntax")); + return true; + } + for(LivingEntity entity : point.getWorld().getLivingEntities()) { + if(entity.getLocation().distance(point) > radius) continue; + if(entity.getType() == EntityType.PLAYER) { + Player target = (Player)entity; + im.giveKitItems(target, Vice.getUserManager().getLoadedUser(target.getUniqueId()), kit); + } + } + return true; + } else { + s.sendMessage(Utils.f("&c/kit give <player> <kit>")); + return true; + } + } + String name = args[2]; + Kit kit = im.getKit(name); + if (kit == null) { + s.sendMessage(Lang.KITS.f("&7That kit does not exist!")); + return true; + } + Player target = Bukkit.getPlayer(args[1]); + if(target == null) { + s.sendMessage(Lang.KITS.f("&7Player not found")); + return false; + } + im.giveKitItems(target, Vice.getUserManager().getLoadedUser(target.getUniqueId()), kit); + s.sendMessage(Lang.KITS.f("&7Kit " + kit.getDisplayName() + " &7has been given to " + target.getDisplayName())); + return true; + default: + s.sendMessage(Utils.f("&c/kit add <name> <cost> <delay> [permission]")); + s.sendMessage(Utils.f("&c/kit setcost <name> <cost>")); + s.sendMessage(Utils.f("&c/kit setdelay <name> <delay>")); + s.sendMessage(Utils.f("&c/kit give <player> <kit>")); + s.sendMessage(Utils.f("&c/kit give [r=5] <kit> <x,y,z>")); + s.sendMessage(Utils.f("&c/kit setpermission <name> <permission/none>")); + s.sendMessage(Utils.f("&c/kit set <name>")); + s.sendMessage(Utils.f("&c/kit list [page]")); + s.sendMessage(Utils.f("&c/kit load")); + s.sendMessage(Utils.f("&c/kit save")); + return true; + } + } + +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/KitItem.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/KitItem.java new file mode 100644 index 0000000..6114f43 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/KitItem.java @@ -0,0 +1,45 @@ +package net.grandtheftmc.vice.items; + +import net.grandtheftmc.core.util.Utils; + +public class KitItem { + + private final GameItem item; + private int amount; + + public KitItem(GameItem item) { + this.item = item; + this.amount = 1; + } + + public KitItem(GameItem item, int amount) { + this.item = item; + this.amount = amount; + } + + public GameItem getItem() { + return this.item; + } + + public GameItem getGameItem() { + return this.item; + } + + public String getDescription() { + try { + return (this.amount > 1 ? "&7" + this.amount + "x " : "") + this.item == null ? "ERROR!!!" : this.item.getDisplayName(); + } catch (Exception e) { + Utils.b("amnt " + this.amount); + Utils.b("item " + this.item == null ? null : this.item.getName()); + return "ERROR!!! dsqd"; + } + } + + public int getAmount() { + return this.amount; + } + + public void setAmount(int amount) { + this.amount = amount; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/Schedule.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/Schedule.java new file mode 100644 index 0000000..90aecf1 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/Schedule.java @@ -0,0 +1,51 @@ +package net.grandtheftmc.vice.items; + +import net.grandtheftmc.core.util.Utils; + +public enum Schedule { + + // IF YOU CHANGE THE DISPLAY NAMES, THE OLD DISPLAY NAMES WILL STILL BE IN THE LORE OF OLD ITEMS AND THE NEW ONE WILL BE ADDED AS WELL! its fucky but whatevz + I("&cSchedule I", 1, 3.0, "magicmushroomred", "magicmushroombrown", "mdma", "lsd", "weed", "marijuanaflower", "joint", "potbrownie", "heroin", "heroinsyringe"), + II("&cSchedule II", 2, 2.0, "meth", "methbaggy", "cocaine", "opium"), + III("&cSchedule III", 3, 1.0, "steroids", "vodka", "alcohol"), + IV("&eSchedule IV", 4, 0.75), + V("&eSchedule V", 5, 0.5), + LIST_II("&eList II", 6, 0.5, "ergotfungi", "safrole", "ephedrasinica", "cocaleaves", "cocaseeds"), + LIST_I("&eList I", 7, 0.25, "opiumpoppies", "ephedrasinicaseeds", "ocoteacymbarum"), + NONE("", -1, 0);//"hop", "hopplant", "potato" + + private final String disp; + private final int priority; + private final double jailMultiplier; + private final String[] substances; + + Schedule(String disp, int priority, double jailMultiplier, String... substances) { + this.disp = Utils.f(disp); + this.priority = priority; + this.jailMultiplier = jailMultiplier; + this.substances = substances; + } + + public String getDisp() { + return this.disp; + } + + public int getPriority() { + return this.priority; + } + + public double getJailMultiplier() { + return this.jailMultiplier; + } + + public String[] getSubstances() { + return this.substances; + } + + public static Schedule of(String name) { + for (Schedule schedule : Schedule.values()) + for (String s : schedule.substances) + if (s.equalsIgnoreCase(name)) return schedule; + return Schedule.NONE; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/ShopCommand.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/ShopCommand.java new file mode 100644 index 0000000..8f7e91a --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/ShopCommand.java @@ -0,0 +1,48 @@ +package net.grandtheftmc.vice.items; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.vice.Vice; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class ShopCommand implements CommandExecutor { + + + @Override + public boolean onCommand(CommandSender s, Command c, String l, String[] args) { + if (!s.hasPermission("command.shop")) { + s.sendMessage(Lang.NOPERM.s()); + return true; + } + if (!(s instanceof Player)) { + s.sendMessage(Lang.NOTPLAYER.s()); + return true; + } + if (args.length == 0) { + s.sendMessage(Utils.f("&c/shop armorupgrade <armorupgrade>")); + s.sendMessage(Utils.f("&c/shop <items> <amount> <price>")); + return true; + } + switch (args[0].toLowerCase()) { + case "armorupgrade": + if (args.length != 2) { + s.sendMessage(Utils.f("&c/shop armorupgrade <armorupgrade>")); + return true; + } + Vice.getShopManager().addArmorUpgradeShop((Player) s, args[1]); + return true; + default: + if (args.length != 3) { + s.sendMessage(Utils.f("&c/shop <items> <amount> <price>")); + } + Vice.getShopManager().addShop((Player) s, args[0], Integer.parseInt(args[1]), Double.parseDouble(args[2])); + return true; + } + + } + +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/ShopManager.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/ShopManager.java new file mode 100644 index 0000000..4fed985 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/ShopManager.java @@ -0,0 +1,291 @@ +package net.grandtheftmc.vice.items; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.menus.MenuManager; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.ViceUtils; +import net.grandtheftmc.vice.users.ViceUser; +import net.grandtheftmc.vice.users.LockedWeapon; +import net.grandtheftmc.vice.users.ViceUserDAO; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.inventory.meta.SkullMeta; +import org.bukkit.scheduler.BukkitRunnable; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.*; +import java.util.stream.Collectors; + +public class ShopManager { + + public ShopManager() { + this.load(); + this.startSchedule(); + } + + + private List<Head> heads = new ArrayList<>(); + + private void load() { + new BukkitRunnable() { + @Override + public void run() { + List<Head> heads = ViceUserDAO.getHeads(); +// try (ResultSet rs = Core.sql.query("select * from " + Core.name() + "_heads;")) { +// while (rs.next()) { +// UUID sellerUUID = null; +// UUID bidderUUID = null; +// try { +// sellerUUID = rs.getString("sellerUUID") == null ? null : UUID.fromString(rs.getString("sellerUUID")); +// bidderUUID = rs.getString("bidderUUID") == null ? null : UUID.fromString(rs.getString("bidderUUID")); +// } catch (Exception ignored) { +// } +// heads.add(new Head(sellerUUID, rs.getString("sellerName"), +// rs.getString("head"), rs.getLong("expiry"), rs.getBoolean("done"), rs.getBoolean("paid"), rs.getBoolean("gaveHead"), bidderUUID, +// rs.getString("bidderName"), rs.getDouble("bid"))); +// } +// rs.close(); +// } catch (SQLException e) { +// e.printStackTrace(); +// } + + new BukkitRunnable() { + @Override + public void run() { + Vice.getShopManager().setHeads(heads); + } + }.runTask(Vice.getInstance()); + } + }.runTaskAsynchronously(Vice.getInstance()); + } + + private void startSchedule() { + new BukkitRunnable() { + @Override + public void run() { + new ArrayList<>(Vice.getShopManager().getHeads()).forEach(Head::update); + } + }.runTaskTimer(Vice.getInstance(), 200L, 200L); + } + + + public void setHeads(List<Head> list) { + this.heads = list; + } + + public List<Head> getHeads() { + return this.heads; + } + + public void removeHead(Head head) { + this.heads.remove(head); + } + + public List<Head> getNonExpiredHeads() { + return this.heads.stream().filter(h -> !h.hasExpired()).collect(Collectors.toList()); + } + + public Set<Head> getNonExpiredHeadsByBid() { + HashMap<Head, Double> unsortMap = new HashMap<>(); + this.heads.stream().filter(h -> !h.hasExpired()).collect(Collectors.toList()).forEach(h -> unsortMap.put(h, h.getBid())); + return sort(unsortMap).keySet(); + } + + public static Map<Head, Double> sort(Map<Head, Double> unsortMap) { + List<Map.Entry<Head, Double>> list = new LinkedList<>(unsortMap.entrySet()); + list.sort(Comparator.comparing(obj -> obj.getValue())); + Map<Head, Double> sortedMap = new LinkedHashMap<>(); + for (Map.Entry<Head, Double> entry : list) { + sortedMap.put(entry.getKey(), entry.getValue()); + } + return sortedMap; + } + + public Head getHead(String head) { + return this.heads.stream().filter(h -> h.getHead().equalsIgnoreCase(head)).findFirst().orElse(null); + } + + public Head getHead(String head, long expiry) { + return this.heads.stream().filter(h -> h.getHead().equalsIgnoreCase(head) && h.getExpiry() == expiry).findFirst().orElse(null); + } + + public Head auctionHead(Player seller, ViceUser user) { + ItemStack item = seller.getInventory().getItemInMainHand(); + if (item == null || item.getType() != Material.SKULL_ITEM || item.getDurability() != 3) { + seller.sendMessage(Lang.HEAD_AUCTION.f("&7That's not a player head!")); + return null; + } + if (item.getAmount() > 1) { + seller.sendMessage(Lang.HEAD_AUCTION.f("&7Please sell auction head at a time!")); + return null; + } + SkullMeta meta = (SkullMeta) item.getItemMeta(); + if (meta.getOwner() == null) { + seller.sendMessage(Lang.HEAD_AUCTION.f("&7That's not a player head!")); + return null; + } + Head head = new Head(seller.getUniqueId(), seller.getName(), meta.getOwner()); + this.heads.add(head); + seller.sendMessage(Lang.HEAD_AUCTION.f("&7You received &a$&l10,000&7 for putting up &e&l" + head.getHead() + "'s Head&7 for auction.")); + user.addMoney(10000); + ViceUtils.updateBoard(seller, user); + seller.getInventory().setItemInMainHand(null); + return head; + } + + public void buy(Player player, ItemStack i) { + if (i == null || !i.hasItemMeta() || !i.getItemMeta().hasDisplayName()) + return; + String disp = ChatColor.stripColor(i.getItemMeta().getDisplayName()).toLowerCase(); + if (!disp.contains("buy: $")) + return; + disp = disp.replace("buy: $", ""); + String[] array = disp.split(" "); + if (array.length == 1) + return; + int amount = 1; + double buyPrice; + boolean hasAmount = array[0].endsWith("x"); + StringBuilder itemName = new StringBuilder(array[hasAmount ? 1 : 0]); + for (int n = hasAmount ? 2 : 1; n < (array.length - 1); n++) + itemName.append(' ').append(array[n]); + try { + if (hasAmount) + amount = Integer.parseInt(array[0].replaceAll("x", "")); + buyPrice = Double.parseDouble(array[array.length - 1]); + } catch (NumberFormatException e) { + for (String anArray : array) player.sendMessage(anArray); + player.sendMessage(Utils.f(Lang.SHOP + + "&cThere was an error while parsing the prices for this shop. Please contact a staff member.")); + return; + } + GameItem item = Vice.getItemManager().getItemFromDisplayName(itemName.toString()); + ViceUser user = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + if (user.isArrested()) { + player.sendMessage(Lang.JAIL.f("&7You can't buy items in jail!")); + return; + } + if(item==null) + return; + if (item.getType() == GameItem.ItemType.WEAPON) { + LockedWeapon l = LockedWeapon.getWeapon(item.getWeaponOrVehicleOrDrug()); + if (l != null && !l.canUseWeapon(user.getRank(), Core.getUserManager().getLoadedUser(player.getUniqueId()).getUserRank())) { + player.sendMessage(Lang.HEY.f("&7You need to rank up to " + l.getViceRank().getColoredNameBold() + "&7 or donate for " + l.getUserRank().getColoredNameBold() + "&7 at &a&lstore.grandtheftmc.net&7 to use the " + item.getDisplayName() + "&7!")); + return; + } + } else if (item.getType() == GameItem.ItemType.ARMOR_UPGRADE) { + player.sendMessage(Lang.HEY.f("&7There is an error with this shop. Please contact an administrator.")); + return; + } + if (user.hasMoney(buyPrice)) { + user.takeMoney(buyPrice); + } else { + + player.sendMessage(Lang.MONEY.f("&7You do not have enough money!")); + return; + + } + ViceUtils.updateBoard(player, Core.getUserManager().getLoadedUser(player.getUniqueId()), user); + switch (item.getType()) { + case VEHICLE: + user.setActionVehicle(item.getWeaponOrVehicleOrDrug()); + MenuManager.openMenu(player, "vehicleshop"); + return; + case AMMO: + AmmoType type = item.getAmmoType(); + if (type != null) + user.addAmmo(type, amount); + player.sendMessage(Lang.SHOP.f("&7You bought " + (amount > 1 ? "&a&l" + amount + "&7x " : "") + + item.getDisplayName() + "&7 for &a$&l" + buyPrice + "&7!")); + return; + case WEAPON: + case ITEMSTACK: + ItemStack stack = item.getItem(); + stack.setAmount(amount); + Utils.giveItems(player, stack); + player.sendMessage(Lang.SHOP.f("&7You bought " + (amount > 1 ? "&a&l" + amount + "&7x " : "") + + item.getDisplayName() + "&7 for &a$&l" + buyPrice + "&7!")); + break; + default: + break; + } + } + + public void buyArmorUpgrade(Player player, String disp) { + disp = disp.toLowerCase(); + disp = ChatColor.stripColor(disp); + ArmorUpgrade upgrade = ArmorUpgrade.getArmorUpgradeFromDisplayName(disp.split(" upgrade")[0]); + if (upgrade == null) return; + ViceUser user = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + if (!upgrade.canUseUpgrade(user.getRank(), Core.getUserManager().getLoadedUser(player.getUniqueId()).getUserRank())) { + player.sendMessage(Lang.HEY.f("&7You need to rank up to " + upgrade.getViceRank().getColoredNameBold() + "&7 or donate for " + upgrade.getUserRank().getColoredNameBold() + "&7 at &a&lstore.grandtheftmc.net&7 to use the &b&l" + upgrade.getDisplayName() + " Armor Upgrade&7!")); + return; + } + ItemStack item = player.getInventory().getItemInMainHand(); + GameItem gameItem = item == null ? null : Vice.getItemManager().getItem(item.getType()); + if (item == null || gameItem == null || !upgrade.canBeUsedOn(gameItem.getName())) { + player.sendMessage(Lang.HEY.f("&7The &b&l" + upgrade.getDisplayName() + " Armor Upgrade&7 can be applied to the following types of items: " + upgrade.getTypesString() + "&7!")); + return; + } + for (Enchantment e : item.getEnchantments().keySet()) + Utils.b(e.getName()); + if (ArmorUpgrade.getArmorUpgrades(item).contains(upgrade)) { + player.sendMessage(Lang.ARMOR_UPGRADE.f("&7That piece of armor already has the &b&l" + upgrade.getDisplayName() + " Armor Upgrade&7!")); + return; + } + if (!user.hasMoney(upgrade.getPrice())) { + player.sendMessage(Lang.ARMOR_UPGRADE.f("&7You can't afford the &b&l" + upgrade.getDisplayName() + " Armor Upgrade&7!")); + return; + } + user.setBuyingArmorUpgrade(upgrade); + MenuManager.openMenu(player, "armorupgrade"); + } + + public void addShop(Player player, String itemName, int amount, double buyPrice) { + GameItem item = Vice.getItemManager().getItem(itemName); + if (item == null) { + player.sendMessage(Lang.SHOP.f("&cThat items does not exist!")); + return; + } + if (buyPrice < 0) { + player.sendMessage(Lang.SHOP.f("&7The price must be 0 or higher!")); + return; + } + ItemStack i = item.getItem().clone(); + ItemMeta meta = i.getItemMeta(); + meta.setDisplayName(Utils.f("&a&l" + amount + "&7x " + item.getDisplayName() + " &a&lBUY&f: &a$&l" + buyPrice)); + i.setItemMeta(meta); + i.setAmount(1); + player.getInventory().addItem(i); + player.sendMessage(Lang.SHOP.f("&7Please add the items into an itemframe to create a shop!")); + } + + public void addArmorUpgradeShop(Player player, String name) { + ArmorUpgrade armorUpgrade = ArmorUpgrade.getArmorUpgrade(name); + if (armorUpgrade == null) { + player.sendMessage(Lang.SHOP.f("&cThat armor upgrade does not exist!")); + return; + } + GameItem item = Vice.getItemManager().getItem(armorUpgrade); + if (item == null) { + player.sendMessage(Lang.SHOP.f("&cThat game items does not exist!")); + return; + } + ItemStack i = item.getItem().clone(); + ItemMeta meta = i.getItemMeta(); + meta.setDisplayName(Utils.f("&b&lArmor Upgrade: &a&l" + armorUpgrade.getDisplayName())); + i.setItemMeta(meta); + i.setAmount(1); + player.getInventory().addItem(i); + player.sendMessage(Lang.SHOP.f("&7Please add the items into an itemframe to create a shop!")); + } + + +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/recipes/BottleCraftingRecipe.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/recipes/BottleCraftingRecipe.java new file mode 100644 index 0000000..c2631b7 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/recipes/BottleCraftingRecipe.java @@ -0,0 +1,24 @@ +package net.grandtheftmc.vice.items.recipes; + +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.items.recipetypes.OtherRecipeItem; +import net.grandtheftmc.vice.items.recipetypes.RecipeType; +import org.bukkit.Material; +import org.bukkit.inventory.FurnaceRecipe; +import org.bukkit.inventory.ItemStack; + +/** + * Created by Timothy Lampen on 2017-08-09. + */ +public class BottleCraftingRecipe extends OtherRecipeItem { + public BottleCraftingRecipe() { + super(RecipeType.FURNACE); + } + + @Override + protected void register() { + FurnaceRecipe hopPlantToHop = new FurnaceRecipe(new ItemStack(Material.GLASS_BOTTLE), Material.GLASS); + setRecipe(hopPlantToHop); + addIngredient(new ItemStack(Material.GLASS), 1); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/recipetypes/BrewingRecipeItem.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/recipetypes/BrewingRecipeItem.java new file mode 100644 index 0000000..bd93c06 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/recipetypes/BrewingRecipeItem.java @@ -0,0 +1,66 @@ +package net.grandtheftmc.vice.items.recipetypes; + +import net.grandtheftmc.vice.items.recipetypes.RecipeItem; +import net.grandtheftmc.vice.items.recipetypes.RecipeType; +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.PotionMeta; +import org.bukkit.potion.PotionData; + +/** + * Created by Timothy Lampen on 7/11/2017. + */ +public abstract class BrewingRecipeItem extends RecipeItem { + + private ItemStack ingredient; + private ItemStack result; + private ItemStack child; + private String name; + + + public BrewingRecipeItem() { + super(RecipeType.BREWING); + } + + + public RecipeType getType() { + return RecipeType.BREWING; + } + + /** + * @param isActualPotion if the item is an actual Material potion + * @apiNote finalizeSetup() MUST be done after super() call in the item classes + */ + public void finalizeSetup(ItemStack result, String baseName, ItemStack ingredient, ItemStack child, boolean isActualPotion) { + this.result = result; + this.name = isActualPotion ? constructPotionName(result.getType(), baseName, ((PotionMeta)result.getItemMeta()).getBasePotionData()) : baseName; + this.ingredient = ingredient; + this.child = child; + } + + public ItemStack getIngredient() { + return ingredient; + } + + public ItemStack getChild() { + return child; + } + + + + public ItemStack getResult() { + return result; + } + + private String constructPotionName(Material mat, String baseName, PotionData data){ + String name = data.isExtended() ? "Extended " : " "; + name += mat==Material.SPLASH_POTION ? "Splash" : ""; + name += " Potion of " + baseName; + name += data.isUpgraded() ? " II" : ""; + return name; + } + + public String getName() { + return name; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/recipetypes/CraftingRecipeItem.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/recipetypes/CraftingRecipeItem.java new file mode 100644 index 0000000..95e3987 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/recipetypes/CraftingRecipeItem.java @@ -0,0 +1,32 @@ +package net.grandtheftmc.vice.items.recipetypes; + +import net.grandtheftmc.vice.Vice; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.inventory.*; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +/** + * Created by Timothy Lampen on 7/10/2017. + */ +public abstract class CraftingRecipeItem extends RecipeItem{ + + protected Recipe recipe = null; + + public CraftingRecipeItem(RecipeType type){ + super(type); + register(); + } + + public Recipe getRecipe() { + return this.recipe; + } + + protected abstract void register(); + + public abstract boolean validate(ItemStack[] matrix); + +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/recipetypes/OtherRecipeItem.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/recipetypes/OtherRecipeItem.java new file mode 100644 index 0000000..8db1400 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/recipetypes/OtherRecipeItem.java @@ -0,0 +1,66 @@ +package net.grandtheftmc.vice.items.recipetypes; + +import net.grandtheftmc.vice.Vice; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.inventory.*; + +import java.util.*; + +/** + * Created by Timothy Lampen on 2017-08-06. + */ +public abstract class OtherRecipeItem extends CraftingRecipeItem{ + private HashMap<ItemStack, Integer> ingredients; + public OtherRecipeItem(RecipeType type) { + super(type); + } + //This integrated validate method should only be used for shapeless and furnace recipes, NOT for shaped. + //this also assumes that the correct amount of each items is present. + public boolean validate(ItemStack[] matrix){ + if(ingredients.size()==0) + return false; + switch (this.getType()){ + case FURNACE: + return matrix.length==1 && ingredients.keySet().stream().anyMatch(itemStack -> itemStack.isSimilar(matrix[0])); + case SHAPELESS_CRAFTING: { + HashMap<ItemStack, Integer> ingredientsCopy = (HashMap<ItemStack, Integer>) this.ingredients.clone(); + for (ItemStack is : matrix) { + if(is==null || is.getType()== Material.AIR){ + continue; + } + ItemStack compareable = is.clone(); + compareable.setAmount(1); + if(ingredientsCopy.containsKey(compareable)){ + ingredientsCopy.put(compareable, ingredientsCopy.get(compareable)-1); + } + } + return ingredientsCopy.values().stream().allMatch(integer -> integer==0); + } + } + return false; + } + + protected void setRecipe(Recipe r){ + this.recipe = r; + if(getType()==RecipeType.FURNACE){ + Bukkit.addRecipe(r); + } + } + protected void addIngredient(ItemStack is, int amount){ + if(this.ingredients==null) + this.ingredients = new HashMap<>(); + switch (this.getType()){ + case SHAPELESS_CRAFTING: + ingredients.put(is, amount); + ((ShapelessRecipe)this.recipe).addIngredient(amount, is.getData()); + case FURNACE: { + ingredients.put(is, amount); + } + } + } + + public HashMap<ItemStack, Integer> getIngredients() { + return ingredients; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/recipetypes/RecipeItem.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/recipetypes/RecipeItem.java new file mode 100644 index 0000000..6b9f6f4 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/recipetypes/RecipeItem.java @@ -0,0 +1,17 @@ +package net.grandtheftmc.vice.items.recipetypes; + +/** + * Created by Timothy Lampen on 7/15/2017. + */ +public abstract class RecipeItem { + + private RecipeType type; + + public RecipeItem(RecipeType type){ + this.type = type; + } + + public RecipeType getType() { + return type; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/recipetypes/RecipeType.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/recipetypes/RecipeType.java new file mode 100644 index 0000000..c33ba95 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/recipetypes/RecipeType.java @@ -0,0 +1,8 @@ +package net.grandtheftmc.vice.items.recipetypes; + +/** + * Created by Timothy Lampen on 7/10/2017. + */ +public enum RecipeType { + SHAPELESS_CRAFTING, SHAPED_CRAFTING, FURNACE, BREWING +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/recipetypes/ShapedRecipeItem.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/recipetypes/ShapedRecipeItem.java new file mode 100644 index 0000000..6cd880b --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/recipetypes/ShapedRecipeItem.java @@ -0,0 +1,55 @@ +package net.grandtheftmc.vice.items.recipetypes; + +import net.grandtheftmc.vice.Vice; +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.Recipe; +import org.bukkit.inventory.ShapedRecipe; + +import java.util.HashMap; + +/** + * Created by Timothy Lampen on 2017-08-06. + */ +public abstract class ShapedRecipeItem extends CraftingRecipeItem { + + private HashMap<Character, ItemStack> ingredients = new HashMap<>(); + + public ShapedRecipeItem() { + super(RecipeType.SHAPED_CRAFTING); + register(); + } + + public Recipe getRecipe() { + return this.recipe; + } + + public boolean validate(ItemStack[] matrix){ + ShapedRecipe sRecipe = (ShapedRecipe)recipe; + int pos; + for(int i = 0; i<sRecipe.getShape().length; i++){ + String line = sRecipe.getShape()[i]; + pos = i*3; + for(char id : line.toCharArray()){ + ItemStack compare = this.ingredients.get(id); + if(!compare.isSimilar(matrix[pos])) { + return false; + } + pos++; + } + } + return true; + } + + protected void setRecipe(ShapedRecipe r, SlotContainer... ingredients){ + this.ingredients = new HashMap<>(); + this.recipe = r; + for(SlotContainer container : ingredients){ + this.ingredients.put(container.getId(), container.getItemStack()); + } + } + + public HashMap<Character, ItemStack> getIngredients() { + return ingredients; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/recipetypes/SlotContainer.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/recipetypes/SlotContainer.java new file mode 100644 index 0000000..befd53e --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/items/recipetypes/SlotContainer.java @@ -0,0 +1,24 @@ +package net.grandtheftmc.vice.items.recipetypes; + +import org.bukkit.inventory.ItemStack; + +/** + * Created by Timothy Lampen on 2017-08-06. + */ +public class SlotContainer { + private char id; + private ItemStack is; + + public SlotContainer(char id, ItemStack is){ + this.id = id; + this.is = is; + } + + public char getId() { + return id; + } + + public ItemStack getItemStack() { + return is; + } +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/ArmorEquip.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/ArmorEquip.java new file mode 100644 index 0000000..6490211 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/ArmorEquip.java @@ -0,0 +1,30 @@ +package net.grandtheftmc.vice.listeners; + + +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.events.EquipArmorType; +import net.grandtheftmc.vice.items.ArmorUpgrade; +import net.grandtheftmc.vice.events.ArmorEquipEvent; +import org.bukkit.attribute.Attribute; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.inventory.ItemStack; +import org.bukkit.potion.PotionEffect; +import org.bukkit.scheduler.BukkitRunnable; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashSet; + +/** + * Created by Timothy Lampen on 7/6/2017. + */ +public class ArmorEquip implements Listener { + + @EventHandler + public void onArmorEquip(ArmorEquipEvent event) { + Player player = event.getPlayer(); + ArmorUpgrade.reloadArmorUpgrades(player); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/BlockDispense.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/BlockDispense.java new file mode 100644 index 0000000..d390eae --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/BlockDispense.java @@ -0,0 +1,23 @@ +package net.grandtheftmc.vice.listeners; + +import net.grandtheftmc.vice.Vice; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockDispenseEvent; + +/** + * Created by Timothy Lampen on 3/10/2018. + */ +public class BlockDispense implements Listener { + + @EventHandler + public void onDispense(BlockDispenseEvent event) { + Block b = event.getBlock(); + if(b.getType()== Material.DROPPER) { + if(Vice.getInstance().getMachineManager().getMachineByLocation(b.getLocation()).isPresent()) + event.setCancelled(true); + } + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/BlockPlace.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/BlockPlace.java new file mode 100644 index 0000000..8259c9b --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/BlockPlace.java @@ -0,0 +1,47 @@ +package net.grandtheftmc.vice.listeners; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.util.Utils; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.block.CreatureSpawner; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockPlaceEvent; +import org.bukkit.inventory.ItemStack; + +/** + * Created by Timothy Lampen on 2017-08-09. + */ +public class BlockPlace implements Listener { + + @EventHandler + public void onPlace(BlockPlaceEvent event){ + Block b = event.getBlockPlaced(); + Player player = event.getPlayer(); + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + switch (b.getType()) { + case MOB_SPAWNER: { + ItemStack hand = event.getItemInHand(); + if(hand.hasItemMeta() && hand.getItemMeta().hasDisplayName()) { + EntityType type = EntityType.valueOf(ChatColor.stripColor(hand.getItemMeta().getDisplayName()).toUpperCase().replace(" SPAWNER", "").replace(" ", "_")); + CreatureSpawner spawner = (CreatureSpawner)b.getState(); + spawner.setSpawnedType(type); + spawner.update(); + } + } + } + + ItemStack item = event.getItemInHand(); + + if (item != null && item.getType() == Material.CHEST) { + if (item.getItemMeta() != null && item.getItemMeta().getDisplayName() != null && item.getItemMeta().getDisplayName().equals(Utils.f("&6&lBackpack"))) { + event.setCancelled(true); + } + } + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/BreakBlock.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/BreakBlock.java new file mode 100644 index 0000000..6508bfb --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/BreakBlock.java @@ -0,0 +1,62 @@ +package net.grandtheftmc.vice.listeners; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.State; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.users.CheatCode; +import net.grandtheftmc.vice.users.ViceUser; +import net.grandtheftmc.vice.utils.StringUtils; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.block.CreatureSpawner; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockBreakEvent; +import net.grandtheftmc.vice.world.obsidianbreaker.BlockStatus; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +public class BreakBlock implements Listener{ + + @EventHandler(ignoreCancelled = true) + public void onBreak(BlockBreakEvent event) { + Block block = event.getBlock(); + Player player = event.getPlayer(); + switch (block.getType()) { + case CHEST: + if (Vice.getCrateManager().getCrate(block.getLocation()) == null) return; + event.setCancelled(true); + player.sendMessage(Lang.LOOTCRATES.f("&7You can't break this Loot Crate!")); + break; + case MOB_SPAWNER: { + ViceUser user = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + if(user.getCheatCodeState(CheatCode.SILKSPAWNERS).getState()== State.ON) { + ItemStack hand = player.getInventory().getItemInMainHand(); + if(hand!=null && hand.containsEnchantment(Enchantment.SILK_TOUCH)){ + CreatureSpawner spawner = (CreatureSpawner)block.getState(); + ItemStack is = new ItemStack(Material.MOB_SPAWNER); + ItemMeta im = is.getItemMeta(); + im.setDisplayName(ChatColor.YELLOW + StringUtils.getCapitalized(spawner.getSpawnedType().toString().toLowerCase().replace("_", " ")) + ChatColor.GRAY + " spawner"); + is.setItemMeta(im); + player.getWorld().dropItemNaturally(block.getLocation(), is); + event.setExpToDrop(0); + } + } + } + default: + break; + } + if(!event.isCancelled()){ + BlockStatus status = Vice.getWorldManager().getObsidianManager().getDamageStorage().getBlockStatus(block, false); + if(status!=null){ + Vice.getWorldManager().getObsidianManager().getDamageStorage().removeBlockStatus(status); + Vice.getWorldManager().getObsidianManager().getNMSHandler().sendCrackEffect(block.getLocation(), -1); + } + + + } + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/CartelsComponent.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/CartelsComponent.java new file mode 100644 index 0000000..15ddfe7 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/CartelsComponent.java @@ -0,0 +1,62 @@ +package net.grandtheftmc.vice.listeners; + +import net.grandtheftmc.core.util.C; +import net.grandtheftmc.core.util.Component; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.hologram.CoreHologram; +import net.grandtheftmc.vice.hologram.CoreHologramNode; +import net.grandtheftmc.vice.hologram.event.HologramReceiveEvent; +import net.grandtheftmc.vice.hologram.exception.HologramDuplicateNodeException; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.event.EventHandler; + +/** + * Created by Luke Bingham on 03/08/2017. + */ +public class CartelsComponent implements Component<CartelsComponent, Vice> { + +// private final Vice vice; +// private final TagManager<Vice> tagManager; +// +// public CartelsComponent(Vice vice, TagManager<Vice> tagManager) { +// this.vice = vice; +// this.tagManager = tagManager; +// Bukkit.getPluginManager().registerEvents(this, vice); +// } +// +// @EventHandler(priority = EventPriority.MONITOR) +// protected final void onCartelCreate(FactionCreateEvent event) { +// if(event.isCancelled()) return; +// Player player = event.getFPlayer().getPlayer(); +// +// Nametag nametag = tagManager.getPlayerNametag(player); +// if(nametag == null) return; +// +// Tag tag = tagManager.getTagByUid(player, 3); +// if(tag == null) { +// Tag parent = nametag.getTag(2).orElse(null); +// if(parent == null) return; +// tagManager.createTag(NMSVersion.MC_1_12, player, 3, event.getFactionTag(), parent); +// } +// else { +// tagManager.changeTag(player, 3, event.getFactionTag()); +// } +// +// tagManager.refreshAll(player); +// } +// +// @EventHandler(priority = EventPriority.MONITOR) +// protected final void onCartelTagChange(FactionRenameEvent event) { +// if(event.isCancelled()) return; +// Player player = event.getfPlayer().getPlayer(); +// +// Nametag nametag = tagManager.getPlayerNametag(player); +// if(nametag == null) return; +// +// Tag tag = tagManager.getTagByUid(player, 3); +// if(tag != null) nametag.delete(player, tag); +// +// this.tagManager.refreshAll(player); +// } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/ChangeWorld.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/ChangeWorld.java new file mode 100644 index 0000000..69590c6 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/ChangeWorld.java @@ -0,0 +1,31 @@ +package net.grandtheftmc.vice.listeners; + +import net.grandtheftmc.vice.Vice; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerChangedWorldEvent; +import org.bukkit.potion.PotionEffectType; + +import java.util.Objects; + +public class ChangeWorld implements Listener { + + @EventHandler + public void onSwitch(PlayerChangedWorldEvent e) { + Player player = e.getPlayer(); + if (Objects.equals(player.getWorld(), Vice.getWorldManager().getWarpManager().getSpawn().getLocation().getWorld())) { + player.setHealth(player.getMaxHealth()); + player.setFireTicks(0); + Vice.getDrugManager().getEffectManager().cancelEffects(player); + } else { + player.removePotionEffect(PotionEffectType.SPEED); + } + + for (Player online : Bukkit.getOnlinePlayers()) { + if (online.equals(player)) continue; + online.showPlayer(player); + } + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/Chat.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/Chat.java new file mode 100644 index 0000000..573ff44 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/Chat.java @@ -0,0 +1,170 @@ +package net.grandtheftmc.vice.listeners; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.menus.MenuManager; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.ViceUtils; +import net.grandtheftmc.vice.tasks.LotteryPlayer; +import net.grandtheftmc.vice.users.ViceUser; +import net.grandtheftmc.vice.users.storage.BooleanStorageType; +import net.md_5.bungee.api.ChatColor; +import net.md_5.bungee.api.chat.ClickEvent; +import net.md_5.bungee.api.chat.ComponentBuilder; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.scheduler.BukkitRunnable; + +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +public class Chat implements Listener { + private final Map<String, Map<String, Integer>> recentChats = new HashMap<>(); + + @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) + public void onChat(AsyncPlayerChatEvent e) { + Player player = e.getPlayer(); + UUID uuid = player.getUniqueId(); + String msg = e.getMessage(); + ViceUser user = Vice.getUserManager().getLoadedUser(uuid); + User coreUser = Core.getUserManager().getLoadedUser(player.getUniqueId()); + if (user.getBooleanFromStorage(BooleanStorageType.BRIBING)) { + e.setCancelled(true); + new BukkitRunnable() { + @Override + public void run() { + Player player = Bukkit.getPlayer(uuid); + if (player == null) + return; + ViceUser user = Vice.getUserManager().getLoadedUser(uuid); + if ("quit".equalsIgnoreCase(msg)) { + user.setBooleanToStorage(BooleanStorageType.BRIBING, false); + player.sendMessage(Lang.BRIBE.f("&7You canceled bribing the cop who arrested you.")); + return; + } + if (!user.isArrested()) { + user.setBooleanToStorage(BooleanStorageType.BRIBING, false); + player.sendMessage(Lang.BRIBE.f("&7You are not in jail!")); + return; + } + if (user.getJailTimer() < 5) { + user.setBooleanToStorage(BooleanStorageType.BRIBING, false); + player.sendMessage(Lang.BRIBE.f("&7You are already being released!")); + return; + } + Player cop = Bukkit.getPlayer(user.getJailCop()); + ViceUser copUser = cop == null ? null : Vice.getUserManager().getLoadedUser(cop.getUniqueId()); + if (cop == null || !copUser.isCop()) { + player.sendMessage(Lang.BRIBE.f("&7The cop who arrested you (&3&l" + user.getJailCopName() + "&7) is off duty!")); + return; + } + double amnt; + try { + amnt = Utils.round(Double.parseDouble(msg)); + } catch (NumberFormatException e1) { + player.sendMessage( + Utils.f(Lang.BRIBE + "&7Please enter a valid number or type &a\"quit\"&7!")); + return; + } + if (amnt < 5000) { + player.sendMessage(Lang.BRIBE.f("&7Bribes must be at least &a$&l5,000!")); + return; + } + if (user.getBribe() * 1.05 > amnt) { + player.sendMessage(Lang.BRIBE.f("&7You must raise the bribe by at least &a&l5%&7 of &a$&l" + user.getBribe() + "&7 (&a$&l" + (user.getBribe() * 1.05) + "&7)! Please enter a valid number or type &a\"quit\"&7!")); + return; + } + if (!user.hasMoney(amnt)) { + player.sendMessage(Lang.BRIBE.f("&7You don't have &c$&l" + amnt + "&7! Please enter a valid number or type &a\"quit\"&7!")); + return; + } + user.setBribe(amnt); + player.sendMessage(Lang.BRIBE.f("&7You sent a bribe offer of &a$&l" + amnt + "&7 to &3&l" + cop.getName() + "&7. You can negotiate with them using &a\"/msg " + cop.getName() + "\"&7!")); + cop.spigot().sendMessage(new ComponentBuilder(Lang.BRIBE.f("&7A bribe offer of &a$&l" + amnt + "&7 was sent to you by &3&l" + player.getName() + "&7!")).append(" [ACCEPT] ").color(ChatColor.GREEN).bold(true).event(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/bribe accept " + player.getName())).append("[DENY]").color(ChatColor.DARK_RED).bold(true).event(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/bribe deny " + player.getName())).create()); + } + }.runTask(Vice.getInstance()); + } else if (user.getBooleanFromStorage(BooleanStorageType.BUYING_LOTTERY_TICKETS)) { + e.setCancelled(true); + new BukkitRunnable() { + @Override + public void run() { + Player player = Bukkit.getPlayer(uuid); + if (player == null) + return; + ViceUser user = Vice.getUserManager().getLoadedUser(uuid); + if ("quit".equalsIgnoreCase(msg)) { + user.setBooleanToStorage(BooleanStorageType.BUYING_LOTTERY_TICKETS, false); + player.sendMessage(Utils.f(Lang.LOTTERY + "&7You cancelled buying lottery tickets!")); + MenuManager.openMenu(player, "lottery"); + return; + } + int amnt; + try { + amnt = Integer.parseInt(msg); + } catch (NumberFormatException e1) { + player.sendMessage(Utils.f(Lang.LOTTERY + "&7Please enter a valid number or type &a\"quit\"&7!")); + return; + } + if (amnt < 1) { + player.sendMessage(Utils.f(Lang.LOTTERY + + "&7The minimum amount is &e&l1&7! Enter a valid number or type &a\"quit\"&7!")); + return; + } + if (amnt > 100000) { + player.sendMessage(Utils.f(Lang.LOTTERY + + "&7The maximum amount is &e&l100000&7! Enter a valid number or type &a\"quit\"&7!")); + return; + } + if (!user.hasMoney(amnt * 500)) { + player.sendMessage(Lang.LOTTERY.f("&7You don't have &a$&l" + (amnt * 500) + + "&7 to buy &e&l" + amnt + " Tickets&7! Enter a valid amount or type &a\"quit\"&7!")); + return; + } + user.setBooleanToStorage(BooleanStorageType.BUYING_LOTTERY_TICKETS, false); + user.takeMoney(amnt * 500); + LotteryPlayer p = Vice.getLottery().getLotteryPlayer(uuid); + if (p == null){ p = new LotteryPlayer(uuid, player.getName()); + Vice.getLottery().addLotteryPlayer(p);} + p.addTickets(amnt); + ViceUtils.updateBoard(player, user); + player.sendMessage( + Utils.f(Lang.LOTTERY + "&7You bought &e&l" + amnt + " Tickets&7 for &a$&l" + (amnt * 500) + "&7!")); + } + }.runTask(Vice.getInstance()); + } + /*if (!coreUser.isRank(UserRank.MOD)) { + if (this.recentChats.containsKey(player.getName())) { + if (this.recentChats.get(player.getName()).containsKey(msg)) { + if (this.recentChats.get(player.getName()).get(msg) == 4) { + e.getRecipients().removeAll(e.getRecipients()); + e.getRecipients().add(player); + } else if (this.recentChats.get(player.getName()).get(msg) >= 5) { + e.setCancelled(true); + } + player.sendMessage(Lang.HEY.f("&7Slow down! Spamming can get you in trouble.")); + this.recentChats.get(player.getName()).put(msg, this.recentChats.get(player.getName()).get(msg) + 1); + } else { + this.recentChats.get(player.getName()).put(msg, 1); + } + } else { + this.recentChats.put(player.getName(), new HashMap<>()); + this.recentChats.get(player.getName()).put(msg, 1); + } + new BukkitRunnable() { + @Override + public void run() { + Chat.this.recentChats.get(player.getName()).remove(msg); + } + }.runTaskLater(Vice.getInstance(), 800); + }*/ + } +} + + diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/ChunkLoad.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/ChunkLoad.java new file mode 100644 index 0000000..d495582 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/ChunkLoad.java @@ -0,0 +1,36 @@ +package net.grandtheftmc.vice.listeners; + + +import org.bukkit.Bukkit; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerTeleportEvent; + +/** + * Created by Timothy Lampen on 2017-08-09. + */ +public class ChunkLoad implements Listener { + + + @EventHandler + protected final void onWorldRender(PlayerTeleportEvent event) { + if(event.getCause() == PlayerTeleportEvent.TeleportCause.CHORUS_FRUIT) return; + if(event.getCause() == PlayerTeleportEvent.TeleportCause.SPECTATE) return; + + if(event.getTo() == null || event.getTo().getWorld() == null) return; + if(event.getFrom().getWorld().getName().equals(event.getTo().getWorld().getName())) return; + + if(Bukkit.getOnlinePlayers().stream().filter(p -> p.getWorld().getName().equals(event.getTo().getWorld().getName())).count() <= 1) + Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "hd reload"); + } + + @EventHandler + protected final void onWorldRender(PlayerJoinEvent event) { + if(event.getPlayer() == null) return; + if(event.getPlayer().getLocation().getWorld() == null) return; + + if(Bukkit.getOnlinePlayers().stream().filter(p -> p.getWorld().getName().equals(event.getPlayer().getLocation().getWorld().getName())).count() <= 1) + Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "hd reload"); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/CommandPreProcess.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/CommandPreProcess.java new file mode 100644 index 0000000..0a597d7 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/CommandPreProcess.java @@ -0,0 +1,44 @@ +package net.grandtheftmc.vice.listeners; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.users.CheatCode; +import net.grandtheftmc.vice.users.ViceUser; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerCommandPreprocessEvent; + +/** + * Created by Timothy Lampen on 2017-08-07. + */ +public class CommandPreProcess implements Listener { + + @EventHandler + public void onCommand(PlayerCommandPreprocessEvent event){ + Player player = event.getPlayer(); + ViceUser user = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + String msg = event.getMessage().toLowerCase(); + + if(user.isArrested()){ + if(msg.contains("spawn") || msg.contains("home") || msg.contains("tp") || msg.contains("warp")){ + event.setCancelled(true); + player.sendMessage(Lang.COP.f("&7You cannot issue this command while you are arrested!")); + return; + } + } + + for(CheatCode code : CheatCode.values()) { + switch (code){ + case FEED: + case STACK: + continue; + } + if(msg.equalsIgnoreCase("/" + code.toString())) { + code.activate(Core.getUserManager().getLoadedUser(player.getUniqueId()), user, player, user.getCheatCodeState(code)); + event.setCancelled(true); + } + } + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/CraftItem.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/CraftItem.java new file mode 100644 index 0000000..db4da62 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/CraftItem.java @@ -0,0 +1,108 @@ +package net.grandtheftmc.vice.listeners; + +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.items.GameItem; +import net.grandtheftmc.vice.items.recipetypes.RecipeItem; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryType; +import org.bukkit.event.inventory.PrepareItemCraftEvent; +import org.bukkit.inventory.CraftingInventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.Recipe; +import org.bukkit.scheduler.BukkitRunnable; + +import java.util.Optional; + +/** + * Created by Timothy Lampen on 7/10/2017. + */ +public class CraftItem implements Listener { + + @EventHandler + public void onCraft(PrepareItemCraftEvent event) { + Recipe recipe = event.getRecipe(); + if (recipe != null) { + if (Vice.getItemManager().getBannedCraftingRecipes().contains(recipe.getResult().getType()) && !recipe.getResult().hasItemMeta()) { + event.getInventory().setResult(new ItemStack(Material.AIR)); + return; + } + + for (ItemStack itemStack : event.getInventory().getMatrix()) { + if (itemStack != null && itemStack.getType() == Material.DIAMOND_SPADE && Vice.getItemManager().getItem(itemStack) != null && Vice.getItemManager().getItem(itemStack).getType() == GameItem.ItemType.DRUG) { + event.getInventory().setResult(new ItemStack(Material.AIR)); + return; + } + } + } + + } + + @EventHandler + public void onInteract(InventoryClickEvent event) { + Player player = (Player) event.getWhoClicked(); + if (event.getClickedInventory() != null && (event.getClickedInventory().getType() == InventoryType.WORKBENCH || event.getClickedInventory().getType() == InventoryType.CRAFTING) && event.getSlot() == 0) { + CraftingInventory inv = (CraftingInventory) event.getClickedInventory(); + Optional<RecipeItem> craftingRecipeItem = Vice.getItemManager().getCraftingRecipe(inv.getMatrix()); + if (!craftingRecipeItem.isPresent()) + return; + if (inv.getItem(0) == null) return; + int amt = 0; + event.setCancelled(true); + if (event.getClick().toString().contains("SHIFT")) { + for (int i = 0; i < (event.getClickedInventory().getType() == InventoryType.WORKBENCH ? 9 : 4); i++) { + ItemStack ingredient = inv.getMatrix()[i]; + if (ingredient == null || ingredient.getType() == Material.AIR) + continue; + if (amt == 0 || ingredient.getAmount() < amt) + amt = ingredient.getAmount(); + } + } + ItemStack result = inv.getItem(0).clone(); + if (amt == 0) + amt = 1; + result.setAmount(amt); + if (event.getClick().toString().contains("SHIFT")) { + if (player.getInventory().firstEmpty() == -1) { + return; + } + player.getInventory().addItem(result); + } else if (player.getItemOnCursor() != null && player.getItemOnCursor().getType() != Material.AIR) { + if (player.getItemOnCursor().isSimilar(result)) { + if ((result.getAmount() + player.getItemOnCursor().getAmount()) > result.getMaxStackSize()) { + return; + } else { + result.setAmount(result.getAmount() + player.getItemOnCursor().getAmount()); + player.setItemOnCursor(result); + } + } else { + return; + } + } else { + player.setItemOnCursor(result); + } + for (int i = 1; i < (inv.getType() == InventoryType.WORKBENCH ? 10 : 5); i++) { + ItemStack is = inv.getItem(i); + if (is == null || is.getType() == Material.AIR) + continue; + if (is.getAmount() > amt) { + is.setAmount(is.getAmount() - amt); + } else { + inv.setItem(i, null); + } + } + if (!Vice.getItemManager().getCraftingRecipe(inv.getMatrix()).isPresent()) { + inv.setResult(null); + } + new BukkitRunnable() { + @Override + public void run() { + player.updateInventory(); + } + }.runTaskLater(Vice.getInstance(), 5); + } + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/Damage.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/Damage.java new file mode 100644 index 0000000..2543364 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/Damage.java @@ -0,0 +1,236 @@ +package net.grandtheftmc.vice.listeners; + +import com.j0ach1mmall3.wastedguns.api.events.explosives.ExplosionDamageEntityEvent; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.State; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.guns.weapon.ThrowableWeapon; +import net.grandtheftmc.guns.weapon.ranged.guns.LauncherWeapon; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.drugs.Drug; +import net.grandtheftmc.vice.drugs.DrugService; +import net.grandtheftmc.vice.users.CheatCode; +import net.grandtheftmc.vice.users.ViceUser; +import org.bukkit.GameMode; +import org.bukkit.Material; +import org.bukkit.entity.*; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.entity.EntityExplodeEvent; +import org.bukkit.event.entity.EntityRegainHealthEvent; +import org.bukkit.inventory.ItemStack; + +import java.util.List; +import java.util.Optional; +import java.util.concurrent.TimeUnit; + +public class Damage implements Listener { + + @EventHandler + public void onDamage(EntityDamageEvent e) { + Entity victimEntity = e.getEntity(); + if (!(victimEntity instanceof Player)) return; + Player victim = (Player) victimEntity; + if (victim.getGameMode() == GameMode.SPECTATOR || victim.getWorld().equals(Vice.getWorldManager().getWarpManager().getSpawn().getLocation().getWorld())) { + e.setCancelled(true); + } + else if (e.getCause() == EntityDamageEvent.DamageCause.ENTITY_EXPLOSION || e.getCause() == EntityDamageEvent.DamageCause.BLOCK_EXPLOSION) { + ViceUser user = Vice.getUserManager().getLoadedUser(victim.getUniqueId()); + if (user.hasTeleportProtection()) + e.setCancelled(true); + } + else if(e.getCause()== EntityDamageEvent.DamageCause.FALL) { + ViceUser user = Vice.getUserManager().getLoadedUser(victim.getUniqueId()); + if(user.getCheatCodeState(CheatCode.JELLYLEGS).getState()== State.ON){ + e.setCancelled(true); + } + } + } + + @EventHandler + public void onWeaponExplode(ExplosionDamageEntityEvent event){ + Entity entity = event.getProjectile(); + if(entity.hasMetadata("Rocket")){ + double range = ((LauncherWeapon)entity.getMetadata("Rocket").get(0).value()).getExplosionSize(); + Vice.getWorldManager().getObsidianManager().updateRange(range, entity, 1); + } + else if(entity.hasMetadata("ProximityExplosive")){ + double range = ((ThrowableWeapon)entity.getMetadata("ProximityExplosive").get(0).value()).getExplosionSize(); + Vice.getWorldManager().getObsidianManager().updateRange(range, entity, 1); + } + else if(entity.hasMetadata("StickyExplosive")){ + double range = ((ThrowableWeapon)entity.getMetadata("StickyExplosive").get(0).value()).getExplosionSize(); + Vice.getWorldManager().getObsidianManager().updateRange(range, entity, 1); + } + else if(entity.hasMetadata("Explosive")){ + double range = ((LauncherWeapon)entity.getMetadata("Explosive").get(0).value()).getExplosionSize(); + Vice.getWorldManager().getObsidianManager().updateRange(range, entity, 1); + } + } + + @EventHandler(priority = EventPriority.LOWEST) + public void onExplode(EntityExplodeEvent event){ + Entity e = event.getEntity(); + if(!event.isCancelled() && event.getEntityType()==EntityType.PRIMED_TNT){ + Vice.getWorldManager().getObsidianManager().updateRange(3, e, 1); + } + } + + @EventHandler(priority = EventPriority.MONITOR) + public void onDamageMonitor(EntityDamageEvent e) { + if (!(e.getEntity() instanceof Player)) return; + Player player = (Player) e.getEntity(); + ViceUser user = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + user.updateTintHealth(player, Core.getUserManager().getLoadedUser(player.getUniqueId())); + } + + @EventHandler + public void onExplosionDamageEntityEvent(ExplosionDamageEntityEvent event) { + if (event.getLivingEntity().getType() != EntityType.PLAYER) return; + Player damager = (Player) event.getLivingEntity(); + for (LivingEntity livingEntity : event.getVictims()) { + if (livingEntity.getType() != EntityType.PLAYER) continue; + Player victim = (Player) livingEntity; + ViceUser victimGameUser = Vice.getUserManager().getLoadedUser(victim.getUniqueId()); + if (victimGameUser.hasTeleportProtection()) { + event.getVictims().remove(livingEntity); + return; + } + ViceUser damagerGameUser = Vice.getUserManager().getLoadedUser(damager.getUniqueId()); + if (damagerGameUser.hasTeleportProtection()) { + event.getVictims().remove(livingEntity); + return; + } + } + } + + @EventHandler(ignoreCancelled = true) + public void onDamageByEntity(EntityDamageByEntityEvent e) { + if (e.getDamager() == null) return; + Entity entity = e.getDamager(); + if (entity == null) return; + if (entity instanceof Projectile) { + entity = (Entity) ((Projectile) entity).getShooter(); + } else if (entity instanceof Tameable) { + entity = (Entity) ((Tameable) entity).getOwner(); + } + if (!(e.getEntity() instanceof Player && entity instanceof Player)) return; + Player damager = (Player) entity; + Player victim = (Player) e.getEntity(); + ViceUser victimGameUser = Vice.getUserManager().getLoadedUser(victim.getUniqueId()); + User coreVictimUser = Core.getUserManager().getLoadedUser(victim.getUniqueId()); + if (victimGameUser.hasTeleportProtection()) { + e.setCancelled(true); + long expires = TimeUnit.MILLISECONDS.toSeconds(victimGameUser.getTimeUntilTeleportProtectionExpires()); + if (expires <= 1) { + victimGameUser.setLastTeleport(0); + return; + } + damager.sendMessage(Lang.GTM.f(coreVictimUser.getColoredName(victim) + " &7has teleport protection for &a" + expires + "&7 seconds!")); + return; + } + ViceUser damagerGameUser = Vice.getUserManager().getLoadedUser(damager.getUniqueId()); + if (damagerGameUser.hasTeleportProtection()) { + e.setCancelled(true); + damagerGameUser.setLastTeleport(0); + damager.sendMessage(Lang.COMBATTAG.f("&7Your teleport protection has ended!")); + } + + + } + + @EventHandler(priority = EventPriority.MONITOR) + public void onDamageByEntityMonitor(EntityDamageByEntityEvent e) { + Entity damager = e.getDamager(); + Entity entity = e.getEntity(); + switch (entity.getType()) { + case PLAYER: { + if (e.isCancelled()) + return; + Player player = (Player) entity; + ViceUser user = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + if (damager == null) + return; + if (damager instanceof Projectile) + damager = (Entity) ((Projectile) damager).getShooter(); + else if (entity instanceof Tameable) + damager = (Entity) ((Tameable) entity).getOwner(); + if (!(damager instanceof Player && entity instanceof Player)) + return; + if (!user.isInCombat()) + player.sendMessage(Utils.f(Lang.COMBATTAG + "&7You are now in combat! Do not log out for 10 seconds!")); +// Core.getUserManager().getLoadedUser(player.getUniqueId()).hidePet(player); + user.setLastTag(System.currentTimeMillis()); + if (Vice.getWorldManager().getWarpManager().cancelTaxi(player, user)) + player.sendMessage(Utils.f(Lang.TAXI + "&eYour cab was cancelled!")); + Player dmger = (Player) damager; + ViceUser damagerUser = Vice.getUserManager().getLoadedUser(dmger.getUniqueId()); + if (!damagerUser.isInCombat()) + dmger.sendMessage(Utils.f(Lang.COMBATTAG + "&7You are now in combat! Do not log out for 20 seconds!")); +// Core.getUserManager().getLoadedUser(dmger.getUniqueId()).hidePet(dmger); + damagerUser.setLastTag(System.currentTimeMillis()); + if (Vice.getWorldManager().getWarpManager().cancelTaxi(dmger, damagerUser)) + player.sendMessage(Utils.f(Lang.TAXI + "&eYour cab was cancelled!")); + if (dmger.getInventory().getItemInMainHand() != null) { + Optional<Drug> heroin = ((DrugService) Vice.getDrugManager().getService()).getDrug("heroin"); + if (heroin.isPresent()) { + if (dmger.getInventory().getItemInMainHand().getDurability() == 5 && dmger.getInventory().getItemInMainHand().getType() == Material.FLINT_AND_STEEL) { + heroin.get().apply(player); + dmger.getInventory().setItemInMainHand(new ItemStack(Material.AIR)); + } + } + } + return; + + } + case ITEM_FRAME: { + if (!(damager instanceof Player)) + return; + Player player = (Player) damager; + ItemFrame frame = (ItemFrame) entity; + if (Core.getUserManager().getLoadedUser(player.getUniqueId()).hasEditMode()) + return; + ItemStack item = frame.getItem(); + if (item == null) + return; + Vice.getShopManager().buy(player, frame.getItem()); + return; + } + case VILLAGER: + if(!(damager instanceof Player)) + return; + NPC npc = (Villager)entity; + ViceUser viceUser = Vice.getUserManager().getLoadedUser(damager.getUniqueId()); + if(damager.getWorld().getName().equalsIgnoreCase("spawn") && !viceUser.isCop()) { + damager.sendMessage(Lang.COMBATTAG.f("&7You cannot pickup the items from this NPC as they are in spawn and you are not a cop!")); + return; + } + + List<ItemStack> contents = Vice.getCombatLogManager().getPlayerInventory(npc); + if(contents==null) + return; + for(ItemStack is : contents) + if(is!=null) + entity.getWorld().dropItemNaturally(entity.getLocation(), is); + Vice.getCombatLogManager().addDestroyedNPC(npc); + Vice.getCombatLogManager().removeNPC(npc); + npc.remove(); + return; + default: + break; + } + } + + @EventHandler(priority = EventPriority.MONITOR) + public void onHealthChangeMonitor(EntityRegainHealthEvent e) { + if (!(e.getEntity() instanceof Player)) return; + Player player = (Player) e.getEntity(); + Vice.getUserManager().getLoadedUser(player.getUniqueId()).updateTintHealth(player, Core.getUserManager().getLoadedUser(player.getUniqueId())); + } + +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/Death.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/Death.java new file mode 100644 index 0000000..cb515f1 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/Death.java @@ -0,0 +1,184 @@ +package net.grandtheftmc.vice.listeners; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.users.Pref; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.ViceUtils; +import net.grandtheftmc.vice.events.ArmorEquipEvent; +import net.grandtheftmc.vice.events.EquipArmorType; +import net.grandtheftmc.vice.users.ViceUser; +import net.grandtheftmc.vice.users.storage.BooleanStorageType; +import org.bukkit.*; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; +import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.util.Vector; + +import java.util.*; + +public class Death implements Listener { + + @EventHandler + public void onDeath(PlayerDeathEvent e) { + new ArrayList<>(e.getDrops()).stream().filter(stack -> stack != null && (stack.getType() == Material.WATCH || stack.getType() == Material.COMPASS || stack.getType() == Material.CHEST)).forEach(e.getDrops()::remove); + + Player victim = e.getEntity(); + Player killer = victim.getKiller(); + UUID victimUUID = victim.getUniqueId(); + ViceUser victimGameUser = Vice.getUserManager().getLoadedUser(victimUUID); + User victimUser = Core.getUserManager().getLoadedUser(victimUUID); + + Vice.getDrugManager().getEffectManager().cancelEffects(victim); + + victimGameUser.addDeaths(1); + victimGameUser.setLastTag(-1); + + Collection<Player> hiddenStaff = new ArrayList<>(); + victim.getNearbyEntities(30, 30, 30).forEach(entity -> { + if (entity.getType() != EntityType.PLAYER) return; + Player target = (Player) entity; + if (target.getGameMode() == GameMode.SPECTATOR) { + hiddenStaff.add(target); + victim.hidePlayer(target); + } + }); + + victimGameUser.setKillStreak(0); + if (Vice.getWorldManager().getWarpManager().cancelTaxi(victim, victimGameUser)) + victim.sendMessage(Utils.f(Lang.TAXI + "&eThe taxi was cancelled!")); + victim.setHealth(victim.getMaxHealth()); + victim.spigot().respawn(); + victim.setFireTicks(0); + for (PotionEffect p : victim.getActivePotionEffects()) { + victim.removePotionEffect(p.getType()); + } + + if(victimGameUser.getVehicleTaskId()!=-1) { + victimGameUser.cancelVehicleTeleport(); + victim.sendMessage(Lang.VEHICLES.f("&7You can't " + (victimGameUser.getBooleanFromStorage(BooleanStorageType.SEND_AWAY) ? "send away" : "call") + " while you're dead!")); + } + + victim.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, 180, 0), false); + victim.setGameMode(GameMode.SPECTATOR); + victim.setVelocity(new Vector()); + victim.setFlying(true); + victim.setFoodLevel(20); + victim.playSound(victim.getLocation(), Sound.ENTITY_WITHER_SPAWN, 1, 0.5F); + victim.setFlySpeed(0); + ViceUtils.removeBoard(victim); + //new JLibPlayer(victim).setWorldborderTint(0); +// victimUser.removeCosmetics(victim); + new BukkitRunnable() { + @Override + public void run() { + Player victim = Bukkit.getPlayer(victimUUID); + if (victim == null) return; + User victimUser = Core.getUserManager().getLoadedUser(victim.getUniqueId()); + ViceUser victimGameUser = Vice.getUserManager().getLoadedUser(victim.getUniqueId()); + victim.teleport(Vice.getWorldManager().getWarpManager().getSpawn().getLocation()); + for (PotionEffect p : victim.getActivePotionEffects()) { + victim.removePotionEffect(p.getType()); + } + + hiddenStaff.forEach(target -> { + if (target == null || !target.isOnline()) return; + victim.showPlayer(target); + }); + + hiddenStaff.clear(); + victim.setFoodLevel(20); + victim.setGameMode(GameMode.SURVIVAL); + victim.setFlying(false); + victim.setFlySpeed(0.1F); + ViceUtils.giveGameItems(victim); + ViceUtils.updateBoard(victim, victimGameUser); +// victimUser.loadLastCosmetics(victim); + + for (Player player : Bukkit.getOnlinePlayers()) { + if (player.equals(victim)) continue; + player.showPlayer(victim); + } + } + }.runTaskLater(Vice.getInstance(), 150); + + Utils.sendTitle(victim, "&c&lWASTED", killer == null ? null : "&7" + ViceUtils.getMessageKilledBy(killer.getName()), 80, 50, 20); + + if (killer == null || killer.equals(victim)) { + e.setDeathMessage(Utils.f("&e" + victim.getName() + "&7 " + (victim.getLastDamageCause() instanceof EntityDamageByEntityEvent ? "was killed by &c" + ((EntityDamageByEntityEvent) victim.getLastDamageCause()).getDamager().getCustomName() + "&7!" : "died!"))); + return; + } + + if (Utils.calculateChance(10)) { + e.getDrops().add(Utils.setSkullOwner(Utils.createItem(Material.SKULL_ITEM, 3, "&e&l" + victim.getName() + "'s Head"), victim.getName())); + killer.sendMessage(Lang.HEY.f(victimUser.getColoredName(victim) + "&7's head dropped on the ground!")); + } + + e.setDeathMessage(Utils.f("&e" + victim.getName() + "&7 was killed by &c" + killer.getName() + "&7!")); + UUID killerUUID = killer.getUniqueId(); + ViceUser killerGameUser = Vice.getUserManager().getLoadedUser(killerUUID); + User killerUser = Core.getUserManager().getLoadedUser(killerUUID); + killerGameUser.addKills(1); + killerGameUser.addKillStreak(1); + ViceUtils.updateBoard(killer, killerGameUser); + victim.setBedSpawnLocation(Vice.getWorldManager().getWarpManager().getSpawn().getLocation(), true); + killer.setBedSpawnLocation(Vice.getWorldManager().getWarpManager().getSpawn().getLocation(), true); + } + + @EventHandler(priority = EventPriority.MONITOR) + public void onDeathMonitor(PlayerDeathEvent e) { + for (Player player : Bukkit.getOnlinePlayers()) { + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + if (!user.getPref(Pref.DEATH_MESSAGES)) { + if (Objects.equals(player, e.getEntity())) { + player.sendMessage(e.getDeathMessage()); + } + continue; + } + player.sendMessage(e.getDeathMessage()); + } + + e.setDeathMessage(null); + + Player p = e.getEntity(); + for(ItemStack i : p.getInventory().getArmorContents()){ + if(i != null && !i.getType().equals(Material.AIR)){ + Bukkit.getServer().getPluginManager().callEvent(new ArmorEquipEvent(p, ArmorEquipEvent.EquipMethod.DEATH, EquipArmorType.matchType(i), i, null)); + } + } + + Iterator<ItemStack> iter = e.getDrops().iterator(); + while (iter.hasNext()) { + ItemStack is = iter.next(); + if(is==null) + continue; + + switch (is.getType()) { + case BOW: + iter.remove(); + break; + } + + if(!is.hasItemMeta()) continue; + + switch (ChatColor.stripColor(is.getItemMeta().getDisplayName())) { + case "Backpack": + case "Ammo Pouch": + case "Phone": { + iter.remove(); + break; + } + } + } + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/Dispense.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/Dispense.java new file mode 100644 index 0000000..7e5fd27 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/Dispense.java @@ -0,0 +1,43 @@ +package net.grandtheftmc.vice.listeners; + +import net.grandtheftmc.vice.events.ArmorEquipEvent; +import net.grandtheftmc.vice.events.EquipArmorType; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.block.BlockFace; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockDispenseEvent; + +/** + * Created by Timothy Lampen on 2017-08-11. + */ +public class Dispense implements Listener { + + @EventHandler + public void onDispense(BlockDispenseEvent e){ + EquipArmorType type = EquipArmorType.matchType(e.getItem()); + if(EquipArmorType.matchType(e.getItem()) != null){ + Location loc = e.getBlock().getLocation(); + for(Player p : loc.getWorld().getPlayers()){ + if(loc.getBlockY() - p.getLocation().getBlockY() >= -1 && loc.getBlockY() - p.getLocation().getBlockY() <= 1){ + if(p.getInventory().getHelmet() == null && type.equals(EquipArmorType.HELMET) || p.getInventory().getChestplate() == null && type.equals(EquipArmorType.CHESTPLATE) || p.getInventory().getLeggings() == null && type.equals(EquipArmorType.LEGGINGS) || p.getInventory().getBoots() == null && type.equals(EquipArmorType.BOOTS)){ + org.bukkit.block.Dispenser dispenser = (org.bukkit.block.Dispenser) e.getBlock().getState(); + org.bukkit.material.Dispenser dis = (org.bukkit.material.Dispenser) dispenser.getData(); + BlockFace directionFacing = dis.getFacing(); + // Someone told me not to do big if checks because it's hard to read, look at me doing it -_- + if(directionFacing == BlockFace.EAST && p.getLocation().getBlockX() != loc.getBlockX() && p.getLocation().getX() <= loc.getX() + 2.3 && p.getLocation().getX() >= loc.getX() || directionFacing == BlockFace.WEST && p.getLocation().getX() >= loc.getX() - 1.3 && p.getLocation().getX() <= loc.getX() || directionFacing == BlockFace.SOUTH && p.getLocation().getBlockZ() != loc.getBlockZ() && p.getLocation().getZ() <= loc.getZ() + 2.3 && p.getLocation().getZ() >= loc.getZ() || directionFacing == BlockFace.NORTH && p.getLocation().getZ() >= loc.getZ() - 1.3 && p.getLocation().getZ() <= loc.getZ()){ + ArmorEquipEvent armorEquipEvent = new ArmorEquipEvent(p, ArmorEquipEvent.EquipMethod.DISPENSER, EquipArmorType.matchType(e.getItem()), null, e.getItem()); + Bukkit.getServer().getPluginManager().callEvent(armorEquipEvent); + if(armorEquipEvent.isCancelled()){ + e.setCancelled(true); + } + return; + } + } + } + } + } + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/Drop.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/Drop.java new file mode 100644 index 0000000..1a4021c --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/Drop.java @@ -0,0 +1,64 @@ +package net.grandtheftmc.vice.listeners; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.ViceUtils; +import net.grandtheftmc.vice.items.GameItem; +import org.bukkit.entity.Item; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntitySpawnEvent; +import org.bukkit.event.player.PlayerDropItemEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.scheduler.BukkitRunnable; + +import java.util.Objects; + +public class Drop implements Listener { + + @EventHandler + public void onDrop(PlayerDropItemEvent e) { + ItemStack item = e.getItemDrop().getItemStack().clone(); + switch (item.getType()) { + case CHEST: + case WATCH: + case COMPASS: + if(ViceUtils.isDefaultPlayerItem(item)) { + new BukkitRunnable() { + @Override + public void run() { + e.getItemDrop().remove(); + } + }.runTaskLater(Vice.getInstance(), 1); + ViceUtils.giveGameItems(e.getPlayer()); + } + break; + default: + if (Objects.equals(e.getPlayer().getWorld().getName(), "spawn")) { + GameItem gi = Vice.getItemManager().getItem(item); + if (gi != null && gi.isScheduled()) { + e.setCancelled(true); + e.getPlayer().sendMessage(Lang.DRUGS.f("&7You can't drop drugs here! Go sell them at the nearest drug dealer.")); + } + } + break; + } + } + + @EventHandler + protected final void onEntitySpawn(EntitySpawnEvent event) { + if (event.getEntity() == null) return; + if (!(event instanceof Item)) return; + + Item item = (Item) event.getEntity(); + switch (item.getItemStack().getType()) { + case CHEST: + case WATCH: + case COMPASS: + if (ViceUtils.isDefaultPlayerItem(item.getItemStack())) { + event.setCancelled(true); + } + break; + } + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/Enchant.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/Enchant.java new file mode 100644 index 0000000..5d50425 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/Enchant.java @@ -0,0 +1,47 @@ +package net.grandtheftmc.vice.listeners; + +import org.bukkit.Material; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.enchantment.PrepareItemEnchantEvent; + +import java.util.Arrays; +import java.util.List; + +/** + * Created by Timothy Lampen on 7/29/2017. + */ +public class Enchant implements Listener { + private List<Material> list = Arrays.asList(Material.DIAMOND_BOOTS + , Material.DIAMOND_CHESTPLATE + , Material.DIAMOND_HELMET + , Material.DIAMOND_LEGGINGS + , Material.DIAMOND_SWORD + , Material.CHAINMAIL_BOOTS + , Material.CHAINMAIL_CHESTPLATE + , Material.CHAINMAIL_HELMET + , Material.CHAINMAIL_LEGGINGS + , Material.GOLD_BOOTS + , Material.GOLD_CHESTPLATE + , Material.GOLD_HELMET + , Material.GOLD_LEGGINGS + , Material.GOLD_SWORD + , Material.IRON_BOOTS + , Material.IRON_CHESTPLATE + , Material.IRON_HELMET + , Material.IRON_LEGGINGS + , Material.IRON_SWORD + , Material.LEATHER_BOOTS + , Material.LEATHER_CHESTPLATE + , Material.LEATHER_HELMET + , Material.LEATHER_LEGGINGS + , Material.STONE_SWORD + , Material.WOOD_SWORD); + + @EventHandler + public void onEnchant(PrepareItemEnchantEvent event) { + if (this.list.contains(event.getItem().getType())) + event.setCancelled(true); + } + +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/FireListener.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/FireListener.java new file mode 100644 index 0000000..2c8d300 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/FireListener.java @@ -0,0 +1,29 @@ +package net.grandtheftmc.vice.listeners; + +import net.grandtheftmc.vice.tasks.PlayerTask; +import org.bukkit.Material; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockBurnEvent; +import org.bukkit.event.block.BlockSpreadEvent; + +public class FireListener implements Listener { + + @EventHandler + public void blockBurnEvent(BlockBurnEvent event) { + event.setCancelled(true); + } + + @EventHandler + public void blockSpreadEvent(BlockSpreadEvent event) { + if (event.getSource().getType() == Material.FIRE) event.getSource().setType(Material.AIR); + event.setCancelled(true); + } + + public static void clearFire() { + PlayerTask.fireBlocks.forEach(block -> { + block.setType(Material.AIR); + PlayerTask.fireBlocks.remove(block); + }); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/FoodChange.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/FoodChange.java new file mode 100644 index 0000000..5afe7d2 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/FoodChange.java @@ -0,0 +1,28 @@ +package net.grandtheftmc.vice.listeners; + +import net.grandtheftmc.vice.Vice; +import org.bukkit.Material; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.FoodLevelChangeEvent; +import org.bukkit.event.player.PlayerItemConsumeEvent; + +import java.util.Objects; + +public class FoodChange implements Listener { + + @EventHandler + public void onFoodChange(FoodLevelChangeEvent event) { + if (Objects.equals(event.getEntity().getLocation().getWorld(), Vice.getWorldManager().getWarpManager().getSpawn().getLocation().getWorld())) { + event.setFoodLevel(20); + } + } + + @EventHandler + protected final void onItemConsume(PlayerItemConsumeEvent event) { + if(event.getItem() == null) return; + if(event.getItem().getType() != Material.CHORUS_FRUIT) return; + + event.setCancelled(true); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/GunTestingListener.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/GunTestingListener.java new file mode 100644 index 0000000..e2342b6 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/GunTestingListener.java @@ -0,0 +1,61 @@ +package net.grandtheftmc.vice.listeners; + +import net.grandtheftmc.core.util.Component; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.vice.Vice; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.event.EventHandler; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerMoveEvent; +import org.bukkit.event.player.PlayerToggleSneakEvent; +import org.bukkit.event.player.PlayerToggleSprintEvent; +import org.bukkit.inventory.ItemStack; + +public class GunTestingListener implements Component<GunTestingListener, Vice> { + + private final ItemStack[] states; + + public GunTestingListener() { + this.states = new ItemStack[] { + new ItemFactory(Material.STONE_SWORD).setDurability((short) 73).setUnbreakable(true).build(), + new ItemFactory(Material.STONE_SWORD).setDurability((short) 74).setUnbreakable(true).build(), + new ItemFactory(Material.STONE_SWORD).setDurability((short) 75).setUnbreakable(true).build(), + }; + Bukkit.getPluginManager().registerEvents(this, Vice.getInstance()); + } + + @Override + public GunTestingListener onEnable(Vice plugin) { + return this; + } + + @Override + public GunTestingListener onDisable(Vice plugin) { + return this; + } + + @EventHandler(ignoreCancelled = true) + protected final void onPlayerJoin(PlayerJoinEvent event) { + event.getPlayer().getInventory().setItem(0, states[0]); + event.getPlayer().updateInventory(); + } + + @EventHandler(ignoreCancelled = true) + protected final void onPlayerMove(PlayerToggleSneakEvent event) { + + if (event.isSneaking()) event.getPlayer().getInventory().setItem(0, states[2]); + else event.getPlayer().getInventory().setItem(0, states[0]); + event.getPlayer().updateInventory(); + } + + @EventHandler(ignoreCancelled = true) + protected final void onPlayerMove(PlayerToggleSprintEvent event) { +// PlayerToggleSprintEvent +// PlayerToggleSneakEvent + + if (event.isSprinting()) event.getPlayer().getInventory().setItem(0, states[1]); + else event.getPlayer().getInventory().setItem(0, states[0]); + event.getPlayer().updateInventory(); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/Interact.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/Interact.java new file mode 100644 index 0000000..3aba41f --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/Interact.java @@ -0,0 +1,650 @@ +package net.grandtheftmc.vice.listeners; + +import com.j0ach1mmall3.jlib.methods.ReflectionAPI; +import com.massivecraft.factions.*; +import com.massivecraft.factions.struct.Relation; +import net.citizensnpcs.api.event.NPCDamageByEntityEvent; +import net.citizensnpcs.api.event.NPCDamageEvent; +import net.citizensnpcs.api.event.NPCRightClickEvent; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.menus.MenuManager; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.util.State; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.ViceUtils; +import net.grandtheftmc.vice.areas.obj.Area; +import net.grandtheftmc.vice.drugs.Drug; +import net.grandtheftmc.vice.drugs.DrugService; +import net.grandtheftmc.vice.events.ArmorEquipEvent; +import net.grandtheftmc.vice.events.EquipArmorType; +import net.grandtheftmc.vice.items.ArmorType; +import net.grandtheftmc.vice.items.GameItem; +import net.grandtheftmc.vice.items.Kit; +import net.grandtheftmc.vice.lootcrates.LootCrate; +import net.grandtheftmc.vice.users.CheatCode; +import net.grandtheftmc.vice.users.ViceUser; +import net.grandtheftmc.vice.users.storage.BooleanStorageType; +import net.grandtheftmc.vice.utils.ParticleColor; +import net.grandtheftmc.vice.world.ZoneFlag; +import org.bukkit.*; +import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; +import org.bukkit.block.BlockState; +import org.bukkit.block.Chest; +import org.bukkit.entity.*; +import org.bukkit.event.Event.Result; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.player.PlayerInteractAtEntityEvent; +import org.bukkit.event.player.PlayerInteractEntityEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.EquipmentSlot; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; +import org.bukkit.scheduler.BukkitRunnable; + +import java.util.HashSet; +import java.util.Objects; +import java.util.Optional; +import java.util.UUID; +import java.util.concurrent.ThreadLocalRandom; + +public class Interact implements Listener { + private static final Class BLOCK_POSITION_CLASS = ReflectionAPI.getNmsClass("BlockPosition"); + + @EventHandler + protected final void onNPCInteract(NPCRightClickEvent event) { + switch (ChatColor.stripColor(event.getNPC().getName()).toLowerCase()) { + case "carl": { + Player player = event.getClicker(); + User u = Core.getUserManager().getLoadedUser(player.getUniqueId()); + ViceUser user = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + if (!user.isCop()) { + player.sendMessage(Lang.COPS.f("&7Hey! You're not a cop, why should I pay you?")); + return; + } + Vice.getItemManager().giveKit(player, u, user, "cop"); + if (user.getLastCopSalary() + 86400000 > System.currentTimeMillis()) { + player.sendMessage(Lang.COPS.f("&7Please wait &a" + Utils.timeInMillisToText(user.getLastCopSalary() + 86400000 - System.currentTimeMillis()) + "&7 before claiming your daily salary!")); + return; + } + user.setLastCopSalary(System.currentTimeMillis()); + user.addMoney(user.getCopRank().getSalary()); + player.sendMessage(Lang.COPS.f("&7You received your daily salary of &a$&l" + user.getCopRank().getSalary() + "&7!")); + } + default: + break; + } + } + + @EventHandler + protected final void onNPCDamage(NPCDamageEvent event) { + event.setCancelled(true); + } + + @EventHandler + protected final void onNPCDamage(NPCDamageByEntityEvent event) { + event.setCancelled(true); + } + + @EventHandler + public void armorEquipRunner(PlayerInteractEvent e) { + if (e.getAction() == Action.PHYSICAL) return; + if (e.getAction() == Action.RIGHT_CLICK_AIR || e.getAction() == Action.RIGHT_CLICK_BLOCK) { + final Player player = e.getPlayer(); + ArmorType newArmorType = ArmorType.matchType(e.getItem()); + if (newArmorType != null) { + if (newArmorType.equals(ArmorType.HELMET) && e.getPlayer().getInventory().getHelmet() == null || newArmorType.equals(ArmorType.CHESTPLATE) && e.getPlayer().getInventory().getChestplate() == null || newArmorType.equals(ArmorType.LEGGINGS) && e.getPlayer().getInventory().getLeggings() == null || newArmorType.equals(ArmorType.BOOTS) && e.getPlayer().getInventory().getBoots() == null) { + ArmorEquipEvent armorEquipEvent = new ArmorEquipEvent(e.getPlayer(), ArmorEquipEvent.EquipMethod.HOTBAR, EquipArmorType.matchType(e.getItem()), null, e.getItem()); + Bukkit.getServer().getPluginManager().callEvent(armorEquipEvent); + if (armorEquipEvent.isCancelled()) { + e.setCancelled(true); + player.updateInventory(); + } + } + } + } + } + + + @EventHandler(priority = EventPriority.HIGH) + public void onInteract(PlayerInteractEvent e) { + Player player = e.getPlayer(); + ViceUser viceUser = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + ItemStack item = player.getInventory().getItemInMainHand(); + if ((item != null && item.getType() == Material.FIREWORK) || (player.getInventory().getItemInOffHand() != null && player.getInventory().getItemInOffHand().getType() == Material.FIREWORK)) { + e.setCancelled(true); + return; + } + + if ((e.getItem() != null && item != null) && e.getAction() == Action.LEFT_CLICK_AIR || e.getAction() == Action.LEFT_CLICK_BLOCK && e.getItem().equals(item)) { + GameItem gameItem = Vice.getItemManager().getItem(item); + if (gameItem == null || !item.hasItemMeta() || !item.getItemMeta().getItemFlags().contains(ItemFlag.HIDE_UNBREAKABLE)) + return; + player.addPotionEffect(new PotionEffect(PotionEffectType.SLOW_DIGGING, 20 * 3, 2, false, false), true);//so if player tries to use drug as shovel, it doesn't work. + } + + if (item != null) { + switch (item.getType()) { + case GOLD_RECORD: + if (e.getClickedBlock() == null) return; + if (e.getClickedBlock().getType() == Material.JUKEBOX) return; + break; + case WATCH: + MenuManager.openMenu(player, "phone"); + return; + case RECORD_5: + if (e.getClickedBlock() != null && e.getClickedBlock().getType() == Vice.getItemManager().getItem("bong").getItem().getType()) { + if (item.getAmount() > 1) { + item.setAmount(item.getAmount() - 1); + player.getInventory().setItemInMainHand(item); + } else { + player.getInventory().remove(item); + } + Optional<Drug> weed = ((DrugService) Vice.getDrugManager().getService()).getDrug("weed"); + if (weed.isPresent()) { + weed.get().apply(player); + } else { + return; + } + Location blockLoc = e.getClickedBlock().getLocation(); + long startTime = System.currentTimeMillis(); + player.playSound(player.getLocation(), Sound.BLOCK_BREWING_STAND_BREW, 1, 1); + new BukkitRunnable() { + @Override + public void run() { + if (startTime + (1000 * 5) <= System.currentTimeMillis()) + this.cancel(); + double locX = blockLoc.getX() + (ThreadLocalRandom.current().nextDouble(-.15, .15) + .5); + double locZ = blockLoc.getZ() + (ThreadLocalRandom.current().nextDouble(-.15, .15) + .5); + double locY = blockLoc.getY() + 1.2; + ParticleColor color = ParticleColor.AQUA; + player.spigot().playEffect(new Location(blockLoc.getWorld(), locX, locY, locZ), Effect.SPELL, 1, 1, color.getRed(), color.getGreen(), color.getBlue(), 1, 1, 10); + } + }.runTaskTimerAsynchronously(Vice.getInstance(), 0, 1); + } + return; + default: + break; + } + } + if (e.getClickedBlock() == null) + return; + BlockState block = e.getClickedBlock().getState(); + if (viceUser.isCop() && ViceUtils.canPlantOn(ViceUtils.getSeedVersionOfMaterial(item.getType()), block.getType()) && Vice.getItemManager().getReplacedVanilla().keySet().stream().anyMatch(vanilla -> ViceUtils.getSeedVersionOfMaterial(vanilla.getType()) == item.getType())) { + e.setCancelled(true); + player.sendMessage(Utils.f(Lang.COP + "&7You can't plant drugs as a cop!")); + return; + } + switch (block.getType()) { + case CHEST: + + Inventory inventory = ((Chest) block).getBlockInventory(); + + if (ChatColor.stripColor(inventory.getTitle()).equals("Backpack")) { + e.setCancelled(true); + return; + } + + ViceUser user = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + if (user.getBooleanFromStorage(BooleanStorageType.ADDING_LOOTCRATE)) { + try { + Chest chest = (Chest) block; +// Class<?> craftChestClass = ReflectionUtil.getOBCClass("block.CraftChest"); +// Object craftChest = craftChestClass.cast(chest); +// Method getTileEntity = craftChestClass.getMethod("getTileEntity"); +// Object tileEntity = getTileEntity.invoke(craftChest); +// Class<?> tileEntityClass = ReflectionUtil.getNMSClass("TileEntityChest"); +// Method setTitle = tileEntityClass.getMethod("a", String.class); +// setTitle.invoke(tileEntity, Utils.f("&e&lLoot Crate")); + chest.setCustomName(Utils.f("&e&lLoot Crate")); + chest.update(); + } catch (Exception ex) { + ex.printStackTrace(); + } + Vice.getCrateManager().addCrate(block.getLocation()); + player.sendMessage(Lang.LOOTCRATES.f("&7You added a loot crate at location &a" + + Utils.blockLocationToString(block.getLocation()) + "&7!")); + user.setBooleanToStorage(BooleanStorageType.ADDING_LOOTCRATE, false); + e.setCancelled(true); + return; + } else if (user.getBooleanFromStorage(BooleanStorageType.REMOVING_LOOTCRATE)) { + LootCrate crate = Vice.getCrateManager().getCrate(block.getLocation()); + if (crate == null) { + player.sendMessage(Lang.LOOTCRATES.f("&7This is not a Loot Crate!")); + user.setBooleanToStorage(BooleanStorageType.REMOVING_LOOTCRATE, false); + return; + } + Vice.getCrateManager().removeCrate(block.getLocation()); + player.sendMessage(Lang.LOOTCRATES.f("&7You removed a loot crate at location &a" + + Utils.blockLocationToString(block.getLocation()) + "&7!")); + user.setBooleanToStorage(BooleanStorageType.REMOVING_LOOTCRATE, false); + e.setCancelled(true); + return; + } else if (user.getBooleanFromStorage(BooleanStorageType.CHECKING_LOOTCRATE)) { + LootCrate crate = Vice.getCrateManager().getCrate(block.getLocation()); + if (crate == null) { + player.sendMessage(Lang.LOOTCRATES.f("&7This is not a Loot Crate!")); + user.setBooleanToStorage(BooleanStorageType.CHECKING_LOOTCRATE, false); + return; + } + player.sendMessage(Lang.LOOTCRATES.f("&7The Loot Crate at location &a" + + Utils.blockLocationToString(block.getLocation()) + "&7 will restock in &a" + + Utils.timeInSecondsToText(crate.getTimer()) + "&7! (+- 10s)")); + user.setBooleanToStorage(BooleanStorageType.CHECKING_LOOTCRATE, false); + e.setCancelled(true); + return; + } else if (user.getBooleanFromStorage(BooleanStorageType.RESTOCKING_LOOTCRATE)) { + LootCrate crate = Vice.getCrateManager().getCrate(block.getLocation()); + if (crate == null) { + player.sendMessage(Lang.LOOTCRATES.f("&7This is not a Loot Crate!")); + user.setBooleanToStorage(BooleanStorageType.RESTOCKING_LOOTCRATE, false); + return; + } + crate.restock(Area.DropType.DEFAULT); + player.sendMessage(Lang.LOOTCRATES.f("&7The Loot Crate at location &a" + + Utils.blockLocationToString(block.getLocation()) + "&7 was restocked.")); + user.setBooleanToStorage(BooleanStorageType.RESTOCKING_LOOTCRATE, false); + e.setCancelled(true); + return; + } + LootCrate crate = Vice.getCrateManager().getCrate(block.getLocation()); + if (crate == null) return; + if (!crate.isLooted()) { + crate.setLooted(true); + + int money = Utils.randomNumber(20, 150); + user.addMoney(money); + player.sendMessage(Lang.MONEY_ADD.f(money + ".00")); + } + return; + default: + break; + } + } + + @EventHandler(priority = EventPriority.HIGH) + public void onInteractEntity(PlayerInteractEntityEvent e) { + if (e.getHand() != EquipmentSlot.HAND) return;//so it only gets triggered once + Player player = e.getPlayer(); + Entity en = e.getRightClicked(); + switch (en.getType()) { + case PLAYER: { + ItemStack i = player.getInventory().getItemInMainHand(); + GameItem gi = i == null ? null : Vice.getItemManager().getItem(i); + if (gi == null || !"handcuffs".equalsIgnoreCase(gi.getName())) return; + ViceUser viceUser = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + Player victim = (Player) en; + UUID victimUUID = victim.getUniqueId(); + ViceUser victimViceUser = Vice.getUserManager().getLoadedUser(victimUUID); + if (!viceUser.isCop()) return; + if (!Objects.equals("spawn", victim.getWorld().getName()) || ViceUtils.isInSpawnRange(victim, 10)) { + player.sendMessage(Lang.COPS.f("&7You have no jurisdiction in this area!")); + return; + } + if (victimViceUser.hasTeleportProtection()) { + e.setCancelled(true); + player.sendMessage(Lang.COMBATTAG.f("&7That player has teleport protection for &c&l" + Utils.timeInMillisToText(victimViceUser.getTimeUntilTeleportProtectionExpires()) + "&7!")); + return; + } + if (viceUser.hasTeleportProtection()) { + e.setCancelled(true); + player.sendMessage(Lang.COMBATTAG.f("&7Please wait &c&l" + Utils.timeInMillisToText(viceUser.getTimeUntilTeleportProtectionExpires()) + "&7!")); + return; + } + if (victimViceUser.isCop()) { + e.setCancelled(true); + player.sendMessage(Utils.f(Lang.HEY + "&cYou can't arrest cops!")); + return; + } + int timeInJail = ViceUtils.getTimeInJailForDrugs(victim); + if (timeInJail == 0) return; + ItemStack chestPlate = player.getInventory().getChestplate(); + if (chestPlate != null && chestPlate.getType() == Material.GOLD_CHESTPLATE && player.getLocation().getBlock().getRelative(BlockFace.DOWN).getType() == Material.AIR) { + player.sendMessage(Lang.COP_MODE.f("&fYou may not arrest criminals during flight!")); + return; + } + if (player.getVehicle() != null) { + player.sendMessage(Lang.COP_MODE.f("&fYou may not arrest criminals while in a Vehicle!")); + return; + } + if (Vice.getWorldManager().getZones(player.getLocation()).stream().anyMatch(zone -> zone.getFlags().contains(ZoneFlag.COP_CANT_ARREST))) { + player.sendMessage(Lang.COP_MODE.f("&7You may not arrest criminals in this area!")); + return; + } + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + User victimUser = Core.getUserManager().getLoadedUser(victimUUID); + victimViceUser.jail(timeInJail, player); + player.sendMessage(Lang.COP_MODE.f("&7You arrested &a" + victimUser.getColoredName(victim) + + "&7! He will go to jail for &a" + Utils.timeInSecondsToText(timeInJail) + "&7!")); + Utils.broadcastExcept(player, Lang.COP_MODE.f("&a" + victimUser.getColoredName(victim) + "&7 was arrested by &a" + + user.getColoredName(player) + "&7!")); + victimViceUser.addDeaths(1); + victimViceUser.setLastTag(-1); + victimViceUser.setKillStreak(0); + if (Vice.getWorldManager().getWarpManager().cancelTaxi(victim, victimViceUser)) + victim.sendMessage(Utils.f(Lang.TAXI + "&eThe taxi was cancelled!")); + victim.setHealth(victim.getMaxHealth()); + victim.spigot().respawn(); + victim.setFireTicks(0); + victim.setGameMode(GameMode.SPECTATOR); + victim.setFlying(true); + victim.getActivePotionEffects().clear(); + victim.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, 180, 0), false); + victim.setFoodLevel(20); + victim.playSound(victim.getLocation(), Sound.ENTITY_WITHER_SPAWN, 1, 0.5F); + victim.setFlySpeed(0); + ViceUtils.removeBoard(victim); +// victimUser.removeCosmetics(victim); + new BukkitRunnable() { + @Override + public void run() { + Player victim = Bukkit.getPlayer(victimUUID); + if (victim == null) + return; + User victimUser = Core.getUserManager().getLoadedUser(victim.getUniqueId()); + ViceUser victimGameUser = Vice.getUserManager().getLoadedUser(victim.getUniqueId()); + victim.sendMessage(Lang.JAIL.f("&7You were arrested and have to stay in jail for &a" + + Utils.timeInSecondsToText(timeInJail) + "&7!")); + victim.teleport(Vice.getWorldManager().getWarpManager().getJail().getLocation()); + victim.setGameMode(GameMode.SURVIVAL); + victim.getActivePotionEffects().clear(); + victim.setFoodLevel(20); + victim.setFlying(false); + victim.setFlySpeed(0.1F); + ViceUtils.giveGameItems(victim); + ViceUtils.updateBoard(victim, victimGameUser); +// victimUser.loadLastCosmetics(victim); + } + }.runTaskLater(Vice.getInstance(), 150); + HashSet<ItemStack> bannedItems = new HashSet<>(); + for (ItemStack is : victim.getInventory().getContents()) { + if (Vice.getItemManager().getItem(is) != null && Vice.getItemManager().getItem(is).isScheduled()) { + bannedItems.add(is); + victim.getInventory().removeItem(is); + } + } + ViceUtils.giveGameItems(victim); + for (ItemStack item : bannedItems) + Utils.giveItems(player, item); + Utils.sendTitle(victim, "&c&lBUSTED", "&7Arrested by " + player.getName(), 80, 50, 20); + ViceUtils.updateBoard(player, user, viceUser); + return; + } + case ITEM_FRAME: + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + if (user.hasEditMode()) { + e.setCancelled(false); + return; + } + if (user.isInTutorial()) { + e.setCancelled(true); + return; + } + + e.setCancelled(true); + ItemFrame frame = (ItemFrame) en; + if (!Objects.equals("spawn", frame.getWorld().getName())) return; + ItemStack item = frame.getItem(); + if (item == null) + return; + switch (item.getType()) { + case PAPER: { + ViceUser viceUser = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + if (viceUser.isArrested()) { + if (viceUser.getJailTimer() < 5) { + player.sendMessage(Lang.BRIBE.f("&7You are already being released!")); + return; + } + Player cop = Bukkit.getPlayer(viceUser.getJailCop()); + ViceUser copUser = cop == null ? null : Vice.getUserManager().getLoadedUser(cop.getUniqueId()); + if (cop == null || !copUser.isCop()) { + player.sendMessage(Lang.BRIBE.f("&7The cop who arrested you (&3&l" + viceUser.getJailCopName() + "&7) is off duty!")); + return; + } + viceUser.setBooleanToStorage(BooleanStorageType.BRIBING, true); + player.sendMessage(Lang.BRIBE.f("&7Please type the amount you would like to offer as a bribe to &3&l" + viceUser.getJailCopName() + "&7 or type &a\"/quit\"&7!")); + return; + } + frame.setRotation(Rotation.NONE); + MenuManager.openMenu(player, "bank"); + break; + } + case ENDER_PEARL: + frame.setRotation(Rotation.NONE); + player.performCommand("/rtp"); + break; + case IRON_FENCE: + if (ViceUtils.getJailedPlayers().isEmpty()) { + player.sendMessage(Lang.JAIL.f("&7There are currently no prisoners in jail!")); + return; + } + MenuManager.openMenu(player, "jail"); + break; + case STORAGE_MINECART: + MenuManager.openMenu(player, "taxi"); + break; + case MINECART: { + String name = item.hasItemMeta() && item.getItemMeta().hasDisplayName() + ? ChatColor.stripColor(item.getItemMeta().getDisplayName()) : null; + if (name.startsWith("Buy Vehicle: ")) + name = name.replace("Buy Vehicle: ", ""); + else if (name.startsWith("Vehicle Shop: ")) + name = name.replace("Vehicle Shop: ", ""); + else if (name.startsWith("Buy ")) + name = name.replace("Buy ", ""); + else break; + GameItem gameItem = Vice.getItemManager().getItemFromDisplayName(name); + if (gameItem == null || gameItem.getType() != GameItem.ItemType.VEHICLE) return; + ViceUser viceUser = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + viceUser.setActionVehicle(gameItem.getWeaponOrVehicleOrDrug()); + MenuManager.openMenu(player, "vehicleshop"); + return; + } + case LEATHER: { + String name = item.hasItemMeta() && item.getItemMeta().hasDisplayName() + ? ChatColor.stripColor(frame.getItem().getItemMeta().getDisplayName()).toLowerCase() : null; + if (name != null && name.contains("upgrade buy: $")) { + Vice.getShopManager().buyArmorUpgrade(player, name); + return; + } + break; + } + case EMPTY_MAP: + case MAP: + frame.setRotation(Rotation.NONE); + MenuManager.openMenu(player, "lottery"); + break; + + default: + String name = item.hasItemMeta() && item.getItemMeta().hasDisplayName() + ? ChatColor.stripColor(frame.getItem().getItemMeta().getDisplayName()) : null; + if (name != null && Objects.equals("spawn", frame.getWorld().getName()) && name.startsWith("Floor")) { + if (name.toLowerCase().endsWith("up")) { + Location loc = player.getLocation(); + if (ViceUtils.ascendLevel(player)) { + player.sendMessage(Lang.VICE.f("&7Ascended a level.")); + } else { + player.sendMessage(Lang.VICE.f("&7No free spot above you found.")); + } + break; + } else if (name.toLowerCase().endsWith("down")) { + Location loc = player.getLocation(); + if (ViceUtils.descendLevel(player)) { + player.sendMessage(Lang.VICE.f("&7Descended a level.")); + } else { + player.sendMessage(Lang.VICE.f("&7No free spot below you found.")); + } + break; + } + } + if (name != null && name.startsWith("Preview Kit: ")) { + Kit kit = Vice.getItemManager().getKit(name.replace("Preview Kit: ", "")); + if (kit != null) + Vice.getBackpackManager().kitPreview(player, kit); + return; + } + Vice.getShopManager().buy(player, frame.getItem()); + break; + } + return; + case VILLAGER: + if (Vice.getCombatLogManager().getCombatLogNPCs().contains((NPC) e.getRightClicked())) { + e.setCancelled(true); + + return; + } + default: + break; + } + } + + @EventHandler + public void onInteractAtEntity(PlayerInteractAtEntityEvent e) { + Player player = e.getPlayer(); + ViceUser viceUser = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + Entity en = e.getRightClicked(); + if (en == null || e.getHand() != EquipmentSlot.HAND) { + e.setCancelled(true); + return; + }//so it only triggers once + switch (en.getType()) { + case ARMOR_STAND: + if (user.hasEditMode()) + break; + ArmorStand armorStand = (ArmorStand) e.getRightClicked(); + String name = ChatColor.stripColor(armorStand.getCustomName()); + if (name == null) break; + switch (name.toLowerCase()) { + case "mechanic": + MenuManager.openMenu(player, "mechanic"); + return; + case "cab driver": + MenuManager.openMenu(player, "taxi"); + return; + case "warden": + MenuManager.openMenu(player, "jail"); + return; + case "arms dealer": + MenuManager.openMenu(player, "weapons"); + return; + case "head salesman": + ItemStack item = player.getInventory().getItemInMainHand(); + MenuManager.openMenu(player, item != null && item.getType() == Material.SKULL_ITEM ? "auctionhead" : "heads"); + return; + default: + return; + } + + case VILLAGER: { + Villager villager = (Villager) en; + if (villager.hasMetadata("loggedplayer")) { + e.setCancelled(true); + return; + } + if (player.isSneaking() && viceUser.getCheatCodeState(CheatCode.VILLAGERJOB).getState() == State.ON) { + e.setCancelled(true); + if (user.isOnCooldown("villager_job_cc")) { + player.sendMessage(Lang.CHEAT_CODES.f("&7You must wait &a" + user.getFormattedCooldown("villager_job_cc") + " &7before using this cheatcode again!")); + return; + } + Faction cFac = Board.getInstance().getFactionAt(new FLocation(player.getLocation())); + FPlayer fPlayer = FPlayers.getInstance().getByPlayer(player); + + if (fPlayer.getRelationTo(cFac) == Relation.ENEMY) { + player.sendMessage(Lang.CHEAT_CODES.f("&7You cannot change the job of a villager in an enemy's faction!")); + return; + } + viceUser.setChangingJob(villager); + new BukkitRunnable() { + @Override + public void run() { + MenuManager.openMenu(player, "choose_villager_type"); + } + }.runTaskLater(Vice.getInstance(), 1); + return; + } + +// if (villager.getRecipes() == null || villager.getRecipes().isEmpty()) return; +// List<MerchantRecipe> filtered = new ArrayList<>(); +// for (int i = 0; i < villager.getRecipes().size(); i++) { +// MerchantRecipe recipe = villager.getRecipe(i); +// switch (recipe.getResult().getType()) { +// case WOOD_SWORD: +// case STONE_SWORD: +// case IRON_SWORD: +// case GOLD_SWORD: +// case DIAMOND_SWORD: +// +// case LEATHER_BOOTS: +// case LEATHER_LEGGINGS: +// case LEATHER_CHESTPLATE: +// case LEATHER_HELMET: +// case CHAINMAIL_BOOTS: +// case CHAINMAIL_LEGGINGS: +// case CHAINMAIL_CHESTPLATE: +// case CHAINMAIL_HELMET: +// case IRON_BOOTS: +// case IRON_LEGGINGS: +// case IRON_CHESTPLATE: +// case IRON_HELMET: +// case GOLD_BOOTS: +// case GOLD_LEGGINGS: +// case GOLD_CHESTPLATE: +// case GOLD_HELMET: +// case DIAMOND_BOOTS: +// case DIAMOND_LEGGINGS: +// case DIAMOND_CHESTPLATE: +// case DIAMOND_HELMET: +// +// case FLINT_AND_STEEL: +// break; +// default: +// filtered.add(recipe); +// break; +// } +// } +// +// villager.setRecipes(filtered); +// +// if (villager.getInventory() != null) +// player.openInventory(villager.getInventory()); +// break; + } + default: + break; + } + } + + @EventHandler + protected final void onSpawnerChange(PlayerInteractEvent event) { + if (event.getClickedBlock() != null && event.getItem() != null && + event.getClickedBlock().getType() == Material.MOB_SPAWNER && event.getItem().getType() == Material.MONSTER_EGG) { + event.setCancelled(true); + } + } + + // TODO remove as this is just to stop a dupe glitch of + // stacking similarly named items onto eachother to dupe them + @EventHandler(priority = EventPriority.HIGHEST) + public void onAnvilInteract(PlayerInteractEvent event) { + + // grab event variables + Player p = event.getPlayer(); + Action a = event.getAction(); + Block block = event.getClickedBlock(); + + if (block != null && block.getType() == Material.ANVIL) { + event.setCancelled(true); + event.setUseInteractedBlock(Result.DENY); + } + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/InventoryClick.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/InventoryClick.java new file mode 100644 index 0000000..2d7a871 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/InventoryClick.java @@ -0,0 +1,223 @@ +package net.grandtheftmc.vice.listeners; + +import net.grandtheftmc.core.menus.MenuManager; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.ViceUtils; +import net.grandtheftmc.vice.items.GameItem; +import net.grandtheftmc.vice.events.ArmorEquipEvent; +import net.grandtheftmc.vice.events.EquipArmorType; +import net.grandtheftmc.vice.users.ViceUser; +import net.grandtheftmc.vice.users.storage.BooleanStorageType; +import net.md_5.bungee.api.ChatColor; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.Event; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.event.inventory.InventoryAction; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryType; +import org.bukkit.event.player.PlayerSwapHandItemsEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; + +public class InventoryClick implements Listener { + + @EventHandler + public final void equipEventRunner(final InventoryClickEvent e){ + boolean shift = false, numberkey = false; + if(e.isCancelled()) return; + if(e.getClick().equals(ClickType.SHIFT_LEFT) || e.getClick().equals(ClickType.SHIFT_RIGHT)){ + shift = true; + } + + if(e.getClick().equals(ClickType.NUMBER_KEY)){ + numberkey = true; + } + + if(e.getSlotType() != InventoryType.SlotType.ARMOR && e.getSlotType() != InventoryType.SlotType.QUICKBAR && e.getSlotType() != InventoryType.SlotType.CONTAINER) return; + if(e.getClickedInventory() != null && !e.getClickedInventory().getType().equals(InventoryType.PLAYER)) return; + if (!e.getInventory().getType().equals(InventoryType.CRAFTING) && !e.getInventory().getType().equals(InventoryType.PLAYER)) return; + if(!(e.getWhoClicked() instanceof Player)) return; + if(e.getCurrentItem() == null) return; + EquipArmorType newEquipArmorType = EquipArmorType.matchType(shift ? e.getCurrentItem() : e.getCursor()); + if(!shift && newEquipArmorType != null && e.getRawSlot() != newEquipArmorType.getSlot()){ + // Used for drag and drop checking to make sure you aren't trying to place a helmet in the boots place. + return; + } + if(shift){ + newEquipArmorType = EquipArmorType.matchType(e.getCurrentItem()); + if(newEquipArmorType != null){ + boolean equipping = true; + if(e.getRawSlot() == newEquipArmorType.getSlot()){ + equipping = false; + } + if(newEquipArmorType.equals(EquipArmorType.HELMET) && (equipping ? e.getWhoClicked().getInventory().getHelmet() == null : e.getWhoClicked().getInventory().getHelmet() != null) || newEquipArmorType.equals(EquipArmorType.CHESTPLATE) && (equipping ? e.getWhoClicked().getInventory().getChestplate() == null : e.getWhoClicked().getInventory().getChestplate() != null) || newEquipArmorType.equals(EquipArmorType.LEGGINGS) && (equipping ? e.getWhoClicked().getInventory().getLeggings() == null : e.getWhoClicked().getInventory().getLeggings() != null) || newEquipArmorType.equals(EquipArmorType.BOOTS) && (equipping ? e.getWhoClicked().getInventory().getBoots() == null : e.getWhoClicked().getInventory().getBoots() != null)){ + ArmorEquipEvent armorEquipEvent = new ArmorEquipEvent((Player) e.getWhoClicked(), ArmorEquipEvent.EquipMethod.SHIFT_CLICK, newEquipArmorType, equipping ? null : e.getCurrentItem(), equipping ? e.getCurrentItem() : null); + Bukkit.getServer().getPluginManager().callEvent(armorEquipEvent); + if(armorEquipEvent.isCancelled()){ + e.setCancelled(true); + } + } + } + }else{ + ItemStack newArmorPiece = e.getCursor(); + ItemStack oldArmorPiece = e.getCurrentItem(); + if(numberkey){ + if(e.getClickedInventory().getType().equals(InventoryType.PLAYER)){// Prevents shit in the 2by2 crafting + // e.getClickedInventory() == The players inventory + // e.getHotBarButton() == key people are pressing to equip or unequip the item to or from. + // e.getRawSlot() == The slot the item is going to. + // e.getSlot() == Armor slot, can't use e.getRawSlot() as that gives a hotbar slot ;-; + ItemStack hotbarItem = e.getClickedInventory().getItem(e.getHotbarButton()); + if(hotbarItem != null){// Equipping + newEquipArmorType = EquipArmorType.matchType(hotbarItem); + newArmorPiece = hotbarItem; + oldArmorPiece = e.getClickedInventory().getItem(e.getSlot()); + }else{// Unequipping + newEquipArmorType = EquipArmorType.matchType(e.getCurrentItem() != null && e.getCurrentItem().getType() != Material.AIR ? e.getCurrentItem() : e.getCursor()); + } + } + }else{ + // e.getCurrentItem() == Unequip + // e.getCursor() == Equip + newEquipArmorType = EquipArmorType.matchType(e.getCurrentItem() != null && e.getCurrentItem().getType() != Material.AIR ? e.getCurrentItem() : e.getCursor()); + } + if(newEquipArmorType != null && e.getRawSlot() == newEquipArmorType.getSlot()){ + ArmorEquipEvent.EquipMethod method = ArmorEquipEvent.EquipMethod.DRAG; + if(e.getAction().equals(InventoryAction.HOTBAR_SWAP) || numberkey) method = ArmorEquipEvent.EquipMethod.HOTBAR_SWAP; + ArmorEquipEvent armorEquipEvent = new ArmorEquipEvent((Player) e.getWhoClicked(), method, newEquipArmorType, oldArmorPiece, newArmorPiece); + Bukkit.getServer().getPluginManager().callEvent(armorEquipEvent); + if(armorEquipEvent.isCancelled()){ + e.setCancelled(true); + } + } + } + } + + @EventHandler + public void onClick(InventoryClickEvent e) { + Player player = (Player) e.getWhoClicked(); + Inventory inv = e.getInventory(); + ViceUser user = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + ItemStack clicked = e.getCurrentItem(); + ClickType click = e.getClick(); + if (e.getClickedInventory() == null) + return; + + if (user.getBooleanFromStorage(BooleanStorageType.BACKPACK_OPEN)) { +// if(e.getClick()==ClickType.NUMBER_KEY){ +// e.setCancelled(true); +// return; +// } +// ItemStack drug = click.isShiftClick() ? e.getCurrentItem() : e.getCursor(); +// if(drug!=null){ +// if(drug.getType().toString().endsWith("SHULKER_BOX")){ +// e.setCancelled(true); +// return; +// } +// else{ +// GameItem item = Vice.getItemManager().getItem(drug); +// if(item !=null && item.canSell() && (click.isShiftClick() || e.getClickedInventory().getType()==InventoryType.CHEST)){ +// e.setCancelled(true); +// return; +// } +// } +// } +// System.out.println("TEST"); + } + + if(inv.getType()==InventoryType.ENDER_CHEST) { + if(e.getClick()==ClickType.NUMBER_KEY){ + e.setCancelled(true); + return; + } + GameItem gi = Vice.getItemManager().getItem(click.isShiftClick() ? e.getCurrentItem() : e.getCursor()); + if(gi!=null && (gi.isScheduled() || gi.getItem().getType()==Material.WATCH || gi.getItem().getType()==Material.CHEST)) { + if (click.isShiftClick() && e.getClickedInventory().getType() == InventoryType.PLAYER) { + e.setCancelled(true); + } else if (!click.isShiftClick() && e.getClickedInventory().equals(inv)) + e.setCancelled(true); + } + } + if (e.getClickedInventory().getType() == InventoryType.PLAYER && (click==ClickType.LEFT || click==ClickType.RIGHT)) { + if (e.getSlot() == 17) { + Vice.getBackpackManager().openBackpack(player); + e.setCancelled(true); + return; + } else if (e.getSlot() == 16) { + MenuManager.openMenu(player, "ammopouch"); + e.setCancelled(true); + return; + } + } + String title = ChatColor.stripColor(e.getClickedInventory().getTitle()); + if (title.startsWith("Kit Preview: ")) { + e.setCancelled(true); + return; + } + if (title.endsWith("Corpse") && e.getCurrentItem().getType() == Material.STAINED_GLASS_PANE) { + e.setCancelled(true); + return; + } + + if (ViceUtils.isDefaultPlayerItem(clicked) && e.getClick() == ClickType.DOUBLE_CLICK) { + e.setCancelled(true); + player.updateInventory(); + } + } + + @EventHandler + public void onBackpackTransfer(InventoryClickEvent event) { + + ItemStack item = event.getCurrentItem(); + boolean shift = false; + + if(event.getClick() == ClickType.SHIFT_LEFT || event.getClick() == ClickType.SHIFT_RIGHT) shift = true; + + if (event.getClick() == ClickType.NUMBER_KEY) { + + if (item == null || item.getItemMeta() == null || item.getItemMeta().getDisplayName() == null) return; + + switch (ChatColor.stripColor(item.getItemMeta().getDisplayName())) { + case "Phone": + case "Ammo Pouch": + case "Backpack": + event.setCancelled(true); + break; + } + } + + if (shift) { + + if (item == null || item.getItemMeta() == null || item.getItemMeta().getDisplayName() == null) return; + + switch (ChatColor.stripColor(item.getItemMeta().getDisplayName())) { + case "Phone": + case "Ammo Pouch": + case "Backpack": + event.setCancelled(true); + break; + } + } else { + + ItemStack cursor = event.getCursor(); + Inventory inventory = event.getClickedInventory(); + + if (inventory == null) return; + + if (cursor == null) return; + + if (cursor.getItemMeta() != null && cursor.getItemMeta().getDisplayName() != null && ChatColor.stripColor(cursor.getItemMeta().getDisplayName()).equals("Phone") && cursor.getType() == Material.WATCH) { + event.setResult(Event.Result.DENY); + } + } + } + + @EventHandler + public void onSwitchToOffhand(PlayerSwapHandItemsEvent e) { + e.setCancelled(true); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/InventoryOpen.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/InventoryOpen.java new file mode 100644 index 0000000..c5c95f4 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/InventoryOpen.java @@ -0,0 +1,67 @@ +package net.grandtheftmc.vice.listeners; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.items.AmmoType; +import net.grandtheftmc.vice.users.ViceUser; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryOpenEvent; +import org.bukkit.event.inventory.InventoryType; +import org.bukkit.event.player.PlayerPickupItemEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class InventoryOpen implements Listener { + + private final static List<Material> BANNED_MATERIALS = new ArrayList<>(Arrays.asList(Material.WOOD_SWORD, Material.STONE_SWORD, Material.IRON_SWORD, Material.GOLD_SWORD, Material.DIAMOND_SWORD, Material.LEATHER_BOOTS, Material.LEATHER_LEGGINGS, Material.CHAINMAIL_BOOTS, Material.CHAINMAIL_LEGGINGS, Material.GOLD_BOOTS, Material.GOLD_LEGGINGS, Material.IRON_BOOTS, Material.IRON_LEGGINGS, Material.DIAMOND_BOOTS, Material.DIAMOND_LEGGINGS)); + @EventHandler + public void onOpen(InventoryOpenEvent e) { + Inventory inv = e.getInventory(); + Player player = (Player) e.getPlayer(); + + String disp = ChatColor.stripColor(e.getInventory().getTitle()); + if(inv.getHolder()==null) + return; + for(ItemStack is : inv.getStorageContents()) { + if(is!=null && is.getDurability()==0 && BANNED_MATERIALS.contains(is.getType())) { + inv.removeItem(is); + } + } + + if (!"Loot Crate".equalsIgnoreCase(disp)) + return; + ViceUser user = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + for (int i = 0; i < inv.getSize(); i++) { + ItemStack item = inv.getItem(i); + if (item == null) + continue; + AmmoType type = AmmoType.getAmmoType(item.getType(),item.getDurability()); + if (type == null||type.isInInventory()) + continue; + user.addAmmo(type, item.getAmount()); + player.sendMessage(Lang.AMMO_ADD.f(item.getAmount() + "&7 " + type.getGameItem().getDisplayName())); + inv.setItem(i, null); + } + } + + @EventHandler + protected final void onItemPickup(PlayerPickupItemEvent event) { + Player player = (Player) event.getPlayer(); + ItemStack itemStack = event.getItem().getItemStack(); + + if(itemStack != null && itemStack.getDurability()==0 && BANNED_MATERIALS.contains(itemStack.getType())) { + event.getItem().remove(); + } + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/InventoryPickupItem.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/InventoryPickupItem.java new file mode 100644 index 0000000..1643687 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/InventoryPickupItem.java @@ -0,0 +1,35 @@ +package net.grandtheftmc.vice.listeners; + +import net.grandtheftmc.vice.Vice; +import org.bukkit.entity.Item; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryPickupItemEvent; +import org.bukkit.inventory.ItemStack; + +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; + +/** + * Created by Timothy Lampen on 2017-08-07. + */ +public class InventoryPickupItem implements Listener { + + @EventHandler + public void onPickup(InventoryPickupItemEvent event){ + ItemStack item = event.getItem().getItemStack(); + HashMap<ItemStack, ItemStack> replacedVanillaItems = Vice.getItemManager().getReplacedVanilla(); + if(replacedVanillaItems.keySet().stream().anyMatch(value -> value.isSimilar(item))) { + Optional<Map.Entry<ItemStack, ItemStack>> optItemStack = replacedVanillaItems.entrySet().stream().filter(map -> map.getKey().isSimilar(item)).findFirst(); + if (optItemStack.isPresent()) { + event.setCancelled(true); + event.getItem().remove(); + ItemStack newItem = optItemStack.get().getValue(); + newItem.setAmount(item.getAmount()); + Item newI = event.getItem().getWorld().dropItem(event.getItem().getLocation(), newItem); + newI.setPickupDelay(0); + } + } + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/ItemBreak.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/ItemBreak.java new file mode 100644 index 0000000..3ca7198 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/ItemBreak.java @@ -0,0 +1,49 @@ +package net.grandtheftmc.vice.listeners; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.vice.ViceUtils; +import net.grandtheftmc.vice.events.ArmorEquipEvent; +import net.grandtheftmc.vice.events.EquipArmorType; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerItemBreakEvent; +import org.bukkit.inventory.ItemStack; + +/** + * Created by Timothy Lampen on 7/24/2017. + */ +public class ItemBreak implements Listener { + + @EventHandler + public void armorEquipRunner(PlayerItemBreakEvent e) { + Player p = e.getPlayer(); + ItemStack is = e.getBrokenItem(); + if(is.getAmount()>1 && ViceUtils.isTool(is.getType())) { + is.setAmount(is.getAmount()-1); + is.setDurability((short)0); + return; + } + EquipArmorType type = EquipArmorType.matchType(e.getBrokenItem()); + if(type != null){ + ArmorEquipEvent armorEquipEvent = new ArmorEquipEvent(p, ArmorEquipEvent.EquipMethod.BROKE, type, e.getBrokenItem(), null); + Bukkit.getServer().getPluginManager().callEvent(armorEquipEvent); + if(armorEquipEvent.isCancelled()){ + ItemStack i = is.clone(); + i.setAmount(1); + i.setDurability((short) (i.getDurability() - 1)); + if(type.equals(EquipArmorType.HELMET)){ + p.getInventory().setHelmet(i); + }else if(type.equals(EquipArmorType.CHESTPLATE)){ + p.getInventory().setChestplate(i); + }else if(type.equals(EquipArmorType.LEGGINGS)){ + p.getInventory().setLeggings(i); + }else if(type.equals(EquipArmorType.BOOTS)){ + p.getInventory().setBoots(i); + } + } + } + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/ItemComponent.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/ItemComponent.java new file mode 100644 index 0000000..d630885 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/ItemComponent.java @@ -0,0 +1,42 @@ +package net.grandtheftmc.vice.listeners; + +import net.grandtheftmc.core.util.Component; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.items.GameItem; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.event.EventHandler; +import org.bukkit.event.block.BlockBreakEvent; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryType; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +public class ItemComponent implements Component<ItemComponent, Vice> { + + public ItemComponent() { + Bukkit.getPluginManager().registerEvents(this, Vice.getInstance()); + } + + @EventHandler + protected final void onItemRaname(InventoryClickEvent event) { + if (event.getInventory() == null) return; + if (event.getInventory().getType() != InventoryType.ANVIL) return; + if (event.getRawSlot() != event.getView().convertSlot(event.getRawSlot())) return; + if (event.getRawSlot() != 2) return; + + if (event.getInventory().getItem(0) == null) return; + if (event.getInventory().getItem(0).getType() == Material.AIR) return; + + if (event.getInventory().getItem(2) == null) return; + if (event.getInventory().getItem(2).getType() == Material.AIR) return; + + ItemStack itemStack = event.getInventory().getItem(0); + for (GameItem gameItem : Vice.getItemManager().getItems()) { + if (gameItem.getItem().isSimilar(itemStack)) { + event.setCancelled(true); + break; + } + } + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/ItemSpawn.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/ItemSpawn.java new file mode 100644 index 0000000..7079f74 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/ItemSpawn.java @@ -0,0 +1,30 @@ +package net.grandtheftmc.vice.listeners; + +import org.bukkit.ChatColor; +import org.bukkit.entity.Item; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.ItemSpawnEvent; +import org.bukkit.inventory.ItemStack; + +public class ItemSpawn implements Listener { + @EventHandler + public void onItemSpawn(ItemSpawnEvent e) { + Item item = e.getEntity(); + ItemStack stack = item.getItemStack(); + + if (stack != null) { + if (stack.hasItemMeta()) { + switch (ChatColor.stripColor(stack.getItemMeta().getDisplayName())) { + case "Backpack": + case "Ammo Pouch": + case "Phone": { + item.remove(); + + break; + } + } + } + } + } +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/ItemStack.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/ItemStack.java new file mode 100644 index 0000000..39d58ec --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/ItemStack.java @@ -0,0 +1,19 @@ +package net.grandtheftmc.vice.listeners; + +import net.grandtheftmc.core.events.ItemStackEvent; +import org.bukkit.Material; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; + +/** + * Created by Timothy Lampen on 3/10/2018. + */ +public class ItemStack implements Listener { + + @EventHandler + public void onStack(ItemStackEvent event) { + org.bukkit.inventory.ItemStack is = event.getItemStack(); + if(is!=null && is.getType()== Material.PRISMARINE_SHARD) + event.setCancelled(true); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/JetpackFuelUse.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/JetpackFuelUse.java new file mode 100644 index 0000000..642b6a5 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/JetpackFuelUse.java @@ -0,0 +1,47 @@ +package net.grandtheftmc.vice.listeners; + +import com.j0ach1mmall3.wastedvehicles.api.events.FuelUseEvent; +import com.massivecraft.factions.*; +import com.massivecraft.factions.struct.Relation; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.util.State; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.users.CheatCode; +import net.grandtheftmc.vice.users.ViceUser; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; + +/** + * Created by Timothy Lampen on 8/22/2017. + */ +public class JetpackFuelUse implements Listener { + + @EventHandler + public void onFuelUse(FuelUseEvent event){ + Player player = event.getPlayer(); + if(player.isOnline() && player.isValid()){ + ViceUser user = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + if(user.getCheatCodeState(CheatCode.NOFUEL).getState()== State.ON) { + FPlayer fPlayer = FPlayers.getInstance().getByPlayer(player); + boolean badPlayersNearby = Bukkit.getOnlinePlayers().stream().anyMatch(target -> { + if(!target.getWorld().equals(player.getWorld()) || target.getLocation().distance(player.getLocation())>100) { + return false; + } + FPlayer fTarget = FPlayers.getInstance().getByPlayer(target); + if(fTarget.getRelationTo(fPlayer)==Relation.ENEMY) + return true; + return false; + }); + if(badPlayersNearby) {//there are enemies nearby so the fuel is going to be used. + return; + } + Faction cFac = Board.getInstance().getFactionAt(new FLocation(player.getLocation())); + if (cFac.isWilderness() || cFac.equals(fPlayer.getFaction()) || fPlayer.getFaction().getRelationTo(cFac) != Relation.ENEMY) { + event.setCancelled(true); + } + } + } + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/Join.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/Join.java new file mode 100644 index 0000000..f49b433 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/Join.java @@ -0,0 +1,200 @@ +package net.grandtheftmc.vice.listeners; + +import com.google.common.collect.Maps; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.achivements.Achievement; +import net.grandtheftmc.core.resourcepack.ResourcePack; +import net.grandtheftmc.core.resourcepack.ResourcePackEvent; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.util.NMSVersion; +import net.grandtheftmc.core.util.State; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.ViceUtils; +import net.grandtheftmc.vice.combatlog.CombatLogger; +import net.grandtheftmc.vice.commands.AntiAuraCommand; +import net.grandtheftmc.vice.hologram.HologramManager; +import net.grandtheftmc.vice.items.ArmorUpgrade; +import net.grandtheftmc.vice.items.Head; +import net.grandtheftmc.vice.users.CheatCode; +import net.grandtheftmc.vice.users.ViceUser; +import net.grandtheftmc.vice.users.storage.BooleanStorageType; +import org.bukkit.Bukkit; +import org.bukkit.GameMode; +import org.bukkit.Material; +import org.bukkit.Statistic; +import org.bukkit.entity.NPC; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; +import org.bukkit.scheduler.BukkitRunnable; + +import java.util.*; + +public class Join implements Listener { + + private final HashMap<UUID, Integer> resourcePackTries; + private final HologramManager hologramManager; +// private final BeerBottle beerBottle; + + public Join(HologramManager hologramManager) { + resourcePackTries = Maps.newHashMap(); + this.hologramManager = hologramManager; +// this.beerBottle = new BeerBottle(); + } + +// @EventHandler +// protected final void onCraft(PrepareItemCraftEvent event) { +// this.beerBottle.getAttribute().onEvent(event); +// } + + @EventHandler + public void onJoin(PlayerJoinEvent e) { + Player player = e.getPlayer(); + e.setJoinMessage(null); + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + ViceUser viceUser = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + ViceUtils.giveGameItems(player); + viceUser.setBooleanToStorage(BooleanStorageType.KICKED, false); + if (viceUser.getPlaytime() == 0L) { + int playOneTick = player.getStatistic(Statistic.PLAY_ONE_TICK); + viceUser.setPlaytime(Long.valueOf(playOneTick / 20)); + } + viceUser.setJointime(System.currentTimeMillis()); + if (player.hasPermission("antiaura.admin") && !AntiAuraCommand.TOGGLED_PLAYERS.contains(player.getName())) { + AntiAuraCommand.TOGGLED_PLAYERS.add(player.getName()); + } + + //Force gamemode SURVIVAL + player.setGameMode(GameMode.SURVIVAL); + + if (player.getGameMode() == GameMode.SPECTATOR) { + player.getActivePotionEffects().clear(); + player.setFoodLevel(20); + player.setFlying(false); + player.setFlySpeed(0.1F); + if (!viceUser.isArrested()) + player.teleport(Vice.getWorldManager().getWarpManager().getSpawn().getLocation()); + } + + ViceUtils.sendJoinMessage(player, user); + if (!player.hasPlayedBefore()) { + Utils.broadcastExcept(player, + Lang.VICE.f("&7Welcome " + user.getColoredName(player) + "&7 to &7&lGrand Theft Minecart&r!")); + player.teleport(Vice.getWorldManager().getWarpManager().getSpawn().getLocation()); + player.chat("/tutorial start Vice"); + } else if (viceUser.isArrested()) + player.teleport(Vice.getWorldManager().getWarpManager().getJail().getLocation()); + Head head = Vice.getShopManager().getHead(player.getName()); + if (head != null && head.getBidderUUID() != null && !Objects.equals(head.getBidderUUID(), player.getUniqueId()) && !head.isDone()) + player.sendMessage(Lang.HEAD_AUCTION.f("&7Your head is currently being auctioned by &a&l" + head.getSellerName() + "&7! The last bidder was &a&l" + head.getBidderName() + "&7 for &a$&l" + head.getBid() + "&7!")); + + // Vice.getLottery().joinCheck(player, user, viceUser); + + ViceUtils.updateBoard(player, viceUser); + player.setWalkSpeed(0.2F); + if (Objects.equals(player.getUniqueId().toString(), "0e4a6028-3d9a-4a2e-9797-eb1ddcb0aca9")) { + Bukkit.getOnlinePlayers().forEach(target -> { + User targetUser = Core.getUserManager().getLoadedUser(target.getUniqueId()); + targetUser.addAchievement(Achievement.Witness); + }); + } + NMSVersion version = NMSVersion.getVersion(player); + if (version == NMSVersion.MC_1_8) { + Utils.sendTitle(player, "&4&lTexturepack Load Fail", "&cRecommended: 1.9.4+", 20, 120, 20); + player.sendMessage(""); + player.sendMessage(Utils.f("&4&lUnable to load the texture pack for the version that you have joined with. Use 1.9.4+ for an optimal experience.")); + player.sendMessage(""); + } else { + sendPack(player, Vice.getResourcePackManager().getResourcePack(version)); + } + + NPC spawnedLoggerNPC = Vice.getCombatLogManager().getSpawnedNPCFromPlayer(player.getUniqueId()); + if (spawnedLoggerNPC != null) { + Vice.getCombatLogManager().removeNPC(spawnedLoggerNPC); + spawnedLoggerNPC.remove(); + } + + Optional<CombatLogger> logger = Vice.getCombatLogManager().getDestroyedCombatLogger(player.getUniqueId()); + if (logger.isPresent()) { + List<ItemStack> contents; + if (logger.get().getContents() == null) { + contents = new ArrayList<>(); + for (ItemStack is : player.getInventory().getContents()) { + if (is == null || is.getType() == Material.AIR || is.getType() == Material.WATCH) + continue; + if (ViceUtils.isDefaultPlayerItem(is)) + continue; + if (logger.get().isFromSpawn() && (Vice.getItemManager().getItem(is) == null || !Vice.getItemManager().getItem(is).isScheduled())) + continue; + contents.add(is); + } + } else { + contents = logger.get().getContents(); + } + for (ItemStack is : contents) { + if (is != null) + player.getInventory().removeItem(is); + } + for (int i = 36; i < 40; i++) { + ItemStack is = player.getInventory().getItem(i); + if (is == null || is.getType() == Material.AIR) + continue; + if (contents.contains(is)) { + player.getInventory().setItem(i, null); + } + } + player.updateInventory(); + Vice.getCombatLogManager().clearRemovedItems(player.getUniqueId()); + player.sendMessage(Lang.COMBATTAG.f("&e&lYour combatlog NPC was killed so items were removed from your inventory.")); + player.teleport(Vice.getWorldManager().getWarpManager().getSpawn().getLocation()); + } + ArmorUpgrade.reloadArmorUpgrades(player); + if (viceUser.getCheatCodeState(CheatCode.NIGHTVIS).getState() == State.ON) { + player.addPotionEffect(new PotionEffect(PotionEffectType.NIGHT_VISION, Integer.MAX_VALUE, 0)); + } + } + + private void sendPack(Player player, ResourcePack pack) { + UUID uuid = player.getUniqueId(); + new BukkitRunnable() { + @Override + public void run() { + Player p = Bukkit.getPlayer(uuid); + if (p == null || !p.isOnline()) return; + + if (!p.isValid()) sendPack(p, pack); + + if (pack != null) { + p.setResourcePack(pack.getPack()); + } + } + }.runTaskLater(Vice.getInstance(), 20L); + } + + @EventHandler + protected final void onResourcePack(ResourcePackEvent event) { + Player player = event.getPlayer(); + if (player == null) return; + + ViceUser viceUser = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + if (viceUser == null) return; + + player.sendTitle(Utils.f("&d&lWelcome to &oVice City!"), + "", + 60, + 30, + 40); + + if (viceUser.getKills() < player.getStatistic(Statistic.PLAYER_KILLS)) + viceUser.setKills(player.getStatistic(Statistic.PLAYER_KILLS)); + if (viceUser.getDeaths() < player.getStatistic(Statistic.DEATHS)) + viceUser.setDeaths(player.getStatistic(Statistic.DEATHS)); + viceUser.checkAchievements(); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/Leave.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/Leave.java new file mode 100644 index 0000000..b529e35 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/Leave.java @@ -0,0 +1,72 @@ +package net.grandtheftmc.vice.listeners; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.commands.SpectatorCommand; +import net.grandtheftmc.vice.users.PersonalVehicle; +import net.grandtheftmc.vice.users.ViceUser; +import net.grandtheftmc.vice.users.storage.BooleanStorageType; +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerKickEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import java.util.UUID; +import java.util.concurrent.TimeUnit; + +public class Leave implements Listener { + + @EventHandler + public void onKick(PlayerKickEvent e) { + Player player = e.getPlayer(); + ViceUser user = Vice.getUserManager().getLoadedUser(e.getPlayer().getUniqueId()); + user.setBooleanToStorage(BooleanStorageType.KICKED, true); + Vice.getCombatLogManager().spawnNPC(player, player.getWorld().getName().equals("spawn"), e.getReason().contains("spam")); + } + + @EventHandler + public void onLeave(PlayerQuitEvent e) { + Player player = e.getPlayer(); + UUID uuid = player.getUniqueId(); + ViceUser user = Vice.getUserManager().getLoadedUser(uuid); + Long leaveTime = System.currentTimeMillis(); + Long playtimeSeconds = TimeUnit.MILLISECONDS.toSeconds(leaveTime - user.getJoinTime()); + user.setPlaytime(user.getPlaytime() + playtimeSeconds); + if (player.getGameMode() == GameMode.SPECTATOR) { + player.getActivePotionEffects().clear(); + player.setFoodLevel(20); + player.setGameMode(GameMode.SURVIVAL); + player.setFlying(false); + player.setFlySpeed(0.1F); + if (user.isArrested()) { + player.teleport(Vice.getWorldManager().getWarpManager().getJail().getLocation()); + } else { + player.teleport(Vice.getWorldManager().getWarpManager().getSpawn().getLocation()); + } + } + Location loc = player.getLocation(); + User u = Core.getUserManager().getLoadedUser(uuid); +// u.removeCosmetics(player, CosmeticType.HAT); + if (user.hasPersonalVehicle()) { + PersonalVehicle vehicle = user.getPersonalVehicle(); + if (vehicle.onMap()) + vehicle.updateVehicleInDatabase(player, 0); + } + if (SpectatorCommand.getActiveStaff().contains(player.getName())) { + player.setGameMode(GameMode.SURVIVAL); + SpectatorCommand.getActiveStaff().remove(player.getName()); + } + Vice.getCombatLogManager().spawnNPC(player, player.getWorld().getName().equals("spawn")); + } + + @EventHandler(priority = EventPriority.MONITOR) + public void onLeaveMonitor(PlayerQuitEvent e) { + Vice.getUserManager().unloadUser(e.getPlayer().getUniqueId()); + } + +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/Login.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/Login.java new file mode 100644 index 0000000..871b890 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/Login.java @@ -0,0 +1,42 @@ +package net.grandtheftmc.vice.listeners; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.users.ViceUser; +import net.grandtheftmc.vice.users.storage.BooleanStorageType; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.player.AsyncPlayerPreLoginEvent; +import org.bukkit.event.player.PlayerLoginEvent; +import org.bukkit.event.player.PlayerLoginEvent.Result; + +import java.util.UUID; + +public class Login implements Listener { + + @EventHandler + public void onLogin(AsyncPlayerPreLoginEvent e) { + ViceUser user = Vice.getUserManager().getLoadedUser(e.getUniqueId()); + user.dataCheck(e.getName(), Core.getUserManager().getLoadedUser(e.getUniqueId()).getUserRank()); + if (!user.updateDataFromDb()) + e.disallow(org.bukkit.event.player.AsyncPlayerPreLoginEvent.Result.KICK_OTHER, + "&cAn error occured while trying to fetch your data from the database. Please try again in a few seconds!"); + } + + @EventHandler(priority = EventPriority.MONITOR) + public void onLoginMonitor(PlayerLoginEvent e) { + Player player = e.getPlayer(); + UUID uuid = player.getUniqueId(); + ViceUser user = Vice.getUserManager().getLoadedUser(uuid); + if (!user.getBooleanFromStorage(BooleanStorageType.HAS_UPDATED)) + e.disallow(PlayerLoginEvent.Result.KICK_OTHER, Utils.f("&cThe server is still restarting! Please try again in a few seconds!")); + if (e.getResult() == Result.ALLOWED) + return; + Vice.getUserManager().unloadUser(uuid); + + } + +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/MenuListener.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/MenuListener.java new file mode 100644 index 0000000..8accd0d --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/MenuListener.java @@ -0,0 +1,1634 @@ +package net.grandtheftmc.vice.listeners; + +import com.j0ach1mmall3.wastedvehicles.api.VehicleProperties; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.events.MoneyEvent; +import net.grandtheftmc.core.menus.Menu; +import net.grandtheftmc.core.menus.MenuClickEvent; +import net.grandtheftmc.core.menus.MenuManager; +import net.grandtheftmc.core.menus.MenuOpenEvent; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.util.State; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.guns.weapon.Weapon; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.ViceUtils; +import net.grandtheftmc.vice.items.*; +import net.grandtheftmc.vice.tasks.LotteryPlayer; +import net.grandtheftmc.vice.users.*; +import net.grandtheftmc.vice.users.storage.BooleanStorageType; +import net.grandtheftmc.vice.utils.StringUtils; +import net.grandtheftmc.vice.world.warps.Warp; +import net.md_5.bungee.api.chat.ClickEvent; +import net.md_5.bungee.api.chat.ComponentBuilder; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.entity.Villager; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import java.text.NumberFormat; +import java.util.*; +import java.util.stream.Collectors; + + +public class MenuListener implements Listener { + + private static final int[] DEFAULT_PHONE_OPEN_SLOTS = new int[]{11,13,15,29,31,33,47,49,51}; + + @EventHandler(priority = EventPriority.HIGH) + public void onMenuOpen(MenuOpenEvent e) { + Player player = e.getPlayer(); + UUID uuid = player.getUniqueId(); + Menu menu = e.getMenu(); + switch (menu.getName()) { + case "choose_villager_type": { + this.setPhoneDefaults(e); + ViceUser viceUser = Vice.getUserManager().getLoadedUser(uuid); + if(viceUser.getChangingJob()==null) { + player.sendMessage(Lang.CHEAT_CODES.f("&7Cannot open this menu because you do not have a villager selected!")); + return; + } + int counter = 0; + for(Villager.Profession p : Villager.Profession.values()) { + ItemStack is = new ItemStack(Material.DIRT); + switch (p) { + case HUSK: + case NORMAL: + continue; + case BLACKSMITH: + is.setType(Material.ANVIL); + break; + case BUTCHER: + is.setType(Material.PORK); + break; + case LIBRARIAN: + is.setType(Material.BOOK); + break; + case FARMER: + is.setType(Material.WOOD_HOE); + break; + case PRIEST: + is.setType(Material.GOLDEN_APPLE); + break; + case NITWIT: + is.setType(Material.CARROT_STICK); + break; + } + ItemMeta im = is.getItemMeta(); + im.setDisplayName(Utils.f("&6&lJob: &b&l" + StringUtils.getCapitalized(p.toString().toLowerCase()))); + is.setItemMeta(im); + e.setItem(DEFAULT_PHONE_OPEN_SLOTS[counter], is); + counter++; + } + return; + } + case "cheatcodes": { + this.setPhoneDefaults(e); + int[] slots = new int[]{11, 12, 14, 15, 20, 21, 23, 24, 29, 30, 32, 33, 39, 40, 41}; + for (int i = 0; i < CheatCode.values().length; i++) {//will only work with a max of 9 codes + int slot = slots[i]; + CheatCode code = CheatCode.values()[i]; + State state = Vice.getUserManager().getLoadedUser(uuid).getCheatCodeState(code).getState(); + e.setItem(slot, code.getDisplayItem(Core.getUserManager().getLoadedUser(uuid), state)); + } + e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the contacts page!")); + e.setItem(51, Utils.createItem(Material.BOOK, "&2&lActivating Cheatcodes", "&7You can activate cheatcodes by clicking the item in this menu,", "&7by using &a&l/<cheatcode>&7, and &a&l/cheatcode <cheatcode>&7!")); + return; + } + case "phone": + this.setPhoneDefaults(e); + e.setItem(11, + Utils.createItem(Material.ENDER_CHEST, "&e&lCosmetics", "&7Stand out from the crowd!")); + e.setItem(15, Utils.createItem(Material.MINECART, "&c&lVehicles", "&7Ride in style!")); + e.setItem(29, Utils.createItem(Material.EMPTY_MAP, "&a&lRanks", "&7Working my way to the top!")); + e.setItem(31, Utils.createItem(Material.NETHER_STAR, "&d&lMy Account", "&7Stats, Ranks and Prefs!")); + e.setItem(33, Utils.createItem(Material.CHEST, "&b&lKits", "&7Gear up!")); + e.setItem(47, Utils.createItem(Material.BOOK, "&6&lContacts", "&7Call your associates!")); + e.setItem(49, Utils.createItem(Material.EMERALD, "&a&lStore", "&7Support the server!")); + e.setItem(51, Utils.createItem(Material.EXP_BOTTLE, "&a&lRewards", "&7Voting, daily and donor bonuses!")); + return; + case "cosmetics": + case "rewards": + e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the home page!")); + return; + case "vote": + e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the rewards page!")); + return; + case "account": + this.setPhoneDefaults(e); + e.setItem(22, Utils.createItem(Material.NAME_TAG, "&6&lUnlocked Tags", "&7Change your name prefix!")); + e.setItem(11, Utils.createItem(Material.BOOK, "&d&lStats", "&7You got skills!")); + e.setItem(15, Utils.createItem(Material.REDSTONE_COMPARATOR, "&5&lPreferences", "&7Toggle your shit!")); + e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the home page!")); + e.setItem(49, Utils.createItem(Material.NETHER_STAR, "&d&lMy Account", "&7Take care of your biz!")); + return; + case "prefs": + e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the account page!")); + return; + case "ranks": { + this.setPhoneDefaults(e); + int[] viceRankSlots = new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24}; + int[] donorSlots = new int[]{38, 39, 40, 41, 42}; + int i = 0; + ViceUser user = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + for (ViceRank rank : ViceRank.values()) { + List<String> lore = new ArrayList<>(); + lore.add(""); + if (rank.getPrice() > 0) { + lore.add("&7Price: &a$&l" + rank.getPrice()); + lore.add(""); + } + lore.add("&aPerks:"); + lore.add(""); + lore.add("&bKit " + rank.getColoredNameBold() + "&7!"); + switch (rank) { + case JUNKIE: + lore.add("&7Drivers License! (&a&lCars&7)"); + lore.add("&a&l1x&7 /home set!"); + break; + case FALCON: + lore.add("&7Team up! (Join a &a&lCartel&7)"); + lore.add("&7Unlock &e&lMarksman Pistol&7!"); + lore.add("&7Auction &a&l1&7 item! (&aComing soon&7!)"); + lore.add("&7Call a &6&lCab&7! (&a/tpa&7)"); + break; + case THUG: + lore.add("&7Unlock &e&lHeavy Shotgun&7!"); + lore.add("&7Auction &a&l2&7 items! (&aComing soon&7!)"); + lore.add("&7Craft items on the go! (&a/workbench&7)"); + break; + case DEALER: + lore.add("&7Apply for &3&lCop&7!"); + lore.add("&7Unlock &e&lChainsaw&7!"); + lore.add("&7Unlock &e&lGusenberg Sweeper&7!"); + break; + case GROWER: + lore.add("&7Create your own &e&lCartel&7!"); + lore.add("&a&l2x&7 /home set!"); + lore.add("&7Unlock &e&lRPG&7!"); + break; + case SMUGGLER: + lore.add("&7Unlock &e&lHeavy Sniper&7!"); + break; + case CHEMIST: + lore.add("&7Unlock &e&lSpecial Carbine&7!"); + lore.add("&7Auction &a&l3&7 items! (&aComing soon&7!)"); + break; + case DRUGLORD: + lore.add("&7Unlock &e&lGrenade Launcher&7!"); + lore.add("&7Auction &a&l4&7 items! (&aComing soon&7!)"); + lore.add("&7Up, up and away! (&4&lJetpack&7)"); + break; + case KINGPIN: + lore.add("&7Unlock &e&lCombat MG&7!"); + lore.add("&a&l3x&7 /home set!"); + break; + case GODFATHER: + lore.add("&7Unlock &e&lHoming Launcher&7!"); + lore.add("&7Unlock &e&lMinigun&7!"); + lore.add("&7Auction &a&l5&7 items! (&aComing soon&7!)"); + lore.add("&7Enderchest anywhere! (&a/echest&7)"); + break; + default: + lore.add("&7Rank up for cool perks!"); + } + e.setItem(viceRankSlots[i], + Utils.createItem(rank.getMaterial(), rank.getColoredNameBold(), Utils.f(lore))); + i++; + } + i = 0; + for (UserRank rank : new UserRank[]{UserRank.VIP, UserRank.PREMIUM, UserRank.ELITE, UserRank.SPONSOR, UserRank.SUPREME}) { + List<String> lore = new ArrayList<>(); + // TODO + lore.add(""); + lore.add("&7Price: &a$&l" + rank.getPrice()); + lore.add(""); + lore.add("&aPerks:"); + lore.add(""); + lore.add("&a+ &e&l" + rank.getMonthlyTokens() + " Tokens &a&lmonthly&7!"); + lore.add("&bKit " + rank.getColoredNameBold() + "&7!"); + lore.add("&a&l" + ViceUtils.getBackpackRows(rank) + "&6&l Backpack &7rows!"); + lore.add("&a+ $&l" + ViceUtils.getStartingMoney(rank) + "&7 in-game money!"); + lore.add("&a+ " + ViceUtils.getWarpDelay(rank) + "&7s delay &6&lTaxi Service&7!"); + lore.add("&a+ " + ViceUtils.getSetHomes(rank) + "x&7 /home set!"); + lore.add("&a+ &l"+ Math.round(ViceUtils.getDrugSellModifier(rank) *100) + "&a%&7 sell multiplier!"); + if (rank.isHigherThan(UserRank.VIP)) { + lore.add("&a+ Instantly&7 teleport anywhere from spawn!"); + lore.add("&a+ &7Join &c&lFull&7 servers!"); + } + if (rank.isHigherThan(UserRank.PREMIUM)) { + lore.add("&a+ &7Pick up your friend! (&a&l/tpahere&7)"); + lore.add("&a+ &7Apply for &3&lCop&7!"); + } + if (rank.isHigherThan(UserRank.ELITE)) { + lore.add("&a+ &7Quick sell Cheatcode"); + lore.add("&a+ &7Satisfy yourself! (&a&l/feed&7)"); + lore.add("&a+ &7Up, up and away! (&4&lJetpack&7)"); + } + for (LockedWeapon w : LockedWeapon.values()) { + if (w.getUserRank() == rank || rank.isHigherThan(w.getUserRank())) { + GameItem g = Vice.getItemManager().getItemFromWeapon(w.toString()); + if (g != null) + lore.add("&a+ &7Unlock " + g.getDisplayName() + "&7 instantly!"); + } + } + e.setItem(donorSlots[i], Utils.createItem(rank.getMaterial(), rank.getColoredNameBold(), lore)); + i++; + + } + e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to my account!")); + ViceRank next = user.getRank().getNext(); + if (next != null) + e.setItem(31, Utils.createItem(Material.PAPER, "&a&lRankup to " + next.getColoredNameBold() + "&a&l!", + "&7Price: &" + (user.hasMoney(next.getPrice()) ? "a" : "c") + "$&l" + next.getPrice())); + return; + } + case "vicestats": { + this.setPhoneDefaults(e); + ViceUser u = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + e.setItem(11, Utils.createItem(Material.PAPER, "&a&lMoney: &f" + Utils.round(u.getMoney()))); + e.setItem(15, Utils.createItem(Material.EMPTY_MAP, "&3&lBonds: &f" + u.getBonds())); + e.setItem(29, Utils.createItem(Material.IRON_SWORD, "&e&lKills: &f" + u.getKills())); + e.setItem(31, Utils.createItem(Material.SKULL_ITEM, "&c&lDeaths: &f" + u.getDeaths())); + e.setItem(33, Utils.createItem(Material.IRON_SWORD, "&a&lK/D Ratio: &f" + u.getKDR())); + e.setItem(49, Utils.createItem(Material.BOOK_AND_QUILL, "&6&lKillstreak: &f" + u.getKillStreak())); + e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to my account!")); + return; + } + + case "kits": { + this.setPhoneDefaults(e); + ViceUser viceUser = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the home page!")); + int[] grSlots = new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24}; + int[] otherSlots = new int[]{29, 30, 31, 32, 33}; + int[] urSlots = new int[]{38, 39, 40, 41, 42}; + int i = 0; + ViceRank viceRank = viceUser.getRank(); + for (ViceRank rank : ViceRank.values()) { + Kit kit = Vice.getItemManager().getKit(rank.getName().toLowerCase()); + if (kit == null) { + continue; + } + List<String> lore = new ArrayList<>(); + lore.add(""); + if (rank != viceRank) + lore.add("&cRequires " + rank.getName()); + if (kit.getCost() > 0) + lore.add("&7Cost: &a$&l" + kit.getCost()); + if (kit.getDelay() > 0) + lore.add(viceUser.canUseKit(kit.getName()) + ? "&7Delay: &a&l" + Utils.timeInSecondsToText(kit.getDelay()) + : "&cTime Left: &l" + Utils.timeInMillisToText( + viceUser.getKitExpiry(kit.getName()) - System.currentTimeMillis())); + lore.add(""); + lore.addAll(kit.getContents().stream().map(KitItem::getDescription).collect(Collectors.toList())); + if (kit.getHelmet() != null) + lore.add("&7Helmet: " + kit.getHelmet().getDescription()); + if (kit.getChestPlate() != null) + lore.add("&7Chestplate: " + kit.getChestPlate().getDescription()); + if (kit.getLeggings() != null) + lore.add("&7Leggings: " + kit.getLeggings().getDescription()); + if (kit.getBoots() != null) + lore.add("&7Boots: " + kit.getBoots().getDescription()); + if (kit.getOffHand() != null) + lore.add("&7Offhand: " + kit.getOffHand().getDescription()); + ItemStack item = Utils.createItem(rank.getMaterial(), rank.getColoredNameBold(), lore); + e.setItem(grSlots[i], item); + i++; + } + i = 0; + for (UserRank rank : UserRank.getDonorRanks()) { + Kit kit = Vice.getItemManager().getKit(rank.getName().toLowerCase()); + if (kit == null) { + i++; + continue; + } + List<String> lore = new ArrayList<>(); + lore.add(""); + if (!(rank == user.getUserRank() + || (rank == UserRank.SUPREME && user.getUserRank().isHigherThan(UserRank.SUPREME)))) + lore.add("&cRequires " + rank.getColoredNameBold()); + if (kit.getCost() > 0) + lore.add("&7Cost: &a$&l" + kit.getCost()); + if (kit.getDelay() > 0) + lore.add(viceUser.canUseKit(kit.getName()) + ? "&7Delay: &a&l" + Utils.timeInSecondsToText(kit.getDelay()) + : "&cTime Left: &l" + Utils.timeInMillisToText( + viceUser.getKitExpiry(kit.getName()) - System.currentTimeMillis())); + lore.add(""); + lore.addAll(kit.getContents().stream().map(KitItem::getDescription).collect(Collectors.toList())); + if (kit.getHelmet() != null) + lore.add("&7Helmet: " + kit.getHelmet().getDescription()); + if (kit.getChestPlate() != null) + lore.add("&7Chestplate: " + kit.getChestPlate().getDescription()); + if (kit.getLeggings() != null) + lore.add("&7Leggings: " + kit.getLeggings().getDescription()); + if (kit.getBoots() != null) + lore.add("&7Boots: " + kit.getBoots().getDescription()); + if (kit.getOffHand() != null) + lore.add("&7Offhand: " + kit.getOffHand().getDescription()); + ItemStack item = Utils.createItem(rank.getMaterial(), rank.getColoredNameBold(), lore); + e.setItem(urSlots[i], item); + i++; + } + i = 0; + for (Kit kit : Vice.getItemManager().getKits()) { + if (net.grandtheftmc.vice.users.ViceRank.getRankOrNull(kit.getName()) != null || UserRank.getUserRankOrNull(kit.getName()) != null + || CopRank.getRankOrNull(kit.getName()) != null || i>=5) + continue; + List<String> lore = new ArrayList<>(); + lore.add(""); + if (kit.getPermission() != null && !player.hasPermission(kit.getPermission())) + lore.add("&cRequires permission " + kit.getPermission()); + if (kit.getCost() > 0) + lore.add("&7Cost: &a$&l" + kit.getCost()); + if (kit.getDelay() > 0) + lore.add(viceUser.canUseKit(kit.getName()) + ? "&7Delay: &a&l" + Utils.timeInMillisToText((long) kit.getDelay() * 1000) + : "&cTime Left: &l" + Utils.timeInMillisToText( + viceUser.getKitExpiry(kit.getName()) - System.currentTimeMillis())); + lore.add(""); + lore.addAll(kit.getContents().stream().map(KitItem::getDescription).collect(Collectors.toList())); + + ItemStack item = Utils.createItem(kit.getMaterial(), "&b&l" + kit.getName(), lore); + e.setItem(otherSlots[i], item); + i++; + if (i > otherSlots.length) + break; + } + return; + + } + case "contacts": { + this.setPhoneDefaults(e); + ViceUser user = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + e.setItem(11, Utils.createItem(Material.STORAGE_MINECART, "&e&lTaxi Service", "&7Click to select a destination!")); + e.setItem(13, Utils.createItem(Material.SKULL_ITEM, 2, user.isCop() ? "&3&lBackup" : "&3&lPolice", user.isCop() ? "&7Click to request help from fellow officers!" : "&7Click to call the cops to your location!")); + e.setItem(29, Utils.createItem(Material.ANVIL, "&2&lCheat Codes", "&7Become a cheater and rule the game!")); + e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the home page!")); + e.setItem(49, Utils.createItem(Material.WATCH, "&c&l911 Emergency", "&7Click to teleport out of here!")); + return; + } + case "taxi": + this.setPhoneDefaults(e); + e.setItem(11, Utils.createItem(Material.SKULL_ITEM, 3, "&e&lPlayer", "&7Click to select a player!")); + e.setItem(13, Utils.createItem(Material.ENDER_PEARL, "&e&lWarp", "&7Click to select a warp!")); + e.setItem(15, Utils.createItem(Material.IRON_DOOR, "&3&lHouse", "&7Click to select a house!")); + e.setItem(29, Utils.createItem(Material.ANVIL, "&2&lCheat Codes", "&7Become a cheater and rule the game!")); + e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the contacts page!")); + e.setItem(49, Utils.createItem(Material.STORAGE_MINECART, "&e&lTaxi Service", + "&7Click a button to select your destination!")); + return; + case "taxiplayers": { + this.setPhoneDefaults(e); + List<Player> players = Bukkit.getOnlinePlayers().stream().filter(bp -> !Objects.equals(player.getUniqueId(), bp.getUniqueId())).collect(Collectors.toList()); + int[] slots = new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 38, 39, 40, 41, 42}; + Iterator<Player> it = players.iterator(); + User u = Core.getUserManager().getLoadedUser(player.getUniqueId()); + for (int i = 0; i < 20; i++) { + if (!it.hasNext()) + break; + Player p = it.next(); + e.setItem( + slots[i], Utils + .setSkullOwner( + Utils.createItem(Material.SKULL_ITEM, 3, + "&e&l" + p.getName(), u.isPremium() + ? "&7Click to send teleport request!" : "&cRequires PREMIUM!"), + p.getName())); + } + e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the taxi page!")); + e.setItem(49, Utils.createItem(Material.STORAGE_MINECART, "&e&lTaxi Service: Players", "&7Page 1")); + if (players.size() > 20) + e.setItem(50, Utils.createItem(Material.ARROW, "&e&lNext Page", "&7Page 2")); + return; + } + + case "taxiwarps": { + this.setPhoneDefaults(e); + User u = Core.getUserManager().getLoadedUser(uuid); + ViceUser user = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + List<Warp> warps = Vice.getWorldManager().getWarpManager().getWarps(); + int[] slots = new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 38, 39, 40, 41, 42}; + Iterator<Warp> it = warps.iterator(); + for (int i = 0; i < 20; i++) { + if (!it.hasNext()) + break; + Warp warp = it.next(); + e.setItem(slots[i], Utils.createItem(Material.ENDER_PEARL, "&e&l" + warp.getName(), + u.isRank(UserRank.ELITE) ? "&7Click to teleport!" : "&7Click to teleport for &a$&l200&7!")); + } + e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the taxi page!")); + e.setItem(49, Utils.createItem(Material.STORAGE_MINECART, "&e&lTaxi Service: Warps", "&7Page 1")); + if (warps.size() > 20) + e.setItem(50, Utils.createItem(Material.ARROW, "&e&lNext Page", "&7Page 2")); + return; + } + + case "ammopouch": { + ViceUser user = Vice.getUserManager().getLoadedUser(uuid); + int i = 0; + for (AmmoType type : AmmoType.getTypes()) { + if (type.isInInventory()) + continue; + ItemStack item = type.getGameItem().getItem(); + int a = user.getAmmo(type); + ItemMeta meta = item.getItemMeta(); + meta.setLore(Collections.singletonList(Utils.f("&7Amount: &a&l" + a))); + item.setItemMeta(meta); + if (a > 1) item.setAmount(a >= 127 ? 127 : a); + e.setItem(i, item); + e.setItem(i + 9, Utils.createItem(Material.REDSTONE, "&c&lDrop " + 50, 50)); + e.setItem(i + 18, Utils.createItem(Material.REDSTONE, "&c&lDrop " + 10, 10)); + e.setItem(i + 27, Utils.createItem(Material.REDSTONE, "&c&lDrop " + 1, 1)); + i++; + } + ItemStack grayGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 7, "&a"); + for (int n : new int[]{8, 17, 26, 35}) + e.setItem(n, grayGlass); + return; + + } + case "jail": { + this.setPhoneDefaults(e); + ViceUser user = Vice.getUserManager().getLoadedUser(uuid); + int[] slots = new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 38, 39, 40, 41, 42}; + List<Player> jailedPlayers = ViceUtils.getJailedPlayers(); + Iterator<Player> it = jailedPlayers.iterator(); + for (int i = 0; i < 20; i++) { + if (!it.hasNext()) + break; + Player p = it.next(); + ViceUser u = Vice.getUserManager().getLoadedUser(p.getUniqueId()); + if (!u.isArrested()) + continue; + List<String> lore = new ArrayList<>(); + lore.add("&7Time Left: &a&l" + Utils.timeInSecondsToText(u.getJailTimer())); + if (user.isCop()) + lore.add("&7Click to release!"); + e.setItem(slots[i], Utils.setSkullOwner( + Utils.createItem(Material.SKULL_ITEM, 3, "&e&l" + p.getName(), lore), p.getName())); + } + e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lClose", "&7Click to close this menu!")); + e.setItem(49, Utils.createItem(Material.IRON_FENCE, "&c&lPrisoner List", "&7Page 1")); + if (jailedPlayers.size() > 20) + e.setItem(50, Utils.createItem(Material.ARROW, "&c&lNext Page", "&7Page 2")); + return; + } + case "vehicles": { + this.setPhoneDefaults(e); + ViceUser user = Vice.getUserManager().getLoadedUser(uuid); + int[] slots = new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 38, 39, 40, 41, 42}; + List<PersonalVehicle> vehicles = new ArrayList<>(user.getVehicles()); + if (user.hasPersonalVehicle()) + vehicles.remove(user.getPersonalVehicle()); + Iterator<PersonalVehicle> it = vehicles.iterator(); + for (int i = 0; i < 20; i++) { + if (!it.hasNext()) + break; + PersonalVehicle vehicle = it.next(); + ItemStack stack = vehicle.getVehicleProperties().getItem().clone(); + ItemMeta meta = stack.getItemMeta(); + meta.spigot().setUnbreakable(true); + meta.addItemFlags(ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ATTRIBUTES); + List<String> lore = new ArrayList<>(meta.getLore()); + lore.add(Utils.f("&7Health: " + vehicle.getFormattedHealth())); + lore.add(Utils.f("&aClick to get this vehicle!")); + lore.add(Utils.f("&7Price: &a$&l200")); + meta.setLore(lore); + stack.setItemMeta(meta); + e.setItem(slots[i], stack); + } + e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the home page!")); + if (user.hasPersonalVehicle()) { + PersonalVehicle vehicle = user.getPersonalVehicle(); + ItemStack stack = vehicle.getVehicleProperties().getItem().clone(); + ItemMeta meta = stack.getItemMeta(); + List<String> lore = new ArrayList<>(meta.getLore()); + lore.add(Utils.f("&7Health: " + vehicle.getFormattedHealth())); + lore.add(Utils.f("&aClick to view your personal vehicle!")); + meta.setLore(lore); + stack.setItemMeta(meta); + e.setItem(49, Utils.addGlow(stack)); + } else { + e.setItem(49, Utils.createItem(Material.MINECART, "&4&lVehicles", "&7Please select your personal vehicle!")); + } + if (vehicles.size() > 20) + e.setItem(50, Utils.createItem(Material.ARROW, "&4&lNext Page", "&7Page 2")); + return; + } + case "vehicleshop": { + this.setPhoneDefaults(e); + ViceUser user = Vice.getUserManager().getLoadedUser(uuid); + Optional<VehicleProperties> opt = Vice.getWastedVehicles().getVehicle(user.getActionVehicle()); + GameItem item = Vice.getItemManager().getItemFromVehicle(user.getActionVehicle()); + if (opt == null || !opt.isPresent() || item == null) { + player.sendMessage(Lang.VEHICLES.f("&7That vehicle does not exist!")); + return; + } + if (item.getSellPrice() <= 0) { + player.sendMessage(Lang.VEHICLES.f("&7You can't buy this vehicle!")); + player.closeInventory(); + return; + } + VehicleProperties vehicle = opt.get(); + String buyPrice = NumberFormat.getNumberInstance(Locale.US).format(Utils.round(item.getSellPrice() * 2)); + String sellPrice = NumberFormat.getNumberInstance(Locale.US).format(Utils.round(item.getSellPrice())); + e.setItem(11, Utils.createItem(Material.MINECART, "&4&lSpeed: &a&l" + vehicle.getMaxSpeed())); + e.setItem(13, Utils.createItem(Material.PAPER, "&4&lPrice: &a$&l" + buyPrice)); + if (vehicle.getWastedGunsWeapon() != null) { + Optional<Weapon<?>> o = Vice.getWastedGuns().getWeaponManager().getWeapon(vehicle.getWastedGunsWeapon()); + o.ifPresent(weapon -> e.setItem(29, weapon.createItemStack())); + } + if (!vehicle.getAllowedWeapons().isEmpty()) { + List<String> lore = vehicle.getAllowedWeapons().stream().map(s -> Vice.getItemManager().getItemFromWeapon(s)).filter(Objects::nonNull).map(GameItem::getDisplayName).collect(Collectors.toList()); + e.setItem(33, Utils.createItem(Material.WOOD_SWORD, "&4&lAllowed Weapons", lore)); + } + if (user.hasVehicle(vehicle.getIdentifier())) { + e.setItem(31, Utils.createItem(Material.INK_SACK, 1, "&c&lSell Vehicle", "&7Reward: &a$&l" + sellPrice)); + } else + e.setItem(31, Utils.createItem(Material.SLIME_BALL, "&a&lBuy Vehicle", "&7Price: &a$&l" + buyPrice)); + e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lClose", "&7Click to close this menu!")); + e.setItem(49, vehicle.getItem()); + return; + } + case "buyvehicle": { + this.setPhoneDefaults(e); + ViceUser user = Vice.getUserManager().getLoadedUser(uuid); + Optional<VehicleProperties> opt = Vice.getWastedVehicles().getVehicle(user.getActionVehicle()); + GameItem item = Vice.getItemManager().getItemFromVehicle(user.getActionVehicle()); + if (opt == null || !opt.isPresent() || item == null) { + player.sendMessage(Lang.VEHICLES.f("&7That vehicle does not exist!")); + return; + } + VehicleProperties vehicle = opt.get(); + if (item.getSellPrice() <= 0) { + player.sendMessage(Lang.VEHICLES.f("&7You can't buy this vehicle!")); + player.closeInventory(); + return; + } + if (user.hasVehicle(vehicle.getIdentifier())) { + player.sendMessage(Lang.VEHICLES.f("&7You already own this vehicle!")); + MenuManager.openMenu(player, "vehicles"); + return; + } + this.setConfirmDefaults(e, "&a&lBuy " + vehicle.getItem().getItemMeta().getDisplayName() + "&a&l for &a$&l" + Utils.round(item.getSellPrice() * 2), "&c&lCancel"); + return; + } + case "sellvehicle": { + this.setPhoneDefaults(e); + ViceUser user = Vice.getUserManager().getLoadedUser(uuid); + PersonalVehicle vehicle = user.getPersonalVehicle(user.getActionVehicle()); + if (vehicle == null) return; + double price = vehicle.getSellPrice(); + if (price <= 0) { + player.sendMessage(Lang.VEHICLES.f("&7You can't sell this vehicle!")); + player.closeInventory(); + return; + } + this.setConfirmDefaults(e, "&a&lSell " + vehicle.getDisplayName() + "&a&l for &a$&l" + Utils.round(price), "&c&lCancel"); + return; + } + case "repairvehicle": { + this.setPhoneDefaults(e); + ViceUser user = Vice.getUserManager().getLoadedUser(uuid); + if (user.getActionVehicle() == null) return; + PersonalVehicle vehicle = user.getPersonalVehicle(user.getActionVehicle()); + if (vehicle == null) return; + double price = vehicle.getRepairPrice(); + if (price <= 0) { + player.sendMessage(Lang.VEHICLES.f("&7You can't repair this vehicle!")); + player.closeInventory(); + return; + } + this.setConfirmDefaults(e, "&a&lRepair " + vehicle.getDisplayName() + "&a&l for &a$&l" + Utils.round(price), "&c&lCancel"); + return; + } + case "personalvehicle": { + this.setPhoneDefaults(e); + ViceUser user = Vice.getUserManager().getLoadedUser(uuid); + PersonalVehicle vehicle = user.getPersonalVehicle(); + if (vehicle == null) { + MenuManager.openMenu(player, "vehicles"); + return; + } + VehicleProperties vehicleProperties = vehicle.getVehicleProperties(); + if (vehicleProperties == null) return; + e.setItem(11, Utils.createItem(Material.MINECART, "&4&lStats", "&7Speed: &a&l" + vehicleProperties.getMaxSpeed(), "&7Health: " + vehicle.getFormattedHealth())); + e.setItem(13, Utils.createItem(Material.PAPER, "&4&lPrice: &a$&l" + Utils.round(vehicle.getPrice()))); + if (vehicle.getRepairPrice() > 0 && !vehicle.onMap()) + e.setItem(15, Utils.createItem(Material.WORKBENCH, "&4&lRepair", "&7Call the mechanic!", "&7Price: &a$&l" + Utils.round(vehicle.getRepairPrice()))); + else if (vehicle.onMap()) + e.setItem(15, Utils.createItem(Material.ENDER_PEARL, "&4&lSend Away", "&7Click to send away your vehicle!", "&7Price: &a$&l200")); + else + e.setItem(15, Utils.createItem(Material.ENDER_PEARL, "&4&lCall Vehicle", "&7Click to send your vehicle to yourself!", "&7Price: &a$&l200")); + if (vehicleProperties.getWastedGunsWeapon() != null) { + Optional<Weapon<?>> o = Vice.getWastedGuns().getWeaponManager().getWeapon(vehicleProperties.getWastedGunsWeapon()); + o.ifPresent(weapon -> e.setItem(29, weapon.createItemStack())); + } + if (!vehicleProperties.getAllowedWeapons().isEmpty()) { + List<String> lore = vehicleProperties.getAllowedWeapons().stream().map(s -> Vice.getItemManager().getItemFromWeapon(s)).filter(Objects::nonNull).map(GameItem::getDisplayName).collect(Collectors.toList()); + e.setItem(33, Utils.createItem(Material.WOOD_SWORD, "&4&lAllowed Weapons", lore)); + } + e.setItem(31, Utils.createItem(Material.INK_SACK, 1, "&c&lSell Vehicle", "&7Reward: &a$&l" + Utils.round(vehicle.getSellPrice()))); + e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the vehicles page!")); + ItemStack stack = vehicle.getVehicleProperties().getItem().clone(); + ItemMeta meta = stack.getItemMeta(); + meta.spigot().setUnbreakable(true); + meta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE); + List<String> lore = new ArrayList<>(meta.getLore()); + lore.add(Utils.f("&7Health: " + vehicle.getFormattedHealth())); + lore.add(Utils.f("&aClick to send your vehicle to yourself!")); + lore.add(Utils.f("&7Price: &a$&l200")); + stack.setItemMeta(meta); + e.setItem(49, Utils.addGlow(stack)); + break; + } + case "mechanic": { + this.setPhoneDefaults(e); + ViceUser user = Vice.getUserManager().getLoadedUser(uuid); + int[] slots = new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 38, 39, 40, 41, 42}; + List<PersonalVehicle> vehicles = new ArrayList<>(user.getVehicles()); + new ArrayList<>(vehicles).stream().filter(vehicle -> vehicle.getRepairPrice() <= 0).forEach(vehicles::remove); + Iterator<PersonalVehicle> it = vehicles.iterator(); + for (int i = 0; i < 20; i++) { + if (!it.hasNext()) + break; + PersonalVehicle vehicle = it.next(); + if (!vehicle.isDestroyed()) + continue; + ItemStack stack = vehicle.getVehicleProperties().getItem().clone(); + ItemMeta meta = stack.getItemMeta(); + meta.spigot().setUnbreakable(true); + meta.addItemFlags(ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ATTRIBUTES); + List<String> lore = new ArrayList<>(meta.getLore()); + lore.add(Utils.f("&7Health: " + vehicle.getFormattedHealth())); + lore.add(Utils.f("&7Repair Price: &a&l$" + NumberFormat.getNumberInstance(Locale.US).format(vehicle.getRepairPrice()))); + lore.add(Utils.f("&7Click to repair this vehicle!")); + meta.setLore(lore); + stack.setItemMeta(meta); + e.setItem(slots[i], Objects.equals(vehicle, user.getPersonalVehicle()) ? Utils.addGlow(stack) : stack); + } + e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lClose", "&7Click to close this menu!")); + e.setItem(49, Utils.createItem(Material.WORKBENCH, "&4&lMechanic", "&7Repair your vehicles!")); + if (vehicles.size() > 20) + e.setItem(50, Utils.createItem(Material.ARROW, "&4&lNext Page", "&7Page 2")); + return; + } + + case "armorupgrade": { + ViceUser user = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + ArmorUpgrade upgrade = user.getBuyingArmorUpgrade(); + if (upgrade == null) { + player.closeInventory(); + return; + } + if (!upgrade.canUseUpgrade(user.getRank(), Core.getUserManager().getLoadedUser(player.getUniqueId()).getUserRank())) { + player.closeInventory(); + player.sendMessage(Lang.HEY.f("&7You need to rank up to " + upgrade.getViceRank().getColoredNameBold() + "&7 or donate for " + upgrade.getUserRank().getColoredNameBold() + "&7 at &a&lstore.grandtheftmc.net&7 to use the &b&l" + upgrade.getDisplayName() + " Armor Upgrade&7!")); + return; + } + ItemStack item = player.getInventory().getItemInMainHand(); + GameItem gameItem = item == null ? null : Vice.getItemManager().getItem(item.getType()); + if (item == null || gameItem == null || !upgrade.canBeUsedOn(gameItem.getName())) { + player.closeInventory(); + player.sendMessage(Lang.HEY.f("&7The &b&l" + upgrade.getDisplayName() + " Armor Upgrade&7 can only be applied to the following types of items: " + upgrade.getTypesString() + "&7!")); + return; + } + HashSet<ArmorUpgrade> upgradesOnItem = ArmorUpgrade.getArmorUpgrades(item); + if (upgradesOnItem.contains(upgrade)) { + player.closeInventory(); + player.sendMessage(Lang.ARMOR_UPGRADE.f("&7That piece of armor already has the &b&l" + upgrade.getDisplayName() + " Armor Upgrade&7!")); + return; + } + if ((upgradesOnItem.contains(ArmorUpgrade.LIGHT) && upgrade == ArmorUpgrade.ULTRA_LIGHT) || (upgradesOnItem.contains(ArmorUpgrade.ULTRA_LIGHT) && upgrade == ArmorUpgrade.LIGHT)) { + player.closeInventory(); + player.sendMessage(Lang.ARMOR_UPGRADE.f("&7This upgrade cannot be added to the armor piece due to conflicting upgrades.")); + return; + } + double price = upgrade.getPrice(); + + if (!user.hasMoney(upgrade.getPrice())) { + player.closeInventory(); + player.sendMessage(Lang.ARMOR_UPGRADE.f("&7You can't afford the &b&l" + upgrade.getDisplayName() + " Armor Upgrade&7!")); + return; + } + this.setConfirmDefaults(e, "&a&lBuy &b&l" + upgrade.getDisplayName() + " Armor Upgrade", "&c&lCancel", + Collections.singletonList("&7Price: &a$&l" + price), Collections.singletonList("&7Item: &a&l" + (item.getItemMeta().hasDisplayName() ? item.getItemMeta().getDisplayName() : item.getType().name()))); + return; + } + case "lottery": { + this.setPhoneDefaults(e); + ViceUser user = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + LotteryPlayer p = Vice.getLottery().getLotteryPlayer(player.getUniqueId()); + int[] slots = new int[]{12, 13, 14, 21, 22, 23, 30, 31, 32, 39, 40}; + int[] amnts = new int[]{1, 2, 5, 10, 20, 50, 100, 200, 500, 1000, 2000}; + for (int i = 0; i < 11; i++) + e.setItem(slots[i], Utils.createItem(Material.EMPTY_MAP, + (user.hasMoney(amnts[i] * 500) ? "&e" : "&c") + "&l" + amnts[i] + " Tickets", "&7Price: &a$&l" + (amnts[i] * 500), "&7Click to buy tickets!")); + e.setItem(41, + Utils.createItem(Material.BOOK_AND_QUILL, "&e&lCustom Amount", "&7Click to choose an amount!")); + e.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lClose", "&7Click to close this menu!")); + e.setItem(49, Utils.createItem(Material.GOLD_INGOT, "&e&lLottery", "&7Your tickets: &e&l" + (p == null ? 0 : p.getTickets()), "&7Go big or go home!")); + LotteryPlayer winner1 = Vice.getLottery().getWinner(0); + LotteryPlayer winner2 = Vice.getLottery().getWinner(1); + LotteryPlayer winner3 = Vice.getLottery().getWinner(2); + e.setItem(51, Utils.setSkullOwner(Utils.createItem(Material.SKULL_ITEM, 3, + "&e&lLast week's winners", + winner1 == null ? "" : "&a#&l1&7: &r" + winner1.getName() + " &a" + Utils.formatMoney(winner1.getAmount()) + "&7 (&a70%&7 of the pot)", + winner2 == null ? "" : "&a#&l2&7: &r" + winner2.getName() + " &a" + Utils.formatMoney(winner2.getAmount()) + "&7 (&a20%&7 of the pot", + winner3 == null ? "" : "&a#&l2&7: &r" + winner3.getName() + " &a" + Utils.formatMoney(winner3.getAmount()) + "&7 (&a10%&7 of the pot)"), winner1 == null ? "Presidentx" : winner1.getName())); + return; + } + default: + break; + } + + + } + + public void setPhoneDefaults(MenuOpenEvent e) { + ItemStack whiteGlass = Utils.createItem(Material.STAINED_GLASS_PANE, "&a"); + ItemStack grayGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 7, "&a"); + ItemStack blackGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 15, "&a"); + ItemStack lightGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 8, "&a"); + for (int i : new int[]{1, 10, 19, 28, 37, 46, 7, 16, 25, 34, 43, 52}) e.setItem(i, whiteGlass); + for (int i : new int[]{2, 3, 4, 5, 6}) e.setItem(i, blackGlass); + for (int i : new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 38, 39, 40, 41, 42, 47, 48, + 49, 50, 51}) + e.setItem(i, grayGlass); + for (int i : new int[]{0, 8, 9, 17, 18, 26, 27, 35, 36, 44, 45, 53}) e.setItem(i, lightGlass); + } + + public void setPhoneDefaults(Inventory inv) { + ItemStack whiteGlass = Utils.createItem(Material.STAINED_GLASS_PANE, "&a"); + ItemStack grayGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 7, "&a"); + ItemStack blackGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 15, "&a"); + ItemStack lightGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 8, "&a"); + for (int i : new int[]{1, 10, 19, 28, 37, 46, 7, 16, 25, 34, 43, 52}) inv.setItem(i, whiteGlass); + for (int i : new int[]{2, 3, 4, 5, 6}) inv.setItem(i, blackGlass); + for (int i : new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 38, 39, 40, 41, 42, 47, 48, + 49, 50, 51}) + inv.setItem(i, grayGlass); + for (int i : new int[]{0, 8, 9, 17, 18, 26, 27, 35, 36, 44, 45, 53}) inv.setItem(i, lightGlass); + } + + private void setConfirmDefaults(MenuOpenEvent e) { + this.setConfirmDefaults(e, "&a&lConfirm", "&c&lCancel"); + } + + private void setConfirmDefaults(MenuOpenEvent e, String confirmMessage, String cancelMessage) { + ItemStack whiteGlass = Utils.createItem(Material.STAINED_GLASS_PANE, "&a"); + ItemStack grayGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 7, "&a"); + ItemStack blackGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 15, "&a"); + ItemStack lightGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 8, "&a"); + ItemStack greenGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 5, confirmMessage); + ItemStack redGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 14, cancelMessage); + for (int i : new int[]{1, 10, 19, 28, 37, 46, 7, 16, 25, 34, 43, 52}) e.setItem(i, whiteGlass); + for (int i : new int[]{2, 3, 4, 5, 6}) e.setItem(i, blackGlass); + for (int i : new int[]{13, 22, 31, 40, 49,}) e.setItem(i, grayGlass); + for (int i : new int[]{0, 8, 9, 17, 18, 26, 27, 35, 36, 44, 45, 53}) e.setItem(i, lightGlass); + for (int i : new int[]{11, 12, 20, 21, 29, 30, 38, 39, 47, 48}) e.setItem(i, greenGlass); + for (int i : new int[]{14, 15, 23, 24, 32, 33, 41, 42, 50, 51}) e.setItem(i, redGlass); + } + + private void setConfirmDefaults(MenuOpenEvent e, String confirmMessage, String cancelMessage, List<String> confirmLore, List<String> cancelLore) { + ItemStack whiteGlass = Utils.createItem(Material.STAINED_GLASS_PANE, "&a"); + ItemStack grayGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 7, "&a"); + ItemStack lightGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 8, "&a"); + ItemStack blackGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 15, "&a"); + ItemStack greenGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 5, confirmMessage, confirmLore == null ? new ArrayList<>() : confirmLore); + ItemStack redGlass = Utils.createItem(Material.STAINED_GLASS_PANE, 14, cancelMessage, cancelLore == null ? new ArrayList<>() : cancelLore); + for (int i : new int[]{1, 10, 19, 28, 37, 46, 7, 16, 25, 34, 43, 52}) e.setItem(i, whiteGlass); + for (int i : new int[]{2, 3, 4, 5, 6}) e.setItem(i, blackGlass); + for (int i : new int[]{13, 22, 31, 40, 49,}) e.setItem(i, grayGlass); + for (int i : new int[]{0, 8, 9, 17, 18, 26, 27, 35, 36, 44, 45, 53}) e.setItem(i, lightGlass); + for (int i : new int[]{11, 12, 20, 21, 29, 30, 38, 39, 47, 48}) e.setItem(i, greenGlass); + for (int i : new int[]{14, 15, 23, 24, 32, 33, 41, 42, 50, 51}) e.setItem(i, redGlass); + } + + @EventHandler(priority = EventPriority.HIGH) + public void onMenuClick(MenuClickEvent e) { + Player player = e.getPlayer(); + UUID uuid = player.getUniqueId(); + Menu menu = e.getMenu(); + ViceUser user = Vice.getUserManager().getLoadedUser(uuid); + ItemStack item = e.getItem(); + User coreUser = Core.getUserManager().getLoadedUser(uuid); + Inventory inv = e.getInv(); + if (item == null || item.getType() == Material.AIR) + return; + switch (menu.getName()) { + case "choose_villager_type": { + if(user.getChangingJob()==null) { + player.sendMessage(Lang.CHEAT_CODES.f("&7Cannot open this menu because you do not have a villager selected!")); + return; + } + if(item.getType()==Material.STAINED_GLASS_PANE) + return; + Villager.Profession p = Villager.Profession.valueOf(ChatColor.stripColor(item.getItemMeta().getDisplayName()).split(" ")[1].toUpperCase()); + Villager v = user.getChangingJob(); + v.setProfession(p); + player.closeInventory(); + player.sendMessage(Utils.f("&7You have changed the profession of the villager to a &e" + p.toString())); + user.setChangingJob(null); + coreUser.addCooldown("villager_job_cc", 60*60, false, true); + return; + } + case "cheatcodes": { + if(item.getType()==Material.REDSTONE) { + MenuManager.openMenu(player, "contacts"); + return; + } + Optional<CheatCode> optCode = CheatCode.getCheatCodeFromItemStack(item); + if(!optCode.isPresent()) + return; + CheatCodeState cState = user.getCheatCodeState(optCode.get()); + if(cState.getState()==State.LOCKED) { + player.sendMessage(Lang.CHEAT_CODES.f(optCode.get().getLockedLore())); + return; + } + optCode.get().activate(coreUser, user, player, cState); + MenuManager.openMenu(player, "cheatcodes");//refresh + return; + } + case "phone": + switch (item.getType()) { + case ENDER_CHEST: + MenuManager.openMenu(player, "cosmetics"); + return; + case MINECART: + if (Vice.getUserManager().getLoadedUser(uuid).hasPersonalVehicle()) { + MenuManager.openMenu(player, "personalvehicle"); + return; + } + MenuManager.openMenu(player, "vehicles"); + return; + case NETHER_STAR: + MenuManager.openMenu(player, "account"); + return; + case BOOK: + MenuManager.openMenu(player, "contacts"); + return; + case EMERALD: + player.closeInventory(); + player.sendMessage(Lang.VICE.f("&7Go to &a&lstore.grandtheftmc.net&7 to buy Ranks, Bonds, Money and other packages!")); + return; + case EXP_BOTTLE: + MenuManager.openMenu(player, "rewards"); + return; + case CHEST: + MenuManager.openMenu(player, "kits"); + return; + case EMPTY_MAP: + MenuManager.openMenu(player, "ranks"); + return; + case ANVIL: + MenuManager.openMenu(player, "cheatcodes"); + default: + return; + } + case "cosmetics": + switch (item.getType()) { + case REDSTONE: + MenuManager.openMenu(player, "phone"); + return; + default: + return; + } + case "rewards": + switch (item.getType()) { + case REDSTONE: + MenuManager.openMenu(player, "phone"); + return; + default: + return; + } + case "vote": + switch (item.getType()) { + case REDSTONE: + MenuManager.openMenu(player, "reward"); + return; + default: + return; + } + case "account": + switch (item.getType()) { + case NAME_TAG: + MenuManager.openMenu(player, "chooseeventtag"); + return; + case BOOK: + MenuManager.openMenu(player, "vicestats"); + return; + case REDSTONE_COMPARATOR: + MenuManager.openMenu(player, "prefs"); + return; + case REDSTONE: + MenuManager.openMenu(player, "phone"); + default: + return; + } + case "ranks": + switch (item.getType()) { + case REDSTONE: + MenuManager.openMenu(player, "account"); + return; + case PAPER: + User u = Core.getUserManager().getLoadedUser(uuid); + user.rankup(player, u); + return; + default: + return; + } + case "vicestats": + switch (item.getType()) { + case REDSTONE: + MenuManager.openMenu(player, "account"); + return; + default: + return; + } + + case "kits": + switch (item.getType()) { + case REDSTONE: + MenuManager.openMenu(player, "phone"); + return; + default: + if (item.hasItemMeta() && item.getItemMeta().hasDisplayName() + && item.getType() != Material.STAINED_GLASS_PANE) { + Vice.getItemManager().giveKit(player, Core.getUserManager().getLoadedUser(uuid), + Vice.getUserManager().getLoadedUser(uuid), + ChatColor.stripColor(item.getItemMeta().getDisplayName())); + MenuManager.updateMenu(player, "kits"); + } + return; + } + case "contacts": + switch (item.getType()) { + case REDSTONE: + MenuManager.openMenu(player, "phone"); + return; + case ANVIL: + MenuManager.openMenu(player, "cheatcodes"); + return; + case STORAGE_MINECART: + MenuManager.openMenu(player, "taxi"); + return; + case SKULL_ITEM: + if (user.isCop()) + player.sendMessage(Lang.COP_MODE.f("&7You have called for backup! All officers have been notified, and they can teleport to you for 1 minute!")); + else { + player.sendMessage(Lang.VICE.f("&7You have called the police! All officers have been notified, and they can teleport to you for 1 minute!")); + } + user.setLastBackupRequest(System.currentTimeMillis()); + for (ViceUser u : ViceUtils.getCops()) { + Player p = Bukkit.getPlayer(u.getUUID()); + if (!Objects.equals(player, p)) + p.spigot().sendMessage(new ComponentBuilder(Lang.COP_MODE.f((user.isCop() ? "&3&lCop " : "&7Citizen") + Core.getUserManager().getLoadedUser(p.getUniqueId()).getColoredName(p))).append(" is requesting " + (user.isCop() ? "backup" : "police assistance") + "! Teleport: ").color(net.md_5.bungee.api.ChatColor.GRAY). + append(" [ACCEPT] ").color(net.md_5.bungee.api.ChatColor.GREEN).bold(true).event(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/backup " + player.getName())).create()); + + } + return; + case WATCH: + Vice.getWorldManager().getWarpManager().warp(player, Core.getUserManager().getLoadedUser(uuid), Vice.getUserManager().getLoadedUser(uuid), new TaxiTarget(Vice.getWorldManager().getWarpManager().getSpawn()), 0, -1); + return; + default: + return; + } + case "taxi": + switch (e.getItem().getType()) { + case SKULL_ITEM: + MenuManager.openMenu(player, "taxiplayers"); + return; + case BED: + Vice.getWorldManager().getWarpManager().warp(player, Core.getUserManager().getLoadedUser(uuid), + Vice.getUserManager().getLoadedUser(uuid), new TaxiTarget(Vice.getWorldManager().getWarpManager().getSpawn()), 0, + -1); + player.closeInventory(); + return; + case IRON_DOOR: + MenuManager.openMenu(player, "taxihouses"); + return; + case REDSTONE: + MenuManager.openMenu(player, "contacts"); + return; + case ENDER_PEARL: + MenuManager.openMenu(player, "taxiwarps"); + return; + default: + return; + } + case "taxiplayers": + switch (item.getType()) { + case ARROW: + int page = Integer + .parseInt(ChatColor.stripColor(item.getItemMeta().getLore().get(0)).replace("Page ", "")); + this.setPhoneDefaults(inv); + User u = Core.getUserManager().getLoadedUser(uuid); + List<Player> players = new ArrayList<>(Bukkit.getOnlinePlayers()); + players.remove(player); + int[] slots = new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 38, 39, 40, 41, + 42}; + Iterator<? extends Player> it = players.iterator(); + for (int i = 0; i < page * 20; i++) { + if (!it.hasNext()) + break; + Player p = it.next(); + if (i < (page - 1) * 20) + continue; + + inv.setItem(slots[i - (page - 1) * 20], Utils.setSkullOwner( + Utils.createItem(Material.SKULL_ITEM, 3, "&e&l" + p.getName(), + u.isPremium() ? "&7Click to send teleport request!" : "&cRequires PREMIUM!"), + p.getName())); + } + inv.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the taxi page!")); + if (page > 1) + inv.setItem(48, Utils.createItem(Material.ARROW, "&e&lPrevious Page", "&7Page " + (page - 1))); + inv.setItem(49, + Utils.createItem(Material.STORAGE_MINECART, "&e&lTaxi Service: Players", "&7Page " + page)); + if (players.size() > (20 * page)) + inv.setItem(50, Utils.createItem(Material.ARROW, "&e&lNext Page", "&7Page " + (page + 1))); + return; + case SKULL_ITEM: + Player target = Bukkit.getPlayer(ChatColor.stripColor(item.getItemMeta().getDisplayName())); + player.closeInventory(); + Vice.getWorldManager().getWarpManager().tpa(player, Core.getUserManager().getLoadedUser(uuid), + Vice.getUserManager().getLoadedUser(uuid), target); + return; + case REDSTONE: + MenuManager.openMenu(player, "taxi"); + return; + default: + return; + } + + case "taxiwarps": + switch (item.getType()) { + case ARROW: + int page = Integer + .parseInt(ChatColor.stripColor(item.getItemMeta().getLore().get(0)).replace("Page ", "")); + this.setPhoneDefaults(inv); + ViceUser viceUser = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + List<Warp> warps = Vice.getWorldManager().getWarpManager().getWarps(); + int[] slots = new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 38, 39, 40, 41, + 42}; + Iterator<Warp> it = warps.iterator(); + for (int i = 0; i < page * 20; i++) { + if (!it.hasNext()) + break; + Warp warp = it.next(); + if (i < (page - 1) * 20) + continue; + inv.setItem(slots[i - (page - 1) * 20], Utils.createItem(Material.ENDER_PEARL, + "&e&l" + warp.getName(), "&7Click to teleport for &a$&l200&7!")); + } + inv.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the taxi page!")); + if (page > 1) + inv.setItem(48, Utils.createItem(Material.ARROW, "&e&lPrevious Page", "&7Page " + (page - 1))); + inv.setItem(49, + Utils.createItem(Material.STORAGE_MINECART, "&e&lTaxi Service: Warps", "&7Page " + page)); + if (warps.size() > (20 * page)) + inv.setItem(50, Utils.createItem(Material.ARROW, "&e&lNext Page", "&7Page " + (page + 1))); + return; + case ENDER_PEARL: + Warp warp = Vice.getWorldManager().getWarpManager().getWarp(ChatColor.stripColor(item.getItemMeta().getDisplayName())); + if (warp == null) { + player.sendMessage(Lang.TAXI.f("&7That warp does not exist!")); + return; + } + player.closeInventory(); + Vice.getWorldManager().getWarpManager().warp(player, Core.getUserManager().getLoadedUser(uuid), + Vice.getUserManager().getLoadedUser(uuid), new TaxiTarget(warp), 200, -1); + return; + case REDSTONE: + MenuManager.openMenu(player, "taxi"); + return; + default: + return; + } + + case "ammopouch": + switch (item.getType()) { + case REDSTONE: + int slot = e.getSlot(); + int i = 0; + while (slot > 8) { + slot -= 9; + i++; + } + int toDrop = i == 1 ? 50 : i == 2 ? 10 : i == 3 ? 1 : 0; + AmmoType type = AmmoType.getTypes()[slot]; + int ammo = user.getAmmo(type); + if (ammo <= 0) { + player.sendMessage(Lang.AMMO.f("&7You have none of this type of ammo left!")); + return; + } + if (ammo < toDrop) + toDrop = ammo; + ItemStack stack = type.getGameItem().getItem(); + stack.setAmount(toDrop); + user.removeAmmo(type, toDrop); + player.getWorld().dropItemNaturally(Utils.getInFrontOf(player.getLocation()), stack); + player.sendMessage(Lang.AMMO_TAKE.f(toDrop + "&7 " + type.getGameItem().getDisplayName() + "&7!")); + MenuManager.updateMenu(player, "ammopouch"); + return; + default: + return; + } + case "jail": + switch (item.getType()) { + case ARROW: + int page = Integer + .parseInt(ChatColor.stripColor(item.getItemMeta().getLore().get(0)).replace("Page ", "")); + this.setPhoneDefaults(inv); + int[] slots = new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 38, 39, 40, 41, + 42}; + List<Player> jailedPlayers = ViceUtils.getJailedPlayers(); + Iterator<Player> it = jailedPlayers.iterator(); + for (int i = 0; i < page * 20; i++) { + if (!it.hasNext()) + break; + Player p = it.next(); + if (i < (page - 1) * 20) + continue; + + ViceUser u = Vice.getUserManager().getLoadedUser(p.getUniqueId()); + if (!u.isArrested()) + continue; + List<String> lore = new ArrayList<>(); + lore.add("&7Time Left: &a&l" + Utils.timeInSecondsToText(u.getJailTimer())); + if (user.isCop() && Objects.equals(u.getJailCop(), player.getUniqueId())) + lore.add("&7Click to release!"); + inv.setItem(slots[i - (page - 1) * 20], Utils.setSkullOwner( + Utils.createItem(Material.SKULL_ITEM, 3, "&e&l" + p.getName(), lore), p.getName())); + } + if (page > 1) + inv.setItem(48, Utils.createItem(Material.ARROW, "&c&lPrevious Page", "&7Page " + (page - 1))); + inv.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lClose", "&7Click to close this menu!")); + inv.setItem(49, Utils.createItem(Material.IRON_FENCE, "&c&lPrisoner List", "&7Page " + page)); + if (jailedPlayers.size() > (20 * page)) + inv.setItem(50, Utils.createItem(Material.ARROW, "&c&lNext Page", "&7Page " + (page + 1))); + return; + case SKULL_ITEM: + Player p = Bukkit.getPlayer(ChatColor.stripColor(e.getItem().getItemMeta().getDisplayName())); + if (p == null) { + player.sendMessage(Lang.JAIL.f("&7That player is not online!")); + MenuManager.updateMenu(player, "jail"); + return; + } + if (!Vice.getUserManager().getLoadedUser(uuid).isCop()) return; + ViceUser u = Vice.getUserManager().getLoadedUser(p.getUniqueId()); + if (!u.isArrested()) { + player.sendMessage(Lang.JAIL.f("&7That player is not in jail!")); + MenuManager.updateMenu(player, "jail"); + return; + } + if (u.getJailTimer() <= 5) { + player.sendMessage(Lang.JAIL.f("&7That prisoners is already being released!")); + return; + } + if (!Vice.getUserManager().getLoadedUser(uuid).isCop()) { + player.sendMessage(Lang.JAIL.f("&7You must be a cop to release prisoners!")); + return; + } + if (!Objects.equals(u.getJailCop(), player.getUniqueId())) { + player.sendMessage(Lang.JAIL.f("&7You can only release prisoners that you put in jail!")); + return; + } + u.setJailTimer(5); + player.sendMessage(Lang.JAIL.f("&7You released prisoners &e&l" + + Core.getUserManager().getLoadedUser(p.getUniqueId()).getColoredName(p) + "&7!")); + p.sendMessage(Lang.JAIL.f("&7You are being released by &a" + + Core.getUserManager().getLoadedUser(player.getUniqueId()).getColoredName(player) + "&7!")); + MenuManager.updateMenu(player, "jail"); + return; + case REDSTONE: + player.closeInventory(); + return; + default: + return; + } + case "vehicles": + switch (item.getType()) { + case ARROW: + int page = Integer + .parseInt(ChatColor.stripColor(item.getItemMeta().getLore().get(0)).replace("Page ", "")); + this.setPhoneDefaults(inv); + int[] slots = new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 38, 39, 40, 41, 42}; + List<PersonalVehicle> vehicles = new ArrayList<>(user.getVehicles()); + if (user.hasPersonalVehicle()) + vehicles.remove(user.getPersonalVehicle()); + Iterator<PersonalVehicle> it = vehicles.iterator(); + for (int i = 0; i < page * 20; i++) { + if (!it.hasNext()) + break; + PersonalVehicle vehicle = it.next(); + if (i < (page - 1) * 20) + continue; + ItemStack stack = vehicle.getVehicleProperties().getItem().clone(); + ItemMeta meta = stack.getItemMeta(); + List<String> lore = new ArrayList<>(meta.getLore()); + lore.add(Utils.f("&7Health: " + vehicle.getFormattedHealth())); + lore.add(Utils.f("&aClick to get this vehicle!")); + lore.add(Utils.f("&7Price: &a$&l200")); + meta.setLore(lore); + stack.setItemMeta(meta); + inv.setItem(slots[i - (page - 1) * 20], stack); + } + if (page > 1) + inv.setItem(48, Utils.createItem(Material.ARROW, "&4&lPrevious Page", "&7Page " + (page - 1))); + inv.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the property page!")); + if (user.hasPersonalVehicle()) { + PersonalVehicle vehicle = user.getPersonalVehicle(); + ItemStack stack = vehicle.getVehicleProperties().getItem().clone(); + ItemMeta meta = stack.getItemMeta(); + List<String> lore = new ArrayList<>(meta.getLore()); + lore.add(Utils.f("&7Health: " + vehicle.getFormattedHealth())); + lore.add(Utils.f("&aClick to view your personal vehicle!")); + meta.setLore(lore); + stack.setItemMeta(meta); + inv.setItem(49, Utils.addGlow(stack)); + + } else + inv.setItem(49, Utils.createItem(Material.MINECART, "&4&lVehicles", "&7Please select your personal vehicle!")); + if (vehicles.size() > (20 * page)) + inv.setItem(50, Utils.createItem(Material.ARROW, "&4&lNext Page", "&7Page " + (page + 1))); + return; + case REDSTONE: + MenuManager.openMenu(player, "phone"); + return; + default: + if (!item.hasItemMeta() || !item.getItemMeta().hasDisplayName()) return; + GameItem gameItem = Vice.getItemManager().getItemFromDisplayName(item.getItemMeta().getDisplayName()); + if (gameItem == null) return; + PersonalVehicle vehicle = user.getPersonalVehicle(gameItem.getWeaponOrVehicleOrDrug()); + if (vehicle == null) return; + if (Objects.equals(vehicle, user.getPersonalVehicle())) { + MenuManager.openMenu(player, "personalvehicle"); + return; + } + user.setPersonalVehicle(player, Core.getUserManager().getLoadedUser(uuid), vehicle); + player.closeInventory(); + return; + } + + case "vehicleshop": + switch (item.getType()) { + case REDSTONE: + player.closeInventory(); + return; + case SLIME_BALL: + if (user.hasVehicle(user.getActionVehicle())) { + player.sendMessage(Lang.VEHICLES.f("&7You already own this vehicle!")); + MenuManager.openMenu(player, "vehicles"); + return; + } + MenuManager.openMenu(player, "buyvehicle"); + return; + case INK_SACK: + if (!user.hasVehicle(user.getActionVehicle())) { + player.sendMessage(Lang.VEHICLES.f("&7You don't own this vehicle!")); + MenuManager.openMenu(player, "vehicles"); + return; + } + MenuManager.openMenu(player, "sellvehicle"); + return; + default: + return; + } + case "buyvehicle": + switch (item.getType()) { + case STAINED_GLASS_PANE: + switch (item.getDurability()) { + case 5: + Optional<VehicleProperties> opt = Vice.getWastedVehicles().getVehicle(user.getActionVehicle()); + GameItem gameItem = Vice.getItemManager().getItemFromVehicle(user.getActionVehicle()); + if (opt == null || !opt.isPresent() || gameItem == null) { + if (gameItem == null) + Utils.b("GameItem for " + user.getActionVehicle() + " is null"); + player.sendMessage(Lang.VEHICLES.f("&7That vehicle does not exist!")); + return; + } + VehicleProperties vehicle = opt.get(); + double price = gameItem.getSellPrice() * 2; + if (price <= 0) { + player.closeInventory(); + player.sendMessage(Lang.VEHICLES.f("&7You can't buy this vehicle!")); + return; + } + if (user.hasVehicle(vehicle.getIdentifier())) { + player.closeInventory(); + player.sendMessage(Lang.VEHICLES.f("&7You already own this vehicle!")); + return; + } + if (!user.hasMoney(price)) { + player.closeInventory(); + player.sendMessage(Lang.VEHICLES.f("&7You don't have the &c$&l" + Utils.round(price) + "&7 to pay for this vehicle!")); + return; + } + user.setActionVehicle(null); + user.takeMoney(price); + ViceUtils.updateBoard(player, user); + user.giveVehiclePerm(player, vehicle); + player.sendMessage(Lang.VEHICLES.f("&7You bought vehicle " + vehicle.getItem().getItemMeta().getDisplayName() + "&7 for &a$&l" + Utils.round(price) + "&7!")); + MenuManager.openMenu(player, "vehicles"); + return; + case 14: + MenuManager.openMenu(player, "vehicleshop"); + return; + default: + return; + } + + default: + return; + } + case "sellvehicle": + switch (item.getType()) { + case STAINED_GLASS_PANE: + switch (item.getDurability()) { + case 5: + PersonalVehicle vehicle = user.getPersonalVehicle(user.getActionVehicle()); + if (vehicle == null) return; + if (vehicle.onMap()) { + player.sendMessage(Lang.VEHICLES.f("&7Please send the driver to pick up your vehicle first!")); + return; + } + double price = vehicle.getSellPrice(); + if (price <= 0) { + player.closeInventory(); + player.sendMessage(Lang.VEHICLES.f("&7You can't sell this vehicle!")); + return; + } + user.setActionVehicle(null); + user.removeVehiclePerm(player, vehicle.getVehicleProperties()); + user.addMoney(price); + ViceUtils.updateBoard(player, user); + player.sendMessage(Lang.VEHICLES.f("&7You sold vehicle " + vehicle.getDisplayName() + "&7 for &a$&l" + Utils.round(price) + "&7!")); + MenuManager.openMenu(player, "vehicles"); + return; + case 14: + MenuManager.openMenu(player, "personalvehicle"); + return; + default: + return; + } + + default: + return; + } + case "repairvehicle": + switch (item.getType()) { + case STAINED_GLASS_PANE: + switch (item.getDurability()) { + case 5: + PersonalVehicle vehicle = user.getPersonalVehicle(user.getActionVehicle()); + if (vehicle == null) return; + if (vehicle.onMap()) { + player.sendMessage(Lang.VEHICLES.f("&7Please send the driver to pick up your vehicle first!")); + return; + } + double price = vehicle.getRepairPrice(); + if (price <= 0) { + player.closeInventory(); + player.sendMessage(Lang.VEHICLES.f("&7You can't repair this vehicle!")); + return; + } + if (!user.hasMoney(price)) { + player.sendMessage(Lang.VEHICLES.f("&7You can't afford to pay &c$&l" + price + "&7 to repair this vehicle!")); + return; + } + user.setActionVehicle(null); + user.takeMoney(price); + ViceUtils.updateBoard(player, user); + double health = vehicle.getVehicleProperties().getMaxHealth(); + vehicle.setHealth(health); + vehicle.updateVehicleInDatabase(player, health); + player.sendMessage(Lang.VEHICLES.f("&7You repaired vehicle " + vehicle.getDisplayName() + "&7 for &a$&l" + Utils.round(price) + "&7!")); + MenuManager.openMenu(player, "personalvehicle"); + return; + case 14: + MenuManager.openMenu(player, "personalvehicle"); + return; + default: + return; + } + default: + return; + } + case "personalvehicle": + switch (item.getType()) { + case REDSTONE: + MenuManager.openMenu(player, "vehicles"); + return; + case INK_SACK: { + PersonalVehicle vehicle = user.getPersonalVehicle(); + if (vehicle == null) { + MenuManager.openMenu(player, "vehicles"); + return; + } + user.setActionVehicle(vehicle.getVehicle()); + MenuManager.openMenu(player, "sellvehicle"); + return; + } + case ENDER_PEARL: { + PersonalVehicle vehicle = user.getPersonalVehicle(); + if (vehicle == null) { + MenuManager.openMenu(player, "vehicles"); + return; + } + if (vehicle.onMap()) { + vehicle.sendAway(player, Core.getUserManager().getLoadedUser(uuid), user); + } else { + vehicle.call(player, Core.getUserManager().getLoadedUser(uuid), user); + } + return; + } + case WORKBENCH: { + PersonalVehicle vehicle = user.getPersonalVehicle(); + if (vehicle == null) { + MenuManager.openMenu(player, "vehicles"); + return; + } + if (vehicle.getRepairPrice() <= 0) { + player.sendMessage(Lang.VEHICLES.f("&7You can't repair this vehicle!")); + return; + } + user.setActionVehicle(vehicle.getVehicle()); + MenuManager.openMenu(player, "repairvehicle"); + return; + } + default: + PersonalVehicle vehicle = user.getPersonalVehicle(); + if (vehicle == null) { + MenuManager.openMenu(player, "vehicles"); + return; + } + if (!item.hasItemMeta() || !item.getItemMeta().hasDisplayName() || !Objects.equals(item.getItemMeta().getDisplayName(), vehicle.getDisplayName())) + return; + vehicle.call(player, Core.getUserManager().getLoadedUser(uuid), user); + return; + } + case "mechanic": + switch (item.getType()) { + case ARROW: + int page = Integer + .parseInt(ChatColor.stripColor(item.getItemMeta().getLore().get(0)).replace("Page ", "")); + this.setPhoneDefaults(inv); + int[] slots = new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 38, 39, 40, 41, 42}; + List<PersonalVehicle> vehicles = new ArrayList<>(user.getVehicles()); + new ArrayList<>(vehicles).stream().filter(vehicle -> vehicle.getRepairPrice() <= 0).forEach(vehicles::remove); + Iterator<PersonalVehicle> it = vehicles.iterator(); + for (int i = 0; i < page * 20; i++) { + if (!it.hasNext()) + break; + PersonalVehicle vehicle = it.next(); + if (i < (page - 1) * 20) + continue; + ItemStack stack = vehicle.getVehicleProperties().getItem().clone(); + ItemMeta meta = stack.getItemMeta(); + List<String> lore = new ArrayList<>(meta.getLore()); + lore.add(Utils.f("&7Health: " + vehicle.getFormattedHealth())); + lore.add(Utils.f("&7Repair Price: &a&l$" + NumberFormat.getNumberInstance(Locale.US).format(vehicle.getRepairPrice()))); + lore.add(Utils.f("&aClick to repair this vehicle!")); + meta.setLore(lore); + stack.setItemMeta(meta); + inv.setItem(slots[i - (page - 1) * 20], Objects.equals(vehicle, user.getPersonalVehicle()) ? Utils.addGlow(stack) : stack); + } + if (page > 1) + inv.setItem(48, Utils.createItem(Material.ARROW, "&4&lPrevious Page", "&7Page " + (page - 1))); + inv.setItem(47, Utils.createItem(Material.REDSTONE, "&c&lBack", "&7Return to the property page!")); + inv.setItem(49, Utils.createItem(Material.WORKBENCH, "&4&lMechanic", "&7Repair your vehicles!")); + if (vehicles.size() > (20 * page)) + inv.setItem(50, Utils.createItem(Material.ARROW, "&4&lNext Page", "&7Page " + (page + 1))); + return; + case REDSTONE: + player.closeInventory(); + return; + default: + if (!item.hasItemMeta() || !item.getItemMeta().hasDisplayName()) return; + GameItem gameItem = Vice.getItemManager().getItemFromDisplayName(item.getItemMeta().getDisplayName()); + if (gameItem == null) return; + PersonalVehicle vehicle = user.getPersonalVehicle(gameItem.getWeaponOrVehicleOrDrug()); + if (vehicle == null) return; + if (vehicle.onMap()) { + player.sendMessage(Lang.VEHICLES.f("&7Please send the driver to pick up your vehicle first!")); + return; + } + double price = vehicle.getRepairPrice(); + if (price <= 0) { + player.closeInventory(); + player.sendMessage(Lang.VEHICLES.f("&7You can't repair this vehicle!")); + return; + } + if (!user.hasMoney(price)) { + player.sendMessage(Lang.VEHICLES.f("&7You can't afford to pay &c$&l" + price + "&7 to repair this vehicle!")); + return; + } + user.setActionVehicle(null); + user.takeMoney(price); + ViceUtils.updateBoard(player, user); + double health = vehicle.getVehicleProperties().getMaxHealth(); + vehicle.setHealth(health); + vehicle.updateVehicleInDatabase(player, health); + player.sendMessage(Lang.VEHICLES.f("&7The Mechanic repaired vehicle " + vehicle.getDisplayName() + "&7 for &a$&l" + Utils.round(price) + "&7!")); + player.closeInventory(); + return; + } + + case "armorupgrade": + switch (item.getType()) { + case STAINED_GLASS_PANE: + switch (item.getDurability()) { + case 5: + player.closeInventory(); + ArmorUpgrade upgrade = user.getBuyingArmorUpgrade(); + if (upgrade == null) { + return; + } + if (!upgrade.canUseUpgrade(user.getRank(), Core.getUserManager().getLoadedUser(player.getUniqueId()).getUserRank())) { + player.sendMessage(Lang.HEY.f("&7You need to rank up to " + upgrade.getViceRank().getColoredNameBold() + "&7 or donate for " + upgrade.getUserRank().getColoredNameBold() + "&7 at &a&lstore.grandtheftmc.net&7 to use the &b&l" + upgrade.getDisplayName() + " Armor Upgrade&7!")); + return; + } + ItemStack i = player.getInventory().getItemInMainHand(); + GameItem gameItem = item == null ? null : Vice.getItemManager().getItem(i.getType()); + if (i == null || gameItem == null || !upgrade.canBeUsedOn(gameItem.getName())) { + player.sendMessage(Lang.HEY.f("&7The &b&l" + upgrade.getDisplayName() + " Armor Upgrade&7 can be applied to the following types of items: " + upgrade.getTypesString() + "&7!")); + return; + } + if (ArmorUpgrade.getArmorUpgrades(item).contains(upgrade)) { + player.sendMessage(Lang.ARMOR_UPGRADE.f("&7That piece of armor already has the &b&l" + upgrade.getDisplayName() + " Armor Upgrade&7!")); + return; + } + double price = upgrade.getPrice(); + if (!user.hasMoney(upgrade.getPrice())) { + player.sendMessage(Lang.ARMOR_UPGRADE.f("&7You can't afford the &b&l" + upgrade.getDisplayName() + " Armor Upgrade&7!")); + return; + } + Bukkit.getPluginManager().callEvent(new MoneyEvent(player.getUniqueId(), MoneyEvent.MoneyEventType.TAKE, price)); + player.getInventory().setItemInMainHand(upgrade.getUpgradedItem(gameItem, i)); + player.sendMessage(Lang.ARMOR_UPGRADE.f("&7You applied the &b&l" + upgrade.getDisplayName() + " Armor Upgrade&7 to your " + (i.getItemMeta().hasDisplayName() ? i.getItemMeta().getDisplayName() : i.getType().name()) + "&7 for &a$&l" + price + "&7!")); + return; + case 14: + player.closeInventory(); + return; + default: + return; + } + default: + return; + } + case "lottery": + switch (item.getType()) { + case EMPTY_MAP: + int amnt = Integer.parseInt(ChatColor.stripColor(item.getItemMeta().getDisplayName()) + .replace(" Tickets", "")); + if (!user.hasMoney(amnt * 500)) { + player.sendMessage(Lang.BANK.f("&7You don't have &c$&l" + (amnt * 500) + " &con you!")); + return; + } + user.takeMoney(amnt * 500); + LotteryPlayer p = Vice.getLottery().getLotteryPlayer(uuid); + if (p == null) { + p = new LotteryPlayer(uuid, player.getName()); + Vice.getLottery().addLotteryPlayer(p); + } + p.addTickets(amnt); + ViceUtils.updateBoard(player, user); + player.sendMessage(Lang.LOTTERY.f("&7You bought &e&l" + amnt + " Tickets&7 for &a$&l" + (amnt * 500) + "&7!")); + player.closeInventory(); + return; + case BOOK_AND_QUILL: + user.setBooleanToStorage(BooleanStorageType.BUYING_LOTTERY_TICKETS, true); + player.closeInventory(); + player.sendMessage(Utils.f(Lang.BANK + + "&7Please type (in chat) the amount of tickets you would like to buy for &a$&l500&7 each, or type&a \"quit\"&7!")); + return; + case REDSTONE: + MenuManager.openMenu(player, "bank"); + return; + default: + return; + } + } + } +} + + + + + diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/MobSpawn.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/MobSpawn.java new file mode 100644 index 0000000..92f4a16 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/MobSpawn.java @@ -0,0 +1,32 @@ +package net.grandtheftmc.vice.listeners; + +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.LivingEntity; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.CreatureSpawnEvent; +import org.bukkit.event.entity.EntitySpawnEvent; + +/** + * Created by Timothy Lampen on 2017-08-17. + */ +public class MobSpawn implements Listener { + + @EventHandler + public void onSpawn(CreatureSpawnEvent event){ + LivingEntity e = event.getEntity(); + if(event.getSpawnReason()!= CreatureSpawnEvent.SpawnReason.CUSTOM && e.getLocation().getWorld().getName().equals("spawn")) + event.setCancelled(true); + } + + // HIGHEST to override any other plugins, currently works if not disabled by another plugin. + @EventHandler (priority = EventPriority.HIGHEST) + public void onWitherSpawn(EntitySpawnEvent event) { + Entity entity = event.getEntity(); + if (entity.getType() == EntityType.WITHER) { + event.setCancelled(true); + } + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/Move.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/Move.java new file mode 100644 index 0000000..d6df49f --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/Move.java @@ -0,0 +1,94 @@ +package net.grandtheftmc.vice.listeners; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.drugs.Drug; +import net.grandtheftmc.vice.drugs.DrugService; +import net.grandtheftmc.vice.drugs.example.Cocaine; +import net.grandtheftmc.vice.world.ViceSelection; +import net.grandtheftmc.vice.world.events.PlayerEnterZoneEvent; +import net.grandtheftmc.vice.world.events.PlayerLeaveZoneEvent; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerMoveEvent; +import org.bukkit.util.Vector; + +import java.util.List; +import java.util.Optional; + +public class Move implements Listener { + + + @EventHandler + public void onMove(PlayerMoveEvent event) { + + + Location to = event.getTo(), from = event.getFrom(); + + if (to.getBlockX() == from.getBlockX() && to.getBlockY() == from.getBlockY() && to.getBlockZ() == from.getBlockZ()) { + //Player has not moved block + return; + } + + Player player = event.getPlayer(); + + Optional<Drug> cocaine = ((DrugService) Vice.getDrugManager().getService()).getDrug("cocaine"); + if (cocaine.isPresent()) { + if (((Cocaine) cocaine.get()).cantMove(player.getUniqueId())) { + event.setCancelled(true); + return; + } + } + + + List<ViceSelection> pastZones = Vice.getWorldManager().getZones(from); + + List<ViceSelection> currentZones = Vice.getWorldManager().getZones(to); + if(!pastZones.equals(currentZones)) { + + pastZones.forEach(zone -> { + if (!currentZones.contains(zone)) {//player left zone + PlayerLeaveZoneEvent e = new PlayerLeaveZoneEvent(player, zone); + Bukkit.getPluginManager().callEvent(e); + if (e.isCancelled()) { + Vector velocity = player.getLocation().getDirection(); + velocity.setY(0.3); + player.setVelocity(velocity.multiply(-0.5)); + } + } else + currentZones.remove(zone); + }); + for (ViceSelection entered : currentZones) { + PlayerEnterZoneEvent e = new PlayerEnterZoneEvent(player, entered); + Bukkit.getPluginManager().callEvent(e); + if (e.isCancelled()) { + Vector velocity = player.getLocation().getDirection(); + velocity.setY(0.3); + player.setVelocity(velocity.multiply(-0.5)); + } + } + } + + if (!player.getWorld().getName().equalsIgnoreCase("spawn") && Vice.getWorldManager().getWarpManager().cancelTaxi(player, Vice.getUserManager().getLoadedUser(player.getUniqueId()))) { + player.sendMessage(Lang.TAXI.f("&eYou moved! Teleportation cancelled!")); + return; + } + +// if (player.isGliding()) { +// if (!player.isSneaking() || player.getLocation().getY() > 200) return; +// double pitch = -event.getTo().getPitch(); +// if (pitch < 10 || pitch > 90) return; +// Vector vector = player.getLocation().getDirection(); +// player.setVelocity(vector.multiply(1.6)); +// player.getWorld().playSound(event.getFrom(), Sound.ENTITY_ARROW_SHOOT, 1.0F, 2.0F); +// return; +// } + + + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/NametagComponent.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/NametagComponent.java new file mode 100644 index 0000000..6e913bc --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/NametagComponent.java @@ -0,0 +1,38 @@ +package net.grandtheftmc.vice.listeners; + +import net.grandtheftmc.core.util.Component; +import net.grandtheftmc.vice.Vice; + +/** + * Created by Luke Bingham on 03/08/2017. + */ +public class NametagComponent implements Component<NametagComponent, Vice> { + +// private final TagManager<Vice> tagManager; +// +// public NametagComponent(Vice plugin, TagManager<Vice> tagManager) { +// this.tagManager = tagManager; +// Bukkit.getPluginManager().registerEvents(this, plugin); +// } +// +// @EventHandler(priority = EventPriority.MONITOR) +// protected final void onPlayerJoin(PlayerJoinEvent event) { +// Player player = event.getPlayer(); +// UserRank userRank = Core.getUserManager().getLoadedUser(player.getUniqueId()).getUserRank(); +// ViceRank viceRank = Vice.getUserManager().getLoadedUser(player.getUniqueId()).getRank(); +// +// StringBuilder name = new StringBuilder(); +// name.append(userRank.isHigherThan(UserRank.DEFAULT) ? userRank.getColoredNameBold() + "&r " : "&r"); +// name.append(player.getDisplayName() == null ? player.getName() : player.getDisplayName()).append("&r "); +// name.append(viceRank.getColoredNameBold() + "&r"); +// +// Tag tag1 = this.tagManager.createTag(NMSVersion.MC_1_12, player, 1, "&c❤&r &c" + player.getHealth(), null); +// Tag tag2 = this.tagManager.createTag(NMSVersion.MC_1_12, player, 2, name.toString(), tag1); +// +// FPlayer fPlayer = FPlayers.getInstance().getByPlayer(player); +// if(fPlayer != null && fPlayer.hasFaction()) +// this.tagManager.createTag(NMSVersion.MC_1_12, player, 3, fPlayer.getFaction().getTag(), tag2); +// +// this.tagManager.refreshAll(player); +// } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/PetListener.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/PetListener.java new file mode 100644 index 0000000..eb98f05 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/PetListener.java @@ -0,0 +1,29 @@ +package net.grandtheftmc.vice.listeners; + +/* com.dsh105.echopet.compat.api.event.PetInteractEvent; +import com.dsh105.echopet.compat.api.event.PetTeleportEvent; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.users.ViceUser; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler;*/ +import org.bukkit.event.Listener; + +public class PetListener implements Listener { + + /*@EventHandler + public void onTeleport(PetTeleportEvent e) { + Player player = e.getPet().getOwner(); + ViceUser user = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + if (user.isInCombat() || user.isArrested()) + e.setCancelled(true); + } + + @EventHandler + public void onPetInteract(PetInteractEvent e) { + Player player = e.getPet().getOwner(); + ViceUser user = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + if (user.isInCombat() || user.isArrested()) + e.setCancelled(true); + }*/ + +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/Pickup.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/Pickup.java new file mode 100644 index 0000000..638ecd8 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/Pickup.java @@ -0,0 +1,95 @@ +package net.grandtheftmc.vice.listeners; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.ViceUtils; +import net.grandtheftmc.vice.items.AmmoType; +import net.grandtheftmc.vice.users.ViceUser; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.entity.Item; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryPickupItemEvent; +import org.bukkit.event.player.PlayerPickupItemEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; + +public class Pickup implements Listener { + + public void m(int i) { + Bukkit.broadcastMessage(String.valueOf(i)); + } + + @EventHandler + public void onPickup(PlayerPickupItemEvent e) { + Player player = e.getPlayer(); + ItemStack item = e.getItem().getItemStack(); + if (player.isInsideVehicle() || e.getItem().getItemStack().getType() == Material.ARROW) { + e.setCancelled(true); + return; + } + switch (item.getType()) { + case PAPER: + ItemMeta im = item.getItemMeta(); + if (im == null || !im.hasDisplayName()) + return; + String disp = ChatColor.stripColor(item.getItemMeta().getDisplayName()).replace("$", ""); + double amnt; + try { + amnt = Double.parseDouble(disp); + } catch (NumberFormatException ex) { + return; + } + amnt *= item.getAmount(); + + ViceUser user = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + user.addMoney(amnt); + player.sendMessage(Utils.f(Lang.MONEY_ADD.toString() + amnt)); + e.getItem().remove(); + e.setCancelled(true); + Utils.kaching(player); + ViceUtils.updateBoard(player, user); + return; + default: + break; + } + AmmoType type = AmmoType.getAmmoType(item); + if (type != null) { + ViceUser user = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + if (type.isInInventory()) { + user.updateAmmoLater(); + return; + } + int i = item.getAmount() + e.getRemaining(); + user.addAmmo(type, i); + e.setCancelled(true); + e.getItem().remove(); + player.sendMessage(Lang.AMMO_ADD.f(i + "&7 " + type.getGameItem().getDisplayName())); + } + + + HashMap<ItemStack, ItemStack> replacedVanillaItems = Vice.getItemManager().getReplacedVanilla(); + if(replacedVanillaItems.keySet().stream().anyMatch(value -> value.isSimilar(item))) { + Optional<Map.Entry<ItemStack, ItemStack>> optItemStack = replacedVanillaItems.entrySet().stream().filter(map -> map.getKey().isSimilar(item)).findFirst(); + if (optItemStack.isPresent()) { + ItemStack newItem = optItemStack.get().getValue(); + newItem.setAmount(item.getAmount()); + Item newI = player.getWorld().dropItemNaturally(e.getItem().getLocation(), newItem); + newI.setPickupDelay(0); + e.getItem().remove(); + e.setCancelled(true); + + } + } + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/PlayerEnterZone.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/PlayerEnterZone.java new file mode 100644 index 0000000..af43d1d --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/PlayerEnterZone.java @@ -0,0 +1,41 @@ +package net.grandtheftmc.vice.listeners; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.users.ViceUser; +import net.grandtheftmc.vice.world.ViceSelection; +import net.grandtheftmc.vice.world.ZoneFlag; +import net.grandtheftmc.vice.world.events.PlayerEnterZoneEvent; +import net.grandtheftmc.vice.world.warps.Warp; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; + +/** + * Created by Timothy Lampen on 2017-08-28. + */ +public class PlayerEnterZone implements Listener { + + @EventHandler + public void onZoneEnter(PlayerEnterZoneEvent event) { + Player player = event.getPlayer(); + ViceUser user = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + ViceSelection zone = event.getZone(); + for(ZoneFlag flag : zone.getFlags()) { + switch (flag) { + case COP_TELEPORT_STATION: { + if (user.isCop()) { + Warp w = Vice.getWorldManager().getWarpManager().getWarp("police-station"); + if (w == null) { + Core.error("Attempted to TP cop to station, but couldnt as warp police-station hasnt been set."); + return; + } + player.teleport(w.getLocation()); + player.sendMessage(Lang.COP_MODE.f("&7You have been teleported to the police station because you are not allowed in this area!")); + } + } + } + } + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/PlayerLeaveZone.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/PlayerLeaveZone.java new file mode 100644 index 0000000..8b96098 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/PlayerLeaveZone.java @@ -0,0 +1,36 @@ +package net.grandtheftmc.vice.listeners; + +import net.grandtheftmc.core.util.State; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.users.CheatCode; +import net.grandtheftmc.vice.users.ViceUser; +import net.grandtheftmc.vice.world.ViceSelection; +import net.grandtheftmc.vice.world.ZoneFlag; +import net.grandtheftmc.vice.world.events.PlayerLeaveZoneEvent; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; + +/** + * Created by Timothy Lampen on 2017-08-28. + */ +public class PlayerLeaveZone implements Listener{ + + @EventHandler + public void onLeaveZone(PlayerLeaveZoneEvent event) { + Player player = event.getPlayer(); + ViceUser user = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + ViceSelection zone = event.getZone(); + for(ZoneFlag flag : zone.getFlags()) { + switch (flag) { + case COP_CANT_ARREST: {//player is leaving the safezone + if(user.getCheatCodeState(CheatCode.SNEAKY).getState()== State.ON) { + player.addPotionEffect(new PotionEffect(PotionEffectType.INVISIBILITY, 20*5, 0)); + } + } + } + } + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/PortalEnter.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/PortalEnter.java new file mode 100644 index 0000000..21ec591 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/PortalEnter.java @@ -0,0 +1,79 @@ +package net.grandtheftmc.vice.listeners; + +import com.massivecraft.factions.Board; +import com.massivecraft.factions.FLocation; +import com.massivecraft.factions.Faction; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.users.TaxiTarget; +import net.grandtheftmc.vice.users.ViceUser; +import org.bukkit.*; +import org.bukkit.block.Biome; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityPortalEnterEvent; +import org.bukkit.event.player.PlayerPortalEvent; + +import java.util.concurrent.ThreadLocalRandom; + +public class PortalEnter implements Listener { + + @EventHandler(ignoreCancelled = true) + public void playerPortalEvent(EntityPortalEnterEvent event) { + if (event.getEntityType() != EntityType.PLAYER) return; + Player player = (Player) event.getEntity(); + + ViceUser viceUser = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + if (viceUser.getTaxiTarget() != null) return; + + if (event.getLocation().getWorld().getName().equalsIgnoreCase("spawn")) { +// User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); +// Warp randomWarp = Vice.getWarpManager().getRandomWarp(); +// player.playSound(player.getLocation(), Sound.UI_BUTTON_CLICK, 1F, 1F); +// Vice.getWarpManager().warp(player, user, Vice.getUserManager().getLoadedUser(player.getUniqueId()), +// new TaxiTarget(randomWarp), 0, user.isPremium() ? 1 : 10); + + //Random teleport. + World world = Bukkit.getWorld("world"); + boolean unfit = true; + int tries = 0; + Location loc = new Location(world, 0, 0, 0); + while (unfit) { + if (tries > 100) { + player.sendMessage(Lang.TAXI.f("&7Could not find suitable location to teleport you to. Please try again.")); + return; + } + loc = new Location(world, + ThreadLocalRandom.current().nextInt(5000), + 0, + ThreadLocalRandom.current().nextInt(5000)); + loc.setY(world.getHighestBlockYAt(loc)); + Faction factionAt = Board.getInstance().getFactionAt(new FLocation(loc)); + Biome biome = world.getBiome(loc.getBlockX(), loc.getBlockZ()); + Material material = loc.getWorld().getHighestBlockAt(loc).getType(); + unfit = !factionAt.isWilderness() + || biome == Biome.OCEAN || biome == Biome.DEEP_OCEAN + || biome == Biome.FROZEN_OCEAN || biome == Biome.SKY + || biome == Biome.VOID || biome == Biome.RIVER || material == Material.WATER || material == Material.STATIONARY_WATER || material == Material.LAVA || material == Material.STATIONARY_LAVA || material == Material.CACTUS; + tries += 1; + } + loc.setY(loc.getY() + 0.5); + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + viceUser.setLastRTP(); + Vice.getWorldManager().getWarpManager().warp(player, user, viceUser, new TaxiTarget(loc), 0, -1, + "&eYou called a taxi to take you to &a" + loc.getBlockX() + "&e, &a" + loc.getBlockY() + "&e, &a" + loc.getBlockZ() + "&e in the wilderness.."); + return; + } + } + + @EventHandler(ignoreCancelled = true) + protected final void onPortalEnter(PlayerPortalEvent event) { + if(event.getFrom() != null && event.getFrom().getWorld() != null && + event.getFrom().getWorld().getName().equalsIgnoreCase("spawn")) + event.setCancelled(true); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/RenameComponent.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/RenameComponent.java new file mode 100644 index 0000000..ef29e72 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/RenameComponent.java @@ -0,0 +1,40 @@ +package net.grandtheftmc.vice.listeners; + +import com.google.common.collect.Sets; +import net.grandtheftmc.core.util.Component; +import net.grandtheftmc.vice.Vice; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.event.EventHandler; +import org.bukkit.event.inventory.PrepareAnvilEvent; +import org.bukkit.inventory.ItemStack; + +import java.util.Set; + +public class RenameComponent implements Component<RenameComponent, Vice> { + + private static final Set<Material> BLACKLIST; + + static { + BLACKLIST = Sets.newHashSet(); + BLACKLIST.add(Material.MOB_SPAWNER); + BLACKLIST.add(Material.CHEST); + BLACKLIST.add(Material.DIAMOND_SWORD); + } + + public RenameComponent(Vice vice) { + Bukkit.getPluginManager().registerEvents(this, vice); + } + + @EventHandler + protected final void onItemRename(PrepareAnvilEvent event) { + if (event.getInventory() == null) return; + if (event.getResult() == null) return; + if (event.getResult().getType() == Material.AIR) return; + + if (BLACKLIST.contains(event.getResult().getType())) { + event.setResult(new ItemStack(Material.AIR)); + } + + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/SmeltItem.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/SmeltItem.java new file mode 100644 index 0000000..44f7abe --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/SmeltItem.java @@ -0,0 +1,26 @@ + +package net.grandtheftmc.vice.listeners; + +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.items.recipetypes.CraftingRecipeItem; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.FurnaceSmeltEvent; +import org.bukkit.inventory.ItemStack; + +/** + * Created by Timothy Lampen on 7/10/2017. + */ +public class SmeltItem implements Listener{ + @EventHandler + public void onSmelt(FurnaceSmeltEvent event){ + ItemStack result = event.getResult(); + CraftingRecipeItem craftingRecipeItem = (CraftingRecipeItem)Vice.getItemManager().getCustomRecipes().getOrDefault(result, null); + if(craftingRecipeItem ==null) + return; + if(!craftingRecipeItem.validate(new ItemStack[]{event.getSource()})){ + event.setCancelled(true); + return; + } + } +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/SwapHandItems.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/SwapHandItems.java new file mode 100644 index 0000000..5d351df --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/SwapHandItems.java @@ -0,0 +1,41 @@ +package net.grandtheftmc.vice.listeners; + +import com.j0ach1mmall3.wastedvehicles.api.events.VehicleEnterEvent; +import com.j0ach1mmall3.wastedvehicles.api.vehicles.WastedVehicle; +import net.grandtheftmc.core.events.PlayerFActionEvent; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.entity.ArmorStand; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; + +import java.util.Set; + +public class SwapHandItems implements Listener { + + @EventHandler + public void onPlayerFAction(PlayerFActionEvent event) { + Player player = event.getPlayer(); + Block targetBlock; + if (player.getTargetBlock((Set<Material>) null, 1).getType() != Material.AIR) { + targetBlock = player.getTargetBlock((Set<Material>) null, 1); + } else if (player.getTargetBlock((Set<Material>) null, 2).getType() != Material.AIR) { + targetBlock = player.getTargetBlock((Set<Material>) null, 2); + } else { + targetBlock = player.getTargetBlock((Set<Material>) null, 3); + } + player.getWorld().getNearbyEntities(targetBlock.getLocation(), 2, 2, 2).forEach(entity -> { + if (entity.getType() != EntityType.ARMOR_STAND) return; + if (entity.hasMetadata("WastedVehicle")) { + WastedVehicle wastedVehicle = (WastedVehicle) entity.getMetadata("WastedVehicle").get(0).value(); + VehicleEnterEvent vehicleEnterEvent = new VehicleEnterEvent(wastedVehicle, player, (ArmorStand) entity); + Bukkit.getPluginManager().callEvent(vehicleEnterEvent); + if (!vehicleEnterEvent.isCancelled()) wastedVehicle.onRightClick((ArmorStand) entity, player); + } + }); + + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/Target.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/Target.java new file mode 100644 index 0000000..f71dd25 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/Target.java @@ -0,0 +1,39 @@ +package net.grandtheftmc.vice.listeners; + +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.users.ViceUser; +import org.bukkit.entity.Player; +import org.bukkit.entity.Tameable; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityTargetEvent; + +import java.util.UUID; + +public class Target implements Listener { + + @EventHandler + public void onTarget(EntityTargetEvent e) { + if (!(e.getTarget() instanceof Player)) + return; + + if (e.getTarget().getWorld().getName().equals("spawn")) { + e.setCancelled(true); + return; + } + + if (e.getEntity() instanceof Tameable) { + Tameable t = (Tameable) e.getEntity(); + + if (!(t.getOwner() instanceof Player)) + return; + + Player player = (Player) t.getOwner(); + UUID uuid = player.getUniqueId(); + ViceUser user = Vice.getUserManager().getLoadedUser(uuid); + Player target = (Player) e.getTarget(); + UUID targetUuid = target.getUniqueId(); + ViceUser targetUser = Vice.getUserManager().getLoadedUser(targetUuid); + } + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/Teleport.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/Teleport.java new file mode 100644 index 0000000..60091ff --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/Teleport.java @@ -0,0 +1,18 @@ +package net.grandtheftmc.vice.listeners; + +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerTeleportEvent; + +/** + * Created by ThatAbstractWolf on 2017-08-24. + */ +public class Teleport implements Listener { + + @EventHandler + public void onTeleport(PlayerTeleportEvent event) { + + if (event.getPlayer().getWorld().getName().equals("spawn") && event.getCause() == PlayerTeleportEvent.TeleportCause.ENDER_PEARL) + event.setCancelled(true); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/UpdateListener.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/UpdateListener.java new file mode 100644 index 0000000..fefd3a0 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/UpdateListener.java @@ -0,0 +1,298 @@ +package net.grandtheftmc.vice.listeners; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.events.*; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.voting.Reward; +import net.grandtheftmc.core.voting.events.PlayerVoteEvent; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.ViceUtils; +import net.grandtheftmc.vice.drugs.Drug; +import net.grandtheftmc.vice.drugs.DrugService; +import net.grandtheftmc.vice.drugs.items.DrugItem; +import net.grandtheftmc.vice.events.TPEvent; +import net.grandtheftmc.vice.items.GameItem; +import net.grandtheftmc.vice.items.Head; +import net.grandtheftmc.vice.items.ItemManager; +import net.grandtheftmc.vice.items.Kit; +import net.grandtheftmc.vice.users.ViceUser; +import net.grandtheftmc.vice.utils.Stats; +import net.md_5.bungee.api.chat.*; +import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang.WordUtils; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import java.util.*; + +public class UpdateListener implements Listener { + private final Map<UUID, Integer> voteCounts = new HashMap<>(); + + @EventHandler + public void voteEvent(PlayerVoteEvent event) { + UUID uuid = event.getUUID(); + Player player = Bukkit.getPlayer(uuid); + if (player == null) return; + this.voteCounts.put(uuid, this.voteCounts.getOrDefault(uuid, 0) + 1); + ViceUser viceUser = Vice.getUserManager().getLoadedUser(uuid); + User user = Core.getUserManager().getLoadedUser(uuid); + Kit kit = Vice.getItemManager().getKit("vote"); + if (this.voteCounts.get(uuid) == 5) { + player.sendMessage(Lang.VOTE.f("&7Thank you for voting on all 5 sites! Here is a special vote kit!")); + Vice.getItemManager().giveKitItems(player, viceUser, kit); + user.addCrowbars(1); + } + } + + @EventHandler + public void tpEvent(TPEvent event) { + if (event.getType() == TPEvent.TPType.HOUSE_ENTER + || event.getType() == TPEvent.TPType.PREMIUM_HOUSE_ENTER) { + Player player = event.getPlayer(); + ViceUser viceUser = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + if (viceUser.isInCombat()) { + event.setCancelled(Utils.f("&7You cannot enter a house while in combat!")); + } + } + } + + @EventHandler + public void serverSaveEvent(ServerSaveEvent event) { + Vice.getShopManager().getHeads().forEach(Head::update); + Vice.getUserManager().getLoadedUsers().forEach(gtmUser -> { + if (gtmUser == null) return; + gtmUser.checkAchievements(); + }); + } + + @EventHandler + public void chatEvent(ChatEvent event) { + Player player = event.getSender(); + TextComponent message = event.getTextComponent(); + List<String> hover = Stats.getInstance().getStats(player); + String url = ""; + + for (String string : message.getText().split(" ")) { + if (ViceUtils.isValidURL(string)) { + url = string; + break; + } + + if (ViceUtils.getUser(player).isRank(UserRank.VIP) && (string.equalsIgnoreCase(":hand:") + || string.equalsIgnoreCase(":items:") || string.equalsIgnoreCase(":item:"))) { + if (player.getInventory().getItemInMainHand() == null) continue; + ItemStack hand = player.getInventory().getItemInMainHand().clone(); + String json = ViceUtils.convertItemStackToJson(hand); + if (json == null) continue; + if (!hand.hasItemMeta() || !hand.getItemMeta().hasDisplayName()) { + ItemMeta meta = hand.getItemMeta(); + meta.setDisplayName(WordUtils.capitalize(hand.getType().name().toLowerCase().replace("_", " "))); + hand.setItemMeta(meta); + } + message.setText(message.getText().replace(string, + hand.getItemMeta().getDisplayName() + message.getColor())); + message.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_ITEM, new BaseComponent[]{ + new TextComponent(json) + })); + break; + } + } + + if (url.isEmpty()) { + message.setClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/msg " + player.getName() + ' ')); + } else { + message.setClickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL, url)); + } + if (message.getHoverEvent() == null) { + message.setHoverEvent( + new HoverEvent(HoverEvent.Action.SHOW_TEXT, + new ComponentBuilder(StringUtils.join(hover, "\n")) + .create())); + } + event.setTextComponent(message); + } + + @EventHandler + public void onDisplayNameUpdate(DisplayNameUpdateEvent e) { + Player player = e.getPlayer(); + ViceUser u = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + e.setPrefix(u.isCop() ? u.getCopRank().getColoredNameBold() : u.getRank().getColoredNameBold()); + } + + @EventHandler + public void onGetPerms(GetPermsEvent e) { + ViceUser user = Vice.getUserManager().getLoadedUser(e.getUUID()); + if (user != null && user.getRank() != null) { + user.getRank().getAllPerms().forEach(e::addPerm); + if (user.isCop()) user.getCopRank().getAllPerms().forEach(e::addPerm); + } + } + + @EventHandler + public void onNametagChange(NametagUpdateEvent e) { + Player player = e.getPlayer(); + if (player == null) + return; + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + ViceUser viceUser = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + + // TODO achievements + } + + @EventHandler + public void onTutorialEvent(TutorialEvent e) { + Player player = e.getPlayer(); + switch (e.getType()) { + case PRE_START: + ViceUser user = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + if (user.isInCombat()) { + e.setCancelled("&7You can't join tutorials in combat!"); + return; + } + if (user.isArrested()) { + e.setCancelled("&7You can't join tutorials in jail!"); + return; + } + if (!Objects.equals("spawn", player.getWorld().getName())) { + e.setCancelled("&7You can only join tutorials at spawn!"); + return; + } + break; + case START: + ViceUtils.removeBoard(player); + break; + default: + break; + } + + } + + @EventHandler + public void onReward(RewardEvent e) { + Player player = e.getPlayer(); + Reward reward = e.getReward(); + if (reward.getCustomType() != null) + switch (reward.getCustomType()) { + case "drug": { + Optional<Drug> drug = ((DrugService) Vice.getDrugManager().getService()).getDrug(reward.getCustomName()); + if (drug.isPresent()) { + DrugItem item = DrugItem.getByDrug(drug.get()); + if (item != null) { + Utils.giveItems(player, item.getItemStack()); + } else { + player.sendMessage(Lang.GTM + "" + ChatColor.RED + "Unable to give you the drug " + reward.getCustomName() + ", couldn't find it."); + } + } + return; + } + case "item": { + String[] a = reward.getCustomName().split(":"); + GameItem item = Vice.getItemManager().getItem(a[0]); + if (item == null) + return; + ItemStack stack = item.getItem(); + if (a.length > 1) + try { + stack.setAmount(Integer.parseInt(a[1])); + } catch (NumberFormatException ignored) { + } + if (Utils.giveItems(player, stack)) + player.sendMessage( + Utils.f(Lang.VOTE + "&7Your inventory was full so the item was dropped on the ground!")); + e.setSuccessfull(true); + return; + } + case "items": + ItemManager im = Vice.getItemManager(); + boolean successfull = true; + List<ItemStack> items = new ArrayList<>(); + for (String s : reward.getCustomList()) { + String[] a = s.split(":"); + GameItem item = im.getItem(a[0]); + if (item == null) { + successfull = false; + continue; + } + ItemStack stack = item.getItem(); + if (a.length > 1) + try { + stack.setAmount(Integer.parseInt(a[1])); + } catch (NumberFormatException ignored) { + } + items.add(stack); + } + if (Utils.giveItems(player, Utils.toArray(items))) + player.sendMessage( + Utils.f(Lang.VOTE + "&7Your inventory was full so some items were dropped on the ground!")); + e.setSuccessfull(successfull); + return; + case "kit": + Kit kit = Vice.getItemManager().getKit(reward.getCustomName()); + if (kit != null) { + Vice.getItemManager().giveKitItems(player, Vice.getUserManager().getLoadedUser(player.getUniqueId()), kit); + e.setSuccessfull(true); + } + return; + case "bonds": + ViceUser user = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + user.giveBonds((int) reward.getAmount()); + e.setSuccessfull(true); + return; + default: + break; + } + } + + @EventHandler + public void onMoneyEvent(MoneyEvent e) { + ViceUser user = Vice.getUserManager().getLoadedUser(e.getUUID()); + switch (e.getType()) { + case ADD: + user.addMoney(e.getAmount()); + e.setSuccessfull(); + break; + case BALANCE: + e.setBalance(user.getMoney()); + break; + case TAKE: + user.takeMoney(e.getAmount()); + e.setSuccessfull(); + break; + } + ViceUtils.updateBoard(Bukkit.getPlayer(e.getUUID()), user); + } + + @EventHandler + public void onUpdate(UpdateEvent e) { + switch (e.getReason()) { + case BOARD: + case MONEY: + case OTHER: + case RANK: + ViceUtils.updateBoard(e.getPlayer(), Vice.getUserManager().getLoadedUser(e.getPlayer().getUniqueId())); + break; + case PREF: + switch (e.getPref()) { + case USE_SCOREBOARD: + ViceUtils.updateBoard(e.getPlayer(), Vice.getUserManager().getLoadedUser(e.getPlayer().getUniqueId())); + break; + case TINT_HEALTH: + Vice.getUserManager().getLoadedUser(e.getPlayer().getUniqueId()).updateTintHealth(e.getPlayer(), Core.getUserManager().getLoadedUser(e.getPlayer().getUniqueId())); + break; + default: + break; + } + default: + break; + } + } + +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/VehicleUse.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/VehicleUse.java new file mode 100644 index 0000000..c739718 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/VehicleUse.java @@ -0,0 +1,117 @@ +package net.grandtheftmc.vice.listeners; + +import com.j0ach1mmall3.wastedvehicles.api.events.JetpackFlyEvent; +import com.j0ach1mmall3.wastedvehicles.api.events.VehicleDestroyEvent; +import com.j0ach1mmall3.wastedvehicles.api.events.VehicleEnterEvent; +import com.j0ach1mmall3.wastedvehicles.api.events.VehiclePassengerEnterEvent; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.users.PersonalVehicle; +import net.grandtheftmc.vice.users.ViceRank; +import net.grandtheftmc.vice.users.ViceUser; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; + +import java.util.Objects; + +public class VehicleUse implements Listener { + + @EventHandler + public void onVehiclePassengerEnter(VehiclePassengerEnterEvent event) { + if (Bukkit.getPlayer(event.getVehicle().getCreator()) == null) return; + Player passenger = event.getPlayer(); + Player owner = Bukkit.getPlayer(event.getVehicle().getCreator()); + ViceUser passengerUser = Vice.getUserManager().getLoadedUser(passenger.getUniqueId()); + ViceUser ownerUser = Vice.getUserManager().getLoadedUser(owner.getUniqueId()); + // TODO replace the Gang check with a Cartel check :p + /* if (ownerUser.getGang() == null || passengerUser.getGang() == null) { + passenger.sendMessage(Lang.VEHICLES.f("&fYou must be in the same gang as the Vehicle Driver to enter!")); + event.setCancelled(true); + } else + if (ownerUser.getGang() != passengerUser.getGang()) { + passenger.sendMessage(Lang.VEHICLES.f("&fYou must be in the same gang as the Vehicle Driver to enter!")); + event.setCancelled(true); + } else { + event.setCancelled(false); + }*/ + + } + + @EventHandler + public void onVehicleEnter(VehicleEnterEvent e) { + Player player = e.getPlayer(); + if (Objects.equals("spawn", player.getWorld().getName())) { + player.sendMessage(Lang.HEY.f("&7You can't enter vehicles in spawn!")); + e.setCancelled(true); + return; + } + ViceUser viceUser = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + if (viceUser.isArrested()) { + player.sendMessage(Lang.JAIL.f("&7You can't enter vehicles in jail!")); + e.setCancelled(true); + } + if (e.getVehicle().getCreator() == null) return; + Player creator = Bukkit.getPlayer(e.getVehicle().getCreator()); + if (creator != null) { + User u = Core.getUserManager().getLoadedUser(creator.getUniqueId()); + ViceUser user = Vice.getUserManager().getLoadedUser(creator.getUniqueId()); + PersonalVehicle vehicle = user.getPersonalVehicle(); + if (vehicle == null) return; + if (Objects.equals(creator, player)) { + if (!vehicle.isStolen()) return; + vehicle.setStolen(false); + player.sendMessage(Lang.VEHICLES.f("&7You recovered your stolen " + vehicle.getDisplayName() + "&7!")); + return; + } + if (!Objects.equals(e.getArmorStand().getUniqueId(), vehicle.getEntityUUID()) || e.getArmorStand().getPassenger() != null || vehicle.isStolen()) + return; + vehicle.setStolen(true); + vehicle.updateVehicleInDatabase(creator, e.getArmorStand().getHealth()); + creator.sendMessage(Lang.VEHICLES.f("&7Your &c&l" + vehicle.getDisplayName() + "&7 was stolen!")); + player.sendMessage(Lang.VEHICLES.f("&7You stole " + u.getColoredName(creator) + "&7's " + vehicle.getDisplayName() + "&7!")); + } + } + + @EventHandler + public void onVehicleDestroy(VehicleDestroyEvent e) { + Player creator = Bukkit.getPlayer(e.getVehicle().getCreator()); + if (creator != null) { + ViceUser user = Vice.getUserManager().getLoadedUser(creator.getUniqueId()); + PersonalVehicle vehicle = user.getPersonalVehicle(); + if (vehicle == null || !e.getVehicle().getVehicleProperties().getIdentifier().equalsIgnoreCase(vehicle.getVehicle())) + return; + vehicle.updateVehicleInDatabase(creator, 0); + creator.sendMessage(Lang.VEHICLES.f("&7Your &c&l" + vehicle.getDisplayName() + "&7 was destroyed!")); + } + } + + @EventHandler + public void onJetpackFly(JetpackFlyEvent e) { + Player p = e.getPlayer(); + ViceUser user = Vice.getUserManager().getLoadedUser(e.getPlayer().getUniqueId()); + if (p.isSprinting() && p.isFlying()) { + p.setSprinting(false); + } + if (p.getWorld().getName().equalsIgnoreCase("spawn")) { + if (user.getLastJetpackCancel() + 2000 < System.currentTimeMillis()) { + user.setLastJetpackCancel(System.currentTimeMillis()); + e.getPlayer().sendMessage(Lang.VEHICLES.f("&7You cannot fly in the spawn area!")); + e.setCancelled(true); + } + return; + } + + if (!user.isRank(ViceRank.DRUGLORD) && !Core.getUserManager().getLoadedUser(e.getPlayer().getUniqueId()).isRank(UserRank.SPONSOR)) { + e.setCancelled(true); + if (user.getLastJetpackCancel() + 2000 < System.currentTimeMillis()) { + user.setLastJetpackCancel(System.currentTimeMillis()); + e.getPlayer().sendMessage(Lang.VEHICLES.f("&7You need to rank up to " + ViceRank.DRUGLORD.getColoredNameBold() + "&7 or donate for " + UserRank.SPONSOR.getColoredNameBold() + "&7 at &a&lstore.grandtheftmc.net&7 to use the jetpack!")); + } + } + } +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/VoteReward.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/VoteReward.java new file mode 100644 index 0000000..736950a --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/VoteReward.java @@ -0,0 +1,52 @@ +package net.grandtheftmc.vice.listeners; + +import com.j0ach1mmall3.wastedvehicles.api.VehicleProperties; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.voting.Reward; +import net.grandtheftmc.core.voting.events.RewardCheckEvent; +import net.grandtheftmc.core.voting.events.RewardGiveEvent; +import net.grandtheftmc.core.voting.events.RewardInfoEvent; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.users.ViceUser; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; + +import java.util.Optional; + +public class VoteReward implements Listener { + + @EventHandler + public void rewardGiveEvent(RewardGiveEvent event) { + Player player = event.getPlayer(); + ViceUser viceUser = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + String identifier = event.getIdentifier(); + if (event.getRewardType() == Reward.RewardType.VEHICLE) { + Optional<VehicleProperties> vehicleOptional = Vice.getWastedVehicles().getVehicle(identifier); + if (!vehicleOptional.isPresent()) return; + viceUser.giveVehiclePerm(player, vehicleOptional.get()); + player.sendMessage(Lang.REWARDS.f("&4&l" + identifier)); + } + } + + @EventHandler + public void rewardCheckEvent(RewardCheckEvent event) { + ViceUser viceUser = Vice.getUserManager().getLoadedUser(event.getPlayer().getUniqueId()); + String identifier = event.getIdentifier(); + if (event.getRewardType() == Reward.RewardType.VEHICLE) { + Optional<VehicleProperties> vehicleOptional = Vice.getWastedVehicles().getVehicle(identifier); + if (!vehicleOptional.isPresent()) return; + event.setResult(viceUser.hasVehicle(identifier)); + } + } + + @EventHandler + public void rewardInfoEvent(RewardInfoEvent event) { + String identifier = event.getIdentifier(); + if (event.getRewardType() == Reward.RewardType.VEHICLE) { + Optional<VehicleProperties> vehicleOptional = Vice.getWastedVehicles().getVehicle(identifier); + if (!vehicleOptional.isPresent()) return; + event.setDisplayItem(vehicleOptional.get().getItem()); + } + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/WeaponShoot.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/WeaponShoot.java new file mode 100644 index 0000000..681ff17 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/WeaponShoot.java @@ -0,0 +1,43 @@ +package net.grandtheftmc.vice.listeners; + +import com.j0ach1mmall3.wastedguns.api.events.ranged.RangedWeaponShootEvent; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.guns.weapon.Weapon; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; + +import java.util.Arrays; +import java.util.List; + +public class WeaponShoot implements Listener { + private final List<String> carGuns = Arrays.asList("Pistol", "CombatPistol", "HeavyPistol", "MarksmanPistol", + "TearGas", "StickyBomb", "Grenade", "MolotovCocktail", "ProximityMine", "MicroSMG", "SMG"); + + @EventHandler(ignoreCancelled = true) + public void onRangedWeaponShootEvent(RangedWeaponShootEvent event) { + if (event.getLivingEntity().getType() != EntityType.PLAYER) return; + Weapon weapon = event.getWeapon(); + String weaponName = weapon.getName(); + Player shooter = (Player) event.getLivingEntity(); + boolean inCar = shooter.getVehicle() != null && shooter.getVehicle().hasMetadata("WastedVehiclePassenger"); +// if (weapon.getItemStack().getDurability() != 0) { +// if (weapon.getName().equalsIgnoreCase("GoldMinigun") +// || weapon.getName().equalsIgnoreCase("Flamethrower")) return; +// weapon.getItemStack().setDurability((short) 0); +// } + if(inCar && !carGuns.contains(weaponName)) { + shooter.sendMessage(Lang.HEY.f("&7Weapon cannot be used in Car")); + event.setCancelled(true); + return; + } + if (weaponName.contains("NetLauncher")) { + if(shooter.getWorld().getName().equalsIgnoreCase("spawn")) { + shooter.sendMessage(Lang.HEY.f("&7The Net Launcher cannot be used in spawn")); + event.setCancelled(true); + } + } + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/WeaponUse.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/WeaponUse.java new file mode 100644 index 0000000..3843c7c --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/listeners/WeaponUse.java @@ -0,0 +1,386 @@ +package net.grandtheftmc.vice.listeners; + +import com.j0ach1mmall3.wastedguns.api.events.WeaponDamageEvent; +import com.j0ach1mmall3.wastedguns.api.events.WeaponRightClickEvent; +import com.j0ach1mmall3.wastedguns.api.events.WeaponSneakEvent; +import com.j0ach1mmall3.wastedguns.api.events.ranged.AmmoUpdateEvent; +import com.j0ach1mmall3.wastedguns.api.events.ranged.RangedWeaponReloadEvent; +import com.massivecraft.factions.FPlayer; +import com.massivecraft.factions.FPlayers; +import com.massivecraft.factions.struct.Relation; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.servers.ServerType; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.guns.weapon.Weapon; +import net.grandtheftmc.guns.weapon.attribute.RankedWeapon; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.ViceUtils; +import net.grandtheftmc.vice.items.AmmoType; +import net.grandtheftmc.vice.users.LockedWeapon; +import net.grandtheftmc.vice.users.ViceUser; +import net.grandtheftmc.vice.world.ZoneFlag; +import org.bukkit.Bukkit; +import org.bukkit.GameMode; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.block.BlockFace; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; +import org.bukkit.scheduler.BukkitRunnable; + +import java.util.*; +import java.util.concurrent.ThreadLocalRandom; + +public class WeaponUse implements Listener { + private final List<String> spawnBlocked = Arrays.asList("grenade", "molotovcocktail", "teargas", "stickybomb", + "proximitymine", "grenadelauncher", "hominglauncher", "rpg"); + private final List<String> jetpackAllowed = Arrays.asList("Pistol", "CombatPistol", "HeavyPistol", "MarksmanPistol", + "TearGas", "SawedoffShotgun", "MicroSMG"); + private final List<String> jetpackDisallowedHeavy = Arrays.asList("CombatMG", "MG", "Minigun", "RPG", + "HomingLauncher", "HeavySniper", "Flamethrower", "GoldMinigun", "NetLauncher"); + private final List<String> wingsuitDisallowed = Arrays.asList("Minigun", "GoldMinigun", "RPG", + "SniperRifle", "HeavySniper", "NetLauncher", "HomingLauncher", "GrenadeLauncher", + "CombatMG", "MG", "Flamethrower"); + + private Collection<String> recentKatanaChops = new ArrayList<>(); + + @EventHandler(priority = EventPriority.HIGHEST) + public void onAmmoChange(AmmoUpdateEvent e) { + ViceUser user = Vice.getUserManager().getLoadedUser(e.getPlayer().getUniqueId()); + for (AmmoType type : AmmoType.getTypes()) + e.getAmmo().put(type.name(), user.getAmmo(type)); + } + + @EventHandler(priority = EventPriority.HIGHEST) + public void onReload(RangedWeaponReloadEvent e) { + Weapon weapon = e.getWeapon(); + if (weapon.getAmmoType() == null || !(e.getLivingEntity() instanceof Player)) + return; + + AmmoType type = AmmoType.getAmmoType(weapon.getAmmoType().getType()); + if (type == null) return; + + Player player = (Player) e.getLivingEntity(); + ViceUser user = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + LockedWeapon l = LockedWeapon.getWeapon(weapon.getCompactName()); + if (e.getWeapon() instanceof RankedWeapon) { + UserRank required = ((RankedWeapon) e.getWeapon()).requiredRank(), current = Core.getUserManager().getLoadedUser(player.getUniqueId()).getUserRank(); + if (required != null && (!current.isHigherThan(required) && current != required)) { + player.sendMessage(Lang.HEY.f("&7You need to rank up to " + l.getViceRank().getColoredNameBold() + "&7 or donate for " + l.getUserRank().getColoredNameBold() + "&7 at &a&lstore.grandtheftmc.net&7 to use this weapon!")); + e.setCancelled(true); + return; + } + } + + int ammo = user.getAmmo(type); + if (ammo <= 0) { + e.setCancelled(true); + player.sendMessage(Lang.AMMO.f("&7You are out of ammo for this weapon!")); + } + else if (ammo < e.getAmmoToReload()) { + e.setAmmoToReload(ammo); + user.removeAmmo(type, ammo); + } + else { + user.removeAmmo(type, e.getAmmoToReload()); + } + } + + @EventHandler(priority = EventPriority.HIGHEST) + public void onWeaponUse(WeaponRightClickEvent e) { + if (!(e.getLivingEntity() instanceof Player)) + return; + + Player player = (Player) e.getLivingEntity(); + Weapon weapon = e.getWeapon(); + if (Objects.equals("spawn", player.getWorld().getName())) { + if (this.spawnBlocked.contains(weapon.getCompactName().toLowerCase())) { + e.setCancelled(true); + return; + } + } + + ViceUser viceUser = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + LockedWeapon lockedWeapon = LockedWeapon.getWeapon(e.getWeapon().getCompactName().toUpperCase()); + if (lockedWeapon != null && !lockedWeapon.canUseWeapon(viceUser.getRank(), Core.getUserManager().getLoadedUser(player.getUniqueId()).getUserRank())) { + player.sendMessage(Lang.HEY.f("&7You need to rank up to " + lockedWeapon.getViceRank().getColoredNameBold() + "&7 or donate for " + lockedWeapon.getUserRank().getColoredNameBold() + "&7 at &a&lstore.grandtheftmc.net&7 to use this weapon!")); + e.setCancelled(true); + return; + } + +// if(e.getWeapon() instanceof RankedWeapon) { +// System.out.println("RankedWeapon: " + true); +// UserRank required = ((RankedWeapon) e.getWeapon()).requiredRank(), current = Core.getUserManager().getLoadedUser(player.getUniqueId()).getUserRank(); +// System.out.println(required.name() + " - " + current.name()); +// if (!current.isHigherThan(required) && current != required) { +// player.sendMessage(Lang.HEY.f("&7You need to rank up to " + ViceRank.JUNKIE.getColoredNameBold() + "&7 or donate for " + required.getColoredNameBold() + "&7 at &a&lstore.grandtheftmc.net&7 to use this weapon!")); +// e.setCancelled(true); +// return; +// } +// } + + if (viceUser.isArrested()) { + player.sendMessage(Lang.JAIL.f("&7You can't use weapons in jail!")); + e.setCancelled(true); + return; + } + + if (viceUser.hasTeleportProtection()) { + e.setCancelled(true); + player.sendMessage(Lang.COMBATTAG.f("&7Please wait &c&l" + Utils.timeInMillisToText(viceUser.getTimeUntilTeleportProtectionExpires()) + "&7!")); + return; + } + + boolean elytra = player.getInventory().getChestplate() != null && player.getInventory().getChestplate().getType() == Material.ELYTRA; + if (elytra) { + if (this.wingsuitDisallowed.contains(e.getWeapon().getCompactName())) { + player.sendMessage(Lang.VEHICLES.f("&7This weapon cannot be used in a wingsuit!")); + e.setCancelled(true); + return; + } + } + + ItemStack chestPlate = player.getInventory().getChestplate(); + if (chestPlate != null && chestPlate.getType() == Material.GOLD_CHESTPLATE + && !this.jetpackAllowed.contains(e.getWeapon().getCompactName()) + && player.isFlying()) { + player.sendMessage(Lang.VEHICLES.f("&7You can't use this weapon in a jetpack!")); + e.setCancelled(true); + return; + } + + if (chestPlate != null && chestPlate.getType() == Material.GOLD_CHESTPLATE + && this.jetpackDisallowedHeavy.contains(e.getWeapon().getCompactName())) { + player.sendMessage(Lang.VEHICLES.f("&7You can't use this weapon in a jetpack!")); + e.setCancelled(true); + return; + } + } + + + @EventHandler(priority = EventPriority.HIGHEST) + public void onWeaponUse(WeaponSneakEvent e) { + if (!(e.getLivingEntity() instanceof Player)) + return; + Player player = (Player) e.getLivingEntity(); + Weapon weapon = e.getWeapon(); + if (Objects.equals("spawn", player.getWorld().getName())) { + if (this.spawnBlocked.contains(weapon.getCompactName().toLowerCase())) { + e.setCancelled(true); + return; + } + } + ViceUser viceUser = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + LockedWeapon l = LockedWeapon.getWeapon(weapon.getCompactName()); + if (e.getWeapon() instanceof RankedWeapon) { + UserRank required = ((RankedWeapon) e.getWeapon()).requiredRank(), current = Core.getUserManager().getLoadedUser(player.getUniqueId()).getUserRank(); + if (required != null && (!current.isHigherThan(required) && current != required)) { + player.sendMessage(Lang.HEY.f("&7You need to rank up to " + l.getViceRank().getColoredNameBold() + "&7 or donate for " + l.getUserRank().getColoredNameBold() + "&7 at &a&lstore.grandtheftmc.net&7 to use this weapon!")); + e.setCancelled(true); + return; + } + } + if (viceUser.isArrested()) { + player.sendMessage(Lang.JAIL.f("&7You can't use weapons in jail!")); + e.setCancelled(true); + return; + } + if (viceUser.hasTeleportProtection()) { + e.setCancelled(true); + player.sendMessage(Lang.COMBATTAG.f("&7Please wait &c&l" + Utils.timeInMillisToText(viceUser.getTimeUntilTeleportProtectionExpires()) + "&7!")); + return; + } + ItemStack chestPlate = player.getInventory().getChestplate(); + if (chestPlate != null && chestPlate.getType() == Material.GOLD_CHESTPLATE && player.getLocation().getBlock().getRelative(BlockFace.DOWN).getType() == Material.AIR && !this.jetpackAllowed.contains(e.getWeapon().getCompactName())) { + e.setCancelled(true); + return; + } + } + + + @EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST) + public void onShoot(WeaponDamageEvent e) { + Weapon weapon = e.getWeapon(); + if (!(e.getLivingEntity() instanceof Player) || !(e.getEntity() instanceof Player)) + return; + Player player = (Player) e.getLivingEntity(); + ViceUser viceUser = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + Player victim = (Player) e.getEntity(); + UUID victimUUID = victim.getUniqueId(); + ViceUser victimViceUser = Vice.getUserManager().getLoadedUser(victimUUID); + if (victimViceUser.hasTeleportProtection()) { + e.setCancelled(true); + player.sendMessage(Lang.COMBATTAG.f("&7That player has teleport protection for &c&l" + Utils.timeInMillisToText(victimViceUser.getTimeUntilTeleportProtectionExpires()) + "&7!")); + return; + } + + if (viceUser.hasTeleportProtection()) { + e.setCancelled(true); + player.sendMessage(Lang.COMBATTAG.f("&7Please wait &c&l" + Utils.timeInMillisToText(viceUser.getTimeUntilTeleportProtectionExpires()) + "&7!")); + return; + } + + // TODO make sure players in the same cartel cant shoot eachother + FPlayer fPlayer = FPlayers.getInstance().getByPlayer(player), fVictim = FPlayers.getInstance().getByPlayer(victim); + if (fPlayer != null && fVictim != null) { + if ((fPlayer.getFaction() != null || fVictim.getFaction() != null) && (fPlayer.getFactionId().equalsIgnoreCase(fVictim.getFactionId()) || fPlayer.getFaction().getRelationWish(fVictim.getFaction()) == Relation.ALLY)) { + player.sendMessage(Utils.f(" &a&lCARTELS&8&l> &7You can't hurt players that are in your gang!")); + } + } + /* + Gang victimGang = victimViceUser.getGang(); + Gang damagerGang = viceUser.getGang(); + if (victimGang != null && damagerGang != null && !Objects.equals(victim, player)) { + if (Objects.equals(victimGang, damagerGang)) { + e.setCancelled(true); + player.sendMessage(Lang.GANGS.f("&7You can't hurt players that are in your gang!")); + return; + } + if (victimGang.isAllied(damagerGang.getName())) { + e.setCancelled(true); + player.sendMessage(Lang.GANGS.f("&7You can't hurt players that are in an allied gang!")); + return; + } + }*/ + if (!Objects.equals("spawn", e.getEntity().getWorld().getName())) { + if ("stungun".equalsIgnoreCase(weapon.getCompactName()) && viceUser.isCop()) { + player.sendMessage(Lang.COPS.f("&7You have no jurisdiction in this area!")); + return; + } + if ("flamethrower".equalsIgnoreCase(weapon.getCompactName())) { + victim.setFireTicks(victim.getFireTicks() + 20); + victim.getNearbyEntities(5, 0, 5).forEach(entity -> { + if (Objects.equals(entity, victim) || entity.getType() != EntityType.PLAYER) return; + Player target = (Player) entity; + if (target.getGameMode() != GameMode.ADVENTURE && target.getGameMode() != GameMode.SURVIVAL) return; + target.setFireTicks(target.getFireTicks() + 10); + }); + return; + } + if ("katana".equalsIgnoreCase(weapon.getCompactName())) { + if (this.recentKatanaChops.contains(victim.getName())) return; + if (ThreadLocalRandom.current().nextInt(30) < 5) { + ItemStack skull = Utils.setSkullOwner(Utils.createItem(Material.SKULL_ITEM, 3, + "&e&l" + victim.getName() + "'s Decapitated Head"), + victim.getName()); + victim.getWorld().dropItemNaturally(victim.getLocation(), skull); + victim.setHealth(0); + this.recentKatanaChops.add(victim.getName()); + } + } + if (!viceUser.isCop()) return; + if (victimViceUser.isCop()) { + e.setCancelled(true); + player.sendMessage(Utils.f(Lang.HEY + "&cYou can't kill cops!")); + return; + } + if ("nightstick".equalsIgnoreCase(weapon.getCompactName())) { + victim.addPotionEffect(new PotionEffect(PotionEffectType.CONFUSION, 80, 1)); + victim.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, 50, 1)); + } + } else if ("stungun".equalsIgnoreCase(weapon.getCompactName())) { + if (!viceUser.isCop()) return; + if (ViceUtils.isInSpawnRange(victim, 10)) { + player.sendMessage(Lang.COPS.f("&7You have no jurisdiction in this area!")); + return; + } + if (victimViceUser.isCop()) { + e.setCancelled(true); + player.sendMessage(Utils.f(Lang.HEY + "&cYou can't arrest cops!")); + return; + } + int timeInJail = ViceUtils.getTimeInJailForDrugs(victim); + if (timeInJail == 0) return; + if (victim.getLastDamageCause() == null || victim.getLastDamageCause().getCause() != EntityDamageEvent.DamageCause.DRAGON_BREATH) + return; + ItemStack chestPlate = player.getInventory().getChestplate(); + if (chestPlate != null && chestPlate.getType() == Material.GOLD_CHESTPLATE && player.getLocation().getBlock().getRelative(BlockFace.DOWN).getType() == Material.AIR) { + player.sendMessage(Lang.COP_MODE.f("&fYou may not arrest criminals during flight!")); + return; + } + if (player.getVehicle() != null) { + player.sendMessage(Lang.COP_MODE.f("&fYou may not arrest criminals while in a Vehicle!")); + return; + } + if (Vice.getWorldManager().getZones(player.getLocation()).stream().anyMatch(zone -> zone.getFlags().contains(ZoneFlag.COP_CANT_ARREST))) { + player.sendMessage(Lang.COP_MODE.f("&7You may not arrest criminals in this area!")); + return; + } + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + User victimUser = Core.getUserManager().getLoadedUser(victimUUID); + + victimViceUser.jail(timeInJail, player); + player.sendMessage(Lang.COP_MODE.f("&7You arrested &a" + victimUser.getColoredName(victim) + + "&7! He will go to jail for &a" + Utils.timeInSecondsToText(timeInJail) + "&7!")); + Utils.broadcastExcept(player, Lang.COP_MODE.f("&a" + victimUser.getColoredName(victim) + "&7 was arrested by &a" + + user.getColoredName(player) + "&7!")); + victimViceUser.addDeaths(1); + victimViceUser.setLastTag(-1); + victimViceUser.setKillStreak(0); + if (Vice.getWorldManager().getWarpManager().cancelTaxi(victim, victimViceUser)) + victim.sendMessage(Utils.f(Lang.TAXI + "&eThe taxi was cancelled!")); + + if (Core.getSettings().getType() == ServerType.VICE) { + victim.setHealth(0); + } else { + victim.setHealth(victim.getMaxHealth()); + victim.spigot().respawn(); + } + + victim.setFireTicks(0); + victim.setGameMode(GameMode.SPECTATOR); + victim.setFlying(true); + victim.getActivePotionEffects().clear(); + victim.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, 180, 0), false); + victim.setFoodLevel(20); + victim.playSound(victim.getLocation(), Sound.ENTITY_WITHER_SPAWN, 1, 0.5F); + victim.setFlySpeed(0); + ViceUtils.removeBoard(victim); +// victimUser.removeCosmetics(victim); + new BukkitRunnable() { + @Override + public void run() { + Player victim = Bukkit.getPlayer(victimUUID); + if (victim == null) + return; + User victimUser = Core.getUserManager().getLoadedUser(victim.getUniqueId()); + ViceUser victimGameUser = Vice.getUserManager().getLoadedUser(victim.getUniqueId()); + victim.sendMessage(Lang.JAIL.f("&7You were arrested and have to stay in jail for &a" + + Utils.timeInSecondsToText(timeInJail) + "&7!")); + victim.teleport(Vice.getWorldManager().getWarpManager().getJail().getLocation()); + victim.setGameMode(GameMode.SURVIVAL); + victim.getActivePotionEffects().clear(); + victim.setFoodLevel(20); + victim.setFlying(false); + victim.setFlySpeed(0.1F); + ViceUtils.giveGameItems(victim); + ViceUtils.updateBoard(victim, victimGameUser); +// victimUser.loadLastCosmetics(victim); + } + }.runTaskLater(Vice.getInstance(), 150); + HashSet<ItemStack> bannedItems = new HashSet<>(); + for (ItemStack is : victim.getInventory().getContents()) { + if (Vice.getItemManager().getItem(is) != null && Vice.getItemManager().getItem(is).isScheduled()) { + bannedItems.add(is); + victim.getInventory().removeItem(is); + } + } + ViceUtils.giveGameItems(victim); + for (ItemStack item : bannedItems) + Utils.giveItems(player, item); + Utils.sendTitle(victim, "&c&lBUSTED", "&7Arrested by " + player.getName(), 80, 50, 20); + ViceUtils.updateBoard(player, user, viceUser); + } + } + +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/lootcrates/CrateManager.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/lootcrates/CrateManager.java new file mode 100644 index 0000000..d41abe9 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/lootcrates/CrateManager.java @@ -0,0 +1,188 @@ +package net.grandtheftmc.vice.lootcrates; + +import com.google.common.collect.Maps; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.areas.obj.Area; +import net.grandtheftmc.vice.drugs.DrugService; +import net.grandtheftmc.vice.drugs.items.DrugItem; +import net.grandtheftmc.vice.items.GameItem; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.scheduler.BukkitRunnable; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +public class CrateManager { + + public CrateManager() { + this.loadCrates(); + this.startSchedule(); + } + + protected HashMap<Area.DropType, List<LootItem>> dropItems = Maps.newHashMap(); + private List<LootItem> items = new ArrayList<>(); + private List<LootCrate> crates = new ArrayList<>(); + private int cooldown = 30; // in MINUTES + + private int taskId = -1; + + public List<LootItem> getItems() { + return this.items; + } + + public List<LootCrate> getCrates() { + return this.crates; + } + + + public void loadCrates() { + YamlConfiguration c = Vice.getSettings().getLootConfig(); + this.items = new ArrayList<>(); + for (String s : c.getKeys(false)) { + try { + GameItem item = Vice.getItemManager().getItem(s); + if (item == null) { + Core.error("Error loading game items '" + s + "' for Loot Crates!"); + continue; + } + double chance = 100; + if (c.getString(s + ".chance") != null) + chance = c.getDouble(s + ".chance"); + int min = 1; + if (c.getString(s + ".min") != null) + min = c.getInt(s + ".min"); + int max = 64; + if (c.getString(s + ".max") != null) + max = c.getInt(s + ".max"); + + Area.DropType type = Area.DropType.DEFAULT; + if (c.getString(s + ".type") != null) + type = Area.DropType.valueOf(c.getString(s + ".type")); + + this.items.add(new LootItem(s, chance, min, max, false, type)); + } catch (Exception e) { + Core.error("Error loading loot items '" + s + "' for Loot Crates!"); + } + } + +// for(DrugItem drugItem : ((DrugService)Vice.getInstance().getDrugManager().getService()).getAllDrugItems()){ +// this.items.add(new LootItem(drugItem.getDrug().getName(), 8, 1, 5, true)); +// } + + for (Area.DropType dropType : Area.DropType.values()) { + List<LootItem> temp = new ArrayList<>(); + YamlConfiguration config = Utils.loadConfig(dropType.name() + "_loot"); + for (String s : c.getKeys(false)) { + try { + GameItem item = Vice.getItemManager().getItem(s); + if (item == null) { + Core.error("Error loading game items '" + s + "' for Loot Crates!"); + continue; + } + double chance = 100; + if (c.getString(s + ".chance") != null) + chance = c.getDouble(s + ".chance"); + int min = 1; + if (c.getString(s + ".min") != null) + min = c.getInt(s + ".min"); + int max = 64; + if (c.getString(s + ".max") != null) + max = c.getInt(s + ".max"); + + Area.DropType type = Area.DropType.DEFAULT; + if (c.getString(s + ".type") != null) + type = Area.DropType.valueOf(c.getString(s + ".type")); + + temp.add(new LootItem(s, chance, min, max, false, type)); + } catch (Exception e) { + Core.error("Error loading loot items '" + s + "' for Loot Crates!"); + } + } + + this.dropItems.put(dropType, temp); + } + + c = Vice.getSettings().getLootCratesConfig(); + this.crates = new ArrayList<>(); + if (c.get("lootcrates") != null) + this.crates.addAll(c.getStringList("lootcrates").stream().map(s -> new LootCrate(Utils.blockLocationFromString(s))).collect(Collectors.toList())); + this.cooldown = c.getInt("cooldown"); + } + + public void saveCrates() { + YamlConfiguration c = Vice.getSettings().getLootConfig(); + for (String s : c.getKeys(false)) + c.set(s, null); + for (LootItem item : this.items) { + if(!item.isDrug()) { + String s = item.getItem(); + c.set(s + ".chance", item.getChance()); + c.set(s + ".min", item.getMin()); + c.set(s + ".max", item.getMax()); + c.set(s + ".type", item.getDropType().name()); + } + } + Utils.saveConfig(c, "loot"); + + c = Vice.getSettings().getLootCratesConfig(); + List<String> list = this.crates.stream().map(crate -> Utils.blockLocationToString(crate.getLocation())).collect(Collectors.toList()); + c.set("lootcrates", list); + c.set("cooldown", this.cooldown); + Utils.saveConfig(c, "lootcrates"); + } + + public void startSchedule() { + if (this.taskId != -1) Bukkit.getScheduler().cancelTask(this.taskId); + this.taskId = new BukkitRunnable() { + @Override + public void run() { + Vice.getCrateManager().getCrates().forEach(LootCrate::tick); + } + }.runTaskTimer(Vice.getInstance(), 20, 20).getTaskId(); + } + + public LootCrate getCrate(Location location) { + return this.crates.stream().filter(crate -> Objects.equals(crate.getLocation(), location)).findFirst().orElse(null); + } + + public void addCrate(Location location) { + if (this.getCrate(location) == null) + this.crates.add(new LootCrate(location)); + } + + public void removeCrate(Location location) { + LootCrate crate = this.getCrate(location); + if (crate != null) { + crate.removeHologram(); + this.crates.remove(crate); + } + } + + public int getCooldown() { + return this.cooldown; + } + + public void setCooldown(int i) { + this.cooldown = i; + } + + public void addItem(LootItem lootItem) { + this.items.add(lootItem); + } + + public LootItem getItem(GameItem gameItem) { + return this.items.stream().filter(item -> Objects.equals(item.getGameItem(), gameItem)).findFirst().orElse(null); + } + + public void removeItem(LootItem lootItem) { + this.items.remove(lootItem); + } + +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/lootcrates/LootCrate.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/lootcrates/LootCrate.java new file mode 100644 index 0000000..a702c97 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/lootcrates/LootCrate.java @@ -0,0 +1,157 @@ +package net.grandtheftmc.vice.lootcrates; + +import com.gmail.filoghost.holographicdisplays.api.Hologram; +import com.gmail.filoghost.holographicdisplays.api.HologramsAPI; +import com.gmail.filoghost.holographicdisplays.api.VisibilityManager; +import com.gmail.filoghost.holographicdisplays.api.line.TextLine; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.areas.obj.Area; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.block.BlockState; +import org.bukkit.block.Chest; +import org.bukkit.entity.HumanEntity; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +public class LootCrate { + + private Location location; + private long timer; + private Hologram hologram; + private final List<TextLine> textLines = new ArrayList<>(); + private boolean looted = false; + + public LootCrate(Location location) { + this.location = location; + this.timer = 60; + } + + public Location getLocation() { + return this.location; + } + + public void setLocation(Location location) { + this.location = location; + } + + public long getTimer() { + return this.timer; + } + + public void resetTimer() { + this.timer = Vice.getCrateManager().getCooldown() * 60L; + } + + public void tick() { +// if (this.timer > 0) { +// this.updateHologram("&7Start a Dropship to refill!"); +// this.timer--; +// } else if (this.timer == 0) +// this.restock(); + + if (this.looted) { + this.updateHologram("&f&oStart a Dropship to refill!"); + } else { + this.updateHologram("&6&lRestocked!"); + } + + this.updateVisibility(); + } + + public void restock(Area.DropType type) { + this.closeOutViewers(); //Close out inventory viewers before restocking. + + BlockState state = this.location.getBlock().getState(); + if (!(state instanceof Chest)) { + Vice.log("Loot Chest at location " + Utils.blockLocationToString(this.location) + " is not a Chest!"); + this.updateHologram("&c&lERROR: Please contact an admin!"); +// this.timer = -1; + return; + } + + Chest chest = (Chest) state; +// try { +// Class<?> craftChestClass = ReflectionUtil.getOBCClass("block.CraftChest"); +// Object craftChest = craftChestClass.cast(chest); +// Method getTileEntity = craftChestClass.getMethod("getTileEntity"); +// Object tileEntity = getTileEntity.invoke(craftChest); +// Class<?> tileEntityClass = ReflectionUtil.getNMSClass("TileEntityChest"); +// Method setTitle = tileEntityClass.getMethod("a", String.class); +// setTitle.invoke(tileEntity, Utils.f("&e&lLoot Crate")); +// } catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException e) { +// e.printStackTrace(); +// } + chest.setCustomName(Utils.f("&e&lLoot Crate")); + chest.update(); + + Inventory inv = chest.getBlockInventory(); + inv.clear(); + + List<LootItem> items = Vice.getCrateManager().dropItems.get(type).stream().filter(item -> Utils.calculateChance(item.getChance())).collect(Collectors.toList()); + items.forEach(item -> { + ItemStack stack = item.getGameItem().getItem(); + stack.setAmount(Utils.randomNumber(item.getMin(), item.getMax())); + Utils.putItemInInventoryRandomly(inv, stack); + }); + + this.setLooted(false); +// this.updateHologram("&7Restocked!"); +// this.timer = -1; + } + + private void updateHologram(String text) { + if (this.hologram == null) { + this.hologram = HologramsAPI.createHologram(Vice.getInstance(), this.location.clone().add(0.5, 2, 0.5)); + this.textLines.add(this.hologram.appendTextLine(Utils.f("&e&lDropship Crate"))); + this.textLines.add(this.hologram.appendTextLine(Utils.f(text))); + this.hologram.getVisibilityManager().setVisibleByDefault(false); + } else + this.textLines.get(1).setText(Utils.f(text)); + + } + + private void updateVisibility() { + VisibilityManager v = this.hologram.getVisibilityManager(); + for (Player player : Bukkit.getOnlinePlayers()) { + if (Objects.equals(player.getWorld(), this.location.getWorld()) + && player.getLocation().distanceSquared(this.location) < 225) { + if (!v.isVisibleTo(player)) + v.showTo(player); + } else if (v.isVisibleTo(player)) + v.hideTo(player); + } + } + + public void removeHologram() { + this.hologram.delete(); + this.hologram = null; + this.textLines.clear(); + + } + + private void closeOutViewers() { + if (this.location == null) return; + Block block = this.location.getBlock(); + if (block.getType() != Material.CHEST) return; + Chest chest = (Chest) block.getState(); + chest.getInventory().getViewers().forEach(HumanEntity::closeInventory); + } + + public void setLooted(boolean looted) { + this.looted = looted; + } + + public boolean isLooted() { + return looted; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/lootcrates/LootCrateCommand.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/lootcrates/LootCrateCommand.java new file mode 100644 index 0000000..0bfe020 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/lootcrates/LootCrateCommand.java @@ -0,0 +1,190 @@ +package net.grandtheftmc.vice.lootcrates; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.areas.obj.Area; +import net.grandtheftmc.vice.items.GameItem; +import net.grandtheftmc.vice.users.ViceUser; +import net.grandtheftmc.vice.users.storage.BooleanStorageType; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.Iterator; +import java.util.List; +import java.util.UUID; + +public class LootCrateCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command c, String lbl, String[] args) { + if (!(s instanceof Player)) { + s.sendMessage(Lang.NOTPLAYER.s()); + return true; + } + Player player = (Player) s; + if (!player.hasPermission("lootcrate.admin")) { + player.sendMessage(Lang.NOPERM.s()); + return true; + } + UUID uuid = player.getUniqueId(); + ViceUser user = Vice.getUserManager().getLoadedUser(uuid); + if (args.length == 0) { + s.sendMessage(Utils.f("&c/lootcrates add")); + s.sendMessage(Utils.f("&c/lootcrates remove")); + s.sendMessage(Utils.f("&c/lootcrates cooldown <minutes> ")); + s.sendMessage(Utils.f("&c/lootcrates check")); + s.sendMessage(Utils.f("&c/lootcrates restock")); + s.sendMessage(Utils.f("&c/lootcrates list [page]")); + + s.sendMessage(Utils.f("&c/lootcrates items <itemName> <chance> <min> <max>")); + s.sendMessage(Utils.f("&c/lootcrates removeitem <itemName>")); + s.sendMessage(Utils.f("&c/lootcrates load")); + s.sendMessage(Utils.f("&c/lootcrates save")); + return true; + } + switch (args[0].toLowerCase()) { + case "add": + s.sendMessage(Lang.LOOTCRATES.f("&7Right click on the chest you want to turn in to a Loot Crate. Make sure the chest has display name &e&lLoot Crate&7!")); + user.setBooleanToStorage(BooleanStorageType.ADDING_LOOTCRATE, true); + return true; + case "remove": + s.sendMessage(Lang.LOOTCRATES.f("&7Right click on the chest you would like to remove as a Loot Crate.")); + user.setBooleanToStorage(BooleanStorageType.REMOVING_LOOTCRATE, true); + return true; + case "cooldown": + if (args.length != 2) { + s.sendMessage(Utils.f("&c/lootcrate cooldown <minutes> ")); + return true; + } + try { + Vice.getCrateManager().setCooldown(Integer.parseInt(args[1])); + } catch (NumberFormatException e) { + s.sendMessage(Utils.f("&cThe cooldown must be a number measured in minutes!")); + return true; + } + s.sendMessage(Lang.LOOTCRATES.f("&7The cooldown on Loot Crates was set to &a" + + Vice.getCrateManager().getCooldown() + " minutes&7!")); + return true; + case "check": + s.sendMessage(Lang.LOOTCRATES + .f("&7Right click on the Loot Crate of which you would like to check the cooldown;")); + user.setBooleanToStorage(BooleanStorageType.CHECKING_LOOTCRATE, true); + return true; + case "restock": + s.sendMessage(Lang.LOOTCRATES.f("&7Right click the Loot Crate which you want to restock.")); + user.setBooleanToStorage(BooleanStorageType.RESTOCKING_LOOTCRATE, true); + return true; + case "removeitem": { + if (args.length != 2) { + s.sendMessage(Utils.f("&c/lootcrate removeitem <itemName>")); + return true; + } + GameItem item = Vice.getItemManager().getItem(args[1]); + if (item == null) { + s.sendMessage(Lang.LOOTCRATES.f("&7That GameItem does not exist!")); + return true; + } + LootItem lootItem = Vice.getCrateManager().getItem(item); + if (lootItem == null) { + s.sendMessage(Lang.LOOTCRATES.f("&7That GameItem is not added to Loot Crates!")); + return true; + } + Vice.getCrateManager().removeItem(lootItem); + s.sendMessage(Lang.LOOTCRATES.f("&7GameItem &a" + item.getName() + "&7 was removed from LootCrates!")); + return true; + } + case "items": + if (args.length < 3) { + s.sendMessage(Utils.f("&c/lootcrate items <itemName> <chance> [min] [max]")); + return true; + } + GameItem item = Vice.getItemManager().getItem(args[1]); + if (item == null) { + s.sendMessage(Lang.LOOTCRATES.f("&7That GameItem does not exist!")); + return true; + } + + double chance; + int min; + int max; + try { + chance = Double.parseDouble(args[2]); + min = args.length > 3 ? Integer.parseInt(args[3]) : 1; + max = args.length > 4 ? Integer.parseInt(args[4]) : min; + } catch (NumberFormatException e) { + s.sendMessage(Lang.LOOTCRATES.f("&7The chance must be a double, min and max must be integers!")); + return true; + } + if (min > max) { + s.sendMessage(Lang.LOOTCRATES.f("&7The maximum must be greater than or equal to the minimum!")); + return true; + } + LootItem lootItem = Vice.getCrateManager().getItem(item); + if (lootItem == null) + Vice.getCrateManager().addItem(new LootItem(item.getName(), chance, min, max, false, Area.DropType.DEFAULT)); + else { + lootItem.setChance(chance); + lootItem.setMin(min); + lootItem.setMax(max); + } + s.sendMessage(Lang.LOOTCRATES + .f("&7You added GameItem &a" + item.getName() + "&7 to LootCrates with a chance of &a" + chance + + "&7, a min of &a" + min + "&7 and a max of &a" + max + "&7!")); + return true; + case "list": + List<LootCrate> crates = Vice.getCrateManager().getCrates(); + int page = 1; + if (args.length > 1) { + try { + page = Integer.parseInt(args[1]); + } catch (NumberFormatException e) { + s.sendMessage(Lang.LOOTCRATES.f("&cThe page must be a number!")); + return true; + } + } + if (page < 1) { + s.sendMessage(Lang.LOOTCRATES.f("&7The page must be a positive number!")); + return true; + } + int pages = crates.size() / 6 + 1; + s.sendMessage(Utils.f(" &7&m---------------&7[&e&l Loot Crates List &7Page &e" + page + "&7/&e" + pages + + " &7&m]---------------")); + Iterator<LootCrate> it = crates.iterator(); + for (int i = 0; i < page * 6; i++) { + if (!it.hasNext()) + return true; + LootCrate cr = it.next(); + if (i < page * 6 - 6) + continue; + s.sendMessage(Utils.f("&e" + Utils.blockLocationToString(cr.getLocation()))); + } + return true; + case "load": + Vice.getSettings().setLootCratesConfig(Utils.loadConfig("lootcrates")); + Vice.getSettings().setLootConfig(Utils.loadConfig("loot")); + Vice.getCrateManager().loadCrates(); + s.sendMessage(Lang.LOOTCRATES.f("&7Loaded LootCrates!")); + return true; + case "save": + Vice.getCrateManager().saveCrates(); + s.sendMessage(Lang.LOOTCRATES.f("&7Saved LootCrates!")); + return true; + default: + s.sendMessage(Utils.f("&c/lootcrates add")); + s.sendMessage(Utils.f("&c/lootcrates remove")); + s.sendMessage(Utils.f("&c/lootcrates cooldown <minutes> ")); + s.sendMessage(Utils.f("&c/lootcrates check")); + s.sendMessage(Utils.f("&c/lootcrates restock")); + s.sendMessage(Utils.f("&c/lootcrates list [page]")); + s.sendMessage(Utils.f("&c/lootcrates items <itemName> <chance> <min> <max>")); + s.sendMessage(Utils.f("&c/lootcrates removeitem <itemName>")); + s.sendMessage(Utils.f("&c/lootcrates load")); + s.sendMessage(Utils.f("&c/lootcrates save")); + return true; + } + } + +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/lootcrates/LootItem.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/lootcrates/LootItem.java new file mode 100644 index 0000000..6678f47 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/lootcrates/LootItem.java @@ -0,0 +1,84 @@ +package net.grandtheftmc.vice.lootcrates; + +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.areas.obj.Area; +import net.grandtheftmc.vice.drugs.Drug; +import net.grandtheftmc.vice.drugs.DrugService; +import net.grandtheftmc.vice.drugs.items.DrugItem; +import net.grandtheftmc.vice.items.GameItem; +import org.bukkit.inventory.ItemStack; + +import java.util.Optional; + +public class LootItem { + + private String item; + private double chance; + private int min; + private int max; + private boolean isDrug; + private Area.DropType type; + + public LootItem(String item, double chance, int min, int max, boolean isDrug, Area.DropType type) { + this.item = item; + this.chance = chance; + this.min = min; + this.max = max; + this.isDrug = isDrug; + this.type = type; + } + + public String getItem() { + return this.item; + } + + public void setItem(String item) { + this.item = item; + } + + public GameItem getGameItem() { + if(!isDrug){ + return Vice.getItemManager().getItem(this.item); + } else { + Optional<Drug> drug = ((DrugService) Vice.getDrugManager().getService()).getDrug(item); + if (!drug.isPresent()) { + return null; + } + DrugItem itema = DrugItem.getByDrug(drug.get()); + ItemStack is = itema.getItemStack(); + return new GameItem(item, is, is.getItemMeta().getDisplayName()); + } + } + + public boolean isDrug(){ + return isDrug; + } + + public double getChance() { + return this.chance; + } + + public void setChance(double chance) { + this.chance = chance; + } + + public int getMin() { + return this.min; + } + + public void setMin(int min) { + this.min = min; + } + + public int getMax() { + return this.max; + } + + public void setMax(int max) { + this.max = max; + } + + public Area.DropType getDropType() { + return type; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/BaseMachine.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/BaseMachine.java new file mode 100644 index 0000000..a09bbc2 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/BaseMachine.java @@ -0,0 +1,215 @@ +package net.grandtheftmc.vice.machine; + +import com.google.common.collect.Maps; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Utils; +import net.grandtheftmc.core.util.C; +import net.grandtheftmc.vice.machine.data.MachineData; +import net.grandtheftmc.vice.machine.data.MachineDataType; +import net.grandtheftmc.vice.machine.recipe.misc.MachineRecipeData; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; + +import java.util.HashMap; + +public abstract class BaseMachine { + + private final HashMap<MachineDataType, MachineData> machineData; + + private int[] openSlots; + private int[] outputSlots; + private int[] blockedSlots; + + // Main data + private int uniqueIdentifier = -1; + private final int machineIdentifier; + private Location location = null; + private boolean enabled = false; + + private final String name; + private final Material material; + private final Inventory inventory; + private ItemStack machineItem; + private ItemStack[] contents; + + private MachineRecipeData recipeData = null; + + /** + * Construct a Machine + */ + public BaseMachine(int machineIdentifier, String name, Material material) { + this(machineIdentifier, name, material, 3); + } + + /** + * Construct a Machine + */ + public BaseMachine(int machineIdentifier, String name, Material material, int inventorySize) { + this.machineIdentifier = machineIdentifier; + this.name = name; + this.material = material; + + this.machineData = Maps.newHashMap(); + + this.inventory = Bukkit.createInventory(null, inventorySize * 9, Utils.f("&e" + name)); + } + + public int getUniqueIdentifier() { + return uniqueIdentifier; + } + + public void setUniqueIdentifier(int uniqueIdentifier) { + this.uniqueIdentifier = uniqueIdentifier; + } + + public int getMachineIdentifier() { + return machineIdentifier; + } + + public Location getLocation() { + return location; + } + + public void setLocation(Location location) { + this.location = location; + } + + public String getName() { + return name; + } + + public Material getMaterial() { + return material; + } + + public Inventory getInventory() { + return inventory; + } + + public boolean isEnabled() { + return enabled; + } + + public void setEnabled(boolean enabled) { + this.enabled = enabled; + } + + public ItemStack getMachineItem() { + return machineItem; + } + + public void setMachineItem(ItemStack machineItem) { + this.machineItem = machineItem; + } + + public ItemStack[] getContents() { + this.contents = this.inventory.getContents(); + return contents; + } + + public void setContents(ItemStack[] contents) { + this.contents = contents; + this.inventory.setContents(contents); + } + + public int[] getOpenSlots() { + return openSlots; + } + + public void setOpenSlots(int... openSlots) { + this.openSlots = openSlots; + } + + public void setOutputSlots(int... outputSlots) { + this.outputSlots = outputSlots; + } + + public int[] getOutputSlots() { + return outputSlots; + } + + public boolean isOutputSlot(int slot) { + for (int i : this.outputSlots) + if (i == slot) return true; + return false; + } + + public int[] getBlockedSlots() { + return blockedSlots; + } + + public void setBlockedSlots(int... blockedSlots) { + this.blockedSlots = blockedSlots; + } + + public boolean isBlockedSlot(int slot) { + for (int i : this.blockedSlots) + if (i == slot) return true; + return false; + } + + public void setData(MachineDataType type, MachineData data) { + this.machineData.put(type, data); + } + + public MachineData getData(MachineDataType type) { + return this.machineData.getOrDefault(type, null); + } + + public void updateFuel() { + MachineData data = this.getData(MachineDataType.FUEL); + if (data == null) return; + if(this.inventory.getItem(19)==null) { + Core.error("there is a broken inventory at " + this.location); + return; + } + this.inventory.getItem(19).setDurability((short) data.getTexture()); +// ServerUtil.debug("FUEL: " + this.fuel + " - " + this.getFuelByte()); + } + + public void updateDurability() { + MachineData data = this.getData(MachineDataType.DURABILITY); + if (data == null) return; + + this.inventory.getItem(25).setDurability((short) data.getTexture()); +// ServerUtil.debug("DURABILITY: " + this.durability + " - " + this.getDurabilityByte()); + } + + public void updateProgress() { + MachineData data = this.getData(MachineDataType.PROGRESS); + if (data == null) return; + + if(this.inventory.getItem(11)==null) { + Core.error("there is a broken inventory at " + this.location); + return; + } + + this.inventory.getItem(11).setDurability((short) data.getTexture()); +// ServerUtil.debug("PROGRESS: " + this.progress + " - " + this.getProgressByte()); + } + + public void updateAllItems() { + updateFuel(); + updateDurability(); + updateProgress(); + } + + public MachineRecipeData getRecipeData() { + return recipeData; + } + + public void setRecipeData(MachineRecipeData recipeData) { + this.recipeData = recipeData; + } + + public boolean isRecipeActive() { + return this.recipeData != null; + } + + public String i(String icon, int amount) { + return C.RESET + icon + C.GRAY + "x" + amount + C.RESET; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/MachineCommand.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/MachineCommand.java new file mode 100644 index 0000000..e6ce503 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/MachineCommand.java @@ -0,0 +1,33 @@ +package net.grandtheftmc.vice.machine; + +import net.grandtheftmc.core.commands.CoreCommand; +import net.grandtheftmc.core.commands.RankedCommand; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.vice.machine.repair.MachineRepairMenu; +import org.bukkit.entity.Player; + +public class MachineCommand extends CoreCommand<Player> implements RankedCommand { + + private final MachineManager machineManager; + + public MachineCommand(MachineManager machineManager) { + super("machine", "Admin command to give a machine."); + this.machineManager = machineManager; + } + + @Override + public void execute(Player sender, String[] strings) { + if (strings.length == 0) { + new MachineRepairMenu(this.machineManager).openInventory(sender); + return; + } + + sender.getInventory().addItem(machineManager.getMachineItemById(Integer.parseInt(strings[0]))); + sender.updateInventory(); + } + + @Override + public UserRank requiredRank() { + return UserRank.ADMIN; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/MachineComponent.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/MachineComponent.java new file mode 100644 index 0000000..27773ba --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/MachineComponent.java @@ -0,0 +1,595 @@ +package net.grandtheftmc.vice.machine; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.database.BaseDatabase; +import net.grandtheftmc.core.util.C; +import net.grandtheftmc.core.util.Component; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.dao.MachineDAO; +import net.grandtheftmc.vice.items.GameItem; +import net.grandtheftmc.vice.machine.data.MachineData; +import net.grandtheftmc.vice.machine.data.MachineDataType; +import net.grandtheftmc.vice.machine.event.MachineFuelEvent; +import net.grandtheftmc.vice.machine.event.MachineItemTransferEvent; +import net.grandtheftmc.vice.machine.event.MachinePlaceEvent; +import net.grandtheftmc.vice.machine.event.MachineRecipeCompleteEvent; +import net.grandtheftmc.vice.machine.recipe.MachineRecipeManager; +import net.grandtheftmc.vice.machine.recipe.misc.RecipeOutput; +import net.grandtheftmc.vice.utils.ItemStackUtil; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; +import org.bukkit.block.BlockState; +import org.bukkit.block.Hopper; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.entity.minecart.HopperMinecart; +import org.bukkit.event.EventHandler; +import org.bukkit.event.block.Action; +import org.bukkit.event.block.BlockBreakEvent; +import org.bukkit.event.block.BlockPlaceEvent; +import org.bukkit.event.entity.EntityExplodeEvent; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryMoveItemEvent; +import org.bukkit.event.inventory.InventoryType; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.world.ChunkLoadEvent; +import org.bukkit.event.world.ChunkUnloadEvent; +import org.bukkit.inventory.EquipmentSlot; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.InventoryHolder; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.Arrays; +import java.util.Iterator; +import java.util.Optional; + +public class MachineComponent implements Component<MachineComponent, Vice> { + + private final MachineManager machineManager; + private final MachineRecipeManager recipeManager; + + public MachineComponent(MachineManager machineManager, MachineRecipeManager recipeManager) { + this.machineManager = machineManager; + this.recipeManager = recipeManager; + +// ProtocolLibrary.getProtocolManager().addPacketListener(new MachineChunkPacket()); + } + + @Override + public MachineComponent onDisable(Vice plugin) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + this.machineManager.getMachines().forEach(machine -> MachineDAO.updateMachineData(connection, machine)); + } catch (SQLException e) { + e.printStackTrace(); + } + + return this; + } + + @EventHandler(ignoreCancelled = true) + protected final void onBlockPlace(BlockPlaceEvent event) { + ItemStack itemStack = event.getItemInHand(); + if (itemStack == null) return; + + ServerUtil.debug(itemStack.getType().name()); + if (!this.machineManager.isType(itemStack.getType())) return; + if (!itemStack.hasItemMeta()) return; + Optional<BaseMachine> optional = this.machineManager.constructByItem(itemStack); + if (!optional.isPresent()) return; + MachinePlaceEvent placeEvent = new MachinePlaceEvent(event.getPlayer(), event.getBlockPlaced().getLocation(), optional.get()); + Bukkit.getPluginManager().callEvent(placeEvent); + if (placeEvent.isCancelled()) { + event.setCancelled(true); + } + } + + @EventHandler(ignoreCancelled = true) + protected final void onMachinePlace(MachinePlaceEvent event) { + event.getMachine().setLocation(event.getLocation()); + this.machineManager.addMachine(event.getMachine()); + ServerUtil.debug("Machine added"); + + ServerUtil.runTaskAsync(() -> { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + MachineDAO.addMachine(connection, event.getMachine()); + MachineDAO.updateMachineData(connection, event.getMachine()); + ServerUtil.debug("Machine query complete."); + + ServerUtil.runTask(() -> event.getMachine().setEnabled(true)); + + } catch (SQLException e) { + e.printStackTrace(); + } + }); + } + + @EventHandler(ignoreCancelled = true) + protected final void onBlockBreak(BlockBreakEvent event) { + if (!this.machineManager.isType(event.getBlock().getType())) return; + + Optional<BaseMachine> optional = this.machineManager.getMachineByLocation(event.getBlock().getLocation()); + if (!optional.isPresent()) return; + + this.machineManager.removeMachine(optional.get()); + ServerUtil.runTaskAsync(() -> { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + MachineDAO.removeMachine(connection, optional.get().getUniqueIdentifier()); + } catch (SQLException e) { + e.printStackTrace(); + } + }); + + if (event.getBlock().getState() instanceof InventoryHolder) { + InventoryHolder holder = (InventoryHolder) event.getBlock().getState(); + holder.getInventory().clear(); + } + event.setDropItems(false); + + ItemStack machineFragment = Vice.getItemManager().getItem("machinefragment").getItem(); + ItemMeta meta = machineFragment.getItemMeta(); + meta.setLore(Arrays.asList( + C.GRAY + C.ITALIC + " " + optional.get().getName(), + "", + C.AQUA + C.BOLD + "INFO", + C.GRAY + " Visit the Machine Mechanic", + C.GRAY + " at spawn to turn these fragments", + C.GRAY + " into a functional machine!" + )); + + machineFragment.setItemMeta(meta); + machineFragment = ItemStackUtil.addTag(machineFragment, "machineid", optional.get().getMachineIdentifier()); + + event.getBlock().getWorld().dropItemNaturally(event.getBlock().getLocation(), machineFragment); + + for (int slot : optional.get().getOpenSlots()) { + ItemStack itemStack = optional.get().getInventory().getItem(slot); + if (itemStack == null || itemStack.getType() == Material.AIR) continue; + event.getBlock().getWorld().dropItemNaturally(event.getBlock().getLocation(), itemStack); + } + + for (int slot : optional.get().getOutputSlots()) { + ItemStack itemStack = optional.get().getInventory().getItem(slot); + if (itemStack == null || itemStack.getType() == Material.AIR) continue; + event.getBlock().getWorld().dropItemNaturally(event.getBlock().getLocation(), itemStack); + } + + for (int slot : optional.get().getData(MachineDataType.FUEL).getSlots()) { + ItemStack itemStack = optional.get().getInventory().getItem(slot); + if (itemStack == null || itemStack.getType() == Material.AIR) continue; + event.getBlock().getWorld().dropItemNaturally(event.getBlock().getLocation(), itemStack);// + } + } + + @EventHandler + public void onExplode(EntityExplodeEvent event) { + Iterator<Block> iter = event.blockList().iterator(); + + while (iter.hasNext()) { + Block b = iter.next(); + Optional<BaseMachine> optional = this.machineManager.getMachineByLocation(b.getLocation()); + if (!optional.isPresent()) continue; + + this.machineManager.removeMachine(optional.get()); + ServerUtil.runTaskAsync(() -> { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + MachineDAO.removeMachine(connection, optional.get().getUniqueIdentifier()); + } catch (SQLException e) { + e.printStackTrace(); + } + }); + + if (b.getState() instanceof InventoryHolder) { + InventoryHolder holder = (InventoryHolder) b.getState(); + holder.getInventory().clear(); + } + + ItemStack machineFragment = Vice.getItemManager().getItem("machinefragment").getItem(); + ItemMeta meta = machineFragment.getItemMeta(); + meta.setLore(Arrays.asList( + C.GRAY + C.ITALIC + " " + optional.get().getName(), + "", + C.AQUA + C.BOLD + "INFO", + C.GRAY + " Visit the Machine Mechanic", + C.GRAY + " at spawn to turn these fragments", + C.GRAY + " into a functional machine!" + )); + + machineFragment.setItemMeta(meta); + machineFragment = ItemStackUtil.addTag(machineFragment, "machineid", optional.get().getMachineIdentifier()); + + b.getWorld().dropItemNaturally(b.getLocation(), machineFragment); + + for (int slot : optional.get().getOpenSlots()) { + ItemStack itemStack = optional.get().getInventory().getItem(slot); + if (itemStack == null || itemStack.getType() == Material.AIR) continue; + b.getWorld().dropItemNaturally(b.getLocation(), itemStack); + } + + for (int slot : optional.get().getOutputSlots()) { + ItemStack itemStack = optional.get().getInventory().getItem(slot); + if (itemStack == null || itemStack.getType() == Material.AIR) continue; + b.getWorld().dropItemNaturally(b.getLocation(), itemStack); + } + + for (int slot : optional.get().getData(MachineDataType.FUEL).getSlots()) { + ItemStack itemStack = optional.get().getInventory().getItem(slot); + if (itemStack == null || itemStack.getType() == Material.AIR) continue; + b.getWorld().dropItemNaturally(b.getLocation(), itemStack);// + } + + b.setType(Material.AIR); + iter.remove(); + } + } + + @EventHandler(ignoreCancelled = true) + protected final void onInteract(PlayerInteractEvent event) { + if (event.getHand() != EquipmentSlot.HAND) return; + if (event.getAction() != Action.RIGHT_CLICK_BLOCK) return; + + Player player = event.getPlayer(); + Block block = event.getClickedBlock(); + if (block == null || block.getType() == Material.AIR) return; + + ItemStack hand = event.getPlayer().getInventory().getItemInMainHand(); + if (event.getPlayer().isSneaking() && (hand != null && hand.getType() != Material.AIR)) return; + + + Optional<BaseMachine> optional = this.machineManager.getMachineByLocation(block.getLocation()); + if (!optional.isPresent()) return; + + event.setCancelled(true); + + GameItem gameItem = Vice.getItemManager().getItem(hand); + if(gameItem!=null && gameItem.getName().equalsIgnoreCase("machinefragment") && ChatColor.stripColor(hand.getItemMeta().getLore().get(0)).replaceAll("\\s+","").equals(optional.get().getName().replaceAll("\\s+",""))) { + double percentDiff = optional.get().getData(MachineDataType.DURABILITY).getCurrent() / optional.get().getData(MachineDataType.DURABILITY).getMax() * 100; + if(percentDiff > 80) { + player.sendMessage(Lang.VICE.f("&cThat machine is not at least 20% damaged, you'd be wasting this machine fragment!")); + } + else { + MachineData durability = optional.get().getData(MachineDataType.DURABILITY); + durability.setCurrent(durability.getCurrent() + (int)Math.round(durability.getMax() *.20)); + optional.get().updateDurability(); + player.sendMessage(Lang.VOTE.f("&6You have repaired your machine by 20% &7(&6Current Durability: &b" + Math.round(percentDiff + 20) + "%&7)")); + hand.setAmount(hand.getAmount()-1); + player.updateInventory(); + } + return; + } + + + if (optional.get().isEnabled()) { + event.getPlayer().openInventory(optional.get().getInventory()); + } + } + + @EventHandler(ignoreCancelled = true) + protected final void onInventoryClick(InventoryClickEvent event) { + if (event.getInventory() == null || event.getView().getTopInventory() == null) return; + if (event.getWhoClicked() == null) return; + +// ServerUtil.debug("[>---------------------------<]"); +// ServerUtil.debug("Action: " + event.getAction().name()); +// ServerUtil.debug("Slot: " + event.getSlot()); +// ServerUtil.debug("Raw Slot: " + event.getRawSlot()); +// ServerUtil.debug("Click Type: " + event.getClick().name()); +// ServerUtil.debug("Clicked Title: " + (event.getClickedInventory() == null ? "." : event.getClickedInventory().getTitle())); +// ServerUtil.debug("Clicked Item: " + (event.getCurrentItem() == null ? "." : event.getCurrentItem().getType())); +// ServerUtil.debug("Cursor Item: " + (event.getCursor() == null ? "." : event.getCursor().getType())); +// ServerUtil.debug("Slot Type: " + event.getSlotType().name()); +// ServerUtil.debug("Hotbar Button: " + event.getHotbarButton()); +// ServerUtil.debug("[>---------------------------<]"); +// ServerUtil.debug(" "); + + Inventory top = event.getView().getTopInventory(); + if (top.getType() != InventoryType.CHEST) return; + + if(top.getHolder()!=null) return; //basically if the inventory is created out of thin air. So players can't rename their own chests. + + Optional<BaseMachine> optional = this.machineManager.getStatues().stream().filter(m -> m.getInventory().getName().equals(top.getName())).findFirst(); + if (!optional.isPresent()) return; + + + if (event.isShiftClick()) { + if (event.getRawSlot() >= 27) { + int slot = top.firstEmpty(); + int addSlot = top.first(event.getCurrentItem().getType()); + + if (optional.get().isOutputSlot(slot)) { + event.setCancelled(true); + ((Player) event.getWhoClicked()).updateInventory(); + return; + } + + MachineData data = optional.get().getData(MachineDataType.FUEL); + if (data.isSlot(slot)) { + if (!MachineUtil.isFuelType(event.getCurrentItem().getType())) { + event.setCancelled(true); + ((Player) event.getWhoClicked()).updateInventory(); + } else { + MachineFuelEvent machineFuelEvent = new MachineFuelEvent(optional.get(), data, event.getCursor().getType(), event.getRawSlot()); + Bukkit.getPluginManager().callEvent(machineFuelEvent); + if (machineFuelEvent.isCancelled()) { + event.setCancelled(true); + ((Player) event.getWhoClicked()).updateInventory(); + } + } + } + } + } + + //Check if the clicked slot is blocked. + if (optional.get().isBlockedSlot(event.getRawSlot())) { + event.setCancelled(true); + ((Player) event.getWhoClicked()).updateInventory(); + return; + } + + if (optional.get().isOutputSlot(event.getRawSlot())) { + switch (event.getAction()) { + case PICKUP_ALL: + case PICKUP_SOME: + case PICKUP_HALF: + case PICKUP_ONE: + case MOVE_TO_OTHER_INVENTORY: + break; + + default: + event.setCancelled(true); + ((Player) event.getWhoClicked()).updateInventory(); + break; + } + return; + } + + MachineData data = optional.get().getData(MachineDataType.FUEL); + if (data != null) { + if (data.isSlot(event.getRawSlot())) { + switch (event.getAction()) { + case PICKUP_ALL: + case PICKUP_SOME: + case PICKUP_HALF: + case PICKUP_ONE: + case COLLECT_TO_CURSOR: + case MOVE_TO_OTHER_INVENTORY: + break; + + case PLACE_ALL: + case PLACE_SOME: + case PLACE_ONE: + case SWAP_WITH_CURSOR: + if (event.getCursor() == null || !MachineUtil.isFuelType(event.getCursor().getType())) { + event.setCancelled(true); + ((Player) event.getWhoClicked()).updateInventory(); + return; + } + + MachineFuelEvent machineFuelEvent = new MachineFuelEvent(optional.get(), data, event.getCursor().getType(), event.getRawSlot()); + Bukkit.getPluginManager().callEvent(machineFuelEvent); + if (machineFuelEvent.isCancelled()) { + event.setCancelled(true); + ((Player) event.getWhoClicked()).updateInventory(); + } + break; + + //TODO: Change this to listen on 'default' + case DROP_ALL_CURSOR: + case DROP_ONE_CURSOR: + case DROP_ALL_SLOT: + case DROP_ONE_SLOT: + case HOTBAR_MOVE_AND_READD: + case HOTBAR_SWAP: + case CLONE_STACK: + case UNKNOWN: + event.setCancelled(true); + ((Player) event.getWhoClicked()).updateInventory(); + break; + } + } + } + } + + @EventHandler(ignoreCancelled = true) + protected final void onMachineFuel(MachineFuelEvent event) { +// MachineData data = event.getMachine().getData(MachineDataType.FUEL); +// data.add(20); +// ServerUtil.debug("FUEL ADDED."); + } + + @EventHandler + protected final void onMachineRecipeComplete(MachineRecipeCompleteEvent event) { + BaseMachine m = event.getMachine(); + MachineData fuelData = m.getData(MachineDataType.FUEL); + fuelData.take(event.getRecipeData().getRecipe().getFuelUsage()); + m.updateFuel(); + + MachineData durabilityData = m.getData(MachineDataType.DURABILITY); + durabilityData.take(event.getRecipeData().getRecipe().getDurabilityUsage()); + m.updateDurability(); + + + + for (int i = 0; i < event.getRecipeData().getRecipe().getOutput().length; i++) { + RecipeOutput output = event.getRecipeData().getRecipe().getOutput()[i]; + + ItemStack itemStack = output.getItemStack().clone(); + itemStack.setAmount(output.getAmount()); + + Optional<Entity> minecart = m.getLocation().getWorld().getNearbyEntities(m.getLocation(), 2, 2, 2).stream().filter(e -> e.getType() == EntityType.MINECART_HOPPER).findFirst(); + if(minecart.isPresent()) { + HopperMinecart storage = (HopperMinecart)minecart.get(); + if(storage.getInventory().firstEmpty()==-1) { + MachineUtil.addOutput(m.getInventory(), m.getOutputSlots()[i], itemStack); + continue; + } + storage.getInventory().addItem(itemStack); + if(m.getInventory().getItem(m.getOutputSlots()[i])!=null) { + storage.getInventory().addItem(m.getInventory().getItem(m.getOutputSlots()[i])); + m.getInventory().setItem(m.getOutputSlots()[i], new ItemStack(Material.AIR)); + } + continue; + } + + Block block = m.getLocation().getBlock().getRelative(BlockFace.DOWN); + if (block == null || block.getType() == Material.AIR) { + MachineUtil.addOutput(m.getInventory(), m.getOutputSlots()[i], itemStack); + continue; + } + + if (block.getType() != Material.HOPPER) { + MachineUtil.addOutput(m.getInventory(), m.getOutputSlots()[i], itemStack); + continue; + } + + Hopper hopper = (Hopper) block.getState(); + if (hopper.getInventory().firstEmpty() == -1) { + MachineUtil.addOutput(m.getInventory(), m.getOutputSlots()[i], itemStack); + continue; + } + + hopper.getInventory().addItem(itemStack); + if(m.getInventory().getItem(m.getOutputSlots()[i])!=null) { + hopper.getInventory().addItem(m.getInventory().getItem(m.getOutputSlots()[i])); + m.getInventory().setItem(m.getOutputSlots()[i], new ItemStack(Material.AIR)); + } + } + + MachineData progressData = m.getData(MachineDataType.PROGRESS); + progressData.setCurrent(0); + m.updateProgress(); + +// this.recipeManager.removeRecipeData(event.getRecipeData()); + m.setRecipeData(null); + } + + @EventHandler(ignoreCancelled = true) + protected final void onItemMove(InventoryMoveItemEvent event) { + if (event.getInitiator() == null) return; + if (event.getInitiator().getType() != InventoryType.HOPPER) return; + if (event.getInitiator().getLocation() != null) { + if (!event.getInitiator().getLocation().getChunk().isLoaded()) { + event.setCancelled(true); + return; + } + } + + if (event.getItem() == null) return; + if (event.getItem().getType() == Material.AIR) return; + + // Machine -> Hopper + if (event.getSource() != null && event.getSource().getType() == InventoryType.DROPPER) { + + Optional<BaseMachine> optional = this.machineManager.getMachineByLocation(event.getSource().getLocation()); + if (optional.isPresent()) { +// MachineItemTransferEvent itemTransferEvent = new MachineItemTransferEvent(optional.get(), event.getSource(), event.getDestination(), MachineItemTransferEvent.TransferType.FROM_MACHINE, event.getItem()); +// Bukkit.getPluginManager().callEvent(itemTransferEvent); + event.setCancelled(true); + + event.getSource().clear(); + +// if (itemTransferEvent.isTransferred()) { +// //TODO transfer output to hopper. +// } + } + } + + // Hopper -> Machine + if (event.getDestination() != null && event.getDestination().getType() == InventoryType.DROPPER) { + + Optional<BaseMachine> optional = this.machineManager.getMachineByLocation(event.getDestination().getLocation()); + if (optional.isPresent()) { + MachineItemTransferEvent itemTransferEvent = new MachineItemTransferEvent(optional.get(), event.getSource(), event.getDestination(), MachineItemTransferEvent.TransferType.TO_MACHINE, event.getItem()); + Bukkit.getPluginManager().callEvent(itemTransferEvent); + + if (!itemTransferEvent.isTransferred()) { + event.setCancelled(true); + return; + } + + MachineUtil.removeSimilarItem(event.getDestination(), event.getItem()); + event.getDestination().clear(); + } + } + } + + @EventHandler(ignoreCancelled = true) + protected final void onMachineItemTransfer(MachineItemTransferEvent event) { + if (event.getTransferType() == MachineItemTransferEvent.TransferType.TO_MACHINE) { + boolean bool = MachineUtil.tryAddingItem(event.getMachine(), event.getFrom().getLocation(), event.getItemStack()); + event.setTransferred(bool); + + return; + } + } + + @EventHandler + protected final void onChunkLoad(ChunkLoadEvent event) { + if (!event.getWorld().getName().equals("world")) return; + + for (BlockState state : event.getChunk().getTileEntities()) { + if (state == null || state.getBlock() == null) continue; + if (!this.machineManager.isType(state.getType())) continue; + + Optional<BaseMachine> optional = this.machineManager.getMachineByLocation(state.getBlock().getLocation()); + if (!optional.isPresent()) continue; + + if (!optional.get().isEnabled()) + optional.get().setEnabled(true); + + } + } + + @EventHandler + protected final void onChunkUnload(ChunkUnloadEvent event) { + if (!event.getWorld().getName().equals("world")) return; + + for (BlockState state : event.getChunk().getTileEntities()) { + if (state == null || state.getBlock() == null) continue; + if (!this.machineManager.isType(state.getType())) continue; + + Optional<BaseMachine> optional = this.machineManager.getMachineByLocation(state.getBlock().getLocation()); + if (!optional.isPresent()) continue; + + if (optional.get().isEnabled()) + optional.get().setEnabled(false); + + } + } + +// private class MachineChunkPacket implements PacketListener { +// +// @Override +// public void onPacketSending(PacketEvent packetEvent) { +// System.out.println("onPacketSending " + packetEvent.getPacketType().name()); +// } +// +// @Override +// public void onPacketReceiving(PacketEvent packetEvent) { +// System.out.println("onPacketReceiving " + packetEvent.getPacketType().name()); +// } +// +// @Override +// public ListeningWhitelist getSendingWhitelist() { +//// return ListeningWhitelist.newBuilder().types(PacketType.Play.Server.MAP_CHUNK).build(); +// return ListeningWhitelist.EMPTY_WHITELIST; +// } +// +// @Override +// public ListeningWhitelist getReceivingWhitelist() { +// return ListeningWhitelist.newBuilder().types(PacketType.Play.Server.MAP_CHUNK).build(); +// } +// +// @Override +// public Plugin getPlugin() { +// return Vice.getInstance(); +// } +// } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/MachineManager.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/MachineManager.java new file mode 100644 index 0000000..a86e2fe --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/MachineManager.java @@ -0,0 +1,149 @@ +package net.grandtheftmc.vice.machine; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import net.grandtheftmc.core.database.BaseDatabase; +import net.grandtheftmc.core.util.Component; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.dao.MachineDAO; +import net.grandtheftmc.vice.machine.recipe.MachineRecipeManager; +import net.grandtheftmc.vice.machine.recipe.menu.RecipeMenuManager; +import net.grandtheftmc.vice.machine.type.*; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.plugin.java.JavaPlugin; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.*; +import java.util.stream.Collectors; + +public class MachineManager implements Component<MachineComponent, Vice> { + + private final HashSet<BaseMachine> statues; + private final HashMap<Location, BaseMachine> machines; + + private final MachineComponent component; + + public MachineManager(JavaPlugin plugin) { + this.statues = Sets.newHashSet(); + this.machines = Maps.newHashMap(); + + this.statues.addAll(Arrays.asList( + new MachineSmallDryingChamber(), + new MachineMediumDryingChamber(), + new MachineLargeDryingMachine(), + new MachineBeerDistillery(), + new MachineVodkaDistillery(), + new MachineCocaProcessor(), + new MachinePulpCondenser(), + new MachineBasicMethProducer(), + new MachineAdvancedMethProducer(), + new MachineSugarBox() + )); + + new MachineCommand(this); + new RecipeMenuManager(plugin); + MachineRecipeManager recipeManager = new MachineRecipeManager(this); + Bukkit.getPluginManager().registerEvents(this.component = new MachineComponent(this, recipeManager), plugin); + + ServerUtil.runTaskAsync(() -> { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + long start = System.currentTimeMillis(); + for (BaseMachine machine : MachineDAO.getMachines(connection)) { + this.machines.put(machine.getLocation(), machine); + machine.setEnabled(false); + } + System.out.println("Machines loaded(" + this.machines.size() + "), took " + (System.currentTimeMillis() - start) + "ms."); + } catch (SQLException e) { + e.printStackTrace(); + } + }); + + Bukkit.getScheduler().runTaskTimerAsynchronously(plugin, new MachineTask(this, recipeManager), 10, 1); + } + + @Override + public MachineComponent onDisable(Vice plugin) { + this.component.onDisable(plugin); + return this.component; + } + + public Optional<BaseMachine> constructByItem(ItemStack itemStack) { + Optional<BaseMachine> optional = this.statues.stream().filter(m -> itemStack.isSimilar(m.getMachineItem())).findFirst(); + if (!optional.isPresent()) return Optional.empty(); + + switch (optional.get().getMachineIdentifier()) { + case 1: return Optional.of(new MachineSmallDryingChamber()); + case 2: return Optional.of(new MachineMediumDryingChamber()); + case 3: return Optional.of(new MachineLargeDryingMachine()); + case 4: return Optional.of(new MachineBeerDistillery()); + case 5: return Optional.of(new MachineVodkaDistillery()); + case 6: return Optional.of(new MachineCocaProcessor()); + case 7: return Optional.of(new MachinePulpCondenser()); + case 8: return Optional.of(new MachineBasicMethProducer()); + case 9: return Optional.of(new MachineAdvancedMethProducer()); + case 10: return Optional.of(new MachineSugarBox()); + } + + return Optional.empty(); + } + + public ItemStack getMachineItemById(int id) { + Optional<BaseMachine> optional = this.statues.stream().filter(m -> m.getMachineIdentifier() == id).findFirst(); + if (!optional.isPresent()) return new ItemStack(Material.STONE); + + return optional.get().getMachineItem().clone(); + } + + public Optional<BaseMachine> getMachineById(int uniqueId) { + return this.getMachines().stream().filter(m -> { +// ServerUtil.debug(m.getUniqueIdentifier() + " -"); +// ServerUtil.debug(uniqueId + " --"); + return m.getUniqueIdentifier() == uniqueId; + }).findFirst(); + } + + public boolean isType(Material material) { + return this.statues.stream().anyMatch(m -> m.getMaterial() == material); + } + + public void removeMachine(BaseMachine machine) { + if(this.machines.containsKey(machine.getLocation())) + this.machines.remove(machine.getLocation()); + } + + public Collection<BaseMachine> getMachines() { + return this.machines.values().stream().filter(BaseMachine::isEnabled).collect(Collectors.toList()); + } + + public Collection<BaseMachine> getAllMachines() { + return this.machines.values(); + } + + public void addMachine(BaseMachine machine) { + this.machines.put(machine.getLocation(), machine); + } + + public Optional<BaseMachine> getMachineByLocation(Location location) { +// return this.machines.stream().filter(m -> m.getLocation() != null && this.isLoc(m.getLocation(), location)).findFirst(); + return this.machines.containsKey(location) ? Optional.of(this.machines.get(location)) : Optional.empty(); + } + +// public Optional<BaseMachine> isMachine(Inventory inventory) { +// return this.machines.stream().filter(m -> m.getInventory().equals(inventory)).findFirst(); +// } + + private boolean isLoc(Location loc1, Location loc2) { + return loc1.getBlockX() == loc2.getBlockX() && loc1.getBlockY() == loc2.getBlockY() && loc1.getBlockZ() == loc2.getBlockZ(); + } + + public HashSet<BaseMachine> getStatues() { + return this.statues; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/MachineTask.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/MachineTask.java new file mode 100644 index 0000000..555dc2c --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/MachineTask.java @@ -0,0 +1,142 @@ +package net.grandtheftmc.vice.machine; + +import de.slikey.effectlib.util.ParticleEffect; +import net.grandtheftmc.core.util.Callback; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.vice.machine.data.MachineData; +import net.grandtheftmc.vice.machine.data.MachineDataType; +import net.grandtheftmc.vice.machine.recipe.MachineRecipeManager; +import net.grandtheftmc.vice.machine.recipe.misc.MachineRecipeData; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; + +import java.util.Random; + +public final class MachineTask implements Runnable { + + private final MachineManager machineManager; + private final MachineRecipeManager recipeManager; + private final Random random; + + public MachineTask(MachineManager machineManager, MachineRecipeManager recipeManager) { + this.machineManager = machineManager; + this.recipeManager = recipeManager; + this.random = new Random(); + } + + /** + * When an object implementing interface <code>Runnable</code> is used + * to create a thread, starting the thread causes the object's + * <code>run</code> method to be called in that separately executing + * thread. + * <p> + * The general contract of the method <code>run</code> is that it may + * take any action whatsoever. + * + * @see Thread#run() + */ + @Override + public void run() { + for (BaseMachine machine : this.machineManager.getMachines()) { + if (!machine.isEnabled()) continue; + + Location loc = machine.getLocation().clone(); + MachineData data = machine.getData(MachineDataType.DURABILITY); + + if(data !=null) + if(data.getCurrent()==0) { + ParticleEffect.VILLAGER_ANGRY.display(0.3f, 0f, 0.3f, 1, 0, loc.clone().add(0.5, .5, 0.5), 50d);//durability is 0 + continue; + } + + if (!machine.getData(MachineDataType.FUEL).isFull()) { + ServerUtil.runTask(() -> { + if (!refillFuel(machine) && machine.getData(MachineDataType.FUEL).getCurrent() == 0) { + ParticleEffect.REDSTONE.display(255f / 255f, 0f, 0f, 1, 0, loc.clone().add(0.5, 1.1, 0.5), 50d);//no fuel + } + }); + } + + ServerUtil.runTask(() -> { + machine.updateFuel(); + machine.updateDurability(); + }); + + if (machine.getData(MachineDataType.FUEL).isEmpty()) continue; + + if (!machine.isRecipeActive()) { + ServerUtil.runTask(() -> { + if (!this.recipeManager.tryInitRecipe(machine)) { + ParticleEffect.REDSTONE.display(255f / 255f, 102f / 255f, 0f, 1, 0, loc.clone().add(0.5, 1.1, 0.5), 50d);//recipe isnt active + } + }); + continue; + } + else + ParticleEffect.REDSTONE.display(102f/255f,255f/255f,102f/255f, 1,0, loc.clone().add(0.5, 1.1, 0.5), 50d); + + MachineRecipeData recipeData = machine.getRecipeData(); + if (recipeData.next()) { + ServerUtil.runTask(machine::updateProgress); + } + } + } + + public boolean refillFuel(BaseMachine machine) { + for (int i : machine.getData(MachineDataType.FUEL).getSlots()) { + ItemStack item = machine.getInventory().getItem(i); + if (item == null || item.getType() == Material.AIR) return false; + + MachineData data = machine.getData(MachineDataType.FUEL); + if (data == null) return false; + + if(data.getCurrent()+MachineUtil.getFuelByType(item.getType())>data.getMax()) return false; + + if (item.getAmount() <= 1) machine.getInventory().setItem(i, new ItemStack(Material.AIR)); + else item.setAmount(item.getAmount() - 1); + + data.add(MachineUtil.getFuelByType(item.getType()));//TODO: CHANGE TO ACTUAL AMOUNT + } + + return true; + } + + private void doStuff(BaseMachine machine, int i, boolean visual) { + boolean x = this.random.nextBoolean(); + if (!x) return; + + MachineData data; + if (i == 0) { + + //Another random because why not.. lmao + if (this.random.nextBoolean()) return; + + data = machine.getData(MachineDataType.FUEL); + if (data == null) return; + + data.take(1); + machine.updateFuel(); + } + else if (i == 1) { + data = machine.getData(MachineDataType.DURABILITY); + if (data == null) return; + + data.take(2); + machine.updateDurability(); + } + else if (i == 2) { + data = machine.getData(MachineDataType.PROGRESS); + if (data == null) return; + + data.add(1); + machine.updateProgress(); + } + } + + public void canRun(Location location, Callback<Boolean> callback) { + ServerUtil.runTask(() -> { + callback.call(location.getChunk().isLoaded()); + }); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/MachineTesting.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/MachineTesting.java new file mode 100644 index 0000000..4d03fb6 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/MachineTesting.java @@ -0,0 +1,44 @@ +package net.grandtheftmc.vice.machine; + +public class MachineTesting { + + static String[] symbols = {"A", "B", "C", "D", "E"}; + + public static void main(String[] args) { +// int max = 100; +// int current = 95; +// int bars = symbols.length - 1; +// int result = (int) Math.round(getPercentBetweenValues(max, current, bars)); +// System.out.println("" + result); +// +// String str = ""; +// for (int i = 0; i < result; i++) +// str += 'x'; +// +// for (int i = result; i < bars; i++) +// str += 'o'; +// +// System.out.println("" + str); +// System.out.println("" + symbols[result]); + + + //NEW +// long next = System.currentTimeMillis() + ((10 * 1000) / 26); +// int i = 1; +// while (i < 27) { +// if (System.currentTimeMillis() > next) { +// System.out.println(i); +// next = System.currentTimeMillis() + ((10 * 1000) / 26); +// i++; +// } +// } + + + //NEW + System.out.println(getPercentBetweenValues(100, 0.76 * 100, 100)); + } + + public static int getPercentBetweenValues(double goal, double value, int bars) { + return (int) Math.round(value >= goal ? bars : bars - Math.abs((goal - value) / goal * bars)); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/MachineUtil.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/MachineUtil.java new file mode 100644 index 0000000..03fe0a2 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/MachineUtil.java @@ -0,0 +1,145 @@ +package net.grandtheftmc.vice.machine; + +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.vice.machine.data.MachineDataType; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; + +public class MachineUtil { + +// public static Optional<BaseMachine> getMachineByInventory(MachineManager machineManager, Inventory inventory) { +// if (inventory == null) return Optional.empty(); +// if (!inventory.getTitle().contains("Machine-")) return Optional.empty(); +// +// int id = -1; +// try { +// id = Integer.parseInt(inventory.getTitle().split("Machine-")[1]); +// } catch (NumberFormatException e) {} +// +// if (id == -1) return Optional.empty(); +// +// return machineManager.getMachineById(id); +// } +// +// public static Optional<Block> getBlockByInventory(MachineManager machineManager, Inventory inventory) { +// if (inventory == null) return Optional.empty(); +// return Optional.of(inventory.getLocation().getBlock()); +// } + + public static int getFuelByType(Material material) { + switch (material) { + case LAVA_BUCKET: return 100; + case COAL_BLOCK: return 80; + case COAL: return 8; + case WOOD: return 2; + } + + return 0; + } + + public static boolean isFuelType(Material material) { + return material == Material.LAVA_BUCKET || material == Material.COAL || material == Material.WOOD || material == Material.COAL_BLOCK; + } + + public static boolean tryAddingItem(BaseMachine machine, Location from, ItemStack itemStack) { + if (isFuelType(itemStack.getType())) { + for (int slot : machine.getData(MachineDataType.FUEL).getSlots()) { + ItemStack found = machine.getInventory().getItem(slot); + + //If null or AIR, place the item. + if (found == null || found.getType() == Material.AIR) { + machine.getInventory().setItem(slot, itemStack); + return true; + } + + if (found.getType() != itemStack.getType()) continue; + if (found.getAmount() >= found.getMaxStackSize()) continue; + + found.setAmount(found.getAmount() + itemStack.getAmount()); + return true; + } + } + + if (isFuelType(itemStack.getType())) return false; + + for (int slot : machine.getOpenSlots()) { + ItemStack found = machine.getInventory().getItem(slot); + + //If null or AIR, place the item. + if (found == null || found.getType() == Material.AIR) { + machine.getInventory().setItem(slot, itemStack); + return true; + } + + if (!found.isSimilar(itemStack)) continue; + if (found.getAmount() >= found.getMaxStackSize()) continue; + + found.setAmount(found.getAmount() + itemStack.getAmount()); + return true; + } + + return false; + } + + public static void removeSimilarItem(Inventory inventory, ItemStack itemStack) { + if (inventory == null) return; + + for (int i = 0; i < inventory.getSize(); i++) { + int finalI = i; + + ItemStack item = inventory.getItem(i); + if (item == null || item.getType() == Material.AIR) continue; + if (!item.isSimilar(itemStack)) continue; + + if (item.getAmount() <= 1) { + ServerUtil.runTaskLater(() -> inventory.setItem(finalI, new ItemStack(Material.AIR)), 1L); + + ServerUtil.debug(inventory.getTitle() + " - Item removed."); + } + else { + item.setAmount(item.getAmount() - 1); + ServerUtil.runTaskLater(() -> inventory.setItem(finalI, item), 1L); + + ServerUtil.debug(inventory.getTitle() + " - Amount reduced."); + } + } + } + + /** + * @param inventory the inventory of the machine + * @param slot the output slot of the inventory of the machine + */ + public static boolean isOutputFull(Inventory inventory, int slot) { + if(inventory == null) return true; + + ItemStack found = inventory.getItem(slot); + if(found== null || found.getType()== Material.AIR) + return false; + if(found.getAmount() >= 64) + return true; + return false; + } + + public static void addOutput(Inventory inventory, int slot, ItemStack itemStack) { + if (inventory == null) return; + + ItemStack found = inventory.getItem(slot); + if (found == null || found.getType() == Material.AIR) { + inventory.setItem(slot, itemStack); + return; + } + + if (!found.isSimilar(itemStack)) return; + + if (found.getAmount() + itemStack.getAmount() >= 64) { + found.setAmount(64); + return; + } + + if (found.getAmount() < 64) { + found.setAmount(found.getAmount() + itemStack.getAmount()); + } + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/data/MachineData.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/data/MachineData.java new file mode 100644 index 0000000..a42e4a4 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/data/MachineData.java @@ -0,0 +1,100 @@ +package net.grandtheftmc.vice.machine.data; + +public class MachineData { + + private final DataFlag flag; + private final double max; + private double current; + + private int[] textures; + private int[] slots; + + public MachineData(DataFlag flag, double max, double current) { + this.flag = flag; + this.max = max; + this.current = current; + } + + public MachineData(DataFlag flag, double max) { + this.flag = flag; + this.max = max; + this.current = max; + } + + public DataFlag getFlag() { + return flag; + } + + public double getMax() { + return max; + } + + public double getCurrent() { + return current; + } + + public void setCurrent(double current) { + this.current = current; + } + + public int[] getTextures() { + return textures; + } + + public void setTextures(int... textures) { + this.textures = textures; + } + + public int[] getSlots() { + return slots; + } + + public void setSlots(int... slots) { + this.slots = slots; + } + + public boolean isSlot(int slot) { + for (int i : this.slots) + if (i == slot) return true; + return false; + } + + public boolean isEmpty() { + return this.current <= 0; + } + + public boolean isFull() { + return this.current >= this.max; + } + + public void take(int amount) { + if (this.current - amount < 0) { + this.current = 0; + return; + } + + this.current -= amount; + } + + public void add(int amount) { + if (this.current + amount >= this.max) { + this.current = this.max; + return; + } + + this.current += amount; + } + + public int getTexture() { + return this.textures[this.getPercentBetweenValues(this.max, this.current, this.textures.length - 1)]; + } + + private int getPercentBetweenValues(double goal, double value, int bars) { + return (int) Math.round(value >= goal ? bars : bars - Math.abs((goal - value) / goal * bars)); + } + + public static enum DataFlag { + UP, DOWN, + ; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/data/MachineDataType.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/data/MachineDataType.java new file mode 100644 index 0000000..9a116a2 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/data/MachineDataType.java @@ -0,0 +1,6 @@ +package net.grandtheftmc.vice.machine.data; + +public enum MachineDataType { + FUEL, DURABILITY, PROGRESS, + ; +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/event/MachineDurabilityEvent.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/event/MachineDurabilityEvent.java new file mode 100644 index 0000000..3921090 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/event/MachineDurabilityEvent.java @@ -0,0 +1,37 @@ +package net.grandtheftmc.vice.machine.event; + +import net.grandtheftmc.core.events.CoreEvent; +import net.grandtheftmc.vice.machine.BaseMachine; +import net.grandtheftmc.vice.machine.data.MachineData; +import org.bukkit.event.Cancellable; + +public final class MachineDurabilityEvent extends CoreEvent implements Cancellable { + + private final BaseMachine machine; + private final MachineData data; + private boolean cancelled; + + public MachineDurabilityEvent(BaseMachine machine, MachineData data) { + super(false); + this.machine = machine; + this.data = data; + } + + public BaseMachine getMachine() { + return machine; + } + + public MachineData getData() { + return data; + } + + @Override + public boolean isCancelled() { + return cancelled; + } + + @Override + public void setCancelled(boolean b) { + this.cancelled = b; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/event/MachineFuelEvent.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/event/MachineFuelEvent.java new file mode 100644 index 0000000..024c715 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/event/MachineFuelEvent.java @@ -0,0 +1,51 @@ +package net.grandtheftmc.vice.machine.event; + +import net.grandtheftmc.core.events.CoreEvent; +import net.grandtheftmc.vice.machine.BaseMachine; +import net.grandtheftmc.vice.machine.data.MachineData; +import org.bukkit.Material; +import org.bukkit.event.Cancellable; + +public final class MachineFuelEvent extends CoreEvent implements Cancellable { + + private final BaseMachine machine; + private final MachineData data; + private final Material fuelType; + private final int slot; + + private boolean cancelled; + + public MachineFuelEvent(BaseMachine machine, MachineData data, Material fuelType, int slot) { + super(false); + this.machine = machine; + this.data = data; + this.fuelType = fuelType; + this.slot = slot; + } + + public BaseMachine getMachine() { + return machine; + } + + public MachineData getData() { + return data; + } + + public Material getFuelType() { + return fuelType; + } + + public int getSlot() { + return slot; + } + + @Override + public boolean isCancelled() { + return cancelled; + } + + @Override + public void setCancelled(boolean b) { + this.cancelled = b; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/event/MachineItemTransferEvent.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/event/MachineItemTransferEvent.java new file mode 100644 index 0000000..d2bdbf5 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/event/MachineItemTransferEvent.java @@ -0,0 +1,71 @@ +package net.grandtheftmc.vice.machine.event; + +import net.grandtheftmc.core.events.CoreEvent; +import net.grandtheftmc.core.util.Callback; +import net.grandtheftmc.vice.machine.BaseMachine; +import org.bukkit.event.Cancellable; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; + +public final class MachineItemTransferEvent extends CoreEvent implements Cancellable { + + private final BaseMachine machine; + private final Inventory from, to; + private final TransferType transferType; + private final ItemStack itemStack; + + private boolean cancelled, transferred; + + public MachineItemTransferEvent(BaseMachine machine, Inventory from, Inventory to, TransferType transferType, ItemStack itemStack) { + super(false); + this.machine = machine; + this.from = from; + this.to = to; + this.transferType = transferType; + this.itemStack = itemStack; + } + + public BaseMachine getMachine() { + return machine; + } + + public Inventory getFrom() { + return from; + } + + public Inventory getTo() { + return to; + } + + public TransferType getTransferType() { + return transferType; + } + + public ItemStack getItemStack() { + return itemStack; + } + + @Override + public boolean isCancelled() { + return this.cancelled; + } + + @Override + public void setCancelled(boolean b) { + this.cancelled = b; + } + + public boolean isTransferred() { + return transferred; + } + + public void setTransferred(boolean transferred) { + this.transferred = transferred; + } + + public static enum TransferType { + TO_MACHINE, + FROM_MACHINE, + ; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/event/MachinePlaceEvent.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/event/MachinePlaceEvent.java new file mode 100644 index 0000000..e4ac7f5 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/event/MachinePlaceEvent.java @@ -0,0 +1,45 @@ +package net.grandtheftmc.vice.machine.event; + +import net.grandtheftmc.core.events.CoreEvent; +import net.grandtheftmc.vice.machine.BaseMachine; +import org.bukkit.Location; +import org.bukkit.entity.Player; +import org.bukkit.event.Cancellable; + +public final class MachinePlaceEvent extends CoreEvent implements Cancellable { + + private final Player player; + private final Location location; + private final BaseMachine machine; + + private boolean cancelled; + + public MachinePlaceEvent(Player player, Location location, BaseMachine machine) { + super(false); + this.player = player; + this.location = location; + this.machine = machine; + } + + public Player getPlayer() { + return player; + } + + public Location getLocation() { + return location; + } + + public BaseMachine getMachine() { + return machine; + } + + @Override + public boolean isCancelled() { + return cancelled; + } + + @Override + public void setCancelled(boolean b) { + cancelled = b; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/event/MachineRecipeCompleteEvent.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/event/MachineRecipeCompleteEvent.java new file mode 100644 index 0000000..98bdae0 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/event/MachineRecipeCompleteEvent.java @@ -0,0 +1,37 @@ +package net.grandtheftmc.vice.machine.event; + +import net.grandtheftmc.core.events.CoreEvent; +import net.grandtheftmc.vice.machine.BaseMachine; +import net.grandtheftmc.vice.machine.recipe.misc.MachineRecipeData; +import org.bukkit.event.Cancellable; + +public final class MachineRecipeCompleteEvent extends CoreEvent implements Cancellable { + + private final BaseMachine machine; + private final MachineRecipeData recipeData; + private boolean cancelled; + + public MachineRecipeCompleteEvent(BaseMachine machine, MachineRecipeData recipeData) { + super(false); + this.machine = machine; + this.recipeData = recipeData; + } + + public BaseMachine getMachine() { + return machine; + } + + public MachineRecipeData getRecipeData() { + return recipeData; + } + + @Override + public boolean isCancelled() { + return cancelled; + } + + @Override + public void setCancelled(boolean b) { + this.cancelled = b; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/misc/MachineProgressMultiplier.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/misc/MachineProgressMultiplier.java new file mode 100644 index 0000000..61cb0bc --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/misc/MachineProgressMultiplier.java @@ -0,0 +1,12 @@ +package net.grandtheftmc.vice.machine.misc; + +public interface MachineProgressMultiplier { + + /** + * This multiplier will speed up the brewing/ cooking + * progress by the given amount. + * + * @return + */ + double getMultiplier(); +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/MachineRecipe.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/MachineRecipe.java new file mode 100644 index 0000000..a450b2a --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/MachineRecipe.java @@ -0,0 +1,84 @@ +package net.grandtheftmc.vice.machine.recipe; + +import net.grandtheftmc.core.util.C; +import net.grandtheftmc.vice.machine.recipe.misc.RecipeInput; +import net.grandtheftmc.vice.machine.recipe.misc.RecipeOutput; + +public abstract class MachineRecipe { + + /** Unique Identifier of the Recipe */ + private final int identifier; + + /** Array of input items, size depends on the machine type */ + private final RecipeInput[] input; + + /** Output of the complete Recipe */ + private final RecipeOutput[] output; + + /** Amount of Fuel this Recipe should consume */ + private final int fuelUsage; + + /** Amount of durability this Recipe should consume */ + private final int durabilityUsage; + + /** Time to cook / brew in seconds */ + private final long time; + + /** Recipe string tutorial */ + protected String recipeText; + + /** + * Construct a new Machine Recipe. + * + * @param identifier - Unique Identifier of the Recipe. + * @param input - Array of input items, size depends on the machine type. + * @param output - Output of the complete Recipe. + * @param fuelUsage - Amount of Fuel this Recipe should consume. + * @param durabilityUsage - Amount of durability this Recipe should consume. + * @param time - Time to cook / brew in seconds. + */ + public MachineRecipe(int identifier, RecipeInput[] input, RecipeOutput[] output, int fuelUsage, int durabilityUsage, int time) { + this.identifier = identifier; + this.input = input; + this.output = output; + this.fuelUsage = fuelUsage; + this.durabilityUsage = durabilityUsage; + this.time = time; + } + + public int getIdentifier() { + return this.identifier; + } + + public RecipeInput[] getInput() { + return this.input; + } + + public RecipeOutput[] getOutput() { + return this.output; + } + + public int getFuelUsage() { + return this.fuelUsage; + } + + public int getDurabilityUsage() { + return this.durabilityUsage; + } + + public long getTime() { + return this.time; + } + + public String getRecipeText() { + return this.recipeText; + } + + public void setRecipeText(String recipeText) { + this.recipeText = recipeText; + } + + public String _(String icon, int amount) { + return C.RESET + icon + C.GRAY + "x" + amount + C.RESET; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/MachineRecipeManager.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/MachineRecipeManager.java new file mode 100644 index 0000000..57c2e8b --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/MachineRecipeManager.java @@ -0,0 +1,120 @@ +package net.grandtheftmc.vice.machine.recipe; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import net.grandtheftmc.vice.machine.BaseMachine; +import net.grandtheftmc.vice.machine.MachineManager; +import net.grandtheftmc.vice.machine.MachineUtil; +import net.grandtheftmc.vice.machine.recipe.misc.MachineRecipeData; +import net.grandtheftmc.vice.machine.recipe.misc.RecipeInput; +import net.grandtheftmc.vice.machine.recipe.type.*; +import org.bukkit.Material; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; + +public final class MachineRecipeManager { + + private final MachineManager machineManager; + private final HashMap<Integer, List<MachineRecipe>> recipes; + private final List<MachineRecipeData> recipeData; + + /** + case 1: return Optional.of(new MachineSmallDryingChamber()); + case 2: return Optional.of(new MachineMediumDryingChamber()); + case 3: return Optional.of(new MachineLargeDryingMachine()); + case 4: return Optional.of(new MachineBeerDistillery()); + case 5: return Optional.of(new MachineVodkaDistillery()); + case 6: return Optional.of(new MachineCocaProcessor()); + case 7: return Optional.of(new MachinePulpCondenser()); + case 8: return Optional.of(new MachineBasicMethProducer()); + case 9: return Optional.of(new MachineAdvancedMethProducer()); + case 10: return Optional.of(new MachineSugarBox()); + */ + + public MachineRecipeManager(MachineManager machineManager) { + this.machineManager = machineManager; + this.recipes = Maps.newHashMap(); + this.recipeData = Lists.newArrayList(); + + this.recipes.put(1, Arrays.asList(new RecipeHumulusLupulusFruit(), new RecipeWeed(), new RecipeDriedMushroomRed(), new RecipeDriedMushroomBrown(), new RecipeAcid())); + this.recipes.put(2, Arrays.asList(new RecipeHumulusLupulusFruit(), new RecipeWeed(), new RecipeDriedMushroomRed(), new RecipeDriedMushroomBrown(), new RecipeAcid())); + this.recipes.put(3, Arrays.asList(new RecipeHumulusLupulusFruit(), new RecipeWeed(), new RecipeDriedMushroomRed(), new RecipeDriedMushroomBrown(), new RecipeAcid())); + this.recipes.put(4, Arrays.asList(new RecipeBeer(), new RecipeCraftBeer())); + this.recipes.put(5, Arrays.asList(new RecipeVodka(), new RecipeDistilledVodka())); + this.recipes.put(6, Arrays.asList(new RecipeCrack(), new RecipeCocaine())); + this.recipes.put(7, Arrays.asList(new RecipeConcentratedMagicMushroom())); + this.recipes.put(8, Arrays.asList(new RecipeWhiteMeth())); + this.recipes.put(9, Arrays.asList(new RecipePureMeth())); + this.recipes.put(10, Arrays.asList(new RecipeLSD())); + } + + public boolean tryInitRecipe(BaseMachine machine) { + if (machine.isRecipeActive()) return true; + + Inventory inv = machine.getInventory(); + if (inv == null) return false; + if (!this.recipes.containsKey(machine.getMachineIdentifier())) return false; + + for(int i = 0; i < machine.getOutputSlots().length; i++) + if(MachineUtil.isOutputFull(machine.getInventory(), machine.getOutputSlots()[i])) + return false; + + for (MachineRecipe recipe : this.recipes.get(machine.getMachineIdentifier())) { + if (!this.hasAllRecipeItems(machine, recipe)) continue; + + this.removeRecipeItems(machine, recipe); + machine.setRecipeData(new MachineRecipeData(machine, recipe)); + return true; + } + + return false; + } + + private boolean hasAllRecipeItems(BaseMachine machine, MachineRecipe recipe) { + for (RecipeInput input : recipe.getInput()) { + if (!hasRecipeItem(machine, input)) + return false; + } + + return true; + } + + private boolean hasRecipeItem(BaseMachine machine, RecipeInput input) { + Inventory inv = machine.getInventory(); + if (inv == null) return false; + + for (int i : machine.getOpenSlots()) { + ItemStack item = inv.getItem(i); + if (item == null || item.getType() == Material.AIR) continue; + if (!item.isSimilar(input.getItemStack())) continue; + if (item.getAmount() < input.getAmount()) continue; + return true; + } + + return false; + } + + private void removeRecipeItems(BaseMachine machine, MachineRecipe recipe) { + Inventory inv = machine.getInventory(); + if (inv == null) return; + + for (RecipeInput input : recipe.getInput()) { + for (int i : machine.getOpenSlots()) { + ItemStack item = inv.getItem(i); + if (item == null || item.getType() == Material.AIR) continue; + if (!item.isSimilar(input.getItemStack())) continue; + if (item.getAmount() < input.getAmount()) { + inv.setItem(i, new ItemStack(Material.AIR)); + continue; + } + + if (item.getAmount() - input.getAmount() < 1) inv.setItem(i, new ItemStack(Material.AIR)); + else item.setAmount(item.getAmount() - input.getAmount()); + } + } + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/command/MachineRecipeCommand.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/command/MachineRecipeCommand.java new file mode 100644 index 0000000..fac7cd1 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/command/MachineRecipeCommand.java @@ -0,0 +1,20 @@ +package net.grandtheftmc.vice.machine.recipe.command; + +import net.grandtheftmc.core.commands.CoreCommand; +import net.grandtheftmc.vice.machine.recipe.menu.RecipeMenuManager; +import org.bukkit.entity.Player; + +public final class MachineRecipeCommand extends CoreCommand<Player> { + + private final RecipeMenuManager recipeMenuManager; + + public MachineRecipeCommand(RecipeMenuManager recipeMenuManager) { + super("recipe", "Display visual recipes for Machines & Drugs"); + this.recipeMenuManager = recipeMenuManager; + } + + @Override + public void execute(Player sender, String[] strings) { + this.recipeMenuManager.getRecipeMenuPortal().openInventory(sender); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/menu/RecipeMenu.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/menu/RecipeMenu.java new file mode 100644 index 0000000..827de07 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/menu/RecipeMenu.java @@ -0,0 +1,71 @@ +package net.grandtheftmc.vice.machine.recipe.menu; + +import net.grandtheftmc.core.inventory.CoreMenu; +import net.grandtheftmc.core.inventory.CoreMenuFlag; +import net.grandtheftmc.core.inventory.button.MenuItem; +import net.grandtheftmc.core.util.C; +import net.grandtheftmc.vice.machine.recipe.MachineRecipe; +import net.grandtheftmc.vice.machine.recipe.misc.RecipeInput; +import net.grandtheftmc.vice.machine.recipe.misc.RecipeOutput; +import org.bukkit.inventory.ItemStack; + +public abstract class RecipeMenu extends CoreMenu { + + public final short progress = 65; + private final MachineRecipe recipe; + + private int[] openSlots, outputSlots, blockedSlots; + + public RecipeMenu(int rows, String title, MachineRecipe recipe, CoreMenuFlag... menuFlags) { + super(rows, title, menuFlags); + this.recipe = recipe; + } + + public int[] getOpenSlots() { + return openSlots; + } + + public void setOpenSlots(int... openSlots) { + this.openSlots = openSlots; + } + + public void setOutputSlots(int... outputSlots) { + this.outputSlots = outputSlots; + } + + public int[] getOutputSlots() { + return outputSlots; + } + + public void setBlockedSlots(int... blockedSlots) { + this.blockedSlots = blockedSlots; + } + + public int[] getBlockedSlots() { + return blockedSlots; + } + + protected String i(String icon, int amount) { + return C.RESET + icon + C.GRAY + "x" + amount + C.RESET; + } + + public MachineRecipe getRecipe() { + return recipe; + } + + public void initRecipeItems() { + for (int i = 0; i < this.openSlots.length; i++) { + RecipeInput input = this.recipe.getInput()[i]; + ItemStack item = input.getItemStack().clone(); + item.setAmount(input.getAmount()); + super.addItem(new MenuItem(this.openSlots[i], item, false)); + } + + for (int i = 0; i < this.outputSlots.length; i++) { + RecipeOutput output = this.recipe.getOutput()[i]; + ItemStack item = output.getItemStack().clone(); + item.setAmount(output.getAmount()); + super.addItem(new MenuItem(this.outputSlots[i], output.getItemStack().clone(), false)); + } + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/menu/RecipeMenuManager.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/menu/RecipeMenuManager.java new file mode 100644 index 0000000..16fe27f --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/menu/RecipeMenuManager.java @@ -0,0 +1,52 @@ +package net.grandtheftmc.vice.machine.recipe.menu; + +import com.google.common.collect.Sets; +import net.grandtheftmc.core.util.Component; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.machine.recipe.command.MachineRecipeCommand; +import net.grandtheftmc.vice.machine.recipe.menu.type.*; +import org.bukkit.event.EventHandler; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.plugin.java.JavaPlugin; + +import java.util.Set; + +public class RecipeMenuManager implements Component<RecipeMenuManager, Vice> { + + private final Set<RecipeMenu> recipeMenus; + private final RecipeMenuPortal recipeMenuPortal; + + public RecipeMenuManager(JavaPlugin plugin) { + this.recipeMenus = Sets.newHashSet( + new RecipeMenuAcid(), + new RecipeMenuBeer(), + new RecipeMenuCocaine(), + new RecipeMenuConcentratedMagicMushroom(), + new RecipeMenuCrack(), + new RecipeMenuCraftBeer(), + new RecipeMenuDistilledVodka(), + new RecipeMenuDriedMushroom(), + new RecipeMenuHumulusLapulusFruit(), + new RecipeMenuLSD(), + new RecipeMenuPureMeth(), + new RecipeMenuVodka(), + new RecipeMenuWeed(), + new RecipeMenuWhiteMeth() + ); + + this.recipeMenuPortal = new RecipeMenuPortal(this.recipeMenus); + + new MachineRecipeCommand(this); + } + + public RecipeMenuPortal getRecipeMenuPortal() { + return recipeMenuPortal; + } + + @EventHandler + protected final void onInventoryClick(InventoryClickEvent event) { + if (event.getInventory().getTitle().toLowerCase().contains("recipe :")) { + event.setCancelled(true); + } + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/menu/RecipeMenuPortal.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/menu/RecipeMenuPortal.java new file mode 100644 index 0000000..00676dc --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/menu/RecipeMenuPortal.java @@ -0,0 +1,34 @@ +package net.grandtheftmc.vice.machine.recipe.menu; + +import net.grandtheftmc.core.inventory.CoreMenu; +import net.grandtheftmc.core.inventory.CoreMenuFlag; +import net.grandtheftmc.core.inventory.button.ClickableItem; +import net.grandtheftmc.core.inventory.button.MenuItem; +import net.grandtheftmc.core.util.C; +import net.grandtheftmc.core.util.factory.ItemFactory; +import org.bukkit.Material; + +import java.util.Set; + +public final class RecipeMenuPortal extends CoreMenu { + + public RecipeMenuPortal(Set<RecipeMenu> recipeMenus) { + super(4, "Choose a Drug Recipe", CoreMenuFlag.RESET_CURSOR_ON_OPEN, CoreMenuFlag.CLOSE_ON_NULL_CLICK); + + //# # # # # # # # # + //# o o o o o o o # + //# o o o o o o o # + //# # # # # # # # # + + int[] slots = new int[] {10,11,12,13,14,15,16, 19,20,21,22,23,24,25}, empty = new int[] {0,1,2,3,4,5,6,7,8,9,17,18,26,27,28,29,30,31,32,33,34,35}; + int x = 0; + for (RecipeMenu menu : recipeMenus) { + super.addItem(new ClickableItem(slots[x], menu.getRecipe().getOutput()[0].getItemStack().clone(), (player, clickType) -> menu.openInventory(player))); + x++; + } + + for (int i : empty) { + super.addItem(new MenuItem(i, new ItemFactory(Material.STAINED_GLASS_PANE, (byte) 8).setName(C.RED).build(), false)); + } + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/menu/type/RecipeMenuAcid.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/menu/type/RecipeMenuAcid.java new file mode 100644 index 0000000..26ca263 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/menu/type/RecipeMenuAcid.java @@ -0,0 +1,182 @@ +package net.grandtheftmc.vice.machine.recipe.menu.type; + +import net.grandtheftmc.core.inventory.CoreMenuFlag; +import net.grandtheftmc.core.inventory.button.MenuItem; +import net.grandtheftmc.core.util.C; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.vice.machine.recipe.menu.RecipeMenu; +import net.grandtheftmc.vice.machine.recipe.type.RecipeAcid; +import org.bukkit.Material; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.inventory.ItemFlag; + +public final class RecipeMenuAcid extends RecipeMenu { + + public RecipeMenuAcid() { + super(3, "Recipe : Drying Chamber", new RecipeAcid(), CoreMenuFlag.RESET_CURSOR_ON_OPEN, CoreMenuFlag.CLOSE_ON_NULL_CLICK); + + super.setBlockedSlots(0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 23, 24, 25, 26); + super.setOpenSlots(4); + super.setOutputSlots(22); + + super.initRecipeItems(); + + String[] description = { + C.DARK_GRAY + C.ITALIC + " " + super.getTitle(), + "", + "", + C.YELLOW + C.BOLD + "MACHINE RECIPES", + C.GRAY + " Note, recipes consume fuel and durability.", + C.GRAY + " Some more than others.", + "", + " " + i("需", 1) + " 霚 " + i("霂", 6), + "", + " " + i("霢", 1) + " 霚 " + i("霆", 1), + "", + " " + i("霟", 1) + " 霚 " + i("霋", 1), + "", + " " + i("霞", 1) + " 霚 " + i("霋", 1), + "", + " " + i("霁", 1) + " 霚 " + i("霎", 1), + "" + }; + + for (int i : super.getBlockedSlots()) { + super.addItem(new MenuItem(i, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.GREEN + C.BOLD + "MACHINE TUTORIAL") + .setLore(description) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + } + + //Machine Frame + super.addItem(new MenuItem(0, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) 79) + .setName(C.GREEN + C.BOLD + "MACHINE TUTORIAL") + .setLore(description) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + + this.initFuelItems(); + this.initDurabilityItems(); + + //Progress Item. + super.addItem(new MenuItem(11, + new ItemFactory(Material.STONE_SWORD) + .setDurability(super.progress) + .setName(C.GREEN + C.BOLD + "MACHINE TUTORIAL") + .setLore(description) + .setEnchantment(Enchantment.DURABILITY, 1) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + } + + private void initFuelItems() { + String[] lore = { + C.GRAY + " Adding burnable items will replenish", + C.GRAY + " your machine fuel counter.", + "", + // fire - oak_plank - 2 + C.RESET + " 霚 " + C.WHITE + "[霡] +" + C.YELLOW + "2" + C.WHITE + " Fuel", + // fire - coal - 8 + C.RESET + " 霚 " + C.WHITE + "[霖] +" + C.GOLD + "8" + C.WHITE + " Fuel", + // fire - coal_block - 160 + C.RESET + " 霚 " + C.WHITE + "[霗] +" + C.RED + "80" + C.WHITE + " Fuel", + // fire - lava - 100 + C.RESET + " 霚 " + C.WHITE + "[霙] +" + C.RED + "100" + C.WHITE + " Fuel", + "" + }; + + //Fuel Item. + super.addItem(new MenuItem(19, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) 0) + .setName(C.GOLD + C.BOLD + "MACHINE FUEL") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + + //Fuel Dummy Item. + super.addItem(new MenuItem(10, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.GOLD + C.BOLD + "MACHINE FUEL") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + + //Fuel Dummy Item. + super.addItem(new MenuItem(1, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.GOLD + C.BOLD + "MACHINE FUEL") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + } + + private void initDurabilityItems() { + String[] lore = { + C.GRAY + " Once the durability is gone, you will", + C.GRAY + " need to fix your machine to repair it.", + "" + }; + + //Fuel Item. + super.addItem(new MenuItem(25, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) 0) + .setName(C.AQUA + C.BOLD + "MACHINE DURABILITY") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + + //Fuel Dummy Item. + super.addItem(new MenuItem(16, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.AQUA + C.BOLD + "MACHINE DURABILITY") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + + //Fuel Dummy Item. + super.addItem(new MenuItem(7, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.AQUA + C.BOLD + "MACHINE DURABILITY") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/menu/type/RecipeMenuBeer.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/menu/type/RecipeMenuBeer.java new file mode 100644 index 0000000..b64b0bd --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/menu/type/RecipeMenuBeer.java @@ -0,0 +1,176 @@ +package net.grandtheftmc.vice.machine.recipe.menu.type; + +import net.grandtheftmc.core.inventory.CoreMenuFlag; +import net.grandtheftmc.core.inventory.button.MenuItem; +import net.grandtheftmc.core.util.C; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.vice.machine.recipe.menu.RecipeMenu; +import net.grandtheftmc.vice.machine.recipe.type.RecipeBeer; +import org.bukkit.Material; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.inventory.ItemFlag; + +public final class RecipeMenuBeer extends RecipeMenu { + + public RecipeMenuBeer() { + super(3, "Recipe : Beer Distillery", new RecipeBeer(), CoreMenuFlag.RESET_CURSOR_ON_OPEN, CoreMenuFlag.CLOSE_ON_NULL_CLICK); + + super.setBlockedSlots(0, 1, 2, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 23, 24, 25, 26); + super.setOpenSlots(3, 5); + super.setOutputSlots(22); + + super.initRecipeItems(); + + String[] description = { + C.DARK_GRAY + C.ITALIC + " " + super.getTitle(), + "", + "", + C.YELLOW + C.BOLD + "MACHINE RECIPES", + C.GRAY + " Note, recipes consume fuel and durability.", + C.GRAY + " Some more than others.", + "", + " " + i("霕", 5) + i("霃", 1) + " 霚 " + i("霈", 1), + "", + " " + i("霂", 6) + " " + i("霔", 1) + " 霚 " + i("霃", 1), + "" + }; + + for (int i : super.getBlockedSlots()) { + super.addItem(new MenuItem(i, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.GREEN + C.BOLD + "MACHINE TUTORIAL") + .setLore(description) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + } + + //Machine Frame + super.addItem(new MenuItem(0, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) 80) + .setName(C.GREEN + C.BOLD + "MACHINE TUTORIAL") + .setLore(description) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + + this.initFuelItems(); + this.initDurabilityItems(); + + //Progress Item. + super.addItem(new MenuItem(11, + new ItemFactory(Material.STONE_SWORD) + .setDurability(super.progress) + .setName(C.GREEN + C.BOLD + "MACHINE TUTORIAL") + .setLore(description) + .setEnchantment(Enchantment.DURABILITY, 1) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + } + + private void initFuelItems() { + String[] lore = { + C.GRAY + " Adding burnable items will replenish", + C.GRAY + " your machine fuel counter.", + "", + // fire - oak_plank - 2 + C.RESET + " 霚 " + C.WHITE + "[霡] +" + C.YELLOW + "2" + C.WHITE + " Fuel", + // fire - coal - 8 + C.RESET + " 霚 " + C.WHITE + "[霖] +" + C.GOLD + "8" + C.WHITE + " Fuel", + // fire - coal_block - 160 + C.RESET + " 霚 " + C.WHITE + "[霗] +" + C.RED + "80" + C.WHITE + " Fuel", + // fire - lava - 100 + C.RESET + " 霚 " + C.WHITE + "[霙] +" + C.RED + "100" + C.WHITE + " Fuel", + "" + }; + + //Fuel Item. + super.addItem(new MenuItem(19, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) 0) + .setName(C.GOLD + C.BOLD + "MACHINE FUEL") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + + //Fuel Dummy Item. + super.addItem(new MenuItem(10, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.GOLD + C.BOLD + "MACHINE FUEL") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + + //Fuel Dummy Item. + super.addItem(new MenuItem(1, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.GOLD + C.BOLD + "MACHINE FUEL") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + } + + private void initDurabilityItems() { + String[] lore = { + C.GRAY + " Once the durability is gone, you will", + C.GRAY + " need to fix your machine to repair it.", + "" + }; + + //Fuel Item. + super.addItem(new MenuItem(25, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) 0) + .setName(C.AQUA + C.BOLD + "MACHINE DURABILITY") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + + //Fuel Dummy Item. + super.addItem(new MenuItem(16, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.AQUA + C.BOLD + "MACHINE DURABILITY") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + + //Fuel Dummy Item. + super.addItem(new MenuItem(7, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.AQUA + C.BOLD + "MACHINE DURABILITY") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/menu/type/RecipeMenuCocaine.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/menu/type/RecipeMenuCocaine.java new file mode 100644 index 0000000..19bbee9 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/menu/type/RecipeMenuCocaine.java @@ -0,0 +1,176 @@ +package net.grandtheftmc.vice.machine.recipe.menu.type; + +import net.grandtheftmc.core.inventory.CoreMenuFlag; +import net.grandtheftmc.core.inventory.button.MenuItem; +import net.grandtheftmc.core.util.C; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.vice.machine.recipe.menu.RecipeMenu; +import net.grandtheftmc.vice.machine.recipe.type.RecipeCocaine; +import org.bukkit.Material; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.inventory.ItemFlag; + +public final class RecipeMenuCocaine extends RecipeMenu { + + public RecipeMenuCocaine() { + super(3, "Recipe : Coca Processor", new RecipeCocaine(), CoreMenuFlag.RESET_CURSOR_ON_OPEN, CoreMenuFlag.CLOSE_ON_NULL_CLICK); + + super.setBlockedSlots(0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 23, 24, 25, 26); + super.setOpenSlots(4); + super.setOutputSlots(22); + + super.initRecipeItems(); + + String[] description = { + C.DARK_GRAY + C.ITALIC + " " + super.getTitle(), + "", + "", + C.YELLOW + C.BOLD + "MACHINE RECIPES", + C.GRAY + " Note, recipes consume fuel and durability.", + C.GRAY + " Some more than others.", + "", + " " + i("霅", 3) + " 霚 " + i("霓", 1), + "", + " " + i("霓", 1) + " 霚 " + i("霍", 1), + "" + }; + + for (int i : super.getBlockedSlots()) { + super.addItem(new MenuItem(i, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.GREEN + C.BOLD + "MACHINE TUTORIAL") + .setLore(description) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + } + + //Machine Frame + super.addItem(new MenuItem(0, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) 79) + .setName(C.GREEN + C.BOLD + "MACHINE TUTORIAL") + .setLore(description) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + + this.initFuelItems(); + this.initDurabilityItems(); + + //Progress Item. + super.addItem(new MenuItem(11, + new ItemFactory(Material.STONE_SWORD) + .setDurability(super.progress) + .setName(C.GREEN + C.BOLD + "MACHINE TUTORIAL") + .setLore(description) + .setEnchantment(Enchantment.DURABILITY, 1) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + } + + private void initFuelItems() { + String[] lore = { + C.GRAY + " Adding burnable items will replenish", + C.GRAY + " your machine fuel counter.", + "", + // fire - oak_plank - 2 + C.RESET + " 霚 " + C.WHITE + "[霡] +" + C.YELLOW + "2" + C.WHITE + " Fuel", + // fire - coal - 8 + C.RESET + " 霚 " + C.WHITE + "[霖] +" + C.GOLD + "8" + C.WHITE + " Fuel", + // fire - coal_block - 160 + C.RESET + " 霚 " + C.WHITE + "[霗] +" + C.RED + "80" + C.WHITE + " Fuel", + // fire - lava - 100 + C.RESET + " 霚 " + C.WHITE + "[霙] +" + C.RED + "100" + C.WHITE + " Fuel", + "" + }; + + //Fuel Item. + super.addItem(new MenuItem(19, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) 0) + .setName(C.GOLD + C.BOLD + "MACHINE FUEL") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + + //Fuel Dummy Item. + super.addItem(new MenuItem(10, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.GOLD + C.BOLD + "MACHINE FUEL") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + + //Fuel Dummy Item. + super.addItem(new MenuItem(1, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.GOLD + C.BOLD + "MACHINE FUEL") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + } + + private void initDurabilityItems() { + String[] lore = { + C.GRAY + " Once the durability is gone, you will", + C.GRAY + " need to fix your machine to repair it.", + "" + }; + + //Fuel Item. + super.addItem(new MenuItem(25, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) 0) + .setName(C.AQUA + C.BOLD + "MACHINE DURABILITY") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + + //Fuel Dummy Item. + super.addItem(new MenuItem(16, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.AQUA + C.BOLD + "MACHINE DURABILITY") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + + //Fuel Dummy Item. + super.addItem(new MenuItem(7, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.AQUA + C.BOLD + "MACHINE DURABILITY") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/menu/type/RecipeMenuConcentratedMagicMushroom.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/menu/type/RecipeMenuConcentratedMagicMushroom.java new file mode 100644 index 0000000..02938cb --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/menu/type/RecipeMenuConcentratedMagicMushroom.java @@ -0,0 +1,174 @@ +package net.grandtheftmc.vice.machine.recipe.menu.type; + +import net.grandtheftmc.core.inventory.CoreMenuFlag; +import net.grandtheftmc.core.inventory.button.MenuItem; +import net.grandtheftmc.core.util.C; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.vice.machine.recipe.menu.RecipeMenu; +import net.grandtheftmc.vice.machine.recipe.type.RecipeConcentratedMagicMushroom; +import org.bukkit.Material; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.inventory.ItemFlag; + +public final class RecipeMenuConcentratedMagicMushroom extends RecipeMenu { + + public RecipeMenuConcentratedMagicMushroom() { + super(3, "Recipe : Pulp Condenser", new RecipeConcentratedMagicMushroom(), CoreMenuFlag.RESET_CURSOR_ON_OPEN, CoreMenuFlag.CLOSE_ON_NULL_CLICK); + + super.setBlockedSlots(0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 23, 24, 25, 26); + super.setOpenSlots(4); + super.setOutputSlots(22); + + super.initRecipeItems(); + + String[] description = { + C.DARK_GRAY + C.ITALIC + " " + super.getTitle(), + "", + "", + C.YELLOW + C.BOLD + "MACHINE RECIPES", + C.GRAY + " Note, recipes consume fuel and durability.", + C.GRAY + " Some more than others.", + "", + " " + i("霋", 1) + " 霚 " + i("霌", 1), + "" + }; + + for (int i : super.getBlockedSlots()) { + super.addItem(new MenuItem(i, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.GREEN + C.BOLD + "MACHINE TUTORIAL") + .setLore(description) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + } + + //Machine Frame + super.addItem(new MenuItem(0, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) 79) + .setName(C.GREEN + C.BOLD + "MACHINE TUTORIAL") + .setLore(description) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + + this.initFuelItems(); + this.initDurabilityItems(); + + //Progress Item. + super.addItem(new MenuItem(11, + new ItemFactory(Material.STONE_SWORD) + .setDurability(super.progress) + .setName(C.GREEN + C.BOLD + "MACHINE TUTORIAL") + .setLore(description) + .setEnchantment(Enchantment.DURABILITY, 1) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + } + + private void initFuelItems() { + String[] lore = { + C.GRAY + " Adding burnable items will replenish", + C.GRAY + " your machine fuel counter.", + "", + // fire - oak_plank - 2 + C.RESET + " 霚 " + C.WHITE + "[霡] +" + C.YELLOW + "2" + C.WHITE + " Fuel", + // fire - coal - 8 + C.RESET + " 霚 " + C.WHITE + "[霖] +" + C.GOLD + "8" + C.WHITE + " Fuel", + // fire - coal_block - 160 + C.RESET + " 霚 " + C.WHITE + "[霗] +" + C.RED + "80" + C.WHITE + " Fuel", + // fire - lava - 100 + C.RESET + " 霚 " + C.WHITE + "[霙] +" + C.RED + "100" + C.WHITE + " Fuel", + "" + }; + + //Fuel Item. + super.addItem(new MenuItem(19, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) 0) + .setName(C.GOLD + C.BOLD + "MACHINE FUEL") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + + //Fuel Dummy Item. + super.addItem(new MenuItem(10, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.GOLD + C.BOLD + "MACHINE FUEL") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + + //Fuel Dummy Item. + super.addItem(new MenuItem(1, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.GOLD + C.BOLD + "MACHINE FUEL") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + } + + private void initDurabilityItems() { + String[] lore = { + C.GRAY + " Once the durability is gone, you will", + C.GRAY + " need to fix your machine to repair it.", + "" + }; + + //Fuel Item. + super.addItem(new MenuItem(25, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) 0) + .setName(C.AQUA + C.BOLD + "MACHINE DURABILITY") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + + //Fuel Dummy Item. + super.addItem(new MenuItem(16, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.AQUA + C.BOLD + "MACHINE DURABILITY") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + + //Fuel Dummy Item. + super.addItem(new MenuItem(7, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.AQUA + C.BOLD + "MACHINE DURABILITY") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/menu/type/RecipeMenuCrack.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/menu/type/RecipeMenuCrack.java new file mode 100644 index 0000000..9c95c78 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/menu/type/RecipeMenuCrack.java @@ -0,0 +1,176 @@ +package net.grandtheftmc.vice.machine.recipe.menu.type; + +import net.grandtheftmc.core.inventory.CoreMenuFlag; +import net.grandtheftmc.core.inventory.button.MenuItem; +import net.grandtheftmc.core.util.C; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.vice.machine.recipe.menu.RecipeMenu; +import net.grandtheftmc.vice.machine.recipe.type.RecipeCrack; +import org.bukkit.Material; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.inventory.ItemFlag; + +public final class RecipeMenuCrack extends RecipeMenu { + + public RecipeMenuCrack() { + super(3, "Recipe : Coca Processor", new RecipeCrack(), CoreMenuFlag.RESET_CURSOR_ON_OPEN, CoreMenuFlag.CLOSE_ON_NULL_CLICK); + + super.setBlockedSlots(0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 23, 24, 25, 26); + super.setOpenSlots(4); + super.setOutputSlots(22); + + super.initRecipeItems(); + + String[] description = { + C.DARK_GRAY + C.ITALIC + " " + super.getTitle(), + "", + "", + C.YELLOW + C.BOLD + "MACHINE RECIPES", + C.GRAY + " Note, recipes consume fuel and durability.", + C.GRAY + " Some more than others.", + "", + " " + i("霅", 3) + " 霚 " + i("霓", 1), + "", + " " + i("霓", 1) + " 霚 " + i("霍", 1), + "" + }; + + for (int i : super.getBlockedSlots()) { + super.addItem(new MenuItem(i, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.GREEN + C.BOLD + "MACHINE TUTORIAL") + .setLore(description) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + } + + //Machine Frame + super.addItem(new MenuItem(0, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) 79) + .setName(C.GREEN + C.BOLD + "MACHINE TUTORIAL") + .setLore(description) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + + this.initFuelItems(); + this.initDurabilityItems(); + + //Progress Item. + super.addItem(new MenuItem(11, + new ItemFactory(Material.STONE_SWORD) + .setDurability(super.progress) + .setName(C.GREEN + C.BOLD + "MACHINE TUTORIAL") + .setLore(description) + .setEnchantment(Enchantment.DURABILITY, 1) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + } + + private void initFuelItems() { + String[] lore = { + C.GRAY + " Adding burnable items will replenish", + C.GRAY + " your machine fuel counter.", + "", + // fire - oak_plank - 2 + C.RESET + " 霚 " + C.WHITE + "[霡] +" + C.YELLOW + "2" + C.WHITE + " Fuel", + // fire - coal - 8 + C.RESET + " 霚 " + C.WHITE + "[霖] +" + C.GOLD + "8" + C.WHITE + " Fuel", + // fire - coal_block - 160 + C.RESET + " 霚 " + C.WHITE + "[霗] +" + C.RED + "80" + C.WHITE + " Fuel", + // fire - lava - 100 + C.RESET + " 霚 " + C.WHITE + "[霙] +" + C.RED + "100" + C.WHITE + " Fuel", + "" + }; + + //Fuel Item. + super.addItem(new MenuItem(19, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) 0) + .setName(C.GOLD + C.BOLD + "MACHINE FUEL") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + + //Fuel Dummy Item. + super.addItem(new MenuItem(10, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.GOLD + C.BOLD + "MACHINE FUEL") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + + //Fuel Dummy Item. + super.addItem(new MenuItem(1, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.GOLD + C.BOLD + "MACHINE FUEL") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + } + + private void initDurabilityItems() { + String[] lore = { + C.GRAY + " Once the durability is gone, you will", + C.GRAY + " need to fix your machine to repair it.", + "" + }; + + //Fuel Item. + super.addItem(new MenuItem(25, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) 0) + .setName(C.AQUA + C.BOLD + "MACHINE DURABILITY") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + + //Fuel Dummy Item. + super.addItem(new MenuItem(16, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.AQUA + C.BOLD + "MACHINE DURABILITY") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + + //Fuel Dummy Item. + super.addItem(new MenuItem(7, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.AQUA + C.BOLD + "MACHINE DURABILITY") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/menu/type/RecipeMenuCraftBeer.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/menu/type/RecipeMenuCraftBeer.java new file mode 100644 index 0000000..a8ed0ed --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/menu/type/RecipeMenuCraftBeer.java @@ -0,0 +1,176 @@ +package net.grandtheftmc.vice.machine.recipe.menu.type; + +import net.grandtheftmc.core.inventory.CoreMenuFlag; +import net.grandtheftmc.core.inventory.button.MenuItem; +import net.grandtheftmc.core.util.C; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.vice.machine.recipe.menu.RecipeMenu; +import net.grandtheftmc.vice.machine.recipe.type.RecipeCraftBeer; +import org.bukkit.Material; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.inventory.ItemFlag; + +public final class RecipeMenuCraftBeer extends RecipeMenu { + + public RecipeMenuCraftBeer() { + super(3, "Recipe : Beer Distillery", new RecipeCraftBeer(), CoreMenuFlag.RESET_CURSOR_ON_OPEN, CoreMenuFlag.CLOSE_ON_NULL_CLICK); + + super.setBlockedSlots(0, 1, 2, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 23, 24, 25, 26); + super.setOpenSlots(3, 5); + super.setOutputSlots(22); + + super.initRecipeItems(); + + String[] description = { + C.DARK_GRAY + C.ITALIC + " " + super.getTitle(), + "", + "", + C.YELLOW + C.BOLD + "MACHINE RECIPES", + C.GRAY + " Note, recipes consume fuel and durability.", + C.GRAY + " Some more than others.", + "", + " " + i("霕", 5) + i("霃", 1) + " 霚 " + i("霈", 1), + "", + " " + i("霂", 6) + " " + i("霔", 1) + " 霚 " + i("霃", 1), + "" + }; + + for (int i : super.getBlockedSlots()) { + super.addItem(new MenuItem(i, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.GREEN + C.BOLD + "MACHINE TUTORIAL") + .setLore(description) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + } + + //Machine Frame + super.addItem(new MenuItem(0, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) 80) + .setName(C.GREEN + C.BOLD + "MACHINE TUTORIAL") + .setLore(description) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + + this.initFuelItems(); + this.initDurabilityItems(); + + //Progress Item. + super.addItem(new MenuItem(11, + new ItemFactory(Material.STONE_SWORD) + .setDurability(super.progress) + .setName(C.GREEN + C.BOLD + "MACHINE TUTORIAL") + .setLore(description) + .setEnchantment(Enchantment.DURABILITY, 1) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + } + + private void initFuelItems() { + String[] lore = { + C.GRAY + " Adding burnable items will replenish", + C.GRAY + " your machine fuel counter.", + "", + // fire - oak_plank - 2 + C.RESET + " 霚 " + C.WHITE + "[霡] +" + C.YELLOW + "2" + C.WHITE + " Fuel", + // fire - coal - 8 + C.RESET + " 霚 " + C.WHITE + "[霖] +" + C.GOLD + "8" + C.WHITE + " Fuel", + // fire - coal_block - 160 + C.RESET + " 霚 " + C.WHITE + "[霗] +" + C.RED + "80" + C.WHITE + " Fuel", + // fire - lava - 100 + C.RESET + " 霚 " + C.WHITE + "[霙] +" + C.RED + "100" + C.WHITE + " Fuel", + "" + }; + + //Fuel Item. + super.addItem(new MenuItem(19, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) 0) + .setName(C.GOLD + C.BOLD + "MACHINE FUEL") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + + //Fuel Dummy Item. + super.addItem(new MenuItem(10, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.GOLD + C.BOLD + "MACHINE FUEL") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + + //Fuel Dummy Item. + super.addItem(new MenuItem(1, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.GOLD + C.BOLD + "MACHINE FUEL") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + } + + private void initDurabilityItems() { + String[] lore = { + C.GRAY + " Once the durability is gone, you will", + C.GRAY + " need to fix your machine to repair it.", + "" + }; + + //Fuel Item. + super.addItem(new MenuItem(25, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) 0) + .setName(C.AQUA + C.BOLD + "MACHINE DURABILITY") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + + //Fuel Dummy Item. + super.addItem(new MenuItem(16, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.AQUA + C.BOLD + "MACHINE DURABILITY") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + + //Fuel Dummy Item. + super.addItem(new MenuItem(7, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.AQUA + C.BOLD + "MACHINE DURABILITY") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/menu/type/RecipeMenuDistilledVodka.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/menu/type/RecipeMenuDistilledVodka.java new file mode 100644 index 0000000..eb4a647 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/menu/type/RecipeMenuDistilledVodka.java @@ -0,0 +1,176 @@ +package net.grandtheftmc.vice.machine.recipe.menu.type; + +import net.grandtheftmc.core.inventory.CoreMenuFlag; +import net.grandtheftmc.core.inventory.button.MenuItem; +import net.grandtheftmc.core.util.C; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.vice.machine.recipe.menu.RecipeMenu; +import net.grandtheftmc.vice.machine.recipe.type.RecipeDistilledVodka; +import org.bukkit.Material; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.inventory.ItemFlag; + +public final class RecipeMenuDistilledVodka extends RecipeMenu { + + public RecipeMenuDistilledVodka() { + super(3, "Recipe : Vodka Distillery", new RecipeDistilledVodka(), CoreMenuFlag.RESET_CURSOR_ON_OPEN, CoreMenuFlag.CLOSE_ON_NULL_CLICK); + + super.setBlockedSlots(0, 1, 2, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 23, 24, 25, 26); + super.setOpenSlots(3, 5); + super.setOutputSlots(22); + + super.initRecipeItems(); + + String[] description = { + C.DARK_GRAY + C.ITALIC + " " + super.getTitle(), + "", + "", + C.YELLOW + C.BOLD + "MACHINE RECIPES", + C.GRAY + " Note, recipes consume fuel and durability.", + C.GRAY + " Some more than others.", + "", + " " + i("霜", 6) + i("霔", 1) + " 霚 " + i("霉", 1), + "", + " " + i("霛", 3) + i("霉", 1) + " 霚 " + i("霝", 1), + "" + }; + + for (int i : super.getBlockedSlots()) { + super.addItem(new MenuItem(i, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.GREEN + C.BOLD + "MACHINE TUTORIAL") + .setLore(description) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + } + + //Machine Frame + super.addItem(new MenuItem(0, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) 80) + .setName(C.GREEN + C.BOLD + "MACHINE TUTORIAL") + .setLore(description) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + + this.initFuelItems(); + this.initDurabilityItems(); + + //Progress Item. + super.addItem(new MenuItem(11, + new ItemFactory(Material.STONE_SWORD) + .setDurability(super.progress) + .setName(C.GREEN + C.BOLD + "MACHINE TUTORIAL") + .setLore(description) + .setEnchantment(Enchantment.DURABILITY, 1) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + } + + public void initFuelItems() { + String[] lore = { + C.GRAY + " Adding burnable items will replenish", + C.GRAY + " your machine fuel counter.", + "", + // fire - oak_plank - 2 + C.RESET + " 霚 " + C.WHITE + "[霡] +" + C.YELLOW + "2" + C.WHITE + " Fuel", + // fire - coal - 8 + C.RESET + " 霚 " + C.WHITE + "[霖] +" + C.GOLD + "8" + C.WHITE + " Fuel", + // fire - coal_block - 160 + C.RESET + " 霚 " + C.WHITE + "[霗] +" + C.RED + "80" + C.WHITE + " Fuel", + // fire - lava - 100 + C.RESET + " 霚 " + C.WHITE + "[霙] +" + C.RED + "100" + C.WHITE + " Fuel", + "" + }; + + //Fuel Item. + super.addItem(new MenuItem(19, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) 0) + .setName(C.GOLD + C.BOLD + "MACHINE FUEL") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + + //Fuel Dummy Item. + super.addItem(new MenuItem(10, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.GOLD + C.BOLD + "MACHINE FUEL") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + + //Fuel Dummy Item. + super.addItem(new MenuItem(1, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.GOLD + C.BOLD + "MACHINE FUEL") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + } + + public void initDurabilityItems() { + String[] lore = { + C.GRAY + " Once the durability is gone, you will", + C.GRAY + " need to fix your machine to repair it.", + "" + }; + + //Fuel Item. + super.addItem(new MenuItem(25, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) 0) + .setName(C.AQUA + C.BOLD + "MACHINE DURABILITY") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + + //Fuel Dummy Item. + super.addItem(new MenuItem(16, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.AQUA + C.BOLD + "MACHINE DURABILITY") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + + //Fuel Dummy Item. + super.addItem(new MenuItem(7, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.AQUA + C.BOLD + "MACHINE DURABILITY") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/menu/type/RecipeMenuDriedMushroom.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/menu/type/RecipeMenuDriedMushroom.java new file mode 100644 index 0000000..cd120be --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/menu/type/RecipeMenuDriedMushroom.java @@ -0,0 +1,182 @@ +package net.grandtheftmc.vice.machine.recipe.menu.type; + +import net.grandtheftmc.core.inventory.CoreMenuFlag; +import net.grandtheftmc.core.inventory.button.MenuItem; +import net.grandtheftmc.core.util.C; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.vice.machine.recipe.menu.RecipeMenu; +import net.grandtheftmc.vice.machine.recipe.type.RecipeDriedMushroomBrown; +import org.bukkit.Material; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.inventory.ItemFlag; + +public final class RecipeMenuDriedMushroom extends RecipeMenu { + + public RecipeMenuDriedMushroom() { + super(3, "Recipe : Drying Chamber", new RecipeDriedMushroomBrown(), CoreMenuFlag.RESET_CURSOR_ON_OPEN, CoreMenuFlag.CLOSE_ON_NULL_CLICK); + + super.setBlockedSlots(0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 23, 24, 25, 26); + super.setOpenSlots(4); + super.setOutputSlots(22); + + super.initRecipeItems(); + + String[] description = { + C.DARK_GRAY + C.ITALIC + " " + super.getTitle(), + "", + "", + C.YELLOW + C.BOLD + "MACHINE RECIPES", + C.GRAY + " Note, recipes consume fuel and durability.", + C.GRAY + " Some more than others.", + "", + " " + i("需", 1) + " 霚 " + i("霂", 6), + "", + " " + i("霢", 1) + " 霚 " + i("霆", 1), + "", + " " + i("霟", 1) + " 霚 " + i("霋", 1), + "", + " " + i("霞", 1) + " 霚 " + i("霋", 1), + "", + " " + i("霁", 1) + " 霚 " + i("霎", 1), + "" + }; + + for (int i : super.getBlockedSlots()) { + super.addItem(new MenuItem(i, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.GREEN + C.BOLD + "MACHINE TUTORIAL") + .setLore(description) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + } + + //Machine Frame + super.addItem(new MenuItem(0, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) 79) + .setName(C.GREEN + C.BOLD + "MACHINE TUTORIAL") + .setLore(description) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + + this.initFuelItems(); + this.initDurabilityItems(); + + //Progress Item. + super.addItem(new MenuItem(11, + new ItemFactory(Material.STONE_SWORD) + .setDurability(super.progress) + .setName(C.GREEN + C.BOLD + "MACHINE TUTORIAL") + .setLore(description) + .setEnchantment(Enchantment.DURABILITY, 1) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + } + + private void initFuelItems() { + String[] lore = { + C.GRAY + " Adding burnable items will replenish", + C.GRAY + " your machine fuel counter.", + "", + // fire - oak_plank - 2 + C.RESET + " 霚 " + C.WHITE + "[霡] +" + C.YELLOW + "2" + C.WHITE + " Fuel", + // fire - coal - 8 + C.RESET + " 霚 " + C.WHITE + "[霖] +" + C.GOLD + "8" + C.WHITE + " Fuel", + // fire - coal_block - 160 + C.RESET + " 霚 " + C.WHITE + "[霗] +" + C.RED + "80" + C.WHITE + " Fuel", + // fire - lava - 100 + C.RESET + " 霚 " + C.WHITE + "[霙] +" + C.RED + "100" + C.WHITE + " Fuel", + "" + }; + + //Fuel Item. + super.addItem(new MenuItem(19, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) 0) + .setName(C.GOLD + C.BOLD + "MACHINE FUEL") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + + //Fuel Dummy Item. + super.addItem(new MenuItem(10, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.GOLD + C.BOLD + "MACHINE FUEL") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + + //Fuel Dummy Item. + super.addItem(new MenuItem(1, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.GOLD + C.BOLD + "MACHINE FUEL") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + } + + private void initDurabilityItems() { + String[] lore = { + C.GRAY + " Once the durability is gone, you will", + C.GRAY + " need to fix your machine to repair it.", + "" + }; + + //Fuel Item. + super.addItem(new MenuItem(25, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) 0) + .setName(C.AQUA + C.BOLD + "MACHINE DURABILITY") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + + //Fuel Dummy Item. + super.addItem(new MenuItem(16, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.AQUA + C.BOLD + "MACHINE DURABILITY") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + + //Fuel Dummy Item. + super.addItem(new MenuItem(7, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.AQUA + C.BOLD + "MACHINE DURABILITY") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/menu/type/RecipeMenuHumulusLapulusFruit.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/menu/type/RecipeMenuHumulusLapulusFruit.java new file mode 100644 index 0000000..ba72d28 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/menu/type/RecipeMenuHumulusLapulusFruit.java @@ -0,0 +1,182 @@ +package net.grandtheftmc.vice.machine.recipe.menu.type; + +import net.grandtheftmc.core.inventory.CoreMenuFlag; +import net.grandtheftmc.core.inventory.button.MenuItem; +import net.grandtheftmc.core.util.C; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.vice.machine.recipe.menu.RecipeMenu; +import net.grandtheftmc.vice.machine.recipe.type.RecipeHumulusLupulusFruit; +import org.bukkit.Material; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.inventory.ItemFlag; + +public final class RecipeMenuHumulusLapulusFruit extends RecipeMenu { + + public RecipeMenuHumulusLapulusFruit() { + super(3, "Recipe : Drying Chamber", new RecipeHumulusLupulusFruit(), CoreMenuFlag.RESET_CURSOR_ON_OPEN, CoreMenuFlag.CLOSE_ON_NULL_CLICK); + + super.setBlockedSlots(0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 23, 24, 25, 26); + super.setOpenSlots(4); + super.setOutputSlots(22); + + super.initRecipeItems(); + + String[] description = { + C.DARK_GRAY + C.ITALIC + " " + super.getTitle(), + "", + "", + C.YELLOW + C.BOLD + "MACHINE RECIPES", + C.GRAY + " Note, recipes consume fuel and durability.", + C.GRAY + " Some more than others.", + "", + " " + i("需", 1) + " 霚 " + i("霂", 6), + "", + " " + i("霢", 1) + " 霚 " + i("霆", 1), + "", + " " + i("霟", 1) + " 霚 " + i("霋", 1), + "", + " " + i("霞", 1) + " 霚 " + i("霋", 1), + "", + " " + i("霁", 1) + " 霚 " + i("霎", 1), + "" + }; + + for (int i : super.getBlockedSlots()) { + super.addItem(new MenuItem(i, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.GREEN + C.BOLD + "MACHINE TUTORIAL") + .setLore(description) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + } + + //Machine Frame + super.addItem(new MenuItem(0, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) 79) + .setName(C.GREEN + C.BOLD + "MACHINE TUTORIAL") + .setLore(description) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + + this.initFuelItems(); + this.initDurabilityItems(); + + //Progress Item. + super.addItem(new MenuItem(11, + new ItemFactory(Material.STONE_SWORD) + .setDurability(super.progress) + .setName(C.GREEN + C.BOLD + "MACHINE TUTORIAL") + .setLore(description) + .setEnchantment(Enchantment.DURABILITY, 1) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + } + + private void initFuelItems() { + String[] lore = { + C.GRAY + " Adding burnable items will replenish", + C.GRAY + " your machine fuel counter.", + "", + // fire - oak_plank - 2 + C.RESET + " 霚 " + C.WHITE + "[霡] +" + C.YELLOW + "2" + C.WHITE + " Fuel", + // fire - coal - 8 + C.RESET + " 霚 " + C.WHITE + "[霖] +" + C.GOLD + "8" + C.WHITE + " Fuel", + // fire - coal_block - 160 + C.RESET + " 霚 " + C.WHITE + "[霗] +" + C.RED + "80" + C.WHITE + " Fuel", + // fire - lava - 100 + C.RESET + " 霚 " + C.WHITE + "[霙] +" + C.RED + "100" + C.WHITE + " Fuel", + "" + }; + + //Fuel Item. + super.addItem(new MenuItem(19, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) 0) + .setName(C.GOLD + C.BOLD + "MACHINE FUEL") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + + //Fuel Dummy Item. + super.addItem(new MenuItem(10, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.GOLD + C.BOLD + "MACHINE FUEL") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + + //Fuel Dummy Item. + super.addItem(new MenuItem(1, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.GOLD + C.BOLD + "MACHINE FUEL") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + } + + private void initDurabilityItems() { + String[] lore = { + C.GRAY + " Once the durability is gone, you will", + C.GRAY + " need to fix your machine to repair it.", + "" + }; + + //Fuel Item. + super.addItem(new MenuItem(25, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) 0) + .setName(C.AQUA + C.BOLD + "MACHINE DURABILITY") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + + //Fuel Dummy Item. + super.addItem(new MenuItem(16, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.AQUA + C.BOLD + "MACHINE DURABILITY") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + + //Fuel Dummy Item. + super.addItem(new MenuItem(7, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.AQUA + C.BOLD + "MACHINE DURABILITY") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/menu/type/RecipeMenuLSD.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/menu/type/RecipeMenuLSD.java new file mode 100644 index 0000000..a2233ef --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/menu/type/RecipeMenuLSD.java @@ -0,0 +1,174 @@ +package net.grandtheftmc.vice.machine.recipe.menu.type; + +import net.grandtheftmc.core.inventory.CoreMenuFlag; +import net.grandtheftmc.core.inventory.button.MenuItem; +import net.grandtheftmc.core.util.C; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.vice.machine.recipe.menu.RecipeMenu; +import net.grandtheftmc.vice.machine.recipe.type.RecipeLSD; +import org.bukkit.Material; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.inventory.ItemFlag; + +public final class RecipeMenuLSD extends RecipeMenu { + + public RecipeMenuLSD() { + super(3, "Recipe : Sugar Box", new RecipeLSD(), CoreMenuFlag.RESET_CURSOR_ON_OPEN, CoreMenuFlag.CLOSE_ON_NULL_CLICK); + + super.setBlockedSlots(0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 23, 24, 25, 26); + super.setOpenSlots(4); + super.setOutputSlots(22); + + super.initRecipeItems(); + + String[] description = { + C.DARK_GRAY + C.ITALIC + " " + super.getTitle(), + "", + "", + C.YELLOW + C.BOLD + "MACHINE RECIPES", + C.GRAY + " Note, recipes consume fuel and durability.", + C.GRAY + " Some more than others.", + "", + " " + i("霎", 1) + " 霚 " + i("霏", 1), + "" + }; + + for (int i : super.getBlockedSlots()) { + super.addItem(new MenuItem(i, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.GREEN + C.BOLD + "MACHINE TUTORIAL") + .setLore(description) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + } + + //Machine Frame + super.addItem(new MenuItem(0, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) 79) + .setName(C.GREEN + C.BOLD + "MACHINE TUTORIAL") + .setLore(description) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + + this.initFuelItems(); + this.initDurabilityItems(); + + //Progress Item. + super.addItem(new MenuItem(11, + new ItemFactory(Material.STONE_SWORD) + .setDurability(super.progress) + .setName(C.GREEN + C.BOLD + "MACHINE TUTORIAL") + .setLore(description) + .setEnchantment(Enchantment.DURABILITY, 1) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + } + + private void initFuelItems() { + String[] lore = { + C.GRAY + " Adding burnable items will replenish", + C.GRAY + " your machine fuel counter.", + "", + // fire - oak_plank - 2 + C.RESET + " 霚 " + C.WHITE + "[霡] +" + C.YELLOW + "2" + C.WHITE + " Fuel", + // fire - coal - 8 + C.RESET + " 霚 " + C.WHITE + "[霖] +" + C.GOLD + "8" + C.WHITE + " Fuel", + // fire - coal_block - 160 + C.RESET + " 霚 " + C.WHITE + "[霗] +" + C.RED + "80" + C.WHITE + " Fuel", + // fire - lava - 100 + C.RESET + " 霚 " + C.WHITE + "[霙] +" + C.RED + "100" + C.WHITE + " Fuel", + "" + }; + + //Fuel Item. + super.addItem(new MenuItem(19, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) 0) + .setName(C.GOLD + C.BOLD + "MACHINE FUEL") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + + //Fuel Dummy Item. + super.addItem(new MenuItem(10, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.GOLD + C.BOLD + "MACHINE FUEL") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + + //Fuel Dummy Item. + super.addItem(new MenuItem(1, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.GOLD + C.BOLD + "MACHINE FUEL") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + } + + private void initDurabilityItems() { + String[] lore = { + C.GRAY + " Once the durability is gone, you will", + C.GRAY + " need to fix your machine to repair it.", + "" + }; + + //Fuel Item. + super.addItem(new MenuItem(25, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) 0) + .setName(C.AQUA + C.BOLD + "MACHINE DURABILITY") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + + //Fuel Dummy Item. + super.addItem(new MenuItem(16, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.AQUA + C.BOLD + "MACHINE DURABILITY") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + + //Fuel Dummy Item. + super.addItem(new MenuItem(7, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.AQUA + C.BOLD + "MACHINE DURABILITY") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/menu/type/RecipeMenuPureMeth.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/menu/type/RecipeMenuPureMeth.java new file mode 100644 index 0000000..26898ef --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/menu/type/RecipeMenuPureMeth.java @@ -0,0 +1,176 @@ +package net.grandtheftmc.vice.machine.recipe.menu.type; + +import net.grandtheftmc.core.inventory.CoreMenuFlag; +import net.grandtheftmc.core.inventory.button.MenuItem; +import net.grandtheftmc.core.util.C; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.vice.machine.recipe.menu.RecipeMenu; +import net.grandtheftmc.vice.machine.recipe.type.RecipePureMeth; +import org.bukkit.Material; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.inventory.ItemFlag; + +public final class RecipeMenuPureMeth extends RecipeMenu { + + public RecipeMenuPureMeth() { + super(3, "Recipe : Meth Producer", new RecipePureMeth(), CoreMenuFlag.RESET_CURSOR_ON_OPEN, CoreMenuFlag.CLOSE_ON_NULL_CLICK); + + super.setBlockedSlots(0, 1, 2, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 23, 24, 25, 26); + super.setOpenSlots(3, 5); + super.setOutputSlots(22); + + super.initRecipeItems(); + + String[] description = { + C.DARK_GRAY + C.ITALIC + " " + super.getTitle(), + "", + "", + C.YELLOW + C.BOLD + "MACHINE RECIPES", + C.GRAY + " Note, recipes consume fuel and durability.", + C.GRAY + " Some more than others.", + "", + " " + i("霑", 1) + i("霠", 64) + " 霚 " + i("霒", 4), + "" + }; + + for (int i : super.getBlockedSlots()) { + super.addItem(new MenuItem(i, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.GREEN + C.BOLD + "MACHINE TUTORIAL") + .setLore(description) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + } + + //Machine Frame + super.addItem(new MenuItem(0, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) 80) + .setName(C.GREEN + C.BOLD + "MACHINE TUTORIAL") + .setLore(description) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + + this.initFuelItems(); + this.initDurabilityItems(); + + //Progress Item. + super.addItem(new MenuItem(11, + new ItemFactory(Material.STONE_SWORD) + .setDurability(super.progress) + .setName(C.GREEN + C.BOLD + "MACHINE TUTORIAL") + .setLore(description) + .setEnchantment(Enchantment.DURABILITY, 1) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + } + + private void initFuelItems() { + String[] lore = { + C.GRAY + " Adding burnable items will replenish", + C.GRAY + " your machine fuel counter.", + "", + // fire - oak_plank - 2 + C.RESET + " 霚 " + C.WHITE + "[霡] +" + C.YELLOW + "2" + C.WHITE + " Fuel", + // fire - coal - 8 + C.RESET + " 霚 " + C.WHITE + "[霖] +" + C.GOLD + "8" + C.WHITE + " Fuel", + // fire - coal_block - 160 + C.RESET + " 霚 " + C.WHITE + "[霗] +" + C.RED + "80" + C.WHITE + " Fuel", + // fire - lava - 100 + C.RESET + " 霚 " + C.WHITE + "[霙] +" + C.RED + "100" + C.WHITE + " Fuel", + "", + C.GRAY + " Use the command " + C.WHITE + "/recipe" + C.GRAY + " for", + C.GRAY + " a visual tutorial on drug recipes." + }; + + //Fuel Item. + super.addItem(new MenuItem(19, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) 0) + .setName(C.GOLD + C.BOLD + "MACHINE FUEL") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + + //Fuel Dummy Item. + super.addItem(new MenuItem(10, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.GOLD + C.BOLD + "MACHINE FUEL") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + + //Fuel Dummy Item. + super.addItem(new MenuItem(1, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.GOLD + C.BOLD + "MACHINE FUEL") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + } + + private void initDurabilityItems() { + String[] lore = { + C.GRAY + " Once the durability is gone, you will", + C.GRAY + " need to fix your machine to repair it.", + "" + }; + + //Fuel Item. + super.addItem(new MenuItem(25, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) 0) + .setName(C.AQUA + C.BOLD + "MACHINE DURABILITY") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + + //Fuel Dummy Item. + super.addItem(new MenuItem(16, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.AQUA + C.BOLD + "MACHINE DURABILITY") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + + //Fuel Dummy Item. + super.addItem(new MenuItem(7, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.AQUA + C.BOLD + "MACHINE DURABILITY") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/menu/type/RecipeMenuVodka.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/menu/type/RecipeMenuVodka.java new file mode 100644 index 0000000..310aab1 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/menu/type/RecipeMenuVodka.java @@ -0,0 +1,176 @@ +package net.grandtheftmc.vice.machine.recipe.menu.type; + +import net.grandtheftmc.core.inventory.CoreMenuFlag; +import net.grandtheftmc.core.inventory.button.MenuItem; +import net.grandtheftmc.core.util.C; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.vice.machine.recipe.menu.RecipeMenu; +import net.grandtheftmc.vice.machine.recipe.type.RecipeVodka; +import org.bukkit.Material; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.inventory.ItemFlag; + +public final class RecipeMenuVodka extends RecipeMenu { + + public RecipeMenuVodka() { + super(3, "Recipe : Vodka Distillery", new RecipeVodka(), CoreMenuFlag.RESET_CURSOR_ON_OPEN, CoreMenuFlag.CLOSE_ON_NULL_CLICK); + + super.setBlockedSlots(0, 1, 2, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 23, 24, 25, 26); + super.setOpenSlots(3, 5); + super.setOutputSlots(22); + + super.initRecipeItems(); + + String[] description = { + C.DARK_GRAY + C.ITALIC + " " + super.getTitle(), + "", + "", + C.YELLOW + C.BOLD + "MACHINE RECIPES", + C.GRAY + " Note, recipes consume fuel and durability.", + C.GRAY + " Some more than others.", + "", + " " + i("霜", 6) + i("霔", 1) + " 霚 " + i("霉", 1), + "", + " " + i("霛", 3) + i("霉", 1) + " 霚 " + i("霝", 1), + "" + }; + + for (int i : super.getBlockedSlots()) { + super.addItem(new MenuItem(i, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.GREEN + C.BOLD + "MACHINE TUTORIAL") + .setLore(description) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + } + + //Machine Frame + super.addItem(new MenuItem(0, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) 80) + .setName(C.GREEN + C.BOLD + "MACHINE TUTORIAL") + .setLore(description) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + + this.initFuelItems(); + this.initDurabilityItems(); + + //Progress Item. + super.addItem(new MenuItem(11, + new ItemFactory(Material.STONE_SWORD) + .setDurability(super.progress) + .setName(C.GREEN + C.BOLD + "MACHINE TUTORIAL") + .setLore(description) + .setEnchantment(Enchantment.DURABILITY, 1) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + } + + public void initFuelItems() { + String[] lore = { + C.GRAY + " Adding burnable items will replenish", + C.GRAY + " your machine fuel counter.", + "", + // fire - oak_plank - 2 + C.RESET + " 霚 " + C.WHITE + "[霡] +" + C.YELLOW + "2" + C.WHITE + " Fuel", + // fire - coal - 8 + C.RESET + " 霚 " + C.WHITE + "[霖] +" + C.GOLD + "8" + C.WHITE + " Fuel", + // fire - coal_block - 160 + C.RESET + " 霚 " + C.WHITE + "[霗] +" + C.RED + "80" + C.WHITE + " Fuel", + // fire - lava - 100 + C.RESET + " 霚 " + C.WHITE + "[霙] +" + C.RED + "100" + C.WHITE + " Fuel", + "" + }; + + //Fuel Item. + super.addItem(new MenuItem(19, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) 0) + .setName(C.GOLD + C.BOLD + "MACHINE FUEL") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + + //Fuel Dummy Item. + super.addItem(new MenuItem(10, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.GOLD + C.BOLD + "MACHINE FUEL") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + + //Fuel Dummy Item. + super.addItem(new MenuItem(1, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.GOLD + C.BOLD + "MACHINE FUEL") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + } + + public void initDurabilityItems() { + String[] lore = { + C.GRAY + " Once the durability is gone, you will", + C.GRAY + " need to fix your machine to repair it.", + "" + }; + + //Fuel Item. + super.addItem(new MenuItem(25, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) 0) + .setName(C.AQUA + C.BOLD + "MACHINE DURABILITY") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + + //Fuel Dummy Item. + super.addItem(new MenuItem(16, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.AQUA + C.BOLD + "MACHINE DURABILITY") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + + //Fuel Dummy Item. + super.addItem(new MenuItem(7, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.AQUA + C.BOLD + "MACHINE DURABILITY") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/menu/type/RecipeMenuWeed.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/menu/type/RecipeMenuWeed.java new file mode 100644 index 0000000..0671e98 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/menu/type/RecipeMenuWeed.java @@ -0,0 +1,182 @@ +package net.grandtheftmc.vice.machine.recipe.menu.type; + +import net.grandtheftmc.core.inventory.CoreMenuFlag; +import net.grandtheftmc.core.inventory.button.MenuItem; +import net.grandtheftmc.core.util.C; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.vice.machine.recipe.menu.RecipeMenu; +import net.grandtheftmc.vice.machine.recipe.type.RecipeWeed; +import org.bukkit.Material; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.inventory.ItemFlag; + +public final class RecipeMenuWeed extends RecipeMenu { + + public RecipeMenuWeed() { + super(3, "Recipe : Drying Chamber", new RecipeWeed(), CoreMenuFlag.RESET_CURSOR_ON_OPEN, CoreMenuFlag.CLOSE_ON_NULL_CLICK); + + super.setBlockedSlots(0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 23, 24, 25, 26); + super.setOpenSlots(4); + super.setOutputSlots(22); + + super.initRecipeItems(); + + String[] description = { + C.DARK_GRAY + C.ITALIC + " " + super.getTitle(), + "", + "", + C.YELLOW + C.BOLD + "MACHINE RECIPES", + C.GRAY + " Note, recipes consume fuel and durability.", + C.GRAY + " Some more than others.", + "", + " " + i("需", 1) + " 霚 " + i("霂", 6), + "", + " " + i("霢", 1) + " 霚 " + i("霆", 1), + "", + " " + i("霟", 1) + " 霚 " + i("霋", 1), + "", + " " + i("霞", 1) + " 霚 " + i("霋", 1), + "", + " " + i("霁", 1) + " 霚 " + i("霎", 1), + "" + }; + + for (int i : super.getBlockedSlots()) { + super.addItem(new MenuItem(i, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.GREEN + C.BOLD + "MACHINE TUTORIAL") + .setLore(description) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + } + + //Machine Frame + super.addItem(new MenuItem(0, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) 79) + .setName(C.GREEN + C.BOLD + "MACHINE TUTORIAL") + .setLore(description) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + + this.initFuelItems(); + this.initDurabilityItems(); + + //Progress Item. + super.addItem(new MenuItem(11, + new ItemFactory(Material.STONE_SWORD) + .setDurability(super.progress) + .setName(C.GREEN + C.BOLD + "MACHINE TUTORIAL") + .setLore(description) + .setEnchantment(Enchantment.DURABILITY, 1) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + } + + private void initFuelItems() { + String[] lore = { + C.GRAY + " Adding burnable items will replenish", + C.GRAY + " your machine fuel counter.", + "", + // fire - oak_plank - 2 + C.RESET + " 霚 " + C.WHITE + "[霡] +" + C.YELLOW + "2" + C.WHITE + " Fuel", + // fire - coal - 8 + C.RESET + " 霚 " + C.WHITE + "[霖] +" + C.GOLD + "8" + C.WHITE + " Fuel", + // fire - coal_block - 160 + C.RESET + " 霚 " + C.WHITE + "[霗] +" + C.RED + "80" + C.WHITE + " Fuel", + // fire - lava - 100 + C.RESET + " 霚 " + C.WHITE + "[霙] +" + C.RED + "100" + C.WHITE + " Fuel", + "" + }; + + //Fuel Item. + super.addItem(new MenuItem(19, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) 0) + .setName(C.GOLD + C.BOLD + "MACHINE FUEL") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + + //Fuel Dummy Item. + super.addItem(new MenuItem(10, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.GOLD + C.BOLD + "MACHINE FUEL") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + + //Fuel Dummy Item. + super.addItem(new MenuItem(1, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.GOLD + C.BOLD + "MACHINE FUEL") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + } + + private void initDurabilityItems() { + String[] lore = { + C.GRAY + " Once the durability is gone, you will", + C.GRAY + " need to fix your machine to repair it.", + "" + }; + + //Fuel Item. + super.addItem(new MenuItem(25, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) 0) + .setName(C.AQUA + C.BOLD + "MACHINE DURABILITY") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + + //Fuel Dummy Item. + super.addItem(new MenuItem(16, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.AQUA + C.BOLD + "MACHINE DURABILITY") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + + //Fuel Dummy Item. + super.addItem(new MenuItem(7, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.AQUA + C.BOLD + "MACHINE DURABILITY") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/menu/type/RecipeMenuWhiteMeth.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/menu/type/RecipeMenuWhiteMeth.java new file mode 100644 index 0000000..1e80b98 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/menu/type/RecipeMenuWhiteMeth.java @@ -0,0 +1,174 @@ +package net.grandtheftmc.vice.machine.recipe.menu.type; + +import net.grandtheftmc.core.inventory.CoreMenuFlag; +import net.grandtheftmc.core.inventory.button.MenuItem; +import net.grandtheftmc.core.util.C; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.vice.machine.recipe.menu.RecipeMenu; +import net.grandtheftmc.vice.machine.recipe.type.RecipeWhiteMeth; +import org.bukkit.Material; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.inventory.ItemFlag; + +public final class RecipeMenuWhiteMeth extends RecipeMenu { + + public RecipeMenuWhiteMeth() { + super(3, "Recipe : Meth Producer", new RecipeWhiteMeth(), CoreMenuFlag.RESET_CURSOR_ON_OPEN, CoreMenuFlag.CLOSE_ON_NULL_CLICK); + + super.setBlockedSlots(0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 23, 24, 25, 26); + super.setOpenSlots(4); + super.setOutputSlots(22); + + super.initRecipeItems(); + + String[] description = { + C.DARK_GRAY + C.ITALIC + " " + super.getTitle(), + "", + "", + C.YELLOW + C.BOLD + "MACHINE RECIPES", + C.GRAY + " Note, recipes consume fuel and durability.", + C.GRAY + " Some more than others.", + "", + " " + i("霠", 5) + " 霚 " + i("霐", 1), + "" + }; + + for (int i : super.getBlockedSlots()) { + super.addItem(new MenuItem(i, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.GREEN + C.BOLD + "MACHINE TUTORIAL") + .setLore(description) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + } + + //Machine Frame + super.addItem(new MenuItem(0, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) 79) + .setName(C.GREEN + C.BOLD + "MACHINE TUTORIAL") + .setLore(description) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + + this.initFuelItems(); + this.initDurabilityItems(); + + //Progress Item. + super.addItem(new MenuItem(11, + new ItemFactory(Material.STONE_SWORD) + .setDurability(super.progress) + .setName(C.GREEN + C.BOLD + "MACHINE TUTORIAL") + .setLore(description) + .setEnchantment(Enchantment.DURABILITY, 1) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + } + + private void initFuelItems() { + String[] lore = { + C.GRAY + " Adding burnable items will replenish", + C.GRAY + " your machine fuel counter.", + "", + // fire - oak_plank - 2 + C.RESET + " 霚 " + C.WHITE + "[霡] +" + C.YELLOW + "2" + C.WHITE + " Fuel", + // fire - coal - 8 + C.RESET + " 霚 " + C.WHITE + "[霖] +" + C.GOLD + "8" + C.WHITE + " Fuel", + // fire - coal_block - 160 + C.RESET + " 霚 " + C.WHITE + "[霗] +" + C.RED + "80" + C.WHITE + " Fuel", + // fire - lava - 100 + C.RESET + " 霚 " + C.WHITE + "[霙] +" + C.RED + "100" + C.WHITE + " Fuel", + "" + }; + + //Fuel Item. + super.addItem(new MenuItem(19, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) 0) + .setName(C.GOLD + C.BOLD + "MACHINE FUEL") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + + //Fuel Dummy Item. + super.addItem(new MenuItem(10, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.GOLD + C.BOLD + "MACHINE FUEL") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + + //Fuel Dummy Item. + super.addItem(new MenuItem(1, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.GOLD + C.BOLD + "MACHINE FUEL") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + } + + private void initDurabilityItems() { + String[] lore = { + C.GRAY + " Once the durability is gone, you will", + C.GRAY + " need to fix your machine to repair it.", + "" + }; + + //Fuel Item. + super.addItem(new MenuItem(25, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) 0) + .setName(C.AQUA + C.BOLD + "MACHINE DURABILITY") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + + //Fuel Dummy Item. + super.addItem(new MenuItem(16, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.AQUA + C.BOLD + "MACHINE DURABILITY") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + + //Fuel Dummy Item. + super.addItem(new MenuItem(7, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.AQUA + C.BOLD + "MACHINE DURABILITY") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build(), + false + )); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/misc/MachineRecipeData.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/misc/MachineRecipeData.java new file mode 100644 index 0000000..4c54728 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/misc/MachineRecipeData.java @@ -0,0 +1,63 @@ +package net.grandtheftmc.vice.machine.recipe.misc; + +import net.grandtheftmc.vice.machine.BaseMachine; +import net.grandtheftmc.vice.machine.data.MachineData; +import net.grandtheftmc.vice.machine.data.MachineDataType; +import net.grandtheftmc.vice.machine.event.MachineRecipeCompleteEvent; +import net.grandtheftmc.vice.machine.recipe.MachineRecipe; +import org.bukkit.Bukkit; + +public final class MachineRecipeData { + + private final BaseMachine machine; + private final MachineRecipe recipe; + private final MachineData data; + + private long next = -1; + + public MachineRecipeData(BaseMachine machine, MachineRecipe recipe) { + this.machine = machine; + this.recipe = recipe; + this.data = machine.getData(MachineDataType.PROGRESS); + } + + public MachineRecipe getRecipe() { + return this.recipe; + } + + public boolean next() { +// double progress = this.getProgress(); +// double max = this.getMaxProgress(); +// +// if (progress >= max) { +// this.data.setCurrent(0); +// } +// +// if (progress + amount >= max) { +// this.data.setCurrent(max); +// +// MachineRecipeCompleteEvent event = new MachineRecipeCompleteEvent(this.machine, this); +// Bukkit.getPluginManager().callEvent(event); +// return; +// } +// +// this.data.add(amount); + + if (this.next < 0) { + this.next = System.currentTimeMillis() + ((this.recipe.getTime() * 1000) / (int) this.data.getMax()); + } + + if (System.currentTimeMillis() > this.next) { + this.data.add(1); + this.next = System.currentTimeMillis() + ((this.recipe.getTime() * 1000) / (int) this.data.getMax()); + + if (this.data.getCurrent() == this.data.getMax()) { + MachineRecipeCompleteEvent event = new MachineRecipeCompleteEvent(this.machine, this); + Bukkit.getPluginManager().callEvent(event); + } + return true; + } + + return false; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/misc/RecipeInput.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/misc/RecipeInput.java new file mode 100644 index 0000000..1b67afc --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/misc/RecipeInput.java @@ -0,0 +1,22 @@ +package net.grandtheftmc.vice.machine.recipe.misc; + +import org.bukkit.inventory.ItemStack; + +public final class RecipeInput { + + private final ItemStack itemStack; + private final int amount; + + public RecipeInput(ItemStack itemStack, int amount) { + this.itemStack = itemStack; + this.amount = amount; + } + + public ItemStack getItemStack() { + return itemStack; + } + + public int getAmount() { + return amount; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/misc/RecipeOutput.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/misc/RecipeOutput.java new file mode 100644 index 0000000..c06f2fd --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/misc/RecipeOutput.java @@ -0,0 +1,22 @@ +package net.grandtheftmc.vice.machine.recipe.misc; + +import org.bukkit.inventory.ItemStack; + +public final class RecipeOutput { + + private final ItemStack itemStack; + private final int amount; + + public RecipeOutput(ItemStack itemStack, int amount) { + this.itemStack = itemStack; + this.amount = amount; + } + + public ItemStack getItemStack() { + return itemStack; + } + + public int getAmount() { + return amount; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/type/RecipeAcid.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/type/RecipeAcid.java new file mode 100644 index 0000000..72b0a8e --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/type/RecipeAcid.java @@ -0,0 +1,29 @@ +package net.grandtheftmc.vice.machine.recipe.type; + +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.machine.recipe.MachineRecipe; +import net.grandtheftmc.vice.machine.recipe.misc.RecipeInput; +import net.grandtheftmc.vice.machine.recipe.misc.RecipeOutput; + +public final class RecipeAcid extends MachineRecipe { + + /** + * Construct a new Machine Recipe. + */ + public RecipeAcid() { + super( + 11, + new RecipeInput[] { + new RecipeInput(Vice.getItemManager().getItem("ergotfungi").getItem(), 1) + }, + new RecipeOutput[] { + new RecipeOutput(Vice.getItemManager().getItem("acid").getItem(), 1) + }, + 2, + 100, + 10 + ); + + super.setRecipeText(_("霁", 1) + " 霚 " + _("霎", 1)); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/type/RecipeBeer.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/type/RecipeBeer.java new file mode 100644 index 0000000..8b144ac --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/type/RecipeBeer.java @@ -0,0 +1,32 @@ +package net.grandtheftmc.vice.machine.recipe.type; + +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.machine.recipe.MachineRecipe; +import net.grandtheftmc.vice.machine.recipe.misc.RecipeInput; +import net.grandtheftmc.vice.machine.recipe.misc.RecipeOutput; +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; + +public final class RecipeBeer extends MachineRecipe { + + /** + * Construct a new Machine Recipe. + */ + public RecipeBeer() { + super( + 2, + new RecipeInput[] { + new RecipeInput(Vice.getItemManager().getItem("hop").getItem(), 6), + new RecipeInput(new ItemStack(Material.GLASS_BOTTLE), 1) + }, + new RecipeOutput[] { + new RecipeOutput(Vice.getItemManager().getItem("alcohol").getItem(), 1) + }, + 2, + 100, + 15 + ); + + super.setRecipeText(_("霂", 6) + " " + _("霔", 1) + " 霚 " + _("霃", 1)); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/type/RecipeCocaine.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/type/RecipeCocaine.java new file mode 100644 index 0000000..0af557e --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/type/RecipeCocaine.java @@ -0,0 +1,29 @@ +package net.grandtheftmc.vice.machine.recipe.type; + +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.machine.recipe.MachineRecipe; +import net.grandtheftmc.vice.machine.recipe.misc.RecipeInput; +import net.grandtheftmc.vice.machine.recipe.misc.RecipeOutput; + +public final class RecipeCocaine extends MachineRecipe { + + /** + * Construct a new Machine Recipe. + */ + public RecipeCocaine() { + super( + 12, + new RecipeInput[] { + new RecipeInput(Vice.getItemManager().getItem("crack").getItem(), 1) + }, + new RecipeOutput[] { + new RecipeOutput(Vice.getItemManager().getItem("cocaine").getItem(), 1) + }, + 2, + 100, + 10 + ); + + super.setRecipeText(_("霓", 1) + " 霚 " + _("霍", 1)); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/type/RecipeConcentratedMagicMushroom.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/type/RecipeConcentratedMagicMushroom.java new file mode 100644 index 0000000..2d7d1df --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/type/RecipeConcentratedMagicMushroom.java @@ -0,0 +1,34 @@ +package net.grandtheftmc.vice.machine.recipe.type; + +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.machine.recipe.MachineRecipe; +import net.grandtheftmc.vice.machine.recipe.misc.RecipeInput; +import net.grandtheftmc.vice.machine.recipe.misc.RecipeOutput; + +public final class RecipeConcentratedMagicMushroom extends MachineRecipe { + + /* + Concentrated Magic Mushroom + Dried Magic Mushroom -> Process -> Concentrated Magic Mushroom + */ + + /** + * Construct a new Machine Recipe. + */ + public RecipeConcentratedMagicMushroom() { + super( + 10, + new RecipeInput[] { + new RecipeInput(Vice.getItemManager().getItem("driedmagicmushroom").getItem(), 1) + }, + new RecipeOutput[] { + new RecipeOutput(Vice.getItemManager().getItem("concentratedmagicmushroom").getItem(), 1) + }, + 2, + 100, + 10 + ); + + super.setRecipeText(_("霋", 1) + " 霚 " + _("霌", 1)); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/type/RecipeCrack.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/type/RecipeCrack.java new file mode 100644 index 0000000..5503efd --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/type/RecipeCrack.java @@ -0,0 +1,37 @@ +package net.grandtheftmc.vice.machine.recipe.type; + +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.machine.recipe.MachineRecipe; +import net.grandtheftmc.vice.machine.recipe.misc.RecipeInput; +import net.grandtheftmc.vice.machine.recipe.misc.RecipeOutput; + +public final class RecipeCrack extends MachineRecipe { + + /* + Crack + Get Coca Seed + Plant Coca Seed -> Coca Plant Grows + Destroy Melon -> 2 Coca Leaf + Coca Leaf -> Process -> Crack + */ + + /** + * Construct a new Machine Recipe. + */ + public RecipeCrack() { + super( + 9, + new RecipeInput[] { + new RecipeInput(Vice.getItemManager().getItem("cocaleaf").getItem(), 3) + }, + new RecipeOutput[] { + new RecipeOutput(Vice.getItemManager().getItem("crack").getItem(), 1) + }, + 2, + 100, + 10 + ); + + super.setRecipeText(_("霅", 3) + " 霚 " + _("霓", 1)); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/type/RecipeCraftBeer.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/type/RecipeCraftBeer.java new file mode 100644 index 0000000..cd8b775 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/type/RecipeCraftBeer.java @@ -0,0 +1,32 @@ +package net.grandtheftmc.vice.machine.recipe.type; + +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.machine.recipe.MachineRecipe; +import net.grandtheftmc.vice.machine.recipe.misc.RecipeInput; +import net.grandtheftmc.vice.machine.recipe.misc.RecipeOutput; +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; + +public final class RecipeCraftBeer extends MachineRecipe { + + /** + * Construct a new Machine Recipe. + */ + public RecipeCraftBeer() { + super( + 7, + new RecipeInput[] { + new RecipeInput(new ItemStack(Material.INK_SACK), 5), + new RecipeInput(Vice.getItemManager().getItem("alcohol").getItem(), 1) + }, + new RecipeOutput[] { + new RecipeOutput(Vice.getItemManager().getItem("craftbeer").getItem(), 1) + }, + 2, + 100, + 10 + ); + + super.setRecipeText(_("霕", 5) + _("霃", 1) + " 霚 " + _("霈", 1)); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/type/RecipeDistilledVodka.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/type/RecipeDistilledVodka.java new file mode 100644 index 0000000..a537e50 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/type/RecipeDistilledVodka.java @@ -0,0 +1,32 @@ +package net.grandtheftmc.vice.machine.recipe.type; + +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.machine.recipe.MachineRecipe; +import net.grandtheftmc.vice.machine.recipe.misc.RecipeInput; +import net.grandtheftmc.vice.machine.recipe.misc.RecipeOutput; +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; + +public final class RecipeDistilledVodka extends MachineRecipe { + + /** + * Construct a new Machine Recipe. + */ + public RecipeDistilledVodka() { + super( + 8, + new RecipeInput[] { + new RecipeInput(new ItemStack(Material.GOLD_NUGGET), 3), + new RecipeInput(Vice.getItemManager().getItem("vodka").getItem(), 1) + }, + new RecipeOutput[] { + new RecipeOutput(Vice.getItemManager().getItem("distilledvodka").getItem(), 1) + }, + 2, + 100, + 10 + ); + + super.setRecipeText(_("霛", 3) + _("霉", 1) + " 霚 " + _("霝", 1)); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/type/RecipeDriedMushroomBrown.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/type/RecipeDriedMushroomBrown.java new file mode 100644 index 0000000..489c47e --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/type/RecipeDriedMushroomBrown.java @@ -0,0 +1,29 @@ +package net.grandtheftmc.vice.machine.recipe.type; + +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.machine.recipe.MachineRecipe; +import net.grandtheftmc.vice.machine.recipe.misc.RecipeInput; +import net.grandtheftmc.vice.machine.recipe.misc.RecipeOutput; + +public final class RecipeDriedMushroomBrown extends MachineRecipe { + + /** + * Construct a new Machine Recipe. + */ + public RecipeDriedMushroomBrown() { + super( + 5, + new RecipeInput[] { + new RecipeInput(Vice.getItemManager().getItem("magicmushroombrown").getItem(), 1) + }, + new RecipeOutput[] { + new RecipeOutput(Vice.getItemManager().getItem("driedmagicmushroom").getItem(), 1) + }, + 2, + 100, + 10 + ); + + super.setRecipeText(_("霞", 1) + " 霚 " + _("霋", 1)); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/type/RecipeDriedMushroomRed.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/type/RecipeDriedMushroomRed.java new file mode 100644 index 0000000..007bea5 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/type/RecipeDriedMushroomRed.java @@ -0,0 +1,29 @@ +package net.grandtheftmc.vice.machine.recipe.type; + +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.machine.recipe.MachineRecipe; +import net.grandtheftmc.vice.machine.recipe.misc.RecipeInput; +import net.grandtheftmc.vice.machine.recipe.misc.RecipeOutput; + +public final class RecipeDriedMushroomRed extends MachineRecipe { + + /** + * Construct a new Machine Recipe. + */ + public RecipeDriedMushroomRed() { + super( + 4, + new RecipeInput[] { + new RecipeInput(Vice.getItemManager().getItem("magicmushroomred").getItem(), 1) + }, + new RecipeOutput[] { + new RecipeOutput(Vice.getItemManager().getItem("driedmagicmushroom").getItem(), 1) + }, + 2, + 100, + 10 + ); + + super.setRecipeText(_("霟", 1) + " 霚 " + _("霋", 1)); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/type/RecipeHumulusLupulusFruit.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/type/RecipeHumulusLupulusFruit.java new file mode 100644 index 0000000..443e736 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/type/RecipeHumulusLupulusFruit.java @@ -0,0 +1,29 @@ +package net.grandtheftmc.vice.machine.recipe.type; + +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.machine.recipe.MachineRecipe; +import net.grandtheftmc.vice.machine.recipe.misc.RecipeInput; +import net.grandtheftmc.vice.machine.recipe.misc.RecipeOutput; + +public final class RecipeHumulusLupulusFruit extends MachineRecipe { + + /** + * Construct a new Machine Recipe. + */ + public RecipeHumulusLupulusFruit() { + super( + 1, + new RecipeInput[] { + new RecipeInput(Vice.getItemManager().getItem("humuluslupulusfruit").getItem(), 1) + }, + new RecipeOutput[] { + new RecipeOutput(Vice.getItemManager().getItem("hop").getItem(), 6) + }, + 2, + 100, + 10 + ); + + super.setRecipeText(_("需", 1) + " 霚 " + _("霂", 6)); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/type/RecipeLSD.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/type/RecipeLSD.java new file mode 100644 index 0000000..0ae495e --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/type/RecipeLSD.java @@ -0,0 +1,29 @@ +package net.grandtheftmc.vice.machine.recipe.type; + +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.machine.recipe.MachineRecipe; +import net.grandtheftmc.vice.machine.recipe.misc.RecipeInput; +import net.grandtheftmc.vice.machine.recipe.misc.RecipeOutput; + +public final class RecipeLSD extends MachineRecipe { + + /** + * Construct a new Machine Recipe. + */ + public RecipeLSD() { + super( + 14, + new RecipeInput[] { + new RecipeInput(Vice.getItemManager().getItem("acid").getItem(), 1) + }, + new RecipeOutput[] { + new RecipeOutput(Vice.getItemManager().getItem("lsd").getItem(), 1) + }, + 2, + 100, + 10 + ); + + super.setRecipeText(_("霎", 1) + " 霚 " + _("霏", 1)); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/type/RecipePureMeth.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/type/RecipePureMeth.java new file mode 100644 index 0000000..e00effb --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/type/RecipePureMeth.java @@ -0,0 +1,30 @@ +package net.grandtheftmc.vice.machine.recipe.type; + +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.machine.recipe.MachineRecipe; +import net.grandtheftmc.vice.machine.recipe.misc.RecipeInput; +import net.grandtheftmc.vice.machine.recipe.misc.RecipeOutput; + +public final class RecipePureMeth extends MachineRecipe { + + /** + * Construct a new Machine Recipe. + */ + public RecipePureMeth() { + super( + 15, + new RecipeInput[] { + new RecipeInput(Vice.getItemManager().getItem("methylamine").getItem(), 1), + new RecipeInput(Vice.getItemManager().getItem("ephedrasinica").getItem(), 64) + }, + new RecipeOutput[] { + new RecipeOutput(Vice.getItemManager().getItem("puremeth").getItem(), 4) + }, + 16, + 800, + 2560 + ); + + super.setRecipeText(_("霑", 1) + _("霠", 64) + " 霚 " + _("霒", 4)); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/type/RecipeVodka.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/type/RecipeVodka.java new file mode 100644 index 0000000..6d31a8c --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/type/RecipeVodka.java @@ -0,0 +1,40 @@ +package net.grandtheftmc.vice.machine.recipe.type; + +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.machine.recipe.MachineRecipe; +import net.grandtheftmc.vice.machine.recipe.misc.RecipeInput; +import net.grandtheftmc.vice.machine.recipe.misc.RecipeOutput; +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; + +public final class RecipeVodka extends MachineRecipe { + + /* + Vodka + - Get potato seeds + - Plant potatoes in tilled earth + - Destroy potato plant to get a potato + - Place potato with glass bottle in Vodka Distillery to get Vodka + */ + + /** + * Construct a new Machine Recipe. + */ + public RecipeVodka() { + super( + 6, + new RecipeInput[] { + new RecipeInput(new ItemStack(Material.POTATO_ITEM), 6), + new RecipeInput(new ItemStack(Material.GLASS_BOTTLE), 1) + }, + new RecipeOutput[] { + new RecipeOutput(Vice.getItemManager().getItem("vodka").getItem(), 1) + }, + 2, + 100, + 10 + ); + + super.setRecipeText(_("霜", 6) + _("霔", 1) + " 霚 " + _("霉", 1)); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/type/RecipeWeed.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/type/RecipeWeed.java new file mode 100644 index 0000000..524904a --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/type/RecipeWeed.java @@ -0,0 +1,29 @@ +package net.grandtheftmc.vice.machine.recipe.type; + +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.machine.recipe.MachineRecipe; +import net.grandtheftmc.vice.machine.recipe.misc.RecipeInput; +import net.grandtheftmc.vice.machine.recipe.misc.RecipeOutput; + +public final class RecipeWeed extends MachineRecipe { + + /** + * Construct a new Machine Recipe. + */ + public RecipeWeed() { + super( + 3, + new RecipeInput[] { + new RecipeInput(Vice.getItemManager().getItem("marijuanaleaf").getItem(), 1) + }, + new RecipeOutput[] { + new RecipeOutput(Vice.getItemManager().getItem("weed").getItem(), 1) + }, + 2, + 100, + 10 + ); + + super.setRecipeText(_("霢", 1) + " 霚 " + _("霆", 1)); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/type/RecipeWhiteMeth.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/type/RecipeWhiteMeth.java new file mode 100644 index 0000000..c96472c --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/recipe/type/RecipeWhiteMeth.java @@ -0,0 +1,36 @@ +package net.grandtheftmc.vice.machine.recipe.type; + +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.machine.recipe.MachineRecipe; +import net.grandtheftmc.vice.machine.recipe.misc.RecipeInput; +import net.grandtheftmc.vice.machine.recipe.misc.RecipeOutput; + +public final class RecipeWhiteMeth extends MachineRecipe { + + /* + White Meth + Find Ephredra Sinica Seeds + Plant -> Grow -> Ephredra Sinica + Ephredra Sinica -> Process -> White Meth + */ + + /** + * Construct a new Machine Recipe. + */ + public RecipeWhiteMeth() { + super( + 13, + new RecipeInput[] { + new RecipeInput(Vice.getItemManager().getItem("ephedrasinica").getItem(), 5) + }, + new RecipeOutput[] { + new RecipeOutput(Vice.getItemManager().getItem("whitemeth").getItem(), 1) + }, + 2, + 100, + 10 + ); + + super.setRecipeText(_("霠", 5) + " 霚 " + _("霐", 1)); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/repair/MachineRepairMenu.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/repair/MachineRepairMenu.java new file mode 100644 index 0000000..2411317 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/repair/MachineRepairMenu.java @@ -0,0 +1,211 @@ +package net.grandtheftmc.vice.machine.repair; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.inventory.CoreMenu; +import net.grandtheftmc.core.inventory.CoreMenuFlag; +import net.grandtheftmc.core.inventory.button.ClickableItem; +import net.grandtheftmc.core.inventory.button.MenuItem; +import net.grandtheftmc.core.util.C; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.vice.machine.MachineManager; +import net.grandtheftmc.vice.utils.ItemStackUtil; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryCloseEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; + +public final class MachineRepairMenu extends CoreMenu { + + private static final int[] input = new int[] {10,11,12,13}; + private final MachineManager machineManager; + + public MachineRepairMenu(MachineManager machineManager) { + super(3, "Machine Mechanic", CoreMenuFlag.RESET_CURSOR_ON_OPEN); + this.machineManager = machineManager; + super.setSelfHandle(true); + + //Slot 10 - 13 = Fragment input + + //Slot 15 = Machine output + super.addItem(new MenuItem(15, new ItemStack(Material.BARRIER, 1), false)); + + String[] desc = { + C.GRAY + C.ITALIC + " Place 4 of the same type", + C.GRAY + C.ITALIC + " of fragments to construct", + C.GRAY + C.ITALIC + " a functional Machine!", + }; + + super.addItem(new MenuItem(0, new ItemFactory(Material.STONE_SWORD).setDurability((short) 78) + .setName(C.YELLOW + C.BOLD + "Machine Mechanic").setLore(desc).setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS).build(), false)); + + for (int slot : new int[] {1,2,3,4,5,6,7,8,9,14,16,17,18,19,20,21,22,23,24,25,26}) { + super.addItem(new MenuItem(slot, new ItemFactory(Material.STAINED_GLASS_PANE, (byte) 0) + .setName(C.YELLOW + C.BOLD + "Machine Mechanic").setLore(desc).build(), false)); + } + } + + private void generateMachine(int machineId) { + ItemStack itemStack = this.machineManager.getMachineItemById(machineId); + if (itemStack.getType() == Material.STONE) { + super.addItem(new MenuItem(15, new ItemStack(Material.BARRIER, 1), false)); + return; + } + +// super.addItem(new MenuItem(15, itemStack, true)); + + super.addItem(new ClickableItem(15, itemStack, true, (player, clickType) -> { +// if (player.getInventory().firstEmpty() != -1) { +// player.getInventory().addItem(itemStack); +// redeemed = true; +// player.closeInventory(); +// return; +// } +// +// player.getWorld().dropItemNaturally(player.getLocation(), itemStack); +// player.sendMessage(C.RED + "Machine dropped on the floor, your inventory was full."); +// redeemed = true; +// player.closeInventory(); + + for (int i : input) { + ItemStack item = super.getInventory().getItem(i); + if (item.getAmount() > 1) { + item.setAmount(item.getAmount() - 1); + } + else { + super.getInventory().setItem(i, new ItemStack(Material.AIR)); + } + } + + if (player.getInventory().firstEmpty() != -1) { + player.getInventory().addItem(itemStack); + return; + } + + player.getWorld().dropItemNaturally(player.getLocation(), itemStack); + player.sendMessage(C.RED + "Machine dropped on the floor, your inventory was full."); + })); + } + + @Override + public void selfHandle(InventoryClickEvent event) { +// super.selfHandle(event); + + CoreMenu menu = (CoreMenu)event.getInventory().getHolder(); + Player player = (Player)event.getWhoClicked(); + ItemStack clicked = event.getCurrentItem(); + + if (clicked!=null && clicked.getType() == Material.CHEST) { + event.setCancelled(true); + return; + } + + MenuItem item = menu.getMenuItem(event.getRawSlot()); + if (item != null && event.getRawSlot() == 15 && this.machineManager.isType(item.getItemStack().getType())) { + switch (event.getAction()) { + case PICKUP_ALL: + case PICKUP_SOME: + case PICKUP_HALF: + case PICKUP_ONE: + case MOVE_TO_OTHER_INVENTORY: + case COLLECT_TO_CURSOR: + if (item instanceof ClickableItem) { + event.setCancelled(true); + ((ClickableItem)item).getClickAction().onClick(player, event.getClick()); + } + return; + + default: + event.setCancelled(true); + return; + } + } + + menu.onClick(event); + if (item != null) { + if (!item.isAllowingPickup()) { + event.setCancelled(true); + } + + if (item instanceof ClickableItem) { + ((ClickableItem)item).getClickAction().onClick(player, event.getClick()); + } + } + } + + @Override + public void onInteract(CoreMenu menu) { + check(menu.getInventory()); + } + + private void check(Inventory inventory) { + ServerUtil.runTaskLater(() -> { + int id = -1; + boolean stable = true; + for (int slot : input) { + ItemStack found = inventory.getItem(slot); + if (found == null || found.getType() != Material.PRISMARINE_SHARD) { + stable = false; + break; + } + + if (!ItemStackUtil.hasTag(found, "machineid")) { + stable = false; + break; + } + + if (id == -1) { + id = ItemStackUtil.getIntTag(found, "machineid"); + continue; + } + + int temp = ItemStackUtil.getIntTag(found, "machineid"); + if (id != temp) { + stable = false; + break; + } + } + + if (!stable) id = -1; +// +// int amount = -1; +// for (int slot : input) { +// ItemStack found = inventory.getItem(slot); +// if (amount == -1) { +// amount = found.getAmount(); +// continue; +// } +// +// if (amount != found.getAmount()) { +// stable = false; +// break; +// } +// } +// +// if (!stable) id = -1; + + this.generateMachine(id); + }, 1); + } + + @Override + public void onClose(InventoryCloseEvent event) { + Player player = (Player)event.getPlayer(); + for (int slot : input) { + ItemStack found = event.getInventory().getItem(slot); + if (found == null || found.getType() == Material.AIR) continue; + + if (player.getInventory().firstEmpty() != -1) { + player.getInventory().addItem(found); + continue; + } + + player.getWorld().dropItemNaturally(event.getPlayer().getLocation(), found); + } + player.updateInventory(); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/type/MachineAdvancedMethProducer.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/type/MachineAdvancedMethProducer.java new file mode 100644 index 0000000..e0cd2bf --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/type/MachineAdvancedMethProducer.java @@ -0,0 +1,203 @@ +package net.grandtheftmc.vice.machine.type; + +import net.grandtheftmc.core.util.C; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.vice.machine.BaseMachine; +import net.grandtheftmc.vice.machine.data.MachineData; +import net.grandtheftmc.vice.machine.data.MachineDataType; +import net.grandtheftmc.vice.machine.misc.MachineProgressMultiplier; +import org.bukkit.Material; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.inventory.ItemFlag; + +public final class MachineAdvancedMethProducer extends BaseMachine implements MachineProgressMultiplier { + + /** + * Construct a Machine + */ + public MachineAdvancedMethProducer() { + super( + 9, + "Advanced Meth Producer", + Material.DROPPER + ); + + // FUEL + MachineData fuelData = new MachineData(MachineData.DataFlag.UP, 100, 0); + fuelData.setTextures(0, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2); + fuelData.setSlots(20); + super.setData(MachineDataType.FUEL, fuelData); + + // DURABILITY + MachineData durabilityData = new MachineData(MachineData.DataFlag.UP, 2500); + durabilityData.setTextures(0, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27); + super.setData(MachineDataType.DURABILITY, durabilityData); + + // PROGRESS + MachineData progressData = new MachineData(MachineData.DataFlag.DOWN, 20, 0); + progressData.setTextures(0, 71, 70, 69, 68, 67, 66, 65, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52); + super.setData(MachineDataType.PROGRESS, progressData); + + super.setBlockedSlots(0, 1, 2, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 23, 24, 25, 26); + super.setOpenSlots(3, 5); + super.setOutputSlots(22); + + super.setMachineItem(new ItemFactory(Material.DROPPER).setName(C.WHITE + C.BOLD + super.getName()).setLore(C.GRAY + "Machine").build()); + + String[] description = { + C.DARK_GRAY + C.ITALIC + " " + super.getName(), + "", + "", + C.YELLOW + C.BOLD + "MACHINE RECIPES", + C.GRAY + " Note, recipes consume fuel and durability.", + C.GRAY + " Some more than others.", + "", + " " + i("霑", 1) + i("霠", 64) + " 霚 " + i("霒", 4), + "", + C.GRAY + " Use the command " + C.WHITE + "/recipe" + C.GRAY + " for", + C.GRAY + " a visual tutorial on drug recipes." + }; + + for (int i : super.getBlockedSlots()) { + super.getInventory().setItem(i, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.GREEN + C.BOLD + "MACHINE TUTORIAL") + .setLore(description) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + } + + //Machine Frame + super.getInventory().setItem(0, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) 80) + .setName(C.GREEN + C.BOLD + "MACHINE TUTORIAL") + .setLore(description) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + + this.initFuelItems(fuelData); + this.initDurabilityItems(durabilityData); + + //Progress Item. + super.getInventory().setItem(11, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) progressData.getTexture()) + .setName(C.GREEN + C.BOLD + "MACHINE TUTORIAL") + .setLore(description) + .setEnchantment(Enchantment.DURABILITY, 1) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + } + + private void initFuelItems(MachineData data) { + String[] lore = { + C.GRAY + " Adding burnable items will replenish", + C.GRAY + " your machine fuel counter.", + "", + // fire - oak_plank - 2 + C.RESET + " 霚 " + C.WHITE + "[霡] +" + C.YELLOW + "2" + C.WHITE + " Fuel", + // fire - coal - 8 + C.RESET + " 霚 " + C.WHITE + "[霖] +" + C.GOLD + "8" + C.WHITE + " Fuel", + // fire - coal_block - 160 + C.RESET + " 霚 " + C.WHITE + "[霗] +" + C.RED + "80" + C.WHITE + " Fuel", + // fire - lava - 100 + C.RESET + " 霚 " + C.WHITE + "[霙] +" + C.RED + "100" + C.WHITE + " Fuel", + "", + C.GRAY + " Use the command " + C.WHITE + "/recipe" + C.GRAY + " for", + C.GRAY + " a visual tutorial on drug recipes." + }; + + //Fuel Item. + super.getInventory().setItem(19, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) 0) + .setName(C.GOLD + C.BOLD + "MACHINE FUEL") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + + //Fuel Dummy Item. + super.getInventory().setItem(10, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.GOLD + C.BOLD + "MACHINE FUEL") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + + //Fuel Dummy Item. + super.getInventory().setItem(1, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.GOLD + C.BOLD + "MACHINE FUEL") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + } + + private void initDurabilityItems(MachineData data) { + String[] lore = { + C.GRAY + " Once the durability is gone, you will", + C.GRAY + " need to fix your machine to repair it.", + "" + }; + + //Fuel Item. + super.getInventory().setItem(25, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) 0) + .setName(C.AQUA + C.BOLD + "MACHINE DURABILITY") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + + //Fuel Dummy Item. + super.getInventory().setItem(16, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.AQUA + C.BOLD + "MACHINE DURABILITY") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + + //Fuel Dummy Item. + super.getInventory().setItem(7, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.AQUA + C.BOLD + "MACHINE DURABILITY") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + } + + /** + * This multiplier will speed up the brewing/ cooking + * progress by the given amount. + * + * @return + */ + @Override + public double getMultiplier() { + return 2; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/type/MachineBasicMethProducer.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/type/MachineBasicMethProducer.java new file mode 100644 index 0000000..048bdca --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/type/MachineBasicMethProducer.java @@ -0,0 +1,189 @@ +package net.grandtheftmc.vice.machine.type; + +import net.grandtheftmc.core.util.C; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.vice.machine.BaseMachine; +import net.grandtheftmc.vice.machine.data.MachineData; +import net.grandtheftmc.vice.machine.data.MachineDataType; +import org.bukkit.Material; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.inventory.ItemFlag; + +public final class MachineBasicMethProducer extends BaseMachine { + + /** + * Construct a Machine + */ + public MachineBasicMethProducer() { + super( + 8, + "Basic Meth Producer", + Material.DROPPER + ); + + // FUEL + MachineData fuelData = new MachineData(MachineData.DataFlag.UP, 100, 0); + fuelData.setTextures(0, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2); + fuelData.setSlots(20); + super.setData(MachineDataType.FUEL, fuelData); + + // DURABILITY + MachineData durabilityData = new MachineData(MachineData.DataFlag.UP, 37500); + durabilityData.setTextures(0, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27); + super.setData(MachineDataType.DURABILITY, durabilityData); + + // PROGRESS + MachineData progressData = new MachineData(MachineData.DataFlag.DOWN, 20, 0); + progressData.setTextures(0, 71, 70, 69, 68, 67, 66, 65, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52); + super.setData(MachineDataType.PROGRESS, progressData); + + super.setBlockedSlots(0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 23, 24, 25, 26); + super.setOpenSlots(4); + super.setOutputSlots(22); + + super.setMachineItem(new ItemFactory(Material.DROPPER).setName(C.WHITE + C.BOLD + super.getName()).setLore(C.GRAY + "Machine").build()); + + String[] description = { + C.DARK_GRAY + C.ITALIC + " " + super.getName(), + "", + "", + C.YELLOW + C.BOLD + "MACHINE RECIPES", + C.GRAY + " Note, recipes consume fuel and durability.", + C.GRAY + " Some more than others.", + "", + " " + i("霠", 5) + " 霚 " + i("霐", 1), + "", + C.GRAY + " Use the command " + C.WHITE + "/recipe" + C.GRAY + " for", + C.GRAY + " a visual tutorial on drug recipes." + }; + + for (int i : super.getBlockedSlots()) { + super.getInventory().setItem(i, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.GREEN + C.BOLD + "MACHINE TUTORIAL") + .setLore(description) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + } + + //Machine Frame + super.getInventory().setItem(0, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) 79) + .setName(C.GREEN + C.BOLD + "MACHINE TUTORIAL") + .setLore(description) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + + this.initFuelItems(fuelData); + this.initDurabilityItems(durabilityData); + + //Progress Item. + super.getInventory().setItem(11, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) progressData.getTexture()) + .setName(C.GREEN + C.BOLD + "MACHINE TUTORIAL") + .setLore(description) + .setEnchantment(Enchantment.DURABILITY, 1) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + } + + private void initFuelItems(MachineData data) { + String[] lore = { + C.GRAY + " Adding burnable items will replenish", + C.GRAY + " your machine fuel counter.", + "", + // fire - oak_plank - 2 + C.RESET + " 霚 " + C.WHITE + "[霡] +" + C.YELLOW + "2" + C.WHITE + " Fuel", + // fire - coal - 8 + C.RESET + " 霚 " + C.WHITE + "[霖] +" + C.GOLD + "8" + C.WHITE + " Fuel", + // fire - coal_block - 160 + C.RESET + " 霚 " + C.WHITE + "[霗] +" + C.RED + "80" + C.WHITE + " Fuel", + // fire - lava - 100 + C.RESET + " 霚 " + C.WHITE + "[霙] +" + C.RED + "100" + C.WHITE + " Fuel", + "" + }; + + //Fuel Item. + super.getInventory().setItem(19, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) 0) + .setName(C.GOLD + C.BOLD + "MACHINE FUEL") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + + //Fuel Dummy Item. + super.getInventory().setItem(10, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.GOLD + C.BOLD + "MACHINE FUEL") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + + //Fuel Dummy Item. + super.getInventory().setItem(1, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.GOLD + C.BOLD + "MACHINE FUEL") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + } + + private void initDurabilityItems(MachineData data) { + String[] lore = { + C.GRAY + " Once the durability is gone, you will", + C.GRAY + " need to fix your machine to repair it.", + "" + }; + + //Fuel Item. + super.getInventory().setItem(25, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) 0) + .setName(C.AQUA + C.BOLD + "MACHINE DURABILITY") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + + //Fuel Dummy Item. + super.getInventory().setItem(16, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.AQUA + C.BOLD + "MACHINE DURABILITY") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + + //Fuel Dummy Item. + super.getInventory().setItem(7, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.AQUA + C.BOLD + "MACHINE DURABILITY") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/type/MachineBeerDistillery.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/type/MachineBeerDistillery.java new file mode 100644 index 0000000..e350ea7 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/type/MachineBeerDistillery.java @@ -0,0 +1,191 @@ +package net.grandtheftmc.vice.machine.type; + +import net.grandtheftmc.core.util.C; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.vice.machine.BaseMachine; +import net.grandtheftmc.vice.machine.data.MachineData; +import net.grandtheftmc.vice.machine.data.MachineDataType; +import org.bukkit.Material; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.inventory.ItemFlag; + +public final class MachineBeerDistillery extends BaseMachine { + + /** + * Construct a Machine + */ + public MachineBeerDistillery() { + super( + 4, + "Beer Distillery", + Material.DROPPER + ); + + // FUEL + MachineData fuelData = new MachineData(MachineData.DataFlag.UP, 100, 0); + fuelData.setTextures(0, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2); + fuelData.setSlots(20); + super.setData(MachineDataType.FUEL, fuelData); + + // DURABILITY + MachineData durabilityData = new MachineData(MachineData.DataFlag.UP, 50000); + durabilityData.setTextures(0, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27); + super.setData(MachineDataType.DURABILITY, durabilityData); + + // PROGRESS + MachineData progressData = new MachineData(MachineData.DataFlag.DOWN, 20, 0); + progressData.setTextures(0, 71, 70, 69, 68, 67, 66, 65, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52); + super.setData(MachineDataType.PROGRESS, progressData); + + super.setBlockedSlots(0, 1, 2, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 23, 24, 25, 26); + super.setOpenSlots(3, 5); + super.setOutputSlots(22); + + super.setMachineItem(new ItemFactory(Material.DROPPER).setName(C.WHITE + C.BOLD + super.getName()).setLore(C.GRAY + "Machine").build()); + + String[] description = { + C.DARK_GRAY + C.ITALIC + " " + super.getName(), + "", + "", + C.YELLOW + C.BOLD + "MACHINE RECIPES", + C.GRAY + " Note, recipes consume fuel and durability.", + C.GRAY + " Some more than others.", + "", + " " + i("霔", 5) + i("霃", 1) + " 霚 " + i("霈", 1), + "", + " " + i("霂", 6) + " " + i("霔", 1) + " 霚 " + i("霃", 1), + "", + C.GRAY + " Use the command " + C.WHITE + "/recipe" + C.GRAY + " for", + C.GRAY + " a visual tutorial on drug recipes." + }; + + for (int i : super.getBlockedSlots()) { + super.getInventory().setItem(i, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.GREEN + C.BOLD + "MACHINE TUTORIAL") + .setLore(description) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + } + + //Machine Frame + super.getInventory().setItem(0, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) 80) + .setName(C.GREEN + C.BOLD + "MACHINE TUTORIAL") + .setLore(description) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + + this.initFuelItems(fuelData); + this.initDurabilityItems(durabilityData); + + //Progress Item. + super.getInventory().setItem(11, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) progressData.getTexture()) + .setName(C.GREEN + C.BOLD + "MACHINE TUTORIAL") + .setLore(description) + .setEnchantment(Enchantment.DURABILITY, 1) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + } + + private void initFuelItems(MachineData data) { + String[] lore = { + C.GRAY + " Adding burnable items will replenish", + C.GRAY + " your machine fuel counter.", + "", + // fire - oak_plank - 2 + C.RESET + " 霚 " + C.WHITE + "[霡] +" + C.YELLOW + "2" + C.WHITE + " Fuel", + // fire - coal - 8 + C.RESET + " 霚 " + C.WHITE + "[霖] +" + C.GOLD + "8" + C.WHITE + " Fuel", + // fire - coal_block - 160 + C.RESET + " 霚 " + C.WHITE + "[霗] +" + C.RED + "80" + C.WHITE + " Fuel", + // fire - lava - 100 + C.RESET + " 霚 " + C.WHITE + "[霙] +" + C.RED + "100" + C.WHITE + " Fuel", + "" + }; + + //Fuel Item. + super.getInventory().setItem(19, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) 0) + .setName(C.GOLD + C.BOLD + "MACHINE FUEL") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + + //Fuel Dummy Item. + super.getInventory().setItem(10, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.GOLD + C.BOLD + "MACHINE FUEL") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + + //Fuel Dummy Item. + super.getInventory().setItem(1, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.GOLD + C.BOLD + "MACHINE FUEL") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + } + + private void initDurabilityItems(MachineData data) { + String[] lore = { + C.GRAY + " Once the durability is gone, you will", + C.GRAY + " need to fix your machine to repair it.", + "" + }; + + //Fuel Item. + super.getInventory().setItem(25, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) 0) + .setName(C.AQUA + C.BOLD + "MACHINE DURABILITY") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + + //Fuel Dummy Item. + super.getInventory().setItem(16, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.AQUA + C.BOLD + "MACHINE DURABILITY") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + + //Fuel Dummy Item. + super.getInventory().setItem(7, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.AQUA + C.BOLD + "MACHINE DURABILITY") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/type/MachineCocaProcessor.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/type/MachineCocaProcessor.java new file mode 100644 index 0000000..e7c2c25 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/type/MachineCocaProcessor.java @@ -0,0 +1,191 @@ +package net.grandtheftmc.vice.machine.type; + +import net.grandtheftmc.core.util.C; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.vice.machine.BaseMachine; +import net.grandtheftmc.vice.machine.data.MachineData; +import net.grandtheftmc.vice.machine.data.MachineDataType; +import org.bukkit.Material; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.inventory.ItemFlag; + +public final class MachineCocaProcessor extends BaseMachine { + + /** + * Construct a Machine + */ + public MachineCocaProcessor() { + super( + 6, + "Coca Processor", + Material.DROPPER + ); + + // FUEL + MachineData fuelData = new MachineData(MachineData.DataFlag.UP, 100, 0); + fuelData.setTextures(0, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2); + fuelData.setSlots(20); + super.setData(MachineDataType.FUEL, fuelData); + + // DURABILITY + MachineData durabilityData = new MachineData(MachineData.DataFlag.UP, 37500); + durabilityData.setTextures(0, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27); + super.setData(MachineDataType.DURABILITY, durabilityData); + + // PROGRESS + MachineData progressData = new MachineData(MachineData.DataFlag.DOWN, 20, 0); + progressData.setTextures(0, 71, 70, 69, 68, 67, 66, 65, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52); + super.setData(MachineDataType.PROGRESS, progressData); + + super.setBlockedSlots(0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 23, 24, 25, 26); + super.setOpenSlots(4); + super.setOutputSlots(22); + + super.setMachineItem(new ItemFactory(Material.DROPPER).setName(C.WHITE + C.BOLD + super.getName()).setLore(C.GRAY + "Machine").build()); + + String[] description = { + C.DARK_GRAY + C.ITALIC + " " + super.getName(), + "", + "", + C.YELLOW + C.BOLD + "MACHINE RECIPES", + C.GRAY + " Note, recipes consume fuel and durability.", + C.GRAY + " Some more than others.", + "", + " " + i("霅", 3) + " 霚 " + i("霓", 1), + "", + " " + i("霓", 1) + " 霚 " + i("霍", 1), + "", + C.GRAY + " Use the command " + C.WHITE + "/recipe" + C.GRAY + " for", + C.GRAY + " a visual tutorial on drug recipes." + }; + + for (int i : super.getBlockedSlots()) { + super.getInventory().setItem(i, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.GREEN + C.BOLD + "MACHINE TUTORIAL") + .setLore(description) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + } + + //Machine Frame + super.getInventory().setItem(0, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) 79) + .setName(C.GREEN + C.BOLD + "MACHINE TUTORIAL") + .setLore(description) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + + this.initFuelItems(fuelData); + this.initDurabilityItems(durabilityData); + + //Progress Item. + super.getInventory().setItem(11, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) progressData.getTexture()) + .setName(C.GREEN + C.BOLD + "MACHINE TUTORIAL") + .setLore(description) + .setEnchantment(Enchantment.DURABILITY, 1) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + } + + private void initFuelItems(MachineData data) { + String[] lore = { + C.GRAY + " Adding burnable items will replenish", + C.GRAY + " your machine fuel counter.", + "", + // fire - oak_plank - 2 + C.RESET + " 霚 " + C.WHITE + "[霡] +" + C.YELLOW + "2" + C.WHITE + " Fuel", + // fire - coal - 8 + C.RESET + " 霚 " + C.WHITE + "[霖] +" + C.GOLD + "8" + C.WHITE + " Fuel", + // fire - coal_block - 160 + C.RESET + " 霚 " + C.WHITE + "[霗] +" + C.RED + "80" + C.WHITE + " Fuel", + // fire - lava - 100 + C.RESET + " 霚 " + C.WHITE + "[霙] +" + C.RED + "100" + C.WHITE + " Fuel", + "" + }; + + //Fuel Item. + super.getInventory().setItem(19, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) 0) + .setName(C.GOLD + C.BOLD + "MACHINE FUEL") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + + //Fuel Dummy Item. + super.getInventory().setItem(10, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.GOLD + C.BOLD + "MACHINE FUEL") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + + //Fuel Dummy Item. + super.getInventory().setItem(1, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.GOLD + C.BOLD + "MACHINE FUEL") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + } + + private void initDurabilityItems(MachineData data) { + String[] lore = { + C.GRAY + " Once the durability is gone, you will", + C.GRAY + " need to fix your machine to repair it.", + "" + }; + + //Fuel Item. + super.getInventory().setItem(25, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) 0) + .setName(C.AQUA + C.BOLD + "MACHINE DURABILITY") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + + //Fuel Dummy Item. + super.getInventory().setItem(16, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.AQUA + C.BOLD + "MACHINE DURABILITY") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + + //Fuel Dummy Item. + super.getInventory().setItem(7, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.AQUA + C.BOLD + "MACHINE DURABILITY") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/type/MachineLargeDryingMachine.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/type/MachineLargeDryingMachine.java new file mode 100644 index 0000000..f8b93a0 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/type/MachineLargeDryingMachine.java @@ -0,0 +1,209 @@ +package net.grandtheftmc.vice.machine.type; + +import net.grandtheftmc.core.util.C; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.vice.machine.BaseMachine; +import net.grandtheftmc.vice.machine.data.MachineData; +import net.grandtheftmc.vice.machine.data.MachineDataType; +import net.grandtheftmc.vice.machine.misc.MachineProgressMultiplier; +import org.bukkit.Material; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.inventory.ItemFlag; + +public final class MachineLargeDryingMachine extends BaseMachine implements MachineProgressMultiplier { + + /** + * Construct a Machine + */ + public MachineLargeDryingMachine() { + super( + 3, + "Large Drying Chamber", + Material.DROPPER + ); + + // FUEL + MachineData fuelData = new MachineData(MachineData.DataFlag.UP, 100, 0); + fuelData.setTextures(0, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2); + fuelData.setSlots(20); + super.setData(MachineDataType.FUEL, fuelData); + + // DURABILITY + MachineData durabilityData = new MachineData(MachineData.DataFlag.UP, 72000 * this.getMultiplier()); + durabilityData.setTextures(0, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27); + super.setData(MachineDataType.DURABILITY, durabilityData); + + // PROGRESS + MachineData progressData = new MachineData(MachineData.DataFlag.DOWN, 20, 0); + progressData.setTextures(0, 71, 70, 69, 68, 67, 66, 65, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52); + super.setData(MachineDataType.PROGRESS, progressData); + + super.setBlockedSlots(0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 23, 24, 25, 26); + super.setOpenSlots(4); + super.setOutputSlots(22); + + super.setMachineItem(new ItemFactory(Material.DROPPER).setName(C.WHITE + C.BOLD + super.getName()).setLore(C.GRAY + "Machine").build()); + + String[] description = { + C.DARK_GRAY + C.ITALIC + " " + super.getName(), + "", + "", + C.YELLOW + C.BOLD + "MACHINE RECIPES", + C.GRAY + " Note, recipes consume fuel and durability.", + C.GRAY + " Some more than others.", + "", + " " + i("需", 1) + " 霚 " + i("霂", 6), + "", + " " + i("霢", 1) + " 霚 " + i("霆", 1), + "", + " " + i("霟", 1) + " 霚 " + i("霋", 1), + "", + " " + i("霞", 1) + " 霚 " + i("霋", 1), + "", + " " + i("霁", 1) + " 霚 " + i("霎", 1), + "", + C.GRAY + " Use the command " + C.WHITE + "/recipe" + C.GRAY + " for", + C.GRAY + " a visual tutorial on drug recipes." + }; + + for (int i : super.getBlockedSlots()) { + super.getInventory().setItem(i, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.GREEN + C.BOLD + "MACHINE TUTORIAL") + .setLore(description) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + } + + //Machine Frame + super.getInventory().setItem(0, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) 79) + .setName(C.GREEN + C.BOLD + "MACHINE TUTORIAL") + .setLore(description) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + + this.initFuelItems(fuelData); + this.initDurabilityItems(durabilityData); + + //Progress Item. + super.getInventory().setItem(11, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) progressData.getTexture()) + .setName(C.GREEN + C.BOLD + "MACHINE TUTORIAL") + .setLore(description) + .setEnchantment(Enchantment.DURABILITY, 1) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + } + + private void initFuelItems(MachineData data) { + String[] lore = { + C.GRAY + " Adding burnable items will replenish", + C.GRAY + " your machine fuel counter.", + "", + // fire - oak_plank - 2 + C.RESET + " 霚 " + C.WHITE + "[霡] +" + C.YELLOW + "2" + C.WHITE + " Fuel", + // fire - coal - 8 + C.RESET + " 霚 " + C.WHITE + "[霖] +" + C.GOLD + "8" + C.WHITE + " Fuel", + // fire - coal_block - 160 + C.RESET + " 霚 " + C.WHITE + "[霗] +" + C.RED + "80" + C.WHITE + " Fuel", + // fire - lava - 100 + C.RESET + " 霚 " + C.WHITE + "[霙] +" + C.RED + "100" + C.WHITE + " Fuel", + "" + }; + + //Fuel Item. + super.getInventory().setItem(19, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) 0) + .setName(C.GOLD + C.BOLD + "MACHINE FUEL") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + + //Fuel Dummy Item. + super.getInventory().setItem(10, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.GOLD + C.BOLD + "MACHINE FUEL") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + + //Fuel Dummy Item. + super.getInventory().setItem(1, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.GOLD + C.BOLD + "MACHINE FUEL") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + } + + private void initDurabilityItems(MachineData data) { + String[] lore = { + C.GRAY + " Once the durability is gone, you will", + C.GRAY + " need to fix your machine to repair it.", + "" + }; + + //Fuel Item. + super.getInventory().setItem(25, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) 0) + .setName(C.AQUA + C.BOLD + "MACHINE DURABILITY") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + + //Fuel Dummy Item. + super.getInventory().setItem(16, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.AQUA + C.BOLD + "MACHINE DURABILITY") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + + //Fuel Dummy Item. + super.getInventory().setItem(7, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.AQUA + C.BOLD + "MACHINE DURABILITY") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + } + + /** + * This multiplier will speed up the brewing/ cooking + * progress by the given amount. + * + * @return + */ + @Override + public double getMultiplier() { + return 2; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/type/MachineMediumDryingChamber.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/type/MachineMediumDryingChamber.java new file mode 100644 index 0000000..e26c68d --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/type/MachineMediumDryingChamber.java @@ -0,0 +1,209 @@ +package net.grandtheftmc.vice.machine.type; + +import net.grandtheftmc.core.util.C; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.vice.machine.BaseMachine; +import net.grandtheftmc.vice.machine.data.MachineData; +import net.grandtheftmc.vice.machine.data.MachineDataType; +import net.grandtheftmc.vice.machine.misc.MachineProgressMultiplier; +import org.bukkit.Material; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.inventory.ItemFlag; + +public final class MachineMediumDryingChamber extends BaseMachine implements MachineProgressMultiplier { + + /** + * Construct a Machine + */ + public MachineMediumDryingChamber() { + super( + 2, + "Medium Drying Chamber", + Material.DROPPER + ); + + // FUEL + MachineData fuelData = new MachineData(MachineData.DataFlag.UP, 100, 0); + fuelData.setTextures(0, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2); + fuelData.setSlots(20); + super.setData(MachineDataType.FUEL, fuelData); + + // DURABILITY + MachineData durabilityData = new MachineData(MachineData.DataFlag.UP, 72000 * this.getMultiplier()); + durabilityData.setTextures(0, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27); + super.setData(MachineDataType.DURABILITY, durabilityData); + + // PROGRESS + MachineData progressData = new MachineData(MachineData.DataFlag.DOWN, 20, 0); + progressData.setTextures(0, 71, 70, 69, 68, 67, 66, 65, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52); + super.setData(MachineDataType.PROGRESS, progressData); + + super.setBlockedSlots(0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 23, 24, 25, 26); + super.setOpenSlots(4); + super.setOutputSlots(22); + + super.setMachineItem(new ItemFactory(Material.DROPPER).setName(C.WHITE + C.BOLD + super.getName()).setLore(C.GRAY + "Machine").build()); + + String[] description = { + C.DARK_GRAY + C.ITALIC + " " + super.getName(), + "", + "", + C.YELLOW + C.BOLD + "MACHINE RECIPES", + C.GRAY + " Note, recipes consume fuel and durability.", + C.GRAY + " Some more than others.", + "", + " " + i("需", 1) + " 霚 " + i("霂", 6), + "", + " " + i("霢", 1) + " 霚 " + i("霆", 1), + "", + " " + i("霟", 1) + " 霚 " + i("霋", 1), + "", + " " + i("霞", 1) + " 霚 " + i("霋", 1), + "", + " " + i("霁", 1) + " 霚 " + i("霎", 1), + "", + C.GRAY + " Use the command " + C.WHITE + "/recipe" + C.GRAY + " for", + C.GRAY + " a visual tutorial on drug recipes." + }; + + for (int i : super.getBlockedSlots()) { + super.getInventory().setItem(i, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.GREEN + C.BOLD + "MACHINE TUTORIAL") + .setLore(description) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + } + + //Machine Frame + super.getInventory().setItem(0, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) 79) + .setName(C.GREEN + C.BOLD + "MACHINE TUTORIAL") + .setLore(description) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + + this.initFuelItems(fuelData); + this.initDurabilityItems(durabilityData); + + //Progress Item. + super.getInventory().setItem(11, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) progressData.getTexture()) + .setName(C.GREEN + C.BOLD + "MACHINE TUTORIAL") + .setLore(description) + .setEnchantment(Enchantment.DURABILITY, 1) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + } + + private void initFuelItems(MachineData data) { + String[] lore = { + C.GRAY + " Adding burnable items will replenish", + C.GRAY + " your machine fuel counter.", + "", + // fire - oak_plank - 2 + C.RESET + " 霚 " + C.WHITE + "[霡] +" + C.YELLOW + "2" + C.WHITE + " Fuel", + // fire - coal - 8 + C.RESET + " 霚 " + C.WHITE + "[霖] +" + C.GOLD + "8" + C.WHITE + " Fuel", + // fire - coal_block - 160 + C.RESET + " 霚 " + C.WHITE + "[霗] +" + C.RED + "80" + C.WHITE + " Fuel", + // fire - lava - 100 + C.RESET + " 霚 " + C.WHITE + "[霙] +" + C.RED + "100" + C.WHITE + " Fuel", + "" + }; + + //Fuel Item. + super.getInventory().setItem(19, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) 0) + .setName(C.GOLD + C.BOLD + "MACHINE FUEL") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + + //Fuel Dummy Item. + super.getInventory().setItem(10, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.GOLD + C.BOLD + "MACHINE FUEL") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + + //Fuel Dummy Item. + super.getInventory().setItem(1, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.GOLD + C.BOLD + "MACHINE FUEL") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + } + + private void initDurabilityItems(MachineData data) { + String[] lore = { + C.GRAY + " Once the durability is gone, you will", + C.GRAY + " need to fix your machine to repair it.", + "" + }; + + //Fuel Item. + super.getInventory().setItem(25, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) 0) + .setName(C.AQUA + C.BOLD + "MACHINE DURABILITY") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + + //Fuel Dummy Item. + super.getInventory().setItem(16, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.AQUA + C.BOLD + "MACHINE DURABILITY") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + + //Fuel Dummy Item. + super.getInventory().setItem(7, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.AQUA + C.BOLD + "MACHINE DURABILITY") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + } + + /** + * This multiplier will speed up the brewing/ cooking + * progress by the given amount. + * + * @return + */ + @Override + public double getMultiplier() { + return 1.5; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/type/MachinePulpCondenser.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/type/MachinePulpCondenser.java new file mode 100644 index 0000000..4e1808b --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/type/MachinePulpCondenser.java @@ -0,0 +1,189 @@ +package net.grandtheftmc.vice.machine.type; + +import net.grandtheftmc.core.util.C; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.vice.machine.BaseMachine; +import net.grandtheftmc.vice.machine.data.MachineData; +import net.grandtheftmc.vice.machine.data.MachineDataType; +import org.bukkit.Material; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.inventory.ItemFlag; + +public final class MachinePulpCondenser extends BaseMachine { + + /** + * Construct a Machine + */ + public MachinePulpCondenser() { + super( + 7, + "Pulp Condenser", + Material.DROPPER + ); + + // FUEL + MachineData fuelData = new MachineData(MachineData.DataFlag.UP, 100, 0); + fuelData.setTextures(0, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2); + fuelData.setSlots(20); + super.setData(MachineDataType.FUEL, fuelData); + + // DURABILITY + MachineData durabilityData = new MachineData(MachineData.DataFlag.UP, 37500); + durabilityData.setTextures(0, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27); + super.setData(MachineDataType.DURABILITY, durabilityData); + + // PROGRESS + MachineData progressData = new MachineData(MachineData.DataFlag.DOWN, 20, 0); + progressData.setTextures(0, 71, 70, 69, 68, 67, 66, 65, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52); + super.setData(MachineDataType.PROGRESS, progressData); + + super.setBlockedSlots(0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 23, 24, 25, 26); + super.setOpenSlots(4); + super.setOutputSlots(22); + + super.setMachineItem(new ItemFactory(Material.DROPPER).setName(C.WHITE + C.BOLD + super.getName()).setLore(C.GRAY + "Machine").build()); + + String[] description = { + C.DARK_GRAY + C.ITALIC + " " + super.getName(), + "", + "", + C.YELLOW + C.BOLD + "MACHINE RECIPES", + C.GRAY + " Note, recipes consume fuel and durability.", + C.GRAY + " Some more than others.", + "", + " " + i("霋", 1) + " 霚 " + i("霌", 1), + "", + C.GRAY + " Use the command " + C.WHITE + "/recipe" + C.GRAY + " for", + C.GRAY + " a visual tutorial on drug recipes." + }; + + for (int i : super.getBlockedSlots()) { + super.getInventory().setItem(i, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.GREEN + C.BOLD + "MACHINE TUTORIAL") + .setLore(description) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + } + + //Machine Frame + super.getInventory().setItem(0, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) 79) + .setName(C.GREEN + C.BOLD + "MACHINE TUTORIAL") + .setLore(description) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + + this.initFuelItems(fuelData); + this.initDurabilityItems(durabilityData); + + //Progress Item. + super.getInventory().setItem(11, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) progressData.getTexture()) + .setName(C.GREEN + C.BOLD + "MACHINE TUTORIAL") + .setLore(description) + .setEnchantment(Enchantment.DURABILITY, 1) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + } + + private void initFuelItems(MachineData data) { + String[] lore = { + C.GRAY + " Adding burnable items will replenish", + C.GRAY + " your machine fuel counter.", + "", + // fire - oak_plank - 2 + C.RESET + " 霚 " + C.WHITE + "[霡] +" + C.YELLOW + "2" + C.WHITE + " Fuel", + // fire - coal - 8 + C.RESET + " 霚 " + C.WHITE + "[霖] +" + C.GOLD + "8" + C.WHITE + " Fuel", + // fire - coal_block - 160 + C.RESET + " 霚 " + C.WHITE + "[霗] +" + C.RED + "80" + C.WHITE + " Fuel", + // fire - lava - 100 + C.RESET + " 霚 " + C.WHITE + "[霙] +" + C.RED + "100" + C.WHITE + " Fuel", + "" + }; + + //Fuel Item. + super.getInventory().setItem(19, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) 0) + .setName(C.GOLD + C.BOLD + "MACHINE FUEL") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + + //Fuel Dummy Item. + super.getInventory().setItem(10, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.GOLD + C.BOLD + "MACHINE FUEL") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + + //Fuel Dummy Item. + super.getInventory().setItem(1, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.GOLD + C.BOLD + "MACHINE FUEL") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + } + + private void initDurabilityItems(MachineData data) { + String[] lore = { + C.GRAY + " Once the durability is gone, you will", + C.GRAY + " need to fix your machine to repair it.", + "" + }; + + //Fuel Item. + super.getInventory().setItem(25, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) 0) + .setName(C.AQUA + C.BOLD + "MACHINE DURABILITY") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + + //Fuel Dummy Item. + super.getInventory().setItem(16, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.AQUA + C.BOLD + "MACHINE DURABILITY") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + + //Fuel Dummy Item. + super.getInventory().setItem(7, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.AQUA + C.BOLD + "MACHINE DURABILITY") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/type/MachineSmallDryingChamber.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/type/MachineSmallDryingChamber.java new file mode 100644 index 0000000..957b315 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/type/MachineSmallDryingChamber.java @@ -0,0 +1,197 @@ +package net.grandtheftmc.vice.machine.type; + +import net.grandtheftmc.core.util.C; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.vice.machine.BaseMachine; +import net.grandtheftmc.vice.machine.data.MachineData; +import net.grandtheftmc.vice.machine.data.MachineDataType; +import org.bukkit.Material; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.inventory.ItemFlag; + +public final class MachineSmallDryingChamber extends BaseMachine { + + /** + * Construct a Machine + */ + public MachineSmallDryingChamber() { + super( + 1, + "Small Drying Chamber", + Material.DROPPER + ); + + // FUEL + MachineData fuelData = new MachineData(MachineData.DataFlag.UP, 100, 0); + fuelData.setTextures(0, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2); + fuelData.setSlots(20); + super.setData(MachineDataType.FUEL, fuelData); + + // DURABILITY + MachineData durabilityData = new MachineData(MachineData.DataFlag.UP, 72000); + durabilityData.setTextures(0, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27); + super.setData(MachineDataType.DURABILITY, durabilityData); + + // PROGRESS + MachineData progressData = new MachineData(MachineData.DataFlag.DOWN, 21, 0); + progressData.setTextures(0, 71, 70, 69, 68, 67, 66, 65, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52); + super.setData(MachineDataType.PROGRESS, progressData); + + super.setBlockedSlots(0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 23, 24, 25, 26); + super.setOpenSlots(4); + super.setOutputSlots(22); + + super.setMachineItem(new ItemFactory(Material.DROPPER).setName(C.WHITE + C.BOLD + super.getName()).setLore(C.GRAY + "Machine").build()); + + String[] description = { + C.DARK_GRAY + C.ITALIC + " " + super.getName(), + "", + "", + C.YELLOW + C.BOLD + "MACHINE RECIPES", + C.GRAY + " Note, recipes consume fuel and durability.", + C.GRAY + " Some more than others.", + "", + " " + i("需", 1) + " 霚 " + i("霂", 6), + "", + " " + i("霢", 1) + " 霚 " + i("霆", 1), + "", + " " + i("霟", 1) + " 霚 " + i("霋", 1), + "", + " " + i("霞", 1) + " 霚 " + i("霋", 1), + "", + " " + i("霁", 1) + " 霚 " + i("霎", 1), + "", + C.GRAY + " Use the command " + C.WHITE + "/recipe" + C.GRAY + " for", + C.GRAY + " a visual tutorial on drug recipes." + }; + + for (int i : super.getBlockedSlots()) { + super.getInventory().setItem(i, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.GREEN + C.BOLD + "MACHINE TUTORIAL") + .setLore(description) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + } + + //Machine Frame + super.getInventory().setItem(0, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) 79) + .setName(C.GREEN + C.BOLD + "MACHINE TUTORIAL") + .setLore(description) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + + this.initFuelItems(fuelData); + this.initDurabilityItems(durabilityData); + + //Progress Item. + super.getInventory().setItem(11, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) progressData.getTexture()) + .setName(C.GREEN + C.BOLD + "MACHINE TUTORIAL") + .setLore(description) + .setEnchantment(Enchantment.DURABILITY, 1) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + } + + private void initFuelItems(MachineData data) { + String[] lore = { + C.GRAY + " Adding burnable items will replenish", + C.GRAY + " your machine fuel counter.", + "", + // fire - oak_plank - 2 + C.RESET + " 霚 " + C.WHITE + "[霡] +" + C.YELLOW + "2" + C.WHITE + " Fuel", + // fire - coal - 8 + C.RESET + " 霚 " + C.WHITE + "[霖] +" + C.GOLD + "8" + C.WHITE + " Fuel", + // fire - coal_block - 160 + C.RESET + " 霚 " + C.WHITE + "[霗] +" + C.RED + "80" + C.WHITE + " Fuel", + // fire - lava - 100 + C.RESET + " 霚 " + C.WHITE + "[霙] +" + C.RED + "100" + C.WHITE + " Fuel", + "" + }; + + //Fuel Item. + super.getInventory().setItem(19, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) 0) + .setName(C.GOLD + C.BOLD + "MACHINE FUEL") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + + //Fuel Dummy Item. + super.getInventory().setItem(10, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.GOLD + C.BOLD + "MACHINE FUEL") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + + //Fuel Dummy Item. + super.getInventory().setItem(1, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.GOLD + C.BOLD + "MACHINE FUEL") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + } + + private void initDurabilityItems(MachineData data) { + String[] lore = { + C.GRAY + " Once the durability is gone, you will", + C.GRAY + " need to fix your machine to repair it.", + "" + }; + + //Fuel Item. + super.getInventory().setItem(25, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) 0) + .setName(C.AQUA + C.BOLD + "MACHINE DURABILITY") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + + //Fuel Dummy Item. + super.getInventory().setItem(16, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.AQUA + C.BOLD + "MACHINE DURABILITY") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + + //Fuel Dummy Item. + super.getInventory().setItem(7, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.AQUA + C.BOLD + "MACHINE DURABILITY") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/type/MachineSugarBox.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/type/MachineSugarBox.java new file mode 100644 index 0000000..9596152 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/type/MachineSugarBox.java @@ -0,0 +1,201 @@ +package net.grandtheftmc.vice.machine.type; + +import net.grandtheftmc.core.util.C; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.vice.machine.BaseMachine; +import net.grandtheftmc.vice.machine.data.MachineData; +import net.grandtheftmc.vice.machine.data.MachineDataType; +import net.grandtheftmc.vice.machine.misc.MachineProgressMultiplier; +import org.bukkit.Material; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.inventory.ItemFlag; + +public final class MachineSugarBox extends BaseMachine implements MachineProgressMultiplier { + + /** + * Construct a Machine + */ + public MachineSugarBox() { + super( + 10, + "Sugar Box", + Material.DROPPER + ); + + // FUEL + MachineData fuelData = new MachineData(MachineData.DataFlag.UP, 100, 0); + fuelData.setTextures(0, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2); + fuelData.setSlots(20); + super.setData(MachineDataType.FUEL, fuelData); + + // DURABILITY + MachineData durabilityData = new MachineData(MachineData.DataFlag.UP, 37500); + durabilityData.setTextures(0, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27); + super.setData(MachineDataType.DURABILITY, durabilityData); + + // PROGRESS + MachineData progressData = new MachineData(MachineData.DataFlag.DOWN, 20, 0); + progressData.setTextures(0, 71, 70, 69, 68, 67, 66, 65, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52); + super.setData(MachineDataType.PROGRESS, progressData); + + super.setBlockedSlots(0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 23, 24, 25, 26); + super.setOpenSlots(4); + super.setOutputSlots(22); + + super.setMachineItem(new ItemFactory(Material.DROPPER).setName(C.WHITE + C.BOLD + super.getName()).setLore(C.GRAY + "Machine").build()); + + String[] description = { + C.DARK_GRAY + C.ITALIC + " " + super.getName(), + "", + "", + C.YELLOW + C.BOLD + "MACHINE RECIPES", + C.GRAY + " Note, recipes consume fuel and durability.", + C.GRAY + " Some more than others.", + "", + " " + i("霎", 1) + " 霚 " + i("霏", 1), + "", + C.GRAY + " Use the command " + C.WHITE + "/recipe" + C.GRAY + " for", + C.GRAY + " a visual tutorial on drug recipes." + }; + + for (int i : super.getBlockedSlots()) { + super.getInventory().setItem(i, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.GREEN + C.BOLD + "MACHINE TUTORIAL") + .setLore(description) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + } + + //Machine Frame + super.getInventory().setItem(0, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) 79) + .setName(C.GREEN + C.BOLD + "MACHINE TUTORIAL") + .setLore(description) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + + this.initFuelItems(fuelData); + this.initDurabilityItems(durabilityData); + + //Progress Item. + super.getInventory().setItem(11, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) progressData.getTexture()) + .setName(C.GREEN + C.BOLD + "MACHINE TUTORIAL") + .setLore(description) + .setEnchantment(Enchantment.DURABILITY, 1) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + } + + private void initFuelItems(MachineData data) { + String[] lore = { + C.GRAY + " Adding burnable items will replenish", + C.GRAY + " your machine fuel counter.", + "", + // fire - oak_plank - 2 + C.RESET + " 霚 " + C.WHITE + "[霡] +" + C.YELLOW + "2" + C.WHITE + " Fuel", + // fire - coal - 8 + C.RESET + " 霚 " + C.WHITE + "[霖] +" + C.GOLD + "8" + C.WHITE + " Fuel", + // fire - coal_block - 160 + C.RESET + " 霚 " + C.WHITE + "[霗] +" + C.RED + "80" + C.WHITE + " Fuel", + // fire - lava - 100 + C.RESET + " 霚 " + C.WHITE + "[霙] +" + C.RED + "100" + C.WHITE + " Fuel", + "" + }; + + //Fuel Item. + super.getInventory().setItem(19, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) 0) + .setName(C.GOLD + C.BOLD + "MACHINE FUEL") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + + //Fuel Dummy Item. + super.getInventory().setItem(10, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.GOLD + C.BOLD + "MACHINE FUEL") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + + //Fuel Dummy Item. + super.getInventory().setItem(1, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.GOLD + C.BOLD + "MACHINE FUEL") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + } + + private void initDurabilityItems(MachineData data) { + String[] lore = { + C.GRAY + " Once the durability is gone, you will", + C.GRAY + " need to fix your machine to repair it.", + "" + }; + + //Fuel Item. + super.getInventory().setItem(25, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) 0) + .setName(C.AQUA + C.BOLD + "MACHINE DURABILITY") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + + //Fuel Dummy Item. + super.getInventory().setItem(16, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.AQUA + C.BOLD + "MACHINE DURABILITY") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + + //Fuel Dummy Item. + super.getInventory().setItem(7, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.AQUA + C.BOLD + "MACHINE DURABILITY") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + } + + /** + * This multiplier will speed up the brewing/ cooking + * progress by the given amount. + * + * @return + */ + @Override + public double getMultiplier() { + return 2; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/type/MachineVodkaDistillery.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/type/MachineVodkaDistillery.java new file mode 100644 index 0000000..d97dfd9 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/machine/type/MachineVodkaDistillery.java @@ -0,0 +1,191 @@ +package net.grandtheftmc.vice.machine.type; + +import net.grandtheftmc.core.util.C; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.vice.machine.BaseMachine; +import net.grandtheftmc.vice.machine.data.MachineData; +import net.grandtheftmc.vice.machine.data.MachineDataType; +import org.bukkit.Material; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.inventory.ItemFlag; + +public final class MachineVodkaDistillery extends BaseMachine { + + /** + * Construct a Machine + */ + public MachineVodkaDistillery() { + super( + 5, + "Vodka Distillery", + Material.DROPPER + ); + + // FUEL + MachineData fuelData = new MachineData(MachineData.DataFlag.UP, 100, 0); + fuelData.setTextures(0, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2); + fuelData.setSlots(20); + super.setData(MachineDataType.FUEL, fuelData); + + // DURABILITY + MachineData durabilityData = new MachineData(MachineData.DataFlag.UP, 50000); + durabilityData.setTextures(0, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27); + super.setData(MachineDataType.DURABILITY, durabilityData); + + // PROGRESS + MachineData progressData = new MachineData(MachineData.DataFlag.DOWN, 20, 0); + progressData.setTextures(0, 71, 70, 69, 68, 67, 66, 65, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52); + super.setData(MachineDataType.PROGRESS, progressData); + + super.setBlockedSlots(0, 1, 2, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 23, 24, 25, 26); + super.setOpenSlots(3, 5); + super.setOutputSlots(22); + + super.setMachineItem(new ItemFactory(Material.DROPPER).setName(C.WHITE + C.BOLD + super.getName()).setLore(C.GRAY + "Machine").build()); + + String[] description = { + C.DARK_GRAY + C.ITALIC + " " + super.getName(), + "", + "", + C.YELLOW + C.BOLD + "MACHINE RECIPES", + C.GRAY + " Note, recipes consume fuel and durability.", + C.GRAY + " Some more than others.", + "", + " " + i("霜", 6) + i("霔", 1) + " 霚 " + i("霉", 1), + "", + " " + i("霛", 3) + i("霉", 1) + " 霚 " + i("霝", 1), + "", + C.GRAY + " Use the command " + C.WHITE + "/recipe" + C.GRAY + " for", + C.GRAY + " a visual tutorial on drug recipes." + }; + + for (int i : super.getBlockedSlots()) { + super.getInventory().setItem(i, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.GREEN + C.BOLD + "MACHINE TUTORIAL") + .setLore(description) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + } + + //Machine Frame + super.getInventory().setItem(0, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) 80) + .setName(C.GREEN + C.BOLD + "MACHINE TUTORIAL") + .setLore(description) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + + this.initFuelItems(fuelData); + this.initDurabilityItems(durabilityData); + + //Progress Item. + super.getInventory().setItem(11, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) progressData.getTexture()) + .setName(C.GREEN + C.BOLD + "MACHINE TUTORIAL") + .setLore(description) + .setEnchantment(Enchantment.DURABILITY, 1) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + } + + public void initFuelItems(MachineData data) { + String[] lore = { + C.GRAY + " Adding burnable items will replenish", + C.GRAY + " your machine fuel counter.", + "", + // fire - oak_plank - 2 + C.RESET + " 霚 " + C.WHITE + "[霡] +" + C.YELLOW + "2" + C.WHITE + " Fuel", + // fire - coal - 8 + C.RESET + " 霚 " + C.WHITE + "[霖] +" + C.GOLD + "8" + C.WHITE + " Fuel", + // fire - coal_block - 160 + C.RESET + " 霚 " + C.WHITE + "[霗] +" + C.RED + "80" + C.WHITE + " Fuel", + // fire - lava - 100 + C.RESET + " 霚 " + C.WHITE + "[霙] +" + C.RED + "100" + C.WHITE + " Fuel", + "" + }; + + //Fuel Item. + super.getInventory().setItem(19, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) 0) + .setName(C.GOLD + C.BOLD + "MACHINE FUEL") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + + //Fuel Dummy Item. + super.getInventory().setItem(10, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.GOLD + C.BOLD + "MACHINE FUEL") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + + //Fuel Dummy Item. + super.getInventory().setItem(1, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.GOLD + C.BOLD + "MACHINE FUEL") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + } + + public void initDurabilityItems(MachineData data) { + String[] lore = { + C.GRAY + " Once the durability is gone, you will", + C.GRAY + " need to fix your machine to repair it.", + "" + }; + + //Fuel Item. + super.getInventory().setItem(25, + new ItemFactory(Material.STONE_SWORD) + .setDurability((short) 0) + .setName(C.AQUA + C.BOLD + "MACHINE DURABILITY") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + + //Fuel Dummy Item. + super.getInventory().setItem(16, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.AQUA + C.BOLD + "MACHINE DURABILITY") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + + //Fuel Dummy Item. + super.getInventory().setItem(7, + new ItemFactory(Material.STAINED_GLASS_PANE) + .setDurability((short) 0) + .setName(C.AQUA + C.BOLD + "MACHINE DURABILITY") + .setLore(lore) + .setUnbreakable(true) + .addFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS) + .build() + ); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/pickers/PickerCommand.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/pickers/PickerCommand.java new file mode 100644 index 0000000..b8b0852 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/pickers/PickerCommand.java @@ -0,0 +1,110 @@ +package net.grandtheftmc.vice.pickers; + +import com.j0ach1mmall3.jlib.inventory.JLibItem; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.vice.Vice; +import org.bukkit.Color; +import org.bukkit.Material; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.ArmorStand; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +public class PickerCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender s, Command c, String lbl, String[] args) { + if (!s.hasPermission("picker.use")) { + s.sendMessage(Lang.NOPERM.toString()); + return true; + } + if (!(s instanceof Player)) { + s.sendMessage(Utils.f(Lang.GTM + "&cYou are not a player!")); + return true; + } + Player player = (Player) s; + if (args.length == 0) { + s.sendMessage(Utils.f("&c/picker mechanic")); + s.sendMessage(Utils.f("&c/picker cabdriver")); + s.sendMessage(Utils.f("&c/picker warden")); + s.sendMessage(Utils.f("&c/picker copsalary")); + return true; + } + switch (args[0].toLowerCase()) { + case "mechanic": { + ArmorStand armorStand = (ArmorStand) player.getWorld().spawnEntity(player.getLocation(), + EntityType.ARMOR_STAND); + armorStand.setHelmet(new JLibItem.Builder().withType(Material.LEATHER_HELMET).withColor(Color.fromRGB(165, 42, 42)).build().getItemStack()); + armorStand.setChestplate(Vice.getItemManager().getItem("shirt").getItem()); + armorStand.setLeggings(Vice.getItemManager().getItem("pants").getItem()); + armorStand.setBoots(Vice.getItemManager().getItem("nikes").getItem()); + armorStand.setItemInHand(new ItemStack(Material.WORKBENCH)); + armorStand.setCustomName(Utils.f("&4&lMechanic")); + armorStand.setCustomNameVisible(true); + armorStand.setAI(false); + armorStand.setCollidable(false); + armorStand.setCanPickupItems(true); + armorStand.setGravity(false); + armorStand.setRemoveWhenFarAway(false); + armorStand.setBasePlate(false); + armorStand.setArms(true); + s.sendMessage(Lang.VEHICLES.f("&7You created a Mechanic!")); + return true; + } + case "cabdriver": { + ArmorStand armorStand = (ArmorStand) player.getWorld().spawnEntity(player.getLocation(), + EntityType.ARMOR_STAND); + armorStand.setHelmet(new JLibItem.Builder().withType(Material.LEATHER_HELMET).withColor(Color.YELLOW).build().getItemStack()); + armorStand.setChestplate(Vice.getItemManager().getItem("shirt").getItem()); + armorStand.setLeggings(Vice.getItemManager().getItem("pants").getItem()); + armorStand.setBoots(Vice.getItemManager().getItem("nikes").getItem()); + armorStand.setItemInHand(new ItemStack(Material.WATCH)); + armorStand.setCustomName(Utils.f("&e&lCab Driver")); + armorStand.setCustomNameVisible(true); + armorStand.setAI(false); + armorStand.setCollidable(false); + armorStand.setCanPickupItems(true); + armorStand.setGravity(false); + armorStand.setRemoveWhenFarAway(false); + armorStand.setBasePlate(false); + armorStand.setArms(true); + s.sendMessage(Lang.VEHICLES.f("&7You created a Cab Driver!")); + return true; + } + case "warden": + ArmorStand armorStand = (ArmorStand) player.getWorld().spawnEntity(player.getLocation(), + EntityType.ARMOR_STAND); + armorStand.setHelmet(new JLibItem.Builder().withType(Material.LEATHER_HELMET).withColor(Color.BLACK).build().getItemStack()); + armorStand.setChestplate(Vice.getItemManager().getItem("kevlarvest").getItem()); + armorStand.setLeggings(Vice.getItemManager().getItem("pants").getItem()); + armorStand.setBoots(Vice.getItemManager().getItem("nikes").getItem()); + armorStand.setItemInHand(Vice.getItemManager().getItem("nightstick").getItem()); + armorStand.setCustomName(Utils.f("&c&lWarden")); + armorStand.setCustomNameVisible(true); + armorStand.setAI(false); + armorStand.setCollidable(false); + armorStand.setCanPickupItems(true); + armorStand.setGravity(false); + armorStand.setRemoveWhenFarAway(false); + armorStand.setBasePlate(false); + armorStand.setArms(true); + s.sendMessage(Lang.VEHICLES.f("&7You created a Warden!")); + return true; + case "copsalary": { + Vice.getPickerManager().addCopSalary(player.getLocation()); + s.sendMessage(Lang.COPS.f("&7You added the cop salary picker!")); + return true; + } + default: + s.sendMessage(Utils.f("&c/picker mechanic")); + s.sendMessage(Utils.f("&c/picker cabdriver")); + s.sendMessage(Utils.f("&c/picker warden")); + s.sendMessage(Utils.f("&c/picker copsalary")); + return true; + } + } +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/pickers/PickerManager.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/pickers/PickerManager.java new file mode 100644 index 0000000..c2600b6 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/pickers/PickerManager.java @@ -0,0 +1,43 @@ +package net.grandtheftmc.vice.pickers; + +import net.citizensnpcs.api.CitizensAPI; +import net.citizensnpcs.api.npc.NPC; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.vice.Vice; +import org.bukkit.Location; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.EntityType; +import org.bukkit.event.player.PlayerTeleportEvent; + +public class PickerManager { + + public PickerManager() { + this.load(); + } + + private NPC copSalary; + + private void load() { + YamlConfiguration c = Vice.getSettings().getPickersConfig(); + if (c.get("copSalary") != null) this.addCopSalary(Utils.teleportLocationFromString(c.getString("copSalary"))); + } + + + public void addCopSalary(Location location) { + if (location == null) return; + if (this.copSalary == null) { + this.copSalary = CitizensAPI.getNPCRegistry().createNPC(EntityType.VILLAGER, Utils.f("&3&lCarl")); + this.copSalary.spawn(location); + this.copSalary.setProtected(true); + } + this.copSalary.teleport(location, PlayerTeleportEvent.TeleportCause.PLUGIN); + } + + public void save() { + YamlConfiguration c = Vice.getSettings().getPickersConfig(); + c.set("copSalary", this.copSalary == null ? null : Utils.teleportLocationToString(this.copSalary.getStoredLocation())); + if(this.copSalary!=null) + this.copSalary.destroy(); + Utils.saveConfig(c, "pickers"); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/redstone/PandaRedstoneWire.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/redstone/PandaRedstoneWire.java new file mode 100644 index 0000000..a5bc533 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/redstone/PandaRedstoneWire.java @@ -0,0 +1,334 @@ +package net.grandtheftmc.vice.redstone; + +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; +import net.grandtheftmc.vice.utils.ReflectUtil; +import net.minecraft.server.v1_12_R1.*; +import org.apache.commons.lang.ArrayUtils; +import org.bukkit.event.Event; +import org.bukkit.event.block.BlockRedstoneEvent; + +import java.util.Iterator; +import java.util.List; +import java.util.Set; + +/** + * @author md_5 + * @author Teddeh + */ +public class PandaRedstoneWire extends BlockRedstoneWire { + + private List<BlockPosition> turnOff; + private List<BlockPosition> turnOn; + private final Set<BlockPosition> updatedRedstoneWire; + private static final EnumDirection[] facingsHorizontal; + private static final EnumDirection[] facingsVertical; + private static final EnumDirection[] facings; + private static final BaseBlockPosition[] surroundingBlocksOffset; + private boolean g; + + public PandaRedstoneWire() { + this.turnOff = Lists.newArrayList(); + this.turnOn = Lists.newArrayList(); + this.updatedRedstoneWire = Sets.newLinkedHashSet(); + this.g = true; + this.c(0.0f); + this.a(SoundEffectType.d); + this.c("redstoneDust"); + this.p(); + } + + private void e(final World world, final BlockPosition blockposition) { + this.calculateCurrentChanges(world, blockposition); + final Set<BlockPosition> blocksNeedingUpdate = Sets.newLinkedHashSet(); + for (final BlockPosition posi : this.updatedRedstoneWire) { + this.addBlocksNeedingUpdate(world, posi, blocksNeedingUpdate); + } + final Iterator<BlockPosition> it = Lists.newLinkedList(this.updatedRedstoneWire).descendingIterator(); + while (it.hasNext()) { + this.addAllSurroundingBlocks(it.next(), blocksNeedingUpdate); + } + blocksNeedingUpdate.removeAll(this.updatedRedstoneWire); + this.updatedRedstoneWire.clear(); + for (final BlockPosition posi2 : blocksNeedingUpdate) { + world.a(posi2, this, blockposition); + } + } + + private void calculateCurrentChanges(final World world, final BlockPosition blockposition) { + if (world.getType(blockposition).getBlock() == this) { + this.turnOff.add(blockposition); + } + else { + this.checkSurroundingWires(world, blockposition); + } + while (!this.turnOff.isEmpty()) { + final BlockPosition pos = this.turnOff.remove(0); + IBlockData state = world.getType(pos); + final int oldPower = state.get(PandaRedstoneWire.POWER); + this.g = false; + final int blockPower = world.z(pos); + this.g = true; + int wirePower = this.getSurroundingWirePower(world, pos); + --wirePower; + int newPower = Math.max(blockPower, wirePower); + if (oldPower != newPower) { + final BlockRedstoneEvent event = new BlockRedstoneEvent(world.getWorld().getBlockAt(pos.getX(), pos.getY(), pos.getZ()), oldPower, newPower); + world.getServer().getPluginManager().callEvent(event); + newPower = event.getNewCurrent(); + } + if (newPower < oldPower) { + if (blockPower > 0 && !this.turnOn.contains(pos)) { + this.turnOn.add(pos); + } + state = this.setWireState(world, pos, state, 0); + } + else if (newPower > oldPower) { + state = this.setWireState(world, pos, state, newPower); + } + this.checkSurroundingWires(world, pos); + } + while (!this.turnOn.isEmpty()) { + final BlockPosition pos = this.turnOn.remove(0); + IBlockData state = world.getType(pos); + final int oldPower = state.get(PandaRedstoneWire.POWER); + this.g = false; + final int blockPower = world.z(pos); + this.g = true; + int wirePower = this.getSurroundingWirePower(world, pos); + --wirePower; + int newPower = Math.max(blockPower, wirePower); + if (oldPower != newPower) { + final BlockRedstoneEvent event = new BlockRedstoneEvent(world.getWorld().getBlockAt(pos.getX(), pos.getY(), pos.getZ()), oldPower, newPower); + world.getServer().getPluginManager().callEvent(event); + newPower = event.getNewCurrent(); + } + if (newPower > oldPower) { + state = this.setWireState(world, pos, state, newPower); + } + else if (newPower < oldPower) {} + this.checkSurroundingWires(world, pos); + } + this.turnOff.clear(); + this.turnOn.clear(); + } + + private void addWireToList(final World worldIn, final BlockPosition pos, final int otherPower) { + final IBlockData state = worldIn.getType(pos); + if (state.getBlock() == this) { + final int power = state.get(PandaRedstoneWire.POWER); + if (power < otherPower - 1 && !this.turnOn.contains(pos)) { + this.turnOn.add(pos); + } + if (power > otherPower && !this.turnOff.contains(pos)) { + this.turnOff.add(pos); + } + } + } + + private void checkSurroundingWires(final World worldIn, final BlockPosition pos) { + final IBlockData state = worldIn.getType(pos); + int ownPower = 0; + if (state.getBlock() == this) { + ownPower = state.get(PandaRedstoneWire.POWER); + } + for (final EnumDirection facing : PandaRedstoneWire.facingsHorizontal) { + final BlockPosition offsetPos = pos.shift(facing); + if (facing.k().c()) { + this.addWireToList(worldIn, offsetPos, ownPower); + } + } + for (final EnumDirection facingVertical : PandaRedstoneWire.facingsVertical) { + final BlockPosition offsetPos = pos.shift(facingVertical); + final boolean solidBlock = worldIn.getType(offsetPos).k(); + for (final EnumDirection facingHorizontal : PandaRedstoneWire.facingsHorizontal) { + if ((facingVertical == EnumDirection.UP && !solidBlock) || (facingVertical == EnumDirection.DOWN && solidBlock && !worldIn.getType(offsetPos.shift(facingHorizontal)).k())) { + this.addWireToList(worldIn, offsetPos.shift(facingHorizontal), ownPower); + } + } + } + } + + private int getSurroundingWirePower(final World worldIn, final BlockPosition pos) { + int wirePower = 0; + for (final EnumDirection enumfacing : EnumDirection.EnumDirectionLimit.HORIZONTAL) { + final BlockPosition offsetPos = pos.shift(enumfacing); + wirePower = this.getPower(worldIn, offsetPos, wirePower); + if (worldIn.getType(offsetPos).l() && !worldIn.getType(pos.up()).l()) { + wirePower = this.getPower(worldIn, offsetPos.up(), wirePower); + } + else { + if (worldIn.getType(offsetPos).l()) { + continue; + } + wirePower = this.getPower(worldIn, offsetPos.down(), wirePower); + } + } + return wirePower; + } + + private void addBlocksNeedingUpdate(final World worldIn, final BlockPosition pos, final Set<BlockPosition> set) { + final List<EnumDirection> connectedSides = this.getSidesToPower(worldIn, pos); + for (final EnumDirection facing : PandaRedstoneWire.facings) { + final BlockPosition offsetPos = pos.shift(facing); + if ((connectedSides.contains(facing.opposite()) || facing == EnumDirection.DOWN || (facing.k().c() && a(worldIn.getType(offsetPos), facing))) && this.canBlockBePoweredFromSide(worldIn.getType(offsetPos), facing, true)) { + set.add(offsetPos); + } + } + for (final EnumDirection facing : PandaRedstoneWire.facings) { + final BlockPosition offsetPos = pos.shift(facing); + if ((connectedSides.contains(facing.opposite()) || facing == EnumDirection.DOWN) && worldIn.getType(offsetPos).l()) { + for (final EnumDirection facing2 : PandaRedstoneWire.facings) { + if (this.canBlockBePoweredFromSide(worldIn.getType(offsetPos.shift(facing2)), facing2, false)) { + set.add(offsetPos.shift(facing2)); + } + } + } + } + } + + private boolean canBlockBePoweredFromSide(final IBlockData state, final EnumDirection side, final boolean isWire) { + if (state.getBlock() instanceof BlockPiston && state.get(BlockPiston.FACING) == side.opposite()) { + return false; + } + if (state.getBlock() instanceof BlockDiodeAbstract && state.get(BlockDiodeAbstract.FACING) != side.opposite()) { + return isWire && state.getBlock() instanceof BlockRedstoneComparator && (state.get(BlockRedstoneComparator.FACING)).k() != side.k() && side.k().c(); + } + return !(state.getBlock() instanceof BlockRedstoneTorch) || (!isWire && state.get(BlockRedstoneTorch.FACING) == side); + } + + private List<EnumDirection> getSidesToPower(final World worldIn, final BlockPosition pos) { + final List retval = Lists.newArrayList(); + for (final EnumDirection facing : PandaRedstoneWire.facingsHorizontal) { + if (this.b(worldIn, pos, facing)) { + retval.add(facing); + } + } + if (retval.isEmpty()) { + return Lists.newArrayList(PandaRedstoneWire.facingsHorizontal); + } + final boolean northsouth = retval.contains(EnumDirection.NORTH) || retval.contains(EnumDirection.SOUTH); + final boolean eastwest = retval.contains(EnumDirection.EAST) || retval.contains(EnumDirection.WEST); + if (northsouth) { + retval.remove(EnumDirection.EAST); + retval.remove(EnumDirection.WEST); + } + if (eastwest) { + retval.remove(EnumDirection.NORTH); + retval.remove(EnumDirection.SOUTH); + } + return retval; + } + + private void addAllSurroundingBlocks(final BlockPosition pos, final Set<BlockPosition> set) { + for (final BaseBlockPosition vect : PandaRedstoneWire.surroundingBlocksOffset) { + set.add(pos.a(vect)); + } + } + + private IBlockData setWireState(final World worldIn, final BlockPosition pos, IBlockData state, final int power) { + state = state.set(PandaRedstoneWire.POWER, power); + worldIn.setTypeAndData(pos, state, 2); + this.updatedRedstoneWire.add(pos); + return state; + } + + public void onPlace(final World world, final BlockPosition blockposition, final IBlockData iblockdata) { + if (!world.isClientSide) { + this.e(world, blockposition); + for (final EnumDirection enumdirection : EnumDirection.EnumDirectionLimit.VERTICAL) { + world.applyPhysics(blockposition.shift(enumdirection), this, false); + } + for (final EnumDirection enumdirection : EnumDirection.EnumDirectionLimit.HORIZONTAL) { + this.b(world, blockposition.shift(enumdirection)); + } + for (final EnumDirection enumdirection : EnumDirection.EnumDirectionLimit.HORIZONTAL) { + final BlockPosition blockposition2 = blockposition.shift(enumdirection); + if (world.getType(blockposition2).l()) { + this.b(world, blockposition2.up()); + } + else { + this.b(world, blockposition2.down()); + } + } + } + } + + public void remove(final World world, final BlockPosition blockposition, final IBlockData iblockdata) { + super.remove(world, blockposition, iblockdata); + if (!world.isClientSide) { + for (final EnumDirection enumdirection : EnumDirection.values()) { + world.applyPhysics(blockposition.shift(enumdirection), this, false); + } + this.e(world, blockposition); + for (final EnumDirection enumdirection2 : EnumDirection.EnumDirectionLimit.HORIZONTAL) { + this.b(world, blockposition.shift(enumdirection2)); + } + for (final EnumDirection enumdirection2 : EnumDirection.EnumDirectionLimit.HORIZONTAL) { + final BlockPosition blockposition2 = blockposition.shift(enumdirection2); + if (world.getType(blockposition2).l()) { + this.b(world, blockposition2.up()); + } + else { + this.b(world, blockposition2.down()); + } + } + } + } + + public void a(final IBlockData iblockdata, final World world, final BlockPosition blockposition, final Block block, final BlockPosition blockposition1) { + if (!world.isClientSide) { + if (this.canPlace(world, blockposition)) { + this.e(world, blockposition); + } + else { + this.b(world, blockposition, iblockdata, 0); + world.setAir(blockposition); + } + } + } + + public int b(final IBlockData iblockdata, final IBlockAccess iblockaccess, final BlockPosition blockposition, final EnumDirection enumdirection) { + if (!this.g) { + return 0; + } + final int i = iblockdata.get(BlockRedstoneWire.POWER); + if (i == 0) { + return 0; + } + if (enumdirection == EnumDirection.UP) { + return i; + } + if (this.getSidesToPower((World)iblockaccess, blockposition).contains(enumdirection)) { + return i; + } + return 0; + } + + private boolean b(final IBlockAccess iblockaccess, final BlockPosition blockposition, final EnumDirection enumdirection) { + final BlockPosition blockposition2 = blockposition.shift(enumdirection); + final IBlockData iblockdata = iblockaccess.getType(blockposition2); + final boolean flag = iblockdata.l(); + final boolean flag2 = iblockaccess.getType(blockposition.up()).l(); + return (!flag2 && flag && c(iblockaccess, blockposition2.up())) || a(iblockdata, enumdirection) || (iblockdata.getBlock() == Blocks.POWERED_REPEATER && iblockdata.get(BlockDiodeAbstract.FACING) == enumdirection) || (!flag && c(iblockaccess, blockposition2.down())); + } + + static { + facingsHorizontal = new EnumDirection[] { EnumDirection.WEST, EnumDirection.EAST, EnumDirection.NORTH, EnumDirection.SOUTH }; + facingsVertical = new EnumDirection[] { EnumDirection.DOWN, EnumDirection.UP }; + facings = (EnumDirection[]) ArrayUtils.addAll(PandaRedstoneWire.facingsVertical, PandaRedstoneWire.facingsHorizontal); + final Set<BaseBlockPosition> set = Sets.newLinkedHashSet(); + for (final EnumDirection facing : PandaRedstoneWire.facings) { + set.add(ReflectUtil.getOfT(facing, BaseBlockPosition.class)); + } + for (final EnumDirection facing2 : PandaRedstoneWire.facings) { + final BaseBlockPosition v1 = ReflectUtil.getOfT(facing2, BaseBlockPosition.class); + for (final EnumDirection facing3 : PandaRedstoneWire.facings) { + final BaseBlockPosition v2 = ReflectUtil.getOfT(facing3, BaseBlockPosition.class); + set.add(new BlockPosition(v1.getX() + v2.getX(), v1.getY() + v2.getY(), v1.getZ() + v2.getZ())); + } + } + set.remove(BlockPosition.ZERO); + surroundingBlocksOffset = set.toArray(new BaseBlockPosition[set.size()]); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/redstone/RedstoneManager.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/redstone/RedstoneManager.java new file mode 100644 index 0000000..84e2455 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/redstone/RedstoneManager.java @@ -0,0 +1,32 @@ +package net.grandtheftmc.vice.redstone; + +import net.grandtheftmc.vice.utils.ReflectUtil; +import net.minecraft.server.v1_12_R1.Block; +import net.minecraft.server.v1_12_R1.Blocks; +import net.minecraft.server.v1_12_R1.IBlockData; +import net.minecraft.server.v1_12_R1.MinecraftKey; + +/** + * @author md_5 + * @author Teddeh + */ +public class RedstoneManager { + + public RedstoneManager() { + add(55, "redstone_wire", (Block)new PandaRedstoneWire()); + ReflectUtil.setStatic("REDSTONE_WIRE", Blocks.class, get("redstone_wire")); + System.out.println("Redstone Manager has been initialised."); + } + + private static Block get(final String s) { + return Block.REGISTRY.get(new MinecraftKey(s)); + } + + private static void add(final int i, final String s, final Block block) { + Block.REGISTRY.a(i, new MinecraftKey(s), block); + for (final IBlockData iblockdata : block.s().a()) { + final int k = Block.REGISTRY.a(block) << 4 | block.toLegacyData(iblockdata); + Block.REGISTRY_ID.a(iblockdata, k); + } + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/season/Season.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/season/Season.java new file mode 100644 index 0000000..419e3f0 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/season/Season.java @@ -0,0 +1,39 @@ +package net.grandtheftmc.vice.season; + +import java.sql.Timestamp; + +public class Season { + + private final int number; + private final Timestamp start, expire; + private final SeasonData seasonData; + private final boolean current; + + public Season(int number, Timestamp start, Timestamp expire, SeasonData seasonData, boolean current) { + this.number = number; + this.start = start; + this.expire = expire; + this.seasonData = seasonData; + this.current = current; + } + + public int getNumber() { + return number; + } + + public Timestamp getStart() { + return start; + } + + public Timestamp getExpire() { + return expire; + } + + public SeasonData getSeasonData() { + return seasonData; + } + + public boolean isCurrent() { + return current; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/season/SeasonDAO.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/season/SeasonDAO.java new file mode 100644 index 0000000..be500fd --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/season/SeasonDAO.java @@ -0,0 +1,47 @@ +package net.grandtheftmc.vice.season; + +import com.google.common.collect.Lists; +import net.grandtheftmc.core.Core; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.List; + +public class SeasonDAO { + +//CREATE TABLE IF NOT EXISTS season ( +//season_num INT NOT NULL, +//server_key VARCHAR(8) NOT NULL, +//start_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP(), +//expire_time TIMESTAMP NOT NULL, +//data BLOB DEFAULT NULL, +//PRIMARY KEY (id, server_key) +//); + + public static List<Season> getSeasons(Connection connection) { + List<Season> list = Lists.newArrayList(); + try (PreparedStatement statement = connection.prepareStatement("SELECT * FROM season WHERE server_key=?;")) { + statement.setString(1, Core.getSettings().getType().name()); + try (ResultSet result = statement.executeQuery()) { + while (result.next()) { + int id = result.getInt("season_num"); + String data = result.getString("data"); + Season season = new Season( + id, + result.getTimestamp("start_time"), + result.getTimestamp("expire_time"), + data == null || data.equals("NULL") ? null : new SeasonData(data), + SeasonManager.SEASON == id + ); + list.add(season); + } + } + } catch (SQLException e) { + e.printStackTrace(); + } + + return list; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/season/SeasonData.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/season/SeasonData.java new file mode 100644 index 0000000..b971c96 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/season/SeasonData.java @@ -0,0 +1,14 @@ +package net.grandtheftmc.vice.season; + +public class SeasonData { + + private final String rawData; + + public SeasonData(String rawData) { + this.rawData = rawData; + } + + public String getRawData() { + return rawData; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/season/SeasonListener.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/season/SeasonListener.java new file mode 100644 index 0000000..09c0dff --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/season/SeasonListener.java @@ -0,0 +1,92 @@ +package net.grandtheftmc.vice.season; + +import net.grandtheftmc.core.Utils; +import net.grandtheftmc.core.util.C; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.vice.hologram.Hologram; +import net.grandtheftmc.vice.hologram.HologramManager; +import net.grandtheftmc.vice.hologram.TypeWriter; +import net.grandtheftmc.vice.hologram.event.HologramReceiveEvent; +import net.grandtheftmc.vice.hologram.exception.HologramDuplicateException; +import net.grandtheftmc.vice.hologram.exception.HologramDuplicateNodeException; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.plugin.java.JavaPlugin; +import org.bukkit.scheduler.BukkitTask; + +public class SeasonListener implements Listener { + + private final SeasonManager seasonManager; + protected Hologram hologram; + BukkitTask task; + + private final TypeWriter typeWriter; + private int progress = 1; + + SeasonListener(SeasonManager seasonManager, JavaPlugin plugin, HologramManager hologramManager) { + this.seasonManager = seasonManager; + this.typeWriter = new TypeWriter("&d&lVice&f&lMC Season &d&l2", 15); + + ServerUtil.runTaskLater(() -> { + Location origin = new Location(Bukkit.getWorld("spawn"), 137.5, 82, 235.5); + try { + this.hologram = hologramManager.create(2, origin); + this.hologram.addNode(1); + this.hologram.addNode(2); + this.hologram.addNode(3); + this.hologram.addNode(4); + + this.task = Bukkit.getScheduler().runTaskTimerAsynchronously(plugin, () -> { + this.hologram.refresh(1); + + if (progress % 10 == 0) { + this.hologram.refresh(4); + this.progress = 0; + } + + progress++; + }, 20L, 3L); + } + catch (HologramDuplicateException | HologramDuplicateNodeException e) { + e.printStackTrace(); + } + }, 20*5); + + Bukkit.getPluginManager().registerEvents(this, plugin); + } + + @EventHandler + protected final void onPlayerJoin(PlayerJoinEvent event) { + if (this.hologram == null) return; + ServerUtil.runTaskLaterAsync(() -> this.hologram.spawn(event.getPlayer()), 20L); + } + + @EventHandler + protected final void onHologramReceive(HologramReceiveEvent event) { + int id = event.getHologram().getId(); + int nodeId = event.getNode().getId(); + + if(id != 2) return; + + if (nodeId == 1) { + event.setText(this.typeWriter.next()); + } + + else if (nodeId == 2) { + event.setText(" "); + event.setDisplay(false); + } + + else if (nodeId == 3) { + event.setText("&c&lSeason ends in"); + } + + else if (nodeId == 4) { + long difference = (seasonManager.getCurrentSeason().getExpire().getTime() - System.currentTimeMillis()) / 1000; + event.setText(Utils.timeInSecondsToText(difference, C.DARK_RED + C.BOLD, C.RED, C.WHITE)); + } + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/season/SeasonManager.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/season/SeasonManager.java new file mode 100644 index 0000000..16370eb --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/season/SeasonManager.java @@ -0,0 +1,64 @@ +package net.grandtheftmc.vice.season; + +import net.grandtheftmc.core.database.BaseDatabase; +import net.grandtheftmc.core.util.C; +import net.grandtheftmc.core.util.Component; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.hologram.HologramManager; +import org.bukkit.Bukkit; +import org.bukkit.plugin.java.JavaPlugin; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +public class SeasonManager implements Component <SeasonManager, Vice> { + + static final int SEASON = 2; + + private List<Season> seasons; + private Season current; + + private final SeasonListener seasonListener; + + public SeasonManager(JavaPlugin plugin, HologramManager hologramManager) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + this.seasons = SeasonDAO.getSeasons(connection); + } catch (SQLException e) { + e.printStackTrace(); + } + + this.current = getCurrentSeason(); + + if (this.current != null) { + Bukkit.getConsoleSender().sendMessage(C.AQUA + "Vice s" + this.current.getNumber()); + } + + this.seasonListener = new SeasonListener(this, plugin, hologramManager); + } + + @Override + public SeasonManager onDisable(Vice plugin) { + if (seasonListener != null) { + if (seasonListener.task != null) + this.seasonListener.task.cancel(); + + if (seasonListener.hologram != null) + this.seasonListener.hologram.destroy(); + } + + return this; + } + + public List<Season> getSeasons() { + return seasons; + } + + public Season getCurrentSeason() { + return this.current == null ? seasons.stream().filter(Season::isCurrent).findFirst().orElse(null) : this.current; + } + + public boolean hasEnded() { + return this.getCurrentSeason().getExpire().getTime() >= System.currentTimeMillis(); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/tasks/GlassesTask.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/tasks/GlassesTask.java new file mode 100644 index 0000000..49c8b5d --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/tasks/GlassesTask.java @@ -0,0 +1,36 @@ +package net.grandtheftmc.vice.tasks; + +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.ViceUtils; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitRunnable; + +public class GlassesTask extends BukkitRunnable { + private Long ct; + + @Override + public void run() { + this.ct = System.currentTimeMillis(); + Bukkit.getOnlinePlayers().forEach(player -> checkGlasses(player)); + } + + public void checkGlasses(Player player) { + if(player.getInventory().getHelmet() == null) return; + if(player.getInventory().getHelmet().getType() != Material.CHAINMAIL_HELMET) return; + player.getNearbyEntities(30, 30, 30).forEach(entity -> { + if(entity.getType() != EntityType.PLAYER) return; + Player target = (Player)entity; + new BukkitRunnable() { + @Override + public void run() { + ViceUtils.sendGlow(player, target, 12); + } + }.runTaskAsynchronously(Vice.getInstance()); + }); + player.playSound(player.getLocation(), Sound.UI_BUTTON_CLICK, 20, 20); + } +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/tasks/Lottery.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/tasks/Lottery.java new file mode 100644 index 0000000..5d66085 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/tasks/Lottery.java @@ -0,0 +1,285 @@ +package net.grandtheftmc.vice.tasks; + +import com.gmail.filoghost.holographicdisplays.api.Hologram; +import com.gmail.filoghost.holographicdisplays.api.HologramsAPI; +import com.gmail.filoghost.holographicdisplays.api.line.TextLine; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.ViceUtils; +import net.grandtheftmc.vice.users.ViceUser; +import net.grandtheftmc.vice.utils.WeightedRandomCollection; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitRunnable; + +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.temporal.ChronoUnit; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.UUID; + +/** + * Created by Liam on 11/01/2017. + */ +public class Lottery { + + private LocalDateTime end; + private Location hologramLocation; + private Hologram hologram; + private final List<TextLine> textLines = new ArrayList<>(); + private final List<LotteryPlayer> lotteryPlayers = new ArrayList<>(); + private List<LotteryPlayer> winners = new ArrayList<>(3); + + public Lottery() { + //this.loadConfig(); + // this.startScheduler(); + } + + public void loadConfig() { + YamlConfiguration c = Vice.getSettings().getLotteryConfig(); + this.hologramLocation = Utils.teleportLocationFromString(c.getString("hologramLocation")); + this.end = c.get("end") == null ? LocalDateTime.now(ZoneId.of("UTC")).plusDays(7) + : LocalDateTime.of(c.getInt("end.year"), c.getInt("end.month"), c.getInt("end.day"), c.getInt("end.hour"), c.getInt("end.minute")); + this.winners.clear(); + if (c.get("winners") != null) + for (String s : c.getConfigurationSection("winners").getKeys(false)) { + try { + UUID uuid = UUID.fromString(c.getString("winners." + s + ".uuid")); + String name = c.getString("winners." + s + ".name"); + double amnt = c.getDouble("winners." + s + ".amount"); + boolean paid = c.getBoolean("winners." + s + ".paid"); + LotteryPlayer player = new LotteryPlayer(uuid, name); + player.setAmount(amnt); + player.setPaid(paid); + this.winners.add(player); + } catch (Exception e) { + Core.log("Error while loading lottery winner " + s); + e.printStackTrace(); + } + } + this.lotteryPlayers.clear(); + if (c.get("players") != null) + for (String s : c.getConfigurationSection("players").getKeys(false)) + try { + UUID uuid = UUID.fromString(s); + LotteryPlayer player = new LotteryPlayer(uuid, c.getString("players." + uuid + ".name")); + player.setTickets(c.getInt("players." + uuid + ".tickets")); + this.lotteryPlayers.add(player); + } catch (Exception e) { + Core.log("Error while loading lottery player " + s); + e.printStackTrace(); + } + } + + public void saveConfig() { + YamlConfiguration c = Vice.getSettings().getLotteryConfig(); + for (String s : c.getKeys(false)) + c.set(s, null); + c.set("hologramLocation", Utils.teleportLocationToString(this.hologramLocation)); + c.set("end.year", this.end.getYear()); + c.set("end.month", this.end.getMonthValue()); + c.set("end.day", this.end.getDayOfMonth()); + c.set("end.hour", this.end.getHour()); + c.set("end.minute", this.end.getMinute()); + for (int i = 0; i < 3; i++) { + LotteryPlayer player = this.getWinner(i); + if (player == null) continue; + c.set("winners." + i + ".uuid", player.getUUID().toString()); + c.set("winners." + i + ".name", player.getName()); + c.set("winners." + i + ".amount", player.getAmount()); + c.set("winners." + i + ".paid", player.isPaid()); + } + for (LotteryPlayer player : this.lotteryPlayers) { + c.set("players." + player.getUUID() + ".name", player.getName()); + c.set("players." + player.getUUID() + ".tickets", player.getTickets()); + } + Utils.saveConfig(c, "lottery"); + } + + private void startScheduler() { + new BukkitRunnable() { + @Override + public void run() { + if (Lottery.this.end != null && Lottery.this.end.isBefore(LocalDateTime.now(ZoneId.of("UTC")))) + Lottery.this.end(); + Lottery.this.updateHologram(); + } + }.runTaskTimer(Vice.getInstance(), 20, 20); + + } + + public static void test() { + WeightedRandomCollection<String> collection = new WeightedRandomCollection<>(); + collection.add(50, "Top Guy"); + collection.add(5, "Medium Guy"); + collection.add(3, "Mediocre Guy"); + collection.add(2, "Peasant1"); + collection.add(2, "Peasant2"); + collection.add(2, "Peasant3"); + collection.add(2, "Peasant4"); + collection.add(2, "Peasant5"); + collection.add(1, "Slave1"); + collection.add(1, "Slave2"); + collection.add(1, "Slave3"); + collection.add(1, "Slave4"); + collection.add(1, "Slave5"); + List<String> names = new ArrayList<>(); + Bukkit.broadcastMessage("--- " + collection.values().size()); + for (int i = 0; i < 13; i++) + if (!names.contains(collection.next())) + names.add(collection.last()); + + names.forEach(Bukkit::broadcastMessage); + } + + + public void end() { + this.end = LocalDateTime.now(ZoneId.of("UTC")).plusDays(7); + WeightedRandomCollection<LotteryPlayer> players = new WeightedRandomCollection<>(); + for (LotteryPlayer player : this.lotteryPlayers) { + players.add(player.getTickets(), player); + } + this.winners = players.getUniqueElements(3); + double value = this.getPotValue(); + LotteryPlayer winner1 = this.getWinner(0); + LotteryPlayer winner2 = this.getWinner(1); + LotteryPlayer winner3 = this.getWinner(2); + if (winner1 != null) winner1.addAmount(0.7 * value); + if (winner2 != null) winner2.addAmount(0.2 * value); + if (winner3 != null) winner3.addAmount(0.1 * value); + ViceUtils.log("lottery", winner1.getName() + " has won the lottery prize of " + 0.7 * value + "(70% of the pot)"); + ViceUtils.log("lottery", winner2.getName() + " has won the lottery prize of " + 0.2 * value + "(20% of the pot)"); + ViceUtils.log("lottery", winner3.getName() + " has won the lottery prize of " + 0.1 * value + "(10% of the pot)"); + this.lotteryPlayers.clear(); + for (Player p : Bukkit.getOnlinePlayers()) + p.sendMessage(new String[]{"", Utils.f(ViceUtils.HEADER), "", + Utils.fc("&e&lLottery Results"), "", + Utils.fc("&7For a total pot of &a&l" + Utils.formatMoney(value)), + Utils.fc("&a#&l1&7: &r" + winner1 + " &a&l" + Utils.formatMoney(0.7 * value) + "&7 (&a70%&7 of the pot)"), + Utils.fc("&a#&l2&7: &r" + winner2 + " &a&l" + Utils.formatMoney(0.2 * value) + "&7 (&a20%&7 of the pot)"), + Utils.fc("&a#&l3&7: &r" + winner3 + " &a&l" + Utils.formatMoney(0.1 * value) + "&7 (&a10%&7 of the pot)"), + "", Utils.fc("&e&lCongratulations to the winners!"), + "", Utils.f(ViceUtils.FOOTER), ""}); + + for (int i = 0; i < 3 && i < this.winners.size(); i++) { + LotteryPlayer winner = this.winners.get(i); + if (winner != null && !winner.isPaid()) { + Player player = Bukkit.getPlayer(winner.getUUID()); + if (player == null) continue; + ViceUser user = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + user.addMoney(winner.getAmount()); + winner.setPaid(true); + player.sendMessage(Lang.LOTTERY.f("&7You've won the lottery, coming in " + (i == 0 ? "1st" : i == 1 ? "2nd" : i == 2 ? "3rd" : "error") + "! &a" + Utils.formatMoney(winner.getAmount()) + "&7 was added to your balance.")); + ViceUtils.updateBoard(player, user); + } + } + + } + + + public void updateHologram() { + if (this.hologramLocation == null) return; + LotteryPlayer winner1 = this.winners.isEmpty() ? null : this.winners.get(0); + LotteryPlayer winner2 = this.winners.size() > 1 ? this.winners.get(1) : null; + LotteryPlayer winner3 = this.winners.size() > 2 ? this.winners.get(2) : null; + if (this.hologram == null) { + this.hologram = HologramsAPI.createHologram(Vice.getInstance(), this.hologramLocation.clone().add(0.5, 4, 0.5)); + this.textLines.add(this.hologram.appendTextLine(Utils.f("&e&lLottery"))); + this.textLines.add(this.hologram.appendTextLine(Utils.f("&7&oGo big or go home!"))); + this.textLines.add(this.hologram.appendTextLine("")); + this.textLines.add(this.hologram.appendTextLine(Utils.f("&7Pot value:"))); + this.textLines.add(this.hologram.appendTextLine(Utils.f("&a&l" + Utils.formatMoney(this.getPotValue())))); + this.textLines.add(this.hologram.appendTextLine("")); + this.textLines.add(this.hologram.appendTextLine(Utils.f("&7Time until jackpot:"))); + this.textLines.add(this.hologram.appendTextLine(Utils.f("&a&l" + this.timeToEnd()))); + this.textLines.add(this.hologram.appendTextLine("")); + this.textLines.add(this.hologram.appendTextLine(Utils.f("&7Last week's winners:"))); + this.textLines.add(this.hologram.appendTextLine(Utils.f(winner1 == null ? "" : ("&a#&l1&7: &r" + winner1 + " &a" + Utils.formatMoney(winner1.getAmount()) + "&7 (&a70%&7 of the pot)")))); + this.textLines.add(this.hologram.appendTextLine(Utils.f(winner2 == null ? "" : ("&a#&l2&7: &r" + winner2 + " &a" + Utils.formatMoney(winner2.getAmount()) + "&7 (&a20%&7 of the pot)")))); + this.textLines.add(this.hologram.appendTextLine(Utils.f(winner3 == null ? "" : ("&a#&l3&7: &r" + winner3 + " &a" + Utils.formatMoney(winner3.getAmount()) + "&7 (&a10%&7 of the pot)")))); + } else { + this.textLines.get(4).setText(Utils.f("&a&l" + Utils.formatMoney(this.getPotValue()))); + this.textLines.get(7).setText(Utils.f("&a&l" + this.timeToEnd())); + this.textLines.get(10).setText(Utils.f("&a#&l1&7: &r" + (winner1 == null ? "" : (winner1 + " &a" + Utils.formatMoney(winner1.getAmount()) + "&7 (&a70%&7 of the pot)")))); + this.textLines.get(11).setText(Utils.f("&a#&l2&7: &r" + (winner2 == null ? "" : (winner2 + " &a" + Utils.formatMoney(winner2.getAmount()) + "&7 (&a20%&7 of the pot)")))); + this.textLines.get(12).setText(Utils.f("&a#&l2&7: &r" + (winner3 == null ? "" : (winner3 + " &a" + Utils.formatMoney(winner3.getAmount()) + "&7 (&a10%&7 of the pot)")))); + + } + } + + public String timeToEnd() { + if (this.end == null) this.end = LocalDateTime.now(ZoneId.of("UTC")).plusDays(1); + return Utils.timeInSecondsToText(ChronoUnit.SECONDS.between(LocalDateTime.now(ZoneId.of("UTC")), this.end)); + } + + public List<LotteryPlayer> getTickets() { + return this.lotteryPlayers; + } + + public LotteryPlayer getLotteryPlayer(UUID uuid) { + return this.lotteryPlayers.stream().filter(player -> Objects.equals(player.getUUID(), uuid)).findFirst().orElse(null); + } + + public LotteryPlayer getWinner(UUID uuid) { + return this.winners.stream().filter(player -> Objects.equals(player.getUUID(), uuid)).findFirst().orElse(null); + } + + + public LotteryPlayer getWinner(int i) { + return this.winners.size() > i ? this.winners.get(i) : null; + } + + public double getPotValue() { + return 500 * this.lotteryPlayers.stream().mapToInt(LotteryPlayer::getTickets).sum(); + } + + public void joinCheck(Player player, User user, ViceUser viceUser) { + for (int i = 0; i < 3 && i < this.winners.size(); i++) { + LotteryPlayer winner = this.winners.get(i); + if (winner != null && !winner.isPaid() && Objects.equals(winner.getUUID(), player.getUniqueId())) { + viceUser.addMoney(winner.getAmount()); + winner.setPaid(true); + player.sendMessage(Lang.LOTTERY.f("&7You've won the lottery, coming in " + (i == 0 ? "1st" : i == 1 ? "2nd" : i == 2 ? "3rd" : "error") + "! &a$&l" + Utils.formatMoney(winner.getAmount()) + "&7 was added to your balance.")); + } + } + if (user.isSpecial()) { + LotteryPlayer p = this.getLotteryPlayer(player.getUniqueId()); + if (p != null) return; + p = new LotteryPlayer(player.getUniqueId(), player.getName()); + this.lotteryPlayers.add(p); + p.addTickets(ViceUtils.getFreeLotteryTickets(user.getUserRank())); + player.sendMessage(Lang.LOTTERY.f("&7Thank you for financially supporting GTM! You have been given &a&l" + p.getTickets() + "&7 free lottery tickets for this week's draw.")); + } + } + + public List<LotteryPlayer> getLastWinners() { + return this.winners; + } + + public void addLotteryPlayer(LotteryPlayer p) { + this.lotteryPlayers.add(p); + } + + public void setHologramLocation(Location hologramLocation) { + this.hologramLocation = hologramLocation; + } + + public Location getHologramLocation() { + return this.hologramLocation; + } + + public void setEnd(LocalDateTime end) { + this.end = end; + } + + public LocalDateTime getEnd() { + return this.end; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/tasks/LotteryPlayer.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/tasks/LotteryPlayer.java new file mode 100644 index 0000000..15fa203 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/tasks/LotteryPlayer.java @@ -0,0 +1,64 @@ +package net.grandtheftmc.vice.tasks; + +import java.util.UUID; + +public class LotteryPlayer { + private final UUID uuid; + private final String name; + private int tickets; + + private double amount; + private boolean paid; + + public LotteryPlayer(UUID uuid, String name) { + this.uuid = uuid; + this.name = name; + } + + public UUID getUUID() { + return this.uuid; + } + + public String getName() { + return this.name; + } + + public int getTickets() { + return this.tickets; + } + + public void setTickets(int tickets) { + this.tickets = tickets; + } + + public void addTickets(int tickets) { + this.tickets += tickets; + } + + public void setAmount(double amount) { + this.amount = amount; + } + + public void addAmount(double amount) { + this.amount += amount; + } + + public double getAmount() { + return this.amount; + } + + public void setPaid(boolean b) { + this.paid = b; + } + + public boolean isPaid() { + return this.paid; + } + + @Override + public String toString() { + return this.name; + } + + +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/tasks/PlayerTask.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/tasks/PlayerTask.java new file mode 100644 index 0000000..aada320 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/tasks/PlayerTask.java @@ -0,0 +1,123 @@ +package net.grandtheftmc.vice.tasks; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.users.ViceUser; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.block.Block; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; +import org.bukkit.scheduler.BukkitRunnable; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.ThreadLocalRandom; + +public class PlayerTask extends BukkitRunnable { + public static List<Block> fireBlocks = new ArrayList<>(); + private Long ct; + + @Override + public void run() { + this.ct = System.currentTimeMillis(); + if (!fireBlocks.isEmpty()) checkFire(); + for (Player player : Bukkit.getOnlinePlayers()) { + ViceUser viceUser = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + this.checkCombatTagExpiration(player, viceUser); + this.checkTpaRequestExpiration(player, viceUser); + this.checkJailRelease(player, viceUser); + this.checkDualWield(player); +// this.checkElytra(player); + viceUser.checkBackupExpiration(player); + } + } + + + private void checkFire() { + Block block = fireBlocks.get(ThreadLocalRandom.current().nextInt(fireBlocks.size())); + if (block.getChunk().isLoaded()) block.setType(Material.AIR); + fireBlocks.remove(block); + } + +// private void checkElytra(Player player) { +// if (player.isGliding()) { +// if (player.getInventory().contains(Material.COAL)) { +// if (player.isSneaking()) { +// ItemStack fuel = player.getInventory().getItem(player.getInventory().first(Material.COAL)); +// if (fuel.getAmount() <= 1 || fuel.getAmount() - 5 < 1) { +// player.getInventory().remove(fuel); +// } else { +// fuel.setAmount(fuel.getAmount() - 5); +// } +// player.getWorld().playSound(player.getLocation(), Sound.ENTITY_ITEM_PICKUP, 1.0F, 1.0F); +// player.getInventory().getChestplate().setDurability((short) 0); +// } +// } else { +// player.sendMessage(Lang.VEHICLES.f("&7Elytra requires (jetpack) fuel to fly!")); +// player.setGliding(false); +// if (player.getInventory().firstEmpty() == -1) { +// player.getWorld().dropItem(player.getLocation(), player.getInventory().getChestplate()); +// } else { +// player.getInventory().addItem(player.getInventory().getChestplate()); +// } +// player.getInventory().setChestplate(null); +// player.setFallDistance(-50); +// } +// } +// } + + private void checkDualWield(Player player) { + if (player.getInventory().getItemInOffHand() != null && player.getInventory().firstEmpty() != -1) { + if (player.getInventory().getItemInOffHand().getType() == Material.SHIELD) return; + player.getInventory().addItem(player.getInventory().getItemInOffHand()); + } + player.getInventory().setItemInOffHand(null); + } + + private void checkJailRelease(Player player, ViceUser viceUser) { + int timer = viceUser.getJailTimer(); + if (!viceUser.isArrested() || timer < 0) + return; + if (timer == 600 || timer == 300 || timer == 180 || timer == 120 || timer == 60 || timer == 30 + || timer == 15 || timer == 10 || (timer <= 5 && timer > 0)) { + player.sendMessage( + Lang.JAIL.f("&7You will be released in &a" + Utils.timeInSecondsToText(timer) + "&7!")); + if (timer == 1) { + player.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, 50, 0)); + player.playSound(player.getLocation(), Sound.BLOCK_LAVA_EXTINGUISH, 0.5F, 1); + } else + player.playSound(player.getLocation(), Sound.UI_BUTTON_CLICK, 4.0F / timer, 2); + } + if (timer == 0) { + viceUser.resetJail(); + player.teleport(Vice.getWorldManager().getWarpManager().getSpawn().getLocation()); + player.sendMessage(Lang.JAIL.f("&7You were released from jail!")); + player.removePotionEffect(PotionEffectType.SLOW); + player.getActivePotionEffects().clear(); + return; + } + viceUser.setJailTimer(timer - 1); + } + + + private void checkCombatTagExpiration(Player player, ViceUser user) { + if (user.isInCombat() || user.getLastTag() == -1) + return; + user.setLastTag(-1); +// Core.getUserManager().getLoadedUser(player.getUniqueId()).showPet(player); + player.sendMessage(Utils.f(Lang.COMBATTAG + "&7You are no longer in combat. You may log out safely.")); + } + + + private void checkTpaRequestExpiration(Player player, ViceUser viceUser) { + if (viceUser.getLastTpaRequest() > 0 && viceUser.getLastTpaRequest() + 60000 < this.ct) { + viceUser.unsetTpaRequests(); + } + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/tasks/TaskManager.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/tasks/TaskManager.java new file mode 100644 index 0000000..b16f3a5 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/tasks/TaskManager.java @@ -0,0 +1,24 @@ +package net.grandtheftmc.vice.tasks; + +import net.grandtheftmc.vice.Vice; + +public class TaskManager { + private PlayerTask playerTask; + private GlassesTask glassesTask; + + public TaskManager() { + this.startTasks(); + } + + private void startTasks() { + this.playerTask = new PlayerTask(); + this.playerTask.runTaskTimer(Vice.getInstance(), 20, 20); + this.glassesTask = new GlassesTask(); + this.glassesTask.runTaskTimer(Vice.getInstance(), 100, 100); + } + + public PlayerTask getPlayerTask() { + return this.playerTask; + } + +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/AntiAfkTimer.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/AntiAfkTimer.java new file mode 100644 index 0000000..970a6b6 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/AntiAfkTimer.java @@ -0,0 +1,38 @@ +package net.grandtheftmc.vice.users; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.util.Vector; + +import java.util.HashMap; +import java.util.UUID; + +/** + * Created by Timothy Lampen on 3/6/2018. + */ +public class AntiAfkTimer implements Runnable { + + private final HashMap<UUID, Vector> directions = new HashMap<>(); + + + @Override + public void run() { + purgeData(); + for(Player player : Bukkit.getOnlinePlayers()) { + if(this.directions.containsKey(player.getUniqueId())){ + if(this.directions.get(player.getUniqueId()).equals(player.getLocation().getDirection())) { + player.kickPlayer(Lang.VICE.f("&cYou were kicked for being afk!")); + continue; + } + } + this.directions.put(player.getUniqueId(), player.getLocation().getDirection()); + } + } + + + private void purgeData(){ + directions.entrySet().removeIf(entry -> Bukkit.getPlayer(entry.getKey()) == null); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/CheatCode.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/CheatCode.java new file mode 100644 index 0000000..ca0fe7b --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/CheatCode.java @@ -0,0 +1,211 @@ +package net.grandtheftmc.vice.users; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.util.C; +import net.grandtheftmc.core.util.State; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.vice.Vice; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; + +import java.util.*; + +/** + * Created by Timothy Lampen on 8/21/2017. + */ +public enum CheatCode { + + KATANA(UserRank.ADMIN, Utils.createItem(Material.DIAMOND_SWORD, 421, "KATANA" , "&7Chop off heads with this masterful weapon!", "&7Delay: &e&l3 days."), true, false, "katana_cc", null), + JELLYLEGS(UserRank.ADMIN, Utils.createItem(Material.DIAMOND_BOOTS, "JELLYLEGS", "&7Recieve no more fall damage."), true, true, null, null), + SILKSPAWNERS(UserRank.SUPREME, Utils.createItem(Material.DIAMOND_PICKAXE, "SILKSPAWNERS", "&7Recieve the ability to silk touch spawners."), true, true, null, "&7To unlock this cheatcode, purchase the &c&lSUPREME&7 rank or the &2&lSILKSPAWNERS&7 cheatcode at &a&lstore.grandtheftmc.net&7!"), + NIGHTVIS(UserRank.SUPREME, Utils.createItem(Material.CHAINMAIL_HELMET, "NIGHTVIS", "&7Be able to toggle permanent night vision."), false, true, null, "&7To unlock this cheatcode, purchase the &c&lSUPREME&7 rank or the &2&lNIGHTVIS&7 cheatcode at &a&lstore.grandtheftmc.net&7!"), + NOFUEL(UserRank.ADMIN, Utils.createItem(Material.DIAMOND_SWORD, 1001, "NOFUEL", "&7Don't use any jetpack fuel in non-enemy territory while enemies aren't around."), true, true, null, null), + SNEAKY(UserRank.ADMIN, Utils.createItem(Material.GLASS_BOTTLE, "SNEAKY", "&7Gain invisibility for 5 seconds when you go to spawn ", "&7and exit the safezone to more easily sell your drugs"), true, true, null, null), + FEED(UserRank.SPONSOR, Utils.createItem(Material.COOKED_BEEF, "FEED", "&7Have access to the feed command."), true, false, null, null), + FUCKME(UserRank.ADMIN, Utils.createItem(Material.DIAMOND_SWORD, 401, "FUCKME", "&7Gives a dildo so you can go fuck yourself.", "&7Delay: &e&l7 days."), true, false, "fuckme_cc", null), + SANIC(UserRank.ADMIN, Utils.createItem(Material.LEATHER_BOOTS, "SANIC", "&7Gives speed II for 5 minutes.", "&7Delay: &e&l1 hour."), true, false, "sanic_cc", null), + YOUCANTSEEME(UserRank.ADMIN, Utils.createItem(Material.GLASS, "YOUCANTSEEME", "&7Gain invisibility for 3 minutes.", "&7Delay: &e&l1 hour."), true, false, "youcantseeme_cc", null), + WINGSUIT(UserRank.ADMIN, Utils.createItem(Material.ELYTRA, "WINGSUIT", "&7Recieve a single wingsuit", "&7Delay: &e&l3 days."), true, false, "wingsuit_cc", null), + FIXHAND(UserRank.VIP, Utils.createItem(Material.STICK, "FIXHAND", "&7Gain access to the /fix hand command."), true, false, null, null), + FIXALL(UserRank.SUPREME, Utils.createItem(Material.CHEST, "FIXALL", "&7Have the ability to do /fix all."), true, false, null, null), + STACK(UserRank.ADMIN, Utils.createItem(Material.GOLD_INGOT, "STACK", "&7Be able to do the /stack command."), true, false, null, null), + VILLAGERJOB(UserRank.ADMIN, Utils.createItem(Material.MONSTER_EGG,120, "Villager Job", "&7Shift right clicking a villager will give you the ability to change their profession.", "&7Delay: &e1 hour."), true, false, null, null), + QUICKSELL(UserRank.ELITE, Utils.createItem(Material.DISPENSER, "QUICK SELL", "&7Have the ability to sell items", "&7without having to travel back", "&7to spawn!"), true, false, null, "&7To unlock this cheatcode, purchase the &c&lELITE&7 rank or the &2&lQUICKSELL&7 cheatcode at &a&lstore.grandtheftmc.net&7!"), + ; + + private final ItemStack displayItem; + private final boolean toggleable, defaultToggle; + private final UserRank rank; + private String cooldownID, lockedLore; + + CheatCode(UserRank rank, ItemStack displayItem, boolean defaultToggle, boolean toggleable, String cooldownID, String lockedLore) { + ItemMeta im = displayItem.getItemMeta(); + im.setUnbreakable(true); + im.addItemFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE); + displayItem.setItemMeta(im); + this.defaultToggle = defaultToggle; + this.lockedLore = Utils.f(lockedLore==null ? "&7You can purchase this cheatcode at &a&lstore.grandtheftmc.net&7!" : lockedLore); + this.displayItem = displayItem; + this.toggleable = toggleable; + this.rank = rank; + this.cooldownID = cooldownID; + } + + public UserRank getMinmumRank() { + return rank; + } + + public State getDefaultState(){ + return this.defaultToggle ? State.ON : State.OFF; + } + + public String getLockedLore() { + return this.lockedLore; + } + + public boolean isToggleable() { + return toggleable; + } + + public ItemStack getDisplayItem(User user, State state) { + ItemStack is = displayItem.clone(); + ItemMeta im = is.getItemMeta(); + + if(state==State.LOCKED) { + ArrayList<String> lore = new ArrayList<>(im.getLore()); + lore.add(" "); + lore.add(Utils.f("&4&lLOCKED")); + if(this.rank.isHigherThan(UserRank.DEFAULT) && !this.rank.isHigherThan(UserRank.YOUTUBER)) { + lore.add(Utils.f("&4&lUnlocked with rank: " + rank.getColoredNameBold())); + } + im.setDisplayName(Utils.f(getStateColor(state) + im.getDisplayName())); + im.setLore(lore); + is.setItemMeta(im); + return is; + } + + if(user!=null && this.cooldownID!=null) { + boolean stillOnCooldown = user.isOnCooldown(this.cooldownID); + state = stillOnCooldown ? State.OFF : State.ON; + List<String> lore = new ArrayList<>(im.getLore()); + if(stillOnCooldown) + lore.set(1, Utils.f("&7Delay: &e&l" + Utils.timeInSecondsToText(user.getCooldownTimeLeft(this.cooldownID), C.RED, C.RED, C.GRAY) + "&7.")); + } + im.setDisplayName(Utils.f(getStateColor(state) + im.getDisplayName())); + is.setItemMeta(im); + return is; + } + + public static String seralizeCheatCodes(HashMap<CheatCode, CheatCodeState> codes) { + StringBuilder sb = new StringBuilder(); + codes.forEach((codea, statea) -> sb.append(codea.toString() + "#" + statea.getState() + "#" + statea.isPurchased() + "-")); + sb.deleteCharAt(sb.length()-1); + return sb.toString(); + } + + public void activate(User coreUser, ViceUser user, Player player, CheatCodeState cState) { + if(user.isArrested()) { + player.sendMessage(Lang.CHEAT_CODES.f("&7You cannot use this cheat code while you are arrested!")); + return; + } + if (cState.getState() == State.LOCKED) { + player.sendMessage(Lang.CHEAT_CODES.f("&7You haven't unlocked this cheat code yet!")); + return; + } + if(!this.isToggleable()){//the non-toggleables + if(coreUser.isOnCooldown(this.cooldownID)) { +// player.sendMessage(Lang.CHEAT_CODES.f("&7You must wait &a" + coreUser.getFormattedCooldown(this.cooldownID, true) + " &7before using this cheatcode again!")); + player.sendMessage(Lang.CHEAT_CODES.f("&7You must wait &a" + Utils.timeInSecondsToText(coreUser.getCooldownTimeLeft(this.cooldownID), C.RED, C.RED, C.GRAY) + " &7before using this cheatcode again!")); + return; + } + switch (this) { + case KATANA: + if(Utils.giveItems(player, Vice.getItemManager().getItem("katana").getItem())) { + player.sendMessage(Utils.f(Lang.CHEAT_CODES + "&cYour inventory was full so some items were dropped on the ground!")); + } + coreUser.addCooldown(this.cooldownID, 60*60*24*3, true, true); + player.sendMessage(Lang.CHEAT_CODES.f("&7You have used your katana cheat code!")); + break; + case FUCKME: + if(Utils.giveItems(player, Vice.getItemManager().getItem("dildo").getItem())) { + player.sendMessage(Utils.f(Lang.CHEAT_CODES + "&cYour inventory was full so some items were dropped on the ground!")); + } + coreUser.addCooldown(this.cooldownID, 60*60*24*7, true, true); + player.sendMessage(Lang.CHEAT_CODES.f("&7You have used your fuck me cheat code!")); + break; + case WINGSUIT: + if(Utils.giveItems(player, Vice.getItemManager().getItem("wingsuit").getItem())) { + player.sendMessage(Utils.f(Lang.CHEAT_CODES + "&cYour inventory was full so some items were dropped on the ground!")); + } + coreUser.addCooldown(this.cooldownID, 60*60*24*3, true, true); + player.sendMessage(Lang.CHEAT_CODES.f("&7You have used your wingsuit cheat code!")); + break; + case SANIC: + coreUser.addCooldown(this.cooldownID, 60*60, false, true); + player.addPotionEffect(new PotionEffect(PotionEffectType.SPEED, 20*60*5, 1)); + player.sendMessage(Lang.CHEAT_CODES.f("&7You have used your sanic cheat code!")); + break; + case YOUCANTSEEME: + coreUser.addCooldown(this.cooldownID, 60*60, false, true); + player.addPotionEffect(new PotionEffect(PotionEffectType.INVISIBILITY, 20*60*3, 0)); + player.sendMessage(Lang.CHEAT_CODES.f("&7You have used your you can't see me cheat code!")); + break; + case STACK: + player.chat("/stack"); + break; + case FIXALL: + player.chat("/fix all"); + break; + case FIXHAND: + player.chat("/fix hand"); + break; + case FEED: + player.chat("/feed"); + break; + case QUICKSELL: + player.chat("/qsell"); + break; + } + } + else { + player.sendMessage(Lang.CHEAT_CODES.f("&7You turrned " + (cState.getState() ==State.OFF ? "&a&lon &7" : "&c&loff &7") + (this.toString().toLowerCase().replace("_", " ")))); + switch (this) {//only the toggleable ones that need effects NOW + case NIGHTVIS: + if (cState.getState() == State.OFF) + player.addPotionEffect(new PotionEffect(PotionEffectType.NIGHT_VISION, Integer.MAX_VALUE, 0)); + else if (cState.getState() == State.ON && player.hasPotionEffect(PotionEffectType.NIGHT_VISION)) + player.removePotionEffect(PotionEffectType.NIGHT_VISION); + break; + case JELLYLEGS: + break; + } + } + user.setCheatCodeState(this, new CheatCodeState(cState.getState()==State.ON && this.isToggleable() ? State.OFF : State.ON, cState.isPurchased())); + } + + private String getStateColor(State state){ + switch (state) { + case ON: + return "&a&l"; + case OFF: + return "&c&l"; + case LOCKED: + return "&4&l"; + } + return null; + } + + public static Optional<CheatCode> getCheatCodeFromItemStack(ItemStack stack){ + if(stack==null) + return Optional.empty(); + return Arrays.stream(CheatCode.values()).filter(code -> code.getDisplayItem(null, State.ON).getType()==stack.getType() && code.getDisplayItem(null, State.ON).getDurability()==stack.getDurability()).findFirst(); + } + +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/CheatCodeState.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/CheatCodeState.java new file mode 100644 index 0000000..64d7048 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/CheatCodeState.java @@ -0,0 +1,25 @@ +package net.grandtheftmc.vice.users; + + +import net.grandtheftmc.core.util.State; +/** + * Created by Timothy Lampen on 2017-08-26. + */ +public class CheatCodeState { + + private final State state; + private final boolean purchased; + + public CheatCodeState(State state, boolean purchased) { + this.state = state; + this.purchased = purchased; + } + + public State getState() { + return state; + } + + public boolean isPurchased() { + return purchased; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/CopRank.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/CopRank.java new file mode 100644 index 0000000..6dd9219 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/CopRank.java @@ -0,0 +1,107 @@ +package net.grandtheftmc.vice.users; + +import net.grandtheftmc.core.util.Utils; +import org.bukkit.Material; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Objects; + +public enum CopRank { + + COP("&b", 10000, Material.CHEST,"essentials.sethome.multiple","essentials.sethome.multiple.2"), + NARC("&b", 25000, Material.STICK,"essentials.sethome.multiple.3"), + LIEUTENANT("&b", 50000, Material.IRON_BARDING,"essentials.sethome.multiple.5"), + CAPTAIN("&b", 100000, Material.SHIELD,"essentials.sethome.multiple.10"), + WARDEN("&3", 250000, Material.BLAZE_ROD,"essentials.sethome.multiple.unlimited"); + + private final String color; + private final int salary; + private final List<String> perms; + private final Material material; + + + CopRank(String color, int salary, Material material, String... perms) { + this.color = color; + this.salary = salary; + this.perms = Arrays.asList(perms); + this.material = material; + } + + public List<String> getAllPerms() { + List<String> permissions = new ArrayList<>(); + for (CopRank c : CopRank.values()) { + permissions.addAll(c.perms); + if (c == this) + return permissions; + } + return permissions; + } + + private List<String> getPerms() { + return this.perms; + } + + public String getName() { + return this.toString(); + } + + public String getColor() { + return this.color; + } + + public String getColoredName() { + return Utils.f(this.color + this.getName() + "&r"); + } + + public String getColoredNameBold() { + return Utils.f(this.color + "&l" + this.getName() + "&r"); + } + + public CopRank getNext() { + String rankName = this.getName(); + if ("GODFATHER".equalsIgnoreCase(rankName)) + return null; + int go = 0; + + CopRank rank = null; + for (CopRank r : CopRank.values()) + if (go == 0) { + if (Objects.equals(r.getName(), rankName)) { + go = 1; + } + } else if (go == 1) { + rank = r; + break; + } + return rank; + } + + public static CopRank fromString(String string) { + return Arrays.stream(CopRank.values()).filter(uc -> uc.getName().equalsIgnoreCase(string)).findFirst().orElse(CopRank.COP); + } + + public Material getMaterial() { + return this.material; + } + + public static CopRank getRankOrNull(String name) { + if (name == null) + return null; + return Arrays.stream(CopRank.values()).filter(r -> r.getName().equalsIgnoreCase(name)).findFirst().orElse(null); + } + + public boolean isHigherThan(CopRank rank) { + for (CopRank r : CopRank.values()) + if (r == this) + return false; + else if (r == rank) + return true; + return false; + } + + public double getSalary() { + return this.salary; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/LockedWeapon.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/LockedWeapon.java new file mode 100644 index 0000000..94a1355 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/LockedWeapon.java @@ -0,0 +1,52 @@ +package net.grandtheftmc.vice.users; + +import net.grandtheftmc.core.users.UserRank; + +import java.util.Arrays; + +public enum LockedWeapon { + + // TODO assign to ranks + MARKSMANPISTOL(ViceRank.FALCON, UserRank.VIP), + HEAVYSHOTGUN(ViceRank.THUG, UserRank.VIP), + CHAINSAW(ViceRank.DEALER, UserRank.PREMIUM), + GUSENBERGSWEEPER(ViceRank.DEALER, UserRank.PREMIUM), + RPG(ViceRank.GROWER, UserRank.PREMIUM), + HEAVYSNIPER(ViceRank.SMUGGLER, UserRank.ELITE), + SPECIALCARBINE(ViceRank.SMUGGLER, UserRank.ELITE), + GRENADELAUNCHER(ViceRank.CHEMIST, UserRank.SPONSOR), + COMBATMG(ViceRank.DRUGLORD, UserRank.SPONSOR), + HOMINGLAUNCHER(ViceRank.KINGPIN, UserRank.SUPREME), + MINIGUN(ViceRank.KINGPIN, UserRank.SUPREME), + GOLDMINIGUN(ViceRank.KINGPIN, UserRank.SUPREME); + + private final ViceRank rank; + private final UserRank userRank; + + LockedWeapon(ViceRank rank, UserRank userRank) { + this.rank = rank; + this.userRank = userRank; + } + + public static boolean canUseWeapon(String identifier, ViceRank rank, UserRank userRank) { + LockedWeapon w = getWeapon(identifier); + return w == null || w.canUseWeapon(rank, userRank); + } + + public ViceRank getViceRank() { + return this.rank; + } + + public UserRank getUserRank() { + return this.userRank; + } + + public boolean canUseWeapon(ViceRank rank, UserRank userRank) { + if(rank == null || userRank == null) return false; + return this.rank == rank || rank.isHigherThan(this.rank) || this.userRank == userRank || userRank.isHigherThan(this.userRank); + } + + public static LockedWeapon getWeapon(String identifier) { + return Arrays.stream(LockedWeapon.values()).filter(w -> w.toString().equalsIgnoreCase(identifier)).findFirst().orElse(null); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/PersonalVehicle.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/PersonalVehicle.java new file mode 100644 index 0000000..2ded2bb --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/PersonalVehicle.java @@ -0,0 +1,355 @@ +package net.grandtheftmc.vice.users; + +import com.j0ach1mmall3.jlib.methods.Random; +import com.j0ach1mmall3.wastedvehicles.api.VehicleProperties; +import com.j0ach1mmall3.wastedvehicles.api.vehicles.WastedVehicle; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.menus.MenuManager; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.ViceUtils; +import net.grandtheftmc.vice.events.TPEvent; +import net.grandtheftmc.vice.items.GameItem; +import net.grandtheftmc.vice.users.storage.BooleanStorageType; +import org.bukkit.*; +import org.bukkit.block.BlockFace; +import org.bukkit.entity.ArmorStand; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitRunnable; + +import java.util.Objects; +import java.util.Optional; +import java.util.UUID; + +/** + * Created by Liam on 24/09/2016. + */ +public class PersonalVehicle { + + private String vehicle; + private double health = -1; + private UUID entityUUID; + private boolean stolen; + + public PersonalVehicle(String vehicle) { + this.vehicle = vehicle; + } + + public String getVehicle() { + return this.vehicle; + } + + public void setVehicle(String vehicle) { + this.vehicle = vehicle; + } + + public String getDisplayName() { + VehicleProperties p = this.getVehicleProperties(); + return p == null ? "Error" : p.getItem().getItemMeta().getDisplayName(); + } + + public VehicleProperties getVehicleProperties() { + Optional<VehicleProperties> opt = Vice.getWastedVehicles().getVehicle(this.vehicle); + return opt.orElse(null); + } + + public String getFormattedHealth() { + if (this.isDestroyed()) return "&c&lDestroyed"; + return Vice.getWastedVehicles().formatHealth(this.getHealth(), this.getVehicleProperties().getMaxHealth()); + } + + public double getHealth() { + return this.health < 0 ? this.getVehicleProperties().getMaxHealth() : this.health; + } + + public boolean isStolen() { + if (this.getEntity() == null) this.stolen = false; + return this.stolen; + } + + public double getPrice() { + GameItem item = Vice.getItemManager().getItemFromVehicle(this.vehicle); + return item == null ? -1 : item.getSellPrice() * 2; + } + + public double getSellPrice() { + return this.getPrice() / 2 - this.getRepairPrice(); + } + + public double getRepairPrice() { + if(!this.isDestroyed()) return 0; + return this.getPrice() / 5; + } + + public void setStolen(boolean b) { + this.stolen = b; + } + + public void setHealth(double health) { + this.health = health; + } + + public UUID getEntityUUID() { + return this.entityUUID; + } + + public void setEntityUUID(UUID entityUUID) { + this.entityUUID = entityUUID; + } + + public ArmorStand getEntity() { + if (this.entityUUID == null) return null; + for (World world : Bukkit.getWorlds()) + for (ArmorStand e : world.getEntitiesByClass(ArmorStand.class)) + if (Objects.equals(e.getUniqueId(), this.entityUUID)) { + this.health = e.getHealth(); + return e; + } + this.entityUUID = null; + return null; + } + + public boolean isDestroyed() { + return this.getHealth() <= 1; + } + + public void updateVehicleInDatabase(Player player, double health) { + VehicleProperties v = this.getVehicleProperties(); + this.health = health; + if (v != null) { + ServerUtil.runTaskAsync(() -> ViceUserDAO.updateVehicles(player.getUniqueId(), v, this.isStolen() ? 0 : this.health)); +// Core.sql.updateAsyncLater("update " + Core.name() + " set `" + v.getIdentifier().toLowerCase() + ":info`='" + (this.isStolen() ? 0 : this.health) + "' where uuid='" + player.getUniqueId() + "';"); + } + } + + public boolean onMap() { + return this.getEntity() != null; + } + + public void call(Player player, User user, ViceUser viceUser) { + this.teleport(player, user, viceUser, false); + } + + public void sendAway(Player player, User user, ViceUser viceUser) { + this.teleport(player, user, viceUser, true); + } + + public void teleport(Player player, User user, ViceUser viceUser, boolean sendAway) { + ViceUtils.giveGameItems(player); + UUID uuid = player.getUniqueId(); + if (viceUser.getVehicleTaskId() != -1) + Bukkit.getScheduler().cancelTask(viceUser.getVehicleTaskId()); + if (viceUser.isInCombat()) { + player.sendMessage(Lang.COMBATTAG.f("&7You can't " + (sendAway ? "send away" : "call") + " your vehicle in combat!")); + return; + } + if (user.isInTutorial()) return; + if (!sendAway && Objects.equals("spawn", player.getWorld().getName())) { + player.sendMessage(Lang.VEHICLES.f("&7You can't call vehicles to spawn!")); + return; + } + if (viceUser.isArrested()) { + player.sendMessage(Lang.JAIL.f("&7You can't " + (sendAway ? "send away" : "call") + " your vehicle in jail!")); + return; + } + if (this.isDestroyed()) { + player.sendMessage(Lang.VEHICLES.f("&7Your " + this.getDisplayName() + "&7 was destroyed, call the mechanic to fix it first!")); + return; + } + if (sendAway && !this.onMap()) { + player.sendMessage(Lang.VEHICLES.f("&7Your vehicle can not be sent away!")); + return; + } + if (this.stolen) { + player.sendMessage(Lang.VEHICLES.f("&7Your " + this.getDisplayName() + "&7 was stolen!")); + return; + } + if (!viceUser.hasMoney(200)) { + player.sendMessage(Lang.VEHICLES.f("&7You can't afford to pay &c$&l200&7 for driver!")); + return; + } + player.sendMessage(Lang.VEHICLES.f("&7A driver is coming to " + (sendAway ? "pick up" : "drop off") + " your " + this.getDisplayName() + "&7!")); + viceUser.setVehicleTimer(ViceUtils.getWarpDelay(user.getUserRank())); + viceUser.setBooleanToStorage(BooleanStorageType.SEND_AWAY, sendAway); + viceUser.setVehicleTaskId(new BukkitRunnable() { + @Override + public void run() { + Player player = Bukkit.getPlayer(uuid); + if (player == null) { + this.cancel(); + return; + } + ViceUser viceUser = Vice.getUserManager().getLoadedUser(uuid); + int timer = viceUser.getVehicleTimer(); + boolean sendAway = viceUser.getBooleanFromStorage(BooleanStorageType.SEND_AWAY); + PersonalVehicle vehicle = viceUser.getPersonalVehicle(); + + if (timer == 15 || timer == 10 || (timer <= 5 && timer > 0)) { + player.sendMessage(Lang.VEHICLES.f("&7Your vehicle is " + (sendAway ? "being picked up" : "arriving") + " in " + timer + " &7second" + + (timer == 1 ? "" : "s") + '!')); + if (timer == 1) + player.playSound(player.getLocation(), Sound.BLOCK_LAVA_EXTINGUISH, 0.5F, 1); + else + player.playSound(player.getLocation(), Sound.UI_BUTTON_CLICK, 4.0F / timer, 2); + } + if (timer == 0) { + if (vehicle == null) { + viceUser.cancelVehicleTeleport(); + player.sendMessage(Lang.VEHICLES.f("&7You have no vehicle to teleport!")); + return; + } + if (viceUser.isInCombat()) { + viceUser.cancelVehicleTeleport(); + player.sendMessage(Lang.COMBATTAG.f("&7You can't " + (sendAway ? "send away" : "call") + " your vehicle in combat!")); + return; + } + if (user.isInTutorial()) return; + if (viceUser.isArrested()) { + viceUser.cancelVehicleTeleport(); + player.sendMessage(Lang.JAIL.f("&7You can't " + (sendAway ? "send away" : "call") + " your vehicle in jail!")); + return; + } + if(Objects.equals("spawn", player.getWorld().getName())) { + viceUser.cancelVehicleTeleport(); + player.sendMessage(Lang.JAIL.f("&7You can't " + (sendAway ? "send away" : "call") + " your vehicle in spawn!")); + return; + } + if (vehicle.isDestroyed()) { + viceUser.cancelVehicleTeleport(); + player.sendMessage(Lang.VEHICLES.f("&7Your " + vehicle.getDisplayName() + "&7 was destroyed, call the mechanic to fix it first!")); + return; + } + if (sendAway && !vehicle.onMap()) { + viceUser.cancelVehicleTeleport(); + player.sendMessage(Lang.VEHICLES.f("&7Your vehicle can not be sent away!")); + return; + } + if (vehicle.stolen) { + viceUser.cancelVehicleTeleport(); + player.sendMessage(Lang.VEHICLES.f("&7Your " + vehicle.getDisplayName() + "&7 was stolen!")); + return; + } + if (!viceUser.hasMoney(200)) { + viceUser.cancelVehicleTeleport(); + player.sendMessage(Lang.VEHICLES.f("&7You can't afford to pay &c$&l200&7 for driver!")); + return; + } + TPEvent e = new TPEvent(player, player, + sendAway ? TPEvent.TPType.VEHICLE_SEND_AWAY : TPEvent.TPType.VEHICLE_CALL).call(); + if (e.isCancelled()) { + viceUser.cancelVehicleTeleport(); + player.sendMessage(Lang.VEHICLES.f(e.getCancelMessage())); + return; + } + PersonalVehicle next = viceUser.getNextVehicle(); + viceUser.cancelVehicleTeleport(); + if (sendAway) { + if (!vehicle.sendAway(player, true)) return; + } else if (!vehicle.teleport(player, true)) return; + viceUser.takeMoney(200); + player.sendMessage(Lang.MONEY_TAKE.f("200")); + ViceUtils.updateBoard(player, Core.getUserManager().getLoadedUser(player.getUniqueId()), viceUser); + if (sendAway && next != null) { + viceUser.setPersonalVehicle(null); + viceUser.setNextVehicle(null); + viceUser.setPersonalVehicle(player, Core.getUserManager().getLoadedUser(uuid), next); + } + MenuManager.updateMenu(player, "vehicles"); + MenuManager.updateMenu(player, "personalvehicle"); + return; + } + viceUser.setVehicleTimer(timer - 1); + } + }.runTaskTimer(Vice.getInstance(), 20, 20).getTaskId()); + } + + private Location getLocationAround(Player player) { + VehicleProperties prop = this.getVehicleProperties(); + for (int i = 0; i < 50; i++) { + Location l = player.getLocation().add(Random.getInt(-7, 7), 0, Random.getInt(-7, 7)); + Material m = l.getBlock().getRelative(BlockFace.DOWN).getType(); + if (m == Material.AIR) + m = l.getBlock().getRelative(BlockFace.DOWN).getRelative(BlockFace.DOWN).getType(); + if (prop.getAllowedBlocks().contains(m.toString())) return l; + } + return null; + } + + private boolean teleport(Player player) { + return this.teleport(player, false); + } + + private boolean teleport(Player player, boolean sendMessage) { + ArmorStand e = this.getEntity(); + if (e == null) { + VehicleProperties v = this.getVehicleProperties(); + if (v == null) { + if (sendMessage) + player.sendMessage(Lang.VEHICLES.f("&7That vehicle does not exist!")); + return false; + } + Location loc = this.getLocationAround(player); + if (loc == null) { + player.sendMessage(Lang.VEHICLES.f("&7Your vehicle can not be placed near you!")); + return false; + } + ArmorStand wv = Vice.getWastedVehicles().spawnVehicle(v, loc, player, (this.health > v.getMaxHealth() || this.health < 0) ? v.getMaxHealth() : this.health); + this.entityUUID = wv.getUniqueId(); + if (sendMessage) + player.sendMessage(Lang.VEHICLES.f("&7The driver dropped off your vehicle!")); + return true; + } + if (this.stolen) { + if (sendMessage) + player.sendMessage(Lang.VEHICLES.f("&7Your " + this.getDisplayName() + "&7 was stolen!")); + return false; + } + Location loc = this.getLocationAround(player); + if (loc == null) { + player.sendMessage(Lang.VEHICLES.f("&7Your vehicle can not be placed near you!")); + return false; + } + e.teleport(loc); + if (sendMessage) + player.sendMessage(Lang.VEHICLES.f("&7The driver dropped off your vehicle!")); + return true; + } + + private boolean sendAway(Player player) { + return this.sendAway(player, false); + } + + private boolean sendAway(Player player, boolean sendMessage) { + ArmorStand e = this.getEntity(); + if (this.isDestroyed()) { + if (sendMessage) + player.sendMessage(Lang.VEHICLES.f("&7Your " + this.getDisplayName() + "&7 is destroyed!")); + return false; + } + if (e == null) { + if (sendMessage) + player.sendMessage(Lang.VEHICLES.f("&7You can't send away your vehicle!")); + return false; + } + if (e.getPassenger() != null) { + if (sendMessage) + player.sendMessage(Lang.VEHICLES.f("&7Your vehicle is not empty!")); + return false; + } + ((WastedVehicle) e.getMetadata("WastedVehicle").get(0).value()).onDismount(e); + ((WastedVehicle) e.getMetadata("WastedVehicle").get(0).value()).getPassengers().forEach(passenger -> { + passenger.eject(); + passenger.remove(); + }); + Vice.getWastedVehicles().getEntityQueue().remove(e); + e.remove(); + this.entityUUID = null; + if (sendMessage) + player.sendMessage(Lang.VEHICLES.f("&7The driver picked up your vehicle!")); + return true; + } + + +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/Prestige.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/Prestige.java new file mode 100644 index 0000000..10a4aff --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/Prestige.java @@ -0,0 +1,27 @@ +package net.grandtheftmc.vice.users; + +/** + * Created by Timothy Lampen on 2017-08-11. + */ +public enum Prestige { + I(6000000), + II(7000000), + III(8000000), + IV(9000000), + V(10000000), + VI(11000000), + VII(12000000), + VIII(13000000), + IX(14000000), + X(15000000); + + private double cost; + + Prestige(double cost){ + this.cost = cost; + } + + public double getCost() { + return cost; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/TaxiTarget.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/TaxiTarget.java new file mode 100644 index 0000000..6dbef84 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/TaxiTarget.java @@ -0,0 +1,134 @@ +package net.grandtheftmc.vice.users; + +import net.grandtheftmc.vice.world.warps.Warp; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; + +import java.util.Objects; +import java.util.UUID; + +public class TaxiTarget { + private TargetType type; + + private UUID targetPlayer; + private UUID targetEntity; + private Location location; + private Warp warp; + + public TaxiTarget() { + this.type = TargetType.NONE; + } + + public TaxiTarget(Player player) { + this.type = TargetType.PLAYER; + this.targetPlayer = player.getUniqueId(); + } + + public TaxiTarget(Entity entity) { + this.type = TargetType.ENTITY; + this.targetEntity = entity.getUniqueId(); + } + + public TaxiTarget(Location position) { + this.type = TargetType.LOCATION; + this.location = position; + } + + public TaxiTarget(Warp warp) { + this.type = TargetType.WARP; + this.warp = warp; + } + + public TargetType getType() { + return this.type; + } + + public void setType(TargetType type) { + this.type = type; + } + + public UUID getTargetPlayerUUID() { + return this.targetPlayer; + } + + public Player getTargetPlayer() { + if (this.targetPlayer == null) + return null; + return Bukkit.getPlayer(this.targetPlayer); + } + + public void setTargetPlayer(UUID targetPlayer) { + this.targetPlayer = targetPlayer; + this.type = TargetType.PLAYER; + } + + public UUID getTargetEntityUUID() { + return this.targetEntity; + } + + public Entity getTargetEntity() { + if (this.targetEntity == null) + return null; + for (World w : Bukkit.getWorlds()) + for (Entity e : w.getEntities()) + if (Objects.equals(e.getUniqueId(), this.targetEntity)) + return e; + this.targetEntity = null; + return null; + } + + public void setTargetEntity(UUID targetEntity) { + this.targetEntity = targetEntity; + this.type = TargetType.ENTITY; + } + + public void setTargetEntity(Entity targetEntity) { + this.targetEntity = targetEntity == null ? null : targetEntity.getUniqueId(); + this.type = TargetType.ENTITY; + } + + public Location getLocation() { + return this.location; + } + + public void setLocation(Location location) { + this.location = location; + } + + public Warp getWarp() { + return this.warp; + } + + public void setWarp(Warp w) { + this.warp = w; + } + + public Location getExactLocation() { + switch (this.type) { + case LOCATION: + return this.location; + case ENTITY: + Entity e = this.getTargetEntity(); + return e == null ? null : e.getLocation(); + case PLAYER: + Player p = this.getTargetPlayer(); + return p == null ? null : p.getLocation(); + case WARP: + return this.warp == null ? null : this.warp.getLocation(); + default: + return null; + } + } + + public enum TargetType { + NONE, + PLAYER, + ENTITY, + LOCATION, + WARP + } + +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/ViceRank.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/ViceRank.java new file mode 100644 index 0000000..6980cb7 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/ViceRank.java @@ -0,0 +1,110 @@ +package net.grandtheftmc.vice.users; + +import net.grandtheftmc.core.util.Utils; +import org.bukkit.Material; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Objects; + +public enum ViceRank { + + JUNKIE(0, "&7", Material.CHEST), // 1 sethome + FALCON(25000, "&e", Material.FEATHER), // 1 auction item + THUG(100000, "&e", Material.STICK,"essentials.workbench"), // 2 auction items, /workbench + DEALER(250000, "&e", Material.SUGAR), + GROWER(500000, "&e", Material.SEEDS), //2 sethomes, create faction + SMUGGLER(1000000, "&e", Material.CHEST), + CHEMIST(2500000, "&e", Material.BREWING_STAND_ITEM), // 3 auction items + DRUGLORD(5000000, "&e", Material.NETHER_STAR), // 4 auction items + KINGPIN(10000000, "&e", Material.CHORUS_FRUIT_POPPED),// 3 sethomes, + GODFATHER(25000000, "&e", Material.RED_ROSE, "essentials.enderchest"); // 5 auction items + + private final int price; + private final String color; + private final List<String> perms; + private final Material material; + + ViceRank(int price, String color, Material material, String... perms) { + this.price = price; + this.color = color; + this.perms = Arrays.asList(perms); + this.material = material; + } + + public List<String> getAllPerms() { + List<String> permissions = new ArrayList<>(); + for (ViceRank c : ViceRank.values()) { + permissions.addAll(c.perms); + if (c == this) + return permissions; + } + return permissions; + } + + private List<String> getPerms() { + return this.perms; + } + + public int getPrice() { + return this.price; + } + + public String getName() { + return this.toString(); + } + + public String getColor() { + return this.color; + } + + public String getColoredName() { + return Utils.f(this.color + this.getName() + "&r"); + } + + public String getColoredNameBold() { + return Utils.f(this.color + "&l" + this.getName() + "&r"); + } + + public ViceRank getNext() { + String rankName = this.getName(); + if (this == GODFATHER) return null; + int go = 0; + + ViceRank rank = null; + for (ViceRank r : ViceRank.values()) + if (go == 0) { + if (Objects.equals(r.getName(), rankName)) { + go = 1; + } + } else if (go == 1) { + rank = r; + break; + } + return rank; + } + + public static ViceRank fromString(String string) { + return Arrays.stream(ViceRank.values()).filter(uc -> uc.getName().equalsIgnoreCase(string)).findFirst().orElse(ViceRank.JUNKIE); + } + + public Material getMaterial() { + return this.material; + } + + public static ViceRank getRankOrNull(String name) { + if (name == null) + return null; + return Arrays.stream(ViceRank.values()).filter(r -> r.getName().equalsIgnoreCase(name)).findFirst().orElse(null); + } + + public boolean isHigherThan(ViceRank rank) { + for (ViceRank r : ViceRank.values()) + if (r == this) + return false; + else if (r == rank) + return true; + return false; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/ViceUser.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/ViceUser.java new file mode 100644 index 0000000..8218c7a --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/ViceUser.java @@ -0,0 +1,1203 @@ +package net.grandtheftmc.vice.users; + +import com.j0ach1mmall3.jlib.player.JLibPlayer; +import com.j0ach1mmall3.wastedguns.api.events.ranged.AmmoUpdateEvent; +import com.j0ach1mmall3.wastedvehicles.api.VehicleProperties; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.database.BaseDatabase; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.core.util.State; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.guns.weapon.Weapon; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.core.nametags.NametagManager; +import net.grandtheftmc.core.users.Pref; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.ViceUtils; +import net.grandtheftmc.vice.items.AmmoType; +import net.grandtheftmc.vice.items.ArmorUpgrade; +import net.grandtheftmc.vice.items.GameItem; +import net.grandtheftmc.vice.items.Kit; +import net.grandtheftmc.vice.users.storage.BooleanStorageType; +import net.grandtheftmc.vice.users.storage.IntStorageType; +import net.grandtheftmc.vice.users.storage.LongStorageType; +import net.grandtheftmc.vice.weapon.skins.WeaponSkinDAO; +import net.md_5.bungee.api.chat.ClickEvent; +import net.md_5.bungee.api.chat.ComponentBuilder; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.entity.Villager; +import org.bukkit.inventory.ItemStack; +import org.bukkit.scheduler.BukkitRunnable; + +import java.sql.Blob; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.*; +import java.util.logging.Level; +import java.util.stream.Collectors; + +public class ViceUser { + + protected final UUID uuid; + protected final HashMap<AmmoType, Integer> ammo = new HashMap<>(); + private final HashMap<String, Location> homes = new HashMap<>(); + protected final List<PersonalVehicle> vehicles = new ArrayList<>(); + private final HashMap<BooleanStorageType, Boolean> booleanStorage = new HashMap<>(); + private final HashMap<LongStorageType, Long> longStorage = new HashMap<>(); + private final HashMap<IntStorageType, Integer> intStorage = new HashMap<>(); + protected final HashMap<CheatCode, CheatCodeState> cheatCodes = new HashMap<>(); + + protected ViceRank rank = ViceRank.JUNKIE; + protected CopRank copRank = null; + protected long lastCopSalary = 0l; + protected int kills = 0; + protected int deaths = 0; + protected double money = 0; + protected int killStreak = 0; + protected int bonds = 0; + protected ItemStack[] backpackContents = null; + protected HashMap<String, Long> kitExpiries = new HashMap<>(); + protected Long playtime = 0L; + private Long jointime; + private PersonalVehicle personalVehicle; + private int vehicleTaskId = -1; + private int vehicleTimer; + private PersonalVehicle nextVehicle; + private String actionVehicle; + private int taxiTaskId = -1; + private TaxiTarget taxiTarget; + private int taxiPrice; + private int taxiTimer; + private UUID tpaRequestUUID; + private UUID tpaRequestSentUUID; + private long lastTpaRequest = -1; + private long lastTeleport = -1; + private double bankTransferring = -1; + protected int jailTimer; + protected UUID jailCop; + protected String jailCopName; + private double bribe; + private long lastBackupRequest; + private ArmorUpgrade buyingArmorUpgrade; + private long lastCopSpawn; + private long lastTag = -1; + private long lastJetpackCancel; + private long lastRTP; + private Villager changingJob; + protected Map<Short, List<Short>> unlockedWeaponSkins = new HashMap<>(); + protected Map<Short, Short> equippedWeaponSkins = new HashMap<>(); + + public ViceUser(UUID uuid) { + this.uuid = uuid; + this.load(); + } + + public UUID getUUID() { + return this.uuid; + } + + public void dataCheck(String name, UserRank rank) { +// MySQL sql = Core.sql; +// sql.update("insert into " + Core.name() + "(uuid,name,money) values('" + this.uuid + "','" + name +// + "','5000') on duplicate key update name='" + name + "';"); +// sql.update("update " + Core.name() + " set name='ERROR' where name='" + name + "' and uuid!='" + this.uuid + "';"); + + ViceUserDAO.insertViceUser(this, name); + ViceUserDAO.insertViceUser(this, name); + } + + public boolean updateDataFromDb() { +// MySQL sql = Core.sql; + boolean b = ViceUserDAO.getGeneralViceUser(this); + +// try (ResultSet rs = sql.query("select * from " + Core.name() + " where uuid='" + this.uuid + "' LIMIT 1;")) { +// if (rs.next()) { +// this.rank = ViceRank.fromString(rs.getString("rank")); +// this.copRank = CopRank.getRankOrNull(rs.getString("copRank")); +// this.lastCopSalary = rs.getLong("lastCopSalary"); +// this.kills = rs.getInt("kills"); +// this.deaths = rs.getInt("deaths"); +// this.money = rs.getDouble("money"); +// this.killStreak = rs.getInt("killStreak"); +// this.bonds = rs.getInt("bonds"); +// this.backpackContents = ViceUtils.fromBase64(rs.getString("backpackContents")); +// this.kitExpiries = new HashMap<>(); +// this.jailTimer = rs.getInt("jailTimer"); +// try { +// this.jailCop = rs.getString("jailCop") == null ? null : UUID.fromString(rs.getString("jailCop")); +// } catch (Exception ignored) { +// } +// this.playtime = rs.getLong("playtime"); +// this.jailCopName = rs.getString("jailCopName"); +// String s = rs.getString("kitExpiries"); +// this.kitExpiries = new HashMap<>(); +// if (s != null) +// try { +// String[] expiries = s.split(","); +// for (String e : expiries) { +// String[] a = e.split(":"); +// String kit = a[0]; +// Kit k = Vice.getItemManager().getKit(kit); +// if (kit == null || a.length < 2) +// continue; +// long expiry; +// try { +// expiry = Long.parseLong(a[1]); +// } catch (NumberFormatException ex) { +// continue; +// } +// if (expiry > System.currentTimeMillis()) { +// this.kitExpiries.put(k.getName().toLowerCase(), expiry); +// } +// } +// +// } catch (Exception e) { +// Vice.getInstance().getLogger().log(Level.ALL, "Error while loading kitExpiries for player " + rs.getString("name")); +// e.printStackTrace(); +// } +// for (AmmoType type : AmmoType.getTypes()) +// if (!type.isInInventory()) +// this.ammo.put(type, rs.getInt(type.name().toLowerCase())); +// for (VehicleProperties properties : Vice.getWastedVehicles().getBabies().getVehicleProperties()) { +// if (rs.getBoolean(properties.getIdentifier().toLowerCase())) { +// PersonalVehicle v = new PersonalVehicle(properties.getIdentifier()); +// this.vehicles.add(v); +// String st = rs.getString(properties.getIdentifier().toLowerCase() + ":info"); +// if (st == null) continue; +// String[] a = st.split(":"); +// if (a == null | a.length == 0) continue; +// v.setHealth(Double.parseDouble(a[0])); +// } +// } +// this.loadCheatCodes(rs); +// } else +// b = false; +// rs.close(); +// } catch (SQLException e) { +// e.printStackTrace(); +// b = false; +// } + this.setBooleanToStorage(BooleanStorageType.HAS_UPDATED, b); + return b; + } + + public void save(){ + this.saveHomes(); + // this.saveCheatCodes(); + } + + public HashMap<CheatCode, CheatCodeState> getCheatCodes() { + return cheatCodes; + } + + public void load(){ + this.loadHomes(); + } + +// private void loadCheatCodes(ResultSet rs) throws SQLException { +// +// if(rs.getBlob("cheatcodes")!=null) { +// Blob b = rs.getBlob("cheatcodes"); +// String cheatCodesBlob = new String(b.getBytes(1, (int) b.length())); +// for (String serializedCheatCode : cheatCodesBlob.split("-")) { +// String[] split = serializedCheatCode.split("#"); +// this.cheatCodes.put(CheatCode.valueOf(split[0]), new CheatCodeState(State.valueOf(split[1]), Boolean.valueOf(split[2]))); +// } +// } +// +// User user = Core.getUserManager().getLoadedUser(this.uuid); +// for(CheatCode code : CheatCode.values()) { +// if (user.getUserRank() == code.getMinmumRank() || user.getUserRank().isHigherThan(code.getMinmumRank())) { +// if (!this.cheatCodes.containsKey(code) || this.cheatCodes.get(code).getState() == State.LOCKED) { +// this.cheatCodes.put(code, new CheatCodeState(code.getDefaultState(), false)); +// } +// } +// else { +// if(this.cheatCodes.containsKey(code) && !this.cheatCodes.get(code).isPurchased()) { +// this.cheatCodes.put(code, new CheatCodeState(State.LOCKED, false)); +// } +// } +// } +// for(CheatCode code : CheatCode.values()) +// if(!this.cheatCodes.containsKey(code)) +// this.cheatCodes.put(code, new CheatCodeState(State.LOCKED, false)); +// } + + private void saveHomes(){ + YamlConfiguration config = Vice.getSettings().getHomesConfig(); + config.set(this.uuid.toString(), null); + for(Map.Entry<String, Location> e : this.homes.entrySet()) + config.set(this.uuid + "." + e.getKey(), Utils.blockLocationToString(e.getValue())); + Utils.saveConfig(config, "homes"); + } + + private void loadHomes(){ + YamlConfiguration config = Vice.getSettings().getHomesConfig(); + if(!config.contains(this.uuid.toString())) + return; + for(String id : config.getConfigurationSection(this.uuid.toString()).getKeys(false)){ + this.homes.put(id, Utils.blockLocationFromString(config.getString(this.uuid + "." + id))); + } + } + + private void saveBackpackContents() { +// Bukkit.getScheduler().runTaskAsynchronously(Vice.getInstance(), () -> { +// try (PreparedStatement stmt = Core.sql.prepareStatement("update " + Core.name() + " set backpackContents=? where uuid=?;")) { +// stmt.setString(1, this.backpackContents == null ? null : ViceUtils.toBase64(this.backpackContents)); +// stmt.setString(2, this.uuid.toString()); +// stmt.execute(); +// stmt.close(); +// } catch (SQLException e) { +// e.printStackTrace(); +// } +// +// }); + ServerUtil.runTaskAsync(() -> ViceUserDAO.setBackpackContents(this.uuid, this.backpackContents)); + } + + public ViceRank getRank() { + return this.rank; + } + + public CopRank getCopRank() { + return this.copRank; + } + + public boolean isCop() { + return this.copRank != null; + } + + public boolean isRank(ViceRank rank) { + return !(rank == null || this.rank == null) && (this.rank == rank || this.rank.isHigherThan(rank)); + } + + public boolean isCopRank(CopRank copRank) { + return !(copRank == null || this.copRank == null) && (this.copRank == copRank || this.copRank.isHigherThan(copRank)); + } + + public void setRank(ViceRank r, Player player, User u) { + this.rank = r; +// Core.sql.updateAsyncLater( +// "update " + Core.name() + " set rank='" + r.getName() + "' where uuid='" + this.uuid + "';"); + ServerUtil.runTaskAsync(() -> ViceUserDAO.setRank(this.uuid, r)); + NametagManager.updateNametag(Bukkit.getPlayer(this.uuid)); + u.setPerms(player); + } + + public void setCopRank(CopRank r, Player player, User u) { + this.copRank = r; +// Core.sql.updateAsyncLater( +// "update " + Core.name() + " set copRank='" + (r == null ? null : r.getName()) + "' where uuid='" + this.uuid + "';"); + ServerUtil.runTaskAsync(() -> ViceUserDAO.setCopRank(this, r)); + NametagManager.updateNametag(Bukkit.getPlayer(this.uuid)); + u.setPerms(player); + } + + public long getLastCopSalary() { + return this.lastCopSalary; + } + + public void setLastCopSalary(long lastCopSalary) { + this.lastCopSalary = lastCopSalary; +// Core.sql.updateAsyncLater( +// "update " + Core.name() + " set lastCopSalary=" + this.lastCopSalary + " where uuid='" + this.uuid + "';"); + ServerUtil.runTaskAsync(() -> ViceUserDAO.setLastCopSalary(this, lastCopSalary)); + } + + public void rankup(Player player, User u) { + ViceRank nextRank = this.rank.getNext(); + if (nextRank == null) { + player.sendMessage(Utils.f(Lang.RANKUP + "&7You can't rank up any more!")); + return; + } + int price = nextRank.getPrice(); + if (!this.hasMoney(price)) { + player.sendMessage(Utils.f(Lang.RANKUP + "&7You don't have the &c$&l" + price + "&7 required to rank up!")); + return; + } + this.takeMoney(price); + this.setRank(nextRank, player, u); + ViceUtils.updateBoard(player, u, this); + Utils.broadcastExcept(player, Lang.RANKUP + "&7" + u.getColoredName(player) + "&7 ranked up to " + + nextRank.getColoredNameBold() + "&7!"); + player.sendMessage(Lang.MONEY_TAKE.toString() + price); + player.sendMessage(Utils.f(Lang.RANKUP + "&7You ranked up to " + nextRank.getColoredNameBold() + "&7!")); + } + + public int getKills() { + return this.kills; + } + + public void setKills(int i) { + this.kills = i; +// Core.sql.updateAsyncLater( +// "update " + Core.name() + " set kills=" + i + " where uuid='" + this.uuid + "';"); + ServerUtil.runTaskAsync(() -> ViceUserDAO.setKills(this, i)); + } + + public void addKills(int i) { + this.kills += i; +// Core.sql.updateAsyncLater( +// "update " + Core.name() + " set kills=kills+" + i + " where uuid='" + this.uuid + "';"); + ServerUtil.runTaskAsync(() -> ViceUserDAO.setKills(this, this.kills)); + } + + public int getDeaths() { + return this.deaths; + } + + public void setDeaths(int i) { + this.deaths = i; +// Core.sql.updateAsyncLater( +// "update " + Core.name() + " set deaths=" + i + " where uuid='" + this.uuid + "';"); + ServerUtil.runTaskAsync(() -> ViceUserDAO.setDeaths(this, i)); + } + + public void addDeaths(int i) { + this.deaths += i; +// Core.sql.updateAsyncLater( +// "update " + Core.name() + " set deaths=deaths+" + i + " where uuid='" + this.uuid + "';"); + ServerUtil.runTaskAsync(() -> ViceUserDAO.setDeaths(this, this.deaths)); + } + + public double getMoney() { + return this.money; + } + + public void setMoney(double i) { + this.money = i; + if(Bukkit.getPlayer(this.uuid)!=null) + ViceUtils.updateBoard(Bukkit.getPlayer(this.uuid), this); +// Core.sql.updateAsyncLater( +// "update " + Core.name() + " set money=" + i + " where uuid='" + this.uuid + "';"); + ServerUtil.runTaskAsync(() -> ViceUserDAO.setMoney(this.uuid, i)); + } + + public void addMoney(double i) { + this.money += i; + if(Bukkit.getPlayer(this.uuid)!=null) + ViceUtils.updateBoard(Bukkit.getPlayer(this.uuid), this); +// Core.sql.updateAsyncLater( +// "update " + Core.name() + " set money=money+" + i + " where uuid='" + this.uuid + "';"); + ServerUtil.runTaskAsync(() -> ViceUserDAO.setMoney(this.uuid, this.money)); + } + + public void takeMoney(double i) { + this.money -= i; +// Core.sql.updateAsyncLater( +// "update " + Core.name() + " set money=money-" + i + " where uuid='" + this.uuid + "';"); + if(Bukkit.getPlayer(this.uuid)!=null) + ViceUtils.updateBoard(Bukkit.getPlayer(this.uuid), this); + ServerUtil.runTaskAsync(() -> ViceUserDAO.setMoney(this.uuid, this.money)); + } + + public boolean hasMoney(double i) { + return this.money >= i; + } + + public Long getPlaytime() {// + return this.playtime; + } + + public void setPlaytime(Long playtime) { + this.playtime = playtime; +// Core.sql.updateAsyncLater( +// "update " + Core.name() + " set playtime=" + this.playtime + " where uuid='" + this.uuid + "';"); + ServerUtil.runTaskAsync(() -> ViceUserDAO.setPlaytime(this, playtime)); + } + + public Long getJoinTime() { + return this.jointime; + } + + public void setJointime(Long jointime) { + this.jointime = jointime; + } + + public int getKillStreak() { + return this.killStreak; + } + + public void setKillStreak(int i) { + this.killStreak = i; +// Core.sql.updateAsyncLater( +// "update " + Core.name() + " set killStreak=" + i + " where uuid='" + this.uuid + "';"); + ServerUtil.runTaskAsync(() -> ViceUserDAO.setKillStreak(this, i)); + } + + public void addKillStreak(int i) { + this.killStreak += i; +// Core.sql.updateAsyncLater( +// "update " + Core.name() + " set killStreak=killStreak+" + i + " where uuid='" + this.uuid + "';"); + ServerUtil.runTaskAsync(() -> ViceUserDAO.setKillStreak(this, this.killStreak)); + } + + public void takeKillStreak(int i) { + this.killStreak -= i; +// Core.sql.updateAsyncLater( +// "update " + Core.name() + " set killStreak=killStreak-" + i + " where uuid='" + this.uuid + "';"); + ServerUtil.runTaskAsync(() -> ViceUserDAO.setKillStreak(this, this.killStreak)); + } + + public void giveBonds(int i) { + this.bonds += i; +// Core.sql.update( +// "update " + Core.name() + " set bonds=bonds+" + i + " where uuid='" + this.uuid + "';"); + ServerUtil.runTaskAsync(() -> ViceUserDAO.setBonds(this.uuid, this.bonds)); + } + + public void takeBonds(int i) { + this.bonds -= i; +// Core.sql.update( +// "update " + Core.name() + " set bonds=bonds-" + i + " where uuid='" + this.uuid + "';"); + ServerUtil.runTaskAsync(() -> ViceUserDAO.setBonds(this.uuid, this.bonds)); + } + + public int getBonds() { + return this.bonds; + } + + public void setBonds(int i) { + this.bonds = i; +// Core.sql.update( +// "update " + Core.name() + " set bonds=" + i + " where uuid='" + this.uuid + "';"); + ServerUtil.runTaskAsync(() -> ViceUserDAO.setBonds(this.uuid, this.bonds)); + } + + public boolean hasbonds(int i) { + return this.bonds >= i; + } + + public boolean isInCombat() { + return (this.lastTag + 20000) > System.currentTimeMillis(); + } + + public Long getLastTag() { + return this.lastTag; + } + + public void setLastTag(long i) { + this.lastTag = i; + } + + public boolean isUsingTaxi() { + return this.taxiTarget != null; + } + + public TaxiTarget getTaxiTarget() { + return this.taxiTarget; + } + + public void setTaxiTarget(TaxiTarget t) { + this.taxiTarget = t; + } + + public void unsetTaxiTarget() { + this.taxiTarget = null; + this.taxiTaskId = -1; + this.taxiPrice = 0; + this.taxiTimer = 0; + } + + public int getTaxiPrice() { + return this.taxiPrice; + } + + public void setTaxiPrice(int i) { + this.taxiPrice = i; + } + + public int getTaxiTaskId() { + return this.taxiTaskId; + } + + public void setTaxiTaskId(int i) { + this.taxiTaskId = i; + } + + public int getTaxiTimer() { + return this.taxiTimer; + } + + public void setTaxiTimer(int i) { + this.taxiTimer = i; + } + + public UUID getTpaRequestUUID() { + return this.tpaRequestUUID; + } + + public void setTpaRequestUUID(UUID tpaRequestUUID) { + this.tpaRequestUUID = tpaRequestUUID; + this.lastTpaRequest = tpaRequestUUID == null ? -1 : System.currentTimeMillis(); + } + + public UUID getTpaRequestSentUUID() { + return this.tpaRequestSentUUID; + } + + public void setTpaRequestSentUUID(UUID uuid) { + this.tpaRequestSentUUID = uuid; + } + + public Long getLastTpaRequest() { + return this.lastTpaRequest; + } + + public void setLastTpaRequest(Long lastTpaRequest) { + this.lastTpaRequest = lastTpaRequest; + } + + public boolean hasTpaRequest() { + return !(this.lastTpaRequest > 0 && this.lastTpaRequest + 60000 < System.currentTimeMillis()); + } + + + public void unsetTpaRequests() { + this.lastTpaRequest = -1L; + this.tpaRequestSentUUID = null; + this.tpaRequestUUID = null; + setBooleanToStorage(BooleanStorageType.TPA_HERE, false); + } + + public ItemStack[] getBackpackContents() { + return this.backpackContents; + } + + public void setBackpackContents(ItemStack[] backpackContents) { + this.backpackContents = backpackContents; + this.saveBackpackContents(); + } + + public boolean canUseKit(String name) { + return !(this.kitExpiries.containsKey(name.toLowerCase()) && this.kitExpiries.get(name.toLowerCase()) > System.currentTimeMillis()); + } + + public long getKitExpiry(String name) { + return this.kitExpiries.containsKey(name.toLowerCase()) ? this.kitExpiries.get(name.toLowerCase()) : -1; + } + + public void setKitExpiry(String name, int delay) { // delay is IN SECONDS + this.kitExpiries.put(name.toLowerCase(), System.currentTimeMillis() + (delay * 1000)); + this.updateExpiries(); + } + + public Map<String, Long> getKitExpiries() { + return this.kitExpiries; + } + + public String getKitExpiriesString() { + StringBuilder expiries = new StringBuilder(); + for (Map.Entry<String, Long> entry : this.kitExpiries.entrySet()) { + Long l = entry.getValue(); + if (l > System.currentTimeMillis()) + expiries.append(entry.getKey()).append(':').append(l).append(','); + } + return expiries.toString().endsWith(",") ? expiries.substring(0, expiries.length() - 1) : expiries.toString(); + } + + public void updateExpiries() { +// Core.sql.updateAsyncLater( +// "update " + Core.name() + " set kitExpiries='" + this.getKitExpiriesString() + "' where uuid='" + this.uuid + "';"); + ServerUtil.runTaskAsync(() -> ViceUserDAO.updateKitExpiries(this.uuid, this.getKitExpiriesString())); + } + + public long getLastCopSpawn() { + return this.lastCopSpawn; + } + + public void setLastCopSpawn(long lastCopSpawn) { + this.lastCopSpawn = lastCopSpawn; + } + + public double getKDR() { + return Utils.round(this.deaths == 0 ? this.kills : this.kills / (double) this.deaths); + } + + public HashMap<AmmoType, Integer> getAmmo() { + return this.ammo; + } + + public int getAmmoInInventory(Player player, AmmoType type) { + GameItem gameItem = type.getGameItem(); + if (gameItem == null) return 0; + if (gameItem.getItem() == null) return 0; + + if (player == null) return 0; + if (player.getInventory() == null) return 0; + if (player.getInventory().getContents() == null || player.getInventory().getContents().length == 0) return 0; + + return Arrays.stream(player.getInventory().getContents()).filter(item -> item != null && item.isSimilar(gameItem.getItem())).mapToInt(ItemStack::getAmount).sum(); + } + + public int getAmmo(AmmoType type) { + return type.isInInventory() ? this.getAmmoInInventory(Bukkit.getPlayer(this.uuid), type) : this.ammo.getOrDefault(type, 0); + } + + public void setAmmoInInventory(Player player, AmmoType type, int i) { + int ammo = this.getAmmoInInventory(Bukkit.getPlayer(this.uuid), type); + if (ammo > i) + this.removeAmmoFromInventory(player, type, ammo - i); + else if (ammo < i) + this.addAmmoToInventory(player, type, i - ammo); + this.updateAmmo(); + } + + public void setAmmo(AmmoType type, int i) { + if (type.isInInventory()) { + this.setAmmoInInventory(Bukkit.getPlayer(this.uuid), type, i); + return; + } + this.ammo.put(type, i); +// Core.sql.updateAsyncLater( +// "update " + Core.name() + " set " + type.name() + '=' + i + " where uuid='" + this.uuid + "';"); + ServerUtil.runTaskAsync(() -> ViceUserDAO.setAmmo(this, type.name(), i)); + this.updateAmmo(); + } + + public void addAmmoToInventory(Player player, AmmoType type, int i) { + GameItem gameItem = type.getGameItem(); + if (gameItem == null) + return; + ItemStack item = gameItem.getItem(); + item.setAmount(i); + Utils.giveItems(player, item); + this.updateAmmo(); + } + + public void addAmmo(AmmoType type, int i) { + if (type.isInInventory()) { + this.addAmmoToInventory(Bukkit.getPlayer(this.uuid), type, i); + return; + } + this.ammo.put(type, this.ammo.get(type) + i); +// Core.sql.updateAsyncLater("update " + Core.name() + " set " + type.name() + '=' + type.name() + '+' + i +// + " where uuid='" + this.uuid + "';"); + ServerUtil.runTaskAsync(() -> ViceUserDAO.setAmmo(this, type.name(), this.ammo.get(type))); + this.updateAmmo(); + } + + public void removeAmmoFromInventory(Player player, AmmoType type, int i) { + GameItem gameItem = type.getGameItem(); + if (gameItem == null) + return; + Utils.takeItems(player, i, gameItem.getItem()); + this.updateAmmo(); + } + + public void removeAmmo(AmmoType type, int i) { + if (type.isInInventory()) { + this.removeAmmoFromInventory(Bukkit.getPlayer(this.uuid), type, i); + return; + } + this.ammo.put(type, this.ammo.get(type) >= i ? this.ammo.get(type) - i : 0); +// Core.sql.updateAsyncLater("update " + Core.name() + " set " + type.name() + '=' + type.name() + '-' + i +// + " where uuid='" + this.uuid + "';"); + ServerUtil.runTaskAsync(() -> ViceUserDAO.setAmmo(this, type.name(), this.ammo.get(type))); + this.updateAmmo(); + } + + public boolean hasAmmoInInventory(Player player, AmmoType type, int i) { + return this.getAmmoInInventory(player, type) >= i; + } + + public boolean hasAmmo(AmmoType type, int i) { + if (type.isInInventory()) + return this.hasAmmoInInventory(Bukkit.getPlayer(this.uuid), type, i); + return this.ammo.get(type) >= i; + } + + public void updateAmmo() { + Bukkit.getPluginManager().callEvent(new AmmoUpdateEvent(Bukkit.getPlayer(this.uuid))); + } + + public void updateAmmoLater() { + new BukkitRunnable() { + @Override + public void run() { + Bukkit.getPluginManager().callEvent(new AmmoUpdateEvent(Bukkit.getPlayer(ViceUser.this.uuid))); + } + }.runTaskLater(Vice.getInstance(), 1); + + } + + public void jail(int jailTimer, Player cop) { + this.jailTimer = jailTimer; + this.jailCop = cop.getUniqueId(); + this.jailCopName = cop.getName(); +// Core.sql.updateAsyncLater( +// "update " + Core.name() + " set jailTimer=" + this.jailTimer + ", jailCop='" + this.jailCop + "', jailCopName='" + this.jailCopName + "' where uuid='" + this.uuid + "';"); + ServerUtil.runTaskAsync(() -> ViceUserDAO.setjailed(this, this.jailTimer, this.jailCop, this.jailCopName)); + } + + public boolean isArrested() { + return this.jailTimer >= 0; + } + + public int getJailTimer() { + return this.jailTimer; + } + + public void setJailTimer(int jailTimer) { + this.jailTimer = jailTimer; +// Core.sql.updateAsyncLater( +// "update " + Core.name() + " set jailTimer=" + jailTimer + " where uuid='" + this.uuid + "';"); + ServerUtil.runTaskAsync(() -> ViceUserDAO.setJailTimer(this, jailTimer)); + } + + public UUID getJailCop() { + return this.jailCop; + } + + public void resetJail() { + this.jailTimer = -1; + this.jailCop = null; + this.jailCopName = null; + this.bribe = 0; +// Core.sql.updateAsyncLater( +// "update " + Core.name() + " set jailTimer=-1, jailCop=NULL, jailCopName=NULL where uuid='" + this.uuid + "';"); + ServerUtil.runTaskAsync(() -> ViceUserDAO.resetJail(this.uuid)); + } + + public String getJailCopName() { + return this.jailCopName; + } + + public double getBribe() { + return this.bribe; + } + + public void setBribe(double bribe) { + this.bribe = bribe; + } + + + public double getBankTransferring() { + return this.bankTransferring; + } + + public boolean isBankTransferring() { + return this.bankTransferring >= 0; + } + + public void setBankTransferring(double bankTransferring) { + this.bankTransferring = bankTransferring; + } + + public void updateTintHealth(Player player, User user) { + if (Utils.returnTrue()) return; + if (!user.getPref(Pref.TINT_HEALTH)) { + new JLibPlayer(player).setWorldborderTint(0); + return; + } + UUID uuid = player.getUniqueId(); + new BukkitRunnable() { + @Override + public void run() { + Player player = Bukkit.getPlayer(uuid); + if (player != null) + new JLibPlayer(player).setWorldborderTint(100 - (int) (player.getHealth() * 100 / player.getMaxHealth())); + } + }.runTaskLater(Vice.getInstance(), 1); + } + + public PersonalVehicle getPersonalVehicle() { + return this.personalVehicle; + } + + public void setPersonalVehicle(PersonalVehicle personalVehicle) { + this.personalVehicle = personalVehicle; + } + + public boolean hasPersonalVehicle() { + return this.personalVehicle != null; + } + + public List<PersonalVehicle> getVehicles() { + return this.vehicles; + } + + public List<VehicleProperties> getVehicleProperties() { + return this.vehicles.stream().filter(v -> v.getVehicleProperties() != null).map(PersonalVehicle::getVehicleProperties).collect(Collectors.toList()); + } + + public boolean hasVehicle(String vehicle) { + return this.vehicles.stream().anyMatch(v -> v.getVehicle().equalsIgnoreCase(vehicle)); + } + + public void giveVehiclePerm(Player player, VehicleProperties vehicle) { +// Core.sql.updateAsyncLater( +// "update " + Core.name() + " set `" + vehicle.getIdentifier().toLowerCase() + "`=true where uuid='" + this.uuid + "';"); + ServerUtil.runTaskAsync(() -> ViceUserDAO.setVehiclePerm(this.uuid, vehicle, true)); + if (!this.hasVehicle(vehicle.getIdentifier())) + this.vehicles.add(new PersonalVehicle(vehicle.getIdentifier())); + } + + public void removeVehiclePerm(Player player, VehicleProperties vehicle) { +// Core.sql.updateAsyncLater( +// "update " + Core.name() + " set `" + vehicle.getIdentifier().toLowerCase() + "`=false where uuid='" + this.uuid + "';"); + ServerUtil.runTaskAsync(() -> ViceUserDAO.setVehiclePerm(this.uuid, vehicle, false)); + if (this.personalVehicle != null && this.personalVehicle.getVehicle().equalsIgnoreCase(vehicle.getIdentifier())) + this.personalVehicle = null; + new ArrayList<>(this.vehicles).stream().filter(v -> v.getVehicle().equalsIgnoreCase(vehicle.getIdentifier())).forEach(this.vehicles::remove); + } + + public PersonalVehicle getPersonalVehicle(String s) { + if (this.personalVehicle != null && this.personalVehicle.getVehicle().equalsIgnoreCase(s)) + return this.personalVehicle; + return this.vehicles.stream().filter(v -> v.getVehicle().equalsIgnoreCase(s)).findFirst().orElse(null); + } + + public void setPersonalVehicle(Player player, User user, PersonalVehicle vehicle) { + if (this.personalVehicle != null && this.personalVehicle.onMap()) { + this.nextVehicle = vehicle; + this.personalVehicle.teleport(player, user, this, true); + return; + } + if (!this.vehicles.contains(vehicle)) { + player.sendMessage(Lang.VEHICLES.f("&7You do not own that vehicle!")); + return; + } + this.personalVehicle = vehicle; + this.nextVehicle = null; + player.sendMessage(Lang.VEHICLES.f("&7You set " + vehicle.getDisplayName() + "&7 as your personal vehicle!")); + this.personalVehicle.call(player, user, this); + } + + public boolean cancelVehicleTeleport() { + if (this.vehicleTaskId == -1) return false; + Bukkit.getScheduler().cancelTask(this.vehicleTaskId); + this.nextVehicle = null; + this.setBooleanToStorage(BooleanStorageType.SEND_AWAY, false); + this.vehicleTimer = -1; + return true; + } + + public int getVehicleTaskId() { + return this.vehicleTaskId; + } + + public void setVehicleTaskId(int vehicleTaskId) { + this.vehicleTaskId = vehicleTaskId; + } + + public int getVehicleTimer() { + return this.vehicleTimer; + } + + public void setVehicleTimer(int vehicleTimer) { + this.vehicleTimer = vehicleTimer; + } + + public PersonalVehicle getNextVehicle() { + return this.nextVehicle; + } + + public void setNextVehicle(PersonalVehicle nextVehicle) { + this.nextVehicle = nextVehicle; + } + + public String getActionVehicle() { + return this.actionVehicle; + } + + public void setActionVehicle(String actionVehicle) { + this.actionVehicle = actionVehicle; + } + + + public long getLastTeleport() { + return this.lastTeleport; + } + + public void setLastTeleport(long lastTeleport) { + this.lastTeleport = lastTeleport; + } + + public void setLastTeleport() { + this.lastTeleport = System.currentTimeMillis(); + } + + public boolean hasTeleportProtection() { + return this.lastTeleport + 10000 > System.currentTimeMillis(); + } + + public long getTimeUntilTeleportProtectionExpires() { + return this.lastTeleport + 10000 - System.currentTimeMillis(); + } + public long getLastRTP() { + return this.lastRTP; + } + + public void setLastRTP(long lastRTP) { + this.lastRTP = lastRTP; + } + + public void setLastRTP() { + this.lastRTP = System.currentTimeMillis(); + } + + public boolean canRTP() { + return this.lastRTP + 60000 < System.currentTimeMillis(); + } + + public long getTimeUntilRTP() { + return this.lastRTP + 60000 - System.currentTimeMillis(); + } + + public long getLastJetpackCancel() { + return this.lastJetpackCancel; + } + + public void setLastJetpackCancel(long lastJetpackCancel) { + this.lastJetpackCancel = lastJetpackCancel; + } + + public ArmorUpgrade getBuyingArmorUpgrade() { + return this.buyingArmorUpgrade; + } + + public void setBuyingArmorUpgrade(ArmorUpgrade buyingArmorUpgrade) { + this.buyingArmorUpgrade = buyingArmorUpgrade; + } + + public boolean hasRequestedBackup() { + return this.copRank != null && this.lastBackupRequest + 60000 > System.currentTimeMillis(); + } + + public long getTimeUntilBackupRequestExpires() { + return 60000 + this.lastBackupRequest - System.currentTimeMillis(); + } + + public void checkBackupExpiration(Player player) { + if (this.lastBackupRequest > 0) { + if (this.copRank == null) { + this.lastBackupRequest = -1; + return; + } + if (this.lastBackupRequest + 60000 < System.currentTimeMillis()) { + this.lastBackupRequest = -1; + player.spigot().sendMessage(new ComponentBuilder(Lang.COP_MODE.s()).append("Your backup request has expired! Click to extend it: ").color(net.md_5.bungee.api.ChatColor.GRAY). + append(" [ACCEPT] ").color(net.md_5.bungee.api.ChatColor.GREEN).bold(true).event(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/backup")).create()); + } + + } + } + + public void setLastBackupRequest(long l) { + this.lastBackupRequest = l; + } + + public Location getHomeLocation(String id){ + id = id.toLowerCase(); + return this.homes.getOrDefault(id, null); + } + + public void setHomeLocation(String id, Location loc){ + id = id.toLowerCase(); + this.homes.put(id, loc); + } + + public boolean removeHomeLocation(String id){ + id = id.toLowerCase(); + if(this.homes.containsKey(id)){ + this.homes.remove(id); + return true; + } + return false; + } + + public HashMap<String, Location> getHomes() { + return homes; + } + + public boolean getBooleanFromStorage(BooleanStorageType type) { + return this.booleanStorage.getOrDefault(type, type.getDefaultValue()); + } + + public CheatCodeState getCheatCodeState(CheatCode code){ + if(this.cheatCodes.containsKey(code)) + return this.cheatCodes.get(code); + this.cheatCodes.put(code, new CheatCodeState(State.LOCKED, false)); + return new CheatCodeState(State.LOCKED, false); + } + + public void setCheatCodeState(CheatCode code, CheatCodeState state){ + this.cheatCodes.put(code, state); +// Core.sql.updateAsyncLater( +// "update " + Core.name() + " set cheatcodes='" + CheatCode.seralizeCheatCodes(this.cheatCodes) + "' where uuid='" + this.uuid + "';"); + ServerUtil.runTaskAsync(() -> ViceUserDAO.setCheatCodeState(this)); + } + + + public void setBooleanToStorage(BooleanStorageType type, boolean value) { + booleanStorage.put(type, value); + } + + public void setChangingJob(Villager changingJob) { + this.changingJob = changingJob; + } + + public Villager getChangingJob() { + return changingJob; + } + + public void checkAchievements() { + // TODO Colt + /* + User user = Core.getUserManager().getLoadedUser(getUUID()); + if (!user.getUnlockedAchievements().contains(Achievement.Hobo)) user.addAchievement(Achievement.Hobo); + if (!user.getUnlockedAchievements().contains(Achievement.CRIMINAL) && + isRank(ViceRank.CRIMINAL)) user.addAchievement(Achievement.CRIMINAL); + if (!user.getUnlockedAchievements().contains(Achievement.HOMIE) && + isRank(ViceRank.HOMIE)) user.addAchievement(Achievement.HOMIE); + if (!user.getUnlockedAchievements().contains(Achievement.THUG) && + isRank(ViceRank.THUG)) user.addAchievement(Achievement.THUG); + if (!user.getUnlockedAchievements().contains(Achievement.GANGSTER) && + isRank(ViceRank.GANGSTER)) user.addAchievement(Achievement.GANGSTER); + if (!user.getUnlockedAchievements().contains(Achievement.MUGGER) && + isRank(ViceRank.MUGGER)) user.addAchievement(Achievement.MUGGER); + if (!user.getUnlockedAchievements().contains(Achievement.HUNTER) && + isRank(ViceRank.HUNTER)) user.addAchievement(Achievement.HUNTER); + if (!user.getUnlockedAchievements().contains(Achievement.DEALER) && + isRank(ViceRank.DEALER)) user.addAchievement(Achievement.DEALER); + if (!user.getUnlockedAchievements().contains(Achievement.PIMP) && + isRank(ViceRank.PIMP)) user.addAchievement(Achievement.PIMP); + if (!user.getUnlockedAchievements().contains(Achievement.MOBSTER) && + isRank(ViceRank.MOBSTER)) user.addAchievement(Achievement.MOBSTER); + if (!user.getUnlockedAchievements().contains(Achievement.GODFATHER) && + isRank(ViceRank.GODFATHER)) user.addAchievement(Achievement.GODFATHER); + if (!user.getUnlockedAchievements().contains(Achievement.Psychopath) && + getKills() >= 10000) user.addAchievement(Achievement.Psychopath); + if (!user.getUnlockedAchievements().contains(Achievement.GTM_God) && + Stats.getInstance().getHoursPlayedRaw(Bukkit.getPlayer(user.getUUID())) > 1000) + user.addAchievement(Achievement.GTM_God); + user.updateNameTag(Bukkit.getPlayer(user.getUUID())); + if (!user.getUnlockedAchievements().contains(Achievement.Witness)) { + Bukkit.getOnlinePlayers().forEach(player -> { + if (player.getUniqueId().toString().equals("0e4a6028-3d9a-4a2e-9797-eb1ddcb0aca9")) { + user.addAchievement(Achievement.Witness); + } + }); + }*/ + } + + public void lockWeaponSkin(Weapon<?> weapon, WeaponSkin skin) { + if (this.unlockedWeaponSkins.get(weapon.getUniqueIdentifier()) != null) { + this.unlockedWeaponSkins.get(weapon.getUniqueIdentifier()).remove((Object) (short) (skin.getIdentifier() - weapon.getWeaponIdentifier())); + + ServerUtil.runTaskAsync(() -> { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + WeaponSkinDAO.lockSkin(connection, this.uuid, weapon, skin); + } catch (SQLException e) { + e.printStackTrace(); + } + }); + } + } + + public void unlockWeaponSkin(Weapon<?> weapon, WeaponSkin skin) { + if (this.unlockedWeaponSkins.get(weapon.getUniqueIdentifier()) == null) { + this.unlockedWeaponSkins.put(weapon.getUniqueIdentifier(), new ArrayList<Short>()); + } + + if(!this.hasSkinUnlocked(weapon, skin)) { + this.unlockedWeaponSkins.get(weapon.getUniqueIdentifier()).add((short) (skin.getIdentifier() - weapon.getWeaponIdentifier())); + + ServerUtil.runTaskAsync(() -> { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + WeaponSkinDAO.unlockSkin(connection, this.uuid, weapon, skin); + } catch (SQLException e) { + e.printStackTrace(); + } + }); + } + } + + public void equipWeaponSkin(Weapon<?> weapon, WeaponSkin skin) { + short currentSkin = this.equippedWeaponSkins.containsKey(weapon.getUniqueIdentifier()) ? this.equippedWeaponSkins.get(weapon.getUniqueIdentifier()) : 0; + + ServerUtil.runTaskAsync(() -> { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + if(currentSkin != weapon.getWeaponIdentifier()) { + WeaponSkinDAO.disableSkin(connection, this.uuid, weapon, currentSkin); + } + + if(skin.getIdentifier() != weapon.getWeaponIdentifier()) { + WeaponSkinDAO.enableSkin(connection, this.uuid, weapon, (short) (skin.getIdentifier() - weapon.getWeaponIdentifier())); + } + } catch (SQLException e) { + e.printStackTrace(); + } + }); + + this.equippedWeaponSkins.put(weapon.getUniqueIdentifier(), (short) (skin.getIdentifier() - weapon.getWeaponIdentifier())); + } + + public boolean hasSkinUnlocked(Weapon<?> weapon, WeaponSkin skin) { + if (this.getUnlockedWeaponSkins(weapon) != null) { + for (short skinID : this.getUnlockedWeaponSkins(weapon)) { + if (skinID == (short) (skin.getIdentifier() - weapon.getWeaponIdentifier())) { + return true; + } + } + } + + return false; + } + + public List<Short> getUnlockedWeaponSkins(Weapon<?> weapon) { + return this.unlockedWeaponSkins.get(weapon.getUniqueIdentifier()); + } + + public Map<Short, List<WeaponSkin>> getUnlockedWeaponSkins() { + Map<Short, List<WeaponSkin>> skins = new HashMap<Short, List<WeaponSkin>>(); + + for (short weaponID : this.unlockedWeaponSkins.keySet()) { + Optional<Weapon<?>> weaponOpt = Vice.getWastedGuns().getWeaponManager().getWeaponFromUniqueIdentifier(weaponID); + + if (weaponOpt.isPresent()) { + Weapon<?> weapon = weaponOpt.get(); + List<WeaponSkin> skinSubArray = new ArrayList<WeaponSkin>(); + + for (short skinID : this.unlockedWeaponSkins.get(weaponID)) { + skinSubArray.add(Vice.getWeaponSkinManager().getWeaponSkinFromIdentifier(weapon, skinID)); + } + + skins.put(weaponID, skinSubArray); + } + } + + return skins; + } + + public Map<Short, List<Short>> getRawUnlockedWeaponSkins() { + return this.unlockedWeaponSkins; + } + + public WeaponSkin getEquippedWeaponSkin(Weapon<?> weapon) { + return this.equippedWeaponSkins.containsKey(weapon.getUniqueIdentifier()) ? Vice.getWeaponSkinManager().getWeaponSkinFromIdentifier(weapon, this.equippedWeaponSkins.get(weapon.getUniqueIdentifier())) : weapon.getWeaponSkins()[0]; + } + + public Map<Short, WeaponSkin> getEquippedWeaponSkins() { + Map<Short, WeaponSkin> skins = new HashMap<Short, WeaponSkin>(); + + for (short weaponID : this.equippedWeaponSkins.values()) { + Optional<Weapon<?>> weaponOpt = Vice.getWastedGuns().getWeaponManager().getWeaponFromUniqueIdentifier(weaponID); + + if (weaponOpt.isPresent()) { + skins.put(weaponID, Vice.getWeaponSkinManager().getWeaponSkinFromIdentifier(weaponOpt.get(), this.equippedWeaponSkins.get(weaponID))); + } + } + + return skins; + } +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/ViceUserDAO.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/ViceUserDAO.java new file mode 100644 index 0000000..840e0f5 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/ViceUserDAO.java @@ -0,0 +1,936 @@ +package net.grandtheftmc.vice.users; + +import com.google.common.collect.Lists; +import com.j0ach1mmall3.wastedvehicles.api.VehicleProperties; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.database.BaseDatabase; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.util.State; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.ViceUtils; +import net.grandtheftmc.vice.items.AmmoType; +import net.grandtheftmc.vice.items.Head; +import net.grandtheftmc.vice.items.Kit; +import net.grandtheftmc.vice.weapon.skins.WeaponSkinDAO; + +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +import java.sql.*; +import java.util.*; +import java.util.logging.Level; + +public class ViceUserDAO { + + //"select * from " + Core.name() + " where uuid='" + this.uuid + "' LIMIT 1;" + public static boolean getGeneralViceUser(ViceUser user) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + user.unlockedWeaponSkins = WeaponSkinDAO.getUnlockedSkins(connection, user.uuid); + user.equippedWeaponSkins = WeaponSkinDAO.getEquippedSkins(connection, user.uuid); + + try (PreparedStatement statement = connection.prepareStatement("SELECT * FROM " + Core.name() + " WHERE `uuid`=? LIMIT 1;")) { + statement.setString(1, user.uuid.toString()); + try (ResultSet result = statement.executeQuery()) { + if(result.next()) { + user.rank = ViceRank.fromString(result.getString("rank")); + user.copRank = CopRank.getRankOrNull(result.getString("copRank")); + user.lastCopSalary = result.getLong("lastCopSalary"); + user.kills = result.getInt("kills"); + user.deaths = result.getInt("deaths"); + user.money = result.getDouble("money"); + user.killStreak = result.getInt("killStreak"); + user.bonds = result.getInt("bonds"); + user.backpackContents = ViceUtils.fromBase64(result.getString("backpackContents")); + user.kitExpiries = new HashMap<>(); + user.jailTimer = result.getInt("jailTimer"); + try { + user.jailCop = result.getString("jailCop") == null ? null : UUID.fromString(result.getString("jailCop")); + } catch (Exception ignored) { + } + user.playtime = result.getLong("playtime"); + user.jailCopName = result.getString("jailCopName"); + String s = result.getString("kitExpiries"); + user.kitExpiries = new HashMap<>(); + if (s != null) + try { + String[] expiries = s.split(","); + for (String e : expiries) { + String[] a = e.split(":"); + String kit = a[0]; + Kit k = Vice.getItemManager().getKit(kit); + if (kit == null || a.length < 2) + continue; + long expiry; + try { + expiry = Long.parseLong(a[1]); + } catch (NumberFormatException ex) { + continue; + } + if (expiry > System.currentTimeMillis()) { + user.kitExpiries.put(k.getName().toLowerCase(), expiry); + } + } + + } catch (Exception e) { + Vice.getInstance().getLogger().log(Level.ALL, "Error while loading kitExpiries for player " + result.getString("name")); + e.printStackTrace(); + } + for (AmmoType type : AmmoType.getTypes()) + if (!type.isInInventory()) + user.ammo.put(type, result.getInt(type.name().toLowerCase())); + for (VehicleProperties properties : Vice.getWastedVehicles().getBabies().getVehicleProperties()) { + if (result.getBoolean(properties.getIdentifier().toLowerCase())) { + PersonalVehicle v = new PersonalVehicle(properties.getIdentifier()); + user.vehicles.add(v); + String st = result.getString(properties.getIdentifier().toLowerCase() + ":info"); + if (st == null) continue; + String[] a = st.split(":"); + if (a == null | a.length == 0) continue; + v.setHealth(Double.parseDouble(a[0])); + } + } + + //Cheat Codes + if(result.getBlob("cheatcodes") != null) { + Blob b = result.getBlob("cheatcodes"); + String cheatCodesBlob = new String(b.getBytes(1, (int) b.length())); + for (String serializedCheatCode : cheatCodesBlob.split("-")) { + String[] split = serializedCheatCode.split("#"); + user.cheatCodes.put(CheatCode.valueOf(split[0]), new CheatCodeState(State.valueOf(split[1]), Boolean.valueOf(split[2]))); + } + } + + User coreUser = Core.getUserManager().getLoadedUser(user.uuid); + for(CheatCode code : CheatCode.values()) { + if (coreUser.getUserRank() == code.getMinmumRank() || coreUser.getUserRank().isHigherThan(code.getMinmumRank())) { + if (!user.cheatCodes.containsKey(code) || user.cheatCodes.get(code).getState() == State.LOCKED) { + user.cheatCodes.put(code, new CheatCodeState(code.getDefaultState(), false)); + } + } + else { + if(user.cheatCodes.containsKey(code) && !user.cheatCodes.get(code).isPurchased()) { + user.cheatCodes.put(code, new CheatCodeState(State.LOCKED, false)); + } + } + } + + for(CheatCode code : CheatCode.values()) + if(!user.cheatCodes.containsKey(code)) + user.cheatCodes.put(code, new CheatCodeState(State.LOCKED, false)); + } + } + } + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + + return true; + } + + public static boolean insertViceUser(ViceUser user, String name) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("INSERT INTO " + Core.name() + "(`uuid`,`name`,`money`) VALUES(?,?,'5000') ON DUPLICATE KEY UPDATE `name`=?;")) { + statement.setString(1, user.uuid.toString()); + statement.setString(2, name); + statement.setString(3, name); + + statement.execute(); + } + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + + return true; + } + + public static boolean checkForDuplicate(ViceUser user, String name) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE " + Core.name() + " SET `name`=? WHERE `name`=? AND `uuid`!=?;")) { + statement.setString(1, "ERROR"); + statement.setString(2, name); + statement.setString(3, user.uuid.toString()); + + statement.execute(); + } + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + + return true; + } + + public static boolean setCheatCodeState(ViceUser user) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE " + Core.name() + " SET `cheatcodes`=? WHERE `uuid`=?;")) { + statement.setString(1, CheatCode.seralizeCheatCodes(user.cheatCodes)); + statement.setString(2, user.uuid.toString()); + + statement.execute(); + } + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + + return true; + } + + public static boolean setBackpackContents(UUID uuid, ItemStack[] backpackContents) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE " + Core.name() + " SET `backpackContents`=? WHERE `uuid`=?;")) { + statement.setString(1, backpackContents == null ? null : ViceUtils.toBase64(backpackContents)); + statement.setString(2, uuid.toString()); + + statement.execute(); + } + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + + return true; + } + + public static boolean setBackpackContents(String name, ItemStack[] backpackContents) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE " + Core.name() + " SET `backpackContents`=? WHERE `name`=?;")) { + statement.setString(1, backpackContents == null ? null : ViceUtils.toBase64(backpackContents)); + statement.setString(2, name); + + statement.execute(); + } + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + + return true; + } + + public static boolean setRank(UUID uuid, ViceRank rank) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE " + Core.name() + " SET `rank`=? WHERE `uuid`=?;")) { + statement.setString(1, rank.getName()); + statement.setString(2, uuid.toString()); + + statement.execute(); + } + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + + return true; + } + + public static boolean setRank(String name, ViceRank rank) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE " + Core.name() + " SET `rank`=? WHERE `name`=?;")) { + statement.setString(1, rank.getName()); + statement.setString(2, name); + + statement.execute(); + } + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + + return true; + } + + public static boolean setCopRank(ViceUser user, CopRank rank) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE " + Core.name() + " SET `copRank`=? WHERE `uuid`=?;")) { + statement.setString(1, (rank == null ? null : rank.getName())); + statement.setString(2, user.uuid.toString()); + + statement.execute(); + } + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + + return true; + } + + public static boolean setLastCopSalary(ViceUser user, long value) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE " + Core.name() + " SET `lastCopSalary`=? WHERE `uuid`=?;")) { + statement.setLong(1, value); + statement.setString(2, user.uuid.toString()); + + statement.execute(); + } + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + + return true; + } + + public static boolean setKills(ViceUser user, int value) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE " + Core.name() + " SET `kills`=? WHERE `uuid`=?;")) { + statement.setInt(1, value); + statement.setString(2, user.uuid.toString()); + + statement.execute(); + } + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + + return true; + } + + public static boolean setDeaths(ViceUser user, int value) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE " + Core.name() + " SET `deaths`=? WHERE `uuid`=?;")) { + statement.setInt(1, value); + statement.setString(2, user.uuid.toString()); + + statement.execute(); + } + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + + return true; + } + + public static boolean setMoney(UUID uuid, double value) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE " + Core.name() + " SET `money`=? WHERE `uuid`=?;")) { + statement.setDouble(1, value); + statement.setString(2, uuid.toString()); + + statement.execute(); + } + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + + return true; + } + + public static boolean setMoney(String name, double value) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE " + Core.name() + " SET `money`=? WHERE `name`=?;")) { + statement.setDouble(1, value); + statement.setString(2, name); + + statement.execute(); + } + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + + return true; + } + + public static boolean addMoney(String name, double value) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE " + Core.name() + " SET `money`=money+? WHERE `name`=?;")) { + statement.setDouble(1, value); + statement.setString(2, name); + + statement.execute(); + } + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + + return true; + } + + public static boolean takeMoney(String name, double value) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE " + Core.name() + " SET `money`=money-? WHERE `name`=?;")) { + statement.setDouble(1, value); + statement.setString(2, name); + + statement.execute(); + } + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + + return true; + } + + public static boolean setPlaytime(ViceUser user, long value) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE " + Core.name() + " SET `playtime`=? WHERE `uuid`=?;")) { + statement.setLong(1, value); + statement.setString(2, user.uuid.toString()); + + statement.execute(); + } + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + + return true; + } + + public static boolean setKillStreak(ViceUser user, int value) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE " + Core.name() + " SET `killStreak`=? WHERE `uuid`=?;")) { + statement.setInt(1, value); + statement.setString(2, user.uuid.toString()); + + statement.execute(); + } + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + + return true; + } + + public static boolean setBonds(UUID uuid, int value) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE " + Core.name() + " SET `bonds`=? WHERE `uuid`=?;")) { + statement.setInt(1, value); + statement.setString(2, uuid.toString()); + + statement.execute(); + } + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + + return true; + } + + public static boolean setBonds(String name, int value) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE " + Core.name() + " SET `bonds`=? WHERE `name`=?;")) { + statement.setInt(1, value); + statement.setString(2, name); + + statement.execute(); + } + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + + return true; + } + + public static boolean addBonds(String name, int value) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE " + Core.name() + " SET `bonds`=bonds+? WHERE `name`=?;")) { + statement.setInt(1, value); + statement.setString(2, name); + + statement.execute(); + } + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + + return true; + } + + public static boolean takeBonds(String name, int value) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE " + Core.name() + " SET `bonds`=bonds-? WHERE `name`=?;")) { + statement.setInt(1, value); + statement.setString(2, name); + + statement.execute(); + } + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + + return true; + } + + public static boolean updateKitExpiries(UUID uuid, String value) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE " + Core.name() + " SET `kitExpiries`=? WHERE `uuid`=?;")) { + statement.setString(1, value); + statement.setString(2, uuid.toString()); + + statement.execute(); + } + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + + return true; + } + + public static boolean updateKitExpiries(String name, String value) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE " + Core.name() + " SET `kitExpiries`=? WHERE `name`=?;")) { + statement.setString(1, value); + statement.setString(2, name); + + statement.execute(); + } + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + + return true; + } + + public static boolean setAmmo(ViceUser user, String key, int value) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE " + Core.name() + " SET " + key + "=? WHERE `uuid`=?;")) { + statement.setInt(1, value); + statement.setString(2, user.uuid.toString()); + + statement.execute(); + } + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + + return true; + } + + public static boolean resetAllAmmo(String name, String set) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE " + Core.name() + " SET " + set + " WHERE `uuid`=?;")) { + statement.setString(1, name); + + statement.execute(); + } + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + + return true; + } + + public static boolean setJailTimer(ViceUser user, int value) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE " + Core.name() + " SET `jailTimer`=? WHERE `uuid`=?;")) { + statement.setInt(1, value); + statement.setString(2, user.uuid.toString()); + + statement.execute(); + } + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + + return true; + } + + public static boolean resetJail(UUID uuid) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE " + Core.name() + " SET `jailTimer`=-1,`jailCop`=NULL,`jailCopName`=NULL WHERE `uuid`=?;")) { + statement.setString(1, uuid.toString()); + + statement.execute(); + } + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + + return true; + } + + public static boolean resetJail(String name) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE " + Core.name() + " SET `jailTimer`=-1,`jailCop`=NULL,`jailCopName`=NULL WHERE `name`=?;")) { + statement.setString(1, name); + + statement.execute(); + } + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + + return true; + } + + public static boolean setjailed(ViceUser user, int jailTimer, UUID uuid, String name) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE " + Core.name() + " SET `jailTimer`=?,`jailCop`=?,`jailCopName`=? WHERE `uuid`=?;")) { + statement.setInt(1, jailTimer); + statement.setString(2, uuid.toString()); + statement.setString(3, name); + statement.setString(4, user.uuid.toString()); + + statement.execute(); + } + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + + return true; + } + + public static boolean setVehiclePerm(UUID uuid, VehicleProperties vehicle, boolean value) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE " + Core.name() + " SET `" + vehicle.getIdentifier().toLowerCase() + "`=? WHERE `uuid`=?;")) { + statement.setBoolean(1, value); + statement.setString(2, uuid.toString()); + + statement.execute(); + } + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + + return true; + } + + public static boolean setVehiclePerm(String name, VehicleProperties vehicle, boolean value) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE " + Core.name() + " SET `" + vehicle.getIdentifier().toLowerCase() + "`=? WHERE `name`=?;")) { + statement.setBoolean(1, value); + statement.setString(2, name); + + statement.execute(); + } + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + + return true; + } + + public static boolean updateRankByName(String name, ViceRank rank) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE " + Core.name() + " SET `rank`=? WHERE `name`=?;")) { + statement.setString(1, rank.getName()); + statement.setString(2, name); + + statement.execute(); + } + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + + return true; + } + + public static boolean resetAllVehicles(String name, String set) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE " + Core.name() + " SET " + set + " WHERE `name`=?;")) { + statement.setString(1, name); + + statement.execute(); + } + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + + return true; + } + + public static boolean updateVehicles(UUID uuid, VehicleProperties v, double d) { + //"UPDATE " + Core.name() + " SET `" + v.getIdentifier().toLowerCase() + ":info`=? WHERE `uuid`=?;" + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE " + Core.name() + " SET `" + v.getIdentifier().toLowerCase() + ":info`=? WHERE `uuid`=?;")) { + statement.setDouble(1, d); + statement.setString(2, uuid.toString()); + + statement.execute(); + } + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + + return true; + } + + public static boolean getCops(HashMap<String, CopRank> onlineCops, HashMap<String, CopRank> offlineCops) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("SELECT * FROM " + Core.name() + " WHERE `copRank` IS NOT NULL;")) { + try (ResultSet result = statement.executeQuery()) { + while (result.next()) { + String name = result.getString("name"); + if(onlineCops.containsKey(name)) + continue; + CopRank rank = CopRank.getRankOrNull(result.getString("copRank")); + offlineCops.put(name, rank); + } + } + } + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + + return true; + } + + public static int countCops(CopRank rank) { + int amount = 0; + + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("SELECT * FROM " + Core.name() + " WHERE `copRank`=?;")) { + statement.setString(1, rank.getName()); + try (ResultSet result = statement.executeQuery()) { + + while (result.next()) { + amount += 1; + } + } + } + } catch (SQLException e) { + e.printStackTrace(); + return amount; + } + + return amount; + } + + public static Optional<Object[]> getMoneyAndName(String name) { + Object[] objects = new Object[2]; + + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("SELECT `name`,`money` FROM " + Core.name() + " WHERE `name`=?;")) { + statement.setString(1, name); + try (ResultSet result = statement.executeQuery()) { + if (result.next()) { + objects[0] = result.getString("name"); + objects[1] = result.getDouble("money"); + } + + return Optional.of(objects); + } + } + } catch (SQLException e) { + e.printStackTrace(); + return Optional.empty(); + } + } + + public static Optional<Object[]> getBondAndName(String name) { + Object[] objects = new Object[2]; + + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("SELECT `name`,`bonds` FROM " + Core.name() + " WHERE `name`=?;")) { + statement.setString(1, name); + try (ResultSet result = statement.executeQuery()) { + if (result.next()) { + objects[0] = result.getString("name"); + objects[1] = result.getDouble("bonds"); + } + + return Optional.of(objects); + } + } + } catch (SQLException e) { + e.printStackTrace(); + return Optional.empty(); + } + } + + public static Optional<Object[][]> getBalanceTop(int limit) { + Object[][] objects = new Object[limit][2]; + + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("SELECT `money`,`name` FROM `" + Core.name() + "` ORDER BY cast(`money` as double) DESC LIMIT " + limit + ";")) { + try (ResultSet result = statement.executeQuery()) { + int i = 0; + while (result.next()) { + objects[i][0] = result.getString("name"); + objects[i][1] = result.getDouble("money"); + i++; + } + + return Optional.of(objects); + } + } + } catch (SQLException e) { + e.printStackTrace(); + return Optional.empty(); + } + } + + public static boolean createTable() { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("CREATE TABLE IF NOT EXISTS " + Core.name() + "(" + + "uuid varchar(40) NOT NULL, " + + "name varchar(17) NOT NULL, " + + "rank varchar(255) DEFAULT 'HOBO', " + + "copRank varchar(366) DEFAULT NULL, " + + "kills int(11) default 0, " + + "deaths int(11) default 0, " + + "money double default 0, " + + "killStreak int(11) default 0, " + + "bonds int(11) default 0, " + + "backpackContents longtext, " + + "kitExpiries varchar(255), " + + "houses varchar(255), " + + "gang varchar(255), " + + "gangRank varchar(255) NOT NULL DEFAULT 'member', " + + "jailTimer int(11) DEFAULT -1, " + + "jailCop varchar(255) default NULL, " + + "jailCopName varchar(255) default NULL, " + + "personalVehicle varchar(255), " + + "cheatcodes BLOB, " + + "PRIMARY KEY (uuid)" + + ")")) { + + statement.execute(); + } + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + + return true; + } + + public static boolean insertHead(UUID sellerUUID, String sellerName, String head, long expiry) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("INSERT INTO " + Core.name() + "_heads(sellerUUID, sellerName, head, expiry) values (?,?,?,?);")) { + statement.setString(1, sellerUUID.toString()); + statement.setString(2, sellerName); + statement.setString(3, head); + statement.setLong(4, expiry); + statement.execute(); + } + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + + return true; + } + + public static boolean deleteHead(UUID sellerUUID, String head, long expiry) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("DELETE FROM " + Core.name() + "_heads WHERE `sellerUUID`=? AND `head`=? AND `expiry`=?;")) { + statement.setString(1, sellerUUID.toString()); + statement.setString(2, head); + statement.setLong(3, expiry); + statement.execute(); + } + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + + return true; + } + + public static List<Head> getHeads() { + List<Head> heads = Lists.newArrayList(); + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("SELECT * FROM " + Core.name() + "_heads;")) { + try (ResultSet result = statement.executeQuery()) { + while (result.next()) { + UUID sellerUUID = null; + UUID bidderUUID = null; + try { + sellerUUID = result.getString("sellerUUID") == null ? null : UUID.fromString(result.getString("sellerUUID")); + bidderUUID = result.getString("bidderUUID") == null ? null : UUID.fromString(result.getString("bidderUUID")); + } catch (Exception ignored) { + } + heads.add(new Head( + sellerUUID, + result.getString("sellerName"), + result.getString("head"), + result.getLong("expiry"), + result.getBoolean("done"), + result.getBoolean("paid"), + result.getBoolean("gaveHead"), + bidderUUID, + result.getString("bidderName"), + result.getDouble("bid") + )); + } + } + } + } catch (SQLException e) { + e.printStackTrace(); + return heads; + } + + return heads; + } + + public static boolean managePlaytime() { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("SELECT * FROM " + Core.name() + " LIMIT 1;")) { + try (ResultSet result = statement.executeQuery()) { + ResultSetMetaData metaData = result.getMetaData(); + List<String> columns = new ArrayList<>(); + + for (int i = 1; i <= metaData.getColumnCount(); i++) + columns.add(metaData.getColumnName(i).toLowerCase()); + + if (!columns.contains("playtime")) +// Core.sql.updateAsyncLater("ALTER TABLE " + Core.name() + " ADD COLUMN playtime BIGINT(20) NOT NULL DEFAULT 0;"); + runQuery("ALTER TABLE " + Core.name() + " ADD COLUMN playtime BIGINT(20) NOT NULL DEFAULT 0;"); + + for (AmmoType type : AmmoType.values()) + if (!type.isInInventory() && !columns.contains(type.toString().toLowerCase())) +// Core.sql.update("alter table " + Core.name() + " add column " + type.toString().toLowerCase() + " int(11) default 0;"); + runQuery("ALTER TABLE " + Core.name() + " ADD COLUMN " + type.toString().toLowerCase() + " INT(11) DEFAULT 0;"); + + for (VehicleProperties vehicle : Vice.getWastedVehicles().getBabies().getVehicleProperties()) { + if (!columns.contains(vehicle.getIdentifier().toLowerCase())) +// Core.sql.update("alter table " + Core.name() + " add column " + vehicle.getIdentifier().toLowerCase() + " BOOLEAN not null default 0;"); + runQuery("ALTER TABLE " + Core.name() + " ADD COLUMN " + vehicle.getIdentifier().toLowerCase() + " BOOLEAN NOT NULL DEFAULT 0;"); + + if (!columns.contains(vehicle.getIdentifier().toLowerCase() + ":info")) +// Core.sql.update("alter table " + Core.name() + " add column `" + vehicle.getIdentifier().toLowerCase() + ":info` VARCHAR(255);"); + runQuery("ALTER TABLE " + Core.name() + " ADD COLUMN `" + vehicle.getIdentifier().toLowerCase() + ":info` VARCHAR(255);"); + } + } + } + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + + return true; + } + + private static boolean runQuery(String query) { + try (Connection connection = BaseDatabase.getInstance().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement(query)) { + statement.execute(); + } + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + + return true; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/ViceUserManager.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/ViceUserManager.java new file mode 100644 index 0000000..f9ed69a --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/ViceUserManager.java @@ -0,0 +1,30 @@ +package net.grandtheftmc.vice.users; + +import java.util.*; + +public class ViceUserManager { + + private final Map<UUID, ViceUser> loadedUsers = new HashMap<>(); + + public Collection<ViceUser> getLoadedUsers() { + return this.loadedUsers.values(); + } + + public boolean unloadUser(UUID uuid) { + if(this.loadedUsers.containsKey(uuid)){ + this.loadedUsers.get(uuid).save(); + this.loadedUsers.remove(uuid); + return true; + } + return false; + } + + public ViceUser getLoadedUser(UUID uuid) { + if (uuid == null) { + return null; + } + + return this.loadedUsers.computeIfAbsent(uuid, k -> new ViceUser(uuid)); + } + +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/npcs/MachineNPC.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/npcs/MachineNPC.java new file mode 100644 index 0000000..c4f9c21 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/npcs/MachineNPC.java @@ -0,0 +1,43 @@ +package net.grandtheftmc.vice.users.npcs; + +import net.citizensnpcs.api.event.NPCLeftClickEvent; +import net.citizensnpcs.api.event.NPCRightClickEvent; +import net.grandtheftmc.core.Utils; +import net.grandtheftmc.core.npc.CoreNPC; +import net.grandtheftmc.core.npc.interfaces.ClickableNPC; +import net.grandtheftmc.vice.machine.MachineManager; +import net.grandtheftmc.vice.machine.repair.MachineRepairMenu; +import org.bukkit.Location; +import org.bukkit.entity.EntityType; + +/** + * Created by Timothy Lampen on 2/12/2018. + */ +public class MachineNPC extends CoreNPC implements ClickableNPC { + + private final MachineManager machineManager; + + public MachineNPC(MachineManager machineManager, Location loc) { + super(loc, EntityType.PLAYER, Utils.f("&6&lHenry Ford"), Utils.f("&7&oTrade your machine shards here!")); + this.machineManager = machineManager; + } + + @Override + protected void generateNewNPC() { + setSkin( + "eyJ0aW1lc3RhbXAiOjE1MTg1MjA2MjU2MTksInByb2ZpbGVJZCI6IjAyMjEyMmM5Yjk5ZjRhNmY4MTNkNzVkNmMwMTk5NWU2IiwicHJvZmlsZU5hbWUiOiJNZWNoYW5pYyIsInNpZ25hdHVyZVJlcXVpcmVkIjp0cnVlLCJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTVkNzY5ZDEyZWUyN2Y1ZDM4ZGQ2ZjNjMGI0Mjg2NjU2NDU4Njg3NGI3MWFhMjczNTIzZDBhYWM1ZjM3ZSJ9fX0=", + "BFTXOx0chlORiL9UHDrnkQDsU9yFZDriJ18Si52h1vyDnsKwWskAFvp5SnUtQ1gBUebE+vz//CAJWetCdONIKbTU8MDpGS524YI6C6F1lV6bHbvb1MAEX3ezEDpinB7G/gNRQRddBYuuYd0iXqkYbiLrYzGs3O2KTQ+HEz8M2detE6B9JkFwBk797DJ6A7RJyMsJk7NRgTKM2i9cBZhlOklwobQDUH4tQ9zzVsrbKxXBB9rbUKZxIWPMOk9CfPIgZHu14N/rbYfQ9KFRd2BhlSWuFRxXLh3htGZHESsifzbZg0TkKtMpKAOTX7mYbxS8/KUhoQH3Q816CP6EI93B2gvlq7fVNCiyi19ad4A0NkCMBoiv1KBqB4J91CVMoomGalaWxVt+3JJ/IE/No9/mfWhGA5EKs3uHYJD7x6OmsYxbahnV+GyaiXQFJz3x/ObGr5evLBXt5JgQP2DQX/7+2HU7dNh8J6ZwWtEg+Yh33y46Oh6A60ixqpFXN1pwHkXgplS/4HVsliCFbwhTDqBS9sX8pYlj+MEdmPWvYrVk0KsNqEYLawR/8ukTosBRZgWPo2HDHXQ+/IQ7AfKhC/NH0pnTMQrFYTV8p+kqKJCO5Tcu/GefsA7miVAktYFCTGxM8YdZDYFCpf1wC3pJRnHYbjzaHpny839Mh2t7kOHVCCQ=" + ); + setLookClose(true); + } + + @Override + public void onRightClick(NPCRightClickEvent npcRightClickEvent) { + new MachineRepairMenu(this.machineManager).openInventory(npcRightClickEvent.getClicker()); + } + + @Override + public void onLeftClick(NPCLeftClickEvent npcLeftClickEvent) { + new MachineRepairMenu(this.machineManager).openInventory(npcLeftClickEvent.getClicker()); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/npcs/SkinsNPC.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/npcs/SkinsNPC.java new file mode 100644 index 0000000..eddd0bb --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/npcs/SkinsNPC.java @@ -0,0 +1,34 @@ +package net.grandtheftmc.vice.users.npcs; + +import org.bukkit.Location; +import org.bukkit.entity.EntityType; + +import net.citizensnpcs.api.event.NPCLeftClickEvent; +import net.citizensnpcs.api.event.NPCRightClickEvent; +import net.grandtheftmc.core.npc.CoreNPC; +import net.grandtheftmc.core.npc.interfaces.ClickableNPC; +import net.grandtheftmc.vice.weapon.skins.menu.MainMenu; + +public class SkinsNPC extends CoreNPC implements ClickableNPC { + public SkinsNPC(Location location) { + super(location, EntityType.PLAYER, "&9&lMr Skinner", "&7&oManage and view your weapon skins here!"); + } + + @Override + protected void generateNewNPC() { + this.setLookClose(true); + this.setSkin( + "eyJ0aW1lc3RhbXAiOjE1MTg1NjMxNzk3MDEsInByb2ZpbGVJZCI6Ijc2MTJhZWU1YTk5YjQxZWRiYTg3Nzg4MGMyMjZiMzM2IiwicHJvZmlsZU5hbWUiOiJGbG91cmVrIiwic2lnbmF0dXJlUmVxdWlyZWQiOnRydWUsInRleHR1cmVzIjp7IlNLSU4iOnsidXJsIjoiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS8yNjE0ODNmMGIxNjc2OWQ2NGFlMTI5Yjg5ZDYyY2M3N2M1Mzk0OGRlZTVmYzQ2MmFlNTQ1OTQyZWYwNDdjNzliIn19fQ==", + "svzvIYm7x02JAMpjnW+oKQAM48jpzTNvKtLVSPGuL7DjWjZOuH+fjrw6tqGWKAHZYbR7QaIfNiHKk/uKbF8gGij9jxphAZuD47p53ALODYwbopir2lSdmMl+flPggTS7dWYmPfQsnSa4t13O1yLZMmdtFUTzyJQYZqFeU+Ss7CAiU0Xxvi5SNqlrLlm+utDaQQoobfkHeuHBe1/bFDNrTx7iYGYuPqn3Y5T8YtqgyRVaQsoDyeAmONNJE5R/o8MVOEFKtqE/MqL5ONpAFkkM1iDlajj+C3lhJ/3ORnpA6HTTyAGvLLZJNXBNM2+nl4x7hyEMw6kQJ5JCh3uFGbJamXvpi/pFQS2rBI1OZVzhZbYIE9/dfqxK6MH7A9Z1XlCPYQPFmQzh0unJH8y4OTBxfUsEjaIgB8AG61SjuyJqFo5oeJ2DJ1kO8ua72tLl13ron/fk+AfGeW16LuwxIy1XaUki4UC5MRcE0wj7ou68ME1gR/XmjpQDuaPaJj7yf+epFHc9lDARtb21yqOkYJXAKiN6ec8HU7uhIXW142K+bhzFGTfUZ6jxnL54TQ6qWojwpM/VEM8ewsMaL4Xf3Kh5hPzuXeylca4qPZzhsJ2I9Bf09i1TknDVTnW8qgmz4WZynyBNMdWZ60w25q/afM1DB9QuzUo2Qa+y2z7MSDALMCw="); + } + + @Override + public void onRightClick(NPCRightClickEvent event) { + new MainMenu(event.getClicker()).open(); + } + + @Override + public void onLeftClick(NPCLeftClickEvent npcLeftClickEvent) { + + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/npcs/TaxiNPC.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/npcs/TaxiNPC.java new file mode 100644 index 0000000..15777ba --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/npcs/TaxiNPC.java @@ -0,0 +1,59 @@ +package net.grandtheftmc.vice.users.npcs; + +import net.citizensnpcs.api.event.NPCLeftClickEvent; +import net.citizensnpcs.api.event.NPCRightClickEvent; +import net.grandtheftmc.core.Utils; +import net.grandtheftmc.core.inventory.CoreMenu; +import net.grandtheftmc.core.inventory.button.ClickableItem; +import net.grandtheftmc.core.inventory.button.MenuItem; +import net.grandtheftmc.core.menus.MenuManager; +import net.grandtheftmc.core.npc.CoreNPC; +import net.grandtheftmc.core.npc.interfaces.ClickableNPC; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +/** + * Created by Timothy Lampen on 1/24/2018. + */ +public class TaxiNPC extends CoreNPC implements ClickableNPC { + public TaxiNPC(Location loc) { + super(loc, EntityType.PLAYER, "&e&lGerald Hackney", "&7&oGo to the game world!"); + } + + @Override + protected void generateNewNPC() { + setSkin("eyJ0aW1lc3RhbXAiOjE1MTU5NzAzNjYzNDUsInByb2ZpbGVJZCI6ImFkMWM2Yjk1YTA5ODRmNTE4MWJhOTgyMzY0OTllM2JkIiwicHJvZmlsZU5hbWUiOiJGdXJrYW5iejAwIiwic2lnbmF0dXJlUmVxdWlyZWQiOnRydWUsInRleHR1cmVzIjp7IlNLSU4iOnsidXJsIjoiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS9jYzUzZWQyMzJlYWQyNmU4Y2I0NzJiMGFmOGIyMDQyYjdhZjljZDMyOGRlM2M0YTZlNGQzNjNiNDNiZDlmNDUifX19", "hLKOkCuejv8K7bwWS/SKY6jrxJXNojg4eiv1/TPkKJ/1Hc+njUE99IPLCuexppJASlUEMe2815FfDwS4PTzMzgxBeLPdcB/xJR8BZw4FuvodIXfLubmVkxme245u0hRHfVlPLk31l4dyPFEwRMhbSmHacVroB8pebEov6+164p3fUnctqlM48bf6lNfpsbhY46nvqPVRVtv9ljTL6FwBPDvnZL97zTSsUqjKjLUJMTtuHIaAj26Q9+M9y4rP1VMInDWrgfXpEuwz32xy/2HiHHQrGMrNxU9MmshDX1BTJ4UAxmipmj+pJENRSon3GrIgLE7t/yP0Z1ZCcfHFqZtzLHKPXzt+u4jW5hl9bFUU9d9HSUEV0qt+nD68a1yNiWPE2rB0l549v+AZ5D8bktSpvdLy574/uBLLXbM8JJk8g1iFgyeEpQS8TJuHfnyV62KU6lML5+MTt7/zBXlRh2+Vz89Ti0fbZs1g6NdcJWQisCTtVPMBiws9yoitmSsqKk+8/8WYQX7EYXLGilL7gavoBZhlIyP0P8ltTc4oHfcwoOtoZvPivauUv8lHZu18tZpOE1kq28lNuBdytLTWTuJckDzeRwbB8pHCQKB628nRLt2Xp1N57CNnc9XW/3sWY+rKTRHRNw7BvVqoaCAXP4tNo+c7frELxv+CgWMxRcE2g5E="); + setLookClose(true); + } + + @Override + public void onRightClick(NPCRightClickEvent event) { + Player player = event.getClicker(); + new TaxiMenu().openInventory(player); + } + + @Override + public void onLeftClick(NPCLeftClickEvent event) { + + } + + private class TaxiMenu extends CoreMenu { + + public TaxiMenu() { + super(3, Utils.f("&e&lTaxi")); + + for(int i = 0; i < 27; i++) { + if(i==13) + continue; + addItem(new MenuItem(i, new ItemStack(Material.STAINED_GLASS_PANE, 1, (short)7), false)); + } + + addItem(new ClickableItem(13, Utils.createItem(Material.SAPLING, "&d&lRandom Teleport"), (player, clickType) -> { + player.chat("/rtp"); + }, false)); + } + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/npcs/TrashCanManager.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/npcs/TrashCanManager.java new file mode 100644 index 0000000..f6a763c --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/npcs/TrashCanManager.java @@ -0,0 +1,244 @@ +package net.grandtheftmc.vice.users.npcs; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.ViceUtils; +import net.grandtheftmc.vice.items.GameItem; +import net.grandtheftmc.vice.users.ViceUser; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryCloseEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.scheduler.BukkitRunnable; + +import java.text.DecimalFormat; +import java.util.*; +import java.util.stream.Collectors; + + +/** + * + * + * @apiNote This class is positioned here because it is only used for the drugs menu. + * + */ +public class TrashCanManager implements Listener { + + private final Set<UUID> inTrashcan = new HashSet<>(); + + public void openTrashCan(Player player) { + if (Vice.getUserManager().getLoadedUser(player.getUniqueId()).isArrested()) { + player.sendMessage(Lang.JAIL.f("&7You can't sell items in jail!")); + return; + } + Inventory inv = Bukkit.createInventory(null, 54, Utils.f("&a&lSell Drugs")); + int[] paneSlots = new int[] { 9, 10, 11, 12, 13, 14, 15, 16, 17, 27, 28, 29, 30, 31, 32, 33, 34, 35, 45, 46, 47, + 48, 49, 50, 51, 52 }; + for (int i : paneSlots) + inv.setItem(i, Utils.createItem(Material.STAINED_GLASS_PANE, 7, "&a")); + // inv.setItem(52, Utils.createItem(Material.DIAMOND, "&6&lSell Entire Inventory", "&7Total Value: &a$&l" + getTotalInvPrice(player))); + inv.setItem(53, Utils.createItem(Material.PAPER, "&a&lConfirm", "&7Total Reward: &a$&l0")); + inv.setItem(44, Utils.createItem(Material.REDSTONE, "&c&lCancel", "&7Return all items!")); + + this.inTrashcan.add(player.getUniqueId()); + + player.openInventory(inv); + } + + private void m(int i) { + this.m(String.valueOf(i)); + } + + private void m(String s) { + Bukkit.broadcastMessage(s); + } + + @EventHandler + public void onClick(InventoryClickEvent e) { + Player player = (Player) e.getWhoClicked(); + Inventory inv = e.getView().getTopInventory(); + if (inv == null || !this.inTrashcan.contains(player.getUniqueId())) + return; + + ItemStack c = e.getCurrentItem(); + if (c != null) { + switch (c.getType()) { + case PAPER: + e.setCancelled(true); + player.closeInventory(); + return; + case REDSTONE: + e.setCancelled(true); + List<ItemStack> items = itemSlots.stream().mapToInt(i -> i).mapToObj(inv::getItem).filter(Objects::nonNull).collect(Collectors.toList()); + + for (int i : itemSlots) { + inv.setItem(i, null); + inv.setItem(i + 9, Utils.createItem(Material.STAINED_GLASS_PANE, 7, "&a")); + } + + player.closeInventory(); + Utils.giveItems(player, items.toArray(new ItemStack[items.size()])); + + if (c.getType() == Material.REDSTONE) + player.sendMessage(Utils.f(Lang.TRASH_CAN + "&7The items have been added back to your inventory.")); + + if (c.getType() == Material.DIAMOND) + player.sendMessage(Utils.f(" &c&lERROR&8&l> &cThis feature is currently disabled, try again soon!")); + + return; + + /* + case DIAMOND://TODO, Fix sell-all, It causes alot of lag! + e.setCancelled(true); +// double price = getTotalInvPrice(player); +// if (price == 0) return; + player.closeInventory(); +// ViceUser user = Vice.getUserManager().getLoadedUser(player.getUniqueId()); +// user.setSellInvConfirmAmt(price); +// MenuManager.openMenu(player, "sellinvconfirm"); + + //TODO, Remove message after fixing lag. + player.sendMessage(Utils.f(" &c&lERROR&8&l> &cThis feature is currently disabled, try again soon!")); + return; + */ + + default: + break; + } + } + + if (Objects.equals(e.getClickedInventory(), inv) && !itemSlots.contains(e.getSlot())) { + e.setCancelled(true); + player.updateInventory(); + return; + } + new BukkitRunnable() { + @Override + public void run() { + if (!player.isOnline()) + return; + updateTrashCan(inv); + + } + }.runTaskLater(Vice.getInstance(), 1); + } + + private double calculateItem(Inventory inv, int slot, boolean updateInventory) { + ItemStack item = inv.getItem(slot); + + if (item == null) { + if(updateInventory) + inv.setItem(slot + 9, Utils.createItem(Material.STAINED_GLASS_PANE, 7, "&a")); + return 0; + } + GameItem gameItem = Vice.getItemManager().getSellableItem(item); + + if(gameItem==null || gameItem.getType()!= GameItem.ItemType.DRUG) + return 0; + + double price = gameItem.getSellPrice() * item.getAmount(); + DecimalFormat df = new DecimalFormat("#.##"); + if(updateInventory) + inv.setItem(slot + 9, Utils.createItem(Material.STAINED_GLASS_PANE, 13,"&a&lReward: &a$&l" + df.format(price))); + return price; + } + + private double updateTrashCan(Inventory inv) { + List<Integer> itemSlots = Arrays.asList(0, 1, 2, 3, 4, 5, 6, 7, 8, 18, 19, 20, 21, 22, 23, 24, 25, 26, 36, 37, 38, 39, 40, 41, 42, 43); + if(inv.getViewers().size()==0) + return 0; + Player player = (Player) inv.getViewers().get(0); + if(player==null) + return 0; + + //inv.setItem(52, Utils.createItem(Material.DIAMOND, "&6&lSell Entire Inventory", "&7Total Value: &a$&l" + getTotalInvPrice(player))); + DecimalFormat df = new DecimalFormat("#.##"); + double rankMultiplier = ViceUtils.getDrugSellModifier(Core.getUserManager().getLoadedUser(player.getUniqueId()).getUserRank()); + + double totalPrice = itemSlots.stream().mapToDouble(i -> this.calculateItem(inv, i, true)).sum() * rankMultiplier; + + inv.setItem(53, Utils.createItem(Material.PAPER, "&a&lConfirm", "&7Total Reward: &a$&l" + df.format(totalPrice), "&6&lRank Multiplier: &b&l" + rankMultiplier + "x")); + inv.setItem(44, Utils.createItem(Material.REDSTONE, "&c&lCancel", "&7Return all items!")); + return totalPrice; + } + + /*public double getTotalInvPrice(Player player) { + double invPrice = IntStream.range(0, 36).mapToDouble(i -> this.calculateItem(player.getInventory(), i, false)).sum(); + for(int i =9; i<36; i++){ + ItemStack is = player.getInventory().getItem(i); + if(is==null || is.getType()==Material.AIR) + continue; + GameItem item = Vice.getItemManager().getSellableItem(is); + if(item==null || item.getType()== GameItem.ItemType.DRUG) + continue; + invPrice += item.getSellPrice() * is.getAmount() ; + } + return invPrice; + }*/ + + private final List<Integer> itemSlots = Arrays.asList(0, 1, 2, 3, 4, 5, 6, 7, 8, 18, 19, 20, 21, 22, 23, 24, 25, 26, 36, 37, 38, 39, 40, 41, 42, 43); + public Collection<GameItem> getSellableItems(Inventory inv) { + Collection<GameItem> items = new ArrayList<>(); + + for (int slot : itemSlots) { + if (inv.getItem(slot) != null) { + ItemStack itemStack = inv.getItem(slot); + GameItem gameItem = Vice.getItemManager().getSellableItem(itemStack); + if (gameItem == null || gameItem.getType()!= GameItem.ItemType.DRUG ) continue; + gameItem.getItem().setAmount(itemStack.getAmount()); + items.add(gameItem); + } + } + + //I think this causes selling problems. +// itemSlots.stream().forEachOrdered(i -> { +// if (inv.getItem(i) != null) { +// ItemStack itemStack = inv.getItem(i); +// GameItem gameItem = Vice.getItemManager().getSellableItem(itemStack, ViceUtils.isArmor(itemStack.getType())); +// if (gameItem == null || gameItem.getType()== GameItem.ItemType.DRUG) return; +// gameItem.getItem().setAmount(itemStack.getAmount()); +// items.add(gameItem); +// } +// }); + + return items; + } + + @EventHandler + public void onClose(InventoryCloseEvent e) { + Player player = (Player) e.getPlayer(); + Inventory inv = e.getInventory(); + if (!this.inTrashcan.contains(player.getUniqueId())) + return; + double totalPrice = this.updateTrashCan(inv); + ViceUser user = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + + + /*for (ItemStack itemStack : inv.getStorageContents()) { + if (itemStack == null) continue; + if (!itemStack.hasItemMeta()) continue; + if (itemStack.getItemMeta().getDisplayName() == null) continue; + Optional<DrugItem> drugItem = ((DrugService) Vice.getDrugManager().getService()).getDrugItem(itemStack.getItemMeta().getDisplayName()); + if (drugItem.isPresent()) { + Optional<DrugDealerItem> drugDealerItem = DrugDealerItem.byDrugItem(drugItem.get()); + if (!drugDealerItem.isPresent()) continue; + drugDealerItem.get().setStockRemaining(drugDealerItem.get().getStockRemaining() + 1); + } + }*/ + + if (totalPrice > 0) { + user.addMoney(totalPrice); + ViceUtils.updateBoard(player, user); + player.sendMessage(Utils.f(Lang.MONEY_ADD.toString() + Math.round(totalPrice))); + } + + this.inTrashcan.remove(player.getUniqueId()); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/npcs/shopnpc/BlocksMenu.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/npcs/shopnpc/BlocksMenu.java new file mode 100644 index 0000000..b89f802 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/npcs/shopnpc/BlocksMenu.java @@ -0,0 +1,199 @@ +package net.grandtheftmc.vice.users.npcs.shopnpc; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.Utils; +import net.grandtheftmc.core.inventory.CoreMenu; +import net.grandtheftmc.core.inventory.CoreMenuFlag; +import net.grandtheftmc.core.inventory.button.ClickableItem; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.items.GameItem; +import net.grandtheftmc.vice.users.ViceUser; +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.inventory.meta.SkullMeta; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * Created by Timothy Lampen on 1/27/2018. + */ +public class BlocksMenu extends CoreMenu { + private int counter = 0; + private static final int[] ITEM_SPOTS = new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 38, 39, 40, 41, 42}; + private int[] CATEGORY_SLOTS = new int[]{21,23,30,32}; + + protected BlocksMenu() { + super(6, Utils.f("&c&lBuy Blocks"), CoreMenuFlag.PHONE_LAYOUT); + + for(Category c : Category.values()) { + addItem(getCategoryPlaceholder(c)); + } + + addItem(generateBackwardSelector(new CategoryMenu())); + } + + private enum Category { + COLORFUL, REDSTONE, BASIC, MISC + } + + /** + * @param menu the menu that when this item is clicked, the player will be directed to + * @return a clickable item that does above. + */ + private ClickableItem generateBackwardSelector(CoreMenu menu){ + ItemStack is = new ItemStack(Material.SKULL_ITEM, 1, (short)3); + SkullMeta im = (SkullMeta)is.getItemMeta(); + im.setOwner("MHF_ArrowLeft"); + im.setDisplayName(Utils.f("&c&lBack")); + is.setItemMeta(im); + return new ClickableItem(47, is, ((player, clickType) -> { + menu.openInventory(player); + })); + } + + private ClickableItem getCategoryPlaceholder(Category c){ + String gameItem = "", displayName = ""; + switch (c) { + case MISC: { + gameItem = "rednetherbrick"; + displayName = "&c&lMiscellaneous Blocks"; + break; + } + case REDSTONE: { + gameItem = "redstone"; + displayName = "&c&lRedstone Blocks"; + break; + } + case BASIC: { + gameItem = "dirt"; + displayName = "&c&lBasic Blocks"; + break; + } + case COLORFUL: { + gameItem = "lightbluewool"; + displayName = "&c&lColorful Blocks"; + break; + } + } + ItemStack is = Vice.getItemManager().getItem(gameItem).getItem(); + ItemMeta im = is.getItemMeta(); + im.setLore(Collections.emptyList()); + im.setDisplayName(Utils.f(displayName)); + is.setItemMeta(im); + return new ClickableItem(CATEGORY_SLOTS[counter++], is, + ((player, clickType) -> { + new SubCategoryMenu(c, 1).openInventory(player); + })); + } + + + private class SubCategoryMenu extends CoreMenu{ + private int counter = 0; + private final int page; + private final Category category; + + public SubCategoryMenu(Category category, int page){ + super(6, Utils.f("&c&lBuy Blocks"), CoreMenuFlag.PHONE_LAYOUT); + this.page = page; + this.category = category; + + LinkedList<GameItem> filtered = Vice.getItemManager().getShopItems().stream().filter(gi -> gi.getShopCategory().equals("BLOCKS_" + category.toString())).collect(Collectors.toCollection(LinkedList::new)); + + if(page==1) { + addItem(generateBackwardSelector(new BlocksMenu())); + if(filtered.size()>20) + addItem(generateNextPageSelector()); + } + else if(page*20>=filtered.size()) + addItem(generatePrevPageSelector()); + else { + addItem(generatePrevPageSelector()); + addItem(generateNextPageSelector()); + } + + int beginningIndex = page * 20 - 20; + Set<GameItem> subset; + if (beginningIndex + 20 <= filtered.size()) + subset = filtered.stream().skip(beginningIndex).limit(20).collect(Collectors.toSet()); + else if(beginningIndex <= filtered.size() && filtered.size()-beginningIndex < 20) + subset = filtered.stream().skip(beginningIndex).limit(filtered.size()-beginningIndex).collect(Collectors.toSet()); + else + subset = new HashSet<>(); + + for(GameItem gi : subset) { + if(!gi.canSell()) { + Core.error("[BlocksMenu] " + gi.getName() + " is in category blocks, but has no sell price."); + continue; + } + ServerUtil.debug("loading item " + gi.getName() + " / " + (gi.getItem()==null) + " / " + gi.getSellPrice()); + ItemStack disp = gi.getItem().clone(); + ItemMeta im = disp.getItemMeta(); + + ServerUtil.debug((im==null) + " / " + (disp==null) + " / " + (gi.getSellPrice())); + im. + setLore( + Arrays.asList(Utils.f("&6&lBuy x&b&l1 &6&lBlock &8(&6Left Click&8): &6$&a" + + gi.getSellPrice()), + Utils.f("&6&lBuy x&b&l64 &6&lBlocks &8(&6Right Click&8): &6$&a" + gi.getSellPrice()*64))); + disp.setItemMeta(im); + + addItem(new ClickableItem(ITEM_SPOTS[counter++], disp, ((player, clickType) -> { + ViceUser user = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + switch (clickType) { + case LEFT: + case SHIFT_LEFT: + if(!user.hasMoney(gi.getSellPrice())){ + player.sendMessage(Lang.SHOP.f("&cYou do not have enough money for this block!")); + return; + } + user.takeMoney(gi.getSellPrice()); + Utils.giveItems(player, gi.getItem()); + break; + case RIGHT: + case SHIFT_RIGHT: + if(!user.hasMoney(gi.getSellPrice()*64)){ + player.sendMessage(Lang.SHOP.f("&cYou do not have enough money for these blocks!")); + return; + } + user.takeMoney(gi.getSellPrice()*64); + Utils.giveItems(player, gi.getItem(64)); + break; + } + }))); + } + } + + /** + * @return a clickable item that will send player to next page of same category. + */ + private ClickableItem generateNextPageSelector(){ + ItemStack is = new ItemStack(Material.SKULL_ITEM, 1, (short)3); + SkullMeta im = (SkullMeta)is.getItemMeta(); + im.setOwner("MHF_ArrowRight"); + im.setDisplayName(Utils.f("&cTo Page: &a" + (page+1))); + is.setItemMeta(im); + return new ClickableItem(52, is, ((player, clickType) -> { + new SubCategoryMenu(this.category, this.page+1).openInventory(player); + })); + } + + /** + * @return a clickable item that will send player to previous page of same category. + */ + private ClickableItem generatePrevPageSelector(){ + ItemStack is = new ItemStack(Material.SKULL_ITEM, 1, (short)3); + SkullMeta im = (SkullMeta)is.getItemMeta(); + im.setOwner("MHF_ArrowLeft"); + im.setDisplayName(Utils.f("&cTo Page: &a" + (page-1))); + is.setItemMeta(im); + return new ClickableItem(47, is, ((player, clickType) -> { + new SubCategoryMenu(this.category, this.page-1).openInventory(player); + })); + } + } + +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/npcs/shopnpc/CategoryMenu.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/npcs/shopnpc/CategoryMenu.java new file mode 100644 index 0000000..e86fc6d --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/npcs/shopnpc/CategoryMenu.java @@ -0,0 +1,407 @@ +package net.grandtheftmc.vice.users.npcs.shopnpc; + +/** + * Created by Timothy Lampen on 1/27/2018. + */ + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.Utils; +import net.grandtheftmc.core.inventory.CoreMenu; +import net.grandtheftmc.core.inventory.CoreMenuFlag; +import net.grandtheftmc.core.inventory.button.ClickableItem; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.guns.GTMGuns; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.Weapon; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.items.GameItem; +import net.grandtheftmc.vice.machine.BaseMachine; +import net.grandtheftmc.vice.users.ViceUser; +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.inventory.meta.SkullMeta; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * + * + * @apiNote Main category menu (when you first right click this pops up) + * + */ +public class CategoryMenu extends CoreMenu { + + private static final Set<String> DISABLED = new HashSet<>(Arrays.asList("clausinator")); + private static final HashMap<AmmoType, Integer> AMMO_MULTIPLIERS = new HashMap<>(); + private static final int[] ITEM_SPOTS = new int[]{11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 38, 39, 40, 41, 42}; + private int counter = 0; + private int[] CATEGORY_SLOTS = new int[]{21,22,23,30,32}; + + + static { + /** + * The multiples of which the ammo for the certain ammo type is sold as. + */ + AMMO_MULTIPLIERS.put(AmmoType.ASSAULT_RIFLE, 50); + AMMO_MULTIPLIERS.put(AmmoType.GRENADE, 5); + AMMO_MULTIPLIERS.put(AmmoType.ROCKET, 1); + AMMO_MULTIPLIERS.put(AmmoType.LAUNCHER, 1); + AMMO_MULTIPLIERS.put(AmmoType.MINIGUN, 600); + AMMO_MULTIPLIERS.put(AmmoType.PISTOL, 20); + AMMO_MULTIPLIERS.put(AmmoType.SMG, 60); + AMMO_MULTIPLIERS.put(AmmoType.LMG, 40); + AMMO_MULTIPLIERS.put(AmmoType.SHOTGUN, 12); + AMMO_MULTIPLIERS.put(AmmoType.SNIPER, 10); + AMMO_MULTIPLIERS.put(AmmoType.FUEL, 64); + } + + /** + * @apiNote the different categories avaliable. + */ + private enum Category { + SELL_DRUGS, BUY_MACHINES, BUY_SUPPLIES, BUY_GUNS, BUY_BLOCKS + } + + public CategoryMenu() { + super(6, Utils.f("&c&lChoose Category"), CoreMenuFlag.PHONE_LAYOUT); + for(Category c : Category.values()) { + addItem(getCategoryPlaceholder(c)); + } + + } + + /** + * @param menu the menu that when this item is clicked, the player will be directed to + * @return a clickable item that does above. + */ + private ClickableItem generateBackwardSelector(CoreMenu menu){ + ItemStack is = new ItemStack(Material.SKULL_ITEM, 1, (short)3); + SkullMeta im = (SkullMeta)is.getItemMeta(); + im.setOwner("MHF_ArrowLeft"); + im.setDisplayName(Utils.f("&c&lBack")); + is.setItemMeta(im); + return new ClickableItem(46, is, ((player, clickType) -> { + menu.openInventory(player); + })); + } + + /** + * @param c the category that you want to generate a placeholder for. + * @return a clickable item that when clicked, directs the player to the correct category. + */ + private ClickableItem getCategoryPlaceholder(Category c){ + switch (c) { + case SELL_DRUGS: { + ItemStack is = Vice.getItemManager().getItem("heroinsyringe").getItem().clone(); + ItemMeta im = is.getItemMeta(); + im.setLore(Collections.emptyList()); + im.setDisplayName(Utils.f("&a&lSell Drugs")); + is.setItemMeta(im); + return new ClickableItem(CATEGORY_SLOTS[counter++], is, + ((player, clickType) -> { + player.closeInventory(); + Vice.getTrashCanManager().openTrashCan(player); + })); + } + case BUY_MACHINES: { + ItemStack is = new ItemStack(Material.FURNACE); + ItemMeta im = is.getItemMeta(); + im.setDisplayName(Utils.f("&e&lBuy Machines")); + is.setItemMeta(im); + return new ClickableItem(CATEGORY_SLOTS[counter++], is, + ((player, clickType) -> new MachineMenu().openInventory(player))); + } + case BUY_SUPPLIES: + return new ClickableItem(CATEGORY_SLOTS[counter++], Utils.createItem(Material.DIAMOND_PICKAXE, "&b&lBuy Supplies"), + ((player, clickType) -> new SuppliesMenu().openInventory(player))); + case BUY_GUNS: { + ItemStack is = Vice.getItemManager().getItem("smg").getItem(); + ItemMeta im = is.getItemMeta(); + im.setDisplayName(Utils.f("&a&lBuy Guns")); + im.setLore(Collections.emptyList()); + is.setItemMeta(im); + return new ClickableItem(CATEGORY_SLOTS[counter++], + is, + ((player, clickType) -> new GunCategoryMenu().openInventory(player))); + } + case BUY_BLOCKS: + return new ClickableItem(CATEGORY_SLOTS[counter++], + Utils.createItem(Material.SAND, "&c&lBuy Blocks"), + ((player, clickType) -> new BlocksMenu().openInventory(player))); + } + return null; + } + + /** + * + * + * @apiNote Supplies menus + * + */ + private class SuppliesMenu extends CoreMenu { + + private int counter = 0; + private final int page; + + protected SuppliesMenu(){ + this(1); + } + + protected SuppliesMenu(int page) { + super(6, Utils.f("&b&lBuy Supplies"), CoreMenuFlag.PHONE_LAYOUT); + this.page = page; + + + LinkedList<GameItem> filtered = Vice.getItemManager().getShopItems().stream().filter(gi -> gi.getShopCategory().equals("SUPPLIES")).collect(Collectors.toCollection(LinkedList::new)); + + if(page==1) { + addItem(generateNextPageSelector()); + addItem(generateBackwardSelector(new CategoryMenu())); + } + else if(page*20>=filtered.size()) + addItem(generatePrevPageSelector()); + else { + addItem(generatePrevPageSelector()); + addItem(generateNextPageSelector()); + } + + int beginningIndex = page * 20 - 20; + Set<GameItem> subset; + if (beginningIndex + 20 <= filtered.size()) + subset = filtered.stream().skip(beginningIndex).limit(20).collect(Collectors.toSet()); + else if(beginningIndex <= filtered.size() && filtered.size()-beginningIndex < 20) + subset = filtered.stream().skip(beginningIndex).limit(filtered.size()-beginningIndex).collect(Collectors.toSet()); + else + subset = new HashSet<>(); + + for(GameItem gi : subset) { + if(!gi.canSell()) { + Core.error("[SuppliesMenu] " + gi.getName() + " is in category supplies, but has no sell price."); + continue; + } + ItemStack disp = gi.getItem().clone(); + ItemMeta im = disp.getItemMeta(); + im.setLore(Arrays.asList(Utils.f("&6&lBuy x&b&l1 &6&lItem &8(&6Left Click&8): &6$&a" + gi.getSellPrice()), Utils.f("&6&lBuy x&b&l64 &6&lItems &8(&6Right Click&8): &6$&a" + gi.getSellPrice()*64))); + disp.setItemMeta(im); + + addItem(new ClickableItem(ITEM_SPOTS[counter++], disp, ((player, clickType) -> { + ViceUser user = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + switch (clickType) { + case LEFT: + case SHIFT_LEFT: + if(!user.hasMoney(gi.getSellPrice())){ + player.sendMessage(Lang.SHOP.f("&cYou do not have enough money for this item!")); + return; + } + user.takeMoney(gi.getSellPrice()); + Utils.giveItems(player, gi.getItem()); + break; + case RIGHT: + case SHIFT_RIGHT: + if(!user.hasMoney(gi.getSellPrice()*64)){ + player.sendMessage(Lang.SHOP.f("&cYou do not have enough money for these items!")); + return; + } + user.takeMoney(gi.getSellPrice()*64); + Utils.giveItems(player, gi.getItem(64)); + break; + } + }))); + } + } + + /** + * @return a clickable item that will send player to next page of same category. + */ + private ClickableItem generateNextPageSelector(){ + ItemStack is = new ItemStack(Material.SKULL_ITEM, 1, (short)3); + SkullMeta im = (SkullMeta)is.getItemMeta(); + im.setOwner("MHF_ArrowRight"); + im.setDisplayName(Utils.f("&cTo Page: &a" + (page+1))); + is.setItemMeta(im); + return new ClickableItem(52, is, ((player, clickType) -> { + new SuppliesMenu(page+1).openInventory(player); + })); + } + + /** + * @return a clickable item that will send player to previous page of same category. + */ + private ClickableItem generatePrevPageSelector(){ + ItemStack is = new ItemStack(Material.SKULL_ITEM, 1, (short)3); + SkullMeta im = (SkullMeta)is.getItemMeta(); + im.setOwner("MHF_ArrowLeft"); + im.setDisplayName(Utils.f("&cTo Page: &a" + (page-1))); + is.setItemMeta(im); + return new ClickableItem(47, is, ((player, clickType) -> { + new SuppliesMenu(page-1).openInventory(player); + })); + } + } + + /** + * + * + * @apiNote Machine buy menu + * + */ + + private class MachineMenu extends CoreMenu { + + private int counter = 0; + + public MachineMenu() { + super(6, Utils.f("&e&lBuy Machines"), CoreMenuFlag.PHONE_LAYOUT); + addItem(generateBackwardSelector(new CategoryMenu())); + + for(BaseMachine machine : Vice.getInstance().getMachineManager().getStatues()) { + GameItem item = Vice.getItemManager().getItem(machine.getName().replace(" ", "")); + ItemStack is = item.getItem(); + ItemMeta im = is.getItemMeta(); + im.setLore(Collections.singletonList(Utils.f("&6&lPrice: &6$&a" + item.getSellPrice()))); + is.setItemMeta(im); + addItem(new ClickableItem(ITEM_SPOTS[counter++], is, ((player, clickType) -> { + ViceUser user = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + if(!user.hasMoney(item.getSellPrice())){ + player.sendMessage(Lang.SHOP.f("&cYou do not have enough money for this item!")); + return; + } + user.takeMoney(item.getSellPrice()); + Utils.giveItems(player, item.getItem()); + }))); + } + } + + + } + + /** + * + * + * @apiNote Gun Menus + * + */ + + private class GunCategoryMenu extends CoreMenu { + private final int[] CATEGORY_SLOTS = new int[]{20,21,22,23,24,29,30,31,32,33}; + private int counter = 0; + + protected GunCategoryMenu() { + super(6, Utils.f("&c&lChoose Gun ategory"), CoreMenuFlag.PHONE_LAYOUT); + addItem(getWeaponCategoryPlaceholder(WeaponType.THROWABLE, Utils.f("&7&oRemember: Don't miss!"))); + addItem(getWeaponCategoryPlaceholder(WeaponType.MELEE, Utils.f("&7&oFor when you need to get close and personal."))); + addItem(getWeaponCategoryPlaceholder(WeaponType.PISTOL, Utils.f("&7&oA basic gun; point, shoot, kill."))); + addItem(getWeaponCategoryPlaceholder(WeaponType.LMG, Utils.f("&7&oSlow and steady wins the race... so do a lot of bullets."))); + addItem(getWeaponCategoryPlaceholder(WeaponType.SMG, Utils.f("&7&oFor when you need to get close and personal."))); + addItem(getWeaponCategoryPlaceholder(WeaponType.SHOTGUN, Utils.f("&7&oDamage? Check! Spread? Check!"), Utils.f("&7&oOverall coolness factor? What more could you want!?"))); + addItem(getWeaponCategoryPlaceholder(WeaponType.ASSAULT, Utils.f("&7&oNow we're talking!"))); + addItem(getWeaponCategoryPlaceholder(WeaponType.LAUNCHER, Utils.f("&7&oWhen you're too lazy to throw..."))); + addItem(getWeaponCategoryPlaceholder(WeaponType.SNIPER, Utils.f("&7&oNot all battles are fought at close range."))); + addItem(getWeaponCategoryPlaceholder(WeaponType.SPECIAL, Utils.f("&7&oRespect comes in many forms..."), Utils.f("&7&oespecially that of a giant death machine!"))); + + addItem(generateBackwardSelector(new CategoryMenu())); + + } + + /** + * @param type the type of weapon that you want to generate a placeholder for + * @param lore the flavor lore that you want to add to the placeholder itemstack. + * @return a clickable item that when clicked, will open the specified weapon subcategory to the player. + */ + private ClickableItem getWeaponCategoryPlaceholder(WeaponType type, String... lore){ + ServerUtil.debug("Trying to load weapon category: " + type); + Optional<Weapon<?>> optWeapon = type == WeaponType.SPECIAL ? Vice.getWastedGuns().getWeaponManager().getWeapon("minigun") : Vice.getWastedGuns().getWeaponManager().getRegisteredWeapons().stream().filter(w -> w.getWeaponType()==type && Vice.getItemManager().getItemFromWeapon(w.getCompactName())!=null && Vice.getItemManager().getItemFromWeapon(w.getCompactName()).canSell()).findFirst(); + ItemStack is = optWeapon.get().getBaseItemStack().clone(); + ItemMeta im = is.getItemMeta(); + im.setDisplayName(Utils.f("&a&l" + type.toString())); + im.setLore(Arrays.asList(lore)); + is.setItemMeta(im); + return new ClickableItem(CATEGORY_SLOTS[counter++], is, ((player, clickType) -> { + new GunSubCategoryMenu(type).openInventory(player); + }), false); + } + } + + private class GunSubCategoryMenu extends CoreMenu { + + protected GunSubCategoryMenu(WeaponType type) { + super(6, Utils.f("&9&lPurchase " + type.toString()), CoreMenuFlag.PHONE_LAYOUT); + addItem(generateBackwardSelector(new GunCategoryMenu())); + + int counter = 0; + Set<Weapon<?>> filtered = GTMGuns.getInstance().getWeaponManager().getRegisteredWeapons().stream().filter(w ->{ + if(w==null) + return false; + if(DISABLED.contains(w.getName().toLowerCase())) + return false; + return w.getWeaponType()==type || (type==WeaponType.SPECIAL && (w.getWeaponType()!=WeaponType.MELEE && w.getWeaponType()!=WeaponType.ASSAULT && w.getWeaponType()!=WeaponType.LAUNCHER && w.getWeaponType()!=WeaponType.THROWABLE && w.getWeaponType()!= WeaponType.SMG && w.getWeaponType()!=WeaponType.LMG && w.getWeaponType()!=WeaponType.SHOTGUN && w.getWeaponType()!=WeaponType.PISTOL && w.getWeaponType()!=WeaponType.SNIPER)); + }).collect(Collectors.toSet()); + + for(Weapon<?> w : filtered){ + GameItem item = Vice.getItemManager().getItemFromWeapon(w.getCompactName()); + if(item==null) { + Core.error("[GunSubCategory] Unable to load gameitem from weapon: " + w.getCompactName()); + continue; + } + if(!item.canSell()) { + ServerUtil.debug("[GunSubCategory] Unable to find sell price for weapon: " + w.getCompactName() + " is it suppose to be like that?"); + continue; + } + ItemStack is = item.getItem(); + ItemMeta im = is.getItemMeta(); + im.setDisplayName(Utils.f("&6" + w.getName())); + List<String> lore = new ArrayList<>(); + lore.add(Utils.f("&6&lBuy Weapon &8(&6Left Click&8)&6: $&a" + item.getSellPrice())); + + GameItem ammoItem = null; + if(type!=WeaponType.THROWABLE && type!=WeaponType.MELEE && w.getAmmoType()!= AmmoType.NONE) { + if(type==WeaponType.LMG) + ammoItem = net.grandtheftmc.vice.items.AmmoType.MG.getGameItem();//because of how the naming of the wastedguns / gtmguns is :( + else + ammoItem = net.grandtheftmc.vice.items.AmmoType.getAmmoType(w.getAmmoType().toString()).getGameItem(); + if(ammoItem==null) { + Core.error("[GunSubCategory] Unable to load ammo from string: " + w.getAmmoType() + " for weapon: " + w.getName()); + return; + } + + lore.add(Utils.f("&6&lBuy x&b&l" + AMMO_MULTIPLIERS.get(w.getAmmoType()) + "&6&l Ammo &8(&6Right Click&8)&6: $&a" + (ammoItem.getSellPrice()*AMMO_MULTIPLIERS.get(w.getAmmoType())))); + } + im.setLore(lore); + is.setItemMeta(im); + + final GameItem finalAmmoItem = ammoItem; + addItem(new ClickableItem(ITEM_SPOTS[counter], is, (player, clickType) -> { + ViceUser user = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + switch (clickType) { + case LEFT: + case SHIFT_LEFT: + if(!user.hasMoney(item.getSellPrice())){ + player.sendMessage(Lang.SHOP.f("&cYou do not have enough money for this item!")); + return; + } + user.takeMoney(item.getSellPrice()); + Utils.giveItems(player, item.getItem()); + break; + case RIGHT: + case SHIFT_RIGHT: + if(finalAmmoItem ==null) + return; + if(!user.hasMoney(finalAmmoItem.getSellPrice()*AMMO_MULTIPLIERS.get(w.getAmmoType()))){ + player.sendMessage(Lang.SHOP.f("&cYou do not have enough money for this item!")); + return; + } + user.takeMoney(finalAmmoItem.getSellPrice()*AMMO_MULTIPLIERS.get(w.getAmmoType())); + user.addAmmo(net.grandtheftmc.vice.items.AmmoType.getAmmoType(w.getAmmoType().toString()), AMMO_MULTIPLIERS.get(w.getAmmoType())); + player.sendMessage(Lang.AMMO_ADD.f(AMMO_MULTIPLIERS.get(w.getAmmoType()) + "&7 " + w.getAmmoType().toString())); + break; + } + }, false)); + counter++; + } + } + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/npcs/shopnpc/ShopNPC.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/npcs/shopnpc/ShopNPC.java new file mode 100644 index 0000000..251243c --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/npcs/shopnpc/ShopNPC.java @@ -0,0 +1,40 @@ +package net.grandtheftmc.vice.users.npcs.shopnpc; + +import net.citizensnpcs.api.event.NPCLeftClickEvent; +import net.citizensnpcs.api.event.NPCRightClickEvent; +import net.grandtheftmc.core.npc.CoreNPC; +import net.grandtheftmc.core.npc.interfaces.ClickableNPC; +import org.bukkit.Location; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; + +/** + * Created by Timothy Lampen on 1/24/2018. + */ +public class ShopNPC extends CoreNPC implements ClickableNPC { + + /** + * @apiNote the constructor for the actual npc. + */ + public ShopNPC(Location loc) { + super(loc, EntityType.PLAYER, "&9&lGary McNaggins", "&7&oBuy the best guns and ammo here!"); + } + + @Override + protected void generateNewNPC() { + setLookClose(true); + setSkin("eyJ0aW1lc3RhbXAiOjE1MDc2MTM5NzI2NDUsInByb2ZpbGVJZCI6ImUzYjQ0NWM4NDdmNTQ4ZmI4YzhmYTNmMWY3ZWZiYThlIiwicHJvZmlsZU5hbWUiOiJNaW5pRGlnZ2VyVGVzdCIsInNpZ25hdHVyZVJlcXVpcmVkIjp0cnVlLCJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZGUyYjUwYzI4NDQ1YmQyOWE2OGRmZTIyM2M0YzlmZDYyZTYyOWNkNWU1ZDdjMTc3NzIwNmU4YjRkNjMxIn19fQ==", "gza3eHED3BMmxRjZmDDUQQliH10Q4e8U5uKNv0RaGfOKdPOxMToH2rqSpyNeS+odXQvAq6cDZulKk5LZgcs89kpv+Jkb3sfWdUb6HnJvqkeA+4iTw3n9BxRZpoC0lyBmiJSQPlSwywgjmd9cybGPtgX3+WpbExRDYy90X8ii3iN9dlFlNWFiInNZjBUUjslcqnD8VEkItonJwNbPbXkgvHu0qmiBon6bWmnI81cO0DekrxOGAbQQynNosnGVbV7oGTAtN87G9zM7McNvMXK+1BJqAxdqad3U2Jfnu3PHDZ1pDCJIA+5yQiiTblQPzYx9Fp73E2NpS51239/P5B0bWOa8MWGK2fKCznxRy/lZTd/3Ewojxu9guWann0ALLeYyvXA/FDY1vY6clRF50JyhgBR6Tf58lOF8kkq964gdpYlhtldI1ZWf8jn/inK//b3rNmqu046oKQLuhYjxVNoV4lrzzb+pzjjKx2/iBXqzxnWTjrTLZv6n6jLS9aFghryaLbUXc4IETj+MsZ5Z9WdPCG02V3f3Z+5aFZfMg2zkj1qQxDVhrdJr/87lE23ZupYDV1szocx39JF1gtwbKhTugVKlDV4UQZHokFdcFRtMLSpX7zJwNLiVK/+aMN1YbGQzdwII9CFXN2DtgawzTnQQafEBwNiyp3GAcPTE9VqffFY="); + } + + @Override + public void onRightClick(NPCRightClickEvent event) { + Player player = event.getClicker(); + new CategoryMenu().openInventory(player); + } + + @Override + public void onLeftClick(NPCLeftClickEvent event) { + Player player = event.getClicker(); + new CategoryMenu().openInventory(player); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/storage/BooleanStorageType.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/storage/BooleanStorageType.java new file mode 100644 index 0000000..f6f18ff --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/storage/BooleanStorageType.java @@ -0,0 +1,31 @@ +package net.grandtheftmc.vice.users.storage; + +/** + * Created by Timothy Lampen on 8/3/2017. + */ +public enum BooleanStorageType { + SEND_AWAY(false), + TPA_HERE(false), + BACK_WITHDRAWING(false), + BANK_DEPOSITING(false), + BUYING_LOTTERY_TICKETS(false), + ADDING_LOOTCRATE(false), + REMOVING_LOOTCRATE(false), + CHECKING_LOOTCRATE(false), + RESTOCKING_LOOTCRATE(false), + BRIBING(false), + KICKED(false), + HAS_UPDATED(false), + BACKPACK_OPEN(false), + USED_LOGOUT(false); + + + private final boolean defaultValue; + BooleanStorageType(boolean defaultValue){ + this.defaultValue = defaultValue; + } + + public boolean getDefaultValue(){ + return defaultValue; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/storage/IntStorageType.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/storage/IntStorageType.java new file mode 100644 index 0000000..74f9e1d --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/storage/IntStorageType.java @@ -0,0 +1,17 @@ +package net.grandtheftmc.vice.users.storage; + +/** + * Created by Timothy Lampen on 8/3/2017. + */ +public enum IntStorageType { + KILLS, + DEATHS, + KILL_STREAK, + BONDS, + VEHICLE_TASK_ID, + VEHICLE_TIMER, + TAXI_TASK_ID, + TAXI_PRICE, + TAXI_TIMER, + JAIL_TIMER +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/storage/LongStorageType.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/storage/LongStorageType.java new file mode 100644 index 0000000..577f4d2 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/users/storage/LongStorageType.java @@ -0,0 +1,16 @@ +package net.grandtheftmc.vice.users.storage; + +/** + * Created by Timothy Lampen on 8/3/2017. + */ +public enum LongStorageType { + LAST_COP_SALARY, + PLAY_TIME, + JOIN_TIME, + LAST_TPA_REQUEST, + LAST_TELEPORT, + LAST_BACKUP_REQUEST, + LAST_COP_SPAWN, + LAST_TAG, + LAST_JETPACK_CANCEL +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/CancellationDetector.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/CancellationDetector.java new file mode 100644 index 0000000..506deb5 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/CancellationDetector.java @@ -0,0 +1,217 @@ +package net.grandtheftmc.vice.utils; + +import com.google.common.collect.Lists; +import org.bukkit.event.*; +import org.bukkit.plugin.IllegalPluginAccessException; +import org.bukkit.plugin.Plugin; +import org.bukkit.plugin.RegisteredListener; + +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.EnumMap; +import java.util.Iterator; +import java.util.List; + +/** + * Created by Luke Bingham on 09/08/2017. + */ +public class CancellationDetector<TEvent extends Event> { + + public interface CancelListener<TEvent extends Event> { + public void onCancelled(Plugin plugin, TEvent event); + } + + private final Class<TEvent> eventClazz; + private final List<CancelListener<TEvent>> listeners = Lists.newArrayList(); + + // For reverting the detector + private EnumMap<EventPriority, ArrayList<RegisteredListener>> backup; + + public CancellationDetector(Class<TEvent> eventClazz) { + this.eventClazz = eventClazz; +// injectProxy(); + } + + public void addListener(CancelListener<TEvent> listener) { + listeners.add(listener); + } + + public void removeListener(CancelListener<Event> listener) { + listeners.remove(listener); + } + + @SuppressWarnings("unchecked") + private EnumMap<EventPriority, ArrayList<RegisteredListener>> getSlots(HandlerList list) { + try { + return (EnumMap<EventPriority, ArrayList<RegisteredListener>>) getSlotsField(list).get(list); + } catch (Exception e) { + throw new RuntimeException("Unable to retrieve slots.", e); + } + } + + private Field getSlotsField(HandlerList list) { + if (list == null) + throw new IllegalStateException("Detected a NULL handler list."); + + try { + Field slotField = list.getClass().getDeclaredField("handlerslots"); + + // Get our slot map + slotField.setAccessible(true); + return slotField; + } catch (Exception e) { + throw new IllegalStateException("Unable to intercept 'handlerslot' in " + list.getClass(), e); + } + } + + private void injectProxy() { + HandlerList list = getHandlerList(eventClazz); + EnumMap<EventPriority, ArrayList<RegisteredListener>> slots = getSlots(list); + + // Keep a copy of this map + backup = slots.clone(); + + synchronized (list) { + for (EventPriority p : slots.keySet().toArray(new EventPriority[0])) { + final EventPriority priority = p; + final ArrayList<RegisteredListener> proxyList = new ArrayList<RegisteredListener>() { + private static final long serialVersionUID = 7869505892922082581L; + + @Override + public boolean add(RegisteredListener e) { + super.add(injectRegisteredListener(e)); + return backup.get(priority).add(e); + } + + @Override + public boolean remove(Object listener) { + // Remove this listener + for (Iterator<RegisteredListener> it = iterator(); it.hasNext(); ) { + DelegatedRegisteredListener delegated = (DelegatedRegisteredListener) it.next(); + if (delegated.delegate == listener) { + it.remove(); + break; + } + } + return backup.get(priority).remove(listener); + } + }; + slots.put(priority, proxyList); + + for (RegisteredListener listener : backup.get(priority)) { + proxyList.add(listener); + } + } + } + } + + // The core of our magic + private RegisteredListener injectRegisteredListener(final RegisteredListener listener) { + return new DelegatedRegisteredListener(listener) { + @SuppressWarnings("unchecked") + @Override + public void callEvent(Event event) throws EventException { + if (event instanceof Cancellable) { + boolean prior = getCancelState(event); + + listener.callEvent(event); + + // See if this plugin cancelled the event + if (!prior && getCancelState(event)) { + invokeCancelled(getPlugin(), (TEvent) event); + } + } else { + listener.callEvent(event); + } + } + }; + } + + private void invokeCancelled(Plugin plugin, TEvent event) { + for (CancelListener<TEvent> listener : listeners) { + listener.onCancelled(plugin, event); + } + } + + private boolean getCancelState(Event event) { + return ((Cancellable) event).isCancelled(); + } + + public void close() { + if (backup != null) { + try { + HandlerList list = getHandlerList(eventClazz); + getSlotsField(list).set(list, backup); + + Field handlers = list.getClass().getDeclaredField("handlers"); + handlers.setAccessible(true); + handlers.set(list, null); + + } catch (Exception e) { + throw new RuntimeException("Unable to clean up handler list.", e); + } + + backup = null; + } + } + + /** + * Retrieve the handler list associated with the given class. + * + * @param clazz - given event class. + * @return Associated handler list. + */ + private static HandlerList getHandlerList(Class<? extends Event> clazz) { + // Class must have Event as its superclass + while (clazz.getSuperclass() != null && Event.class.isAssignableFrom(clazz.getSuperclass())) { + try { + Method method = clazz.getDeclaredMethod("getHandlerList"); + method.setAccessible(true); + return (HandlerList) method.invoke(null); + } catch (NoSuchMethodException e) { + // Keep on searching + clazz = clazz.getSuperclass().asSubclass(Event.class); + } catch (Exception e) { + throw new IllegalPluginAccessException(e.getMessage()); + } + } + throw new IllegalPluginAccessException("Unable to find handler list for event " + + clazz.getName()); + } + + /** + * Represents a registered listener that delegates to a given listener. + * + * @author Kristian + */ + private static class DelegatedRegisteredListener extends RegisteredListener { + private final RegisteredListener delegate; + + public DelegatedRegisteredListener(RegisteredListener delegate) { + // These values will be ignored however' + super(delegate.getListener(), null, delegate.getPriority(), delegate.getPlugin(), false); + this.delegate = delegate; + } + + public void callEvent(Event event) throws EventException { + delegate.callEvent(event); + } + + public Listener getListener() { + return delegate.getListener(); + } + + public Plugin getPlugin() { + return delegate.getPlugin(); + } + + public EventPriority getPriority() { + return delegate.getPriority(); + } + + public boolean isIgnoringCancelled() { + return delegate.isIgnoringCancelled(); + } + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/DurabilityUtil.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/DurabilityUtil.java new file mode 100644 index 0000000..5bcf0a3 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/DurabilityUtil.java @@ -0,0 +1,190 @@ +package net.grandtheftmc.vice.utils; + +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.durability.DurabilityItems; +import net.minecraft.server.v1_12_R1.NBTTagInt; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Optional; + +/** + * Created by ThatAbstractWolf on 2017-08-03. + */ +public class DurabilityUtil { + + public static ItemStack setDurability(ItemStack item, int durability) { + return NBTUtil.setNBTTag(item, "customDurability", new NBTTagInt(durability)); + } + + public static int getDurability(ItemStack item) { + return (NBTUtil.hasNBTTag(item, "customDurability") ? Integer.parseInt(NBTUtil.getNBTTag(item, "customDurability").toString()) : -1); + } + + public static void setDurabilityOnArmour(Player player, ItemStack item, int amount) { + + if (item == null || item.getType().equals(Material.AIR)) { + return; + } + + if (getDurabilityItem(item).isPresent()) { + + DurabilityItems durabilityItems = getDurabilityItem(item).get(); + + int armourSlot = getArmourSlot(item); + + if (amount > 0) { + + ItemStack newArmour = DurabilityUtil.setDurability(item, amount); + + if (newArmour != null) { + + setDurabilityLore(newArmour, amount, durabilityItems); + + player.getInventory().remove(item); + + switch (armourSlot) { + + case 0: + player.getInventory().setBoots(newArmour); + break; + case 1: + player.getInventory().setLeggings(newArmour); + break; + case 2: + player.getInventory().setChestplate(newArmour); + break; + case 3: + player.getInventory().setHelmet(newArmour); + break; + } + } + } else { + + switch (armourSlot) { + + case 0: + player.getInventory().setBoots(null); + break; + case 1: + player.getInventory().setLeggings(null); + break; + case 2: + player.getInventory().setChestplate(null); + break; + case 3: + player.getInventory().setHelmet(null); + break; + } + } + } + } + + public static void setDurabilityLore(ItemStack item, int amount, DurabilityItems durabilityItems) { + + ItemMeta durabilityMeta = item.getItemMeta(); + + List<String> lore = new ArrayList<>(); + List<String> cachedLore = (item.getItemMeta().getLore() == null ? new ArrayList<>() : item.getItemMeta().getLore()); + + if (durabilityMeta.getLore() != null) { + durabilityMeta.getLore().clear(); + } + + lore.add(ChatColor.translateAlternateColorCodes('&', getDurabilityPercentage(amount, durabilityItems.getMaximumDurability()) + "&f &7[&a" + amount + "&7/&a" + durabilityItems.getMaximumDurability() + "&7]")); + + try { + for (int i = (cachedLore.get(0).contains("-") ? 1 : 0); i < cachedLore.size(); i++) { + lore.add(ChatColor.translateAlternateColorCodes('&', cachedLore.get(i))); + } + } catch (IndexOutOfBoundsException e) { /* Ignored */ } + + durabilityMeta.setLore(lore); + item.setItemMeta(durabilityMeta); + } + + public static void decreaseDurability(Player player, ItemStack item, int amount) { + + if (item == null) { + return; + } + + Optional<DurabilityItems> items = getDurabilityItem(item); + + if (items.isPresent()) { + + if (DurabilityUtil.getDurability(item) == -1) { + setDurabilityOnArmour(player, item, items.get().getMaximumDurability()); + } else { + int newDuration = DurabilityUtil.getDurability(item) - amount; + setDurabilityOnArmour(player, item, newDuration); + } + } + } + + private static int getArmourSlot(ItemStack item) { + + if (item.getType().name().contains("HELMET")) { + return 3; + } else if (item.getType().name().contains("CHESTPLATE")) { + return 2; + } else if (item.getType().name().contains("LEGGINGS")) { + return 1; + } else if (item.getType().name().contains("BOOTS")) { + return 0; + } + + return -1; + } + + public static Optional<DurabilityItems> getDurabilityItem(ItemStack item) { + + for (DurabilityItems items : DurabilityItems.values()) { + + if (item != null && item.getType().equals(DurabilityItems.JETPACK.getMaterial()) && item.getItemMeta() != null && items.getDisplayName() != null && item.getItemMeta().getDisplayName().contains(items.getDisplayName())) { + return Optional.of(DurabilityItems.JETPACK); + } + + if (items.getMaterial().equals(item.getType())) { + return Optional.of(items); + } + } + + return Optional.empty(); + } + + private static String getDurabilityPercentage(int currentDurability, int maxDurability) { + + int length = 18; + String bar = ""; + + for(int x = 1; x < (length + 1); x++) { + if (x * (maxDurability / length) <= currentDurability) + bar += getColour(currentDurability, maxDurability).toString() + ChatColor.STRIKETHROUGH + "-"; + else + bar += ChatColor.GRAY.toString() + ChatColor.STRIKETHROUGH + "-"; + } + + return bar; + } + + private static ChatColor getColour(int currentDurability, int maxDurability) { + + int parts = (maxDurability / 3); + + if (currentDurability < parts) { + return ChatColor.RED; + } else if (currentDurability > parts && currentDurability < (parts * 2)) { + return ChatColor.YELLOW; + } else { + return ChatColor.GREEN; + } + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/IconUtil.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/IconUtil.java new file mode 100644 index 0000000..78aa374 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/IconUtil.java @@ -0,0 +1,14 @@ +package net.grandtheftmc.vice.utils; + +import net.grandtheftmc.core.util.C; + +public class IconUtil { + + public static String r(char icon, int amount) { + return C.RESET + icon + C.GRAY + "x" + amount + C.RESET; + } + + public static String r(char icon) { + return C.RESET + icon + C.GRAY + "x1" + C.RESET; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/ItemStackUtil.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/ItemStackUtil.java new file mode 100644 index 0000000..3850a9d --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/ItemStackUtil.java @@ -0,0 +1,103 @@ +package net.grandtheftmc.vice.utils; + +import net.grandtheftmc.core.util.ItemStackManager; +import net.minecraft.server.v1_12_R1.NBTBase; +import net.minecraft.server.v1_12_R1.NBTTagCompound; +import net.minecraft.server.v1_12_R1.NBTTagInt; +import org.bukkit.Material; +import org.bukkit.craftbukkit.v1_12_R1.inventory.CraftItemStack; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import java.util.List; + +/** + * Created by Luke Bingham on 06/08/2017. + */ +public class ItemStackUtil { + + public static ItemStack makeStackable(org.bukkit.inventory.ItemStack itemStack, int stacksize) { + if(itemStack == null || itemStack.getType() == Material.AIR) return itemStack; + + ItemStackManager.STACKABLES.put(itemStack.getType(), stacksize); + + net.minecraft.server.v1_12_R1.ItemStack stack = org.bukkit.craftbukkit.v1_12_R1.inventory.CraftItemStack.asNMSCopy(itemStack); + stack.getItem().d(stacksize); + itemStack = org.bukkit.craftbukkit.v1_12_R1.inventory.CraftItemStack.asBukkitCopy(stack); + + return itemStack; + } + + public static ItemStack removeStackable(org.bukkit.inventory.ItemStack itemStack) { + if(itemStack == null || itemStack.getType() == Material.AIR) return itemStack; + + net.minecraft.server.v1_12_R1.ItemStack stack = org.bukkit.craftbukkit.v1_12_R1.inventory.CraftItemStack.asNMSCopy(itemStack); + stack.getItem().d(1); + itemStack = org.bukkit.craftbukkit.v1_12_R1.inventory.CraftItemStack.asBukkitCopy(stack); + + return itemStack; + } + + /** + * Creates and returns an ItemStack object with the given Material/Name + * @param material + * @param name + * @return + */ + public static ItemStack createWithName(Material material, String name) { + ItemStack item = new ItemStack(material); + ItemMeta meta = item.getItemMeta(); + + meta.setDisplayName(name); + + item.setItemMeta(meta); + + return item; + } + + /** + * Creates and returns an ItemStack object with the given Material/Name/Lore + * @param material + * @param name + * @param lore + * @return + */ + public static ItemStack createWithNameAndLore(Material material, String name, List<String> lore) { + ItemStack item = new ItemStack(material); + ItemMeta meta = item.getItemMeta(); + + meta.setDisplayName(name); + meta.setLore(lore); + + item.setItemMeta(meta); + + return item; + } + + public static ItemStack addTag(ItemStack itemStack, String key, int value) { + net.minecraft.server.v1_12_R1.ItemStack nmsItem = CraftItemStack.asNMSCopy(itemStack); + NBTTagCompound compound = nmsItem.hasTag() ? nmsItem.getTag() : new NBTTagCompound(); + if (compound == null) compound = new NBTTagCompound(); + + compound.set(key, new NBTTagInt(value)); + nmsItem.setTag(compound); + nmsItem.save(compound); + + return CraftItemStack.asBukkitCopy(nmsItem); + } + + public static boolean hasTag(ItemStack itemStack, String key) { + net.minecraft.server.v1_12_R1.ItemStack nmsItem = CraftItemStack.asNMSCopy(itemStack); + return nmsItem.hasTag() && nmsItem.getTag() != null && nmsItem.getTag().hasKey(key); + } + + private static boolean hasTag(net.minecraft.server.v1_12_R1.ItemStack nmsItem, String key) { + return nmsItem.hasTag() && nmsItem.getTag() != null && nmsItem.getTag().hasKey(key); + } + + public static int getIntTag(ItemStack itemStack, String key) { + net.minecraft.server.v1_12_R1.ItemStack nmsItem = CraftItemStack.asNMSCopy(itemStack); + NBTTagCompound tag = nmsItem.getTag(); + return Integer.parseInt(tag.get(key).toString()); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/LocationUtil.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/LocationUtil.java new file mode 100644 index 0000000..c2b7f15 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/LocationUtil.java @@ -0,0 +1,204 @@ +package net.grandtheftmc.vice.utils; + +import org.bukkit.*; +import org.bukkit.block.Block; + +import java.util.*; + +/** + * Created by Timothy Lampen on 8/20/2017. + */ +public class LocationUtil { + + public static final Set<Material> HOLLOW_MATERIALS = new HashSet<Material>(); + public static final Vector3D[] VOLUME; + public static final int RADIUS = 3; + + static + { + HOLLOW_MATERIALS.add(Material.AIR); + HOLLOW_MATERIALS.add(Material.SAPLING); + HOLLOW_MATERIALS.add(Material.POWERED_RAIL); + HOLLOW_MATERIALS.add(Material.DETECTOR_RAIL); + HOLLOW_MATERIALS.add(Material.LONG_GRASS); + HOLLOW_MATERIALS.add(Material.DEAD_BUSH); + HOLLOW_MATERIALS.add(Material.YELLOW_FLOWER); + HOLLOW_MATERIALS.add(Material.RED_ROSE); + HOLLOW_MATERIALS.add(Material.BROWN_MUSHROOM); + HOLLOW_MATERIALS.add(Material.RED_MUSHROOM); + HOLLOW_MATERIALS.add(Material.TORCH); + HOLLOW_MATERIALS.add(Material.REDSTONE_WIRE); + HOLLOW_MATERIALS.add(Material.SEEDS); + HOLLOW_MATERIALS.add(Material.SIGN_POST); + HOLLOW_MATERIALS.add(Material.WOODEN_DOOR); + HOLLOW_MATERIALS.add(Material.LADDER); + HOLLOW_MATERIALS.add(Material.RAILS); + HOLLOW_MATERIALS.add(Material.WALL_SIGN); + HOLLOW_MATERIALS.add(Material.LEVER); + HOLLOW_MATERIALS.add(Material.STONE_PLATE); + HOLLOW_MATERIALS.add(Material.IRON_DOOR_BLOCK); + HOLLOW_MATERIALS.add(Material.WOOD_PLATE); + HOLLOW_MATERIALS.add(Material.REDSTONE_TORCH_OFF); + HOLLOW_MATERIALS.add(Material.REDSTONE_TORCH_ON); + HOLLOW_MATERIALS.add(Material.STONE_BUTTON); + HOLLOW_MATERIALS.add(Material.SNOW); + HOLLOW_MATERIALS.add(Material.SUGAR_CANE_BLOCK); + HOLLOW_MATERIALS.add(Material.DIODE_BLOCK_OFF); + HOLLOW_MATERIALS.add(Material.DIODE_BLOCK_ON); + HOLLOW_MATERIALS.add(Material.PUMPKIN_STEM); + HOLLOW_MATERIALS.add(Material.MELON_STEM); + HOLLOW_MATERIALS.add(Material.VINE); + HOLLOW_MATERIALS.add(Material.FENCE_GATE); + HOLLOW_MATERIALS.add(Material.WATER_LILY); + HOLLOW_MATERIALS.add(Material.NETHER_WARTS); + HOLLOW_MATERIALS.add(Material.CARPET); + } + + public static class Vector3D + { + public int x; + public int y; + public int z; + + public Vector3D(int x, int y, int z) + { + this.x = x; + this.y = y; + this.z = z; + } + } + + static + { + List<Vector3D> pos = new ArrayList<Vector3D>(); + for (int x = -RADIUS; x <= RADIUS; x++) + { + for (int y = -RADIUS; y <= RADIUS; y++) + { + for (int z = -RADIUS; z <= RADIUS; z++) + { + pos.add(new Vector3D(x, y, z)); + } + } + } + Collections.sort( + pos, new Comparator<Vector3D>() + { + @Override + public int compare(Vector3D a, Vector3D b) + { + return (a.x * a.x + a.y * a.y + a.z * a.z) - (b.x * b.x + b.y * b.y + b.z * b.z); + } + }); + VOLUME = pos.toArray(new Vector3D[0]); + } + + + public static boolean isBlockAboveAir(final World world, final int x, final int y, final int z) + { + if (y > world.getMaxHeight()) + { + return true; + } + return HOLLOW_MATERIALS.contains(world.getBlockAt(x, y - 1, z).getType()); + } + + public static Location getSafeDestination(final Location loc) + { + final World world = loc.getWorld(); + int x = loc.getBlockX(); + int y = (int)Math.round(loc.getY()); + int z = loc.getBlockZ(); + final int origX = x; + final int origY = y; + final int origZ = z; + while (isBlockAboveAir(world, x, y, z)) + { + y -= 1; + if (y < 0) + { + y = origY; + break; + } + } + if (isBlockUnsafe(world, x, y, z)) + { + x = Math.round(loc.getX()) == origX ? x - 1 : x + 1; + z = Math.round(loc.getZ()) == origZ ? z - 1 : z + 1; + } + int i = 0; + while (isBlockUnsafe(world, x, y, z)) + { + i++; + if (i >= VOLUME.length) + { + x = origX; + y = origY + RADIUS; + z = origZ; + break; + } + x = origX + VOLUME[i].x; + y = origY + VOLUME[i].y; + z = origZ + VOLUME[i].z; + } + while (isBlockUnsafe(world, x, y, z)) + { + y += 1; + if (y >= world.getMaxHeight()) + { + x += 1; + break; + } + } + while (isBlockUnsafe(world, x, y, z)) + { + y -= 1; + if (y <= 1) + { + x += 1; + y = world.getHighestBlockYAt(x, z); + if (x - 48 > loc.getBlockX()) + { + return null; + } + } + } + return new Location(world, x + 0.5, y, z + 0.5, loc.getYaw(), loc.getPitch()); + } + + public static boolean isBlockUnsafe(final World world, final int x, final int y, final int z) + { + + if (isBlockDamaging(world, x, y, z)) + { + return true; + } + return isBlockAboveAir(world, x, y, z); + } + + public static boolean isPlayerNearby(Location loc, double radius) { + return Bukkit.getOnlinePlayers().stream().anyMatch(player -> player.getWorld().equals(loc.getWorld()) && player.getLocation().distance(loc)<=radius); + } + + public static boolean isBlockDamaging(final World world, final int x, final int y, final int z) + { + final Block below = world.getBlockAt(x, y - 1, z); + if (below.getType() == Material.LAVA || below.getType() == Material.STATIONARY_LAVA) + { + return true; + } + if (below.getType() == Material.FIRE) + { + return true; + } + if (below.getType() == Material.BED_BLOCK) + { + return true; + } + if ((!HOLLOW_MATERIALS.contains(world.getBlockAt(x, y, z).getType())) || (!HOLLOW_MATERIALS.contains(world.getBlockAt(x, y + 1, z).getType()))) + { + return true; + } + return false; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/MapUtil.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/MapUtil.java new file mode 100644 index 0000000..c05ce51 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/MapUtil.java @@ -0,0 +1,33 @@ +package net.grandtheftmc.vice.utils; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * Created by Luke Bingham on 26/08/2017. + */ +public class MapUtil { + + public static <K, V extends Comparable<? super V>> Map<K, V> sortByValue(Map<K, V> map, boolean highToLow) { + return map.entrySet() + .stream() + .sorted(highToLow ? Map.Entry.comparingByValue() : Map.Entry.comparingByValue(Collections.reverseOrder())) + .collect(Collectors.toMap( + Map.Entry::getKey, + Map.Entry::getValue, + (e1, e2) -> e1, + LinkedHashMap::new + )); + } + + public static <K, V extends Comparable<? super V>> TreeMap<K, V> sortByValue(HashMap<K, V> map) { + List<Map.Entry<K, V>> list = new LinkedList<>(map.entrySet()); + list.sort(Comparator.comparing(e -> (e.getValue()))); + TreeMap<K, V> result = new TreeMap<>(); + for (Map.Entry<K, V> entry : list) { + result.put(entry.getKey(), entry.getValue()); + } + + return result; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/NBTUtil.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/NBTUtil.java new file mode 100644 index 0000000..a7b8de1 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/NBTUtil.java @@ -0,0 +1,55 @@ +package net.grandtheftmc.vice.utils; + +import net.minecraft.server.v1_12_R1.NBTBase; +import net.minecraft.server.v1_12_R1.NBTTagCompound; +import org.bukkit.craftbukkit.v1_12_R1.inventory.CraftItemStack; +import org.bukkit.inventory.ItemStack; + +/** + * Created by ThatAbstractWolf on 2017-08-02. + */ +public class NBTUtil { + + public static ItemStack setNBTTag(ItemStack itemStack, String key, NBTBase value) { + + net.minecraft.server.v1_12_R1.ItemStack item = CraftItemStack.asNMSCopy(itemStack); + NBTTagCompound compound; + + if (item.getTag() == null) { + compound = new NBTTagCompound(); + } else { + compound = item.getTag(); + } + + compound.set(key, value); + item.setTag(compound); + + return CraftItemStack.asBukkitCopy(item); + } + + public static Object getNBTTag(ItemStack itemStack, String key) { + + net.minecraft.server.v1_12_R1.ItemStack item = CraftItemStack.asNMSCopy(itemStack); + + NBTTagCompound compound = item.getTag(); + + if(compound == null) { + return false; + } + + return compound.get(key); + } + + public static boolean hasNBTTag(ItemStack itemStack, String key) { + + net.minecraft.server.v1_12_R1.ItemStack item = CraftItemStack.asNMSCopy(itemStack); + + NBTTagCompound compound = item.getTag(); + + if(compound == null) { + return false; + } + + return compound.get(key) != null; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/ParticleColor.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/ParticleColor.java new file mode 100644 index 0000000..d675498 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/ParticleColor.java @@ -0,0 +1,206 @@ +package net.grandtheftmc.vice.utils; + + import java.util.Arrays; + import java.util.List; + +/** + * Represents a particle color + */ +@SuppressWarnings("WeakerAccess") +public class ParticleColor { + // Standard Minecraft Chat Colors + public static final ParticleColor BLACK = new ParticleColor(0, 0, 0); // 0x000000 + public static final ParticleColor DARK_BLUE = new ParticleColor(0, 0, 170); // 0x0000AA + public static final ParticleColor DARK_GREEN = new ParticleColor(0, 170, 0); // 0x00AA00 + public static final ParticleColor DARK_AQUA = new ParticleColor(0, 170, 170); // 0x00AAAA + public static final ParticleColor DARK_RED = new ParticleColor(170, 0, 0); // 0xAA0000 + public static final ParticleColor DARK_PURPLE = new ParticleColor(170, 0, 170); // 0xAA00AA + public static final ParticleColor GOLD = new ParticleColor(255, 170, 0); // 0xFFAA00 + public static final ParticleColor GRAY = new ParticleColor(170, 170, 170); // 0xAAAAAA + public static final ParticleColor DARK_GRAY = new ParticleColor(85, 85, 85); // 0x555555 + public static final ParticleColor BLUE = new ParticleColor(85, 85, 255); // 0x5555FF + public static final ParticleColor GREEN = new ParticleColor(85, 255, 85); // 0x55FF55 + public static final ParticleColor AQUA = new ParticleColor(85, 255, 255); // 0x55FFFF + public static final ParticleColor RED = new ParticleColor(255, 85, 85); // 0xFF5555 + public static final ParticleColor LIGHT_PURPLE = new ParticleColor(255, 85, 255); // 0xFF55FF + public static final ParticleColor YELLOW = new ParticleColor(255, 255, 85); // 0xFFFF55 + public static final ParticleColor WHITE = new ParticleColor(255, 255, 255); // 0xFFFFFF + + /** + * List of all pre-named colors + */ + public static final List<String> names = Arrays.asList( + "black", + "dark-blue", + "dark-green", + "dark-aqua", + "dark-red", + "dark-purple", + "gold", + "gray", + "dark-gray", + "blue", + "green", + "aqua", + "red", + "light-purple", + "yellow", + "white" + ); + + private final float red; + private final float green; + private final float blue; + + /** + * Creates a new particle color from RGB values 0 - 255 + * + * @param red Red value + * @param green Green value + * @param blue Blue value + */ + public ParticleColor(int red, int green, int blue) { + // values of 0 are changed to 0.0001 for black + // due to the way the particle packet works + this.red = (red == 0 ? 0.0001F : red) / 255; + this.green = (green == 0 ? 0.0001F : green) / 255; + this.blue = (blue == 0 ? 0.0001F : blue) / 255; + } + + /** + * Get the red value + * <p> + * The values 0.0 - 1.0 represent 0 - 255 + * + * @return Red value + */ + public float getRed() { + return red; + } + + /** + * Get the green value + * <p> + * The values 0.0 - 1.0 represent 0 - 255 + * + * @return Green value + */ + public float getGreen() { + return green; + } + + /** + * Get the blue value + * <p> + * The values 0.0 - 1.0 represent 0 - 255 + * + * @return Blue value + */ + public float getBlue() { + return blue; + } + + /** + * Get the hexadecimal color code for this color + * + * @return Hexadecimal color code + */ + public String getHex() { + return String.format("#%02x%02x%02x", (int) (red * 255), (int) (green * 255), (int) (blue * 255)).toUpperCase(); + } + + /** + * Get color by name or hex code + * <p> + * Invalid colors will default to RED + * + * @param color Color name or hex code + * @return ParticleColor + */ + public static ParticleColor getColor(String color) { + ParticleColor actual = getColorExact(color); + return actual == null ? RED : actual; + } + + /** + * Get color by name or hex code + * <p> + * Invalid colors return NULL + * + * @param color Color name or hex code + * @return ParticleColor + */ + public static ParticleColor getColorExact(String color) { + switch (color.toUpperCase()) { + case "BLACK": + return BLACK; + case "DARK_BLUE": + return DARK_BLUE; + case "DARK_GREEN": + return DARK_GREEN; + case "DARK_AQUA": + return DARK_AQUA; + case "DARK_RED": + return DARK_RED; + case "DARK_PURPLE": + return DARK_PURPLE; + case "GOLD": + return GOLD; + case "GRAY": + return GRAY; + case "DARK_GRAY": + return DARK_GRAY; + case "BLUE": + return BLUE; + case "GREEN": + return GREEN; + case "AQUA": + return AQUA; + case "RED": + return RED; + case "LIGHT_PURPLE": + return LIGHT_PURPLE; + case "YELLOW": + return YELLOW; + case "WHITE": + return WHITE; + } + + if (color.startsWith("#")) { + color = color.substring(1); // remove # sign if present + } + + ParticleColor particleColor = null; + + if (color.length() < 6) { + return null; + } + + try { + particleColor = new ParticleColor( + Integer.valueOf(color.substring(0, 2), 16), + Integer.valueOf(color.substring(2, 4), 16), + Integer.valueOf(color.substring(4, 6), 16) + ); + } catch (Exception ignore) { + } + + return particleColor; + } + + /** + * Get a human readable String representation of this color + * + * @return Human readable String representation of color + */ + @Override + public String toString() { + return "ParticleColor[red:[" + + red + + "], green:[" + + green + + "], blue:[" + + blue + + "]]"; + } +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/ReflectUtil.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/ReflectUtil.java new file mode 100644 index 0000000..81f18c6 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/ReflectUtil.java @@ -0,0 +1,56 @@ +package net.grandtheftmc.vice.utils; + +import java.lang.reflect.Field; +import java.lang.reflect.Modifier; + +public class ReflectUtil { + + public static <T> T getOfT(final Object obj, final Class<T> type) { + for (final Field field : obj.getClass().getDeclaredFields()) { + if (type.equals(field.getType())) { + return get(obj, field, type); + } + } + return null; + } + + public static <T> T get(final Object obj, final String name, final Class<T> type) { + return get(obj, obj.getClass(), name, type); + } + + public static <T> T get(final Object obj, final Class<?> clazz, final String name, final Class<T> type) { + for (final Field field : clazz.getDeclaredFields()) { + if (name.equals(field.getName())) { + return get(obj, field, type); + } + } + throw new IllegalArgumentException("No field: " + name); + } + + public static void setStatic(final String name, final Class<?> clazz, final Object val) { + try { + final Field field = clazz.getDeclaredField(name); + field.setAccessible(true); + if (Modifier.isFinal(field.getModifiers())) { + final Field modifiersField = Field.class.getDeclaredField("modifiers"); + modifiersField.setAccessible(true); + modifiersField.setInt(field, field.getModifiers() & 0xFFFFFFEF); + } + field.set(null, val); + } + catch (ReflectiveOperationException ex) { + ex.printStackTrace(); + } + } + + public static <T> T get(final Object obj, final Field field, final Class<T> type) { + try { + field.setAccessible(true); + return type.cast(field.get(obj)); + } + catch (ReflectiveOperationException ex) { + ex.printStackTrace(); + return null; + } + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/ReflectionUtil.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/ReflectionUtil.java new file mode 100644 index 0000000..747c533 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/ReflectionUtil.java @@ -0,0 +1,210 @@ +package net.grandtheftmc.vice.utils; + +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; + +import java.lang.reflect.Constructor; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.HashMap; +import java.util.Map; + +public final class ReflectionUtil { + + /* + * The server version string to location NMS & OBC classes + */ + private static String versionString; + + /* + * Cache of NMS classes that we've searched for + */ + private static final Map<String, Class<?>> LOADED_NMS_CLASSES = new HashMap<>(); + + /* + * Cache of OBS classes that we've searched for + */ + private static final Map<String, Class<?>> LOADED_OBC_CLASSES = new HashMap<>(); + + /* + * Cache of methods that we've found in particular classes + */ + private static final Map<Class<?>, Map<String, Method>> LOADED_METHODS; + + static { + LOADED_METHODS = new HashMap<>(); + } + + /* + * Cache of fields that we've found in particular classes + */ + private static final Map<Class<?>, Map<String, Field>> LOADED_FIELDS = new HashMap<>(); + + private ReflectionUtil() { + } + + /** + * Gets the version string for NMS & OBC class paths + * + * @return The version string of OBC and NMS packages + */ + public static String getVersion() { + if (versionString == null) { + String name = Bukkit.getServer().getClass().getPackage().getName(); + versionString = name.substring(name.lastIndexOf('.') + 1) + '.'; + } + + return versionString; + } + + /** + * Get an NMS Class + * + * @param nmsClassName The name of the class + * @return The class + */ + public static Class<?> getNMSClass(String nmsClassName) { + if (LOADED_NMS_CLASSES.containsKey(nmsClassName)) { + return LOADED_NMS_CLASSES.get(nmsClassName); + } + + String clazzName = "net.minecraft.server." + getVersion() + nmsClassName; + Class<?> clazz; + + try { + clazz = Class.forName(clazzName); + } catch (Throwable t) { + t.printStackTrace(); + return LOADED_NMS_CLASSES.put(nmsClassName, null); + } + + LOADED_NMS_CLASSES.put(nmsClassName, clazz); + return clazz; + } + + /** + * Get a class from the org.bukkit.craftbukkit package + * + * @param obcClassName the path to the class + * @return the found class at the specified path + */ + public static synchronized Class<?> getOBCClass(String obcClassName) { + if (LOADED_OBC_CLASSES.containsKey(obcClassName)) { + return LOADED_OBC_CLASSES.get(obcClassName); + } + + String clazzName = "org.bukkit.craftbukkit." + getVersion() + obcClassName; + Class<?> clazz; + + try { + clazz = Class.forName(clazzName); + } catch (Throwable t) { + t.printStackTrace(); + LOADED_OBC_CLASSES.put(obcClassName, null); + return null; + } + + LOADED_OBC_CLASSES.put(obcClassName, clazz); + return clazz; + } + + /** + * Get a Bukkit {@link Player} players NMS playerConnection object + * + * @param player The player + * @return The players connection + */ + public static Object getConnection(Player player) { + Method getHandleMethod = getMethod(player.getClass(), "getHandle"); + + if (getHandleMethod != null) { + try { + Object nmsPlayer = getHandleMethod.invoke(player); + Field playerConField = getField(nmsPlayer.getClass(), "playerConnection"); + return playerConField.get(nmsPlayer); + } catch (Exception e) { + e.printStackTrace(); + } + } + + return null; + } + + /** + * Get a classes constructor + * + * @param clazz The constructor class + * @param params The parameters in the constructor + * @return The constructor object + */ + public static Constructor<?> getConstructor(Class<?> clazz, Class<?>... params) { + try { + return clazz.getConstructor(params); + } catch (NoSuchMethodException e) { + return null; + } + } + + /** + * Get a method from a class that has the specific paramaters + * + * @param clazz The class we are searching + * @param methodName The name of the method + * @param params Any parameters that the method has + * @return The method with appropriate paramaters + */ + public static Method getMethod(Class<?> clazz, String methodName, Class<?>... params) { + if (!LOADED_METHODS.containsKey(clazz)) { + LOADED_METHODS.put(clazz, new HashMap<>()); + } + + Map<String, Method> methods = LOADED_METHODS.get(clazz); + + if (methods.containsKey(methodName)) { + return methods.get(methodName); + } + + try { + Method method = clazz.getMethod(methodName, params); + methods.put(methodName, method); + LOADED_METHODS.put(clazz, methods); + return method; + } catch (Exception e) { + e.printStackTrace(); + methods.put(methodName, null); + LOADED_METHODS.put(clazz, methods); + return null; + } + } + + /** + * Get a field with a particular name from a class + * + * @param clazz The class + * @param fieldName The name of the field + * @return The field object + */ + public static Field getField(Class<?> clazz, String fieldName) { + if (!LOADED_FIELDS.containsKey(clazz)) { + LOADED_FIELDS.put(clazz, new HashMap<>()); + } + + Map<String, Field> fields = LOADED_FIELDS.get(clazz); + + if (fields.containsKey(fieldName)) { + return fields.get(fieldName); + } + + try { + Field field = clazz.getField(fieldName); + fields.put(fieldName, field); + LOADED_FIELDS.put(clazz, fields); + return field; + } catch (Exception e) { + e.printStackTrace(); + fields.put(fieldName, null); + LOADED_FIELDS.put(clazz, fields); + return null; + } + } +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/Stats.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/Stats.java new file mode 100644 index 0000000..5ce1bb0 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/Stats.java @@ -0,0 +1,91 @@ +package net.grandtheftmc.vice.utils; + +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.util.TimeFormatter; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.users.ViceUser; +import org.bukkit.ChatColor; +import org.bukkit.Statistic; +import org.bukkit.entity.Player; + +import java.text.NumberFormat; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.TimeUnit; + +public class Stats { + private static Stats stats; + + public static Stats getInstance() { + if (stats == null) stats = new Stats(); + return stats; + } + + public List<String> getStats(Player target) { + List<String> stats = new ArrayList<>(); + ViceUser user = Vice.getUserManager().getLoadedUser(target.getUniqueId()); + stats.add(Utils.f(target.getDisplayName())); + stats.add(this.format("Playtime", this.getHoursPlayed(target))); + stats.add(this.format("Money", '$' + this.numberFormat(user.getMoney()))); + // TODO replace Gang with Cartel + /* if (user.getGang() != null) { + stats.add(this.format("Gang", user.getGangName())); + } + if (user.getJobMode() == JobMode.CRIMINAL && user.getWantedLevel() > 0) { + stats.add(this.format("Wanted Level", ChatColor.WHITE + ViceUtils.getWantedLevelStars(user.getWantedLevel()))); + } else if (user.getJobMode() != JobMode.CRIMINAL) { + stats.add(this.format("Job", user.getJobMode().getColoredNameBold())); + }*/ + stats.add(this.format("Kills", this.getKillAmount(target))); + stats.add(this.format("Deaths", this.getDeathAmount(target))); + stats.add(this.format("K/D", this.getKDRatio(target))); + return stats; + } + + public String getKDRatio(Player player) { + int kills = player.getStatistic(Statistic.PLAYER_KILLS); + int deaths = player.getStatistic(Statistic.DEATHS); + if (kills == 0 && deaths == 0) { + return "0.0"; + } + double kd = (double) kills / deaths; + return String.valueOf(kd).substring(0, 3); + } + + public String getDeathAmount(Player player) { + int deaths = player.getStatistic(Statistic.DEATHS); + return this.numberFormat(deaths); + } + + public String getKillAmount(Player player) { + int kills = player.getStatistic(Statistic.PLAYER_KILLS); + return this.numberFormat(kills); + } + + public long getHoursPlayedRaw(Player player) { + if (player == null) return 0; + int ticks = player.getStatistic(Statistic.PLAY_ONE_TICK); + long minutes = ticks / 20 / 60; + TimeFormatter tf = Utils.timeFormatter(TimeUnit.MINUTES, minutes); + return tf.getHours(); + } + + public String getHoursPlayed(Player player) { + int ticks = player.getStatistic(Statistic.PLAY_ONE_TICK); + long minutes = ticks / 20 / 60; + TimeFormatter tf = Utils.timeFormatter(TimeUnit.MINUTES, minutes); + return tf.getDays() + "d " + tf.getHours() + "h " + tf.getMinutes() + "m"; + } + + public String numberFormat(int num) { + return NumberFormat.getInstance().format(num); + } + + public String numberFormat(double num) { + return NumberFormat.getInstance().format(num); + } + + public String format(String key, String value) { + return ChatColor.GRAY + key + ": " + ChatColor.GREEN + value; + } +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/StringUtils.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/StringUtils.java new file mode 100644 index 0000000..2ad642e --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/StringUtils.java @@ -0,0 +1,35 @@ +package net.grandtheftmc.vice.utils; + +import org.bukkit.Material; + +/** + * Created by Timothy Lampen on 7/9/2017. + */ +public class StringUtils { + + public static String getPrettyItemString(Material material) { + return createPrettyEnumString(material.toString()); + } + + private static String createPrettyEnumString(String baseString) { + String[] substrings = baseString.split("_"); + String prettyString = ""; + int size = 1; + + for (String string : substrings) { + prettyString = prettyString.concat(getCapitalized(string)); + + if (size < substrings.length) { + prettyString = prettyString.concat(" "); + } + + size++; + } + + return prettyString; + } + + public static String getCapitalized(String target) { + return target.substring(0, 1).toUpperCase() + target.substring(1).toLowerCase(); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/TextHelper.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/TextHelper.java new file mode 100644 index 0000000..adea153 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/TextHelper.java @@ -0,0 +1,68 @@ +package net.grandtheftmc.vice.utils; + +import net.grandtheftmc.core.util.factory.Factory; +import net.md_5.bungee.api.ChatColor; +import net.md_5.bungee.api.chat.BaseComponent; +import net.md_5.bungee.api.chat.ClickEvent; +import net.md_5.bungee.api.chat.HoverEvent; +import net.md_5.bungee.api.chat.TextComponent; + +public final class TextHelper extends Factory<TextComponent> { + + public TextHelper() { + this.object = new TextComponent(); + } + + public TextHelper(TextComponent component) { + this.object = component; + } + + public TextHelper(String text) { + this(); + this.object.setText(text); + } + + public TextHelper setText(String text) { + this.object.setText(text); + return this; + } + + public TextHelper setColor(ChatColor color) { + this.object.setColor(color); + return this; + } + + public TextHelper setBold(boolean bold) { + this.object.setBold(bold); + return this; + } + + public TextHelper setItalic(boolean italic) { + this.object.setItalic(italic); + return this; + } + + public TextHelper setHover(HoverEvent event) { + this.object.setHoverEvent(event); + return this; + } + + public TextHelper setClick(ClickEvent event) { + this.object.setClickEvent(event); + return this; + } + + public TextHelper addExtra(TextHelper component) { + this.object.addExtra(component.build().duplicate()); + return this; + } + + @Override + public TextComponent build() { + return this.object; + } + + public BaseComponent[] toBaseComponent() { + return new BaseComponent[] { this.object }; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/TitleBuilder.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/TitleBuilder.java new file mode 100644 index 0000000..06db1dd --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/TitleBuilder.java @@ -0,0 +1,68 @@ +package net.grandtheftmc.vice.utils; + +import net.md_5.bungee.api.ChatColor; +import net.minecraft.server.v1_12_R1.IChatBaseComponent; +import net.minecraft.server.v1_12_R1.PacketPlayOutTitle; +import org.bukkit.craftbukkit.v1_12_R1.entity.CraftPlayer; +import org.bukkit.entity.Player; + +/** + * Created by Timothy Lampen on 2017-04-11. + */ +public class TitleBuilder { + private String bigText = "", smallText = ""; + private int fadeIn = 20, duration = 20, fadeOut = 20; + + public TitleBuilder setTitleText(String bigText) { + this.bigText = bigText; + return this; + } + + public TitleBuilder setSubTitleText(String smallText) { + this.smallText = smallText; + return this; + } + + public TitleBuilder setFadeIn(int fadeIn) { + this.fadeIn = fadeIn; + return this; + } + + public TitleBuilder setDuration(int duration) { + this.duration = duration; + return this; + } + + public TitleBuilder setFadeOut(int fadeOut) { + this.fadeOut = fadeOut; + return this; + } + + public void send(Player player){ + if(!bigText.equals("")) { + + PacketPlayOutTitle title = new PacketPlayOutTitle(PacketPlayOutTitle.EnumTitleAction.TITLE, IChatBaseComponent.ChatSerializer.a(ChatColor.translateAlternateColorCodes( + '&', + "{\"text\": \"" + bigText + "\"}")), + fadeIn, + duration, + fadeOut); + + ((CraftPlayer) player).getHandle().playerConnection.sendPacket(title); + + } + + if(!smallText.equals("")) { + + PacketPlayOutTitle title = new PacketPlayOutTitle( + PacketPlayOutTitle.EnumTitleAction.SUBTITLE, IChatBaseComponent.ChatSerializer.a(ChatColor.translateAlternateColorCodes( + '&', + "{\"text\": \"" + smallText + "\"}")), + fadeIn, + duration, + fadeOut); + + ((CraftPlayer) player).getHandle().playerConnection.sendPacket(title); + } + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/WeightedRandomCollection.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/WeightedRandomCollection.java new file mode 100644 index 0000000..7902b4d --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/WeightedRandomCollection.java @@ -0,0 +1,91 @@ +package net.grandtheftmc.vice.utils; +/* + * Copyright (C) 2013-Current Carter Gale (Ktar5) <buildfresh@gmail.com> + * + * This file is part of vice. + * + * vice can not be copied and/or distributed without the express + * permission of the aforementioned owner. + */ + +import com.google.common.collect.Lists; + +import java.util.*; +import java.util.concurrent.ThreadLocalRandom; + +/** + * A utility collection created in order to simplify the selection of a random + * element based on its corresponding relative weight + * <p> + * "Relative weight" means that, for example, each "weight" is a lottery ticket thrown + * into the "total weight". We pick a random ticket, and then return that element. Thus, + * the higher the weight, the higher the chance it will be picked. + * + * @param <E> the type of element to be placed into this collection + */ +public class WeightedRandomCollection<E> { + private final NavigableMap<Double, E> map = new TreeMap<>(); + private E last; + private double total; + + /** + * Add an items to the random collection with the + * specified weight + * + * @param weight the weight (relative to the others) + * @param result the items that corresponds to this weight + */ + public WeightedRandomCollection<E> add(double weight, E result) { + if (weight <= 0) throw new NumberFormatException("Weights cannot be less than zero. Idiot."); + this.total += weight; + this.map.put(this.total, result); + this.last = result; + return this; + } + + public E last() { + return this.last; + } + + /** + * Return a set of all the values + * + * @return a set of all the values + */ + public Set<E> values() { + return new HashSet<>(this.map.values()); + } + + /** + * Returns #amount of unique elements chosen randomly for a lottery-type system + * + * @param amount the max amount of unique elements you want returned + * @return a list containing maximum #amount unique elements, unless there are + * less than that many elements in the collection + */ + public List<E> getUniqueElements(int amount) { + if (this.map.size() <= amount) { + return Lists.newArrayList(this.map.values()); + } + List<E> uniqueElements = new ArrayList<>(amount); + while (uniqueElements.size() < amount && uniqueElements.size() < this.map.size()) { + if (!uniqueElements.contains(this.next())) { + uniqueElements.add(this.last()); + } + } + return uniqueElements; + } + + /** + * Select a random items from the list based on the chance + * Uses a ThreadLocalRandom because Random sucks shit + * ThreadLocalRandom is faster + * + * @return a random element from the collection, selected based on its relative weight + */ + public E next() { + double value = ThreadLocalRandom.current().nextDouble() * this.total; + this.last = this.map.ceilingEntry(value).getValue(); + return this.last; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/advancement/AdvancementUtil.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/advancement/AdvancementUtil.java new file mode 100644 index 0000000..158040b --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/advancement/AdvancementUtil.java @@ -0,0 +1,410 @@ +package net.grandtheftmc.vice.utils.advancement; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import net.md_5.bungee.api.chat.TextComponent; +import net.md_5.bungee.chat.ComponentSerializer; +import org.bukkit.Bukkit; +import org.bukkit.NamespacedKey; +import org.bukkit.World; +import org.bukkit.advancement.Advancement; +import org.bukkit.entity.Player; +import org.bukkit.plugin.java.JavaPlugin; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Set; + +/** + * @author charliej - the very API + * @author DiscowZombie - adopting for Builder-Pattern + * @author 2008Choco - NamespacedKey support + * @author GiansCode - small but useful changes + * @author Ste3et_C0st - add/take advancement logic + * @author PROgrammer_JARvis - rework and combining + * @author ysl3000 - useful advice and bug-tracking at PullRequests/ JUnit-Tests, full Builder-Pattern support, Lombok + */ + +public class AdvancementUtil { + + private static final Gson gson = new Gson(); + + private NamespacedKey id; + private String parent, icon, background; + private TextComponent title, description; + private FrameType frame; + private boolean announce = true, toast = true, hidden = true; + private int counter = 1; + + private Set<Trigger.TriggerBuilder> triggers; + + private AdvancementUtil(NamespacedKey id, String parent, String icon, String background, TextComponent title, TextComponent description, FrameType frame, boolean announce, boolean toast, boolean hidden, int counter, Set<Trigger.TriggerBuilder> triggers) { + this.id = id; + this.parent = parent; + this.icon = icon; + this.background = background; + this.title = title; + this.description = description; + this.frame = frame; + this.announce = announce; + this.toast = toast; + this.hidden = hidden; + this.counter = counter; + this.triggers = triggers; + } + + + public static AdvancementAPIBuilder builder(NamespacedKey id) { + return new AdvancementAPIBuilder().id(id); + } + + + @Deprecated + public void save(String world) { + this.save(Bukkit.getWorld(world)); + } + + @Deprecated + public void save(World world) { + + + File file = new File(world.getWorldFolder(), "data" + File.separator + "advancements" + + File.separator + id.getNamespace() + File.separator + id.getKey() + ".json"); + + File dir = file.getParentFile(); + + if (dir.mkdirs() || dir.exists()) { + + try (FileWriter writer = new FileWriter(file)) { + writer.write(getJSON()); + Bukkit.getLogger().info("[AdvancementAPI] Created " + id.toString()); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + public String getJSON() { + JsonObject json = new JsonObject(); + + JsonObject icon = new JsonObject(); + icon.addProperty("item", getIcon()); + + JsonObject display = new JsonObject(); + display.add("icon", icon); + display.add("title", getJsonFromComponent(getTitle())); + display.add("description", getJsonFromComponent(getDescription())); + display.addProperty("background", getBackground()); + display.addProperty("frame", getFrame().toString()); + display.addProperty("announce_to_chat", announce); + display.addProperty("show_toast", toast); + display.addProperty("hidden", hidden); + + json.addProperty("parent", getParent()); + + JsonObject criteria = new JsonObject(); + + + //Changed to normal comment as JavaDocs are not displayed here @PROgrm_JARvis + /* + * Define each criteria, for each criteria in list, + * add items, trigger and conditions + */ + + for (Trigger.TriggerBuilder triggerBuilder : getTriggers()) { + Trigger trigger = triggerBuilder.build(); + criteria.add(trigger.name, trigger.toJsonObject()); + } + + json.add("criteria", criteria); + json.add("display", display); + + Gson gson = new GsonBuilder().setPrettyPrinting().create(); + + return gson.toJson(json); + } + + public String getIcon() { + return this.icon; + } + + public static JsonElement getJsonFromComponent(TextComponent textComponent) { + return gson.fromJson(ComponentSerializer.toString(textComponent), JsonElement.class); + + } + + public TextComponent getTitle() { + return this.title; + } + + public TextComponent getDescription() { + return this.description; + } + + public String getBackground() { + return this.background; + } + + public FrameType getFrame() { + return this.frame; + } + + public String getParent() { + return this.parent; + } + + public Set<Trigger.TriggerBuilder> getTriggers() { + return this.triggers; + } + + public AdvancementUtil show(JavaPlugin plugin, Player... players) { + add(); + grant(players); + Bukkit.getScheduler().runTaskLater(plugin, () -> { + revoke(players); + remove(); + }, 20L); + return this; + } + + @SuppressWarnings("deprecation") + public AdvancementUtil add() { + try { + Bukkit.getUnsafe().loadAdvancement(id, getJSON()); + Bukkit.getLogger().info("Successfully registered advancement."); + } catch (IllegalArgumentException e) { + Bukkit.getLogger().info("Error registering advancement. It seems to already exist!"); + } + return this; + } + + public AdvancementUtil grant(Player... players) { + Advancement advancement = getAdvancement(); + for (Player player : players) { + if (!player.getAdvancementProgress(advancement).isDone()) { + Collection<String> remainingCriteria = player.getAdvancementProgress(advancement).getRemainingCriteria(); + Bukkit.getLogger().info(remainingCriteria.toString()); + for (String remainingCriterion : remainingCriteria) + player.getAdvancementProgress(getAdvancement()) + .awardCriteria(remainingCriterion); + } + } + return this; + } + + public AdvancementUtil revoke(Player... players) { + Advancement advancement = getAdvancement(); + for (Player player : players) { + if (player.getAdvancementProgress(advancement).isDone()) { + Collection<String> awardedCriteria = player.getAdvancementProgress(advancement).getAwardedCriteria(); + Bukkit.getLogger().info(awardedCriteria.toString()); + for (String awardedCriterion : awardedCriteria) + player.getAdvancementProgress(getAdvancement()) + .revokeCriteria(awardedCriterion); + } + } + return this; + } + + @SuppressWarnings("deprecation") + public AdvancementUtil remove() { + Bukkit.getUnsafe().removeAdvancement(id); + return this; + } + + public Advancement getAdvancement() { + return Bukkit.getAdvancement(id); + } + + public boolean counterUp(Player player) { + String criteriaString = null; + for (String criteria : getAdvancement().getCriteria()) { + if (player.getAdvancementProgress(getAdvancement()).getDateAwarded(criteria) != null) { + criteriaString = criteria; + } else { + break; + } + } + if (criteriaString == null) return false; + player.getAdvancementProgress(getAdvancement()).awardCriteria(criteriaString); + return true; + } + + public boolean counterDown(Player player) { + String criteriaString = null; + for (String criteria : getAdvancement().getCriteria()) { + if (player.getAdvancementProgress(getAdvancement()).getDateAwarded(criteria) != null) { + criteriaString = criteria; + } else { + break; + } + } + if (criteriaString == null) return false; + player.getAdvancementProgress(getAdvancement()).revokeCriteria(criteriaString); + return true; + } + + public void counterReset(Player player) { + for (String criteria : getAdvancement().getCriteria()) { + if (player.getAdvancementProgress(getAdvancement()).getDateAwarded(criteria) != null) { + player.getAdvancementProgress(getAdvancement()).revokeCriteria(criteria); + } + } + } + + public NamespacedKey getId() { + return this.id; + } + + public boolean isAnnounce() { + return this.announce; + } + + public boolean isToast() { + return this.toast; + } + + public boolean isHidden() { + return this.hidden; + } + + public int getCounter() { + return this.counter; + } + + public static class AdvancementAPIBuilder { + private NamespacedKey id; + private String parent; + private String icon; + private String background; + private TextComponent title; + private TextComponent description; + private FrameType frame; + private boolean announce; + private boolean toast; + private boolean hidden; + private int counter; + private ArrayList<Trigger.TriggerBuilder> triggers; + + AdvancementAPIBuilder() { + } + + public AdvancementAPIBuilder title(String title) { + + this.title = new TextComponent(title); + + return this; + } + + public AdvancementAPIBuilder title(TextComponent title) { + this.title = title; + + return this; + } + + public AdvancementAPIBuilder description(String description) { + this.description = new TextComponent(description); + return this; + } + + public AdvancementAPIBuilder description(TextComponent description) { + this.description = description; + return this; + } + + + public AdvancementAPIBuilder id(NamespacedKey id) { + this.id = id; + return this; + } + + public AdvancementAPIBuilder parent(String parent) { + this.parent = parent; + return this; + } + + public AdvancementAPIBuilder icon(String icon) { + this.icon = icon; + return this; + } + + public AdvancementAPIBuilder background(String background) { + this.background = background; + return this; + } + + public AdvancementAPIBuilder frame(FrameType frame) { + this.frame = frame; + return this; + } + + public AdvancementAPIBuilder announce(boolean announce) { + this.announce = announce; + return this; + } + + public AdvancementAPIBuilder toast(boolean toast) { + this.toast = toast; + return this; + } + + public AdvancementAPIBuilder hidden(boolean hidden) { + this.hidden = hidden; + return this; + } + + public AdvancementAPIBuilder counter(int counter) { + this.counter = counter; + return this; + } + + public AdvancementAPIBuilder trigger(Trigger.TriggerBuilder trigger) { + if (this.triggers == null) + this.triggers = new ArrayList<Trigger.TriggerBuilder>(); + this.triggers.add(trigger); + return this; + } + + public AdvancementAPIBuilder triggers(Collection<? extends Trigger.TriggerBuilder> triggers) { + if (this.triggers == null) + this.triggers = new ArrayList<Trigger.TriggerBuilder>(); + this.triggers.addAll(triggers); + return this; + } + + public AdvancementAPIBuilder clearTriggers() { + if (this.triggers != null) + this.triggers.clear(); + + return this; + } + + public AdvancementUtil build() { + Set<Trigger.TriggerBuilder> triggers; + switch (this.triggers == null ? 0 : this.triggers.size()) { + case 0: + triggers = java.util.Collections.singleton(Trigger.builder(Trigger.TriggerType.IMPOSSIBLE, "default")); + break; + case 1: + triggers = java.util.Collections.singleton(this.triggers.get(0)); + break; + default: + triggers = new java.util.LinkedHashSet<Trigger.TriggerBuilder>(this.triggers.size() < 1073741824 ? 1 + this.triggers.size() + (this.triggers.size() - 3) / 3 : Integer.MAX_VALUE); + triggers.addAll(this.triggers); + triggers = java.util.Collections.unmodifiableSet(triggers); + } + + return new AdvancementUtil(id, parent, icon, background, title, description, frame, announce, toast, hidden, counter, triggers); + } + + public String toString() { + return "AdvancementAPI.AdvancementAPIBuilder(id=" + this.id + ", parent=" + this.parent + ", icon=" + this.icon + ", background=" + this.background + ", title=" + this.title + ", description=" + this.description + ", frame=" + this.frame + ", announce=" + this.announce + ", toast=" + this.toast + ", hidden=" + this.hidden + ", counter=" + this.counter + ", triggers=" + this.triggers + ")"; + } + } + +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/advancement/Condition.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/advancement/Condition.java new file mode 100644 index 0000000..09f1a6a --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/advancement/Condition.java @@ -0,0 +1,61 @@ +package net.grandtheftmc.vice.utils.advancement; + +import com.google.gson.JsonObject; +import org.bukkit.inventory.ItemStack; + +public class Condition { + + protected String name; + protected JsonObject set; + + private Condition(String name, JsonObject set) { + this.name = name; + this.set = set; + } + + public static ConditionBuilder builder(String name, JsonObject itemStack) { + return new Condition.ConditionBuilder().name(name).set(itemStack); + } + + public static ConditionBuilder builder(String name, ItemStack itemStack) { + return Condition.builder(name,convertItemToJSON(itemStack)); + } + + + //BEGIN UTIL + private static JsonObject convertItemToJSON(ItemStack item) { + JsonObject itemJSON = new JsonObject(); + itemJSON.addProperty("item", "minecraft:" + item.getType().name().toLowerCase()); + itemJSON.addProperty("amount", item.getAmount()); + itemJSON.addProperty("data", item.getData().getData()); + return itemJSON; + } + + + + public static class ConditionBuilder { + private String name; + private JsonObject set; + + ConditionBuilder() { + } + + public Condition.ConditionBuilder name(String name) { + this.name = name; + return this; + } + + public Condition.ConditionBuilder set(JsonObject set) { + this.set = set; + return this; + } + + public Condition build() { + return new Condition(name, set); + } + + public String toString() { + return "Condition.ConditionBuilder(name=" + this.name + ", set=" + this.set + ")"; + } + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/advancement/FrameType.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/advancement/FrameType.java new file mode 100644 index 0000000..238376b --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/advancement/FrameType.java @@ -0,0 +1,33 @@ +package net.grandtheftmc.vice.utils.advancement; + +import org.bukkit.Bukkit; + +public enum FrameType { + TASK("task"), + GOAL("goal"), + CHALLENGE("challenge"); + private String name; + + FrameType(String name) { + this.name = name; + } + + public static FrameType getFromString(String frameType) { + if (frameType.equalsIgnoreCase("random")) return FrameType.RANDOM(); + else try { + return FrameType.valueOf(frameType); + } catch (EnumConstantNotPresentException e) { + Bukkit.getLogger().info("[AdvancementUtil] Unknown FrameType given. Using default (TASK)"); + return FrameType.TASK; + } + } + + public static FrameType RANDOM() { + FrameType[] frameTypes = FrameType.values(); + return frameTypes[(int) (Math.random() * (frameTypes.length - 1))]; + } + + public String toString() { + return name; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/advancement/Trigger.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/advancement/Trigger.java new file mode 100644 index 0000000..d81d8c7 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/advancement/Trigger.java @@ -0,0 +1,135 @@ +package net.grandtheftmc.vice.utils.advancement; + +import com.google.gson.JsonObject; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Set; + +public class Trigger { + + protected TriggerType type; + protected String name; + protected Set<Condition.ConditionBuilder> conditions; + + private Trigger(TriggerType type, String name, Set<Condition.ConditionBuilder> conditions) { + this.type = type; + this.name = name; + this.conditions = conditions; + } + + public static TriggerBuilder builder(TriggerType type, String name) { + return new TriggerBuilder().type(type).name(name); + } + + public JsonObject toJsonObject() { + + JsonObject triggerObj = new JsonObject(); + + final JsonObject advConditions = new JsonObject(); + triggerObj.addProperty("trigger", "minecraft:" + this.type.toString().toLowerCase()); + this.conditions.forEach(conditionBuilder -> { + + Condition condition = conditionBuilder.build(); + advConditions.add(condition.name, condition.set); + }); + if (!this.conditions.isEmpty()) + triggerObj.add("conditions", advConditions); + + + return triggerObj; + + } + + + public static enum TriggerType { + ARBITRARY_PLAYER_TICK, + BRED_ANIMALS, + BREWED_POTION, + CHANGED_DIMENSION, + CONSTRUCT_BEACON, + CONSUME_ITEM, + CURED_ZOMBIE_VILLAGER, + ENCHANTED_ITEM, + ENTER_BLOCK, + ENTITY_HURT_PLAYER, + ENTITY_KILLED_PLAYER, + IMPOSSIBLE, + INVENTORY_CHANGED, + ITEM_DURABILITY_CHANGED, + LEVITATION, + LOCATION, + PLACED_BLOCK, + PLAYER_HURT_ENTITY, + PLAYER_KILLED_ENTITY, + RECIPE_UNLOCKED, + SLEPT_IN_BED, + SUMMONED_ENTITY, + TAME_ANIMAL, + TICK, + USED_ENDER_EYE, + VILLAGER_TRADE + } + + public static class TriggerBuilder { + private TriggerType type; + private String name; + private ArrayList<Condition.ConditionBuilder> conditions; + + TriggerBuilder() { + } + + public Trigger.TriggerBuilder type(TriggerType type) { + this.type = type; + return this; + } + + public Trigger.TriggerBuilder name(String name) { + this.name = name; + return this; + } + + public Trigger.TriggerBuilder condition(Condition.ConditionBuilder condition) { + if (this.conditions == null) + this.conditions = new ArrayList<Condition.ConditionBuilder>(); + this.conditions.add(condition); + return this; + } + + public Trigger.TriggerBuilder conditions(Collection<? extends Condition.ConditionBuilder> conditions) { + if (this.conditions == null) + this.conditions = new ArrayList<Condition.ConditionBuilder>(); + this.conditions.addAll(conditions); + return this; + } + + public Trigger.TriggerBuilder clearConditions() { + if (this.conditions != null) + this.conditions.clear(); + + return this; + } + + public Trigger build() { + Set<Condition.ConditionBuilder> conditions; + switch (this.conditions == null ? 0 : this.conditions.size()) { + case 0: + conditions = java.util.Collections.emptySet(); + break; + case 1: + conditions = java.util.Collections.singleton(this.conditions.get(0)); + break; + default: + conditions = new java.util.LinkedHashSet<Condition.ConditionBuilder>(this.conditions.size() < 1073741824 ? 1 + this.conditions.size() + (this.conditions.size() - 3) / 3 : Integer.MAX_VALUE); + conditions.addAll(this.conditions); + conditions = java.util.Collections.unmodifiableSet(conditions); + } + + return new Trigger(type, name, conditions); + } + + public String toString() { + return "Trigger.TriggerBuilder(type=" + this.type + ", name=" + this.name + ", conditions=" + this.conditions + ")"; + } + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/recipe/ShapedRegister.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/recipe/ShapedRegister.java new file mode 100644 index 0000000..48cdba2 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/recipe/ShapedRegister.java @@ -0,0 +1,198 @@ +package net.grandtheftmc.vice.utils.recipe; + +import org.apache.commons.lang.Validate; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.NamespacedKey; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.ShapedRecipe; + +import java.lang.reflect.Field; +import java.util.HashMap; +import java.util.Map; + +public class ShapedRegister { + + private ItemStack output; + private String[] rows; + private Map<Character, ItemStack> ingredients = new HashMap<>(); + + private final NamespacedKey key; + + /** + * Create a shaped recipe to craft the specified ItemStack. The + * constructor merely determines the result and type; to set the actual + * recipe, you'll need to call the appropriate methods. + * + * @param result The item you want the recipe to create. + * @see ShapedRecipe#shape(String...) + * @see ShapedRecipe#setIngredient(char, Material) + * @see ShapedRecipe#setIngredient(char, ItemStack) + */ + public ShapedRegister(NamespacedKey key, ItemStack result) { + this.key = key; + output = new ItemStack(result); + } + + public NamespacedKey getKey() { + return key; + } + + /** + * Set the shape of this recipe to the specified rows. Each character + * represents a different ingredient; exactly what each character + * represents is set separately. The first row supplied corresponds with + * the upper most part of the recipe on the workbench e.g. if all three + * rows are supplies the first string represents the top row on the + * workbench. + * + * @param shape The rows of the recipe (up to 3 rows). + * @return The changed recipe, so you can chain calls. + */ + public ShapedRegister shape(String... shape) { + Validate.notNull(shape, "Must provide a shape"); + Validate.isTrue(shape.length > 0 && shape.length < 4, "Crafting recipes should be 1, 2, 3 rows, not ", shape.length); + + for (String row : shape) { + Validate.notNull(row, "Shape cannot have null rows"); + Validate.isTrue(row.length() > 0 && row.length() < 4, "Crafting rows should be 1, 2, or 3 characters, not ", row.length()); + Map<Character, ItemStack> newIng = new HashMap<>(); + + for (char c : row.toCharArray()) + newIng.put(c, ingredients.get(c)); + + ingredients = newIng; + } + + rows = shape; + + return this; + } + + /** + * Sets the Material that a character in the recipe shape refers to. + * + * @param key The character that represents the ingredient in the shape. + * @param ingredient The ingredient. + * @return The changed recipe, so you can chain calls. + */ + public ShapedRegister setIngredient(char key, Material mat) { + return setIngredient(key, new ItemStack(mat, 1)); + } + + /** + * Sets the ItemStack that a character in the recipe shape refers to. + * + * @param key The character that represents the ingredient in the shape. + * @param ingredient The ingredient. + * @return The changed recipe, so you can chain calls. + */ + public ShapedRegister setIngredient(char key, ItemStack item) { + Validate.isTrue(ingredients.containsKey(key), "Symbol does not appear in the shape:", key); + ingredients.put(key, item); + return this; + } + + public ItemStack getOutput() { + return output.clone(); + } + + /** + * Registers the Recipe in the server. + */ + public void register() { + ShapedRecipe sr = new ShapedRecipe(key, output); + sr.shape(rows); + try { + Field f = sr.getClass().getDeclaredField("ingredients"); + f.setAccessible(true); + f.set(sr, ingredients); + Bukkit.addRecipe(sr); + } catch (Exception e) { + e.printStackTrace(); + } + } + +// public static void registerShapedRecipe(ItemStack result, Object... data) { +// String s = ""; +// int index = 0; +// int height = 0; +// int width = 0; +// if (data[index] instanceof String[]) { +// String[] strings = (String[]) data[index++]; +// +// for (String shapedRecipes : strings) { +// ++width; +// height = shapedRecipes.length(); +// s = s + shapedRecipes; +// } +// } else { +// while (data[index] instanceof String) { +// String str = (String) data[index++]; +// ++width; +// height = str.length(); +// s = s + str; +// } +// } +// +// HashMap<Character, net.minecraft.server.v1_12_R1.ItemStack> charMap; +// for (charMap = Maps.newHashMap(); index < data.length; index += 2) { +// Character c = (Character) data[index]; +// net.minecraft.server.v1_12_R1.ItemStack stack = null; +// if (data[index + 1] instanceof ItemStack) +// stack = CraftItemStack.asNMSCopy((ItemStack) data[index + 1]); +// else if (data[index + 1] instanceof net.minecraft.server.v1_12_R1.Item) +// stack = new net.minecraft.server.v1_12_R1.ItemStack((net.minecraft.server.v1_12_R1.Item) data[index + 1]); +// else if (data[index + 1] instanceof net.minecraft.server.v1_12_R1.Block) +// stack = new net.minecraft.server.v1_12_R1.ItemStack((net.minecraft.server.v1_12_R1.Block) data[index + 1], 1, Short.MAX_VALUE); +// else if (data[index + 1] instanceof net.minecraft.server.v1_12_R1.ItemStack) +// stack = (net.minecraft.server.v1_12_R1.ItemStack) data[index + 1]; +// +// +// charMap.put(c, stack); +// } +// +// net.minecraft.server.v1_12_R1.ItemStack[] ingredients = new net.minecraft.server.v1_12_R1.ItemStack[height * width]; +// +// for (int j = 0; j < height * width; ++j) { +// char c = s.charAt(j); +// if (charMap.containsKey(c)) +// ingredients[j] = charMap.get(c).cloneItemStack(); +// else +// ingredients[j] = null; +// } +// +// net.minecraft.server.v1_12_R1.ShapedRecipes recipe = new net.minecraft.server.v1_12_R1.ShapedRecipes("test", height, width, ingredients, CraftItemStack.asNMSCopy(result)) { +// @Override public boolean a(net.minecraft.server.v1_12_R1.InventoryCrafting inventory, net.minecraft.server.v1_12_R1.World world) { +// for (int i = 0; i < ingredients.length; i++) { +// net.minecraft.server.v1_12_R1.ItemStack ingredient = ingredients[i]; +// net.minecraft.server.v1_12_R1.ItemStack found = inventory.getItem(i); +// if (ingredient == null) { +// if (found == null) +// continue; +// else +// return false; +// } +// +// if (found == null) +// return false; +// +// if (ingredient.getItem() != found.getItem() || ingredient.getData() != found.getData()) +// return false; +// +// if (ingredient.hasTag()) { +// if (!found.hasTag()) +// return false; +// +// if (!ingredient.getTag().equals(found.getTag())) +// return false; +// } +// } +// +// return true; +// } +// }; +// +// CraftingManager.a(new MinecraftKey(ItemManager.NAMESPACED_KEY.getKey()), recipe); +// } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/recipe/ShapelessRegister.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/recipe/ShapelessRegister.java new file mode 100644 index 0000000..6fc3556 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/utils/recipe/ShapelessRegister.java @@ -0,0 +1,156 @@ +package net.grandtheftmc.vice.utils.recipe; + +import org.apache.commons.lang.Validate; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.NamespacedKey; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.ShapelessRecipe; + +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +public class ShapelessRegister { + + private final NamespacedKey key; + private final ItemStack output; + private final List<ItemStack> ingredients = new ArrayList<>(); + + /** + * Create a shapeless recipe to craft the specified ItemStack. The + * constructor merely determines the result and type; to set the actual + * recipe, you'll need to call the appropriate methods. + * + * @param result The item you want the recipe to create. + * @see ShapelessRecipe#addIngredient(Material) + * @see ShapelessRecipe#addIngredient(int, Material) + * @see ShapelessRecipe#addIngredient(ItemStack) + * @see ShapelessRecipe#addIngredient(int, ItemStack) + */ + public ShapelessRegister(NamespacedKey key, ItemStack result) { + this.key = key; + output = new ItemStack(result); + } + + public ItemStack getOutput() { + return output.clone(); + } + + /** + * Adds the specified ingredient. + * + * @param ingredient The ingredient to add. + * @return The changed recipe, so you can chain calls. + */ + public ShapelessRegister addIngredient(Material mat) { + return addIngredient(1, mat); + } + + /** + * Adds multiples of the specified ingredient. + * + * @param count How many to add (can't be more than 9!) + * @param ingredient The ingredient to add. + * @return The changed recipe, so you can chain calls. + */ + public ShapelessRegister addIngredient(int count, Material mat) { + return addIngredient(count, new ItemStack(mat, 1)); + } + + /** + * Adds the specified ingredient. + * + * @param ingredient The ingredient to add. + * @return The changed recipe, so you can chain calls. + */ + public ShapelessRegister addIngredient(ItemStack item) { + return addIngredient(1, item); + } + + /** + * Adds multiples of the specified ingredient. + * + * @param count How many to add (can't be more than 9!) + * @param ingredient The ingredient to add. + * @return The changed recipe, so you can chain calls. + */ + public ShapelessRegister addIngredient(int count, ItemStack item) { + Validate.isTrue(ingredients.size() + count <= 9, "Shapeless recipes cannot have more than 9 ingredients"); + + while (count-- > 0) + ingredients.add(item); + + return this; + } + + /** + * Removes an ingredient from the list. If the ingredient occurs multiple + * times, only one instance of it is removed. + * + * @param ingredient The ingredient to remove + * @return The changed recipe. + */ + public ShapelessRegister removeIngredient(Material mat) { + return removeIngredient(1, mat); + } + + /** + * Removes multiple instances of an ingredient from the list. If there are + * less instances then specified, all will be removed. + * + * @param count The number of copies to remove. + * @param ingredient The ingredient to remove. + * @return The changed recipe. + */ + public ShapelessRegister removeIngredient(int count, Material mat) { + return removeIngredient(count, new ItemStack(mat, 1)); + } + + /** + * Removes an ingredient from the list. If the ingredient occurs multiple + * times, only one instance of it is removed. + * + * @param ingredient The ingredient to remove + * @return The changed recipe. + */ + public ShapelessRegister removeIngredient(ItemStack item) { + return removeIngredient(1, item); + } + + /** + * Removes multiple instances of an ingredient from the list. If there are + * less instances then specified, all will be removed. + * + * @param count The number of copies to remove. + * @param ingredient The ingredient to remove. + * @return The changed recipe. + */ + public ShapelessRegister removeIngredient(int count, ItemStack item) { + Iterator<ItemStack> iterator = ingredients.iterator(); + while (count > 0 && iterator.hasNext()) { + ItemStack stack = iterator.next(); + if (stack.isSimilar(item)) { + iterator.remove(); + count--; + } + } + return this; + } + + /** + * Registers the Recipe in the server. + */ + public void register() { + ShapelessRecipe sr = new ShapelessRecipe(key, output); + try { + Field f = sr.getClass().getDeclaredField("ingredients"); + f.setAccessible(true); + f.set(sr, ingredients); + Bukkit.addRecipe(sr); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/README.MD b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/README.MD new file mode 100644 index 0000000..c1e78cb --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/README.MD @@ -0,0 +1,61 @@ +# Weapons: + +### --Ranged: +<p><b>Pistols:</b><br> +Pistol 1<br> +StunGun 11<br> +CombatPistol 21<br> +HeavyPistol 31<br> +MarksmanPistol 41<br><br> + +<b>SMG:</b><br> +MicroSMG 51<br> +SMG 61<br> +AssaultSMG 71<br> +CombatPDW 81<br> +GusenbergSweeper 91<br><br> + +<b>Shotgun:</b><br> +SawedoffShotgun 101<br> +PumpShotgun 111<br> +Musket 121<br> +AssaultShotgun 131<br> +HeavyShotgun 141<br><br> + +<b>Assault:</b><br> +AssaultRifle 151<br> +CarbineRifle 161<br> +BullpupRifle 171<br> +AdvancedRifle 181<br> +SpecialCarbine 191<br><br> + +<b>LMG:</b><br> +MG 201<br> +CombatMG 211<br><br> + +<b>Sniper:</b><br> +SniperRifle 221<br> +HeavySniper 231<br><br> + +<b>Special:</b><br> +Minigun 241<br><br> + +<b>Launcher:</b><br> +RPG 251<br> +HomingLauncher 261<br> +GrenadeLauncher 271<br></p><br><br> + + +### --Melee: +<p>BaseballBat 281<br> +Chainsaw 291<br> +Knife 301<br> +NightStick 311<br> +Rake 321<br></p><br><br> + +### --Throwable: +<p>Grenade 331<br> +MolotovCocktail 341<br> +ProximityMine 351<br> +StickyBomb 361<br> +TearGas 371<br></p> diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/WeaponRegistry.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/WeaponRegistry.java new file mode 100644 index 0000000..bc88923 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/WeaponRegistry.java @@ -0,0 +1,96 @@ +package net.grandtheftmc.vice.weapon; + +import net.grandtheftmc.guns.WeaponManager; +import net.grandtheftmc.vice.weapon.explosive.*; +import net.grandtheftmc.vice.weapon.melee.*; +import net.grandtheftmc.vice.weapon.ranged.assault.*; +import net.grandtheftmc.vice.weapon.ranged.launcher.GrenadeLauncher; +import net.grandtheftmc.vice.weapon.ranged.launcher.HomingLauncher; +import net.grandtheftmc.vice.weapon.ranged.launcher.RPG; +import net.grandtheftmc.vice.weapon.ranged.launcher.NetLauncher; +import net.grandtheftmc.vice.weapon.ranged.lmg.CombatMG; +import net.grandtheftmc.vice.weapon.ranged.lmg.MG; +import net.grandtheftmc.vice.weapon.ranged.pistol.*; +import net.grandtheftmc.vice.weapon.ranged.shotgun.*; +import net.grandtheftmc.vice.weapon.ranged.smg.*; +import net.grandtheftmc.vice.weapon.ranged.sniper.HeavySniper; +import net.grandtheftmc.vice.weapon.ranged.sniper.SniperRifle; +import net.grandtheftmc.vice.weapon.ranged.special.Flamethrower; +import net.grandtheftmc.vice.weapon.ranged.special.GoldMinigun; +import net.grandtheftmc.vice.weapon.ranged.special.Minigun; + +import java.util.Arrays; + +/** + * Created by Luke Bingham on 25/07/2017. + */ +public class WeaponRegistry { + + public WeaponRegistry(WeaponManager weaponManager) { + weaponManager.registerWeapons(Arrays.asList( + + //PISTOL + new Pistol(), + new StunGun(), + new CombatPistol(), + new MarksmanPistol(), + new HeavyPistol(), + + //SMG + new SMG(), + new MicroSMG(), + new CombatPDW(), + new GusenbergSweeper(), + new AssaultSMG(), + + //SHOTGUN + new SawedoffShotgun(), + new PumpShotgun(), + new Musket(), + new AssaultShotgun(), + new HeavyShotgun(), + + //ASSAULT RIFLE + new AssaultRifle(), + new CarbineRifle(), + new BullpupRifle(), + new AdvancedRifle(), + new SpecialCarbine(), + + //LMG + new MG(), + new CombatMG(), + + //SNIPER + new SniperRifle(), + new HeavySniper(), + + //SPECIAL + new Minigun(), + new GoldMinigun(), + new NetLauncher(), + new Flamethrower(), + + //LAUNCHER + new RPG(), + new HomingLauncher(), + new GrenadeLauncher(), + + //MELEE + new Knife(), + new BaseballBat(), + new Rake(), + new NightStick(), + new Chainsaw(), + new Katana(), + new Dildo(), + + //THROWABLE + new Grenade(), + new MolotovCocktail(), + new ProximityMine(), + new StickyBomb(), + new TearGas() + )); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/airstrike/Airstrike.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/airstrike/Airstrike.java new file mode 100644 index 0000000..4411e4f --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/airstrike/Airstrike.java @@ -0,0 +1,34 @@ +package net.grandtheftmc.vice.weapon.airstrike; + +import org.bukkit.Material; +import org.bukkit.Sound; + +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.guns.weapon.AirstrikeWeapon; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponType; + +/** + * Created by Luke Bingham on 18/07/2017. + */ +public class Airstrike extends AirstrikeWeapon { + + /** + * Construct a new Weapon. + */ + public Airstrike() { + super( + (short) 51, + "Airstrke", //Name + WeaponType.DROPPABLE, //Weapon Type + AmmoType.NONE, //AmmoType + new ItemFactory(Material.WOOD_BUTTON).build(), //ItemStack + new Sound[] { + Sound.ENTITY_SKELETON_SHOOT, + Sound.ENTITY_BAT_TAKEOFF, + Sound.ENTITY_BAT_TAKEOFF, + Sound.ENTITY_GENERIC_EXPLODE + } + ); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/airstrike/Nuke.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/airstrike/Nuke.java new file mode 100644 index 0000000..73a516c --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/airstrike/Nuke.java @@ -0,0 +1,33 @@ +package net.grandtheftmc.vice.weapon.airstrike; + +import org.bukkit.Material; +import org.bukkit.Sound; + +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.guns.weapon.AirstrikeWeapon; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponType; + +/** + * Created by Luke Bingham on 18/07/2017. + */ +public class Nuke extends AirstrikeWeapon { + + /** + * Construct a new Weapon. + */ + public Nuke() { + super( + (short) 52, + "Nuke", //Name + WeaponType.DROPPABLE, //Weapon Type + AmmoType.NONE, //AmmoType + new ItemFactory(Material.WOOD_BUTTON).build(), //ItemStack + new Sound[] { + Sound.ENTITY_SKELETON_SHOOT, + Sound.ENTITY_BAT_TAKEOFF, + Sound.ENTITY_BAT_TAKEOFF, + } + ); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/explosive/Grenade.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/explosive/Grenade.java new file mode 100644 index 0000000..e8ee512 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/explosive/Grenade.java @@ -0,0 +1,46 @@ +package net.grandtheftmc.vice.weapon.explosive; + +import org.bukkit.Effect; +import org.bukkit.Material; +import org.bukkit.Sound; + +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.ThrowableWeapon; +import net.grandtheftmc.guns.weapon.WeaponType; + +/** + * Created by Luke Bingham on 18/07/2017. + */ +public class Grenade extends ThrowableWeapon { + + /** + * Construct a new Weapon. + */ + public Grenade() { + super( + (short) 34, + "Grenade", //Name + WeaponType.THROWABLE, //Weapon Type + AmmoType.EXPLOSIVE, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 331).build(), //ItemStack + new Sound[] { //Gun Sounds + Sound.ENTITY_SKELETON_SHOOT, + Sound.ENTITY_BAT_TAKEOFF, + Sound.ENTITY_BAT_TAKEOFF, + Sound.ENTITY_GENERIC_EXPLODE + } + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.FIREWORK_CHARGE).setName(getName()).build()); + setDescription("How to clear a room", "in 3..2..1."); + + this.particles = Effect.EXPLOSION_HUGE; + this.delay = 55; + this.damage = 3; + this.explosionSize = 5.0; + this.explosionDelay = 60; + this.explosionStrength = 2.0; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/explosive/MolotovCocktail.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/explosive/MolotovCocktail.java new file mode 100644 index 0000000..692d3bb --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/explosive/MolotovCocktail.java @@ -0,0 +1,48 @@ +package net.grandtheftmc.vice.weapon.explosive; + +import org.bukkit.Effect; +import org.bukkit.Material; +import org.bukkit.Sound; + +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.ThrowableWeapon; +import net.grandtheftmc.guns.weapon.WeaponType; + +/** + * Created by Luke Bingham on 18/07/2017. + */ +public class MolotovCocktail extends ThrowableWeapon { + + /** + * Construct a new Weapon. + */ + public MolotovCocktail() { + super( + (short) 36, + "Molotov Cocktail", //Name + WeaponType.THROWABLE, //Weapon Type + AmmoType.EXPLOSIVE, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 351).build(), //ItemStack + new Sound[] { //Gun Sounds + Sound.ENTITY_SKELETON_SHOOT, + Sound.ENTITY_BAT_TAKEOFF, + Sound.ENTITY_BAT_TAKEOFF, + Sound.ENTITY_GENERIC_EXPLODE + } + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.MAGMA_CREAM).setName(getName()).build()); + setDescription("Nothing says angst quite", "as much as a bottle of", "liquid fire."); + + this.particles = Effect.FLAME; + this.delay = 55; + this.flammable = true; + this.duration = 140; + this.damage = 1.0; + this.explosionSize = 5.0; + this.explosionDelay = 20; + this.explosionStrength = 0.3; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/explosive/ProximityMine.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/explosive/ProximityMine.java new file mode 100644 index 0000000..94bc632 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/explosive/ProximityMine.java @@ -0,0 +1,48 @@ +package net.grandtheftmc.vice.weapon.explosive; + +import org.bukkit.Effect; +import org.bukkit.Material; +import org.bukkit.Sound; + +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.ThrowableWeapon; +import net.grandtheftmc.guns.weapon.WeaponType; + +/** + * Created by Luke Bingham on 18/07/2017. + */ +public class ProximityMine extends ThrowableWeapon { + + /** + * Construct a new Weapon. + */ + public ProximityMine() { + super( + (short) 38, + "Proximity Mine", //Name + WeaponType.THROWABLE, //Weapon Type + AmmoType.EXPLOSIVE, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 371).build(), //ItemStack + new Sound[] { //Gun Sounds + Sound.ENTITY_SKELETON_SHOOT, + Sound.ENTITY_BAT_TAKEOFF, + Sound.ENTITY_BAT_TAKEOFF, + Sound.ENTITY_GENERIC_EXPLODE + } + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.GLOWSTONE_DUST).setName(getName()).build()); + setDescription("Enjoy your spawn camping..."); + + this.particles = Effect.EXPLOSION_HUGE; + this.delay = 40; + this.proximity = true; +// this.duration = 100; + this.damage = 3.0; + this.explosionSize = 3.0; + this.explosionDelay = 0; + this.explosionStrength = 3.0; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/explosive/StickyBomb.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/explosive/StickyBomb.java new file mode 100644 index 0000000..504ee56 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/explosive/StickyBomb.java @@ -0,0 +1,49 @@ +package net.grandtheftmc.vice.weapon.explosive; + +import org.bukkit.Effect; +import org.bukkit.Material; +import org.bukkit.Sound; + +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.ThrowableWeapon; +import net.grandtheftmc.guns.weapon.WeaponType; + +/** + * Created by Luke Bingham on 18/07/2017. + */ +public class StickyBomb extends ThrowableWeapon { + + /** + * Construct a new Weapon. + */ + public StickyBomb() { + super( + (short) 37, + "Sticky Bomb", //Name + WeaponType.THROWABLE, //Weapon Type + AmmoType.EXPLOSIVE, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 361).build(), //ItemStack + new Sound[] { //Gun Sounds + Sound.ENTITY_SKELETON_SHOOT, + Sound.ENTITY_BAT_TAKEOFF, + Sound.ENTITY_BAT_TAKEOFF, + Sound.ENTITY_GENERIC_EXPLODE + } + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.FIREBALL).setName(getName()).build()); + setDescription("It's like the explosion", "is hugging you!"); + + this.particles = Effect.EXPLOSION_HUGE; + this.delay = 40; + this.sticky = true; +// this.duration = 100; + this.damage = 3; + this.explosionSize = 3.0; + this.explosionDelay = 0; + this.tntFuseDelay = 80; + this.explosionStrength = 0.9; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/explosive/TearGas.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/explosive/TearGas.java new file mode 100644 index 0000000..4cb60d0 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/explosive/TearGas.java @@ -0,0 +1,48 @@ +package net.grandtheftmc.vice.weapon.explosive; + +import org.bukkit.Effect; +import org.bukkit.Material; +import org.bukkit.Sound; + +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.ThrowableWeapon; +import net.grandtheftmc.guns.weapon.WeaponType; + +/** + * Created by Luke Bingham on 18/07/2017. + */ +public class TearGas extends ThrowableWeapon { + + /** + * Construct a new Weapon. + */ + public TearGas() { + super( + (short) 35, + "Tear Gas", //Name + WeaponType.THROWABLE, //Weapon Type + AmmoType.EXPLOSIVE, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 341).build(), //ItemStack + new Sound[] { //Gun Sounds + Sound.ENTITY_SKELETON_SHOOT, + Sound.ENTITY_BAT_TAKEOFF, + Sound.ENTITY_BAT_TAKEOFF, + Sound.BLOCK_LAVA_EXTINGUISH + } + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.GHAST_TEAR).setName(getName()).build()); + setDescription("This will make them", "cry more than your ex."); + + this.particles = Effect.CLOUD; + this.delay = 55; + this.teargas = true; + this.duration = 140; + this.damage = 1.0; + this.explosionSize = 5.0; + this.explosionDelay = 20; + this.explosionStrength = 0.0; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/melee/BaseballBat.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/melee/BaseballBat.java new file mode 100644 index 0000000..d38f14c --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/melee/BaseballBat.java @@ -0,0 +1,57 @@ +package net.grandtheftmc.vice.weapon.melee; + +import org.bukkit.Material; +import org.bukkit.Sound; + +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.MeleeWeapon; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; + +/** + * Created by Luke Bingham on 18/07/2017. + */ +public class BaseballBat extends MeleeWeapon { + + /** + * Construct a new Weapon. + */ + public BaseballBat() { + super( + (short) 4, + "Baseball Bat", //Name + WeaponType.MELEE, //Weapon Type + AmmoType.MELEE, //AmmoType + + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 31).build(), //ItemStack + new Sound[] { //Sounds + Sound.ENTITY_PLAYER_ATTACK_STRONG, + Sound.ITEM_ARMOR_EQUIP_GENERIC, + Sound.ITEM_ARMOR_EQUIP_GENERIC + } + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.IRON_BARDING).setName(getName()).build()); + setDescription("Are you a cave man?"); + + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.delay = 7; + this.meleeDamage = 7.0; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/melee/Chainsaw.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/melee/Chainsaw.java new file mode 100644 index 0000000..4f47071 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/melee/Chainsaw.java @@ -0,0 +1,84 @@ +package net.grandtheftmc.vice.weapon.melee; + +import org.bukkit.Material; +import org.bukkit.Sound; + +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.MeleeWeapon; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.attribute.RankedWeapon; + +/** + * Created by Luke Bingham on 18/07/2017. + */ +public class Chainsaw extends MeleeWeapon implements RankedWeapon { + + /** + * Construct a new Weapon. + */ + public Chainsaw() { + super( + (short) 5, + "Chainsaw", //Name + WeaponType.MELEE, //Weapon Type + AmmoType.ENERGY, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 41).build(), //ItemStack + new Sound[] { //Sounds + Sound.ENTITY_WOLF_GROWL, + Sound.ITEM_ARMOR_EQUIP_GENERIC, + Sound.ITEM_ARMOR_EQUIP_GENERIC + } + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.DIAMOND_BARDING).setName(getName()).build()); + setDescription("A chainsaw?", "You absolute monster!"); + + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.delay = 5; + this.meleeDamage = 7.0; + this.range = 1.5; + } + + /*@Override + public void onRightClick(Player player) { + ServerUtil.debug("20"); + MathUtil.getNearbyEntities(player, this.range).forEach(e -> { + ServerUtil.debug("21"); + if (player.hasLineOfSight(e)) { + ServerUtil.debug("they have line of sight.2"); + Vector toEntity = e.getLocation().toVector().subtract(player.getLocation().toVector()); + double dot = toEntity.normalize().dot(player.getLocation().getDirection()); + ServerUtil.debug(dot + " / dot2"); + if (dot <= 1 && dot >= 0) { + ServerUtil.debug("yup.2"); + e.setNoDamageTicks(0); + e.damage(getMeleeDamage(), player); + } + } + }); + Sounds.broadcastSound(getSounds()[0], player.getEyeLocation()); + }//todo: moved to the meleeweapon class, don't know why this isn't working.*/ + + @Override + public UserRank requiredRank() { + return UserRank.PREMIUM; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/melee/Dildo.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/melee/Dildo.java new file mode 100644 index 0000000..22bc9cc --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/melee/Dildo.java @@ -0,0 +1,57 @@ +package net.grandtheftmc.vice.weapon.melee; + +import org.bukkit.Material; +import org.bukkit.Sound; + +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.MeleeWeapon; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; + +/** + * Created by Luke Bingham on 03/08/2017. + */ +public class Dildo extends MeleeWeapon { + + /** + * Construct a new Weapon. + */ + public Dildo() { + super( + (short) 41, + "Dildo", //Name + WeaponType.MELEE, //Weapon Type + AmmoType.MELEE, //AmmoType + + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 401).build(), //ItemStack + new Sound[] { //Sounds + Sound.ENTITY_PLAYER_ATTACK_STRONG, + Sound.ITEM_ARMOR_EQUIP_GENERIC, + Sound.ITEM_ARMOR_EQUIP_GENERIC + } + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.SAPLING, (byte) 1).setName(getName()).build()); + setDescription("Certified 'me time'."); + + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.delay = 7; + this.meleeDamage = 8.0; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/melee/Katana.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/melee/Katana.java new file mode 100644 index 0000000..5ea6aea --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/melee/Katana.java @@ -0,0 +1,57 @@ +package net.grandtheftmc.vice.weapon.melee; + +import org.bukkit.Material; +import org.bukkit.Sound; + +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.MeleeWeapon; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; + +/** + * Created by Luke Bingham on 03/08/2017. + */ +public class Katana extends MeleeWeapon { + + /** + * Construct a new Weapon. + */ + public Katana() { + super( + (short) 43, + "Katana", //Name + WeaponType.MELEE, //Weapon Type + AmmoType.MELEE, //AmmoType + + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 421).build(), //ItemStack + new Sound[] { //Sounds + Sound.ENTITY_PLAYER_ATTACK_STRONG, + Sound.ITEM_ARMOR_EQUIP_GENERIC, + Sound.ITEM_ARMOR_EQUIP_GENERIC + } + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.FLINT_AND_STEEL).setDurability((short) 56).setName(getName()).build()); + setDescription("An cold-iron forged,", "ancient Japanese samurai sword"); + + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.delay = 12; + this.meleeDamage = 11.0; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/melee/Knife.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/melee/Knife.java new file mode 100644 index 0000000..212c065 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/melee/Knife.java @@ -0,0 +1,56 @@ +package net.grandtheftmc.vice.weapon.melee; + +import org.bukkit.Material; +import org.bukkit.Sound; + +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.MeleeWeapon; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; + +/** + * Created by Luke Bingham on 18/07/2017. + */ +public class Knife extends MeleeWeapon { + + /** + * Construct a new Weapon. + */ + public Knife() { + super( + (short) 3, + "Knife", //Name + WeaponType.MELEE, //Weapon Type + AmmoType.MELEE, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 21).build(), //ItemStack + new Sound[] { //Sounds + Sound.ENTITY_SKELETON_SHOOT, + Sound.ITEM_ARMOR_EQUIP_GENERIC, + Sound.ITEM_ARMOR_EQUIP_GENERIC + } + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.GOLD_BARDING).setName(getName()).build()); + setDescription("Don't bring a knife", "to a gun fight."); + + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.delay = 7; + this.meleeDamage = 8.0; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/melee/NightStick.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/melee/NightStick.java new file mode 100644 index 0000000..73b644a --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/melee/NightStick.java @@ -0,0 +1,56 @@ +package net.grandtheftmc.vice.weapon.melee; + +import org.bukkit.Material; +import org.bukkit.Sound; + +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.MeleeWeapon; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; + +/** + * Created by Luke Bingham on 18/07/2017. + */ +public class NightStick extends MeleeWeapon { + + /** + * Construct a new Weapon. + */ + public NightStick() { + super( + (short) 2, + "Night Stick", //Name + WeaponType.MELEE, //Weapon Type + AmmoType.MELEE, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 11).build(), //ItemStack + new Sound[] { //Sounds + Sound.ENTITY_PLAYER_ATTACK_WEAK, + Sound.ITEM_ARMOR_EQUIP_GENERIC, + Sound.ITEM_ARMOR_EQUIP_GENERIC + } + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.BLAZE_ROD).setName(getName()).build()); + setDescription("Enjoy trying to beat", "armed criminals to death."); + + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.delay = 5; + this.meleeDamage = 7.0; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/melee/Rake.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/melee/Rake.java new file mode 100644 index 0000000..bdbf380 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/melee/Rake.java @@ -0,0 +1,56 @@ +package net.grandtheftmc.vice.weapon.melee; + +import org.bukkit.Material; +import org.bukkit.Sound; + +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.MeleeWeapon; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; + +/** + * Created by Luke Bingham on 18/07/2017. + */ +public class Rake extends MeleeWeapon { + + /** + * Construct a new Weapon. + */ + public Rake() { + super( + (short) 1, + "Rake", //Name + WeaponType.MELEE, //Weapon Type + AmmoType.MELEE, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 1).build(), //ItemStack + new Sound[] { //Sounds + Sound.ENTITY_PLAYER_ATTACK_NODAMAGE, + Sound.ITEM_ARMOR_EQUIP_GENERIC, + Sound.ITEM_ARMOR_EQUIP_GENERIC + } + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.STICK).setName(getName()).build()); + setDescription("This...isn't even a", "proper weapon."); + + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.delay = 6; + this.meleeDamage = 5; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/assault/AdvancedRifle.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/assault/AdvancedRifle.java new file mode 100644 index 0000000..370eccf --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/assault/AdvancedRifle.java @@ -0,0 +1,70 @@ +package net.grandtheftmc.vice.weapon.ranged.assault; + +import org.bukkit.Effect; +import org.bukkit.Material; +import org.bukkit.Sound; + +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.ranged.attachment.Attachment; +import net.grandtheftmc.guns.weapon.ranged.guns.AssultRifleWeapon; + +/** + * Created by Luke Bingham on 17/07/2017. + */ +public class AdvancedRifle extends AssultRifleWeapon { + /** + * Construct a new RangedWeapon. + */ + public AdvancedRifle() { + super( + (short) 24, + "Advanced Rifle", //Name + WeaponType.ASSAULT, //Weapon Type + AmmoType.ASSAULT_RIFLE, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 231).build(), //ItemStack + new Sound[] { //Gun Sounds + Sound.ENTITY_ITEM_BREAK, + Sound.ITEM_ARMOR_EQUIP_IRON, + Sound.ITEM_ARMOR_EQUIP_IRON, + Sound.ENTITY_SKELETON_AMBIENT, + }, + Effect.VOID_FOG //Particles + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.STONE_AXE).setName(getName()).build()); + setDescription("Bit egotistical to name", "your gun 'advanced', no?"); + + setSupportedAttachments(Attachment.SUPPRESSOR, Attachment.EXTENDED_MAGS, Attachment.GRIP, Attachment.SCOPE); + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.walkSpeed = 0.18; //Weapon + + this.damage = 8.0; //RangedWeapon + this.meleeDamage = 5.0; //RangedWeapon + this.accuracy = 0.02; //RangedWeapon + this.magSize = 30; //RangedWeapon + this.reloadTime = 35; //RangedWeapon + this.range = 45; //RangedWeapon + this.recoil = 0.2; //RangedWeapon + this.zoom = 3; //RangedWeapon + + this.rpm = 500; //AssultRifleWeapon + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/assault/AssaultRifle.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/assault/AssaultRifle.java new file mode 100644 index 0000000..6cbf1d7 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/assault/AssaultRifle.java @@ -0,0 +1,70 @@ +package net.grandtheftmc.vice.weapon.ranged.assault; + +import org.bukkit.Effect; +import org.bukkit.Material; +import org.bukkit.Sound; + +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.ranged.attachment.Attachment; +import net.grandtheftmc.guns.weapon.ranged.guns.AssultRifleWeapon; + +/** + * Created by Luke Bingham on 17/07/2017. + */ +public class AssaultRifle extends AssultRifleWeapon { + /** + * Construct a new RangedWeapon. + */ + public AssaultRifle() { + super( + (short) 21, + "Assault Rifle", //Name + WeaponType.ASSAULT, //Weapon Type + AmmoType.ASSAULT_RIFLE, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 201).build(), //ItemStack + new Sound[] { //Gun Sounds + Sound.ENTITY_ITEM_BREAK, + Sound.ITEM_ARMOR_EQUIP_IRON, + Sound.ITEM_ARMOR_EQUIP_IRON, + Sound.ENTITY_SKELETON_AMBIENT, + }, + Effect.VOID_FOG //Particles + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.STONE_SWORD).setName(getName()).build()); + setDescription("Great stock weapon for", "medium range gunfights."); + + setSupportedAttachments(Attachment.SUPPRESSOR, Attachment.EXTENDED_MAGS, Attachment.GRIP, Attachment.SCOPE); + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.walkSpeed = 0.18; //Weapon + + this.damage = 6.0; //RangedWeapon + this.meleeDamage = 5.0; //RangedWeapon + this.accuracy = 0.022; //RangedWeapon + this.magSize = 30; //RangedWeapon + this.reloadTime = 40; //RangedWeapon + this.range = 45; //RangedWeapon + this.recoil = 0.4; //RangedWeapon + this.zoom = 3; //RangedWeapon + + this.rpm = 380; //AssultRifleWeapon + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/assault/BullpupRifle.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/assault/BullpupRifle.java new file mode 100644 index 0000000..c5d9395 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/assault/BullpupRifle.java @@ -0,0 +1,70 @@ +package net.grandtheftmc.vice.weapon.ranged.assault; + +import org.bukkit.Effect; +import org.bukkit.Material; +import org.bukkit.Sound; + +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.ranged.attachment.Attachment; +import net.grandtheftmc.guns.weapon.ranged.guns.AssultRifleWeapon; + +/** + * Created by Luke Bingham on 17/07/2017. + */ +public class BullpupRifle extends AssultRifleWeapon { + /** + * Construct a new RangedWeapon. + */ + public BullpupRifle() { + super( + (short) 23, + "Bullpup Rifle", //Name + WeaponType.ASSAULT, //Weapon Type + AmmoType.ASSAULT_RIFLE, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 221).build(), //ItemStack + new Sound[] { //Gun Sounds + Sound.ENTITY_ITEM_BREAK, + Sound.ITEM_ARMOR_EQUIP_IRON, + Sound.ITEM_ARMOR_EQUIP_IRON, + Sound.ENTITY_SKELETON_AMBIENT, + }, + Effect.VOID_FOG //Particles + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.STONE_PICKAXE).setName(getName()).build()); + setDescription("It's a bit like the", "normal AR, but Chinese..", "很好!"); + + setSupportedAttachments(Attachment.SUPPRESSOR, Attachment.EXTENDED_MAGS, Attachment.GRIP, Attachment.SCOPE); + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.walkSpeed = 0.18; //Weapon + + this.damage = 7.0; //RangedWeapon + this.meleeDamage = 5.0; //RangedWeapon + this.accuracy = 0.016; //RangedWeapon + this.magSize = 30; //RangedWeapon + this.reloadTime = 40; //RangedWeapon + this.range = 45; //RangedWeapon + this.recoil = 0.3; //RangedWeapon + this.zoom = 2; //RangedWeapon + + this.rpm = 500; //AssultRifleWeapon + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/assault/CarbineRifle.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/assault/CarbineRifle.java new file mode 100644 index 0000000..125fe65 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/assault/CarbineRifle.java @@ -0,0 +1,70 @@ +package net.grandtheftmc.vice.weapon.ranged.assault; + +import org.bukkit.Effect; +import org.bukkit.Material; +import org.bukkit.Sound; + +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.ranged.attachment.Attachment; +import net.grandtheftmc.guns.weapon.ranged.guns.AssultRifleWeapon; + +/** + * Created by Luke Bingham on 17/07/2017. + */ +public class CarbineRifle extends AssultRifleWeapon { + /** + * Construct a new RangedWeapon. + */ + public CarbineRifle() { + super( + (short) 22, + "Carbine Rifle", //Name + WeaponType.ASSAULT, //Weapon Type + AmmoType.ASSAULT_RIFLE, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 211).build(), //ItemStack + new Sound[] { //Gun Sounds + Sound.ENTITY_ITEM_BREAK, + Sound.ITEM_ARMOR_EQUIP_IRON, + Sound.ITEM_ARMOR_EQUIP_IRON, + Sound.ENTITY_SKELETON_AMBIENT, + }, + Effect.VOID_FOG //Particles + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.STONE_SPADE).setName(getName()).build()); + setDescription("A longer range version", "of your stock AR."); + + setSupportedAttachments(Attachment.SUPPRESSOR, Attachment.EXTENDED_MAGS, Attachment.GRIP, Attachment.SCOPE); + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.walkSpeed = 0.18; //Weapon + + this.damage = 7.0; //RangedWeapon + this.meleeDamage = 5.0; //RangedWeapon + this.accuracy = 0.018; //RangedWeapon + this.magSize = 30; //RangedWeapon + this.reloadTime = 40; //RangedWeapon + this.range = 45; //RangedWeapon + this.recoil = 0.4; //RangedWeapon + this.zoom = 2; //RangedWeapon + + this.rpm = 445; //AssultRifleWeapon + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/assault/SpecialCarbine.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/assault/SpecialCarbine.java new file mode 100644 index 0000000..80f1076 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/assault/SpecialCarbine.java @@ -0,0 +1,77 @@ +package net.grandtheftmc.vice.weapon.ranged.assault; + +import org.bukkit.Effect; +import org.bukkit.Material; +import org.bukkit.Sound; + +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.attribute.RankedWeapon; +import net.grandtheftmc.guns.weapon.ranged.attachment.Attachment; +import net.grandtheftmc.guns.weapon.ranged.guns.AssultRifleWeapon; + +/** + * Created by Luke Bingham on 17/07/2017. + */ +public class SpecialCarbine extends AssultRifleWeapon implements RankedWeapon { + /** + * Construct a new RangedWeapon. + */ + public SpecialCarbine() { + super( + (short) 25, + "Special Carbine", //Name + WeaponType.ASSAULT, //Weapon Type + AmmoType.ASSAULT_RIFLE, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 241).build(), //ItemStack + new Sound[] { //Gun Sounds + Sound.ENTITY_ITEM_BREAK, + Sound.ITEM_ARMOR_EQUIP_IRON, + Sound.ITEM_ARMOR_EQUIP_IRON, + Sound.ENTITY_SKELETON_AMBIENT, + }, + Effect.VOID_FOG //Particles + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.STONE_HOE).setName(getName()).build()); + setDescription("Super solid gun choice;", "very versatile."); + + setSupportedAttachments(Attachment.SUPPRESSOR, Attachment.EXTENDED_MAGS, Attachment.GRIP, Attachment.SCOPE); + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.walkSpeed = 0.18; //Weapon + + this.damage = 9.0; //RangedWeapon + this.meleeDamage = 5.0; //RangedWeapon + this.accuracy = 0.016; //RangedWeapon + this.magSize = 30; //RangedWeapon + this.reloadTime = 35; //RangedWeapon + this.range = 45; //RangedWeapon + this.recoil = 0.2; //RangedWeapon + this.zoom = 2; //RangedWeapon + + this.rpm = 445; //AssultRifleWeapon + } + + @Override + public UserRank requiredRank() { + return UserRank.ELITE; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/launcher/GrenadeLauncher.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/launcher/GrenadeLauncher.java new file mode 100644 index 0000000..416d72e --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/launcher/GrenadeLauncher.java @@ -0,0 +1,81 @@ +package net.grandtheftmc.vice.weapon.ranged.launcher; + +import org.bukkit.Effect; +import org.bukkit.Material; +import org.bukkit.Sound; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.attribute.RankedWeapon; +import net.grandtheftmc.guns.weapon.ranged.attachment.Attachment; +import net.grandtheftmc.guns.weapon.ranged.guns.LauncherWeapon; + +/** + * Created by Luke Bingham on 17/07/2017. + */ +public class GrenadeLauncher extends LauncherWeapon implements RankedWeapon { + + /** + * Construct a new RangedWeapon. + */ + public GrenadeLauncher() { + super( + (short) 31, + "Grenade Launcher", //Name + WeaponType.LAUNCHER, //Weapon Type + AmmoType.GRENADE, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 301).build(), //ItemStack + new Sound[] { //Gun Sounds + Sound.ENTITY_CHICKEN_EGG, + Sound.ITEM_ARMOR_EQUIP_DIAMOND, + Sound.ITEM_ARMOR_EQUIP_DIAMOND, + Sound.BLOCK_PISTON_CONTRACT, + }, + Effect.FIREWORKS_SPARK //Particles + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.SHEARS).setName(getName()).build()); + setDescription("For if your throwing", "game is weak " + (Core.getSettings().isSister() ? "." : "AF.")); + + setSupportedAttachments(Attachment.GRIP); + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.walkSpeed = 0.12; //Weapon + this.delay = 20; + + this.damage = 350.0; //RangedWeapon + this.meleeDamage = 6.0; //RangedWeapon + this.accuracy = 0.005; //RangedWeapon + this.magSize = 6; //RangedWeapon + this.reloadTime = 50; //RangedWeapon + this.range = 50; //RangedWeapon + this.recoil = 0.5; //RangedWeapon + this.zoom = 1; //RangedWeapon + + this.blowOnHit = false; //LauncherWeapon + this.blowDelay = 5; + } + + @Override + public UserRank requiredRank() { + return UserRank.SPONSOR; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/launcher/HomingLauncher.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/launcher/HomingLauncher.java new file mode 100644 index 0000000..89bbfc9 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/launcher/HomingLauncher.java @@ -0,0 +1,82 @@ +package net.grandtheftmc.vice.weapon.ranged.launcher; + +import org.bukkit.Effect; +import org.bukkit.Material; +import org.bukkit.Sound; + +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.attribute.RankedWeapon; +import net.grandtheftmc.guns.weapon.ranged.attachment.Attachment; +import net.grandtheftmc.guns.weapon.ranged.guns.LauncherWeapon; + +/** + * Created by Luke Bingham on 17/07/2017. + */ +public class HomingLauncher extends LauncherWeapon implements RankedWeapon { + + /** + * Construct a new RangedWeapon. + */ + public HomingLauncher() { + super( + (short) 32, + "Homing Launcher", //Name + WeaponType.LAUNCHER, //Weapon Type + AmmoType.ROCKET, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 311).build(), //ItemStack + new Sound[] { //Gun Sounds + Sound.ENTITY_FIREWORK_LAUNCH, + Sound.ITEM_ARMOR_EQUIP_DIAMOND, + Sound.ITEM_ARMOR_EQUIP_DIAMOND, + Sound.BLOCK_PISTON_CONTRACT, + }, + Effect.FIREWORKS_SPARK //Particles + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.SULPHUR).setName(getName()).build()); + setDescription("Imagine a homing pidgeon.", "But it explodes."); + + setSupportedAttachments(Attachment.GRIP); + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.walkSpeed = 0.12; //Weapon + this.delay = 60; + + this.damage = 350.0; //RangedWeapon + this.meleeDamage = 7.0; //RangedWeapon + this.accuracy = 0.005; //RangedWeapon + this.magSize = 1; //RangedWeapon + this.reloadTime = 60; //RangedWeapon + this.range = 70; //RangedWeapon + this.recoil = 1.0; //RangedWeapon + this.zoom = 1; //RangedWeapon + + this.homingLauncher = true; //LauncherWeapon + this.rocketSpeed = 1.0; //LauncherWeapon + this.explosionSize = 5.0; //LauncherWeapon + this.explosionStrength = 1.7; //LauncherWeapon + } + + @Override + public UserRank requiredRank() { + return UserRank.SUPREME; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/launcher/NetLauncher.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/launcher/NetLauncher.java new file mode 100644 index 0000000..87bb8c0 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/launcher/NetLauncher.java @@ -0,0 +1,73 @@ +package net.grandtheftmc.vice.weapon.ranged.launcher; + +import org.bukkit.Effect; +import org.bukkit.Material; +import org.bukkit.Sound; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.ranged.attachment.Attachment; +import net.grandtheftmc.guns.weapon.ranged.guns.LauncherWeapon; + +/** + * Created by Luke Bingham on 03/08/2017. + */ +public class NetLauncher extends LauncherWeapon { + + /** + * Construct a new RangedWeapon. + */ + public NetLauncher() { + super( + (short) 39, + "Net Launcher", //Name + WeaponType.NETGUN, //TODO Weapon Type + AmmoType.ROCKET, //TODO AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 381).build(), //ItemStack + new Sound[] { //Gun Sounds + Sound.ENTITY_SHULKER_SHOOT, + Sound.ITEM_ARMOR_EQUIP_DIAMOND, + Sound.ITEM_ARMOR_EQUIP_DIAMOND, + Sound.BLOCK_PISTON_CONTRACT, + }, + Effect.BLAZE_SHOOT //Particles + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.SAPLING).setName(getName()).build()); + setDescription("It's like discount,", (Core.getSettings().isSister() ? "weak" : "shitty") + " spiderman."); + + setSupportedAttachments(Attachment.GRIP); + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.walkSpeed = 0.12; //Weapon + this.delay = 50; + + this.damage = 2.5; //RangedWeapon + this.meleeDamage = 8.0; //RangedWeapon + this.accuracy = 0.005; //RangedWeapon + this.magSize = 4; //RangedWeapon + this.reloadTime = 80; //RangedWeapon + this.range = 35; //RangedWeapon + this.recoil = 1.0; //RangedWeapon + this.zoom = 1; //RangedWeapon + + //this.netgun = true; //Launcher weapon todo: disabled because it was updating the actual class, now it just uses getName().equalsignorecase("net launcher") + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/launcher/RPG.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/launcher/RPG.java new file mode 100644 index 0000000..90401c5 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/launcher/RPG.java @@ -0,0 +1,74 @@ +package net.grandtheftmc.vice.weapon.ranged.launcher; + +import org.bukkit.Effect; +import org.bukkit.Material; +import org.bukkit.Sound; + +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.ranged.attachment.Attachment; +import net.grandtheftmc.guns.weapon.ranged.guns.LauncherWeapon; + +/** + * Created by Luke Bingham on 17/07/2017. + */ +public class RPG extends LauncherWeapon { + + /** + * Construct a new RangedWeapon. + */ + public RPG() { + super( + (short) 30, + "RPG", //Name + WeaponType.LAUNCHER, //Weapon Type + AmmoType.ROCKET, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 291).build(), //ItemStack + new Sound[] { //Gun Sounds + Sound.ENTITY_FIREWORK_LAUNCH, + Sound.ITEM_ARMOR_EQUIP_DIAMOND, + Sound.ITEM_ARMOR_EQUIP_DIAMOND, + Sound.BLOCK_PISTON_CONTRACT, + }, + Effect.FIREWORKS_SPARK //Particles + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.FEATHER).setName(getName()).build()); + setDescription("Want to take out", "the side of a building?", "Use this."); + + setSupportedAttachments(Attachment.GRIP); + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.walkSpeed = 0.12; //Weapon + this.delay = 80; + + this.damage = 350.0; //RangedWeapon + this.meleeDamage = 7.0; //RangedWeapon + this.accuracy = 0.045; //RangedWeapon + this.magSize = 1; //RangedWeapon + this.reloadTime = 80; //RangedWeapon + this.range = 70; //RangedWeapon + this.recoil = 1.0; //RangedWeapon + this.zoom = 1; //RangedWeapon + + this.rocketSpeed = 4.0; //LauncherWeapon + this.explosionSize = 5.0; //LauncherWeapon + this.explosionStrength = 1.7; //LauncherWeapon + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/lmg/CombatMG.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/lmg/CombatMG.java new file mode 100644 index 0000000..bd0aa9d --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/lmg/CombatMG.java @@ -0,0 +1,79 @@ +package net.grandtheftmc.vice.weapon.ranged.lmg; + +import org.bukkit.Effect; +import org.bukkit.Material; +import org.bukkit.Sound; + +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.attribute.RankedWeapon; +import net.grandtheftmc.guns.weapon.ranged.attachment.Attachment; +import net.grandtheftmc.guns.weapon.ranged.guns.LMGWeapon; + +/** + * Created by Luke Bingham on 17/07/2017. + */ +public class CombatMG extends LMGWeapon implements RankedWeapon { + + /** + * Construct a new RangedWeapon. + */ + public CombatMG() { + super( + (short) 27, + "Combat MG", //Name + WeaponType.LMG, //Weapon Type + AmmoType.LMG, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 261).build(), //ItemStack + new Sound[] { //Gun Sounds + Sound.BLOCK_NOTE_SNARE, + Sound.ITEM_ARMOR_EQUIP_DIAMOND, + Sound.ITEM_ARMOR_EQUIP_DIAMOND, + Sound.ENTITY_SKELETON_STEP, + }, + Effect.VOID_FOG //Particles + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.DIAMOND_SPADE).setName(getName()).build()); + setDescription("Cover me,", "I'm going in! (Military style)"); + + setSupportedAttachments(Attachment.SUPPRESSOR, Attachment.EXTENDED_MAGS, Attachment.GRIP, Attachment.SCOPE); + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.walkSpeed = 0.14; //Weapon + this.delay = 5; + + this.damage = 9.0; //RangedWeapon + this.meleeDamage = 6.0; //RangedWeapon + this.accuracy = 0.02; //RangedWeapon + this.magSize = 100; //RangedWeapon + this.reloadTime = 50; //RangedWeapon + this.range = 60; //RangedWeapon + this.recoil = 0.1; //RangedWeapon + this.zoom = 5; //RangedWeapon + + this.rpm = 550; //LMGWeapon + } + + @Override + public UserRank requiredRank() { + return UserRank.SPONSOR; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/lmg/MG.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/lmg/MG.java new file mode 100644 index 0000000..47f43ee --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/lmg/MG.java @@ -0,0 +1,72 @@ +package net.grandtheftmc.vice.weapon.ranged.lmg; + +import org.bukkit.Effect; +import org.bukkit.Material; +import org.bukkit.Sound; + +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.ranged.attachment.Attachment; +import net.grandtheftmc.guns.weapon.ranged.guns.LMGWeapon; + +/** + * Created by Luke Bingham on 17/07/2017. + */ +public class MG extends LMGWeapon { + + /** + * Construct a new RangedWeapon. + */ + public MG() { + super( + (short) 26, + "MG", //Name + WeaponType.LMG, //Weapon Type + AmmoType.LMG, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 251).build(), //ItemStack + new Sound[] { //Gun Sounds + Sound.BLOCK_NOTE_SNARE, + Sound.ITEM_ARMOR_EQUIP_DIAMOND, + Sound.ITEM_ARMOR_EQUIP_DIAMOND, + Sound.ENTITY_SKELETON_STEP, + }, + Effect.VOID_FOG //Particles + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.DIAMOND_SWORD).setName(getName()).build()); + setDescription("Cover me,", "I'm going in!"); + + setSupportedAttachments(Attachment.SUPPRESSOR, Attachment.EXTENDED_MAGS, Attachment.GRIP, Attachment.SCOPE); + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.walkSpeed = 0.14; //Weapon + this.delay = 5; + + this.damage = 8.0; //RangedWeapon + this.meleeDamage = 6.0; //RangedWeapon + this.accuracy = 0.025; //RangedWeapon + this.magSize = 54; //RangedWeapon + this.reloadTime = 60; //RangedWeapon + this.range = 60; //RangedWeapon + this.recoil = 0.2; //RangedWeapon + this.zoom = 3; //RangedWeapon + + this.rpm = 440; //LMGWeapon + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/pistol/CombatPistol.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/pistol/CombatPistol.java new file mode 100644 index 0000000..2fdfd43 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/pistol/CombatPistol.java @@ -0,0 +1,69 @@ +package net.grandtheftmc.vice.weapon.ranged.pistol; + +import org.bukkit.Effect; +import org.bukkit.Material; +import org.bukkit.Sound; + +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.ranged.attachment.Attachment; +import net.grandtheftmc.guns.weapon.ranged.guns.PistolWeapon; + +/** + * Created by Luke Bingham on 17/07/2017. + */ +public class CombatPistol extends PistolWeapon { + + /** + * Construct a new RangedWeapon. + */ + public CombatPistol() { + super( + (short) 8, + "Combat Pistol", //Name + WeaponType.PISTOL, //Weapon Type + AmmoType.PISTOL, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 71).build(), //ItemStack + new Sound[] { //Gun Sounds + Sound.ENTITY_FIREWORK_BLAST, + Sound.ITEM_ARMOR_EQUIP_LEATHER, + Sound.ITEM_ARMOR_EQUIP_LEATHER, + Sound.BLOCK_NOTE_HAT, + }, + Effect.CRIT //Particles + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.WOOD_PICKAXE).setName(getName()).build()); + setDescription("Standard Military grade", "Pistol, Don't bring it", "to a proper gunfight."); + + setSupportedAttachments(Attachment.SUPPRESSOR, Attachment.EXTENDED_MAGS, Attachment.GRIP, Attachment.SCOPE); + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.walkSpeed = 0.2; //Weapon + this.delay = 7; //Weapon + + this.damage = 6.0; //RangedWeapon + this.meleeDamage = 3.0; //RangedWeapon + this.accuracy = 0.02; //RangedWeapon + this.magSize = 12; //RangedWeapon + this.reloadTime = 30; //RangedWeapon + this.range = 30; //RangedWeapon + this.zoom = 3; //RangedWeapon + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/pistol/HeavyPistol.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/pistol/HeavyPistol.java new file mode 100644 index 0000000..7ad33ef --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/pistol/HeavyPistol.java @@ -0,0 +1,70 @@ +package net.grandtheftmc.vice.weapon.ranged.pistol; + +import org.bukkit.Effect; +import org.bukkit.Material; +import org.bukkit.Sound; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.ranged.attachment.Attachment; +import net.grandtheftmc.guns.weapon.ranged.guns.PistolWeapon; + +/** + * Created by Luke Bingham on 17/07/2017. + */ +public class HeavyPistol extends PistolWeapon { + + /** + * Construct a new RangedWeapon. + */ + public HeavyPistol() { + super( + (short) 9, + "Heavy Pistol", //Name + WeaponType.PISTOL, //Weapon Type + AmmoType.PISTOL, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 81).build(), //ItemStack + new Sound[] { //Gun Sounds + Sound.ENTITY_FIREWORK_BLAST, + Sound.ITEM_ARMOR_EQUIP_LEATHER, + Sound.ITEM_ARMOR_EQUIP_LEATHER, + Sound.BLOCK_NOTE_HAT, + }, + Effect.CRIT //Particles + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.WOOD_AXE).setName(getName()).build()); + setDescription("Like the" + (Core.getSettings().isSister() ? "" : " bitch") + " basic", "pistol, but bigger.", "And badder."); + + setSupportedAttachments(Attachment.SUPPRESSOR, Attachment.EXTENDED_MAGS, Attachment.GRIP, Attachment.SCOPE); + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.walkSpeed = 0.2; //Weapon + this.delay = 8; //Weapon + + this.damage = 8.0; //RangedWeapon + this.meleeDamage = 4.0; //RangedWeapon + this.accuracy = 0.02; //RangedWeapon + this.magSize = 18; //RangedWeapon + this.reloadTime = 40; //RangedWeapon + this.range = 30; //RangedWeapon + this.zoom = 3; //RangedWeapon + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/pistol/MarksmanPistol.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/pistol/MarksmanPistol.java new file mode 100644 index 0000000..549c1a3 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/pistol/MarksmanPistol.java @@ -0,0 +1,74 @@ +package net.grandtheftmc.vice.weapon.ranged.pistol; + +import org.bukkit.Effect; +import org.bukkit.Material; +import org.bukkit.Sound; + +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.attribute.RankedWeapon; +import net.grandtheftmc.guns.weapon.ranged.guns.PistolWeapon; + +/** + * Created by Luke Bingham on 17/07/2017. + */ +public class MarksmanPistol extends PistolWeapon implements RankedWeapon { + + /** + * Construct a new RangedWeapon. + */ + public MarksmanPistol() { + super( + (short) 10, + "Marksman Pistol", //Name + WeaponType.PISTOL, //Weapon Type + AmmoType.PISTOL, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 91).build(), //ItemStack + new Sound[] { //Gun Sounds + Sound.ENTITY_FIREWORK_BLAST, + Sound.ITEM_ARMOR_EQUIP_LEATHER, + Sound.ITEM_ARMOR_EQUIP_LEATHER, + Sound.BLOCK_NOTE_HAT, + }, + Effect.CRIT //Particles + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.WOOD_HOE).setName(getName()).build()); + setDescription("For when you can't afford", "a real sniper rifle."); + + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.walkSpeed = 0.2; //Weapon + this.delay = 57; //Weapon + + this.damage = 20.0; //RangedWeapon + this.meleeDamage = 4.0; //RangedWeapon + this.accuracy = 0.035; //RangedWeapon + this.magSize = 1; //RangedWeapon + this.reloadTime = 100; //RangedWeapon + this.range = 10; //RangedWeapon + this.zoom = 4; //RangedWeapon + } + + @Override + public UserRank requiredRank() { + return UserRank.VIP; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/pistol/Pistol.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/pistol/Pistol.java new file mode 100644 index 0000000..fc68c80 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/pistol/Pistol.java @@ -0,0 +1,70 @@ +package net.grandtheftmc.vice.weapon.ranged.pistol; + +import org.bukkit.Effect; +import org.bukkit.Material; +import org.bukkit.Sound; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.ranged.attachment.Attachment; +import net.grandtheftmc.guns.weapon.ranged.guns.PistolWeapon; + +/** + * Created by Luke Bingham on 17/07/2017. + */ +public class Pistol extends PistolWeapon { + + /** + * Construct a new RangedWeapon. + */ + public Pistol() { + super( + (short) 6, + "Pistol", //Name + WeaponType.PISTOL, //Weapon Type + AmmoType.PISTOL, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 51).build(), //ItemStack + new Sound[] { //Gun Sounds + Sound.ENTITY_FIREWORK_BLAST, + Sound.ITEM_ARMOR_EQUIP_LEATHER, + Sound.ITEM_ARMOR_EQUIP_LEATHER, + Sound.BLOCK_NOTE_HAT, + }, + Effect.WITHER_BREAK_BLOCK //Particles + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.WOOD_SWORD).setName(getName()).build()); + setDescription((Core.getSettings().isSister() ? "." : "Bitch ") + "basic pistol,", "great for scaring the cat"); + + setSupportedAttachments(Attachment.SUPPRESSOR, Attachment.EXTENDED_MAGS, Attachment.GRIP, Attachment.SCOPE); + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.walkSpeed = 0.2; //Weapon + this.delay = 7; //Weapon + + this.damage = 5.0; //RangedWeapon + this.meleeDamage = 3.0; //RangedWeapon + this.accuracy = 0.025; //RangedWeapon + this.magSize = 12; //RangedWeapon + this.reloadTime = 40; //RangedWeapon + this.range = 25; //RangedWeapon + this.zoom = 4; //RangedWeapon + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/pistol/StunGun.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/pistol/StunGun.java new file mode 100644 index 0000000..7733329 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/pistol/StunGun.java @@ -0,0 +1,73 @@ +package net.grandtheftmc.vice.weapon.ranged.pistol; + +import org.bukkit.Effect; +import org.bukkit.Material; +import org.bukkit.Sound; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.ranged.attachment.Attachment; +import net.grandtheftmc.guns.weapon.ranged.guns.PistolWeapon; + +/** + * Created by Luke Bingham on 17/07/2017. + */ +public class StunGun extends PistolWeapon { + + /** + * Construct a new RangedWeapon. + */ + public StunGun() { + super( + (short) 7, + "Stun Gun", //Name + WeaponType.PISTOL, //Weapon Type + AmmoType.NONE, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 61).build(), //ItemStack + new Sound[] { //Gun Sounds + Sound.BLOCK_DISPENSER_DISPENSE, + Sound.ITEM_ARMOR_EQUIP_LEATHER, + Sound.ITEM_ARMOR_EQUIP_LEATHER, + Sound.BLOCK_NOTE_HAT, + }, + Effect.MAGIC_CRIT //Particles + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.WOOD_SPADE).setName(getName()).build()); + setDescription("Nothing quite like", "50,000 volts straight", "to the " + (Core.getSettings().isSister() ? "head." : "nipples.")); + + setSupportedAttachments(Attachment.GRIP); + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.walkSpeed = 0.2; //Weapon + this.delay = 57; //Weapon + + this.damage = 1.0; //RangedWeapon + this.meleeDamage = 3.0; //RangedWeapon + this.accuracy = 0.008; //RangedWeapon + this.magSize = 1; //RangedWeapon + this.reloadTime = 60; //RangedWeapon + this.range = 10; //RangedWeapon + this.zoom = 0; //RangedWeapon + + this.stun = true; //PistolWeapon + this.duration = 80; //PistolWeapon + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/shotgun/AssaultShotgun.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/shotgun/AssaultShotgun.java new file mode 100644 index 0000000..3406216 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/shotgun/AssaultShotgun.java @@ -0,0 +1,72 @@ +package net.grandtheftmc.vice.weapon.ranged.shotgun; + +import org.bukkit.Effect; +import org.bukkit.Material; +import org.bukkit.Sound; + +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.ranged.attachment.Attachment; +import net.grandtheftmc.guns.weapon.ranged.guns.ShotgunWeapon; + +/** + * Created by Luke Bingham on 17/07/2017. + */ +public class AssaultShotgun extends ShotgunWeapon { + + /** + * Construct a new RangedWeapon. + */ + public AssaultShotgun() { + super( + (short) 19, + "Assault Shotgun", //Name + WeaponType.SHOTGUN, //Weapon Type + AmmoType.SHOTGUN, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 181).build(), //ItemStack + new Sound[] { //Gun Sounds + Sound.ENTITY_ZOMBIE_ATTACK_DOOR_WOOD, + Sound.ITEM_ARMOR_EQUIP_CHAIN, + Sound.ITEM_ARMOR_EQUIP_CHAIN, + Sound.ENTITY_IRONGOLEM_ATTACK, + }, + Effect.SMOKE //Particles + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.GOLD_AXE).setName(getName()).build()); + setDescription("Aggressive? Yes.", "Overkill? Most definitely."); + + setSupportedAttachments(Attachment.SUPPRESSOR, Attachment.EXTENDED_MAGS, Attachment.GRIP, Attachment.SCOPE); + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.walkSpeed = 0.14; //Weapon + this.delay = 5; + + this.damage = 5.75; //RangedWeapon + this.meleeDamage = 5.0; //RangedWeapon + this.accuracy = 0.018; //RangedWeapon + this.magSize = 8; //RangedWeapon + this.reloadTime = 40; //RangedWeapon + this.range = 20; //RangedWeapon + this.recoil = 0.5; //RangedWeapon + this.zoom = 2; //RangedWeapon + + this.shellSize = 3; //AssultRifleWeapon + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/shotgun/HeavyShotgun.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/shotgun/HeavyShotgun.java new file mode 100644 index 0000000..47b8343 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/shotgun/HeavyShotgun.java @@ -0,0 +1,79 @@ +package net.grandtheftmc.vice.weapon.ranged.shotgun; + +import org.bukkit.Effect; +import org.bukkit.Material; +import org.bukkit.Sound; + +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.attribute.RankedWeapon; +import net.grandtheftmc.guns.weapon.ranged.attachment.Attachment; +import net.grandtheftmc.guns.weapon.ranged.guns.ShotgunWeapon; + +/** + * Created by Luke Bingham on 17/07/2017. + */ +public class HeavyShotgun extends ShotgunWeapon implements RankedWeapon { + + /** + * Construct a new RangedWeapon. + */ + public HeavyShotgun() { + super( + (short) 20, + "Heavy Shotgun", //Name + WeaponType.SHOTGUN, //Weapon Type + AmmoType.SHOTGUN, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 191).build(), //ItemStack + new Sound[] { //Gun Sounds + Sound.ENTITY_ZOMBIE_ATTACK_DOOR_WOOD, + Sound.ITEM_ARMOR_EQUIP_CHAIN, + Sound.ITEM_ARMOR_EQUIP_CHAIN, + Sound.ENTITY_IRONGOLEM_ATTACK, + }, + Effect.SMOKE //Particles + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.GOLD_HOE).setName(getName()).build()); + setDescription("Like your normal shotgun,", "but even heftier."); + + setSupportedAttachments(Attachment.SUPPRESSOR, Attachment.EXTENDED_MAGS, Attachment.GRIP, Attachment.SCOPE); + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.walkSpeed = 0.12; //Weapon + this.delay = 6; + + this.damage = 6.25; //RangedWeapon + this.meleeDamage = 6.0; //RangedWeapon + this.accuracy = 0.022; //RangedWeapon + this.magSize = 6; //RangedWeapon + this.reloadTime = 40; //RangedWeapon + this.range = 20; //RangedWeapon + this.recoil = 0.6; //RangedWeapon + this.zoom = 3; //RangedWeapon + + this.shellSize = 3; //AssultRifleWeapon + } + + @Override + public UserRank requiredRank() { + return UserRank.VIP; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/shotgun/Musket.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/shotgun/Musket.java new file mode 100644 index 0000000..a7b4b48 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/shotgun/Musket.java @@ -0,0 +1,70 @@ +package net.grandtheftmc.vice.weapon.ranged.shotgun; + +import org.bukkit.Effect; +import org.bukkit.Material; +import org.bukkit.Sound; + +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.ranged.guns.ShotgunWeapon; + +/** + * Created by Luke Bingham on 17/07/2017. + */ +public class Musket extends ShotgunWeapon { + + /** + * Construct a new RangedWeapon. + */ + public Musket() { + super( + (short) 18, + "Musket", //Name + WeaponType.SHOTGUN, //Weapon Type + AmmoType.SHOTGUN, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 171).build(), //ItemStack + new Sound[] { //Gun Sounds + Sound.ENTITY_ZOMBIE_ATTACK_DOOR_WOOD, + Sound.ITEM_ARMOR_EQUIP_CHAIN, + Sound.ITEM_ARMOR_EQUIP_CHAIN, + Sound.ENTITY_IRONGOLEM_ATTACK, + }, + Effect.SMOKE //Particles + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.GOLD_PICKAXE).setName(getName()).build()); + setDescription("Great if you want to", "roleplay a battle in 1776"); + + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.walkSpeed = 0.14; //Weapon + this.delay = 92; + + this.damage = 37.5; //RangedWeapon + this.meleeDamage = 4.0; //RangedWeapon + this.accuracy = 0.025; //RangedWeapon + this.magSize = 1; //RangedWeapon + this.reloadTime = 100; //RangedWeapon + this.range = 25; //RangedWeapon + this.recoil = 1.0; //RangedWeapon + this.zoom = 4; //RangedWeapon + + this.shellSize = 1; //AssultRifleWeapon + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/shotgun/PumpShotgun.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/shotgun/PumpShotgun.java new file mode 100644 index 0000000..291eb07 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/shotgun/PumpShotgun.java @@ -0,0 +1,71 @@ +package net.grandtheftmc.vice.weapon.ranged.shotgun; + +import org.bukkit.Effect; +import org.bukkit.Material; +import org.bukkit.Sound; + +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.ranged.guns.ShotgunWeapon; + +/** + * Created by Luke Bingham on 17/07/2017. + */ +public class PumpShotgun extends ShotgunWeapon { + + /** + * Construct a new RangedWeapon. + */ + public PumpShotgun() { + super( + (short) 17, + "Pump Shotgun", //Name + WeaponType.SHOTGUN, //Weapon Type + AmmoType.SHOTGUN, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 161).build(), //ItemStack + new Sound[] { //Gun Sounds + Sound.ENTITY_ZOMBIE_ATTACK_DOOR_WOOD, + Sound.ITEM_ARMOR_EQUIP_CHAIN, + Sound.ITEM_ARMOR_EQUIP_CHAIN, + Sound.ENTITY_IRONGOLEM_ATTACK, + }, + Effect.SMOKE //Particles + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.GOLD_SPADE).setName(getName()).build()); + setDescription("Standard, solid shotgun.", "This'll keep you going."); + + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.walkSpeed = 0.14; //Weapon + this.delay = 70; + + this.damage = 4.75; //RangedWeapon + this.meleeDamage = 5.0; //RangedWeapon + this.accuracy = 0.05; //RangedWeapon + this.magSize = 8; //RangedWeapon + this.reloadTime = 56; //RangedWeapon + this.range = 20; //RangedWeapon + this.recoil = 0.7; //RangedWeapon + this.zoom = 6; //RangedWeapon + this.reloadShoot = true; + + this.shellSize = 4; //AssultRifleWeapon + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/shotgun/SawedoffShotgun.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/shotgun/SawedoffShotgun.java new file mode 100644 index 0000000..01b3474 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/shotgun/SawedoffShotgun.java @@ -0,0 +1,71 @@ +package net.grandtheftmc.vice.weapon.ranged.shotgun; + +import org.bukkit.Effect; +import org.bukkit.Material; +import org.bukkit.Sound; + +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.ranged.guns.ShotgunWeapon; + +/** + * Created by Luke Bingham on 17/07/2017. + */ +public class SawedoffShotgun extends ShotgunWeapon { + + /** + * Construct a new RangedWeapon. + */ + public SawedoffShotgun() { + super( + (short) 16, + "Sawed-off Shotgun", //Name + WeaponType.SHOTGUN, //Weapon Type + AmmoType.SHOTGUN, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 151).build(), //ItemStack + new Sound[] { //Gun Sounds + Sound.ENTITY_ZOMBIE_ATTACK_DOOR_WOOD, + Sound.ITEM_ARMOR_EQUIP_CHAIN, + Sound.ITEM_ARMOR_EQUIP_CHAIN, + Sound.ENTITY_IRONGOLEM_ATTACK, + }, + Effect.SMOKE //Particles + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.GOLD_SWORD).setName(getName()).build()); + setDescription("Yehaw, time t'shoot me", "some uppities!"); + + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.walkSpeed = 0.16; //Weapon + this.delay = 70; + + this.damage = 3.75; //RangedWeapon + this.meleeDamage = 4.0; //RangedWeapon + this.accuracy = 0.075; //RangedWeapon + this.magSize = 8; //RangedWeapon + this.reloadTime = 56; //RangedWeapon + this.range = 15; //RangedWeapon + this.recoil = 1.0; //RangedWeapon + this.zoom = 6; //RangedWeapon + this.reloadShoot = true; + + this.shellSize = 5; //AssultRifleWeapon + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/smg/AssaultSMG.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/smg/AssaultSMG.java new file mode 100644 index 0000000..10eaaa9 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/smg/AssaultSMG.java @@ -0,0 +1,71 @@ +package net.grandtheftmc.vice.weapon.ranged.smg; + +import org.bukkit.Effect; +import org.bukkit.Material; +import org.bukkit.Sound; + +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.ranged.attachment.Attachment; +import net.grandtheftmc.guns.weapon.ranged.guns.SMGWeapon; + +/** + * Created by Luke Bingham on 17/07/2017. + */ +public class AssaultSMG extends SMGWeapon { + + /** + * Construct a new RangedWeapon. + */ + public AssaultSMG() { + super( + (short) 13, + "Assault SMG", //Name + WeaponType.SMG, //Weapon Type + AmmoType.SMG, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 121).build(), //ItemStack + new Sound[] { //Gun Sounds + Sound.ENTITY_BLAZE_HURT, + Sound.ITEM_ARMOR_EQUIP_GOLD, + Sound.ITEM_ARMOR_EQUIP_GOLD, + Sound.BLOCK_WOODEN_DOOR_OPEN, + }, + Effect.FLYING_GLYPH //Particles + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.IRON_PICKAXE).setName(getName()).build()); + setDescription("A solid,", "Military grade weapon.", "Good for mowing down enemies."); + + setSupportedAttachments(Attachment.SUPPRESSOR, Attachment.EXTENDED_MAGS, Attachment.GRIP, Attachment.SCOPE); + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.walkSpeed = 0.2; //Weapon + + this.damage = 5.0; //RangedWeapon + this.meleeDamage = 4.0; //RangedWeapon + this.accuracy = 0.025; //RangedWeapon + this.magSize = 30; //RangedWeapon + this.reloadTime = 50; //RangedWeapon + this.range = 35; //RangedWeapon + this.recoil = 0.0; //RangedWeapon + this.zoom = 4; //RangedWeapon + + this.rpm = 460; //AssultRifleWeapon + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/smg/CombatPDW.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/smg/CombatPDW.java new file mode 100644 index 0000000..47c30ff --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/smg/CombatPDW.java @@ -0,0 +1,71 @@ +package net.grandtheftmc.vice.weapon.ranged.smg; + +import org.bukkit.Effect; +import org.bukkit.Material; +import org.bukkit.Sound; + +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.ranged.attachment.Attachment; +import net.grandtheftmc.guns.weapon.ranged.guns.SMGWeapon; + +/** + * Created by Luke Bingham on 17/07/2017. + */ +public class CombatPDW extends SMGWeapon { + + /** + * Construct a new RangedWeapon. + */ + public CombatPDW() { + super( + (short) 14, + "Combat PDW", //Name + WeaponType.SMG, //Weapon Type + AmmoType.SMG, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 131).build(), //ItemStack + new Sound[] { //Gun Sounds + Sound.ENTITY_BLAZE_HURT, + Sound.ITEM_ARMOR_EQUIP_GOLD, + Sound.ITEM_ARMOR_EQUIP_GOLD, + Sound.BLOCK_WOODEN_DOOR_OPEN, + }, + Effect.FLYING_GLYPH //Particles + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.IRON_AXE).setName(getName()).build()); + setDescription("It's a defensive weapon.", "With a supressor.", "Thanks, Congress!"); + + setSupportedAttachments(Attachment.SUPPRESSOR, Attachment.EXTENDED_MAGS, Attachment.GRIP, Attachment.SCOPE); + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.walkSpeed = 0.2; //Weapon + + this.damage = 6.0; //RangedWeapon + this.meleeDamage = 4.0; //RangedWeapon + this.accuracy = 0.025; //RangedWeapon + this.magSize = 30; //RangedWeapon + this.reloadTime = 40; //RangedWeapon + this.range = 35; //RangedWeapon + this.recoil = 0.0; //RangedWeapon + this.zoom = 4; //RangedWeapon + + this.rpm = 450; //AssultRifleWeapon + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/smg/GusenbergSweeper.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/smg/GusenbergSweeper.java new file mode 100644 index 0000000..e829d49 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/smg/GusenbergSweeper.java @@ -0,0 +1,78 @@ +package net.grandtheftmc.vice.weapon.ranged.smg; + +import org.bukkit.Effect; +import org.bukkit.Material; +import org.bukkit.Sound; + +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.attribute.RankedWeapon; +import net.grandtheftmc.guns.weapon.ranged.attachment.Attachment; +import net.grandtheftmc.guns.weapon.ranged.guns.SMGWeapon; + +/** + * Created by Luke Bingham on 17/07/2017. + */ +public class GusenbergSweeper extends SMGWeapon implements RankedWeapon { + + /** + * Construct a new RangedWeapon. + */ + public GusenbergSweeper() { + super( + (short) 15, + "Gusenberg Sweeper", //Name + WeaponType.SMG, //Weapon Type + AmmoType.SMG, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 141).build(), //ItemStack + new Sound[] { //Gun Sounds + Sound.ENTITY_BLAZE_HURT, + Sound.ITEM_ARMOR_EQUIP_GOLD, + Sound.ITEM_ARMOR_EQUIP_GOLD, + Sound.BLOCK_WOODEN_DOOR_OPEN, + }, + Effect.FLYING_GLYPH //Particles + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.IRON_HOE).setName(getName()).build()); + setDescription("With this gun, you can", "make them an offer they", "can't refuse."); + + setSupportedAttachments(Attachment.SUPPRESSOR, Attachment.EXTENDED_MAGS, Attachment.GRIP, Attachment.SCOPE); + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.walkSpeed = 0.2; //Weapon + + this.damage = 6.0; //RangedWeapon + this.meleeDamage = 5.0; //RangedWeapon + this.accuracy = 0.016; //RangedWeapon + this.magSize = 50; //RangedWeapon + this.reloadTime = 40; //RangedWeapon + this.range = 47; //RangedWeapon + this.recoil = 0.0; //RangedWeapon + this.zoom = 2; //RangedWeapon + + this.rpm = 555; //AssultRifleWeapon + } + + @Override + public UserRank requiredRank() { + return UserRank.PREMIUM; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/smg/MicroSMG.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/smg/MicroSMG.java new file mode 100644 index 0000000..07e5c4f --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/smg/MicroSMG.java @@ -0,0 +1,71 @@ +package net.grandtheftmc.vice.weapon.ranged.smg; + +import org.bukkit.Effect; +import org.bukkit.Material; +import org.bukkit.Sound; + +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.ranged.attachment.Attachment; +import net.grandtheftmc.guns.weapon.ranged.guns.SMGWeapon; + +/** + * Created by Luke Bingham on 17/07/2017. + */ +public class MicroSMG extends SMGWeapon { + + /** + * Construct a new RangedWeapon. + */ + public MicroSMG() { + super( + (short) 11, + "Micro SMG", //Name + WeaponType.SMG, //Weapon Type + AmmoType.SMG, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 101).build(), //ItemStack + new Sound[] { //Gun Sounds + Sound.ENTITY_BLAZE_HURT, + Sound.ITEM_ARMOR_EQUIP_GOLD, + Sound.ITEM_ARMOR_EQUIP_GOLD, + Sound.BLOCK_WOODEN_DOOR_OPEN, + }, + Effect.FLYING_GLYPH //Particles + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.IRON_SWORD).setName(getName()).build()); + setDescription("It's like a peashooter,", "on steriods."); + + setSupportedAttachments(Attachment.SUPPRESSOR, Attachment.EXTENDED_MAGS, Attachment.GRIP, Attachment.SCOPE); + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.walkSpeed = 0.2; //Weapon + + this.damage = 4.0; //RangedWeapon + this.meleeDamage = 4.0; //RangedWeapon + this.accuracy = 0.035; //RangedWeapon + this.magSize = 16; //RangedWeapon + this.reloadTime = 40; //RangedWeapon + this.range = 25; //RangedWeapon + this.recoil = 0.0; //RangedWeapon + this.zoom = 4; //RangedWeapon + + this.rpm = 600; //AssultRifleWeapon + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/smg/SMG.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/smg/SMG.java new file mode 100644 index 0000000..b5aaa55 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/smg/SMG.java @@ -0,0 +1,71 @@ +package net.grandtheftmc.vice.weapon.ranged.smg; + +import org.bukkit.Effect; +import org.bukkit.Material; +import org.bukkit.Sound; + +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.ranged.attachment.Attachment; +import net.grandtheftmc.guns.weapon.ranged.guns.SMGWeapon; + +/** + * Created by Luke Bingham on 17/07/2017. + */ +public class SMG extends SMGWeapon { + + /** + * Construct a new RangedWeapon. + */ + public SMG() { + super( + (short) 12, + "SMG", //Name + WeaponType.SMG, //Weapon Type + AmmoType.SMG, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 111).build(), //ItemStack + new Sound[] { //Gun Sounds + Sound.ENTITY_BLAZE_HURT, + Sound.ITEM_ARMOR_EQUIP_GOLD, + Sound.ITEM_ARMOR_EQUIP_GOLD, + Sound.BLOCK_WOODEN_DOOR_OPEN, + }, + Effect.FLYING_GLYPH //Particles + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.IRON_SPADE).setName(getName()).build()); + setDescription("The intro to proper", "gang warfare."); + + setSupportedAttachments(Attachment.SUPPRESSOR, Attachment.EXTENDED_MAGS, Attachment.GRIP, Attachment.SCOPE); + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.walkSpeed = 0.2; //Weapon + + this.damage = 4.0; //RangedWeapon + this.meleeDamage = 4.0; //RangedWeapon + this.accuracy = 0.025; //RangedWeapon + this.magSize = 30; //RangedWeapon + this.reloadTime = 50; //RangedWeapon + this.range = 35; //RangedWeapon + this.recoil = 0.0; //RangedWeapon + this.zoom = 4; //RangedWeapon + + this.rpm = 510; //AssultRifleWeapon + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/sniper/HeavySniper.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/sniper/HeavySniper.java new file mode 100644 index 0000000..24c194a --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/sniper/HeavySniper.java @@ -0,0 +1,76 @@ +package net.grandtheftmc.vice.weapon.ranged.sniper; + +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.attribute.RankedWeapon; +import net.grandtheftmc.guns.weapon.ranged.attachment.Attachment; +import net.grandtheftmc.guns.weapon.ranged.guns.SniperWeapon; +import org.bukkit.Effect; +import org.bukkit.Material; +import org.bukkit.Sound; + +/** + * Created by Luke Bingham on 17/07/2017. + */ +public class HeavySniper extends SniperWeapon implements RankedWeapon { + + /** + * Construct a new RangedWeapon. + */ + public HeavySniper() { + super( + (short) 29, + "Heavy Sniper", //Name + WeaponType.SNIPER, //Weapon Type + AmmoType.SNIPER, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 281).build(), //ItemStack + new Sound[] { //Gun Sounds + Sound.ENTITY_IRONGOLEM_HURT, + Sound.ITEM_ARMOR_EQUIP_DIAMOND, + Sound.ITEM_ARMOR_EQUIP_DIAMOND, + Sound.BLOCK_PISTON_EXTEND, + }, + Effect.CLOUD //Particles + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.DIAMOND_AXE).setName(getName()).build()); + setDescription("When you really like", "killing people without", "getting your hands dirty."); + + setSupportedAttachments(Attachment.SUPPRESSOR, Attachment.GRIP, Attachment.ADVANCED_SCOPE); + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.walkSpeed = 0.14; //Weapon + this.delay = 41; + + this.damage = 34.5; //RangedWeapon + this.meleeDamage = 6.0; //RangedWeapon + this.accuracy = 0.01265; //RangedWeapon + this.magSize = 6; //RangedWeapon + this.reloadTime = 80; //RangedWeapon + this.range = 100; //RangedWeapon + this.recoil = 0.3; //RangedWeapon + this.zoom = 9; //RangedWeapon + } + + @Override + public UserRank requiredRank() { + return UserRank.ELITE; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/sniper/SniperRifle.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/sniper/SniperRifle.java new file mode 100644 index 0000000..95b74a1 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/sniper/SniperRifle.java @@ -0,0 +1,69 @@ +package net.grandtheftmc.vice.weapon.ranged.sniper; + +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.ranged.attachment.Attachment; +import net.grandtheftmc.guns.weapon.ranged.guns.SniperWeapon; +import org.bukkit.Effect; +import org.bukkit.Material; +import org.bukkit.Sound; + +/** + * Created by Luke Bingham on 17/07/2017. + */ +public class SniperRifle extends SniperWeapon { + + /** + * Construct a new RangedWeapon. + */ + public SniperRifle() { + super( + (short) 28, + "Sniper Rifle", //Name + WeaponType.SNIPER, //Weapon Type + AmmoType.SNIPER, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 271).build(), //ItemStack + new Sound[] { //Gun Sounds + Sound.ENTITY_IRONGOLEM_HURT, + Sound.ITEM_ARMOR_EQUIP_DIAMOND, + Sound.ITEM_ARMOR_EQUIP_DIAMOND, + Sound.BLOCK_PISTON_EXTEND, + }, + Effect.CLOUD //Particles + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.DIAMOND_PICKAXE).setName(getName()).build()); + setDescription("When you like killing", "people without getting", "your hands dirty."); + + setSupportedAttachments(Attachment.SUPPRESSOR, Attachment.GRIP, Attachment.ADVANCED_SCOPE); + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.walkSpeed = 0.14; //Weapon + this.delay = 32; + + this.damage = 23.0; //RangedWeapon + this.meleeDamage = 5.0; //RangedWeapon + this.accuracy = 0.0175; //RangedWeapon + this.magSize = 10; //RangedWeapon + this.reloadTime = 80; //RangedWeapon + this.range = 95; //RangedWeapon + this.recoil = 0.3; //RangedWeapon + this.zoom = 8; //RangedWeapon + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/special/Clausinator.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/special/Clausinator.java new file mode 100644 index 0000000..13f5f42 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/special/Clausinator.java @@ -0,0 +1,51 @@ +package net.grandtheftmc.vice.weapon.ranged.special; + +import org.bukkit.Effect; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.inventory.ItemStack; + +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.ranged.guns.PistolWeapon; + +/** + * Created by Timothy Lampen on 2017-12-12. + */ +public class Clausinator extends PistolWeapon { + public Clausinator() { + super( + (short) 50, + "Clausinator", //Name + WeaponType.CLAUSINATOR, //Weapon Type + AmmoType.NONE, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 1011).build(), + new Sound[] { //Gun Sounds + Sound.ENTITY_ZOMBIE_ATTACK_IRON_DOOR, + Sound.ITEM_ARMOR_EQUIP_DIAMOND, + Sound.ITEM_ARMOR_EQUIP_DIAMOND, + Sound.ITEM_FLINTANDSTEEL_USE, + }, + Effect.FLYING_GLYPH //Particles + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setDescription("Snowball fight!"); + + setOldItemStack(new ItemStack(Material.ACACIA_DOOR_ITEM)); + + + + this.walkSpeed = 0.1; //Weapon + this.delay = 40; //Weapon + + this.damage = 0.001; //RangedWeapon + this.meleeDamage = 3.0; //RangedWeapon + this.accuracy = 0.025; //RangedWeapon + this.magSize = 600; //RangedWeapon + this.reloadTime = 40; //RangedWeapon + this.range = 25; //RangedWeapon + this.zoom = 4; //RangedWeapon + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/special/Flamethrower.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/special/Flamethrower.java new file mode 100644 index 0000000..00b4681 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/special/Flamethrower.java @@ -0,0 +1,84 @@ +package net.grandtheftmc.vice.weapon.ranged.special; + +import org.bukkit.Effect; +import org.bukkit.Material; +import org.bukkit.Sound; + +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.ranged.attachment.Attachment; +import net.grandtheftmc.guns.weapon.ranged.guns.ShotgunWeapon; + +/** + * Created by Luke Bingham on 03/08/2017. + */ +public class Flamethrower extends ShotgunWeapon { + + /** + * Construct a new RangedWeapon. + */ + public Flamethrower() { + super( + (short) 40, + "Flamethrower", //Name + WeaponType.FLAMETHROWER, //TODO Weapon Type + AmmoType.NONE, //TODO AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 391).build(), //ItemStack + new Sound[] { //Gun Sounds + Sound.ITEM_FIRECHARGE_USE, + Sound.ITEM_ARMOR_EQUIP_DIAMOND, + Sound.ITEM_ARMOR_EQUIP_DIAMOND, + Sound.UI_BUTTON_CLICK, + }, + Effect.MOBSPAWNER_FLAMES //Particles + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.FLINT_AND_STEEL).setDurability((short) 10).setName(getName()).build()); + setDescription("Is it me, or is it", "getting hot in here?"); + + setSupportedAttachments(Attachment.GRIP); + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.walkSpeed = 0.2; //Weapon + this.delay = 2; + + this.damage = 6.0; //RangedWeapon + this.meleeDamage = 3.0; //RangedWeapon + this.accuracy = 0.05; //RangedWeapon + this.magSize = 25; //RangedWeapon + this.reloadTime = 100; //RangedWeapon + this.range = 25; //RangedWeapon + this.recoil = 0.001; //RangedWeapon + this.zoom = 3; //RangedWeapon + this.shellSize = 5; + +// this.flamethrower = true; //SpecialWeapon +// this.rpm = 200; //SpecialWeapon + } + + @Override + public int getRpm() { + return 200; + } + + @Override + public boolean isAutomatic() { + return true; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/special/GoldMinigun.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/special/GoldMinigun.java new file mode 100644 index 0000000..3ce070a --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/special/GoldMinigun.java @@ -0,0 +1,80 @@ +package net.grandtheftmc.vice.weapon.ranged.special; + +import org.bukkit.Effect; +import org.bukkit.Material; +import org.bukkit.Sound; + +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.attribute.RankedWeapon; +import net.grandtheftmc.guns.weapon.ranged.attachment.Attachment; +import net.grandtheftmc.guns.weapon.ranged.guns.SpecialWeapon; + +/** + * Created by Luke Bingham on 03/08/2017. + */ +public class GoldMinigun extends SpecialWeapon implements RankedWeapon { + + /** + * Construct a new RangedWeapon. + */ + public GoldMinigun() { + super( + (short) 42, + "Gold Minigun", //Name + WeaponType.MINIGUN, //Weapon Type + AmmoType.MINIGUN, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 411).build(), //ItemStack + new Sound[] { //Gun Sounds + Sound.ENTITY_ZOMBIE_ATTACK_IRON_DOOR, + Sound.ITEM_ARMOR_EQUIP_DIAMOND, + Sound.ITEM_ARMOR_EQUIP_DIAMOND, + Sound.ITEM_FLINTANDSTEEL_USE, + }, + Effect.FLYING_GLYPH //Particles + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.DIAMOND_HOE).setDurability((short) -1/* IDK?.. */).setName(getName()).build());//TODO Unknown at the moment. + setDescription("Is it me, or is it", "getting hot in here?"); + + setSupportedAttachments(Attachment.GRIP); + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.walkSpeed = 0.1; //Weapon + + this.damage = 5.0; //RangedWeapon + this.meleeDamage = 3.0; //RangedWeapon + this.accuracy = 0.025; //RangedWeapon + this.magSize = 600; //RangedWeapon + this.reloadTime = 100; //RangedWeapon + this.range = 55; //RangedWeapon + this.recoil = 0.05; //RangedWeapon + this.zoom = 3; //RangedWeapon + this.reloadShoot = true; + + this.minigun = true; //SpecialWeapon + this.rpm = 1200; //SpecialWeapon + } + + @Override + public UserRank requiredRank() { + return UserRank.SUPREME; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/special/Handcuffs.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/special/Handcuffs.java new file mode 100644 index 0000000..6b1acfe --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/special/Handcuffs.java @@ -0,0 +1,43 @@ +package net.grandtheftmc.vice.weapon.ranged.special; + +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.inventory.ItemStack; + +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.MeleeWeapon; +import net.grandtheftmc.guns.weapon.WeaponType; + +/** + * Created by Timothy Lampen on 2017-11-22. + */ +public class Handcuffs extends MeleeWeapon { + public Handcuffs() { + super((short) 57, + "Handcuffs", + WeaponType.MELEE, + AmmoType.MELEE, + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 1003).build(), + new Sound[] { + Sound.ENTITY_SKELETON_SHOOT, + Sound.ITEM_ARMOR_EQUIP_GENERIC, + Sound.ITEM_ARMOR_EQUIP_GENERIC + }); + setOldItemStack(new ItemStack(Material.ACACIA_DOOR)); + setDescription("Multipurpose tool", "for work or for kink"); + + + this.delay = 10; + this.meleeDamage = 1.0; + } + +// @Override +// public void onHit(EntityDamageByEntityEvent event){ +// if(event.getDamager() instanceof Player && event.getEntity() instanceof Player){ +// Player player = (Player)event.getDamager(); +// Player victim = (Player)event.getEntity(); +// GTMUtils.arrestPlayer(event, this, player, victim); +// } +// } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/special/Minigun.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/special/Minigun.java new file mode 100644 index 0000000..58dd31e --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/ranged/special/Minigun.java @@ -0,0 +1,80 @@ +package net.grandtheftmc.vice.weapon.ranged.special; + +import org.bukkit.Effect; +import org.bukkit.Material; +import org.bukkit.Sound; + +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.core.util.factory.ItemFactory; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.attribute.RankedWeapon; +import net.grandtheftmc.guns.weapon.ranged.attachment.Attachment; +import net.grandtheftmc.guns.weapon.ranged.guns.SpecialWeapon; + +/** + * Created by Luke Bingham on 17/07/2017. + */ +public class Minigun extends SpecialWeapon implements RankedWeapon { + + /** + * Construct a new RangedWeapon. + */ + public Minigun() { + super( + (short) 33, + "Minigun", //Name + WeaponType.MINIGUN, //Weapon Type + AmmoType.MINIGUN, //AmmoType + new ItemFactory(Material.DIAMOND_SWORD).setDurability((short) 321).build(), //ItemStack + new Sound[] { //Gun Sounds + Sound.ENTITY_ZOMBIE_ATTACK_IRON_DOOR, + Sound.ITEM_ARMOR_EQUIP_DIAMOND, + Sound.ITEM_ARMOR_EQUIP_DIAMOND, + Sound.ITEM_FLINTANDSTEEL_USE, + }, + Effect.FLYING_GLYPH //Particles + ); + + //This is the OLD itemstack, this isn't needed when creating a new weapon. + setOldItemStack(new ItemFactory(Material.DIAMOND_HOE).setName(getName()).build()); + setDescription("Say hello to my", "little friend."); + + setSupportedAttachments(Attachment.GRIP); + setWeaponSkins( + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), "&6&lUrban Camo"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), "&e&lGreen"), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), "&e&lSlate") + /*new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 1), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 2), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 3), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 4), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 5), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 6), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 7), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 8), null), + new WeaponSkin(getWeaponType(), (short) (getWeaponIdentifier() + 9), null)*/ + ); + + this.walkSpeed = 0.1; //Weapon + + this.damage = 5.0; //RangedWeapon + this.meleeDamage = 3.0; //RangedWeapon + this.accuracy = 0.025; //RangedWeapon + this.magSize = 600; //RangedWeapon + this.reloadTime = 100; //RangedWeapon + this.range = 55; //RangedWeapon + this.recoil = 0.05; //RangedWeapon + this.zoom = 3; //RangedWeapon + this.reloadShoot = true; + + this.minigun = true; //SpecialWeapon + this.rpm = 1200; //SpecialWeapon + } + + @Override + public UserRank requiredRank() { + return UserRank.SUPREME; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/skins/WeaponSkinDAO.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/skins/WeaponSkinDAO.java new file mode 100644 index 0000000..b8705b5 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/skins/WeaponSkinDAO.java @@ -0,0 +1,136 @@ +package net.grandtheftmc.vice.weapon.skins; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.guns.weapon.Weapon; +import net.grandtheftmc.guns.weapon.WeaponSkin; + +public class WeaponSkinDAO { + public static boolean lockSkin(Connection connection, UUID uuid, Weapon<?> weapon, WeaponSkin skin) { + String query = "DELETE FROM user_weapon_skin WHERE weapon_id=? AND skin_id=? AND uuid=UNHEX(?);"; + + try (PreparedStatement statement = connection.prepareStatement(query)) { + statement.setShort(1, weapon.getUniqueIdentifier()); + statement.setShort(2, (short) (skin.getIdentifier() - weapon.getWeaponIdentifier())); + statement.setString(3, uuid.toString().replaceAll("-", "")); + statement.executeUpdate(); + } catch (SQLException e) { + e.printStackTrace(); + + return false; + } + + return true; + } + + public static boolean unlockSkin(Connection connection, UUID uuid, Weapon<?> weapon, WeaponSkin skin) { + String query = "INSERT INTO user_weapon_skin (uuid, server_key, weapon_id, skin_id) VALUES (UNHEX(?), ?, ?, ?);"; + + try (PreparedStatement statement = connection.prepareStatement(query)) { + statement.setString(1, uuid.toString().replaceAll("-", "")); + statement.setString(2, Core.name().toUpperCase()); + statement.setShort(3, weapon.getUniqueIdentifier()); + statement.setShort(4, (short) (skin.getIdentifier() - weapon.getWeaponIdentifier())); + statement.executeUpdate(); + } catch (SQLException e) { + e.printStackTrace(); + + return false; + } + + return true; + } + + public static boolean enableSkin(Connection connection, UUID uuid, Weapon<?> weapon, short skinID) { + String query = "UPDATE user_weapon_skin SET enabled=1 WHERE server_key=? AND weapon_id=? AND skin_id=? AND uuid=UNHEX(?);"; + + try (PreparedStatement statement = connection.prepareStatement(query)) { + statement.setString(1, Core.name().toUpperCase()); + statement.setShort(2, weapon.getUniqueIdentifier()); + statement.setShort(3, skinID); + statement.setString(4, uuid.toString().replaceAll("-", "")); + statement.executeUpdate(); + } catch (SQLException e) { + e.printStackTrace(); + + return false; + } + + return true; + } + + public static boolean disableSkin(Connection connection, UUID uuid, Weapon<?> weapon, short skinID) { + String query = "UPDATE user_weapon_skin SET enabled=0 WHERE server_key=? AND weapon_id=? AND skin_id=? AND uuid=UNHEX(?);"; + + try (PreparedStatement statement = connection.prepareStatement(query)) { + statement.setString(1, Core.name().toUpperCase()); + statement.setShort(2, weapon.getUniqueIdentifier()); + statement.setShort(3, skinID); + statement.setString(4, uuid.toString().replaceAll("-", "")); + statement.executeUpdate(); + } catch (SQLException e) { + e.printStackTrace(); + + return false; + } + + return true; + } + + public static Map<Short, List<Short>> getUnlockedSkins(Connection connection, UUID uuid) { + Map<Short, List<Short>> skins = new HashMap<Short, List<Short>>(); + String query = "SELECT * FROM user_weapon_skin WHERE server_key=? AND uuid=UNHEX(?);"; + + try (PreparedStatement statement = connection.prepareStatement(query)) { + statement.setString(1, Core.name().toUpperCase()); + statement.setString(2, uuid.toString().replaceAll("-", "")); + + try (ResultSet result = statement.executeQuery()) { + while (result.next()) { + short weaponID = result.getShort("weapon_id"); + + if (skins.containsKey(weaponID)) { + skins.get(weaponID).add(result.getShort("skin_id")); + } else { + skins.put(weaponID, new ArrayList<Short>()); + skins.get(weaponID).add(result.getShort("skin_id")); + } + } + } + } catch (SQLException e) { + e.printStackTrace(); + } + + return skins; + } + + public static Map<Short, Short> getEquippedSkins(Connection connection, UUID uuid) { + Map<Short, Short> skins = new HashMap<Short, Short>(); + String query = "SELECT * FROM user_weapon_skin WHERE server_key=? AND uuid=UNHEX(?) AND enabled=?;"; + + try (PreparedStatement statement = connection.prepareStatement(query)) { + statement.setString(1, Core.name().toUpperCase()); + statement.setString(2, uuid.toString().replaceAll("-", "")); + statement.setShort(3, (short) 1); + + try (ResultSet result = statement.executeQuery()) { + while (result.next()) { + skins.put(result.getShort("weapon_id"), result.getShort("skin_id")); + } + } + } catch (SQLException e) { + e.printStackTrace(); + } + + return skins; + } +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/skins/WeaponSkinManager.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/skins/WeaponSkinManager.java new file mode 100644 index 0000000..ac07a5b --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/skins/WeaponSkinManager.java @@ -0,0 +1,195 @@ +package net.grandtheftmc.vice.weapon.skins; + +import java.util.Arrays; +import java.util.Optional; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.craftbukkit.v1_12_R1.inventory.CraftItemStack; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryMoveItemEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.InventoryHolder; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import com.j0ach1mmall3.wastedguns.api.events.WeaponDropEvent; +import com.j0ach1mmall3.wastedguns.api.events.WeaponPickupEvent; + +import net.grandtheftmc.core.Utils; +import net.grandtheftmc.core.gui.ConfirmationMenu; +import net.grandtheftmc.guns.WeaponManager; +import net.grandtheftmc.guns.weapon.Weapon; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.users.ViceUser; +import net.minecraft.server.v1_12_R1.NBTTagCompound; + +public class WeaponSkinManager { + public WeaponSkinManager() { + Bukkit.getPluginManager().registerEvents(new SkinListener(), Vice.getInstance()); + } + + public void updateWeaponSkin(Player player, Weapon<?> weapon, WeaponSkin skin) { + ViceUser user = Vice.getUserManager().getLoadedUser(player.getUniqueId()); + user.equipWeaponSkin(weapon, skin); + + for (ItemStack stack : player.getInventory().getContents()) { + Optional<Weapon<?>> weaponOpt = Vice.getWastedGuns().getWeaponManager().getWeapon(stack); + + if (weaponOpt.isPresent()) { + if (weaponOpt.get().getUniqueIdentifier() == weapon.getUniqueIdentifier()) { + stack.setDurability(skin.getIdentifier()); + } + } + } + } + + public WeaponSkin getHeldItemWeaponSkin(ItemStack stack) { + WeaponManager weaponManager = Vice.getWastedGuns().getWeaponManager(); + + if (stack != null) { + Optional<Weapon<?>> weaponOpt = weaponManager.getWeapon(stack); + + if (weaponOpt.isPresent()) { + Weapon<?> weapon = weaponOpt.get(); + + if (weapon.getWeaponSkins() != null) { + for (WeaponSkin skin : weapon.getWeaponSkins()) { + if (stack.getDurability() == skin.getIdentifier()) { + return skin; + } + } + } + } + } + + return null; + } + + public WeaponSkin getWeaponSkinFromIdentifier(Weapon<?> weapon, short identifier) { + for (WeaponSkin skin : weapon.getWeaponSkins()) { + if ((skin.getIdentifier() - weapon.getWeaponIdentifier()) == identifier) { + return skin; + } + } + + return null; + } + + public ItemStack createSkinItem(Weapon<?> weapon, WeaponSkin skin) { + ItemStack stack = new ItemStack(Material.ENCHANTED_BOOK); + ItemMeta meta = stack.getItemMeta(); + + meta.setLore(Arrays.asList(new String[] { + Utils.f("&7Included skin:"), Utils.f("&8- &7" + ChatColor.stripColor(Utils.f(skin.getDisplayName())) + " (" + weapon.getName() + ")"), + })); + + meta.setDisplayName(Utils.f("&9&lWeapon Skin")); + stack.setItemMeta(meta); + + net.minecraft.server.v1_12_R1.ItemStack nmsStack = CraftItemStack.asNMSCopy(stack); + NBTTagCompound compound = nmsStack.getTag(); + compound.setShort("weapon_id", weapon.getUniqueIdentifier()); + compound.setShort("skin_id", (short) (skin.getIdentifier() - weapon.getWeaponIdentifier())); + nmsStack.setTag(compound); + + return CraftItemStack.asBukkitCopy(nmsStack); + } + + private class SkinListener implements Listener { + @EventHandler + public void onWeaponPickup(WeaponPickupEvent event) { + ItemStack stack = event.getItem().getItemStack(); + Optional<Weapon<?>> weaponOpt = Vice.getWastedGuns().getWeaponManager().getWeapon(stack); + + if (weaponOpt.isPresent()) { + stack.setDurability(Vice.getUserManager().getLoadedUser(event.getLivingEntity().getUniqueId()).getEquippedWeaponSkin(weaponOpt.get()).getIdentifier()); + } + } + + @EventHandler + public void onWeaponDrop(WeaponDropEvent event) { + ItemStack stack = event.getItemDrop().getItemStack(); + Optional<Weapon<?>> weaponOpt = Vice.getWastedGuns().getWeaponManager().getWeapon(stack); + + if (weaponOpt.isPresent()) { + stack.setDurability(weaponOpt.get().getWeaponIdentifier()); + } + } + + @EventHandler + public void onItemMove(InventoryMoveItemEvent event) { + InventoryHolder holder = event.getSource().getHolder(); + + if (holder instanceof Player) { + Player player = (Player) holder; + + if (event.getDestination() != player.getInventory()) { + ItemStack stack = event.getItem(); + Optional<Weapon<?>> weaponOpt = Vice.getWastedGuns().getWeaponManager().getWeapon(stack); + + if (weaponOpt.isPresent() && stack.getDurability() != 0) { + stack.setDurability(weaponOpt.get().getWeaponIdentifier()); + } + } else { + ItemStack stack = event.getItem(); + Optional<Weapon<?>> weaponOpt = Vice.getWastedGuns().getWeaponManager().getWeapon(stack); + + if (weaponOpt.isPresent()) { + stack.setDurability(Vice.getUserManager().getLoadedUser(player.getUniqueId()).getEquippedWeaponSkin(weaponOpt.get()).getIdentifier()); + } + } + } + } + + @EventHandler + public void onItemRightClick(PlayerInteractEvent event) { + if (event.getAction() == Action.LEFT_CLICK_AIR || event.getAction() == Action.RIGHT_CLICK_AIR) { + ItemStack item = event.getItem(); + + net.minecraft.server.v1_12_R1.ItemStack nmsStack = CraftItemStack.asNMSCopy(item); + NBTTagCompound compound = nmsStack.getTag(); + + if (compound != null && compound.hasKey("weapon_id") && compound.hasKey("skin_id") && item.getType() == Material.ENCHANTED_BOOK) { + ConfirmationMenu menu = new ConfirmationMenu(Vice.getInstance(), event.getItem()) { + @Override + protected void onConfirm(InventoryClickEvent e, Player p) { + net.minecraft.server.v1_12_R1.ItemStack nmsStack = CraftItemStack.asNMSCopy(event.getItem()); + NBTTagCompound compound = nmsStack.getTag(); + + short weaponID = compound.getShort("weapon_id"); + short skinID = compound.getShort("skin_id"); + + Optional<Weapon<?>> weaponOpt = Vice.getWastedGuns().getWeaponManager().getWeaponFromUniqueIdentifier(weaponID); + if (weaponOpt.isPresent()) { + Weapon<?> weapon = weaponOpt.get(); + WeaponSkin skin = getWeaponSkinFromIdentifier(weapon, skinID); + + ViceUser user = Vice.getUserManager().getLoadedUser(p.getUniqueId()); + + if (!user.hasSkinUnlocked(weapon, skin)) { + user.unlockWeaponSkin(weapon, skin); + + p.getInventory().remove(event.getItem()); + p.sendMessage(Utils.f("&aYou have unlocked a " + skin.getDisplayName() + " Skin &afor &6&l" + weapon.getName() + "&a! Please go to Mr Skinner at spawn to equip it.")); + } else { + p.sendMessage(Utils.f("&cYou already have this skin unlocked!")); + } + + event.setCancelled(true); + } + } + }; + + menu.open(event.getPlayer()); + } + } + } + } +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/skins/menu/MainMenu.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/skins/menu/MainMenu.java new file mode 100644 index 0000000..05ac240 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/skins/menu/MainMenu.java @@ -0,0 +1,164 @@ +package net.grandtheftmc.vice.weapon.skins.menu; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Optional; + +import org.bukkit.ChatColor; +import org.bukkit.DyeColor; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import net.grandtheftmc.core.inventory.CoreMenu; +import net.grandtheftmc.core.inventory.button.ClickableItem; +import net.grandtheftmc.core.inventory.button.MenuItem; +import net.grandtheftmc.guns.weapon.MeleeWeapon; +import net.grandtheftmc.guns.weapon.Weapon; +import net.grandtheftmc.guns.weapon.ranged.RangedWeapon; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.items.GameItem; +import net.grandtheftmc.vice.users.ViceUser; + +public class MainMenu extends CoreMenu { + private final Player holder; + private final int page; + + public MainMenu(Player holder) { + super(5, "Weapon Skins"); + + this.holder = holder; + this.page = 0; + + this.setup(); + } + + private MainMenu(Player holder, int page) { + super(5, "Weapon Skins"); + + this.holder = holder; + this.page = page; + + this.setup(); + } + + @SuppressWarnings("deprecation") + protected void setup() { + for (int i = 0; i < 45; i++) { + ItemStack stack = new ItemStack(Material.STAINED_GLASS_PANE, 1, (byte) DyeColor.BLACK.getWoolData()); + ItemMeta meta = stack.getItemMeta(); + meta.setDisplayName(""); + stack.setItemMeta(meta); + + this.addItem(new MenuItem(i, stack, false)); + } + + this.createMenuContent(); + } + + private void createMenuContent() { + List<Weapon<?>> weapons = new ArrayList<Weapon<?>>(); + List<Weapon<?>> pageWeapons = null; + + for (GameItem gameItem : Vice.getItemManager().getItems()) { + if (gameItem.getType() == GameItem.ItemType.WEAPON) { + Optional<Weapon<?>> optional = Vice.getWastedGuns().getWeaponManager().getWeapon(gameItem.getWeaponOrVehicleOrDrug()); + + if (optional.isPresent()) { + Weapon<?> weapon = optional.get(); + + if ((weapon instanceof RangedWeapon || weapon instanceof MeleeWeapon) && weapon.getWeaponSkins().length > 1) { + weapons.add(weapon); + } + } + } + } + + try { + pageWeapons = weapons.subList(this.page * 15, (this.page * 15) + 15); + } catch (IndexOutOfBoundsException e) { + pageWeapons = weapons.subList(this.page * 15, weapons.size() - 1); + } + + int index = 11; + for (int i = 0; i < pageWeapons.size(); i++) { + Weapon<?> weapon = weapons.get(i + (this.page * 15)); + + this.addItem(new ClickableItem(index, this.createSkinButton(weapon), (player, action) -> { + new SkinsMenu(player, weapon).open(); + })); + + if (i == 4 || i == 9) { + index += 5; + } else { + index++; + } + } + + this.createNextPageButtons((int) Math.ceil(((double) weapons.size()) / 15.0)); + this.createPreviousPageButtons(); + } + + @SuppressWarnings("deprecation") + private void createNextPageButtons(int numPages) { + for (int i = 0; i < 3; i++) { + if (numPages > 1 && (this.page + 1) < numPages) { + ItemStack stack = new ItemStack(Material.STAINED_GLASS_PANE, 1, (byte) DyeColor.LIME.getWoolData()); + ItemMeta meta = stack.getItemMeta(); + meta.setDisplayName("Next Page"); + stack.setItemMeta(meta); + + this.addItem(new ClickableItem((i * 9) + 17, stack, (player, action) -> { + new MainMenu(this.holder, this.page + 1).open(); + })); + } + } + } + + @SuppressWarnings("deprecation") + private void createPreviousPageButtons() { + for (int i = 0; i < 3; i++) { + if (this.page != 0) { + ItemStack stack = new ItemStack(Material.STAINED_GLASS_PANE, 1, (byte) DyeColor.RED.getWoolData()); + ItemMeta meta = stack.getItemMeta(); + meta.setDisplayName("Next Page"); + stack.setItemMeta(meta); + + this.addItem(new ClickableItem((i * 9) + 9, stack, (player, action) -> { + new MainMenu(this.holder, this.page - 1).open(); + })); + } + } + } + + private ItemStack createSkinButton(Weapon<?> weapon) { + ItemStack stack = weapon.createItemStack(); + ItemMeta meta = stack.getItemMeta(); + meta.setDisplayName(ChatColor.translateAlternateColorCodes('&', "&e&l" + weapon.getName())); + + int unlockedSkins = 0; + ViceUser user = Vice.getUserManager().getLoadedUser(this.holder.getUniqueId()); + + if (user.getUnlockedWeaponSkins(weapon) != null) { + unlockedSkins = user.getUnlockedWeaponSkins(weapon).size(); + } + + meta.setLore(Arrays.asList(new String[] { + ChatColor.translateAlternateColorCodes('&', "&6Unlocked:&r " + (1 + unlockedSkins) + "/4"), " ", ChatColor.translateAlternateColorCodes('&', "&7Click to view the skins for this weapon.") + })); + + stack.setItemMeta(meta); + + return stack; + } + + public void open() { + this.openInventory(this.holder); + } + + protected Player getHolder() { + return this.holder; + } +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/skins/menu/SkinsMenu.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/skins/menu/SkinsMenu.java new file mode 100644 index 0000000..2856a11 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/weapon/skins/menu/SkinsMenu.java @@ -0,0 +1,164 @@ +package net.grandtheftmc.vice.weapon.skins.menu; + +import java.util.Arrays; +import java.util.List; + +import org.bukkit.ChatColor; +import org.bukkit.DyeColor; +import org.bukkit.Material; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import net.grandtheftmc.core.inventory.CoreMenu; +import net.grandtheftmc.core.inventory.button.ClickableItem; +import net.grandtheftmc.core.inventory.button.MenuItem; +import net.grandtheftmc.guns.weapon.Weapon; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.users.ViceUser; + +public class SkinsMenu extends CoreMenu { + private final Player holder; + private final Weapon<?> weapon; + + public SkinsMenu(Player holder, Weapon<?> weapon) { + super(5, "Weapon Skins"); + + this.holder = holder; + this.weapon = weapon; + + this.setup(); + } + + @SuppressWarnings("deprecation") + protected void setup() { + ViceUser user = Vice.getUserManager().getLoadedUser(this.holder.getUniqueId()); + List<WeaponSkin> unlockedSkins = user.getUnlockedWeaponSkins().get(this.weapon.getUniqueIdentifier()); + + for (int i = 0; i < 45; i++) { + ItemStack stack = new ItemStack(Material.STAINED_GLASS_PANE, 1, (byte) DyeColor.BLACK.getWoolData()); + ItemMeta meta = stack.getItemMeta(); + meta.setDisplayName(""); + stack.setItemMeta(meta); + + this.addItem(new MenuItem(i, stack, false)); + } + + for (int i = 0; i < this.weapon.getWeaponSkins().length; i++) { + WeaponSkin skin = this.weapon.getWeaponSkins()[i]; + + if ((unlockedSkins != null && unlockedSkins.contains(skin)) || (skin.getIdentifier() - this.weapon.getWeaponIdentifier()) == 0) { + WeaponSkin currentSkin = user.getEquippedWeaponSkin(this.weapon); + boolean selected = false; + + if (currentSkin != null) { + if (skin == currentSkin) { + selected = true; + } + } + + if (i >= 0 && i <= 2) { + if (!selected) { + this.addItem(new ClickableItem(i + 12, this.createSkinStack(skin, selected), (player, action) -> { + Vice.getWeaponSkinManager().updateWeaponSkin(this.holder, this.weapon, skin); + + new SkinsMenu(this.holder, this.weapon).open(); + })); + } else { + this.addItem(new MenuItem(i + 12, this.createSkinStack(skin, selected), false)); + } + } else { + if (!selected) { + this.addItem(new ClickableItem(22, this.createSkinStack(skin, selected), (player, action) -> { + Vice.getWeaponSkinManager().updateWeaponSkin(this.holder, this.weapon, skin); + + new SkinsMenu(this.holder, this.weapon).open(); + })); + } else { + this.addItem(new MenuItem(22, this.createSkinStack(skin, selected), false)); + } + } + } else { + if (i >= 0 && i <= 2) { + this.addItem(new MenuItem(i + 12, this.createLockedSkinStack(), false)); + } else { + this.addItem(new MenuItem(22, this.createLockedSkinStack(), false)); + } + } + } + + this.addItem(new ClickableItem(40, this.createBackStack(), (player, action) -> { + new MainMenu(player).open(); + })); + } + + private ItemStack createBackStack() { + ItemStack stack = new ItemStack(Material.REDSTONE, 1); + + ItemMeta meta = stack.getItemMeta(); + meta.setDisplayName(ChatColor.translateAlternateColorCodes('&', "&c&lBack")); + meta.setLore(Arrays.asList(new String[] { + ChatColor.translateAlternateColorCodes('&', "&7Return to the home page!") + })); + + stack.setItemMeta(meta); + + return stack; + } + + private ItemStack createSkinStack(WeaponSkin skin, boolean selected) { + ItemStack stack = this.weapon.createItemStack(skin); + + ItemMeta meta = stack.getItemMeta(); + meta.setDisplayName(ChatColor.translateAlternateColorCodes('&', skin.getDisplayName())); + + if (selected) { + meta.setLore(Arrays.asList(new String[] { + ChatColor.translateAlternateColorCodes('&', "&7This is the currently selected skin"), ChatColor.translateAlternateColorCodes('&', "&7for this weapon.") + })); + } else { + meta.setLore(Arrays.asList(new String[] { + ChatColor.translateAlternateColorCodes('&', "&7Click to change the selected skin.") + })); + } + + if (selected) { + meta.addEnchant(Enchantment.SILK_TOUCH, 1, false); + meta.addItemFlags(ItemFlag.HIDE_ENCHANTS); + } + + stack.setItemMeta(meta); + + return stack; + } + + private ItemStack createLockedSkinStack() { + ItemStack stack = new ItemStack(Material.STRING); + + ItemMeta meta = stack.getItemMeta(); + meta.setDisplayName(ChatColor.translateAlternateColorCodes('&', "&4&l????")); + meta.setLore(Arrays.asList(new String[] { + ChatColor.translateAlternateColorCodes('&', "&7Unknown skin. Find it at the following places:"), ChatColor.translateAlternateColorCodes('&', "&8- &7Skin Crates"), ChatColor.translateAlternateColorCodes('&', "&8- &7Loot Chests"), + ChatColor.translateAlternateColorCodes('&', "&8- &7Crowbar Crates") + })); + + stack.setItemMeta(meta); + + return stack; + } + + public void open() { + this.openInventory(this.holder); + } + + protected Player getHolder() { + return this.holder; + } + + protected Weapon<?> getWeapon() { + return this.weapon; + } +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/world/ViceSelection.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/world/ViceSelection.java new file mode 100644 index 0000000..5950827 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/world/ViceSelection.java @@ -0,0 +1,96 @@ +package net.grandtheftmc.vice.world; + +import org.bukkit.Location; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.UUID; + +/** + * Created by Timothy Lampen on 8/25/2017. + */ +public class ViceSelection { + + private final Location lowCorner, highCorner; + private final List<ZoneFlag> flags; + private final String name; + private final List<UUID> insideSelection = new ArrayList<>(); + + public ViceSelection(String name, List<ZoneFlag> flags, Location corner1, Location corner2, boolean ignoreheight) { + if(corner1.getBlockY()==corner2.getBlockY() || ignoreheight) { + corner1.setY(0); + corner2.setY(255); + this.lowCorner = corner1; + this.highCorner = corner2; + } + else { + this.lowCorner = corner1.getBlockY()<corner2.getBlockY() ? corner1 : corner2; + this.highCorner = corner1.getBlockY()>corner2.getBlockY() ? corner1 : corner2; + } + this.name = name; + this.flags = flags; + } + + public String getName() { + return name; + } + + public List<ZoneFlag> getFlags() { + return flags; + } + + public void addFlag(ZoneFlag flag) { + this.flags.add(flag); + } + + public boolean removeFlag(ZoneFlag flag){ + if(this.flags.contains(flag)) { + this.flags.remove(flag); + return true; + } + return false; + } + + public Location getHighCorner() { + return highCorner; + } + + public Location getLowCorner() { + return lowCorner; + } + + public boolean isInRegion(Location loc){ + if(loc.getY()>=this.lowCorner.getY() && loc.getY()<=this.highCorner.getY()) { + double[] dim = new double[2]; + + dim[0] = this.highCorner.getX(); + dim[1] = this.lowCorner.getX(); + Arrays.sort(dim); + if(loc.getX() > dim[1] || loc.getX() < dim[0]) + return false; + + dim[0] = this.highCorner.getZ(); + dim[1] = this.lowCorner.getZ(); + Arrays.sort(dim); + if(loc.getZ() > dim[1] || loc.getZ() < dim[0]) + return false; + return true; + } + return false; + } + + public List<UUID> getInsideSelection() { + return insideSelection; + } + + public void addPlayerToSelection(UUID uuid) { + if(!this.insideSelection.contains(uuid)) + this.insideSelection.add(uuid); + } + + public void removePlayerFromSelection(UUID uuid) { + if(this.insideSelection.contains(uuid)) + this.insideSelection.remove(uuid); + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/world/WorldManager.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/world/WorldManager.java new file mode 100644 index 0000000..1333fbe --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/world/WorldManager.java @@ -0,0 +1,117 @@ +package net.grandtheftmc.vice.world; + +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.ViceUtils; +import net.grandtheftmc.vice.world.obsidianbreaker.ObsidianManager; +import net.grandtheftmc.vice.world.warps.WarpManager; +import org.bukkit.Location; +import org.bukkit.configuration.file.YamlConfiguration; + +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +/** + * Created by Timothy Lampen on 8/25/2017. + */ +public class WorldManager { + + private List<ViceSelection> zones =new ArrayList<>(); + private final ObsidianManager om; + private final WarpManager wm; + + public WorldManager(){ + om = new ObsidianManager(); + wm = new WarpManager(); + } + + public void load() { + wm.loadWarps(); + this.loadZones(); + } + + public void save() { + wm.saveWarps(); + this.saveZones(); + } + + private void saveZones(){ + YamlConfiguration c = Vice.getSettings().getZoneConfig(); + for(String s : c.getConfigurationSection("").getKeys(false)) { + c.set(s, null);//clearing past zones + } + for(ViceSelection zone : this.zones) { + StringBuilder flags = new StringBuilder(); + if(zone.getFlags().size()>0) { + zone.getFlags().forEach(flag -> { + flags.append(flag + ":"); + }); + flags.deleteCharAt(flags.length() - 1); + } + c.set(zone.getName() + ".flags", flags.toString()); + c.set(zone.getName() + ".highcorner", ViceUtils.serializeLocation(zone.getHighCorner())); + c.set(zone.getName() + ".lowcorner", ViceUtils.serializeLocation(zone.getLowCorner())); + } + Utils.saveConfig(c, "zones"); + } + + private void loadZones(){ + YamlConfiguration c = Vice.getSettings().getZoneConfig(); + if(c.getConfigurationSection("")==null) + return; + for(String name : c.getConfigurationSection("").getKeys(false)) { + List<ZoneFlag> flags = new ArrayList<>(); + String seralizedFlags = c.getString(name + ".flags"); + if(seralizedFlags.contains(":")) { + for(String s : seralizedFlags.split(":")) { + flags.add(ZoneFlag.valueOf(s)); + } + } + else { + flags.add(ZoneFlag.valueOf(seralizedFlags)); + } + Location highCorner = ViceUtils.deserializeLocation(c.getString(name + ".highcorner")).get(); + Location lowCorner = ViceUtils.deserializeLocation(c.getString(name + ".lowcorner")).get(); + this.zones.add(new ViceSelection(name, flags, lowCorner, highCorner, false)); + + } + } + + public Optional<ViceSelection> getZone(String name) { + return this.zones.stream().filter(zone -> zone.getName().equalsIgnoreCase(name)).findFirst(); + } + + public List<ViceSelection> getZones(Location loc) { + return this.zones.stream().filter(zone -> zone.isInRegion(loc)).collect(Collectors.toList()); + } + + public ObsidianManager getObsidianManager() { + return om; + } + + + public List<ViceSelection> getZones() { + return zones; + } + + public void addZone(ViceSelection selection) { + this.zones.add(selection); + } + + public boolean removeZone(String name) { + List<ViceSelection> clone = this.zones; + for(ViceSelection z : clone) { + if(z.getName().equalsIgnoreCase(name)) { + this.zones.remove(z); + return true; + } + } + return false; + } + + public WarpManager getWarpManager() { + return wm; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/world/ZoneFlag.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/world/ZoneFlag.java new file mode 100644 index 0000000..f33172d --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/world/ZoneFlag.java @@ -0,0 +1,9 @@ +package net.grandtheftmc.vice.world; + +/** + * Created by Timothy Lampen on 8/25/2017. + */ +public enum ZoneFlag { + COP_TELEPORT_STATION, + COP_CANT_ARREST +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/world/events/PlayerEnterZoneEvent.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/world/events/PlayerEnterZoneEvent.java new file mode 100644 index 0000000..b573515 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/world/events/PlayerEnterZoneEvent.java @@ -0,0 +1,44 @@ +package net.grandtheftmc.vice.world.events; + +import net.grandtheftmc.vice.world.ViceSelection; +import org.bukkit.entity.Player; +import org.bukkit.event.Cancellable; +import org.bukkit.event.HandlerList; +import org.bukkit.event.player.PlayerEvent; + +/** + * Created by Timothy Lampen on 8/25/2017. + */ +public class PlayerEnterZoneEvent extends PlayerEvent implements Cancellable { + private static final HandlerList HANDLER_LIST = new HandlerList(); + private boolean cancelled; + private final ViceSelection zone; + + public PlayerEnterZoneEvent(Player who, ViceSelection zone) { + super(who); + this.zone = zone; + } + + public ViceSelection getZone() { + return zone; + } + + @Override + public boolean isCancelled() { + return cancelled; + } + + @Override + public void setCancelled(boolean b) { + this.cancelled = b; + } + + public static HandlerList getHandlerList() { + return HANDLER_LIST; + } + + @Override + public HandlerList getHandlers() { + return HANDLER_LIST; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/world/events/PlayerLeaveZoneEvent.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/world/events/PlayerLeaveZoneEvent.java new file mode 100644 index 0000000..87fa874 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/world/events/PlayerLeaveZoneEvent.java @@ -0,0 +1,44 @@ +package net.grandtheftmc.vice.world.events; + +import net.grandtheftmc.vice.world.ViceSelection; +import org.bukkit.entity.Player; +import org.bukkit.event.Cancellable; +import org.bukkit.event.HandlerList; +import org.bukkit.event.player.PlayerEvent; + +/** + * Created by Timothy Lampen on 8/25/2017. + */ +public class PlayerLeaveZoneEvent extends PlayerEvent implements Cancellable { + private static final HandlerList HANDLER_LIST = new HandlerList(); + private boolean cancelled; + private final ViceSelection zone; + + public PlayerLeaveZoneEvent(Player who, ViceSelection zone) { + super(who); + this.zone = zone; + } + + public ViceSelection getZone() { + return zone; + } + + @Override + public boolean isCancelled() { + return cancelled; + } + + @Override + public void setCancelled(boolean b) { + this.cancelled = b; + } + + @Override + public HandlerList getHandlers() { + return HANDLER_LIST; + } + + public static HandlerList getHandlerList() { + return HANDLER_LIST; + } +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/world/obsidianbreaker/BlockStatus.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/world/obsidianbreaker/BlockStatus.java new file mode 100644 index 0000000..ebfdeae --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/world/obsidianbreaker/BlockStatus.java @@ -0,0 +1,90 @@ +package net.grandtheftmc.vice.world.obsidianbreaker; + +/** + * Created by Timothy Lampen on 7/2/2017. + */ +/** + * Stores damage data concerning one block + * + * @author oggehej + */ +public class BlockStatus { + private float damage = 0; + private float maxDamage; + private boolean modified = true; + private final String blockHash; + private final String chunkHash; + + /** + * An object that contains information about the + * damage taken and id it was recently modified. + */ + BlockStatus(String blockHash, String chunkHash, float maxDamage) { + this.blockHash = blockHash; + this.chunkHash = chunkHash; + this.maxDamage = maxDamage; + } + + /** + * Get current damage to block + * + * @return Damage + */ + public float getDamage() { + return damage; + } + + /** + * Set current damage to block + * + * @param damage Damage + */ + public void setDamage(float damage) { + this.damage = damage; + } + + /** + * Check whether the block was recently modified or not + * + * @return Recently modified + */ + public boolean isModified() { + return modified; + } + + /** + * Set whether the block was recently modified or not + * + * @param modified Recently modified + */ + public void setModified(boolean modified) { + this.modified = modified; + } + + /** + * Get the maximum amount of damage the block can take + * + * @return Max damage + */ + float getTotalDurability() { + return this.maxDamage; + } + + /** + * Get the block hash associated with this object + * + * @return Block hash + */ + public String getBlockHash() { + return blockHash; + } + + /** + * Get the chunk hash associated with this object + * + * @return Chunk hash + */ + public String getChunkHash() { + return chunkHash; + } +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/world/obsidianbreaker/DamageStorage.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/world/obsidianbreaker/DamageStorage.java new file mode 100644 index 0000000..c31ed4b --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/world/obsidianbreaker/DamageStorage.java @@ -0,0 +1,124 @@ +package net.grandtheftmc.vice.world.obsidianbreaker; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.vice.Vice; +import org.bukkit.Bukkit; +import org.bukkit.Chunk; +import org.bukkit.Location; +import org.bukkit.block.Block; + +import java.util.Map; +import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; + +/** + * Created by Timothy Lampen on 7/2/2017. + */ +public class DamageStorage { + + // The HashMaps inside the HashMap represent chunks + private final ConcurrentHashMap<String, ConcurrentHashMap<String, BlockStatus>> damage = new ConcurrentHashMap<String, ConcurrentHashMap<String, BlockStatus>>(); + + /** + * Generate a unique {@code String} for the {@code Block} {@code Location} + * + * @param loc Block location + * @return Unique string + */ + protected String generateBlockHash(Location loc) { + return loc.getWorld().getUID().toString() + ":" + loc.getBlockX() + ":" + loc.getBlockY() + ":" + loc.getBlockZ(); + } + + /** + * Generate a unique {@code String} for the {@code Chunk} {@code Location} + * + * @return Unique string + */ + protected String generateChunkHash(Chunk chunk) { + return chunk.getWorld().getUID().toString() + ":" + chunk.getX() + ":" + chunk.getZ(); + } + + /** + * Generate a {@code Location} from the unique {@code String} + * + * @param blockHash + * @return Location + */ + public Location generateLocation(String blockHash) { + try { + String[] s = blockHash.split(":"); + return new Location(Bukkit.getWorld(UUID.fromString(s[0])), Integer.parseInt(s[1]), Integer.parseInt(s[2]), Integer.parseInt(s[3])); + } catch(Exception e) { + Core.error("Couldn't generate hash from location (hash: " + blockHash + ")"); + return null; + } + } + + + /** + * Get the {@code BlockStatus} object of the block + * + * @param block The block + * @param create Whether we should create the object if it doesn't exist + * @return The {@code BlockStatus}, or null if it doesn't exist and create==false OR invalid block + */ + public BlockStatus getBlockStatus(Block block, boolean create) { + String chunkHash = generateChunkHash(block.getLocation().getChunk()); + Map<String, BlockStatus> chunkMap = null; + + if (damage.containsKey(chunkHash)) + chunkMap = damage.get(chunkHash); + else if (create) { + damage.put(chunkHash, new ConcurrentHashMap<String, BlockStatus>()); + chunkMap = damage.get(chunkHash); + } else + return null; + + String blockHash = generateBlockHash(block.getLocation()); + + if (chunkMap.containsKey(blockHash)) + return chunkMap.get(blockHash); + else if (create) { + chunkMap.put(blockHash, new BlockStatus(blockHash, chunkHash, 10)); + return chunkMap.get(blockHash); + } else { + return null; + } + } + + /** + * Remove the {@code BlockStatus} object from the map + * + * @param blockStatus + */ + public void removeBlockStatus(BlockStatus blockStatus) { + String chunkHash = blockStatus.getChunkHash(); + Map<String, BlockStatus> chunk = damage.get(chunkHash); + if(chunk == null) + return; + + chunk.remove(blockStatus.getBlockHash()); + + if(chunk.isEmpty()) + damage.remove(chunkHash); + } + + /** + * Render cracks in {@code Block} + * + * @param block Block + */ + public void renderCracks(Block block) { + BlockStatus status = getBlockStatus(block, false); + + if(status == null || status.getTotalDurability() <= 0) + return; + + int durability = 10 - (int) Math.ceil((status.getTotalDurability() - status.getDamage()) / status.getTotalDurability() * 10); + Vice.getWorldManager().getObsidianManager().getNMSHandler().sendCrackEffect(block.getLocation(), durability); + } + + public ConcurrentHashMap<String, ConcurrentHashMap<String, BlockStatus>> getBlocks() { + return damage; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/world/obsidianbreaker/ObsidianManager.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/world/obsidianbreaker/ObsidianManager.java new file mode 100644 index 0000000..31ae5d0 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/world/obsidianbreaker/ObsidianManager.java @@ -0,0 +1,171 @@ +package net.grandtheftmc.vice.world.obsidianbreaker; + +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.world.obsidianbreaker.nms.NMS; +import net.grandtheftmc.vice.world.obsidianbreaker.nms.Reflection; +import net.grandtheftmc.vice.world.obsidianbreaker.tasks.RegenTask; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.entity.Entity; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by Timothy Lampen on 7/2/2017. + */ +//note that this code has been borrowed from https://raw.githubusercontent.com/oggehej/ObsidianBreaker +public class ObsidianManager { + private DamageStorage damageStorage; + private NMS nmsHandler; + + + public ObsidianManager(){ + this.damageStorage = new DamageStorage(); + setupNMS(); + new RegenTask().runTaskTimerAsynchronously(Vice.getInstance(), 0,20*60*5);//every minute 2 damage is regenned. + } + + /** + * Check if we even handle the explosion for the specified block + * + * @param block Block to check + * @return Whether we're handling these kind of blocks + */ + private boolean isValidBlock(Block block) { + return block!=null && block.getType()== Material.OBSIDIAN; + } + + public void updateRange(double radius, Entity explosive, int damage){ + for(double x = explosive.getLocation().getBlockX()-radius; x<explosive.getLocation().getBlockX()+radius; x++){ + for(double y = explosive.getLocation().getBlockY()-radius; y<explosive.getLocation().getBlockY()+radius; y++){ + for(double z = explosive.getLocation().getBlockZ()-radius; z<explosive.getLocation().getBlockZ()+radius; z++){ + Block b = explosive.getWorld().getBlockAt(new Location(explosive.getWorld(), x, y, z)); + if(!isValidBlock(b)) + continue; + if(explosionThroughLiquid(explosive.getLocation(), b.getLocation())) + continue; + BlockStatus status = getDamageStorage().getBlockStatus(b, true); + if(status.getDamage()+damage>=status.getTotalDurability()) { + b.breakNaturally(); + getDamageStorage().removeBlockStatus(status); + getNMSHandler().sendCrackEffect(b.getLocation(), -1); + } + else { + status.setDamage(status.getDamage() + damage); + getDamageStorage().renderCracks(b); + } + } + } + } + } + + + private boolean explosionThroughLiquid(Location explosionSource, Location block) { + if(explosionSource.getWorld().getBlockAt(block).getType()== Material.BEDROCK || explosionSource.getBlock().getType()==Material.WATER || explosionSource.getBlock().getType()==Material.STATIONARY_WATER) + return true; + List<Block> list = new ArrayList<Block>(); + int i, dx, dy, dz, l, m, n, x_inc, y_inc, z_inc, err_1, err_2, dx2, dy2, dz2; + int pixelX, pixelY, pixelZ; + + pixelX = explosionSource.getBlockX(); + pixelY = explosionSource.getBlockY(); + pixelZ = explosionSource.getBlockZ(); + dx = block.getBlockX() - explosionSource.getBlockX(); + dy = block.getBlockY() - explosionSource.getBlockY(); + dz = block.getBlockZ() - explosionSource.getBlockZ(); + x_inc = (dx < 0) ? -1 : 1; + l = Math.abs(dx); + y_inc = (dy < 0) ? -1 : 1; + m = Math.abs(dy); + z_inc = (dz < 0) ? -1 : 1; + n = Math.abs(dz); + dx2 = l << 1; + dy2 = m << 1; + dz2 = n << 1; + + if ((l >= m) && (l >= n)) { + err_1 = dy2 - l; + err_2 = dz2 - l; + for (i = 0; i < l; i++) { + list.add(explosionSource.getWorld().getBlockAt(pixelX, pixelY, pixelZ)); + if (err_1 > 0) { + pixelY += y_inc; + err_1 -= dx2; + } + if (err_2 > 0) { + pixelZ += z_inc; + err_2 -= dx2; + } + err_1 += dy2; + err_2 += dz2; + pixelX += x_inc; + } + } else if ((m >= l) && (m >= n)) { + err_1 = dx2 - m; + err_2 = dz2 - m; + for (i = 0; i < m; i++) { + list.add(explosionSource.getWorld().getBlockAt(pixelX, pixelY, pixelZ)); + if (err_1 > 0) { + pixelX += x_inc; + err_1 -= dy2; + } + if (err_2 > 0) { + pixelZ += z_inc; + err_2 -= dy2; + } + err_1 += dx2; + err_2 += dz2; + pixelY += y_inc; + } + } else { + err_1 = dy2 - n; + err_2 = dx2 - n; + for (i = 0; i < n; i++) { + list.add(explosionSource.getWorld().getBlockAt(pixelX, pixelY, pixelZ)); + if (err_1 > 0) { + pixelY += y_inc; + err_1 -= dz2; + } + if (err_2 > 0) { + pixelX += x_inc; + err_2 -= dz2; + } + err_1 += dy2; + err_2 += dx2; + pixelZ += z_inc; + } + } + list.add(explosionSource.getWorld().getBlockAt(pixelX, pixelY, pixelZ)); + + return list.stream().filter(Block::isLiquid).findFirst().isPresent(); + } + + public DamageStorage getDamageStorage() { + return damageStorage; + } + + private void setupNMS() { + String packageName = Bukkit.getServer().getClass().getPackage().getName(); + String version = packageName.substring(packageName.lastIndexOf('.') + 1); + + try { + final Class<?> clazz = Class.forName(getClass().getPackage().getName() + ".nms." + version); + if (NMS.class.isAssignableFrom(clazz)) { + Vice.log("Using NMS version " + version); + this.nmsHandler = (NMS) clazz.getConstructor().newInstance(); + } + } catch (final Exception e) { + Vice.log("Could not find NMS version " + version + ". Falling back to reflections. Are you sure you're using the latest version?\n" + + "If you are using the latest verion and an error appears later on or block cracks don't work, contact the plugin author. " + + "Otherwise everything should function normally."); + this.nmsHandler = new Reflection(); + } + } + + public NMS getNMSHandler() { + return nmsHandler; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/world/obsidianbreaker/nms/NMS.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/world/obsidianbreaker/nms/NMS.java new file mode 100644 index 0000000..dde287f --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/world/obsidianbreaker/nms/NMS.java @@ -0,0 +1,10 @@ +package net.grandtheftmc.vice.world.obsidianbreaker.nms; + +/** + * Created by Timothy Lampen on 7/2/2017. + */ +import org.bukkit.Location; + +public interface NMS { + public void sendCrackEffect(Location location, int damage); +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/world/obsidianbreaker/nms/Reflection.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/world/obsidianbreaker/nms/Reflection.java new file mode 100644 index 0000000..9a17221 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/world/obsidianbreaker/nms/Reflection.java @@ -0,0 +1,33 @@ +package net.grandtheftmc.vice.world.obsidianbreaker.nms; + +import org.bukkit.Bukkit; +import org.bukkit.Location; + +/** + * Created by Timothy Lampen on 7/2/2017. + */ +public class Reflection implements NMS { + private boolean failed = false; + + @Override + public void sendCrackEffect(Location location, int damage) { + if(!failed) { + try { + int x = location.getBlockX(), y = location.getBlockY(), z = location.getBlockZ(); + Object worldHandle = location.getWorld().getClass().getMethod("getHandle").invoke(location.getWorld()); + Object blockPosition = ReflectionUtils.getNMSClass("BlockPosition").getConstructor(Integer.TYPE, Integer.TYPE, Integer.TYPE).newInstance(x, y, z); + int dimension = worldHandle.getClass().getField("dimension").getInt(worldHandle); + Object packet = ReflectionUtils.getNMSClass("PacketPlayOutBlockBreakAnimation") + .getConstructor(Integer.TYPE, ReflectionUtils.getNMSClass("BlockPosition"), Integer.TYPE) + .newInstance(location.hashCode(), blockPosition, damage); + Object serverHandle = Bukkit.getServer().getClass().getMethod("getHandle").invoke(Bukkit.getServer()); + serverHandle.getClass() + .getMethod("sendPacketNearby", ReflectionUtils.getNMSClass("EntityHuman"), Double.TYPE, Double.TYPE, Double.TYPE, Double.TYPE, Integer.TYPE, ReflectionUtils.getNMSClass("Packet")) + .invoke(serverHandle, null, x, y, z, 30, dimension, packet); + } catch(Exception e) { + failed = true; + System.err.println("[ObsidianBreaker] Generic reflection failed. Visible block cracks are disabled. Please contact the plugin author."); + } + } + } +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/world/obsidianbreaker/nms/ReflectionUtils.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/world/obsidianbreaker/nms/ReflectionUtils.java new file mode 100644 index 0000000..7acf98d --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/world/obsidianbreaker/nms/ReflectionUtils.java @@ -0,0 +1,77 @@ +package net.grandtheftmc.vice.world.obsidianbreaker.nms; + +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; + +import java.util.HashMap; + +/** + * Created by Timothy Lampen on 7/2/2017. + */ +public class ReflectionUtils { + private static HashMap<String, Class<?>> nmsClasses = new HashMap<String, Class<?>>(); + + /** + * Get the current server revision. + * <p>Example: v1_8_R3 + */ + public static String getVersion() { + String name = Bukkit.getServer().getClass().getPackage().getName(); + String version = name.substring(name.lastIndexOf('.') + 1) + "."; + return version; + } + + /** + * Get the NMS class with the specified name + */ + public static Class<?> getNMSClass(String className) { + Class<?> clazz = null; + if(nmsClasses.containsKey(className)) { + clazz = nmsClasses.get(className); + } else { + String fullName = "net.minecraft.server." + getVersion() + className; + try { + clazz = Class.forName(fullName); + } catch (Exception e) { + System.err.println("Could not find NMS class!"); + e.printStackTrace(); + } + nmsClasses.put(className, clazz); + } + return clazz; + } + + /** + * Get the player connection as a generic object + */ + public static Object getConnection(Player player) { + try { + Object nmsPlayer = getPlayerHandle(player); + return nmsPlayer.getClass().getField("playerConnection").get(nmsPlayer); + } catch(Exception e) { + System.err.println("Could not fetch player connection!"); + e.printStackTrace(); + return null; + } + } + + /** + * Get the handle of specified player + */ + public static Object getPlayerHandle(Player player) { + try { + return player.getClass().getMethod("getHandle").invoke(player); + } catch (Exception e) { + System.err.println("Could not get player handle!"); + e.printStackTrace(); + return null; + } + } + + /** + * Clear the NMS class cache + */ + public static void clearCache() { + nmsClasses.clear(); + } +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/world/obsidianbreaker/tasks/RegenTask.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/world/obsidianbreaker/tasks/RegenTask.java new file mode 100644 index 0000000..a7919d9 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/world/obsidianbreaker/tasks/RegenTask.java @@ -0,0 +1,36 @@ +package net.grandtheftmc.vice.world.obsidianbreaker.tasks; + +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.world.obsidianbreaker.BlockStatus; +import org.bukkit.block.Block; +import org.bukkit.scheduler.BukkitRunnable; + +import java.util.concurrent.ConcurrentHashMap; + +/** + * Created by Timothy Lampen on 7/3/2017. + */ +public class RegenTask extends BukkitRunnable{ + @Override + public void run() { + try { + for(ConcurrentHashMap<String, BlockStatus> map : Vice.getWorldManager().getObsidianManager().getDamageStorage().getBlocks().values()) { + for(BlockStatus status : map.values()) { + if(status.isModified()) + status.setModified(false); + else { + status.setDamage(status.getDamage() - 2); + Block b = Vice.getWorldManager().getObsidianManager().getDamageStorage().generateLocation(status.getBlockHash()).getBlock(); + if(b==null) + continue; + Vice.getWorldManager().getObsidianManager().getDamageStorage().renderCracks(b); + if(status.getDamage()<=0) + Vice.getWorldManager().getObsidianManager().getDamageStorage().removeBlockStatus(status); + } + } + } + } catch(Exception e) { + Vice.error("Error occured while trying to regen block (tasks "+getTaskId()+")"); + } + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/world/warps/Warp.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/world/warps/Warp.java new file mode 100644 index 0000000..e594686 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/world/warps/Warp.java @@ -0,0 +1,31 @@ +package net.grandtheftmc.vice.world.warps; + +import org.bukkit.Location; + +public class Warp { + + private String name; + private Location location; + + public Warp(String name, Location location) { + this.name = name; + this.location = location; + } + + public String getName() { + return this.name; + } + + public void setName(String name) { + this.name = name; + } + + public Location getLocation() { + return this.location; + } + + public void setLocation(Location location) { + this.location = location; + } + +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/world/warps/WarpCache.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/world/warps/WarpCache.java new file mode 100644 index 0000000..0691299 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/world/warps/WarpCache.java @@ -0,0 +1,44 @@ +package net.grandtheftmc.vice.world.warps; + +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.vice.users.TaxiTarget; +import net.grandtheftmc.vice.users.ViceUser; + +/** + * Created by Luke Bingham. + */ +public class WarpCache { + + private final User user; + private final ViceUser viceUser; + private final TaxiTarget target; + private final int price, delay; + + public WarpCache(User user, ViceUser viceUser, TaxiTarget target, int price, int delay) { + this.user = user; + this.viceUser = viceUser; + this.target = target; + this.price = price; + this.delay = delay; + } + + public User getUser() { + return user; + } + + public ViceUser getViceUser() { + return viceUser; + } + + public TaxiTarget getTarget() { + return target; + } + + public int getPrice() { + return price; + } + + public int getDelay() { + return delay; + } +} diff --git a/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/world/warps/WarpManager.java b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/world/warps/WarpManager.java new file mode 100644 index 0000000..0046674 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/java/net/grandtheftmc/vice/world/warps/WarpManager.java @@ -0,0 +1,657 @@ +package net.grandtheftmc.vice.world.warps; + +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.util.State; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.users.Pref; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.vice.Vice; +import net.grandtheftmc.vice.ViceUtils; +import net.grandtheftmc.vice.events.TPEvent; +import net.grandtheftmc.vice.events.TPEvent.TPType; +import net.grandtheftmc.vice.users.ViceRank; +import net.grandtheftmc.vice.users.ViceUser; +import net.grandtheftmc.vice.users.TaxiTarget; +import net.grandtheftmc.vice.users.TaxiTarget.TargetType; +import net.grandtheftmc.vice.users.storage.BooleanStorageType; +import org.bukkit.*; +import org.bukkit.block.BlockFace; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; +import org.bukkit.scheduler.BukkitRunnable; + +import java.util.*; +import java.util.stream.Collectors; + +public class WarpManager { + + private Warp tutorialSpawn; + private Warp spawn; + private Warp jail; + private List<Warp> warps = new ArrayList<>(); + private Map<Location, String> warpPads = new HashMap<>(); + private final HashMap<UUID, WarpCache> warpCache = Maps.newHashMap(); + private final HashSet<UUID> toRemove = Sets.newHashSet(); + + public WarpManager() { + this.loadWarps(); + + new BukkitRunnable() { + @Override public void run() { + if(!warpCache.isEmpty()) { + + // for each player + for (UUID uuid : warpCache.keySet()) { + + try{ + Player player = Bukkit.getPlayer(uuid); + if (player == null || !player.isOnline()) { + toRemove.add(uuid); + continue; + } + + WarpCache cache = warpCache.get(uuid); + if (cache == null) { + toRemove.add(uuid); + continue; + } + + int timer = cache.getViceUser().getTaxiTimer(); + if (cache.getViceUser().isInCombat()) { + player.sendMessage(Utils.f(Lang.COMBATTAG + "&7You can't call a cab while in combat!")); + cache.getViceUser().unsetTaxiTarget(); + toRemove.add(uuid); + continue; + } + + if (timer == 15 || timer == 10 || (timer <= 5 && timer > 0)) { + player.sendMessage(Utils.f(Lang.TAXI + "&eYour taxi is arriving in &a" + timer + " &esecond" + + (timer == 1 ? "" : "s") + '!')); + if (timer == 1) { + player.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, 50, 0)); + player.playSound(player.getLocation(), Sound.BLOCK_LAVA_EXTINGUISH, 0.5F, 1); + } else + player.playSound(player.getLocation(), Sound.UI_BUTTON_CLICK, 4.0F / timer, 2); + } + + if (timer == 0) { + if (!cache.getUser().isRank(UserRank.ELITE)) { + if (!cache.getViceUser().hasMoney(cache.getViceUser().getTaxiPrice())) { + player.sendMessage(Utils.f(Lang.TAXI + "&eYou can't afford to pay &a$&l" + + cache.getViceUser().getTaxiPrice() + "&e for the ride! Taxi cancelled.")); + toRemove.add(uuid); + continue; + } + } + + TaxiTarget target = cache.getViceUser().getTaxiTarget(); + if (target == null) { + cache.getViceUser().unsetTaxiTarget(); + player.sendMessage(Lang.TAXI.f("&eYour target could not be reached!")); + toRemove.add(uuid); + continue; + } + + Location tpLoc = target.getExactLocation(); + TPEvent e = new TPEvent(player, target.getTargetPlayer(), + target.getType() == TargetType.PLAYER ? TPType.TP_COMPLETE : TPType.WARP).call(); + if (e.isCancelled()) { + cache.getViceUser().unsetTaxiTarget(); + toRemove.add(uuid); + player.sendMessage(Lang.TAXI.f(e.getCancelMessage())); + continue; + } + + if (e.targetLocationIsChanged()) + tpLoc = e.getTargetLocation(); + + // if warping an entity or player + if (target.getType() == TargetType.ENTITY || target.getType() == TargetType.PLAYER){ + + // if they are tping to air + if (tpLoc != null && tpLoc.getBlock().getRelative(BlockFace.DOWN).getType() == Material.AIR){ + tpLoc = tpLoc.getWorld().getHighestBlockAt(tpLoc).getLocation(); + } + } + + if (tpLoc == null) { + cache.getViceUser().unsetTaxiTarget(); + toRemove.add(uuid); + player.sendMessage(Lang.TAXI.f("&eYour destination could not be reached!")); + continue; + } + + player.teleport(tpLoc); + cache.getViceUser().setLastTeleport(); +// if(cache.getViceUser().getCheatCodeState(CheatCode.SNEAKY).getState()== State.ON) { +// player.addPotionEffect(new PotionEffect(PotionEffectType.INVISIBILITY, 20*10, 0)); +// } + int price = cache.getViceUser().getTaxiPrice(); + cache.getViceUser().unsetTaxiTarget(); + player.sendMessage(Utils.f(Lang.TAXI + "&eThe taxi dropped you off at your destination" + (target.getWarp() != null ? " (" + target.getWarp().getName() + ")" : "."))); + if (price > 0 && !cache.getUser().isRank(UserRank.ELITE)) { + cache.getViceUser().takeMoney(price); + ViceUtils.updateBoard(player, Core.getUserManager().getLoadedUser(player.getUniqueId()), cache.getViceUser()); + Lang.MONEY_TAKE.f(String.valueOf(price)); + } + + toRemove.add(uuid); + continue; + } + + cache.getViceUser().setTaxiTimer(timer - 1); + } + catch(Exception e){ + // if we get here there's a null pointer somewhere + // stops bug affecting multiple users + e.printStackTrace(); + toRemove.add(uuid); + } + } + } + + if(toRemove.isEmpty()) return; + for(UUID uuid : toRemove) warpCache.remove(uuid); + toRemove.clear(); + } + }.runTaskTimer(Vice.getInstance(), 20L, 20L); + } + + public Warp getTutorialSpawn() { + return this.tutorialSpawn; + } + + public void setTutorialSpawn(Location location) { + this.tutorialSpawn = new Warp("tutorialSpawn", location); + } + + public Warp getSpawn() { + return this.spawn; + } + + public void setSpawn(Location location) { + this.spawn = new Warp("spawn", location); + } + + public Warp getJail() { + return this.jail; + } + + public void setJail(Location location) { + this.jail = new Warp("jail", location); + } + + public List<Warp> getWarps() { + return this.warps; + } + + public Warp getRandomWarp() { + if (this.warps.isEmpty()) + return null; + return this.warps.get(Utils.getRandom().nextInt(this.warps.size())); + } + + public Warp getWarp(String warpName) { + return this.warps.stream().filter(warp -> warp.getName().equalsIgnoreCase(warpName)).findFirst().orElse(null); + } + + public void addWarp(Warp warp) { + this.warps.add(warp); + } + + public void removeWarp(Warp warp) { + this.warps.remove(warp); + } + + public boolean cancelTaxi(Player player, ViceUser viceUser) { +// if (viceUser.getTaxiTaskId() == -1) +// return false; +// Bukkit.getScheduler().cancelTask(viceUser.getTaxiTaskId()); +// viceUser.unsetTaxiTarget(); + + if(player == null || viceUser == null) return false; + if(!warpCache.containsKey(player.getUniqueId())) return false; + + viceUser.unsetTaxiTarget(); + warpCache.remove(player.getUniqueId()); + + return true; + } + + public void warp(Player player, User user, ViceUser viceUser, TaxiTarget target) { + this.warp(player, user, viceUser, target, 0, -1, null); + } + + public void warp(Player player, User user, ViceUser viceUser, TaxiTarget target, int price) { + this.warp(player, user, viceUser, target, price, -1, null); + } + + public void warp(Player player, User user, ViceUser viceUser, TaxiTarget target, int price, int delay) { + this.warp(player, user, viceUser, target, price, delay, null); + } + + public void warp(Player player, User user, ViceUser viceUser, TaxiTarget target, int price, int delay, String msg) { + ViceUtils.giveGameItems(player); + if (delay < 0) + delay = Objects.equals(player.getWorld().getName(), "spawn") && user.isPremium() ? 1 : ViceUtils.getWarpDelay(user.getUserRank()); + UUID uuid = player.getUniqueId(); + if (viceUser.cancelVehicleTeleport()) + player.sendMessage(Lang.VEHICLES.f("&7You cancelled " + (viceUser.getBooleanFromStorage(BooleanStorageType.SEND_AWAY) ? "sending away" : "calling") + " your personal vehicle!")); + if (this.cancelTaxi(player, viceUser)) + player.sendMessage(Utils.f(Lang.TAXI + "&eThe previous taxi was cancelled.")); + if (player.getGameMode() == GameMode.SPECTATOR) { + player.sendMessage(Lang.TAXI.f("&7You can't teleport to players while you're dead!")); + return; + } + if (viceUser.isInCombat()) { + player.sendMessage(Utils.f(Lang.COMBATTAG + "&7You can't call a cab while in combat!")); + return; + } + if (user.isInTutorial()) return; + if (viceUser.isArrested()) { + player.sendMessage(Lang.JAIL.f("&7You can't teleport in jail!")); + return; + } + if (price > 0 && !user.isRank(UserRank.ELITE)) { + if (!viceUser.hasMoney(price)) { + player.sendMessage(Utils.f(Lang.TAXI + "&eYou can't afford to pay &a$&l" + + price + "&e for the ride! Taxi cancelled.")); + return; + } + } + if (target == null || target.getExactLocation() == null) { + player.sendMessage(Utils.f(Lang.TAXI + "&eThat location does not exist!")); + return; + } + player.sendMessage(Lang.TAXI.f( msg == null ? "&eYou called a taxi!" : msg )); + final Location origin = player.getLocation(); + viceUser.setTaxiTimer(delay); + viceUser.setTaxiTarget(target); + viceUser.setTaxiPrice(price); + + this.warpCache.put(uuid, new WarpCache(user, viceUser, target, price, delay)); + +// viceUser.setTaxiTaskId(new BukkitRunnable() { +// @Override +// public void run() { +// Player player = Bukkit.getPlayer(uuid); +// if (player == null) { +// this.cancel(); +// return; +// } +// ViceUser viceUser = Vice.getUserManager().getLoadedUser(uuid); +// int timer = viceUser.getTaxiTimer(); +// if (viceUser.isInCombat()) { +// player.sendMessage(Utils.f(Lang.COMBATTAG + "&7You can't call a cab while in combat!")); +// viceUser.unsetTaxiTarget(); +// this.cancel(); +// return; +// } +// if(player.getWorld().getName().equals(origin.getWorld().getName()) && player.getLocation().distance(origin)>1) { +// player.sendMessage(Utils.f(Lang.WARP + "&7You cannot move while calling a taxi!")); +// viceUser.unsetTaxiTarget(); +// this.cancel(); +// return; +// } +// if (timer == 15 || timer == 10 || (timer <= 5 && timer > 0)) { +// player.sendMessage(Utils.f(Lang.TAXI + "&eYour taxi is arriving in &a" + timer + " &esecond" +// + (timer == 1 ? "" : "s") + '!')); +// if (timer == 1) { +// player.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, 50, 0)); +// player.playSound(player.getLocation(), Sound.BLOCK_LAVA_EXTINGUISH, 0.5F, 1); +// } else +// player.playSound(player.getLocation(), Sound.UI_BUTTON_CLICK, 4.0F / timer, 2); +// } +// if (timer <= 0) { +// this.cancel(); +// if (!user.isRank(UserRank.ELITE)) { +// if (!viceUser.hasMoney(viceUser.getTaxiPrice())) { +// player.sendMessage(Utils.f(Lang.TAXI + "&eYou can't afford to pay &a$&l" +// + viceUser.getTaxiPrice() + "&e for the ride! Taxi cancelled.")); +// return; +// } +// } +// TaxiTarget target = viceUser.getTaxiTarget(); +// if (target == null) { +// viceUser.unsetTaxiTarget(); +// player.sendMessage(Lang.TAXI.f("&eYour target could not be reached!")); +// return; +// } +// Location tpLoc = target.getExactLocation(); +// TPEvent e = new TPEvent(player, target.getTargetPlayer(), +// target.getType() == TargetType.PLAYER ? TPType.TP_COMPLETE : TPType.WARP).call(); +// if (e.isCancelled()) { +// viceUser.unsetTaxiTarget(); +// player.sendMessage(Lang.TAXI.f(e.getCancelMessage())); +// return; +// } +// if (e.targetLocationIsChanged()) +// tpLoc = e.getTargetLocation(); +// if ((target.getType() == TargetType.ENTITY || target.getType() == TargetType.PLAYER) && tpLoc.getBlock().getRelative(BlockFace.DOWN).getType() == Material.AIR) +// tpLoc = tpLoc.getWorld().getHighestBlockAt(tpLoc).getLocation(); +// if (tpLoc == null) { +// viceUser.unsetTaxiTarget(); +// player.sendMessage(Lang.TAXI.f("&eYour destination could not be reached!")); +// return; +// } +// if(target.getWarp()!=null && target.getWarp().equals(getSpawn())) +// if(player.hasPotionEffect(PotionEffectType.INVISIBILITY)) +// player.removePotionEffect(PotionEffectType.INVISIBILITY); +// player.teleport(tpLoc); +// viceUser.setLastTeleport(); +// int price = viceUser.getTaxiPrice(); +// viceUser.unsetTaxiTarget(); +// player.sendMessage(Utils.f(Lang.TAXI + "&eThe taxi dropped you off at your destination.")); +// if (price > 0 && !user.isRank(UserRank.ELITE)) { +// viceUser.takeMoney(price); +// ViceUtils.updateBoard(player, Core.getUserManager().getLoadedUser(player.getUniqueId()), viceUser); +// Lang.MONEY_TAKE.f(String.valueOf(price)); +// } +// return; +// } +// viceUser.setTaxiTimer(timer - 1); +// } +// }.runTaskTimer(Vice.getInstance(), 20, 20).getTaskId()); + + } + + public void tpa(Player player, User user, ViceUser viceUser, Player target) { + ViceUtils.giveGameItems(player); + if (target == null) { + player.sendMessage(Utils.f(Lang.TAXI + "&eThat player is not online!")); + return; + } + ViceUser targetViceUser = Vice.getUserManager().getLoadedUser(target.getUniqueId()); + if (!user.isSpecial() && !viceUser.isRank(ViceRank.FALCON) && !viceUser.isCop()) { + player.sendMessage(Utils.f(Lang.TAXI + + "&eYou don't have access to teleport to other players! Buy &6&lVIP&e to unlock it!")); + return; + } + if (player.getGameMode() == GameMode.SPECTATOR) { + player.sendMessage(Lang.TAXI.f("&7You can't teleport to players while you're dead!")); + return; + } + if (viceUser.isInCombat()) { + player.sendMessage(Utils.f(Lang.COMBATTAG + "&7You can't call a cab while in combat!")); + return; + } + if (targetViceUser.isInCombat()) { + player.sendMessage(Utils.f(Lang.COMBATTAG + target.getDisplayName() + "&7 is in combat!")); + return; + } + if (user.isInTutorial()) return; + if (viceUser.isArrested()) { + player.sendMessage(Lang.JAIL.f("&7You can't teleport in jail!")); + return; + } + UUID uuid = player.getUniqueId(); + if (viceUser.cancelVehicleTeleport()) + player.sendMessage(Lang.VEHICLES.f("&7You cancelled " + (viceUser.getBooleanFromStorage(BooleanStorageType.SEND_AWAY) ? "sending away" : "calling") + " your personal vehicle!")); + if (this.cancelTaxi(player, viceUser)) + player.sendMessage(Utils.f(Lang.TAXI + "&eThe previous taxi was cancelled.")); + + User targetUser = Core.getUserManager().getLoadedUser(target.getUniqueId()); + if (!targetUser.getPref(Pref.TP_REQUESTS)) { + player.sendMessage(Utils.f(Lang.TAXI + "&eThat player has disabled teleport requests!")); + return; + } + if (targetUser.isInTutorial()) { + player.sendMessage(Lang.TUTORIALS.f("&7That player is in a tutorial!")); + return; + } + TPEvent e = new TPEvent(player, target, TPType.TPA_REQ).call(); + if (e.isCancelled()) { + viceUser.unsetTpaRequests(); + player.sendMessage(Lang.TAXI.f(e.getCancelMessage())); + return; + } + player.sendMessage( + Utils.f(Lang.TAXI + "&eYou requested to teleport to " + targetUser.getColoredName(target) + "&e!")); + target.sendMessage(Utils.f(Lang.TAXI + user.getColoredName(player) + + "&e requested to teleport to you. Use &a\'/tpaccept\'&e to accept.")); + viceUser.setTpaRequestSentUUID(target.getUniqueId()); + viceUser.setBooleanToStorage(BooleanStorageType.TPA_HERE, false); + targetViceUser.setTpaRequestUUID(uuid); + } + + public void tpaHere(Player player, User user, ViceUser viceUser, Player target) { + ViceUtils.giveGameItems(player); + if (target == null) { + player.sendMessage(Utils.f(Lang.TAXI + "&eThat player is not online!")); + return; + } + ViceUser targetViceUser = Vice.getUserManager().getLoadedUser(target.getUniqueId()); + if (!user.getUserRank().isHigherThan(UserRank.PREMIUM) && !viceUser.isCop()) { + player.sendMessage(Utils.f(Lang.TAXI + + "&eYou don't have access to teleport other players to yourself! Buy &b&lELITE&e to unlock it!")); + return; + } + if (player.getGameMode() == GameMode.SPECTATOR) { + player.sendMessage(Lang.TAXI.f("&7You can't teleport players to you while you're dead!")); + return; + } + if (viceUser.isArrested()) { + player.sendMessage(Lang.JAIL.f("&7You can't teleport players to yourself in jail!")); + return; + } + if (viceUser.isInCombat()) { + player.sendMessage(Utils.f(Lang.COMBATTAG + "&7You can't request teleportation while in combat!")); + return; + } + if (targetViceUser.isInCombat()) { + player.sendMessage(Utils.f(Lang.COMBATTAG + target.getDisplayName() + "&7 is in combat!")); + return; + } + if (user.isInTutorial()) return; + if (target.getGameMode() == GameMode.SPECTATOR) { + player.sendMessage(Lang.TAXI.f("&7You can't teleport dead players to you!")); + return; + } + UUID uuid = player.getUniqueId(); + if (viceUser.cancelVehicleTeleport()) + player.sendMessage(Lang.VEHICLES.f("&7You cancelled " + (viceUser.getBooleanFromStorage(BooleanStorageType.SEND_AWAY) ? "sending away" : "calling") + " your personal vehicle!")); + if (this.cancelTaxi(player, viceUser)) + player.sendMessage(Utils.f(Lang.TAXI + "&eThe previous taxi was cancelled.")); + User targetUser = Core.getUserManager().getLoadedUser(target.getUniqueId()); + if (!targetUser.getPref(Pref.TP_REQUESTS)) { + player.sendMessage(Utils.f(Lang.TAXI + "&eThat player has disabled teleport requests!")); + return; + } + if (targetUser.isInTutorial()) { + player.sendMessage(Lang.TUTORIALS.f("&7That player is in a tutorial!")); + return; + } + TPEvent e = new TPEvent(player, target, TPType.TPAHERE_REQ).call(); + if (e.isCancelled()) { + viceUser.unsetTpaRequests(); + player.sendMessage(Lang.TAXI.f(e.getCancelMessage())); + return; + } + player.sendMessage( + Utils.f(Lang.TAXI + "&eYou requested " + targetUser.getColoredName(target) + "&e to teleport to you!")); + target.sendMessage(Utils.f(Lang.TAXI + user.getColoredName(player) + + "&e requested you to teleport to them. Use &a\'/tpaccept\'&e to accept.")); + viceUser.setTpaRequestSentUUID(target.getUniqueId()); + viceUser.setBooleanToStorage(BooleanStorageType.TPA_HERE, true); + targetViceUser.setTpaRequestUUID(uuid); + } + + public void tpDeny(Player player, User user, ViceUser viceUser) { + ViceUtils.giveGameItems(player); + if (!viceUser.hasTpaRequest()) { + player.sendMessage(Utils.f(Lang.TAXI + "&eNobody has requested to teleport to you!")); + return; + } + if (user.isInTutorial()) return; + Player target = Bukkit.getPlayer(viceUser.getTpaRequestUUID()); + if (target == null) { + player.sendMessage(Utils.f(Lang.TAXI + "&eNobody has requested to teleport to you!")); + return; + } + User targetUser = Core.getUserManager().getLoadedUser(target.getUniqueId()); + ViceUser targetViceUser = Vice.getUserManager().getLoadedUser(target.getUniqueId()); + if (!targetUser.isInTutorial()) + target.sendMessage(Lang.TAXI.f("&a" + user.getColoredName(player) + "&e denied your request!")); + player.sendMessage(Lang.TAXI.f("&e You denied &a" + targetUser.getColoredName(target) + "&e's request!")); + targetViceUser.unsetTpaRequests(); + viceUser.unsetTpaRequests(); + } + + public void tpAccept(Player target, User targetUser, ViceUser targetViceUser) { + ViceUtils.giveGameItems(target); + if (!targetViceUser.hasTpaRequest()) { + target.sendMessage(Utils.f(Lang.TAXI + "&eNobody has requested to teleport to you!")); + return; + } + if (target.getGameMode() == GameMode.SPECTATOR) { + target.sendMessage(Lang.VEHICLES.f("&7You can't teleport while you're dead!")); + return; + } + if (targetViceUser.isArrested()) { + target.sendMessage(Lang.JAIL.f("&7You can't teleport in jail!")); + return; + } + if (targetUser.isInTutorial()) return; + UUID uuid = targetViceUser.getTpaRequestUUID(); + Player player = Bukkit.getPlayer(uuid); + if (player == null) { + target.sendMessage(Utils.f(Lang.TAXI + "&eNobody has requested to teleport to you!")); + return; + } + ViceUser viceUser = Vice.getUserManager().getLoadedUser(uuid); + if (viceUser.isInCombat()) { + player.sendMessage(Utils.f(Lang.COMBATTAG + "&7Teleport cancelled due to combat tag!")); + return; + } + if (targetViceUser.isInCombat()) { + player.sendMessage(Utils.f(Lang.COMBATTAG + "&7Teleport cancelled due to combat tag!")); + return; + } + if (player.getGameMode() == GameMode.SPECTATOR) { + target.sendMessage(Lang.VEHICLES.f("&7You can't teleport to a dead player!")); + return; + } + if (viceUser.isArrested()) { + target.sendMessage(Lang.JAIL.f("&7You can't teleport in jail!")); + return; + } + User user = Core.getUserManager().getLoadedUser(uuid); + if (user.isInTutorial()) { + target.sendMessage(Lang.TUTORIALS.f("&7That player is in a tutorial!")); + return; + } + if (viceUser.getBooleanFromStorage(BooleanStorageType.TPA_HERE)) { + int delay = ViceUtils.getWarpDelay(targetUser.getUserRank()); + TPEvent e = new TPEvent(target, player, TPType.TPAHERE_ACCEPT).call(); + if (e.isCancelled()) { + targetViceUser.unsetTpaRequests(); + viceUser.unsetTpaRequests(); + target.sendMessage(Lang.TAXI.f(e.getCancelMessage())); + return; + } + target.sendMessage(Utils.f(Lang.TAXI + "&eYou accepted &a" + user.getColoredName(player) + + "&e's request to teleport to them!")); + player.sendMessage(Utils.f(Lang.TAXI + "&a" + targetUser.getColoredName(target) + "&e accepted your request to teleport to them! Their cab will arrive in &a" + delay + "&e second" + (delay == 1 ? "" : "s"))); + targetViceUser.unsetTpaRequests(); + viceUser.unsetTpaRequests(); + this.warp(target, targetUser, targetViceUser, new TaxiTarget(player), 0, delay); + return; + } + int delay = ViceUtils.getWarpDelay(user.getUserRank()); + TPEvent e = new TPEvent(player, target, TPType.TPA_ACCEPT).call(); + if (e.isCancelled()) { + targetViceUser.unsetTpaRequests(); + viceUser.unsetTpaRequests(); + player.sendMessage(Lang.TAXI.f(e.getCancelMessage())); + return; + } + target.sendMessage(Utils.f(Lang.TAXI + "&eYou accepted &a" + user.getColoredName(player) + + "&e's teleport request. Their cab will arrive in &a" + delay + "&e second" + (delay == 1 ? "" : "s") + + '!')); + player.sendMessage( + Utils.f(Lang.TAXI + "&a" + targetUser.getColoredName(target) + "&e accepted your teleport request!")); + targetViceUser.unsetTpaRequests(); + viceUser.unsetTpaRequests(); + this.warp(player, user, viceUser, new TaxiTarget(target), 0, delay); + } + + + public void backupAccept(Player player, ViceUser viceUser, Player target, ViceUser targetViceUser) { + User targetUser = Core.getUserManager().getLoadedUser(target.getUniqueId()); + ViceUtils.giveGameItems(target); + if (targetUser.isInTutorial()) return; + if (viceUser.isCop()) { + player.sendMessage(Lang.COP_MODE.f("&7You must be in &3&lCOP Mode&7 to request backup!")); + return; + } + if (player.getGameMode() == GameMode.SPECTATOR) { + player.sendMessage(Lang.VEHICLES.f("&7You can't teleport while you're dead!")); + return; + } + if (target.getGameMode() == GameMode.SPECTATOR || !targetViceUser.hasRequestedBackup()) { + player.sendMessage(Lang.COP_MODE.f("&7That player has not requested backup!")); + return; + } + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + if (user.isInTutorial()) + return; + + int delay = ViceUtils.getWarpDelay(user.getUserRank()); + TPEvent e = new TPEvent(player, target, TPType.BACKUP).call(); + if (e.isCancelled()) { + player.sendMessage(Lang.COP_MODE.f(e.getCancelMessage())); + return; + } + target.sendMessage(Lang.COP_MODE.f("&7" + user.getColoredName(player) + "&7 has accepted your backup request. They will arrive in &a" + delay + "&e second" + (delay == 1 ? "" : "s") + + '!')); + player.sendMessage( + Utils.f(Lang.COP_MODE.f("&7You are providing backup to " + targetUser.getColoredName(target) + "&7!"))); + this.warp(player, user, viceUser, new TaxiTarget(target), 0, delay); + } + + + public Warp getWarpFromPad(Location blockLocation) { + String name = this.warpPads.get(blockLocation); + if (name == null) + return null; + if ("random".equalsIgnoreCase(name)) + return this.warps.get(Utils.getRandom().nextInt(this.warps.size())); + return this.getWarp(name); + } + + public void loadWarps() { + YamlConfiguration c = Vice.getSettings().getWarpsConfig(); + this.tutorialSpawn = new Warp("spawn", Utils.teleportLocationFromString(c.getString("tutorialSpawn"))); + this.spawn = new Warp("tutorialSpawn", Utils.teleportLocationFromString(c.getString("spawn"))); + this.jail = new Warp("jail", Utils.teleportLocationFromString(c.getString("jail"))); + this.warps = new ArrayList<>(); + if (c.get("warps") != null) + this.warps.addAll(c.getConfigurationSection("warps").getKeys(false).stream().map(s -> new Warp(s, Utils.teleportLocationFromString(c.getString("warps." + s)))).collect(Collectors.toList())); + this.warpPads = new HashMap<>(); + if (c.get("warpPads") != null) + for (String loc : c.getConfigurationSection("warpPads").getKeys(false)) + this.warpPads.put(Utils.blockLocationFromString(loc), c.getString("warpPads." + loc)); + + } + + public void saveWarps() { + YamlConfiguration c = Vice.getSettings().getWarpsConfig(); + c.set("spawn", Utils.teleportLocationToString(this.spawn.getLocation())); + c.set("tutorialSpawn", Utils.teleportLocationToString(this.tutorialSpawn.getLocation())); + c.set("jail", Utils.teleportLocationToString(this.jail.getLocation())); + c.set("warps", null); + for (Warp warp : this.warps) + c.set("warps." + warp.getName(), Utils.teleportLocationToString(warp.getLocation())); + c.set("warpPads", null); + for (Map.Entry<Location, String> locationStringEntry : this.warpPads.entrySet()) + c.set(Utils.blockLocationToString(locationStringEntry.getKey()), this.warpPads.get(locationStringEntry.getKey())); + Utils.saveConfig(c, "warps"); + } + +} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/src/main/resources/barrels.yml b/vice-master@f8937e1dbf1/src/main/resources/barrels.yml new file mode 100644 index 0000000..ef3597d --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/resources/barrels.yml @@ -0,0 +1 @@ +barrels: diff --git a/vice-master@f8937e1dbf1/src/main/resources/bounties.yml b/vice-master@f8937e1dbf1/src/main/resources/bounties.yml new file mode 100644 index 0000000..6c37909 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/resources/bounties.yml @@ -0,0 +1,11 @@ +0e4a6028-3d9a-4a2e-9797-eb1ddcb0aca9: + name: Presidentx + placers: + b5d6834b-465b-4593-8b8d-c2cba400015c: + name: Samuri629 + amount: 10000 + anonymous: true + 5c8bb461-a075-4526-b0e1-e3a701c2dc98: + name: 2Legiit4U + amount: 5000 + anonymous: false \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/src/main/resources/drugblocks.yml b/vice-master@f8937e1dbf1/src/main/resources/drugblocks.yml new file mode 100644 index 0000000..6a40527 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/resources/drugblocks.yml @@ -0,0 +1 @@ +blocks: diff --git a/vice-master@f8937e1dbf1/src/main/resources/drugdealer.yml b/vice-master@f8937e1dbf1/src/main/resources/drugdealer.yml new file mode 100644 index 0000000..1892498 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/resources/drugdealer.yml @@ -0,0 +1,51 @@ +drugs: + alcohol: + min: 10 + max: 20 + chance: 50 + minprice: 100 + maxprice: 100 + cocaine: + min: 5 + max: 19 + chance: 50 + minprice: 400 + maxprice: 750 + lsd: + min: 13 + max: 54 + chance: 50 + minprice: 250 + maxprice: 500 + mdma: + min: 1 + max: 89 + chance: 50 + minprice: 75 + maxprice: 150 + weed: + min: 43 + max: 910 + chance: 50 + minprice: 75 + maxprice: 150 + heroinRecipe: + min: 10 + max: 23 + chance: 12 + minprice: 250 + maxprice: 500 + meth: + min: 10 + max: 23 + chance: 43 + minprice: 250 + maxprice: 500 + "anabolic steroids": + min: 3 + max: 129 + chance: 100 + minprice: 500 + maxprice: 1000 + +locs: diff --git a/vice-master@f8937e1dbf1/src/main/resources/gtm.yml b/vice-master@f8937e1dbf1/src/main/resources/gtm.yml new file mode 100644 index 0000000..54ca728 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/resources/gtm.yml @@ -0,0 +1 @@ +map: test \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/src/main/resources/homes.yml b/vice-master@f8937e1dbf1/src/main/resources/homes.yml new file mode 100644 index 0000000..e69de29 diff --git a/vice-master@f8937e1dbf1/src/main/resources/items.yml b/vice-master@f8937e1dbf1/src/main/resources/items.yml new file mode 100644 index 0000000..e69de29 diff --git a/vice-master@f8937e1dbf1/src/main/resources/kits.yml b/vice-master@f8937e1dbf1/src/main/resources/kits.yml new file mode 100644 index 0000000..116d3e7 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/resources/kits.yml @@ -0,0 +1,13 @@ +hobo: + delay: 300 + items: + - chicken + - beef,pork +kak: + cost: 50 + delay: 300 + items: + - chicken + - beef:40,pork:50 +vip: + delay: 86400 \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/src/main/resources/loot.yml b/vice-master@f8937e1dbf1/src/main/resources/loot.yml new file mode 100644 index 0000000..3f468b8 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/resources/loot.yml @@ -0,0 +1,6 @@ +loot: + chicken: + chance: 5 + min: 2 + max: 5 +lootcrates: {} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/src/main/resources/lootcrates.yml b/vice-master@f8937e1dbf1/src/main/resources/lootcrates.yml new file mode 100644 index 0000000..5a61cd1 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/resources/lootcrates.yml @@ -0,0 +1,2 @@ +lootcrates: +cooldown: 30 \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/src/main/resources/playercache.yml b/vice-master@f8937e1dbf1/src/main/resources/playercache.yml new file mode 100644 index 0000000..e69de29 diff --git a/vice-master@f8937e1dbf1/src/main/resources/plugin.yml b/vice-master@f8937e1dbf1/src/main/resources/plugin.yml new file mode 100644 index 0000000..8ebad53 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/resources/plugin.yml @@ -0,0 +1,75 @@ +name: Vice +version: 1.0 +description: Vice +author: Presidentx +main: net.grandtheftmc.vice.Vice +depend: [Core,ProtocolLib,JLib,WastedGuns,WastedVehicles,EffectLib,Citizens,WorldGuard] +commands: + ammo: + lootcrates: + aliases: ["lc", "lootc", "lcrates", "lootcrate", "lcrate"] + warp: + spawn: + viceadmin: + gameitem: + aliases: [gi, gamei, gitem] + kit: + aliases: [kits] + resetstats: + shop: + vicerank: + rankup: + drugcheck: + aliases: [dc] + drugdealer: + money: + aliases: [bal,balance,eco,economy,cash] + pay: + tpa: + tpahere: + tpaccept: + aliases: [tpyes] + tpdeny: + aliases: [tpdeny] + bonds: + kill: + suicide: + picker: + aliases: [modepicker, armorstandpicker] + feed: + aliases: [eat,food,saturate] + vehicle: + aliases: [wv, vehicles, wastedvehicles, wastedvehicle, wvehicle, wvehicles, wastedv] + backpack: + aliases: [bp, backp, bpack] + bribe: + aliases: [bail] + reset: + tokenshop: + antiaura: + clear: + aliases: [clearinventory, cleari, ci, clearinv] + fix: + aliases: [repair] + teleport: + aliases: [tp, tpo] + spectator: + aliases: [gm3staff, spectatormode] + backup: + lottery: + speed: + chunkunload: + topkillers: + stats: + aliases: [stat] + resourcepack: + aliases: [respack, rp, tex, textures, rpack, resourcep, resp, rep, texturepack, texpack, pack, resource] + drugs: + aliases: [drug] + viceranks: + aliases: [ranks] + stack: + cop: + rtp: + aliases: [randomtp, wild, rteleport, wilderness] + area: \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/src/main/resources/rules.yml b/vice-master@f8937e1dbf1/src/main/resources/rules.yml new file mode 100644 index 0000000..7da18e6 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/resources/rules.yml @@ -0,0 +1,5 @@ +rules: + - "" + - "" + - "" + - "" \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/src/main/resources/salemenus.yml b/vice-master@f8937e1dbf1/src/main/resources/salemenus.yml new file mode 100644 index 0000000..6da8ca4 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/resources/salemenus.yml @@ -0,0 +1,60 @@ +#sale-menu-name: +# menu-title: +# subcategories: +# subcategoryA: +# category-name: +# display-items: +# subcategories: +# subcategoryAa: +# category-name: +# display-items: +# sale-items: +# -game-items-name +# -game-items-name +# -game-items-name +# subcategoryAb: +# category-name: +# display-items: +# subcategories: +# subcategoryAba: +# category-name: +# display-items: +# sale-items: +# -game-items-name +# -game-items-name +# -game-items-name +# +#All subcategories MUST terminate with a sale-items array. + +weapons: + menu-title: "&a&lWeapons" + subcategories: + smgs: + display-item: 267 + sale-items: + - smg + - microsmg + - assaultsmg + - combatpdw + rifles: + display-item: 272 + sale-items: + - assaultrifle + - carbinerifle + pistols: + display-item: 268 + sale-items: + - pistol + - stungun + - combatpistol + - heavypistol + - marksmanpistol + shotguns: + display-item: 284 + sale-items: + - sawedoffshotgun + - pumpshotgun + - assaultshotgun + - heavyshotgun + + \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/src/main/resources/upgradedcontainers.yml b/vice-master@f8937e1dbf1/src/main/resources/upgradedcontainers.yml new file mode 100644 index 0000000..e69de29 diff --git a/vice-master@f8937e1dbf1/src/main/resources/warps.yml b/vice-master@f8937e1dbf1/src/main/resources/warps.yml new file mode 100644 index 0000000..5b73fb1 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/main/resources/warps.yml @@ -0,0 +1,3 @@ +firstSpawn: spawn,0,0,0,0,0 +spawn: spawn,0,50,0,0,0 +warps: {} \ No newline at end of file diff --git a/vice-master@f8937e1dbf1/src/main/resources/zones.yml b/vice-master@f8937e1dbf1/src/main/resources/zones.yml new file mode 100644 index 0000000..e69de29 diff --git a/vice-master@f8937e1dbf1/src/test/prices/TestPrices.java b/vice-master@f8937e1dbf1/src/test/prices/TestPrices.java new file mode 100644 index 0000000..0f41582 --- /dev/null +++ b/vice-master@f8937e1dbf1/src/test/prices/TestPrices.java @@ -0,0 +1,164 @@ +package prices; + +import net.grandtheftmc.vice.pickers.drugdealer.data.PricingData; + +import java.text.DecimalFormat; +import java.util.HashMap; +import java.util.Map; + +/** + * Created by Adam on 18/06/2017. + */ +public class TestPrices { + + public static void main(String[] args) { + calculatePrices(); + } + + private static Map<String, Double> currentPrices; + + static { + //Initialise current prices + currentPrices = new HashMap<>(); + currentPrices.put("cocain", 200.0); + currentPrices.put("weed", 850.0); + currentPrices.put("lsd", 2500.50); + currentPrices.put("mdma", 1367.50); + currentPrices.put("heroin", 1100.0); + } + + protected static Map<String, Double> calculatePrices() { + + Map<String, PricingData> data = new HashMap<>(); + double totalSales = 0; + + //Set current transaction data + data.put("cocain", new PricingData(150, 250, 40000)); + totalSales += 40000; + data.put("weed", new PricingData(700, 900, 45278)); + totalSales += 45278; + data.put("lsd", new PricingData(2000, 3000, 65000)); + totalSales += 65000; + data.put("mdma", new PricingData(1200, 1500, 54214)); + totalSales += 54214; + data.put("heroin", new PricingData(850, 1350, 59004)); + totalSales += 59004; + + double totalRelativeMarketShare = 0; + + for (PricingData pd : data.values()) { + //Compute the market share of each drug + double share = pd.computeMarketShare(totalSales); + + double amntAbove = 0, amntBelow = 0; + double pcentAbove = 0, pcentBelow = 0; + //We want to compute the average percentage of market share above and below this market share + + for (PricingData pd2 : data.values()) { + if (!pd2.equals(pd)) { + //we are comparing a different object + + //Sum the market share percentages above and below this object + if (pd2.getMarketShare() > share) { + amntAbove++; + pcentAbove += pd2.getMarketShare(); + } else if (pd2.getMarketShare() < share) { + amntBelow++; + pcentBelow += pd2.getMarketShare(); + } + } + } + + //compute the averages + double avgPcentAbove = 0, avgPcentBelow = 0; + + if (amntAbove != 0) { + avgPcentAbove = pcentAbove / amntAbove; + } + + if (amntBelow != 0) { + avgPcentBelow = pcentBelow / amntBelow; + } + + //Compute the average change in market share compared to all other drugs + double diffShare = avgPcentBelow - avgPcentAbove; + pd.setRelativeMarketShare(diffShare); + totalRelativeMarketShare += diffShare; + } + + double correctionFactor = 0; + + if (totalRelativeMarketShare != 0) { + //we need to normalise the relative differences to all average 0. + correctionFactor = totalRelativeMarketShare / ((double) data.size()); + + if (totalRelativeMarketShare < 0 && correctionFactor < 0) { + //Make positive + correctionFactor *= -1; + } else if (totalRelativeMarketShare > 0 && correctionFactor > 0) { + correctionFactor *= -1; + } + + } + + //Now scale all results so that no items exceeds +/- 10% of its price + double maxVariant = Double.MIN_VALUE; + + for (PricingData pd : data.values()) { + //if this is negative we add it, if positive adding works also + pd.setRelativeMarketShare(pd.getRelativeMarketShare() + correctionFactor); + + + double rms = Math.abs(pd.getRelativeMarketShare()); + if (rms > maxVariant) { + //set the max variant to equal the largest relative percentage change in market share + maxVariant = rms; + } + } + + + //If there is some +/- variant of more than 10% we must scale all values down + while (maxVariant > 0.1) { + + for (PricingData pd : data.values()) { + //Half everything constantly + pd.setRelativeMarketShare(pd.getRelativeMarketShare() / 2); + } + + maxVariant = Double.MIN_VALUE; + for (PricingData pd : data.values()) { + if (pd.getRelativeMarketShare() > maxVariant) { + maxVariant = pd.getRelativeMarketShare(); + } + } + } + + Map<String, Double> priceData = new HashMap<>(); + + DecimalFormat df = new DecimalFormat("##.##"); + + //Now calculate and set the price data + for (Map.Entry<String, PricingData> e : data.entrySet()) { + PricingData pd = e.getValue(); + double curPrice = currentPrices.get(e.getKey()); + //Increasing or decreasing will still work + double newPrice = curPrice + (curPrice * pd.getRelativeMarketShare()); + + if (newPrice > pd.getMaxCost()) { + newPrice = pd.getMaxCost(); + } else if (newPrice < pd.getMinCost()) { + newPrice = pd.getMinCost(); + } + + priceData.put(e.getKey(), newPrice); + + System.out.println("Drug(" + e.getKey() + "). Market Share= " + df.format(pd.getMarketShare()) + + ". Relative Share= " + df.format(pd.getRelativeMarketShare()) + ". Old->New Price " + + df.format(curPrice) +"-->" + df.format(newPrice)); + } + + //We are done. + return priceData; + } + +} diff --git a/wastedcops-master@4d070d71e37/.gitignore b/wastedcops-master@4d070d71e37/.gitignore new file mode 100644 index 0000000..73ad67c --- /dev/null +++ b/wastedcops-master@4d070d71e37/.gitignore @@ -0,0 +1,6 @@ +# Folders +/.idea/ +/out/ +/target/ + +*.iml \ No newline at end of file diff --git a/wastedcops-master@4d070d71e37/README.MD b/wastedcops-master@4d070d71e37/README.MD new file mode 100644 index 0000000..e7e5a08 --- /dev/null +++ b/wastedcops-master@4d070d71e37/README.MD @@ -0,0 +1,4 @@ +# WastedCops +Link: https://circleci.com/gh/GrandTheftMinecart/WastedCops + +Latest Artifact: https://github.com/GrandTheftMinecart/WastedCops/releases/latest/ \ No newline at end of file diff --git a/wastedcops-master@4d070d71e37/lib/Core.jar b/wastedcops-master@4d070d71e37/lib/Core.jar new file mode 100644 index 0000000000000000000000000000000000000000..3bce0e0107ba685e1f175929cb7164f1e21c3a34 GIT binary patch literal 232346 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]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 IK{JBzf0di34gdfE literal 0 HcmV?d00001 diff --git a/wastedcops-master@4d070d71e37/lib/GTM.jar b/wastedcops-master@4d070d71e37/lib/GTM.jar new file mode 100644 index 0000000000000000000000000000000000000000..6ce16e92809b5ca776fa09b2f90a456b7d1bbe1d GIT binary patch literal 7107134 zcmb5VW2`7qw=KAB+qQkqwr$(CZQHhO+qP}ncAtCub*F#y_quN-RmrL~=g3H<=E|yB zW5`JYgP;IFKtKR=N3u%*{67vz01yCaVI_WAaTyW%p9uf}U;sHuaESkk0Qz5Ha{n<I z<zK}Aoh;2SBQ7GWs6;0%@+dtuDJ4luHxDaGOEoh!+o-^>#JqRxKqE0TMk7fp00Dkf zq>_Y2-ACfqo+ZKTDB+Y%RgIGH=qT}T9I1dTsi4?L6ayMQj#&=X6K-7Y4mIL2;*o;z zOxdABxlTY$^8|AM8x7;$?$-X_Y!lj`qOAUL3HW#ZXSR_4W?l6i>>TObt*s;{X{hKR z>BMOMk)r^U=Ky0EQ;wptf<mU3rJ<r|Q7Eec{cq^aD1ic!e~H}xTWFAfvo^*~^#7BG zhxos8Oda%XjGWAjO`NO^|3?6*|8D@MPS*b;5aRy?BB~^<>|}1`NM~rJ@94Pg?XHJC z{QR4l-mIGPC#E_J&YvRO-fN^Cp8TjTdoVl}ffEw0)POoBj0RIY2GZ5MEuW7vsgn=d z-yjC$VlAk#>B+|YT-^3dI3JzXnq9&t_fKa6sk+Qm?d~nFZo<{fRFC`PiT2~pRN41O zs4Tan5OfrM=ef4}Ny>2pk*dnXx{W&NY1^?D`z-D0B&bch9GycXsDpis7E!80a|Zt8 zmP0!irD{zab^9ijVvWl<R%+FByt6}e=Ey`dUHc5_YNv7c)?Ny>G4LO@4kP4Nmd>GS zy7ur$^3G$E^?~9QoOWTG;{~=<u3^$msrGGY;XJs*+==2vtp_Kc-2PbRcl#7<Z!fy` zz+GCp^_v7-y7SX|myCu*QrC8)KGIp2@ohRxr*XOxwj|=g22Rx+Vq&d`4x=c_tNjVQ z)GOz4N5^9wcRb#i(^1fpuDD(F_M>4N4QhJ(@!0mGV!C(x)UDHmRQub>?FT6LVo9B3 zV2j$56iclKjgw_(x_8JL-P?peZAZ~`@8YRl;rTqnLt9fgy`-reN2T0C4>elutzS`^ zJH)rg3*IGPRg}D^WW6+xadGf&ViU8EsiEoA-t7;F?`4$uhp&e=P!qs-3J=ij4Z3&+ zS->SYPKrV)_Q&N~?rJ>Kv8Gb*R&>u3r*HRMu0H;tAH!PjM2Y%iol@@!nRE%pC0`Ml zbn&{!qpNTC&OTm)NxM#q#t)h>kJhbUF<$FQyT-I1c)U8}@w=(KcH{UR$FWDT+fK<} z;gq_@b-5kqVDHR|KU>m&#&z!wQ@`F&d3*K~dS?)!k1cK9JHDbbPbPOC4qd<AxOso# zh<D?Bjp}>P6Kv~;evcA-O~`(RNq;XAd>s!zS*!SL9}jPB-r?Wj8qag9)PD~~d*25; z>E7{rcU>ppk9^fw@H>v;ao#(KV5);8#R*g=ieXYG4(yu}e#VO%+8e^o1&2Y{Cyo`^ z>5fkfY9!Uuy0H#b+%0Ip<lZCBhNUBhj$bJh=y&tRx>hUAtfr}i$*($xilMe93P<h@ zyELWckR6vvSl6X(%g5I%b-EJXcx|YTN+@ldvoa=%58v&9R7>v%Gb>951LoL(wG^1! zm4;%G-{q&Q8{3o)6pFR{o9R`LZItt=-WfNmE0%D4rdXG`z_M;tpqB(vHI7swmyuF6 zEGjJM=p4(Bzj(%rRoa#${&ZKXq+2v=E|+Pz5Sua{bZ9k;RI@H~q-xxjz$<r`v$X~L zp%ymGE5Xt&pD9S&=$Co;usj+f^UAO-o3xH4^V*lADK=+VL~2GUYi<+CT0532s?E^S zErY#RUeh^KwdRI|et|uHI>8%{cWzzK90yiZ;!=!Lw=daLz@<d&R=ZTlC|)~6VzLPW z+b~LJXBWCu67Y7Y84$KosOqz|qDw7L)1KZH5n<p20A`eF4lBiKUdwmWIoC*Dvo5=r zaOlP<<3qg@H}mVVT*N|6==7R6Z)Z#gaKV~>zPwcg^vIbiOVS`gIMWTTHcwAif3bSH z6QG1uBNRzUv_dgi4C4Cm8)5?y`YOt<!ub|0w-TS3((JqF+Evmc?R6}g4Y`0aEH#D1 z@v1Ci-Uo9SbbfIfYF{g7*Vj}yS4V3a`0JqzwsU?n)`)x~@>fb=4aCn>;Bt4mf*UCR z$k8BdYBp1zZC=LGP)|oyfa4Y_!-0|YY6e1QFfmc_lZiBkYTeI=Siy^a&7{rvMOie` zH)+aE`vynY18CdGx`xu9)Ixp|;RdMSgC3i`^#?G|Tg^6`Inh}CiUpQ98Z{XmzkCQV z`ichn#`02#EeV=>up~2!3_e%kvIR0pi34BG&Qnc`_{Exszi+ty`RHi&AR_8}L-bX3 zlg*kR#g}%;bHOR<vJTVBi{$GjPg+VfX&^-On<t%y&pVWv2KigUTsPV~vwB<```!tV zyxdKV6Y%bqSPmKV;+JP<WQ!_zo}O2^HBU=1y1I<IgK}fO3(5?-HO75dY+P~>*RO;g zFvRDC9J`96-dZj^H<e%*t<iz20F@Up&(X<W3vOlpBwE-b^E<-FaCTd^PF>b!^rpnz zFb<)AlIEn^l=!`{R>r$jPlyA-jsaTzRm&28Ox8y-Z>VW*t(K^DFt-2<ue6L1Ho_+^ zBbmp16!|Q~aF(DCFezHNNbOe=CmIgY0Ys?FpwZ~6*%0E1)KPHX^5(7u&j+l{txXxn z&Yf@e7b&nsz&fF$>Q&e^A90(kq+_dl+rD*^0mn;eh+MoBFUg7HQJpF3M80ugkCG2p zGU0>yzS!J34BsJ|&$?k{?G~~eLAb*mvzF_eJDMPfn1VNu%iYO0)I?vA%<C6cb)}T( z%T_L%Rci4^)Lgqh%FxL<zMKy2X*}VVvP1Is6eA8ka(xfF&vDHJ7C1Y*|3~BrC~6QD zdiAZ~M;ID}mWKT~jfW<Yd?MoEj}Wn%r}s2>{SDrkvN02tv=o7sa$)5(=gdp%s1+Z< z{bz^Y5ES_``^!AAeQr17?}gY<>!0etJMt#&#Kw~?7hhKz1UN=vo*M$Q4@PpM2+lY} zLQH{!Kq>IVHB3lXSbLH{W*#ybH3Y{3o+3<ndm0h5wxK2m;CvFcEQT!D@;$KFpdbu$ zj0AdqcO1lk4G~`Obh)sFgn3Ze;xIxjZW-9gIWxhUuACd2pi#ZG4Za}Uh`v0-4cFj7 z`QMPc7!ll8o%>!q6kOO5LP2_SkyNs?vVJX`9i`N?3&WC*rKC;vjk{3|U<ft=D~CRi zSGb&Uog~L=&<4bPfF>K7%;M<68GIvd7NU%DG@h#GPtGirkV^jnr^DS7JKH6;vkg1d zKMv8;Ju!Un8D#n9)9v+Pv*x<nJ3Gkt&9}||>`4*))Y<Xe;?kL4@ilxf7!Gr7JX?j0 zsgP3qL$|gNqXs`?J1cyjHoSvs90HL}oJsc0<F|&GjwJhVLaiSG{xP(f*nh1i^^o^u zU6fMQBZ>N_@8nMn#AP3Z5p60qjt>3TMTAvLZlinDKIw3aVwU&${$g#TK)OCPjk@tq z=Ly65b7MG1*U(7*%v5%{fEPQb$uU6E(9TQ-K`a7d^8<dSNr@3IYWwJd(--bD2ywcn zCEEs@hZ1jKf)G&@qBj-eT3P@$(E#}5oW>R|nq<VkNd2s!N;yqlz={Us3HYr8AtRp> zwryQr9_#%@IP7!L3gsQNBPAA1&v-Mr7Wd|lDq+AXfwU2F?%)tQX2Z)Qg#?Ri=GenQ zT{y-pors(tdSUo7CrP<0uHJ{0FLCX!FT9k>!ot6ZV7m@${@_^m7~sx_Yuj2{+J5P; zvh|bBThx2Usj7`(0%b!f!Iac?(r^_X=*Ho0$O69K+4JxmYIQWjYUbZ{kCWn8knPUz z8~iAcj;6K4^ThtH*WQPl=?={!`pM>p(K7Z0cH?JChTE{uPom_gMlS5({wX0j`}=c$ zu0%sGSXNje{cNvT-4gBF*o%u}b37!HTnE_Ru{H=Ym`$9fzm*>QRvgo98^hZpM!ptS zT;0R&em%1}-{@G%dvLpk1}I2ur4i1`a14!2NzM(EczrprM2NF06C^0j!OYYK;T3*k z39KR0W%MDvtXDBzVgV|7%^enFr^=Oz!cu7zgo~WQsDcX~SG>cX<VT06eUTUvh{`)_ z-}Y1HGI%Z}^8k*?_);L-6yf>s<-r<qUI;J^3ma`t<rYcFue%xpr#sJ(f<ikdW61Kj zKis#Ru6G<>Xk@fMH%G~6J^y8B#h}-QDd^2?8Ylb+qD&rockg7^giSY!r%%UR=A-n+ zXYYf=W3(ddsCFu{x!&BxeP%`9p*g@E@A9irePMW@8QADvkWz+Lcj=wdA*F3o0Zro^ z+_9jfs(xYN99>>>{BkMv{BP42t2V0erwp4`o*qm3SzL0vh{w1*bD1{fqp4$Asa5^L z#W}S6rfEt0!bZ|tWE;2!$MZMr52t}#;P`N4WZ)&n(&j|n&IsSwZj9Wp(yPV=&$D`5 zB@a0K<={r~Am)%xN{23#BDY@o_XWQscM%W#a}7U@ad~Jl05O9;J$ONiTIq+>b67E+ za;*A=y)%G*W-(j@Iqh?h2a;KRh<Zy~*NjYm(GzH42{}U0pZX!nf@uX^xo@@FZc;6d zp;$mkSf+>4B|{8Mz?@Y$n_;3IpnK6eJNL^!{3P1f$!QN(cOwd+?(n3%-Xv|`t2bU0 z@3l7WEQ*tb=^A*`OAlrxDWbH`O&%jkvl<ud&t2s@bxY{WktrVu9(YELa!+(A#XVIz z4NIzR%Tzi_I8opwchbYx!~M(J+WNIS)XdAlDIXOd8O1#{J^JOg6}E)Z>>meK<+hc# z5KPTbRu=V3lThg@Hj{K>a1U$stI#1fFSjx4!mZudCaMnIo!1*XcJO4U*6<&3c6Q5= z#ghuVinVDMpD7>yZW0LU2K8zN<@iuLkQ*oPEuo!Xs5+A0V&52e^?whdgS&|-4eX6N zihTyS$x%Ne1BdsWt1G+x<G!;~AJ50I-y|h1A5U0!4#ey!BHTYr$*}<>an}{=;q{)Y zExW>hF}(inO&tu^S=iRsQmp`MK`cg~Ge_G&?@)k0{KTB6s7*L}D1R?0@FLHZ=T_?S zm0Aq!V+h#jwszNuj+#{Jo>bl*JXd<DTb1ipu1Y=s<5B2iS+T2r@p=KD;vx8r2qdjt zTn7aA7}@tgR_I2p`we-_ds^A6c2Rp_o8qDQy^VwpZ6t!Oeu001JA^!brj{4Ar0}bB zTPObeFWA!x?s{7FR^x*Exu=|`Zpn8kl&>IWD4L<XQP9sg4sfz}jj5<(nJG!1U}n6o z+YnPdL?3hgivc#(_z1&haSS)pTJ0U_!tqPK6%i!aH%J>wY81l|(|ts35<r)xkdG!( zF&PV1BV-iA6!S0|vV?J-i3~GQaSv%f#ux=lk>>EPVTC!4Ehag}qMoEBQM}#IW+yb= zHa7hBK697HaFz|0&SaX+R9#d$*T+)fHN2WgygiYkHcgq;QzycfVTy55898lX5+*Nq zdQrX?5x)|v7!~t`bm0IKRr{({;RMr3pE{OfJBKW{3DzU6p?^I>%#vR(4UNtg+RZ)D z+ucV1Mx$ZvADo8)7C&>wPt`?eaLq0ZwD*d75Dt^UTLH04?ox7u#k`F|hApQ_H47!p z5vF--tV!BKlKN?+(nI~KJ|MlSqfsj0d|InsQk?Ls>bsk>@Oshvkhqw}{^t+BrZrPc zR*`D+CG`<3!)oIy<`qlq=bO9RpkmL$?kuJIuEU$%%gZNF0fIaoE(=U-w>amWjGS(r z+*C)Ot~FGn7vz@mTL8E+7<B8Wo$MZp0nNQFGlE^7nH&$%zbw=y%zdjnH?bn^z!-() z0EJIXXV>Q~nU8+hNSlBHRx<5#eIS6Ah4lzzyd-{dZK>N?dAN{TU*+5A4@4X=?#@TE zGikVtv)eqG_bsD`dFwmPfNqK~OUKvYOdx-;?*|q=_j5N~9VJ73W%IUU=QG`&9!1y_ zym7+IZyttEZ?^mWeYCWJ5a~<z@xud53=_?>tS~d9(I(AUN1!U$3yX|YX;yHx-TP<M zT+N-8mqAIpySqCaHm(+uOFyV)GZovL9-bZ&7ER!lB_<_hsx{m{t{N7Sg-hy(nOd;q z+7+YN7T0VrONlI)WE!IuqnT+Ar4DH(?=U%~3b&a!qHt68|F~#~kf*v}0<J+G;2c^_ zuF--z!S}}?9x0&n3W%gVBl6ti5J$NIXW%gwM6sJ-aetY|8b2`wIJN`jy5S8*PsZ`p zndjPKp{tDqj|f9dAVof3Z6pOPv+TLkGxCgt8r^@PRN87Bm|>=3;e(IO3D{m8^0-U0 zR*OSY=9==kq}XF}CVo9_VY`<aYuRY&W2$1QrjIPA*hkybDj>q5KjvarT0lBEgMT}V zZLWk6YxBrFVqsHra!|eA97EEIt1n<oG1V~h`16smKLTgp<Ge`8v2eQB{JVKNd<^EZ zRb~_YdA5{<(z39owmdK2>{{Ep&{^40IT?xIY;cmL6i4nZ)fsR8MZ#+%zyO1DwH?<s z(j|Na%L{6-W=4BxVi<0`MP#7X#gk26PvTd#8MR4!2<KAZisjmm9!-?m5Y-tyn>NCo zVoz_YD#a;+Wrq2RncEySiwU1L;xp+s=QhT~GaDP4PHP#}<K`9T^`(ayTSiTLC=X2c zV}Iypj?)xHzBWm`<Fo!2kf-XL_PjxxTKDOBo#Oo)Y9W}oY3kc{^eYF8xF}Db9aSWI zf13p+i$|%7&nO?38aGff<Yw=<;C$vX1WrM7ILg5^mXr=BSsV+O^tUsOYrzJGCwd6V zQ!o_V{3+Ngn@i<bj8lS=g?(@Gia3}yzmJ{!=OgCH@s(Ed;u1iC!@}$3Tv%{zb^o@m zw5N;&cbB3TLVA4abAuuGC)G5=D8nkG<gaB?p2z3w+7evvX~HE$KhFXcCaC>P{)#-R z74i}Q(9S}`$yADlQ2^_7<)2mD%M(~vha1lIZ&|L7_N<W8Zaiv)YWQZ3@%)`=VMG1| z%yoV)B7UAveHf2d(tZv!aU>@eKzUY}G+`zQxzDHa@m<a*(D8eUkONE3c_RT<@|g9= z*1d?>?)9Nm_PQBctwooUm1S7X6~42=wu7N=K2^t%!$=s~!l6-=&bNSAZzfl*6Pp;> z>Fx4EEN~YAaqSaFd|lB|72P^;MJ{WnCX>H0n9I@hin&r3j(dh3w4+8b`*zmIMqMu_ zUvCLficavj*?5juZ;Z4Uik<B}^*!d!f!D5zH^BXR7w=wqotv}qX2)eUs_dNpS-Pej zMJZqHFJ`&g^>$u^vkRQv{dPqzsq_P@Nl((l&0SgdrA4H5B+F4DDdL`pxE)a`SO<TA zvagA!Hcm#QD>XG1X6Oz9&Qw{jzV<S_C*h&B#YKdw4%IhRT33i9U0R8wW7$1_p40c4 z>wnT*DH|+SYt79;={E=SF&wVX#*VC7S*J?$$s}*m)~3yHddiA^(oCbg2vJ1LT-8`E zE}6{H=Ni6GpWXuIn+lyy2@=TT6aV^%GoeHe*=VE979?!&sYA3YaN`GrXSWcVc|W?Y zq5b(RL$_jHE7)3xn;jyz3a1W6mSoZzGO9T$4nmjzWb@n6<D?7r>1>{8?>S)mh!(V| z@59*Roc$^5c}RijX(TU#pK)iuf*=Ssw#;P#;(+O3MpzPGTSzD*#!M$c;JQLy!&nM^ z=c-j(+hOJ=T<k)Mt5Uyq5uVFRDCAFpTLm;3&&xY6M~7f$A})loHU^Q6{tz;!{v36Y zaRr^8bP`L6kJzxI*jO~)Js5dt9vN+g?ZU*&1y~lmez~>Y@4gL4*jMGy{@^J5(MpS& z&`;$7+RkthXXCk)3jHuPUwz5?j2o}Jhj#X|tm@>1X#GRm2v_3_HL1|j_1ug@PCstG zih6yEZgM09Bx){5hB6r<&3P|8itH~0#ljdo;$|__uy!2D){l4xs{bvaZH}BZ9x`lm zWEL2RLS7;FF|d&UGlfgq$xdMf2MSE+dmwOdl&~=6Aa!Wam96}Ghky;VUy<bLn*rP1 zRb9Z1t2?l;y5COfBTih&jS=%;Pod>3DeLMAax=M`pBgRo=MPJO+TVKr88u1SYQ(0r z?_(WZ^eDEYz!e8bnrBgg9=+w5K6ho#CszI+bJ3y-lQI~mA308mFU#1nmkd@+ZmSxd zw?anUvhCUWA&7lA80YkE3YH*F=R0oJ;Bx*ZApPWT)@4Dm9`^aUi;$2dOI1pM$%Atn zu&xg>xl$cbk&A41YmCikgQ=bw<okOmN6s(Gt8u4sq_0_n9&6kL?Ays;1?B#uM&N2l z8@gfEyoxem+v3LIz+&NX8rlQDR<X{$g8U=7oCu0~GnR8gFj!Fzx5G?ZiPx(zUC&H4 zh1~a7n7L}&d(MQq&OF{F%+2CV?1Aq46U2oJF#JL`HkMU_j7$!JyBWU81%XW%l?=Qr z4+Y|&3<h12Nw-e;C>PO0pvS^m>hV=t?tg8P0|~=Q$HE$>N0zr&7)D*wriyVom}~8| z`i4aq?kek@A>N@1TWhUtkkZ8)==B2`gufS(wVT(uxOd$%v|(WZaA4TmqJ52oJ)qU^ zD+ng#>7HwqY{Y2Tstttd2w&;%_=~OL*zZ-u8(22WJ01U)Ool?4blS{}OpS~`m*4)+ z{xjM?VwZHf5L$rDEp-B{c$U|zL9sc~bPV59BPSe3OYLl@*%~>>_T)p#E>E3`;&qcu zq|cay>~-*0_qIpTF*(2AlS7#FZ72MR?<NAY_<W4w;x=r@4wW(A9Uaf<gYpm4QLP5k zbe}*~dGF)g?B-Vd8-C8ix%t0y)$95!tRwfBoWNNCxeQsZu#~Qb?09P?yHvQj8Q~+h zo+lT{6h6sL3RH3nu<A3GmmxPjGUA|8-6WihkLYb{2)5C8*UE8Vu9K(kUX?yYpZ4kE z{6u)7X3eEqR5_|lNb;ijY`odjdh}$T5#JV#x|`PomC?3`6$uN?S6ZtkJ8S#e{F{eH z!kvLtM~zIs4+MgzQ@j|H1T95@tsQo;Kf{alK2|1!^<$h)<Kf7OGk~jLgI;*92aE{j z3_H8)<DlTvNeTN#E6dB(+Lfv?`>!GM++B_3<QPr9HOfp69;rT|?m^iOJ6@F=R<;+w zNq-Klu5D_{m%+0}bJV`DY-4_CbG>Qo9L5>^_Qhmy!4jif*1B~|B4+iiD;xxWcJlie zIT1FHcdqdzJQLX+F6ILRgwAG=>*(w2b4n=Uw!3JYH`(DPscLQ^9p|)0+1nh2G?Q@1 zS4fSw&3n_}gsvCYt$y3Zs-9y-pJWsgdslz<Frj{*V0W%R$cqJ|XRP&XvNOz2ohS~* z7t8~!Z9gXH$gyPyVL~9R;X^k(i4fgHW)Kh*F7TnrTGX;^Ux@y6=zN@dZFp0DzJio< zMnD1{vGex-ec|A6a`CKkcETt++-b)gj^Wb^CX3yZxxB(<_0-)S=4y;|6mjM4px6OM zQSm}?>rtBPD5)=YcD@!V!ohd0y0W%ZA?91?)#8^qjUD;>o0&H8o<F4fo98X*oox+z z-#8Hg6DlM6uIyFAmWT2CL}rm29F;URoX>>EQry1=RuU_aXmh?Ufh?^_CNi_!nmNLp za$j{HKq{LwoRUQuNyDx^Q+LF2-h5>5P?3izxNYSd&=pWiF$ntZ^09G^yT4VFpJCnw zae+0kzs;R@lR2LB7sBec8LtugqfnUbXg-$m-_}F_$Je_ll*?mxVPDtMyI&8w$s*m{ z3$n&n>5*T^+39ZvHQHRK5J`EQZE1nh*dLDj9La=RvqXeR`Ak_L->`-WxcI+)xI^M@ z9rN*KY?w-<DtSihd<Mm8!LBiCv=%rZk$~g7BQS9^*d(N7xlyCYVGYlt?&4x2VH)zK z@l}YHp~T}6#N#re4HU!)&Ia9qMH~DHxlu*AQ%+pV;%*PfZWqH~;Im)~9xpi!MncEH zM-r#AP*i!zSertfp@Gqo*uuafdR@_MI*55RUxXhn@B9<z<geC8bho8jn@@Zz1Sdj) zN#y5!`dFJM<F6<<B(sEAt4imXx9M{8vdG|O3cS)gBhLa$r6d=l?j;32UcA|T&M2k0 zB)7m#5XI+_Q4+H-vr~ggOD<tDS$Z&X_Po;%Nqda_XQc~Y3qDkrr4Bdkxn!yiw>}kj ze}mUwAe3|1bJ{!9QYN<Dr;v-?8v;fS)PZxB7Fa5X>8p#WG(@S*xmgvtvms}|%!q@_ z{cQ?GIubL^0D8EjGtV@g8cq&@>?ov+3&dFjU;8RSM0;u3!V{aPdaB*2{Xdxv8qNC8 zs=s=z1V#9Fz@2(1TcW@>TO+Jv{>nNm8CYSZE*h;%xHplCGmnt59HPvh<Z(c=Fj|TG zyfCx$O1q;qHDTri(^{+N2-8}x=M2+Ymzau6W==LX73X_Rbd4^K{0)vMqZQYc7;>3P zoU;g195&a`m5D{BgTnQ02e_(1bBarWU2q7070*EhZfe*ksD7vt$&ZI-rC?e2TNcR& z%;T>}cH&e<!FsRZuSk4Coj7%PC#aTh${j()8ewi~kxp)fS>O=gysOU>@D-x$RY(mf z;)M4i<iOS92qfcA(XlH`^0Fi6BzSijYYA+bm$?|qbu>fImNg|OiD3V`l_lh3AMzKO z`FX+ofF_Bgt_cEP0;-KI0=EEnOD`NPfeR=}z2uA`nD@t(TnL!WIYK)|&ISZ(c&6ft zI;r@hk8IW>lbbCUYcg;1xmD2ylcnQ_jVb!usH|sbh|B`0lVAe@M+jrB)0`>0F#L5R zO&H+lzHM=6J>zYhMP63WLSQr@{u@8TMzKt#9>p~>PjIKzFUQ!sv5+~2(1WcHK;N}d z&qJ=j?Q-O3rOM4x(8020aRN4H#H})YYXimB**L)3kJ^&Xw<VViR&frmBf}#R<;i5e zcr~h$QZ)z%6gJXElwX>Ob!orhE4+m}YwE?0X>)Mg3ZA_2zXpDyJvFD7Azq!NqP*MS z=8pi)c}bO*Dqb7a1Z_A)w)z*X8%ywWY<^MqSqA72PO<elY@Hdm>o(|6PMxEU723F^ zm51;P<}ZB6a`;7yiQRpWX)yejvZc@zBIpavPKex6=!@ucFDTwL;gq4n>@l(&G(;QZ z$6;k*fbf%^<spO_G0%0mGZ;n8pdY!ycN{$8z)gm68>HN_xKp0-O*GfY+!<-ye5=$m z&U4yePEmG0`VWDWoY)C-GVV|<CWo}XP-LM7d`yuuctzU*c(P?}qMr-Y<HD-_t6H#; zon+=bkHb3G!CFdmGsvfbWzabEX02LbXqiosd>g|DNSQ2iRZZtjxFvenTJQ?Vf+!XM zl==fgo#5v<;-Qp44TaHn9AbhQd&(XlUA~M^o*-*;n$~@Sut>i)*tOkP*|UmG*1z%i z%6A}9B>P(Mr;fnV!NchD<n>isAf?}wZef|vMiUI<$t?U{QeIlJt*}M6gPia($4vI@ zXS4;u2T)Do-2H@a)W~<Lq<gh8eY(eL?ttU)<y$DLX$KmLTCaF+hK|R`dlS!)@AM8w zz5@W+yb!(M`?_vc`@1K59e`~%D7j8BSEqY**w^4|&Ecc)i^6-y!?2;}2`vwTPxT`6 zO7dWwJxx*CKaG(MO9fYu>&Oi^h2g;?L09g}Cc^paviQ5Hv@iJXz&p0O!;($)52OcX z2D?5Q%GOF~L||=RytGZ4Cd>sT0*CDu=zOvGK+j62N@yo$a*3Ky+Oz$YI*fd(JaExn z9l15^VyhlCm!-0K?;iJmOPV1U*1^7MhaT|lc23QZJJaZdx%uR^XG=H{ptO$5E;R1a z&*;RCY`ogR7uwLdc_aM}9Gik}Mim~}gV5jsR(<r^&@o;F!SO&sLgy|Y8P-G3880Mh zxFsnxw?JgA4bI!;yd<_@?vLilhiDHL^}e)ObhfB$7K#26*r2=mozq;xH8jM|Nij*= zmr~v^4R4pc!At=8{gw<&m$k1R)WiM8$nhML4AwurlVV8V>I1j%BI5$$n)M{&zw#}; zMtoYyPl~72L*w>>$akWw7>j*|um#cl!7GpzIQZ8b=3OQsXz=O4+{IolsDe~So!t>V zq$V@UzfU<ex1Q{w3Hy*<;(=Yaree`42-jMdbzW8v7ST^h*+c3yr^{#{xT`v?XawY@ zh4j#BhBRAD`SS<WgjY45<h(7k$JtEZL8w+d^hl<J7Q&UT@H}qG<`j4Ei>@Sg@wn`^ zgu5dr5aBq6<s2V?9)V~vkp+<d#K|pL0b|ZfZ2_w55`m$n)YLB@A0x+~*&PidClHJa z-u4klLU(CF7hXqo&Is4Q7*H@er8bD3UDr#+3$BFKpAP*s5<Cny!Kr5_JddUZQ5Wgc z{do~<UQ%TSF@t}-#BB}*-rU~@4+w0_lcgNAc#AmACFMK)Dpmt@#S)iNPg~*#<u|L6 zRfu%1Apzp&K~GB@56xSK#y%Q(f{s(H)&IJ6_NU8*l_hj+X4Z*DTxqJl*u`Ebxq`lO zb~*L-W)gohmDh*jrr!HPwXd+2aQ+i4&I_7<$JLC`8(rm5LV==7ii-%(`E9S@3W_i& ziQuYUD6SC_$#Cqztt)>|<>suEQ=Jzk&Lg#E$GTF&L*V7Gs6Jx&kmFzs5qyXryR%|w zXfMB5zI-u55(#o9i^;Sr@G0G=W7LuU?og0-dlYfd^bip^<zrUAoE}(7%l>xs4`=^; z9{iBATQ6AkoETo!-q?M9!vj>2Pu<Y$;qD;#RsZKrDWl7IJh+(+7*j%A>7qPf6+^YC zZRtr<Osu`==j9==lb#=(!!P+?7=c56kA~bHJ8VLi4O#V^AC{)9I$T><9w*La@>v&v zykt1mK$rJ&AC9Tz((4Q6?<X47TuI|0e<&|c1gl#~{g+3nD`;`C-ZY6x9}T&3c18B3 z)8Qu`U5RUEK3%X<YUh#n1-8s*)Qa4mgpuE%pB?GOyD!Y9x6`^B-Mkmcvm5%j+ixhJ z1J)tIT4IEESc8pSgXwo%uG!mt&mX?evsfqUZgKA?w64+2C*u#~ZXsX)m0wgj-@?~( zYsQ=(s*;7>;rpkUvOM1i$1`0bf!hcj4|x8$&jbAr_@+m}duFu@e0?}yRD~|$BsX1* zgRrp#2_td?q%&)-aN%)r1NnwTH9Bs>9H)de4ToB{+?A+GE&<E2x$s$Zsd?K7!LE=z zw!Rs{=fDQuKK-L^*=os?J}0nY#TfmZD~yw>udC8+YYEm?%=gL6&4!0r>wo__^2jqc zr-0<=w@#=K{;<fVZ>L(M6OoTInT8K?NKGNilF!+?%%#HQ(=+IT{RG&nJ^(a6xciaO zgWY+t0{<|Izeys!<%<99l4XahrJLTT6?b&Ix}w4nZOhX$5!dZkveoSm8utcufA<Ex zvHXORQq4F;22~;)na5%DM+*~g0y%$iu*a!J8YQ1sBF~Y&_lo!h4xS~Y=o-(jdm)yG zuz*_X=>c+=z+c-1=YKlR&6L@LK~Mt$isaXWgrEWTM<uXxLGo`VMtJ-3Z8b4^Hh#>| ze>pyVIzBByZUG3Q6;SB{8B$*4f@wq`p+&4zScx)auEC@yf#~!~3cBxAw;y<rJ)6v3 zP3^6x?+r|C0?}8@lOtL2t9w==W%DZoLs$kWV2kEU5?4o6u*m31%R6TZExBOHs9>5K zf}u7pr|NEySq)k)No)co$p+G~E^QynMGs>(tN%+KUUb2d5G1`237JsiDyESxvJe0R zr6SX1D#?O=vU>Wik$ZaSon!mt-m`xCuF?VXomYwc08Q|{DIF<<PK&BfvBoamR4t`S z7pki(fq?E9mYFM}B@X68`c`sf7o^ajSk#R=#%)TxnH7lR7#8*}E@TuRK;$1lPfpP` zk*{Zt1=<)}uoIUye_GbYna!B$A4APIs+@O-bvEyeu<@)n7cI_0i;IU~-k>89=Ugqg z^1#w?62q60k~Nt2B~UGad!DonG+_g3+#1-x*`M0Uzs#L?+(R;v0$(_Vwyuhlq<t#q zqJU-mxJV(HhLcG`-BxT496Z&^vhWhv6sqS2AE+POcZV0akL%aY9WS&YZeAoVn%R>< zP`yfMZG&Y#MKUv|FFW=F*-kJI;{t#_;JA}8K-ry64ps&sxkPi%k{oW@Uw@i7mX=v0 zyKaOcKK}Dyd2k7bm`xA>j(z&hW}D<)S`SpzwH4HN)G1h*THU}qlE+J!>X!U4BpbTo ziACO%Z>T2xevnCVFCsxlbE(PkI)${0wo8cjWPGn}I>+y|zg|s+U33c>)2q{-J9Yo` zJvw(M$RGVund`G8%WHFha8LgIL^Y9B8`zZVK(#8%>q#^H`IP`QR2v8Uogsr#%g<Ij zxceod*fD@7>m}P&;NB(SrTfKqYn2j)UqEs$#3Az)b{bYiAo~SE8dwo8-5a5hVv>6x z%mS|Xo6a2FIv<@FfuZ&?LGZ052Q1Nxk*CXc@J-#7dH2J*vz&#}#l}~wYMOtCO*iz) z%Gj>{zWhD3+3b?fq_Z~-RhpDcVO&a%+9L7ezjXln5XQTJa!)pmV#_c53$py>NW>13 zeQ=saW$Tke>yr<9oR52uN+Hf**ZGDj5n-}0ey~b`sn)j|xhgjykk_uz6{Em*@{4`1 zX?lCAn`C*Lkm~NUDcfsFq524R_8NT*rsI27`iCval)boE{doPpK;5R`ZPdrZQCy~- zTE_{$q;-Qzg4|S^jr>^30l$D(`4sI0ZZ0>JOd|>>eP~mR^cN2D8`!}I9Qm6Z<ww^J z`d8%XfzBHF_8c;Iq|T}1Eqg^Ou_a>n@_UQRVr1#p4^p;-HSGi2V_^B;HSNS|?WtCt z$(&N^f|Y?8{N0tX<VTdj8oS9KGwsq!ryJ6w3zTd#Q}s_EdzU-v-IuZ7&xYL1d*(e% z_jU=Fr6$<fZFG(=%p9k5j_-lGwUWn=u`dnF8}Y63(_(Mse(&6uO(vD)dFgA#^gxxs zq7B8=3T@4|k;-Y<D75zX)6Zer43N~56wTqtTzc>uf)QSRcvy3(1V8h>6WSP#2HAEK z|H*<mQ|wF<+WQfPMe2Ko`llHT?O@O^%};>1RURb7-7gSX7TDnjwglaSeur(~_0*Ez zTPP3SScwY>;4cU&a=GvqG*FzKYV?726Qkm)0LpI=8m%8%Pi(FF65PZUW1CTIKPh*} zPSFuC1oka>pQYg^f&Vq|X;D#>ti;SwH)Jp6k6{G-b0V}y<i6kxV$7N^rD%ZDsE#Rz zXR=%+JXrifT*f3GiMgRdj3~HE{0rSOx0!KD3Qh_9CYLB2BnOSqCL!Txa0MG2bm27P zfqek1(&pvgeYG<}eTzS&TCMVQy^c1eI6j@N*W|9wY&7a>QEpini4p9dbz_#CG$Spj zCYYf@KZNpf))5w}`d@Q`pMLfOgPpK}1~{A&N~4GB3-n}B$jI!0F}{0GDpFJ|pTkE2 zkE9z4XCC2K7d{%g*@|ZlFYKwD*3fe)f&C6Sl`f8<=i|5|gB04q?Hz%WBj-LbriKo~ z9C@^*>1>f&9_c=Oydf4kAy$vHr{8eQ*zE>z7PkG~c{2J&1Uh}2K3>50zp;}>83fSg z<y<ir$4V9{i)M{nIU2{1OJv<BDU0V!?14IQ%;%))LbmxoF*Hb{lLq_4o*`WFQwfbo zK6%LvMTCt6lal9f>9o>rahP}Ktp(BArr}QO?-dmN6>_D_%}D9Myaf7Cheev4gT+ti z>Cl7wz?=N+A=&vVBhVDLyh^j5>P+;NBT0shv2(&l3+fi34V%x*y!D_hboJ6~F<Zm{ zWPY$a^pi57L<@ran$Sh$h_V#jNA!4k^skWupA;fem_69N^;Ud1;M3_)popXJ5y*2? zC9v7KXM>FDB8$fEL<wndu}m^ra4TAITR?&QP}JmO;c$que##*_de~q=t-4aH;Dphr zGyG!e!QKc&CM?N<)l{FuQw=`yN;h4$-H8oU*#ACZioL?Hx_ic{5**+tG9-r`@RSUB zxHbed2+>L5=t>t+*dZ$lpUz$+$N}ZU*z$#0!=rxXawtpF4m#k=V1i%8x<r|Fr&}G7 zJUv~M*g&7M+~iPpWeu+us=!0Ci#K=*X(+cch+;!iMh0nFb*hp2cwjX+uNFq;p5uMw z6IvAcT48&e0J#?PpV@L)XNsc(8XQ0n7Quzgdnr71l59ESLe4IV5^I6HcZ54o_CK-s z*pb1E3cLE)Jv7zuc5RRPEI*Pw!-o|a38=v1BNJmB!Gx51)0hcP;COXs7J=HJD!f^> zewD=s>7C$q+KNJ56L8pdna_pPv(mB#i<mqg?LkHsdr-)%fhOE`NFG%Pp@QMVc0bD( z_`;M&A%$>gW#>-p4SMLZTnOqx)<Or0?J$pvNKPpgQiz^K-=dRE314Sj<!il!v@-t5 zU?a^(zAK@kPowCuW)<_hmf@I>t<O9=y99U6lWtrkK92(*2(>vVa^qw<bbCp9tx}gT zFQ$IM|I2N`E+Vg{K@R|+{?EklpZyDX|4FKEVC!t-WNz&EKN9{k{C}be{1>ddoRz+z zvBUrA0*FqsmR*!X8J)e}h=~RQZMkQVQ%b6lx&Wqt!ipab3d(~Vi0r-;!6ntqw5o=@ z^*T*ult)HK)_nu~k{fZ9dF|_ne+%%mz2!dr{oQt)eS3UewFOuU+GdIBKSUwXPYj{O z%9*=M3b`iXk{oaZbin8^1$r8U{w%Z(_SbBck%5!obURpw744I9QfTeYaK>TLt_?A* z*uE2_M<9>@QfN8#Ol_MVxNYz=T7K2=!F62LUUdvi1zL$}`>C@i*ZM2G>irADTneW> z%MOK&TKc|Ivy?tqyYZ~pdA{Ikst7lu?L>>`A)~jP(c+4h#fcvvvRnZQTPYA#v)G`s zc<`XTUBe+=q#ETA-i31L$2|=Aqm0mX0s<0hBBI|$Fs}0I=5oeCgDiq1s?{o`YEb7u zf&^+5z3-UP4_z#0Qmc3nB%epr`oY=I|2BZiaMSYgu{<hQ)hm+!Exo=cS+cd_^Qyft z>a$kGVXO6#)}xUPE3lvk=E5SzuMucJ$CBnJ4qL*vs)ywSc=D@?%~|O?-kJ<uinV=) zVxx~9qhCrz5RY6#!gPrF?It3bQ|i6~fDdM3Kee|?F6I~USn!S<)V>2YPSZlDkG4UO zsa^~_;W{&|03#~n7u7+jlr7Y)uB6S^jq|I45|a_=4xob=zlX{w-bGXaQX3|zpAifv z4JvDt#VnO*8)$(ALIiJjv_>8nukJLKzk}m2#XJaQY3c!k+0(p-$}V};x^_=($TEBx zziaxSfpwRmpCgR(=$1-qq|<Xy`0C}PG}{;(BhT?kGZ-Bc8_b+dc>*8T^E{-yqovPJ z3v~to)fWCK{~#GvvQYlT<=w<`TVpVztuiJo&rO1wNjyE$x<3OECxkPE0of4oK+K0^ zA4hbu)eClnS9!q8@N^a+#*Of933Jph76+8Z9e1{_<Or)v11DhJ<_tT=(E{L)g6P~v zG?9ui_97MsD}z-f=96bh6sJAqZVx+#<XYTU83QDLNKh*hz;#q6`upE*pr?x&^Y4GY zsA{nPU7<4m|12$OeH(q#|EspD)gkqij+=jEn3!Fe90!pI{_+tT_=yW3l{JutCDefm z@FnPlmu*SeBrqnX>!Xp>EWyfKTGne+sc3E*Y*Sf7LaKGDRVr(4YIJrDzg~FOUTc2n z>{?t3x}Sc%&ZI~&+^5HR{(k<R^8Tv#IQ~5Tc75%Pp8{y{^}gic^S%&7t+IR#1qyVj z3~}=&-{g)TI>Yk5_C^2UdIR-25Bg}oL_GgUMqj+UMEd!`rvE|fz2Bq#%5M768RRv4 zs|H`Z&$xTbM)=u@^c~_IKg?zQiUe=G1Bd@X{XH4RzrPiD#$Wi5h5aSH{e8)U`BelO z;MDn|mw^s-W$ilc7l?m~LiY*aDgyyk8mmkg6qIqOPb+dClNRO*=E8eOxG6UH(kT?j z%aBrJ$++leLbSq6ZZps5DurH$`I9{1S&}&u-#RPVDCW9o1wT{Dj^#Zh?YPY%8#2LV zmgi{f|8Bz}>oHMm3TP<|eOxa_+?z?or6jJ5XH`5bph!#1+MrY2lrm;m9?BzeDtQUC zUpFN^dE704CpAYPVv(1Ory=ZYQ{hT{k-zMePt!dji9SDU#jZh3J6yw$7yY0{{<tz} z80cm5G)HE!VAd$23E`pm*J=byP=w271oCD^j42C3!cpQ;d4#8sEgd4nA~Wz_h&#WG zbq$#fX*^9_jorY_*>O#3>18O&PPJh5O6CdN!V~GcnbM~jb^)VIchE|!GH_qd05*S4 zw?1*tEXs*-aD2MIZav}Zmc`Io#5BxPB7+!^xM?vA^my~eiNqt2M*F!fWz!-k8jpFz z5^WS&gk~P=jI}diU}V#f3~Qky<&9dzQu9xRBM^to<iRdOU5jo;P&qq|rnGtp2PE|9 z=)anQ86~bCQX!@So2)y4!=s&MUE^ahZYt4Qu)olkhQi#>*>H|0VOGdMZ6%B1!*`VL zVzpQ?qt;&*n<mqv4lNU+c#M@RGe`=MVa^JJz4PpT&WV?lujvRj4C@|VK^iehZCGjX zD*B}t#3-D*-><1F$w?&N*ZB=S>570y1QVw8Ys6MDiCo*+X^K(BBG1DeH>#ulvrYk) zl`eo-NR3<|LukayF(}fDnS2z7SjmbA9pXvSh~bhak1S~xM7$4pv$wv~@5?nw*a(R? z;~M^AmKwhYzaceOKuD}N60{&SC~>dT%d01X+%KjkpgaN`R6HH8CTnflP)nay1}ikM z-JfGLg;20@qc>KyZTu99)!6BNlL4P3*+N|p0<|=-nIf{ObZ~+z8;kup73Gd2PdqQF z#)VkZ_5PqU(wQf+nXW%|6}v{WUW)p2-!8}0R=Jp?WaQ*rjNz6nuBco2wa#|P07nL9 zp&kR6QfPja9|Pr*wPFrA1#ORHx`k*G%^hs5{{#)DCGV*sK6Z9{#Wb-PMyp!^f(6)a ze=!Lpjo%*^I+-ffXEZfn2m)l1RZ6=b&N=#ru{kq(ml5<cbu4iCxk)6U-mjgojBN$S zht&WaclMwt1|*@&)flFc4UHKLq=utlt@03%#9514Xc;-K&5P2pM3QAAUy-``d`X7W zxg&{Z#D5ndoa7)p4RPCo%!63_ew=QDHJIbgc^##zY|*AetB~5MBjLr&=&VZ<%;_S5 zB0C9NuB+38gAMauXU2}BX7HKASrOh=f#X?0uC%f&R*nbn+!;!~S42OX2<13hrnDPn z(VqNffiea-D$ojY!292;fkJA>_arTo@0}Pa#~xg>V$KU|<`gZny5KzJUqe2H!@i!v zKKgU+EmVqKCR>VK9!u-UH}znjZBvlR+96!3X`U<7I?o?%vwDuOoxhkZ<}fmMPWKTc z;@X%lN+vl&!r`63lbk?oSw@KYPY%MEeUmTi*i#*!RKBR+p;|gS=Z&+*ntoNj`2D0# zhi!TFRlbPm!B;qIKj)wmB`P3wPrxlyhU2Sqz>;8~I_PCll~uENdaloSNzCERztCPv zmc8rzLBvgB7&~z&$>E(IK*@YUX8-c_p+<v59SH)YHR6)2y*-I2Po@cLsbg|n-@z2! zQ?MxSAyrz-w0CarAy7(wPRTgF$l)z5bq|BPcy<XCZF}}4&A)E1u4K8jvd~fO-YpX- z;2RKt1q->%u;1k+>4-I}{az$fdZwP;BaDm1UAows4u3QFU9jQm^g-t>TY7r_$<fWn zJ9jSZAzq3f(W<+0j_Q#t$LilV1vt_&Q#l0?DsK<>^;grVCliUx)(kO6m9rn0fn1Ap zyQF{|W8WekdPVLIt5QXqsosdf{3fdlnXSdT`QodD0sVI$;4$YAzmP#+gOc4~+%6OG z))M+9(wc5!y|EzQNS0x$Gpg(2k8RBuUeqRdq?&c$1p=KytepvSw9mj**2CIGvfZI- zcc_mL?@7VnF4qEjm*QCd4eLKgjlD9FY2&#}2=K(wCZ<e3K&YX&jK;WnNU;7aiBN4; zH9dS{y|A&c2rR3J0AUI%(QqO)V!gusme)rK<)yNR9R9?vX?_)kHHyrieik@MM>L6j zMYJ>41KN|HAP!>}vEx#nlFvtnBnviYF~bjMc7J{4?kR^{M2U>ej$zeHDv{J-F4hbw zqlx`1(uX&;T$~yn$2?^yoK}wWvJ(1Dz82%65|ktQDew%hDC)0w8S-cMW;?8TvoOmR z_xJghew(FJE5GRYpE7;UVv0PTzqN=d$Do=SqQZ_mXwQXBGO=YIiQUb^Mv&WEYm_qa z4DaI*H0$8;ui>c$H+pTBf(&G3)1ZrN&4w8HA6Y1A7sixC_0Rcj-l=^#5_LT|z{jTJ zjFeO+>MuSlTC+yWsVYpQS+})s0HN@v1V&g_7}HEy9rtG#-l+0fi~X8bt~3j_sGtR_ zXUM9<VvduDG+3;IUPYC7nLbYSg#6iIMJW@o3s2`V0W87|c3NAPw8@#oOvWNTlwL2H z<0$N4md!v>b7`*ejMKTXkdkuT`H)%eQ{CdkD7F`nq6Q{~gb<U|9-*iZ(g}?ZNOzcP z=eKI)h>Bz2%rB)tDCovu^o?dufMzI>&bUnO?|&&ob#kp!!trMMFJDCiacsPdutDDd zE=SqoHib$li{~*s7)r<GZOE3U6*Z^gs=FBIAheT0d1OVl%=h!Ow^@&LUe@cXeR733 zkg5l2gttjip!*tXkljAlvMOAbl%TyAzcL%&#Z9}9<FCsrLkseP+EJ!k+A5?Tzz!{$ z(J>X7X%=#5q(>cGdaYL8rFUjLn5kp82#Oviz<z@kC46Mtt1Ln2CPp~&H6a_hakes9 zGS~1^qri2L+g1=LBNkjptKR)u71=m1RfvbHT)dXeTPW_O%=hmq&6bL(4;4dogVpW1 z(8bh8)uH1Q^wit+LGDIt7~df76|;RrY|q{Rb4%{MyZF*_^Pxjtg+Hb?Oq_H3$?Xa^ z;~FGuY(JQFvAz>hZDNEz61?!-SUt@%{hi%*heROL?;Ro?rf3*F3bd4c>-a6l8)vIA zxHrs#1gf=!S1g~X2LkNR2bHha&+X_w5W)B;;x3VVM&Bv{?4=G|fW&=n4s&oRj?nC6 zjv-N$as>8kknM0n8yyhnZWdz7)m0xGQ67G+NbU5X$PBT5Wk#i@`h0GdY4I@nSR;Nm zSbnAL%Ig;t?QRW1gaz-ULQ{WX3*HuBUd3rb?d%3;xhfmlQZ}^2>EzNh+FCXh=qswe z$o@5(h5n8U=wm2CF$9$lQc(7}GDxH72beBQy1l_J8StbS(bkXY3^2{ZZn+Y}t^HH# zpt{_3?xU16TAQ#m8cT#SCe}IMGt3a;^mEy~g{@{TD=2Gohph{yF-OIs94r)??o?G_ z4Q=U95r?6`kqU<&xB*gk!a&#IP`{}bQ5rU*)#2ffN>AXxwrJTb?VD^3IBZ)?T0L)# zR0mGDf!-Df4PIlxbq6|V#&Wtn$!r;)^AAtW4}W*c=3A*QGt7`?^?g-G${ujljZcKu z=K++~#W`y&HK<Xlo!+rqp`wdRo}bk^s(h{;p=zN&Rwl$LJV#$dg*fKlH|CIPMzgC8 zGHDNOXhliZqv39C)IPa7Sc38R%Tk$Lw=^fG6kn4x?J2_S0Oj-|z1r#KH}H|x8ccsR zaW6Im3;X_+_QhU|^e!pb<EB}$vz-uHZVBfZO#HXJv#D&hi|*OmU@0k+V@9A=gw&_; z1(uooF}*YL_Y7PpUCPK>IneS-p&d;;s#wq{VCc^=%vz`vEW;GCZfssa(kZt?kPN+_ zhp9TdN2!{zEyo-9KPY>vpgOy4TRQ}Ihl#tpI|O%kcXyv?f(9o*aCdiiXX5VeuE8O| z&)VPF_18I7Yn`+2-m6jXRqtc8_Vm^vccZa)c)brR%T%?79CRj?bd~GkiGs8^!rFK( zC%^gG7~R7q6D+x3;zz)%V%Wm{bdD<-9$UhEj<75KkkCnjaL<a5^ve>i5C}{Ze57GN zciFG8+5Z_;O|6}5()PX$YX=w_`r11*Cm36@eeabBhaAhoBa8Fq_sqmZ7-XgzQDFT{ zE~}NjR6Ip3$Za|cYo`#-{)%C7@rTD(A-jFv{j09njWD~=kC9yrW&N4lib-Q8)!DwN za)v|E<wI8llh>I?o!Htf+nR{19*v43(EM6Npe;Ajj|qHuU2bbmHg))Xe>@FiKF}Zq zLJL7gfo^IOBIxN1!($g2pX~bpW5<NE3vTibg2$Y%p2C?k<o&J;?+*btHiS0p%sb+* zcK~nTAfq=Nr9iBMH*Dt}Tp(PWr>j^;wCEE)-`tp9RZkEQhWEA%bacZUk-EnNgfKK} zGX)|V?kgiR<^+pWfnUr=NVZOeGcWAOKC$k-+2}-6JIS?a2cFQXV&1IQJ7dJ&MB#dW zF+9Kt33TQ|WA_G&-3zZcH@^YKn+oT-BJ*FFG=&y(vu}x~h8A=9ULe5h7VO}Zubu7{ zi$dOz)L5@R-Lg|Ue`Gt|;=}+YIeDlQ5kZ^18J^301KR5`J%N(iGL!NcwPa3i+qvxM zK=lRuKgsw4w|sO;^>u>k7IlKAdCy_nFU{Iv>nvf57&*`N(a%x%m5Q-V$i`IYPG_@m zrH{RCr}ibTF-AGeSNH><m>&JQGwSs}GreTvjgyHwlSiWw47n}zvRJlG`W8-HR|fe* zT;@YeM17c}ls+-L9ddSh)`Jpj!`HyhGP5ZZ1lV|n<=*Mfp*0(&D-ld`KAt#m5)T<6 zM}K3aco@~ogXu75sexy%0G|~<(2AeqO%&U*;w|$x>>XU29>nnzoz<{2E95FFbS~Bc zWTljVRzr0n+*`MmPhUKF4{zOtrJ4_Ley)<mvlM!Xm6o^)q=^r8s7BNWvtjD6N%xbv zAgNb`|Aw47gpUYP%nx6)1PXbY=U%sXBL%W&aQDmZ<I!!iAc}sMh=pAC!ZP~Vnp5jh z=>AYu01x4{ce!8jyEMHb@DK~g)54nmD{C{@O@WrHl=gasg~wsM|Hk7GcwB)GyVd84 zC8;ynS+_$}W#$29(%5#IA$Sz2MIkGd*ZA^0QVcsXyl~pC<2S{_-QOGj4AI7*4VQh# zQ*JLP;LezRCO-bi14`it+sscnafMazoZ<lh#HNqZdY9W}dRC8s@q=|gH2P@+&PX!P zLQ6C7mRvV#<I00Mt4KYZ7izM{0(4vPTO#YX1n_}0UmBe+{@6oBsww`Qv)~>Fd)9A! zB^r9<PR1%(yj|BU(TP_l=vWjsXDt3YZHAFGBmtRBasFzp%I^YK*Xfdbkx0r2@Ki%0 zx!cz+iy}?T&DHs;W1`_(R;SHD{rF`t(MEI*Uvh_f9MET?nXdi?n~qXRgjadHGo`5I z2F>5<w!B{4Rb3<V3jrR<(ms8w9&n{87QUJ~1!GrT{DTb1)(Go+yYbtTS9bfFx>)rb z)A7;u4%0c@6Vvlm_4N`^wQ+MO``WTR7Vi4+1MFW)YQ~x4Pm#}L6>{qTB+$_QKMFMe zsGg0<&#D-b7@+R@_Vb!C6en>6Tvz~cO^z*+d{hLf)K{=UV#+kvWdb8N4~xwH;Ppqp ztw%qQo;pi-5p80&>T|k^*Tx**I3cyIy8rS@*5%UHd&kn%{rKOvs}&(Iz3A+CtA11* z$%L?Nsjt|38Xm3DpIHLCNb4gyo*dr>>D$dz+2tL3SnwTx1o*<CDb(nu>t~Sb0a+D_ zq%N{}S;h6I?4?LU2FWi6{a7!PZ+--)9G&pMPN0M46KsZD-O1S4*f{HgB;+`%rKO(9 zLTx53i}ZE5j;!Sv0X7=-nX}>OZF{puCOX+%>Pz+34@N83ld!6;Y`0A|hwG5`lM|L~ zw+@1Awq8Z$wh9(Zw)6_l_XI)YN$hH%OqzYQ<oN<;*qh9@()J*<riUap&G@ALdjiVt z&`Nx34*BDvrme9ln+Fp2#qBH|?FH_NRo-^&OcqaJDlQ+50r`%~Lej{PJf$X&b=;uA zj5QB1VH`_z*AG5I!^3Tvq*CD|Yufr;LRj#|@nW^CrF9$w@Y2n$QQBXbyVs|1ZcQ!w z&!5;$Z370y=;$B~ZpBF@{t@eMQ|b6r+C_DmsFDf+%*@861azH(fx?_`<f45_&%==W zCV_u(M(h1yXEwV~dFe|mmsttMrX$)LQ}xQMyU~PyAG?*V$FB~Y3aAS0SerI<!g3_j zomzO?PV`FTrNLyX?K5SnM=OXktx#gCS#AkHZY;WVoKfQ_wA(y973iS+9ORAXD>!Pz z(V5(CiZneeZ~&as%i!4fa~69*1{|-F8he@>FYJD08G!G5-ETNp`7|gk$q~CYEGVmT z;GwB)ldy2>?A_xEe+GK!l^GE%(zQU~nemrwlgQC7hmD!>S8Sv5mu<7~D@fNY)#-s6 z7y1eg8MSzdX=13-Zp>5(vTTOt;Iew_S+i8H`3-*E<OL=(&qhgFKOI<f<ZY{W6m7eI z5<v1D6nplNSKIoqCyDK{@LeFcP0eets`#7Sz}V~B;HpHaU*NKszD5rzN$#?3Mc4$I zW3pO__jbB$&zxAEmwB^kc^kzAbbJ`T(%&ViWzuAH&SXzFugr^~-!7zf(S6&ZhG2X) zziYS(supsVg#^}e??-77Dh`jy!W{Cmot-A7@|ZnC<>v*-*j%vY{Fd<=bu2I8UTr7s zrHy&T>hpueo3#GM;?cn$*?+_V+M)LOYipOyTh=ZlPElc5+5k%?Sd7O=mwlm5pv$W7 zPj`ZnHaGD(_g2rLE4#?AWW-t~EKxdYptD)`h=VlPSgb>;=0R~{{s$gbw=5&)$oaPr z^GLi3KSZB8&EVcDtRe?~5=&yFhO8@&A?*{~77bu1EKrrZWE;hT+)j^maUx;SnSrf$ zN`RMRo`>U1=Ye#rw2%)+X!->`$$gz}TDLdF+U9||Q;-*T=P&vYs`vY|D>y|^E|32E zfVrU$Emd7|J3QW9GXLXx*XWG#0&|gj7cA@sDzXZWkj$|`oFm%ml>JYI(Fo2Ljj$O_ z@XUkxh?>2Ok2x^KYyd&WhO`jxO6i0kU)!|&qk!8ZXC6EDvGfNN%^NhSq`&ALyUEG> zT!}1lh6I0S_{KZZGyCax$}wujVp~45HqIHnkg5r*UfNwL<qw-#2Vth@B0uvxW%!Ok z7>Z4kDAY}p-^zEYx~QfXVtAPA;29nXId8!)dv{xYgsY2Mn9CYq?Mc^K)2k)l3Bs$7 zYBYoVT-~8-Ho)vWzpODBX-7h`Vf9@y_HK^XvbmWrPel?V)5pHSo1{+?qxMeZDoKjm z;X(NE%^1p@6BKMopE)9gcoXLk!5l+>eF3xU#S|mmk<p_V29VU3k^N}P4y4%YE8Ohq z<RxKH&S{Dm2{M}q-dm5Q*e1Wa$mg-Hnm*NqbaJ-ab3&`?ZB+lZdqA9C7H9`@U-;Lj z=5z*KGT4f6tug%70Arkq@h>f&;YC{F_fTY&Er)YdQdQ%eWfjtwZ)?_<?qgpNZ_@N- z=oaU2)NTxHW^(D)35y6V=7yA}h-r4{aeuHWk-Ay`zBa{quR`(HMFIH%Fa!5QYRJfe zsOWYkffE=hhP9_m1*83}7_%2JZq*<}5l@NWe75NeA=#sW=a9#cym=h4Qgl<&??cY{ zS|(!jxiu6oZ!)xs!7LGzKq+Nd3`_%DIp?nl!V(gJVkIA42zGTg5|<z_7B9SNww$iK zG{4_LYI9s6?5E(-G`Mt^5>c_0#$On$l%-GaA4x!6BJ|$0!!$%zl;lkkVH*QGq~(vy zpdxTk6>3{FiGJmJFBwUvgkd$$2;r@WS#p>s>Ba}0&UetN>d|r=#1`}QqA}qywZq{< z^R_M_I;`QIkFTiq=Y16;M53E#+%%wBPK!EhafABre;Jh(PkZIi&|kg;qyMM&%J%=* zUjLW>LC*3|pH0*_QN<U>_;A+(04R4*V5EsxQWEJ=Sjm;cQIv^MG(7{HD!}+z`PS&c z>)Fy%S5l%ScT<739dE~y<rS<+E>ejHT;+dd|B}()-=D`j>A>sWxpn)$`CoPVOMX00 zRd<5{0fw5yVZu0)EaZD%v*J;E=UAbx<tXyP)J*_ntP;-3Lx7<{7ZC&&*n~tS6zqyA znHF*^RkR}Wc_Rr4%q(=iDa~!j4(gq{C@6$PQS_}~z?}>ESnr^l24&IjFR2MeQYn_y zw}%K^^CQ!!jV;AR_!BbTuD*-1XEvj<<*<CVUQnJ3{wyPd?6R`X#Xpg<*y#Ju%#RVS zPR(pHNSKYNctq9bYo44qGq)#$lbFL*@EYAGqHJSG79mZ(l?>;I(MR%u7ag``B%L}a zi55%kp;6h+0I+bSa8$>ff9|u39W|DxrQIW_64b~ioMjp74iKW`g~&WUg2GISLvD0* z!YqwYb@t6!@S|20WaQ1Tu@Dpw3PO`rCEo;`2bSnT(<;Ar1w`r*Cx^`!@m(x*6Q>%l z5VmA@A7Xscx=`j=yD(tk{b5ot3^3FX{<LJey9t^-J=XO4P(kABFXa@bH`!{H0v->~ z3xXTI!V|y|4zNIyxJlJunmLIF=J$jY6GxV#8K^iR@`$K85irRD#e2(v(KVRsJ@Sy% zdx)V!nZGr!DK}NFIX8`AF!y*No1M~gD**<9(~x2?R}nh`kXL))utc;^Fhp$Uj|BEM z8Zrcr_;npZwkguiOBW3Kei};kc65@t+fcVGDC1_GIauR{?$cR_O;)*BtheaCw4r<m z2MnL%S){z;CbCP?kl8y;fm1gjflN1;g*#PwX*<ij&8;u^iWc&hC2xYp^tRg1VWn$~ zMu0M|pPVa=@V*f=OLO>+9Y4mD>J`#EkRalBH^a<T%3`Yy^h{gaiz{r`u|E35=$Wk0 zyJP}AG@EFbf&qD9^A1YnHZ6p;=W9~AGTXRIt%f|*YZUzia+YGGbKYq?(^$S69xc4m zAlRJ1?L|G^X0USuhB$iviO4V$G#E)=h^b3g{AiTZ{z|r)R}${{6e=OisFa2%I&H$w zu{aYKR+la+<aNUmZp;4k$H?0>rI-N(Tk9@`SND}~2!%T*w|O}R>w&e2?bOr05-;{5 zi*A|i^O?M*LW7=577=VpIr!`EU-JvN3vEA!_pimwoHBB)%ZGiU{AGvDTC4yBJC#X} z?)tgErh6&d?mt!-AJ6&2(<bQMWAh3kzesU6CCzi7_S~-#M9jI8OI4%(P}ht^Q>YiX zBkB_+#!tJS)lu4SdNAx+O{zJnnsUt;V%-J9MJ=i&nF`Tp0DqU0BJ*?pO5mk^4yQb3 zb#=)qlQ#xKpXUZ?Zno*Ew5mzW;v4kEJ_%$KqnTZjr7b2dKVs;b>|?D;DSTIIMtpj* zmFot*>JP<-qSb34ytbt8opXn*M_OB6l14i{Se#~z$)Or>s4H8d-v>Tc@(O!jZk3|b z_r5wLj&Ef!(7P(iPE#{i(G(skK0Uc(j*m(S?VF%D*ALGvR!+%2cSVhqk1ok9<`6Y! z6FS}{9r|6C@o!d_Q2dVZR&>`6<Rip2xPk~pGk#&rbhzq%hk{K&u`?6}xotpJL@bJC z#=bxV<L_PiOqDR9?|)d*+|fVn-0m6jT<DKoq*3yW{MKMlYOn#UB8ntz)?IZu@|)o0 zm&yEzZbFITx9)#z=WIh+c`V2;UozqTQ`yD)cV*Yo*unCD28VF`=c6P)4-_`Dw{{S9 zw736EuOw$7XZ`OQe&LC6fcYWt`Y?W}V5E&u2Vk!>Ubcf-BgWMyg(F$D0+zC9<$j}T z@3$B}KWF8Ogb>FNsa)lHF_EooYE-XitZX1hv9I+1lab|bGj$`X_z~=X$<u{D=VR#s zo{j?V<B@%o>ht~azV-3)??rv{7Gw?TmE;U~P;yWQh8ND>;QoOU0v<D=I8g;ariNma zWq`RVr|;Dm66tCIpf|tE9SFj}S7$~AvG5au(76dg3EaJ7s%VO!S~MyO1)7wo9rmu= zZ5+rgv(tLG&+BtXpd-zb2mV&CbNChQlL3OQlSJ>M*GE7gQC%Yu4N$l@7W1!IuQsGm zB2anP^6Mz-#%axcJjpM7-U6bT`XmSJ`u-}@)j|2MvZ;p5WnQ3)7K;@uE8_@LEnXoF z*qz7)y}40`B|7r@VAP~sYy``n#Ve{R<eh8Lvn4yfly>2AN$OAI)dmRI$_WI}m|#nS zn(VpXk_;+wgC~(zLem*|+w`44Q9%wg*$i!k^tKfiSH<qKxn`?x2P)wx1OgQmQw{Q- z^*wASXTSARf(NNxQNJ_xL{_;re=F(M+tx!!ZK};5@&alRHFk6)-?laCddm4%p^Ii9 z24tPxcA0_?61v&A$@jA3Va9x0uF<y)d;t6IXz$V8Pv$x)vv~ni@%CNf&DJa~qENAB zxGc9$bv$Nq2qe!X`yl5@+CH|&BGXKtaHWg@C)Lj>^PZp}1gD;at4<;pfH|>}Qo_z! zcVgr4s6XazPf4T`sxKg<;F84|p4<t=O>yID!*Z&0iXX7-)Oxrd{VLbA#4FT!rp=<i z{Uft^R6SvCJ0=mH_EY|(<utC3SgTPUyy#dDFu?TubHcc<w%-5Ca61{Ty5tGdpTTL* zm#cYEuDqw!&UVSWQN{CC@@%90ByFK;SG_~x*}?K^wK0CN-H}jbkf($31`pG5yBVV- zg6oDa;DEmC!iDT;IN}SrfAuahP<FQ?LTFd<Hwq>;bD;??w)812kEV0DcK9=x(#)*5 zqSSZ^5btU_f3dwvpE&1)_I;exxa$?xV&6}~fVk{LbhE@N`6;p|&6ZZ6jAn5nVrvkC z=7j0>HuTS}W{1M0bHlxL{(TY76YXZc&YU+Nhk)czGOJ0XW(wgCfg7)k<lv;G3b1aK z)XeJoTR}dbOnn-sGt4*TiCCPFG;{8iO2VDoH2YVMO+S5aNDanCcXoBgt@RvR?lxVI z)447UHuwp2pqZHy-u-YLUBh#h^1OJzeTiOj7Sr7Gv%O&{fHU<}f$4l?60*SiEg@$& z2@lg<)SKiN3Kzq$YS%en1=S@AG%O5uk!BZP22Au_cTg+$j!S>HF=3a~O?&yFcV}^0 zBaEZ7=rps3X03|8-cNnFj#*(9$W;|;wx43KVT|wIIn((wZQy}0jjhJ@?pK^8Jlw{Z z!$w)$)EHy=?aJ@KFz1#cSH{I6Y#FA4nobyN-|3u7z1hD<;-)hdoG+2<<S8H3n@NOv zf3ap197XVs?P=nruC*Ynx;wk(obDd@&ZgK&J2Ne)r6G<zkuO7fuy`+WEv4I&PSOI0 zE7C=X=LABGC^6GSs1x86Niw9xi%>@Ng88pT9L?Lwkujzf&)^h`L+t@yI?#3VM0RE_ z)?lR}PB>t};#$8rgN;&%{cIEbcI>;v7bf71dQ-p~jb#F5CCiv=jw{PV!V+W-Hf|g* zNVz<Yv`Mg@p_c_e!z8ypjo^TiB3%BBF+O74D5OWbW1tuha<hLlLv948;HiVQnA}k& zj?3OMu3T3-M9Ob%Oewy6iX=mC5@|yY9)4pN_W95?cjO26Pll0)w!qEMKxQzF`aq^} zny1|bj9{vu-SzVT3Ag5#nUJ$}sbeJR*nJOZ@w|fH-sIrEe@L|xB01$Gmcxc5^5(RB zlI)7{no?(1rg>;ab_ZL7Ey6Zwi)Rw`K*Lh5CN!{_uG0>aaAZqttn*QNeiW=@J8Yj2 z76KPpYp{p`EJ6Q70~RU>fW};^g=`Gi0|bOf9#8l)+2ManH5jGi4(bP@BE84Zz6&!w zd`QSQY==p0muSVn&V-nn2oPfP-2^*1>t*yL?2;>l%>iXP!ixuWxoHFkXl|I~R4TI` zMw>*ErnVuv<dQJ+1Y(8xVWfE-`caz5Mh|qDPFtRsJdCI?Z(&Z>LaLQUgh)4gMBU&_ zs)5n`TT;#hDAn7>ydfj`$TacMVZRJN1|0gNBjA*ze>$F(i+TN~{^*@mjQh3B7WwuI z&F6$VcwnjHO3)~&jic=cV{JAPabJM;Y%4YKw=b)XE8nAgVy7QizGfREX2RAxCe5Oz zGwnH(cL`ehI}c>6E-KcPC)5@Ch?-$|RinLFg{{jMs}Gz6eVmkD(UnRNhKc<{b_QCN zIU;;Mm~fE(Q|G4tzqi}}ofXr1_QBJ{6d)VRk|LyPLZjla-{p43U#Tl+_sM6k+_PXw zx(JjFgfGOAHTBt@877Dpnb26ol37`*VG5{$aLRGs1<3rE6`^@mSyb_O!hR7R^HMZr zNJ4u(OD5vKJ?whD<ni=+6nMU|WD-O$;(JFIql%}EBKDPnLg}?)7-A;et<aBTrySgK z$UO+o=|LooMBlv`MbVT>EJZ0Zf?p~Btg7_i?HLSy`V8*f3$t${3U{D7qUCc%t~8gl zFojW)hwQ%-Z$>mP?1FU&NZmmX9uv@R(rjMAnFwqW1QK0U4?<rH*FK5T3gU~UZ~N9^ z8T*Ry3zqGg(h64PEXtfolX*!sgIM8C_dxgP-t1>-8te`h>nVXfzj!Rp92QwH>~xts zxg78u+{R}v3iuqN+DgUT#^uF9!L=pKIBSyd96s`EZjUr2aLq)@+gH+5*0$p74bcI1 zHUmx$OOo_5A~$X#%`wL@G+hF@TLfIv^c?_|Zih3|P|=nH(@;Dn4_XWdCQn<*R4406 zi2A0mlqZd8z~oBJ6DENRL4wSM=dXs!;sR0gdbrb2Jpq=PYDI4(Mm9E{COC~aujT`Q zw@cafj~pE^bLBcQTG-&PA>SEfwT`e2X$6Jhy;-&Ga@}Xx2gE{`P_%~pKjw4nSti~> zrPx$wl+f-;M6t9MCkqIYQBlQ}Qwo37m&-<)*tm2tBmFL8%<9Y|epsy{i7+>m8>GUt zGaR<DF5Jd$z^p)KBHl1K6l*kYpTyXLc5$p+YC<dq&9dPHDO=O)Pt!I+{1~h=`vDOX z_Z#fAyx@i3Pt(bA1*^q-QQS_baJ%<feMI$Dy*AINvanbp-rKe?bFodmcM{IW{wD1x z$?+Ot>gsS252NDFEF@{BErh^~I@29(NLW?P*-!bZ&4Adp1#G{zZrh=G?^u<T54X)p zAgF9-?g=6JQn7d=>g+h-EtD@y!9rtxyZ)YgaOvpu#tX6d1`^Y7{+hy9yC26_ykGOC z5fe-<vb3JIi?OIHcZVcnFAWFr$T=WL8xfnOIL8aMnZp--%OrjJnt9UtiIdU#38|}m z*9Vud*I;M(k%K=%6+xjlz2Dm+19tuz;GeVm6PFMa+XBnMA3$UaWC>;e3*mPjGMH$s z2pG|W@Q)BQezLqz$)_T?e`*c=yiU;i7w#-QMb})D<4yMs652@X-9lFFGzY$3IY|qz z&BowJbSqH?k%6Ki9<57^+Lt)+H{?~Ts~~<AtDeN{oeX2(ddu`SQs`4tVNwih(uZyB zA;V9m<I_hfu77=RX*i^xq+CL&(WN7#h5S2Hk?AziK+rkC5^o{m8LcI)C;K!LsXXT* zuIGSYxH5d;XO@r0aj`Evhx%6|S<KW)C1r+zmSJx(F*9K#V<}ES%2;k4_+DTn3*3q8 zE^*Cu;dW-H-^e752V)b>L|E(UxF5z45Wj2_Sg39fcP1QVM!A0IBt1lI_y%&S!S zGbX+(5m((cOFgMc;Xdyyz-F|*7ttQ!TM4JxP{_Ip{)bhy>{s{XJkxJwv-Qk{O1Z0) zOpho+eW&WryRdw21U3RA@o-?|*PundEv|@kZk){N$_f^4+Ke;%>gmH)AggSwhi2Fk z8krWGvD^)AkJ4z6E>d~~`eH&8y=akK+YD-zo6`_&efc646@$Uow0=z4KRH}siFZ9& zZZ;~9@wigM$n{SSKpeb_8yQLy^UZzBU@i_h$!wOyH5*B>26g_*9j2#tC<0IGCujw0 zZc2&j9(_1Yj1Kk-^b=Sz+~gy|SPDNi#c6u`g(5gZ+IR8aKwg13b4lMkZpEyC^>B}r z%yCxMN}dU=kc4Me_(6`FXZb_o>W-#P-zLfC3KG?(I9!lap(3-{henOHbPSD_r@25w z4W`?lM~d{{E#TJ#2g%5~InLwo;Mr@`E1>K|xUGAFqg=P~UM^ok^`mVey2j>P8vll` z3x5N&f(Y=fdHl`?7_Gl^ITVD}U>+o=lwSg2-cLFLaA^=Q7^)tyj;Jqk=|ejSb7|1f ze)y2anj|x`N7_KfMY0EJmk0_bIlnrY0HFf%u}6^EN-_gH(8@m8|EgQIw3WfMDv(xB zYTy4FJf`HW-nJM4HNRr@z9sQTo2p^M>qwdEvqbX>o3<h+i^5~(Htx^p$jqcs=x{yw zSS9^z;`swGE{eR-z-X@=&v{3~ExJt^d&aWzuONBn5MNHeT~3dzNwpKMr;7axBktej z6B#E8_rhmctCE{+%cE8JqXb-^%_?f#=w4dQQ$E}O@`Q&SL2}YmzFSMY(bkuHReO7J zC<A<H=C6*6?$2l|3z8~JSWfh|klf85qQBuL3FcRamp3E8XY)7tUkzg43?>QpD->Up zp}$XjM^$nzdB%yrz%MeH%-8MIvI$ft2iX{NIEFsON|0#j5Go`Plkzc%Wos^3b^_d| za>Lj5AaDLqb71FToS0-(b^bWBsBMCiR1|tt+yA;ak*6IH7Hv2SBOQcFzel+-fY=rp zhw8S7ZiDVBNc7VocA3?oj{8O0wr5S8XCx<i>EQYenFO<$g>))sVNILK1PUlL*_s>H zp{6Rx|MR||px#Ou=(mMp8Ep^2nB$I>?wcZtr@y{V6!(tk=Jnp_?)4t>_{5if?8}D? z(Z!1~-u`T6+1u%^^t>*kv!?ZBP1*|D`f}jH?U0&p$amCHg3MgfoH?{Gs4r2lL(PM} z)+U8D+pR6<yQIN)=IW2Sj`ti*Qp9V4$gqgyDM^Z5@q@{i9PW?~m(~%w<S%sXwLuGh z7Q%b9n`&U%QNPIINJENZ7&g?bP*q=M<rnlvFwg}^@6owQjr}Sfps(Z8zPv|#-*vPK zguTfgvB59Cgm_gP#WVkt@AD^L(<}dRyA!zekM*jKVR0V!xj1C;b1TTdA7c5pZ2UhW z#s8@+{G%#l>cIP|9VC8adu^nr;-U4qVjO%mjz<~(@--mXGZ<w89_^c$ts^DZNQzgm z7qN1AQ(<N0)$V7Mj{QQ}JZ&Y5@+T(mvCwwaXxrSrw&C7xztq&O?};h=;JcMMGESa= z;Njox)4jxV#CLV&`^e?!`{%Fh7mew12fZLmbp)?#{805Mj2*9z?Zc%=lf#z4<biQy z0i~Ndyy|U9hm0?#Z-DC78(#ms-KljTxMLY`EINDF9`k$EE|c2d!ia8_n<bMAN439| zRv!w3`m~$MH*A=mWi5t-TjfB_-l>fgCg2nF%)7{-P{c#_0M^I(5Yr7)V8D0v8%Nqr z^r+6t?X8WH-fD<}?_rzO8_S_vB~O(RA8vboe-#F=F#q;O>wu}zEq=g%RPM&ozDo{Y z2Sj{eUVM~3DGh%9-T;VJA$&r?=Nfhr2qU&@t~xw9Fp?Xu+Q4|D0ti)0j9A~NjQw=) z22K1UWGHA8BQDi)tM@t>5=+_T$K^DwLuJ_1)6|1Ct(s&E5+{{U^b!wC+_Gej%Got3 z^b5Vd+6qPr!}F`fuzmH)1wN~lIjK^pmo`X6l?ybaBmql8|C)cPyql&iV=x^$6L(~g z6+IiU?fkMy?2U)HS}<)9f(xUgN^UZQEAn5kd{tww6mxBsQFX<txD&fryS#|BE3-)x zWxu{f#oRI6jhwbCyHT(QPHhgLn35p8i+E0J7M}(EeKQ61MBy$~Al#{ED;?(5CtAvJ zeQWqieq+a|fCLwb?Gv}BP9sF|rcKYUHTbSs*DaKC4P9aV-KMoa$}PS2MVk0Dy_)?2 z?;XW)_eyFYFmCgubFa9J(fm0|s~W|0oivh!n_`@f94e>{O>RgIWpcz~G>SYhT==`s zFu=?M=W}(;0xB(BoL$_HsNE)*t0?$}KYy*H4a^!QvA`&vVgSZXBDEo_DKNUrzxOSF z5OGfY?OQefjH{V6ld-r6X%p!naU2jUK2T<X7a$(AEHPspPGV^M5g%?e-0f;P7ZSKr zVCM7=y!kqlk{ZuMkujT|RNO*l4Dq5H1$N>-o5-YQ6)B>NxeoG@$(0CcqM09HDW4X% z`{d#;PdP^=H!6H_jMdGBZx5aEkzh|JB%NuDCCvR5T|LDTKIw1{Y7w&`t&eI{Zro2+ z8zOeSV+du8{<j479$+tW<<6{Lf?>XFhtX!PB(n+KLUA96dtoGXnxhcnVbc)lLFX1O z;d87K@(^)j4yVsJlx-|~mzoQ<m?NPX#?XA$rDF(`zMRr*U$T4>Y5Vmpne=!K5GlMC zZJ_#yGv?dq?=QPP1|p`r(~d?sC9Sx|Q5jJoHmuyFvIh7-rwkwP8{~Q3iC52x)7CBy ze9d)6(3vKBgeDVE{;v1!HLB6X*$>LFVz5tw6cBwZp~;>)jkpnUMqo;f_{5-yDORyr zV79DHP9m_{Pd=w0nAG`hlp_?GlQp<GXhIWR`Z$nhEX)RwtzBXdRq<rr9Q2Q;%M&NV zn5`T~TY?m8#$iP-5*)syw6?|{#s^}|4;K(})}e&r<+3<HMB;1Gyaa2Tc6z$90#1`q zkKoO;W;tSh2ujF}6eue_?IzAwD@o-ui?c_l&>3^^Nw8v=h$MB@si!9CTydgFB%^Y< z8`SssLKR~hUhoS_3J$WUbVZqlL9wq&o<BLuSOF!;yYev3oHJj&SMlL4mX2w8zm>es z%f;}H6`MKnSdvFWo!AI!`!;6!Ns!7%d@6+U*Nb+8!Xr@dLax7^Ph_koIod+2%nzub zQ)pC|oS++7$h_C(q{iJV`O?#|BR7%AX1lBU{=~w)l?k$0obLY6(iE;ypQpRyiLOG2 zHIp=O$V1hLXw{09<bk^vB&+gFwIDw*-N4x>Xh_O0#*MBj#>05&kTA?)azR==Ciaug zXPVQ5afPRr&&Laq>T=c#ClD#>CA1F7Qu{4oSXgcChQ5(AGtoC<-=#D8j=Le!?Bbjd zAy%)uS|0T?{$>Wn`0rXUl8kSoPu_^#ay+};C=ExOe#<ifsp8bgFLRmJHlql`Vo_ge zi-SLDGXT1={XgUT70Rl`rUC@op0oPFX;IE(=Vg)i;T3ek%WXQes8U@i33T+kt&C1x z96sXX2-1$RmZ;j4rE15ezw{VG>3kb?AJSPKrl>7($?#`d&CG5gCVtSI8($)Oq@!L^ z1usaDJtJu(jsV-dhymC!u8F9MXN;?JriETjEPR9fog8UWJ6yH2ZDg3R0@IdtkI+7> zT}h%02S9;dExk6G9|D|qcj?~zI0>mrvB)X8zkbLa*BUt*=224V6o|l|-0F?-s0<nF z<afX{w|v@XZpa(u)5g&;(|))cijSxrsq^-&BUaw3$9SY9LOqh6NODLE&?h7zU8OVq zcMKt2l`~{_)X7Te`7>htsBBO=<6?#ld<MIDAeqvi=~usZQzT;N(BTA1XOv$YXaol5 zw&*a|1>~o!+@iXwXOJQ0>q*6t!$Xb+j1Avt>HxRDcqmres@TExUMI6#)Ye^k5XjM$ z1x4>fLa3Ie(S!ESZ8H^uX<8vEu9Qn+%naZ)XYmVh`s88RETq69c%YloYn_-0kDQDh zZXFltk)1VdbzhSR81iDW08!<uCyDCMHkOJR>a!+8dv$jsx>_z2I`gZGE1MnGQ%MAQ zZu?^*<Sk6roZ;*Vl<E5Riak!?-CD_|V-k_5I|AD4Hk8UznKVX4`p!u?6%v~zJfqqj zYqR$eqqP}Wo5@@mnM*Nt!bn%X8L{;)p^s(tP)W_9ed~wq>4|Bt@e<UV^LWO}xKC00 z4e^HKnR01N>bvx}2W-BA-<4OmUMtFZx7N~^KPoPUo?<X-{;2G-LP5!)YRXR9#H!Iy zH_3=e?kTRb4i<7$W{RU*3!Vk?m3eHf2)jgGbEb>12tGqIfUJL$G_f-6g;bwU4#`(W z6X-o)bbLAVEdq3}a4RmGhZw7pXE8sK?{8;I5uIa?k3?y)&RP$=at%V01$1e#qsb46 z1_itGY<+_g8QC-nzH-YmhOJN9_2u=T615ob)>eQqk>gV0xdDas)w*-O(~D)MHU4ZA zuq4Oo7H}sk8?nun?uw_T@g$|EK9}4D2k-Z^b3BZ2=~G)^9sY8U9-5|ixZDt7Z5?WH zIY7TO$*t>aCt-hhnlE_t1&s|KzjtQO!~#j=1%PVeQqhzKjmE0RglTBMPy9$OC2m8j zKbqI9?!S(T>mcnXujAS@LOu0ZIJ4Y%8Cx-tf)jJ8m<fS6gK}29wpwR_<~f=k9WijS zfU|)Cr!67xOvtup4W1k&V#kBR46Wt+VJ4XVcvla4WO=)V)7nf}o!ia*-D;hHjTgy2 zCcp<$pa+IwPC<8YXWUM}lY!>2QaCriCd+&oGs7oOH6JVJFcr`GogpM`JAN7C<~KRu zqGitl75sf)t_J6Iq8I5#m=!yv*d>4>D$-VZ4#w4Y|BG(D$kO_JyLF1hdP`asHW5&M z=g=DosK`pnvFB)+3=75m<8+P)eJEj1-X}13fctSm)XXG_l6%numeCN!Qn$yYEIOq7 z<^Z!GU?CGhS311<uWr=0Y!q)5rJeXoGx7oH{y#Un85n)e=8#&eSxM=`?jZ*A$K0J2 zJ2;F}HyB+YcN>WgBeU-fhH6o}31rys60xY;YJJclR2eulcVtN&Jh&H%b$A_#mDw0z zXOlJ2?x?JL2Uz>TpjF_&WG~pQqHaS|27a^6Uz;FQICm$JO3h;k;~njh{>Rmk9cE<B zJzSJ3$nEV1UcIR+JmCIOQj0sIH_{z~r`;2Ox4w%DR#%VX#Md5d=U=*g$=BxaE4PIG z@{seZr>tu*=bZSx8K<n0Wqge<fDBQm=x?>X&J8b^C5vXti~D0rXBh@ZFzdm*OU(QR zODGMz=77OGu0n--UIX5!_&T)e{w`mb!k;r*`kd|n^LP>Wl?FLa?;<|3xy;m)Nf}Q9 zNyx@F(ly%V<kr+T^8G7$|9PTnp+B+?S4ULCiflsQf7izqGqT5ODqd+EM70c>6W8*! zo-eIG*<607V~A!@r?~khNro!``n-HSmSkwp^`K>nWJsSsiwu;^JqU!3ol4lVXJpwN z-@82kHj)mFdGTw;(5bUzO_}P)SSHH^m-4eHDo__jvGl(MqYO4qp}|J5yIkJp-75iV zga%&R1;fftv6;V5xoRnC2nL5FRbeMRKXC*{M6HG@pSW`aE6XPL?mJ=_>?Xyn$8Ew- zex*b*jFZsErI@rS_<(WvV0m#=pYc5XtaXDK^QfobHz?M;DHGLV9FHFxhtwXg0E|Tu z^F}3lacirmB&@Pil~YjJdcf~QbP}F~p94ip%I7*(&r&F1k{60^ymamH`wJJ$ZEtVI z3;VT_Eo=qqS)&jG%cHgN9b{Zvv>g_HZAK&t1j9?#gop-d<Me9u8GA5aa-bOuHMN-t z_v!KnQ{v!Ym1CRNrlB71w$W_TRPX43ZJcMa24dlP_(azKUZmAh>A<hE4=jJ6M{15e zbqXU`ObwZjgIu6_k@G*&YP>@0;P<fT2VlbI2B$@K4py7Ck*CkzR`HKp-ZK0V^OnE$ zPT6aV*PAWeoFz$`VypE{-e(<d=YglrH>;q1h|(07HWpV))=!g8^0}oNQ*Lgv+g;}K zM@T-pshHZoub^M1W39=4!>EzKvePu^z_*8}`_=|3GeUFVr)kW@<g?zc3QW<4W4#4G za@tBjWE%=JNDQ6ki|Rs!a3#IHpBYwLDHhn={mo_I1!1n;|K5L$GO5FVT7jP$xNkNC zNDIydIVne^Br8r|qs}Wz(6HhZve6ByxIyTtMHvz8cn$P)az|cx5yH+Wj*kB(t^MBY zbS!j(a%eitIEwfZe1^J>KR(c!63askdM+8#n->A$X07~yTpp_DtNDd&L_}KBLrmLB zT-s-^HE^REEm;FlG=+`nRb(=O%<PeQ!PJ<ku1yo{!Q~C-UE`l$qpex=0CT8Y*s)mC zS+}truy3NouWQ^>(EaMU@~}s^cHgq(f%4N{aX0J&XWf!7Cf2Tcx8Q;!qwWo%*uJ}m zs%dLC>cWq7?Wb9NCV6q@u=$cytzs_eE4|Cw(JxR}H2W(fZ4>e=#%r{iNq4%;#iL5< zn{t}P_xPf<pVpyo#q4wMcn({|+A+`UYsv~o+_cAfl9-uCTJlGHoSzxLAq9NAR#~Q0 z3{DUw>nz{k37|)gxWzDId`f4X1IzHQW=TQN>;6&;lQuf%dLsUo;0*3fGpt7*Z9QJF zl}=Drg>wZuM}j&R>x#A+$f}vQ_GO-}R+Z(Ui>*nsP)i35GnjeuReY_TKRMe83!#?i z*1Ke|+ct|Cs)S}W%yBtr$E?!p;?jOsy2aHcGipG!cE+S7u9b>=1?wcDufGTHY!+}H zAkSB2<XwzX&F5k%7xQL%l(||bw}p9>)19DcTVw?$+p~ci_C`-Hn`A!Gc0nPZ32}fl zTA{d{Ne+$i#*@p_-ju7%9eXQNOo#>&T&k7@$2jK#T`Pv5&xx8vUF~|VD%2&vIBEf6 zf`Is*%m-*7l82mXHoek1)HCNWAJyO1KrBzzM3W=IH3lrEym|S=-aJq2ORPec$IISM zJ?_X&<08xCPO_F*+Y7|epL#Nz;|I5#2aiusgxm36KmQOC4v6Zd=@<RQ-`d|$;~yu# z3a$2i!KwHb_b<SpDNqvQUqmnDmhyE=AQeUuDpCFp`@=O{;;^Ch&Fo-t3Uy3Y@K7fw zln^9QtWY551v@Xri>IP-2t?}%xt$yCf?OnsXg3pbPGJY}GOJG)?fh%#2f&`HHjzZp z#H&<yeNyEy1S%<k0+OgXQSVB>QOY6!+|&VSo>HE7?rY*`(7C|GDe8B$JwC&TZI@8g zNBBfo*4o~DFB)x66!qQ6f*U{BdvITcB1AqaxHC;tjytqY5uxDZBptnJ)@5rR{cm(; zjvSS_ZU5L_8`K?;m7f?s)PKbA|L2s+f0Kf$|CK}Hf62L6Nyl15{O9mjxGDH4ium9! zYFd($Y3^+wYbO1|c8Uvzxa`8-C1n4*pzaZXV!Jg=$w=DWx~t-pSJqLM>+9Q5a`hLD znj}d=b4*%`KhsX4gY>js>jQd7&1yR3kmLD9IaNjhBy?*ITGrHBX46f<+r6Qdp(MyS zZlX@5d;v6eD~Hf^rYAAypH5MR(iZva@@0!j|CJkc{;U>RjbxS60dK!c<J9W2K<Id= zqiZNhKc+9=>G`b@X#I1!B&+Y(-NSfK^kb(HCD!EhaV&LQDiW!16K;Y<EdOmVG{Rme z5%-I~8}L{r6aHir{muMOG%b|wYy(pIp|VJoQMj=Ev$E06kpsQOKL6aT?d@_wJwJNV z(a$QUG`%K2-G1sS8|v-&(A?!YXI){@e%4EBtr;imM*!uahUaP#J?JO(njrF6U$Xi8 z5aK~psQNk;7%t&9$wbN29NTynkA+oZD}fjPbT)Z_W*o}KCF4WL81qB*A<KS@d^MVQ z)r1oJZqsp`n}DCE=NXN=$CI3~CWPqb&L7Wvk$c~XzaLN>{=&@%(0W`_to=QQdlwT} z{riJ_w^WhL%V7O_v5Wb?HsitMe}ypx1K>!oJraKAo(w#0JDU4Y&oPzGZjD3?0w4AZ zj|oIj=fC_}v?h|A*Lf4rx*$_=Ovpf6p+ESd+al-DkRCz@07GMvARD}CJT>-`qSBsg zRIO1h5F#<1?>26EM*=TAho;VslO-8aq<W$-8^#TuCl_B!>5F93n-i$|IymGM%{^qD z4E`EG1Bo8Yl1iPKCx;RrdIpeFQr-8=_Vs**{MT@arxw+y>u35$-sigCf3I*-{ol>p z|0Z6e)!#JGHBmk`C~8RP;lMC3Y%pk9Ah308tWkBoeIpkp$q^AUOVEo?oN!p~v^`LM zfp}ZX`l{ozI(N0`X|+{A<jMtHjW<ejWp%w8Ur*f{&*XdEonq>SVh-J~xHA%oKZ}=> za6(d@03u(Nr^MvIsv3_=3F49LL^B`ur6j+Gz&M!HLN?c642A8}NYBzHksbHgV|tPv z_sKw%4-YS-MYv;n;xve_9bQ(L0|_6kUWaR-;6nAaIAt<O(!8zsS=}Nbyd_$S^izyr zWbwARZV~J;JDKEU4Gj%DgjXq***gPJLnCR@;XAi+Jq$3Oo2U=&0;x|v$K#m*0p&$! zMfMRiq0d15GaG79kYTQ`NWDVVk8FihPQwRT?aL}0Z91vJ5u8Q+evX58DL}jt&dV7j z5rCowvC0uWdW<<j7Q{>Ur9)rV@F2@E90A)5G<>u2T`e_neti$034X4&FbOI2Jg2P^ z$9UgkR)XhS{%%&pYi}n#n;2`%)!|bIjWMSzf@Y!QsNLkGc8uh6aVs^i7bYIAL`^A4 zXe6%pOz{qf-n0`eEGCiF6ABS(*4|+HjXd3yeyB&RF8^m(r;6R0y9^5=(O$q^>)`Ya zF}28f0;#8$5gU)x3bKL~b4?*>ISF*1lOZ^$DfDXut{gd_%?9gRzi8=sweD4ba%yi3 zoUACU+oW)+ciAP+pNkeqfwQag6p=?4@vKLN%Tu-hqlM;+(TQdPCKz|AdwW*B67;y< z*y4B0xV1hEpBI9$<-JQWcf$kx<g+f2zM|oyjgHg@W>83@+h9@ItvP&F`Grpsj5|$X z@3g1L-#fyMa9@9k)^U4pQ2z}sOPQFYfG9NI-hvJfPVjAA%8?;zYOeFr(Iuhi-~ASl zq5AM)toZd`&J$sb79h^apN~ETLfnJ)xcXeVuc#fJ981G-W*wJzxnN4KSZ%h11?i?% zB)=k?s1S6Ajtk>6&1ARLa2ahwoBNrcv;Apx{d*fqv&r*23})8<JVD3@5Wd)aLA1Ab z0el&-CWOeKgs{eVF%%I3Kv}sbJdo^WhUfa#h`A8Sm;i|o!$pI$AQr39?MZE^4R=^8 zryvM<S;DwcDhdqK>{<fF2I=_31@WYk%}b|dp77=Iek$effU^sU2U|6SNbSN?yHuj` zd^-bEC`_1gO50Jj8nIeqYoL>gBOkrS={wm6<NY~1HPaX;MYubznj!G*v6Bizx%aEz z1uu2pfHz`g@I4;&X!HIK-|^@pK-0gc;SU+sZ$l^9XIR<Msg}yW5ts*%oQYdT)ZNgn z(YdI+Z7jj$Uix|Tq0St`Tt2_60~zX$^GoQgib+-^<CWtd^LCKs%7LPT>EB5Z#0LQv zJ!%~kw$2RPube~SKd+HC2fcK}r5A%ntIPY|q5f5Uj7*pbX+A3t(x=Dr@2k(hjrIEf z{S{FwW4HeWZvJDhL~B^<qHALKLx1&Tjfw!9Z=tke`N3PMQ~6Dog>)9Gp{~IQ`==Qi zR6I^bs@92v?u8AuE%t>4*Trr!qoUX=zo31$+cTKoU$8fDzrO}Pm*i5vg0BxYTaUUP zGhDYG*L{wvKdST~YcR1XDnya{1(_c9z{1nO)sMxqgZ&ZIauJYafG|O5p-xJD{Xnt4 zd|*@%a<~$Ye~ND2CyKvtjGB8RI2jF#N=E92n!nCYNlHTk8Kjs>`pNHN8B5pfgh|PM zVx1KDgAo1b2#T!y6ghSBTy95%U<bKFU|?A_ICBv65yzp62?~g|8ri%V<dIA!5)1o3 zY)*VL*t|1PH?V3*Osrz!Yt+aNqpX~%FxAl%WTZ<Z`ZRb;5o1dfmgNdzrfGX@aa#j^ z0I5xMV9mJ&IE(mX*ljgj<~q|*=PDL?P%7h;@59Q-X+meuwA$jV1i07cxyirf@Sn+o zNR8BbMq5SD)JJy6EzLBDO~e|}FiMNQVGY~^RWhgP!NzXiY(w+;&`13}W7?(G@KuG< z=S!@u;j$YO{nrLrcU!kYs_80(u{KtgGIh6i@?c<+RHCj}&Cy+itMes5Z41ttF3nC^ z7QoOQ?NEEQd4wqzd{bc74rG}Um`ZhOQ{F0JCbrZC!>QwL#jsV6H`rK&^S3Osj<7ve zjEo#7R)fAVgz8}+X7vb=fC^{x*A3;S2{0W`k)@*_R7``8bG0jgbG64kvtHvjEeEY8 z3lAtlpN{@vBM0$B8N@2sgM(w~MJnr<Xrrm4IK*8FUx$>@U~X0WBMSK@E-Lm0R(d6e zlUzOs!zyf6lK(PLe=C6cBKfOt1p3!exuBAGXQb?rCwxN~nDOgWcQ#WBma7-|NeGMn z@o%iYG<$Rz#d(O#dcSTsx=1L@d?T+Q*e5=e;7YO%jkc~!u-r?&L}mxX<m<3sqzowK z%!iX=Mu=JrOt>gA$}R{LYP2mvR?yUbAFXgI2;)1sSXpWoniX7j{;>r;80V&9BN`nN z<C7?l;AY!YNqI~?9|ET*2QHofqe^CEEaLj)(54=gF<q2KqekQJVw44D=y3dVP6ylh zB3*{<;#j({yW5sacyVeDZ-I*^GQ~zN()@V?w{1c9WS)AvF0k&G%~wvW)pdIF;^rl8 z$C@AZw<Ar{(VvxP#YJ0}z7uDuXnAFG4rg<1Q?fW-!C91K1zvqj1SCfuzdAosKqo;! zwDg3t!p(%;DjUf!-6n7mlI8CGCI-sjHCR~PX-I2mM}v|^*SIh#<k`onVY?VX$KAcx z5s)`+H!nr!oSKh0<`i~-Kj`*Zi7epgKIV>M)f=mZaMz2DvARq&!u9aK_79BLohm7v zLtIO$)?1dN94U3ch0J;n?C{QWcsNnI;c9kUnJiX=BXESMO?rP1!+F7^&(AUtv=L=j zDZwtOwrYde@$qbnTa{UA0m#pfYJW+q4e+Lgup4D$j7(4`UAsRtRQAA%O#lAP3o2`@ zggWTR<d%urwlqbouzQy^<p;t*(x^1h5vdUC&=N<jG0gwQbAH-prI|P=r1jo^YN6h0 zFHGF`)KU%EpwA?mDG1l0LI8Y5(-RD{i^A-Np^!4jd~VFozq{Di6>4m%=gKk*L8Aps z<B&w-fNZoFrTkVkWdPUE2(1^Z+VD>EiSBLuY9eRTHLgkjQpMZ|veDg0D-f5ykV!~8 z3EiEp2Ar-Iy?i=g;jX$f)W0!^JIouORDfP(pZva9Dsip=#FKZ&@AWra!y@c-E9_V( z?6g}t-?jz(!-(yD5KA*2nDmfA{#Um5qDpQFwl!63-%$6sxqJPs4Sj7p*SE@;?~-&T z?V9RfQH1rX2eTnBx^63+$eHUhKq?Mv$3W+d0?!Gd;u0#l6X61(9ngo+j>8LhV0L3Y zH$VRBFpYF5_Pd?!k!AgR5LzbsX)A2u$g0t=Yt&}e_J7`80_85%L!W~JlL-H*NBmFU zU99A6|4sM%xZ#^)e)zq<Sa?!hc*x2$7od=2I&jJ-3li5L4ss#_q>0c}atbRGHcl+k zR#uq#bYUaZsq^x_`DsF6hLGl|Sj|HH1{r4U-7s;h4L<HY4LtH><-3GEPM#NS6!daZ zy$W2uZ5(-CZM<!!PYEI$F&IRcU?Lbi{88CAPr*(|_G76SlET=iF`@2Fq6VS#hXpEc zI;wA98-(|YbHuy>V*}SPq6VG$Ht|5OPLlXnATR?#;+tM>tUZPBb`1Qe9S2{jUI944 z@%dQlr;<P)OkcTP&|V9&r__4&b^su0=U1TO_50^wkcn-!#x)LPw)!;><WEdrgI(cp zCK&dMrOKwxqDo!eyHCdde5?3s>Ax6%@P9G>?q6?l)R<|#K=|$xb^7S82(m}EAt+s1 z3mlc_7Jk3Y4q5tG?*ez8(gY~PXWLh(5pj@UDHPC8x#$?B#n+ANXPabpNx&NaKg!-Q zNRy~**X*)w+wQWvY}>YN^C`2-wr$(C?W!(Yr{43$IWZFx^PQQ9{Iw&0W$et@xz@F= zd***)c{FH2vunN^_6;IpEinIT>sIKF8bn%>Orn!7n;LB?lcYO-(x{N~ZCGh8*lZSb z80_WVa81l84Cu$52koG4@~w905znbGI50koZLG^2@oi_rXc?}LI&E!M@Di_C4Z|CV zYR@-2?X-mIAhM`=l^CZ)Lr4(WtXHrKx>j~FaJKC3M>87|p1FW0zH=15u{4Yq=SS3y zCH&T?OvB1aNQyJayo$O1ZXMrZ7HRz*yQX{tEi}L(`z~Gx6HG4hRDo2|S1@857QMjI za3gQ&m^p4+PDGFasm>-K;*`r69MHwsB)b(kXSP(bBnVjj({_FsZS_O=^DuYOXfW~W z*ZdIvXg`EMd<qQp&yXkevO!k_t9r%$Z(Vw^ln9y^XEI0XYSYo5IyOK|*&9p`jl-`v z1E-=`Wmmho(NagVtl?JfV!iB#@Gsw2;Q1l^O|CV62>&K4aK#}c9{O8WG`Zc2AHtvF z7A_!!w);%^zX<>CvVARg$^FuZl3Q3Z;UT7|iqu|*1TLXzl}vqAL(^Z%jSsU%$cfb1 zLr%_1?W&E?pe#B=EgGbgcKpLpoin2_!mM38IA~SKJ4ouTszqX~L+u*3_m~u9ye59z z^1iyg2Zy*~S{ZDbYUu&7`y%D6RTVl5PR8DRBy8>>XF#hcIX~G<<{ne$k2J|^uh`tz z4Gkx&$-pU@%LK_EwF;%0p^00kNYyp#&3Xq}CxvSIx7s>lN=J(mk8Pm^9VW!oJmD28 z4YM2p5D@Qd3bC{tG8xxcB04Oa?c-=?X}_=Rww?+KLS>4%78<<jebCEPze!75k32=P zQnKMl2f-Tdk{Gx}UE^>MnCjL3aMNTIQtJ{Cu;V00=pGjHCt^;`6^HT>Vsxc(>C1<r zFX}wB3Tv+XdS;B^`~;1}-hC_~!s4t{YsPG8+dkbEkTLX18HTmSTQ@sg3lzMr*J&v~ zybn}5_hu_1G~Co&;>4I(XecsMTGb6^(KVBIo3{G6%daz6J^vK3MV|atwUc<B`iw9y z$`PtKqfjD^->rk3_0_N`**m>bTm1LG5q~GvZTJ8<=XC+M{~-RDVWX9pVuTBvF+Yeu zw%8BiA4~Fs_zxqE;fC>?kJ%ajApV_E_?j3VT&&iD47*vY$Y{{9wmY)o#Ns{4h=^%M zh$Fd~e;RuZIw0|`+~MmoVo9=<DQ1Nyf7y(AG)n7#L6MTz5&Bz5&yRrOto2m{UL?Xe z5xoTiaMA}ofD_HpM@1ClC1{a3qQYLByL%(mGZU#e0jN1Che?NERCmQkjE<}{Wr$^V z9+;AjXGp<`Fl%`*76y5dJVZO*^v;ZgG5SLFO~ttt)r8XiMU}fY3()j@iGeqLxg5Wn zO7OSHe4Y2O*^%3|=aV;W3&fL>6e9~$<a9|V9Ov4{AaUka#hrmC5E8GPx7d`{FSrmS z>)pM%^04yRC!m~3)fj)zr>aW|zOytYHuR4sN5QfZr)0-WI=)18CdKcGlBURy(&TM8 z5LML>$0UmHLMT`A5B~BE7U&Gcxiz{Rl&gi{FVZ{aA0Ya`McBu9;q#Rcd8XO_&}7+T zCl1(&2zkjm?Y$n7{1C7nA_$4(2Y|TiYy$WrJ8m&<Nx!JG`*#K<K6E-m{p72@7HBpU z>b)T$Zs6-H<C4AR!Y&9UMz9}@nDe!(oAP5K{S0856`2qcx^3Jsl0TyNp|s^n2wfva zM(>+YSMYBkZF7}UdAKCvD@B4oJi#`gD5$9akl}S#WrRC2E9j1Vu*b!%GKFl#A#?u+ z^{3nZrq_>XXXT2dugmyB{j;g&IVt{w`ZKKi{O$ECIO2!w1eiFJPgYY&idh#&jl{b@ zH@>zZEm&rJN7`H^(QV-n3ypdu&qf1R=Pw}dI}dzoscc{<MRzhIe-ixX|4b<p?HlU{ z^~e8jQGc5Mb9G3@#K!P{Sz)7<b(|Jd5qaxFjwp#8r1_xfZ1SM$WCF!;BrVLLnLrgY zK_T;$wySOS!bcsc^_T`2&S4O)q>X-GNfW%!5-gqlORm+?NZT{Hw!HqwY35e*In(3! z0j7_}pH69L0;}|rFr{X#df#fWZ?!pjfCJJZeOPC>uT@#sHg(J$Q`PXy>*XfBITRXD z9^i%j!04QT4c(-+-&8Af=K1vXwcN$pek-yuCm&_Yv)6LTi`D8Ic@4ZrU^%+w>Z4X| z)v6)69IF~FIz9tcwr+tuVLbJil~t?b7HF3Lk7`?1$bCj+_s$J>@hD(psaE|S&!R<K zSP7ql!KA~W#dyOO$#uo|kL!j3DY9iF?wBWJjWYh#-06H1c5hoeygFXWbt#i{55xC2 zAts?@Dpe8tD5Bg_BM1APbc@!NdyF|(K&W-uhoI2*m1w>NhH~8+)ViQ#2^QMyRrU2; zI7{YMV!lHwUCe%bs#g}HIY$P)pEP`W&#)z}ckny<w845mtSQ~3!QWYIrnUeX7=)WR zwzZhClLQ&-;OY{^7TOPgF?7q-=Gq_+n2w)xDX47C)q&0cGxR3`JO=Ms$I=;~CEL&B zg*Z!eP)62OVP^rF8BYGN{(~)q8P0ZHoah^Im@!qzA_v024&lO-=5ZCxF{{0h>3>qX zdaN#e2lWkp&WE5Xb49Pmps#$qDMyVqvBCRmNR#U9m2O5z%!65?$thXSTqRrr6V+j1 zVbzW7ivoxbwD?~8aIv-)4^7LVlDK;9chPtzHG9aPGN@+=q>-@vV0XViuopQ?rX9>5 z6sHrr{^;Qkxp0-xT<5A(<C7?9aEUh8d&7RRt2{ETX=D;{3#27t3I%jh2{P=XM5yL_ zY7dt9-=(T4;WL{hjcjT}_=e6HnP$jNb1A*zrRlvZbE0J`%&I0K3Rx{~9<{n>)njp# zkRk-9Q+sAx(o+V9^Q~Z{L=IWJ0N+yy)=Lm!D234ON~XtID~^(tw|Pe(X2YQ{6hqG? z3Zg59B+ZAMN)VZpmt_(g)1xaEM?qR8JEo4%Qd3ckcFB}#;42zEEosXLFv<$3ONgkS zBOCxc>3jEcM!z56jbIb6`gr=>5mXV(ICGyF1#A%##~ijW1NANk7@onlW6gASSKI>o zcNib^!uP7)u3+tL;r37sGp#Ja(g57B1~mH@|HZXtoqbmLf&BW_`txr8zt>&J{?G6A zf1RPHe11I7OOMZ-&$6bv<P0!SkpYk(p_fGULaR{k)z<sK@MFQC<cX<iwUn(ZJ~a`o zMCu}R)S3W)tF7AQ<tkMhopP0mWu1yr!X3_Mx_i^#iJ(oNUp8rOJ3i0ZUVncUH{btB z<-9t~4E$moOg{Sg80!uYC_0e-d)@_NXua|3ew_<~=-O3a2Y!Kg6}yQ&B*6GCyou#j zaSuL5D$_j`91KpWCZ3W?ZYQ5-jqiI-(~T!<F9cY}7woxryDr%Ws{KG*td;Zj$ZC(f zIRh;56@cvY(<3yGef!wcDuaelqb_;Mw?e3#(+YrZI)~tZ5i8F$%!EjHD0?yBE5DZn zx{FaA)goUVg)E)&NMM3Rp&9^`UOGD%pN?4y5YS~(hm}AP8mhJa#l$5Og=EwKG$c%~ zVqu8Po_dL<G^kvYN?z<W1k02NmVSiRFoeqh#jA#LuU=ii;=rPJVr3XWj&5m)#I8H( zjb8vDTO)*h8*zYxqZm@`);UI_fc9f+6=qec*vt7Pr9Kf@c@xf6UAA(=2j}LnB>At0 zS_V`E<U6?4hQ#Sd;YR^DX5r8XZj&NaX$)UVS3fAa(5%)i0VJ|IM366A83vKdntaI` z?WuVTo^2k%%4D9QnE@JDZ)s#Q2MV$>$fu2Ll?FrBcF|MJ_Z4Ndhj|%R2GPp)SN0_t zKDCPg6>W|M<kfq5Y)oxd4SgilGvG4X{erg3gEHx>`GBgmIBHR|AhpeWfL7Y~&r&g9 zgT;Y+XDbh|V`<ny{%>(m=O=!5a4UT^58%b(z_9R{MgGr7!_6{3`TBY#cz)8hd#wNf z!E&2Rjz2#*knS#w5^K5tobE1-5^J>&WqVgho;^RPE5lO-;I|)QPJbx~6+YIG`H(>I zTOM>uchAo0%mrYu-X@TL<pWY!Z`G>3L{Mt#D{CzF?b2U5$aPOT*ja9i$+zbR`B`q8 z$+zbQ`P*(g(%oa59=gfDiU0_$M`7tN;wazCgCpM0P~YC=fSK0Elk}Is8a>N>8n*it z*q(3meH`0|D)J|beQudJv(H?>XF5kNfPmFOJ~3BfvG7KcYT0tWXbg2e%(>x8)uWIC z?nz1}u`K<;kx3@8oqT~cEpJRZuyT^PV1hn<a@jbByu-3SgS^A4UW}~}07Jz%sx9-h zXv`pUY;k8V^F*$f=)-b$V5KMXL}E2c!jg6!|Jk*wgpP=7LX;B0qER`9Eb})(y<R%; zC>=Krjw^#-2cDE7A*h}xs4tl+%uEQK|CE^ARHzv@8IIGC_@FL6mv+S5v66hGX#Ca@ z_?|nSrh<i2A~8|Io>L@I$s^7JpL2`EjPP_pDDRJx$}9mqL_g#<m!G?VQZzqusX(t0 zk~Wc_&@UpdWyx<#Kap7iO$8?Yd2IqsCTOB6a>Q!eYP*O<_E5ylKK~x_*{C>^MjOB) z1PwZUCLci4Guq4vmCi26@9Of;z}+8axbOwQG&Hf*3P;CGIf7WJ*ZIdA8j)XNQJQCL zloyYuDkWl>`rIYLlJGfjQ+()o1X_G3G&xpvswE0O>)$gLh(O=tzoBE!vuRg$`6WU| zR-!FvZ8mU9Q}w0zcpPP9h%tx`&!=zlKE||yE&0tp5g75B71&n5lfpifj3psh+PixA z$`Q6dlLHv985ghHmChpP=K#x{7-2F~QBq9CZG0OoX|rq|8epUWL7m75lr`=O5h9}m z{{5W!%~eJV&Olmf^0-1q7?7z8LeM_fOUpRO9Mnn<E<{@>(PN0!zv2&G!UR+Nmdl4t zOF$t+p44UVdpFI2s_bkK)TT8B$I?NfvN;5|YBj{%RCpeT(y^ICx#%wVoEfHU2^7|2 zi2?~Sj)trxxM~4|_S8-3CWagv^ZqD9nm((Z*-EJ2sgJvs7G)GY5^!QrWagvCc2M^N zAA{gWVaBsy4H$|6!!GP#pBJq@GaAuTG}M1vDm7II${>S@ALCun?iU*rSU8Cu?3mRJ zABr{-u-_!Y6%#0UaW`V#r(8K0G;%iCvkXHUn%gNkGbCWG#487{q9jvWeDM+u#l^7E zsZ}yoKMC&JMtirF&AcN+{$lNkHkI)twf+?`nuG(R`ny`dm>P`(oo2(dDzQJQ4s7n+ z&h8O46x_n6y<{$fwCXRvDnXqzH_sxnkBbMltz)=o5`4XP>yib(YXQFx3HDQLVEIJ) zSFk0%2-T<0JCl(>4%)Bl<L*c~TN`7oK#+}M{-f9|W1G@bLb*~-Wzihzs9d&o8#jk% zVX1}}E;HsfPj^BDi~cKLJ14i<ij#!T>j;0VtVEzI3tfV^0srE`<HmugSUk?yq0Aa; zd66+@yBb)#*Yl4H&mQBJJ#h|FMYQkc*7?A+eD5BgbA{w2eo}@-ja8J=yXoV(P1c+{ zQGz6txI~f_D2OD5ACuI-74zXC{LAC#ET9Ms?z#DxxAeHVdR21_NJy_KuhA8O8_iH< zj(?N4A$hb_^&y^Gq%f&>xI(``dM!^kL**Ar#vL07Dn))PYgYh6Dz~kyVwDU8B0odV z^Rl+AuO5?>6D7kgO57F$u+xP|gzNJbxc(zbqojYAI4z=zABL<@ItaA}j^&96t*E|V zu&*cT6r5VgO9zWS>`sbbGa;c9C^e5Q3Vxb~d&Bv=@^XJ5euRKqR@$^A)uBF8>`EE4 z+qwepH%7I9nvNpJ>bH9n+%&)yjv-7la5>~TMZkf&S1P2aHS(|Ics^Aiv^2QnAjYN@ zC#tp_1rGu6?J9%G{gG=97R2XAXfjO(^&-K6GrT@EIeiC#53paFK{-2luu*%tWZR69 zR_5H7Pl}79HE^4sfh2$jduFs4k@a~UNZ`Z5J{p<sxP!_mK=JT8c{P_x%+*?B8@uKi z+N2yx4Q9&ulZLiLIWqPUU{e8Uy8RkWH?<T%^@#hbl=kt<RBVLv&OCTq>a?teT>hd2 zEGJguhLa8I?fgfaf#hERENyQ4RCD01HbTXb{JZ0{z~ajuPlkePx;Kq$`Z%YKLv{p; zLt%uPUZ#JHD`uDppHpuH#RL2TspcPm?oogw778LT;5@u$P)+L9UoHjaP>{SebycI- z`AAC%!yNv_eZUBojzDCOQir~OsIhVJ$j}3}iovA~H0AV8y)&I0Ne7=IcI61lv5Y>Y z?$T!x$sI|3Sb044a_(!E+DKedev+s)J8ZTR9N#0K{xjik(<iry)Us=n*z)ObLJQM> zHjuTG+uQb0%yAI&Fh0>!=dQD<f;!c`kB#EXCRvpwxI}xJ+9@;|<gs<u#M>RIlEjp& z)Z>&<b7}Nyd)kr?DmYT29nmWBE1?<{ZHBB3jM=Y;c;HQEe^~Lc7EOX+J&X(JGY%z! z_W{w-@r))aG7TW{?ZfHz#ae7;W9!nfux5K1?NOuXvD#G=td2H+wZ-J*ru(&=H%a8? zjy&6d_85OUfjkYPCF2V`cg{N5L^BVg4bC3TA818c?K}`Cjz?|y9{6h6H3w(zqNrBV zW9o2B@nCnrf?@_5&SuuIYPy&q(#l6Bb6qUer*omZxC@vVW05W%P}!ns83oZskO|+4 zIzNX{3P8<hzh51(Z`B0NkqW*?6FvL5)oCAjb(iW0%#GkzoA`*-DnxbSN}S<Am&`~- zoTn~B&D;^(ov5bMsUtJH9<km05jtt4buzoxp`Eh_O!dl9m9o(5lmvd8OiIhxhQ*@_ zW2RvE%nUKRsP`dgv2ypYCV^cL74!4b5gyO19hMyqOsHJ$@kOat>kw__ZCI&O!A#V` zT=s$Y0!cUPV_)vfPqZH;$`ck%VQs9|avTcE?gdG=X8JERh;)b-j-|&(nj0Kj^My*b zK);^Az3KR6hhNG(2^(pH($5UBT%x69n2iGise(ZP?s8`)r~QSvr3&lvOiliRS+tn4 zmaEg)9JFhNB?m*|@PyEz3zp(3ZsQ&1(1gAPq&BW-Qv-(CoS_RxTaIC3+d}@W?2&XB z@jWCjn<*lc6#Q!vx|)pMKt=3)Mm6JN=ceyiFwlx37X2f>N{_e0HbZWR?b!S5jlm?{ zN5+(T0=a~z@y{2IDVtRjytwUZnBz6J@b*b}IG;W$E&=B%5ubtSfxDMKa=@jfXu3Q| zR(b-dc~nr1D}#0$$Y9NI2_ZNcm*~7-8CxrVil1-m%i9D(GJ)E?f7#{w>)6;DoQg9C z#Tf9UvD^_>91tmv3~0R6(G%>2$6GMkRr6Ynz74>s8X@6{L^43XvyzIt7`4qsIID^C z+6YG35+{a(I^0m!-Fr2U8bN|=lx`A`@-9^>9in)k$?&rY!|7{Y?dM6LKnG=&aCOtk z_U1W-Q^vM?XChT_b5q`sUJJ$~g7S<NauCZ#4E|H;)khe-!4)ZRdSMa!Y2Jg^05VKd z>8+ZN^*s`R{k-LAh(RzYVyxvxDX5%SMA#Hdhy95h_32C`d6L7heWI4$5FZ;gk-!$V zoIAl+5}C4Cl3qRhBGSwpWEf}t<;FDeYRtT!B@)C@*AgAt4cxt+rYLDmee>ar4VbFh zAKwtGu!si<qeUyW-P=XI(10M4HJXOHm%j9+2(=4Gljdqtd_5wC=PnBxSFIxpaEH(V z18QkyW=(R2;Eexd>vXRoumV=0E!<HerDL#_sw$5v?!&5N!C#L8)F0Q-`SS;sr5k$s zu&T<STJqG3O94~!F4ir9935#|g14bUH)ONn1xyIq@qfrv6NNPuB&8|kX)&5VUh&w? z%0pzq8uxn30<AQ_LT+c_UKd@}weSj&gcnId;sb>-9UhvBCYfK#p2DE9iaH012lH{e zo9z}sZH&x(MzN+S%d`S(X>AuZ)3@H=l#h4j2mjS|h6LF%t0B$-`*8@OO#U)U=l8$! z70qXTrBpQ46{K%Zp%|p9lSaCxrmVCk&5kOIMb*11VeN>mv=)=dW-FP>;`RAGr-u<9 z=j_87%$ji%1x-+p3jiCK2)_>ZM1)>-r3)t$|3HVOfuv98n}LjkHx0ik;atvOn!^ku zG5<UF(|47XtOUQ!Je1Er(84^<dsnGs6wNh};vex>Ej9$VicE-MIMAcQ<XnK%`4adi zYW~mv`CAY^Kpr&<0@;)=CiMf>OQ3G9d%9;mmE$i2Fp(BVvXt;iXEiK*WK4)a@*EQs zIvrnum%kdNpD~PrUPTDXhTonUZ&pk{&Wr;4-ep4TWs1FP%p-~>^5UK5nMN>>gNFUQ z$GWES7XTwalj!D@oKJbwQC%mN&vevSOJEDY#7ySIa$(5oB(I6xq%f~+gTI7~uO%(L ztXU<BL#=O2k8pDrKu}ri67S^yv1&}{04;6BR-h4=FJ!$vBR#UHc)*hm1&uv!^sU7B z!4XPTLfc(d?k3cCgR+n9ahS6<P?~k%<4zVY^h<}2!fo(!d9~xc-CK7%cz2($?*b-p z0Y+4$NkJhxPIH&t^|(~9Vf*v8{z*iqd(eP6F-(PFYBV}Ry?HTkZwSoS=%q67JaE_e z;1QI+nvFmWC)Uf}%m`t^jNV*^IIN6f7$z!JED7g3q(#Frt&i|i8QF{qY=DNg3H!KV zp3>0%%;D=Uks^tp<8t&ao+9b^;?4y8qc(7lg;C_;E^)&9p>a|yRz<UM^5#mv)&Wj{ z7W*&O_#vp@(a?*yD+b6GQ>~%^o3-d#-w{aIYx%{;)Ymzr6RNec?n4A8yDXz;Wm)VZ z7F2G&sf+@(6s%L`wLUYIAE6y-SNX)s;g0jG+bdTHaLK68NU{og+$Lm2Ld4I%!Z0D_ z%`+?gL6lUH1JzHDF$%_P6M%NONqX5B5ejEfK@96S%QX+H>9RNm>lK4!Xz}y7+a`z_ zONy3pKug#?${zpHe+Qh*Z*6G2!0T*}C43*gxs}a%Ie+u%ENzcNIN#^d^Y8n>E6hgi zRzIjzmOgnL_PD&(eF&%IjL$f~a`Hc?Zc9avTKIq+a_H?YL3VBEiJZ5l9bGR3>=`xN z9@Fb#mBtW0Sf0$ng)BCgc$l*yqF`5wp8IlP4ar%+o0Q>oY35QD9=KH`i4EF%RUA-6 zQnr$j>n*KTZl|%ag1z{-d6aCQXLJmCI}**CD=P%&;wI}Aqmxk}`HhaDL03j&hB4Ao z>t>r*W_%nLW<tblF8X;=CLH=tI~!JUtzyCtUZ&$LA2ORKX}t&SwF-d`A1K&Zy<GL) z$Yv5qevB^|WN4g=R6ndN4&Gj2QcmpJyhR{tl#S02j~4$G-@I))>};;e*WVJ}6kaT= z1w%yveoD)M+H=V}*H9*eb#b^%l2OJuIm0qqh*EY{pVUB3?{GKT;mBKNRp8A@375aI zA!LX+vs|n%KK(sT)03okdpl9{DxJes%#=6arpwe@Y6DdUM03mvVR>F5QL3;k72AA( zq}KG<C!Rs_2P&NOgcE>-QHS|0fVm2ka8*}szO*y1pE;htXkOpb9wR6u*nC+WMf;TJ zas1j+4+@c%(0xrpL%v8mgmR#aE|$FZ73T+*NY5bYSWZO_nKlJ*btu8f7`eixQeVLg zuvRylF&ZKOm4?AF8{^OtrIZ<T)HaX)t-U%{3@OAlpu5rFdIZp)mkpkxN#EW+pdZ#4 zIOS$=oN(a3_=Nx=t=9T=_)F*+2R^$qTWMhww)*YwT_|Y2+pc$6(_>yb)#KFV<d%`Q zU$rFuN1p=IeZI;>iA_2M1m^>qb1r8?gvVwWV`&5a$)RHTf}-s~76gH6gV~9Cc9lj( zSK~B6c0qC7>Orq-@6mn#u&{NGLnEPb!ej<6!*3g7bmwX^nY`h6Hj;onAukxAM;3Ou z8i{n!Nkti@V%bz?7d|3-DA8859O`NneDv}(JjgJM!O|WPxt|=B5`0$CA^)f8K~k>B zLtQlWlDp#7`$*C0IDDnP;jb7FV~FA-*Bz3mZ@@x0$&cCzIcLQx)RTL3GzzkiYKT77 z+j&GRtqp`*uo9kv4csa!Xq|_8;x345cQ#&gV`12r&t5~yrE_Hz4dUfQEI9gm2Y%F< zgD3$QHd?d<dH`0)Z~RuvWO7)3P>%q52DXw}n!BKm&v;h4WHCx=Vah3l%9242Pl>hM za*-Vlmnw4#oYc4|>x?~F29ar4y1rRm96PVIy38nYoS8+jm)I9Z-?%5@vopW^$rO6u z%U3D4eVf2oh=A0E?S*8?#k+J44>nj;_&loMU9t*NiOV%PhCgq2l2pdzWG|e5aLiP< zK2B`+gtWYktg)9sw<uw*{did3NGdhfHwFOYrBrJo!V9FSW7vd44zSb=3@~N3Gck;E z!?-~pX8GtBTjv6{5tUXQ&|7E&{T`LYpCEyo=4mWQzWO~V)bT<Q;<pJo;?h6OPcq%g z(-@w^-xG91=TdfbopP)ylf!8B)k%iu)6#o2Rkn1x9zd<)rK?aTugz-H4=nqp68zZ8 zvXy*3@A84Zvv`Z+tupd$e@646Il^!wg~vbg$mKg+bHm>!=kmesTX`V1c?j|$Kk|I5 z$JIU3@;&J0;*GO2cT4vX7Gr0>bs>Fi_u_`9*QX{?S=x3kRDq**TRAQ^VhTb0rRm37 zgo+!6o$rRP242TiQRko{h0@<Jy=#cf2!A0>(iaq9-#u6V31%TJ#@BSafR8QIywlQp zwLtC1$dMy>L>Wty2)jb%f#}(?1OK)!UJ2^2jOe`>Eg2ZwS9alk&jmzLZk6o84@FUN zftm>&zM$;E^_daCeD$vJVCOo?n{u+N{gx%hit{Hh_o6r99Z0HvNH&fP!QX1^Gp-(G zQ~5z&VFRjcF2AMFnWAv3U=&ZJr>jq>=d%wiEC}OGko^>bj{{gT?^jH)AWwR>D?51K zYwNE+$?6=+m9#7xZ8_=^c^AP#CPjtT6sKfI+(cc48CDd=!WuM0p}!(fYE=a*ll$c< zgCr@#ZW;g7aSrPDnmPrJk*BD?3nr_7D<-c3(;NCB(X)k=>gS!ND>@PsUe#hbRE!5$ zB5s-M!w0&<(lc>Qu*?@`l>f`0PRk%1YWmb2O+Ug`di&)}6wuJ%q?va?e=6FuwsjUZ zvg?TOW)U)=N#rK`YI_Q(g%bUnWcIuc=K-u9eY6%<aYuhzrJTGq;+-UGvSWKXaTH|} zM?8WU;G482hGvK0E9`vp@dS~R>f`R=>gO~VX!WyXvxV?yFX8TzI5PI`(om%ldmDkQ zBTu<^-v)x9)<azXR=Azgsa9#5&+1^j0iyJlTIXmDO%!00oPP1!6R!=baT8Thgq{_% z6#Ft%AmP<>b=L~V{bZI>=rA>*Gb=8wCF?Q`z`iTPh*?<wL<Y)4Xz!tq$@yR}9)=Vr z@uwnKK_0BYfIcdqh!I`2pF<r2WfwIS(rh*{QXl!u;5QGn(ym7;bWT6ZOK3HO0atM^ z>||itDvT*o#PO~JBL)Z~0?r;~CvwbiG$VnX|IpwN@Fp<KExLN}#xCY2ycFtraX{F* z+HM`FF2>_|?1%yt7<C<X><CKuJ>BkbQEOCQv|HM#^a!2zzN$nkR*I57vbxNpuej7F z5;m`TkTAN~=PxBc{{n>mKlWa=%au>N&~F6tb^izz%-@A)QQCbWG#~^(Eci~~9}gK@ z=OYx|JF$wM;`!B|2(X*J8Q-Xm`fr4X3F2E9#4D7Jh@7!aT(Es0vxe2PhRH7*VTP|l zZ-bwCLBW7Ggn^2@AmNlVNeSs!;Yk>QGXL0XLI<64{fy*9$&zBe?s>M`h922tC=b9m zf5I&GrXc#;8HA8PUN;nM@Nq-dNMiOFdw*!AG5UgCjUBQqNEf79q^V;iZnUT<&;O%F z4?Ar^Y8OOlQy}4-m4KHJT}z1S2Uki!6zHfT_3R{#4^Cj&lQ1>wZ^I^TO7c=d+`t#p zuL_D)&WKgEF4hQqg)|x@eI%bkq;Ch;pz=JUPyO9-Np;!)Q=EWZJe4=Q3B4dS?%D_2 zo+A-pvb;Z-o?&BdEBmA^<b+kl$naiTsL3Lz!0$-w|5!K##{!ZKjb&W;&z|d0p_eM4 zK_4x%fRu^|ze7mPx^KzS7H0i7m`qw{E$+&$Ci5?I|M$GXpo^qRii~=ELTc+KI7!v) zlm(4l&LcSiex+SWwdx7PwoO#dl_jXO*ka(YS0UtX|9pnt*TH$P!LN`*77PJ+ZRvie z;O->cQ%A+A<fp|Ph^=JcRc#z=Fl$D%UNToq0cSx;wBO|s0-@Bh5~t#4w>KN9puQIe zdm~vAUnB>6ZaT;>8t`32b#lcN%Xc3__hVBJUMR1J=yzioqZBRVw-S+QO1CVDX$ulf zo8^Ny<x~xl&w<0so3f|7T)>b(rlAU%YtS&w8^f1lWk{QX=iSLHEpY9<HpaCZW1}sc z!wgI#E9S+fC<cqdI<P2NwnbX@Xk&doqTH=xCbk?pYcfuho3QvRZ1!VUWboDbmB_XS zuN{fQ?U64X89a6nu>M}==R145c8yazh!B1jgwH{-F9jBV>fA%e_OY4WUnIw+puS*S zsgIEv%^UVq2ITWWtD23J{5EL$B#l?7VP7FH%*vPfcp|rS>jbIKc(bcq*}le&_qh@Q z<&-D@hsIK+?z7-|{QY~N(GUnK6i@&9+%Q}owYC3sVez0up6s>>GjE@4-ts-0YvnMn z2%jLu-`hmV65nkWml)~lT2D`OP~`>Q?`PdYK^$c_v+Ma|q@!Y_Z*Q(JZXh4NeyV32 zIt)6~;C@r04mW%>f^hiQ*gP~*q`}<eKZSDSp$PG07(-6DF*KJ9t{o#{k)cxm<y!)G z2k$z;d-!ebi3L7^-urM1e)b3uXOI$oV~`N1Q8kj#Gj!6CoAThh$ZI`LV-F(q-Y+Kg zy{C?TOvfHEb8Z+pGqBu()45UXoXi9-Tk$<T?weSuRoksWA!K6JJ+UJd*-sWer0!fl z^vSP6Csu67`3O`6pExM%+RD}ppC2Bytd=c4e&(t<wz8ggl3^{OnQv&Y8aH$#7iuGz zha})k%CJ?EV{da=AT~)%H;hMsq#(i<7yeK>|IjD_=$WDD*&@&U4o|s~35=>K{a%58 z(_s6g&FEgqB@ht>ud+=lt}baxBa31QF(~+pWi{coAG{`Z`ckc9(CS=3HEHTqpJS}4 z&W@x+vp&Bq*DwVX7VVPJY-@B}9DM1SSUX_`iNrni51pI!i+9VZkU#WfL2;W}Uj3x) zh01=*Xs{j)vcY1LOScO{J`aBk2HFFxd;YRtq+y~tsOB<IWw;YX8+QtH2_H={Lh9nQ z?=;lnG>^4O)ap!GleuKA6QLMgYpg>f!pNE`#v!=I+1_Obp$xyX?bM5G+RnVpCcI%; zx=B(>{1Fba3b7r%Ug|nz__A1)!-Aa!rd4b!^hzs3h?T$){Oo5>%}MejG*G3Toii$z zP03MhTb97HfE+70WUy*Q+6ae-__XuV<KDX!2Jsdl0XAG)PZEroHWO;;8q8RAugvR) zEe&pTWE)mBSs7}Cc9Vkvk$BpQy&P@7i%8jrP(PAn7-Q>M-+eWUxL2k~9hGnos!oc) zIKRR1Zx#=OeyV~B^MwmYV`Z7k@X0|9tDJ5FXW}ULSmIQ(X~#S=fMJc}a(<$4q1njG z^&mn=Oaamq!ud%5OtD{lnSaSWgzMO~BYbvU+ik@NI)i=oR4&CXK1gPxUsvJYjTmTq zfz-p9&$tjGXJdyj`;a>`tJRb`WYi-N46*(VIf8Z7?GD=}P3(w{{ms~)kEXUVDdn^2 zi<fM{KEq0$e29{qORC2yJiH2{7&CbiLLqD084w<D>38pdS`Wd^D%+sC3Se7lTB+pT zsHQQPz!`4l`WW{W=j`}&H#LD4>N^S+w3VdEbfQb*o^zv5yU^vRL7O%^&_T57^m5#? zM%V4pRnPW8sxg#_@NP?m(la#EZ>#2Q9Cj|$H{O}>PuKp3dku|E#2&KJ3(eURgU7g% z3~Q)1%;rp5p_XR!H~IG#uYFTfqOom1Ha5M=hpC?Nb%&^fsuUFGZhUY<KyZUVa05{i z5_||WF1Xk}BxWQDmAz`e^-tW@0j7G0QC>*kdo%|=n^JBkNQL<nGZg;7Sdxr%pLAyE zr#%;Z@dadNz{nmg50;tMMuN2~j#SC2I@i$fJe6trOcD2KS)}MyP)|__6^kpnt(i4- zp@}~Y1I6_(+@n5jUU!Uu3)@Wt!ONM&bt#r=I|M^A>u{4~sx~UGja<N-AfP~@i>Wxh zBu5gg<j0NN_OFYP-r;8BFdSxudO%5UdplgT-^QMHVA*Cs)o8WdX0`a(vdy;tS9D@I zV(Nt~c>KkFZBqYLP0K*Z--@)ohQCs#FVb{lGSQ(kXKiI|wyYB|6EdvD8wPD<W8j?u zB6s#@!!NmRE;y4EmKa03X)JgkYjj!vJdqUdAPHVu5hEOsU`K`+166MiZq=PgK0xnU zitLH$gMMX;w>}NHIByB2t_HB)K!Tf7sld$aLAyg-?9#OV8%VZCR6~jh<iN*)^dow+ z0|_Z4tR5DXM9e_t%b?U+7f|>+SKLR!sF+8WoPP<72Bn0hz~))gGUwG5y?tTxpd0&q zbId(fr%HxJHRzHo*qGr?5dA!_6x;8>KTB!&l<y+q26pU{B=+?y@<|9CY>psz8#1To zJ*3XYW$h!e)@Oks>Wc2l(8~(P+V1t*@ZA)rp~nJaqlMH8Ble2XfLn0YmdLusKpL@m z1*ut%+`5Ls+K$jVM{<=fOWqND??Af$NhA2G0cyhxsd<LTI!9`iFSgc)&)^-n|0yK+ z3I=im1EraP$XZWwwL5CogVW&scmGpS@D&Z@hT2!o$deCxvyM~vU(s?JSHq52AE%0t zb(<IqKQy6FHi|_%w^o4&!81Hn%5R$oq$-ESg{@khUh+<gj$wr(H9KbZJ(qJAq7{=B z%!@qj$7c49VzhtGjVD8D`<t)yVHKNI+C!add!20?bLZK@8joEH5j{?gT{9BKW|vmv zPjKvBnRn3}ZN_h*VF_TdB*~7Op=^Er+OZ%9RaazVV#yq553~*mSm_r`xK)*Kycq{< zuXo-hURyh|3#C}DWQb3<vM}7#p>3&@wHrjQ+3sU0%_OhFQg`uV0RGu(Y*DVI8+~q> z1CS}vQ^3j}B-{L7PIy(mH6_2CK&1O{45+t3?;T)X9B61qc6whMle*CDLbU90HpQrV zG6V-WI#E*gbXo%x%QoyGz5uwNIPKr?eiU!}vI?P9hUnW2s{8bHXwTtYFa8|<&kOYr z1{%S!rGK1Q%vo6Nlm&)JO#6660a@$N49dR;V3H?q1j(2?<t<8}8G?q`S0#BBl_{}c zHHO~z>=BlqHh%^_ABXgzDal@UKp3WBo`uvp9640rSq&#XU9Hay2hndmAnJ<F5RE2; zRINQYEUYy$KE(r9>v^!X@Bsk2*bfH72?k7J{Lc`f!GbIVq@HUIVV*mFXr$QBd7}N> z>9BALE;M4<5I$65`~t*Vj*xH)N?{%mB149d@DeKFj{w0z0xDr1DWZKjRO0NPJ9t9E zF(`#Q#fkRGpph7ifWFWu_Gpq=dnD6_tX>ee_#^xV5N=#Ppmz{CUy3oq?Es$MTH1lv z;S{I74Ba$*1J9Q?^7>(6nda_@Ia+%GlBVvt30U~0#-R|@8hd+r#(R6yvSDF5u9`kL z@r5`3GavnXdlED}JV&qy#XAs&AAC1{j3uiZy1lJu6yQ-M8!(s)hMUDwQ5#83M2VXM zF|okk>Zh`QKmGl`iGaRIfWJmSKja`^a*%KMNp}4NdcPC=ztMoc`4NZhc9lQ=BH#Gj zp!>##?fK#cK-eRFg`4dPbOz+!qi%f*<oaw|f@&KIVCB@IoS9t;zhQC5`wq(%=G5gz z;o!;tgDX>@<VOy1WB?ftUfFumU2i+qT|bsBV4EA(w5X0WBW?IX0I+RVhRp~QH1`u! zt(zfO;QW(Y`4RbC&EVPj@SgaO-&X<HPBr(y%qYF<SWRQEik4;n)qM^z%}&JJ=@~&K zC6SZdNY)2v?JZHFW)Q_r9tUO<gGB`6M1+8Y2vbL)>td2PrxMQ_1dRHJ5W|#<U~otn zFVyN7WSxSaMBv+JkA_6&Q*2Uu_QA(PAVd!A(ahm=qw{h6k<iRL4RawTU_ku5#ctoG zgvRx<%dpY6Z4PK#13xy!NzIt*YKbmQ^RjE{cZ=z2p|!_2c^JKL{iV9rVdquZg6!QI zr}vnvs#_d|*KqQtNps!yHMQyV>6IyAbC_^pCc<R1cj?k$&}NXsPV3*3hL~bE)EQBy z{vvjFW0c^t(b=t(FuDHiocg>K+)?%8IcT2#_0^+A4K9<^`$qvfNSJdH8Dv*o0cZpe zfO-cZAPgId&V;%gX<#3K36BvGZ(may%xj3sLoPZ1VF>FvxO%z=RUdDnGSyses-@y| zIqgMgB5x~d%l>;2<Y|&Ud2(ptdnhZ0C^Q)Mk%UgB2czThp?m2}&!)LhUE{;@2xK01 zBnyFxwl!+2m;~jT&1cclrh%g+1%1$(A<avo&P!UedKvm#w!7}Z!OZ6!B_l{K%l69p zJ8kRm-uQLJkt1r6H^AGE_|+Hf^~)HOzPQ);cONPf-f;w$ePAk-)R47cKkhkC%7-t$ zHKJHw+P-<K7Onrtkf6H)ZJ^qqA!r?_(_kHke>KREL#sG$jl2U-+Pw&7?nkmx`Vbo* z`o@d8^?^~{)nnw?g$Gx82*adLmdj0X`r>9S&{whUHTFA~4p9+D%}6ZcOi+qe2iHBM zEW$cdZm{QlUQU%w)=OmYwk^+l{Z&IzGCdep3Q(G3eW}v59+}&5;q-gcf=9s<7AV)6 z8CGE=N?wXOyhnbhH7X&_Qa_{uM4~Y7Bnk}`UrnHrFk*8!_(%$<)|Fbb79E|^7*~Je z(&8Pddb#t3qNj7f=!FQj*XVpkN#MFO5k35>+0OR?;tfvFt<Fsq@~mycj5&!B!Gr-l zCoS1~ha~&wJ*FLT&k1`x|4)6~w$4rFS*`f4_zZ}iq2|GK<<L__mvJ07EUVIreI+{A z<hvCv{P(?cTtH5H#!Rm~Lr{?9^BVmocw#*Wd5B~ru$OpC5)Kh7#2j&a5HS+m%o<he z)vkkMDtTB@0;uj=iYY!;>7vtPiT>}fUt7~`^Hl<!JmKgArttNSjtfpMARs*c&(?5P zP7ujwZD+-Ty2l9)54pcd*atSzXC|jMVVo+7R&lo!QOt>jx;Th$wN-uo)}Sf1eqlRp zHZ~|pJP|VI<ULK9shTzoc)mL~XwG#(%{w(XGE3CkG<uG*?8vVFw&hkI6{Ts|O$Zu? zMvXZ+${ilus_QiX;nXal&L~^fr5PvtV*pQGWUf%ZZ4Bp9)MY-<xEgwyK!23rHj4_8 z4|O*rAy1Z0B^_$e9^Pv`2P_6ysuisaXc*LNRj&*Z8yveS<N(V?xlo9JJ4G)sDCfX) zaRC2`2BK2V4&fbKJ4NZ~|JujJC7vF_cEGPj#Mt%N7wi<&4#pW8dI6@>*274d-+y%c zkk%%O7^)d!aVScqsz!Gj6lK!WCRvV@*@tzgY8BF^&_!N}{M-jegT@cR<$#&)52I4{ zG=S5Nh~2#=LJO0R@xuuTbk?-Nt&!Al2fI}5V?~(>8c~rS)gNg|>4Ug5xdHOR^6rHt zQ5yVwNqr-<Xm3RzC{ctyGlt+3IB1t(-f$>`Uj9(oO?*%ukp4(orcDH-;C?_p|Mpu2 z*%>J*OA6)l7W&CPx<$~(RbzJd3td;rMPB(+6SR9$z}Q5+?KB-`?!7KRgX$l|2sEF- z^SDbeWhaz<WGBRBPF{+o^PcH0KGhR6U}58oIDF4p*?d*-`4TWCX||pY;*HRVeLvp{ zk(Z#S=RA9DYGm3dcJ7Vf)EUCxWHb{r8#}}AR-K}R6ShbdGnF&%1~|X?lJI#BNV(L} zm0dW_xtTGYcW8Z8+2ed_i{eeicgl3D^hx(jorn@8Ga07Iw|YJ3SDjoHu6y2PJGEWr zFAJp4X;kDChBp;GIl!IF-x*NBy+DR5TN7p3FrYxkvOG8^m;7k{<5#y7&ys0G0e7-0 zF~HfHcn<myoO`DO_1PCYQ`b^aXu#15-_Idl*QgqK&RlLrG1uc!%xQ?9PEA4<-8?hE zjZkGejOU2Hf$Uq)xU9*v3%Z|$&}+xy$TEJm;e{sCKHit9dg)1bc+-G;iGE*;)?sF{ zRVfSNxYo5~xlCeP0f(?*%sbvh!0XSOGCNPqe&l=E1aq%>Yd_*?MO>vU@bPz9Ya=hC z6(t7IZBDs9Xj%8U*WH0Z8u7W0$&jKl7qn3JGO%`4ChaFNL=it&YDmkz=_SnNcf?Rr zbkiK$vMBe!hWXK)vZwCR9CnC2pR~F4#c5nU!5#05pziZzcH!u4GZzMu3;4i7mhVN{ z#dzPgZ1j@@kD*VDT%nxaq$cb;*Ze8&<;Z<4jRJa>wMtTu80jfW!$w}WKFT-gZjTgA z_A_P17X~a6!L0HZlF0(W0P-!=*{4z|MvhRy3ve~EUcc^b(}2KbqM3dU56Jr=7LU!v zhsEPj;~t@{J=*hSy2QHA+&t5!xo;H<m8U!OeL+}>wpVSB53Zdk4SMQa!R(uOtQKk- zUA~wh+{hRDTZ9kk!ZUm~#hSO=@9s}|vdC)*ww=TqvJkXG{wd45_Eny>jgda9y3Zy; zx~l!P8|*fq2Xua}>A0sljne|~y@BqZX8Tpc?684e4liUpeG^MP!~}9IG18m(9>@2^ z$NC`hV#zRyhVGXT@Ui=Wbl$wARHj8X$)&h6V@|QSKXuozaRcbL1#qHzgGXFPY2jp> zo-(?QrRiU+Yc=F-uas$!Ns;DX|G6xs4e}+Pq;X<NCojSXqc~;*80~g5$m>vK47&?6 z^q@k*vHC1RRxa=RC)<@PdqTb$#kAz~jq1YYwAExU(!Ct~@j$5EEgMu3INgmaZp+j+ zO+!)M-gg;q@nF&3aiQ^w7a_|Z5<G~#Q^!59kn9e)$ti*+W9=Ffyd3mt;3INEo;Xd3 zWF8^TzvaAFF8!+OrXUZ-Wq|$-^)*upsiShs!?^^PRGW0zr#j@!+V61jNnw}ppev8{ z4|9P0)CkM}8c#m^HZ%3`f*N(le*YHBu%6!6AX~0`8C<k;Ed4D-$J+bWP9hZl@r$2D zLf61{Gs?U{#kNcd?~{h6#hJTPCwLbY*^pd$7go$3*Py~B7;jOmG}<&zvh$Tz1(5uY z7|hR@X4SQ;H1NRR2;QVEyJ&)CAW-;n=cP`<y7K@B+O4dv4>b%TGxP8rYMHp=AIb;I z7Y@GS;yCh<&PENu=+uN#K_D5{Gw|CzQle(OFh$}FA-;1ebyjSUS^b<a)q**-Y@3cL zC}(4*XBB@$Y?>-7!mNsA_@I^FYZK$eB!i(yYcD+kR8Nw-hf#|4yBI2kp4H_M%{R+` zaa_1CJBDbf@(WioDQUOI>;7JQ`Xi~PYNASF*Kubx&##_S6XR=mZQX+WSqsMuz0@J@ z+VCPjGP>W+ulW~i7Mj23mC~k9Sb=|!Zt^Nh)b}OE=dFTU`NV~!TaiFDrmV}%A2lZ6 zLQE>^Axaf&is48o)2%wwEpdlVjy_tt7O9g+m`QvLK;%^W#bn9BAl$xa!#~rEJ3HF( zJI2U}%G&I4lB<%SBg6*VQe4yJ=-Q3w#*H<ei8;gmZ;=0tUD0va=}Z4u#ZQC&yYY<w z|0B=;Pt{ZxDwYyr{NDdoP5q)Kq8j|asHUL4M+Q^uu)RNb#rR(`qHY^ALjBV#C1!Y^ zA2Lro{&BYK`1!s<>jOz?7%NN@g#l=lwPy^FlWA@Bse>{&H7h)%|EF#$l!#7CR^Ea# z)kK~>c=s#a3KR$dlSRkAY^|G!c5VN?-o~=o+Nzo8@{blphhY<5-Eq@Kl0upuacx+P z{o(Hc@1~LUGo8@IbTfxgpe-bC8tZEZzl~KVD#b<K1$#HR9l+C;J~i@>ZYsKTo-j>< zAJw=5$>MF6HKuKbvD~Y>>M8^RB4)8QE{110dw8cbzlRF$UVnijY7A|X=`daQG~)w+ z0>JudmpyNC{63|P4LS1+Ai0#G*UBz3#7t2+bPyQ&b7;|8l$&RW--1S4+8WdWTU0i5 z^_OS@&%%U)5=QPXo<fW)Yn~y}vv^>{yZaxd^V<*D#1eSyR65%b`sb!4jvHFk{Dqyh zY<n!xuO+_F$@o3h{@FTAXwOAVx}=zjt4nL1{B8Jb>dSEb(RJ;w>g=-Ys<f}2Qqh?+ zHr^a7E(z09Exk2OyWde+J*<B9kU>|>(k>P{&=xXh3$TC}?QkLjdjp$0LdMHe@{cNO z43jr1rw6}!L85d%4=7Iv`CqL5ohIvI@!C~i_?1scfEEYYc<XdWe~eaf*Ve=kDNJBP z20@acxuJ8zHt}JNgC>+(6jFYoqLm(l+AnyYp@;wYrX&da<%VBG3P-z13)KowStZ?_ zBCI+ml1o-0s}V;iuYT+E%PZO^GY%UTk&S~Am9>U`VX_MNo{YKv)%(xZ-ad)*cK`8B z75=xrss9h*LH{?~OOqy)xAM}`caHJ4mm4|5*aRt2ls{}Z5u(023T(KbIvH&}RsJZc z2PsHm8Y44MAZ7kba{D!%tw_aCxr+s>zw%(wd6=@*R=Hl&`nj5w4*x}e`t{~Bc^XD) z+|7GayjzOXjPK8;-+XO*9!=~3iYk`DuN+9kc5S=W;yKzgbwke{&Zafq#X|U*qQ>Wm z-SM~q)_vF|`)Gmix~=c!L-37N<8epxo4rXV{VM3aNce(-v-6CLr2yMb_}r*}P3+~a z_ge}2?!y80LwA?k^$F;K^d`K?>(vAMBEO069RdEPxp51S1N|bpDeL72<3oATmi!Rh zm0I&7v#;u{0@j21$mwMVc7y(q+SLlU2JOap5zz1H1quiP4g-aU!9_AhYt=vmjn9P@ zNDI`qhNrT|E5n}`hjfIwbGPR+ftm;V@sou)f?);Tkp`;C`=X=C=jGxDMu0vhG3%jc z33nMUXch1!ycrAlm|SBl$~}FWI7Q?F)$^;!*IhzDQ^$W23Iv(xQJaTfhK-x1=K5cT z!C(`a7v?HBvT3pz87q-zI0_hnWfd!gh#s(D%gK*~5$6qp3Yw1Pih!z_G%k}Ks)i6B zUlxa2GB*>d<C%uHP-~*VGC&UtI%b2mBR}SG<P}mIk^{Tc=@+so*wM?eEP|dR!v(bK z7t-UW4%?VC<^^DkAZ^ZxI|{1nDxyU%ft6>dR>P73v$Ao-X=mGsT28ID9_U9^Xd-F< zz!zzL`o6^I5sT4Uj<n{p9-xLQ@0@?F2Z}|F;Q9uWnpjPZh*6_!9jk}+@e1Z)@g<MQ zR4{(Bw9_Gn&nH3mNK5KXNs%O3AdW+WrmVr4O>9w#DbcGQYK!EQh*9Au*-@hM#Lqet zkPLOfVvew&n9-$$$uQKauxjEn9HO!&vn<}-t`tO#;k#l_)Zs(zT~dqc3?^ClqqWv9 zMJHH>EiIvMZL#5_G3YayG%PnzQy@QMT?}PdOu-K=d1@JLsfz0KFf>m==HEAmvzzr* z6MBs%a!jw3Vq@mkHdoQ}NVwZQyi?ve12j@f9DJWC8%`(!S!v9`aOiHAnYeWdps=&@ z_TXjHv9rqNgrmuC>rPlo6^cX?S=0Ne;^@)|Y$BFYm4p->1{`cdC0v{<M}~s4vxYG5 z=PjsZ7940~%<8zpZZ){33aO(_&sZ{!%~{k+8Z5F!?~l9#L}8A+ktzxnIGyS3)Vux% zW$zSSS=)7s#;Mr0ZKGn_PAV(5ZLXLVr()Z-ZQHEasi1bg|Ns7T&c68GefGMVtIgJ) zc{AF0MjxY(-f`?qOkH*4PAnV6O773VM0OZsV-;jAarYMY?;szGe*o)x@@TSeG&4VQ zdsuLhC`2mc{Rc@eOBO;Kqm^7-q~xt&L#>ZKk)E+qvAEzbUo`c)3%RxMpJZzWKNhs* zhcoCXFrZywRhn$LtGzK&p(BF}=rOVIheS(s&T!nWZuWD#oQIA+y`nT7BGlf%vXLHV zYT~MICnn8m)};HSRnXXiVQ4&k$X5*&YQt%5wPuM}R$eX-S+;~xVF$tUM(-?$8PglM zrO%M5Rtgo@GCvJn8)^3Jj}5;;{H!d;ufzp+J9JOlfx(JZj|vrR*SiwG8&z<sg@f)V z*{(n&EKNj~UPnF>Hg<`@(cMOWk|YCkW4@2Ub52?sn7E!=#7))$Xv&figD~cl$dM}( zKo=9v=?!i+%w(}%v>Ve+e*9Jx<H_W9<qF2vs;pU(jidPBs3udnWZ7m#`!pmUryNc^ zXSpUflRO{RY9#S$w8U%+uBFUCN7bKR8xYpFc9Ymt=s!d#=En(Hz)zwR<)Gu6pGt~% zE1S?}DjC91D9iKUD2Z{)aNwpPy-NKWiQ7=}wpv#PYr(pFJ07h*!B~KWwvHhi6Xxv+ zZo16~urVT`W0K;GwY<wMT;);bb0XN^9Y5!CN6`i?`7~1{#e{bkW?2*lNK66`WM?hg zI(yXLc7Lle**m53+is4bO{H3q`QJ?^l|(3C#vcU|9Ci|mX4`wxnc-|>+UT(MW1C3A z6^u`vBp(W}3Ry{vI&sTwPhVgU%ivB{GKjvg(pT5nTFa_619+=)lX-uy=Ax8blrFv$ z?%xghj0X7(zp%d?%|)^6de6o&8yw#o_6tNcDYMz_rCFOgg%5l5!w6@~Z%=U2Pp7*j zo|YU~>kK^_bTC$0s-VQI<~bVWJSfOW4ZDn{#2@x9X|9`=B=U01os;Jn+hrey4scZ} zSRa169+=g!{&<_}7ihXd69G_hjq6w)|JE&WbxBb89l><kt-lDv+g&94D>G>_YfQf1 zy|J%-nAiEc_mj6yk#UcUeWWaFW~1$6QKGE!o0Tr6HJVdACvU`0%W~Vtcs&M-A5ALC z8|#3!;w3S%3DG*JEXJSZ_<0jqFB&Np1NO-;JfDc30U!eOep#6@ya_g}CO>H$>EfKN z-F$Z-7xY24diD}Ebse9#+4PEv%F}q3=q7Pv&pxxTmQ|NCIOO$YQQ!5G&wSYVB+rOf zs<T%|2qx@P=G2#_+THXm8%WPy)wKPluape#Ck|J~(|`6}@W6es!u0q}vwb{Vreonw zgA#?$2=TNXpT_Cg2wSY``V-l&`TaW0ZrN-A<c;NHzxo93n(Ledq<LA26Y<>g3e7Xk zA<5{&Fqlj+^*vc4COe_s(2~1`gUa)L46SXk;uv{!7OIcxd$TQD;<#e3TU;`T8ro>K zpk49Om6i!?7rw8tb8h(6WX-305g053+sbLMV`oaEYR{7UJj``x6yH11T_nf>I$n{( zhV*uKjcBZX$8-yn)7hLk_sA=@LuU^2-9EuFF~$6$q8;K1KC8@t>qMLpUCaoJ4Zu~h z-!oSI2+#M3KZc##pLvuGVi|esvAp97d}P{Jx2wqkm+wN-CxU8)f?7OdG1f?defrlw zXq(%|i!b%yv?d3ct#vkRau9WQSS+_TU0)XQXQmnBG~GpX{!q?*Z2>Mh_8W^HQ_@WV zESm(UnZ(7V%}1y>X6k73wB0VJ^Lb6!-!#cI`5R*oghJLEY~v8MVu|9|5i{40*F!Kk zPR7dTGhF1_#&Ss}c}T7aj@}zjj`#n*__<8~xJu%i*5=Z7<@z{rmG)0e<nS%h7ee`i zFPR`5HH$Q*HL^4>4#L{{BQC0~E5saBThy@zejCwiQfIrj$_n(}k*1|RCLpF2zW%Ts zKhwtO;M)NP$Q5|e4DkWyVe%(#I)lSyNFwNpXpwika^6c)meMPr>?+_`RhO8yk-%Xh zp+w|G46dGbQ()zaVf67_K=XJM)5JaxrkWKAT>m-0_rxh?Gw>Jd3@7E3kw@N$E7F~I z(%zJHV2k`J;~~>_ESNn2&I{e^%SQWhtN`=HZI>LbWcHr8BF>v053uH<;?&u=xKV*n zwYb5@aq$y3`xow$Ji>>q=yLA{6XbOcZgwIrq7;InJVI0!KUDE9McH2NqJx8#Rt7Gj z^liLC<&8;_>FX+-Xwei-RNGmb>EuzE$L4)spyD@9!MpIb<dfAm3;mr;&(F<it=_2* z$c`cOwVjU+m=@pBkKGx24_Bn;9<xnk|LZ%f<5%u0ytY(<==*0Hpuj8mJy8fi(r(va zAbdRx#}9;T8*kDBkGbB6_SxR>u)y8%N2v1e>iti?XwPTnXTqa3O)j=Axu%_qOa7kj z<Lb=pgU<sX)1S`K8`zu?zDmeIhDM$SdTTuW;rqR1pDNjDV}2sQ)Nc%)n&Vd~YrksR zlY0+=@eIY4Lm$)`N!|N8k!i_0pJ)yy7WyDRc<KfaaiBPWId>DR6i6;i2R<wV(#^4n zdIJfr&;UY&LkQy$2a18Y>q;gI_QYcN3({kGmckGVd{{SNB-#eXBLK8SH=s%)7QzP5 z3jybll|ToYiQ@o-Y#n4KH$(uRZUjM)$cCUd?-he{=-x{X2!&5G0X4&YMP*J0O~%aa zr;ZO$hEKBrg~AC%oy`GNr592x2!l9eF)W9ijn1#H?5~7AbX3U>{Lmcyk<{}$?$36e zAn(d2tIvB@>U;L?wJmW2mH+)qM@A18NNQ9M%-A(W%3M^>w-fLqb7q;Y1^hZjpGY}m zhBQWS{}yYy`pRGR2y1-I0|vYmBF|?``89GloUu34n@~f#$udL&SvZ!7E-6Fd6bM#| zGz~lnt7T<j?g}G?qzR^e8P*fE3-fC<-K<Mz8eoS$RL=U%OdSZe*`hwpqWpB*L9ZBI zX4=hJ;EK}6LYlVPPn_r)hgyelDu<zK?)aG~MVp~|ALV=XzuZ(Y$1c(?btvx-c$|Kb zNuIc|%cw9OCuL=7o1x=|t^sxYkz{<^`1)2pY?acu;!=^HcHblUe-Qq@vg?C9v0=5) z{cUagd61=Z?(nl?>LMKx<7YRUkKKk}&Rh_jq60Yoo6So!C(Q)DN;KyQ6yL(Y7Et+e zw!1iU{iMlyX1m6fnYqJgR>HijXH!_)T_oudaeNj=x%zamacf-T;i<ZDuD+#L>Xq8Y z*-|)I)b23kP{MZHn|JMC*cefpH)UHL!$4Ep4<OLc4lVjK8utEm@SD9H;f*@xO#gcV zXAkUku@6q(WxIzivS2sm2;p;ejO_c{7j@`OyE<h_;!nA`{Cc^$?Rt6G?-GhqaRR4g zxMU0&aHqXQ43lHSizYirgzs&!4|&L4FFo7X0Rq^-pDdWZj!^I1nNbUnr!#s`%sGLR zXKK}Kk!{1&!tlYZU<8w{C&-&odB5zzJa7hXF(r0IqX*5gL$6sfSeb!()Fpb+M_z~Q zycihl_y?^LIEt!{yz(PB>_q1CDsqL$l*(YqdU0~abS$CO#}x&b=4~2A#nv3<de$r( zt~|%B)xBWdG?-sp2GW%U?vY1$%#No${uMf{bFZI27yam+3B;QAMPl|Ps#G9UZ}Svr z#JgDWNld{ssLe?$C&hwU;VP0s!)Z=PtM$SuO(8SZR4bCHm#MLgtLj02C&{-;wW0h@ z&UAz!>OvT&YgO~a!%L2HNWX(*)a>r3JVLHkQnyiaeV3Z*i(3-WEBoV^yiT-I3hr3N z3$;>q)GGWPjjO!D;U_P&pfc88$vLl$^2&jmE8CS)O<&geWvgr#n(oq@W6K|qD|Mni z-*eTM&_C=~n$P>G=K}nt-LYYd&$o1s;QaZ1(UME{H)($u{0a#B4s<ZHXY1?q>3R{X znB1&BYGvt$?VIL2WatJK*3mEKiubf_IkOiq4?JyQ3}#dI#2JE88znB5ICo8L$^2?; zhw0YkJ=8lOYb;y#;?_Sr^u0mst@v(Jn&JHCpLPi@F*++gK>e3LfzORhH{DMd0<+yC zVe5Xce=m2*5<=s|IX@XYU&LN+k>-g0qLbaEV}~+{Lw2Le-Zp6g?L#8`Be=UU<X;Tf z51{K{-iAIl1*5@@un;3l9JKi3$oA11BNZbCQ<F##Rf{bshO$J<H;DHbNn5<}JvU2! zUS*4|U9}}0WJ?11q&%;1$K7jk!JeDcPP?-sH(QhxpJ&ESy5qdsh)TAvFnQNL;2&MD z$$H*w&rd$-9^L&FN?QGMjb6t|gB2yerMH6p4W*~gt$RV?92j8Xh8G-8p5>W0+ojc; zDo_z%LQR=MG0{Tj!N()i8>r<!(igy4VXf+8X+c|Y#3*(?Y|?tK=V>Nw4V2`;*FS1S z;UY;rpjg?raR^!cg|KaomqN8n^?KB>LwR7f30C8CPq7p1<U;31x}(bfho*TH3nR|X zxKqyBh3{(j*X+ax*5=qdI=n+qXvYnkA0MLg^?=6a6pvBmo3>y22R@j2tNX2X531ef z$fP$hndK1EDy;5-ZROgB9*;q!X=oKTbR6)9m50zkFfQTz4IKiKwTIY10WRS}?{$iX zf`Imj<i2DraHkbkQ7~NQ(;Xx^?3UA5rTWnv|0C5GIp)=C8lKYDl%gSSMxQk?!$gZa zuBE=AT{^*1^(Kj+42dU1All>GP-iod7v0J1uPbJ+{${3{-EZdn2n=c-AYFyHUMq`2 ze!_F{8VXCETf$I@0xKOOokHeMuaLlxn%tUQH!0zYchfxY{X!ugok~Cl``O^Ahivox zE(mv$Q+vrRa#`;CNWYs_5Ansj|G!#BS!3c!YhS|qtN$px&-Q;7s}VM_wY2+p--w*` z-|~-|)@pi77@vr2lU?v!pwOtnMy!<Bqww6oK}lk11Z=V?Ayi`FM%&IwJs{rIX8NWi z{CfH0oR+O`aonIpMbnTuy`@JeZbjX))l##dUd3nW$5zvynx;!u+xD3*HZV3JoMngU z?1mpZ+vYjWPo2*@Z04XggJBdFLE~ZIKG+WhI65$ivyg@FH^OKM$M?d547j9nD42ik z-W<QRr0z2V#Wwp+_#l0@;y}9lD6aPxw|rg+QFhQBYr;#z-B1X?uI>vmWYrJsK%d|0 zBKbUp23y4NQEqdIc7{d42r+L71iPao-?gG7WpA+wv2H?$0E{1n;RU2_5v!LY&o{m( zg49Duj&i+@f{>3%M1uV=3JJj_AFYTp-(KnhzDD4j`kK)i@|^NRCdi0mIx#ln*kE(u zcO*RdV_u~5ra0x<7G}si8_i4HqHPl`4C+xATN`fRj=swQR?B)rv&c&rbcxI+-|Y~n zKQve|rM1SSf^5<g2-xkSsMNbSlI0R1G&d{H%bSw(8mft>e8SsumoJTPnv3^gMYYwI zk`ejVO0c(_a*A(|Ravw*sPJh2W@|s(5o42vf|OYn67vJA7PL-U7mvu-Xk+NiCY2Ua zGDuT?s2;W&xo}q+*;)FU*_lwYj#?JM?eLe1^I|M4S27NfP88`C>+g+DtwqF@Q({rG zpvxaC$Ppg1cjzlP+x3)BWc*H<`#ZE?(EcRWLKI7bD3qutz(*o_W~0J+^s@Q>xBejC zc3VcGCL6)x-Y1jOIrKNfS^eQEu_ZS)1V7a-6<9XbjcSQoPH~7^kque#W~o#7gcH}1 zj9v0woqn7pjp|WaWuTf~?+iKo0VK@EEa{gnoXiVqb?R(n7MMZO4XQyg{*j1Poq7ys z+#adwTv8gwVI9<$5eh5y9!4iEN#sumUXQl`BWmI9zq(eIy4IN#oxq=9evAN!5^8vu zo?c5@6g#1Q>fzE=*z%@~NBoP{5EwZb?qC|2o<Rj*5snE77N+Qs--sAuAy}5Ot%jWa zF6Tgem<J?t<#_ACitu+XgBe?w@jr&k{+u{IS>8`=&;iv6m4yK-6u*Y>;5F&XbE$1N zvjTodd!X6h^8YHxh`-_Vlh<X7xu;yi&z%QoogEwg#iBBSDt^RIQp1zOnO+%YXi_sm z-R`shW~32#F5lnrV%rz7(L2{gwd>oh+*1ISb-yV65^$|AD%^~-To^4@I75i9Ruzte zr?lT(jGcgKp0}|4I0>2RpEdiDpu4Wd)1b(8xmigzfy@X(sLx$y+1|s*3vM;3A8WFz zAF1#-+Ziy3?><oVD*M|G&`OSEL~lxMGLkFiK@AO`dbFbxEBA(c`OP1A=%TZii+6r} zlhBgXhALH8&zLjuLzXUi>ZS<JqgZk`w+dSn-u3=%$``G(-D%Y+8!xhpJWoqo(Hbi> zi=G|xVR;^Hgs55NZm~EsrE-M2ijL;$^~;wL!V9g#)Hxn7QOPT1?IyBB){zyl%b+x+ zmqm|pFRPdCI_&;Pkoy*v&7b2mo5DeAWj=gWpLwt8F`P1eg?7rY=dQsS#&Lh*VAkVo ztADj_w9T0<5r<#Gs>=zjhgiKCQ^Js^im7W#_*CD9oKQ+-tBRr5(%O2TiXDrt0~rOw zQUa;1)N2XwP|%o+FqU-Z6MfWkP1#d{H??H7;<*%QAsIo3D08+icH34pm?rWFF!MUd zN;mM`N1yYjvjZ7$%eTwFHprk8-BYer`k;;!K`6Kh8QvpsEVM72lbr8WT@^lX8WEwe zYz9Rfx>WHGWil?YUb@E$rv_auDN*8w{Bg}462J{ign6-qPnt*OjUiQ#Wse4oVW&t8 z{G>MK2G%>|`k-QA<oRM_sD67uO^bw4iv?)Ue1l;yPXj#fTXxV{l;(__o;&1@bKoNC z?IRQH^%fz{9lE}&ISZ!p_-Q;v%K<RbkvK7C99&-;E0*9|+XZSV@k<@$6n7&Jus(If zF_)i!;7#dG?er;?tK7@-q-r7AdvG-!pb8{%jK4E|oF&)eUHy;1xHI|#!|`&F5%rE# zjFM|)h(jMoh&3X<>_$ip3I;L<p^zjUrp1+Z$mIaW_N6iw#02*0x7^j)y&T4^&F0uf z?EFA^vKuAP3xI!qj(S#_%Q4%9vH25ksPiwsTF{wX(3yQ)e#y`~{^YTVRnZt@DusQs zbNK6`EuS>rfdcLrv_*_=u`_P*syXuQT+Hh)wJqHjyqKIl+v5T=bB=8QNd}ivLp{uO zJ?6QRP3O#2zQ%#DPj7Z_*af<PQNhdi%zmO(?e_%Vke-IPTSbv4q$d~wWB=ivUq*fq zvS%J1rNLV=roLdZvkFOJ?IuXP;dhBc$ZjYU@ms`hXcYN@T~a76Ds}GlZ*1-6TCNhQ zs<DjIb+9gZctat#)K5l4J|Sk1UijWQ@q<&RN0L##89WLtCWvVjp1-j&e&mt8sP7X5 zx)3seb-NLof<5`iX8+}e@SQGD?zPP^e)F_JBmN=uT?XPIp>o1qpao^5s1Ki{xmGDb z_7m?2s}@-Ca7%Jr#C$M)nVXwq#)OL9YnHEpwgvHQZ){dQJqhamwHozR3ZRumdz61^ z);S{o(_ob5|6B@?v;04PB^s~J8)E368jfU=%6Kc}UEc=V^iC|6L@Z?Dgc6$-dJ&6w zayKKp>XxWgW)p_-kGenc`Wx*m%wJH<cn5ek2XgwEJCiq2b&A}~>MOn^p1bXL{I09) zKb#NfK*(MyA+xw?GE`v+`_C|4jOF^!JnA72(!z~Z@;>G0ruTmZ(HEo39ne53l9dq0 z;Xuypb~1Zu^g&LJr>WNBl^mpDeTd-CM0|P%wqlRK!5R$8I(E|ce(Bn)4_m|Ea%^2R zJYY=6PwLOFxJ)fpC361e0jl$k&0ZuUv|N|MX9;ID(_hJDw0}u+<Z+ohD$?<^t3QnU zjOo%?P}qypC3IDomR<7Ea&nt$0l9`9_!mGv4Pe3H;OnG2q#!n&fJ5f*$>LX&XHjNC zYmBGIL08yDdYREM<M1DkTaXZ$_&fQWWcVB%o3u`0dqUH0GVA$0oi-l0E&Kx&7ANvu z{RH*luhqQ|o4<1n`Sj2#syVNrw9<X1p>Mh^1W0)KQfqJqA%uZfUKcR!&dUpM6P~^t z+^x~#P^QaISzv<Z;X;kyHUTKgkz3johU<*t>@!{U`f4m801TRkat~~M+CPJ}0r~LN zMlcjOrWjC+EckM9u_Yk~i>3o~C7tzGMIlBi?Pm^MTGF?!1CN__7!%A9p^+F`tTq@G z9{Rw7{!pp`tOE|5)FBUj3GpF357i;v)5P26NV;6>Rqy8y#TOvX=BSX@L;ht6tf|g{ zxKW=d>XS;jh&dvRmm6(Wg$MNYd`z)q#Jso1k0EGmK>U0GtAN@qih!9^i6q{}Ihv1* zjJ=R_$T}%bi_)?9&S5Mkik#jJ1D%?=`&JkBlPy)ZPWPW~WfQ58v3+k~+0=|;4vF~1 zwh=ZjB}P)K`-T^{bIVlkM~EM>&TgAf9$)<d+nP3T+IF58D>8{exseUUlR({8NBr}s z?e{qath!{<T7PpRWf@>qd<3H`X@y}uWSTz-r!=#agPDbUl{l$B4*$reYcvYr7biB@ z90*p&q=KY|gpDZ9(o<sgKH{4TU>>NGSd~~R$^JvF{Med`pf=yJh4ZO7rj}>L!iLr< zrteBW8aUB~yir+GooFG}h>N0Kl^s9RY96Kvf0-`D0kq#i0jhO*!<%whX0q$UdlF3B z<Y*^suZKLHTsSW9cNpweB(<&kHiwVHmmg<6@PWmn!YD6-o|pAU;rzK46{N;GvrZhA zUu;1@)Cb4I?}oCx;mzO#+ZDFTg!y)c$@<Vm#cVeK0u{I`Ya<=OU=Z&h$|;G-XK{JF zt6p0XZfhiIcZxU2X+iHBb2y7-p)jsK*drDd5+hH|VTe)nDqrd@!Do)BUiVwf#-IL| zRRt+Yw7t>u&~GV9qSE}2X&LYO;0)TQ&24VIwT>l2A`)O&`6|;cbaO-XzOds<@$QYW zi<s0-zWN_T+xcfHDM7=U2eLm!Iq@le!{HBbl!ZT7C_aEZXYQ5K{<$I_7-x!`@t?3k zoT$J8%tj5LSW#}dKHNNL@c|UrGYDGlNXgL?^scbDc^UXPlxE2J9jQ_7WntNZz8L(G zgT;|k^G%qCS<S@bc9c(7;8xGSvLK97L4D2F{9Fz8pR(ZpEg<?Ia)_q37M?o#ClgFM zAgwt~ghO4oT#Y(jqL!9HX+vc_KaX}+MW+dI%r=cRy^!r^bL(}huKVxqgKG5&qb=Y2 zHOU{obDBTiAJAs9q+!VedZACYc}_N+KN~hfbN+su>w@6jsKO-p2^$3sV(1|n1c^#X zVJjhnq~=B4){0CD;{c-zUpO%e;~9rgv{>CD=2GfJhZSIAgPcr4K9yPcC__dl;Ay_W zIJb<pst?<;+G#pKUnM!DMt5Lr276<u?RTqe#zB+A(`nH)5+&WnM<e2B(s^LVje0bq z$L%@7C{k<1p}}Sksv5b;^)JBU-bRO*Q}B=Ex}{OJtiw+=w@ncfEJf2!$uL6{gf$iD z49-r96>ikIu+2>p!#PqGjNpv(dk)XVjAnl)*pS9`fO6?LR{=UK9x9LnEX_7?cEf&| z&?h=1CP1v!lkr8^#Zb96Fnqxrpw?=BW_v?=UWJ)59URGVu+A6xb0;Oz8EC4!b=bi+ z=4bb4@d1TJQf!n_r`h0gn`Qb(92q`g2&Bv^m)J*Rm|TZUFJ-umpy8phpd`EmTQADl zx+MkuN#30rGX=Na_>0UXt}yZa<q3sse&{lK&&4^6J{2}gfiZrA4UK5YHc!dOQ53D) z2IV-ZRaN$9QbLDw3BCIdB3nVi14hoo>a_HbJQqe3y!-dY_a74cAyb)Sr$=nUjg#u7 zXZUq?(k%r;P?n)l!u|Jlncc*Dg&|mFt~9AzWziT1d@i7Mq&>*LL)FKHJ8;-kni-jS zz{^@gQq?-6HPzS)#D|hCRO(PN)f)5l`zvS-27V_M_(*NAwhOx&Ygsu5kNg^69~af2 z)h^pd=qxkB+BVYio0S(jsspvVl~LYUwkkJsZHR2SO$l*V>x@E)6dU@lbo&yYVXfSy zzC;}0SGaHNlfSR(Q@oG9KK7^<+oF@gNgg>^%NwPBG4B;vVz7ESKPimFPr(DHaRa#; zu#(-_;hcdgpm__~ZKBnYo1v-+=Z>mSfjyKKz^A~W$`V+EJ)Pd)Ci}IP-VR^U*+{^@ z(YnCQ@lDCf)pXoR5Kp(F3{ve^-wFgvOTZuDA+8s<xiK5`)9#-)U85&Ri=qv7@EC%T z=wVo<nS1+5$>9&?P|&VaMk7!j{KgJ+^;4!UrgCiFSLjzx>&vfOlD1sV;3`LE7qq~3 z@!kSeQVtG5HMA@!j^jEqZAUJyGNO!=xir%^LTZz$jhWhdkS`?TSZ}OM>XQTxgo8uE z)GTohrzN$6X2?1Qb7?ihB!aBGs4faU;s{l7jNmEL1J2}(uw_k2vTouUm8Ngle=1*c zy*iF`K~g^@Lby9+GioEd)z7w;(#6{mK6jHS5)@xrm_^UGNA73yT^@?&SCmUOK;!6` zKM1dnlDn`uW$__*dbVrRQ^^kP|2krOdTIIyJA2Q|r0$I~VGpKUS}=YdoC?KHs4HTt zvFE)SN>82uEN$}q`h;(*r_5=I|1DWKS29#KMQavF*PHBl>q0I!Zj?#cU!8`4Qub#a z=RBx5bVz^H2;0C0i=KS2GqtZ1_G&`p@UT<c@#5mlq}8xlU_yol_yuInTe-aAiiWtq z>vGL@;M^o9NAO|iCR7953!~D>#UEB8rwm&o%{opu6pcM?w=8Sd|140KBjf;U+~7Y| ztDi9QLFb{Wwq;yGt@H3VW}#Zy0IAtRtFdk~<%(g^r~z3o_(SH%r+C5WNs`K}h@lp> zNm7@o)TqwMqtq$UMrT(y5GgFb2F3Rb*C3{8`YHXnv0cpP930yC&hY#0*r>0`d@v5Q zSR$Rh73bRTvA6U|?i!rFwz+do6kj_7q(%k9Mi~0w2Kv;igB>gV9Pgfy(@QVlpjS*h z%}I_HhaGMq$|Gm_SYPF*|LWX%jurP_uxREy{$L|YJa%x%!s<XrT=rt)LH{OgB)%m* zO5zDIM1s29(GL^i3pN<XgZ%r=O7yc`DOW&^A2`a*NFXkH{q4|Vi<*(|Xqj=Eu-IRb z8_!L$M|Y2}Hsh2tq%2ZXiJ-+0nzt6sJA6C*H}c5i?&&bG*Dmri$3@YI22+t4k)JS; zU(qes#Rw61fS@C|Zdj%k8Dc%==A@gDG0a25KzJRyXAc}wEr4HaJ8X^2BmTSaUxkS2 zb|l%+OquM=(zy0rvcK|n&>BiPoPCPR=TZeQsB3z`6_%8$_*kZz;pr`;lTQb@Vq-zO zZPt6WN2h~!=xE&~jtoQS#Mge26|yc|d<mDQS2l6pf4-YPKF>0)%GQtMzRMED&+<i> zQm51^isZa)$fCbM<567v#k>5QE8ia|J#HzTjXEa1@7SwH!P%pd!1V!V`csWYr(Q80 z?;U+V=8Cfm2HNuBz|2BT$dE#sv-eFqhhU;>Pw-zi?jBx?GRhb3a7Oy48~6X7koiAN z$p6>-^S=q1sibHlP-_43{v`fyLgt%khfDHRN@EN8J3T_={=|P|V`lq8)`lO^*E2hf z0!ZNqTAb3vXreaK#&;EBmz@X~N-avQ(g0Ew#b`;#9Fwf4cq*{|Q%AzYU{DK*BI(UD zrlK4}-BwHTx=nJKvV6=dW7V8Gv3mD94CB-c^k}PSlDt--fV@r9%LhhLt10VmK!J$_ zBRZQ)82`-cHgp;tgRG8@P4|3Xs<g-uwn=wM^a;5?dE~mWQVU^>f|vpWwMVbbZCHf( z+~epfJm;%EIQ|8Z+Zp?h!Sa6CKdsY@N0&NhYof3e$jx?17dEZ^2G8hcOt&7vB-b-V zIJ$tb!g?zSBNzm}3FiCNKu-d=))Ij7h%dh(c8<=vos(%}5srePlp;<ndn-zowa5r6 zVd6J}xSO=&MN?>O${7NVQZ8{amr#3w81Nbqnhk>NOW0Jv=??^xQGCZ1bf7|To}qXZ zi|A47@$~dC+qvD}w*KaCz)FV2>+|%xp^US?2-Yu&SM4Wo3#4Q4-+x!={^kHCOgtYe zVghP?fn|tQvLp?~J{hDaKVVr7!AbBkNx!ucY=!nDU-swjuuA$<)1l|T{!GnnL4s5Q zAJxtCMITcyzwV_ik?M?ajx<?F0{^v7yVmE1Sq%UQ@A?*lE~!}&d_;<49;2?%s}TPl zkfi<r{5;ovKwr4d^A)2E{3eKVfR#Y%Eg_X7HD?~ZKfzO7hp3rtB-$#BKhQW4@X=ce z%nV^cr6VZ%a{r8Vd>Af;x!X`|?s^CNS6oA=L@2s`u`!GPk&TJ}pYXJ)o2i|PGZXli zhCK9_gC7XU*HQoV`_G#4++XkQOkJ4Fod9+wE*7R{F1E%@<}S8O|2|6-VCQ0LBKP&r z=F8L1&fHY|U*Gt5uU<{x9#t9ndkZ~15uLiuoJu+MYJYQm#93xc#IjYUP3ExQ&<JF8 zt(*3wQ`wpSU0-=&1m!1)f0E;sscL-wa%#G_`SIj09`6Q0Kfez|LyRSeeJwfCKnhP< zS=EH$#kyZ&@UpxbF8n6p_5xd;cJ`g?#;wNgLB;C735YuS_o+6qmWvO#_z73-H2KZK zyY7Ff5;7n9RXl{!DOBkv7tmI%By&(~ob+2kEebcj;LTO*%Fi{M)LVCL?g*TgpD%ik zV08i(_~Qa?l?%tjxmzZbs5L*uWp%IFxd$3A|M--wRNorzlzF0$t!A|!5by@lT?3TR z7*hXyi9nS6ajz;M`BH~F;Ccl{FH}Cn|N5nnQQ6i_m(9#i_g6cqLaI)k$3#l$ZA<C! zef8Lw^|zW=ZjwP^Kb<AR7*WhP0ga~A&5O<!Txu>zoz#`9mvB~(Ly^J#&!*CDR|R}< z=|cEJC3eHzj6n8c1icXiqrWY2!#AgYm&`{E&dX3+C6V}quMNm3#ljVEq$NF#3i%UA zYl00R%|@r^t7NjJH>qml4oe(<+Q<#fk0x?Jd2aUG-oZ@j8{X5h4c4RB0BsQO0Y#F& z9Cr=JJjIho0;I<>L>X<fk`EU~R+!55&Q@U%fCY8{6kKE|Pj49gp|st|qVyG4k%H5} zH}U%rT)F1{kNjgSv0*IwXnJe}-337qcdCFUM+ZyNR-qsJtlWP9@Os%Gu?GT?B(0^G zU@AMv-oA(*Y^!T&{nGUmOHX}F|B6#|n#DgNUxE7Yk1_urdr1F|Q#GakPheJQ=xY88 zGf`?L%H?i)Gr=~IKo(nd8Cn(<63+!Bh|xX@hcN>a0EScW`cXd)qmZiB)vK&uPlE-= zkKCu>NpL9jmhVib)7iZJQ@fsF-tVt7dq6fv8sOFF%@RfuSA8i7C-#*w<7OIOz>@Jb zYH1C6<O(vxF=Z`%l81G0IUvitn*3Vrsg)+0ZMi9A-Sr35XB*x<9;HnkV@SB@ycJY8 z_*d6hzE64Bt!6h@Zs?}$smZN)3&F3{w!lmFEyYT0uyu)6S)GLe$@2NPEOE1gLa1O$ zXq)#e<-?S=n{R_#HfA%ns}*;x9?$bv<zDX6vh7dZ25L3nSC%s6h)Ul}1y?v^TQYT~ zoaH*kat(3{>Q`pJJI`n^Z&sh4rUmjyKvG(`RWf^~jEGs<M^*Y_EO2Tdxp5(sRNL#Q zKr2_dZm|q`JEYw-%kOUs#EFx<X~pCkR~^f3JP^`QW3{I~kUnPWY0h#Z{Ps7NUWgJ@ zW~)38)%oQXr_$6fZs}aCn+R@%qYJwqI%bZao>9W(rt$EROP5Mrwa6nbx`@ppS?-Na zvj>Eu3Wl)sS+T8OyXYy}oqoMQ?fQ{K&0boNMYhUW{&6*SIuSZ*m}l8|51X_#ZF zg+sU!l<D=I{Wh<IR^$WgYU`j8uOvF2c&72!tEc2!b{h~wj$L=4*T(j`*AiQ{_%sSP z$xH%WTU-!IP0mnwh#06AZKyU>yQ)8&%zjSWJ?w?6sO}StfT8Ia<EGHj1v@-5hXqMS zB@~1-bU#D7u>`Cq#`3=@Ulv|y)O5*o9+8Q4=QRA`x5OK?8m4O=Qaf(+0+zJ`OXWZG zo}Q^UqWcaWf3g#ePB#qejD_}?{M(_ne$mM^?`VA8i2wpF8qa6@a06a5)OsI_n#p95 zA%b?=i)Fav+@I=TLyryH{>UKpN33&l^CqYOl>=Y+Cb8Ww>mRoqMnfGn$V>`dBKxLM z4gnCkoe;uo<fo<?#6<TCU`};tlo)MjPezHySpmcQ9lbc`xzd;=e614kNu&KLz}But zb}95e&4+tkA5n&G67A)*O_*bD#p_&TW@}-bpF=zG-&X2oHAYN8stglN{O-sk;C7SZ zH!0ca6id?B7*HhMOH*2t&`HCuS;t3ozJ(mpkUw(GN94qZ|D6o>$jtS&4Y~u}Y(&SJ zn2LJGv81-4$KZ4moL~LkiD&xt_{8FD)`9IEM@ARELlqXsLFbKd=qK6!0_|l)-Te)8 zx-JW8gZxM*QJ^;r#g7#r7)SQuBUbcZk5QA_=lha+--Y?{)=K4CB$8*W7O6at0rZ5N z&A65}S3YCb31djwG2!Kd1M1r5(+iC1x7R5_ie#bW10vlq=&VEx<T#jj1kT;pq$XOh zXL}&@5LySUK(+^}dc2y1H;i#vm(M|%)kJd7AlbXDzkiescHWc!{?`R+>eB=e`ASN2 zaQ{?f{zo(1|2;90t0}2@I+*_Z;!JvTT9-f{7R14UiDzkcF3T#kwBdsC>1$QkfLIYH zk&!236b_J`PZ`%5ZY4Hn_E^U{MSFnx0|ApR&3j4yv*%4IE4yJ7r(?>+DDBnnkK0W4 z_l}CCAO3%DaeI0Fz6lL$3fquW80z;06Pp3*57j0i%h*OxJTc%VgCeOLN=b)(N=c{b z%d|{%Xj9TmF(xJ>BQea>#e>?ajFMktBFP(yjbdJ<`ix;@+DcbshecsNo$B82(IkUX zT=h#bEjJ`3rxQXb7F@j|%vRjoz2Bw{Y8Ir}y|Y4`FIu|_#M&%w2HqVUWJJPI?QkfJ z)7VGP9_5CqQz$|d+ZAxBo3m*SBa4+e$wxQ5%BTVPRyL+=#mX(w?_KTPRV$^1KbxcN zGT7}Zl<K0}6PWOdTBg|_Xid{;Q=;{n6Dx8eUNtMQe)m+E6RKG#n0A+EVhkkKzQ6cP zJQ8hO3fQZX;_{s+@i@22ZhW_E)}z|FzTn=f?^-Cv6hEZDkd~610)JaoXtZrful3qW z*^nEW=9(z<T&>+u@7UNs+=j2WcE`VZQ*_grlbEo5<fPE^8aZ6kN|tzj(rw%iSh8w& ztJx`%>!x-u#fxd?^0;5r8n|@loK}6LOh#!$eA@y#_Y6H+8T7(ZE#1KU$aF>6+2@1Y zkqz(hw?k-AUa5^>;+Whk212G#%SKa7*N@f@)=$>=CmL#-O4nEJQFhImuTTRT=LB5J zw&CVh%O0`Z5PwO;Eweupy2`Y=dhHBx$aVc@;O29u%_`*kE=!c=;FX~Xg^a~7@qL(o z_&cMQ-d*d3<B)OxLHS7G2#1*o5Glwk38k082NotLA(P^ci96r{jLd%5TSlS(q|k3} zCHG~c^<b#RSga9>>geSf+ZR0jKyrGpM5+mZ&Uq7hT0%yC1TXz^ibQ=oRKc|8|0Fno zQP}2kN_xzwW+Ej{GEb)SO%wMM&B<2fwkzZhJ}4llo|y#Ds0<hmfq4tX!J^Fn#zrz( zNIRLtj72)o8r83V2gU^VENp_!!>}nwPP~b+S1l3Lua9;$ASKoMyWbamE~Enm$6I`x zD;H1uC-gV%ra92z$_)Pi$BJTjX28-SXmO=ZNCqQn=_P9*ZV5~vXf^U_Z#9YtxE_@S z_-1XksMpie%@wg+dlU<IS|4GTo;+`-@A?Gh9e3`=3z;RJU|#T#-F;2`eJ=h!RbJ4X zmV;-*Z`&gy`^;y?K{YHn*`Lt=s!jTIFr<sVe3=OU(U%GDKh@Cg04In4yK?+LE?WKf zQJP-|{%?y`Rhn=f=wEc1>q!%HH+R&25n?=p%z%v$aSc-Pb}<OiTp?7_h>(Cd1vjd( z{_fQ*3b9@=E4r%YC(FF5My(2Un}lXKW!Wa3s`b>W=Az~G)KwiTqNlvvd1rIC`v7^7 zo|-pbw&!f;neTCbe|cYBuw4td!1wxS><Qu7sX6>a<2nF$^FeOmK5Yv7Nu+WEfVLa5 zg%!x(Er7MtykUVPO1*_)e36D02vy{BfEF0|;f-P8vstp+04q?kdk=f%Vkp>6d=Q10 z<VXko;*pB>qkqfi$rSSW=GI{PH8SW8eRHM++LV7c0PBbP4F_ZxI)CYIEt>cX@5(a* z<j$e7L?4O(q5AC1NZ3nC*z0c;$Q>1jXvLl>O+xjXw4iH;^~IakAS!g9l|ZUn^p?Nh zAr+nXaX!BWde5FFf=V}{gdcJEFD%&y8-D!-pJhQOJR&WQ({QkU#k(i4etlhhj0dT# z21&PcP`diun4Fj_;mPXOIE8;aq|C8buw&1r&MZo@Z5DXR1|2zugLO=*QsA9=Cz7JG z9U}AUS&H#KuL?2YaK3w`q9FX~h$-#Sl%-Vpbn{vnDNxqY8#Rm@sfQ5NG&Sa5yS$dO zUq|PB7mm7|VQe|Ci_g~MjvVYCj#<Z?BAPSW`qUu9iFIY#bYQHo`VJ1a&=9m46QT+w zT1S!0*^lB+<~Yj0l5u{_lHHIcya!;nRwiW3VNHs|VARBpfX0ylw$FgF_upbyv4T|@ zUF=HBGs_6c6CgkWgTj}~BuBq9tjR}G9SR2upT=ZM=4UjfE!*leQ;_Q9WSdaqS?R^$ z019SyjH(kB3-{FLQb*N?hs*(bT$E-}Qu=_3JV-7MOBmHC?INbJm!{}cQ*x7cAYx<m z&U~J+L*wwmSZ+7{WEBPyO?}&DZDf;$xkJXE6RSK6Zi#ZWcf_95TWE}$-H^x_5A`9U zTPmm}Ja+xt8?c1ij7Y%)@+HyOta$`Q{b;LzX=&+LoO!bLJfxc_r+3~@19mk_Jvams z)pbm#HWzX=^>;`rlg{e>nio9r>iz4@8UI}bjK70DrIe$1<8h|hSWRUH`&KZd7=MTT zu_<%(!88j85|C%i6EqJjiaMJ>6^l~iz0mAYN@*1w;q3R>wQrU+$~-bNeW9;eN4E`~ z`HNFkF>VpeO9NPpqkYPw_tc#hbooXOmP(~mVXC+!XgKF3evMNk78S+laOblIM$rD$ z0v!;mSw>OJjQ?pCN25{AiuWUv(}$tNN=WKh<Z4eu?{7dr{{^jcEm$&-=l12c&Q-<P zF1>wKiKeXf+kUnHEt4X1mYj+cb@1{WLrJ?)`8cdLihHqJ1Xb~~*JR}rFotk}kO^9K z58b}DN|LSeNJ&r8)5vk4z`h8TOmWx|!_D5Iw|gJKOKQDhtWwMLAU!IvkMhO@;-u7u zbgnX_t(4;@{xe&d<bm$PtX{Ib(NCBkXkN+5tSyt{YMi0+>TB$c6*jyIH~LL6YE)jM z#*{huX?;ji2`$aZ=aeHyr<vhOeGbT8&eO``vzSO^FxRh-Uc5=c6s_&f1%!q9RoHED z95zeA{8{kXb$>`73lqeFYfUo#HaTCL6*t)1O{IF?jcQTZ(Lhz2alx$5@pnzRH6F~M z+rlgR#a2(<`|}hahkR#39KFP)y^*PU_wuEj@~XTSt++t!F6h>#>Rm;5q*0!1peqXO ztJ^V~g}uSn@_cJy0RZ8#taFyZzQ7`~-PIV|t6}W#eYfE+iB6X73aZ~t=;B4l)8Cg{ zpnbz<^=%ipN;s}wYdxw&SWz_Vm!$`j2W(H1?G{jBvQ`E{PcYn?1sM;s*nPgYu{1di zS*S#!%&4d0D{zRRN#vaIdQ!UGL+P{n_%Ayrel;eX`=uK;B|%+nU`hY31c@+|EuE(n zC3~8Bd`3x^Gi)F?%(K>MsJt~qH)j$t!QJJvJV7I1>>-=CnbC!>c|OFP7F33cq~J9S zzoWBoaaS^$U#7=PG89FL=$ec4BvIL(m6lPgAzEwM@9mW1K}8g{N|N;oHD&)K#X$7i zS{^ah2aNlO8Zd`(P%)+{WOV=OI5i&H$rC4g6kRJ^WJ>|?+LYO}o!HFOyyqY|id}C0 zy=Y5VPpz~h!TjqoT8|zqK!<u;$l_F0CCQ_6HiJE&{xBn#o6y~K+7(MJ_|gKZ#QgSc zHTc*Gy33Z*8Gm^}w+W&aRC8g}0in8yla7sKE(c92%$G5bC_lg#`<f4)COF7%6+#Mn zYrf7`>&kgdGB1rjXF`D66<#4LSk=`*CoNM3+BYt5R7KEE=|dSE8rCN+pW4t_*2op= z0K8tQp!En|?|I<;a=)ACygmIVL?2leJEQnx9^Y$@nwp?v&@eJ4e{-<J07D0*39}<p zN(9IFcP%-W2<a86U)|xS(v+7ByNzL|W0c>=hR=-hW#!i?SEwn*eIZUPClEwnlc07X z_m^hxA->nN!m&C)Uv!5lFFQi0>Z!7&9XCH4^NK>T=@F8$QO^YSYSLmq<*%M(@Py0R z-P1catj57X@Wa|eUDq{3<Ez9p3|g+UsuT5gUJ$kfi|HjF52KoAXL0eYeK*g3Xd?(d zrY?efYlC~r<1gdgb>Z^_Q_Cx!twJQv4JAamzuJ;C?z&9jYM$e6`2BdEYSFn`)m~1| zKa?R7TXLRZyGP^Lo@S8~YA!4fklyn(tFFuuip$Kl^3rI7+idom+$+^Tb)F*FU)>Gb zIccZ9?&r^`@LB~6b#xSRtxzQ0)qoy6UihVf2~S=D95_A%Sw@^eQ;cXCxSX{69waNJ z3p#Q*A2=15z=Z^I!417Dypz2T1{d}%{;6Fk&-Az+lr0KsQg7Nk6o-D=FyeP4y|Q4E z)_4T4p^GQdwE9T$b{k$})^fs-BCA)udKf+fYQ_+1iqid&I5jB#>94<nfZ$reumG|x zT%1_b_=@Y1cG!rS$YLA^*m_a$aYUiQNc*H87pQ{Vph=RFy!<eHk`d<=W-fdb3uFaz zvd%HPMOrK||ASy7zOGVWRaz)PD+pKr1fwuT2flitJ*RB%NVD>}yCLHSlHlV~)T$%y zk752N-10T)NppKcP;V>_wc%7)PKc1KQZ&0E(|!Ui@{1v(Jv(|7#68$O<`meGSz`Ve z)BXl68vZ!-en)oLnp|n_2(!9x6+=dPG#Z96TA><_80&+SjZwB*R0d&)$^%e!c$!f# zdSu04qC;pa5glLth_f`?vAHkYBKywlgkg-`;e@vk{rl23=!$@!FP!;_0cmQ{t%v<) zV=;y7a5Q5`qOima9EMSgK?auK%`z*yUNqshDi9k*Q>!GlBM9>dt2A4o`tu|goc4*q z*fWT`ta@S3ebN@+g~HwX6|gx_s!6yZ@N^Ng%oHLUkn~T1GTV5VaYn02N0)uL55&<T z^=<1q6cZDb>V9OV_H+UpQXOeLQN-hKP*X;YqU`35<fW)?QgF36((Olfg{LYebHGN| zXVZ^OFg~v`gZITE1>>PXHj@=b<BI4nhW*4UrEy0z0jpguPdc8YVAH-Wee&(6J98A9 zV%`-)DcW={rg*^xJ5LI1Q)Of01N@d|sPWh}#B{EmTHI*u2|q>^o_a#bA-hI)4Qr5J z>RPq?U#x$X*e47rC*5Df30%y7LfH)eTw<#_0NnqFN&epuJ4WM76HOESZ<h@ld4Uv! zd@n_$p~#}6uuVi0ZN9{SN@A&D3kgoY5Nn?a*!q;+GNap%riqg51!tX}Mk3NhXa38T zPlgZhKY33N-O@&1oO7Q0?T+Uy@11ML>*@E$oogfzmjh@jUI!JSAK(gkJJJJ|Skt?e zXn<eN`~0MgTFkqH#6WKQ)d+KDQsQ$lct<L7z1@l^QbxxvWjnLUhzXArq?rhh>=~wT z59N@4`55Qhknln@T1xH&RF*Mw`N5=cOB72K9MJZF$^aaw5oP(6Xk&N{|6Q=)DyB>| z99*)DYD7%d11rYj=#q$oSQ9jvKS7BL-1=tg(b5bv$l<5uBqdIf+3b`{Fl0aDRV5^{ zRh`&8d3XyZ&wSV9fNrAj2y3u?%zJSr&NQB#%-^eUobm@#CN`AS70cUZVNvr&lUOT8 zEyWebl*vlY%4Uy_DtocP$>RAm1*0I);B_^46Zew{74IGB`NI424pm&{hjFQ~>78+) z{>mh@OC1E{)6t+s8dFy3sXD_~MctOR=i#gz0-WOtm&Fk%Sia{@rs1GCghtAPSn?FC zi7@76FMDKXU{V2yps4^{@9^1P#gK;-*wj+1aoV8HsMY%!0jcC)`~`?k+C2`v)EnMy z<eTD<mK)BKP2?LyDmzw}MVH2SO=nM@V!b6Jbh;(tUexU&Z~W;uRDoUws8pO7Um4bd zGgN^=NmK!ez+Z_sFlH1!ku%tXomPi!s;B}ZSnzn^oUjrp<7~EfI1oniG&(x{sV_49 zD=)yjHdUM{OrORBGA#jBr?7wx)T>=xm>tLTDp^xnjfsBL?h}#iB9ZrB^&o)Xa-*j3 z^2tRtL8%pt``>|{&$vveJbDaudABqi0Hx5CnvKs2tDv00*|ugdJtv_uU>R!a8D%|> zdMve11Hgfr6Q74=U9i7K$yb_o-ON9C8R53dO}LEnt`S@5-m`yncE84Pt1QCP>W>E{ zXK!tGq+LX&{wGGq$~>Po6^Ji;lH5pHH&Hs`GOI0ZQgt6Gp#F0IyxpxR7f91}B@+${ zOi4Moy(v?wIxn@2SqH<3GD$AXIJ5!U{XJOL2$O)ms>1q}h%W9@h7`yF$M#SOInV0K zD@MMPU-Wyv+v`pWuu`tSQi+RKf@Amk`*~x@xET{mBeAS`Sc!X5xhhlbZorDM;OJgQ zqek`qA<`Kh5#c#bDYPTnhMceD_)ii)Mv>I{&mwo;uH6Ch5(65g4$n!Yvd}c3p4k~W z`T)Njo4AKEH!WVC3N&L$-$4z{z+THztk$nY1?*J_jzS&8B`c)Pp^@=RRvp{hlhQ{c zXt%jkOq_xlM!2a5rvetCBssQ%wQX0V3r**aD2cE!y*T0+6=@Lf+Eg>3Z!s#3Za?y@ zP-We2PVJ_!>J67xR4qfVUEt*vKYrKKE>Z0RZ)Y>K`|M?tH^Dt}XDnnmyg2*hz-zd} zRv7zv6IR_7;j%7+IQ#k))D|A*tcmbgV~5qcbps*2k#UXT8A_K3%2ZFlU*K8YcITX9 z&avoi8<C`?T@HclyR37Lrb7#Q-5Dou)%ShH8<eiKLasILu0V@8X}*i^Mo}+pXXMI% zv`=s6o#V6bH=`guc#fBIJ8TJcX>-f*bc3&KIk=jkx4O?IX1fYRAh!4_CZ5W_J&#U? z$8zFsq2I<l*h|21=3!*+1&7U_5255sSj7I^6t@}TZcdnXn^d~{E5Y~K$7m)F-C)dR zoo}DX@U7PNTRr0iAgnHxAaGK_ND!|V)GdPlC|yvtMA>a3{iNc9ySE}x1KKfsBvfOI zTMqlRJWOeIc0Bd~hF==vz_{yFJiPpjx~!#d=?<9+f}dhH?Supo#v_A+Q>KbAE-adm z3*2}AzxIYwgjsCkAVEL~;QuMp|NrQK$OG&E=KtefzoZN8qo%$rcw(0L%<2h4f=s*^ zA%v>(O<pPA@Ed3lj2Nm=Z7=z~6ci<!qnXHD({r^oxJzHGzA#M0s<*J_MVF!bR#Qzy zzTe5_^RfIGIgZ=Pj=iA%&ZhfL+sRkU<8P9;{ZsnRl`jYgWyH+I4TOS{Lp}k7f>h{; zV`9+T2FaR7x=qOlx*b98ZXhkcDKwwL(K9PX_TEmgng=HW(y*o5uh=k$ip^NI+8|xF zSLJlbfUsf!$MTJFHo=K8gFkmP5!{7V*rS_Xc+|WD3*mH)tk$UtA7P;6`YknohVI0? z0}t=3wJ0rTzO3*TA|$u)5XSq);ExP-mx@-EA@$9pIy8Maq<dCDA|&f0q><87bJL?1 zAzG-q|3%q51!)#U+qzv{wr$(CZQHilWgCCluKLTijV{}+F0;$LefHkx;$iO-HzFg} zdRh6DbLEW8F}@)`vOHx3zgVsAj32|F_ACA{Pq4zvmnJWe(&brt%dauIoT*Axoo^c9 zWdDpNukaxA<BZNfXF9<Zjc*m<?=2s1UIHdr$em)qbte-%<6unY>Fm^B6m&-QI~HDp zc+E9ueg~<MI4|;m4w;d@dYEjrt?Iqy3NLsA+lXT?e8Jk2G5D!t2?u-SI|>5Ve}XZf z7p-j1bbQ+(zMM0q;Pt_nM&2X`FaNd19RYe<)mrTVg2i^BNqO{hWqUI8jq08MmtUaf zi7+~$%AGMfq4J$FI-%;F^Vbs?;xCnvay4I_5lb~+jS+pCG^!W8&EtQWm4=yrz|lRM zMhw*M$O&FtXnKR|?w1Ty@7%AwMMpR@@9EKZHSX}ych&ED*n9~Em7Efy2{(*c{f9pU z{$%=@j49r+^7_Xc-s*hGhv|RZlM8<3g@5<gE!^6U5*$3kbrD{^D1IdAeyiM4O6<(i zboaCMmFydQq!RWqm+z{Bkf{?9>qDI*OAo8Ad5tqxO8vP;qfkOCEE^CdQAhTmkUfkj zi*yq=BeGIAsJpJa<pKra4@@MmgMIsOC@-&F?ih_p)V*2`DV6sxUq!cD(FD`Qk<AXK zFSX72S`j)k@kt{lgM`!Blqug7t-B``v3Qg@v9Yw)ox7s0@qi2#%hWk>xaSG6_s2Ij znK}vaNo9-U0)7}=xFLTFAj8?@RF8wq^Fyk?f5?}@+gE9Hgp@A#N?6Wa{Y}GWBPegH zXl6L|{FP0%n-a2R;OT@TqB4*n&Xx+3FKdbHP$y7VQ!4zt%8Sdllsw|g7n5T~;={>n zKVZR0tv0v$Z*~LA<ZDXjOnIMrfsF-H*ika0iz%V>pb(gYndI_9pDE7J%XTp_k*ti^ zrNCu1pl7X~JUNmL^RbDkb(7R8Lrhmd`pj?|TkZ=35sD$K=ln1Ix%KwwmD%Q6lSy-E zeN0B=V(Gal*VggJi@_i=E`0{kL7>5^(#CSDgv#cpPmE)W16&IyPfuKD`A)}5oDx9` zMJMMeLM?60BiHKu`B?fK#@uJn!ulgSY=tt11+{Ra`T{B3bsnZJ<=UXA)Uy~CX-<=3 zCHvb)=Y&YSqL_ptn_Zqyd4AdwlUcT!U*8URGJmiOo``?&Po$Yo!%SOrMUIZ;8wWBt z6ZApvZ`LgA$__U`T>V*qWDQrXLNrASSQZwCy@RG(xORKJjYX!MjUQT4MPzTvIyE6J zi7fIb5URLvK!bAdF5m;M>v$Hm9+!$kFKrnIKfk;;YZM@DL)$T6ynw~E>Ev12F#c>U z;p(PPMm?~S*_n<}e}|Z#H$^+Jaz853lbWM!TVS+p(UbQ=2+{k^WCw7-w&=__er{1J z6jB%Fd}R(APTCQIc2jRj6|*<U6jR|BDE}=NCM_lmEBzgpfVO!0x7LZX<@LCK0o@_N zpmTWrpd#{;qWwuzjN=ZLD~?X&<1I|37359EaZd4fmfe?yq$XFf87DOlQ74`DDh`c& z*$8euW0-Q<*!serOMGJ)pAFw&bg*CEMPGVH(uI^NsH?tYoM;AKInpV=v#LVN>g&cw z+#4O|CIxE|1@7+;HZN#{GIFTw>a82k+CvqI5dB*`k=@&J?inFgZM6_gqqcC;J#+ZH z;BsV%hayO5WKcFQh`g0OZ7&^UP<CdiBPx@6itxz7EG&v}T9Z%;JQ7XR_o$>SEOLqD zR#x9$BcfB!)|Jx%i+tKSO7SD}Xx}&LaWqplWvXa2<?1LDW)0L*lN^#!Ta(}nV3ah8 zA?kaKZ*+84#?)oG)xi(v0+KSDB00R0s1WVXIwW*vdDO)bVl)wUWd;kYB9W<*#L6fc zW?9rG?OFe<3{t8v_*ng5Y<q`<m?0gDofPt3jtFHWZ?|+&RM(NhEFcCq8q?3tRq-W+ z6Py_?nEe&ey5ZS|c#N@m8HB69JpA#?K22To#mUGv!+i2nm@Qdca&&WhxGx&0?nTiZ zE2?*i<*S?*@fv--8&|flT)`>gc(yq~^}dZ`A`Mc=G3?ImTER>M3ygxNQ0D|a%O~aG zv&L$AAY)k;KcT9UZ&vXcw$Dh&)1vX@@di+56Yyrvd2=2XjpAK?;m7r+L0Be^;!T*w zAB@fOIce#2umy4|bVO^FMI8@TL_y30q0@;X<Hr|=NONd4UOpHq%3X6w>zvi{BIN6T z4kVTHo@R$2o!oZm`_zW0TBm?yi8YyN?q0(2h%k@t-=Bd*tYW&I+Cm?7Kz)k-JnrN! zWws`9fS8bJkU=GIM!IrC**uNKnKg1$4%I{zn6Hd74K+jtkp~-bl5b|7U51Mqf-7Vo zoNdfBDIAhMBSYG&kYGqiD0vl)Nx8_Fm(a+_Inh>Am;GCQV{d@4iomI82IN)`+1TeO zJNt{W;>PlbBVUbvf#zII5sw<6GJKcCC7c6{N*<noBA++ShL&aU3<RyDtxhl$ER#nB z12xN4^>UUxl8-``f|Z3}<FqYV7zab?AyHT!K0AQp*vib}lFg}!a>Wul0YpUq9p-~Y zE%V(*w<VX)VPq&6PAN~GIy1|3poZQv#ZTeF_n!GssU$Z;nB}yy?v6EQ)dxn#tjS^8 z9?Tw~$m`KCEDj%Ubq3FO8YtcKvLunm>IkZW1PDD>Gp#lf&#G$cs~fJnvr~>e=2$5> zcc%edeu9?5q~VgpM)8JYkHVFd?h?)Hd0{q@q$I|14{K#-%*N^<Y4C=}+AS@-SK68N zQBN(NyyE!Qx}y~F)3aLpkVD>94I3hf5iAdY{#}zWXe$gAWaH7C86{p_c$pkN^Y-y4 z3MLb*4LevDtm{&`h-LfN>_rLpX4b5))|WA>s|IaJfgfncim4x;?F%QlM$6t5<m^A; zI&V%B|10IXwE67gQk1$tg)sQ#1R-`Gk!*~oby2Fg!JDl1EK3$)8+=^m(I>Jj&^LCL z@{uX>G}z2b9p_w<+SUKX>6EwI$1<a6P2<RN3mI@W$tySUuPGiqS@>IadnqcxeC}c5 ziYiJi$m7GD$7K-CY@W0`#fs{!iZmHXj4DBEgCrsEq0fhk$m!<(#_j&D(Pb`ggh0X0 z9VlNY<OjPdgbJP7unb}E^Kri<h1wRq$@YTRJ2!lFfFQnA5!E%UK~u}#5Em2PHNrn- z)<v-~f*|f@RiwIA6`7l9LV~XNY<}PWJ_4HMrNmbf8Nq%R>7|C65H&`PAAZpTLs&X2 zF_V?$CBjz`RSt&kxSr(|p7dV5RvL9O%nz132TksM_V=JJ%S)Ke)}+l#8I=*bl0nrh zt0bY$N&Ro77k%YkvyGd4H-pD~Iag{Y#g37KV|3eiAIk4x<)`f3dH_W*6R@iX10Ai$ z9v!-<=Vr``6{AO35(_Wixg{C1*^Q7By_pyKZyn6}(gkT@*qsODHhz+Y7@@X`@Hv87 zYcs^^M6uBZ3tUv)od}L_cCy;VEubI8{fEuN0>LPT6JeFCgL<KPBoR@NfuDW-q->Er zxVl_2nPNxdSt*al{0mm>(~r*NQTQkn%ZGcnv+^m19gG{Mgj&2&x|X5CgYDrNp7i_u z))|XTq~}X^x&ZNPO&&?>8bi;HiGCk#tC%@;!7T6^t3+fMBjH)O&U{krfUwPrtmCI9 zf6$_8=DyT*E`D=mB<M$gSAO3DYJvJhjAfyhg`!KR9-hllRGqVxz1UZOCC%F$=TAe{ zBg8AW7ptBIZO;~OuQKowV=#51hmn#tD(N+#*eOYT4rmqJEmGclvo|R5a_r%Pv9o5T z{!*Zm532a_`V2-cA24hu;?XH|2xVdFkaqBf##EyR9JY*(^>Uy-%Q}ZWJ}RWo3v`{l zM6NDd1qPS*?M*oE19=7Bl#azC?$M%CObJtcrlJy9TV2dA%=wf1t=^JbSJ!>!g?!tz z=fWc$Vq-gq2S<y6v)N`2Q$|TcD6-d~ADy}VLIVuB{LZ5zoW>gFkQo8rna-w)QLvjv z;*QHIUOi`elGc#au?s>1l<lFAjt4gEO!dNsmiGMj#R+3%he0%!bXmo{#`q@_JTSwM zwYa;t*OwzGNHEl)kxaj1mr)izYkKRx(&j!`Y;VBQwA+#>nId`!&9fgXlj&zVPMaaS zK%K)8_@tR=@u6$A^=o*YOHC6qmH>ZjgX1uH4u*@iC+xesPb?&+2WrKkK}D$7GEO?Y zB)Kmw_Jv9hA!bv%@U}Q6sJ{A+P~s=xYI!<{aJ~`x<KK_htPHwL61-4DQ8zieG5CWz zo40LDXi_h7Khi)db_+jx*EkvXrs8O!#;17Lf|Fe~EJ1OHb;`;LT}K=mZ1`5($v?P6 zVzlCkTfg%+RSgCDFoV{O%Wt2GOR6gsJDI9F{nmo}`mj{@NB5rX>AOgl!}t{}zD~=0 zz{90t#Um`WlUk}~a^xTwf`r8K>U{%;w<EA{X*I1W4{9VzuP_5{(x-!Tee6Brg~d$j z4=bC_-nG&0aWLgHJ`f6jP5FcA-mA(r$a}^t6fI<M5;9g`BO}pIfAsTdEf3(?{h_ju z>#v;Zi&bxmLV-ZI_zX4g<+-%3tXjT>!{&kb*~xN5%O0}P4&8)Kcih{nj2AmEa}_+9 zRT;+4@;c?r$$sI#@z;lZ@Arus1CVVlMd8=Rt&+*|QYv~x{G34r*9_gS_WJU16Y6Ya z6g>lFWo=zWRb#mbgK!MB2QBy8U8@(ISiPLpzbsj9=KPMEbPm$!e{Fxgh6FQ7rbebO zPvuKfbH&KD5xJQ$iC!O17+a=j;&mpzluFvWLeGkwJ%Ckab%*Z4SQd1>SyUv+oIe;P z?tpf?o(ZIe0uRDFv9fN>jr-R$N#tT@=ArfNv7MmM{X#@3*$Y2rFp~-sOb^oh?qY&> zWW;Q3S(G4xpyJMBU136_cZS7h83|Akkl)$*r63~CFOGJh>Eo)GE{+JzOC;TIEgtx3 z4uDTjO7`kqH=Hrfo`p?Q5I0*oSay)Z+m<?J{PwI7Zm(u};IAJby*|&_kdQ-%S7Y=t z3V^s#*unPTJgP&-ck6HM8EA4!7rPgwNh+1?6=JCee=aw!L7l{enZ?z6=Mc>=u^W{^ zV07nuJeaeJtuB+@+_*CIb?KrRH7ZRE<Oq*k596Tzf#LR;w3#%>Yn$-hjDM$1%eYWQ z603SH;?}vB*KTmFmpt>H+yM0?i81|^uOA@{QPUT#=3xxlT`z?I5}`F0hAcbXpb5;j zF;AOkizB+D-m68o1R{?n7dB6cnU3s>JaT^G+p<7@>`)hpyeSJ)E#O2c^5HZ{8NwXT zuM?LlCO6=sn7Hwz!L-xArXZ^_UdW&<Qn6x1&Pw1YlYdc|fe%6PhY$-?@4u|6y?5`| z_v+U!*gVkC6Z7}Fhh5nEO`ibdaHV&0ugttUrCAiIB8>jXLHxilUSYa*5b4bUiD@&N zGCRo9di<ptm)oibydNK$t3v}2#f6AR14dZFjtE|HKI|dr-3X39cE!7)9Wza2&eHqH zF?T>KJhi7(%uX^Q2PRhb+V=5XZ|%5s0|iP_{G>H><`L#vMQyYwyFT=OVl!zp;us}n zSGPYhbW^f>3D!!SHQ>Z0RLw(fTc;RXr4Urjf0fK18L(}jY8DGL;NW9v79(~oQZ3E_ z6{{s6lO+~?=1)mqGI~dB%wm>-eDM+xqXLD!iZ#|}6oW9C(v%P4Yd<EuF#Ftv(&pC@ z3-RAPMOp(R`ey)uk`lN#a3C3V6Of-*#H5h=j#WAad+C+i*Em{FO6K;`1^yb;s{9ut z9N1~7a4-QkTa^cvolJDjVj*(bM2lQ9Y(NNODfJh^H<S1jo46HS5fC*TN(;~S@--2n z1sRV$hIF@^pPt))n|`d&nQH}k?9G77A9Obh4^(XE30G$eVQ6?cF~?0867D2j0gE^g z2Vv7btp<L~0FDMvVIghqUB%^^w1h2UU<|;4)*EtDIubsJc&i97tqsZL=?f;52gixR zW|e28qhXk6Acto8<#3skmUR8QG({Ssft-9B06_Q-&L?y4Oi3rx6&zwj3)k8+P%TIY zD`Rqi3tFFWCg)htN>AaME@&mQ&_ZFQi^5JDhEpYJ^AFpV(oOs9qW*<Hp-}>v)!3wZ z0PR>bFs<@}7s59PDmwVC^}k2PV1@W_pY*AJm=%!NpSZRH4R;08z2ASGS~E!Eg0B%& zLSBJbDNZ7zGOby32O>kQ8UEf=1VsFmSsU#z2H52V3e+aoCE~WFb2m#}D8?Uc8G2F3 zASy_drf>+{B5_^g$XG&nx0L4?=P`;VBV~ppvI_xq45b4wQ`_1^4rt&Qwt_stCJ083 z5#sUt(^B)<gRW)xyg^JHCRV$|NP65;P%-X6ux=EZkjfDkWv)+H*7m_fn=Vz7wXRQG zG11z3#0KJRq9&%9+D33IO3;u>s*lW#`sU$&c98Lw;v>)-8!VI4RhOAjPU)&-6l2^3 zzTzuw5+W3Tw}|RfF1aS^wlBN1yBZ1l)E2Qn&PBHfVGMXOy-;m65B}r|*PB%=fayO& z3Y9H@X9#0=BCjs}(TZ>#cDRT9g4*$M7g~x6B}$pJnIEg|1Y@yyW5k6X(SN4(!*Y*~ z3)OOH9r!N^17>E#bdOID^yIMOA4Nu{PZP-jD?t*c9eO`Whk~HO{NVrfaPEncbbyA* zgn=7HWrDUp!pX<3&3ohxyH*2FMwe4oQdUxDLRS{<3bsxp`^65vxL(ys-lT1|l$6Tp z)eQKAotg^=HGz0y#v_hugj1AyFqR~eqTg6EufZIveI$(8!qe4k$KO#0f0{oMT$AKA zl8%>;wuvZJRdrEm9YDTvGSfuGN59~qc8TU|DQ-&BR^5dDosM?A)*9pr$<{1-s75Yn z4Y>+2PVDa1O5Rsje`;F7mXwl%_Ecn%m&~hU6;B`C**;FDi_KfEzLLX-c3hpF1}O2k z{R8Aa%I~fJwhuA!=~ck;4_P?RRtxWyU-M0;X?>=`?o%`$BLJ46*pjP@RRMu_s>-MZ zG>2N1tTRP`Jv$mmhJpt_T=JlQ!G{i%h}{Xke{PQ0ze5S@1wSH5_YJu){0D7bux*VP z8A1&kko`q5!!DL1kMMsg5+ini*?Uo!?bU$Yy`MfCtKG3SA0}i_fY}5WFt7k88$Q&u zyhZ=-;k5IT_op2{T}DxkBDZ%~u1I!ZxgO+QWlHH*5-ar6Ds;bGQgzg#9A{!C3*{<| zTK|)cKs+|)It=vmZ(xs7WuiV(6Fq0ol-nZPqP(O-$chJ787<0Z54SDRf;Rm#tWFQ{ ziQF(eHt+n_=HS|Az;#j8H$A34>Q#{~s_VQvbQiEj7jvZ7h&1tuJTOhg1vdh8p9l}k zl^GJDl&tMX#GnfvgaRJO^yv@IKf##K#blfSz^2t&q_-35pP^|kh*lF~HzQ=<_>o)s zG$V@me}3)gFfN3XJ+JD)C@(C9LGyM&hB4~XG0<BrzQipz8iPo4FJyvPT_+rmxtmWe ze8EAN4+P6SM=fH2Q(3*Kd1y?THba(0hgH^bk#$;3Stdj0vdcVjTFe_g<|o67_!#_* zh6KXvke=I*b?r_n15t*_(sKe2<)6PB^qIZ%o}+FR@tr=@bot6-@X_L4j;!iSnApnf zLrubOOA?22h3M$&bFr>0#gW}8nSGM!AM)_zCkTq0Fhi3#Vc!;}PLS>^iQrELvG~wn zs6!R|y_LfM?ju!)72h#wg}aBg`f%lmyq~p0UH6aN@(>{0?4i8;NS8o+`&BIxkf45g z(*X0yPk}RO6cYu(2u2P8s2E;6o-7|vy@6~MF=s?uJpY9G8;f3gjDx1bu=z|jqfoz* z^Wrixyzo)2dN8_h&(M&vnvR*i%Ee8|oy2Z1Qbn}Ns&QJeFGEdUs|JlU8V;xLY=W1- zYY%#fVDGI)dP?pXvN&Cko|Q}!vg2gn&~eRjU;2dfI%9N61t%Dl%W6tu=)&fXMlyRq zA33R;*ku0OgPlCwm5VtCw<!V2dMJA=*J%fkbA<2YkCM=1M61Zbmz!g@@G_Wj7F&;X zYxZm{fcXeCwQ%6o%Q<!X-r6o1fBaW{d78>zI%#!&KOq5i_~N}DY_A(E_btaqw(v}u zGNqZP!7_Rv%WGh=4cPJhsdGY`84`AdQa52555l;ugXGOM9cUr-(3^W2G<H1JF|LfY zA(FRRULXk}+g^O#VU+z5UL?LD&Dw*iKr-IcgDY#b*qr#GTeztaR%XQ6qV@oekxy6U zvA-2WT|aJ0)&dYmz9{cZe4}MrFe}vFp%{l4?_54`>iP+t_|dI!L!&jLeYVIn4lJDU zKJ!8~V-|05oH-0=IriOIFz{e;C<YE)ic3^Dx^yKxXE3sB>>9Kse*Ake2SaLHRvd+F z%b;@&h1U_Uh$Wq<moA7Upk^ByGZRz3760lBl*T3;P*8=COjs>YBtDKaG{!6a0Ym)D zm~8|x`VAqPtPfB@{ql_fZ<L^bW!)$b|J5c4^-9AkI~yv2aRBxg73~XV5&kLp`~8yo z=byRSRW49%$Go7aqCjO71uAkhM01S&adF}UfW6ZhJWIG<n!C4|_o_V|oL}bvmq5Eo zF}IJOStLy~-G&IeW%Su#bgUHlrcub*fK5CNKUX%kGw)@an7cMrkbTOr=J<TAnW8#f zzWTwtoft{;iyk?uan!^KqXq%os~xd4wS^>oQhcQt_qhy~oJJ2aixaHbzC06{V_C({ zPt-e&jL<e!m2S{K`?*YnZGaGm5Yt<S+d~g7=*@k)Ef7mnO78O>C;scu&0B$X!kY-l zTj7q~i2+F<(Jw5@y<#nCCWL&csm6b<PHjq*rYTcNhlZxxsA0M@5{`xIAFR%KV2V<n zQbDrg^K1BM?F6-{*G4JI22$IwqEK=n5YNBYU_nbz<ye$>h<$$)>eR<b7^Ejh*M=&q zV-&hUrB;mw?Jt+G=U>V*c0;25oTd=?*wIt{AR|n$)R+I!6aMp;;>l5%n5+Fuvu{10 zk9RcOEgStT>l|Tzm~lHS!te=+f^)g9`?y<W*6X++=;)!-%L3nsJa_}<TXJKu)FyIa z3<*pf_5H)$1wwl*er+AXwy#-f%Md)iQ?WB8YG>iZWaOzl;<mJzxx~X$RJ%RR<i-L5 zCqGE?(K=_}R?ZT1+pY0u&He2chd_5<E+>+w+h8u=dl!#!Rp1EnvzoZ}CRwu1dOg<M z;3}HuAiwWTy&!ulX|^{3ZthQ!UsT){S4>Y1;euOp(D>5zUcYY?!{!A+*cyi%u=OJL zWkcW63t<d{e0<U42Uqug`sPMIazYt84ko`~_=eqRSp)z+hJ`8qfWK_${RnF%?r2sP zwtnhOY{q0zaw>@(FZK_wF#DQMdkry4{<CYJl}|T?sd+WG4)WYOq@V-Ys}tijdt_S@ z`AmNl$_tORjcE+HBTimB(JpJ>Wf}nuXP2R)(DmOHZ)Ja_%Dp8TU29_-zAW?>N24SB z^M@4w7Rc7>o6eM8oky9<v&Y<8M?ctmlk6uL7}O4Ve<zwDa%PL;FK7LY%7rW##(K-T zG3AFayN8*w@=bB2D|MI<sOJp=0OK5hk~sihSm>gc6*Se#Y7HC(2MDW6soA{;8NH+b zNxUlEr@RTXThB<bKH0Qe)W=K)bt)AA4Ctw0Syz$3azM13)}}(??$c%`sh}p-p!8~x z5SunEp}Ew1L#N1m5KxssIpMkmh^ErqlnS-RZswEWjXiMX{eY||#I_*7`sNG0G4+?B zxjIgZSwxsX{xv*yAUa-nOWm<=hr=83)aPn`f%}2c_x>Md@zWydbOM4OKj!5Ar+a7e z|5;)5zm)g?sVoXp7FI+R#`0UV?`qaBG=T*YJ*?D@c6fz2G4D4IfR>FOHdp@^>auNB z{nX8plHz&+{ZJm|Tx>zo65+^v{WJZ%^Sm>Y-?!Qa(k)sSg=4^>G}5Z?;oE)RK&vFb z%!Z+rFtf}_PDvww6gA<VbqQN7*Vw?qBMaWCoJQ%w*4I8KApt&>_7<ej@((lc{){fe z9YP$@JFCF$M!#U~%a<R2@KKB-p99}2A5OFSq!*~}T4wpPhbk^k&LuT3tLY^sGv3^! z?7nNVZ{~=yw)v2<f!ia9=TlglEa0iHP}gM5$5xp{=g&@wocI08rN^$u_dxx0vRz)n zA*p>6TlIXKhf^TM)6b=SNG)Meqvs^ApI5j;gc2urYfxUF14#S=R&jND`;z>c%79<+ zISCl6f#tKq{MWYo=wdH#D5<y8<lXu4x1kq2VL~FQDG=0EVwzEx^j04mfmN4S`!u}3 z!8hvl7-m3MPgPi-(rW`+9dG>=ScteNG1V<xZm{pEO8w?*SHp^%RYXp$>YA1tJ^eDQ ztgqJ2Hs`@Md!xFIS+Z9Y@=a}$y^99{lgW1^{>PTH!N-3DIi*obpS6Sh_!08Y)A8SX zq8a|rOX0sH2>%;eR-*;$o4kzvozHfaUV=##_H#r-mCpXHKv+ykseqmuYyr}KLj`?( z^~e?%N?N{`Xo`PHKG(tFFa2ph=7B8@e(1`xY4j}j_9p+9+u}68d-f)p*@?fkwax;^ zH7CKz&aZ3kle}LB&%WMw$q|H*^@$u>4G4xQdnC{dt%ca>Yq#XS>!ZJA?c3qfH*eAP zjE7QRD!~j@ol@b~+lQm;4sl(c<Y8;m4%t!kY=_+21#mg{B&7Y4OE!!L6goVcz}vKL z>0v!4mL0&`bewS=+6sSoO2zY%ubGbMuh|;RoKGBYyLcyfkBA4Rc-DbEYdiIU@1`w6 z(s|8|O6oZdiLR9wD8}z58TFw<BDEb5y^&+p7s4RQ-bR8Y$lPXtCCJ`}lKC%$m)|y{ z&+c`tdtuB<JB>%5+y!rWG2=4sn@4S$4$!K!+(?5PwCufWbce6nzkv8tF$*^CkG({Z zy;Q&p4&icq;PoY1yp+QC4Q2z5R$=^$_vnMot8nPzM}GQ?#9JnJs=JRq2+gf;oEvnw zS#eg1L%H%1%X@lAE+rb?%y&M}3zReB&F8pqp4*v^KWO_X66x^e?{VdI>h2zN3&lN1 z<X*vDEGKT{?s2ms!JPhv!d<YysW~04Ol?7)YBBDU$T)xwZ4O^cQ=mUk=M9OScntNk zsh5ufJMuxYPSYfY@}w#ew+XRftGsLElShwH+|M=_Ga(K~@b*fpmFQ&8Rm##45z(yc zq~BwQ%H&tQF&}~Q&T}f+T*uz*<}TnZt@I(nJMc51KPgKqvtJhBiLrH=h)P+;g?`D% z+p3mvRN7|H=i$|6S_FT%nxQaF;6_VZwDIco;)~PtzJT=0uYhcox|gQ!Jm1u-d%_7< zyKN2L#hLd=4c?{pk{sxQ`Rb1nsc#82Mb6j2OoW(~W-&~4W9phjzXu<h7Xo$}EdCnw z2fu;-Kn_5$8uJOl@B-JFr<e;;01v=;f&HSn<?Qe>+ynj49}oolibB)|4+_}d{rNp0 z8Ja2a0k*8v)+C-#|B|Iebh=6cBY?pbOZqc^kE*NE%vqAl;<=(wCD)kAO4Iwa*>G+M zW)qaSi?O>@bvY&@2Q(~F4#pgcMU`S#M+t*EnC=wKYy?@vIBIl(#3R?w4pHpNh74tG z(o$BKyfVd@RO^adN9}KzXikEWr#QJlwv!2<+-Hd8M~?jH-ud~0Z>NaJ99h;>S^;&i zi&bTTURK$ho3J;V=$u>@IhEmzMHBid7!6U585Nrse@hiD-reS7eUIk$%o|!d7<6@P z?!1Rb7eC6at+)qv0br;cJS3}6Mu|9AitBZ4+3d7Y+eEmJA8q9-cdERimtfj(I1kee zMc(wBO++IxHyUiZ&?M{+3{9a*Jhm_b4XWBq;Egsh5by`Oa!@ij#|(wda7LlfIv7Lh z%@aIV1{R%1evU+^dhRTErhr`KR3&T%%?*PdwK+$FN{t>EZqs1{zcW-P{wOp)-n5jC z+zikQKA)3zO0zO(P1x56AlurkdcE3QuidX@=&JmE1{I_ZQ-ji+wFOgy+?>W2d|n}3 zD1o45gVG$Ig>JJCB(D>x3Elwe&-vi(A0aOZTf*{0%$Tb$)`;5u>))ef9!-Vm52~4w zrW=%~ly5BJ)M48n6m!0FdW&77V^nog<C*Bi{SH}<?e86K%%>+8BhwH5^~4XCgOB<L zP+fSYm;+Jysctl;S&utcPqD29cQ*3!DvbNAwJ1|eM>#TMr>pgL-HmyvQU*_+GA&xx zgJu|v>Vg(k-tmoW4m=+v>80{hv*3h(psW0+^COGJsjrh)-bu9*jc12hhi4i3+*^f~ z@GIFTn}c|=4SSXh9)T=oH7#+E?8^p@k2E3!SYPQW3jmt(&g#X#c+z>cms`V+8SVs! zQQADw{^N^>bGi?=N)qy(c#7j_lqDL?sq*9eu<p(}CGHe4lkxYt=Pgz#Jwr8;G#m(% z)D22*a~mPtc2630mcKB$whr}6`;~cjo^tLCJH*0uZTYUlQ{ijVFxIo=ric&clMr$@ z?e*jz-;>+g{S}6L)WX$Uk;g<wY|D!6Vr%Isp{K7B;0n5N6iu%-;_}X0&*N$z4LpY` zH9UXY6f@$B|NhWe?}2C0;87uP;nUU6b#Bpk9?jCIYilqztr^qr^5C+}LfI}Xm5f`7 z5Z&;2DmN|dUM{&#a$vyiLy0{#boFwwSM`&&$TW$JAxo|MIo5tGlLQyOX%F2yY+~GL zgNEqZ(EOU87SYr_p}M_qLqYdqh%oiUVSg08aOCW*e_896^*E3on>qdOCPyA@*Nbtf z+^cI;VDg0v@JZj+ZHoQW&KP|u)a(I7lzZW6;M3r>py(VRKItlM;m`RC@H%gxlJdFI zhc{?z3o%WcXCJ6{WYs)RYM7^PP%urH&Cm5IS4a)AGgx2SA)<X*6QeVcINugy;ItLi zu&=V{mO6~YmK;$QFEChU{~Cs4z+b<ED}42<^x#Z*+mby<3b#g-4E`EsO%yXTl1xn# zma#rx4!S0|7KE><<c`R#s2b(MY&g|Xx`3C=@Ls{1(xWZAP2N*3?tI2_z7vC2Yr-*c zwd~|`$Rs33<<JA<JvJzcjoqO|QiP_LzNizYs(FJ})jF&IV2n01wngYcMZ_!Zu*rSf zX#vX1I50Vci(8kOTZQF(ug_@<Y^4)084}rUABb#WrtW?rJt7{}tFy$Ks2ZeS&@!{% zrQB&0t;?Jo?K~VlRjV#=RJzMXa<-R%9?578ktgqYWWT)3i4CJM9yZYN@rfis*dKhY zMblWD4SAk&AAO*fe<dHe`E;jkSrZn2(;@^;(jxY&3Ecc(nM54yo-GhaH^xu})ieej z!VV8T<3h{_iOo#;y^XHsMp2R#GG%Q1r}qAn>5+6%)fp=7o~!ZcQ8cNYi|#SiSu35n z{z}MugmnCx3u-<>+F5QU7e!J5PxU>CH_)1bY2GcQi^+1*;Rxf;nujQw&UJrjSeMfs zlVjdd?m%~#^VC!>IprT+<B93rn5nJx?kVc%!%(sTmoC67EYF)#MibE?kpf=7G)1$f z8eG4^si^Wb9&=zaYXfFeJaLTc35Eeimf0Sx=R%lDn~X-|(LI-pXOT^c1cHF}wM^-x z#Eu=|;qUZ}zta&+qC1Vj+Ag#QK)K65*@qczWPg#>+||ZARD)mrxQ-dL-s_DR8{eGH zh3R4so5{6bwVmlUf<B13U3$E<(CQR+L9+2?wE)~yRucqr1Zmo-`PgF%0y*4)O>$WM zEZ*zKp2p$Bb>p*mLM>veNLoS`jgu{7GZl$uwCkbWCxAAC5-c@Rc@@qDIPXaYx})~- z)1gW(jT<p*^Sr@PH_ZoAc->syW-h+ePvDKHXx>7Cgg~92p?Tptp=5IGA{?p0?%)|* z-Ji8Ch@Yz@kgLWt4niOfV#p4`pu9>ExmqFF^MSf^k@~l$oZmh0o(CQehX~!l{B)L# zI|JKZh|hbXTe2Kml1*OChyFB!plZ>O6)1@FzL&-3r^Ux>itb!O(~+u3kkXQZ_Cr7P zgCfpk`2Lwlm^XsP&XDp7IB&^%qRLP0`Q&d7vEP2oE{u7_#~&n8qt0emdkv^XW6E3Z zkuSn@+v!AT%HiHtp7C{CEZlY`g-q8gQPYPfv~a58Uz8QXX8Jxso=PA#YN<f}Tmuug z*f*-x(HgY?<CcV#v#kdwo;e~(hBYqxEySpLDS2%yr|$HHoKs39vY24PFa=W-3$V?I zjq*=1Co5(}u>x;MXfSze9HLUIf27Lhv(1QPhG7U?7jgfX70L@pVdu&tW6cyBXdTL^ zGI~GizR!$kh`I_zwv^osSOKbG9=N(7=8s|4Cs{UmTjHYxAQZv$873uwUbZA_9{s1A zWG(l|KkOf`!2|n$YVc|Q=LTQR$@u?cvTo6oc0!dz^P~TLerMG$VN@Rr(y$I_BZdG= zf`jJB79J%t&_ZQN8*Q|+mXIRtCo?k~?@fenOst_%hfY5-k^>YCvZvZ!cO2(UlBbjP zNpcLfnq8o1%71@t_q~7ne?L0DrU&@9!yDoD0vZS+xJmGOSZJKuVI=1$eI&{G$c~1J z&eE9!g*n5W<VKxyoQ8suSrqo0V<m5aSiGc%%vLPn$f-!ED(Orl#0<u2A|j($qvm8u z03#^tXbSrM>O|~#x`>e^Qzv(d*wB{j!a+hT6DN;s=G;Oa0Mi3$$5MSB_FQ-}+d))@ zGCg;RIf_U=ftyZo6rHH*@EkpR-h6BZdu4)F1rVoA<=mS-d8QK7x@J?Z)QVwB$sA`9 zW++n7#Ny!G$-$S;xMKdJo`-+C4wso9)u5jQ4|{RO+D3)-z@{%%8tb3y;8ipz87@|2 ztG=C)C6<Ma?g*eHgFp$6^%oBrONT-sFAXy)c)(d;WX}+)+;r*5CLE(p)VVZyBQ(z# z*vCn*U5~O7>a&!G%HY}oMy#FuoY90L?e0`>S;wD@Ud1`}jK$8{Nn_D;ZnUx!riv8O z`dW4X@}~w7?m>Z3Yr)Za{?35jezBiokvsk`9wt|-i`*Jm-}oKZ7%H4gU*>PI$4}^i zjPsxP8{%^?944ru`W2!q)mbqXnhZ%LzRr3ow`6%Lw`_UDO%k7>nSZUZw=FZ$6#pKB z=rNY%tKZ_~op=ck#CSyot2<#cx^@@ssdty{xpxoTl?DHEs*Lf%)b8mQc8}flDhU*X zP`@B)Qh#b>iS&jiK(U|4pJVeR|CSkZGZoQ`Xf|HJ#x16if8+T}eEH`^Yk=}4B~ck^ z$o)WSM})4=wsenGPxF?$mxz<CZclc8TW@8V1Od(H9G76R7=yfzE%{l0u9*8bnU`P8 zHf)iRb+Weq-!o$?x`bmmS<A(=VC~o%H{b}i3^L{}Wl_{^4(PA==g1g?4Jkb#`rMTf zkj;;zj(@jFe`{aZsE1rHEi31KJ^{>UezXk=?k3V{U?RFDIu-j2NkH8-`Yvc()8$rZ z&RS4|z_pB|&66r=qM3@Mt6;3wXmi_@W&EzSanRwnBAfa1Kp?Wh>bms{Rx@hJJ^P>x z`i5l4v!@O1uRsJV__MrumP#0@B(iGESp#2T>+6X`XS-oGEO~$C$f`(SP-7f+@NuYG zwU2DEjtATK)MB<G=Rj%xv~{pd%Lq^b@wD+5j8HoLDLG}Rg^b%T<v03U2mSl>Jbk=X zmw0WT0AVNPF2tFo>mHA*_^%sc=rKU*4r<)Fb&Nmc+i9_ngdiL~*%@|;2dg!Wv_xa$ zE5(}UlN)IZ!>_pz3Y*k!kPoQD64}VK50f$UMpdhEs}9gHc00RQWOPc0!B>77%KiIW zX{lsjR<JLu17r?oSwSd`u75b`(S4_bF|=r;qH#q!T$ShonvIyFHn5VOj5pY!jt_da z?FhyBEl2Q^{{eSmt}Y_(HyL8k_PjI)X~u^5eTn81UH))%6_f_pwxKEPSxf8ADOzX3 zLuzYpqsl3JNnN9RI_+t#dw}RKJ+ZI4;9mBJt71lSfx5q~e|c<l_}s&Wyl8tE>W*se zd1!gc_HxDe<EGbY4Ek#enK+`@pNguq1VeHy=?hmlFgpf=-Dhw;LP=yzf#n|LTpG#( z=Ty2?^U)A)N)N`>r7x?62`b;b<X?y~Z}}-teRJb_RwgJvt8u2Q3Fxaq?5pvw>|n1= zjos??*G4-Va&v_ft=A?1?YkC(P-aP2))bKjv>RZ&z*Pk`mo@$kaU!W61iLWQn(CM@ z+;s)GbE8}+6UYXNsa6xptI380aHJwD@`ncZ(_scRV@~^CP}!`n5o;<uL?^!ShKS;r z;%rk!`h&Gu=fFcEc)<7hxsCai%bO~P3Ku^|9OCDH;5+_Y;`+4wbDTiK|4+LC;eWRq z*jc-}nLC)f{QpCEF#eyXlW=r2`%jwQfAN6S)>Tl2(fFqULB>ROjljSpdgAfO0~|4A z;cA>_8KBm&E~T~TPzfX@zmk7+{=Tdp!M~vR$@?d=XepV!<DKixe@>P6r~AW`wwoVm zw^I_Bqjs^TMX;-hjn4SV9A!-QrVvdW3lwPsIYDOhQ@ZWO#zDjlbg4_Ua5ZOgd4=}$ zRM6oil&N0W>M$f*`{4N`p9V@t{&^7#Q@8^hJ+xJD+KSLuX`;0<KAPQ&sYSXg=&R}K z^eIqP*Ahr6D;^y*F?b=Uz(ejKlMUFxM%~D#=TeW6LM5}*v^P<?zf=dS4Hp*lmX&r1 z#&EEh#Vl@)wgy|f2as{_vAyw7hREL9sc2g2G;?~th30E16k^8y1#-$8hL%`3LMm&a z;Vwv#CvdjZk0Ex1I6P=M;cpEWh3O(Vm`)7hLwY*T4*EeN-p+~446qPrYc<@i4WL%@ zctx{^Pj%={&e`5~2*__~hVd(x%*5tZZrdth|6yEU3!iD6yI>9^PMyg)mC0?xR&TEq z1=5;+gEP4$<#ouFO~VaQq6aW0&Ilzli9$B)f)yH?VDU-E6%XTDZ*-jS>ca7dPYs38 z*Ltlto5Yi44JJUTyMGS?Zl_)oA930cUyxIIy*+-a<Z*!x&S4Td|I_7inRFIF-w7ND zz*{Wt^l=h-@&LSL9qVWw@>R>8v;C7MNWuSl&yjqR(I1`d0OS{@$Y;mfX8j=E(HNfr z^25ToerCBmKR&UD6eEIVLs^da@9B@qo7kIu#c4(1?G5J)M2jG32|RtpEL%P6!xcz( zaAKYlIX!a3%BaGmS=2CX$e4?X;Zz%wGDganHh||YdPAx03srsp!Mciitcdde2jRp2 zS1tej!RUXBF#mrlMcv8F_#aF8zbfZHmv^a-w-MSgdce(Zil$6BVlq62pAc|l#6dqq zQiM7N(WQP!w^wmVhu7Dy$93T%-1y`JA46AQ6R2p=?b3;sZR}fGYFb;;dv1R3l-EFh z_GGS`c{Z(sy-RxZzV`k*O}~Ebb-dqzob3@3V_i1Ry*{DK<<FrP<mR!xOwHG0yx>W7 z$xDaNW!NX?Ir*#fN<DsTtOs;OMtr`9(#FjkD}HI_d%Cj%;nFWhN=V9Y@aBu3O;m1} zIrI)rpGA8?$;_i#OlD(PwuZBukjspnG+&%xsZ7k5@y;!}ThgmNu*Okb^$M5EEmeh{ zO_`@F)T+5#@9;&KeR7FoVwH3{Iaiw?M9%PT<S>+g4V@8*!}RXZI2q{{E4Lxmn3fg) zGUs7D;mOs!l_6HGa|Nwi@Mf=@ICk}}iN$euIB@4NScSgz$>qG2$lN5W+|rX8#yo16 znC5ANs#xBlk!d(`&z`Z@OP58w_rQL2-x=TqC)+#r$b_Dh9siAQ(5r+6b>a**=#;|S z(=B^?x#FFWxIOgCy*H8(<BaicVfNU&BHjO{w5`WClTQEom{tssaOO*HSo(L_H*RM2 z-o5Dgg1uMx5ZApo%5mmc*DF8WF*SYDY;iN}ZH&EFv|RrH7xONcWKQ4Pmvfg?@Y$x@ z&;kK!lCt|ldVOEuwZpK05Q&&z>6Lhgs)!(Eeuzhqq)6bXT7af_%xsCgc+C7EbSC0O zI_ZvD_?OPf&<AyHK63L={7U@zDR5?Xa;yB6m1pcFW6$HlSFhP6Cx7u3EI{M%gxz2G zaMt>RBv}~~PG^535Iaf>xh$vSt3Z$^fx4>Nmp{3jW66dYzUCRSMm_gxTBCi!4#B9b zUSP=tVkO(Sue&Qb@6<!kN^Kdk#!6jx4X#z9O?R{CieBA*{;4uh5T&JFv&2SUvI@K9 zeEXSOu7iGa`V^qA!8EC+yn@+7j@DX9r=6g-JSu$h?^|8v<cbmjG>0mi>#dGO!kT+X zb8fU9UGf-pcjc-c5YWrRb%Y|hk+VYZdS;u}OSEzPBqgQcE#qsJs-G71HI>XbPmr7S zX{Zg7a_ebB_XXS#4wC&_wqcnPl=p$`0d9`VIKSYPbh^-^GVC>S+<slGXa~Z#YHOsf z@7JNYtFvqWDrzZwidUK=&h6oEmZiev;`5aF45FE5PHW^D0x3(H;Mm+mZqt>98Qtnt znFUQHZgs(#LcpE&C{Abl;%kf_WgNO<f5ScqpJ;1Ey>HgN_(T@`fe8^(2*iGj2)>PD z1q@@9s;yUQBW#1)t;dKAjC@4`ty9+>xN8U9W`6Kohb&x>z&&Ua!r->&7UecyZ($>A z8muhUBZP3{1PC88vYZv}vCwvo!nDZ}!S%c0HKwmlstO0D!=OUVDk*6tWZ65l6tquI zfp~ZfsH(GnrZkZKyh2M-mZcS$h7Sx*Gnju-&)zRn7|z*+YgZObtOWE!7FU{qQ8-ey zuWZ<dBY&wvto;s>bs{3mD55`O2^vdC8DL}Xxom{W7PbaxlZlX`2oXW;Dt$dQM-^kv z&*)kpSqlx4FfObw1XtJBum&pqnJ%yhA#O*O0W7j4>YQPs%Mo<1NvRoY>RN|3HF$&- zDFw%XhhqBy#(zkA5Nz$s;sj_Pu3kpJqsR4C-mNMDL<S(pT6$`2)ewwo4YW3Ojzhv* zb4l`yAY7uCl(2;|CzykCS_j}HYF2#cAP<CnJOuxEN<R#oZu|a;5EgT>fpZVntuFPK zeiNTi_o~#IEeLsFYU~`S`-=+^klR;y#|iJB+-H8<_R1?~cI)~2>$cA%WcT34_5(B| zU|f*pW$XhrF2Lq?_T>cUdvMS2zHU#HUB%HB?u-2!Dr|6X_tug9D|evpqz(QH^m~3! z@Gc+z3-(+6un+sg)B6?jTlFvi`@`{9ehoz5&^Pl--$(7h&E30PvC5&7a=GA~O&I)F zV4vl!w0O8l>AxsnD#Sl(9DTptEc(LSI+o;hC9@`(Q#6lR<j*mElCT?mCLJjHOWxq7 zMSk)C-9(S6hm=HLW;4Ai;a_w;I{A)qZGbdF{hBS38`1FWQ%Oxq<LKBn?KsB3q{@D! z;w9_wd+7J$Pt<tVqe^(56?XOwrSdA~aGa`9>~lEvSQiW6-A8yC1=hKox(P7K22dsg zuU<B(d<w^|txlARTL~!GqqeCmtAt~hZ|2Y4U0#9{%`K(CwkgXp2imxEYyiXymC$mN z*MltVegWB8*d%jR3oH<)HQ2%D;<AeW6eTb%NiOj%L5ogn!osyE(X*)4DCyY&$!(}V zMCn)6atk%a?`7r>hNUeXVcap=G6oi`?&1>#weZ}N14^(M=?kAMSb27o9vfvtYM!UC zc;y0&x=St)Ts`NMs+MfzYvz|a!gZ=}GG%_%$A}K}@2LH>XkL>Tj+eK=cgZPSse+es z3*Vr6TPKUHQy<^cfsF1D#9>~-*j%@TdsKEOU@0t|(bP@CygO=RcMmF*TebsYg!%eP z)P3{fzb+`X<HP^S!>AI?qAPRGM6D~M6SY^h&)RUH>f0D-?#H0g+XB_=-i$?)Ev1eR zjZQL-E{$DFuGv?Tj97*lxO#1M0<x~bNPAWW7H)_S2&0R*oYjEC4jH@FnPH2%N3!Yx z2c;guqlwnk)d~k_q~feZuT-+(TXe6CE2qbG$(F8}FsXO!!)pB3H>(&}mPXD|MD;5f zSeK3~)m1gI&Q0S*^-C+N;N9aoF}4<m!aEg=YSUM7ms+wqkqZkPSeB;GF+{IaW!c@U z3LR7lSC{a^J5kA&^v@mSw~H%&k!wBKo(B$3P{KV*yXTi(OM0jwTAd4v@|Ua>F61nn zQAzVxWqWGTOY!sy$h$FmEmJ2kW?q-o2Prbjl|Oo#8BZ!Qe92k*MTTcv5BAr1@IbS2 zR%A|e_E2Xv40uR7><|=?%Rnx-(aM#7Hq#T$6!p-I`mTvF5v{O#`f=&BY0pd0T3Nm^ zn;&N?<bwZ@r_nienVf_S_(88wXU>EtY?Q71Q0cu^#1P5BwMJqY-pDqs0~7CNO%fcE zU{G%eGWnkOi(QkXY~TF&49BbFCD5v(x%$S&dm}BtPA7bXGtBZq>ucPHb<a`1tu@bD zjHfXhzZcIiFI~Cd!QszKjo)P`0%WkZErj#YxQ<~PL@x)Cc#wkaBpMf+=U1d?XLsKW zcUUEqfsy`N6pr>P2AB{%54GESt8DuOzH-K8anIv#Wf{bhNC7OaGUG;&pG6F7MsFd% zuW$>XKd%5@kZg_Qp|4KOmbKK)gT3fk+8jtOI+njT9V8CYm7l;jEjWpM{!l!QX`G9% zga#ERCN~(06uA!>J3>kn12}DjDpUT92vk1gjtX<0B0=dEP!x7?%{M8N493-0hXL~z zcYSqIk0h(DP-3h}Eqd?*P#@Jc5<mdUWN*`svg<@+Vj)Ow4j^yWOO}&YfNeT8To|bZ z{9Q$j6cy``DQV)HrK_o<;zEgM9p#werj;Y%9BmnlRxW!(1>eNYcHhVF8h3eFoP##9 z5K<5Z4vTijOW3~BfV~n`fc*e*Vr6<L*qc#nqcVGdne;D7H%E%F2Z9VAG?r%P?M8E1 zob1+>S_dnwb{l62`-cI~-w}uGrjs_T*p9{!+HWWdH~U5T25VDqXJJjsJyol8+AYhq zT%sF*7QL*BKuRF@HM_hl2S=f6(kTn?RN57WiubQyR9MnStMu*!+%HVi^s-dlPTzsc zbs5%<i@JkpexRz#8Uj`kBIHpI)*3Vre%cH&$)i*|J$WmJ%AP2ZDfM|Ab~1hPvL@+S zPR^8I!Tx3gJZ8Crjl&$~+nt>wu3L+51*hB)wTPKD8da*{Rlilv;KTVl;C>e7?RctK z6dpXcIkjxGxWl_wVXW}Z@4Ni~H8NFftHCPh@dToeqSh?a475?91@5>QU$YzAW(Oo> zgF$#oUbpHf#h6Bh1qJ@%%(sJTGi-M4_Jt9}m$SjTn&9r_0TL)wDBmqH?D8y=su=1V z5zRE;FEM<hW~{GZH<LmQpvAhi@*0M=h7HOhC0I>QvIIxl#>`Ua{oLr0z!#IrlPE`t zk7RSVK2%}bS?jPz!cpv)G}KsV-z2nO-!bx#a@7GuYLa-7BN#}d7~E$smICSbe6+H{ zz|Zh%4b$EL;a;xaguZK}Xbz8%rR*X@hM3hYHyLwNGAQXo@Qp@QJ*`Z5txii0?m4!i zRCGIhd>x;SmgME7Gs15My1aQ5yH>drJjY81JSI4+DIBbJEu`y=Fzb+u4Veh|4mPob zCbIA9?&pv{CgfUjldOQ-%1M}4Cmtv7&Kr^IIgtk`>mOd6c(WeK@4xBJ1d^;6I2JFP zd$#uk7T_*Mszs~U?7Vo9Xf$%YJU1X(W}wr<t_l@`?ubeXMi&<^rfc##?7#G%@{*>? z`{_aR*bBzz&)O<EOY<M94Y!-Y_~isW(1>1_I^<DaiDEc5?u=|jKS<qsb7@cn6ul=o zHtFRPymNVp>-tW1Ow3f?;&v?~k@wlFF8{2e%DK9D=0Z|W+l6`B%qRNwjk{@R+wd?F zD!D?DJ6Rbf|6h!~V`H6BxUJo!G1?d_YHZudif!Ar*>J_S8{1}MbH%ok#!lLkz0ZE% z^J(vM{==NlbI);)F|J8IwKyk%a$I9kBt70t+zYPs3cgv;%}z8g;Fbp=>zi7YlYJs; zZSZH-yTq-|s{@<b=w#5-|4ejBD5KrLc-H(OY#_u$`0HbK+m>-BIVg1lmtd>?6V9t4 z->&3RddPqzQ@2R+W@NzhU{%VZn{nv2wj6D*ulM{j(*VbSNwbnn*Rf;2In~NQ!L(;o zwgbnFr90T1OeKRqp8U<^i*?3BKFVC*cdD-HI<!-$9N(*Gus#{ZhA{ksP^<R0Vt+I% zdjAXb@c<3I?!&S?$&0URS-vcf*M7Bs5%7;~Zea^2=vh(3T)6%v^D(6qJ#R;={A=J# z{~9piyzM~5@m=_My65<|=c#Ew{6ya7Oi6^lB$sJ{_@#h1pVNf2Gt6C@+Qz}2{qWWz zYjtnq?_u*(kJTA<(fg~SrG*9Tyau{Tk4*0i+vz*2a?xO*tV{gm_qk~kBI~(T7FK(& z?L}=?6iZRR`2JIM2s!>KHYdeI=9md2iTzW7j=XfjA0z}bpCg?=QJ)TGZnVYYfytl* zlj1#<zstp#u{Y9h&{rY7Pmi0d!Yr{6gw_YfAjt3x6p2#~^KM#wMxkI9-C)BP%FVv2 zVqApjZIY~$v_IjMuRT%m7<(N%`we{M%T3zFYVGXTzFBldxtXSuv?=DG?yj<>#A3{5 zD%h==el-y@H~WE6$tMpjJ7R@1Uzt2F7Dpkwa3av1g<x~*>-D&XEWj@=_Es*GI}kSy zSMpWW{PzNmfCvn!30uWA+wO!%wm9wWserB5D~P(khVcn1X4N%%xZ`<0-PjdIJ<^0t zKpZ^)qmZ>U`&XizgjK<@S7sCSIaG@M?IA&7!?1}eVd0owvQKkbr+n<a*+`kOpd73x zd2eZ35n^c&nQ2*r6?VWao1%dDya`)jRHW`nqwnf821nitjhy3Cwp&mI=L=t`g~vSi zh^2e9b+#Ps7Y+%elX_%NdRuu_$VR!41PUe86fhM{p-WlzXE%?wEM`-5$?OYT3h+8e z#uA_>Hh)TyDf}I*#q=oaoohaaeQNv4QRg3bY+%W8Jg-YAZpIgRbcfp%fM<!CClS@2 zlIob8dL!19UEBLiqusYWFTEbv5*W+?kWc`tIF`tqFnDKvGx<ZaCXrWQLG}H9yMPqu zFp{-BmZGrmo(`WOtF}a8-eSj<$KYEEK_MN@p56j7_Vp~)w|SS|sS@;>Mjo5Ip|!j8 z3=uC%V#gYBM$3Ed82yD4@)&{Ixe0(@;O^Sh98Onqk3y-<y;w9TtxJS<JO4sUgc3|^ zPuFGb^Ed5eBKA1g5o;8EDqw!b?xZBHH~Vfd`%WW*7z@8RG;R(h8f&PmCCW7;YHkmQ z9u?hem4c>;x(a6BhDiW>+`y*Nra^?e1}0j+ur?fE$RL3n8a`PIUKWyo%9cMPt2(d$ zL|tQDBO4<r1U(#RnSD2qM?F8kN7ksC5N1J~QI>=nO9keF#x*Qmi|I!jBITI1dv>`i zNG<(C3skk129ohCsq8`q>>A9d-A5lrl@YXhBIxfdk-FjGlj#G~p7}G$kSJIm>DzLr za4hySV%pVqtj$CYD-XC6i(Ka%Vn&YZ9|VMD6@UH^`}eT9fKsTYXR7+l*FvxUa4RUK z8#g^bcx=*yIqe0}KU7q|5dFnkxJ`3G$gV|}l|bIxR2w>@$7H>9x_O2QY9gz}Z@8al zyZEZThAXdOo0Oo1ODZMVPUnbzgazPdAp4k_UNsZcu&qD+SW<QjdoQBF5A7KV;V!~o zi5Ck7@Xf@`t(7aR;gdj;*C*wSj<oGpmm_@Iw`-_uBj-9uJ#`#@+r_u`#{{gC!DCA- z*snPUfYdPjRn_C`X3h($^!cZQA0pg=*bw13MXQnwh-Ja4;800U)Ds$Mxdo|nOHR8| z{(u$4aG82%+)E%Z{OzA@g*!W3zBgMpUgqC~>eISPt2yfg%VxAQ?>KQ06Oq3%J=qv? zAL;&kmg9FU@qGmVNaP$wa+}I<|32FHz|RVf3Lc%V0blT9=5Z%y-o>yB`pw67Ut?^E zfo_O}*W=r7FVvY;$)PD`>s5tCt;I5<`Rgs~-wL;*KFnM6Z+@mNUD!K*Ss%GcDmnZl zZzwCB!_0~F7n<*zLG9enHeY4zLf0=}SLOT-<d>pxF3aY8GoODeM9obD7!fLuQ2~Dj zdRYszAepVNfFD!UqIL*&<F{UTo#iHiF}1EyGfEvODOF6-<G}^<atZqwYN`+!yr{~5 zGw~Ig-GkgATs>m2kuJF9Eq@oO5|u`!KhB%u>P_C0=#dO9?=sG$?N7L@h@|+XI5$=_ z*Cf@-7;S2?4yGMnhYOR$y%>6rI(4YdfohUqY5lhBJLu>e(@L3mfiCTs&_gE(yMHhN zQ4!;!rKx{+O`OKOOG9mb=(jV9Yj9Ue?BF~6$o7{Nj=etgC4UD~7uFVHpy|Puwi9yi z!T`iM`(y0IS395&&54p7X}d*R^I0~&A$SA~>-}=3{7C*I-rg1Fa-u&y#G3c$f=aNn z>q_)?;!h~@{aVyJJ`F6=mHF+~+&jG$Ou8W(*C3{c|7(OB7^e6q7m`z<;ETZ2+X>UQ zeBR#M39f%?tRvD4x@)pQfyK++J+6O_@jC^<{<bpbzl7X<!8wZr^*jyk`=If{8S1YQ z27Bi}Fav%f^8H03c809^aCwEciqFsWkLbUEmbklI<hy2{*JtmYgYt2M^VFCB4eVPa z9z(ykc||@H${jgrz2^o0SoE{RiVYq=AN}hvPeg^Si?K3SC9^YBh+DXP5{EW5j>mXK z6ZKd0r}&Sy;*H`*Y*jc>o+j=+GLD&g^aF!Ss25H$ant5}kubpiRvPdxbj)9WG${s7 z%uy|1M4IT^_uL?apNaBmuGt7r3N3HJKT-XJSaSsW$TPPE9lz_&e4`{51~Aw{k;QvZ zNxUWsyoor+{FQT6X3^Xp`u9VOjIz~(={WhSb>nvPBKfMa*q5l-hN+7~d|8g4%-Ucl z6(SIiK0=m8n_Q?SF5&)$(|zs)Vc{*y*wqCa*-gVf0h4%D?hVDH_0jyjyzCH4{&q)j z-f+%kwsKO;gN3NR5sA4Ta%xC>;r*fPkmAhLL1T6!X*nzK$)J;VC4Lt3AmNxl6BM0W zdt4m;&XCDbdW$UfOPZb6H`)H{&(@KX{g!N4J?3K7IE9x=h#i91$Uotf(4z}tym8>1 z^e$R)j}h8qFDshks=wE?$`k}`K4>L>Vm<@1L8okl+Y<Hf@bti0df_%`6iW?~!5U#p z0-z>;Ogu_+j4Rot(z;RErJv(t*CoqpN~s)AHJg|cQEv?Xwq{J}FYLgqug`B#T&YH! zehp76X%2WtSBf8kv)~U_qve8Jy{Hp*EN}##nG}&+Bql%ED>UbK1k1p*$}&+aL|@-; zYHKqD8zrf`FK~iIHG_A!0#)_~J1Tl-QV(1&o>6$uM9@=r&%Rr)|LLaxs)jl|hW+Ks z2>1WADPZ}(FTtej|AQpu;OwQ~XlDOkdocAk7xYhVkA2or$vXYQ8n`66rAy^kRS=fl z7kcVsL$L9@x-drT7>8cwMae3%wjyC<q=GN)^Du0W#ZK7l8PaRg^fS>Z(_VYlU<+Hm z8B4nl(YDvdRkq93$N9EF4MZEPpp<6BuMj`aG6dof^85Vl;14vy;ehndizbcJ?}*9g zDcWDi^&<dQ>@Gb-#8a0|L6R$)Qmim?H#~&OIAxY;95qdmQFg&(@~fV29NbP@2vnl6 zr6d$v=-=d7p1y>mIxbt7C-=?S%N(S`o<}1XjoxT0BpH#8{0Fl{Qf+TV0;yS9yV2;1 z2qX6DC?|igS==esz)^husx)6UfZ0bDuQ^GH+@3Ne#C|n1znGrf5`PhCT~^_-lx;vk zTu$U3r{x)F&QlX@Iy~a0GY2I-hq%*j+$pww^<1{DotSUeazaO}9lc`hy21FKC7Y0C z6ZJ;9pegOaV)YFzdPlbOXZ&BX!i^FWQ@RozYT*Uchq4MXRni*KizfTQA&?5Zo3acm z+mw>cN(X=Wg~w6|D4LwfCbE+ji@w-{iO-b##QC<A4Kb7uqLP58-+DX(ATbR8Pf40L zwv;RPDE)wIc!yv#UPQ`Hv(**S9S>wx*<ugC*jsvW<$Bwak*C1-C<@Pzl4$1dNTPSa zS);>As0Y}LRz>f7f~v+nu_(FZ$GJl1$p~5GI_cxp?RN8{kFUF;Sv>>u>oH958OJ^0 zEzCYkK)Li&ZUFjeH!#y<p6CvrOs}pO57VxwC(B@#tr1ujfk7`^Y{%F~hJ8}s$(x91 zg&SOvfvLdtlsR-}dis4AUt!<c^(Bf9Y%|}8TCSed8)W&>HnL0yC+%U6XZ_*t&k08J zml#kYQ_+Wi6G*j_&%nHKSBm=H-}sKHL`Lk)Xa_1nRig6`m&(=96w8D_i&0d3Fx)k( zjZHPT&5YR#go(Hdb_up_A&kl{ZjG)`!>YW76tZi{rl>zsh^p?U(&#Fx#Ir`r;AwF< zC!4T7<wc#(>Enk8xmSyz!5`XVd-A*<A6BWwmCJi6Hxs2;DmWw=$rLy-P4<Ph*=6BZ ztXN$_`HspENRhlz%RU@6v%s?GYRcsNe8ca;YuMFs@@UG~EQ{$_6XcSmSLS|EPI1xB z${2HTR@2SslQF^5<vnZIbeJDnu${ff&ZR~S14cZ8Cy~<6F4K>u;Ir`D9|Z(53HYR} z8La~vs$9y(cz5>E)|&``M&&fy1J+->R_3DlPV89dkfKcvO47l5kv5rO(aKxY#A*v2 zrM&om1UEM42WI&U4*v-`U6xVPct!d)8a5B!9AR5Er?aH@A)@NsJtzA8&)tZPA> z{C;p^DpWA_`@UJMD&of`h1W9G&pjeO)*<GDV3R5)rB#3w0kp?dwvJ(JQxtFhK2KU5 z^Vjutwz4|9$5ltEGgTbH57&>DLl?U9g08mkvn77XkiXga+ZUp>(}_9=Jb1CsmVMo_ zqV{bLb0v-#XApH;e=}xQgQG#fIg8xg_U>sG&}@W_3`AGap$oa8rnGfh<KaVFLd>c= zDCHp5?E_deJK59!OSzH8batpkhdKqOUU2p5$`xeVc`$Vv@v7fAck|*mZsv&M<*oVk zM`MAgEz<0z9JDq}*9EziJmh?4K9@ZdY1Nc0ykb0WNk4+i+3C99w&LF2c<EPG-12Sl zzD8I4H_U5u0V=_@F>PiY;smNVD@<JwVKaUB+!>UU4SHv3_-0<jDs{gesW+5cSa>ee zaD4=uBk;R1EAt;=%IQ6Z4LLS+FE3*;2Sly>{sByHooyMiR&dHjgx!H2?B?Usu0M${ zZ8ucMPHBLx$JWlDbIY9-r{IlUd|qzCU#KI&_?!5hRIbZ&{iu#>xxZ1L!^k|2MY=}d zEo;#qyZ=G_M_Y3$i54jLb4R@NKQfX2TYugE*%OO8J2?J->6sYiO?xz9jK45gSWDHj zf<qO}<LW{&c%PjgF;c;7pMl|qqVAK$I$5LfhV{vB56HflwTpu|Ca+%vl5Zxh55&<a zUHp4kk9}FWEqeYvdqeEN6LPghYU7gY(k8VU?YQA_BDGm9l*H(8*t6Pt_vw@mNX6xO zMF4yTUR-IKm-n@)#z;XMHv%H3VmM=(XK6?;=I8N!)|8}uil^h6_>&eQ`7pjXN~XnG zA$&Xss<O`>j?}Y!*<eiE5)URWVHS=2m6W5dcWH8q?+P#6l;iUF;!-sGP6{VdEDcU0 z;+vsicG%w-+S{T)Q54!pcqM~zo_vqr6AcOF-HXG;35wAU_j08=<6s8d>6!%9`3O%V zJ{8khqVo)*G1Vx|vIWjopE#V2k90@gJu4bz&{<HoARlJFdD%Z$^Z^=n@V`aLpL3&o z+;K;s)+Jj4kAI1`+4-|u=TKik4?nZlBLHJ7b#pkD455WN!ai|(m;P5%@+hjUmIr39 zkX72OQ!IpHx^xNMvL^($2M{wo0eZeJ0>n>q7w;CD>i_twmT~FO=;(gQ)qRp5RP~1e ze!n2C%jT&NEO(f56Q>G+gG13hK{TiMW6l&qq<FL^A4<txndDVQIaQ&wMXi$A7u`)2 z#d-g6cqIBNbq_w%S5u!xga6)S@ZXaD{?Fl&cCh-diJ@4_!x#Mt^PfO%(hMvGC;&NR z)G!*Eg@lfhLnbwpIRRFG5XE>JyedF<8sZwn#Y^ntTEyBU=K)S>$*-;xNuscl$z0?( zB|MdUlFlmOwE{nNCNZ~=$0_`KiFxule_FcAxnDT{&JSrwx=FtOC3dV0l`~@39Jh66 z333CpZnhD~Yqk-}Ip)c_MY3Prri0%#71$c}Lh#~Axkavi#n8*o#Q=H=zx27g5!j$r zzrwEj9=-?*eIa7}V8rZ8W^v9s!$+%5l;TA62isVHVt@ZRBwArlWp4+f{-Y`W6}SGw zR)BC29zHKg31srkSAWtVK4DM_7BploY91YCn%$2LeL4_yh6-<h77`cPIAYp%)ArQ> z>rUhLMlBnwk`n(pbA^wZLqW=uhiGO;3$}-$5M~>t*CBG38+T@32RP?2@%*iacHif@ zCz@y{4A}e0!>JGG+UZpod{=?>r#Q+(oYHsQ!3Jg-Ae<SDJ+u3h{&`r>w)0<y`<-;- z^DaF6$!x)8+?|1bM%2d|Fd*+DDa8AUzVln=IV|L-^fNZGLloiMlwHV0<TwK`b{Wn( z1o)e9E)#uMpMEL-5rm_B!1;NcWMWQ@^B|AXzj|lafr;j1J$}l@KutkZ&mh5We3-8g zfcHzV=8T=5>_y@h8t6z#)S)y&x5FPgeb9r0J5HBkEm7wQkjq81CpWF-Ag3sMn}Ox; z5TvNfJp0<wiriYMZUB$F-U9cSf`+c_Uq(!0(6~~{DmJo+=Mi;c+B0N8wYPAlnV*vU z1s&)mgwAg-Kwt4pMUxV2L;Xj1qZ_V*@bWAXYS(<*{*LY2v2mE_^wbW$Gh?)@Wey1~ z@A>r=WCFRuRGis`ANg$jE%w$%E%=2@XZ<&^gpsj4K5tMmwiz*6Hm%I(+?OQ)99!i= zED893sn<mCwbGt3ir`ek;E-kp{+hddN;GEK#f2ESx1IN~;TGG@D6z1rx3Noc60BMG zGvJ)B(R(vc3!0ycYWFvS{s<m|Pb}HEGF6tdW*e|QnKGd$KKPbA5xPr=MC{^Nl1(EY zm{~f@tty&c+2CwVQc|N9Y{XwM>#O}^t{s8CNDKi}B|<a`QyVCQ$)kWYapD`1jgSI% z4pmpo0Ma@s<~wT_D~1NBfvrQA6cd096~=f}O{t%`qC!M6?b=zGHL5v^P!5%5AU0SG zVR2SG)Y|G3Q!++B#}V2x|E-^7f|8gWd}YsR;$8HcAwMjLgyrD&tXrGPFob<+K*Y_~ zCbUa+MoCfsk`39y%gw7y*mGu;c;nc1FZp{Jb0eR6MSPqz#+no|+NE+?f;+8iy<)Ed zJ^ow&)vn<Tg}YRd!Tg4`ss}8L>ii{pzY=MGu9Q{2BJHK3<#$$*@2GvO70RN#G)J1{ zF0~18&^aRF{kULQ_I%CXyKJz=;srl@%X#*_xd6tF{cKz$BI`qXYh>0MWx+g{X9eB9 zYRCR@%jY(iT)i6Iq5+*&L`Guf{370lvk1fykF>4<4EtqHapNc*k5sPls-fQ0Ka>=A zldn|D@?glom^`Av_>BmmqVFM?k@5M8s%<8EUT&Nc1u8{ZDsjADBQ&FnLqOTx0N#;u z3P_TY=3k8-qgpkoVHiBJ<RQg}i^cuO)A0b#oNn*<m}9<*VHGasz{0xq*JzyJaVR?Z zk~*;<T26FCWT|{oSJi?EOh5rGMn__e@`?2~#t!kp$7VD=O5->02z$j7oK31ZIfPBR z{y$h9DRt&pr&Y6duAM-S*&J$C1(o;q*jQ+5nJZ#?L+5dYaqFLv;fmSi%4pg1n34<y z^VniFH1i9<{tDbB&u_W@Q}~MxR$_;$ZvOVVtk7mjSaFpfx;4|)*9x-6=ZiYoe{=N- z(-9FdmMxV@Cqs&B$|dhu<e6j<GE%5e4p2WFfi?#|Sj?B2c2^g+RTjx=tOvtpIT<g= z>}Ak)1NK$vqjuhlnubo=KkGW-)J_>V$BIpsE3=tdjP7Kc<eo}$)1<cLk1(*!=i)4p ztu<{hh=-mrGX{XqKHp$L%W$Fhh867<D;9yU3!ar&i03z48nH;b{fjj;)jYbU14xmb z{B$z|-_w_29HW-!z_U9~i%(6j{F^;3?l-q_xIn4`t>$rSPPWDjMxZ7WfZ9UF!jT6U zL~1B1tA?%c%vF5}X=s&G4HN9ng&@POHFaEY1JCB&>wHuS;d0yD`r1X18=K0JniS|v zEOT9_EzzVdLUnw8Zi1;<zvomh_-Cy>Fuue&gz6$a2ZVa>f(!@$n@wA;ytHRxd1G$% z$mC<+;@m(tK^;CyvJL^ce$kdhzg2>ro~rE+23!N-({)mx8Ixu6!P|xEcI9w^1&O;` zi7nT-rqh#Fn{UKzhS8e*R`r>0ALjgB?Ubs(h@x$6q&fH-2wtCn-%$RW3Zj(~skuDc zCN91a46KVyT!lo2nvrf4)X3uOrOLt5eX|5kk77~A54a^OKlO+y#h)J)j`}TXX{qKr z^p2wYwc>@Dqs<kr+`RC~)|u9JX)aVOmA`U4Y)UH#PFcW4fXB?NErHk|T<Ts|8L$DB z8W_RHMECgXM&UEVcS|MrbRU|5Qop66n@t|&9QE-$ubZ+h2d37p#|5BOv?Jcmq5bG9 zoDTC)lD7GL-JchN9Nn(~e*YS?4Z?_Dk}jvXoVA7I{v-`)3G~N~V2&oQj-jWqWKVVK zdiZzD`CrrWzc)Y}d9@i2C+t9BRPr}-iQnEZ1kM?hYEyUO*wA)4Q~X=0B@_y*Kjqp= z;<*ywqwb4Zg<#(AiIXc=^)%L_J*U7WUV-T)nVE}9mou_jrNhmv3kCS{=y~ehaZod= zbQ(j^8Bw%Rk+TAZlRKz&cq@&LtOAfpOqUY9fBZPjWOK`Z3ZP6G<~)3mcvJUtn|$7l z3m4-ft1$G6GRjJ@EA;6blv&!0%J%;0y*pbA+q&`^yMLvLyB~g%_0`=)_ow4ADz(eM z!kJd*dy18HJ+TrEtM0t&ez21VLM_L<#4s0Kja1lk#_c!DKw;p{Kkp)QaB`$1wdCiw z=C>ONfT(@SftYd19r@Ry766cSqnTjwqx>WNVcH^)13mvwk`t@I#zI24EJtcP_olRO z%z*P$>GJ99LSg%P@Tz#BHppc}ge&d7jS-)n8?GTE)G`o{mJ+r#$K_$^dkS6&lkQO- zO<Ht|LQF!cri^iRL&%X9bT3;!O{Zd{jMJBpi7%!%8^OVR6<scOvV6xi0`T6mJbw<E zXCN8G0wjjSg-`%9Ap-ZTSm+i+rd_@i)cQ%H>hl0;5+5Ay8q@={#8DeU5L<`S!a*A- z;cA>PFdJG!sShrhZX+0zk}1sT2u)luJ#?Rn2a$;p(Z|d0+b&e(9}&*lW5j33Pss`^ zdPn!j6%tXRE*yKZUDJ^Pw{MRw`GBncfRN5KUnYr*F~W?LD{pl(?uBF23+A8#AWq$= zFHiSZ+PrNKW4uGb*i6X_t+GN_O7&V-bxZ`UGD(vaDQ&9II(h_d2~ECl(+~1Iv2BNJ z3ENK6cpu(Y+So;@xw$Jot!hcERB^zvSxiUX*amGqaV2*!*2we1hEho*Nhi?<kd|^l zvCALBVAF!k9sRn0T_4+{MBve&4Vf=|(ni~Cg^{&cJ~bru9F;k3DHwD_cQn6OfyQC& zmU4jfd4|gDpf0H!2_*KJc*OaaGekAy^rg0}Y^lcZ`t*&8#~WvCiW2!a{*r5XVr)uX zR5~R~)}TqCy@~N1YTmdqs^6R(P|<`&A8LkRYDTcA-nM-^yuN$!-+C}%H`WZM-RWmm z-F2@T+Qcs!!99nl8W~s#AE}2|Fk#gfV%Oh$G1HX{i7LZjZwj_xY?&prCI7n4Rp2p8 zy)b8T4NfX6J>DtAu20ez|Jog>rxj{BsXYi5%QlGg1!0<e;UN=n+ChQYHGG$YBc80E zPRJdHtdH#7u^pYtjHCMIB2G6>vcw;2TUDfCND_#@v=5Kpr_}Rw=uT1GhRobbi_?JQ zRcrD)gqB>FeD_SFzVupc;~vnDR^ydIu9r1FbY3;twFPkaWu6=5`M_siND(erWqkrB zApiHDMGw$eKLRj5ITK5tY|j7wsqx>kd;iZ<L&MC-(ZOEL#q9rotZGDfpo`)Blf&z{ zbk~-qR;;uPSu2rp5>`qUp|k5-C^Gzx!sjSia@uds`Nux;q2~(mO6O)6uZjGj_w6ND z;UDS4%hYE-ZTXbX82+~J6MN(De|Hb?Uu<q{kk{r)L6wW~iXzGqP#-)kCSkEQOo~y$ zNT)c%@&uiZ)v=o^D#7QD-5@;Ih5X+D&I+&E*sLEF^$K>%JVr&B<*IF@JS;eB_a(6( zT)zf@>N#udj`1p$S&KVM{lT^BUhL7K93M9$dDd=<BlI{L1JykC1DAk5vyPM^AL(`4 zBa_Jv=3!y`{7A?VAI7pcUfWGb(5p-_B5*ABPw?}`hE5<J=qCIb1)dgsN}M_Mm%@_e zj!fdrx?%@YU8B+uCGI^774hL2K<eoWIJL&&B9Y{HWgwUAQ4LRS{l3<41)n<aLY97? zpMVz^xGAsALMNNvaxr7^B;_G_(Fg}lcU10Qqt;cqEDa<sX80PnKG?O6mP={1uGNB8 zZ6o<6&FL_YqqJ8U8Ea}O#brOdk|yZbdyj1ORw8JBQ8(D;8Uf66Z>7`&VKx>Q<7)uC z6e5(lgug&W+L6#ksa6-e(V^MlNz2bKBEOQj{h)RZ>;wD(JGO#+BtwNMuSyQoRoe6a z771h1lqSA;Ut)+YHL*&a#_?DoKRIuNy>TN|9i0dzlY-=9)!O1ske6&c1NMdaigt}+ zC9bKY_B@f|Y&?VZrTB_>t)K;qc5$13st>r}&+J2k%!G01jVz*tx5*=PZc9?sDfBm5 z>|2w*6D8LmAugvJe7L4xAjd^A<38rp9Y@{NS%p2RNP{HsIX5V{^ao`C`bVD7waSWX zOF1*2vgfhqR|n^=&;fjheQ4w>$4}Xl>r?au2pn()#j$<ro$vyO&q#ST&q4cCu}=RX za8fXp?{Y~%oO734vyX5-r|$D+&tCJ7e9D~rl<%@zhtJT0%74@HfJn3o6PS$bH1l3E z9mA<#nBrS6jT<;-Qk0N(UzEeawtsz%!jmi6gO65%3uE_LZ6nE)<(F1|YZr+xn>O}0 zFmQZBz^s<tdPGWKMdlVqn2CQ1uNocIhhF<-Z9Zq^j%jCJHYWLVxNUkgqj>A)=g^|^ z8ulieVhOr|nYHpt(O2d;F`lF9-&Ur3dX=MgcSl{(rRBvamsRSk`V^cMa>l8SqS_@< z(*`>I(=6H|E@SCRlDO(AEcWUv3K`2v94rIHhn6}O<Ws15P@gT<qkeifPy^g9I5qJL ze#Fk)R;4L{5v=PYpjfS6r?J2gi!^gySq{Z*1KqA&7_;&E`K@?XGKYLsU9{7zsYFk; zH+iS2Sq$okK5?A2aj;@>sst8!@o|Dr$}F0xDy_G(&(Etr-6DD#Phc@W3IsLs%`vZb zKT)R>YHA6!UWVNxc^DQRjYNDhx{6hmHqlLWLJDf2ail_M%H191@bOfzauvT@*jtIn z@@2#5&&=LQVH9kuvFv^2lT1=_C!R;eDg|D}R%;edjs@3;i;GJl0O5}-2B~BrYM60B zu^R(a$~o1l)Wm*0SDUyog4o1$UKSFSo>EKsE4<BEGt{m!UlnSufuLk^Xs?u{i|W`U zc|{TOWe|xId6~Fy_010mU;;masty$LQIRa|jyklifJSNh^uG?I(+b(}Hx`+<!-V!X z+aF|kGKdEDP9ZYDj=!*-+0!Vx&{z)xP@4psv1uti8Mi1UPp%>QYxy9Uhd*B|OG+h} z=FdsfPnCc;nD++3Q9_Kc+7E?jYHY2dCg_H9)9|XIX$rqs*6=fhsJ!tJV`12Atg1)= z51k=PGG7Jg+c44~`lOvojfW344GyN1H3Lv`FbfRw3j!)cFE~SDv3?DeC{8g&WST;} zPL{L?x+A^gEnEu3z7B^bS^j7khegm7ofsAeP}F;($*E{6L+~Ih{(go@MVnG?rZ!xi z)T#<NlFDX}NTtr!3)Bm7p8hOQ>BE>dyQkxh`_l;1kBnaCjBq@^&}NK4`xU&jQUS?u z5-nFCr=^dpDG)%>P@0H=9M}k5W};?k1X$Bz=V$=j&++x1$b>BRn`if6pIxI=j<DJi z>l-0+O=9iB*$kH2GRM|a;9JN*GKxq2&3H6s@9BlHCA(^#<+Vkx`9ajWkHWDp4K9pg z!ph%cT(DZX<+KOSR_BL(^A7%EH^hPIuN%s>G$&2TaVczh&G;WO+Qyw?y+6#CFQNZq zs_p+FhNf<2X=P$-_W5)BubhtNXHG{0_g}YZ(kCI#W+EXJ15}s=1x#%bk_J)}!=r3` zLHh+=EAJl0WW>^VG5x7yG%xA!(GVK)S3XpzD`HzVKiD?wH*cv`KD6jR2t+PyXRU5z z4K)1h%6OW3>Ur|{edT#|`4#(52W+pkQlT-TE~XX!H&T@dx-RJhN6{f<PkZRsn=Yo@ z+S?b%mrL<-Pt_sB8<JJO`pB$nG)&I@V&w-jqb^;VF5nRD4Gm`Pu#GDIfQ?$$x7svq z2Sq2uEvl@2<$rPrTUEvo8%$dyc@8NC@*z&j?pqY}o7xer6I%9tysBO3SBaY*6MuaA z+vua8KsN%It@|HFzCuH=!4ZN*djoAEG=8E(5>6I4L@G`QVdMexn9p1S#GMjmPf2Fi zKgWY<Zn;RsEC#qV0y`aBFMKN?^M?7IK|TY|(b6{-1JBvg#Cdrd*U-=gs*ZU=FWwXN zUC5Bd&2B!>z-s$(jP!&$d>5aZ+V#l`jt)C%5_nFl6`z=B@;7LsQC>?kXmv9D`KTvT zB+5eqw(p*PW1ex#*sax77Chz@c-uCFO^Ge-lr|iQvK~3W-<vm+(LyqIB&Ux<J{q`V z!D&wqxGjEW?=Zn8DiV<0wi}W<PIuv_p202e^_R*EbWTy(y@~ZqiT1<M#|>y-DQ6rX z<1gUpXuokQZZ>o_{;I}6fm={uGo-{@Cgu<1fJOMW>gY64-~eu!W1O2-Xv@g;^!PJN zJP~!5b@(vi@w!bWzPGZ^C@p0!JK*xdQ9Z$$7{(LRbVUXIMEjh0b<araDb%L{RnY0& zG;i^zxdBT}8-L^hX~vo0)nzXHlq|jNyA>_A!<)-A{=HFF#siD}Z=rLQ8)KvUcp^^y zDpZImx0Ve3%=2wq^kw#c*fseHBI!#8(GU>L6H{i1N9Ho1x#)aV%M<ok8~{&UjQ!lT zny=h1x-1TR#}h_mgAvY8V)$;Br(|C%n=jtB(zPD)_P`TvPyMi;y}SZIKBhE_#rz(E zspIgZCuIoW9}vd=jv@%YHsLGSp#=CxO0d5p32Iy;BL5z&#lZ&n$9y)gS2uOK8h3Vs z%;qmlo^yh>ZJvXh?j+zp6c7m0hW}OVFoORWu)ib!wD@K99LDxnfv;fKz!~J_yy&#< z=)I?>KkV$yaY)BYUf9Z$&TB%kNoqbUd-`!8H{)Gn$I}7&xi1LF?G>p~trrjCiVI_V z$HvCsD~CskKp~S#wk%K$VN;?Qho<pM!sSnmUZvx!7te{MP1l{2gg3u`<3SfekA$0t zuOH5=stHGsD=Sb&&7>$9`|MSv9CVeNL}7(C$BZrx+F@0R!u+JwpgKj6nA;e~rdLLI z6-c8heWGU6KKq+0v<i%4LcfejCuX>Kx0W}C7v2By?_QL%z{7AVr@)F7%bbO_W0)IM zu9tOZFag5^5G1|kRyN`gfL*L!Dk9R0#0#8Ry(5Q4Ss%XoVrt4{?4B}{n!6O^HX3=N z+8C<sduacF%K>(C_DXo4ec~FmP(T|Ug`LZ?-cY<H;baIR&=td#7Dbk~{gcUE>EkrN z6k3$v=<>YVvCB@FyCL2eo88dW&Y9F|-B{hF4Id@t49=F9lvuR(<QzKZEMQE;El@@# zZ_T)88W8UrBh#|NTtHK4nQMcVS8Q=93zx?ND%ojJi|Ot<>rYNz`?d|r5`TPPp^TeN zh_S@<GT3ueOEabb{JLw|#sixE%~hw(0C{keU6O8y^^=U1n$kZeq4Z-@8J_xiN6T~u zEh#WXTt!gFAUQJE(r)%@A3W*T<hT1jtMhY9eERknjU!X(M`$$(EGoj5)zt)c4m8&X z^2TO5EVwE#9Y6I8M}X_vJZSIz)G&okUm+C81z~uXU$;Tu808fFT)z~%?clT6Xwo^{ z5`FUawEjZDv&zf1H0+KwrdvoH-o_i)l$6obdDAceeA=Q%d6+u5*ktkjOlD$@Xx9%N zl<4T9KLVeww;rnrsv{m5N?H=+S=~%c704G6bZlMX0e0%@xwOIFXpb90lyLK@vUyp% zt4eE2QCJPc$eES7Cq9Pto7gf4+;5Wd62+g*4rJ%2>hpEo!T#AQF8T~Pd#UO_$_K1i z`3l$Ld1w09ZVF4~)DhZ`)R#*dmHRUBC~%aT<n7wpSg9)?6}|sVwpp?6Yf&KHbx>2B zrRNVe9Z@4A`GOM?qXZ1cB=fkvyD^~gBqZWQrnUVNqn3_7RH`tB6o!S1SB~60UOA^% z2DOxDZE~M|nJlZD+(xFQ7`#NViapRm^uFL+u>0@W;f*N>rY(&Wq)yf&@NU`b=kd_5 zr)uo1t`=|ro7YX@<ef`ahg|SEU#1DNI^0{YGT)tP9u6O7$6-j@`xJ}<?w1?JA~hkT zm!}EVJKa&FZNUv1UsN=pM406wNLW}%IosV4qUv#Ve$-(Kg)8Vstq8<)bLH{v6xzPv zhO78e3kTV?GiJxhw`l(gxLoNg?Um=t(Z<(xMlUvs+`#lob`_UCpCKl5{ALDeq2v#F zccvf`5pq|?1=|co3-nUW<w1<`o`<?k@9{GuWR*8$crX_?kC`nTlO#;rh?_0%Ki8VH zM-UTvib!lsM@PoAowTDV9P0aXUvg{dMR=E)Tt+e?F7hCdd{mYwu_#5YBz+g|JpAHe z($~XU7OR^%0(|j8%|p$RBaDKr8y!o_9#GD0E3c=En~?tnZguN#6)T%7LqmqPW`@tF z007Lp+}mzC5{AQqH5nep3z}Mi)=LT@5%yFMn+Jvv>!Gd#B&xy^(YgA8<Ygl)RRd-# zl4I@*zYyI#IZ_ML4D|f@BU89QF!-ha6pS(L2M*i5YV5Gp3=U{c>0D~-Q{g#5XhfW9 zQUd14@T;B%jIj0mG2-r4hrHr;l`e(}VJ4koH==CvM+2y!qI^5Qz2UH#6=1*JAi+%Y z)ML#Yge%`ivhYPUpwvUyC^`{7Amq9bGD9y{Diq)vL4$(q5vXt0i~c1-nzPgW7{s3h zHW6N%G{V9LuN)L}eHzvDiB5HKMHMVQ{M!6opQr9j5Yz&-MF^cvgVnrr{aN7hPVX&0 zEW<zux$VY$GlPnK?xZwxLAWa+)=gkWyMsCc4OYDM^f-<?MV5|Cp~?*PPCxZjCQkA= zVtD@mi5@-JD8wq!))}pc87-({>^lE|T#VWq<U+X9q5J?8CuI6mWp_s09phU3ANfi7 zEw5}#8?kCEH%krcTzDF|7IUue>U4&$Y=?7n67eCUuYJXdNtJgij%ZdT`%J+u3j3LS z9JzyTVw24=Y@EGTh*tMgc8NtTulxY3r0&NXD*Y%cTVCcQvMEZrC`qHQHuC_`k$GZ! zD4RAJnAnYz1<t|z%a+J3*`c@4(2wpX<q--!R;SV{P=G#i@o{~|#vVLAu9$6}0d3Cz z-uo}n(L7*(Qkt1RonQaGp7Q^&y8Wy@aQ!c{S306Eh6ZNXKaYknvLpzgC#Y!(2yDoL z%|h9NU<;8@<`9ws%AOS_Z5pwfdQePG0#%wHl&q`cD%29zu<bCb)e!BlA*Cyu)KHqO zbt)f}nguGG)uX;QJ#1tI%8i0-lMIfwxSx1kX8517Sv{Q3nhQrD=!~JE;r2Jt)|{%t z&&dvUwBfJ%d=PI0y7HcC(&}J2C7-|8CtnM1knM^**M-FG6#CwqqY@=C;SwD$P<mcr z2|P-n<|Q)4M3uHDDnzZ&8eyePI+N$2)++$1(~>(9b;Nwtfw*bO?TPE68w~l`GUIw< z1SEfw6^F>xY7Q7s-^dpnrDAB?bq4v-fVybT<WG^$*&*T#R)h4=&wSq`pCNljHM|Un zGq1`0+YJWO#C*m2rF~Nv{{#Z@2Z{Z?>b`v6-SsUZv;OW<O_~ij(v}dzPpX43m<YW~ z+CTO%z;@CdBqbp<i(hxuW7pY>G%Lpv$uAdI-LyZ|u<gh~+seOC21@Bfg{`IZQGkNJ z(U;J=gH>_8#p7yR9rhy$5#3fwN=7mppzx)#>?@fUZMEfoBYDxX>osby9zX@H<M`5x zs~$dDc63l@oTyC67c<Hy?$x0x?X6>|>_6qsT0Gg9e!SP!tmUVdpD1-2Y}!+j<frGr z4Y5zCTTQ8l*Cx)Gopg=NqQK#q(=DXo<IG;fcSPZ%0-|X}DsZh^K=-3qr8BE;zEu%A z!<IeJ4ze-ku3@-G(clHUDMEyHE~Oq*<tP@6m}_GVjdg9nn3N`S&m;5S18J<Ej$%j6 zcfzzy`HkHZ&LyL9I3;U`mXmmueX#tPad`_yv<VPvG9&ZyIDR67oMPE1H|gOcVtjpy z4eV01Qf2FGGNct+%g8$Q>>{Q7)OhDKBh=Mwb{p(gvkOQ`_<cJ>uv>em8|b@Jn;6&_ z$)+|@1riIMx-mzJWvnn#5u&OS6=k)x7Mf_IH26U#K>fDNrs8j;R^kf}fVf&nd4`?r zX!<swIAsS;NeQM7W@TRT7&l8#s6*1{7JrZ$ce~FDbvxyT-`8L;iN!yFDDoNg_fP4; z`S-uLw*}Ee`&zhyeG1g!jZ7T{fmzqt(RsVaEdGH8<DP^w=H;D=!?g_{JhOKm8_$I3 zZBt~%)EnT^H5%^kDS$rBzK7Ppgz3A0jc0qbpko_LC4U9>jRfw`{-|U!mcP-zM?K+7 z&E7E?C!X>2^Dh9H-p3@?rf$hM9`7Q<m0YBIc`ScJe@;Aq*T-^FAO3kG2<jLwCU7!o z6|}xsI)3GaNf8Y?3lc0i`I~P278d=vmi=h4BBN%-9`!`7olqT2pM**!WhI)Ja_8nd z(#)L{O`TE94Mk9ExcBCGx>O`3qrpwuHByMke~eL81Fi0-D1*idX-}wRHpZnM9QJ~w zFs%vzQbU37zV=%(kbO~@&p=?OtDS|iT_KMFK3r_|JsR<)>OeBiV$SJt_#F99ckzia zb8W7?z)5QjS8qryRf)KC&wN7pnQ!LED$ih3Baw&-rDb$gCq_*L4wv~N7Z#uPp`Fs$ zOj+7CLu~M)hFJs)-T3g@Cjkp`O54QRPabYgt2j+wHPt%rC;A*B_w2+Be4546>t{n! z{o54L@YhngR$GB6JhT1KFIrTYQr#-`FgWTlJljaaNz8JkmIre4WkSs)AJ%MASNpR7 ziQdJR^}MADu|iX^%8FUA`E0lF)oVVzwrN1o6udvD`c`?mDU%t&7^a_LHIJoc=4G30 z1?}0=#ow~>3wP6@nyRE!6FUt#PJW9-CT`KqI-~Up?ggnh^%q<>>)*z9KmIvBu}eHN z2RDfGG8Pohigvc8P!vwtY|Dn`JNNS+vkCTFrB-53*41aIdRm4bfaIiu9;=v)Pg)92 zm&8-P@vuVfBFYpF9CO)MPO|Z+i%L++wYE~<6rF__XJsYmEQWKGDV^^20Mv|mRBPC* zk^>;uRMCeSnz;!}&-hp<wUH1kNBU~)q}h1vD?pf(MB2*_ik`9iMANhHwr|k1eAves z(t7#DXLENCj^Y&T(%+r1J^IbPuP23cm<BjuGC0zUni(c`R_XjUGt30ybpEntG5CxD z)NS>X)eXo@81uNyn9~G)t@qVM{Ed9kN?EIR<-(d3Hkgkl(mm~nA*;;s`BnDH6mn)V zddiKoJzxk+(2-Sx)*L`2;C-f3M%l^dJv$M%-iGEt9+Z1{F2W$H?9)LJy79PXbdUhO zfUWTy`{Or5Xb@(*#E<r`)EG6Rv}1C@TVXObzSOcjpfUbMH}al=bZ00rYS~MHUM%MV zE;-rHSN1pN;BXT8Nm=wpKI0aVWLKhIne6l=3Tgg5w6M11@cHaEI=N)8kZs~4G$$g; zqv8nXxH8A^7txK;h;cThLsW<`IJEj4^hK+JVNz>?g4popY|VHIAfeI~3bN?r{$Rgf z`aWt5Vf`pEmPgtFL4P7f>ehIRx*(Kzjs7rG^daQq?xf@x0z_Ov`QUL3vIU`wH?4{$ z`Bo^)+SuZ|1CB$%=nlWKC#&1{U*?bx?;oQcbT#}TM|<qlO-Lry0kYcYd}AJqs8x8w zulNFX3KT1xkeaD5U9;{I3^g7|c-|E@?K(PR)$?<y{loUTDBSYE>^_=~=~BbmBGa-0 zD8yeF!mrihU#;t)nk|RbR^URx)p3awz~8OJf$Ir_1Z^-L#^2?4%=tjwp4sBLy%4X? zyplww1NS*@*#dd;EUyBlFP^cOJ6;sKVl7{48&C)y&QAxodMWC2Y_V9ia2qwD8@0kO zEhbhst1>nRmKuFlG5by3i<v^jLP(YvWzABV()37^8~K6I>$H;=-w{$SaPuR(e?YC! z0u|GVRS{i6w26N#z-OYM*`r}0yoHMIq8imZN^27Hkyp7U{$7-GWPI_uvh(D{4Ak9~ z>Iz<>6T*@Qcf5^i4E4indn6-BlsjV3v?PrL^?!ut6M4-_c0-8OCS{4D@`@sbhet_< z&x+xYzy!8$&6ru#cb?I4ykN_X$Sc#9z{_QhD;p(Acsv+;C<)XI$7{?37j6M56Rj_S zccFAMsIL+j^}1_O`WEjw(+_$pvUZFJ^?e_|aRJ>N2hHsII)}}N`Z`C=#rnJxHl<#d zrmZjkX~qw<NQ)GL|MF!Y<9`~<{vYg^idH5zZvRzqpQ7Pqh_Ci31G05CX2{mglCHl= zt~beb*bNzHDN8ok!JB8TvGJ>=U-VGSUrf_AHrnk&SXY+85qjo7Ktf~Is%}#J@FXVD z78C8d#`?~8ja3i*)4_b6ZHfZ<=VX@G)mzWDN7vQcRu*ht`?>xXY{Zi`9OV%R*V7YF z@%|6*h4>m#7<Y1fQ#akOt&rTFk@2;?JosR4{wg>Lnz^X7^4&uo{Xh+IM?0ux>Rydg zPj>yn-7;g|lKp1SoS;tqk@FiE0*66lz*dn7hbgrEpd3#aXXUBR!nHcP<15ETRmfIN zl~-71kIG2rwLP>~RP57Ew>4MI>{e;C&+pgQfd02%kk5)xtu&x@S6|Il4^sQ3YgFV` zn>LXF3Fv67^;CP8waG(M`5#?#4fGC4y&-FdolxUhImsC58`i7NIs)_5n>pqdnY3!v z@?hC37Co7%sHj8zR<UTa>Xv(By&9|1E_<)u2{IEseTvi;=iH(iUE9u-i!lp4C{Ylw znO-`n?zst06rcA8VpX-B+eVG1MNjF-t?_MqQ@19E-J>*T%jQq$X!_hqTlGPhZDUpw zpO8qz<S|l6M4j)MVUwC`O`XPpusZmk)~l>IGP9*d{4Dcit){{wU9;5cF9fZesR_Bb zDl};CKODTq$IVjyiPT-@+N|nDrp`!d5U1Q5pt{so^P&^HD^9Z-*B_q{b5i|6oCHu< z`=l=GU?`_*VxVd&u2F_A|H&9596Eh4w;D|Zb9|~$Rm@3F?ujuM=zi@X84s<x10!s{ zx&t}>@_xVp%8UzuK=JN8<Q##Qc1l8LRkqlc__{lvidZ%^%g>_io?s2dpKDJ-4j#Am z%J%iD#%eH5n#IQUJJ6a6axenH0?3p|zF2vM&R_E+`g*1AZE%<zvHz5~!Sn?9SQZ5O z+=w9?uw0w@4)tm{<ptL6`hPVT`3ln$2zweF=&(olb-SM$d7I;!fNzk$0yQA;YR?FH zoAny5M`4{YUJ-_H=qteAa3}0JA&_XF5<tj$t@0ji#C+}Y4m3P^S)EUA1yi3|KNklY z>@LIj2dlskjyNn{^CJJ|yoTj7-GP6f>&>g%>dm{sMpghk)BZKzxq5~ju;0mhP7C}= z%lWs^Ggo=*16u*_Ij`Rrzf@~QhEdCK2Pt>%n(oO@x0r^>Y;>n(I+$e)Eh=`Uf2jaR zr?<_}W(iI;E_Dd<ZdhJFPz<|9Gw}6T)o6eZxkcRYhRZs5Nw@6`x=F;GhjINIoUFw* z?V@N&u8Bj^zXG|O8k3Sl^J$q;-RX-&Y2Tu2=f{~yhErr1NBPU!`pgjVC9K~HlQd&x zmZn)snf--@RDx}I1H#g+S!3!oL(^K+?K18<QfljbmXFXaP)6C@_!LIoiD9yt4cIA~ zSa9rrR_0o=AaKRTN2O|4o03>^QmNfGE>uPayD}dKQqwNXDJ%1J<$h?eLg}>R^)29Y znyp$(({k6+dE=Wdf#>iA{!OMY*d6Whao{}LnS%u6Nv7*Ut(wVQjMliXr#4HLFNz5M zROXV3v~X!@)1XQRTGbTwlQj>`U=r7?Gt`dBfXa-T9ufnNRi!t^-Z%rst4@y&cB)Kc zhlBC$Cb_)S>=(%^K@Vu6QfhMjO&PbY&ACb)jtQ8nctMwEb@Z>Z{W-OOXs4}4aD8lS zDwkGj9A2CS(XO^u7z^gYZO7W(&9Dh!iuj}|&F)HrMzM)*@qQJmv(!jRy}C+sUZm)H z%al*8bu_E1i?}t{M0q^FMV(dXl&$(2HD>b-ndHqEYehX$0W2?ftFJsbP=psjIn^u@ z-6otg9r*5M!`z}U)g!X*Zxl1t1l@Yn3GIc4(n?-t0$IiooZKZczwt(d@MZ+4W2`6k zy_PSUz{!v6LO$^tB7XnCYl%6fe#xddUd77v^=5Tmbz(63RI%#NSZr$qEGD<sHT^}* zei$jMI=l=7f1!E7>5@&DNo5OjtW5*s-PN`-!f6H^+H=s-Ft~Wb0u->Tbtp6Y|5AJJ zUhdcf9rTa5?04vfIURK1s=46jM&el59Fg9l=Ic<;D2`Znlx_EPc35=vG3*aIqpu=Y zKd8<}LN-OdbSR`pz*YFg<3gCAiu$n^j4f|Qb6JJZ`am7(hOKlq1l&S}&3@^JTt9>P z1^-uGPOwu|=m3hwUSeqc7V^Fay{zh38DhACH^Q&d!Teg5+-MJUYx(k#jzdq>O9rjF zRjLllr1gtPrJ_V#4byQBq{y}qXLUZ{@uQ0vtU*9A6MgQp6!ylPgr!PbJ%^lNS;V8; zTh-CY>~keG$sO1ZJxOcWqphdd+wV^Y=-p$1YPqF2&(d6uBX^sV6ilUAL=~8LRl-|I zAuRcULH_SnM-denvkvGq^J8JWayhh+Os+JQhv<gRe-nNIJ4R_iO^sQ*P)HrS4wTna z9?;w)=Z7?Aq&x9%|5WyCvmB=p^9c9GW_x<HmuBFLYy`AsjF_buvb!O?ES(r-s**Fb z**SGLnuJoAiKf`gB3CSX8?ucPQPKs*{Do1;YT>)qPo%W#zni`5cjA0wF@nKzBq0+a zu@hqCnS)4dQ7_?909&kw6_Upt1VOb}Ba#Q%UUOR`Lc-!H9jS=fRJ_?B+6=O=m#lxl zHEfcrEs|{~3RTGUQ4g56Pi{Rs+lv*Jx)gi5_q+9gdjV)rzAL=UY%-X3E;eW3vs>+z zw=RmuJ*gS@6}M`(PGVqd_F_K0#E2-@EWID_XyfT5v|9j56SDL?wMv%rMDUsZr9Yqs zsPWGf&-@Iz+}n_z#!-XB7vbVq&A`c{|64n<sS)y*h5Paa7xjM{Qt1Bgi9yl-#n?N4 zR|17u+7+|n+}O6Qiczs`+qpr-wr$(CZB=aBxj|J;x_jpPewyz27tT6ot@rHx?){h< zxmy08J)9H`xG(t#=bu93ge@f#hDiGWBSom3h^96TH3mCX@C_wPR<MZ8l&MD}PWp5) zUz7Bq+MJh0jU;l*YSDpOi)L!^ig8b6iq~$NdiSkYOY8E#tnDBEa*cmq+8lO1PP*z| zXGF_xdWibXvn%^cxQVg!7=v(Ii3>>JM2Aq6Q?NrT_KA_K>X{1%LW_)5MJdoQ+W}TF zQFL*+x~$IoPKbwz54_Us1^aKnfKaRhakLlX4qbzYw7nAN*GBkm{JQuqjmhKC{#bM> z!qhGetN)y0T7Y^``f*(2+cCI1;at)k4oC--F?(&0_v&vacDOsSStWZqf$c5eUrbiq zG!N+eT4MV&nOGYj*G;_aE?Gyn#>j_ix4}Rl%XTFJ8+tC!;_mKxsiDzRzF?^&Yp#_z zxoKA*ZG;I=EtZR|iAaD*v$MmRs|^=TdDKQImUM|5-}!eu(H$w$#0Lq|)N`*;yW(xB ztOD<$BW2$VtE?S)sLjEVgzPFQoj?A8KdO@0F?3Nl?272vSS^b`o`j>~FUphVYrq8T zCS3@z<F#o~ayZ{wwL33y`2kdYFUGWbnX_xUL%o)0__UUegVJ~j(R9)u9WQ7KxY;gM zfhkH<IgyCwNCd1s;YQx2T&U*_PjF;%^bEH?i!|+)`a7Fu<35pk@8JnWl?=8Dv6dPJ z^a>hY^ElZso^fp0MSf<}hq<}j7)z4B6e`<QMqpI&UzSdSXa&C<U3y4Nq5>!<sw8=A zg3_n<lMnkMM1rDad#ZG<(ws<~o%$rzd!>M`JC=a!c3DHZT$($2TlBR6BupYK5af-z zlh|HTdl)HHENRt2dOvxo>K5JpYXvBo-%ophRY-__TVDJ?KT|}TwKRo&QB`iw7at3R zNQeTW7o<v?s{#e~W8LTXr`?$agxz6cQb7`qYJ9nrdzYZley)3l0Ea_9+FrUl0asWb zA|b_l(Ey_TG4L<72g)}z58)HMPxU^$zs@mHAN4DJA=(G~2@nA98@fGb2oTzf1NR$r zg8F&cdgH=MB48J6OJ&OAJ}DLU6#q4e_y=Zo*4T&&q!x5ZSn6{1DC!l?qJ42(Di0jM z{l<#G|Md%DR#$D};<AUPqmp=RJ)sS;^A4wnn9hrM$#7k_M91{^)$8o-g5tob*D$Ro zWEC@I4FoTqc&DDnO%A8Y*T$=fJ?0Ah;}JWyPJ)9&T>%oA*+l3-d@88FQB;t*!_ojz zrxdXji)8;SY|ccSDJe;9pC1mRtuD`<KCL23D4BJvngWk$16xvWPZkLnDhKpegO*CA z<ap;D=UU-*U=B2j1blrq@Odk|qi0D?e+~{?euCWB3js6zvv2Cc;*)o!Iqf7q_9``b zRa`U126R}hBo8UI;peTniPLyP&yTHj{H&fDGR~XboF=Z6>pjxmJ3URkQubHsrU196 z;)H1^PZu!0sI%%Rgwe1HGBPFqA<uKS(eC%c1Wa2RiA@m#y(l-2mfNn<y0-^+s49yF zMRPKzpj@_`P>!Y9+=T3h-bG2t?|kPL+n#lEW#b+?XthXfGtXXXMm_IV3`{0w;d;f? z0jyTKwAgIAX|XEx#VG4P7};Jg&KH)D?9&;5hr`ZfY>sVntBbQk#ga6Xf|YSDKQy`e zzB%_g5+>^^jq{AM5jg7s1gm(<3_t_y^d`&FP2Fi>2nWlzr!}JXGx(UJ(S(xVn_;2R z!KX5r87r$7nt*+tS&ooB_(`<xT+1fM?{z~?iApb|QDjQ(D!e}Th~JMi6Kx7HXY3%Z z^?v>7k)5Sj0H^No_p+d#Z9Qhs#84uE(n0tA3qANjQO*hz8HX#O49-XHIAcqZt<YA9 zu}#9`;WY|7XEWHu^<zSz2wA}Z!Oev$fNe>ozNL+Ab$tb&0>T42=(#C6*J9~o^tj9B zrVtKmLHkj~!cf8EXZH7$Cq!bUM7`$Lk%qG(OvslEd_1etlr+HWEs(Psyb?1}u`dkD zz4WRuHadKgDL8szMp++!hpox^*oIbZ#&hMY*`#!2s&?+2t=8mZHFQp#Uh~nqyR3_D zXM5_1ZF}3?I-Traz5PET+$M}nc#{p+n6k1hDGhs<6OoB%O1HW3Ae`8(j**3>CzCHm zjEd~(OPzJpt6FlBTGgR)c!neD0oED7H#L<}m)gR_Um<qvZxRICZt`6p1Ru|`Kvvf_ zwKz^5$M+b?0(M*O$i&e1B5FJC(Ee?~7nk-_biB17^V*-kkT@)b@%C=X4LFUOi^#@W zj?f<HPq#Ez9Fb)xl>l}=@mG{eJKRue!hnG_a@ta4ZL9?utSukD3*1}L<6aXKNyU_r zKzhb_heplxkwR%z1tTXoTq>ockwp4bc_S^jm&7S&C>70tb0eb}40W_)Samrg4z3av z%^}I>rBcTN1zhV%<LlP`$bM8^SE^`A!A8wClBf+kGjeY)eP1^MvpQJQhTORe=Co2w zGp%KXLL;;ov{qr#WCE}^yKc;Zi*ci5H3!o8N^__C=E^j7PPqddJgG*l&ZcFLvKTd8 z6WBro@a=LDWc7m%%{YBqk?cM}@_B`BFyGkQk>_@BE<+;wVc)G_IwyqMK>{El(xJ64 zyk5{Dx4&e*i>Z+R7*H@oxCByKJfr{?@y%#+!hcIVw+s7$6(`f@TaXM6FOIgnH4r0> zZ1S%5v`s3yGeucB^!=Im$Mug1GlhH^@!KRz4OESVR}6d6j!54@=Wm!0v>c4jU>fCX zuNXX7gRt47iVgpq=nL!V{`ho7h6aGwm6FtKS(!Rk<XM4;{$rKu^W;H7_-izA`EN&) z|A#f<|7!EraB#LY{on4E>ePQ$dgq`(iv&F=LMlO`qJ>Ap3W6D+5N3W$#9r1z&onh; zMW-T&S8zI9ZDB;w{UV+vnR$AnRsK+{FRk=GdFpu0-fZ*s{d|8R=*Qj(c0&4PwDrRe z0vZL5EOLN36b0dsGIWTU!ySRl>$#Os;+a`Jj<3CH_XelkVJ{#c46y}0)uciaaX^ZF zNRjQhRyx!LZYlxcc(C$m(RhWjm}1{NBnLIOq_4^_W>SYDRC6$4a@uoHOU1LJ7G8_3 z48GJZCE2xDgSG5oaAE@Uchm2$@=aZ;7P|`DTqF8K$DZsC?VYXWWSX|(qUk~g_hJji zHx&x!8RVGDW2fuHgqLwYN#zDiXwlOILrE>`GF*x3(PXssnPTd9HC*CylMdP9z-dj2 zsQR+lL)rrR-vt+4ad`L7CzgD+LPp%jsXf)%4Nti_Ld`fsc*Z{+*^5T{A;-uG6L7~& z_*w3f4{=HnWnG3@Obk;^kRG9P@qhyfKN3yAqVRtLCmN!Y1K7vtOu5zXGL7!87)TU0 z!mQAZ8Efsws|zFJFjLA$S#{qxPgv6btz(3~XRE?2=p~%>;i^b3S01(&O$QaZoex)9 zEJ=q_63}-WD|3^UjX=|kL_FCUr%a3L%53>@nva-NQnwO>UX~#!p4_NVBYsa--WB|{ zgS`=_?pyyOLtDWgC-cuvYKobL_fN@I^<FxJEPZIw2q7IIU;Kz(vprK%nw>dmqpI$I zZRw>uDaE`$tVx&Nt(^nS=@m+AuFR#29&xV)Ol!`pO->SpMt=X6Ch7T#kfF*jj2tGn zFgfvNP1@a?4s0ieX?zCGqTtWu!^k~hl@uxTEq|MFg|V_NVM;QWaIw6jTeI-%h#A!; zI%?mG69mIrkY^*{b4B?H<0lqRXy|N-6<}&hBpfQRd_~$EwV{XYUH;)8i_Ngic14CS zM&BM6`b{uktk?gxh~*mt?vps5G~kFu>~C%SkK}o!#2jL2yCZG!YHP7Rw*yuj_<g}n zYEu8I;8n6a^djiaOX_@O>A2gj-*q?d4*&7w1e+^iFu(AN+Fu)t|92<(|3R|+4=0(N z=f7TCi-x!BSHt+f?ToA0D|2uXep8wXgkZNvV<lo1)N&NUK)6DFdP}1Jw36BI+${za zF?BxXH#}AVXF;vn7^sMYX#ItS0I2Hx74>Fo1sw&2O%sJEftB3wp51A*$F(2tk}j;f ze{MW(J#PQ_zWREY$K?nBvHM*=XTx}XBoOm3gKi`RGXI2=o`eN(_zo`=4nCPMX#bJQ zpMgP;#=Q0|y@XE?(GIzmguV;`1}Sz+i-+aosrkr{%+T5^IaNi<iR^P4eLT|k5~pvf z`7FdS?N9moKzV?isCsEbyN2&L3hvxchq*pMl)WVfo5sg{@V%FkJeg`+3}*tgH<(Y} zBA{QGS!%XQ4QiU80Bm3CP@)P@L;j}fr`Ui3=4W(%?Qe9mjA$G(46fRh-<Ju|c9f)a z>hzf&P{OE-t*+UM2k_{fm~r$?Dy5hf4ZrPKmdsS(lJFRYVuw{aF`IOvIox&F(b_gi z;n?i(QWIn(akX7_Y}2i@O9is(x%rC;{*d8fi@nK+2#d0sql9v0rZ$i-t=bl+Ue3UY zLgqwYM5K64V))oM{D7332WVZDkrb3IK{ur#Qsg%B3I=6QYVwDMSk%>&9fZnZ|4x@3 zA)CoqRbPt5PPN-0NGO5p8Irn>4djNAO^@FVK`A9eaD!PGd@gMWm}{9|-?#IStq+ma zj&J+~1jjSbJ7_1ke@c5LD>hHB7S+gkb-CC=z0$NB49sELo-U(*P9<ijE^8XXOZgl) zszA0zANbH^N|o}2QV!Wmk7DrW?+ahe-@)lt?88qlGb1!{Ob-}CAzQ6QgkfGS*5k!d zpDowJ#5wn0vX;)=uwRV`zEqP${ekaf$L|*oB~|UB&480|qx%9DO3+g~qhUxvK9}23 z*1+K+?X$#c4>8r}C0JgfC_{yD@W)cI^GA^3<_<2=N0uUPbF%XX8L*}?Kc)9qGMg6{ z(KP949s=omVvs9Kql0g1fpRuIG_3@fC+-JYgCNCgXK2#1Lc*i)>S6*}ZMa%Gq%$7; zL$R)eOPV3nOm)RJ-t2KIYHmhF?t(qffWbO!>+ei^#i3bFGD8f;KvX6x5Qo0{U1aF4 zA(4^!Y=sL*bI~yem&<7%Dv8FN`<p1J!MmBeJ~!W&ZoZ@ZUrTxx3px@!SEzLwE2$Nk zrAPDWH1>cCHRO;N>4MT%&t7!SBKjZ^mbZ?iXMNCIJ4uH0a3EY$3Kvz7)sT6ku)>IQ z1pGO!{)m-`Re7t7ts8&vQv~TV`Urq!AH@K@!izwX8)1;ZBPClXaLlR9sHxvP3cK|H z!zi@BSR>sI2fAq8F<z<`?gTkgz;19Nt}*>*-cDI{yW02jTy)Ck&iQl8DAXzPXjRkN zCP%%|#w~MJ_j((Jbl`s1q(GbB2`rXD{!d3sQEqT7;G#2CTIdIR*)zVyFvI<Lwrd!s z8w8;9F=X1Rg3RmMac){KkZ-$VNG;@}?d0Lnt-ryO%p3!DXsxopP`d4@omr27kw_$K zs-o%ofrQRQ#nd83+8%`k>u)Ci7`Ad01LvyQlbDy%mP~0hbgx11!al!4*$N`XE`9<R z*j;w{rq9C#>(wDNcU<EisiGwJxj~+v0LDY`FDz3WAWXsrw!r7*v1b5bDHPL&b<t`x z%pmaXdmD~AC4tpJ1B?{My1k}x2nrl>?%QV>J}Oc8c)8;aXc-`|ebBq}7Sk18wE@*j z6#SdLj-#*@qHXsVK|7b3j6VLXO1TUpd#`Cwic#L{GclaaUVvi8Trio(RD}ZpGWg$b zYJ*P&s&;)dSN&rlYw6y6JI=kudh@G_H{*LR;&7&a|NVVT)lbOKU;jXein4Cm41(MZ zavTXs`loatBD!>B%(-O$XcU(nB^UsFcJEbUS@;|3?B>D*bP~Nf>fn-;?v7ia_?!qL z{+C&Cn#b+z)BtjaNPjrZ5`7Dbr9cyMVa5uE&ea?70b5eSO!@eMsrEsvrg|Hs+du@B z6Z^tX*i-$z6Zz3oaI}FL9s$Udol!sa3pT2Lt>vPFh!DgRZaJbarFX}!PH5($cLy(s zP*NdwoRJ;kz$Q~gjo^1oh>>ckg+b8I43|PN)TOwkl`;}e5!>F``=jz6626hzGyK;M zo$&_$;fsA~l{?-hWDQ?@Bq)8yQ!|I@tdMKAn`xDg+3rwJcIJoh#5lc#-Kb2*XcNKD z45I5h1b9e4iboUt-cd48#k9fE9ZB6@&~%&|h$V6_Dg&9jTchSa`sK>7zR>X>|EKH; z)!>|juV&~HJ&}&ud9Jr^S-u`fvxjR>AQJ5qbT~&~fZyG$4@Z4UPIQ|9nLNp;do_q% z4G(Ne-?M&gT>81Wsk7-OaPPOA=Sui1HQ8=pkx|y&O;ksboSo4q=8~@pQvdJQ@vM2l z9#_2-6&ABbZ8@t+b0BNUp4+i0*M(Pyg~;^Ku7JR;8Sg(mYRc_ZiG1R$GET=4JeYHS zzsR2}-46-or^>pyQ2qvq%`PYY+|I^??M;81+RFB{_9^;B%0%bPgRVxfSEjuc*ZTu9 znZDEwNjEFk!cL+rNJ(y2_eA_w7w$>s2_&pcLjT*n^Y@@qcemt1KoAp++TAmRU6>5= zk0KZ)F+S#0_rhpG37%^ahU-y!FUTe<WZW|)U2*S<^hS*QKkTtc^W?lzM!aGiPuMGq zMw#MqOS)cxsf$Uj3<BaTUYUrzGBr>1ElV!0bOc3mu7NkDr{{#c(mLlDc12iLSUqB0 z=Vq(EA-M$_=iE8w=QdB!J@O6@AkH|8Glq-O-6fbO80k_WnUE){iol)J$_#x8ztqwN zgJRzID)y|ulx_=ri%#!du7Q6^dZhm)?-Y8Just!I>%F(pFL*b~Za2mW#)mCvdGi0F zPLm-IBbTmCHtmq7jlZO*+ajlVK%1aqO8azfQaxgCjEP<(w-44RLe<X<Va}|Fgl{Pv z%<#0bnY-fFyO}NK#UJ9>Qp8*zQ_tq$8TJmr6mRa<HBmjrt55z7GSTeKjC$c^tcT_a zH|y3IbzW`%j^3$MY$(oEN~`G!kb|#1^}}WS+Z<nqcSvCMV}NRROv>YdDEfwrCdUcD z=G|(2C=rYQMiM$uWr*ouF~x(kchP13)wkWSLGy{{NVWv-1D`i4lKaMU!TYNIiS-|& zn*O~<hVqxY%!>ZsjcT<2vv4bGX5{|AGbSmTa6bQGF8g(ud%U#JSS`7GH!x6aH%qrB zD_geyc26p`@<^I5uED6AxH08(WkYwjP@#j51d<ez2G$%XF_iBKuh>BZ9w;>jM#2LN z4<cR}oZovgW?I(q|N6f5yuNtv{_1gXehKlufvL~!RBhh-iir%^sOiSo_y7s?>khQL zg-6_gMUh+`^<3WffNr(i+Sh%%cH!I|MkB7tCBCDF*~l4Wfv0-@o}Y_5<Qcs>BQwCb zNFB$jZeZP~r|J&j<H0XrAOAKblfBwKn2+K}*qssP*gYzfU?e)N{TKn-v5E6rJ51i) zzWi3nK@upL{Jj}DZ(!TGLwH2mXEkbW|IvA3>Nr_Uu*OhI9KH78fN+aW!QgIBuw$30 z!*3yoX@Us39K_m7TH>R|XrST*jXZgLN!uIHq`aml=!1?tacmUvz<{|s>QP)o_!Vh@ z+EuyxC9*;}#D2vP{9yP;P(*xL<|6na-ROd#<FCHJQqglMjxu@^nzmP7D$CI=c>SQD zr74^ni%OelMYK8Pb&yxyb{=fW)nCPp@r}+3i^hWV+V2-e0P~Elm|+qTQD$>9<$|59 z0?|-{MHsgwr0>NoWL}iZ$F^uSYJo$_bjDiGY^8=h&RPPZnp)aSo*Ca;o`+u_0vi5! zJD1u$U4BGY515O~E;Vv&*2{8UZ$&5*knm+#Y!s-|FR?g4OXy{?T`3jOBI?{yL5`x~ zly<kWN{U?jtlQZ{h|&)x)yuvV&%D$3`FOdSDGFJVoBH6EI{(08N}XVFYZzMU0;>8U zm3WJ4vd4xKSP{|W^979KNDpSOVQ%CDCf6l+n>`%75q6WyY9I^T=^Lh*&)s`#_-)M= zrKv6@ZeM?58z{%t8yA|v(G_9I(m}eX9wxMN?iE)BN@DVt?m1C?_~q|~!TT2Pjlm<K zm}3=Ux3%Nab4Dp&T`k`Hv@(x;4EtRlnCA$DW(`d->WT{Fq15Yy$7bcdpN)OVofUv= z*_<>(dq)xtm2n&9k`{uy`jHiw2hSgnM+55UXSyS|VY>VIDKk(9<r}oyNbn`?s@O*K z-`>MO`C)+2|I*)KeX0%YLjH~A4Dj2_1OJz}_mvO<S2&~z_;-L4U~!+_{|NkI4hGgx zgiJ!FsD$LpRHA(*L3)l?#nX;Uip<kz&M=~@%DG_hhPf5thMY7qvMUs53qM+c@u|#< zJRoQfZ&|VA9!i<RG!IdFYtN%;SI)BvpDO>Dch)YL_Y72De1l(s(-s#FxqzxE<p{(* zTBJ^+ghvH%uP1$lg*&gKjY?Zjqg|EfsGHU2p_=9ALz;6H)zjk3q9E<^qu_Gfuwam^ z*MDrtlsuXCUtA)PyCm|)*S~vnczY5j%EPn=K$()5<9H|{KV5X<NSRj$fJqxebKeB0 zj!tGwPzt9>L2$xbm)7UYEe_8#ix<=cwtn%HHfj}B6%kr!n?)7zt}&Jw)AX9N*u)j1 z4+441lXRA3c`31G%a3z<G|u3%x>kY_qcF>15vb_I<?rq>$1&M|IgnRp8i^85GboK$ z`#HTiN62clZ@HGy@NqViLs!j&mb&URM%a|5CT`&dJ+lE};LrB0><B$AVD$kUSGyDg z?-jTO3f5-08YfTg>#NwFB9hg44T)Rp>3Y+PiC&A(YoUfLeHm-hB0XB$sb8%tYT|eP zK5503cG^O1B0O;P*bcw%#DPA;lJ`B^dNm8V;Y)kgR0Y{{XryqP*vnn?8B{gDer0cb zb~50frj@72vu*uCJxK|4@!n7SX#xZL6%99|Fu`wVW-rmpJcwz&vbjE6?<z}~nT+MI zF{&@NM@leF5i}m>f9yED0o!()M~cYDU6-OPa#^6rX*l=Ka{XwT?w9gcS4jQZuBF4n z4Vr3QnL$k2MFKSaWLxWhEIlR4t&W#a+A@qwwNa`c;~yu~QMiOqA7ymkhK+R%3hQv2 z@|}}UtkmwQZM!UG901n`UX-#A&Y*8E5jxz450_@#Nvv0{vrJaQ&jw3DYiFvQX+Ms7 zn*%YlR68@oJxQu*%-ock@Rr=o!(}vul8p1XzjGvyN^7qBZgZk(t!@ZB<Kq}!PkBgq z!OA5$GRlo8SF(Baag-yAc9eU-P&q{ZBYG9NZ^=?R1v~wQv%Y^q@v|ssYVEt)eLo7} zYjP(u^tr}Kvumq>S>t?ps@cKDo|tyVdf<8+vchKY9>^6tXGpJ0f?4ZkGGnhJ1e*Zo zv7_69`HU$GcgQUgZ>DfE)~0pV!1=t8QxNf_w^L{leOqgJa7>YAVHT)S+?B;r#HZ86 zqcWSIl9aq%u-*}!D&M4(Q=&8CnwsJzeSCcch2>HT&P3NDu(*V7b@&QQTuw}XcoaW` zo0FY9CsyY-386YsFxo@J+DE1u#{f0uw3lkRF3Qc7(o7bZ9(dW>a2sKzwOTQ8fy?7M zID|?D2B)@AO_(s|;pT=%34UTzpQaldE-edqAN)SN$S`qP)ui-GbJ9P7PRv$=0(Pwz zu4~t+L`;?5sYJ1tR21{)UVq>uf4|Sl*_#8>p}UdTQ*Si{Emham0TGi-T!CBp^dup5 z4m0upzLztk&~Fh`Zk3(_viS<+-+#otd6^DoXPl%vVai{fH?DX5zKPZVKmL|V770Mn z22;J8HHhuLIWi#GiFln{Df{8^Sb%ult<KX=u{KiW_|=xevIFPj%A88>OLKeNJtq{? z$l;lcTo4#9Y1Ump8ds@g-$YRT?WCTxMRVWrdwVie?Za{e<B4FHnL(t0?D`kVbS$A0 z>qEEVcyldS3(+fDoc11C(h|mIempUY4%8Orh_<ttaMC1$9T=C_!t)qPJUQ=())dN| zg<NgN;lSY%>L`!%S?x5VH0{70)8RQiRpbu)I92}-Y1&N~LE;CR+rBhNq5rgQPasa5 z-jb!DW6>aEEb*jrNpo_N-bVcseu|GP&c9g87eitE*9Z&0x=U`KH7s38+pJJ1Oh&If zZD(W#Fw_t7jc#`7>e>5tH$T<kZspy2<uLrCr={0zW{_!?_zKH&IdAv^T~mj<mM7p* zvLFh6EEK)`MdOX`k1=e_@tR*w+zs&l2%G1%@Vrq4HfMN)pRrskZ7c)|9rr<VuFsnB zfFkaDnN!1MG+W8G^Mn%UxVK^b@bzfH2cvR#iJ33%&dS!<GpnSV!Hhd{ge(Btr72~7 zyqd<N@dWz<SaUe7Gs1&?G+lA}sTBiVJ>aF!Rg{p_8SzLp%+m;<sU9-w?Eqlyd+7#d z)h9r49C8n~qh~p$(h!aT_#<k7NSotdoLXZ(yJ7W>Na|}5gyZ_4S_!=EaQ9BAt~1W7 zQuOczy|es}d1;Gz@i=GqNkl^bxHsET-|paNZ~QVx93;nw?NDpo*_QnT9^UL-pNrus z?l`)0)Gs%DPZ!_{s0$ulU0sBbpVio-v=(MUvwc+Bh$eTf^*?MT{AHUH7&L9k*Udy+ z(y!<k5-7UD!Nl6B7_UAr1g>UCTaSTA-JbX_908<t<%OFvmv3TKU*5<%loFEVS-1Bq zrJBC1_CQx78zOsklNWcce`#EZl+pGhU6H}q-H?-(uPAkU-$H}l#A3ODthh?O%T_Y- zm)ZahZ7MG#wMiwesS%ryRWb4te=1Mw5x$)T&juQ_8`6Ch$Z^<;vF`7Gnh74$=)1qa zGBUUSZARw*fuSg8X7BcY2#Vya|JzSck#ku3f$|G4jGKi~8sfOfCxvsKJ%mvNKmG@P zcqF7Vd|~-(Op}}JwOfn6<m8-4A-K~XjN_g^NFZE`3Qa(<VEo}`7BrKU!F74t*XIjy zhpqE{*>RhZi@&{HYm5Q8t>NS#Hp&g!fi!W}iL_Litr|Kb7F5s88~HtLa@c%wH+46c zb$Ob5mJb<+5K;!0(5gVfoE}*Y_hG!4Kf;A9WtoRaN)6Iw3R*Bq%{G^<`-Tz2)15^J z264rgGZArySlzi!DonW#YbcoinixUcnb_6#x}(WD%Hqy|#`uPcbdDm!C&7z1t{h7e zD{{5Arhjt|o?tSqL9X5hxARe07ILMvYLI-&1oL|_js+POo*-}g<<O8PksG@YNYhAD zrYu2GiPjFUBg$KlbAh4+i#E>aFxl9XJGF>3A+wK~;1<5bT-%nZUq;V-l6MFHr?t;1 z5jr9pgQrZqRx#9#yruqeGUq=SB3KI2tg>9C{O5ViPK!9f`o)Lf<%182q~>I38`mDa z&YKkVsY>{Hc{Cm59>LUp#{l_XjRYH6J=f^<JAcqsz4G>b=mX@mZ6JdmAsBcK7=yAj zN5%8`wPYmbD5|I7@=!ua_nrj{7HfS6I{I{TV?2Bd_djXhK5?99Pf_~B^#{~8s@g-< znx}4`hLYdzVE*GLM&Dlf`~9mqbNEX*|G$gojQ{gb?EkB?`LA0wq5}t1U3nHd?ak;; z%aBB)gkv6Or4L1c9SC6%W+o?rGf#qKE*}{?qQFVd;F=vYW@uUcRaN5#R;7mFsG%r& z5XiS$WAA2Vr>Ct`vus_}+FJNI=jlM10hff*y!(3E<Z#n-yY-d8I`v5PHh90{LcRj? zH=$^Q*y-0|omF>?4RpcGE;FnMG=rbjxZ{Sx;&vn<%!8{l=?IL%s8+039-xK7qSLG~ z{N7ig<`@x3MXgz8*c132p7X&m2|{7G1j%+3K!vf-3d1;tiNp`5<7rFLChxvS1FVGT z3#-Zo;#wo=#^~d0;xj|J-84_F4Fu=#AGqw{>Q1SAA|V>i2SA7719?N=#L3Z%u#=o} zAYw<fzP{4C-#^WZAm;jS>420T;V&>->%(<^XZbu94X#25E3@VRA@w`_o9wB$M_|h% z0T8V9aj0r9MD|w#I@9P+d?1bfNq=6vA@Q9v)n5$1QB{k_V!HI-bC}(Ud>T%t)=+i( zv*s}N12zO8gl_qP%ZzQN93aHbS$_>sg>ol)6KLB7;jzb%0i@eG8Q#1{@=bTRHP!c^ z0k%Qh4&)$hg}n0KeI?e2^pLh@5^p4!grwr_?cE+Vxn8*M!MekBEa*VQQ4c7OUYY{} zNIt=@kFbK3dnTVJ_p(0Vd8PycC42gS7kWa^%-ugS0~Q!Qsa${Xqu#qA4EhZ$4x&J4 zkKS4X8u%dEzoAwJDtB(23wZFo6S}@td$$-qQCWSbuYUDJ;r|YIHa~%3M7Ixz0uu8? z1RyG(Je+@81ATX1M0baxzMm^!dn|(Xe;Ck(M*CbY(S3a;<NUbq^FSHVc@_s)ASRfr ze!s`Nv`>%%<zKA6Mh0@Ky&GR&pBZJpp~XgKaMoCuOCo7HMZh4Ko(O41@C>1!3nudV zgb!(u9S8?UYW!0X^aZvwt%ikRbA1pk$q6@#94Fn5v=u+1Hs-FO(~TTIF5nkGa`6i$ zm7q0FCf$m}o>|lzRK_2u8yz>UrXQU!<`2}yL%i6B?*l}fp<YOcY`pK0_U-FcwUHbx z*DS1BQ8bj#87QAdiA|xfX8j@%X23<bgiZSB$#r=Cqg`KA%!B&^#Wx9<Pp;<hVlVdm zo%-=-)XSWYR8a9e%5qgRrnY7?Jf3A2>q#7oSSmy%jckoJnp2yyYZhx6&p2Skt6f~@ zx(rn#XMg2$s--^e<6c;&c}Y@-x)R}HAu+ZdU>oIralPQ*R!oLVeV^pRYsaD7DDqoG z!cj}?tNn#clMoggGl!hDK~q)plmnc?#@u>mwg?;y?Iu0(8CTBsG8~GGLVH}Jux=@6 zK}tHEsyXHE$gF^qp;F@>m_g&_Y7!14$k0bJP(>D-_GA!~ASGU4{EVGiENloTG><CQ zOE!>@snof!`fXH5xQb8l{M&{^#f=i5zcHOSDgySVq``0*Yd-CRRM1O{5D{02;esu& zc=O&(qP@t}&GuT`U>U7q7$ZM)^)V|uMRCm{_?HrEsl~U0Qf?@vDUOyE4z(Eu_BmL_ zl|P{pXPVCK5}MY3HO*VnpKyxa{f49JJ9hBJxNqX=877<gGnB^b>`YB!<dslp1Uegv zCw#{0@5p2crZe42<6fLwtb*Y()qkEV0FtP0CyZGGmtbEG2nu}0D`RZ>e=p$F+<kQ0 ze6V-!bv67*=P~{BY%gDG$HWG9bLW1MKy5`+`6`;uH2xWLH=3yJ%!0mWW~H`f6%S74 z#IWi(_5`nmPZI^MB`cinmu_v1bfKLXdh+XXy;<eL16Ly1&^=v5)f%jZj0e%FSeW|H zi!N;CrH_6jRIz(igRPdGnYH>JDiZbT$Av!I$VaeGFx<J(mM{|y^+FOh_vUoS&}wu9 z%-kKWk$`;@5as8%DdU-L9h8-dTQiO`J`7C##va;?WR7efYQ!p@aE>urA}I1VvGNA1 zwEIH=D!CG?*ti1a(bW)Y!?Y=Y)pM#)5ujqGL>^_uDxWaoDx;fBD}4peaJKTtw@0op zI*weg2^GQnc|>qlTdU`WC#a=zu<MSnqTP?wj0pBpcxE~bY{)?@#!Wx+o03bEv+D0b z0^I9y)QH3?J6$_S^&~YBBa<MeA5IiMaFQuUwLmSJ@t@(#sVi3VRk6KbH28)6O4X4# zg<>JQ13Hj_lrlNcHHGRZ8Vs3dyfei)XJ#ul`z;Cn09nLw267dSspRcyrAV%gO}KTX zKmx0pozw4lGtVou-7`O_0jKZQkORmaxfkD(l(jd+{#4_tOn2(D)U;#;^~Mvb?-Kxj z0@&1?lDRX{GH7E_$106e(;1?8D%0ssl=xM}E2vdQe4Mgr0pTIZSM4s{^pk20QmW&H z%9v`#4fK_2N@Uiklf9zx8Y5^8ikMX4yunHkBS6YZ4RHtrwhSygRq-TlCBRQlvYAFp zqxCe@Y}E$cYQ+)hLNx%Lno}b;l#!{QKYirer(HF!$3V6^*$Lc*R~D5uP^!BnS2H}T zl3UG30kaC2u%ucL5du4eZ~~03FPq8Flz(kjQ2_*Jud`Q+3qWZH<W=LWT9AJnAUex? zDd0~K3Fx|c(woK0_jKQL7E~4Lxt15IfK(eop&09j7Y94X!o>w7y28*?JB(?=S_bPP z{fQ}XNy(#@P_N9DDkJN|$4M(Av8!xzXjh}YV>GKZBz#zuAAB6hs(t>jRUSe16pw2u z)IgAr$V?n%IJt)suo<_rtZ7OINy=W)rY{}+<|tkCX?Ah|lXhwaHPFu*`DfEbJ*qnO zw)>-KF^8G!Q!^%xj8wLZ>B?w{Vx~ppjUPCxeX4%SVrqovCH<>9ka0?(uT>x6Fm9r6 zEkDq{M^Mup!}$G}sq%r4UJMIRejL6urJeSj$Zr=0aIsRiDyJ%s$kBh!7$?!UD%~lK zxHpIb+K8vA)0Y;dN1G-Q70LkjVs3qetb^<T&ce<#le7v?o2<6TO;snppQ?%UN*46l zh9dasWO#8$8&dmILkn3)w8|p{2lBxtVeBeJ|2}<*NS3l|BfEyT8`~u@`9>HePJ3KA zsqbD`v@ah&1Tc)q#Jq@-wwS0Jr)Bl0Ch-XCm@fE4ktrD@&8o&^;L)k`#R?mUJ8Ee= zhjS{|7&^@siXvf#MH_*dnBK!=mB3^UMcw(?Zio$uqyPYtO2__vC`}|Zhu`oLz{KLQ z`J<z{;Ezyg<k$#$B~Y2)j5jI7DOW6ueqOafgFl8jmHDuO#P;5o7tx(SBHs*x^gRU_ zN@@@w;Teh_1ujPvw}K}ZX))qb3C!&|fV%(cI~uP^1Kl?Q#WCw5cgGJn)VdjW6i2eU zkv#%-7Nx@%IYF|%J7P$ra(~r7<uM&1cB>AM4+ylnt0G_b1k^s2AkFTn)Vi7eR!8=Q zBdgw%c;6a~NH(sOMfN%A<ECNEh(I5f7f*avSUXVZP8^u1ed_s$Xvz9iM*4;ORUWXJ ze{|6HqWn`H=^II_1jT{sXnWB<)b2TidX1crq<%=Y736MF5{c7EmCJ}Es!mX@tI>!i zs!5aVCbGWm?}e!-t65>&sZJh9w&HLf?y&@3_rjJqEy*UWf0s{jrbc(-w|%Xr$%b+% z72^k!zd={EY6li_wbuTIGcfwq1F-*@ds7$~SlXn-@W`Uv986UED$XYW)k%9S<7sNE zK$2pK0S23m<US-mm8nx%&O1Syu99o&tu~n^QNAc;g(0%9xRRtS#9pf}no6>c%p0>Z zVxe5~mJ^$&T1W7{ERC~wM3Ng$^*sR5XcA>k0s{s4wmTv6fnD6Fvt@~h7Ujfu^CGKG zPPx*S_ZLxNbZN3jc_R)9mmEP>e^dvcKw(o#O(zs!<WG#R1$5T)<4%zi0GV5=YTu84 zHm4v7Oiul_5oUa#nFb(vwZ@oG%FnjR59ibP+7gPo!0>SMdDi6LKBen#N_h4-UJR6_ zREX+lT3Z@xSST)RnV&nj8~OQ)uEXVFgrkzBsp@EQyOsA6FI77~nhNooQ9WyiBmWU* z_)#0522AmJ9Gyb6N~lo1M!L<?|4Fm7)zK~gIQBH^J~<K6GJ!Bm16oTXMOl$3zy>q7 z-yZ<tpa@Th!m9mC+Qda*f^!heY<5}WLYi&gsnJZDA-=02Yf;azEDBEp1W&LJo9gcm znB#n7fWgUi(%2mJ+5BZ5PRLu={3?n_u8aj$7byBpxU`VGa9$)GGT_m-wCHq>W%vI1 zy62yfn+!iu0Qx<U1~v-}ZfMoyhTK2MQmtSuv<Ihuh5*S{+J}z%Tug$wX<CHZRFqbx z9ISuax~R@dKxDvJ46?&#TOu*^cOl-5i<db7Ct?-V5o63$G6GrMw?f0yM<EI^@Oe^u zm)rq3(6}(yW{L44>uuX%?P~So#MpcN=M=c?c>L0cC(tP9M|uWRPB1k*fBh;t&M7^` zj-WHGh!4_sFaFma1CBG}68!AnAm4Uyv0NZ7?Q-yW>-=n0;*Tkj-jbPyD>SXNC?Wrk zWy%R}npvoOj-}dvLQ7jnK;jhbp}qi0FR+-+dKpJ`P~B3O#=PX@9`u}ka(Maolbt^! zXb4MsxxBR2YP_|$yEWE)-l~bhcg^-fz($$B*0S0_b!SmoU+x)_O2puYfkeZMAG6a+ zXgt%jRw6c&^tgqLq6KrOGeR0UL<EeqlVq{vIjeS{W=Hi$zZb9X8!3ZCRBr$$Z%4gQ zR`WMC9u%s`A9T&d49GR$#c7G=@`Ug?nCEmLbw1N=YXyAEkRu&w9(}p_0Lql^Tww68 z%s%>-<)4U28me5YYPFSnbBuCs#|&zJZa9-p_+}QVlt^E6sNRs0&!!bZF>aJ2)E_M) z-eMo6-?^eVnEZOGY;_m<2OJGajaf+l==@ZFa7MGru?JWM)#HeXRdl=4*jak2$=QkP zsj(42L03M_;0hV5VTtm8e<~Tm3FCq&u%*^=@<+xCW;Q71#J+DiKOu(76YGlrFJJ<M zBhS61<}p+|(<$MUFwJ?}6tce-L}Wx;UE;G@<)cv?X9e_hb{AyY7AtbII;2346VcV^ zwhwFSIru6Fih*I2(c$r1y*MY);$|V;@3+L6ICX~eN+D^`rmn93=1l&rWl@efLB!)+ zJ#T>bZ?qq91gS5{*)*GgnQ66p;0w(%_m`$p;m;YH+xT$m<ye|iDLwD4BOoW6Jq0rT zxrP#Lnl3F>gNw6TyScftyCn4PvxY)(ytL{9kB){rmf%bkPk~|RV4eQHCE_PyrGTx? z^iKQWM!;O9?iX1kRTl#n9wsB6QRrB^qeiQ&dwVr&>p`W-l*#Sof>}*Oe^6=#x{i=^ zGEo>HYY=T_ZD*I#3AkqO<I)PZS>OfU{+t$ASo`Ycri;cNNST|z2RjgE2{M!c3uz;O zwMvkR0#FhV)8os=ispVp>(ng>5$#cGvLu!?P*BAfd$*KkgAy$|QkXX<*(kKT%P?3* z7QG0%g__=|DETbbu9`3Z&AEJ*DYRjgDwI-eqpWH?tgbn+IUOGCL+}~GUBt7K&ORP9 zZW{H4y#9+qj^ST%bD+SW-qVvlSr4GqC#y&i;}}?u^vRf!Q^RC9W{COuv4R4JR@EK% zGJ~y_o;nSQS$DQ;Nk}Z=D13XYn(NbnzyCJjL43sJTV-Ax@~{}A5_|XV78A|sbQfh) zl{~4ds<ElKuDG%_4fbcAZE|{P2<6OrW=WLuP40oN36j9aeO(4R-0J(#+4oOrm&}PV z>f2*=j^^do=2~r~O=Xo9S2Y(E9xRpG&cDe%DWk6o_f|^?OR26f3Oe2CTzk#7%lL~m zqUju#1f>8R?R4ldBtWkw48Sb}74A$akIT3u9`xJOdkrlrK;KFtnB*Ug#=nR1RaeY1 ztuD#Jt9o@aRz>zx5g~kpR?CDIw@jR7K=H;X(dAu&-E>|f1<hZ;z59h7OCKSlmMIc* z67WrT;iC*X2{d~fZ`Sim-18??31i0WPr2i0QSXpv80DeOL5Xl_JW$+iIWO5S4#Ewe z^HgapdJsbpS!K=2;i@8RE!@yD7iYQ#rfIrxC8o_-0jQXzqAm1Kgp0~04jO|kA<vR5 zE!&W2ea#5gu~0@ie|5Cmom9<n>}>iQ92t`Ct%r<|DE#x35qLL}!?(dK;((}soq-#D zFyFxZ^8arBdA}`wVk`f{*ey9Hv^ef!SO(}%5$^(va!w8tZkA!J=vX;v<Y?Q_dpTJ} z)R1tgx=PH_!Ax7+%1qjyEH1lpX7>ns^i_;<Hnmx0&P^F<YV=e`n!}xK(mkoxjS{S* zrWz`ovv^096-qppWa-H|m()p?ykZysi!PvNSY$yW5S5QnI)s}JcDodA4TtO(+IP1* z+z)d{GP4&WAkxhGN8Mv6-Aa$S6=sygbpZ5kf5(n-n_-t^zWMltv#((;;okLiwSq>K zbF^?B7(V~ZUjClsy(a~yo^3Kl0JCGNM6QyI+VAJ;jd;}GKt4~;o$HG=WUG=*s@;qt zF<`Jyw#ddnh!w5#vFAW;h%_A#w|`51M8(dFI}FAR&T0x$4fPwpQ@{}v-B?H)K6mjF ziZ=HV{`ZlF^siJn_+P(Y&7b|Q=426agZM3|xWVN2b3Mg&tWYJ73lqg=C|f?yV!Tog z3?VrJLO+a18M|WSHim*2Wj<87+t7nWM2}H@&Ffjm%`QU;uH>i1>8rq^&b>1R#pBlN zKoi1X6CIBs`rlWK=|hp3n^2GC=d>}eQ=Nu_uW?0^SoCLsAp(xw{#LDw)Vt@cSV`6v zQ*RG$%p3T|xly{9aE%1a6b6(^bZsI#%|0DbfEKLB+XDjT=*-VZ-e0Sl(l6fvgTc-A zLf?uP4h>1^{lPV1RmM5l3bM7M@}X&A*;DEXD)-zQe-p4f6D^A%(+3DRf_Fo@-F>xe z7+4W+awNPcurqWnD?8T_^bzy<iiawWM}F+vu#SoWSDM?zYy_Zo`@vYJMHcaN*5#|V zB0k%+ahkPx;FDpKZQtOCZ(-V^IS&daE&oB!Ca?sd`ac<?b+Rpif5V(^{`RB4p~)76 zc3#YD|AnnixIAww9Z=)TaSv-AK}YE<uxE>==|om-{P7Em{pm-M|4jUZy5)v+e)>)n z99|ML<(2)1KKG2B$0oh3>@9M{<oO>|quVgpkNj}UjfrZ7Ekv@21!axLfm?0PA^avu z$SE{B28&tt_Ch@Qi%@m*Ue=U1d9-KKop%~oK(m6WV{RuxZyNz1>C37SZ<bT}uCs?- zXfUF~XNP4eP_I3&$~4GmxoJOH+O_d9Awh5P+(1v7DoNh7mF=s|<w~BsrbXKYx7N$B zceKlqCEQ@?)zA~7h**z^Uyq+%5AM8A9?4L{9HZFxO`cLLPb6Gl99tm93pX3C%7_cN zPhuGqR**BlCcJi4OutWNTUU~PON9Z$j2xJbOp*;-c8CvqXdIpot;9|os-zjlvgVI9 zAkhsy+kbuctD9hUn9mSh@SD)E#Xh|cs_*hC9!PnRtGor70CH8=XYC0Btf(IEr6}p8 z34^OZhR}$tX;?O{e(Bv~pLseE@qiy(aP+F(0Us`7w$6z01LDNzJ05)<ccHCNb)pmK z>JPKJMA}y=&3Mem*h#yeuB^G%<|&cQ;op5B#DB1#es7Y7DF0xKL6Uo2?~>v~>8D5s zh$aWUhqsS8`j`ap8v%lrd0>ZUo`k|5K7lV#kk<%s8(65#OeB^DGV{IB`F~Ub*XCe1 zG*FuT<mY=6^M7Fqf8Ykbm<PT90$*AnuP<RYext+sNzeBN<oBfHyP*reo7;xjt%32u zF1GD;IMNNgx00XfZy{_)!F764x^g{<a4jNid-lxdtRv_d;CD7)oXJC*eLKsQnkT^M zc;g-vsda{A!GkmWNPfaMt;U7i{c0rECTTi$UvcgV`{aV_q3r%1=mAmC(vDmsJDHI; zZ;g~{?g$q@a4XA3L5#sDAE+2iLXHeyU<xXkCIJ6TcWYKPs<gB!)mcZ7yP58B1TO(@ zOaU~H)VDHDY9%Pw#&j>=OP4koHFu%#lwmnb$K6L6L4P?H;p;}OubD?kW2U5Q*P$#r zeGMa4zh}LRkv$OEhuv@S+aN@fpNzHpCSUpN=hQZpWd$6JWf_U>Vp#aV*T_r?!Wc0f zjq2z*-Y{~<LD9-T2!w4mV4ZXj!0l!!@z>vWNX0(tVLjO=lFAQGv;EA`Z8CHG$zhf* zK<}r?rOVAX#c*n&)ZZCSMMdw*q9b*@=K`m5s_b=Sk+b<dt)xNip*yd5wkx}9_5fJt zpwIQW%#f7ody@LN7s=SZ$naCoG3Bj$gF&TVwQDcaeodAk(QV2+{jBv>`&heml1aJd zfOEi`z~<TuuKmx?otN+SUCR($4<CB<Eim>60L)r0gd}skB?n2v6FzN^0fwP{K`X8; z85jGa$sN17iOYaZ^ev5s%v(i0kC%QucU+g3{_W3Nyqks>TM-it!Yv!up+Ap}M8UPI zq#hE!tL0bQ^<8+KkNIT?gt`OWvLAwCF9bWA-q<9)G8Iz--R!?}x-8st+4=JR9@~}h za&Za$J6lA(LG|9peuYIx@@^G2>V6yN#Kv<F?EJ24uYtvX;@%<o)PLwBHc>`42~pJ8 zRNI@2JyF!ywFlQ0<CjZ*DUedXqrXUlEO`B{R!NX2-NFrVy1w3Fuj70328h!C#y=)C zaUFQ7$K)6V>o<d_&(6pHsZ2}Pw*BmEd_(sXdG}6>7i;C5=^Q&daT&Uc(UoJ*o7%ma zMR><rY5eV`6wwzsxnI7r+G9YsJ?-M<BOmpqjJJHM+HF<wh)t^P_W(rlH^Rb;zebfe zuZl9jVEK_aC2e3fQm}&J$Y1h}eVR)7mjh}b?)DubpudUxd+w0u9e?UzlqytDFxB8x zJHCDa?U@?<Roy<+9j`u=!(PiB<zH~$u(kmm5XvW^L731U-W_Kz@@+UiP$N3%br=Xr zq7Ho>!3Q;Ie)B_By9+1}Lk<D+!xYNjb=fCtfOv`cIDZueWdRWd0dxJkBT;t|!0&>X z4nso2f}pY^|G8qNyAF2L-uTEpgT;nB2P;7znw5UPVzoPi3iRH@+2B8mJa;XwBtB$% zNHE2hsKtDa!OJ0JB~(tyPiUPby9bu%Z2W_%K_<5L_%?LI3t#%fEGNR)=1I|*dH}jD zu6#4jQx_rCCg*-a>tlU?D`wdmVgBw|!~6@Fe9Nyuaq~$Zz(etzAt1K6nJchKh165o zhR7;qvCu9rgB5C;!o?Xk#jxSJ75HG=ye;K*sxl?rYU9Yh*np+J$vDLFq#pWeyUq<5 zQ_}uBU%CghHaqx8w5HSwqXsA_CO-SCOrr{L2WWr(>s<>$Kj-I=RgKtmLThQ1LjLK* zN(i@J9CEJduVTo3ZbS|^P<34ARI1StbL}v%>?Lx36@@FYN~HM)Pc-0!>xMqYJh``2 z0jBuEK_B0c{`ZmF0wcP}<ixkU)YjJ@>DM}hToWZqN;KP<kl->AvD682hJIo~aF(<} z?gu9QJKB}Og42V`BWJJ;On_v~a1lCGaK8zt6*7+E?r|hgjM4b-5Y|1^{ocL(Cu}6F zX~w_*bScGDS_x(FztVI<|D8+8@ISkh|J6qHf0F(&N_q<D!WaTejN9&7reFzyk+4yN zQF!RP?3AI&#SIKG9H9OsSNAQXoY};6txsvestA_RJBUxE(XNqTEIHYe*$#u#t)rd1 zzFq?`V5lV6s#94AG^h4aOO@l&SZZ9C;0>GYSP}AMgmj+4aL3Gn6Hg8;)@w(Sy3>pz z-z6)%0c=gQGZW4QOjsG>j#92n=y5Kqv*PUNV(+nuT*it%W4qw7SSd)s+3Ki0eKFiq zb_pj?Nne{JPEE}KpO%GzDL4D^r+gs+nX5i^(sN1HQAL~`5wghDo>4fZHi>%!7U`(q zkh-`uJC_#gxMWE>K3&C9Y)gk3(6;y|>y+FD<wH+a1i4F-Sk<63nO%aeLQEcOu%2iJ z*-VrO0C6GaVgjTKKUV+GKpWAfdHBdHVqyjjFHJWs#rb3JuKG1C^%N0dNMmRg?~4by z{Aa6lQq|fu(7sue>iK+_-df{l1^?i;s9+Lth~)_g&b|P>Kd`;|FCAXbb$8uKad-ND zh0X|V4FOQrdWEZ_+4WI6Prt`gCw!K7-ok${&^<oUuEGkCg1?S~lXAeKa`^oxf2D7e zxu*Whuy*@zQI9PD^HmUWHZ!sjv2`%9`TwuOfc<}LLS(f&8S5Hr%PfJH_zTCx*T=U9 zaI?#ZizO23wuI$!UXHALnG}5`&Cx7=h`<*3ej^IOhAGzlA@bn0)1ARZ*7J7%xQXe1 z3cNBxXydgs>Jly2DC1*v*V}S;N;6`L-ld~ELI2B0FN-@{Nw310?MN4MkXhg)Xl&Vs zp?y5rYivpQq=1txoFMhTNc+p6IHPV|7jE3$U4u*G?h>5f4vo7*fZ*=#?w;Vm1C0lF zcbDMq9Nx9}x4-k}tXii|RsZU$e(I^NF~=Blj(c8r*tzz;i!QUpOwMH{jfJT`e2p?+ zB>jg(%}`o&j3$%o%EZ=ylzE7ts{0>rE9yy9cZ!B`yw@Zwj<HY{xzutj>qDs>lgR-g zvX|D2;@G%&IL{-heyXr_T}<n|^691sMm7;uRayyC#J)@FbZ$A6Ni2bM$1`!sN&`vV zRLz5#lxZ8+$Cw_n{eDzVR(TzE=<4C2MkIPBiI46>HoK(4X-A3T)WTo#HPt_UTom{V zzsrvzh5hdNXYA8kcNgETmm#@-$H_lLw^V-9?&g4dYvXDoIo-z<C2X$7i2xyB)Kk;t zoj?7k?my1zl(UQGwBb|Y0>@Jy%VlFwzObM=HQ@ftlLp^Z<a|I0_`Rk*L$p+Klz`qU zF-fHoO&N6mU!Da_<X<f7KjR_rzm13gL26JpcCj>f`#-UuI_xm_84E(DWtPO@8FgmH z@<ELxVDTN;9d@}Aghp~jY*fCxB@$&?A^SOpaOE9j8F-2mw5?)v^WXp|RmwK~Rc{T0 z`M0;BMI^vv-Tp53x!Y8)YWUCn5rb{*{nk<E{B37WzjA$cl8BbXM3#}Cz{>0qEFSry zvGJmYgysm;>tS-`FA}@0LsNc<R^}<*!&7U^LME5(?k<J3F~n(&kxk(yMf43zlURlE zAsVS40=y#MDfx=yek+F?Uk-U$W3|;*y{;A3Wx6RV4YU;$dDBdL6)JEiIAoO*qw$i$ zYWMvJ;O2+mzN8ZkQ4E`p!n8GR@XUxGHEXXeQF{0}&fLd6j`ty8q;NB!i=#xC#r8hW z^<xD67FnuY7dw;*zqecCYqDA<Z`e5FyvfodYt4rBt7Z8w*TT`N>HCRu=MR@bS6y$9 z+boK9!i+<14e6uj<{#UHLa<8l!J(t`?+npR@q9B7UJ{(ckedJThP@FfysCfB%HQ@X zez-LBEpUTtsSB}%&ZV`grs;20`hXpVMEJUk@)bU4t)efwRd$7n(kZ^5RyCTl_g?uw zT9)%TE7Jd@hT8wHp&)5&Z*2Mh_hnMESDyWb?Kc9uE*Cf)tsuEqYFZ#Jb_FBm7RRil zrHxO(<^weFI72j$Z%6H8y>7IEXB#BjV!h1%==XFO8a4SQbN*-2YeML7ZS^qk{qgNi zAOObfON_B#6h2Ln8GR0oq=HLQ3NX~V%Y#;K!9WQM^V~S>#iH1(GKZ#>i`K-j9}0p) z?kaenNJDW`jrf4EtXu%6dt~E<OM>k!Yo>yuwx;v@=SadBa;4c7Qd&1je^PxUcHLl9 zi*wyFuXGhM2@ei9)ba}T1q*!8LpmSLMAW>m{T>xCHRmQP%1e?no7_U&yik#v*;1Kq ze|>vkAkiYvpDX&>zpQcVZkis4z)Mdd%FvE73DSwa@TfWAS~qJHc<xe?;)pZua35vk zI?!5=ih#jDGZ*YNC4f3gzJiWs&ohw)qbsY}ud~f_wJZUvbfTA2V-DN$V$7MMJO{C~ z%x-V`4?k&s1469kw=T+r)$HurU$|tne`{!`hG^JVpL2xwYh-(<AHe+O3m3H3t6kJF z5IucG{kKnI@d$~jRrLjwVWyScP_4K;uemI6@7~c9kDr~jG4a8gR&qqQr{>5(bbFpI z6;-2EPrLzfn=wbH>cCO_XVjsjDJGyRZSO`i^20rFmZWOIPzL9*9_nL>tovJZf$@A} znBw(wI-F|Tw;zAVMcZ_psQ)C+y4Y6w*rmMJ*xq`CnK-{+0*pTpP@SNqcKKlucKiJ( zC2>Kd5|8hS&oRvs!s1`y!xu#;Uug<RBv+w+AhW?o6JKKp1z`(cdBFNTCB)ZIx#gE( zol&ePe1v?LJQfcQaaI5&IibpHQ}~2Z%7y6B1!IIc1+y$D!uyC}c31pD!lzu2zOew7 zGGp{jJ*x8SLCRUT1WjSA(IA_qEWB`jdEUUMFiHF`b|V%gSJbc1H82AG-*rp>11!>i zU4&+1`(KK#SoJgISyB8C10MPmN?uyZ3UZ>>*mP6Gi0KTv9xL`sn4o;e^<|uPM(bMn z$3_L}D6*LRx8j&dcS#Dl2F^c+=U#6@58f-Ey^=3nT~sUuZ>wdRPGbr&a`7pM(6ujP z=*<|p$fVfDY<w^%RtmP9vG-bqF3x-mxEx`U&okTCC+b@1RuKQRI(8q@!=0DgZ%N0A zDyen(jV}M<g!h|pCY+mq%m^d0E6NwH2h&2`c4m>2xFO&5ZQ}&1O0%5H@#ZO-E$afv zw;1Ev8Lj^PrT0*^b<4kw(#*ra75J1jSph|Yi%1JPl-Ivl+g%Y*uEJ^uC_b<czl)-> z3uQ26hq@9{|GC@H;+01&MA4s}N?V@}rw0xTn)#%mNJ2K2b^_(#cbezUD$GrX2iRMq z+4NnvP5K8kV%q6IBLj#h+@!6Z5gK^5+Lrjk{EF`A*Y?hPJBcb258;W0Zs)LAwaj|f zbf)i=YMsidC+m`x@oxQwB|ox%>_f5{6oow;M2aZKr7rINeRLqula8elRHor%X5?i3 z_cm>0uYZ*5;Iq>ZSfF!Px`9D*Ql?$`?x^d!C(5J6XX!mFn6Q!0f2c8M&m^FtWdeJU z4e4TP8paereU&O}lE8%f2Sy)Gqimg#|4<g!7Ks-0djL!OcPZAMjZwl!iq~d=dqAi0 zFXNp1U7aw>&kb_InS!D8Bz4(DLl+fUlxXEW!6{=+LY)#D*a>m97Y#Xy(j$rjiR>NM zS;52>s&QfWXTqwyvnE~mYUUxy+Lz37|3PG$209Z)sG!aN<n2gy?Geq-c(wd*<Mn?~ z!et%Y%w3F4|2GDHK+j8G|34B$_Dj;f(cX;y1b0jXaY%~k416a9bOo9~bST-eB4>O< zP%luzB8<BAVx|2;(ZJ>xVfC-nB}(U(1>ait%3t#~2JMvw>k&`BlirS?fWU<Jo15Lv zj$H5aw!^#|p+m#lHb*kgkcfjy+cnO})a==%)Pdui!~w#8Gh<_BJeI>le@g^BL$beK z)A7U~*yRd22uBPZ32MR*nP2q?3P-z|c|s~<b0@C}W|p^lF?e(3mEE}UkoC4XWPv%{ zPG)$OtHNz^E)F2`DsPwwSm)Ygc9;3_I=oOP=O2NwXp5eC+3{OXy*~n(TuQR>Tx4m| zuT==i&dS6!`N^pE>)GuSC(LK)Jc3PX{;E=#FyYEFmVVC}Gb*}KwSFwAS2*0CsYp`( zJ;CT!<9s70Z20(VrcLwt-(I6``{Gfj<_MOVXRceV#|`ZFVawu*lYS=QNS?MQvx)DG z`Ty35w_tg)J9T6jN*5}e)o_0u6ew&`=36YQ$Q<HYhpZECYgXEi@6ipp#mN^d9@?uq zEP91coMnDq2xQP#ntgJco+Kd5KR#%DwBvz!BGx(7x6V5}xOoa<>PlculIkkH@o?|b zK9t{+VNIPh*YV*qqR3}l_rWpx#W7|=XjFaUu4-6&^We5YFYmKC&T|>-&=u)8u}5~v ztol;;*R6U&1aoE8t;+!Z!s&*kOYM;CpHKQ&n;yUa&O!dQ5c@R;&n6>7M>@}^m-bp` z_QmYup^h8Mhxnu0iBETm0sqDH6GSfASjd@B$xR=>$WE9lX{v!x+0CxQ`xlW!*_NwX zPCwP%a!$Xj;mgoIizdpw_<=F}*^KL|tf>8L&4sz=6CW-{ZVmO+`2}`!E&D6S8@%w> z?Lm|1<`nwf3J@>8NEkhHHwY!UnsNrj9$SSNHjZP@d}q-#VMHb#U(SGe8NTpXEM_f` zTjQyQK8m9rI_~LgI!ERZ!IPQ2%N)2f=qc|^haa7d&Zv2cG&Eizf<E-)T!werBrDkn zCz2a?v4x8VZg=2-n}e9u0p)3R-0DiMS|&kr<Xa_t2B{UhX$HTrmxV7KrWH#~0tOQs z1Nxm~oF21nx^`2`*Y7jcp;^z&WnUH|q&W=nkTX-aJ%Jk&oD`9CHV&wPRjn&AJW_;a zXjjxDDt}NcxrAsscZ$f(&p{)~JHJN`aMmmqnoKOOK-BteRG?<LQuXiQ!eiN75z<tN ztx_0_HR8X;t1|X&qBB*>*5;DUfSR2pH9xo*3c~WgO+y@$Xqv=F879%{c6=|3Ans{h z?%h)?LkJ6%qFymP?E~4bky)kr>e3E!dTr6CjpDg2Obp)rZogj$*^fPT9QisfC>=Mg zTd=ZelW6@KGdOAUnzK(oY5N*9$ZGS7sWwr?{ddEp24OIWoCztM%K0DA$wv+DWKgwF z^@z*t%+;+Hh4v@ty^eV~Ysz-gI#7l&IqbsbA37Itrh#kd8?%Lx>#x|a!Q0X@1w1BW zme$_VCu-@%;7S3rj3n5eJ-e_1L(-JSJmCat^vJ9@5<cmaE<PJs9==eazd=L8z$4TT zvN=izEG2szZk@_OR@+y^ps2xGn^)U@2x!$<quEEEDMedO{7BvM9g;mdEq-j1MtNWP zH1W|tUv(E;E54#Wd>e%&uC5;Fou)8w(JAR7REMN{x00tuTt(plD$3ShG~_vdBfAoj z4Yex1`bXFefkJ`<&sT9#6Wb&Ob>J-KT!j&t**LI=+#Y=%wu=8s(+#7={@C)`JlM_g z`0yIn<G<y><u|z{a{U79Po6Jw74F0nEV2{N_1?cFa$^Ld`=yu&6uhd1{fPZQ<*>7h zC3vOxFS|N~{RsZBZaeHoe&_iZ+WNT0BlNev)OzLWoZoV6B_dBCJl+o1wEZrH)@s|i zxaH`TUns*?&_*VWFIUN_@Gt%&%Y}f!z#Js)h+KzHD7Whypx~dc(@ex3JH~M%4%u&r z6v<Ue#DF#YMe(fE0He|#iF3KI815M25~?qnwG#zI+vomH*Q<j0yCr=E4>2?L{hJOs zXwXE68q6hOKD{2sJ_j!mt6t2>weoFwq_{E|nM*p>oWJ!0c4RfE5LPTp;s*C;bd%Q` z3W`PW;zcUm?(g21MY6A>xFgwzJafG6b%le~#5txLLDpee1vG><Nm+Ik^fpz6o!6Oz z>tR_nsK!|tEd{6uL3kgKMm=p>S{d1l{TwN9Pr-lu=IkQvR`a2~df&cr;mF~hTVPK5 zH7S_h;Ci;eNl-Y&4H(mJ6x>n)@EMG7@NLSnLgx^Ot_~&{t|xM_B#a6#Suv+AX4hph zLqbK;wm{rt-0Jm5UU6Br6@A#4_gW}i$|S}WPbTlIeXsM7iX@elp>@_8MU|=<jpEnu zQH6212SX8x%EXY|DDI#0dS=WW_V?(*k^RRqzHsaTVF{Jl&8hQWJkC+*%x2G~7EtQC z5DzNR+jUhl--ar`Tz;2eE@d?qYi>Zd=v>XF+@d53s#*PH6kc3*CKUSEQ2rEj6bsDJ zGP|*Gl+f!WQAm$$V7$it*_3uQh!OG!z){=%C5YU{d5P2-iOW->$0A13tcKuD+}h94 zms8vEZWt3NX2pT|TW9a79M91nX|P=4BTLtzf<eQ+0;dXgOXmWOhsdUspLE+E9`Nht z0)C|{h#XX*QH7gPdV>60SG`60*Zdqpm~Q!ktxa$tx7=Z5(TGkOyJX_yr%PzGli(aG z(H*5*KV?!wRHfY&oWv}7Y)aBU6E2BdYJKj?WG)!fpXt(~igW70g$h@%82k2T8(bD@ zKy-Hb&ajoA0a#`gG&s<Pyigk}Wiqyrc!HrT-}KZQ%bXyY5#wI7w7*rCH4`#a0d$<5 z>$$ly>20%xgu<4?R%nK}Mi7ZNnl-H|dUTySRthV>OXO05szWKA$@#^XBT`jd^`_R& zrDE_J)aI?j_ziLkD>+cy)A(1v9agwvkRiM0@f)e(;h%`J&B{uIQc4(5H~4-989K5- zDZV=aK@}HO(O-7&7rlv!{<;RT60E*W!y+70Wr12YGRVBGuEJ5=Bipf8uUlaH&CQXo z#1ZXY*xlO-Yrbhk$-(SvNt=iv9nWcmwG*N%d(6Z`81!{|k?#|sb5;{G0H%O#dlLf# zrghNxiQY$@Ewzgeli!Wg;1ZIl6j%KlCR2Divxf=@Wt=x<Dgz}4_tuS0{&GG9V2RsN zmAchcEofiq`c%Ie`xgU6%<$WQ6V^w>_&WbS5<n=vlu9*2DF{t+OQR*PL4`GHurj^~ z9KBo(tnRgeUqW0~GBO2-`Js7q03G+C)o(qQs*Eo=!b=Rpi#*GcI^gCU>o;!W%295I zZ0OtMaB4uzFL6x6mdc_Lt$H7|Oh=6od2Nxr<zd&K52(a;4rliu;^VY#4fO=u$;n?~ z%R8_L=vqWRE(5)9#1!yX6}6`b{7xctQal#YMJPRWb2HaSK9y5L><_pcYq*RxgDpeA zJDF;NG}5x2*B&(AEdym1tYUH}DLT62uWi1Lc~e@K)J*h>sjLExZkNt=7AFPBm|7QC z^uGxH2JylQ?~Dm`FpiMzAyl9d^X+ZrenIZ-`DI^*MswI>XS->C1*-78v)SC4=>gE= zh`d~tF$4jYKoVoGukWv6RC!D4K+S~!EC&T~ft=fCv4I}QdQ!945UrsvY6<J}DO$X> zVjS0M#5PgkyjoyZkF3tuz)3ZjO2eQ1aA&qKvqjjpcKCJDJ>ML4cj1U69%11nvkId^ z>CIMw3eHmWj8(QIr3wmXyhS20*9U$-WD1+}$`e%nF84YkWu5>=%63^?JcVG{ErBlz zh)%;C#9q}oqy2ya8RUSPOVP((80TTRkm=VHrh#qR5>4e)BZu7cs;sQ`C=GM>)Zg$F z!Ga6$m7S|kdVvBcJB58J<*roy{q?w%)FD;T)HR(j!SK1)i3}SY_6mM-Q9toRst2WT zM|!d<%|f^Z*(9^y9gatgSWRIE8D6&oB5m24y}kjP<s1@yt?xp_fT?ISAAy}MaXm%! zX~PYybxKG@>YSN@2VI=(Tv9C#LLw~@p#aA;<K|AK=ic8I<d_Z-^HL{cB+k=Q4Jki} z8CRQGDtwpY8le^03iuv$w6Sc2Y>A2jWTM|L<MjnM50ink(t5GBDjgNR&XknD5V^U( z^v;0VVr~q>Wit8MSIyeEGf9&FNB}XTW>Q*`%us_pm0^Ts8q~zZx~YHT!N4M1Ldj$v zpwJ#5`+Oa@xgKI53UU_U;|yXmYOO(eO3QWNeIigo2pn!}SoPXwUz5$1kY_d8XRL*e zoi(698(EfRU}!-U)j-4uml0w1i)`X@Jc8eRNy*eyX`K1Qvgv4QU-UcR>v(-8&_Xd6 zm)|2^p5fNNDs%$vV}8l8*_cXornj<s-X}!bkF5Bzz;M7N`+{M5pCqOjMv+R$c%t5v z(?SINyCo@gEr4O(p7M1lUr$yXuDZ=C?3}t`IdhsU=(0BOQdC>{sdEIi7Y;)XrYCx` zP?}@v-;cBPs|phmeZ4`WJ=*5-)oU0Aqa!{V&HK^LRHK)x+s!ShJWF3nVEP6S_@DF! z-YdzGG<At%hH)mirRx)fNlcTL)H$DaaT32#Ge{!^*q_-y7GEu`fI6)czWv_l)o@Cs zHgjf&@szezEa`w(FAcscm%L9z_;b3LarVy^)BYIrZ~&14k3GRYBt^yS%h?Dt-vD-Y z^B$|NBnVnTE_kRqm<$#~&XeCxy=IM+c11A&{+>b^3{wRdKkHF#XI0#Y!%4({sc985 z(7BS)Fzfid$T37rmE_U6ou`0#=BHGKwy1Jvf3}dkYV#6{#z%tNY)F4Va<shUznOfN zMy2QQ`(5>fiNo7!`(-+KbZlF#&tpq_0*ZQe8ZN}sx3uNm1TpqBeAJH=7!nOo`b7{g zVa@h3PsO!FV<o31M08gOP!6zh1g6WVPKR+;4}AYZ0-Q7ZIK&~i^y&s5FR8cuxx2P( z+pn&!;(j_|sD6>^FX2Jd5lyR#tg%80{VAe_x=8x`^$a7hOorOxKI8@I!>CwQoQ1Dk zCs0QIDvj@5bapKb*PqVK^D6CIogq1?$LwB*$Ff|$>!@9%PK!d8bjvigNjph5!nMAF z<Z;EOl*jH1R#TKp!|g<8ek&A?l*j;2-^p0H_a&Dd<TJr~bW&yT_h7{2SyqU3c!ei3 zP1?$nUZIr1rf_`)#;L@vY<7q8#P5n7x%wnh%F{vXC3x<t7PM`an~K-Ufxl^VY!%#2 zW|4$+49wiHe@M$f;8Nue`p`d2(UoE1E$y}5Pg&7~C)>DqmTaf5OD!i1QWe9cmK>IN z%w*)wCGP%+8B8<t9CV-V`Jx+_mOL%HD}PHoo}7FSR6Ht){F2F+$;VHa%x~=yxyn%* zU6y9HZ|2p>g8ozfMxh#qfokZlbFn4nk1~&Gildy)?|5zU>>>Mw1}Ut)IDfA>kUVC8 z!c{u0zp3wKuFDQg$l#5O^>N_kEAjtKM%|RS!QL+^cb~y%)X(MYmMAf-OD-B-i%Y@D zE4%8QYpk36nG|Q%JF{mVPq@(V<<BVTpX8OWwo^8eVMY=GP^r`mRB4L4N?Q}7>Q5hq zi;-xLnKa`X{bdTDc%mOqU+B}So6_a$V@6GM(!9nMIhAbWU1z?=510LG|Lb8)%lz*s zz<s@kWr1#y-jdgxw5{K<HAl1eJ!*@&k)CMc(=r`o$1+~h2V{?5n8IjE!<~wBqt2E5 znk+jsWx=1;JVV(YG;(ZFRUlA-*%?=yKa2SzBW=cYub9W0;4Lt1_E3F*rK%@tK1Y_( zlls?Qq?;h#G=pJ?3;p~xV%4s$?znqX7|)EZLm5_U>cSO4Q{H4TijQ#aU#)3bA0qpm z7ZqVS+MDFP!^4Wa{Bl6IG|H=R<|~{1!N)f$e+k7kMZGy08%;yR%C-vD5?ptt(0P-n z3OO5%`6dnfl8S3J1u43kl?p}s;<FR=l|q)%@9sz=0>{|yXt`DA#j|sh$H;fkxs`dP zjdQkc%|D_iRLG{iPE6bX_U0&Ei^AC+3tLe@b*J7U1*F6JGW9IIl}Ipt;oTETL0HG0 zhB|VUknp-CKWZo_XS+q0MzNwNX(TN~KH4_>kwPkQ=8L$*_17oJpg21<p0wOZm49!< z{W-u6^+fgz;TZ>=#=uupc}5LfX?I5>q&NwtX|6iEWukVOz9A<GXVcrkBd=$kMM^l9 ziupx5X*e=_^d;7i<?r9A_Da!Wt@~;2k*On%SU-ETLgnH`_@USA7{`i+>;tRY=fyv% zrI91k>zuHuvPOXqM5qqk))d=%w|YdS9PAXKL||>0SAD}+<@u;}b%Q3j11N(9_#b8C zu2aeOxB8i)le_Zze3xk&0`#u9`sK|My6!VBvZK$qLekYRW)I*Ex@{TADFW1~O>>Ap zp;Iic4VT%$n>^YM6n;ck9Bd9-ExLZbQ$)P$vbG*GXR3Jxn{uR{ul$qGA@UwFA7Lyj z@Z^j6G_fAjR=~g0-n@Y6{GvoY^!@&Ix0y3_I%Ld*dRcNPVkO+B%Lgf>y21C8<YB1c zJ(Ra$jH5B3CLNW+a*RM*yzceYc`3zEzM8#XLNYz>M`tC>4{EMiblgqJoQo`SWM}6k zX$C%~c%cv9LafVwA8Sr7<dq@{sn`bIiz|;+HAOY=3Jf!vuad6NG@`l?uEL;soQi*< zwSTM#9H-=d!?4Ly6F6?dwEtYF|8Dc%XT6_?irvF*Z)7U@-VEHzthSk^+m19ZN*X<8 z`7rlhi1Toi1di8~_-m(JyZT+ej=h?((egJZQ`^!SB%nXg^W!rbSq+D|Z54^@JPG)w zycwuK{O0Ynq`n~)N$_CZr37{@nfOHfrkWgBc;`RH^fr~oGti|YYW>-#%iD8u9f!&| zi{391Q}wMIn$DHJ^OSv0L2JsV9kbOBr|#88S79+|ho3*Mrd$KvirJU!=yR0)A#GEZ zO$R;Jo$LUyNCsKz08{iDVfc0B9(D)p-4xwbBA`=Fc0=4AeK@1+3GtS~GcDx9zCNl~ z0rj^l+w>MmIG6v)rak{c+6&E{BHcTHtOzdf1Px-IY+LJC<sC(6!f}@MiR2mQBRfz1 z_%?-5O1XOYHikbXPvh&9tLWX~Jo^uo`Dyu)l5~w2LzVK`>J$Cv-~920T0B!kq8B`Y zNsg6xM=d8(&rnX626w1`$~TJ9=J0OIn=o#TSE!%qenki?3B(A0o+gTvlSuh1>PhF9 zF_-)6!uvDE4!%zmwFH*(e_xjDhI+OTM?;&vP?;rP&%8ywR10QuJu>+AFM(#2a6AN= z@19PRK+3=5L3XJ9>#8rOh&|KPE7aC_<cZodmT$z(@=xKWOMZzuVBo(BAu%$9nsR1m zr}bP-C9+vsULLwXO^eZ9KZLx-%2X(Q>=QsUTm#0-|RGRiGC9xtGw`Fz9G_(zn5 zzha(m#9dbCiGO3cX^oIF`29kYjNfqfNNocS0k&}ddDi7eT+JcN%u%BQ#$IFakoNxJ zEsi36$~i(FB>lZATNmNmu5D4Rb$_~21io=7e3^gNE$cH6!$;xAN}~856kmwkCrRi? zMru`kK5|v3Qmij?V3}ztE%%vufk3$LfB!BGn1&9Uy2X-^)%<>)M8zNg+B?r7$#HTS z;pKNtw4-y%r5xFur^%>XKN?)brBpnPeM!#`cR66>@e_vHXKy{Z%f0=R%X|3Lj$$bA z>wBL3ieXc?<L{wTd2h}Y9__Q3n5SoL1IQWJhL6OTUb9!1tL)HC<Iuc+XB}V1Sc){K zy<6yqnZ|~F5SO9?lG?HzI)mLN6#@2><J?{D(`a&Qd=3afZvc^@b*YwHak$W5NR$4? zSw;Z<E@(F&l%vP6kqRQ~3BwYfO;zSIi7eRPKsBE7dhzzmL4urN!VaBxGz1>Y#vV0K zXx6<%{h&PdTP9;P*4^Mo=oBJPWXC<?(KBvU8s(ncZ^RVIqvSn!+RKVJe3Q-@x+Mxm zVo7c*&;<Rt?ETc3sKF~(2^gq-wA93~#}>7H`tr-Ns2nKYJJM;a=j?U%5+AQCRElHh z2?z*YtoYlQi#M~)Zr9VM{RT~59y_UP*f>)go<&}=X6|<ys-|0B65iU9%5O*G+~~NR zA@VGAI8@3G!wua2`Q8?zj)J{edtgeK5T7QkJqm9@Lmo0iR=NIQp31*PIUoNeIHCQm zO(=m60O)i5chfZ1|2Kk@{|(;IFmRof#ul;_P@zQ134={a2`Y4`lO+_Bm$#;~-+_hy z8!}j<C*E!5<s5<&nYiF~oz3qX5Z-h-wK#Fh<BmTuB8y<kp-9#=v++5L@VFQ{xxkzJ zfObNti9}FW$QgR&rKwLCg45<S-VKV3e*ESr!XEjeEg?KTy6@~0#c29Cw&zVBU;VfS z=7KW9f1Cj~1pLMgW3PdANct-Yx~(F6KFJbo*0)C7t5VTJ#3mL=@%XXIOu)0IDLPz& z<>fHtW@>ct5W@F+KiPBxp|nAuo~U^~&8MJQsH3>~46K||QrmABS-NU~Kv~;C4U#l& zFE?0@+=*L1aqsAA*f%9$=qOeB9;K*Kt=nEAK_m+S8O~iKTZNt>Y~=z__?y`7^2cG^ zH-&Wg6Er_2&8q(1Z1)_gyzGK6J)+@<eO*xwms>vJaD5sWBddKWV2nLlMf8Im-b`Rr z91)_C^v*=t@WFipu@<x8amx2p*ON#MwhFhaw<`2sYmX??T7Ooc9<D<l+qXt1xPQ3k zJGM|nxF=THkFbhJn>zwf4@`DDUEt-m(T5_#Y1cm2s-+o+sCF4C+9>sU!VbB-`b!}{ z;AL@W{$-=+{?q_g#?<smAkp{Jy9J5kdSVVJ1m}ANoh=EqbQVNnGDGUXwmuwv&`+xQ zym7m>>w}_vhI#+1)RuvUba;k4u~NduzIRk;_J_r#3NzbNL6bj9ol4E|RI~LIChI%S zt7vzhLq~;Ki5sV46;sA3S>3cOqIQzpCL}j*K}V*-^1?{psUVd-*`h-=o@3Fb7sMUh zcQi+l+)7DMsbI==H`Tmvy35p`)C5O=7EkXKo;&^c+0k|I`ZTF>7b$=ANi|7F?U$a@ z0G{|_3xU(GN*Rq^8x;;rJevQg36W2Y=py@}zH2Od&5yg|yv(V?O8wl(rZm~XB51Z{ zm(2hMRvO1B=7<Hhw1V|I5!iiP7urY<Cl2&3g<Re}B4{h0p%<sstxU42=ixxGjn9-l z0=%**-0vtlN2B}quPp4p%m1<nN+^NwsG_@7$NrI3{_>;w0MpHfX~w^Wt|dRMu?$*U z2}}9StPCVt@@561Qe=k#N67<<-SkBx6ODE@4-w<GaewpwG}*i})PDYFkW*BRVQ5%h zIet0!48QFEjoqmk82ZpUiKVi0^G<UB&zGLps-TOqFCxvM81o1EKO;yjw$PG@PXx;Q zf6EU4A1w0!-w5*m=!lYS9cMN1hdvx;`DG2@A5_oLtr}6r-ZV8WVkDsIlb1CyOw{)H zY1rKD_jt*h(E|EQ{zwI(1#lYnP>Tk53LprBsrxN6JxL{;Ls}IYK0a;)4*6ORb8b$$ zEm<Lm!wmWzPU%4;Wr*ro7C$2%<F;QY{lJC}t6Bv~W7^v@erZrla5|{<#1?$LE-Cx? zqt0nqluA*&UqH6Y?c1~tS{^m2#jR?FN31N*vN|4^toOO1;HmwrfXd0QUdB7LJfpfc z_v5yC0k8Btml7hGI6y&zOuPiOV($6cpD%@$x9PZ@OW$!Jt8@(F^=UIatO$3|Qg=0X zTBA7?N1Dtbq!>?zYP9ZV?{#I6T-VGtH4fV)`fLh`B!xsyj|^vGS1A3k*%-Gu{gUc1 zurRT65({>I2FRXM!YM5!#{NC&Sg*Q(v1g7e)(#5epsZTE$_YVPb4KMtIMiXOo6~W_ z4KD4OF?-4!Fsm1>tO_xt^e~~dqcymYYuFpfHIqesHQWg`TuV;p`6f&*S{15Z4y#mq zcn6)*0K<)2^TR<r@*}?(VM*bTvRef2>8<T=@FDw;b%bZZ;ke_G{pUp!OS*k7y;(gC zwP~()ip?n8;?}cpAFZQ)dMMMVN}jPab4FNm-*M54Q%yymhNyj9LWjK~lWJGU1>Zsg zb)p|?^-NLfhn%A{jtq+9C6QdaKP{TGvP>4duq^tlG`J*66;qfxj2RA_(hNB`HP|Y( zgc+mU73&W@BZA6!&g7X5tY;i#<X4Xif0cjbQ_tG6g-CETgNqH2wWHirxJ2($hujbj zy}XvXazqx|aeQQRX&dz2V=3X4<4xL8i?G&y$M6pwqGJiih{K38qr-@^;8mitXbl49 zZ_D-0h`L33k^A7>h`!n!h!5IkL=)7Slgd9)461;2NBZE+L3sBG7emMv!^*R2)59qG zy{voPMbT2%0G>;tr;FCm)jj_$)bpgxKHpcVcYyL`%q!n}599UXBc9{m@cPgOoqqJ= z{ES{PyM46+f1)=A8rG;K)Lip-(_<{QE(XqlIJdvKO*rJ??8gfH^ajE%Dc2XD1R^;2 z(qZLzmd~Y_1oPk3+y4n0*3r`1;eVCdQY{@V?627Ggcep-D_>gKY?7oAARyrI)_~Gx zDsHd|<IK~X90LlY3OwH*ME`bOc#l~ulz0B?>))e5^SY$y9^M_+5(*{-O>OUiD{E@J z|82bZx?lXt^S^kz;|X|sRP4h#nx2XlMtS3{+{T98J8cT%h_H?@{nm#b#+5S=K`d<x z47;*Xkoo26vfmkog#T+$3MKtgpE)nxVq(VyrDiMCCWDYBF`=PEy_3mOe57p8R_=#F zb)CAt2HUTKlL~XacQ%;Rab_$;aUmsDI&Hj0JGP8bB}9+0oH3_TmILasv5;fk>p!jd z*RyHm1@sn3B3Ukq0>|Y8Dfx<$YJS{V^@2uAy>~@ywC2kOi0VVAWr+OQrg7O(N(W`- z%pwdHpAG_+><67r#p@fLx%j9DeKqj6FD0GwgXL5IHs&48EBKUK5eenP8A1(j_q2U- zuqt!e&r*WIW>!>X?Bmo8I8L%7k6Zb$oQf!mDXYoZlNx;)8EKd%cU)TR1-g#);uPES z^hy2E_vzb*q0bj_y`lsJiNcLrY8A8~&M~vTr`Aqj(?ww088k&-z1&E>1%Pu>)$4@6 z&*yLz^KFhu4h_NmpjT04u)~Q9Iw4qe(RWY-{RFtQR!}rj2y^lRxjBnOiQHWr#BcT3 zE1Sq$*Jol;p->ns-1LL1duO+)%1tzfhz;l1;?qC>;n3O&PYsr?vK@C4$1TOY;JB8{ z<~Wbbny3dipNM$ul5EWNW(xg9XB67RzipJ(W2MInm+M}mN(5b|3J4;J+y?}SiJZQ( z87{d$dv?(_XcU!Cxx+Yul-q`YYGvj`ujNG<9D<2XrzML8yQV%xyJ|kTB@*A={mg^j z&<+`d7q4Kt_Uexw<#s-Fce-l|TIkuNO%<+nwh7ZLJq3qiwh<?J4DtgxQ_SCqNItuf z$SZFWk*%;eGG~J!<wu<%*2h$HO(h8sJ4{;&#mdpto<`!O4)5p;jpkY@XsFmWef};Y zN#k3$YFgtZE-jC{ylyeaNm&T1!Jy)*LS%uA-pCP)l>34Ikj-jFknZtpbIpD~z_vaP zHC@A0ewm`qV_JWVEtyhh>s<6k)q9^jsZ>EC*dlGd!<nLNOZ}_wB4YdAg1H4|9Al9X zF?LfLB})R{D^uCoF}nuNDJ$GW(zqK)P_En)H77QM`(o;VeJ4Gu$$;u#D=jnT+QNKi zPUZFKU)*kC9tpjo^!w*!>L0YhjITvO!PSb@gBaWU>|-@mp^?I%#;qUhWrqlc+AEoX zc^q0{gGzVxT4aWIXL?P_xAU^292^9eN<CXAA^_Y|CQHR@3bnd#n*v%@eNqqKUE6r5 z(PGQ+`1`*T`u}CFELC(A<i%gGY|_VjPzEV4Kios9wxlX$I@1VEDrN3G=tN2~>Xg3i z`&$UU0;x@rGVYm;e+sJGcrbCh)x<NmGFVzJ6=U0J8&0^D;`E2MGZngEpm^pOt#=YU zA{Y+ScGL5oZ|S8dhfZGBh!m{tl|TycX~IOiTkTcgVP9frJ(@j;as1vp@JHVv`!ow? z(7mY`qr!IFrS>7x2=(BKKM}N9xt?+mb^H^$!Y>rh<zpnU<OfHza--csuC3fNPA*E& zgR1Vj7Ncut+<JFQC<fPDh_&jR;{*#YE!|R$F2=^sXS+@Kf|V!5xPos@%Uwv)Va+4= zq^rIr6&@AWQK3~2=N)bJ0JC(jCIBvztS}n*%@inz>-d7@{!@F$tiO<|P=+oZg{Lkq z(DCQ08&USnk}5XlN}?0B51bz5w%|!R-L&o=Zu5KGlwzeC7J}<!bMM00At_j-SF}eb zgWNr6Rnjv)IRrOpbNC8c3>9<BOT1ImGaUga8$ckQ)I`h(?Vq2<^gv7w2F~zCNI+Ni z^&3A|mYm%{Xi(@1hp^}(!l~O!ACc;+6Kh;4h-y<I%r*rya6y<O#vxq$<Q%jIuki(< z1$9<#DL4Cd`V00N8Km#s{Fmafuhbc5?XzA0Q2)D{@wtHmIGDS!TDllJn7LV*Te#Vq zvRb;?v)Wm^x|uteySTDyIGGu{ng1U|;{TRDmTGP)6Ki0<vviEst<ta0*g*W2T5FzK zL0u5H6*JQg6JItuN1elEL~Tr84>S%N8=Fx#^5vQKNPaf)0oG?El(G48sN^duyd064 z{5U^PN<}=48XkL^@bLFJ%=13n5a|AR+oKPtb~5oKN-sJZ*r)S~Dv-e3z}SldULd+^ zWNhP0J1KJhA^mb8Bo-dxK^3MF6B+eTycdhaPu+<Yk{Ka3P*R~NJ)Di{CgYhEVvWFo z%!3vBq6tcy9hC0f7Ax8#P-3IINd>JdWYi2{`6LSj=1(yO{?iHjh0vaTjK<9?vAV+) zyi%pV;{F(%rP=oj!N9Ic<*MzF)`ir_IKzr-=T&+d-jmsEeA2bggCs1DZMK=15#JIX z1(^jHlI)NO>%wHtC#a@lbdcx3w5mRn>Y~_Z2&8l0x$7+s1p^o9{8DG1+4>P31~{IY zzMLq}6_qlHY@t4|)DmXHM%u<%cXaKi%m~tTNFg+09+;IRCQgU*n3*LeUr}5m|0#+# zAySeZZVipn$!l&km=m15GsBkTFv##S#!X0e(mV2@-i?`R3+`aYb=K+?Qt71LZK8X} z4vR52R=~$>tzaDXG?+^@9@Y*WD45D&_{dQ!#s10oT?o%;Iae>pCEb$bI;na4Wz8~z zXE4veaNh##bSz>mr)`S=u7y|MBxi4(`j)P_p}5L}(m^ThZVGZ@bEg|u3HxiNIj+p6 zFVGaU_d{xw?eqlh>ncssghi7;h>ovxF$~(_{1~wqORXZu?HNf~J5tID3vY+NaI6J( zt7}&QGfvWSr{-i~cdFsn+vS)p&f-dXUunqLAA8__w58QtR=gN)g9zVwD-eZyluN6h zCxo@CVr6EDwCk^GS2u<lju?`Pg<E35uCJLZpG{^1=Nz3cvOJ8z_&?;`4=pBDJVL8G zBn#fn9cm7JD_^H8;r499;#DB=1@2cgQP1``%abKqbT_44#apZ{sXgzIzfgHXu-?zE zr?gG>k+e;*PP{K9y{;N7N}MwVnA7*LXXFfARw-6rQ-!5}R(YAp3tn@_om*j^Q4?13 z2x!{lZemVe*}I)_QvC?BDiKr0w6A^mQM&SPp7|<gMfyRBwMa<P_7AC;G&Zd>B8HpV z$RYgXE@BwM*M0+~3W~2o{?HFcU_+`VXR>?@zd+V2obAO&STuz00kp@&O9a23+K}#T zv{zYt@u0FgB;$t3W7H?4e6=^K89w<h_P2S(9>nV{U!rn1`j}3)|47o0h-%oQ<MoU0 zQZ8rT-Y0L$M|i@$ZLf*j6ovcg2oKVRFhpr*9(h6hr{}aXX<%Oe>^T`fJqiAwDVYC* zOGW>8!0P{MJx~9@`4A7>@pdt;pLOPv$kGlsFx#Cbvo+{Dv1*qMC)tgrF;NV2mt`h5 zC86e@hn$<~q1%urh*nUfP=`3kS<zr{|7j6LgodX;K%hXdE=eTa`q&sdH=NF;PIeUD zyg0o1AZTiNIT#=N1hCeQpPojO2|ZSnS<4SZuRYLzq_=%AzW-x-v-!|EKL2sv-Q!QS z7<c<gea}9Az`fi=d|%({MtN-s{y@FlM0l?a{5+|J{P_G1?)4$)L-_In;^S@Wga5G` z;@$XC1n~Z6YZLAruIB^&kqq{OYRez{H9qje`SK6)J1zKw`tg$@KfC1*`#Kr)!FTzF z{W=-^0dv_6-}M0gP`vDh_LF?aee6bgzX-UP-1=a7G=li3Uh~NM@Gkq{`uMlyAN<sf z_RiDx0r%cgK_Wu^7!Uq1z3d);6S?|GQQe@}ngoCT$X}_Y8}Px}^FjLME$YXXbo&ce z=_~AOH_XSy(Y^2G2kEPS!Kz5mhw|13$GRWjy*uEe*6oGo@`L2{qhQrP=)-91gXdAC zr2O;gZ1{xu{P<q*!0VpNz-_obK(KRX#@bfc0E#hoh9|w5G{z$As}U>}=va$jAVsw| zMz!XQdJFoMYvhPMktG?Nfh^5OK>`@Wp7jW0OC?2xHYLQL?ST(cffz&vqC%R|;KK#0 zAPh1AtH2p3gT%mtAU3oZ32+A5AS4hss2)CM0K^1gN{>GZ)<zvf1frIzYMC73&%5ai z#Plhg!R|V>6N{x&9lKx~*zg+4fwdL8e}m?xSyi<rW4Q)(feV4tqAmY=mH^UJ>)e6$ z7%>*@_7J;PK;0gz;_~l6Zk79SkR8M>KBPU&t~M|ZYS$B}L=KJw*+K161I0mZ0n@{= zEPZA2Ja>+0>xw(lwHUCwW)5~dl%QLcOvavw>rQ&<n5+fmU{^$ZC{TZo47v}x&qY8z zR7@`DloE{o`&Iqqe)i~GEoI*gI8o5V(Zd_<H%YU_2lB}xoq*XDe11d5Kb*aQNqN)( z3V%hz3v$MI^UGUtV#81W){`FOOn{$`wSfcj37o0ryd&L>2I<2L&V%%!27iNm5Mo%> zcDs6G|Hahm4&Du-q&XKmV;MMD3^Ie(MiO_w&+c=Z6cc4Q3oIhV2plyK#Ryz2`cvT> zLG7{t&uKcnTb*m2$++y$@E@ooKi}ma$OkIM7)V-RbB}5M0`^3Y2?u-P$9x5QV#f@D zJ&9vz!Je2g<zP?37)!7xZp<OrlQaeo?1>TMh)Lpoe2vLrSeE9C6yq3tMbiGpf?peO z#emP58M_GfB#GexKMLbJy6nOY>a9H%UQrR#(x=Ce%{p}{zFlJh{YI|vmj98|<eR)A z$9Nn+9D0iBGd<yfUXxa?Nb$Ri4vk!Qc?KO34m~7CU%q5n_<#uf+1^KDy9xZuJN$vW z`6>6Tz0W-OWG=f@pW6u#Au!kPCSZTI7A+&+4+ZpymOyDi$*0XR(=>DY5#n6KYL44L zgyq=-ttslWJc>xb*b7?^D8-=?W-LsSQ-QBX0FS(8y{3PVV$@?UNuJ_!BP^ML_Q9wC zZkQ!?5FDl_Vcjt}2+R;LP7W3WTR;kAI4}l|LuyL3GzN}CaN{irg2J7+^O@^zO)KHt znxR+6)7U>XA^TuW^3>CBAZ>fDIt?%?)OTLXuXR*>0#Wl$%~|s^rE&E?1{VN&qj%ZM z{2-J^+Z+@-At6V=f=st!j=kA9Sodh#ilH4xJKK3K^Xo7!q%B-?WaGFUQXG~**vaz9 zo!%1vM4b5$gg{;+*3mX}amaby5?12FGWUd%3B@3P>wC(F^lnAn0rn!oPoxZ#pG4Yd zzdP`>@t20d%}~*Re^9tExKImdrzt*)-c>M9K`4M|D0u)8baUUg5*2HKz%xj0=u>r2 zIm8Qg-E3ek#HoV1&?ythQtiMsz?X2T4Ll*yWt<Q3U3lIbqHYrMg}4q0A)H3wMR3wP zz+mjg&?Ft*R9`NAl<7NP2V|)53uGN5!gll=h89FeR#Gj*cjh`)h!^&{T0lo!)DuJ9 zzrc0CsWgbk`8!8P=%H`ox^B^a{g*Gg!t9($&a`#45FJQM>)>;U@2qt%0cQ~3Me1sy zUSR8tQv^>T2Jcl9Um_?-q3_Y_!UKiGW#e~Z%2i3B?s@BI1B4JxKh@<I`KNB<v*5hK zANi%DuHd}GQ<!^7gD!;AFCbQ^7u-5Ws29|`L65*ckf$1;O{&|)OA{aDQ+K%^P)iS2 z1TdK1SW9RDe_&3-CFkM;-ZBQC?MJS$Kq68E!y6Fy9H0yKd)K_hzkXuJ-6b6l0dG<K z=Zj!JsM8j(AKa;LR&Y1mJsilt1mXp&PK4tgVp1TE;RWfvp&Rmr=<Pjs<Q=ZgAMypS z&R;E-4DtnjX$U|VfSLf85U(B>KlK3dc!h@yfW4iB-U8qT0O$a8X5ad6zEk*mdZCd6 zzQve}N5Yf>AtJ-rQL&6M4QSNF`3z728IVAnEztmLz$`=%00+PUK<$kgGz`cDz;RUU zd8Ml^e|{PPRTVkQ$Oq_wu6$#`5=ZR$EJ)w}QFI&kiks1ChrEW#p?`7}doTk^0i%Gl zT~RP1@ps-7pcbV1>;*$W9{?4OH)tjvnisJE7Q`jWEK1UI0<i%238Ve>5e0bx$_`-F zuUmisq7vm0MFLOH9ccDi?@pm+e}nI}K>ftFU^VyF1BRTJMry>L;D)GroFKuGw{@{j zN+#&+g;4x_Zh?yF4gsV&U#F1J%QllMAJ2#>r?iTmwy;OIL=mnq#~ppX6%o``OPUVC zN#0lk@{5{gBXc+a6VSX!TXq4i0AUm-mOvF(5m8AWSU~CnlypcQE8vj{d<bBHZjAtZ zy2hI@++YUCL$E-#5^o^}umbdTf_z-%A}t8X0Qx9SC=<?@EyUjomr;yZrkO<d-|$-V z5ZfTOqyw@64zR7EgszO?>rO<$s}Sc~Pc&<?>9r7RQr#X<YZBcLkZW*t;SLvYkNj_b zPy_^F1gHB?$y3df`Os)H`xJ8C8Rw*hqs4AsF)Z<}o`5`nC*~G?KsiKSp@aWI(BYQX zPCA~Ik0JCU4Oo7Tjn(xL*C#t*6XKCYs1x#%;hm6|X0zDHtY*>5(`d+9GBq6E5#U3% zrP%%kVX#pY<S%3X3coc3?M1Xj3lM?vgxj+07r1aaoy%AI`Wn>73bFjE1?Yx-L;*Wi zcKgF!3WG1&SRwrZk5t>Q2wRf?GIDrJo>v(EX=rhp4@U4N;2rf6Ex;f0bu`GoFC0MT z{J7*#Vo)=LG=cuOG&dE(?f!Fx7rm0>20R9bMf-|9t2_yt5t9wt`5<P-nB6G@B7JMf z2nFE=5|Ede0Oi3<r3zSJCaNh(AZ;LDrl{4=S~fJ%zVRH$19c!8v@2o8Y@!l}%rTBz zrdWC~I0xaN2c#Lq7Y)z=O_Xi&fhJ&FNi)I&_{h9x`Uy5{StO-EEJZ80!EGUa=|OGC zWBV!QFmaV$bR1eiIw%JWbG-+~f*-m!PQZA;jSMgzvM~%$t=PEmv$*32aB-?n_lNe- z80@URqXVEZ@o>|D8^ejpAggWJgmipNb8g6jXtI0JuDnAL<RG1D;!qfF3SL7zsGl<( zV!QDyI)er(OTsuhK;2MtB9Ec-2#hHKJ1U@w#vJDEEYNto5%9~zmCEc^dtw5X;ViJn z@H5^(d5{MHo?VNeB)Fb6vGH|;0~TQT(Y-oQ8R|yO&6_{NGQf*wJr9P)+Tn&6D1vg( z2FimwumlT|jUmCm>HvpjcvvNimpcE}56H0sZf>Ce;E&0JJF&+`GragFKZ3nr#JT}A z){ZyPAVZjgd61!m>|)T<mmRd6vmj=O8-C85vDzRnp|=gdK`dwk`e3{tttG&VF{7jM z=V}F8ORyJQhDXp77w`h|#sPQ%abu{Cb>Qo^40Z5!`{EAl7V`@0@d1qefnNEV4tIQw zo`I&eL$&pSkP#pBgfAq7dVmEImW5XieBxw#=TP5m1POnAy%nVRBg%C1nQ~>vo|4SF z?EIqZx=?5c&JH|!d_wb#U~arYU9boLKwV-8n{YRZKz~5j5ZEVL`zD+YevC|ICcejq zNP#-E)A@!3=ns3)k#gzU{t7wv>DWk`VOEvhT{h|ner3++hPv^^UOKp_4E_*J7YTZz zeSYIG5H1)sl52tlt9%e;_`}_hjlGuduiCsLnMXc35)PuN<YkemWRmTM+6D-tPD(6n zKY@M0Z%6U2`QrpT&U5>lJ2WGraV@w`J-kXc@T`)2ebGm8W&EtLhLAaB{P}>+n43tt zZ<j7YVl>m{?3XSRXaThN`Mr<ogJ@<xSv8SiR&%5ku^~Io0yVaS#@klB&LK7XTH_l( zZM#;q(|_4Y#co&pajvWFBeg<vmqb^c!T*OW#T^dYdwUA-jobjHIm?*NDKQ-pz)N*t z{`u}vRO>3HT;wQ5O{~16t>q(@OhRJkmZy147%zn|v*!5K-QI8h?^<p>gtr)3QN_;? z?e4xf8ckVDs*Ebzz`<k*0dXW)tnI&$3`C=M#ssVG_7>k=V0R@)R_@C*`^D}4d|gDH zh$B>5@{J%oX(YOgbMiP@Ih~Fg*jRS(u&<YRtEb!1I<QI>-w4qPhYysRve%<d1Luti z)IfBUGvdag@S+RF_`~0-EYz<`OQ|VKo*5vF@kaQ+wR5w2*TgM>I5C=cku+z=zsXb2 z(YyX5(a}rzf~0{HHRyzY$6wM_%u35)W@d*dB_Y(n?xYs+FG*s>Vm9J=SE)Oso(oGg z$ypy(JQ5#gE4?@rxidE*s5tg0tj-MU2l?2N=wwh_&sm0}7_Zzb4iSD)(#r~Fp%P*4 zYqBYc>FuW?<SUjEfusfe8a15tU`8?P^g0FX&w;jmwy~|=<pPgGr^p(T1UXJsVkKl| zurraW)cvTy82K~YY1buavmJjS(_P^Q{g?Cirji0vF&dSVz46|Ar7|<uHJ^9GR9d8) zlEp&{{A#DjL${1VRkvT{znwWRxBE?q=W`1o%<iI2gQX&`VDv8K%tmNmQSPM7AI|H% z`*NwLTokaS6p#!}RIq~(^%`i|5Es@hX~p~Lboin$zx-bSPe8E0TQ%VgHKflb!Ade! zGIS&q?OD*47zjsuh&y}mF=sm{ktCBuWvU=-fv+=04Kh0i!hK;Rks1}-8C@%jV&Qmw z)b1O?NqQ{)A?wc?tMDdSFi{f^pNjpG-xu12v#<vnX~d!tR1P%pvG?#f9IuH)uyAw0 zj)W57STtiMH-)Irc{tv@GwRR*E-H4RtQ5%#kvbXbx5p65HGO@tc0?mFh1pF+8(K@s z4Ef^ZP&i_DwYZZ2oMENXW9j0fxu0qeMQD!4`mq%&8arcs3r=1b>g-+A*B6RJmLSWZ z!s>F%SP<$DFK|Y_WgymX50K1~@@sIYWgy&%gqv|Y5^?VR{pz=PM`j*uXRjUV$~nZU zo$C-q&M5qqvY;OkyRy&6l-?QWiw$g2s6<<jqr!A;PWEhxP<%USuLR1|p`;+$873oP zk$1P)yIX>tiB!zp52cMfq68CZvB7Xxy6)bzsiAI_oI=sT+@dpCF5*s1w?&W}9D8JD zhD~tT$O(4DDjMuGJ#*OjR2}6!EQ<=-kL-&_&^Lw(qD=Ef%apDH2z_Bz5=YIlYD5j= z75S9=$Z_Y+rff1x7^PQ7p`muaO2|dWlCfKop-VEkX$+po$XS&&XI7S7K0eaY?Lf*{ zJ$~v&W?nX~i83<Z%JES<Lf=r{!^cl>*8I!TRZo`w%-+M}9Q+goyq|-gk@JZC8PQDB zg9=!^zayKikTqG9;$gXTVb5Sx>A{`S&p}RB{tgw?v_A!np;R+PWp36>(Uto-8W}kY zq`XCbk(xw$%+ncL&UldV3g-Vl^IgH%UdCrIeh@8I@tMpxjPZjRuVj1{^KWBDDdSa) z&t`lMGj3tV?TpW5tcdY>i~%!VX8aJfXvO$^#yS|xVSE8&A27a<@kNX;W_$_bOBsY1 ztY>@~11tdvDA2X?R#GK>_U3RrjMUXcqp^f*X-!WP?W92#NUggL+Z$017Fr^)0TlTe zE>8+_i-SRWcwNKVb*Q1^cA}*>7Paf_?$BUF`X)PjvC|w|i+7;2xZQa;s49mZbMK_z zo{tH+y)F-x@fEsOh}ExcX-igKf`Hmsv^zY|mjv4T6FL}=95`+yh$t`YR5dr*@i=;| z$Ss|rXr~?Vo=dZ2#6Id7u<fYRM`-ePIk%Pyf7C|8<U1@FyAcvIB>>VdD>V|KfgU?S z&M}%)dG;={D3fHU=*^ngKwl_PzpK-hbCL$QD;7gbY|;K`$GVvGw0WYREH7oam!%G* z3tpAg(9GidIVI}EN~#^ob<VRFk<)>0FEub$heAPm8htTx0PRpD(Thegx;BJt*t`0} z14EuYDcju`Q@&BSCyKq;MT903Q#&Gyua~>usl&3!mbs%DR*WCYcs1jzn7NXf$1{!s z<8a20VEjnNjTAnJk<UCXK0wSQAB?8~UIxaGLKi3!>g(tV%}imynTKYtI=9-GeQfrE zaN5>Y<?fGhs&Fd3G_7=+!ZVj=g)T!=qbkds9cNT8ONmQ$?Zo|(D*LG_Y1|A2BU61p zb7v)aNml6Mtk6YSp$k!Sjy7^RQ)sYwTWoNk(_RxM2dp?X(mS69M)=P1osG&=@EX2a z@LFCccs)lYSRwdYzE1E4zMi~g(lvr_;Efc;h{gNtM7Wdu-T@npX7Yf2J7Ni}frUCd z$)S=Sw%tup9E$pqgvBwAqh6%&m+O2{2s-7l*N&h#DR3YADd34EW5XyvN_jK_=+>7A z?F!=rr5`V*#_7q8L7DX6gpqt5GBhXXXJ<Ik+cgl{iJ9rK%kGcG!wDxbft1F(Npj`) z^h=8S<4*X)#9Oy)hW9F-Bj_#}(y{O{87(#XhE%A?>I%oP_%8KiM(ofITiq8Z6faD~ zlTTDyYEqFxO^M+YWIUTBh5KWJohX5Q6l#&Cg*4hw1Y536*Gm$ccMJ}BK{boQBHmNM zfZZPo4|vZ-{f>O`Akb%b_J*S2PRtq_?4;^dz(j;7yx~PcSVV;_gul&q0a{^#H}Q>F zL8V<8sZFv_AX7f*+LX!_XzxY4g0aCwuzMiZ7sQDk>>P;g?5beAS@0HqwBW70P4IRq z(y9zqMw*6#DxQY9+k5S}9gK#1dP4DFPb?7}iUm8+Ai~@W1mDCr3%-RPBluRzEh-mR zMq0d{npnBQ5vB1U(V&JMr^B%dd0Ay-wKvGqDp$y`d=PD~crX?X$^dcDVaf`k^f<wf z=O+k$B4sbE?2?q$xU-~OHZ>8S7o-5Ps<DM84(8oPIiRwmGO|I=0A9IbtsNQ&4)$Z> zNs5}~)R*qOm{hr<7R3~{c5onwwoI%u97;&qL#pSoo6rvowk6~eO&Qib*xw%;NXY(0 zZL-52K;#auPg~vDJp(%>mcYT87wkgT8j^I%b&z03Eb4Snr=qtLJ4l9I52#$xY9|H< zqQOK=*3cX4vx8(ERp{D*nTd`hQR#wrQDLSeLdlP*l`FQy2DT#&!M>s3&d`vXF%j#p zAXMzxHYHz*D_3ld4a$L!Zx2TzM4V0K718KX_u2zCT8M~Rip&!0>515?)8aUeSlDEQ zhPETig$C?ktXrjZgip;zw<GWr-Hdk&-otwt4-0-W-;VBx;1S*@c+__h)|RwUY6b>E zLyc1YX@bXiqu~7{YA0n*ht-4ONEZo&LgY0HT2==uLo+KQf}g?%=n@w^!PimGhtL+- z9<N5(Q`vzm6BK-q67nloU<d5*T_N~Rs$zQOin@U?j&(fPh~-7&c15s?db&0=5U*S@ zTe5Y#9qJ=a3s$X<g`>exP%;maB@rqsSJdFl4BN;C-N*!yaJMW3$A0Y~4r8z`rVz2N zP0>iKb9<1ceNzbO>kCDLE!gl_1nENWgo=`)o_e%%AQbP#k`@IkmsCciEh@`7Fs&T) z3wI0!+j?UORK>CsOs^fVk=xZ+p#_>kaE0V`v|xiYnQEI`g0v<i;gi$Kt?dnkqw&yA znN*RMv=%9eqAczSw(YcSloc+{S`<q-Oi1$*ugajZmQ-g_1EWeV^oF}^lxc{&IN3gh zRhm{?Ys*@XJR<v0#BFGAs@a&Nd?vOy7LD4S2~|7Qy(~DQ_Nm!AE*f?lfYq+S=}g3+ zAd3<)6`7;f)^DRAi3E{7I>J$}_BK@Tp{``*ix!ToJ(%8yIO|X~1RFzx(av6n0_3&T zgD6mN=))bV7t?#DJbj2_eI21huu1g~%B4;H^N>%aKnkH$AYztQM%LSjeiTBofP=Ay zff!aCO%l5}3$f{~UKi^lS(8TVq;zf$qlR(#4~Zl>MU>Ed=#0f8!G4;JIP-S#A;C}O zr;#@J6n5Qs)}94F-FKPbXVB$Lx|~IqvwfGzc|KRxFZek$ohJs{W7}~SOYZAKWzZWL zk~H}U!1$*HKbN0JQvj7kkVG@}42}#kZXD4Vl_v$tX9x|2XD}Q+gq9|PSeiXlLGpyE zM2z!QK`VmxF0_`?Mv62iVXdg&)sJmUcD3LaP_6*xO6~I5#6&WK)LB><>9SA<lCJVC zz!8+=;v+P{KTD<HJdX#v(CQhI`0Z%s1=~<@p&XM^?sNP?r`(1pTAR@X^+hmYM{K3% zl+5l6k;<5&s(037x`Jz4+GN#p&mf{NqUx~W2Rjl`;!0UaQf|#)1jU!5GpQG+I)ypx zu_Qyz%u>m1Xn=P1%H;L24ktO-O<u)-tXuHUQ@!~PL#CCPMF`AQ7%k}F5$j3Wr^Iqf zCnERS&O}f|pvf5T9+KE-`*pjh-L~E3NOz}WMxR-XR|<YHzeMm$IWp(v{0hduAo!L3 zOQo%mLOSD11^*)Hq5{cX&d8`4l~kvw*Bxz&BY73STJUS=a;>tQ98&-(LR9oC2v8xd zB3CU6{w4lpUDMGr%}0iIES@G}VoXKN{1twk;9up}liIw2rsIu*-=qww5LqqJ?F#Q^ zejOPLBoys|J~X}*_!hoi@LN42b_1CfDrGlK#6n_>I#fcv4)ivH7E{q17Sy4Eho-Vh zxSi;@g9<7kE|vu)P?|c`-%0r<P-$DRpO7;f?HzVRrG1TPxQpMdYk9#cYR5fPMT$`x zR7M3_!JEVO&Y+xIs3UgRLDx6I&b`;OhSr41;*|EP;P>%8g5U4M!WW|jFhF8rr=q~I zXwl|F%}QRB;x(KyL5YX#OM}_jYM(L~9zZHmIJJT%|1zmyP|2(HHfbFyK!}WIvYkUt zEftw9S||NN@(Rd+BrmahFoJB<Eu&}Xe_)Hg&cDGpcE~V)fbrRa@8$a#pCkB#{2}4H zhCiH5?q*pBl+sPzqF7CYBA&JN2#wjJ{4rgdGydH=f<Mk5!l5GZ$ef~R(8(f*4)vkv z^ngWDa#G(_2bI`-f<MXl5rRL(pBDTX{wzttWt7mupObns-4JyNa4qa2uMdYDo&fA} zObad&zBh=Co>#1lXd6+U2U}#^(nVTKJ&s9RdeJIFldUrn3io-H9I0!wD_1l}(ROfI zBhia`SsKhyNzb})f=s>ja*s~siewp50@I{azMWg-{EP~fO_);Qfz)k7m{Bnx)`q@x zJQ19^c>cnL3#BoZ%okEQhf*19J{csk28U8_6f)Yim3TW!8gM60%^+HD!47ngdWreN zs&%SI(f%NHPgRn!fVC%!R9!!xMrs+U$(_MS3~{<*$&rd6`B-CB<%)*xB*nd<cyt!k zXgfWI^N(5_j!I*4@lx_h2he4txve@<l8GcnV)4X$YQi$orP1JGG(uwi5%Ri*q+uc* zJ!+V$>qt2?O@om{SYj#Uk-aFVg)^=)yVs#}rMFE}m<C(YF<^JvByW^+hI1$w>Z4NT z3;qIs5&L8GRdvC?Nt!~6fZE<z4DH_*XMaMeqw1vWQE_RU`Y$Oln?$eaQ_eNcvyDWo zM3);rDx}_!^Z8{ZewRrHnwAed$%M9?44KlzavT%YLg`0%g3KFf+FgT`ZHxsKZ(<j0 zkH&VQGx#lX2EWbtcgPw1uHdgwMD11nJ;7fiA#0_`OC(GROTk|!<x@b`eLUewA30yY z&)<|Ob!7jzQsM{vEt>0{?Z_vnD7q;Rf`7<=#Q2W|f15uk_)qv_g8!7igMxT<ES5lB z6Y6iW6TPvnc#*+>7U1s|`SlY6{O5xIg8!27_XPhH|25;k5&XCOcY?pqe~$_&>Acp) zA`x3gegyvm|D)i4;(wN!7$tR|jTA8cf#83k*8Y`J&~>ftwc`ow%>*iH!T&~3QMsbg z?&-ma6DQc;31*V?jU^=D9|W*a%5-=4qOh&TKAJK1RzJc2>APF-fAN0{{vrQJ@Q*Ex z@wvj%Np?>gefy!X@~nJe`7FP%42ua1unm?;{XQ{eu=>d=h{v)0K@!U7R0@j|KLyAx zNHt2O3*>PVT3gs{IIFs_Gs01&yQt%qsF=xMzw^)%i^$A}q+}kz+A*8de@b$8+mQ&0 zl~{K-B1<cDP6~b}i3b@ti}l9|Ag4jZSqiEUmPHg7lbNw{(V}2|A3C>ov~wt(WY2V_ zSX`_-NXDcj*_QJ_PRl9Tn&{|qVF?u$vdNmEEr8|OuqjrHxCJWe<GK~nN*IYOLvn~+ zsIaAr8rm6EQGgMIQ%*{*$f7gdn6j%g=eY%-;2TUNV$qa(W%s2H9J7jq6|jl}ys^lz zN&;4?uqIe#!kTDJLY`0GKY+e`t~foh5V>>KWU>`1(prqhnb#190i@TS<i(cO`lg0W zO%++<Z4?A|TUMUQnbkpWC!VxsJrjUg<tVnS1DG`h#g;Xd@k7Y*drVjd(hQor9}AP{ z_l$F!5E+k4WNeNy2PMpraMm=E?*&OqJVfS_D^gr*$(l~Yp>S;88AW~Bf&O7gSV3OL zEL0I2tQly9_1VHYh$i$*@)9RxVHOpS8p%VXI;A9Dws4_zycSn>Qiu^XC2HzWH>P)? zU+5roO3jg?aR<U^1vBelVO3hQgjHqD7S<eVF0<wd>kw<c<7=cen(_JMQjQq1q{A(& z1=d1lEfUsZYWVaqHZ+aZuEk@uYjMtY(a?<`bc<ShDWS%+JL@Vz>50iWOB*q^GF`C9 zP&74cjuU%{(#_-mISV#!-a;obiyi}tw+e@C$a4#>4n=6$Kh?^nri746bh*1@u}FpE zjn%1TAGgez<m(KgWbLyng3|O;l!fDH>vY?$$g|v<<Ql~!$4cx*X%Lm+v5vv6uAyu~ z#$APRLfh6-a#HguLv-m(=R<dWs={T7P^8;yP$5BTA`uTznkA>x#9C|*Y6#a7nwqK? zl#ztinlj6>1+_a=GhN}4T9LD6Rv|k$6PhuroPp0M!37KdvAzqaq3KamVJ)+kQ|ME2 zVpohfu{X4Xj8R(hs>rDn`ogxWOx-!Mf+Xsc)RM@A4@HN(WgY8K6<t6bUV|DPxuBL- z$R=m2qEoIkOh^&FZj1-ZS&5FORc);j)?wD+!aBk_QdmdPrN&y#_%dPDq6qb!Wz{)` z677{hE61uQE9q2gjf@ec_K|Dnx(jeYX9W)HT5GLyG<T~Vw-c@lE`xU|_5vo!uD88F zLann}nXW364Rn$v`%x@E>D~*gf%>vEt%7c>qqjo3Oxe_C7M<ys+^&c1(mf-)O^_0L zK=HX=SR1TH3MW2>`nD-xZ7lNV9Urioh1Eg}(^J!V%<VsyG0GfSgzyw@lirugCOt)B zv7lOZO(6#7L|=syPfGEXO;0JwL3I_9vRYj|ls+nwFu7jkhOL~5Edw!*E)1rTBw00u z7@T~<I+~>ZXy&l9;Zs<xw5DHUwPo0K$qwoyYd+L7NS%~kGctU(PUuMK1YxyXo1{$7 zD4O0qOJyi!fXJi~%y@8mtqy!-)slBq8Ob$RDL<UWAGHE(lD=A|f&wzK*Jy{j>;al> zn@Rm|v5raaj8K1nEF2}Ci`qLWs?a4FZmY14wT=_k@zmD=8QoJ$`A$8ljSdkU$xpHz z+2b-K*hnk>PL>i+*tI5??yFMD*+D@&wSXImgq<~LJ8H`Ug>{1RGO!RC-D`692TaXc zghxk_QhT&pLGG^-)``>yC248_sUqPbmz}xfbabAHKc|d9lS+aDB<`eeR^JJ`z-ywi zdq=cR#eY!J_Q!VG0~E@WyDYHklSuIEXw!tO4&i&1+%7KVkStp8Q>;#BeII#C&eX0L zb`iyA>|J4L8taSEYub<Z9cL~gq1+`b+v*lpkJXDsED^lL3hUZ}k(4|2&WdLno^&H? zM2-}$@H)401u1gynrNNO|1AUm$kLu}b(l^LsiOjAx75mQj>3PO|9BGUsd?lsle8QM zk86XM^vYXRAY7W&+bI@PC_{bWsArN#P}$*V^rgEi=`D7oXg0@0CVRF;l6_o$7FJZQ zg*!HuM5myXGy}+RqQ#`X*nsWSL7jS7<%+d2s-Q9yr~M7{Q`<Tp8&B&%v0x8sC7CmY z#CSzIkB6f>!U;Py9({l$GPEm=O4k)(l`9sgZi!j_&eTy|h|`ReCReksPwtSync74a ztn4RM0oK&y_Lbas(SqK+M4pxvxi;pAD7hF&>j$*mqOx+un%F>RI<m(KZnwKOa7sgz z3i76zV#)oQLyO6jjgV;+$>^XJ)Geo21B@>eR-8W|tb{eltR2GI$=?*#E^A0wr*hQn zr_p35-gCqv5oHol?mKBjw0e`xQd)Qr^-M%EiQ>(aS~1%~xszu^iX5=XN%;|0(nGy8 zmtk6_v$JbKxU8BYzok5GL&j?L-kV#PX3&skakpwAL~V2lxx0m&()X*!mr(OE6p1@@ z^Tw__*(zauD!2cbln%l=ov&kjv9Qjt&J@;JWbB@8og=JITjvVvJg!_b<!-o<$rkG~ zGRBF#j~-BP*}~MPMGGAvrk;d#KHn&;3n<L+S(-CwGo?l}<@EX-359eElvV)j3Wrsk zt-5LIia@Hlv_BM^d!ZNgLi-C1Ya9TjrwRy`V%(u8(=?R1Glg^}8fy+;dEOwh%?8`< zCzoj`=|GbAh&5iMRv5AL&E6Z2D8O3Ld8XBbcw#7GD+$yho0Aelb38{Z<ny^#p0e%( zmMhX;H;~kmo#6TqvV&8%6QO@Etc$Hn<mzu0Q(}Y{LQPtl+N8=%`g7$gpnNF?<fYbS z!nz#U%eq2XU$Cwe)))PkGQLDuSMi4!M~~`i>l(Ewi5700f-+UVu&za;!TJ(K&kt0t zzlvgX3=XBYU07fColR>I59`{pPxJ~5v%Vs%>#VOb>w00`VBILJo2;A3%33OS%h+8m z$KFEJ1PGkAb<4Vy%+TG|ZOpn|Sa(=g2CO^LrTJRGx=UDhTlWa-Uh6(#?U9bo{Q>`_ z`1AFE^$m(I4j1{g?*uHAq<e|4N~!P~iUXrXt@a_K`rJq5KS&}~nyqbiBog!(qlly| z$$^x$M_T^Ie)4dpJHe9(?eQ6sUULTjfSbp$XOgiba)Td|<CPo)+GCnof~mwNCJ5_c z>Zo994z&+8Gmo<^Q6^CdOTA5h1+*h6+4a1iUni_bNKQSf4BDk`Mir!RqvP&wR+lkl zXsTvsXeiSwb+$n$woXzcM^~2Sb>8gEe5qO7NW9#6f#XU;{CJkAk;{RuoisaTT8>%h z69NB)!g|trs>sYM3|LPSS3M)FXNjwxBk@{B)yZD;7_%}mGu@@hJ_2&qH+frtCwT>> z(nH4l^VSQ@dQn*4<PYT1FUhyOr1~IUAag{`otKD*UnXKPX?3`(E1C2yGD?MndQ<A# z#6fE3@BnRz3nmj6Eu1HP!J?GLb%eW+#_w3)CDR2(-z&6Ec8c{Xv%ZJgdxTUtITG$j zS*%>&81A42%bDKpOy=AP>ox0jVZC8}Us!Ka3w~g|C9EG>KN8lD>F#aoC&K!vb)>Ua zL~Re&s9n^_y>K|Xa>A%Rsj)$<HY}}Fna4p7s(wo~z@6>bp5+>(joH}DcdVZ=>s?{} zoZ?Zxuzo45_ei2nQ4)2Q5~Jyv9M9RUOIW|Me$DuDVg1JXt+0Ma*~`^*jpC$}?BeWy z!&_m!&#zWn$xtYuTTH$=$p^WygjVjU?9t408S&^<8#b|^pnP*a=xo)ZonF=v*6)S& z2jwElC1{0OlZh%FhYp*3e012l-09UFBbiBjLZ=$UX=zJxBN^>~q;dO`^=DyyVEsi{ zf2GFGakNi=*zS~jg5_p+PeAsD;vT&yd#u07-W?H2Pc})o;!`~qrjsqXn;6XH_`jnd zGw&g~{$c%-S^pB&zpW36b!o>&upP(Wc6We#98P*qB}jE|XGDdC^^w}>jS0>P15z?d zm&?gmtu`83AFCZn<Y9G$duUL5Vsblog%Fz1oh5)q+KsW(wznfkspAOZvY`jz6s%l< zWznk@v@Rp^NL?bawDWAm!h?xVx>c+^mYD74S?uPSs1O%tAbKS%8d(Bw8L;DMU_}$V z7+)cHtH^hhhqKzx_@P4hgkK25cZCp)#&}cGg&dtbscYr7^m#!i0ys}CCdjGlEM|l{ zx1;2yzBkm~b|FBRLU5{TlA~YI5mj?fZJ?-N!V*GIG}te9;RsP63YjPpA|Q%|zs<kd z+3JAp+YzR1Cdyc4&aNFHN~rkho-O7^`<?9)L2SE>lLSX#xa$E9iV&r|PP(gGle;Z4 z{3RhKP;C=cV^Tu(a><CcrlxG62s^uM(3%xxVxka}#AG4L#Q~nZHV_KO?XKizCb@Zs z+<gnXU9RZKQu8ZU%$G~!H5AHsx7#?vD@PeZOtBh;m?{nwVj9|sV!8-=Q?!3Dk+NT? z+tr0YOr;1w5kmnSB^c*suX$uCq?bg6m?0xcbPk5IDyw=jO0l%WJeo{1P8kd*W~fDb z3hB%j;vmYl%^ReIo7)+q)Z8*{L=i!fiGAT{xNoq}r79eEjD3oY%Jn{UTyl52;oeL} ztQ^goiGoQSEGmVVMIBs4{18^%Dmj66A=v6AfeyLDp(2RZs<&rBA<3;y$XDTRl+g3! zBtmM2r07mv$47lAOIkz?8%z)b&ZY`CCudXV;J|=Qn@ip0gN`9bEYOaMieLjusMuhn zi&Vm3bZ1ya))V1=A}M`~#Qdx+NiFPuv?X)ITp{L(L(tSCW2vue+p+~6gV7$_mQDx_ z_k!A39~$`BKF{s|xz!k5Xt|_N8%~5zwWC7J7Yit^*?~q6jk>dSfYcohYlpMdq*%3s zUKI+{mR#C#A}WII4xKXMDi$)aNQlK^i4aT0GMoy*<7#Sa>s#7SKw-0-z$?U|x^_@* zn!VR_nOG^rDsdQ6y+F|rL?XrELL4EE6y|Pm6yw$C$BCL;;Y#J|(o%D~oJB&c7PVAH zo$x&=>K!$gCL0B>5o?54E6`-*sf#Q{8Ji7+Xdr81`WWwM3$Z@Mc2b#x4RzGZXdi|m zWLJs}Laj$h6t#Yn>8^?<v61n^glHBmas?zCu3Gnu4h8A0a5Sp1rAMQ%_b6@>t&AU@ z_HNKjvKK^~XcuBrDxtI&U}U%)lIzCITf>Fqn~*xnLBCvcM!r$2(M)U>Vv9INh^<uq zWEA#cXWfIAjgwor#j#?dYf(7s)AmkRh?C%vo0zg?JdT84OHScOlSfVBNO-%Qy81mr zE>?yd$ta~AM_Sby4OVhIQCH@uF4c6L-YMjTqwc1u4DwDO@|yR9Jg4|ksT1NvBB*|3 zv2r7-YuzYaGqMVI$Wj}Sh~?;q{|VZ$qLdO3NVjLgYLVTEY)*CU17$m;ufTg8lC*_r zon44+!c3YUv=Z$o&Yfs#4@Tp50=48x)^~*n@h5d{x!0tfA*6O0I#4*&U1)RI-4yP3 z7OSPfPfFO?v@S#kRa5I2APULuO73oV5vAf#yIUnr(B6Rtb8yi@w<7g6*w$31+%uL^ zUOJgN5{K5u2Vz4u*%no!h&>YiD5@RFhtmCNAv#5u8#ht($~t!{vb}Jm5H|VIj9$94 zY0si7njCh@jDpX|n(WSU6*opv)a_bO*{c@*WBr?p4ADbkxg%37i(V1dwI!<Ky}be{ z<4ksV=9Vz!4T+P*c4>x<ku{kmDF)M<<nHMR=1O(fuZ4(+K3!Xsj+Y^)Q_Lr_b{%uk z=#*>ILPW{#jFHSdE`9zvTgp@Cxm=tWIT=+^+2$an(k)e}R)=(LaLj6QiW6@|Jnk%q zd#}L~Wn&OvbtPAtbuE;YiWHPA)zhGoc{JV{ebgvjJ2rQN|I<2z=ohC5F(6KH7SJ-d zIW7{;X80^@<m@L&?LsVYQ0$=d8RcT5uAThJ2g_NnbhXtu+OkvZ5@Luhr;1&4E=1;{ zmJp|r@fi8UjH<Q?NP1FMpGG4K&Fw(uf|d}UqEO%QS;_FqtwPIuXkIX?mISE^T9F@` zonz45MKDP^xi{#3jwCFlx8mY-w647^4MLp3*9&o`6BhCugeYzQm)(K`FUz7ZQC}Y| z!FE$QXOZ`Lwm3(KPm6PfI8U?)@fmSG6Bh{aS@Ag`E~FySy~TE4M9#OfOqIrHpC_CH za|viV_@N?&5uGKjIH9<)st%i^v$J;ARpGwz66~WrkQ6C%_x(61$x<q$o^_&Hq%MX= z;;8q4h8(xrB}s^j#eqpj->Ew#7uoIJngN*t=~OEBpL%5Jh#tAbf2k0c@^wO7CNB5t zNN)Gb2w)euN6a`8Ns!$)7>NkqSBU2i7!l2oQ9BjUn4<VKxd}FPT}fO)68;O~O3$uD zh0xQRT(Xj3z2riPuB}K}GgGc&uuHz0FDprXtJ5vQ4bFT~Tq(p=WHFXHdN77;o~&qk zw&<fG+-Zuk5VJ=4g}9nuC&V=rrMXso$qQF0Tsv8hu)aY3{$&!4UlFIEvcFF5UKwKz zA*dp@?kd8_a^-doRY;%nx|e(hhoa@K8PY4A>zHD*g!|@oJS1y4DECpnZQF6I>8xMc z9*)F+l_D6|^B)Q8O>u(|H_{m1B<9KvA}XDT0<9RRp_80iGAk|v@Z=}N-M4g}5;vnn zcb6Mh(5uWc?Bkpt(Un8`sfZ0B&}-B4-E$(+kHiw<7T?)I+$wepahteZh&#lcUg*sW zZhP_N@)2=xS3Tr1GP9gDOGe(;gt$xGEyO(}yzV98Q=G=zsyimQG3ZqO7UDkglroe^ zmE%dwPW3xTY^nmX2yF_trtiQH+M&+gtj-PNM+vcqhV*{5_t%{UowgUgQD)kFCcd8S zb%xx#F47LGY3?}L?xYi3Mx5D~MBlG19ZQ|S&$v#uN_)SA&gjKSHCAR_JNUTqoxMNC zzEXA8`K&C3Wj{rK&ZyO9oXtP-jgjoAI7?D`z6s6ZfiUd{%08gk&$pL{Ql}haiPL)I zDRMb`HrdXxdNz3q{TT1Vcn7LydtEupIeo~HDV<Ooi^S5~)D-I1waOf{jX1IUpmCt3 zb&-3L=;&EpeT#fG_5tj<7+~Z9+Bsh&b?>t6m&tjAAj<8w{%{YiDoxMzqSj0o<ACht zHp(r&3-<Hm#%%I9$B~TgtoKe*bl=Jh$B=!A|HG%MqqfJ<a`)^(I^E1pxUZs3t(raB zHw-K~3Nji#WzcTuLRLWJ5l4kHL{Z{qW>uD>{zje`P8l{z|80U>UiwL$&>M>PsxP19 zSIusqlO<0Xlt-?Wr5-P+B(gm9&Z^&7SKqp=c3pj2d&XIquB5<nr(`E?6E=p9+fvT9 z;@sn_vX(KvGfKz)k_AJ*L{(H@)i4(NxH`3@vA(8#o!bX3jWzA{SPey7Ti32egRZKf zp&^YhDLm+?T_i<LGe?@V=Q=&sqi19(<7jc9rFlzzYkl3eriP96wKc8nbX4JnO^uD) z8rtidbnS%f9p3Oi)#KDmX$dx~!%D}|%uiB{wXt4~LR))HtFHMShV-p&Zr*^yQQuVG zTGL2x1l1qYvTb#9dwU~}5@5HqwKs3XTeH5YrG4wRrkWO1cP@BaZF5sgO>0eiGZr~H ztF%NVjk3Zyw$)R1hh&?NBi<NEe*0ylIg$&Rjw7@ajdaLTmr`HLt1>0Sc<Oc}jALWq zB%D<>dz?0lZ(Z~1W)u*it}Z&d(M~vDdN9y7M&F8BpKSzl9JjWLBw@p7$&iS-=M|Rp z(CNqY-J>p&W2?~<!|G<L!+uZ&lPaH?+JKqZfSIxZGd**Pp@*j4hM^uv+B1{V1#*h` z(z{WkR%M)1zG`+RK-ad8S9pyqYwU0EY;Hi_WX@a2$l~>l4N}y!wKQ*RBMxP4n<y1w z0cw~!ph_KCh0b~|_H~4C5oU3ZtZI$zM9A!1=f7r{ountILU%uy^Rg%DI`_*oG(nQD zKF9+-?F7BKDi2t|$8daIxTn`1Xh&ajKWat=Gzm+pr!%sgpnXjzx{)Dzxt?0&*n>_r z#*R>Akm#8=2D4{a%9b;~75`M_RJJ4RacZ};x7^7)CzoJQR#yrxeLQP?nCK@u)vQ6K z<J#<0bzPW_b{$eGpOn99K;@Xy$su3b3-SY6{+61S`c`EiIOFT9s-yk~#cBjWlcA1| zp+&>LOQqAc7W^4yayN{3#*AZza8hX7*0k2p6kw8{skxj)l-fK*IIYbax3z6)Zmm<a z%Ojx_x2hARkWC0&hpjCn?Xj(9W8Jo+H#IaiD%ndJ+T<Bhs*}|_cJkmTR2}I6niA4@ z$|B&T;Hw?2Z<tg+ZEdOv4l9p2d`TC`P)9?l*_q*vEyz_!&hL|zx`klk>LK@i=i)TO zRDG-r!k$AnF)caeV`U5(NwF4k&9RvVsbgTOVR5VC%6RUS0wmoacEqn0j(catpznbA z^k%~*Bsn5ad>U$qHsR>er~0tg_4L6j5(v#G-b<_2&mMVrdI^1Pz|GViYnKGitja{p zI=IJ<+phWq%D`XK+S<H@&QB&^I)lHw-Yf9NU5S7q@7e3qw#J60`faOgh`Vz*Teb2G z+qvVAdP!y(=~`w-)wQMLF<(Z0HO@-J8tJ9R+7S8Xa>mkzilzH|3cC6d9@Mrrpm|)= zsN@D62&ANgqd3gYP!ubcRg`6`f(~m}ywau?sa<9%OXn+(JA|UR-Z{8GYoY7Y&ukuw zOTVSq36m0QyWDI^qEYO~&$t=#h&x1`k~T>cbb*vzeXF?mh8QMclEtsf#!H9hI2+&V zMtPQe*0%a7XiCRXq><A-7?nGo7p!q^R=H>Lj-*z8c&%R&F<Jq+TZ?@$BFQ;hDMsSN zKz5SvCQZxMWgaF8u1@u!YYVGJ!_3-=2HMOu5egco=1m^*BpFE>PV#uCQDl93x918Z zreQfYLF$Sz2?+TveG8ozrTEA_DN0QMc}A3yz0KX-^f472i`wQEa;+LS)ywapW_NAt z&<yJcN96Zbd{u39;6GJYM`u|(KF92=W>|Jpim3?`SEUfJd0^up_2r@CpYxdpPH~E1 z=N4BzzT&b|Ss<;UF8dSHmek$_uGu1wzrttKn5oYJbWvMt*4C%^_5Lk2?X~N?piE1B zO)GsyK$<*t&Ez8Fudb)n&XgfrEq|1apkB7~PAi(6HWyO3l>1H-51>mi%C{1Tk$nl9 zrd0K4XxZj-3%YmVPGm@$G2P)vg7n17tW!UUI@;Vf!*M4TnC)D$)Yu=kdU3WXmpyiz z)OYjuFNdzJ8jsq``3cZT((6w7_-9Rg?V#*zKe+;3N{FaaGSobFf-l7>A!R9)q~||U zRAmqL3AZ3+P8i|1awq~Br>&Df4aJo}J-F()oEj$8c4H_S*G6JHb#3*S0iy9ly*%&J z>+*%83~U+?B!_k0{@|;QcE1)&CfPVY{#xib!()4i$z!I*@)Ad2D(almqM%{phHY&% zwHuTnuKXnCIO+5qs~q*Ge|0q+ukY(8@m}bLK-bkbHr1mbDp9g3{WaMVCD77=^GA1P zMt*8`0+ur3HBk}|vp?~dOIeQ_6P{5u9^1P!5{o*@GP#&inJa7NS8th&-;qh3(+JqC zI!o<`#ult|zV}o)uE5$V`K6H*(q`qDQ0bJ>1P|c2rEPx9X~`!;;7R_%E{&@7hy|m4 zMJLOr#Ymy-CBEN}k0Y%bH*&TfGEjQPcG#}H-yc_ZYJqoN7U4X~QcXD(;eMTF^-x+s zpu}^{QXFI%!j+r-lpuw0ywTZ7SUR$5Y-?FIJ|R;mj;)E<iC9z#+nKqo`BYhJ+B9#S zm+{+M8(OwBwAOE1Cqv~t9CuH>z%E&%Cbp7MbPx{Kr({HaB-WF|Z`qs?0?y)AWQID{ z=NQcFEBK>*iD|PlF{AE#7E^Oc7&HUP5gQncwuj=|8$;5}I3kU6`y+#B3uD>zvub@B z7sNYz?XJOyJ>Zy7RETQHINkp7#C%)HTnnVi0;O@0W15}MPfx8ncC?<A7HMdg7kQnK zK9KHVG_%JR`QEp%$qYz2lp{R^q`q=(Y`2HxGQSu39aFcZR5XTe8-b~2kX#c<T^~`5 zx@`O=c$#`k8pK}Tf&9dGm})6ZtHtS8Z;%M)3={>S=)G4NHy-c)fP!$mA)2zhE|+S& z#r;{MJB2A9c4IPpM&Asq8r6OGs-{>zb4bp)G&r(98$Q|6U`bnh4LUD%+txPLw6$$( zsoChPU93<4fH}$}v@2~==8F3$o#Gz@Za{ZU{l;2a&`bJ4R?<$0t7TuMbW2CB<7`%r z;1+2uB=b~_!=z{mg`*Cy)JUQ188$P=lT|s^UY@Gl`aSb&?IkH8e=ooCbK-KV0c@^c z*HGJ7--Z$*hxghTa*c&(m-h)z>fW~G=i3YAxh^TJm}2Y8ua6^6-ljH+17s#((Gw*s zVed+$z2c?%TS1b7I!)_3ML4Y=QG)agowCZZtuU-|SNC?wvnt%kJdMEG!D!rFB`HXQ zs*Mz*eT&c;@8DQC$^mn0$+~$$8a?}TZAsN9`gUTdleQ~n*PJ=O(wNoVuEnAU`=q=z z!`&VO1+zNb9<n=YoD)%;15v0=4|29qJT#Wb@uU>lH^J<Y!PG#&%5j#K^#in9nw#s~ zMV|ucA(Pe69hL$FZC-B%9ksvlnvo7lq12AF&DNPh{#aD*4l}X-4XaU5t)pIgm@bdd z<x!<2YSl+^OVbuYByiP!f0=Z%%rVM(b+*B0IHBr8^i@ME9Ita<l~N6A>y3@WJym0o zf;+|{W?HEf)7Th`s!wx}%hQFn^y;vq(bb71PTYZ9RyRSNSK=h7XC)momVQ!}j8a#4 zOu2ll5T<5})h8{fs_~vx;=JssbZCwR&MabPjFV4@wW!$CxazX1wog<LlObk0)I?IM zdT&iu-v0!p%QBU=U7yRv{Uqg@RIU@q@^=teuH=uqD93d5ED+~0soSb@`S8jTNq(Cf z6~%b)k}LBKQPK)3d@iHlDTA0_H5>J(SXW<Dx2<MVZF@uWMpPNZ%7a5V2I)I7vo6DB z-?q6*eV=<%-1c%ejVeamxcK-tU*xZ=->PgFZ+FdMx%hp27ORC6uck0(SF^K;L0Zr5 z1|R~|N9kpTM4!}Bvod#4dTH?mDTuUwEk8jJj>gmSS5=KGJ2keTrnRZLb=#(vwXHRE z_2buXsB;QYVx?`y;L?3?j)KX#$dmS>K+Z*;G%RI{roCGr$7Fn4#In4ZK<aaCb7S4M zhK*~R+ZE;BDLB%|k>}5l%bzXcnY&a=*>CRA@Z;ExxmihgoL-|v>QW}@w3MA;h&)pv z&rELl%9q>si~;$zGhI7!zdqZYxhPHa<*#kQxjZ3tNvt=Na5i{yRH@;9=Yb8_&S#hF zQspk9546!45@-^y$_3AA<P;}i4bg<H+~WSw09o(3maWm-gVoKOHnumApOD-xpu%AO zrsj<_zs*EwyPdM@he9la{ax6Lt7D-7lxQ{k{kik>y@;|z*&FVcfmV)EVngnvV`-ii zb<j5`JJEzzuk;`!p1JSAhs?TJty89MkVrnO9>@}n!(0<REc!+gcBC6C^;I34HQlY% zLNSmG%d(#E4z;CV@IT_a@$_)^Eel+YqKer<ZF9@Ere>0C#+I6m?G$;MKyEX3r21q| zt2*0++PPj%#<;Uf|DaK}vO8P(9m6<f^Crdq$6OdpXYnI*TIb_B!)2AT3o;WqWs3Sx zwj;++&swO5Cl>)!hQ_KfQ1_2M|Jv62`i=A{b-A^5KE?L-C;yyr91b(H#yJGfaBr;E zO&e*ib5qSmihhq$V`d?%<mBHE{OsXkzpdVnXdPEs``M>+-MCxU468$N+si~tepTZ} zCd$ckbH0g`bJZ-l7Pm@<=*L2$axePti-d8V`?IP+3d;FeXWl4lBKe7a6mh5j_ggXQ zN&sry&_E(i-?pLckj<OgNY52zte(@-@Yt)hsW}`MO1&wxWbAe2%r}vo0ABN8f{xB> zbdJFqu?5{tSVem=vL;X?=Z$k++o_m2%fR~;8Bb$jUwh3l4QYGR>SBZPWhhJ98}3t9 zlcSDy4%KYjfcf3CgeZoomY_@GYSXU!F(PU67dQvww8s=uv4iA%Tu9=SIxzPONY3j5 z^7NXF1x@m-NT)gAR&~k@S~>L5$j!7L6!o5S_Dn|Bz{t|V|1}Ozt4PV3F#17suFM!) zZ)9ZgF<qPDo`cp9Z5}{gOXvCZ`$hREbAd>kkWrOWN9})5N3w9!vr98}0FLI$Wb9*J zrTB&xW=J=?n$N$sX5(5E35Cw5ADlBQb*=NiF1e)Mlb;MwEp%7nR(+E7DsOF$EVeAm zd*feOC%dl8`GUg#id~8XuzvTm48HC1iwlMEjMe9o^i@n{Pp%v<Z)E8=l8S8+GG=`> zO-;=>B=MA;=W4TnT1m_Ha!Qt!v<BBY*b*BcQ*J`KXqQlDks>MoRXhsiVKhOT(&yz6 z`Z;t&AhUer`L2OjKe-$mLy5tGko>AcbM{jAYtxm(3r^6+q%PamUbCUzc~v14j>wOD z`PSDoG-9*jX-jq!Q`WB1q9P^Uno09Oa@$Zm%eJBI|259c7E33&pRv4GM9!PLnaC!I z(LNeUpKNQATw_tZmsS;oy1E>HT&P7ZcZU#ht$RO7d3R3EhG<<V5$cfJ<)@88s&wyx zmIT$&>^?e;lN8G1YOk1z>zY#0s~4k}XAxNIM~(MU=y{cz)vMJ}94Z(cNCJ`@<I@)R zlxcx^i~6yigyc;6OcmK4&Y9e*sL+2Jk{Ad5WJfxo)h-qH?-^f6@PA-`V{v?BVELf2 zH%@M*4VjrzGP@8CAd_Xp5f91HyleqJX?|l7UaXKcHn+Fex1x7FDelI$oh%+sSva0G zaFPjkt*`m}w{ptF6GA*Go)P}5{nrTpRsPQl{}=t23;&gLu+g);QTQ*TM>^-of3g2U z;lGGbKIgws*JdO;341oSotDr0I=Vs>%jphvI{P&Gl21%LkE*mW7L%dHmr^H*Q-Jy~ zG>sjKfSC$2=ewdKGfFk{i4s+nqvxGHGL^o)&=!`fu`C*k(hhefUO<i-SIbcBjE<*O z_)hbEO4EI(YnoPyzi0W*#_Kuwv_RAGKTY$`c|g<e!<#(cr}1h?;6mTIcoho4cb@Mv z_^bQQ_g#Qkn0fbd&C(`n+KC6x9oF)i=Izt+b!{Ww`>K8AzG2N@?ay0ol>3J@<4%o= zKwNF<*?(I9S*+%eb9emmO#GdCzPV<zrsdysWu1ZK<sW{{oF`}DFW>W(R}axN-`xA} z`pIwc_x=a|cI37Ad)dCL4*C#(|F-Yd&tba$n+L;ZQT}<4zj@PR_<Q!#FaPK@OmBMr zqDzo^-_t)n<fJyN=bU#pyo%5IL+`$J*%HL-fB##r+=S`B_~*Z#{v)P;L(?z41L0G& z`Nm=R{D!u$u@s*#*B0GI^&X}zKI{a9pQ0^aJ`I1b&{nkm8q0gj_qFK;;%)N}6?_lj zH~ZgQ{y5?v;D7J^EAaO<<G914h<B&4?Z$iY_g_Y0<#UK<iHpAX4*vc_-15N;#ETWy zzEzIpY%HF2=jRdr?1bma*5L1ZWe2^{fPDuCh&3N0-i=cO4^#ao&A9%sKE!{0X6M^= z2sf*44o}ACzc1=J`d0k?WzDr$&BXe?*|zJh^@!ixcIw5u@%M<1s-sTD^k+H?dJvxf z^}%H?{{r)$wX1M5(&am`++V_mHMl0fD}TAMJD;9S`P}ZK=Z*Nx<#U~%o{zw1OFl0( z=y^Uq3;8^g(epHXE|AX?fSwESxllg)0+b=|Lj)8NAn(rs%8~b51Oz1Dod9LYdkX=@ z67b!CNq`p-P$B`32RH%tA)r(O?g>}~xD5dlB;dM$Aiz}!D3gHC2MP%A83as}fKLSq z2{4F&NfNL<P(*+(1WcBIV*>#Kv>~8e0vZCv1XzuL10>+kKnVdBAz+FG%nFneAc%me z5->3^fdEAaI8XxofieW>A0c2G0rU?76AAD;1WcEJp9Lln;D-nZO28|D$prW&0xBfn zi9k649z?(l3Ai_K00C}Cz(Er5)xZ=2T#bO45^!-~Dgn+%z`+u5df-3;>_9-J1VjSU z2w)>%mINFZm`;Fp1XM}D`aqBXwFsCk0V@L)1XzrKITBD6m_dLF1k9CyNr8h15J12@ z2`~aP5ukmHfI|qN{UvZP0p3Tzd<l3rP)UFvAz*<7yc(EAfR_-kPy(I|R1x4I1T2z( z`vS8Ga0dbwOThJkIRv-{0ZSy{lE7R7T!4V35^zRf9szbDV3`E;1r8xVHv*PR!100k z1lWXt6%w!^uz&z{2sl&%ssjrNumk}sC17@75dmf(pjrYZ2Nn~c7y+v!fCZK;H_D7V zNG=}p8%_N~xum^~bM{r|59MB-AOBDy=Y3hz;5tp?_{^_Iq5K0)D?C}#icp45{+*_k ze@@d5n5St|P{vGqNYjEV@b3dnn-SBrgHTQ#Y-`%A#hNyoY1-Vqns&&Enl}F*nzjgG zOIkE-8On-fOYsk7$%;!fZ6(UA!>Tpyh|4vt=6p@7eMZyjke)SHYuefaHLU?<?uH{Y zt#K0mU94$Mg__okv>bh&rnO-k+M6|P^OiYtAJ7h)8?g3hhnF1Tdqg{OYktX5ZF{wv zVQux6xq*T`T5U<41Ft7|pgVA8V98!>&0cM-!YSILtt)A8aMmaD9=J!_;45i#5}Gh! zBPt+tFZXIK3S;^n?dXzL2ca#Qvtp0dUb4x7Z%)D&?9sNA9OJ;ZCgF?rXvdZu=fICo z!k6sPPAECifp2r+_sN1zDhW9W9k~)Zy@X^hb(PpoYIj;MZ7Jz-;JryW_Ds0sWCy-I ztsPmam+eUQM<f?ned%Nc_``f_e!yzp>I;bGt^Pnk^Hw8J*u0emiki1VU_$fOfDtIe zD+^4-D+DIt)eKB-u4W*!R#Mhkl(mYo&Zew$nyVpyxw%)1Dx+aoi&gWzT7R`wZaunO z<S#EMD<~5;<{eaSl@%<mE-WwHqn&cAhVs*TNE_JtfEKSVDlaNY?9&GGv@PYRPj+0V z%_}c@NZW~tyGn+JwNoW@SUYW4`;>#0%urNv`be0Y`3xuXnfP0B7GAs(_Go8Q!a4Kh zwAJ)u>4JY8{|?2!di?9gKQgm!!@n2sk8A|Q(NQ<+E3vvytD<)6Gw|VDkBalWyU(}? zIzF85fiG~t+OP59vmW?!-ra@X-9;|yWBBlS4}7tAcZrK|9X?#@fiLs!E_V@5$A>FC z@E2TgH$GhHfxqa2oAKc)4}7(Eca4iMA0Mvuz+dw2zU(3t;KNtc!`yOKX3nSnzD|xt zdC^|&t9!NUi8s$R^>YjK-5>rCnFt=yZrGZ?N4v3Yt8b5XQ`=Vm9_{9~t;QbhmbR^I zk9KQYCRcsc;i_z`G=hb8e-akD&B=T_W-hrSm4!yK*_|WUEQ#|qiL+O`i^{n>JI*~0 z&b@?lUv`{54$l3A^Y!dF-*9k-3Fm=yoRYnn*!vvp2MPP3G;Ex!Hx6qLU!&Dy#z!(U zKI&wAj50o+QOy(H-IJO5o^tX%P5GY5tnemT;UvuXtXITy$>f{8<mbKQ7u4Ne?ZxUq zdEn9I#rexi%1X+LZ`4jG50sTGt}ZP{lk%J8g|}#d@<MqpOIf)WEf9Qqd06{a^@Q>X z&uX)hRDPSNM8oqtG^pQArSjYoefP&V&MgOrsb7&}PfVT0(I;hy<5yjAT#iQf_lC9C zh?$?&dZc=L-L3Wws@8Hu*7sGlssI<`O~T-Wv*Y|>?FZLrQ1aGp&0q3E%JCy7yCW{s zH9(q>W>QUg_5PSLqPOt&UhOBt+D|d>UhN%EYyHecd)Gnx`A9TWVqGrUFC4UADl$AA zRQ2z<IKOgmew~4Xy|KZ?`Hh3~+YFqFlyZLO;Jlwf4=TyuyEuPvaQ>K44l4emU7SBT zIDg)&eL!9L7xx+S1kgDCYih>qBb%cCe_!%9C-v`Xdj20J|5WhQ!5G&5wMYB+tvHe& z(nx+ZE(_rGl8+U<RM*l>nJuNd?xy5<r0v!7tC^$^8>RcIQQ?15dthsT2M)xm6_|!s z5txqGf<O?jg@FpZ7Llb82#~1|C?;DWP(sE+pp>iyvmEy6eqF2P`OB>`D=^_keQi14 zryII<Et&;-H9at0dt8TV;mY-b@&ad=N_CUQMGWg)jkhBO3S7}$xU!H^t$n({N>Coi zqOU=tKj4&GP+eSJJggU9qXi}x(p^#K%EH~+qLexUR0pP@uX<{!UgA6zrPjFn<K2@B z3$MCP3#Q~lVRGu^!t8{lpiOX^P_|c}xL2Q)DqQB4n`PE~oC1c2J=wu7S9s+Gd-Vh4 zvtu8hYw5c`+MCWRrTUaKX8C;pT|lD0sXo<BInWbCI1<xzEimC`?ZCN##e4MWrFziC zs>rY&|08ahCb?z0<d&f1mI}!&GsfZ;=5hd(1G0RnKEv<OcMuv0rTR>w(&=A?aIlL| zDG_FkK&WyNW=n)QBM|1g2=gSuAtMmx8xFz(iLek2l~R3C5)Dn6GRfwPb?ruNx?}#J zy4a^L$wLNQ>Zpm`AHOyFsAZqYS!6j)>1EGp6;kwUFiQ31ZnhQVPEoeq+N#XdbatmA z6o*k3`RFhh-5>fDDjfyb>)7IzZt2y@(if{#FVQP}l~eek=_+Z|mg|R=>W8~2N2E!& z4Ost?ZqiY1{n<KYuU_Lk>8q<Dmn;of|Ct!9HvO`I=~O^Pb2V3w)95kSTy2f&I*}zy zI_7)Th2%4#`TFScK>qULvf{G9jd@3x7nKz+t}Y=nrDRyI9oFlH^?I^qo+Afpo;x?t zbn%1?BVD4exkZ~(KEWFTbihwV;IO_<%Cm+vo2vvJGD0sQ`{<yIT&mtw^wME{J&C<k z%ngJ|32BlK0gcybCzekrXLR2*tZ%$Vo8e_@b}}`dw^wgbRqWR0c*#dgwsA7H?$z7u zk-{>i-4h72eV@Kb*B;b2YuY}2OP;n@KW3l4m8RUW`}E@+nvQ=~t4yK&1c!{{hxHRP z8@eqW^&|&%TNcz%I%<c58p?v&nU31!pmt_KwbN0%9aK9LwS-)&5^}93pcPtOMp~p` zetDS`GzI#(#b}S-jlAZ6MDIZlOYfB)*1y{_Ij$j{<H8vnH!~N<m6zP2&CbF)+4$}M zG0^`>2GUQK1LiQ01nkjjZ$*!(Y>&QuueP?jY_~SSfp54~Gt0|-!+K<HIUm7k!^mlS z^}bBzT9VFO(NyL#$z@80gi`sdq#TCz*e%*hl2o_esujy;yhR`G+H3+#`r-eN-~NyD z8@kOjRGz>RBiQIAVk7OPVZC43^2kogme<drJ88?GLKZ&u_+EYBxsTs*ZsX5={DyOz zcoyZ>$1k{ig@(U30EjU7thQ*LyxFJk$kT|MiapwQ677_hMtH#Ers8yN3S@FqKys5^ zUW`l;aJgxAIyVu{c@y+q;Z#=1!c>7#nJU?)V!|AosSxQ@uZq(gLYf@+qL>DxWG+S4 z=F<?#0Vyjew;sJ2`x5{E=+s={1pQN``suE1c1Bv<dxPIGO?pvul<H?<L8bax3O6m~ zY?*S7YuJtE0_&eH)z5XSJ1>h9PPXo6T!izJMHcMQFDTVN>!y4z)kD`WEY&Y^Q$C+e znZ8HAxKzKyO}R9e9eY_Cg{d8Kd4>hAU$IaBg09VbP`{E!>Wir(byYR{U-HkPoT=$% zrrFP)x30y?P0w4`I_N>p#H*_Xg~T#^*K4HjDpzw-V_D^VSiklf8tyO2;r_C8IYjEJ z4|%m8Uz*vwU&-v<>qdIDOgdg^UhP+Nd9~&L8-2VrFd?u2uVsOSc%2wngx5)d#dw_@ zSkf#VmqVn_k~YI|Jg#@g<A!QZU3g=)ML#!Hi*hI4QGlH&Zwm957nK!JbmhhJ0w)B* z^xfK&@<Qh+KzDNJZr-i=bQGioUP^(Ja*Iqssq&m=l^2r@sGn9IcvgFbeA=S<I9a@r zzSR*UPL!RcJAt=3skb{$;8vfPbcd64ryMpn-S4GS<Xp9zu<qKc-z^#Ep4}P{;9g7) z%va&Lwyg%a=r<4R_eq>RyR}K><^=tI87D=+Hzc<Wx9!y*Kq<FZ->ZDr8}{n^D8TdJ zu>KH<zRb2g?3lBUDC&%~c<hjq_-Kx%VbWviP1_$D<y0urcYm~O%&GAB$f;nBe=4|4 z$I_S%_Ucaz>rYmj|4Y({lYAk5w(^&YGC}fZ2erzTKVf>1tol@S0okGg2kwG&@l!CY zKb<CgSZ4Rb1pOJe`=68D|Ge8d=L!@<pB=OBUl`f<=6>{jh9)ggs_R7;{hLYEb>JTT zC10ujvYYg+WYY9K+7_?n-*yA_$|iBqzmvLnPEnTcx+$-u2bW9rSKXBFrK`G9{WT{H zo{ji`DfvVYpA-<E6cV455uZ#XKA9x>WSZoY>5@-^sB@fLU6`v_dmghD>mOjg;{5k8 zV=?;<<}5C~fU*|P3Q*qSjl@7us=wY`ZRRiMWjtWssI`*@;`5Ws8fZG12snROe?t!L z_vPTe>8+GdqMDX&V}IZcJja2*b8cW(vb0kDEw@)E=s%2kOCTfi&J9$h=K68=v3NU) zK3hg;f8wV6G?#Jl&S-q|f3)kJc{O&||7=`c|8~}{|JfK_|8_e1yZ`^_`f+pp&;J9i z|M~uL{V)E*uGfE=DJ}UPt+rHu&+{epUp+^y{<UoNZ?f%0LQCopGNM4b0%-96*2xTL zQ|;4#M@G;@dbr7Xz~bJQ#icj|fjv4>|A#Ct%pWD{p9ocjPTU~+pRdv4^!q`zS#A#N ze;L;QI;{Uq*>ZocmeCK=XaCT(2lRiUQ7634{FfZJVg27qk?qw#bUZ#$s(+MxqGe(I zV^S04+_7$?UO1^VPjh-RPfs>M+Uliwc_Z79m+!S<qo)-9QJUxTQ1krMEqUY-mgcc! znM-AeJ`YmMq_s`NHQmL{jmg0bOqFwh)6B7G<_MZO1vGOCY33BknIpMBP%3B61Zh{4 zNxNdAv@0e_yJE7mE6Sx^F;&_X2THqQnzSpXOS>W{?TQL%fzOZ@_`%Wwuap+}ENOw0 z1yU|8kOQQxJ|!@>Sz1MhNP~#j;#V|&&uM&K$+W$B{60Bu=5U@R9q)M${(tPf2YeJ& z*FS#S%=VJqY{-TX5|R+oNdh5_1d`AK2?PibnkXn>!;S@16csCoC<X-)lmIqBT@p~l zh7D{8iegv50v0St%kP$%-Pslr9-r6O_y6a^=FXhC{hsqZ=bn3KE;1|gxlPCtJO^h( zOGjL6acf3aK5l+SPV5RWN^9f{QjHu?#*7>tGje>BEU~r3qP1|G$i^pB7IiMgjF>fi z3@e<-u11Ooy-zPI<b<2mk=Zk`K6?f^g6)}q&3I}jQ+!ZYu%&4>ney43>bQsvM|51^ zS>ADZgUz(mMeD)rM$Dy(tZalV!E+;Pn7I*hDo=ywMkrEw6lQLOT)w%HHE?cZ4VoJ{ zQB>f}=MJy^{AiJt&4R4TEXWqz3O)<6g`NdDQ3vH|@H9xY!WJ|Q@>NH1GBuuD$}xc( z)werQw92UNb}_0jycK?(bSj4ZccBo9Va%%4fC_@>6{n4`3Mhh{r*+dzRNXYFBinW4 zL9tD!6LZ+;xZ$92*jy9ZVdF$`AzU=fSXiXMimC~nsB^nUOCJm?q4yyCdqzoWLJ7gc z)I}L4>F*e(Fn%>BN^EtQs0L3`V<!9A0bzzF&VOh^&0y7yMR32mvFP71Oo1DbD7tsh zZbUNv-`a?Dx*LlQgkuktp}L0MR}|ZZeMPEW#ka70$E4;pFpzuOOPnZ$gwQd%NYpKO zQt3o#-pwoOZg{@z;7y#)66-xELusu((}OY_fZ2(%nou^)s0npv9l)Zf8()+-3A{qv zsacz&N>8qD=S!UTX<pD%zUA>JC+eX->8W+VpnNClr9LU}+b1~1i3&yWOMsbQ6g7Y> zDa5`VTHj)&>GiY@B}}I_vNuOUN1|<2G%i~rLA|~GQ>w%(3+kUfzWz~Dwz4m=!kc4X z{~VjZSHW6=?^i_SY9~~L=MGfK)+V^|?L_^WP=B{!8;EopL<wj>1JIF1Kq#^@9_pbC zinlTY#dH)^de9&ZURHUhBTh6}$+WXu?>2B-%C#8{sZYz;h^m`VjnRXKvS`C-v{Nuw z6ROqnQ4kjl56cB3g18{mUM<a-d!zde=E$I~Z}Yghj9j$#aMAjRi&kAwZamTkG^!Dp z+cl<6M4ybo^vOn4&+o_j-G@K~KD(lYo7lwZe~}-0p>~RPlWIq!ab7=k@DvS=7abU2 zI!{oZPV|bg_t6>3qe&igrfM~xCFXWCH|_N9f&i}xn(RNiPBg_2r~`*Bgugn3xva#> zH?t8rJKv(}MXTHDtutHnXRl{Wp_aZAP4!!<RzM}*Wp-H}1~iouO;b1bJJEDaEDCp4 z4NY*Bw~TXH8D?I<dAv9=t6;AcEDr-8=X>G9t=~rHM|1*D){E`tlHWM#z2g+1e$G&y zUO=s~Z3@~b<Kl&To5lr(E>sds^pirjL4|dLXy-&0X9ia@6jgqrAbycLh!^|ROegNF zqFV71_2H#j;pYnIGWF5rq1VrYxWZf2EBsp?0;|=bHY%<T#s(&KeKzF=qyOleU8Yc@ zZxEyJa+zFaHu^^I=!Y6!lW%y<%J3S)53f%<v`;V0Je6Ju(g;^_jc}FF2v?6@?*~w( ze+Zy_E5JD4>asF`dPG^!<p8x<UDKriWn;T-tXhByf%(^nNqcLMWeX2kwos5|(?FJ$ zLe{vpF=vR%&GJ`Be!$j>Y6`I)8VchS=C%rqvxVYKtB*HrT35Qu>asn|e4W!8L4v<b z*j!dWnP}Y({^#D#@SxeuKiQ0~g+NS@ygCnd(&#*B*SaMs*Wr9y6S|Hmrt2F(7v*ve z-=KwVpuK5VVS`M{w^4zjPY2}N#l?;J5p06Ow5E61?E%BC`ZxnvaW3mz9v9uz2qIh& z{PJe*m%hczo-W%GMxNIQ61^#J4Ly>SW0lyq@l0;#TxAc-RZRV!{OXkI_m0-pFYWL< zPtBTvGlEX4wRM+T?))}c(En|WT);8%Zh?^tN3Z{f*x4l5+3YrJ*x8Ga(4j#{D5(fZ z+1ZBqzE#G<HXl3N7&|-M4#v)Q7I@h?g0|hp*x4a2Zp?SG4Rls5J39i|*%qFi9X@t; zhGyr8Fzjsiv2%pR(<*q_5uS%B9-lmT+IW1=Y2vZDO-vtXF9kFGqW_&>N}0xk?&WCe zKY4(8S|IJ}ojlyf983Z&Ex~A6rUA?{j+yM5i(Dr^3zmxNVvn+yG&U?YvYk$+hFo<_ zL$E2^9r`~6uiH-vujQwL*EVSW^<Kuo`T8bwKf}o_`NBWwGOhqym=7(N!HEYoG%&Mj z6}w#GK@ZS@)3NIZ^R4MFK0-^`#-k(6Xc+_)ZLWJ5=<U}v0?B0!m{mNab`!S=kZ`cL z^mfA}zHa-lJ(o?7H4hx(!3w)E;6X?6U?tJe=jtKfN!fP;dc>}yquPXOiwrt04|*mK z5lkLpm^>u1X|8cgzTi@qX$5feiEO?l-DRPMzB<#~7a(N+)JD}N^e7u3AzHrusUD3J z7p(C*aqllO(;73+xUzGAOWG<PYj&t<Y@@>et9{%3{ob*fwn|J;*Qoy0Q*VBy(^KYQ z4cg{9NZDD1)~f9Nn3lcK<4*KMTQ-=XC&PGI`2^9o&%ueF^4pxf+lkhxPu6Q4P-ue_ zJ*_@@CiMP{05_8N6E9BmY#3Djrx=D$)F?K3xF<>3kYRW8tKXD$v><j`p=GCgRdzxf zISP2Ua9Fsoiw{w-eYMIK4x9IT0?HN+bBHY*HYaNGyKDB{S>3i~v<U&Xg{{oCC|t%Y zVTE-j1a6ku<=Y3%+jpJVaKe_8ytU<3KT^cKH_Yl$YOCRXQCm}p+ER|+?7O4Y67@5) z4q!V^a@=O`>T)N}y_AQZQ(5Bq*0^`esn!UZ&<kw*wtCQuY;*K><>n>f(y=oO<mCq8 z+Hq!VK(9E_s~)ti8NG(UdgiHk-Fp90;1*BbP@iNpqc<UaP7}Yi6>TpvZa_Pl(AzwI zB;0!*+wg?mDKcru3dzi!t{c3F!9Eq?ruOc8!5>iY`GnpV9qZ>1qG@(+109>t2mI25 zb}@!Z--LDp;6WcU;zxWZ(h^Xm+^{!1&>m%X$tLu%cgM*mK|4+s7g@NQd9M?F%C>|o z7u>-z`pknqZvc7T1&l8ObkmoDXT5I)i($=D*Jr-+i!OFTn*#mPtsooQ_w>i#J<i^7 zJmrXMx<HBYwKs|*hwbc1OZRrgH)3#^012he4c~9YzAPW7@R4uDrL8n&pIGT4yt?}f z4bcWoMGpj2R8x!Z6hr%aZ|Tv7wiHVX<)wuz|A&C`e+*y#!P70DLJ%*}sPrt`YV*6; zM#a3aCJqya{MWb8PfG790;Szre@s+F#V3Dt<}Yltx<3bgu7o$6Et>XYSHCO)y}7#k z)rk%(Z~vp;e8maQW=XvHs0B8H8lFP~=*r(7n&(8nt2z9^7v!3KQ4`fDf2vWA_(x%l zRgu7;AOW?>C=&c7kieit0)r0;j<yjAj6NhVdKdFr6Mn{?+D3<TDj)OtC)&TOQ6F+w zBRcMP*BoMxV~%%^W20fl|3(W#><grq9&}<8I;jkd+feU8Eu%MKKnWN!LZHp@h1TZS z8DMi@#L1q&&HPZKU`!t=T8_?SexNEY*i^yfl*Wmfi#wl|n%MNTiOza77E9+-7`wkZ zv7|h~^68ih|Ipy;ny}7;^$h0xHu=!m{xHoZA6TJo^1+58?+ecwslY~|MzJZd_bJWX z0ETFyT9l~PAOZ45u_;mP3jV24*e5K_P8^{XGwcYFgO~`>9Gu?wPD7Owsl;-5aFjNR z*u1nEcc|Zpqv`a>gWa+R$M{c@Xu6KxtUWlEv3Vy!#c>|o*@NTNolGa6YMp<;U?)yc z`KL?ZmXy}t#^HXY-A<gSrcd(ctc+%y45`p|rK3xg+BVRE3Hwt1K0M=koFYHOlql}z z#HnGGC{7bT8lN4Ze&|c1K!d*Tg40z6s@kjk!y($2G(B*J2WKn+qeK*1k4$fwSpsTt zw)nJ|6L(h#IpTeJC(cy}dHk-2sFByK(l(uIZT2#umDy%g3oZ5Fp3L6b23&3<H_#~d z<9rY9wFLAHQJDh2q6(F}B9HI$c^b2wJu3F#k_OPjo0WH?11@c~)}kV1g(hnFh)WOn zcuB~N`m~ynX7u{{MJ)G@oD^gWN1KA|7F;1r8anp4QoL(vP#K{Sn3T@!rx-Pq5kh^} z2KQI)@PHz{^8K22y?VmXE`_6Ax1mJ_kprO_NHo2kB{#C<kt}&GPd<eu=kKW4_539j zyMe!@VmGqaR8-AnS^;LO+sxEY!7(G75@@1n>Z?F_pk~(=UuI-6n4b_UUkVBCN^d6K z-NjDq{e&!6D>o?bli<N&-X{qM7<h;iSNj{DxQ350Wpd1RQq#d6swsDvnwky-_Tbtg z6TKkp!b~qDc3}~pDw3UexbU00O|JpH<FZDO>n&r10(>JmAJr*$qnhw&P8j3$t-8%Y zY3qeD*QPaV(vDTrQoS2Gt;H{`MU!@%Z??xOO^0hd>jPF%#bvdgeO#WfkIP5)mm=7Q z;DH2s0yD@54$w=E28D7bP$Xx8VmXI~Jwb`wAC$^NL76-p^p@-BeLd(SUkv)nH-ZZJ z7EmeQ0m|k1^!^^uPks#amtO`0<WImr`7juyGl43d8C2_%K#eXL4Ab=nwYpL;LRSGs z>c)XO-KAiZ?shO*w-SueZ3gwa=fF7K2VlHz7nrE~7@VPx0%z)bfV1?yz+`<tFhxHJ zoUNY*&e5L-rs^*P)AZMZ>H3?&x%x-JdHSco1^Q-iq5fqsL%$zfWatJiG30_v4L!l- zhB9!4VGx*U7y+&{i~?61CV^`V=Ym;=3&6F8nczCZ9B{qib}+|qFSx;QKbUJ+0d6up z4sJGhz%7PmaI4{EaGPNVxZUs}xWn)<xXbVjm~S`)78rg33k}D>Jw^#EGU~y7Mh94I zj0N`_yMhK|DtN${2Oc!`21|_tz%pYMSZ*8%Rv5>FmB#aFcoBHScqy1-yb7!`&H|0p za#(GA0jx2;0oEE1fX9r#g2#==!4oDKJZVY;Pnl}KI@2X!z3D!%!L$iHZTbv6V>$qy zHJgFQ+yQJfCx9k%KhSI*3O1SR!E@%>;Cb^ru*JL(ykLG1yl8F&FPYbam#Nl&)w~;Q zGam%6nU8|k%`M;!OCosHk_xt4%E1mxKhS6y4BoX&2Jcxe0PkBa0Xr>g!3UOiXt*2f zvU~_Wvg`$WEZ>8Vtr6f8YXR769S=UWUJpLAJ_0_sz7D>y{s_Lb0q~VAj)uwLYg=#d zjja^yw^e`xwvpgF+h`h&1K-=GgCA@+)9_Ak(Do=eWZMFMvV8=8w(SAG+CBq^ZC``m zY~O?5?Pq~M?B{_$?U#ci_Upi3_8Y)a`(5CeeK9z0-w00FUj!%ZuYeZ&K58Z$g3x{p z;)qlTA~GO}$b(YEFsO?d3-uA#LqkLZG)6p5!>7TY5!85(cpq9KeuUPDBhcn>K)b^U zosMW2=~w_=js_Uz*aV{;pTHQ$aTx3D1mm2QFy1)=COD_la0cw+oCgz~D`1jyB}{Ry zhTWVVnCjdD)0}%@hVvNAj5NZmNDIt}jD*>dv9Nn&5zLL84)Y>!fIT7~ggqlS!u-f4 zSQz;{EQ)*!7Dw)ZC6T|t-mW}Y>MDn2u3Ff~H3Rl_T>{HpSHTL`B3S8q1om^Sf&E>N z!-1}6;UL!wu*&r&9PIi94v7M=Iw~I4M5V!@QB`nQ)NoiEbrBpMbvGOtwG57kYNYp1 zz`Cf7a8%T1aCFo@IHrRE)^~`2V>|SK<2sbU@g2^96FN+V6Fb}n&*-oaPU`S1JhQ_# zcvgq^;p7gxU`2;d;MpBMgXcucaB6fEoEF^?PLGa*=SQc&3!-!2h0(=uM)aBRqUiJB z#nHFJOQP?AmqxFLmqou1uZaE}ULJjb-XDT9qmRHV-JRi8?i6^ny9!?89u8-@FNd?; zv*ESw<?uT9YIwc-EjY)$6W-wd1Kt>;gL7jX@TQo~@aC8_cuP!oI4`CI-WpQ|&xz>= zZ;u%W?}(WU?~J(=-W78toF8)yTo7|DTo`i;yeH;vxG3gPcyG*lcwfwWaB<8h@cx)% zu%RP{OFAaN2RfF+r5%UD2Rn|T_Y>i=j?>^n9p}U49T&rgJ8pt2I=%!~cKjAT((xdC zG}aDR#YV%%*kZUkwgRq+JqNChoe3X{y%9bhdo#Qv_73=D?0ooC>;||l_D#4xb|>5r zyBj_o`#F3j_B;4&Yzy>s>I^q_N`+0G2Epb|wQy6X8E|u_#qjw~kHF_TJwflEhFdy4 z4`1l?4SX?94_}IlgfGW+fUm@LhOfqTf!pGe;cIbS;ahR(aC=-K+z~edz8$v!z7w|^ zz8m)vd@t^0_(9z3a97;daCh7Z_+jS`@T1N-a8Ktd_;KecaBt_c;b)!Cg`ao64So@i z;Fs|x_*J|cejT3(zlqO;-^O=``{GOB{`flhL;RKS`}o=LVEhg6yZD<Z?N%CZKKv<u zHT*gLCHPDH+wj-;1MqPCckqw+L-5apx$v)qJK@oU2jH=UHSl=CI(Q;sBRrX~6}BY2 zfk47e1QU)S)WwBxm(GZE>4Ky#DM;>8hV)$~AVZfck+I8SWa{!1GIx0uS-R{-)-L<# zv+t0u%TF}kVPx;}2XZE26q(o&xe^OdRN@HKA#pm2PP~m?-$`i;=(9x#BrZWQiBF@B zi91ki;vUo~@i2-@{0$`}{)M_EA(WV8M@dQ1C^=~X>YCJmQj%7pZb?s|)TDJNE$KOw zo^$|ZBpXnAvK^%)N1?3bY?Pfm2z5`cLpjMaP;T-?sAux!C_ni|)GK*0Do9>J!)2&2 zxfvBDzm1BMzoFp)RFZrQ^-eyCO1dIc+BFuHb<IG1x@Mw^uDPhPYai6F>lLVf*Jsdx zu3ON+uDj8o6odw*7|?(e8>&j_hlZqFhN@F;K{YA2(eN%bG^G&@OIeLZq&$H}rff!a zDZijm-Llc>ZiQ$}w^~%+Z8i<(()-)c*lt_V_-;R;38@H8OqFP8Kxd?OL6cGw(d5)_ zXi926Iy?1zbWZA8G&S`ZG%a;Inx1-uhAn7nnuN|xD@Nz1or^9=n~g3^yPk$~(TudE z=%Tb`=+d;6=(4o+=<>9e&=qN)pqXi((d%!~m1&32Rq5T()#>$UR{EJ}cKS4QZTjWt zy7XD-`t&={ob;#A4e8IL8`ED!bJO2LH>dxAZb?6Z=4IH?Eg2oqtr^|WZ5ahLEJL?v z)S^2xCZjtt&Y{=mqWKx;p@kV2p?fl;(Y=`o=)TNuXmMsHx<4}yHDvZc4`fb74`yDD zmS$dymSxUE4`nVy%QNpq4`)7%R%E_`R%X6U!(H^*CumjXpQthOC|Z>T(dsNWT9cKG z)@GHV$FlmMC$kQqby<I)^;sv-hHQeK&bFXuvZK(m+40DeorX4M_dreAy-;&@1=^H7 z4n3EB6?#5<5!#adG<qTXEwnZJ3wr-GrSC(Vv%jNp4x*Q`e@3rnA4l7|8_;Xr6VU73 z%g`I$FQMV(^!_UJZ1?NX_U?1hj_!-mJKdL~ce}4dZ+Bls@7JRDy1#_p@4g%D?EW+Q zp!+ZA!|s2ek8+lwk8@U{PjWV*y*XRar#Ww;&vHIMpXYptzR39+eVKC*eU%%JzRpdi zVFvm%Hy3@I+Yjx_twH;9Yw7hEbRhR4^j+>O^nLDq=!e|J=uqy1=%>6&^h;h9`ZaGN zI-EBZ{g!tz`aSO&^he&c=+C^{(2=}F=&!uj(9yi@G~7v_??K1&4x^JjOsJ(t2Ml`T zVAvxUlODaW)T0E;Ju0xS#}C-h<2P*VaT1$)>an?}30r!0z}BAe*w(WTw)d>U5k0H1 zqvs6l>^T!h_MD5OdTyZC&*Ba}pTp5T_u!bGzv7Ph5{}6?V`IJpcgj!0aru?FbN(<K zpMNe+$UhG!<zIx8^RL2P^RLG#`8VNi`Kxeh{!27`1E=M`i8J!Qz*+gf<LvyCII|bV z-FwM6qn8Ee^oqi{z0z=AuS^>Dz&(2n#QD7j({L#6)oVH~>~$k9?lm8m^m-ci?)4Ea z?ez`4-cM;i;IaZU?o$v)!(`mIpf@fr7>+9nrr^qgsWd#7-d~9O70ko^3vR`O3hu&H z1&i_Ef@OF}!K1jk;4xfN@CqJU@CF`M@E0Cla1@U$1h}ryhDQ}f<MD;@ctT+UKBF)N zPb%z<&nz5_&nm2;VJ*F{!;=eV;Ij*F#nTF#@btn@@wtV+<MWC-;tPwC@C8K$ct%k% zKEJ4x(#r8gMdR_sMHBF4Md#zoi!Q)3i)P^~i)Q1ii*CTz6y1(z6)nWGi<aYSi=**% z#R>TO;&eQxxF^1$xB%Z+T#4rvkH<F^UyW}rew2o5@h!zq&~P24KSSeg!nYRh#J3gi z!*>+_gzqf=72jU`JH7u4-&G>v`6Zq4f|73d?viZ0u%rOrQ!)`RDw&G!Ex8ciS8^3z zTrw9ol-!Azl-!RWD0vM(Sn@i4sALCTUa}iMT=FSiQSuF5S#k(JQt}giw09T0s&_9M zmg2_Vlkw`_m*X|PXXCZK@5YbyUPQwO@DshC#838KPs3;NQ@!87>w0ge;k)?h-rwP8 zdY{CeQaj#Q>cr2MM&V~lV{lVxB5p3t#+yp>@#fO;__@;a@$;oK@s`q6_=VC&{Br5z z_?6OU@vEiJ;ccZa<JU^};@3;R#BY>E;J3;gct=?Re!DCU?<&j1yUX(Mp0d99<FaP_ zN!d$yZ`pSIY1wZ4S=k=^dD*x4i#|5|RiA<Q>po-fmwhJCa1sqCQ~FfAx6cLm+denr zeSIFs-}QL`ALz3af8S>}-rr{rrG1Kj=<^-^u`kAl`kL`ieVzE{zUSdz`d&!GOYm=f zFU5cMy%HbkI|u*OcOE`k4)C#Z9X?*}!Y9f*<CEp7xTQRUfbs%@%8LmuFD0aW5RuA9 z5V?FT(UnglhVqMvvHWUcs&El&MJkD`$RL)AY<i!EPgE3=sEXmFL&e#|U2!3askoR# zS6oK#uOuBS=91WoWu#NZIucj$CW)_jizHUOOOh(~kmQOlNY{$}B&8CNZj};At?WtC zEAvTaWj~TtSwnhOjw1P$qe(&KJEX93Hz}(8h7?yGA|;haNbkyHq_m%ol=U-`KK(4D zZ@*|#-meR(=$A?=`}HFI`}H9M`VArj`|Tlv`yC{;{eC7@{SMRnKS^=F6J$jHC^E8t z2^rmgC>hm%G8xnV98%YRI;CAe>ib_s#`eF5jO+g>8Q=c}GO_<wa%TTm$yxp1CX@T` zB2xxbld}iZk#h!2BvS`WBhv<4LZ%P6oSZvg4moeYJaYbk`^W_YR*(w^JV|B@I7luY zXeXBroJX!4cssdd;9c~7A(=YxescA|_2im?uaH>-caYfw-=*PBdjBE0cHr0Kx`8Li z^#f0m8wcsg+(AZi)1YK>^Po&}%b@OL-k>6K>!1p9+n}4t9fKYscMfVIcMW=%%pbIq z#@j>g9<+}vta6cis^VyvL>5&gll!aENJCW~SyJ^Fd7x??d9bRPEUkK(EUVf<9;$km zEU(&29<KU<tf)FnR#yE%9;s>}j}A^Gs|IJ0#=(VT_2A)T&EV-Yyof9vd<A)I@B;Gq z;I-t5!5;GD;CIPWgWn??2Ja?M5B`}vGsH-q9g;*mLrTcTA$6o_$SAUD$T+fj$Q1J2 zkiF#jA>WfNLw+SM3~3=-tM%l?Y6p3#I+na#-I=^nolah@E+E^g%gAfhL&@vamykEA zuP1L--$mZ4UQD)EKSXv^KStB6C+}3hN#3n~pS)MShrD0CkL;{INIs}OL3Y)|lif90 z<ina?<fEE0vZrP+`M9Qrd{Q%wd|GoE`K;zH@_EgC@>R_u@^#Hp@=eWJ@@>sVvajY1 zvcKjda-e1p`M&0B@<Yw9<j0yL<Y3KT<foyS{5&*<{4z9?{5o_vIXv_-^4ri^<oBVs zl0SwnB1eWkO#T|Wn;ac_fE*wCJ2^2dnY0WWCV^q+N^sZ}5*jvBl7`Ka<Y6~Sx?u|? z{ji55!?5*|aoASLH0(vmGVCqMI&7C@8}^N4AND<+p8g;?haHh3Yju*V)*?mKTBYdP zp_03Hm=s%ECv~cwD8<#DD|N2DNQ$qWDJ9fiD|M;8Q%bD8M@p()Bz3LbCZ*KACZ*MG zm(pu@Ng1`DNtw0ZOIfu)OWC!5O5JNuN;$(VQtoi4ls7z5>N&i>ls|lcR5*NyR5ZL! zDjq&wDj9yJ)O+|;sdV@>sn75kQs3d1OXb5~kSd1nmnw(<CG{JTC-omuEDabjQ5rPj zTB&Np&C=iz_eeuVER$+RJSGht@r5*O#IMruk;&4Ck)_hek%OhWk;A1?BhQjXkGx45 zGx8p(e&oZ_*pX|baU-9V#*b{0&KUW;G->2E>CC!P>8!dT(&V~Jr73l@q_gX8md>eL zAWf~iN19gmkTkunQ98G7t#n@9M(O;zEz$*bZ%Y@}{UXg6)k(T&RJwHWs2<WKqe`Sp zM@^8<9yM9IeAH~|icyQDnWI)pSB`pKx@y!GY1XKhrP-s4rE5o5NY{-XB3(avlr(4b zB<Y6HlcgI+&yePhzEZkr^aIk(qgP6|jNT^A8~vkn>*%A>ZDaJ(?PIc}JI2&XcaB*q zT|Z`}G=I$V(t<G`N_UU>T3R^fgmh1R2We4#w6wUslXQQ5n$%EVAuXvNE<I2`MtZQm zURqXvi}X<aJZVM!ebUPMrP3qyE2Ky3S4*qv*GQ}DUzOI>za_05+d+D4Y_#;m*ktL+ zvBlC;V~0!Y#*UHJkDV`V7`s4vX6#bw*|94n&)6N(#<6cp&0{~5HjmvWJva78>G^R{ z(w1=@q^;x5kzO2kCk+=!uZ+7_dUf1NY1_E<(re=mORta5m);oPM|yMoc<HV2Ptfog zdcR59K7NO^WBj``{6Knp{2}R`2^rG66M9PTO(>P#pD;k$IpHE{*M!HV-4hN-A5Jt# zJ14qn7)!%M>7$8B(&y}OO4BIVMSmG=A-9s-fK5LMImzwh4q!DO1*zmtau<j+?*`Rm zK3M>q#uw1dBA(HM=F@n01FJqtdXX$7_W+%~hqRI`qE~u-FKIcsm)r*o`hL<vvY6Zt zjFt<)xuk*SY_fb0N0KF!rnBz@732Z(Ac(Nv1(V5AvJ9B*i(xD;!(x90{6roi%YoH? zAso!}Gub{vJ;}pl1<={PN2z2bc?9U~XTkO4QChCSejZ#+R*^<vbPfRBL=7AZpp!q< zIU1mmtfo2ZogRpIt#qzOP!3r`)&i&NSrpI9jqI=u*vMn#ao}<-LVbB}IHIFyX*^zZ z3W^r-VsxND#EX_uA$fv42^=w((*EP|Vs26TG%|LknqSOhl*oI{5&Jo;;7=ps^dN>m zb;NFf7xA?A$hQpR$WyF-k$Vi)w5IET-j%06OxCkjy2|z6kPY<8=&IH4B2UvRlWT^4 zBYB2inO&FYpW!XHxUSMaL7rt}8CM8y6YY&Jp=0>~@c?stEVxwkY3JME8Dt}^i!L64 z{k*UA@h0#Y?@2?v8@x+LYaK8q9D@y{i8KRy7Z<#aY$BUML?Q-v6Sm9Dk+2=U&GWM* z%taT89#6OvP339z2@jxp-XcT78Z?;JWed%39jYWR&~i-)8&Pkvm0p<>wxS-qTuZ_m zD4o1WudGSWfsy1T@-na_JqWJmWtfu?ypZRtOR~dBylwiVXgG$vLUS=BEdXEe8W@ur zz=u3PQ}T^qt>}ZU8^IW!i?M4TI8C8l0dqymyFLScBd@Z4?v|^@OWCZ(OZi2O*DYI( zm->VnFEw9{mwLV$FLkXNFMS%APPUQP=+)(5Jb9gtxiNhfs3UKXH-Rbr4$zNtggI?J z+$7{9?GT*J`%0hrFz7+vBHMu_a}F3Q`XDnJb`$-anE*SBKFI6_qsb2PHZWvP1$)Rl zG(ThJwcsVu2iX<i2|8NMz?yv=%;qC#?QQ@U@e#CTyWu&4bLiaJAac(710EAK$T|Uk z<D+HBCh#C1En~I?exu|Z1wY}VWzP8;4C1vn<s1ZMg4c3h1~Wtt<tzh#iJWs*(tdfD zNn_4dWsD4Yx2b9K7O83T&Q;UqRf0nzZC({PK;C1rpEnh}CDQhsp<+qT4&ZlzB|YQ8 zj{-}2R)ZG=mh|`&b`*TyqZj2hjwL-RP&a`kJ$``K3oPmJ8=NVyB>yU87o(bgJ?$6P zyZVB~aGRhNEQ2p7v`1kRd7t%t!7Ef!c9IW(vAB}<?k=($Sc;RtePY~-Zl~PN(-tj6 z`66x6a#{m6T883ixK8kHaRO`<y<5@^EGHkbv?bY~fqcZqsH6Za;BB*(?1t}&{7OEB zZ&EJV4fG}7z?TIdlqQ0?Jf5*M8(hhAF_q?ni+L{QvTwl+yneQ_SHWstKWpi;Xp6|N z^f|Oq)UWhqv`)0GbT3*g+E&&V<?=e4%9<(1vO1f~UZPmc<+raHOy#9n`#QlSUYf0Z z1aOf(G#7h$0XRmr3+3nXVsM0f%;J@o(sBEQ$GezvEGxrael=(&d+Aj~c{EHA{nvL6 zsuK0<I}cTe`jrFtmKe8k9ejm+N<IU|au@W7{_EF8Dc8|Y2Y%+|+WHy6L0+!Cp9Or+ z%Z=#Q2W;f!I{FO)Px5k|mHT0o=$DE;Xul}8;tTYJD7Rui+9Ud<5}>W*bJj1F@4#Pp zT}+j`;rF~Q=E`s2UePZD=D-MAgSY9`JgSd)%Lm*Cj*FHLSV8N@TRz}P@QrBsfP>&s z@&&E4W5AiPm*|83Z=>#_F8y~=&BW_6pjy>~1M1)!@+BMd0TbbJ(FcQyDCaOeV;NLI zIp-@@?x1Aa%CE^cz+B}52J$WAt3f&#CvqNSR3t?|XdjiveKf71YA;wM<g)4qa1)nR zOH~WyCeDdf&w))swyN^rGLcKwW3a10!m4$21otx@uWF_!#bv8H9bC^b(Og|X^%28F zOLZAIpJSr6dML$7Zf{hZz$%e*^&W5uPhqOw2hQdx%+&|MM4rM@eFD^ox(t~@^#`xP zkiGC}QG+4h!$-*hR)cCiyhYSt=&is+z9ZiQ%h27xA<&{`Dg0QZtyv3qkRRw%ea%L= zmG<9Vz%UfU%V-ULq-kT|1agp$jA>{ltRjc#m3i1r6p?t^VGF?)k#^WaV7*8?>@C`B zJZ<ensttI&+H=7K-XeYNOfZc6L{Z96yNk9`JpJDL^iTEah<lVe8%KPh)Y&+^4owy* zhL1<%MT+4w&>-?NEzK};Ft|WyoRP!9IYQ%%JPV8x8mI0dT2np>bsK3v^HHeV0v-~h zQ1>>NFGiv6I?9uL6h>}?M?`6Lr3zx|>xRHfMDNzkg5{!jN6&y+<QMWQFpa*FT6ny) z(L<^I#}R#WG5k~@`sfO{iyUSMJbDP+E)cywjgBhgSY7>n@Te%QeknXmej~pF{n%u9 z9)D^WTMX;SAGCLkV?U&5!FtFvz7Wh2H66DS%@JwGtw)zq-u)Bk#~r3tAD5Kz`S1|e z&c+EnskM28J~d4!1^dWf^vXP80Qi&~rB@bqM7wf)JG(kYjspm!iSgtFl?4RM6W!z_ zX#p5GCORb`K|mzLj!XxAgl#QhYBO`|nOzARmtI+f6)O>H#d6zKl7Lazsgg`>K5moJ zc#*>DWLLtjWLLt5q*oEbf|GRAg5!3Zq^EWkx2`0EYF$Z2)w+^Qs&yrqsddGzCdopr zCT=T9R@D}vIh%zQL9Y}mLb3squmot%iX}jERxAOUvtkL*oXtYROLkSmOA%DVbImO| zRL#w3LQAvW5PF#PhS0vOH-u)CoK!P%eJDjzeaLkmO<@(<jnz+RBO1>nbP$ba5xPKf zsk(sGUSKk%DVR)Y7J-*il!}*92Z~@E)mRw<w`lJwxJ7%{D3FPbr9d1OPoRqwt)h$M zR?$U@QPG99QecYIk>UbJ2zDhTn#NNknzcyCCmRJJfvhwkW2_7zW2_7zSuCEAA}Lmt zBB>KFNO1skeFy&70=EO5PU@_a;&oDjPU@nQ5_M7%1i;4s+1vBaatwTN3>=P*J_cq- zw}4r|8X{+%luZBApsP+wVJG+=2hlpI+i_5#lTwd?E6wpyY4Pz<QStGHzd+m(Ae{tR zIw=jp6L6hQO6QTv<4yvzPRfArI7re-nMXlS8nFc=08^_a0?-03U@2RzRX3ogkLfin zm*$>L|I?f9EmXEoozxI2DZPnlp%@Xmr;ovNT0mv!hq|EbST#aM4OQu+V_-xJSQMt- zIXWqq*FKNd!r20<f&EnRbW#sG0+?R1flJd#J&yv~{V1^oObgTbzSOj-U`+UaI0^H3 zyi|A;r2GZ)j)MZ)slAf3j)IyNumd<kW>0%PUkrhFAi61>bpj;wn_kC3CCxS~^>X^R z1#|_j_T?lpp=kl4e`sXs7#NpE{~ZCHIfKUPqyoyIthhp6Tse(*TBQ}R(h5VDb{x<M zMfMh8ZC6(mu&&_Mv<W$4*`)Jo(s4=cd|LHPWA#jLtyhk-;^-KP4jITgWR_A;dupE- zP{v>2LdtI8nTSb}K6L(oC=x<t2!)L#sgWq51w@67r`N>uie~t14Z+dr)lpD%3_RQd zJYgg>RR|9486lw+z;dd1^hvn7wJB}riv9&Uv?{wT;Hxm;k<5pc4sJ0oDwP+-04Fl4 zk4`G#=wCvwdLL)%qIV0pEewBz$%v+=$-+T4IjzjXfp`muJFWaep}75T%L)B$9hOAF z<yzoue{MRdG)yD^#>~*^W)`xkM}YAtkWRtWjbUU)l$WYio)uxN9sj60sVq!K{U@nW zn^TAEiobxR)qXezo@)WOhEeZb6|`pEm3FE)#9MrKR_jy5mVB`}R;C^S_y7MD39d+X zSgjM9Sx%+W{FtK!3}$#3x>m(uN@yiPm_kzi`-L0>H?@GGwj_gXE-19NYynCC6MfdL z-ED#GZ_8gme-gaT8IZ>6a}o>@5DT40LBC^Qa%=GUQTQ2Ppf%8`1>DUn#<s+!$R1wb zw<C{mYW^rlI0oi%?Ql_R&3iBWbTd`a3rE3N+DAuN?DxaR&eg^q&11jvKQd=4Xw#f+ zbZec^KRiqI2{%fuFngb{qY~Kyy0@0j-*9iW2-%O*Q+v|Mc};8aeIT90Aib?IW7<+( zQH2(e-{x#vZJK|!e}QvPf?nbg{oe;32fbj|7VtxOMZ@B?T`h^&{%R?_AI6&iiv&e2 zK;Ooi6zQbCEaPy_sur*+jIAbe(%5Q8!JK1Y%1Kbq=CG+oCsUwdJQ6^lUODU87ElI^ z;YujiaxM&DcW{by#*pdYF;JQ8jyVZdF_#Ezt(G|fBOD(dOx1o3uwGNbz({a(T4$}O zarS6WT8->==jvq|lk3oWA}EJIzHDo<Kn6{3b4o3zwzHCqWiwj9z&3YJXm?+ycBBtu zDConY_am(e4b8PeVUd%dm_4EO$q4Vi(InxKVGxkCCu!iIb!%7ZFsjG+cVyDOc7*pP zINOy^DCX$=A2)|q!}1?jqkSC`rW&odHA7^g70lCMNTE;6VXQ2_q|5}G65(#eaUBYP z=bsXQ!$?<T8<T~Ru=XYoma_Kd5LVLuri|L(rq(2`y?KR}y1%1ov^tUP&PdDlr^zWQ z>z_)UdD*`$3R;caP6e$dYrle4Q?^Gz2UL<P=+*?g1uQ?6epDxVEnxhqU?^3LMISyE zz-TPzEsYK1)eM=8J__vNcBT&O==}C(5LzDEnMqhh^fy$d-CYt^9knwbEhnDdn6^<V zrK(D)HO`F=mka$>de`0iG1(5Is6<2>hgJ;wPeEbZ(r6~5@CcZ}*XT3DNt9@RvRJK* z<xY_M!uNzm^!U0fecn~9yB-1g+;vmmnnQc;NwC_R&j~gM<qoa8kAVl>$*pPnLY}I> zP8wkAd=f0tNdr0Cu!Z)LG`6_ehJ?oft@^+&Eue3h*e5_|9(&Mnkcf|f+~XjMH!s3R zIsxL<D723T9s|#(b?!_naRj{D0=BiO-*~QrTEOGsCm23f9mGecN?D4H=f1@DCG&{~ zZcFt}HHIx<!Koc;C%`<NG??aTIRaMG?2dpK?g1-u9R*ox7Y;cFE<Dawzl&%+2XL_% z(7X3>Fc7zZbHZ132yfZ|>~p6l1sE>6HY7HLPRymu5Vq;7!{=PBS$)WAL$m;Oa_R(u zYY;UpU`%)?j*=|AzxI?VLmG3C&8x$z`)YL)LACfF+8LhJjts*2`CGA~{y$a;YdiAr zK>=w;DxZ=}VzMO#Bm_XJp=e<NP#Q{q!_Jm!rQrZcBgi}e$qfLYDYQ5P0C3(0^a%U* zI{2zu^BwjYc5PF>$xiHM^)p=T^IH--8dGMcUh3F^mU?>@{}7jsf5*$tzvJcR-|_0g zzvGq8zgpO1Xp!WWw&cq=U+2=f<P{*=ExB}A`TBI1K7)TMO9vZU_Ul<m5-mxl1<@>J zJu5~IO6~Tgb`x*%eRlUh@qtBlz-RVQcED%%q3nRqoT2Q1PxgJXXnS634bSv7oPD_p zvoBXsE7U@V?<-)Gz6Md!Hy}~^7F;jw1M_Hjm$V;jkq&^@Xt+cA4qhew0O!!~7U@U! zrWzPd&8_Q!UhGK+TYy1a!K=J9I^yasU3w*U=^Ej+(n#_+MZ73@3E#zzK_Wa`s-stg z?T(~%l3TzfK6Ecq|0^a+$CDs|-%xAiBv`6kc4QnUjZ!#ns={%%|5F^N;hBtPJOKm2 zGi_zL7%j{B(trDJ;5kjxGc`>QWV)Xy)BQ}D?ib2*zfz_<3~r_2eCapvg7iChgNE-& zf52;`BXBMaZ<GGgFrC6`;00h*nC==cjSjk(>28-sOJg|G&G9nb<zA+n7LMuagPAVY z$8?>1OczU;ZmbvP9#fd^oi;NaX5(mJ<LF@H*pZE65*x=%K8|`mjuCtuWB52G@^Q@I z<Jhx}FlX0kKWs=DPo|8g)3ah^g}2*^c!~dpBaQ3rv0P|7ah{FiJlmP`Y&_@L1j@7Z z_AaffiB{0^IAz=ulyOf|#%%%D%YdR~3%E;$;0+mp_i6Z%jNw*Ug0Iu?ZCMV1mT!2` za;pX{-|;f;J6^PW)yufeUdDaAeQ25CL(4rHv>fY2%O@4aegB_g+%RZ)8k`#zIRB5c zZreatHUOh+1W~dHB+6#WyB2UO4d=^N@TP17AJFh)*$!Wl9q=t0z9&0FfbN@K(0xe* zy6<~=_kAzuzV7AS=e)f8RQo_T!w0&1G@v_91zkEDk!T43*wfOTc%tUh!IXx0%Z=>0 z90hE02i}?}5nrt@y%Mr^gEUSWFLK2rnSo5(a?mRgMUwXDAXzIDI(nneaFZrbQ>14P zteO0Hp})tlXyq^>$#)o0Si_=~<hp?5OdJT~b&0XD%s5m>nXk1hWM39`V}NNA>HPw4 zC)V6J-rTOdxhcH4*}S>kTP;8zRDhKgU}FVzU<E|80^(T#3A}(*UO*ZzAeR@A*X9GA zyuvaHxG2lS0F&GiM9Z-tS?&aK<Ty|wcLoh|JXk@))p7y_`Yzy08t#`9VMjR$CebiW zPKLAOuJ9%r-Y%!WPvvfK9}Rz$Q#t$H4{V@85gZHnNWFp`y;rlmSD$+0QC9Q{*g=J1 z>6J8rY-j9DuO`wf%%9#Wox$e!@GCBU5{QPoxcJE+nTjM6KOM+{&q<T$l^&G9_0pN_ z#XT;P<AAXR-0pJ~dc7k>{{Mr`qFBCZL%pmBaY-kKXGxQ(R8k3Be?FDV4ggHuo9@A9 zREsY;*U;-pMTGu6vq++U&nlAL5<i}U8X>e)l+VBREk6bTIYuj+H|N)?Td9~k=3cS? zIvT=T4E;yZF`RdAr97L4T^iC}N}=?hHZ0wlNz>S$e&UNCX?Xv}Kg*WT@QUWei6>~d zw|VDn^f~-;)AZ|E`iQN2R=z;Pb6(l;=`Q*__w_sG)1f14KFgdmg3T_z8N8F;!}Z_n zx;u}?t2^}e`zz`5w~iir<rn&V34jaM0yY|1atXbE4s;*lr1vvH&T3X}0>~|yK<T4E zem?DVbS3CD{Ck?;d*t!X)SSST(p8oZDE(GxPySYV-y$72bPr9pNgmhxLK^R3`Le>- zX!wiyjt{<~@jf#@`db(Je5AGF6E}^Y7m@PVoy;JOe9hILhC5t|9}c3=55}1Lx6tsG zSo?FV+#X$)ms~*OZ%&&0c_j@Gb$eubGz~w^nOeJwhTHotS)4@6d2z&*PgK$P{YG4U zS0fD*&+69aYWjTbWXn`a#|@YF+_8`5d-j#qQM6v9!mV@Aand*75jbDph^y(nf!|jU zcHf)c8~J^n#O^ccy@}r^%Iv-qy*KlFr;goIsB&2OJ=W8Ebb{X7*gZOIX9>`clwjwC zuk0)Z`h*f9IN?1zPx2-uI5}af-M|RVl;Gfmr|d>XSWO9$oUqJpVuZz%;NpZk?Pf-} znG&KnVV2#(2$xer2TnN8Ze@filn~7cW9>FZ7(oecP8ejjGeS8f#Bf4^J%SN(D4`=K zq}Uyd5KjrQoDgMqGJ=f~I&lKUR7!v+DIty#;BR&pBOIiJ&YbYIJ&F<bQbIf@yl?No z2yanB0w=s^k7k5Tl+c9}*4f>Ru!a&6IpHCD3?tl62}zuAm%Sq++(HS-oG{xS%LrFc zLRU^W-`<H4&ZdMEP8es8V}y~E(2WzS?422baYia96x!n%A(s-;IH8+8fe{iYA)OOC z*t;--of0xQLAEDS0%)OxOhy2|+mjgK5G7=B!Z-G0M);HxvN>U=y(=SZr-bgD@RB`+ z5jImo4kxU)cVmRLl#t5_%k8O*&_D@!oG{;>#t8E$p$8{iYfoo{nUv6z6E3i4Fv2;M zkk1L@?U{^FM+v<+VX!@m5ddC5p}#6Ap@0*L?AeTvM+t?TkZSMF2wf<lh!djiIgAiN z3B{bCv*+gPUHY}$XgTXKApYgj-(D)C=h5E+`fFl1#$=oRC`O^jseBevWi|i+lSF?R z^tTiM%P{);h#Eij0Jt6oAe!bA{T2Z3cL0dl2|&je0f<`%Ko^=%SBhzA7Xgs@EdV(b zck@;Q&?AEW76H(c;za?)#6p^X3B`s!6rU=OP_t|z0E5N@P~DUMmH|*}raxNs5!C>U z90))it=lMyabu~{o%k^TXY>N#%o!W-WNOr~Z~srp672-c#-pl+%})TW3n-?)a{8lq z251|=X!Z&?{ar?X*JL;h>{O);N0JD-i@+`dvj|)~P>()1+lkNd9q-^Uia3!hSg)-P z>+fi#E=Kx`$Z+UFMxy^ZYT`w<5--*-o)b?EiYPjPVmMXa0GO5W?yvdvp}%zcE6i|M zMcr*8u!w*c9-{0DW*;kM$8z^A0EtQ;`5m-iXo7t+J+PdeY>~kZkC@h$Hk-pVh0Y^H zTWs`KrrfK)t2Eb_&|d*-V}>I_w8RluHFo|aIQ}R*{0vWb;&U~_m?)AsHGL3VX$*aR zz>barcGeCW2Oi;P2jOOzhuA^LP53+~KHqVf2Vc;HFU+Ssf{To4Zh0e~!A^G~|Lk%1 zzQded27BbR6>yUFJm(SWdCpK@WMfgt6c&j+%2kiuq4QAhK{N(&CNngOLpziMZtRZB z#Fe!$f;}~fvznZ4CoidiLY-47#!?jNj`Tol1F%O&uq)f-!iYwYqbbAA%Aijo*ij46 zq1@TDB{sG+Mn|xd$>KHXoa{7_h|m?&M2l3K;A(<V-otv7ShCyf?Sv`*=afb($=u2* zrFM2oDZ6h1!^D)Doeuq=TMjsCvLibPgGZqGK0+Z~ws&VI>)?z0PZGlyvm<V4(dr?$ zN-7#Zhn?dLV?)LdjBQem@NpTYiNeG&KJlRon-q{-MZ@)shYjjUVa6cYAS>A)<(IC= z$V~z#P(8yx8s0(E;1seP9%o|E^EC<}O8Fb`B_1@$i7)k?lq61~q45fq2FJTBI3B*d z33Xxzc819IilFE`<6HQ#HaWi7GkNSQl`{(q_~9y7g-eUCrtsE;uW=jPCQiyA9z3f7 z+#Oi@Y<@_IdZ4WnU+b6ub^iGWCceH+iSZn_5qt0rZX@*I8~NY4svZl-@Fu?uZVt%) zmey-CuhqnDsEyl5JLy(Mn+9ZlTToBaxVMLndq+TA1+@Qf@)hQMwfyhoD}GLShA-`% z|6Mk_t6gjsSh@NCDc6NCKw>oZhckS%khU3vu>}p(I+uJWQuX2qH=suz1sP3Xdxl~K zDTpazvg4|#ZQ#Lok7gz#UKm^;T&2O$LZw`Wrw+xIbJ93-lzL=1q7)m4qq2cHr^FH4 zE^6Z3<HU<p6Q>cRv4@A3apUJ+C%(^T{BWCgv3l>O*2)MEzP|~@DCa9Grz$ppFTF=9 zcH{>mqgW;x<_vap@smry3vP2WZh&AjUQ$m>S5LC?*2&<+53nPw@Pl-~X!odxio<et z3e!^W(P10$GOt#8NSyoS%V9as;bA`TE0iR7<p%tS2S4h>tN3*zy{5>qdNW=_E3(#` z*<)I+q6s(R$36H74}Q{vpK5IBNLAd60mHT#udAn24_?0!Z@|cdpXNNm98TInV|J*d zj9IQSX6G?}QO3|ke^UVSBvU&z!_k2cS{n*e&aBIDL~Cav4tE${MQl!kMLke&MF(G? z*r`cvuv3MJ>b2jQxz_~mVMk)p;m#08egBh|t2w}OrE_eb<qEFxTCVp8Sgv4fYjzwz zO3|j_3t<^Cz*)i$UW1%#;e-5aFPnM_z1PBPxh%-STN=*7d!`*09-QTb%i3z;<%Y2E z9%`e7=Z8&A_}L<>;JaWBbz42yqoPhQ14_jT|1thg6nqEQD*T_OB=ak+h)VQEhB!|) zFt07WYx3ac2C$Z2dKuH$2$G9TJ|(f4YnbN(6lfD{c2RZxywKGQ=Qca>7T=+UCJ%mr zofx_em>A$}^~QP87l+Y{EaBSEB-Cx$h+m3;zi}{N)qL4k<CjmX#&B~hHGV}?<5$Df z_|<mQc>SqiK$)r9WB&~+phYG>=L6M5%hiKD9~S5Pt|+pyU}cew9r4Q`#7?D{Uqs-1 zhs(hZo29eh&2GD*=hzvY9o-Siot<5ASb3xo5J=~+cJC9r^5jweB$DOjn=VgrJ71#% z7x@~ync#MA18-3nGI=9W7=pKZQD_xIA*Tm63h~tW$u3;2JYC~GP|^Ent@7wGjsog) z$@~0qq4j8&uvkxUS)-u#6g!@f64uej_AC$hgD0af83~_OPMn0#a^UlfXo4G?!15;8 z!~vrb+(sFf&A>M?-gULoD8}$^mj^yCswMja(l+JkmN1Q?k6!R^6s?j{83DfzI>GMS z8vGhh4Zp_l@Vhl+{J_{&6@HDUhF@ba{08GF^TVn*ie@YNJ5ksVD6Q>!Tq_txW?8_O z{#nmckp8|_tG_Sy>hG5W_4lwq{SD^@sBaH^#b0?x!dF!`evPy7>)tNsTKn4np4NWj ze?n{1@eG($yhee}DpbVlPW*=E4B}RFgO%Ev5#V*M8#IbN(82}aHqE@`97V_9DEvCy zx88yNGE{}f*I&7f{-&bxG&4ls!?#*{xLxy5IOcs5oe+NFLrR^j^tWHRXTK!++w9j< zPP~JQiW9%BgzqS#^KPNhZHT5C`NJh3op$4U-cevv_h{zgbmI2|&N${N@Xics#^7uG z5`ExHw97w{dKk5VPE&RVIym0rw!()&4vv`r(LP`vjIe$1QOG{n6QU13_9glxd>`x$ z-3OnZMjw2n>4W!_`;U}9c=qq)gV25OnRlVcm*{g}qA!9HS^d&D@t2xaiI~uKHtGz- znh0BqC>Ama^OSZU0er0lKB?H<mjba4^}N<g0KfBdW=-e4{Z&wJcNP=X<(bTw;^|g2 z!-LH9>CSFeDmOtneI1ljd`LgVqrpkP2}+s}yu#!*s8Hs?-v;KeFVM*LPs%*d@^a9# zU3KWfXD$YH0VycOxj`us0~?H_C47qG!TUY<KocAhiN8C0(X!yYehBmnY8v}vVB~}T zk^RQ_H|DzGyJ3X8Dp~8UiuQ>Do#>+Pxd(?Ze<%87iMm2|$j7IYwNZmg|4GBYYUMWL zpX=SmjrbQ2{*}e@a{poByu-ioL(G3~1d`)2K|<eqLL6Nm?AO3EeSQsfZGp=(n_pTp z9C0D$l?;iV6&(=N!+!*G2=6sEm2ew<a|t^Cg5PbUQvov%o&28P@ZJi__s>8s;9~7I z1$NO9)<pqn{}Mhi7L9e*QcchJIH8S}-%;-}4fA1qS7cJx?P!a(QO;)#L)84JqnNV^ z9|NEn-iN>@WMNmMDHp*p&9I*4563pcacmXLEZk;_2k751F|@eN!s4{ze4EQgEzVeK zOwM5Dx@vKr#cr6z3CfD>EDAL*V}->@XBBRXm*nR$a<Cbd+paY?oyf+$Lw2uY$VN@f zJE>8Zr7<xbXN9vckGE&#ufmD!YOxXQnf)C5b@sd_(7y=`5b?~ywv6?+Em2$7{6fee zS*P*ssIph9=$Q1-G8o#ob8YLso$06W?WpR=Oqr57NKOPMJ*iI80_CR>+~V`s%xc|V z(^@T<zb3F2Edfah2v>`?dti?KO9aj2=W{VLfLy_(kNI4zY);37(C2)?`4O%Nmyrn? zT+2K$8lOwBXGQp29Nu``ccbySI9Xm^v4tbt4(4-la-Yi(w__XF#N87S;e9TSFg_RL zRGtR=Tu`L)D2&eqxqLnsN1)He5#)1mqNva=7N_E3iPW?qHk6AcGK`A_bx@uLyI4dU zB7<El-pU9di-3(MhqnS`#!~}XI1kJ1P86*InL9L)S$O3X7t16HXw1jb*$Ze6b?%<f z8hGJLH1<PUfPXqt!LAU-sase(-*{&%AyBSeR))s7VC!dL>`wy2T7b-g$Y|AoP>X2A zjA(C5+kjL}D2BC2$@yPpCImXBI52^^TF2B()iH%Sa>tYpZ@?(GO<4xDD=sQyu)*Mj z*Kms=Xo<;*;)K}{yr^{Le@Enga>Ae0vO9+sIg@HT7*B0Gw8@<b@U&L!ch^5FfBi$q zANtqHpVWjB`~<KIv)Yxte&&CPBnAkeSu23%wh5r6-2#~Sp9^4nRu#ZsPL!mUogB1D zFZOR+Lm-A$be=J^%rV!7J790@e<*Vhs{%oAaC}1kM<wl)?Q2!i*ak?GvWeHkHu3&z z<cdj;<eLZ!)4Qu?A`IQ?L>TJ%L|7wWM<oB1NQ0RCs{4JZMd`SV8H_~{)<Oq+ps3SG zccgc#Z=`ptuZu0}@vXiNc4eDf=wMrYBmB4ey8O2Kx<YLAb%?FLzI1%6ufuPvub9Ax zgo9|M5$e|62)1?CuHCvz=kF(X2S9+|)?MSNx9*0=fY4iagH{&Jp;6(qRPkCW_sbPL zV0+&dh<n(egz9f0{n<44(02`{2gFtBJCtkoUT>X7=$u6I5LxwZ6P=Ujy>32#cQnJ3 zZNTg{W_nPjaFjZUAt14_t%)<lWdqPVx-x%bidaNS7eTi`=u>lWsX18qMUh$$Q$Rh; z?P-K1AhA{B-&Z#AW%@5_FlTY4>bngB_WsHkGXH;$g6nC@dIx*|!A*Z<{#j=@GDMIT zX5-iuK<sg3dmWwJLoVnOlr;uPdB(~Z72IaN=1ALyzY17$bQ@JTr*Vl*ea|N3KFgV! zIz;~0>R@lJ4mb;V*ErD}(Z}dZ(Z@JN=uVK)p7r<eURb-=3p?(g+f*0qB4z9Ck7-?` z%T&#P#(7<&%A)*ijf*rgw2Kst7XTaJm6)JBohY7ay%J|Ak0yE0nW{tLEMcS3-2B|D zwSg=6XmS|;Dv4;Pe|5?!R`A1mTmx3~RR=};_TXvWvrt$^*&gQ4-)<A*Xb1DSsZWVh zvtr{mdq`x4BelJ7=L$fqC=FsIg+!43irg?P`a+S>R3P>Su)P9oZ@@}Fd^?}L9VVJa zYocfEqlKG%qRN(s#(PKyR)4&3{b?nR{!bFS6-A*0fo;YkeD*btRWM?Rf)NR)g%K3= zO=7&wtXBDyi8^n9+kLVzQ&~2vq-L;Y3RA_zLt!KHHVU35z9G8-7?rvUD#x2L4;s(_ zbfggwoNrMP$tn=Z`p+X$pqp4A(({UAm?P3U)i+EL$-$!d5NSR|B%7Dyhe$39_rUJq zTY=cpy%Sv{oVcxFlp{PwIYMESLyJ)n6r;-iTNo9-S+iK}_)u#my6r$R>)(iEY^E3y zb~kZ^*iD=qQoc4Rm_l_w?j&?Eo~p>%(~6v>p0+M#9W<LEXEVAM0_B~^e~9O`$`__< z-^Gkm9gmvzNrlx<Q2D_5jwW;+Q;gR)fG*1A9QKl>2i=e#!2;pTBa`wS6cy;x0r^gG zabrGPRIvJ~Z!c3h1DHx(><kc*xr_yPTy#?-h;T*n%bQs;bc<JPT#hA-Jg*TXdQ;xY zQbw@1dC+<6(xF*?xSjD5&vpYE)d<W%9Lncr@BR0b{~f2H{L!7KFEVbEP{U?^QPjZK zH}cpUp6D*Mar48P3QiKk7g?78E8_sF;jU+jT)Cc8Wc2QC;BS*rSRfr0nQM<x5KD~$ zw*j)m8q=WDDNO@1TO-HM3ppk_A;;tjMULCGr}e+8FVlVcl5M#U(3b)=tP~=BsA2nu zP(!OADQeiXsA2P>Mu38(sNux<k&HPUKGbk9K4G32iW*K9cu|A(f`g%kOI+NTA4O5a z?x$kCsNo7k4M%v?aQRRpDl}?DhCvOd4>cl#P{Y*<YDD}uQ6s!MzNcO4m}d~C1&r<f z6PPipFk=o2GmFB)48wpp4{rXOU?x$88R0FVwTTc}k<LoaD(Lv&Mr|O8_wbhjX;j+5 zBq3n`SQvwXnd|k6&Cak$uh<g9LA&3N3$P_<#Xaa=ZcK=U#QzO;M77qA=;K|$yf46x zfSs8!z>EcZu(434u@}mO$zWn%IiOIP;6KsN^pGxIQ@IhuhP4X#+ahhZIyi2Jzz?_U zG|dYo_HDd2ZL>6<`tMm9<^Qmo!ATNN*LDb}@4+v?_rA0v-9wV{4LILOxl;cKFwZso zIoC+1MTcERvK;8`xsAZ>GD_^y*a)mHqr6;Iw(44Dk+})o?=s{vXO-LHK@YM;!lm5b zk?bU0y<+dOvM=@NT-JOOi?+mr9-y;Ho6F=ODJ&(s=$6q;QYn};lQh}`glSEZfx&2+ zSEkB^CdM`-i!m9`2D}?$lWK+|i#ZlTVa#@)UjW^#V9cwhk1_ucmQYZ8RD)>RcXqze zZjIO({+-(mY{A{;U2wNEabCp}-LLu`B76%ts8Nyl)i*W4VIJ)#Sd8lH-wdlrw%Aw2 zQON3!aH2Kd<sMU;-|!U+J|W)ajSZ0K?roN61`$rQR>g?N{G}Z|?nF<t>9wFR68>Zx zC7i#w6Yx4Odn?FIc|3<L(0VyITjLs2_aP9zOTy|MG#gu8r-LR^liYyR?CEO#N-m7_ zabDoMh?=ePyob*@Y10nm5;a0kO$5D%<TI*Q>-SQYeXZVQU#tJJulEZER&BBZkxbp7 zSe_9&k<udNrIZkYJznGEtOMfvSL_%AzW)`7Z(`+TI7y+#<nh46d{&V!5Hm*vF|B=M z3jG9p-<Ud};6}{92RE2#GgaYXUkxxb3+ZqJU+kb)zln`uAyH+s7FC|~+AA9aQRPnd zs^9M(_=gAn$uR{UDT?5QM)3Y&$ujn81h_?fe`?dxMxNta8liyvl?=HgaXhxeT zC)wQ*9@r9yEpEFHF!}}nMp3%}!?&`$%lAn1*&N<uOn80mW#UNNYv=8?d)uplQPEy& zi1t#X-0Zt!FE#TP+E^E|7TR;%HsAKs&H}YIIMH(|qCI~~jM~!XPfB&yd_~3Xdo5*& z03b12Xad`P=8A_Dd*5bZ9(q#ZLHoqI2oVb*@Hcf1pD$k4@p|;B;_t1<b%=GxyMh0{ z_6S9u*_y>fC7EUh!wjRX9`tzw!$kCo6MgMN5JkT80wz6bk|jzKQW}(`M@TGy_i5Hd z9lkYDcx~{SD4gl*IP`*2<crLL+pgTaBvw4^Ogdj~5Gx;r>`#&xE6c>hipFLWt3C<~ zk-nm(uWH{0LT_zF+xaUp==Dgr_q;+&w8eV=QrbjizQ$7c-a)0kVD_NTl#bIx`C1bt z+QQ#D?BRRvtywwS-eGA1U$D36NJYSuk2|I+c?Rs`Ne2G$qztzH)z2@N{;YjwE=&qr zv33s7<Q=RQlo84ew`hDQ%-Z>`5bM@&2Xn<fFI%%WulO5Qj70|e_4WQjQ?x0lcMk-$ zpM7qTf(02wyMl6kmHIxWrV9ppe6L<9O*fsQ>G|QB4zokA*+W+d{<NNE+kXhz_8+xu zV^UvM)wFX6ZyD#7>Tuj*@^Opkx0*tW+en#+40RhbSUAit&)RnMUH&Qh4jk0j6B$5! z8)%Y(JM3Lfw&t-)8G}%-^%<3C0uG1M7AY{&YGl#TF8@stBN{2X_)$ilGM69NkT`<} z!&jM}r>snSUQ6_^U5IZVt<%^|YZSXF_TOqZ@jElU^q>=)NS*SAp4(jSK`o;<F?H39 zAp#*SsY6;z>dWw!)YiYvlJY8iOdoAPJDSkjY-aF-2fY()b&*kRx3g^A2I6|1JD!>v zfuuFQtbf1p#m$~yomf(yVfpVfdz2U6|30%P3~HJfYMP_Xt)r$n9BP_dM@_R2HBAa? zTHU5-D??3F1`GXBbF|_B*Py033~Gik(nu`u?#sfx6rW0rn1kU2Mb^{XEbIS}h#Q-* z&V%)A^pt)1IN##3DE`{%n*Hu@yt>~V8;YzfiqBtLtolyqT)@k5Mq%`0Q=qs}nz;cC z(L}W<QLTYdeNk*m6ua0>>y5&`EpBt-2u&I%c7(`5_;P3tPVd)rLzNS$#BzCXlwTCt zZS*#JO4erFp?)Kd-T(%Buv_-v7=O18&7h;V3=fW_$b&lxDvtBu&K?{u0K)<sPu|m- zqvk*O>I)d`#0e^5bUEd>ciZ@l7qLFG+ldp^tdoM!#QW)pZcZ}BC#*~swvzg0GL|x$ zL5Kz!$26>F|Dx|oIR2+-<c7ao={3)q$oM80Rb-+p%)UzM!3R8Kg4lTGgD#7kz4S@@ zolF#0E)O|_)yxY8lZ5@v2h2&%RPM~okw-&&6FH0d<;i6JZorg~;80{(&y5LkP6(@N zSm^l@-xnKbi{~iYQm`&V_12K7qrDEGz|2v)ChrJe-Y7CSZ)6GlT!jax7a7(4sG>{R zD+wQH9aA1S!-F%H0E(VC)5{uJ!sf);9>BhH>crg@LXHPK#tFF!A&=kn2wV+o#>sSi zaaYO*CU!Uqd(qa)l#GctuBX_J>SAl&cD`p2=X-FkC7{@^8U=oZ6e@Q`AslIx_t>Li z4=!l{Su~U0-b_kct*I!yjGEvE<&rBX|1A2no`o_4<ZWh|u(|)VW-=WCZ7$?oZ7$?I zp`g4rs9oGJ{o4pkN<a0}Ocg_@E+5~t@@*QJ0=(a*f$_rMz-XNQTfnzz2KnARaT{F5 z2>9DH@mb;QpbyfBr~KQv!5^hjlj5tJaQ{pX9w5wzj+@E(^_k+c4jah@Otky6-nx)l zVARf-p-vsiMc!WXzN6qImuO23qsG~XeaNLDKkP#SKeMcU>IN8H-@1Nt{fRe4Esk0h zwFYlWc`@bPl%04}w*lQob*smlCMQk4c=AaaUNU(B5AU9Qf`^no1(LHForjdpLO|F7 zO&yoW`v8zLfh1=Evz!eaa(56d=YTjl7bMDgAW7~ao8^3Yh+H5KmkZ?)a<N=5m&jw~ zQhAbGCZ8$ym8Z((@-(?pzEJKb&yWYmm&*g?E95G9mONO#ou<4)u8|kYL*;wqTDgJd zvP2#!KOm2mn`lm3XihK4<K?aL8S)o2w|(+i@_u=Wd_bP6)63I!Hu+qgT|QqIA<xha zlrPrR$d~Ab%9rWt<jZxV<e9qh@|C&?^3}S@@+{pH`8wSl@*Lel`3BuR@?71+@=dz6 z^3A#p@-4cj<y&>n$am;IknhrcEYH_{BHyjsD=*T=%lGNK%8T_Wa)UloUZT&EAJkXK zOZCI$W%?2Fa(%u0uzsw(Qa?$4M1Q8dN<UR@)K8Pw=%>q%>lesR>KDpS>7SO@>6_&B z`YrMX{j2iR|F5;@fRCd1dhW7!v$Ip~(tGc{lio=}I_ZrRNCTuPT~LZB9YIBUQ9z|w zK%|NE-c_1dkiRI1B1KvtkZ*1`L2R_o{4j6!&AdAAy?MKLZcv=|6O^W1g9^24QI&Qb zs@1MXy|f$95bdXEn06x?qx}pm)^0){Xg8yk+AZiy?N;=)b{jgc-62_Mw@TL9osyGw zmlUVnEv0MsNWHatrB}84q_;U-rd=a_q&*<**B+EU*B-(u?O`0KJ%Z!4pW{B-FK}P& zQ9Mw43=h(tz=O4?@Nn(d_+{-kc%$|^yi<D`AJl%2f7PDB7qvg&>)Nx#O#34-*PbJe z+VjLs`!h+=ULYN{zmfv&MKVHriHy`<ArrM%$u#Zn<ZbOWvPXNJoZ#@Z_6E7Gy-Cfq zH>jod7PZ$lQ&;V6>aD#)1GOzQNZU$_AfOE#_J%6@5>(T-Ia~sb=yE8~l~6<1LM{Ca zLb?eex&umdAH?)$NazKqqnDwc-hjr;9GWr<XwK}Q1+#}%%pF>@j?jjsLOYfN?O8AA zz<NU`HW)gy;n0Q6fv#*WbZ5(;2ipQY*<lV(KreO@`mi6MFZ&t#vD?sJ=L7?EfgDD_ zKwTFYq#MTJi!fL>28QS+z);;(7^Zs@hU;d)2;HYJQg?vEqcBR>45Rf{FiLL=WAx52 zR__Vp^!_kj9|{xnVK7M_4pa3-FkN2(JLxN7roIcz(GQ1t`q8kn{v}wTpA8H3i(rxd z16ZtI3rqCd_;?pA)gOT6`h&2Gu>h-$C0JvOVOL{g*v;4k)*IWx24fG{XdDT<8z;gZ z#(A)(ac9`exCZtyZi0P{$HIQb)8Mnlv*B|l_OQQ6A%`V!ph-C#WKsc#n7jywnv8(F z9KjJLTi_^@U2wF?ZaBu|3;43hc@BSpV@<BWaVA&c1e05EqDeEHY|;v+m;yM}R12q> zLioC=2;Ve~gfmT};VjciINP)<oMYM(&NUqb=b4Ux^G$EUg=PT0Wk%uKW|nY~nGIZQ z<^h+Og}`^r!r^;nrEsZPPq@tNc@9Uw<z{0zZW3Sr8hqdEefWXd$M8e5AK*vk2(C0I z92&z_=1%Zq^UiR!c|KfYUI*8j_kion2f+2_FK{>#ZZIDOH=2)ypP7$?o6X0=ZRYFX z4)aZLr}<{M+x!sRWBwJ~YkmsuGyf4DG`|KvH@^uFnK#437FO_xg*E)b!WDjL;RTOc zM8IPfk?@2?0z7Gv4ZpIegr_XJz;7(-;I|e%;CB`S;Ax9-98QGaTTFsyEM~y77Vp6G z7E9re7R%vJ7W?2ii~aCti(~MD#VPoU#n13piwp2Ki!1Pw#XWf0lEN#N4E}Cu4zF3- z!t0hE@P=hHhjH+xWjt)QOn`SRlVFQwH+a{wJG^J57lD<7sIu}C)mEXRkyW%PSfz*> zt87tgRW3rSQKD!yM?_Zdijvhb5nHVmiPc(>T5S}W)wiO~>W-+lwh)c2!$lM89MROe zPBgRb&vAo9W<5$Yw;m%}Sx*zKtyhUQ)<;BJ>t94W8z9=+7>PDETG84Di&`6F(b2|F zbg~H%oo%{_E;i#tSDT3(P8Hp37KrXPheZ#YBchkh=c1o25Cd%0VxX<77-Z`$2HQr6 zA+`x(sO?%Y+;)rD!S<jSVS7T1v^^z8+5RL(+g=r8Y_E&4b{1lsT{MTuVh6iUVuD?r zm}u8SOtPCLCfjWmQ|z{JxLfRKcU(-h*NSQOQ0!!HCuZ0?i<$O8VwQcdm}4Iy=GrHV zdG;k7mW!S3E5ri(TCvc+t5|H`O)RsYD^}RA6D#f4i&gf=#A^HFVy*pEv8(;>Vx4`n zSZ{w@Y_z{4_HYoyo(^GRFNZX-w?jFH)nXrq?qXkuSH*q~Q^n^TW{CYA=7|Fwc8CKV z_KAZW_KQOtJ{N~NoDiRPxFHUAxGBEqa914Ra8DfN&?>&-D2ihpBgOHKnc@V;Dh|7e z6CHbrlN?_cCp*3&zUnwfoa*?NIL&d7_?qJ(@pZ?;;&jJj;+u|Ni!&T=i?bZ>h;y7& z;#?=SIN!-gT;xQ=#ZIx}J5IUcyG~s>Y!u&f>L)IBnjtQ8nklYuS|Gmfv_$;C>45l= z(?M~S)0g7MPG5<uoxT@8ar%M7^Wqw(pT%`fm&El>m&H$=u83QlBgJjbN#b_r3~`5Z zcX6k44{^71UvZCfKXJeFQ1O8C>*7J@RpKG%kHsU->%}jeH;Biaw~NP}4~Zw7FN!Cf ze-lqRUlYG}zAk>}VkDk+(Tm@^1d3-|g2b~f@#2pz>Ecf=1>!lEXT|d_&xsdYhKRqo z3>7cBj1hlxStMR^Su9?0Sted}SuS38SuNgh*(lz0`Aod!azt!)xg_3pxh%H0+!gP- znu+&ZEjhG9Dpz-;cJ)I>t|3Tp?SeF}RY>dFfS~IDB)SenlIsfyyG}yHbuwbEi;&KB zFVef7;P5mucKsfix#^LGn+39TvqaWz9>~VcAKAKvAUn5wWbamh9Nj9BlUq;Z>^2;^ zxJ^K=ZcCAy+cM<g_7U=Q+l9Q`P9bl%D;zc>AGh1c->n4&xZ9&ZcUKhT?uUZiLs5u( zEDCi`LSgPzDBQg_hy76p_faUq!y83;grI1T1Qg?ufnq(fQJhB^iub5T2_8)-(PJh` z@|efr624|R>gcf(rF!f~X&!e_x~C3x^0Y!3p0*r1@M~9;=^28uJiDQ6&pMRrS&#BP z-#~?)vr&=f98}`D43&C*g33JCpmNWxsEg+jRO|UAs`5OBsy(lv8qe#ft7j|f<|U#! zFFmUF3PufHVH`%GMz3_#!>a`K_9{m`y(-Z&UeBXmUc*oyua{9@uPLaX*PG~Bug&N= zuPtbR*H$#hYdae3brucrx`2jyzlMf+FGRz=-$gHYe}G=}UW-O}Z$Try528`t*U@Mn z9eT;f7LD<7Krj1vp;vr-(O91#G|nd<jrZw`CiqN16MdGVNj_WAWS`^w`YS$n7QO0o z4o&m9hF<eEN3Z*aqBneV(RANB4jcJ(503AHM*0pwGkm9@nZ9qJS-v~aY~Pb;j_(;X z*Y_+R|BB}M8KL=pj%b0O6MD<f87=YajNbJtLGSsMqGf)yXu01rXocVN=zYJD=mWn| z=p(<^(MrFWXqDeu^s(PM^oieYw8rlXwASwmTIY8aed-U<Mt@uMnSUgQiD;95658sY ziMII{qwW6nXor7KwA23?wA;To+T%Y3?e%{H?em|7_WQqw4g_>YhXTsc;ebYTB%mMq zJfJ`NB47miGGHP)8ZZSN3z&(H2W&tm0uFO{l*6w$Jj2(YLth1|(5XO(z7C8)-vnl% zZv%_acY&pRT!T&r_CenV&PQhg7oZ;k7owj6kD&8`$I;J$C(ti}-=kjxe?b=mZ=>IW z0J;>ULRW%J(bXU;^m|YQx)v0PZUm*Hn?VKWR?xGkIp{fbCul5c37UiM2Cd_83%VDy zRZ<1*lhi@SB%`3Sk`Q!3(ggh?!Jvzh7|bLTY$i#;HWCi@mPl}jM1xOBy5Mt?KKP1c z9DGeO2?3I62$9S}bdq_9wPX<zBUy%Y=CGK<3J$wTx{&UYb;xMRCS;ss8?sKa3ppw| zg!~{mhMG!Fp=OdxsJY}G+EMZh&6K=Cvm~F;BFQ(jM)C{oBl(98kOD#nN<pDxrQpy> zQb_1>DKvD26dt-!>Ja+16cPH36cu_!iVo9AF<~wo`be>1zEVP1n3NcnASH$6O37hG zQc75{lp0nlrG*WV(!*YmI)%L?WrR(TGQ&fp?C=;VC%luC8(tvgg%?Ym!@ElP;k~7T z@P1NZ_$;X?e6Ca+zDX(x-zAlXe<_uBP)Q{n1gW9}mMS}VNnJW*N>v@IIBbw|Iy@uQ zba+Lo?J!B|+F_&At-}SWu0yj_AK@)EMEFQe5x!E-h=o$Gh^12Rh?P>Gh_zDRh+WdN z5xb=U5l5tf5htWU5kE?UBYu*GMEoWVjkqQ~A88~Fj})X4kyIKPX(o+|bdg3!x=Jra zMo42KBc-vC@zS`+1ZhHKsx&b&O`05;CrybgkzS4LElrK=BTb7OB)t|nTzWlnqBK2n zk~A}Nx-=_tt~5JxnKUPIximNOV`*OGdTD;-9%*6ZUg_<~!_uP2Bhr${<I+2kC#3fx zPfE)p&qymG&r9z|UX(tF{7w2W%1v4s<s+?%@|9Lc1xueqg-C0oBBgavQPPH}1nJYL zMCr4rBx!3@t+YLAq_i_?ytFH7s<b<5y0j;1v9vd8iL^gzxpW|EgLE+JQ|WNjR_RF8 zHtCC~?b5NR9n#6Dv(l+(LHZ_|O5aACN#8|VOQ)l~r0=7>rT;|-N<T!$OJ}1Kq@SWw zrE}3~($CT9(y!5-q)X8wr7O{+rK{14q~D{LO4p)SN!O#-OE;poNjIZ+OShtrO3g9Z z(w&%MsU@bHbT_7#bT6i_)EYAkgP5^c6*B>=W0qs1n7vqtxyE5L*2J`M*oxJ$g47Z# zVHoR<#aLgAVk@x}I|`H737E!C#yEB=zn+d+>|(5oJ&N_Q$FOPaS!@=25u3+e!xpj4 z*fNf{cX0^Y#F=2*I7@67=Yj3xJh5Y30CtKC!_INx*exy|yT_$skGL+_Gp-7I#Wi5> zxM#3W-1FEkZWs=T8-)YoM&sbPmvC6zI@}>{D~^cUgCpY(<EXf=aCF=$9255&j*Yv9 z<KnL4#JGDnDPDt<;|WfQx4<3aEpckRFHVaO#_91PI5R#5XT>Mu?D!0v6JLmP<BM=! ze0SVAz7Nii?~4oL2jZgmLAWG-FfNZ@j4R{c!Cm5a<Er?BxH|qgu8IE^*T$d4UE_bo z-4bkZeS#fsOz_1`3BkB~LJ01ekcFQ~D8juG%5m?6M%*XiJKQhf9DX+88h$R}9`2v0 z!UGa19++s22PN9!!HIczXyQ2heBw+zByk=dmbj3^MI8Sgem3y~{6gYh{9@u^JR-3b zk4*Bwqm#1msH7tNQc@|06&zQC$0YT^FDK2%uOuzN<C0e5@kwj(grseFV$yyN58+8k zhw+r8WBApi<9J%q2|PWS;2Fsb&rA-)vy#K{?BsYnCpi_*P0q&ik}L51<S+2T<kR@A z<e%}|$-m-7$+z(06ag<uf%u&i3BQ{{@p~y&cxj3YUY6pGm#0MF_frz_2Pql&!<7Hw zRVg>{x|C+TGNlE7*inTSc7%9CM;E-YqZj_HV;SDm@kPA3<5;|<;{-l_4R7uE7T(tJ zbG*Id4|qq%R=g_};Jv9jyf4)q?@#r>2U3IZ!PF>xC^ZEiPR+naQZw<FsfGAxY6U)) z`Yb-4`W!xy`aC|FIud`C`U*akIvszL`X>G^buK=gIuD;oosZ9^9>qVU9>?cWZ{qW* zck$0@T6`gm;$PCt@ULms_+nZXzLb`YucTGtt7%>F?`hre^|WF5M%rk6Gi@rql`i7j z>E`%Ox+88$cfohl1Mt1{Xxy3}M?iWaQKhF4b$Tu_N-rZqdJWN}_a-oX5E0Wy5Y)+v zkWPNYq*EZlokI9^1isxVj+k{SBj%l|iAAR=#In;T#JbZdV%6z4V$<mghu1i+nb>BC z#4aO}*k@!Chm1zzl+i?7GX@d2j7h{jV>0o`m_a-<780+FWyCw<BjS^>lK5wAAORU$ zNnplF5|r^13C=i2LNYFq(2VOOEK?*MGA&7XrVSrEl88(v5|!yeqBA{7Y^E1U$SfmC znH3~Ca~Mg<97Q^2P9Uk7(@0w8ERvr2HtCdQLo%~GNmf=c$<7KRIa!G$H!GXuW#y61 zStTSttDY2O^&^E@!%0!rW>S)!P0F)tNo{r=Da&r;*Uym5>}N^0>`A09`!!OZy^S<v zpC?V(S4j8lYosyzCckbWJ#sMVnG-{v$%!R>a<WL@oUWu_PB-#wPA~FY&Op*XX9O9L z^D-Hj^9mW9Gl>kznM|I~nL=L3SwTkRtRf?GJ|UxWHj>dfo5@Q#JITvA=gBKMSIF3$ zW-=~UO~&U!G9lN3Ow6?;lXD%&lw23`YOWudnj1={<;IfNatq1pxnsy1xf96r+=*mH z?j$lhcO#jbyNS%pJx%84{zw+&{zew&HIldUo*|3!29U*hqsWrHiR7KUDdgR}+2p;v zcgWJbrDS>DI<g{f3wb|pJNY2*0QoTQGWn=8AuBsul2x6f$j6;Kb67?ecdjO%bgn0B zI=?~IcK(R0>--&A-}xfhkZ(^u&37Q5<%f_>`4MDuej3@5pG~&r=aB9B)nrG0Z?ZFg zAla2ahV0ItK=$NMB>VE;Ap7$dkpuaQ$)Wt!<Z%9WawLBT`6B-q`7-}3Ihy|?IiCLu zIg#H&P8L{`69vxXtAbE+svwuc67qFH7xGO(75T29j+`#2Cua&8$k~Fq<fno~<XpjG z@^isTa-m=?`K4eTxmd7?{8q4;TrSv2t`zJdzZV=J*9s1j8wH0*bHO!or{D%@DYPVa z3+>6hLJ!hfIG=*T6;xHYnyL%8Qlr9sR46<_HHBxWw(u;4g_o&V*g{cZE0u}}#YLu+ z6uDAbltx)m5!DrSqxzy}sBuw$YEm?w3PrC{v!dzLyl5x2DEgjS7M-V7MVF{`Q46&x zHlnu0rqr&u1GO*iNF9oEsAF+4bt<l-F2#-1wRkjjE1pK(i?>pb;%(Hscn|d{-b?+8 zPgDQm^E9CNHVrHRG^m8o;1UxWQsPKMOWbK#i3jaa5>6vZVrXPZER8McMdM4JqX{Mb zX;R5>np`rTrj*R29ZTlZ)RF}>y<`dPRPqkZD*2FRmu#dtCHrY^$>%h$<O`Z#a*`I5 zd_{{(PSLWGTePCoigqb=rd6c@w7N8g)|BSZ+R_5rwX{F&Ryvy2mA*t9N+;9C(wVfW zbOG&Nx`g&9T}^wIenNYdZlk?R_s~A2CurZ&ll0lr|Iz14&(r>8CUiiVDIHX1O$V1b z(II6XbZA)seZH(W9ah$#4lf%(Uo3l`jwl;ON0kkyFPFVQ$Cb^c6UsKyNo70f<g(A{ zl(G}_)w0ucYT0jeTG=J~df5&7M%i6Dz1)btS#CmSl$+97<<@j|xf`8R?n~#E2h(}w z-Rb=DK6F8OU;0-0K>Bw1AiB7GFnzCl2wh%2lfGZRj(%9am3~xykghEMlCCQMntoh< zfvzt9g{~>TO4pV*({<&obbSS*8!B{kV}&*StRj(asz{<+D$?oJid?#_qKIy<sHQtA z8tBf7-gH;RV!FFx8QoK{obIn!Ne@)4qK7Izrk_`=rbjD&rN=9-(i0WG)2}L8=&4F0 z`gNs9zo}&O+e#fhU1?3fuXLnmDxK)rN^kmOWf1+TGMt{PjG^Z%W9fy;j`Wwx68dXp z1HD+;NH16RrB^Bk(W{li=<k)I=(Wnx^hV_*db4s4y;V7v-mZLy-l<$cTPokDt(9vS zsQiqnDz`Cp<sN2KxtD1we`ngtYYcWVVqzD8;VyoRb_rmtOCHm8DQ5aE)y%ldac0ux zEHkab%&f|cnO8Y8iz;7cSrx#ns-l^7RT{IY%3!utCCsj>irH87W)4+TnPb&P=2W$h zIahtjT&liiuGLy*UQL*LwF&d6PG+9fRm`h;DD$o!$9$^SG2iO-ETDQb3#{J4f~$|S zkm}PcwE7AQtG>y?Ym8Wj8pI-Mj9Fxj6N{>GW-&EhEVd?)#nptf_?nI^p(d3j)#S0{ znn5h3W-v>wd4Z+XjA7|D6IiF3H&{l^9F|$Lh-KBBV%as{vz(eUtaGguE2y<$g|#uP zs5Xfe*RE$JwOd(f?LJmkdxDkMo?#WWXIW+KW!9y(g;mwIvg)oPtLf^?YP*KAu3bx5 zx30rkUDpY$zUxfZ&~+1Q?0SYZb&FtS-Qrk}Zsn|Jw;J|Lw^v!OZp&HkZW~yiZWmbJ zIxXv02U-6*$_CUiHmJ^w4X$%#L+aevu)0t-ysj5}q3${MV%=~yqHZD^SvQT1s+-M5 z*DYo*)qTLm)ZJt+*WG2W)ZJra>j4{AuVUltjo5^Gkxi^eY)ZYvUaR+FZ`5~UZ`S9s z8TD0cW_>lAQ(w>K);F;E^^NT9`X;udehhoJelc5GzltrZU(c4;Z)Pj%cd+;Ccd`%b z&#;dg{MpKe0QPZ13|rlh&pv7B&ek+6U~3x|vh@w`vkeU=*ryFA*=G%B*rtZdY;&Ux z+tO&uwl%u2?TsDSj>hS1XXBe}Pvcy+w{afZ-#DKgYFxlRZ+wq^(Rh*_ZM?vaHD2WK zDm&h!VkesX*vTe;cB(0gechDIzG+Hl-!_%9@0x1Z_f3uLOj9rRzoxg?4^8i~vrX@@ zpPD{k=bBct^G#o}3r$DauT7`e#ip;>bzuwubgHTnz6DH#8Ny6};4*-O*}_LaLSKRu zVU92tn4w;(cwwF}AL!5+m4`51m;m%>C1@5F2n&HR%1|{4(}gzy6F*jO)YS7464$BM z3U3K-14-PeUM4IO76Xjp)FHwW;dMYzn%Y}<M|c-d;;34nX%N-`%m%AIQ$~2WuwJG` z_+{ZESu4qS8raEoSp$giSa6u@HxpoETUCOhvzZ5IlxKBjM&MON7t>1B4Mi8zo~m<- zMW%yPUkhuw_Sp2MszTAl45;!IUCir%gRB8FzXpsnjht38Zw5}9CQWyMEv!L*1!v(3 zdI;-;^&FP~ax^_OJpr+(1KyfvG`#?|c&DA#V)=dA{r72)aazN-`mx0onYK3|mgeoW z=7&_zYWfHV0J0jTnjp(CwVI>qCu|Tt1!mUM!1FS#xmBKOn{1_tWjCWfvXzpRUcE)O z2wOR*R|y|-zYr@w^<wU!O@La3s^<xtx#i3%TK%T5g^zSrDeB3x<$9}Z^%!9*9~s;J z1iA>@gzZ3QyB)l&c+%EYbyo4DZG`HG%vrKcQ0)<R7(8jaR@GVYr0o_}y5dQDI}k5( zVGh-xx9~NO63IaTca+_7?ADHR6x(r5ji5=vIT7%qf^$v+fo-FqAW60ZId2Cc3eLp{ z__vMXIX`8z8gy4iuI}K|wviuLE$k9@1If(;996vQ<_`|a@gliZf(7zA?A8-Z)$}!Z z&7%zD2>bauy+=40B>O<;Zm&*LeBkb<j!<IKJyabe925=#>>jK36b^H55D#xvwCoM) z5uyr~y}>+>v`2*JF&+{93=!dZ9dvBNwSs8At2~;#L=Y@nNxVwhDZDD%W5{b5NNvNt z3}TcR@|q%hgHw1eQ&}pud0$rzl_ST*N2jWhBgfR|T3h6pd2d&(lr1v$I%^cGM2`1s z>M2U(crR3sRQP$ns~#%H3-$g${hS;x%zLf6his9~dyBeOju*XOEjXk2+3$7mf#OrY z-CUZSp#dX6H+iHBm<clES$#kkFj0vs|4enULhC<8ZLH|xKTE9@ju_%9ptCAZiK~Ee zRhkl4f#0`F3o>n&7L?vDEd;bn3$bpO7W{3yw4i<JOocX>skMr<U>ntK;d4W63Jy{I zPnJP~Pqpu0Xc0J}P=t;Jixp|%o7!rkd3aZqAlF2F_$+Whu8GFsbHQG@CYprDtNfM7 z2@6x-P`HE*QLj?uhP|MEU#@UCY=U~BTpdYxi0YOiH#|mlNr{|@rNBX<jW`0r+D0dM z+#8}!ilo3-!9|(@w>DfJh-<@@fDUcA>Fu<UbMMoh0kv(o^PpV8MU8LIt*EJ-vy6+T z?YL;Oc3jLbFkUz&90&TCGO$XqGJ26ZM9GinRccoyKcd&G?Uek8-ljHH@*^f&HD0kY zrdTynu`>27$X8-F_9Ez{(8gZl886eunE+RwjmH6ri*L6rF16jZxUKEB#qHs?8P-X0 zhk-{M?Y;Kdcuo6kJZYbekGVgae1A5heKwJTIkJ@|2^YW)C1>Jyt4}Ic#vfPjRWyzN zR=ur_-&ysi!WVo*60+1q!k5BPKog48S+eCU;XBn<*>YXNIn_F)?k25lJ8_ItT!6Xo z6{j^#zNJFKWJC2yk-$yiltFF^1=o0W<n=x!5p0z?o2F!db;37%WR`qP6{74ya-jNi zMZe^Du9d7`aw^wK)-O3*y;}HI_zsZd3iUfmMkRlt4v@8CsX7p&>_Tb~uu;658U>7% z>X=%{<6ibvY6XZ@X4A{sbT&^9Xw%swJ+Vz^)AW=!oz2n*wdri0KB7%$i*($kvvKN8 zqkf9cX<DPMiq2`&s6x>>&CIA!@oCyH^{>KdgHO{&tACX3U};m;CzOhmE~;x}JM<ZY z+U>}g(QZe^!gf0{Ht<eCwj*OJs8MFK5>>uj`$IsVRiZLiJf2mrf{Mqp`tdVL_ITEC za7poa)@HCm_@2u!&$3q)DZbAfrrxU9kvV~%zp@>f)6~lqJ2Gdf7YSz!8Ibw5dbZ;G zEE~0p;`^MecAay2wd<TSuwCbzRp2Ylvj)yNpMc}CG%4piSfqK5k8sWvFk4<na+<+w z!Vkh(Ky%e#yr#dQ>gD=zEB6R1fG%$~*rfDGdF#MJxlZcy4uDBY<;oij&M9>=_p~}e zu_O04e!j_e<Tdh$l~0JgXH*{x=L~k_4Nxsp?8pz{{xfi9`Mtqqr2-dT2D9W-S64*9 z3$h0KB2#{v?iKa{<04nS3kJC+g$IGs$*`hJV1P`)iduLtAnROg#H*BnLSJkOIxCtM zTB?^T`W1Sp=PLRY&R4rB`W3EFTL|Y3`W5cu^;Fic_&g|5_PqEuNEU7gQ-D-LK#(jA zmkb9!%52Gp?W0m>RbksGfS*0T2p51<8l#GmX>sXf?yFtGuYi=!1m6gkc)h1(JHaxA zqU>`pU+Fi>Zh)ckEH2*)E-16*2f=sBZ248NUYV_^=AGaG1DA>xUdQEil}5l`Sy$=Z zUiB)2c-2#IeR+SS;0A$+HryJJ+lKoLq${|pXnr!uyHHgEK2mm}stPPscA=^_-y?Y! zsw}~EWf!{Sse3Bk?NY6-RJ_~exatSRyIszzjw#-)GE*&4yjy)*rB>utU*Wqid$-1@ z%}QM3)n+BBd85rrR(qNEiC2WHfOQpBfwBg=+Jn5yHE2L<W7G!}4Qkh`b7i?w?N)V~ z@VnuhuHC1OQ_ktSP_SP!(2z5Ay})a7_DFTZ!D!7O&0v7*CW8L53{p26)XVzOdH__K zA-tDD^+rI;`>>&Wv`TeW(Y}7Y>RaKOa2-euF{(<g%L;%S@>Qv_MWo>j_(a+1#;ahB zTp6UMWcjY+CcusFsX`Sl05p9gyet^rJz*H#(L4`SK+|+WxXbfH4M@`w;hxY6jDShg zJ`K>QfB>wTb_mP4G!1ZQ+N3GflyTkET-E=9AmwgLV+8cdU6e-PcTw`alSTumayO%a z04w(}nqlpIz6Q1T`5LLc&)4AgK3_w4pD*|C8p`{3xog)jK$R|*OCw6}s?qVDPwoRb zzqUS*^K0t^Ils0(kn__keVazl`!=~-(-;G)bXOXa_U?+~h|()@8OBQI!!068zr!tJ zN}r%H<$Z$O9caw>xhbEZ9LJP%ljHQtNv1JxKgqbJZKndqwVetar&Fq~#-hFIYAgX& zYMwy@rIvC3wbe3>2&ht-_^gRiaSZE}nxe64uPGX9K$W_nvE?}?XOV$I$qvIhB|8l3 zlnCduIwgiRcI`2&u?Ixs0DyyD{Y@)y0}yH)p=LPLI75vK)VM-TG}M#>a98yq)VQg1 z@{j%re&`+WZGu+*G1qE=ofbIqe-L!w2o3PmIvTF;fE2CPjbngED_93~|EPpPz6xrB zp(X@s+@U5^1%O2huz{MedmssFyp1@n1^7Ts_-){S8>n4xfnK+P<__q52lQ&?set~K zui>3^cR@#)yGM{`3kcwgV(x$sZ-dFczFN;eFq>|Jxy{^P20QM6P6j(#0N2LDlC=P1 zu0bov1@vD9@r8Vi{M#95pymb9_$~eqYF>nzpjMunk4dWi3n^dF3gRD^ntSR6s2TBO zB8B@ze5x6A<{rLn`2Ko=*2l1OfvsTQ!*{L&-=n|moO3Hk1p3D$GAJSP89oT$|G7a; zApfT_nD8Vl(BE0`(QRPz*s&6*1p!)Ff444BGqMFZt6G2q)Wo&`Q>YoGy9EOOgpZf; zqYZfOu~wDNaQScCRkEtw<1w<@-tq<*JZ5Q;D2uS-zxgPx#b9+DX$7wX^CxD<d2r(U z?tIV{JSK#v=ZOA^qa2+MPtO$ojj3VN|5K~ojGMtLj~xLZpcQO;c(i-`J=zl<8SNeq zhHApU*!?6N{?XLiKzwXVTY>jO?3DkX7K0qV&g&8NHOkJ8SN|3e$(3vYl}5Kgw6B)u z!^1IQwg$`{kk$ft7<t?VJn@qGzRH781ryz3sQ(^X9~sGuut&&k;Ct5)Alw}p-oVnb z6@&r&@H&@aD2vYRm00!Y<-+~tazV5W)ZPWrvZI~vf(Ut$hhr<qdxU?7Jfr|CqIkA@ z18@&)ZQEESn)o)x$=jHBjJ;!UW>L2_8rybvY}*~%wrzBbj_u@$ZQJG(+qUhblk}H! z&aGRw?vM9;yLN5-+qG)coMY~}<`~dy0xX8$|CH<OgPH_G36C0zz$oIz%P7mF%oRp1 zlpxQ}RzG#vovjqyt~(<oD0yG9TL}_AsGRIUm3(~Q4{1i#9p8vy2e8Y&^kF<^vG~@O z`9(icBqEU$viHB@_H!5C`;G<4a{VQ#mC63OG-BP&Ole;pr0(z<{sHP4)|x_FLOuKI z9**k`lP++gmK{;&w25oyv=RLqiZZZ7jLBD)L>olZtIB_K>4M+HP-SIW0o#4m5EZ4R z^0{pCJ5#XA_Q6N6b03PA;NH*4hiH+qXD-X$ggX_X{xU7cy4`Y2to`;m*XcV}TG8HJ zfrAo^wTl2r%cQKh2ICch`k0a(+#2a^74mmf;`hiS$M-sZzLvAs&kYQD2E}s5tycNi zf~!IZ1ESZl5`fx0iK!pMmb3dSKCrv@odPZS2DSThB-}uB<;M-2x33srRPUaNKZxxX zcEZib1hK!2k5wFB8_Pq@_o&l8CiZ@QhIQqPxB1_A%H@V`3I6tt{g)D>OWjzyXI69@ zX%D&ok2LVLqevYjm+sGvhKR|A1i55XK0>Dx+zRwXRwY)jpw^r<<O0z=!Y6h5KmIwo zZ`<2mvJDmIH}3&{@<M;Pj(>n175w+QLvLxozpOw1^1GeU1ju`#(eM6Y8(odP4h4J- z0nPBwREScq7X1;=+9=I#^Dc7aU4kZFyH8axNycfFiaxSzfd`9%H@%A~L+Xl;Tq!Gm zzsxDeGZD$CwcJv9>pYCDgAo1Kno3RXSGwVSr3L<FWhekI3|NxB!YcTyJHN!(pOY_% z5I+8Cpz!s-U46bh{Jl#Ow`qe%SEI=$BObIOc&xLqvtv;~tlx&~5ZpKKz_j%^4B~Yc z`xGQnX$7%)Lu!jx*aVB%EV$)0+$_w^hU9x+OJ@an$Jzz1>2UMlb|i-hid}%nAu4Qa z>GTIkJhNWkBOdDwRy+Q+(-^U1(x3CoxBDO!L}xx28ox5=_|T;ve8ghn<cqzv^T$}> z0C|pm`IXki62s`WvIY6E+?$jDkKDd4p-HwQzd<##NT>6sa*kec%}wF+C&w$+sZm?w z@ymG&TnFyyO<c8BWB>efC3I<*=hl*EOCY>L*A;H{Zj!{dVGH`*(Y<O(|CzN&2TqPK zALi4KGa9~t>G2jMpL;pA%?&s&zT_GaT1~{&!6qk-9JVcY19kXa+HNaWP2$u)K5te@ zTZ7H44$M9XCnNCTI#KyW_ipQ;*82OK2tTSmJAK-fJE&>fo&3E3m409y&_B*&tsps& z7XavShZYwT@nOAt<#E|2ofeHZf3E367kGG7+!`_e5u(n4CB`5ihZ2><1ZeiibG|1b z-qx3YJ!-Ds)=!Ym*M3@gCsYi_H*rtpCEd{HEgg<KXsBA<zxrq6v%O`233!OHVwHu= zft2Myiuc_@yQ;s}ph6u})iO;S9SF?@HrGK}7O<ZqY1>TU<*DiSnR~3IjLY}V33*C2 zM4aLMoCeb_MACNg6uW6jt;F?<-q^{5tlq;jy0!g-=r~F@sI#z(r*_DPn-8}Gsr%(o zz36gpQylvB)~vj&*gay|#I9P+>?QTZZ+;}r&^LN3PK9FU0gru9KXwf=p#2B76FyRt zwrt+%w=2!8L@5;GdGxmw8wl1Jn_;;;yuhN+Z2}U0Pd(Cp``?N`_k@IlJFGfuU)k^i z9fi0SuhWp4bKfs@MW4Lbh5`54@PjAUebC{dGZe`)TR_1&iO?-#3g=S~knBM_Lz0_t z^=;I=R5o-r^nmd?%skRsbf}dxpLPB5%8$=v%ooHZypr_tDmEp+xIr{%0~}snNd(Qb zQ=+*uK9HiOelNyNzQ<;<+xP306mcZ<;<xo*J%99m1P4V4qduGva0v{Gs0KxkQKEQ} zUtey86?$bsbgtv*8TsYj$++Jly)8}%dvG{_h>JeZT=w1gkHB4M%_IIk>Ezxn6UR%o zDI2@Th)t>>*dYmr8IeqAb?3A3-rG^XK2?%URBcn0h~wW=_<ea(kH95y%P$GLZ67qd zVEnjQ^N~;b8qa-t0D0L7-`Dc=;-ob?V1Xj~?R`}EE1~)P5xi>6cUksJeaCm1EMW)S z#vK20c@kCJF%3bq|CYxm4|_=^1+0K*9;y-3(v-Rea|PUHQHxzA5)8%+kDh!kV%d~; zP0kI(rg~4oUKUi=8yCl_*0R>xpEKGJ1tFB!uF!qYdz?-eE)`eY_(y&1szQGR_)x$& zk5fEX8zQHwPmkSJ=F7@dTd#c!SE-#_4wpfHzGozYKnL;ko1mf$G|cMb&I-s12*?mA z7>J?_I0Oa=3=9lNcNDiY$p7b{{eHGLb7iz}HnKN$wKOw#wKHL~aJ6H!wQ_Mavo~{g zVHB}6awX$nFtIgqafwmaa>o$E_@aU5m*qhb{xeFF&4j?39)ZXpDwbedmHsDKGzh19 z5`$IFt0PQ5P|0b~cV`&VJ?`W+RKj@C#pj9O$Kx=z!3QjnKZsY?QuePjSwo_dijMQn z7eDvP41<4v?<_z#4=Rhpjp7KN$BhgyGV28+!EwS#g8HeD_7x%AC7f_XlnDCk0u!k4 z>ins%`@5al@%ojxcPPV5ls4n)q4@qllkO@-lj4gZ3EThBh>y!d2_VMI4mT8*PWv87 zEV7Zc*H&7k5_4n$lL)BnGYOY<W<CBZ9-D8q3z2)+af4eTz}Hpl03Af45M`f}&&|iy zp0X0g2duky?HZ!RvA3liJO-8V@Y>!}pQa5z&}XhZ=`OIxtD&UZYx8ml@K)YM8f59p zM)-@aCY8*pElI*Xptxdl0x@_GI*1nJ=cLOe@!CdBX2m-(g?f#1@9owopJ=Z5qGejT za#%xq>LSDLW4tjIrVVVhl!X9z&K3M@5D3MqkIA<q>W?3@-=KD`{g+=w<r!)>hLilQ zlR*&L4BnEo0{o1C9b5=G!re~xqv9e}&AySAtzx0~JU#c0H4WVY+2T69yA%yg1^a>d z3P({+gi|2Wa$`DdFXGjs`tBHHD%pSD+E8+(48uA=yUGn&s>&BkjY%k39&Qp936V%M z-zL^SNJG?L2q$0Zfe=UQAv~Pq5viH;h^Wwyi>Yvc+fcr*^}R?Xd~*CfM#m7CTMsn) zeNi;}0}}`v`+9{fwPx)pm?hNC>(qm^hXj6+WK9Kj5!6?0CfLo?_d@t5%c7YW-@{Xt z9&-H`G~0cdhn117w;WChFpxK89@sb3T$TI2K6(2hK0|ePcvi4&1T2v5A>!#Mu_Np> zzNDpEpt_BOQ<*fd^wS%~6IXXN95nkLD+z(Kk*W(~y=8X=S2{W7ZNZVlQ`Nz9@0F@0 z`vd~!nuOwH7CJh7)qRv=Wzrp=up;hVGOSe-d$S%Kv~qyVbaLgn$<kNZ{u7#>zElMI z{C1|xeO1e7xTH&6+*cVu*;3^>dZ^q(<i-@1=rm_Y;R^(QnC}E!X8rGaEJMp)x1*#K znpMS#HTAYtKwH5H#aIzhOX2pFyw=)m%h2;g<F1<)vjRzxLiYD`55bIU!3RKEzq($B zmW3h=2auqCrXH%p$EfB`k*N0gk1orVvJz?`MQ8-dHV3_(DRG0gO=)RsL3R7GiCq4D z)Ai+uegn08Q5B&Q4fFcC&{eE+;36Nc^Thc=g_bgQe6&{2P*CRm5tPW#s{<ODsmeg| z9!*lerArk}T|U$~=QHSlQWVh8`Dgx;zqt@W5cop#8g4P;xs#{~LpIbgE*eI?{rFXP zfN)n~n^*yr>N5_rQmo2=rVY0P7>9})xYy$sIVjc+U&SD6AIzh~V%#1#KR)W6c@C<v zr*Z;fx)@--%|&V5%%&tJtz9SON(Xc{pba3>#5}R-k?+g7)DGKsR4~A!6(UA8ui94O ze<;U#7XXiu(r<b)fNHM4oFVW&TQ_9=U#&AU4kut|W#cTE7F?t$*&k&J(GfUjtr>k+ z<~HXOIzW~adj4d@PQ#a7y%POC0dJB&KobrUt4~?31V^M_4bA*xNdBa}Hk&)CBV2v? zV=)O~H8J)^ku~T&V3D!N9;*L^Em_tjSiN~c^Id>vflWe1FyH9WyKJYx32!1JRiV%d zkJfzl16+Oi=h7xiklIP{B!c>k;nY_xYG-$k>}dyW$TVeYHh<VN%j`OfA`f@W?;k%C z3LdmfAHIEtpF@u?L~hwQrUS{<sPl{GSuJT*wgf0!$|s@3%uousLe&?c?waai3l_p* zbf8k`B}i?AX>|f{Y{V0*hlrK~5p+U?+z7?jpa@KCm`9fPlv;>N*PgfrIrdqXLub|~ zd<KnQV}|c|Wp<GPL%CJp{`DANW>(VDkxPx!KOK0fNefN=c{?l#2E{icH>ebni`R6; zZ-3YWk&HJYd!3-Ki)3?41f}wa<b|7z$HdrZ+Ac`ks8>^zW_?k$?darA_=TDu3*wG> z9!)syi`0^vh68!}|NU3KA)dV{$A$s{i9!JR5BY}uf6q5k_HJhOt`5$gBDPj0He}5I zlX+4S9TXN6F-CGHMml0hFcne$$(4Vgmr=cno3L0U4BL_05Hfd_>A7z)&{m)EMCXpK zSQ|$(`+)QY?hJceD`FKglAZbHJY00YWMyVOTme%}Kr&ayO^{Mua0XKd#5BnDRUGw% zg~k!7Ig2M{<}f#v>qhH}HylLw-7B_j_#-#G8h5TDMNcI7WL;6EqxM_9-rQ9m(NRMX zNdKCJUWy2!<VzAU7XbkH2xrQR`v~ZmsQ23c>c&ifHc*ci4QOxrv$w{?Z!0rSymucA zYD7%k0AdG;&()I+;cJC#b$ZBwo0=aU5=7*jB7)&wB(@r!^AXx`01UcH&3-$~1FlkI zOdFbIBc{nQTJhZwyF#or-`+-gk6D%ju1K}b1RzJzW{R`IIK?tfbUdXv@AH8A{9bLM z$c`mtnD|dGSY*#l)-NAGPk$ajWStsPzZU3?uwGZS#JB4=Q0G>Xg+RNAa8QIhl7~BD z#Twn4k-&W)*h6PaM}MR7_3s!wG`(VpNe}2uZvm|8JklPl;#U8J96Vn`qgL8P%g06# z4=^Wf)u9H+wrZAVji^r*A>|HzH+E+)yZ384HQd}b=N~%kmT*Vh=uVvKug3|ie}Pxe z|6#RLZ&4Q?H3q|b^DMZLRD!sjF$5Ys{9wKp@+()6EUk8z6vQ_Sb#x7fGcpg?5;hCx z9=Jq#2wopMdl~&1W;JPu(U=AVdn1{e#(ML`xC`DKV)#}yW!y_DWs;hiKp=X<P$?p9 zDzU=MyQXgYb1qm!5pu0hkd>Qn{R=Nu65H~KdIN{M=~Cgp@cVvOmahl)4Nr*wgx~*L zzQp$b<4de1lu1az#J?bdDT0kywD2$@;AqGoV5WnAVUgFQ<QSJoDY(zeIO;m~`+DC_ z3GQYhdyql!-xoO#eU<?az9hJa9G=K<D8Q!&Rkvz7Cfs{FTCHn79`49NI&bB{Irj9q zHz~vZ9;`<DI$cT_5PWi>06~yO9I0XlaiR}kh!o=^3Q_;!#Sh0P$Br=3otQXt5dmSu z@tH&KaEPK0h_m9SDU3Zd83ai5_-KlOMUNf`3PXLEvNTLM#*LfS$Y89%*(~m1i*};d zlH#}+M55KfywR<KR13*uPI~*3C)6GGD?YoGzmN+yJN<R^Ch!I`otx8dkWTZAcwXC# z=YX@f0j!$R7wk4h#OI8bvmKx#nOc$<dBM?7o)O%FPkDK!s>!q#9Jt7&0m7psKztry zkj}v-`_apQv1*{XBD7uPf`iix`eS=H7T;ATRaiLwDqD%^;k#8-YVbszz(Jd*FH2em zi?7~l&spl@o?{$cK>+3N^~$jL%p5;UHs0fq^(O)MhXD&qyt{Vhl%oY=M@Vi+2tk2; zh#F#~43<==hzf~B;WOmb&?65~Y4umguqK6y(Zaj}!VOi+)q(;<9W}CiS|+uufn+cl zG1L|?iD5Q#m<w6McQ{>4B1<e9ut}DxO0phCrs^z5%q;agGHIHefrVt_hL>P;OQ=>v zBQ26rTu92`BBc>+?s}r~ztNEvPU8J8G&w-{<jhEHCxCN~E10o@hiH`$cW=?YSr<ut z&$uJq8n5)5wb?xT!h$Vug<zw=W#{`_0=<Pv@2%o&RNKw%m6ndh^0{k{Q%gbshjuJu zEvAgj_juD~9)uQZT>+eGT_LTw9I1^|w_3#Lx50!12Dd3>HKe98Y6dD}OtyN;_&G`_ z?R{u9+t>^Q$hMujsnwhnKSNvoF%m>7gX2{&02$zURaR0i=|UDKaL@mCC)y>O$ZUbO zV{@!mkYky>ss_3iMR9d1ryy=PHTGCmN2Z|}YYOR`X=~X(bh&P2pO@wPVl9rjOH7Tc zx?<2B+-8lYq;Kkx$7E=?wl~OFN=-s+-a|dK97OujD2B3^)2ysQ3~DR9`Zj#X43;p9 zRTjcy3$d{iuNm|r1PKW|A*4DP`$_;q#i60aaX1*Dz2%g)8GXF8SGlFm&<G?b6<~wp zJ#m{t#CKHkd&B=yyfg1;ndXx>>n5;qs6z9IcP*q$%CnH!L`v1*mCLwj?RmNuapt8_ zZR+zIDy;^TT3B_dqcev|Cek8!osWp=^2;iyEpnbggiL#eUsF{K+lVQC*(b*sX0it0 z6p_l%-M2j^e9ee5FjeX6_Z+x>Iu!Wh{wiwM5`YAmdc+H6?M7}=k?19B2_hDoH+qkq z-%PybLk3*)#C5p7c#6(rqwr%}yU%JWtoLC{F0^qx&IZc6g6ETc&NCN4d#%y(#z>w% zJv>U3WdiBbrzZ~WiJtDgk)%0LNvT=FLSJUL#9X=_(Ajd@K%PX{ri{dlj|ehO>a2+( zqBQlwrbQ?Cma~#L9yECueR1tDp)P7Txv+Vz&U?buL%BC;il3C%6^&XGF0q<3&|B3I zY0nU>aDaGty`l&jdHb|%dp1q`_$0eJ>;I6#Zuvi5{(_3UCb;?!K=_qNJYXl^(oXMk zdIkFdJ72+X4it2Y-q5}VEM9qw*!3uE1D0_FhLJAGcy#VS?SX`%?_31$D(y*io4E5t z?U59aowdfff!mdmNwVJVAz^Nu*ZJI${Hsw6iTj6EDjvG8*#8xk_u4a`_#r_+a^e0{ zRHpvlS%sW~o7w-w<ZMk?9|ASpfBsS&Nn6?RY;p@FavSt=3sdc9Daj?pat%_Ab_|Jj z(n{q?TT(1j*RreGa^(d-cLO5fh-M4QEQPx2#6-X&JpxF!;Yet9BVOp0C+@n_r@Ha6 zA0}?5c)xaDdj58|BKJDpe1fzn&xXj8>EZyD=5((In7c+|R`%hTeX?<S1duf%Z`AC& zKs7oY5o><$#dsuHZeNb*IA(tv(QfE^@YcBR6M9$>Z6EF5AR1qZ&vogr-Jnik2F`iA zyja$K4W0V7dyii!UFQT;mXtb-Z+&h$-MJ5hWIE}h<f2Te$!`X}z$*#-3~lYW6Y?1i zK|bJs{o$04_antoxoVT4sckSKZcl#BN0%+vaWCmL89sMJPu>Tr6ymTct#cz}X5WQD zc9&=_YizIx{$(Gk|F(zEN5EYnhrV$26<%!fEfU{gcxBTA1)2Nqw~xpp(exna@C)jk z4=wTz;Fb_}C*_u3_*!0WWfC5CZF?M4SiTZf9TqY>qsEQ0Ajq1o3_;wZq-+6(Isuft zB*Mv=1xPTrAB>pYVf`Lz5=q1%u}I8{caNB<WFQ)q`Q1<2?_n^}wcGDT(0hbo-<Buk zxWt!@j<qgPAk_H1z=@?4Th44y`-ED@!MsHl>>O=nZW;W`@0htJRF+g+lQ~mtV3DK; z)F$M`DO1{3lU;{I+|rfEQE~FE3KOaW%}X=ptiqVZ{Ukggyb^k!hP76=ETI|i#c2@k zx2#Zl#9*SqtZ4<hjZrO%`ZV#p+!P-m82&ES)jFtK%GAtaH2ghwkv2a;ZmtY1!uF0Z z!ZJw3`!X|>#mKL>JXpLlnR!A1t!IYW^6di}&5vqNB6z+B!U0PSx~Xj>-dvAUc6bpX zd#l|op9HW;Xd4qg-21aY6nap){c7gkOSqHM<WAXg)7+QN;ACB;oIYu&-t0X_l&+}7 zh6FBKIJ|>&yp5y~pTDX&TH-D(`p1D2tYE?&gx|Q=#49dQ>Yd9RUqtDu(;f3s8N-3q zhwuQS*#}%N;1(aZcbFB;kMiK<H7HteU%^%o*MG!->_cs2=hhweU;LfIhs;2)8DG>t zM=;g0u;^gQap&L_&p>NYLRRAzetu#x<nja<#!(L>3$qXG6H~r8Y}2k$L<#n>WU)1t zqj-@5-E^|?q%kRmh)tH-qX}0c%u!WI88VtgD{4%cCfO1+ZTZ!-{G~OPra*8J&9P~K z-%@gUvif*a<T#l&{Q{mgZIT4rg=Mwq$wX7mIQjZd6-c|}QCbypwJ}vWc3Z59l(N_< zA%R%R^z#s!%v&%c88H(F*%%-{W`3k(XKBIQhQBKA1B5L5IqWGBs_30`oR!Do1p9)C znOe4JrrCO+OK>%=%0&sDOyWdSN((BS4#Hq`CbL<U47)_MW7p4AJh<`%!43E`uyi-Y zBvD?obunz|CLO9Ci30O<?J~9F_4$!!?lQ+IIOH-?ZK{It#aIi|by{^i{T#ysjxe5q zcLZzF343meg44mCoPJW>Q7$oTQzMJSa2xH8ihk4tBTSOyqME2llEHmoInd0_`hdmZ z$aq-R*wTA491So785tyI3TFZ+NuxNNTD(tjkvdU#;XE)eBjAI>E6CFYD3a(d13Y<8 z@Y~Dp(K0`UNU>niBTpJy&C{LsKDc!<?a3?F*;sx4PNkI~b51#x@dH&_$O4SE!pp0r zb+ai|64ghWNX%w05#3Oy(f4WU>lwr}LPNGHyQt-9K?TRl+8nT2#!9eiGD~XYB<%iX zv}Qpn;Jy8+(E})g+lCfUA5|wh@BZqWi64)Ca~jYRP#LgZMJj{3@$pL!2WG09nu7`O zTm}-TGOWN%Z9fucj`a*^&|>cjUm6&clKAAH+xBqvwb#e5v4w|}6084IqbiD|bJtxO z)YFaB%w<CzIw@0$x{0wgqP=~!20C{%c?cT(7OyTRX!%QQGwfjTtJZgTKf*0=65Wq} z1lPEDzN;$JdyPh_dqB4^BD_3C?3K>o=!tP40Fwn;Ro?hw)8I%h48wX#UaSZFlmu#{ zBPd`ue{jmzmmeDW#r^RSqWa>T@2A5dMhcS@`wJY8UJzDdb8D1uh!|K$S*Cb&$m4W# zI7f40bhZ_lgLV$=w0!U~D!Y9{G{xVi4_DrBbYRCe^9_3xX&P<ja&9<vkoFLZeQc|N zWusR@9ri_mG=#-Yex-RS`3^w_Sk$7C5`GYHWDzo@CyM>xMZ{FUI5*??)CTF%NwPHG z3F_Ue1NpDF7mf<kmf+_6+CoRJUBdNjLo990zYsdWR&EXCQ+cF8qAk*s>}RDX_p4TB zWZ{fMc-LwQ&pk_0Fu7*>`t6mpWY_2iKXj*9w-mB8)}25KxE#8B9Mp~RsTe`GC+fpg zC(R^I-Sv?YN(Kuz+I-J+WV6SwI2)rB2L~m3)aGR_=8}@61GVyt2heR+`{D#5`<4o$ zr~wjs)Y9IHA*eVlMl`u#4PWcl_s_323De4c1<)v^q$nP$_+xFB-2uP#R0<`FUO=*< zB;i4)uEg<8?b<#9xvLBgKqijzd+)lk)Pxql>CifclekA$lrxHRaa(Q+`Ofd0<P}kG zHC04Fo^Ac_*zMyUhUvdwhAx~x^liSdIalhq^s6pBI%LitJLmZehTiV-f-zO<qx@>o zEKXd0N;esl$e*Ve8Ae|`L@%`6;}!1HVLKQL@fQVO7F@?pN0aS0q-<E>6v9%Zg7X+0 z>W~KVLeG#k2K^kH@f%u=yY^_8TWz|nQ;@K<`sYu-uEQX&)9%=u5>#Wrs^(|%^pM0w z>bvS2bx?=&cMet<`;YC{J$UYhKGEB&%*SulEpVRUY&u;szv@N`nOR`9E%<EQPk&fw zramf)Y5QM9q(Ta63O_5OGB05dWe0?I{jOF0!RBG<7{?n=vXUGlxL=$Ovv|PUj}h)| zD4cTAXw!b}InkAK$B>JOp=<I)?9<)uvkW+qwW*Ns$h0@=_Gw@gK9=aD$4q%Hy*~Y= ziBfWVpm%(5k7;HLdAf95Oy-HKw+FkRRI;z%G8{|y#lv*|BIDp0%1UL5kVeZ;&F(;6 z3bVcznu^WB^8#tElGo#4{0md6<c}uSXx@3#r*3m93F|By09R#H!(Sygz>zK5uj>DB z6`s=%ST8zj5eOb%Us&ac2&KFHmVz`l3|Rm#!EUk5YB+EM&FX`s+{M}<1mb3@EV@GR zQr2A{9X{*|dmHNXZ&%@TUj36|JIQA|(Qo>LX*D%KO=~NvtBZ)-O3RI>o)2bbIb>}M z)JCF0){l6|H|DPq<*pfo$}$|1vK`vG4Q%c!EE_N>8(t_IY^3vGI4?)YEW^_&L)|EY zMs%gdlNxmEfWn?_wk*J}PqH6m=z#CELZg2q15=lc?Vs{?J^0CBJ|=I>inNEOPLe56 zYbez)#=Etkxvb$d)4$2FuS{Tm#%-Q-N9R==I^cAbN68e9(x92aYo`r(5)0O<BtT$p zB9xiVR~leit{vn~Hb0<q6PP)d#G&?25ObECB_l8j4pz#60OSs0UFSj`Xvl<*TI`9k zr5o`mo}#5NrAL4Jpqkye>pYQt4Ak2V)bs7G3<VWvG`XV@YGr{>cqGPkhyB#RylT|r zJ}5%V|EZmTEC?t>T%vnbchwA~t>>&u4qWO)VBYo{mA<?5vA|`G(D~hG8W)~>5z%o< zaxPANt)L#n$Z`zo18d+1`(J!o<Ihyg+c%fC#`#Ztn)UyJPn+5Qmi>QvME~zUI^_-f zg<mNA_+ebkp+y1C)UESS86~rj5zu5P$f9Ck+>lBb<@;6#bg|{#HOm*0Z**idD9An_ zKSI)elgvTWU}$ZxrSrR(KTm$We;!c&p<K1k3&nS9KkFZ^=CSu~3;K=iu4l{Sp_1Sl zi_V;sVMIUbIwUbXr)1lvO2NVURm0~!qR5)Wb;D=ufkS2GQ51rg8S!B{A1^_1B$b6< zUNrsotAa$+gX7M#%J?C0PtLu3vN3awh(-19nkEZdkmlGY38B=dP&8U(QxF}-nBwW` zdz9f4$INc8`p~9=XpW5Y8_TCF(Sja<9+h@y3;4}XT30HA;g-H}tJ7->X3WKn9JnO9 zI5oC-^TZfE+xOGm9AxAZ-^IDxJ(Cm+X^RBKgs8s)EwkhispnBf56P;YTnPsx2^qa~ z;5YEa$0V0@{n9HF$%tM20M~;p|7eEErbB9><8-Vx&SIgIgSGb`K0lMgZL__^BRGT~ zPILGl`mD#%6C-}$$Ym(wRxNb8on>oi)6-J^0yH(FzWeHe42rEkjk%9<c=J*kc0*H^ zJ@)j!DT8G;EyKWAgkxRRCXdNg?V>4O(~%e6u&84PE5M52-g+4*S!whhY#K1k9P@@* za{Z7I@Q>BK<sNcK&~S>e#ayWmb@P<J$*T(c?@pujj?eW2C<sV5_<zC_%m0ok6?Y>? z$?ra-l&hJY%l{N>)tay#x@wqT3M^xC=K2}MA#NEAR`~1bWLHhaw&}_lDNqzrQtPVP zm<HzhNh_0G*xTMo+StET9e1#`l`fQjK{l6Jfk#53Vkm7wVq;*dZuTLDfaUx(Pn;x6 zBDR`Jz1h0Ta+%>j5q!zwMdtGd>Va@51!14`-;qS127C&1p+Wn2VCw5duIx5Dd!!KP z>vdt43;w9-zo=+)=|*-K$RuCWIXtOOe6~w`zS8dkze&z@_q?<3D#f@N{(Cs^*Y_2q z=6OG;O=vd{JM5O2@uN-2*>5!}ZnqFD?C22)A#g2*C_oIIn@lSKVV@Y3>DvaGOEX-0 zmyWhc1Km0{W8wQsAi(Ij7zVY;a0?m02<I~vg(BX~6?z~Ly@$lzwGj3DwV_V~;u`Ih zCf}pc{&f0VYx3u+#BEa=bBrR<9AY(X`sqp)p|yXOMFokuYRpSHfB|?W6~|h(5&Rof z#6=h!U_F#2WLKLM9txEuN>#HFYi<c3Jm0ECayVE*l8{+7!g9ddI5-ELvUZ5%>99iK zfGn8^&j4V}i?a>Zi)bC%IWy2LJ#kmC=W$OtvGRy&VlY<+DEd2FO1cYwIx~E`GR2Ao zna`WYtjO<-=+y%=uK<AAqzF6bA)lNyEA3!J7b6=ptg#H)b7o;N(_Ef{(8O3G<g3lK zIhvGu!X+a!z;vENt*&`TV85vRfw{xgwUv8CC{Ny)ugun4cFTwtw1w$$T*`4u(d3C7 z9`h6n+Y+uRTOCm_D+^{aNc^&e@-XJS>5#VG#pF&BkBKfjl<?N)-=?xb(MpSAF7)N8 zNG7`_5^NN1{(BM+qblUi#^B-flYRCr?)YQF3KkB3*D@7CHz5W`;az)9!)w&njJ|F# z1MD`1UB3WA0w6&pgug;!F<Fzq)^d9J7?UiJ9ZLduUo}-kL##oJi{j)C6mw#q`=Me} zDk^s6HQ*VLt~OOaf6QTTnS7<e{bB68o=22Y-@%Q>j-Ky(v2?l{Dk>ZUoIxt45?97> zlO$XgK@ZYP->fn*^9pgFt!ha|Zkd!eT_^Qbc`FuCwmxx_e5XU0)MvF4Yj)e}4r}-p zML=_hWB5hdDbde)D<|-3+Vy0O^jD!D{1uB=sXyqorOzFMFZhP$m8hq77y327FAn1a zM{rNkjzbRUM)$i-#RY0AO;0~MjP@3WQ?R;k2IGUE7sW%hpYe_sGER!P7m&NN+Y09w z288sh-9>&a45YlJ3=pJ!h5w?t<%Cq&r-t+g3M$_!-70)UDGG-1hM<=2?s#bT``;Qs z&g@zRSYT!ixdhJ=+)zNy96$<R*%rtXqfo2<3W4)13r9(_tD;er6;_1R$(Dxn#JsQn znQR6slh2Y-s>rPdQ=wWGd5o@Z`inT9+gkSbqM}8|Lg`4-Wb>ctpKLiidE5l@&>g|# z3wP_L<g!sWNTefwidZ4(RV`89AnDc1G5}Of$y*W=mfZP93~z}}+)r*t@D}UYXi_c@ zzgZSygt%DU2gXA3KU%4c^xd>cRZpbM+hemRqfnP8Ssa}1#}W#-V4c;N{7%UO4150i z5hY!Jj|!iIB~;OpZK7ti*P$f-?PJPyG<xR9_OWFE?C;rP0!z7vIetINO4Z}?k<+=S zS`D`cYR1#AW}CtNP?06_7{A6H>oBHaG&r7IFD_UA2l|q@#16Ig{!9LAd3o6|lv{h! zL)XO!<yjfAdKVm`gz}$ZF80a1bd95Pacwl2T9tU=I#c0UAfG3L%fD`^!L4je=1bFo z-@Adj=k*rP8S3~z&U}h^jX>3+roz(Bi^%0`dpD^!(Qh3SN%x6jYLy$dN7^K9Xq{Rb zlq~%PDgWa99zG^?{So+1GuC`wOvtQz&2>?_D&$Gskts!RY1xU}wD@}FxM*r(c51V& zO|DmGcjEGqCQTZS!GQA63>l#gu2$5Ir7|C{CbygO{necQ`9vy0Qhx2Me7*s`6R3No z6WDuatVa6E!|Dk_`u?mG$8`If+5Po8EA9^FU4dq|2_C)XOq?%{zn%OB>6|)IQu+E@ z*GFi6qgxhc`e|3DrMJuQlSWgcbf`S+q*8SXVuiX6Wowl)Mw(YeSBpljI$KhdDror^ z|B90SCdY4J)*G0KHj4195+C~w$~zpvx=OkLqz+6q$^G!~vI4oWWSJ$j+oKdTqF})f zsW8{)$vx$!tJ1YoU>UO-VKQ`2c5Tkj4tbm0B~-9ep(pfZGvW@6x+XId)x8L#K(D}b z#UIJk>=-Jdc_pyK_NuhSrt1c^A~y@a3&C%p8q<_?=`L=-3$*+RHGApHrm5UnM<q*8 z!I~XccV~*c^Dj<{nmx6(8hkem5iL=l=p#nq0Z`PV#^Q<Y^FD-`)x{g8j;#VbrI<#> zuq0zV{`bDT1+*12e#~jemFT3Su@B!sb!t@^P{_Z11?uu0BAnur#Pk?WxzlK<-b-aB z+R?fO#?EAAv6a!`R!HPwTJ=alw1<E;>rSobe%Z&Oqhfu(^44~}Ok)HE=r!4B27rPU zbF-P>_U_{nmYY)Tv|31>*ML?d4>GigA5T?ZI~Q{B11N^`1hVZ{s3*ogppCwQ7m8;* z8_f3Dp`P~)81kW}46zy*)kbbBhOWZwVgx}>bx?kBA)z$8_KQ;S6gQ|8#bmei=!!}p zup)Y`CbNEw5bKDH29J`)J#4t#Xb=a&=n6-g>yJ{#`;VYn2t@ZfYr5j9UksfM$Am&} z9=#tFe8ZENA9atny5y~5K&2&3AA*O^93?tS3>ya^t_fEoNDTQ`q7;W1lCGEFMN>R) z@t3jx85I`0*S8b;9{2eRmVFogSCC~&H~KB-`-d?`6!JK`LC~efkKlm~M&i-f+?6;J zYF4i_AFaZDY(zgZjET4sh($?Iza1*|Xyc=N*ibbI$|3obW*YiRH{oS13B4QX7s3JS zF9x$xdI@%GMIg*-WXh>H{qyZQ`{fIM9Z^_4XsaQq{ooo`s9YQL$u9B8_+T^uh(oWy zq?}_~#TUd>Z>sD_ykrOu>4*wBCyGBO8)KQzv|fgJ<%-KtGEpDnc7PVSuN+A#jKo77 zVc!9_amMr57T<xHqB+>XQ5e#ja7T3GB%nP9^+Se1jF-V2`Nzn?YABM2=7NM1EW?q? zR;WZ;Ws;Fs^wZV83+(czzO4l{dDR=L?g(#6!xv`(Ht(+4Rfg8RJirH2rKwQCIIKn? zNc-7sj~wBeqysC}gcIBcnZ4*~V-SMoI9oKkPsT=JfbzCsijm2ryl(=sW>+f*)g$B& z%`79z5%Dbn7Tgd-Q&Jh$DsS&0u4>K@OF%&4IJP3F0tKf7b6PAfVcG5YUuMFBm%9M| z&Fh*UgVwNf>=HQ0Pig_o5b!vt)%LA5AR#7YjD4_7s>^7t7d$tjr}v>9@93KT2>2bb zCZx~<YXl61t7JkH*yrL-(`1f-dgA^XY7vkq6jRGZX2<ij4@6tQ@0y2m&CD2Cbcw*J zrW6NQaEgb<(3-Q|=TIl|i(VkViqKl)Ws9)p^{4Ryo_+UEo~Xd4jJI039hO>)49?w{ zwrl_Ys+>BKYx+aKE2kOU|HN`>{&$uuYG&kW`9JKom<QGe<LK$ew=*++OBM+L(Gb{X zh=4DtiA0>3mk5tGNv;J0nk?@|IhMGU-3E=)Oru}su?RoZ(zH&ac4nlV3Sm=Oy|nFa zb2G8s+-g^?{o2df$jz}9JSy0Gn0e!I<9pM6qqig5<8yv!0kSK6R|g*3Z$NOX@v6f? z5Yp@NfDHYCuJ7L0ySsz*irlsL=ifjkk_Y_u@v;AARztS@=WRGXgnc}|(5t0W9;O|d zId>k&m$3w_*?GR6IJ976yAnZKP<s>ku~X8_6rFt*QdSJ)CheiQJje7f39OzQAM^=# z9?r?bW4oK~pA)B<sVQN5EGL&9!l*m2i()cjWSKUt%U{R<>9!$IS|@5wvq>AzWiKXw zkEY20eO-n<IB3;<X)Kcz`evW-QU)@+J?mqym|)Bz_O4M-_BKGKG$lyQ%!qZBQJFU7 zPy0ioAVPenr0CT8QMu^NtQh)L8k5ZER91(~^j0_hyRkO0k!rp*;yn&rUcx%WR*M6q zP3i+o7X7izYvWmWW-YZ52Ha0HDAPsL%i|CtdoQg6AuNm5XkR3}!*LvA+`&!J%Ug(Z zq)TAs<)Wx3!w8iVE;`F~f)iuh^B7lOmmd8A`{ZXcOHU?nh56$N!6_*EuUVJUNTz9* z)`*VBo;oy9-^Qf}?{<H85K<TVjj`GGRiF1QKT;R=&B6Ak>@FzokL0`f=rB(|)`u^Y znI8#vMz}i@TQA&waW^NvaXh!+uR<-M5)F4sA1ItZ0JqG%0<l2N)wnvZ9LL?HSB%ON zF3ulE$0lfgx&sQ5uT8;0Fw!Pu1!6WL)^sJqC=JVyr2VhtFjxv_>JT>7M6)RO8G)$P z<fzy41p>{qqO8*tTeYDr6>~r1RFalG9O5mL*~FUKS}7~U!S3{{d5NCAz4whAsBofe znlvVLO3UxIX&|KHaP)$m6_SXq?%c@V-vga$TO^_s@gtxQz_(lCdGf>%+q`mWjeE?m z)JUD^XGP=l@v3#==C8@{592axuVZbLAl7PMI4@A`K!}00VSl9*bMda`_F-gLSTn+z zlbR2VBDCf(DFj$eT+d*Q)uTLZ+E{0+#21O^r6sjS#`}_a(*H=}lrbByszce;Q=Y~_ zN3^=k*NqIasv0n182{#yy`|T|yO7kA>s;cm;6z0Z?cx*p(|-Ie&R%5~!7O~|D!qPc zV_sIl+yOORFvjJ_Q;4AqN9w()l|X;F+?j!BlIb=mM}d*QA>u`s!=p*2)iAjEa`s!P zJ9m}&h<$jH9omE?rV1}8>$&ax#zy@wA}vSPLDHcVnxFK51(~e0M_>Wmumfxu83Evy zEYOBES4VRLFB%fIoCj_0z?!d2V)SDs)5mK>i#`4qvB>>q@)r6_f15m=COQ<Q*5`<m z)GJ-Ooj+TdM361-H8o62@z2$y3>_Uj-|EaWNfGNd+B~e%7ApN%N52dgNYdy^3FxjE zCwkjaeYFn4eyoG*;4K!=r1$kF(ZyOjn1%)3Xy5N3Nqvh!KzT*|YULx}KjZkI<)c4< z{Y~=yzHgWxU_E4e6MSC<!3O(xsZvvLevrKtyDPUBaDL#u<-4u78{f>|d*|rb`_&iH zp#O*Ds|ciju%LLFji$Y1%%jJ~!JJ`HDFrG5q^75!(rxK0E2MvHZ(b11oKJTKZ_PD) z$4dost3k{wJI~)fVW`*Qz}^83@{i`g-u@k$SKg2AK>t2Lnpa96xqiU|1M-i|K>x4< zxUZnMSIQoSy<UtDP67!{CV8b#p4^_+DUU^Wcbl)a;D1WDh#!nrkUOfk^gcQR|EN9S z6llR9XoO*+NUB8DS49D2WMZQOH85eL>cJ$=WC@kwd<k)NY5M^87w4s&P7(rjk$ko7 zt$f4Ol_sp4k`lwzvy-NzQH>!wiZe3mAzPmq1Wi;(*<w=)rFIWUbZXTh0%i@=Z=Z;8 zmmxl}N$eAnNunsMrMWVmS<$vg&7adI1g#`kkz%HQ*gJ^gh6}Czzjaub!0Wr{ocwyy zB;xjcUV}&&P{<QCt6<`&)P~UN*$k48*2Fw}G)rJ=HEY5#jf=_DsrQBJGbS5E=^0?> zj3U@0%TTbTjH^j#hWS{!(EO#!3Olwm6c`w!X)u&RYH5rK35(h^bq8Eba{!5O`<Ke~ zL`K7^O3m9Ii{(a<>+Imiqqj_?`9quHO)zbpP@Cj_VyaPiQj0VNNCxbqjARtxLM>EE z3eTh*;W3exhTGNT+OT0Q!_4kMB~an(qJ?5qROPD`p=jF08z`>B_YFrAV-_a>)uyEE zj=>CG9H)hVc9V5|`i}VDvt{9O`z&H?2`N$LbAfp&s<TAhO<}yh_G)v}mgK5(sK^0* z!mUDdIPR5BCfeU_fr?w*JYqzgM+&Xy*HUFlv7^C!v6#v~sza&0lCm1D*tCeNZ5`}3 zbs0ERnp8!3xf^f$H8AQ!N?Z45%0j8iPZ!Zi%gAZO9Otv!F$dbI$J5s|M4^+odW#C0 zR|qc<GlUh5<Jy<X#QU7K`12^kwN+6!L@7g*3r>iSN9|i4gjACgF)vYgF`XbiTiO!G z+GS%Ut21~juG9(xQ0L0~e)_1xH_DudIw$tG%g{VS9dz5b(C$5>Y$>A&p>_^+QgKoV zWBN%!VB|;Gi#>kp7oM8Ed@I+to)#|VhsVRHd?|_scdKB3Mz%$AqgKU2HWdpNDXYWc z?57t8>D&<QNgX$a<Iu!KrjhJNcg$iKi-%W`pxLr|59y0tqJt;4X``;}UPQL3cV#xj zlGLED(C$Ok|H!wjFcwDRq}iu%Y9z5oZKc@<8CGz@pYZD>xkjnPbc)a9UHgi%Ky#Y! zDrmOh6qD!4kg8cv9>}mF(23Yhx55;|<?co*fIFTPLoOa?RpVY*SYuPZ^Dx&AC86_$ zemYTwW&+KKd}BVNo{~^2q^Mu;Gp7<wyP?jmX)~RjP<}Gwcxn|5)F5vXhx3pZ&QdkT zGCPcHl0NBMC3`7@I1=5RlwekOOr6F_gA-h@lF}Hvm}=BMNFTkBeJ+uk8MB3M9%(kU zqJX7X9mDw-WdRfExF_3|t^2z%ly?Ms+jXumDk-Q$;;P=%t2nN*f9Y4BBPoq{b&hyX zI=69=Dm&IoIX_=(#EG*>iSJ@VH*SW4oFdwyY6W+81k98y(~}Ip%Eo3oIr}raY0Pun zx$T&0pwjJ4oF}kfT@KTNLMU<6T<NS34?X{#(20L7qYWc>ASXkW0jH|x+|JeTp;QqR z{LWXQm<<mWhw~z0ueqYhDssQw8mz0Gi@u9sMM4I5#`ITUT59?ny=ki{$LiEGM-u<r zI1XugMzdx#Mx0_AY)q_PzKMhSi_#e8{-ZFIJm{7@6bFmR(;~C3dX?a6VN$VKb1Bb> z0{Tg$+|T{}F4jMa!`Ms4pXb{!cfuR?Fyib6vpW*=)5Oaa<&W!yF}>8Y!b;kCRZG-q zc$j#08u3;+*7E+6D%^vz{_uB*k4Y7m>~b;mzv-W@u6%k0SfM18XJmKr5KCtYxtRPS zIJnW>mfTt%*AD)?dfAWs@b=d6t*%{fo5A8R17VgU76?^39D^C@y6bm<LBzqbezN66 z2rhN?B?B|Z_w1|9@XF4#2PcJZGW%*fbE}bw`1g)wP+04tAyHVH@Apvi+;Sd^b#Sx_ zAsL(EqbHM};>lvqjB7Utb<DYek>8zb?SeIs#^+u^m*HG>S%$UzV#&_4)C|Edr)g|0 zzg{2`7Ye4wlhUtb5MN1>PB`|xl{v1`SGywDLb+zi#E72gaX~*NC%yYVGp!zh)AWf` z+}H`Jz`UF}#k5F_JR|&dQPUvFnk-Rfeu^&n6gDv(H?Bg?>ICQE#X0~Yg=!nmBrw7; zYq3VUtg2=}*2$UILDJ{c=;4UcGdql~XHFHd*D6x3%BfAByn{i(+@0e9skEC(Y=lkL zW!dI%$T3A^ll<DP?_i(EueM_Nlxx#!cPk=%=dq#;3nme=USl#lkic%85CNA)=OR64 zbdfGy8NW7i?0zAzn^}uJ1gq8DB+6qZdRwI4O|{qHg3_rwC&GG)%CDLzf_y-nA@OuX zz4qN(OKl<WUf@7PfmKIEu~^g4rqaGL7spK;P`S!?Q8E#VBxprbQ!fe=lM^k<a@4`v z<2)g!0cpk#*G|SvC<!md+aUa`#>$FU?2%{Q7w((zhY{!G#r5|BCPk8F2H%2ZsMmJb z1@D8MRJHU{lveS~;nDaguT2fdRQjoEDm;2M&4HNfq4ofzj~xjX<qMl@yoAuCPd$$^ z$>G~lydWyc(#mtjU5Lv+H@^_iH9$#;UQCZy$8X()w>&&bS|gwqAyI1Qm2ZS%+3#AX zpr`CP)M;yc84=%7tw-g)d^B1^YqK@id_k2I@+7Nz#Dvt7q7Kp!FHfhx+lHGv8&%H_ zTMZsQ$qXe_dbSvi!-br%^@Rz752E1xFy5)fEzL1pvZ#dJNSe`|2I>;OqwW|S+}<%m zhNAF5JD5pZA6Td2JWX5jV-pyE`AAu@k;_hv4$apbFL!v2-|#10|1?|J38wHPHFjr% zX9(lAK%&_OP1$D_C22dSo0UwmlUvFr7*@|cYVq7;r;z0pN@K_JpRALoY~T{9o5>Q@ zYDCwU^C+DkOWv8kEEGjy$T(B;y@%$YP$4`<rF>D1F;%9|E{IN-3_i%yUFZn0?)9Q6 zd*~?Wz`IpZtlHts=-3vjVvo!V6*qACEi;aGHC0Xjl-*fzF^XTr|KZivoXP)F<k|>b z;Srk3yqKo@-wR~2U~O!nAwcFBw?$mIKinLR6g)nt&>`x$Xo-T<Az_u=Ye_Szh0%U< z@Kw!r2&ZTVQ>DZ?l+#+ZFdobK;=Ixqu`}b0L8UukN$?XWE-vj^65%ftDv|>;6WxGZ zM41G+Ah9c@5$0qTR9(2PvGL1xv4x{m?SXz$eM52QI%%jovQ2@ntncP+VU+l*rruJP zu_<aB=<fAZv{E&^WWO|%dA~AUpFl=LlIt-4)FUc5paJwYi~RFOKJo#AOUprAs_<?V zF0RT|DdsY9<|IQ|yIhg%94Ic9Y1UCj7CSpPCCS87cD83o%!dR7*&_upEIv_j%vz6| zAC*xkDzzJf?JF%O-8ES>$4$cS1D31Fg1kc9@(ld+Nz8*;^TQrx3Ikm0WI)X6av)#@ zV|i(w1)36qWlm%SS4nT6NNy(4HtM#Jt*%IZII4~_;7^%%+Ct`$5wDmvk`d2XKIpZu zXsDx^BL*}^2Uz?F2r-)x7CM2YA_(S|O1q$w4y1)WLFn%?N@L86ZsEr^!okw~({Vyf z)~{!d8yXS_jPf}1k#?97b~^c~%LFfA#tll|)UygkXcn}K8>$@Ggfxieb%>2HsGMYp z3$I(lm5La&0%f)~SeJzrYB=0j*U)$gQAOg%XiB7k-G}#i4Q_KK_PjYL(ZAP#xt8RZ zKwC)%Ym*x?K26SGlkf?lirC))*2V>!>XzIKv3Atd^#vmdFv*(?<h0Q86NFfTj=cP8 zUYik?qqJ&yhFB!e|01&mK{GA{$+?gf76D3G9+u02MK-t~{|FfFVu495W;?PaA;dJJ z%wJPfonUH$Lt9=`|6-B!K){Ob)01~R8vOO<0<$jHecXCfJIROxw!=jPE+c``f})rn z@Qd(!FVbSbEtoAY*o1f<kHkrCn4Q$B00OUUaP~0~u<y9b_z@?`@o1rFfOz#cgmB5v zn{hni;u5=6Gm^C&aR1U_T+5p#p5|xbQwEu_Srch(0hn%Tun}qqT=&+9%wT~*`w|pt zwu%I&j|^Er=5zMof1eZoeLWc`k3zz?GevRLU|91+dr#%J`uLH4%K8D_C+z=l7RQH( zk2Bgsv6FI<2)$PU6lx#@r$r6VfNzwHT!l$;GB%Y>9vZ#lc`1TdOEciQQ1U7CSu}ZW z0A7;j2|JgAj&!f%knQ1}G@r$~BIGhAhwg6KWQ9x@)(xiUobts7UyNAl%{18?x>6S2 zD43jy=cFooZ<-?DoE}GbU-H41#~Q&_9s<VKYStM0Nmee&HhEy6iNe}9yJLLrpGh&~ zohS4>#ZTJ`8~W7x0!|Fg@+)u6G`%^z2YwRD8lhd25u&i4Z?Ts|c4}e16s3=Qr`5pj zTy}A?w=qtIU;iMz1wr?4<QvatW8F-zX=NT747S`w=odjZ)HRKh$l<7pzPgY;&GVxk zz9GjLOBDu9?gyiSMh@{~qzhxOLtE~rDGOSvix9U{1l`yrf$7t3L#5fXFAE%maKc~+ zrQAh({hm8D2!6UnEDP1hgZct#zU3V7BP@#!LQDh4uLr?%Bx2haUJX8)4Z@s_(lO$^ z4in%*BKAQYcm?<R!XbI(ogEfG#YRNIOcjwO2>eE@_mEAUMi<iGA!?kuQO9O-?3#Lv zzGlF0$LwOPnpWEYd^%pE-Xo&6F=rV27Cy*UO#y|O+Ce+OP5%|(M?WFJpkJu+4{vqU zSv%Twy|rU)Gxl}s`R$+If_#?zFkw|MgGS#oRq;=#T*kfxL@i$^+ZLa&1kGPq0*0Tg zKC=MixK+Ts3of6vO$hRu+gu~GfGsZ!(Dp@H_z2<6jOu3&(m?4h?kHtVfvd+%AKm_e zAD0k+sT%MNBQ?~B<LXI)3)VHh>EOrS!Yu*D|6%PNyK@VpEbW|}*m`2yHcxEZw(aD^ zwr$(CZJgM)oi|lo{jsXM$9O;NJ@y}1_rBL$b6(2<OxjrW$~)Le>M;J27Ak{Iu2|Ws zrT@6p)DL*w`NrKXPT>Vu6T2ITZm!J3s$<ufGmct9*5?K3lC%$VU1sl;3g0mL5%q=A z3-+RQsU5CcrpxNKon4~jneZS~aqrg)sr*>e=pNh)s{B}hZNe1yZ%3Jh-F1?eXprrs z9nazGXA(DIf4p1}J`gu7+<NL}=AHH00S8R%SRRtfA>jVh_c?QRQxEnCNYNh9lHEI| z`NAZ;98%@1Fwy};=|h^<Gn5NFP<H9=ST@+RRRpuWqy;BVCJ?eMoj$hRbj2Mq>+W9_ zvI+Mbrv8$iVmHWtzxe||_>y)^OUA++O+#Prm3E(?iKadr3Z;mCBlLbxbXr5;;s!qx z+Lb-=1`^3hW<5K4@U97nPfl88j#eIO&0#!Z3onJ_jT++w!V~WXh~kH&;4%d4pC(Ag zEj)?U=JgWFduGP3i;C~X@bk2ZQl&kaFkZp!g=85+rd=aZ()bD=nUIVs-<0cb3~q-a z%gs0eGm4CYPOMvn_xM1cZ4-;DjbjT+1a6z%XufE72hbsx`9Dbj?_!^;-yvz$5<|wo z^@rdFw3%EF#PCP|^Nd8QN<ykSd?CL#nd<P=nmQ+d|3v2Lv98oWRbO5xg41CtKj0fk z2&QKZ4}VCYQ><k6v17#^>H+$OfA}@mv_*1-7BV)Yr6wHV_-BVx;e5yqQpe)qtQME; z1MfeSV#X=O<aq!PP$J#`q!iQtpOs=cW2gUZvH36Sy3&LSGCx8WtY6<4dHA@ZFd}oH zXaF$p9~61~bRf!Fy%q5_div8aCLC_BQ0Px+R&v@8pl|V*C1h?0e<4=og(c+{8=m5x z?~gawUI?9k>=A)cI>h@Yf;~~cV21k`j119Ttu}^25etTmCx>~6qtF}dw)=lW!(*J0 zX&s)42d@cTLkU`~%}53hH&z^YwWTKY#gBRznM=HL>{f;LvK;dmO4YOx2>NP>PeJ?1 zxp$FnpBY4>ImLO}lorMFkD?XHT;mL5Sn1M;%O-#PVd54mbo7Zk9%$Ollc#mG^a-mS zRYFRSh@UttR$9aVh<3Mu*$<{Bf-)?DF6o!dUXA}H=(z?D#jUxuYR6K-rD}USbQ0ZZ za5($ogr}X?2J?EMV8RjEInzBy*b;|WRLX}sOe00#*hPzMAz$5^CwW9s<VDkXPGzBe z?00~;61szJd`FquP54AnWQ_0dy;Qr+@D5wit`06}Ze;u65SzeMo%Z(1H_XvW%Ni6Q zlG$=I+DDA5>9(f_B}*g4<raLr2nx=W+C+bhAB47u1Wp&{63bwK3yq435x-P}z(B9w zMyBLPXS7meF1fDjz2R!hW77+xO*WIHf51#7f~69hUJ3I%Y%2j%S3il+^~}X~X&MGL z(P-CO=?EZkAERu;Q?EoBzl-gcs=y===I_TCDSI`U&80sA``2MR$(T~s7F1XinbLA) ze`2D{w79hV*6bLP_A;V#QWcConLSb!mZzb`CRJg<hk?rJp}$I`xC}qG5o>S}vM3vs zl8k2t+b~S|K0}G?`nNBnO>f>xYPz_rBaQhRnV3#4GTD^a3JG6;^@1pDy4bSlFgtC$ z6D3@0;6x!t`ka6c>C5j^^waKcoW+a$WP*Fpx-acThKpPuA3gA8veiON-uyhe<^ZO3 z#NP?|Y54q7R(taTc05MX3IYj?>VBJ&=G_`|B4yU)g*Z5g%|TbyJCyp`5#-Ase`11U zpjQkJ6e)74@;#9^MQ58T^0D}&T7t+M<E@C=FNGTR)!KPV3O%XP`!03=qvi^E6oOHI z{6}Ko|5MHV-=_E2{#Ut0sl9umsABl^5O*;Blfu_lkRVU;3pP&BR+GbLmP^#i&4ZM~ zZ=BUgy})G^bTLiN!dNo{RIL$Obgld6FH4>mm6jPpRyFICuWHynKAq5gL4Td>4=8?4 zPtr=WVy${-XL2}Bdv;%cRx>56Y<t`q17Y1fo8aQc4tO5k=z(C_6Z;p?6QT=p`ojc< z8zLGp;QAbH-}oY?vRCU7`m11@i@>>aG$^g!X~YhM{ir7zJN=6GjQ$}vwcIQieeX9u zZO@_p@TD)g;ffBQf|R_}F+AmaM2M&-r7xx7G2(<VWo}yI95nWLDFbN`yneDGHx%4? zdkd7j$bF`_9Dp3vTTp<m(rpn$_MjrvG$p&JoGfOW%nTD#VDs+&usG3Sn+YuoCns}l z&`%h!Gl4`XU@BAJSn+)`-`v=p>moWs=9sg;Twk)a%xbQd@v4>m=xCv=GDG%IY6Or> z&RO<lKad38oSuAYLv#_o;+&s8r-h^q4k`WVB7%Slmyx`Bc{n0;`<EdZIleKA)d4&z zpW=EVLOPzAAFEzX)_2+tyRW6<e0SmB04p;pPsB)T&A(AiT0bxdSOXsYAsGK(2{<kc zwygp1CBl6y){<|zu}q}GakWmXv?hv%TZ4h8#es+ES4I{!JtL*0GjXZYYmEoR32W|p zMvJ#|`YYrnpiJhlq+FXHrM|pK<j^)M(}3jWh<xfQYDy$A2${w!*QkfVQ2870lAQ^t z?*6i|($8j9sR*3n2eXEUDGhTDaQ#_{W2+EBCc+JSu7aJ;;F>*4OpiL@0n!Jv)krR8 ztD#)~8cR3KZMhq1*zNun0C&Nzx>raQ-)>s9|Fy-BL1%`Og*yZ~P_uks`#7yFlAQ9z zFBor66tnn-Ti>wqhlYM?J|GdHC1d22BJC0#md~AkY%M8uR$YaaJY_?E<`<zdI>5Jl z158UvZr&Pb-mE%c+&Sts3}Y$KCyD9fpJU;MQA7Tc7M!z>hUpWg3OQkm;M)JDHnWvU zkDcdOs$P-jXq|?!dAHlHy|_8%KWjKFVg5d@HUm{1uQuanpLg75cBiAmcGqm$)_zJ~ z&XlY<g6>@_qmStmq>GFSUOl$DY@v$BCKLWAvGEg1-?LJbjmA6PutGAznJ6onvSKMQ zZ1I5GZA!*BhNn_fMCas*!55cZvwRk>zDrAFCJk9YqyVYlFM=w#qy43kwPyCP?f4eM zM!1*@G`Lbr6?TiC#jvqdZ(;J_%1wLl_MU$*n;n1OwUNM=P9NUSJC2F&X1z&huaNRS z@`cy%w?VK!pSc^d@6j;wx%%a#3xR7W`if`=vt@N+5rD$cyJm+D^Xn%FpHfvJjA)ZH zr<(cDI_kzDFZK8e{mwlB^|llL+78baj>U$vtN@O6CDja&S{^ZN>PV<$1PGBdZKgHO z``LuyBzpQ7_LvWc{pDrDvXKE~kGVbm&Oi6yaTb>zwnEV7Z##_oAv`4IuMBpanROYn zPh6E_O=>6oWGF>MjDTfr%JoIGt$V84@$TZ;cQH6j$t~?oua6mtH?V7NSGlFs4j@`$ zm@a!GuSTnAdGWP-8lMUbR&N-**Il=z)mUflh5Qc$$H-9vlj6EF`SoU2?c<JargxRD z4mHbf0R1a{71i1dJv_W<qoJCX$T-F!_YFDGhz8E5M)EXp>&%4MA%+|=w*R~<EU6}; zCma=sxOF7KmQ2XT00NY}zE8_44dj|sfgd)E^i&*RRx@<3$^P<ALWk9)uDs}!4%=fO zX}vAut-E44eZa?4jNMvfn3k3vcbvxm2rXwAW!(%yn?$G(GhcDb+lK=o#K=WRktdJD z=X`J>!ZaQ=ADi!89;cD3Ipq3-JuIBBG?RRYq-Oo!F0tuMUG5FXT@N~SD$>$hrdGDc z-M97tjKNfIRt2NcGP-o@Hf9Puu;u6YPG44Qqj<tm*4B5M@H<pJU$3e@1P57QU+dvq z{Hwza9WUKsHJ6)V5xG|f!pu%JZK1<gl4j|5bJs@<lV-CXogv2&-jJ88(LUez6`Ls& z!ao-zFa@j`qCgYgjpa{Z%wj}L87+PL1&E1vq{O(=@rGff^clh=E73v_np-3dc<p}w z<GR|w<`ZcWAxSmnsHch6wqIc<d*&OAN!0pd{$w-y61X`cBh1NH9;jJec|V&%O>(l& zG;S8%D=UFFRX`<Nl5V0ML&@BFA|q){Vd&210KZxTlWYSjIJR|uxvEH-taXg<tt=Ap zw*4(iiPBoaI)l*WSIUkUu13_ebqS<3WbwmU!%Cjt$I-{_7>COean0|{IZ=MO!sMQ- zm?n;^j8z**fNLUB>et8?R&3yK4m8PBC(Dz_|M3gO-Aw-zMZ%GAz`Q<#s9U6$EoSF~ zyA}09ZONaTsbu5O<;TjM7cpyutXd2pX~f8K0!LbmAXxL~X#{whW5Lb27@2|BFM=n$ z*@uJOkn7@=@Mjihx%pr9J2pn}X$9NIiQK@i1^CYMyr5kUXg21AKFOzwi065V7rd8d z!OfYp=Uf$nn_=;Yah*cIF35{uL~=@mm`A!YIc0+U`<T2VmyDTZ&mu^ezOx7;JyGuN z=I40BQ-{^B$3j);tBD8JSe+KR=#{~hraqRy+AC*|Qaog-j&^`8gQaxYwRxICdV>#U z@CQ3uLD^ZYUa8G+6?DR$(SyGZK83*@(AoGMG`&Y~v7Z+HNo@{DugO>L^Q$;fr1y~P z>#LZ>;!5}yzN2Ji(HUagGCF*IEAqwz|E={EV$b*X@m&}T6Y}x-pM3z+T1g)l1Q1XH z;{P9alK;)YP=j_uQ3ZV2#!pGHB15bL5y)ZS(`Fn8-$BHpim^h&8vPCg!6F|TyQ;;g z=W4i^j2EeDZeDxqZD|&+)Udv-nyn8ssAy_hT%*)DUw<o~p;U>eVXeyMYM_=}<zDsL zIOh0%y>2_+@C+f-@!lZ-npmwwax%c9i|?f0gy?f13i`Bx+4W!xz6C?Hb=sG1?TcdD zry*%YWD9ev$T-W8w1?gr4%w#NQ_<Nb-NWhhA<J<`v+e2t0l&fhb?t1(N{x8E|M>no z2`=On>&kmD9CC}u_7e{VzB(WR7xqegw*A?}w{5+{hZxd2J`%pteM9`sL$XIp`)ZGv zgK#U(>)H}38}`C%yG698gBZdQG86hz89H-&bPVdnKZqvmB|ez4sTNif%HDroK++2T ze80?~QwWMp*9RdJ>ed^@nt2eQ3%JEc^AsCgar-{E;f}P0a1-h+fZ6jQQOS}pM-0B3 z?i%+Q%BgQm?P+N#=nCTBX|QJ+-?1nC$)!HpHpHjn7M&Vc{$Z-fK-XC>t4QWcS9%C# z$-S!E)AwBre>Y4wFKbU{{`C7bv<IbX(QZ<uzj~4pKddH#mQea{S`LMtkaFNbMq0H) z;ns)cU%|tOlFS+eRo$h8!v5!^9wONkzVnF@8G@peV$s!J*-e>_fF-$9u@j|tvoT4v zCQM~k-XHD$TKtgQ0i&+CNGg?^x7zetX2D}#vB5-rmNB^{bK-)puf?5QlUL=<`AYq7 zRL|(ba0SwovT4}}+4L`1o;;m}WLg+3$Tb>DPwS?7>trNc7z#+wDd2939foi@uxD1H zB$$eGma8zN?qZSY)J(L+0fqtMlwc*x-cSg3l3jZ*NddNI@soZNNX=Sh0eBZkH-Y|^ z+rqyk#9rXr06UHT=NoT>F1jLh;Oyj^-`s+%Bp(QTNH>O%e0{PQ>77&FA`);^Ke5{~ z#5TUN#{}WDWKv{TceCEuBqIfq9MJ=Pq9yWO(-)4plpAPns@;?qzyLM4ka&5$jaq&2 zgeQQe`A>h%E!LXfeS-vb8D*S)o9-cNypcS^5(MNI>Wugc4xLX7AH+*RAm8o`Ov4D6 zs-{GQa4VOwt>X+kigAu>85`-Y`-gD9u6^+Q=(-k>WwF)8KO#|uWqOPctZ4{0{{HP- z_+NAq>=C|<lR3mn>_<K5$!-}ftCPl1h%6LTjE9A&an72etnu|MnR3Q8^|9|hc`fe0 ziV9lVqO>Z~9k`7(4uI6_jNlC7w3^tOJG;xu!rVTwzV+2k-6oTzC^0ei*85t5$9J`) z6^M;AQUm%Szf$r;gT0=B1{gKofnSkcCEOtCOrKc{P9kXB|NN6>)W>q77}MfBBG(xc z2@tm^Jg5wN3OYAJ<)`5Ppb>OwzE$oHh}t?5;Xp2}uNHxoRHRnMov-|LmC>5H=iWc{ zdTNzOae<TYZ5WvsOlHMh@5y1@jH|5N6F>W*FTw2F8%hR~Rcf?fKEJ-f30FaBz*3kB z=bS$x808YsQ0UY$^|+&MKzD5g3*xWo;WE~USNTUT2#LyoHVnYTZ$L<;ug1(<l!}TA zb47*)>?kQ^U<|YH0Y^kK`8!U|bCo$v+Vs%L>Cy_`<?%9p73L@(nVAS({!w4u0M{k0 zmy%rZpHz4+MOLv8%`pV?z;6p;fMUWIt7k4((fM?oHpdqKSgqaNJ;VNA@zvQgm`!u) zTWvc=$LE(U!S!tmxO4px)|4h~(`|kx2WITIL=5>Q&XI;KwkO((w3C;b$%#}{p?ASj zFLeT8)qL#sK2@e5O+uor_^??D$OU16VNO_*d=YHf>d}TsicPsgLwHq8h3BHg)PIOe zQH7Yf7bdBv6OIGdx#Voh6;o~0<m+Bsts@n*^;o3Xz9s#}TGpF5*8IWlXblq*h*ZrX zeHk+*-77K_hX%xj>7;EY*yTbKRcTde?|nWb2%ce?t#MbSxHQw=VgWeBDHt#}8SDEM zZ7;XV<7^r$PeqH-Vj^27@c(3St_L-<<1EwIdFsuA{H8QX-7PXjsa235?|#E~l)cb6 zE;q5;XQ<nyAdxiyx;t%9X^5~0j!V{~61`CpNfQgpvd<4UK|CU-rh3l14zxYa+u}vS zYjQ_dri19zMvuO_ELPL)2n-e>MV7WCfKx@;k;mZ4O+w+m^hXFm1I<hjUm%2|{-j2$ zhED~Gu)(o38)HUz?c)KKq7l^9GhDffy)Y2_4_^acDbVN*z=o<U1zqV^h2c{=OV#-W z9D;D7WVVU(Q$%V@w?pTeSroo><8>}ku6oXv>3yBz)@N8GIy^gEz*$2Cs<azN9+B0s zp#?}a?`yoUUq8sgCc53x+e-qS!@5z{H9OcYui)nA!+%cBX7YzKFBYy5aPtCWPG}*B zd$KTbpJQo^Y7;J_w@~;wa7TT2j_(bi(qcNej$&Jcbc$SGo)gdk7Yl9aPr`C4i}Pr| zrDZ%pe(M1Slx1AeIYiAjXC>4GX1N&4(oAC_rCfNfOWAuUtQ4DHS`pfC7P|omCkZ&9 z?-tjheGpn%&Lt2wAVZxw!3cMui<D9Y2Qrh@C2QKQC`GswQT52FDu0O{&87HKxs<cH zSOhz{T&EMbTrtwlE!aW*aE6`gSM7iSFh-8f@&ksctR>`8X`&40xQq6i38|Z|*h$$O z=1OsQTIJmLrDFSc)a0g|{wtAsUz98QN;Rlwj2eYG!@x5FqCOxI*sl_*pyk)>ATiR@ z8Im^kpk4t<)$7*+lGTqIBX4`mXWWlztSJYd!3<VsRNCguxI)sje{%v~+_Fk2a$e%K z{!!J}OO^>=sSj@|9;*BB+YSY>GtW)hAyK_M#Htv_sVG*^R;<S_@kCScs20^7kuMk5 zMQd$)AX$STvV+fMSBP<rAW9i_nFdrjI{RcrcXFCrNf|C6LiLK;W6CNLqO9e4(pi)~ zD6+Hi_ai0lLMa(gl-EU?Bo|;%)y97<8vxeo(*4_l`d=xbu2|f7qR!O7e_Nvq0D+6` zA^5w2oR5u*)HkG2TlX_1I?X7qW#zpIOLR0OI@IV<Q3<o{(|uDu)K{%ex7)+6hw-`) zxzuLZ(R2VhR`*-0@%=VkES!-i76#ur&pIHSc^Tx$lgQ&3Pf1bDPDE2x)YWH0Ae1DA z37(LiX4MGbYL5|$>IgH9*^K1C#3~St3&@dkqw-aHx60cJQf0cN7jcC-k|H`lV4?+R zGd~&qqXJPH6!~N-!1FM~^uU|S&5Dtyuk|+sOo6|B>seLWZKl6}{f92q<aUBr0SN>o zkMjS=9gyX}bSV{eI}~B`FU}R}49LJx1P&vlWMjwPzfkgjh|xqxMVKKmg&G^yFW}O$ z)Q>`ihM=$CQ9Ebq$JwaE<SV?I#=*UBe;}Ndcgyvi6TlDG|6l<>YE;N+_UYHx_xD$Y zCoj+A?g$WVpJoF>p9+Un!oU-KasgQ+&Iv40bT@tV;50%t)V{?-2*Y1~(2o96kr`^O z0L#O5If#x!uPp4RKzp7im3^=cbYOTx^f3B(1PAvVe<g@h1eh{2UkD<Fei#B|Qf<$} zd_ZuN6$H3|9ZD+{cknDZ8&S6{F@}Zb^Sylad$#^rK)`wjD?Pab+kP?nnL`F?i-Jeb zF}g~4b46$4u80Z~^>tHVNeQ+MNmt|Qu`!az_{2%^u17yobcJhi8yP4oX7aAJ!AV#W zvHYkRXIQZ|3?R!zfqwFog?jGTG&qQ<H$<91d>zu}YA>3g=RN`u&m7RcNywE&>Z;A3 zLnX0`tS-r$$ki=uNL@S0gbEtx%#awy0t2fEag=IRmj(0O4o@ny%w#1wjBk0zuuD&U z(Ug_Qdl3_fo=r<Vb2I#q)rXr$>7{BwIAlI1t-8&LfamnvNxEkQnaDmH)=O!J3cbif z58`>fI{`rx=Jb{NbbxX!)_=*GL~6YVVK^wIIRVN>!5+boGJP(eFdRT>V5Tq^-UMZ% zVh?SjY$rBk-KyP(LwPl*J$U!m)(r}-q7~~oRvPfU#~Tb9WPWx7%S2Ina;16;gsXIm zfcrzcw8pCUrs=B+q?e9cj3<;#<VKohY$h3I9=Nlzj?|hBZey9pKg5;4CC62~X$>d4 zA#N+*qu`cSA{OXlqRbw0go-X@4?kA!{ELQ>oJ~XpW0`NwCEcf;Cr=nyU>`-fEoPwt zv|=TCKU^;maVK(WZ`fGnXTiS48jGqCEWx>N%A8&2J+T0jA{SRGKFwmbNkXZ3i=<<c zngcC1->l-MkscGCNqPE21>-%(8r2^MufT7`oGm8y9>jWI8NTKPsG)Gv9>Q`<*!}3d z%yf|u(MvB+ten;hf9ozR)>mUKn%@-CAof;d_YkeMYqC{uo36|$!$ZfM*#t8x0%2YB zZBFu3N9HQ{B|27^eJ<U#iPM0@v5vG(^Xy+>a)lCx?QKz!cth&mJPZ|6S=`|4?kzuj zfG}V+Pq`WH7*SGqmQ+`a1Q)=a>BN=<Q+yu~`MAbS5#J_OO|>T?4lZx4f4mUSzT>#C znO$!s>ZA}MUo{kteb7PCUVXz^+TSjd^LufnZj<o_x+G0Dma{7bJT>~M8wVz$#E}~| z9-MB*Bq%8{F4N#^eD{-(e=KX5+}FgKyjOOf2b%ZbU&8cEgfuvkfxLZw0E$g}#42yF znK-Msa+4(QP|&#osc9&6kgc$N0EYf+HEzkR6GfmERJ@k{tRd5ijXjg%{I>BszoM#X z+kW_1P5#HpQ>D|1kodTj>)4E3dWXIH?*o-mX4D0z<k*#inW|r!%d#@zKhEQ_p1Zi} zrv~w>Ft`jZqs~vOuVlF|>5kkv-7SZ=N2;2tBv<l3Oxgu~QfO3{iE|6#NqTC+w(BPy z{zvXpG$VcKnlS~H?uYh?Y&|jIhQBmQ>cVGxSJb5UKmH7GSN0A4xgmX2n47&mTFX>< zqM{TBt1N%zNtDj5Z#hI(VDsDY#Fpr!6|z0tPjyD2(lm!_@d`Z4d(P{QNVlJ?&R~jO zv!BfRvkA^#14H9{PiptYK*8kqimWz!&q{bs1szDsu6Uxha6v?uR|nKs3$(b#94$OU zv@G!MZnSC8KYJJ74(+&OPdydzA1uzMMw#5aKhFDwtM$NGC`r69`tWD+xPuG*gqS`2 z5ZeMnuBCm?jnBUiuSCa}WLLv;PM<%};@_eUz6i&*>(G36R6fE4U$8=M;dKUj+;GTl z;AHlgK0;<N2GA;Dbn6|whA8dgl@$~y%_^bpn!^|wg`QUOqK3QF!X@o74#VmbXN)0A zYH_hbt$F@!g-%c`gq*likky4DJeG3$VS=h=_L_iZ>_e@|{-KI#oc9rxqscnSZv)=^ zNm`xINUag_XYKrFQ00tkng{a-#F_Lzf;j(QBmVydG#pCOv{H1&9`XHdaOs-m*T;&i zfJlNx3}>W;A~d~J*L0PU<>1leUz~3Wsj9Rz_2e9+g4(hrFLe_oxdr$k7{Cx9>Ut5z zsUjnL)6an;OG_~`e06Ugo&FYacR1zUzUTPd{{GIsU&_hRCeGJ+8<lmPgTo6Ff4Wu1 zW8TXn7y9+)hmHV_)VtXWlnaa*3*v+idI18151ZPHPY+`BSG(6{2Uic?j?NCxjxQGU z>5W2k0Nr3~L>1HwL>09b9{rbyA7L#X`frKe){t@Bbc9CML|(bZ`vMIcLZ#-5Suqw> z+SP((UQcd3%(@Z5$8_bYAcJC)gK<OuLLNx|iF8Wka-zK5w^g+{ICGBma#TkW{w?cQ zg*vUq7HEr8bspkTKp6@(zvH68KZ)g$kgD=DEZW;FcMFmnD%itT-1mp6=Ekgv82fYB z<07;JS=F<p&L!Q!XGfL_E!7B?bxO@8=Xb{h4jT=MW630qI_`Y+C$plRJaBF$Sh=VR zAnV+9V5O2VAe>xqP#S?GI|@}?NHVHZ51+;!vm_{qCXJuSjQj<`j{Xkfj{FY8j{Oe8 z4ag0#9XdNOHz+qO_it`!Zg6h+PM}VRPLNKRPGD?M9Z;R$(Z5E_=LKsFKWsrxR3g8n zIT3SP{<iqJ{&n?x{`>3)|2LsG#L1s6#g%!Zvp|1q&d%Ip*JAg`80HZQig?@$Kyhfn zQb9_7LY=_dxjnw_zpN!1;lK837gz!(y2^oFmC&YubLsk6xmBQ3Fsj1ekZ7dDP#@PC z&kE}NB}gG#q(PoMN19U)0+&FTahv8rq09=%7M7SH4@R1@2rER2gGCN8*OOCjfK;4o zttgx?O<*++fVar0hPRstFGjBq4=A~iFn)JhP->%je)!wDp|iG_;5AWVM&anHlAy@F zowoijw7SShkk#2{J}X`k>ez}oD=A^_V!AJ|+<`1g;glII4pwkRPtQU?vEG}p8_q#7 z7+WzN>}q<{gm`-4Qqj$<J1~!|K^`YdicU=;4z~JCni#y^oTHy9ji-UsUU&(`reKO0 zsZ6S0uKu>H>`4}|bGT2kQ=R`Wb-ZA_*l2R*{NZZiWcW``{2+vi);&HmF6wR%9_r@m zjxXIP*J%_w<dxV_UC5UvtgF@v5;t!O241B7Zw3ww$&6Hy3Rd(87TUdlu`(`sVHNvb z2@>WlvY6s$>7>V@2Qy#8x4y#<X6+d|Ad1zXZ7jrNFk<`j4~^B)wy;s>c#W6v!T>Ze zt&a`g<U*#G#!Rvl$?rg|->}xk&Rl2u*3OF)XZDLDXU>Z=m{ycL&|6B}K(>_IV9y-9 zSXZuIa9+v#{BFIsZ8xkV$9<+;TW~r1Zs6P}Ze(87`}e!|*t$TruAR_ZyDtK6CHoOO z_c*#Rx;rmOZYlecyU;kgV7dn{us1`|bRl&1A0jXF!MeGCC?0Khu$)=<c5@S1b=A6d zoJ$jH=f;qw{Syn7ngX^4undVBKQ=%Q=$4WX&BpNy=gVTYkHqG|&&Gs5HfQ-sjo}R$ z@Mj{^(!`31ig_qS9MWr&?$f~1HyMM{tUVoYj<~z7(+t!5AI&eR_b6G#4VlL$NZx(! zY1OkUnX0FnZ_)RjZ)rZeAIh<21TA)9xn{=~2opmR)3IuFtaeY~IE4Ke0E)g(XvGV_ zMh|%?<j<!jHqu59J7F}`l`b|K8R#>eOxS||JKFIeN#AG0#9sK$*AUwt_$|?~>>k@K z*D;<##Q{;vK?-LP?R1cW*xAuVoJY}Are<L&%6_C|apLX<37`;hT7E1U?&d|)jOjb~ zlNhnd21(Ujxp{|d=DX$oJ0)?_?F4SV+V9{yFz*}}LDs?2P+|Q<Mh4B=R0VSZ^&@h> zC-<4|Ke~)-6xGN0A4=loPd@R#XZ`<QP!fe4Z0-J6kCCMGPXU=9g$G9<I1m!Q0$(UO z7jhkF4@xACCH5~#Dq0R{9xQA^+F~JcgzlZVSLj3l-VU33a*L@z63U#vQjzWU=Z5jy z@%1$y5Vby^KlvV_)SeF46%isolA^wofySl@Vd_w(0(y9sstYtC^`2ia2`oGd_xw#N zzwA1z>k4&)!Y&|qHoP`SilLD>o+EfC-Ek0uld1p6b4ek)BgABjP~3HxB2{JDDQFL? zKbIR7#gNg^(Hup4fj55Sql+34nNN+8Tq-8hMmgMmo|r<BVpxGS;6=FKDomuy!vmP# zVX=`cuu3!CVA1guN-H9vvnF4v2OcKhyol<A$i@%Wf3RiKrz+ad#u&f*lOCj4AL)@& zss04Da1*G1BfXTIKj@fGDAsJT9?e{2XGQsPrHrpLZGHB4NE-^B!>-)M&lYN_xE7ez z)nHi)r)9Qkw=CLJZMimopF<&0W(2zMXPrQKw5r-dZMEU=49@1+Dnl%D9In-+*txhN z+<`$B%<0)81<Yh~w5ZPyNIJ3dGpHM>fv{n>sN7r7;MMQ-F?#O+28KqoHl@lKck;N- zMXhwdhX6&@_Y6z3GAss6pkX?2bKd)9|HD=0EVYlFfY>0zbf3)3y>3NrO9`0?8wQZA zA`IqnJ2w^5cfW}~x(jjxS!4!x&a1fEr6^v8a1;mkv9hwJQoA+{hw^gBJ|PWj_tg3q zX#;edHAr2_F_Cl`%X9j76{rXoW(^dUZsX+E^0b$@!JYyVNAv)h8fZaq9+qGEjU`S` z2&M?eLYgJrf3rN#bT|dG>HT>*owtEL(ecOaumX&VGWig#3EH`|MR%|?(9a-D_zIkh zqvdecHbmWeglFKhFK>pnpUn+ZA(s(JY3~4+$H&=e{s;jgrr^6*g~xRv-9<WY9&fRv z_*@|T{8*0*Y`JCY2v>6D<O+#KfjdKDm?AqV9wgUKaRIvPsj8=~t}?k36-l@vfP#uk z`2VON-%ZE%^B?+i;!hR*_Z39_fA(zs=e7(6`v2XiTRJX?pzu&(O~e82N|B}TnSUXF zNF+8U-ciyp{1UKEIa&ff%o7WzA(X7fO&gmrC}yC@Ivrsg@IB=-<LaVnV<NW4^uD>; z>@vOPd9I`KeL3E|2CDAI>P4@<-Ie6kN}-R&LbBOQ4qShc=*RJ**~QvOstqj<^i+$t z!-E&%PQ>3A!JP2&N$hJWEs{Tu02}cck>x?X?Ft11KSWy`2J|js1Y6cD;V46TEhsFn z`~Yzb5ZanASujM1ii*~xjh9@dJH*ctw;8)WxCai?tzRS-l&v>yF*JQN71Mn*>!fDb ztOgzvEhHab{nm@E-(1mg0R~y@lPBb1dtid~XD46-a#M{_BC}h}8!XNXjO^y3idC>n zEU)b?X$OTE2gVs6N;FINFdD;q3A(8z_((Q-3u-&nia3&+ELy=~>HDlnQ+l534}gIu zX<t=$?6VUg#v69h?QL*XkMV$}w|2CAj3Uo=zDDslWF^=JzSgsfH5cv6K)*0GKpm+; z7QcowuqxA42KUA<8L#N$D8@!3%jA9et+U{52PZ@<MxWjo#_8S8NT$)TAIl_0LMq~| z(6Aym@@+!ou^Yi&QKYKeSXiXA8KG0RtWV2}PXhOZS)UQRW2;z%pZO{GuQbz4PO=9t ziD64CWOEGEHJE<swYs_F-CUx5Qv@$k9dUG8??g{oOAHS^jOu!Hn@W&o900GYRuDRE zwibG@tSmX?Z76@L$8a5yex6;fxl3pw(qn?d%6d~%D9#A2z4q!k5nfg(a3K;K?01hC zWzc|Y@y`;XwDXBn0TXs<755$IC6$bg2dg~v0zXf?dhJNqVjWUb7SSbGp7F;fUj4y# zZbFQ+AA)>4IPKgZV(3w8utJev-o}hjY0L(0<g<hn`M?tU91iDX4kC?JMy{Qguq-Pw zS=49Fzr?ju^yX=-JoueamFwkai+Q>A#96Cd@@OFQ?Jy$`6`GLYIv?Cnf#Ha9tj!#w zU32^2iVx1%C9)<4ZmB(bKltO&ASNEmLc|lcFz8$=sd+&SGV|%=aZkOXaooW93tXh4 z7O`%~IYs7T2v~iP1>%?x)cV#?ZUl)9TAsz$$h7PwK6}c>cI7wFeqNcS@$0b-UInks zAhjB&IGf2YKVjO$X9fg{La3=QTE-rJpF7lmAHE4X<#)I~7?OynStyX8cI4H50vjN{ zA=8xbfFlIvc9M`Lk{@-Lfm{wQ5SuipAr+O>PMbX>rQf|1iMAJ^xZh0zaY2XMyt5a8 zLLQBcNgl6~YeiEK3H6#vG6)gaLr-pSWm_34Cp4L0Kp?eb`jUA>{Hgm2oFW!KI;oaQ z`~m$R$B8N2IrQU?9c}z){QKV@C;zWK7}J0KniaKe7wA!VbOaZI|8(@fpz8(zmYwB@ zR(~Uff|nEc&HJIRb!4P3Qah85lr8224T9|X;q}G{Xq6<b{zfj(U+rEw&i3@K{ycw< z$pLby(-sA=ZP+pWjnQP;fU^U~;=Oun9YK&1UgMP+lEMsrBxi!eLlqSrcPOi>XZq^i z@SK)wGE8d0W8w~PY~*GTh`CVnsZU5HbLm%1(kv?)d;N1psG&xC6Er{GZREDDPI-4> z&<u~!>BAZi6D4NerYjXZ?}aju$X!JqA?!gO>G0Hl+O~($&z7G0UN-6|PO4j+{iMh# zIfRlv99@CWJ_?0Au`*7g#sholjjG7sba~1?<xrI1*SK$WV8|qd^(+X&j+Y<o5sF|5 zk~xW#hfJiXuUzbi2QOfiC#XTEj6ZNhF?HugEh<b2>#NMki=r{Jw5sl(G@WLC?B+^+ zdeY_lKtCOMfb2g>gkxtbfkXA)_{jJ2$1JXuyD1VlD+F_aqvJIWIi;i!jjuL%u!wmz z7y4=;NY|V-s~TvExc+_?Zx0xqcD`KJCFn@R^%$h`{RV_;)3(%$!Vea+0wi!nFkxAB zd<RU$9+F%&I)2U-!xFmRG%ybWWV1%i+<n{ricWQBuZyhIvx7vJU6l5Pa_~C#2eoDb zzfu>i(k3fgJo&#+Yl6#5)6YMswc-B}wf28ua}?6I);IkxAa<1oq?giR({~QFBU!>k zGP)juoj(EbA9Oil%s<isfB&$K)rOI?B}h6LGa{Rk;ycw@EVWyngV|I;wKh^N!hrx> zH&&i?v^AP8E1tT#HJYxwR5WL^?>GO&O98)B^mc83b~{eH{yg8A_fs<|-D@p)y;dF* zL9na){W=d8t0^&7-02}BH?5IR9XBA^PP-J`m;Fp`%R$FRHoxH@KJV|`2;k}VNZdQA z2WueKD`-1|SG3)J+qU1JeoY1Wj`)rq(`mb5T^|?{ZcPn%z9e~lapGO?2Y7jfZjbJ_ zVET|TeN#O2xb6~pUG(GK=-$0tb35(E)Zg&Yen93N-0siZy(k^=CX5{4y+j0mJL_{k z9qfMJd^5gPAp0gfqtSYW^>E$7zp|eU61e*w_OF1bWR41}CsxVJ@RpOS5`~Cp@E#>3 z9M4h39IF!_a*PeV%XLRMVUlhPWHI*-QN^Cd$zYNgfyz)i%`-4kJItGrMd^Q<Tk#(4 zYNO$OBmbMC!QRhws*D(306~*3+&3B?5GgUx&pIgF&r-^tGs+{M8qr86bQsrCl2O!V zhRtC&Z;zlf1LOMJNt-U-aCZX28J8u{pzVajm3(BTR5mw;nI$lL9>C9}g+)(@$RuDl z+2F78pd{d;{t6`^V_mvQ9BEeTZ=xuxnt}0zVf`zc!VKaysuzmLYRuJ(k!;PpE|LP4 zpXuxp0;})ItfY;1?eN(}sH5{26%vbkO{lBioUv1?BjmK)EH1K1B1>RD&Q^0aELLUd z%7z)(D@LTo+|(B5V?E@#k$$y86`4UWBuN@u!ceGdT#Y>kyc^jbO)<_8oK<R6GM|O> zKgmFQ@6?5VsmuBcCdC$z=ov|H0~!UvzJdjFRg)yYg1kYV>v4<E8CBH~BT6a)`s5Zv zHS+K^?^^vZsUA`9&3{WAg$9CR30|}yU=7YyJsIx1gjC6?QCwpP$w+4UgPKQ8Nk4WU z83*3x>21Dl`pFGSj5g1du|t?9vb+dtZ#kM`eod=uYm4C9<+~>IRa;-5K#FvVv>0C_ z+@?1tMwtw9wf<R8(WaaXemIPm(<D-?D=%Qh;NPnDYk^!$Jr~qBDe~waZG1g@l&|Zv zTW5%fq;+hAN<qAo@UycRPQr(DK?rBEob8Limi{=nyiXtu6ogm9s?rlBl;Xw!&LxQQ ze|3~zkCpz`;Hrn-4>wmDa#t*9!<<?$>+a_w@-XtRFmV)E=MV*J2N4|CC-eEu3n$Ig zeGO4TG-^}9;_t(RK)>G5_JW`<<qMm@pS8ZVL@+I}y5*vM^+w+jM^6wicV1w!BA|Zc z?MVG~a*RbqE)mqvS|mWaZdor<V*fYo^Zr*JIf|AQrk|OqHQ754Xv@D4rd`H{f!e)J zir>?m7PQfe%W|@-wzQ4JD@W^VQ|v3NW+xDNngt8a<;9r&t9=f!GEI$t3OKV+=Lxe= z6}v<voirq1F<H(Qg{Cl@PMpAK7D|=L@Mu=dL8}(c0a;~pm|4^LO`KUYF^*<gGGI;S z2P<V+>={!_<~+`3ixd&bBFEz&U|GP6L%Su4u>zdV3+|Y8xQO9ri-K4zYlRE1jcI}^ zB{Yk93oR$>fnkCHVkOt17TZP8%x~Ez?gXOkGH7!{oZdOKbEgXJQYCn^huEK-+We|# zPJrs=Qww)3qMViSea`l5Lm8M8*jm}HsyTXF`2|DJHBceG#ZytI02#J<>A-zSsthik zI2o$5-NBvPkai+mA}bF8Y{BfQylewmb2TyB<rCDb=6Tj=7g=*-^)g)(+e7ppfAI5( z6P9-6+$HBGzw6n9;aix9YnZtO@g>}Y2D?-B*cgT0nG@S)!d%1H8?)Wm$Q)ggNXccR zU`dwK@05S@61pXbkE_D{3+6)H@=SUzA^qHFaKgqNa<c>CONwW7uqRG*n<aCfoIHQ{ zmQGC{@Lj=*l7={Wgy4}$Q&g&tQYXm;gfjYE8nVJ%$CiH(0=HOw6!NmBvg~;vmiU-q zELFLyj2CfUnv<)Xgm3}hV8F@$Y#L4*HC?c@&tz|HYJq<pGNE!ZX_scnaQjeMSTh8e zJG4P~UO4mv`_k?{gbE$gg(~_K(e#n76I0p|+A`%2WrGq7p+h*k3Gm1p52-WpATHoR zHH(I`gr7EsJXtJOEbz9=mWZC}XW<r%IIq!hc1TJa%k<0*XNU@ka`B<!9Tt-nvXWqP z2{|mDLUJr8JS57<E*NKif)vb{Jy5^@3uSc3SvUpasab%2$QPkIePHa$pR3^P5~(?V z0IOO$k&X@^vUq6)De7I`AkCXH#f=5W+Oyga!;M>wSKo-H?Bjs}aA>Z|mATLFatYeh z!71K^pd#B!Kzz?@Y_a_^DOC!*BeF4ubjLAajw2mTNrGP*Jz^?r6nV-Uejt&drq|XF zHs303Dym*qt!f|5=V#CA92l2lpOs-Ru5n|TKrv)m%fK1F%%sQKy%HfZEA`Q%j2IQ` z4l5(vV%9*_@-Rwlj;`7qF2+Cp9I&N#t;Ls!TMbU4N+=xu6)a8tz+@G^rJucG2=XEz zr?fnaC*U|Sb3n^%Ad;|&f|gOwR5TXrxQK~eHs(U`<t))dj?Va3VqQ&sAfX$P$grn+ zO!ZpRTV}I7IrwP#?TB>Rd|NFHkp*_DNpith+zcW=L8cOY($O2~4<+ZI;6%W(JC6yE zX6@fLMGoWFyEjlN1)ssYm-?S!s@-S9{bXkS*Il#_&sJk7bQztFu4eq9vi9u1+kLRn z8%M*-D&>@X^E9d4<xA-|Og+8kDXDUgt$~~(JSJQE`jU>#&~)Aiy4vzOl1vrWm!Q`h zLXu%^D^o63;(gOeo6jp<Ove{i*9LEHL1MwY)QmbR$tos#P0VuD75nxKH+KH~V<_hZ zBlMU{WbGybkt)7ypy)B?8M)?oV{0e8BcZm00Q*Abv}4EN8OZV#2FURTr#^|0sp?sg zh2}u*eK2W9Z=3D{h4r=mgOO|)3<}5S_|5diAIyP{%Q{U_U$|0*NVRTu1afF(c>J=o z%HsAvGpCf=Zj#ft<exVsr$oFlhoy9v_1l5e>8v@yBUJz@REs7*QEu$8LcL{%rrOAw z@nh7Z^b%~CLE^_yU$)wKmWg#Knc4T7USrF1+9*XuN-7RWBkVXJI%!F|yB!qUBLFD3 z&n0-^<m%{414$dq6P{l8LxZUW&%3`_a8?$*5|{4y&kh9ng(bL+Tz|R3lBv_(i`0GD zROVbP&ycs}(f)|*;RNaXotO+^8&7|-1v3%iQjiG@ZCe7~qb;V3Rg+7wz<Aff+fl;R z!6Qw)OHu>f?X66ydxC{i1QTigS?*9(;l|z|qkGd-6w4B??jzw<3rUc=_K^cA3=B2g zhPsCSD@zKID`bfNStBe#U1jqe#6#+oRbPKS$thTZ@mBdCpO{K`R)-S}MBUMncyV!c z-~PyA+`cTa-!0vcRm3MLq0WwI%4{?i##yK<RY#3+U`D*|VcvI0?*}BO6s+6fh0d(B zR0?>N%4~Sk+aVPQ@yJy!4MRqIkb;Srb99$B^X(k@KJ=J}*N`D;3R2cs0RXYg89l-F z3#{}R_H9BXJY^azwKI~Q!<TYZ`|7b{DV-G?;mbslum&B9#hPy8H`oYCd6NZJhf`S1 z_?b87oUkCDP1A6n*x}p>m?xpms1GTYX#yE>#(|d4yvjI4p8;!f9DYYSzGLA|^Tq(y z=ilTUUuzyOxXixfk8p+t@~rn!Y!*VSLVE^Y+$OTk7>JJYtE;6px`XCCruxpmRpGDY zzrI2YG9zH|L4ep_aRk`-X7=gmdcwBb6rcaP+~Py)`*1EEunWDEt%HQ-i~3j$iC7s> z>VKtgw|&6LL=aTizbTGx1!rn6<OsPa3e!12bi{SwjNGmAuR_y+nZmd;v>J?VhkuxJ zFr0AN13SX6NA0dNOyWkZ`h|Hi#QzgPG$1b>w`VfmRbdB&n59)UX8L*g$Qa>78`AKg z4};V65>NKsvI9ueg2&WC6r2p8+U2Tcm@>*%7!F@oBeCard}uMO`&wSS+G=mCy+USG z{x;lbYxQ<`$E=7FJmUwOx8C57GiwzBq6dcT6}@#aj^YdTeFpP|Td`@VY)~=kjWJ)1 z7Lds-%Tv42Mu>SM4A8SUH_VLJpm_ISQ0jBIQ^V9hMBx~glCzaQ16$96tU@K#cd3hM z<wP5mXTT1rj6*1lAyd*`e$gKH0b1vmIXqDnVfPKW2g9RJhtzJfJv*vi(B(6?_dV>X z`7^n)Ym;aX`#|~=Qpss0ZrNRYKJ&Oj+{+za8?QDBiEwN}91g_dNU%qY^$)9^B9zQ+ zXnu#?xR+<vAC-+ea>3^gXSo91Z?;+W?pdc^y0qWBG5?JzF-%1nxcyXhDG(}@j?Qx$ z{%tUz1NaC9@8;1Vc$cYmC|j|S`ZuTBX~{P3qE}g&Vmp!BFx4pHlHLwmbw`_%aJ|eP zUGfjlL*6IO2TdmXi@dmID<FI`6)~Vi&jh9+{Gp58ZyS`XJO<qaEpxB{{pdp2m`-N8 zf4YXX2>6IL@%ElL^56w8Lc%9IGKd{Cs&tP%JHlnsaCOGiG-sH=fs<B{1>6GGrWbf4 zobyOGR96o%yVsyI(xcPA$PEqlC6vS~5_P^V5^7EYdAFcUO=h7s{>T78({G^>*<c2{ ztbjFLER!inP+1T~e<IO1xB1}%g!6#EFX!(H?Ud|@RNcR1#~{j6-Pbf~n(f{iEy{^` zY8BL>mAn>t&Jl^z`nPyLgnQnOD$1zKc1Oqs?QmBF_fQ}1afft+x;8fisdi_MW_276 zN0QAj!$0V+KEp#?2)zV;q$d2H8*B?sztW@oJHOQ4F@cgrYruCq8Q!1}tm_xf{<j~i zxa&VmpUPb_sj2w4{%_h1oRE3RN)FTFN^xxX5^h_;lf>au#yw*7CO}XoQH2MCYAsWZ zJ=yThgIBa%cJ_9J;-$F>XO!cJO6!}EN*b!!Aw;7?eCwF=G3ADmL^OBSKq)7#94HGm zQ@vUT8uU}X46sEWjtB#_f_`I#Y_s%VC;#{Z7y7@b5uN^T#9g8H^h(I3+<#H~4isEv zg8U7mG#$AB*dxS?>I${YL(>(IO2vrG#E>AF(N1>2*Cl<9US6HT52=%{_-uZS4w@QB zl2QIe#Xh-x%2(V$>jwHp8|^{$xg2#}@pZ`OiUup8tWdqc4;=0`A;7h7c7Q`b8+tDQ z1L#5myq4<sU&Ryem|G~?Sxi+*vXy*&twK=-9ccFa4Jm>pOH$D%ujotC>b@y0E3eGG z6-H9v$TD)Yzf)Q*E)Iw7DTX}5b=`Pqdl=D+XdDXLN95ii5d$HS?=c*&zF`v-SgNte zs`F-A!iILRNjn;pBhE@;=ch&+f6ncYop(&2_EFacU%y1G3N-DoHY3(4g1JuQH^krV z*}B3!PjIYC;A;bT`(@scucin$QVx$?8E~cYyMI#w&hAs!M7(hq)=OO>b&y66=TJ8W zx^a`0124-_-%nVAcCDrvXUZ;O1Ar_E{t=)tK$TwX^oA%^)CUB|m}if}$ppP|pkHx^ za?@@XK#T5CRVw^#VYpUK<y#u=G#%&n<1_SOG}O`O=F?$u%^W)-VYLN5(Nx1B8#y?J z+VP((-ZaxE&mxf1Agz<UE(Wb$$5s3*uGzwvPsK>!UMeK7Pxcev7Gl_(MgrVY6X>6> z2a8{28VRXL3ejF;d2F~5v(dzZSq5cPJdUHQ*q0nlBT`hfJjFQ_i>WWDhIc)a#HW>G zJHUx<OH`xSKPVqm`h~N{hqDVI(iDXX7GnDmcFZRjDZ^ozRXO3An?~+lRE=|YY31UZ z%UpC~og2v#1+#K3MMk_!d;wY=p*}q4rXlB163C~~m#-yuUGQ2=V@1&Tj?sMr88G+P zIzlY3b*}h5+gz>&Fx(P7=SFHVV;pVUa^ycjMjjG2Ja~rO+|msnFphjsXKr&;?f*LV z-AB%#sRf{o`K6RX&@F&;_TPR`vh1>G_^ph^u$>Tg3Zw0(IDu{*NxZ{p$GEo5cZojl zt7_T%O2_PYpACUG#>n5o`AFjJxjtZhWb+P*K45&6+WnhKTIqA&=M_l|a6Rk)EFaI7 za4t`p+_m5qZHjNB{>Ju<c2$o8zfsKg47`138g3QTi>>U;8M)1vXw%E+uZj4|jkRJc zTq0)=OoI`5^@Om&3M+sP$$P*n<qE{~+>>1NhNSPaKYPy$K(F52g<L~Jk88`?OtR|x ztZeI@?!v+uu#INh@oGESVA#Qw&uu^DbHuu(aGlMuzkfh8PM>T3Ym{<%<RZ{+#Q_98 zgSA!jYjsMdk*z0n<?vfFZOl`n>}&gM`x}1ibDi@uNpWUdt%R=i`&;4kpze^=IejeH zN67gLc`xf*?$ZaA%`M)~KugakhT4Vgn{9rK#DK1fck}Z<7lQK9JC`FP0|8C_%uWA$ z4fp?IB=n!aS7OHh8VM;({Org;;Xx*|H_*bA@RQRiVv+8jPyjXfB~UIv1!M1@UasxL zVjt`lZb;;*z*_kVSpFM`An*yq3uSK_sDUcBc;}tT^~~Yw^Y!Kfvh(YTvo+8JhefM8 zp}BAufThaPTKvx$i_L1osP!0jTO2S%;Co&q;GU3KVhD&>vA}dkW_dIT8il?VW`$~~ z(<8qGhiM{{CsZuUW>mYJrWI_nggf?R1bqH;BEG}nl^Cs`ogmD<xYM%u7-45q;`R^( zz!o>7XX>*~5Y>@9w%tqF0k-*eLNXm}isj=0j9GyKL;qHX!=seZaBbS`?1qOhHE7pP z=&4T;_;ybRuT2NkQEbKIBH8Y_C$u+~ZCqy!)C%}Nd%z$6Ki1yqJJa~t_U#xQ+v(W0 zJLVhPwr%H)la6iMwr$(ClMZ@k|JFJe=i;of$Jpl&c<!E2^{tvUKhr{9AT9)j3jQMF zew#Z8x6t^MypvL-Z<bS101H1%g2}x^a;WxRj>D<x>uyOE(Sv!xMe}Of_vRmRtOfGc z)i1cexP0e_&d9FGu_oiF4P2T<OZc7n^D{wN_60lY#h6MZn1eU~pB7D$$VjeuGZ-I# zQJmXT+|@b6lb=#KPj)_{ZM?5x_tIb$;4~Do<mzm<s39wL5;rx0<f;}<=--*lp`>(^ zO8e!K{|Mms$?~0m<zDO<NCYg7{C0R44gtp4nBfelT*Z2Sahi7iw+LYKYFu&hy{v`% zAD6ZN2OJ1B69aoYTP1TlJLmuUiK<j|)Nn<ye1YKXgd6e0nm?;dBBfA!tpzGemC=aM zoEM1m8bzvP*#}JZ8#1nKcW;%>yGAaaiTT|3?$-78V{hHP&4g+23@c6^iCNOzvONT{ zUyS_zU8LxNc>mxDYDgW|$GI_62uvGR(O$6Ek+e02wr2@JWJ&E4*MQqUVCC<#hHYVP z^eZQIf_>G1&8ZmhhSf7ypRFy;n`CsB_GC^sl0b{Vg&TwDA;JREorUvcsp^1VbY91k z+P$&6ak&3ldXrC$N@q4sZRSNzlkM#iTSU`Rm|)K;HEC!5PMQmx?PPG@cqs?$#F}DH zzi;Eb;LULo)8D`{7^+jLH}5dF)Hrr{R4wgSdkt(J6c+C}cg`N#SipwBP5oNde^z6y z5W+^|%aX1UCkw(TPk_b}qZ6>7^fWUQ7bDjhH{a2AdFzITb}h$o@G9xwV3JHE2gWra z1ZWxx1LKV!vcFTF<GaNVqwyDtWYX&TObi#I(GjFa9>D5)`LtTA%}Glsv4o4y-9WWy zC6mH8k^Q7Myi+bXLt9vB&sw8R;AyzK2i0(B@zFOGxL#9!IByP>18ZC=^Q4Xxo{Y7? zah6>+2Y@l}?zsj^;_y3+GJr|zzxV}9FeC-2utqt&%t9M>KMRmN18>lxM>!1F=`UU} zcFx?xZd^Wo$U3W*-cv$xpS$-maxpb*qlr~euv%A3FrN!i*<yJCU>EGQ*ZyP+@BY)Z zAB^4~aHgs{-ul~IE6M5@=yY*QH?V&}i8-E5LM(k9-*J?x2fP!iliR`@lCNjz!V_$a z+kX0FKiWL4s0meqo_D=7c}d(-vGQ%`6jRkJq6DaVF)?dXbkyvdGYs>~fm2a__FyiG z89Nl^d9TG&)0vH(3xrpSfjBUG(YEnn3y(i{g-I`IW5SAW)3SQVqsMXw{xxq_FF=Sl zP*Jh?h&Uz;7n4Iv22`18@&aj7IKmea7Oo+Hc!pYVs38f}&rkfgur&(E2BY{=BN?CB zbEFHx$X%zt>Fpuu@x><Y9V>{fQ5>f~1!2vZ;bvv4<Ssn8(;8XUp(t_!_`++%&G92b zu%qV7Uw*XuM_ShI+GrCedVWVR$`6pIo*VA|fB}|Bd<7q(x_rS0p|6Lw&)%2O&&M+H z`}o5R#HwfdMp*0K>@R}IBI;AG4c*RA@`;~(Gp+Jw7<q@=u(AYzs@dd*a?+#oo;X}^ z336Q8eb|5h9x;g%F(~xDP_BleRZF+TQbMA~%{}~OB!04sGLHCzqrfIR*M%ycGx`~x zfwP@8=;b_(Vi@SFW=T1#8a0;wf&0HJ2lL6VqRsEB5%NFMEdCGV!~b`d`hUxZYM)wK zYWV-~pf{1|gA~`<bSx}zH_*)ItMX%(ZHS8guysoKS3Bc(1aBNRk9Dn00cg&>(;kXk z8a6T;TFaK&TxCo86X(jDy7~BLz99V`Yi`%PKQc3B$;p)6{k^8&vS(gC-}z2%_xyIe z2zx2+5DB06f)O3ysIZa`!akzd_nok;euEx3a_tR}%Kp8@k{vrr#4Pb~$1@{6haoJ! zE5uAkWRdV>q7m2WpZ@zts2v1ydhE!9ka_eQ>-ytoo7m!h86>!YwB|Mx6hzrwAR^|S zM;i|XNB3+P!@e{>Z!{Hzp6V?+gr3SR8wi_edOQA<`CDf;W~qQ>D)8aYZ=2iRLVpU& zsdLaNhk?b=pKI7#1S_V@g^j~ig~@4)*22}&BC!eVlq7f@E)<#dY);FP7iL-3%$bh$ zdr@(2&gbKyM#m6a&a__i=}hq_vCx#sXR;6oPzT9burp}WIUJd_^bQ6_5WY}GJ=%D2 zrm(`f1(|hGLvsx<;!aD@>+a?S_t**AVi^lI0axgq#YUV?dkSu`rJ4~M8xcv^0WOC$ zz}rk$!JlTVEa<YF%?8EBr120N<cXSG6IzSwhv@=^N1K!l-Dtc8yBDz8=(n-x=3=Tj ztoM){B*hk7=|<}03$<2FCDr0VlhVU%9tkGo^f<E2e74b<d>Q0Axg}Dd5nn0V0PRIb z#b7w=FIQNCRn8251_SiVLf_3lcdOdipMRoaB4nMZUV#yI`&ytI%Mm>hb_ekh6Rm^0 zrLPFtO1GU6H~SG0n78?XDazi63^cFZ5o)(!=xR(1v$-Y>s?*e@3$VVW`zoEq`{J*4 zfjOnEz#QgB3b+!Z#bpMpzeC#ykUB#%x7<#sO_$obYIjbZ)%)<;X3T}lxUk#GcRxFe z_EX|tY0&KsR;Yc0cBs|m>%!cWKM-`NePhYcZwxj10O&V+qUe6T=n#I&cNCorU2hE$ zh=qH83U_KBfW93F1l!Uoa828lmC;EqzOnrK8Y#uj!Rh9$Kd-%?pgcFa7w8yhG~R&h zBzkmcn@WMS!o=%L87+EAGl&}mg3|etppZ(_=ME=~Y^iK!o)_hM<(rMELn<mNBNYk! zoQXQ$j+@zz<SP__L*J93hHb&!XxSH2z;ra_pJX!T<b&)ZCU&`{4}>VhJ4)il*twZD zsOYjHW4_>1ITZ}yX8TtJUUb)L!YMd)t}X36*hZ)oeyyXs{9|nIDVg)MsL47CPO`Fh zH47QdW`gN+QzAlw{g-6!8f6Nq%7>0pO&?NeHr=#?{k*N=TxG82jUuA8wKIYUHl=og zWk)g2^ySRbq&Txy207#E##PM9{Ni+FM~mhJ0Siux0J^2tV)IPf>EvH8qp)<_g!OsX zsw*Zf`&~)7L{oDf6=udmYD5j{C<k$?_W$b60^CXCQVF8rUKZNfL|D-PjtuqBO|bU; zOw66N$|M5m%`!fN1Xuv*OZYE=4V@RY_IP}k7f5G?qHX9(DDlXcXqm^M_mYA;^+#~j z7Tvq4kWE@6c~_Z7@CXjN8iz6-c{CLJ5O7-<n9cn#(jz*0c_(gFxP4fn#%ZPEuoRs( z-$w7SwFV$n!)0`gXiV$~5b9ON{-U~<H0c`oO?EMd+ML<qePW`%)yJ4k)Rekal?lVE z=A+c6cpxa5rC`kmVk8a-u{@x``w&so!-1tGenq%`S^&{;2h;s@#zFYig!jh3*OF1e zDBf3B{h$*DA!}*>XU8*T6^PVhiTwMNC<gT903?4@`(p2u?5wGpY|-0)ohT;T!1w$M zW+o8NE?@T+Bu`sBOxkXu*vec(O!x)GTPK^0mA-W`*~<LdRwZT5IZ|TU3p{yl^Wx4+ zQ!BaFf&hL<r&=qe)`LJR+)ArIS=73#yPit2%jIKxL+hqSZ@Agxwe6n4@ZE*ABlX+B zE2nRO%+os89h{Zda=Ox^y;FFiU+W)U-&6AT0_>SiYId(ZT%hmHMUawCnPZCmi`%M6 z{s~E+(kP&W4Y}`#-kOGDYl;4??5s?T*@EOhZw_wbJW~4(nOIjD8*fgmSz>M`PGtIy zc7klAG6|&DX03H0YSn^)G&=cF{3F>6ftm}@O_oOULK@J8b8-tdaRUCUD6;qeH{?P* zu_+)OBV8FY;T|lv1fBC;$P={f4zRWb1#%+6UOC7<pkgC5Gm)OcBE{gs0azF|Sg1M@ zVMxP61~Oq#OjI%ZOmV$bOyN`xI3*##ks;b_BnX+vliNaff^>HnmVN5@eU-wkcD$gJ z_jmi$WSV+dX>@8czE`w{GjxW7g;%(WMoH~FyRN7~>^sJoT}obe!O~Y+kBeK_E3dEy zPhOd4Bu)Nd42W3DFz|JLp^m_Ae8L0&KuW)Xj*O3wH|Y1aTtC2L>ng*iEd+kaiLINw zA-rEJ1u9DGmKJ|Xdfs;B#mF+T<&fvJC!>Vqk)sus^qWs2*B=yjMoII?m;YEUqz%pv z<i30LG~)j>D*hjwWhfgsnwk9fBR@%X%L!El?VnACX~Gm}5t{jrKB3^mc_1Q$HAq>} zZ^q9*zW%wp>>Be$8Gtd{(p=E|UCh^z{@w(JeNO%WmZbA2Fb3XN%-7)#MDBxvfzlo? z4mvtI`HbW3j+4wCu9L6nHn)ch0fA4@T@CHIT4)}&%YIvQNv0cxJ4Ns#iI7<WK`3sL z)BXvZ=X|YFFXGbQH9-E$g<8TIb58#t9Ni%+90ZsSVNSeZlumjyAkepP0FT*_G2}8V zqA~&mJvpKP_Ob9FHAHp8US~lCY15D^xdkBT(OE4gn9G*Kggz;$5woT+`IHetP_R>6 zNS!2y>zbobJLn{dbqh)RS3Sv5h9Qm)OLiESG1k4!nfT%erTNH{+^8*_px_T%mnlSE z=RplR>#)+B5c`}S9$sT-u*aq|CwKNymPF&&7>6}##CJ@yY%xX#zxo_{!1LkzhQ*Ks zEa2jwI5=_YV!R~uPV>lUnqdbk48qzlOhc~z9ILC2qIkvcI&%{=<>DBek!X>*hD#AU zJIBz)R?yE?y32Em8<(P-T(x|u2h6VdtJR=Kv{4*cRl%!AgphayF80_1SIOQ=+ZhSO zW?bR=Kh`2^Bte%V=*<zCu;QY+g3fkv853zf$yRf<Lk{=Zdm0|0DthcmI+91WrUn!6 z=38%uL^jurA~ho3&A1R$+{uR62WMFQO!aT(^Dbz?qEiK@%X@)vDy_o9j7s$9oG}LI zcBh;H3Dnz*cNp8t4zMLInSDIe)93D(H)Wh92fW)SsxIFCh$`NN2S(bv-7eZ_VRE-+ zF*CPZ7PEH{^k=Uq4)}WEd(8Ay?xtdVGwgqK^b?*%%>F5`02G{I9m-Im%q+xgjV{m@ zr&`<4C$l#rV3P&fz%=$KoR<!^5~uS6Ye$8T2f;9EGLBDQ*G+evqgs(hrVS*et{O`* zM#iz5PtoSA7aB*^<@YS~y7eC(mF1pEi@??RX_azO76o_skH7i(U4dkX%0~mt5tBxu z1Fi`g6nczW@F}}*cV(;XV4Xmn1uM49MvD#d0*HO6L3~VPijBG$^eNI16{7%(Z6dY> z#p(3A@glFhE&Hg--KqeDZ0*x{E}xaD)l@a;prU)R;mOyjdZsV?YL@V=OVlg3g$VH? zo-^W%_g_(dxr17h6xkzY#9Q6%9_1ovzl_`Hnr&e2aSgWyl2ZtFeXxu^RtI01hGWMP zjSk>-Tp7nEqAg;jRr#||p=!w3^hVWV3?^Rax)NJlU71pryT+c4#ihq<_V@?xCS@W* z*Tv}aKl*a@nf&+?9gc^_?kxDpIB7CzRR2LA0hL!A;iL@6lARWPz$$-7vE0yB7NYl= zSWI(^#{ET3+!B0KncSzgheBULY9$J8QP}P_MH7S|Gf1MQ6+>2JjHnGnHdjNgMvVI9 zIKa^v9T5XmIE76IZDFL5TDmNT4ahI1!h-+Ht#YcI_fwQcjIo3Y4?bKn($Y<V5PoN9 zyc7d|N9d^4?~XUHjieL@b8C<{pqilXWB7*XYyFVm^M-e?zMYB~U~AatB0_qpMH?e# zYq;mKlYhM4+NmwCPEW;4^Hz0i#xL;m77ZgGflYl%)7p$}T|GK0(X|feT_e_a9TDX$ z?oo;K9q+9BcRfSGbxj@Y&aapYk$?W4oBcTRDZO^;p<e2-J9Qv__ilT7tEGts3HgQ% z`34oVJCez#1WXlSv0;WuuvDrpk0p$u0;PHbhOT>NthsSKt23N1m7@M0J|mPDYd?Y} zjlh}&kKIG&mW51;G4Jr2h>pDoaO+?UOnq=N+U9S02dsr#ab6Uv@-6OqIHSTMOwqMo zOARX`Y^ZfpYgecJaxKq%L{u6-0Moj(O-2>g)A)|oM$@@|-LQkQ)WZMe=bj(UfR6jV z5y$!Ye_84Ob0^OE|4d}>Zm28BU&E@aO`W987f8bP>bP2?3>fSFO20@~v5?~6AU4YK zVk?UxNolWOuc`&Xg)*QHw^;2YB+R7}nk5Mf1yg5>ZRWEx7jpiNJc`T8om3k$*2^fr zzw-C+JWOq-tzGzizC1Ae*o^gK*QXmcW}(jr{{_d3Gx)-UJqUsaxBs0389@kfXT*yU z98Lvs_Y3FF91I1?(OE)N@tJC^Fo-kiOw9O?iUEWH3FaX3Av!0uHo7j~=_3R>i{i2Z z`p98kV8j760b>22MVqfsIY0IwDreCyh2pAQ(CKi3;}I2?CwG{cz2*=$`b@dIY~KT{ z?ypi7)8dJTc^Dz3$678Uoa~Hgtb>ENs|=Wk%_(k4A!!R1BTY%8o(wrH$!*>J;(6H> zZXvftl<K(24Ap)>xUem|E$LQeoFq?mt;jYLP^p*((OOc=!i~njt+g06DGDS0H0>8S z@GAJ%COSaNaB)I5{3Des2|2zIpMwR}l%MY8Xvm)wFiVVafjylXL*m|EjKQyiSPTE; zF|*HpX~o`<ES(FTCtFG3JV~N%SU)gr25>u6*FM~Aw2>q{WHuE%grUiI<+qUWSXi)F zK}ybW{W+}b7pnmB4HK+B|Aq+~UE)PX^YEuT25+CsuQ(UulUR0Ck7C+}>9y~$9V{@h zobZVDMZ)UtyC2LFfxm3%^3%H(7Pa6MZdnznT<#*%WY^)lddaj>@#O8AzzYn};G7IX z!e7+t4z%3i!{grl3Cyu_|Bo+v0M}iqPYY*zSflweEX5T)bKw?Y+oTC+`hc&WFG-E( zu!sewPvf>5`13Uch<GdAT{62{cy;Em5D_UOM*2uq)2q*?#4PW&aA&c{jgR81Fi>-w z7Z}U>fzx9^!uEkd=%k#|2g^Tq%k%L~)?@uZPJyoI-unxEAspnz((fER%|U+OUgi{0 zh}wQM;KEbW5t2D8Y+AzFz{0vJ7#0jUq9`=ucxl#EX=`dT<M`BA5Gq1B0Lt?imu?cB zY?3xoKBh_G_eB_h!#|V*Jt3tFSY5_ZlS^YkSwJ6`pzsxIWnnGtXnt(039;|tS9N?4 zQZW%yQPB}o7(kz-ZY|$)(k2PEg4cle8xCcz{mS3_`JpnfbL$47XZZ^I?-y&zsoa__ z^HDNa^Y&pWp&@s-U}j4<W`~uOYyY_i_W7U^@t%puHr74nvq!Q@Ii*eH5mVkn#zIQd zVlVIlXp;naG0=h*gRN?jXc<vAMWuch{|)(z^YRV1&UVWe$x-5=+T_aq+#6TiaOyZ; zR83;S9qj8@EYe_FU`|kc{M}jtBvu7BTxO^DX%DMwEV82#E8HIrQ=2X-|IVPUKx7Cf z$xd@1mYkT5G?;ep-`b-l%mvf#z}rK3b1B7ZJeoZ)#N_|A)nf<}&iRuqzgW3Y<RvOP z`Z9yGQd{B~Qr4GiQd?FX=4{@B_gMxX!=d{KVsRY8*$Kio=Edf=+-k-nkF67FG|a04 z72m9<VaYiRsa%pG($aagIMp7ndtOv~l0aKY$3Rs*+i0-03mLV1N;aMboTSqoNlk6R z+lj5;rHYi%>=++8j__~!<?BIBu?&T&R{k$L?+&=|q`lEA-p$?g1;cF^Rs2VzHAKR* zE>X~z<n>mMI#8#d5yEf9r)|MIidMzSegc%V4vUlbAubF^%3BQpQ(}ca1N}I0eYT|T zQ1!vi$%xUW=OJnZE;QUO?SAK>KQ_l)4$WKizbq-gMU&aLA-mfikS74(ehAEdCYGS* z#0=?X@oq;9F7Wn8tm_?buaA}8j)}b8Ka<5L1Z^>&8+35`x6>QPj^Mdpm>KS!lPR+i zQ|?H&;)?WU=*|0i@r&&%4p9FBWuJY4?HZfNSMTXVQ-<N0n0bSm$^=W8bM_cupPNwc z)p-v0u#IwcjbS`m*VOrCVaFPc+Cwepvn%u5ksS<UEDh?-PbAJZu*#X{9Z!Qr&%IEm zmA$kzgN>D~tv{UYAWD0>(!LV7l?KP1R%b_YnLCTJ0={&SUz#f8QMqQNM<P!t2~(E0 z{>*VjE|C$|LQH_^9duirW+&44s38;k`c|%?=}+GOM&3IDNnTx85s2J|jq!0>|9j$u zRjNOo!W01`vrn-2zVgb;{iYZrRAe+;>R;rHXY<I}ehTh+O6od~8a782HLsMK%aU4H z;_xS1FhKTzlP^-~5pR0o=Ldl=4Ca}Mw`9#OjVJoQ;+3#d`0|1liM*Dwv}r}2tOEE) z1U`wIdB&^~okxPUM}GXHFL0e(VGB&OW3|}Oy6BA{^$;Ss343GuqFcqW0oSNnG8@ub zFdnYg7^OGxrURyA<UQ05><-v-7h09uQ5W9IU+r3gm)y>pTTM^g>{OQ#o|ktdo($b1 zK0n@T3ANnOjPI;I)rbFmi*HcS<k?R6gx?dE=>P46^`E}`-&$OjnuoXY68e`d^Q4yy z!8g*epBN4aI0l-a&IGGE3LGRikglD@cxQH!BuMjM=!Af=Rk=`1EYGbsx48mVHPK-J ze^gbiOIbBlG`)9ktgnA*wP!wT>jN1BJ~BTXSDd;VHl3zBUWWb=_(Ap-y`G5BiW72t zZek&`8c2hKjf(sU!43!!MAssz-4ogE&$#XRh&9_F-}kguV?xXG700&ijqdbT0_QkL zhTe|VLf<UjeTFV(JV*2XJ%qoxGd86oQ%4fmaVKc&THYGkcB4`k*&<N5&#&8)lL6H~ zvF#r2$563aWf&U)<?)txdw+5R`A?a5@~0QJfgbp~!|x#yYJ#I7#0vNCOM%+n*mCzw z3c|?UgV*2)x%%}SMF;sIRBHaJT^87EH2IdZH0l|adC((#tw$Trd8cTZ`jV0^mooqU z4viAIUpUsL&J7H0(@pRVvCRXvJ$uSaKPPV(i!v@7Tv)E2C#G!KlP;Ya#-jFG=M$R~ ztj|_-Ok3v};a{i&tWXa2v8v|Qq?Btgp_|k#sO$|w4aVsiHfXMFyEsTRENF_%mM@z7 z9zG1ik}zi10r3m*bNJ%(&VBBWW$nS%ludjI>%j~fGwId-=IE4h@SskxXmG3=25TBy zHXGUTLDdFnmqC3|{G>JkXZXomDVI->kZ>GSfED}D_=-=yd{_^J1!Z)#NRF(-rL8PJ z+230XPppv)QZ}v37o=(^Fp+M?<O8z_%Wa;Pxk`kOpZU8Du-S^YToJ|rqudh>N{%6Y z2pOZr42A=vBQ~bgMqGz)vS-g)77#frw-9*qwV-NN=3<dR)kX{Ta5mWN<y%oaReKR( z1aWjYtM455!fVwTd-TlNTQcvoK}&Z?y}4Tz-ilo=_?ZJMP^E)tTv~?Y`KiRoQRm7P zi4w_6VtBo8^Jo<?Ve$dqTd6M+r#mDCt+R4(<29!D@*xv6FBYNDbY`@$sA{j{HT$=4 zr-O^wc}&z?n*>ks2qkiq^W@{4VKTl`D5ME(^^A%1@i6WQ<G~Bt$B&vnh-@E7HI}c) zx<yJc9Ih`D3+E$$T`0&~5OJDiP-kNAPy?s}iYz9ycjv#@`vEFLEK#pY0Yl&fUO&%2 zqS#)!e2HdJcFp)kOxO(Dag7*LP7l(C9uA`GDorL*H)=8#N7ct0Y~l|VG&8~@67wj3 zwTt-TMR2Glgy|VZ|2Cy{20ChQxvpIbRRaIE|NZ;7#eBKu)(XC-&kp@VcHrg?Dj?!F z$c_Uod5sbFSx4Hh{dk=>@lIk!qX5(cTKzeXzLg8eH=-d@zy2Jy4~UvK@#BVii1w8I zu<$kvs<h(Mcbc!_T^IQ8aPn1T?uPEZ)1$$m60Ka};N-9rmE5r~XX@00a(2)MSgGKI z^Aw9%M~<~ihRP=y7D|gGBXpF2wv!sdM1~V8+`<vg$D(z^w7y&-2QixsF)6a3`V?zN z;G}Xc{zCIzw%!m0rad^M;_Q>;OCy;}_?%wQxfA;Acs@?T7$_zZHSTs<h9{vggN$-) z!SwMMOo!*@pt7l?dT3FJ3HR-jiRdJjS~LTpPQAIL?bBn_!nT<rXp21WPwhm?`{+#x zcAj|~1WS4Qd{LM)tZ{MZjaFHBg+z+#y{t2{vNYnlF@!9YIn`#iCf$|Ah54=Sa%uhJ zHTEt^ndY!5&^tp|v<{O*u0)Tld56)wzP&7i(at)Ao2VJxfEP`=nVIx@!7bOrGYtj5 zSvMas2Vu|C*VA>zzGhyQDSAtj{aSubN{{YZBpa0*j5NnctdxJJwD_U|#Vlf{Dl6Rh z;OOD`x{>m9mOuGfzidJbe_3-@B}+D!H?Bw)<o$M7PnX={8Vm`~OS=i%>wV`ZUgKFy zt~Sf?CP2FfF<c!>n3Rgj%BjMWN7eE9jd3a{jTxKN<l&d%5oEEIG?i?d5M1mefhDI{ zClW#n3rZzbU`s;d1x?|^{aj$?-ZF6SgX<Drxpm3PtPIjoW!sizsiI=YYB1-t=UF@5 z6X<Y{2~FAQCP$zF6BsIk2sI|FwnSW~Lb}cl+3a$r5sua6k$(Cluc<rj#_I3cUi`+V zvuR!u{H2zU@67fhP6n-@r=a8oo?m<oEoF&8AZRhA5RCA)cvHwOv-lepe^K@hnR+%{ z<%_4Nf22re#Ih1bUfPB7F*F{AEmVOy3I@N40>&20Ap0cOSxf~d>6p<$z;r1bkJtsB za>79IYN7R)rvbvz2xA*~=(%H<D;=+gEDj{j@CH!9LG<)jd2+Cooc=hlAXUnkOIfVs zh><T8dmt5imSJ*lA1q9sBQgXkmA@O2*Gt6Rgfes$MESv!fQ37B*4@X}S=axaoC`$t zYQ*yVSnU_TJofrKRx(CCd02p3S{t{3sZ{n#CcLT_5(~93dg;asWq!A1q*$|+MrdJ; zfsf4=BMvNtj^eM=tG-vo^Zdx5JCgzP!?Po^@xm;c)6(SNk`TS$D~<M7jLCSvHyZ6h z?iCHo_<%GJSiATTj@8tE8mtqU(9oznT{l{xi+nlpM~E#s7Er$n%U>oKNa{KWl}DKx zG03M!#U5DlWP?9}ZZr^OfW70~jO_ldTWFiGTifC#{6<GG*L|_ed|wXReuB-wku#MK zaN8lJR(J|~o-V%Y+?K&CcX+qCDqD)L5HHH?8}#T^GWro8L+ooznmd2>*sXm{UP|^o zqPXFK{$AZX(&zAjRfg<=fOsT=J0*QO3)?t4tGbx@ks<5(%Fy^=Q2rc@@>j&=1I_wQ z#m*Qv128f`g*yiBo$dYx$)$hFpOsxc5zJw)@CwLvDjCJvGc+7DZ8z8lw9Xpo0AJX; zdC3LLPh9-HvXa-&=5Tq>&qo;|fDd&1$C_vX^qBTF1^L&1yyx=o;jls9Mp3l?UpT@4 zZ4!-E)o?;nLHn{rnV%{IBdQm{un<a>Vdthrfe?{^X8Z#aM?1bhpVl_XdUlrmhyrs> zbNvp<Z@w4!H#ZOoRI{~H-6SblrTdkJ*6&A1_D0t4R5(UNr<*LVo^LN-^Ttcd1SUPG zdL*J*K1P<|Dmm~9nRX-wdVdwWkKS4I&+nF~E#$}DZ0P4)H6cB4^i?L*Pb{PgFOyA* z<1WKh%syYd(%w(^-@`%3yx@F+f}~`H#`f4yAu)|nQ9p2*5kw`XK<c<i2NL6w^d)Pt z50SSjAACrL<d<9|2<O;#SY)bt1iD?of=Fc>Y}50&d0Aa(s-8S!42sTLHz%-cb!Y}6 z=p(%}*XODdQ}&>`tQDobG^SX!W3@INnqs1^VFIFoChi$nuEP=Wqh_pGA_G5!HA1uY z;Tk&NBHiBC1g{^@g2*uouL^AuPGg9^<gAln=Ha9^iFxpguiG=fmN5rPY~kPJ&tEa3 z>w4?6n|L8H%qaINu#y2pSj=mtJQ`aUyqSkwGqrTcL78Q-j-dtyDOZI}f_~<sx2(1v zK#uY!aI;|Q2c3X28X0N4_Vwp(ksjP!8ZSORuEbfVfLIhq6kr(|7I9be4e1-Zusgrf zYpo(<p}vcz<bo?zFwC{dWg@tEz)v|rIC$9eS|LHSCs>?1vA`OAa71a&N_{kOQr`Ss z1zs`QP@jQ>+t$Eun%kQ4En2pz`k$O)*BwTs&A8jBK(o8dz!Qf=1CK_VnyU)QEh)!^ zLn<~i(opEC_=@uECZ7o{s$2$2cVq@hca1(8_oPmxTO3`A8YqatU3yVgN!^~jT|g(< zo(;s!t`4w>LlSbJ+*~Vm%q67)&F{LjT?)dkP?^TRqPf7cfU8>UNpsKKrqKp_pxRuE z@NPnp%<Qw0Tf%;TOhRW-yQ{vbDe1SRS=>5WXXp#|acF?Vnrc^x=_4{hIcm3GZ!Ot+ zv1c<5XIaF)3RsW$!&ERbjrB2B49g<W6clVM>dMhds!%vVc{Lz`CgL1YYA+GRH32*O z9&l}b)i+GAQ{SIl(WaY+T9UECp+OZ0&z5Wx5~)&W#cdTVV`;Epp|z<%gT0QiD(ir; zN#s;45&T%DH@}&2xP~{;6NzKH*v$rkogfU?AW>mYlc(jWS!x^3hBkMEYCpdv&zh<k z9Obg+8Bx;zjf2}2Q{a$M@s(b{AbfUNh%TYq*u!5GfqO87us!ur-lcz856ZuS(ejp- zcXAFGd=5Wl$Q&k;<ZhzZS&iFpdvSXi;_<@9kfZQ|psZHqOF2-L3U-E#-3khIkFV#A zULUM#BtjGzdxvyiYoI7#<Y32_2ontne^%N&vl>8P7KyBvET=A2P=dK`Pn^F9P8Cwu zTh&k2>aHL&?^Hys2MD6@z-eCo71dsy%&h2eX!j8c;o5TW&^~PV#q*bY9D56}ib04@ zwL>js=s@dR06o*K$fPDsw$1n>i9l}ROjJcvg^XYE+uff9Yx>u5P7>x5XAb;aL-Q*4 zp9$-XjWzer<yCJCvS>Opg>`oXlM+zppV3Fbko^5pI44jz$3g?tztmy65?LyT)8%R2 zQ=F%B+dA*yq=uOaD$djtIbwGIVHJur$yCfUP4WVhP18vLI|YU}T$CjWTtJPbh7ox- zAlE@Df2@|&tTLY)-h(Vmn#1IdGm6W_#678HbrNTjam?ch%;IsL?UXPZ0~a?iWCYoY zxEH+96FDF`%D~|%9*GaQK|UL3!E!}ErBop+MN2c9kv|^|aybN=2zl378#avk=MDzV zJ3`7Eh~q7b%_CX&0lINV#^>HcTvj7_%@h9t+-}%0#46dH<BeG03}kss=akmq3XOHh zCZ*qX`|uaANA}wj|A@}HCG<6Axt0FY0!SPJsqevPS!gAcu0yaPeyQ{(PGP41PNA2y zwz@@JHUcyG3(ZF*6doO1D)>gGEY*5}!Y;kqsMNoel3R~X=iJRznoRd?$A!aRjZoDT zmC&-0r+EDjY2Hiyo%rl~D}DJtZlwwSzvw06%7Fh`L}zJ3d7}-z_}P)yW=w$+fq;wf zq6rKA1c=uC$V>Q53Nko;Y%7UC?{<Rz>v{Wg&Fe-d&isc_-?rDyr`gSu*=G-jSBsis z%0Q1V^Men|&e_9u#u~2A{Y}RWn7`z`8W;m|SLB`HTxgIY!e2-EVL>jaPtMbsz8?t9 z`})72f;h1z`<C(G_VjTPfR43Qf&rmH21ABCbzMZjNPH|6bHiW|Fj2edio;wfR1$bB zVoxi>L=a&v0vrF(113o8kvnxTpp&-EZ-|itxY9%SP7o5VZ2eyI7z!N5<O4~_C@0O; zxS%Y!x`x!sNFAxcYQqS6*Mq?=wz^RI=fxpqfXu>>v(BQqA&|&4LPI7;hxj<Gjm$7R zbw;p?{JeEB5G9og!_n;mzAi<5P*6D559MF&;%MWL_E0=Zo$_T>xC!JXnWxjnySbqr z7*1Q{J9cgG!6*D`#sL`IYUlwN{A%pM5hPx3ok_1_Oa`3!{;HLKtWgdK4QDgF`JQ_S z2o0Al`>$SyND#r8Psm^{U5nqr2P%+*oCsL8=?AJ{%Z_-gyZSN0ka*(`tNsIA{G<LP zS!Gd)VWnYb#Ja?)k!<bi6X7=LoU8t*;Y0|?q38RI06g2?viuhMnAyQN$js?mN&ucs zuLhhnt3wpX2{W%M>Ik+y$iM-cLm&ty3$Fqy1-3o*KmwaX1c(|luL^1jwmtm7Kl6QO zuxc}RAo(=wE;-Q5V&59f*2F!Ae40%kf8c@Dp&R51j$w8vq`g%F6VqxR1&rNcy(qnP z(%%b9w>pxB)u9L^L!(^^RSowRX~2rrp$a6Hxl<N(1@{(w0GHLF07Q<ZQxcT}_ZDwJ zi`Ah5gn_vefZBq43p?PF-a6pFf?d5L(g9+})TxB(hJ8yvfB>*&+yw*Tvek|G$6{|+ zh0B8Ro4Ci4U$gE043rqUX4$op?b<=g7y_%5K|J3liXmJcBEb_Vj~wCj)y9;w|0tx- z-hZ{w;T^bZXm^h}IN@>+2*PwxuntQZoS^OOr+KG_s&TmGwmQPCjJK=*>Kf|XsC2lg zP4Aj$yK%UF&wK_s@g40GuZ$vOIZ80R)4MAp=V!71;r8Ja^9=~Olh*Mb>R$oAig{N= z-Z<ZN(fiI0#zG>X3OL+0(EH8})c{`sA99#I7yF1hA7zm}&UY>JUvp%qC@xgaR4y8Y z69ny-Wzv9@cKS#ci_?0Mlwx|Xv-%eL_tSdi6dxCj;t5Bc=LHi#9fa8<)poqn3Bh)} z%84o$E|HXtQ^!*JmZc)`lmX|qEc%v}BYU0e+zD8nm|2q|`U+<*#gqbPF3l7pXD-#0 zrFOiMiM#g9+==k^%)$wLm$n3Yx8);ao$LGw9TzUql#Vk;H=XOe2|gDtm6Qc%E}ay% z_RPGAwD!!RiM963f{C{F%#w+>_R1xbEPBjS$2|HAm$npo%(HsIl<0Qt$_cV|ZK(vR z7y9IhLw?|<+Vx1^7am@3UjQEMN$-AcI2c1!B`FEB{JL?)VFU`V9=ns+PZEKWD%!XT z<KGEYnRti420aV_1chVJfm|F|jU;R!G&oHK(Cq?P(Hep^(TuI^<|E}9B&xHRR&{EF znq5m%b<5{#(Jo3zBAw_4%C=&>mg4!7S~9uQu$oh@!I71D#7S+Dm372>=1+>S3$K7d z!i0<+v<N68Umi`qEI}>JJoPUzLse&$#`d^=G(C0=Wqs#s(67`jDS-O6iosuLtHGQe z<dRA4?~mt%K7h&ce@8PO9x|%*Spf7Q7TyeZBge;3LV2kihC}AnmYh<!e{r&RVcsxE zaT<I8s-%Wc?y#J)=u4n^>XR{zL~u8@<yQE~n(wB;SC(CQ%jZc4w00A(%c?X;sj240 zTm(_7D;i(9hSg%Fqa)fjEw5c5JkeW$yJzd6$w)T+=1+L&ObnH#iB?5D_L2CHHB|`W zLUn&Q&`PW2{1<;bmEuRfSroUeye;Mu^%42bY<&p&StF(|j+c``i?R_BTFB>U`pxPh z+1b>SM5`+KD~?+V>(bN?M!agsl41;Lek{sMHsEJmSnm88FTZ}Q;fPyUj6@?N6o_Sa zgs}JvWMtNZXmf5zlrk$N5OV3h_i#z-_){Fc<xG@voa}(ftdfxUOAr1{Iqm&Vapl${ zQHtS1Jll5&gFA<Ga<f|N7^@G%s&TQ+?!3kN4&Y2XIUg}emIDm>;2wR(j&pIpL<>Av z@{L2z%{6$1QTi<t#HKF)S#cwEBNZSvs1Zb0%j~mdD2;*<GAaC(zh+wU{k*SZG$wNd z{BA~PE>*XgcT{!mSyO6Of)q05eOFtqZdBD;0@0i~2dW3NFQBorVVP9Sll{yK#SafQ z=YEp6H=Si-EeiN^lwlBhl{<sr`MGI_jqt|=PZc+URgGgvt?GWHd?3KRK|o!nCcjZd z??AR8VTdBwdnjzj4lw*dK0#Vu1{1PXs0+_jlwe?j$cDXS4421=mbn*8PD_eg*Evl- z&|k-d09DC;Z1y-qPJ(7t@a3?L1{k)$6uC4Ncp_JvAi@ta7m`Y_U?W-w6(l4>ziXV6 z@j@OhSviG=P<zcdD8&1cuk{QO&{tz<&;(;U8{5QRzb_BWFKtSPR1)eYyN*htW;pKT z=E0({W|mz`!1JBLjaXf>XclSKG&oXG?9#-E0Qc_vnyYOBny#2b50U74CFf8mmT2Hi zWDE^Xz50iz>>ZKo2B@XGqwCu2v$<D=uk1aMZ~JqkyQ6Mf@B6s-gtzQgk#7TAGFlOC z7#;YUGu#oktqh@T868M$neS{bS?^>!CkDmun3SrMtytTZ6K(GG0R)EoX7}<+1muXt z2I%#1#Xqh$I9`7UEn&Q~&X>|T={eheV)|0+HR))hU{}+<@V;4I?HjjKn6}1k4$|xT z%Xa)5-cAU8Z2@Lg8W;?i?hAB|`W=9!^KK@JkCIqa6w`8PfG81=#fq)kkZ&-}q+_i2 z5@gU}Um?pyoZXSZYi_8|Y?h7?K9usv{L+7aF7ye_SxBZiL>a9y?FcH{YRoWp*<fF* zpmU(Ou3aN_70@<CGj}w9k(EdoNqwd7HXAoOa!BXhPNWz`9m7b!C-tbOl8Y-LhMP2F z1$g7-FdkXl3l#I}Wao{s06da;Hxf_m*PM<#iYfEil1?UmvU=oEF~nmo;2myTO9pB2 z4Ky3l6?cm0YNl%8Dt_hvno@OTZ%HmOw{}hd5*oaNUV0GOdWM2ldiJ=fWYRjCfNU#n zz=j4IcfoS-lAz?nilgaI!N)6VY^(46wbZ0FjHXiGvDAE*FRUW}Ej(_;(teLQe|@=) z#x7QAE**{TTqT;<O^fh8O7M-VT?%o3`$@M1SCN!Hv$7QR2Ft!NUUBRsPIX@?KYD^j zISIf*Zi0bz$<IcJxqkhr!pmo<RZ$Ej)M*<+?aEI47KdaLai?W{rj$k1$b_@3zQ>g~ z!5=O2*W}(2pldKrbEIPYT0CM=e3>pkSTa@t@QChAmX%bsvKmcX8M}ChUd-T3Q;{Pv z-A^qZ!<F$U=nNmPslDo?Il{;?Y2Z=`<PIY9*5kKJImWYsp@urcSXmqKOwv5czD`6m zJ#v~jTDCapobL_gNYNM!4?*O#;EQO|>{e}7Z%dlUg5nki7#aT6*R)YxyiRgwuXC5& za*W>;<u7uIn0zS#>Y~}e9O28KTOZuBNl|F(3McYsiw-*dd^U%NxN7z`a)?}FqG3y} zT}qw-c8H!=DF<Y4ax}lU`NU|M#^o2Shlf;oI~`YA8m&rw?<lk`p>y_OJi1&{$ve$x zWz0a%t1y~Ls=m}4cj1<JIu{iy@1Z~;o=o`T6#2r3KXnEC_Ne!(bY4%>=2>N>FDEyh zlBg5g7`%XEh(`jQCBPE%vTE{aO^6aQgJ>ns*+kAdOy#`8IsT@TbmFh#PBA`}7>zO^ z<c#YOh@W(Zs+QbFc`B~6b47JqnAXOoK-n`4{A=3w5)8aOR$^Ha!}11JCDm=*SgmTH zM%h+(e@}C+>ePJ=;A%40vaokr`_DFzpaIO46K%|^Uvf%3Fg1O`eD!&_63dT;iZKOV z($v!J-gXTXj8SK9(-7j>c)vU`U2uHqaH_adblY-#<M65xWn4DZ5&x&>J*?F@k8<&j zL;HosFTPl0TeZ~BG^!h8>q74gs+)Z@y1fg)8j&5x5hMcpI3T@qBQfiqKxsQNCnFyU z|4CF1ftCMpXQb~F?=}?T?FSU1qy0}PM2A~Os95`3N~l<eTTUpsTe4e8C4RCTu~q7K zt>wp7fnB4iopoubjMS^}yAsq`zYq$n2#?Dq=fyBjnYSqK<;0n>69qg4?AUjo>?PIU zOvggU`Bv(gz>w%{h)63daj(F`*3HU0o)WV<WVZ(L%T}W#v*AgN1&kGTPq9f2PM^K7 zIRf@1=Ofr*>XF!*{ESst8iFv7;b?M+mefqH@qg~#d7Lj?bY0=N7wMf+Yipc2$4*Pb zYpgWR-4jU}_8@Kbs=)MfA$}ew_c3p?R}k)#De2ktk16f3U<Z{nA6ZTAbG<(}u)%>- zOkOroJQx{m?3b~##}np8jU#P-reyU=GjWZj6R@Oe6isMV?EkWbBJ1Ywp>RH{EKrjU zqp)ud=Y85bKqx4G&bx^q;7nPvqBVlTAjU0S{S|e(D5ldqP7`oS6Tj*xr&j9zm9ugf zS?nDyz~AYYd;e|0)lUH`dd1R`UEN(fb-1z)-L5Iv4H6#9#e|UCYfut6gqC6uS20dm zRWvorPB~bT6s?b8(Ib|YTfz$UV($kSvn{I0;m}e<&8%omXZ~Se(U83MwnUgfw9bRc z6U%q~r7w=bkj+C9+sqRT@#d0EGroeH!QrfxPCv_<!0weUM5OsAmnW2Dc&;*pj+u+g zDZOgx8PAs7%r;@?<bpfc*wb}J#j|-W*V7#t^5ngm+q*M7<7lGTTeMqBmS|Hb=$D^b zos(#8b{)AM%hAO>eEo-WrSU<~Y)8Kua;epWj5PV9{>A7{1x;l{FEP{u8;MkmJQ-?F zUmssTvKPdV54CF{2J}K6+o?*;&rV}5T84zlh%D+?r8XKAH_v{bxYS2u?>LdujO>dt z6$|>JA%x%tDko*l8d5U6+E<Px<|U%xY-J@+Q6*9RZf-8jp~@!T;Ca{%;#rB=1$}YV z_cmjg6HWmdBs+O_12s7x<{5oc>3y|4BAsw_R2tAR!f2^9-2A18R+X0%6mQ_u-~hqI zK_TKn0)awO4F%#_({holtU^LNNs>Lu0?gkxdt1kS9KXsT%(~@2n1G4Gz;I`|EGIc? zgZfxmF@^4F`03qg`}hQ96}zZrQRk5RY3$8m5zlzqi~&n=nQG|CYP((Q6V@7~_ImtH zbyM;wbepC%SyQIF_=a{DHN*8n%fZKTxw4@4`*imihwQP+upC<~RsX>}oif%DHYy>Q zyNpe~27sF9@blH$`muJDlsj~xSVK}F1(XOjzhC0<%*m`2O(%K)wyad37T#`6s;sNs zw5lE(YFbz3Uwk!*tE3XPgEHyjX9x9ah2yQHVXZ_dhOyEr*0m{R6|sokiqy23o_^D2 zrDNuKoU=If6J6Wlg3+OmJ_@`DFD(?3qZ#gOPl~*-EY=ykq8TTBP88x4yaRl7rT};u z#YMFa!keiGN%VllmXCPjn0Bh9ViQjs<@h-?J14t{PfkD2&Z&ekDg(3qcx5v9#CYSm zUSf8SfG}w)qjBP-Wa1}D0t)7g3c14KFwY8rs=(<BxtP*P1YhEd^eWYnM)6P=@7SXF zgy5tE5{gGQ7xh>paaEoKuZ(Zt&5e%+NwGt`nFDiGuyk9`d?)SB;-OZtw^nz-m>b|N z+j}RG@K)^~BG+qJP%PJLaL_-;TPlcG=5E9BnZt+T4{cwAaRzK3(HF=!Hl^;k9m{(j zC0_==TwBwBo)+VTX>X`d0uy>jkjG9o&;#vX;8pZU50nyLy`44zdMzw|52O0C)aB>< zOn&};DUqC*gN9Giz75n93@(b9KZ@cZDqS5*NN-ruJf1BxT<bGcwWL+4)eOkx*8<+o zk5cG8CXRe5XB!NT<I^Hd=hI7~UD_iuDeyIv>iOU+ZY%r^TlCANvFY4iL~`?cSz<N) zlm_=(P&T_l`uqjVJA7UBhbvctPcu&dAG_NOYTN=g&M9`k#r6*C?+2POXxjbhS<i`9 z_|H+ne}2Y$vo(eQXv(GsA998S{|P#H(U+-eh!uI~OLxkZ!N=*oVN_7S@u-+OH6N}m zCwdE%nbyAI0`W6u2zy^IB#-zzFM$HwDLwgYcPAD>_f}`=E9Pu01_Y=wzA=Y3bv}1L z)D+U%F6WG84J%q@&gXCG_U33k-bA(h{iw}WG}8RU?cF>ncJw9>2@^|u52HZYOH?WR zd{gIrbcW77Ft87ydveCGQWAK{lyKv<v*WpWaGHXoP|F=Hg=mmzi(KfF$~O!m!&u?R z4Ctdq(uEVxoHP7*VC!v4uT9e(FE|9~9edEOlqJwncT!PQ$j24_@r7_szbB<x+1P29 z&4-O^FOiQ*rl0RFx9K&|k^{oZXXKM-Jh+1x8|+_NPS2txb+YiS0IED?_j)UN&Blu! z)YyRKh3}X5r$lI%F;2pw-FN5EmBKW_uK#;QNt8li@^nU*rilaSu9}c=>;dPN>=axW zW~;mZ$HKMruU<kZXVLQZp-Edh@c>^_?%Wr@M^TX>3k4JXX`aeOS5?FEc~pkQ_1b7U zTmE67IeNNhY(GkA2p)sQeXJde$K@#kN+n}@^Lwx%uf15(u$f9n`nOJ802L=>n{dLU zs-rca+r%qFGkL@ON_3qpBeP#{jONPZJTl|TbbWbNC+|4?a2k95<0`)OZ<4oWBi(5g z8InRV`^`_o?UhfGyI)!+D#c_du=DWLzqegqu4SCvrUPg);xF6)OLMBehsC-&t!8jj z_hl`1m#*zGzP7f)DGy~P&jYRZjkfo8NiOGtu6K>t(x&w0+LI%>Urk(;N{(H*W2G4% zyf&xU(<Ld&Q(!bssw1B!Rtk0_`O^C!jvCWJ!yt2oX8ZVnY1yvXM=sM~?>Ctofn()K z)Bew^;i5V~X<gvQYJTxh%su4JxTF+6xC5avDLk~+ig^Y8gV$T&dZxTomR>!#9j>F5 zb4*GIPLf70JKf4A($5ep&HX-=rt>(G3a`(2&k^-fl)1|SWG_44vCOpo9q3o6+OH%h zCxYg2RGX<i4zRdGl1Sh1#i9=o{-nua)z4sl8vVQUr_#+(Sz$&vhGFR+xeQnzk8ywc zY6w-l(RHi#t!_2Z^+H!FULiXbhB)@7sJkKTRPJotJ0e#0@TqlUuc*6GZxkKAK~i^O zn}z!wbxK1oyIs`Xh&LtfTEBh6CHI0zRlw$Ze(;Ie{!ppv4W+y+Lm4?3KubpeAyn96 zI37t3?-y1^_&w)|bU``XSnm|}#>qdIMAeYiH0X_zb3RTxZn}*6VBuX%(;&{?5SKc$ z@1*mcf{^Bg`rzT6N24@hdM!SQc~?{|!<W&Pnd*#tHBLKi`Zw&2x_ddv!k9%X?2Ws7 zE=ePP3J&Q3;9WtpFlh=5e`D`nNLr)Gz$Q8Fc-2)iy|F&lH0+KgbT)Y&GbNCkM7%4g zo}9NnjvM^I5;z;b%$VX$PW?9|*TFndpGJZ5!1BS{w+UY;b=8GD&Xc?2c`8s323h#n z_d{^6Z1$(D^g{UdD}-;E^M1t#n@v(hF-vJNi_>E8Yg0wKA5y}DEbbaYJ}M;r#*d)& zyi_z7#!s6q7-3424A(zdjES?&SMrN61VRJrdEyk-;^yzJr)w|+Fjun(niR@NICBV| z6v`;&mQV$#VkkIE2xM7|>9eV>j64RkdFQUDOE3q}(RQKCmJXnw02z2=f<y&(dbB=| zS=?!gGf=D_n1N9AfpPXsGJ(?ih^>imeI~Wg^b}8RpsKw|jc3(?L3@^(<yPj%)kTtB z^ftt@(y7>ev2|JDzZ1ywp^DgSf+d>@#$7kTd0<L$Kd}-MuR4**^$>?or)s5n9<f!L zE5@}Lfe*!;9!Bf~wpa4p<<@RVEmm{6#M4{CN6B#1>u_Gp!aLE7P57P<r-e9M1hb+2 zxE9VFbBbFs&+iym;4O2f%Yx{eAV&Ipm(XtWj&8lQt3MtLNLYKfY8f`cFg7d1SjWy> z3`IokfA~i3%u#yv8GaD><tnK3(Z7-qNxH!G<v^qF%?#qh@%;-F#Q8qYt>OC@>?_Oa zPaJ)G$l(@gogXiXwqg@(k)h8mbX5wF4{C%xfS&xl3dchAjaURQ;+B;-VMI}#`?nc! z>u-m!vV7|MLM`h2n_+1b#k39%A>k10@?RvihT;xE{6oMeq2mKR+&{p&E3Pl+j%K;b zRKFQp5#U*ht0EusZ(!$tk@gnBZ3aNLZp_TgF*9R~G0V)1GBa}wF*C``3^6k^GbUzc z$0#$!ex5tGZq+PiX7N<osr0W@t?tvOzk`4Rf%YC4P~m5IjBJQ90sTyiZTqwwvQ4ja zEpBItUr3fh!87t3(sRJD=@eJRl8`FlH(<d;OIK_`RckG)*u16*P3E;@!Jq2lN)|4` zEuWE@cHE_e2Gmt^KsoMFf<wjKsfr}yucaDwD9b3LdngM5(lww5sE(x!P>~$SVt@*3 zuqo*;Wh-TL_hoHmY+Or%W%!3uP^nMZwD_}&DfLeQpg0#Q-P0o8es*}u$+%7EQ5gWe zTZks=4*i<4QWA%Vc;yRI^^<GU-fU7s@AuprN!6XSF}yBh=|M)bK||_4{;}Bm?rTqu zef!rmC0#INgX`B&UE*tREDvFiPVimvl)F&b$Ygs=Pw+&$rglL}Y>0Uko1A?*uf>_h z>8MOqG(p>E0s;~aSK1oDSSEoUD8-WyENcL*d*3+aq@v2rFRHxKgAclAH_)u|O@^#+ z^g&~aZyacr`dN@Vul4{5(4#z#NB?XBVpX{*k?n~&m`w2v1=UhLGf*2<AJ_tVG{=|e zpM5}%$~UpHJ&^}lDZbGlN9t!D>g}2XcdG4zgL_#A+Gj=T?G$QHvvHz^gIL)uiJMK? zOZ6Kes_n{y*M@`Fl&*{exa7Bd5E;euZuaeC1c;3KnVnjs=71L9uR5+o|7;D)Q@LrB z{p=2oQ{I9=MpVz#)V);)S^$5I@ml(4chI)-O_r>G^g(ONTO4Sc`dNs&xAp)H@UA>g zM*nOI5>dGcNO_|l&!c~Kr4A6iNt1n-9XCpPLm8)cZ$p++eu7CJNGnD(>gRhREFIu= zga4O`>b0Fn_L_@IBa%S)2FSgjy+IO5YX29Se5mC`=1)2DVKw?5S8@&Kv!g@|7qF}T zM0B=Grmq-&$womM2|4>+hBt_U|IcH-tG5z=jE&pR1+V}U&4*)zDia1N*D&8Xb*YJ? zO1$5Y3zNdLJdoOt=0i&!VfH%5RCQOI-!0Xz6Qk$s=M}+w{!Tn{fa<knSTEfZ<KQ;- z8`<DC&Rg(q9^(7(wIj?2@CiqpN=bVoP+M-k+y$G2PN2@p3~nI>^2b76YNpzuMm@1? z9T{@pyPE*vmm+7z6#_WWBca5l3EO$BUT|8>i0lUJ(vC78bZaQ36>NMzklqzylxCz0 z6Bg+p5DM`$PB^*kk2)9_$%08zzDQjF6@6N_6&Qvnck+EBkcI?BpiZkIdg6H3sX<&| zF69@btTVKGGibvV$4=U#3RAj-M5_XG^ZWaiGG;7UvXyVLO<Su?Tf9w`I`@WFsJYw3 zWuMC*-`?}1Q8A?|*rW$}g1GQNK8UbA3H-PuW2(#ar8m0PXHtjTT3Xcn<Lc4(96sY! z*o_KeIFFtDSibZDmyOH;RN{re^#fC6=CPHQuY>y>{LU*JYq0C{sVn~0HpSwiMR7`{ zGMhPy3~E3a#c-_pu(;vZf%Z0|HM&{XM^B|?@;fEIkc&xYuT#atwn3>Xx={>dMw}`W zKGl8|WNAjeuw8AKN`g2_?FXzPFoQGXU?ifVNn25n0Q<&gwi<h86{aV!tujar|FU%F z68TZtNhwSXCws)HBZwQ>l8!HFmkGv_GrMR<KkODed$vxqpFa!<TYs$1u)iChMYS#v zSQHdZz@p+rKiJ)V{K%<Wiunj^s||W(-!STj!Y3`?aS2NeQb6uTe8FEstTA4xGDZ^b z4PulFPupjJfy!R1Firph`q>79v18a`81PN;wVb#Ixe;s3S4wyKk<nDHmBYg6z4!(x zu?0c9Du|@h*Z8E@S}}3d$!jjN0}^X4aG>XUKv~w<o7ec;)7aaJnSW*huAVXd%jsAT zrY`&UBU*TA(+C!7VA~h8ph|YgRv<DDkeGDj&oyyPAa8x_3<unxrx!fIi}?6YvM@ie z6S3HcA2ey`KG<plCBA>vi-~1m-zh+lRPP!(W-oGxKk{7&X10Iv+C`AWk;2jmFIUE4 zhshUlc0`N*7)mhBA?<j#)+-R*tKek#gOa&R-7Y+>r2XfG0nYq}ty=HU;m@O;wl$SA z@aO$K5L>4hOFA)7IC6fRID4S~7jgDTe*n+kDT&vJlwhO7?-PaJ7$<#=(s=d*uF!Tv zu7@;&N_`fB0sZCd<NA08JB3K201cCv;-|tpwIfKnvK|AOhkFLy@XGNXL#TgXUHq8k z{uVDGf_9>@iY<6kFim<4?_$RWq$`+5JE(QgMPJ%s7d2wn#|7!)0P|Aam2H8b?8iJm z<`owI^rTri&Tx?9hMaK~9l3;}O1e$1&u+<Io;W^vKgypUQ2$|ypWB?YtR(yLWlR2l zI!60%*Z!uC_Vz#rGgnrq|6{TLbO(I-OhEZRum7HR#rpZVgSi{4rOW46-K@+l-0V$R zE#2%{|KHQ(tnKW?|MSuR=_-iT)N{p_#D3>rowlP97vn)NgBqjy+dxhe93i12K@N?% z5(2=)zFx|>u%pSyk+HBy-1!&eh1cx+6OW8(`%aWJRYFddjH&VsL0I<<F}guesPp?z z1JGK<W$xl}_WO*dV%|mX`|C5|PlG4j;b1R@Fh7Re5l+O1<^3<PCVb@!f-678`KnCd z2T>w+BBF}M%JKWlfAixGrel+(4mPqAr>*U~Sc(xUjW~%7yW*>Z1r<k}Wc#gg5WH8A zT>Mpr<-Bx;8Fv^;jYkqvObU#3MHTyz#WxKn>x2A|n}1zmAtyrcGU8`)q*6*DJ=5<h zT+?S!fn#i4UZEeEo(*uNf(RxpPsaHu*jz|G8~S6?QEy5Uk#53Hk8Y`MVvADk(UOH1 zknd~M-i^~0&GlI=<#CRVs&+~PRkld+6g9n0U#*Hc8{d$5?Jf^uz<rI``Y(6gg_mmB zM_to+p`&y43pq}ZjM`iy142O~bm=vJFcJ&L>z@7lB9wkiq&96rg<I_##wptT`k9gd z+r$VN=DrWXdo1<j3*bpX3Fg1V6;vZ`pn5*jnp>kKvG&53fgNVmE={3Ek{e_?!e6Tl zt?FA!2p_Ctx6XA#;(rXeYzv&Z$27_z)SqJ1p4;iyLbsyZi3!tk*6c3~bM;c_KO@}g z`-Izo;yOV8781vE>;r|R;qN5}&XIoTwi5fL>hV1L5?!%bna{iwr-pg5m+cDi5qj+S zMX^{D7CdiZg8UF?7@xim!uSF<XkTe9yp*MW>G?;jx!W<UD@GkT7@}b_2{0~hs|V2v zMOWog%?J;SA_^xu`&I045-c1e_RKk97^z|={eymFL@56;&8@iOm=|DYqnVyOUGsOC z!%H(gwD111j&YYJQJc<boowb?4J~Y&Qlz7tMh!Ub2YRNNsae~d+7B-ii6uLC5}l<* z<Z;<8Mx2VCH6ftYwKY41Z{BgmZfWkKVd5&fBjsj@jFA`R207kAJ?|fb_El`aWSSJ? zZv?Yow;gRH7<PH@$g+t<Y{*F-8rpEQ(n{(UkVr?;0n7eP)tD^%;N|bl_a(@9)C*mM z=$g*Mt4G0II0~W%%L(U$vG-l%du1bN@t}1G_iMo4d^6`w<j2vFv{v73ms5(RSW+S) zK}F)0Qif7TwL{tTVn8`BcP-#D(5X<I{;A%D=%P}a`q8@D-Phl6taHAz^o7A_#qCc8 zX@20lH$#een^ED-jLAxilt!3=?f99&$c=1OsanMe#4?SuNAj`cn3={J0}TsqTM0M+ zyd*19SoleXia2L;0AcHVnkZ+{w~l`dD@wZ_Q6nA7D-jNa%^=8@qHv2a={Y?Pi-3ft zIJ0G}MBB9dVOyW*^6rrN+-;2ZnABXxh>^1><y4GH(Sz{ZZS++v12I2}4&;=Ah%kyK zIV%N;T4RGQ_TP4(%t)(!j-_SUEU#ORJ?^#`3zub83ENcy5`t&kvmbl*aw|@9nw_o) zM2`|!^CFX@t=q!yrE2saFp)`G^BCLeLr2th?Jy^S5={}+R552<*z?}&*?Uze?HQ%v z80gYix^)oM5;jEh?TKF2WtMu7MJIjuJd5JCNQyv4Xg4NhL|@tdZwtaocSc{|SwO9h z5xZ9rt5@SM(tGz>ce{?69|c2z%kca;MY4a$dztAhmZCKtJM(Ou%k^0CDq9COc%-z+ zF3m*$?l8L|5Ck#Sgk=_Z=oE+?^7Z<215~!RT%h!<WE2;GdyoI=1qO|;iP3#Jxg!6^ zB)9*T{Ph2du&9HZwWzxb@V^w|6fFc_Y%P*^!-myWQ?UUTcY0}n*a{U@G$0EEJ<%XT z-X_CF6o)OBZby?9xS4S=#e_NQ^LwdsOY^!)vre{Jxl<;BqB*Kr<1AFOYR^w2`Z03u zBWrV7)I<E`m73FW`}KYF^Zny?=uoW;qRNyMPZ!<uySupfK;(LXfN|T2{Y^&k&tTNM zj%ycUOtymo#%oz#!%(fxoe^7NuWBUE9d{OJun)^CEX$J=+@%{3X6vB%v~$C0$ANb% zrj_qn^PO@$pldp?_4ZNd4UEdW73m2c?S$zX4Sn46(|`X*?8h45+ZQ{?w>JO>CZ`pS ziHCnG{~6z|JSfx~-zzdhmgiJJ_$UCDAwDcJg%my<f_iF#%5w%X$K8&@!T2skhF^b! zpe5!TZx%Tp@Y$Fp%kwONh<DPCVnyy`3sUJ>Z2PGOIRfn)SWw*QI+?0$D|hvvoL|<= zI912iWW-PRoK%W=3)ieIAD13g%EQh#D65__Rm{Tq`v97|%+eG@cpt7{pi-njBr~^F zRUXxzSTLv6oz#!}`$a}l2B2~nXV#^()LGJlKkX%^D-m^(>=yblBfmB!I&6F$uD*IF z?Jje{3wH>?NeY&pZWAdS-sduZf~xoh4eG#_S90>?=DrOE_TequmG`oG@BB2e2z|>q ztgCvM^jSoXC_Q~$<MgX|(S((%Ni|x>g`h;1v*3`i8-6j#PPPt<z?O*zm3V*a`r3iT zZVg!aG@vfAVu>Cl1avk_mG9NjOQJT(Aw*j;AY-a?s}bOvXzxtc3q)maQgt@SY=Bx3 z6sU8Mg&8@(?^{G;$%HB9y~)aNiK63oo|EBI#<=4`oJ<By&21Ps*OC=zjL%B!e3_K> z@~LeDx~lPGt#pEKx3!3NLZ0$NJY6BcI0;+K>OXS-oF#FbbcfQMr22{|dSXT+IxAoU zaMdhq=B?y$!8pDeLptZCZ7gI$kUcbe&b~SLxq#cBHFDzQ!)!2u<a;u{;(ff5zDP>W zjy(z(%vjeX7~8{-5_cwf5m)={7{KiPE_1t&FP0J;LCh5X5w4KAxM0fcvY1~sV-Af| zQGu9=pUs>3zo`DfMI+X|QQ~$AR#nZ$K1(OVA*E|I3hg17H~FDiFjCk;r8vV*8ijwT zQS=jvKjWS!@$-*2(Y{8C_XrULFU29rH=RBsi8q`8)ACG%d;(kpdmC5P$ot!5rYajc zEU@RB_>hQm9A~RiU$4X)(FX?D=q<j0qBhZ3K9bl<2!IQ%kLesr7e4Js1K8ymk<jcz zw8Y%5AW6P&;%khoidZG6xFwprwAi?ZN%fO0;!uklM^NB>);5E@2>zCy^kWw@BP)`E z(SjP1v4qRimEf<T@^L0+`ApBh-#YZ7H@s0x;x1IyHV65Z6k6-@I%!qo4Yv0bf1!gx z^#)7(Q9xyy!(aY??W4;sC<{*;M5w?~9?<+9>yQE+kX_Y>a5po&-!qaYC29<hc*e#( zR@sW_xP#lV1mrozh2~hcbCXTDw7GRGecG*GkhcM+8j{n^09aQ0u#_I5Zy_`}9>h{{ z(;57OU-8F#?yP!htC_<?meXF14`Z8yq-A6QiK44fm^gQ46dnoi->lbb>9O;U1fwiu zel->~3iz$KYPpKZE@rn#YDDQNb42(AzW9e@ACr7bbC&%XQJM)VB-EmwquRRo^tw?L zvwXc*%N0llGZ~y@$!qic7{>~9X$;PccK7^>!}I5b{m)el!bH5xc+aZOyvI2BA_J;k z*m7;!34luwiLcebkY+qHxLl3D3mvO)mW?&;l{N7ru5_{e@2x_8shJiB>}X<fnF|l! z8auD?1em8er)}HjKK{m6lW&gyUgo1A1LO3kCmJ=KZglBi+cY}CC~QjVTNimO7-svx zhncw4t?HcWWMpr%3snkoSI;wxKS&(*>ChylxHI~csYf>3qBh&f>4MdEdL58L$dj&H z$|KJDW#pFT6Rz8qG;>{swieC+4Oos8;4JD8k4DP9u{;NI#>CKOb5RlR%IX&Bi4{;g z=Yx=2f!3QieRqwUB=419Ysyn7?(p;*QO@#L<Gpke+CGA<wf4%^PIu48nDuO$@pUG1 zV6@3Kk$uPO3T219%#iX~5#&^*Ehl&NIPdHxr=5MrrVisw17CrO1um`A>1$J>av|aP z%3y|QC~JU7g?z9T?_@2+?)j8I(w#G5@vKFd=F8*F8GU!_!lN6+nsE`kLCYyYA%VzK z2@+ie0jvN}bnVo-l?JacIM;;mr=ndM@1Wd#3a-T?`i!FMv8@nH5gk(>1~v}q<C-E_ zf7e=4op+RKUA!3G_fNd3^e$hJrf$<_I5%n8vSynHbj@IS6+v+4s4Y>TRnZ?6Y&;Wu zS3zn@ItAb*dvXGU65=hBWXpcD<&G7T?Aht<)Ul7MwiCX9l1V|U6?Qbfl(PYZUt;YY zt}|^{DpoWS8-bG_ga?WEXC4g|o(Vm<-Ke!^C@$stPQmd#-3aE?plYEP0fVws-aTU- z#NkS`?71|K$+c)1>m9jnJ63ZWUZpd(d-0qS*;m_Zt|gr+2YJpkU`qVJNlUtLJjsfT z^G=b$io(NlIb5sii5s#BnxWKuTdc+LcRItl6N@x-%sNj3nMF%k8lJM9pWoA?o61y} zOs$NBq7GxM+P?>LgmG%mtMCThG<t!03GJJ6LD&pl>JyPhg$1CZZr>&lmg;cAKt<9u zN$AB8e#MW74)))7$VE$y{GlDXFG>ZuZNy={^OwzeLz&oy2h9A@>s=4*Rn&oamM}{g zeB$o9cKE!-PL!kE=$EDJRafICM4T(72zIWBL}B&pp;_H6Dt3iTt!3zZ9_Fi&;GgzV z^g@n>PSs`Kxm5v~PL!FE8z>T2Qp5w(ZBSWs00=?A$>=YO+=54#icHI2Cb>mX<FFN( zJ;L8EcoweVsTjY68|R~8=o$o-&E+Bd9tQt343T%8LR2S-V(F(h-r<PH_A9$6>6L5K z>)XL;Q=$7_Ukdj<PaX!l{og)}F3=ou=SYJiW*W_O7oifFcESxq6ji%~Xwck;l}3rQ zPxmb#2@kEH-zUDW|ETX-@IQuXu_lxba)d8mv_H|$|NR*J-%@-3Uk4^`XAX4vFYQ;3 zrk)nj=Sh|#ygVQbQ!E;#n=d&!P`z|%Nq0e0?i>b%88@oiOCW<76xcqLfq;7z-_z!M zjP|sE=Qp<y&f@37oF+1U=#n@7MTfeW$!NyjsMqnz)#Cl-@s#t+@wEY_xR+3%D}DAT z5rRHoPeDI9ivT9nP=DYMx`xWSCw)lIOCYe4o-SRXAi|U5U~dz9OPoH?+gmVch<PKm z0S4xZv8~8BvEUeVn%<8SR<m)yA>MVO2`wHl?lx2%W`Mhe$*SiDqHl+7O>MWF@N>gQ zvnic*>Ntq_UhA{*3!1wgb0y3W#ctEdJ}b_*+X~?lC#w@uy!K3jC@e*P{Jz4cy}rc) zb{*G;$`D&o(km2|Fm!>z=(uAzr=kbnt5l6yaN`Hp^G~NG<{omvuw6~h0fZ@IaU*#1 zWI{@=GQ(^PdP3w;0ct6RR5N=ejv>Ow3T(?dg;Hd{Xb9e=BX6PN^a*)ICWkaeU%T*@ zdQRjt*Vlckl=K;X1OrF$Jfsj3e%3Lu$INv-*b7Nm<Z;Q?U4p$1`bptA-8pLnv0)W6 z`savHYjFlTZB=JH?DMw}=WTl{94*(4@0DQpf<K{_Sv`&&aky=nUQ{tsU%6J5bPvoV z`r#NZcYC7XyvCf|M7j`#)xj9T7GA#y!hcX84>eoNk1x_P2*Z?RD&Wg;lS)9w7RpF2 z*OzZgt0x2L%FEHUfq>Z#haEW5+S%y*Bh9yWQuW31d9%{`3KNu6NWD;~v^9%8$YGka z^*0PfBSxfMD{>++$coA*<Xl9uN@O*-Uhd>6huRI6T13kHh}YKb<^-j*HG>~2oN9mQ z=0kH_*oeoQd&Nc{4s6?U=dNH&B`>BT>LWc;FFFJd)y}<lU%MC{5CHa^8^XqszfZb5 z>bY32cHa51E%Rai+3~3yYf09j3&AehV_jZ<FE<lx{ft4<cWC&xX-#-;1v*?2y~D?J zV-+Gzb>PEuUj7<(4?2Z&O{_|g_&MS_#JwIAA-4y=L?Gn~=MCr628`gJcc~u?UdSAk z9b||6i}jac)NzHJQT$@DxW>S_+jgUT6N9JhDyAwc_3T9c$gS{VINwLQdP$3Wc^Jh3 z2_f`>_A^kM-DkjK`IP;i{xGF)$)1M%;{9q#+?eyS+2WXIDvN;8u2ds2{SVKw9ikfz zm(6CW9Dd-8bBI<`+ZEEp?$wg2#CzuKh{6C6A)v~7<tVy2Z+Ah;;7tU`X=b@T-n~H4 zS|$0nHz>%FU<55BeAmoUC`MTTHIUTuh5WQIqX(M{by2Y_V}3*Eo@iyZDPk8tR%o{% zYJV4>VFy}qVd|Qrsg#`&)JV$z%AOZ#U%(iqP<)&5gyrT~KpXb7|3;?F!=C;*pUPj= z0;EP)pBfd)pSKI9+&)4g?Yhp+v5Mbgu>WWdD|0O7P{;cr>+uaGT=+-%&+(HKH8<hI zGjn{(O2Ob!a#;jZTx-Hb0PyFvCHx~$_5+@K8=ZW1!Dxf627N3G+96|SlhTT~Xr&Lo z=kxBNPXf@d@Z!msFpH5*K>_b15vCstVnNc{FD60Ks{Jax=E5CGKQw;qW|oD9a3Rd^ zM)!(_iKtkXbi*L=r%m=@L3~>sp0_u2kX_IyWuC31pw#39cUN|l0OYybto*^$Q~XVa zmgtGl2z|v?g}F9q1|^8=@&6nrwbU`A+(Li(a`-=vwCw+@t|$gHwRLy;FBLUK8^M=Y zgWw||Ycpqc`pZR2$!1tf63wOqh(~X2p=nhtD@0k<HL(bv;rF-&2z7Icsk5=5A4wT3 zhT-_v?@J-hr=VIeu{*pQ3&&9I^)sTi5MF)n(ZbW!omVEH*W+mVvFG-K<jS7Z|Mc?5 z7rPP~5q>s?T|%<Ynf3J<oT=J{TYI~&tFMKKSM#`k?-fjj<5gtbE;^9)MmJm@!yEmm zH#DQ?=SAd@4E7+nN^nm4+PxT`1!fW1ihUgOs@?I;Q-1d+AWLwLR-U4X+X)VO6!-VV zC!-&h2G^^8dWzBGm1LiiS33X1uRC>;<&BVtop53bGwzqi%sxBQ3SW)lIi-<}UQ3D$ zJb_|ZC&$J<fnxILBYtf}v_pRxIeHj`FEPj-W!q-MU%}i2MtHKlyQ8SSYUjRkf~42` zqJmWWK;X+dM-Qb}&)MMPwI6{9df%J!0Hwcv4B0c-^i5(!$y|_O-xAZGWfu>Vl+w$S zuoP(Yoen|kg0d~E3L?izvl96C;&j(vXtn5mGy~JB*+kbjFO_S^Gw!4XjgWp|L{qJm zQe0-5xDM@a@PiW*hZ&l*$<j4jl4_z9vj<&{)r7wkg7D;&A3E${wWbT*LY}bOSlul} z;)X}-=k4wI2{G~f5@Rz4Gv@MC0iZR9YpUSnT}?(K4TDZp`<p?M!&;aS;c1L*kzFvs zLde8GVzHVJ2hQr^;!@T`gUg)l@ne=~EQ)K)@f6M%&f(X6$Q`u}i=WL0=<B+wUuhH# z2Ap%+LjvCHIa?jDKJT(?#f6I2EuPk!LXtRXZ{y{jN<xfec4lqce5v0uvm^(wF#Si( zClNcU-8f2(%=j|$5_@!aBZB1SB(+tL6*S9t9=%lialE1~=%1i+Q?I3AW_Oej-(z|K zPnAKvyH|*xOJ{~Byj&`#JQ7pWwFtBbe9f@GFI7!G%0%-T%(=gt165Kg*=x|s5p#!o zao*r&Wu9t-j=_+fB37R(-BDYJ5m5sLZD&dv6M8Ly{f^XyKb72rn&S1!`u)*-^t%Cw zh65oI$`NCdbVz@GwUp4@S1$NW%vh^6lTWiv;xP29A-0bX5|*{6x<=0F)$o)L`Y@EB zoOY$CzPfL!tHmVFjq6u%^Npc?+Mm=%)XniEzn9vaIST=)Nm^7i86m%Ek?>44Rj0`v zXaELeLd|Yu4z$XXu_I@cPvrTd8_VV>MnJe~KPz3|`8BN&jssH}nqp>Bt=h#H>B{G1 z87S2ez`KD^$Id>}<OcCp2$Yxt<*S8uSgGTQ@-)(@_6WmSRnVgsNPoBqTAX7YWZh6{ zvovLzGH>N=sZ?<o%9;yZa*v)134aN;WLx3hAKf<dWie{VmBb`hXHeM7wy!0Lml~R7 zGf-8iTakof>nZ^i8#;Ome*J21Ja*wxqaORCE?!PY3cJqtTX4V`&?H)*8|CyhQ9l*u zGXQ6p+O0+`%Q{+2?^MtMrN(4UY9)L6$w@akw1%+s@0YpxUoGJCsZ<3D>sWj!pBlRf zm?3vTI5Br2JN@a0>Ysg0c7Hhb1?@5{1uhcG4GZWlsH*bD8KVGfpL7+5EOkF&@SP#A zbkC2bL8*973<>#8s<momC~i!Bat|AVA52ZQ_363jQSFx?iZpM%=8(+A^s5j_HNTDd zfD+RE$flO3FLuIJqYEv=p~W-2%HHVMmKi`^0g?0%>`_xq)%YeG6V9FMGJ8r=>-ziR zBfi}WMSOAG&Z?&L(p<YJSCYSiLCe@#?kV07Mn9yLEN#V&T+`B@hEZ-03<+x(xaQ=% z#gLoKM`3Ac^mo4QQ~F5un>ndr%}go$<C!+YA)c1v;rgH&t4Bf$fn40_YGun0?8-uw z>h5O7lX5KrioQIZ1Kq1rdGgWBW()0iS6^`VNQqFKLOl-Udf9pDpGF3bJEn3x^Q-p< zEM{_20Vjo+Jh(xZ*s2ae^*$o6?aO~1T`z?T+Sw<;lE=CANo%qz-QJftYJ?gOMWgsj zKid2DR@q!tc*zv;WmLk6?+g|1)S0SN%gwDNqRZ~%M0*%R9u?6v>>7_62JTlTJ+!U+ zEQ**dvM}O_evwv6i%i|?6XaHx8qZI(q+Ib3VxKTWznn}tkQ_Flemc}jl4KlMAVin& z98$2;5>gv1^ZT_(<3K-v8uf-_Ff{D>zFZ|1%Px#$%=3aVN!X|(>BP{Mv*=@J@VKBh z+;x(Wjndo9)#=qlyy-Pu?ipu=ERxun=rWiqkE2URBE+U)V!S`YYEwF<#JOpK^Aba6 zgJmx+43b=NyeUNbIJ<jCE{n{%Zpl30V6+G^q5X49Ip3pXo!;-7152UEF**Z<@kjgP zaT7F*GY5el_UYo~D0rh?#t>Hw+NVf8e3Gtz1hU#AGe}0;dLG=k@4)kF%BNIhj5k9K zkkz~1+Dfw`v$-`#M;;GF+fiunAuIwy&wpX`dl`sKT7Vh)anF+0T8^)QrEx7SVIG$` zD6ZPs)l|!FtG+zgBZU!WyG2VyNTg!RL2fxT9b5Px3H6QBjlFGVlpneo$#GG@dSeR= zG5dao9Mg^n#y(OhwjaLCdEba`h^AVLzhsQ+dRn@wDTyn=83m={Bw|;4{`&L@dU(6n zV?Ej&$x4=jqe?R>mA>uF4RASYAQA44e7l<#vBh=q%ZRr8>p*I6{cA1UrKt!iMDYuY z|Lv8XzsIds$o7z<(!KMX!Hfr*NH;2bgrPr!4($10$s0`<v7Zib);(dzGBL~cGW-l4 zcbQmR2KLg~OW%pCx*e^?XBNLpbe8Xl)(O_7oA;#W7~TNy&SIw%#-3?MBygc;Um4QU z%&9a#&mB41A(&X(S3ofE3l@}|i-6o{ogK0z(t?Y>Ssg{N@r?Eyr^26!!itH~@tl3J zIe{<@f-2I%Oy}#`Bp-UZ*rIGFBvP!(=8#uq6;`-IWQNhYnk~FLXg^bUl78(u-njb^ zEci!-j9iCiS?y|zVAFDpDO6~ppdMr%MIUG4X74h}#_TPsp;;V7$C*aQZ(-F0*?22Q zOlMxFGsdq7=f-G%Z+!~I&?tM<(y?4do&90)%<33}H(QmGIW@mAwwgo&zUKo8V=h6{ zrdHT|f<H@8%L7XVbuWu3G8W7@%<GSUKFHIph3du!0wBB&tB$$cd}-sIjG?|Cka&+U zCHq$N&gONzbP94?lP(bo&OaI=V05D?e)DivUl!??Q!A2h_cfzc?TH!0QfmjBzZrxz zmrKF$6kx8`qb^f~oMDXMSMY8A@q*;`f+f0U;!%Zcb|dP&`W_Nzg0&er%@xOd_oZb) zd_^igKaO<R!v|5|#9HF?+qoM(-?l~=l73~~dNUGAP1f8AmnvjQ)uW+)*uU%gl<;dr zeN-JT<(l@Pzlg->D5I5HV*4K0mHtC~r1gY9QF$lyDe=viN!2^U*oJhw&d0m?#<(K= z_#g-8eW@SM_O(0gf`k&Nh(YLSY)t*h#xejv8zMC-Gd($XzeO}#J8edKmp|lR;x$a9 z`PB5^9+)YZ=Ln?A??D?~r-E450KlYI;)jAxy3&Y%Tv$6zovR@`DkU?}EKq7AX`|~y zaLwpvv}W#*&6YqUqJ=J3f5rpOyy}<MZ#tIwqxa6uoK0x^t#7E;e?{Lvh$4EguJU6$ zgFoQ@LwO*~JFc4eY?A-t|4+&T*Z<lmE1SF6Tf4db-%gq8{{mrhG|$vN)rSuQ%m(sJ zRb=ItWGhnybnTNtxF!wnRe)IF_ok9&mT_vGmGc2%x_ganf0ws|828`cZzLj1h$Z~{ zT9$7`{JEVnO$mJwWDi@eSKl5z1CBRb6>pXYx8J`w!IE+3lMI^RV+>lsW5k4BW3tEs zLeTrP(OILt1tW^n)yU;{7KG(Z7$O=?a#6`+Grn33Q&8@vpl5<@(9=SnQ@$PrwJ{9Y zLOwKqt$_pkpxeOTj>(S6>>&4RXv9}&Zdq96%CS^bRuooB8OjKxS{%SJ!b%PTjS<3r zs?D8Sk%>Dl?8Jdu)hUm$pMun;7`)5M&8AHfTkOn1dXm%i;c~W+h}nzC)9rn1gzM|` zgiV+^1h5}<8I)+KRNTQzZNuIU)8)7P7a>U&ntwPeN+R987g-}X#}Ed0mg;KOc*@MT zbIT=^lE{Q7xvgRl5MzF>%if*i7|1A5OD{M0uFlH`Go3MY6dW4ebF~_5%D9HR`7i%* zK~|uyKC|lJ5Xi#EAQWfzQT*){^Uqp(nx*8o`7AvG66Osi;@ur`LDQ+Oj&Lc0V^%BX z6^=G`g$iY577wtbO^uBnii;px8wAEyobZBFn&1m8k3qeYnKQ>0t!c5R<v6hMiPOUt z$~qG~lL%pTM*KxtE{)67i0^Fgu$o8&;{XOoy7q{NMVceZkLJhVXk*$Dpz6Cwj4(Ki zX%8y6$czwqC8^ea@)-2;lWnUBtOy*D%(u(UGjKNn@6v9Zd9;OzT`d!>QWOo}rGgwK zoV>$Dqof6wa;a`M)HXn1maQVKa;dL_<MXHLCNv7jl;$}hkLI7$@n0+tsmjQ-@{F}p zopN%SMJub2v+ew?$>ffvYuqs|idvQ!;`>Vn1#WBa>d4^kYoHZdY`{UN_6>%^A*HNN z&JpZk-wq3I@E-#GqGW+uHsW7<>D<hUe7N4EW3J&_Sp`B%ItJCbz`ryE5x7MxtgiiC zw3_>c71b`J(KN^DDPGM(6)59-CoH_2ziZnzI>yo0pSLPtjjy>!&nU5f!tR=8^o@TE z<)Did&M}k~3gr1Twf~NO!BcR}U?Q%~n$osObwpY%d6uj=GZ6P+N?lR7D8ej`svc%& zH0834q;H;rozB19rGgn~Uh$x<!1&mn83R~``Ma*4Lis8v6#j$YQiHp*_#0XLtEd)= zoy`s8mbm1fsn^l5+~2WxR({6cgKD(w_jKj6WWWVGM)*X$$whjHu8S_sx+4Rb=Fgv> zUmG$}QwVWi+}RrWvW?N^OQy=#78q7zq;f1GDaI!;2>W3FU9myk`bXg_!~^HXNWrDk zJ`{2JAWf#~=I*GVj@2NtCpzIZ*@I&~^*ikg<4Sc1?si|l6A^+C<cIPp&o(UTB6k*_ z3tYXI(v#Jb_OrYWfv_P3MQR?G!ydTvKn$&vO*}xzH}@9Gsu+xfxM%NjC%51qS_bA0 zyG9uSGq1jXU)m-QzG4q2b0!hlRik)8@_&H*j3Z7gs3j}wQr>0^XNj71%4||6Hw#E* zJA;2U6%4jKJvtsM#JNXfX90d6$PaP7lm6?QFCsgEv^6Ohk7xC;FIl)Ct{RcQ*3H|$ z{U4=KBWUQZ{Zm6o{S;>Zdr_9-e=Uulq!U%3gYAD65i}z`iKGcWV$E$e7djM@`I;BF z42}~H`Rdn*Js7FOhPpS#W_DMoQI=&1<%r}uA1)bczR4jlOD`hP6%(UC=;j|<eT`a7 zb;6<x9sO7s{gDip?C5bg6pl@F+MSW(*t7qb)9Lu{@t*OE$G#(QBaj^iP4XIoSnJve zpY~eR`zav^EgX#DtIpC9RJGv>JRs*A8MGSKhKIpEOe)wZ-k`-!J}^wRD}|K1OhPOz zu42ZMW~m91#V=zc8K6v8xn>`KaE8fKz8+^24pn0G;)<EwsfQPiUIhB0#)n7VMzRUV zvxa~rePs+2`jT#(r25r}m0UmB7fj+#wLn4#5%I6{+#_>>#)mM2(*%RqgDEbWE2DRI zk#zGhDT{KZ9rk0cu`B1eDB%UPrii>cb?%&3xWjFFGt@{9-!d8}%qhN&zs94G{F#n~ z_{g?^*Ri<hW6K@W_8`xwmY2u>4Ap7y5Tcmss$1mU0az;jExR+5;YAw9Smv1$dl^zy zT^>Z9vRF|ivmVBH;7$)=RrWw!IHdL&GY945*D0jl5r`5l&yLc_FFRR+!n*}bEK&{? z;`oIbhn*L162FcR4~7xJglNl#sI?*$yC~!svo*!F`8b#W^6qZNz}Z^pMn_MGqrt>R zhhDk+w#d5}l_tkSeqr(tnW5I_i9Q<VLo5twgkhvN@+0AHzn=JKIL;%F<MeQt9j!|b zZ6yCC&(VY$@DPvI$xk<Pfg{E=^b5vi7i?_!`3#l8p9Id~)@%E)SZ7uX)y5-ut@Sgw zUZZtJnSUWh!_j<Ydjfn)<CM5KpKIqa44myzIpkKRxc<N>l|m<%uB!ipuJ7W6d39ZB ztE`Ao(v_A>XJqqiQ0!u5{z?nQU8a7lM6TTTBUwu~<haQ+b5+fZB9p@w=~p7iq}rZ! zisQhzT36Jn-K~m3;;Y>|eu628IriaWsVLvW9Ic9)^vWry=Ezv4Cp25TRcF{*{<Vkl z>!eiCel3{R`TUHED91XESL00;)><NH*<d<8_A01S$0Cy7yYomp6S?kKNyW3N3cZxa zVf7oOUgo@SrS~+OkjQDirMonGA0xx(x?7FC{Bz+w2^PTV9VMdz#}jKE?kW)nXo7Ly z#lAFq<ym^_E_U;E$M(u9z4GI?e27p60sq{`kWA!ae@p8qa-QBk!$~w}O}OQp&Szd$ z|2-6|Gj@4H84Ns&Oi@UEkXj7N1l_ni={hPiQ~jN-*Gt2n&}jk0bx1`L=Eka#EGJd* z!cm~Y7z6m?4AD`L7X--nbO~&ASD@4}k!`WuHRwZnPI?7T6gU7_s`46ckye4aA{n`4 z)iApg<-`r)jMSOho_{2}3(IS2$v`nIx7#jmAJ_dD-?)fe6XWuQztNlZc>W&jgx0kW zD#ioz#yq(D4>upla*C0cdy5ACm3OPIiz=kzHBN!|^G~<vhp3cj!x6g@lxU3drAKJ| zN+zaAefB%1S`Ha?Nn!J^H@A1+Iv{~*3dcgp0M7Ax%{CzpLifNcx6o{R=_`RaC#5t; zaZr-qsqUc5BmS@LfAh`T8SJhEK404|+{FR?MG%s@hp!$0-d}t68J&j=cBDVnlvc{E z<u!)BN(%BXBjWt+J~%nq5gJ-(Hu3XEGGh{Ay#Y<lWocJAQeTf*c?yYi@jYiFb)V>y zGY(#+e9@)KHuNxinQ<At3JB9Tp*G)c+e;0n8pUUwT8(DSa-aRmpHMvO7bbAJ-W%!h zvQ*&Cn*;g`*wbq<fc!Dtxg~BpM_D7rT3s>wQ+PvCU~m)gJP;TxVNab{dTF(24xM=o zsp&4AWjXIc&`-nFOK97(m-ytXYHW!kTT$|h7vJ_5#T{aoQFvKacSebyeHArf4TTGC z|98haW&qQ<_tn-%HBEOvUK-u!FA#})*z}FT&<Cn|ly$chsjWRqWB!kZ#G#P=Ja?0N zJx|G0Au~=?Xw6+1RCi(vK<`P=V_3{SF^9gHhD5EnkDtCu(>YqOX;vmLt}bo+hd?Pn z_MFL?4r06~_qei+yM$@34yafzP&x&-A^+1+j-LIHAx^(<Bvby*!#Y8$KxP#c&8HF0 zFR8XHYI+mt-};`B{<2VXHTxmQUQEvfe@PlUivn#8MrXxJ3n22CcGGk6)yl0?Fsx!l z<+jVRJ{D%atO~ko!W%hr>MMoSApcA2VgRMd$$*cWDHP2qSM0h_&*Dl5=Ss|R9SmMQ zPJlG=)!aJ^zs?r~TuD4RW1@A*^ao?OGifxU?;wR;)CaChv)KjO*Kg+*8t1^P{Iq{i zp1gq-YMK{(1I3P<3oCLsz8LW)WG@9f$c%e_68ps$m|OAxlmVl3sK#H&btaqn)07@} z40T-Z+{iA=W)hUp5>kIYaz((+#{>`Ye`ywaA+y^ZW8>~P65=RvL3T!VC8nSl1$qxV z4+#*P7vJTb*ni;h{3D{}liHGuLngUhbG!@qkN;|R(J?{!PgHmD|A^}T-^Um=Cv#Ib zpqt}=U80s~{R<#+CkZfGJObVQthQa{hjla9TnN1=m4~&@nOtyVq_VePaDYiRNV4^? zb<w(HA;H4I@K#qp@D>h^T8z|7tb!RXJn;o*vA#ooppqH(^rjV`fsz~2{JLNK-UI`- z@@5}zKBEi0(fa(~ghKq%5yghPIWCd*{C(MncIB$QzR-%zv27xfagdu8z_ADG!_xxc zJJcYi5Er_>@{xy$G0JP3q$BP0f0A$aR#5Ws2Lu&cO$100_mF#-;>d7Aj1YDz$r(N} z^Zg~1{S1gj81{)E1aSv=!EFK0Ljxl5U90bPD?+;>Zp2%8D?+CtX2P$#H>UQfD?-%! zr|1vHvLl=vJ=FW_n8{X5LV^SVUsK{xQDjyU_)4a2ZRWXeYzCY*{1N(-6FIqCt<Erg zY-->pUb`%geka=!S=4-d)p>&ovu=Z<ej4ab!pt<)Or7GTLRKTA$1Qais8%@kUP!Iu z(DhesM5(VO=INwGksjy?`PFGNvouxpLp9GCiGceU_jim2-SwD?nyb&qAN|R=6s7Wq zm+VU^&KmaGGJSiCu$#f|`}gxI0sX<~d~;1RxpV|tCV?_VJWETIR+|vrcEwW*&DK|u zu)<!$LBD(H?nl{#6Q9SI4nTTh-Nn8-h>BHAzbuS=>74l9&c+xj>DY^b%Fck<fY)G9 zs3`8RnKSoAd8FZ9J+z@ySZhz0nZM(r94l_rnIs96p<v@`n5!elk;{A>V+jfWiT}pr z;S{R8(`2RVOKUxGl^)b1*iJ;pA3I>|Ln^5%%$W~I4lIw;tvbhXU~Gee!}f)3m0M{@ zE#v5^-1+etRRZ)i8u^SX>5JwtRK4afRJmrDnRp5eBHNSZ@UPmTeWLGHz2@xtBufj@ z7Wf?pvTw5B$BA=xHgs5@tX?4c#~IN*m7qU|1sUyT2N~@Xi}$$t3@_DCRhBZ^@=@ro zUU2vq?Fjl;?kKz|ibZpl<?xv6D?4EzA#M${#kArunaK1Dcxm;Mh4jtv2X^SBmhB+n zYh6o|gN2CIuW6YY-?d=&(#?+%{wW8VpIMdKev4@cdIVd-1oXopzB7dN?m|(V%8E+b z>j_X+$PR4TRvO#%LXOU#s&!E}ElGL3kqfC&b%xa3??@vN<%fYCrqc6asy-6u@3blS zameseT6m}nRt+!cwbE3VecYJ}G}QG}J&BoV69^sVaA=mBI4vSenPdTc8NcNb3#Q<! zbyz8IObAyQRuuO83x%_*?K7~j27{?q?-5Gs$LN`W);dCZsITu%)lK&bMFY9_RwLZ5 zsnvh21lf7`M{;{=l>5JCX6+{H{20uOk-Rh8PILopx=D4Bpxi9d-E!=+72-&E)cD)3 zlyIb;+Jv3{F7Ax+QYzS9LR#wb=eCJg)?fGm2%hgBe**ZJ2pTS;R#N>Vt=V8C)*C<> zhi>Aj>EJt8;7VN5s_3mBZ8iu(<V~QZ_EBx_Fw;+UTK+r2Kf6>h<L%eHV7TaGnAd2> z%TnW0(V0F%g)Yba!+eFyT_AOtSlaUXV8x2#(}tYv^k?#iy{?s4Uo|lR5K1J>@)7QZ zCalZDC|oqMSMSCpG~s|*HInA=)P@VdzpNgGjCIxInEwoI>U?yU1np-J1pnDo_b&W9 z#;rZ$sFae|fhj!wQN3qy(3M99Qg~w0Z98%u2P@{5XH(BGce09hoFr}x&tH)^h>=N` z$p7?5c0%2A<pVJEcTIOfWa7=a1vWNCdAdsO9=8jGSn1^435tZ7=LTSVll3&N;Ol&M zMPQb@<}G;kH6!ThNtGPS5kvsck*^$I-LZaE7dz8w@@!%HZrxcEa+c;4Y@BZ>+95iC z$-@IiA=CF;SPC&UPgT&st+zK43)gPmY>SwdTcH3#<jAf39jxb_>(%X3V1#Tj!07wF z*){Oh!4Z7GomZwO%=*Q%D0Y9^?G88WTGNe<jJJTOvpyJn)&EsEl>B_aIpi6t2(Qfh zmX3le0Br`yO6HG~meCu)=1Kt}JxN|k^}Py}@(AXcaw3Xz%!E6H@;9rdG<%GNjearp zBb#$4J$E1#7U#e#iq+*4+QT@03i|_V4B1zaUNQzRJ~;xhtv(8ed**^lgvpgl82b68 zX)gmQxdXAG&m>05g}7Wy50^C!G1jt8>J8lXI?PB1Xuhp}FXFGLS5(F?CqG0SifCK0 z0Dd8$>+6w*nW%94CcaQEX3PiJum6bF&E%c9+k@6gNa5yQSRUjJ2DVz~-0EQiFQ~p9 z0k8R3yn73&-br7DWW)LYQ|6PoZ3ymx{qhA1_5a^2t7&d!ZE9!!UuM~1Z3HjuKO`UB z844C29$(F%0#P8L_CRCxKNGAl(Gf7jdC?W%gYc3z$1Mg(ftI)te=4e*!<(0Mo0V%- z88z)In^^Kw)-*#+su#rdqFZ$J7=@~u!zlnCjvl<LC<vk#k11FC(*p0G{bEn+>f_d6 zC&ZK~77ny?M$Dwp6Ml`;zN~)9+_iJh8?=!j^L~==F(E-72>h9a&~N$dR2?%5zH;Xf zX5IH8Fj97cs!_R?+$i6XYm*t6Mx1bt4q`QJjA4E|U?km$TF2gq6Tsex)DwJSXqkA* zjOl#3J0snQwfAk49^l26AMVaR7e;twOb?rUx>g|A27&EAbDPfs642J4uSp2D4{yjo ziK+GCBZ>r_e97TBf<af{T@`}P%_m{fBrsHHk4Q3@k|2K4ORPU>h0>ID`O%c%)l86j zpOzyx6|C0t7!zY@ex7#Ci6D}8jTE-$!|AYwL@+c_;Q^~9PGQHE3_aaeFNkx-2D0~& zPWI^PmjJ}KoXI5BHfFJOPB!6N!0d;SL{Qy(tz2^OUue^z*P8|^Q{WacGtN1<WfYXp zC+IA*w_$<Lg9;is(g9MCB){Cx<ON2t#z<QU!F7pM0;rM(b$Z+RaD_gCpL_Kr3qe)S z{(3zPTl^K+u*|RZa2=Ls1vTG>NMmzxSIYHTFt!o`tzhm*Im272Gfvn+E!Nu5?QOIb zkAyN|QNC<a8$1_V-=kfn)N7K5txHia(fzGpQd_udn}}`LEhO74;{zwZ9)DqvnaD1) z<0OR7Or0jc65<&==?caXYRQN=Q{hi;s4`=BRwCHyq+-P`0%W@h@?xnpQOe@}9fyx( zCK?(?J`9yvSWl8mE`{Lv9ni<eL`6Lvoc<4Z5Np+ZKi6T=J=)K(n}(U2blvs2R)6Bg zsZ(QO1w6%uI3U2`Cof4b5OB=!w40lUjtfPbs?`%SmPa%QXQ#l3s;YNIq*1+T4qsh2 zM6nsFfPZvV?4fyO0JD2(5=#CQ9#CHd$uAfb@5Ot?0#&!Xhc=9@?lW#fb^Y|?3Dk#@ zZs|Z$OwLRwt7Usi`d4RsfZYQh^*4fmf^TUu8M(k>s~7Q5r@!`5bTUtsA-%u6paRma zOQQmIn8Pv#pGA@*JToz5Y2Q`AN^f!ly&7+Dj%s_)wrd@3dXr!O$je33+A(9qt72tV z?U4`{dX;<Og;Nu&fJx){`@I!Quq~0XkXAe0W@-<)lq`NuK+~vlX&jlzn@d)u1K;5$ z@Ka<C1ZeiD!|I_Jjh!cAR7HPHO=H9MlTqZo*jiXI+&a<Vu>P`xMy;@;Vg#n|)b5t# zQ}e&p-FPn{ro;{~s=K{s>e8~Wb;J}GoZj`$wKSNP{JxP#AmLS0*PQ4|o?>9!M<tjh z0lAvSv1YSz1hVlY290A96*ai<q!P+k&{nO(iV}~K<JzVIZEX=I)?hq1%&mw>%JpZ1 ztPjGh-7#-}RYBHrWCvseX6LFxq#k8@c{|+1wt)D~%th=~q0_|}4Mp9V1k2@(HcgeD zC%EPaM6-$}`1`dwIRI;nne@iNTD90$TP}e_wX-&Nj@r~Ywm)JD9v4B1LN++MB@GDr z>uoVD$hK|Yfe7^H@-!y@7%aQ;1VA1B0WQ@iCp1OBQqVSYiFgSLl5+sK*XAG)&<uD* zy&=A7Tx|Lj9qmx%AE?lh_?u*S&FK-@AV)k28-Ci|J&Fj&H99dSBUMrWdwZh)>LJS1 zI2==k68(4kzu`%(Ca&D&Db}`v@e>Ms10C*_lB0Tf|3;vW&k#N&gi!Xu!-#7pVNh)K z?<9VLx8Ot+hD}9iETUL5D06lh@*kZXN^Cyy+!!9Feo+gKKeyzi_)_D^Hi}aYr1uDU zt@!8@kV`NI4G-PA9(u~8sJ)HbT2`vEoCk#NB~DICq;+x6NNCdhUyK(zi!7x33Xv(U zVEIpFQSScMTRr5$)7(u#nR7*cE5%crIiN`W;A5DcY#5%Qg`!N`YlKCab|!VFjLe|* zZzQEnpaRnTBI!|VI1n7s|GuH0$B{VzC0eV$+7tq)P}C;Hfr)e##F|MqbwB*>O$!;{ zi>*+}zGV8yKQ7fymF4$G-|!2E)?s!yhg*Anr0?G-fxLl=aSIDrGqv>2hQ))gID59U zLh{k~xun5(|E91QlFqv)@`gPqmj9Sx8dq~%uwdeG?_mf#>-|Dy{9$Og`kTvYSSG~o zTeI`P?>r5`$M6u2>(C3H>eOOU`@ktYnURElWr461^-F4uS!@!w)|d7|yki0ULnQLz zzZ=CRH-%g=a?S5Y#6>d`Oy!>b<yNBDq#)a;h+E#m`O@B^YGt+`->3sQgvEM0Ph}KE z24G$m8q-E_bzx5A&{(l^I-t%)kDv4jqjRR&`QoLx#eZrx&8GpW*EpvZ4BOZsoi^Dw z8P9|0jFDu^9K#u73k~RScRIF@*ScXK){?qh2pv8#LG&<;N)E%{hT5&mn<d5E>uc#^ zF&_J$M^z$!q;>mo`=uE_bf~^RLQnbac)Tdy<9JJ#sx%Pz*LQdkap}gpEFH4+kV>AZ zS{mr98wi#@8DidhNinS=J&jdaT6e_n;BJPhEOu|@&`m<FMb2Btcq1QL$5f~A4d-|* zAG=I%Mmje)C~XCEjKUiAq6nz$CV2t{#R+NubogCz(V$m0Az=~lSf0|}FaBuO4b59n zD_h#XJs-eUY)PI~wD3Y!v(?CZqsrKQ_+_093d>{igI?6U`d$(*sB<Wk5_YbW;>nL< z{r{2njzN~ZUD|J#ZQHhO+qP}9%SM;&F59jyTf5L@?XvBz>Qn!TnG<K`#QQw)#>9?{ zjLZ*r#Qu;g^S;*ay4G}sMjJuEc=^rY^bGYQ4QY8EMff6g4G_5rwWpbfZ7*-=R@3L$ za`hebK<zD$r9Wa3*8YbZ=Z_H`yrX-a-;flM+E-#V@WS*?d|hKy&m`#*iaC+1eDy?W zxsj8t-7koQZLhC>S<sy{fr45nI2sCyn)%{5E4s}%gr5QeSiNj_tUs>Z`UwmCkTmV3 z9A;HKz}=|Mcz_W2ePhA(caNfdlxhBfmb1aJ_y8*m%7|_z7WD#I6bh2q`x3xBQ|DxN z7}I7zkqte(LjIxE-yM3RHxqgxs-3$s|EUZFv)A`i8g(G!w(u%zdC}{x2*ju<{|u!u zDy1o9yvO|ff%{}iBUbq?&dV)m+1|G*XXJ9Ag8UfCbic~<Pol_XZ5YeuXz*+FX$z3t zQA}e(KD6Z;5RMwKayC4x2ECJRh}H|nrN+w&E2xH`-iYuEkKBpvLDJwodJ*wZVw31y zsS@PjHBr8FSd&~basau0g2f;PH0(;DP6x<TI39p>GsZ34&pH2wS~t9Wo{~S_bI+#+ z6>-<!1z$5Zum*+BrARw8c37fAdoxOI*w8&ni<I0jw!xc#cO(Y|rM*~g6GY7)bPGr* zKJpP2Jx6kNN4mE#zn>lQ(+-hdi@|=y_oqH4XII@I<;vrU$5w<Kfzs8Gb(4pn=AM5S zCE^}J%_#2pK}NYV2xC}Ij|&&$;E3{gUkU*)1k{>B2e=(c(pFBcT2_rOV9z7P;k~FN zlskV+Gc0OItc~9DpfZeKPU@xE{hyO}v-=;_NkeUa%!mOdmTV8wK|R5lF6sJ{X?b_G zz#1~ucu&@o;xNWga!K5_Bg-hX<v{tn8J-XyRMeWE;<eO#A)Tnc<TXNZL170d74GB% zym2<D7h;*N(1WY(DwpScJYijp*M-Fw)D#&~qOyaKFnD>*3i|X0b=pitSkydm9OMVo z1|189VSnLp4szx4x^GJULj0pbJv~v|LVm^JS7H6Duk3%XLj8|sI?I1fY}Gv1{124h z5pA%g6hxM$w=f=6)VPDX4ZK0LNE{6uRajS#AX$uc#+-6GeBra%X%Fosr}d!B?)96X zdd9oFYAbmYe9eX1?DkGyezVuzarajX{RU^--S}G~_^a%XaA-#}mXI;+<OX~Z=vWhe zl=B$lvY{8=IHzGAG!e||ycbNnulea70&z5rj?l>|KN1VEa!}hyPli0fcTA)%@@2g# z_xvDv9I!WamozqxIK^Ism(8j)iXEPtr{x}nHQbk}X?VsK;#6bys=lpmQoGu@v3+C~ zRVTO-C}@F4GLw|otTnnsG{y}Ol$uvc0%-09%5{}x6*XuwmuVaAE#mbwW*V{1t%`W6 zakAOwek8V+uao|cbwO}q0mqynwdzO*!1tYLdUd90d3gZE*(^nt+tuaJjv?8I?~JjX z=u%g~5BJ*jL#_2+%*`w73FCU}={g^$7fgaz@MqYePn*ZZ=7fL<j@?};`-l^u5xS42 zb}mS&wO45u<v6@g>|)DW0v#8ZE8DU42l%bZ6IC2cG%#}%J%v^S$P-z08oN{3(yi}9 z<fCCyRg1|g^9niqmYr&xv8aJRZpqYfi1z#9x;v=MkclRuNN7y7Btax(pG-U8>dF@V zOitQ6XW?cG$LZFjjh*LMt3z42pUmY8#Zi#@Xx(D{DmqDM0m`zHI2171aTyiLh^+4F z7TC-dOASmzqRB<=7D*PXqTJit6r+^lnhD@qqacP8+{1Rh^Ora#9ZtFw7Av*t>{5+z z7KZK~jx=zDW<wltqvv*gfwncV7Ut4z`}v09Hh+3|Vy!+gWW^+GqTCFH${9s|X73os zrsD-pI#<(-hS<0?nW+>Pp?aM-Vqc9!=5$YjSsI}U$APwL?vvgDyy2u2YDV$MM)JLz zQ&&yKz9g(*Ies?qX9Guo!PwsoC%2M2v9WV6TH(m?#=X<UzZia1hM6rQoW6QC%8^hK zWHA5@vh@8&_ia_UVI4;&^#y<1ryrQ1XO?noN_RRDicI_)DhPYGp4C%!#v|6ndl_1n zutS?riFIY&6f?@dd%`E3W$d6I(c{xW-blg!7#NuT{?@Y4ajS_dOnwWXick_xE8Bw2 z18aFAmrNKyoiKYrEg8F^Qbggtn->!o3xiCKLhIerIT>I^4Qfa8v?((UL(bP|3n4!J z<}`==hoC4=O&V|m!#j&if_q7x{DRTf|C4({T+#UuT#JqVynu*jj3c7J#fyC1BjH@o zT&fu0=KfABE&%_FSak;<;7B=7#61vyAiq1y-g&km^8n==THfIk@rky%E?68@c7snF zQ2O4hpYD=ZA^LZposUYIH(cjUq%mx+F~-JzA7qaR2yrA$CvoqSPI<~t`;r`SOx8nk zpkz*QrJ+RXgIt1rU-i<af&sxZCrI{w{*d)ETLF+5OLMnRB^PjDm&^`dwatDT@)FWg z4Ba!-76ye%*fbv!mW5oTw#_iD%1#{b69Y_$d;}=0{Czu{GWw^cMT=f*x_))R@&1=x za8(O83-|xRgZ|%&cIt)pg$MPLU;aFGFH#jojz_lXVhMtiU6X?wX@LfzEd;XrC`2k+ zF6b0`>^vL%a^??wV#B9Vp9K+m=c*jr$@z&Yzt<nR`Mw?C^}6+b)tw^r_w@ra$m&K7 zj?+v$34qSZy%|D=z39vyPKmDwlo)Z7iK7!t8f58NirME*8de;+r^y|rY2~doVGY;t z=80ybdE?F*=CQbsY4Xt+viov2oy%m#D76*`6+^DY#AhlNrw;N?Q=8JbiVW32>J?rV z+gOz`jI~frH=&<Q8Za|uM>z0OkP&&OtKp(rBU;i6H7ghsACLD_`;@7{TOPP8Gh&w( z+M{o}W|8i2lLX+vYk5sNwjXK_7zTr_MY7n3&HL#Rvs_@pG>}>GxRTN<$z1>Bv5@+) z6=GAsDIj-gHy9Q|Uzo^~@DSm!_)O8RM+7Qq$;TGuS0t9L@eO>duGaMa*q-b=KNqXf zkF<VQ0^3pkH=}^#%sNrN@u?uIXy%p}(7feE<_7!yrOHOJGxK#->y2uvbh|iLB_BOO zX1L~kOA1*jF`dw%^J5CQpLdQY7zftoomGT)nup;OxGu15=grRhteGxr5OoQ#NA3^A z)%!H|06;7OE<b@FsO96|5F&VnZfb#GLZkI2<ewU#r#5p8<zhy@fo}_O59Zkx2>5L? z`Gf={j7`u2V!VtdhC?9<TsM@#=iYEm=iX4)tPlj(djSMQ#*xC$F=<P;MZ8O~ad_jl z(gZ{%hQ>p$I2nMC`*567s3~mpCfh%W9{wRpHhM;K2nDAv_(nHx@B~IcIs~Kh7s#DE zUj2G=`S9juO=J14e1oOiyqFR^j1B!Ch5&eZF^w}n0-*~0z~K#lP^3i>(46y-7jQ#( zhf^FVvVrJ%7h8tSRZjbu?rw>~>j5#imX6u)=co2{h>|n?6$HnnL)C;`iKDPccbl+I z4>kR7kYNxjDG&QB6WsS`tE(^IWO=s`ZNb?%mZhW^Cj%F-EV$yWilrv3&ef!XL-r-4 z9Gsg}O~Q-%)V&bF7rpzOJ$6#FPylb^D+UT2da%_y;nh=;Qe6KvS~sWaw=BR<!uISi z3|nwOA@^w(1jj?Jb;OQFr<oeoOVG7m=TXC;VY$h(?6=JIs;=#dHbx71E?<tJI<(B( ziCoOQDUV-l<GSg~+yvcCk820?M#~K!jxg0asxv!z1m_OZqQd(&k8-V~+6kwYJW4|F zEBbjP()Uw2dl}rn*D5WEgl9!6$p1VRBY}SCBe)S!U7wu)f&_3mBQ*A%M;S$<LrLdU zLh~nzEN~>bK((3TA=jqLDdO0VB~*#Aj3v5-Shd%ax}Ygo)s=M0>4`U8a}AGo=}KcJ z>5AJa#yvBMV0FZCd>A;$Stss6@}@SZ?aHQo#2gIol6IZ-2#6waHR$r3Q{re3XY(1Z zC~gmTv2iTpd8-rDCBkzKXWVGRe>dJoCB#xbQd*j}@gcCmIG&i2PIk!d8B}Lmjb!<J zUQGl<jg^F4i1M8xbDD5*JT)=D-++2N?R`6C_DFjo!5@L9bjH5_v*MbTtd|Ne`8Phh zLw47uPW{knWwI0I*RBr#7^~$Cn`hGj%X%x|nehxk;!x>N{0FY5-Kv}T(DtyAGskE= zTU}Qj7`JpjafBFihb&;_=%o0D>7PQ{@;n4Q{VJrH|FV$&Uw<6_*I3~%pC_8um(SA? z4H$(z&`nWW366^WvlUBa1GK1&92(pjqn2QhBu?HEn8jx3`|G)~dhP>4P!G<uThpjp z^LuLbyS!*MxOOR$o1<UBwZC6M?{n6#{Ld$-Agx;iye^iiY?kE%G-(t5U@sRPF_K{H z(S2{FM>H374I^1&RIMiy*hQCIwGVkvi|J98a>{$$ZKYjg!KnQz)nAxnqWCMzHxVHp z%n3Oz{^*fe{iL+G>FmxCF9eH<ImKrz_`1~Ftk;=el~bdHKKxKUk_*E&!Q2=kB2&My z=Ye=g7_hfc0lTP^Oy{rjn^scecU+8KH6Yna-bJPPC)au=n({@+q4piBm|$~z?Z!Oq z!z`P)<Q7HKt}wv$<)@L}f$4Ak78?p3ce*kGCs?_eoLCfzToER2M68mwQ=i<jP`~12 zLQ=lLL9dD#>MzDJk^RJ{-JyivV0x$ermICil3grB@#K#d|B%2=x&@;Q=52sobWsV( zW2pt6n_D;wh0C<A@i1pb<1hM|N!y7UC`lXb-^$AkqFQr5sJr_rZd~Ma{7!s;V6d_J zX<oE#=O~)dQy3Yf{R=K|)x3tII0Q^U3WD;a-+)jNgti3S@g*|7=(v~k-eCxzxqZ(1 z@zf>?DaN!IUt67y*3@g4z0#{X=K-~x<X8b-{iO*OfgxT;G3y(5=@;{;1ip^yeZs30 z8D7CrDs<l*JP&_Z*v>i!g4%sH3idnEju1uiceOUXT2w&l*x`MGG($>4agM6Gpw+x< zWsp0wstF-<-~25_pDFh$sIafvYnG}>oBSVDg{+8r5C2dn8oDP;Mfh?96%NdgWequ8 zLyK^xS5B-^=?3O~K1H@-J+r8ykJtGk<8@yZ_|AU_OSio5qf=Qxw#{t4xU!CEf|#H^ z1NI2LeXktxtKL!Po^Z1fj9h1M9l~l?nf96ayi<pnW#LBm0(A9YmUEA~%x9}Mo(hXf zoRO+w8Lvg7yev(L1@6YF33$MUAl5SuD__Az@+aais!&={L~AupPMF+RrA-);q6K?5 zE#G5<x%Bjk$v_R(^PeQ4x~z25usgsey4ZH=YA=tq33(GPmrT?jcOHD2_k6x?37M(` z_RaWJ1Wgslj^=H+fS8xRnxmt>$EPEgWk}Fo?iD~NWu-@^lS<NLa&aRhR^yXWfJL@c z#r4HhUGU@KZ{#z+)(GbvGjT%5^?;>OX}pI~%Sr)!Vt3L=5Mpc^eP3>4<A&hLx)KDH zWPx?z2e08e!HD#@`jXmftuRtCc4^8Aov}WT6A4XQdL_#OW1*or?reoNp@Cpz&Uuwd zN+d`#3I$evVW9tkwmCswr;v*$T6gTc>p6EWzi4P+`1ckUU2lT1lS~Bs??Li)LO!HE zO`YX5^7*#NDvLzxTsMPatVKkNnWaRD&c=UyTGXZ{qNmKQ(|%$amT*~uS7#PJo8x*c zcrq(#cm{6=<siQ#Z3h`ud|HJPl~7L<bH^6-FDGW#$?a41h^kH^F9=Cxk_>(l*6$<m zzA7x7h(6FzvgfWa*X)6QNE*cDDWu$}I<q<LIh>JsM^-#6Qi~{W4dm@Q{ZkN`aV4hf zzY1dNzbuIV-lO>sT=_penqS=cS2g@=AiX-%L<^}3UC0<kB2DsJw^G;+g-8NSm9Wj) z&VW-+TiSE~YBVN5=e>dHJ<!I^uAnV1kcJ3Y!lw9M$@YQ8`yqG6Ex-jMD9Y^ac_jD` zc|Loc>-Subr&SNK8d5+JhJwL-GKBmjw*;>RWQmi;9?_<lWM<s^MwoE}PDzeGOah|> zq(Ky<2ihbE4XTils>7trzj(%Rb%oIkL&(cP6Hh|G3udFROud6UMNp8tgn=nAewiq4 z4@*exQ4o#1Bz{WZqus^@?SmeH=Nea>aL5k@WESyndIk+FI*qtTXs8S=MJ`OpY!Rwa zp|t=Lb+fa%3)dkFj<E!;TK1UT#TB;VhaHyVIv3wkbCyV5xNrb9=E>=~<59M=WojRt zHb|j!toLXUmCj2|`$-cI7d3l~QQ~(SC0#g+m-*eqzQt^3EF8(oGv4M)tq5$}Zq~P| z8zPXB5u6!<u|c?E`&$X*(jidh02XxQ<%C6^WeNL2<#N=sTt~L0ow|S6iM&{NtLKiG zmLV2~5wl6Iyz%_T0T(JO`)t2f=qjDI{IR3p;z}Yf9+XlIH*^_qwYDOZ3Hu<Ek&0^D z=1^N&Iev?dAS(!ds$CyQn<d$e?7ofhvIzoxuRH4T)hN%1u2O%@n~*px7u8WYZi-zC zocdi2kopPk_!WzuU@nLrihYM%lp91Nf31E$|4%_2l6^3L>V2|Y@&!=?G)-NAdh@cz zc()Eko+`XrmP)*MN?hVCOlYCbQK|_Qgg@;*TW*>QV!_l4=<x&=juDVw%z?y<Z$UD| zRcusia}w?)+eD$US=~)hM)e?v`vebUXYvJcXX*t6EBYZ<d>V+lc*bH-v`a@)OOd*J zLv*^SoMCz{wHQ%5hQ6Y!yfLhdaRzjuP<vr%`RW4Znrh3SW*>GWpsLCsVYpOOr;wnZ z;pWICxpJ6VohsiMqWwYaz5H9^I1!`gvL?h+V#ipzy<pLF-ceU-5UbkR=}yT;UFzEL zGhg3z1#1P3qWTnwvo6Gmf0?t&F(~J6Ltc-yGMO}|jOIwEIV)S)9agkZG*EcOZJTRL zhRo>72FTOXT4K73f=)PR^a@nwkb$tdAl8$OWJ97Nqw54+<j(#L6(#aFgvw?`T6}a2 z$`kdc!`j;kA+d*wT>NPxK84;;_*=S};aoENqnenF&h$ixd&i;aIcpKTUb@*Ouv(2Z zS8(GufmWhLfsC&_zu!A#u{(#NN+X6@t9G9{MjZfEqdVIf5=cp~Ue7B>0h6cwHI*&m za<9}Vabf$$A1!KFzcEbKQtgvrmsIQ_=m!B=fY|$Jq)lO&D(^2$UdMKBFBWtd;ZMX% zntmpn2ECUEpkh2)^utn&`I_@p5vlD-C2F~b)jaDXk10)0N@N`izcbfI;KIBUg|wBu zw89x*jX1o5b*T|g6~bFRT}i$nv+Z@MPMEJ`uh%|BgHiJa!IGvqR`tA0Z7vwHJK7`s zvx%ExhdtUP31A`pNl4ifv3lcJB|rEWw#VY;&%!6)WLIy73d)0FaQ~0sRRb5Cz8tkm zJ!nmHWgkoqk!ybQzcKKdh6A*W_z(K``og`xXisQ%atF?uwQ<NLL`cAdE|axAAUU>7 zmH(hIh+I2C%j*vc+*iyL&Js-*3Wi2ZS?kYJS~gf#GijsT<jopi^0;Hh)Q}|wF@cTj zv`BY+TbKV<=PdB}nV#c{ca=()3X4%ys-13S7J%Klq$wth&<gTq3kc#RrHOK=kRqCi z07RkGgeQ0~7ZHbB=Jxx(%~=;o1%e55)OJWe%%&{uh+hev7%!ig=R|YN?x`n~^GEu- z3w`W1Uz~v0Q~Z9dfI~`F@NYrbx+x5X0E8L>1IbcukO|9rRwKSQ5+wd;rE*TQ-vCKc z6buc#2t(?Y_7Ug_#yi1i(Ca4zNv!KkhzbfmKRK*y<H|96|NM`{QIE^opoy<|It%!J zrK<k>a1;e6M+=|-MlST~z<Fydr+uyj<o3F`fs!MW@GE(flLYI7W=eZUWI!e(69@6P z2y}LmXKd!;U4ccZp6B44X?v_^4NhBMa*t@%rg?&@ON@B7XkV^+N;<T9+RL>jIFzqq zGNji9%ub}>p=M?sy<Y{^wLY!?_04VlmHTIrD*-H1ZUu5a!jIx=YWUdYJ7izbcSPs= zpzP1sVJtB2Fer*X@>`4ONOHn-Z*d?U2!Bj{)e%edP}Se;;T4Kc4IpN;Vl)}56c~4e z6EuH*bfdQ@P$qaEM801Qgg@SD=_CwS0I#3xmLd2%oH6W`1}uNM<eZ$p-Xj&pGaTv; z%&tVwPt88M+v}?D!ob6CeUaC2e}sWT<ezLoS~pe0c2!^bf{EmY8Qx?;MEeROA84(g zMj$=m1&}vvfAoQ=!%XDc>E2QX&k!EyJFgk2*R*ecHD~-#e<i=P4m**5O6|6TELGtx z0mD=uTS$G3fL^G-GG0Qn^O9bKfnw1@vbkw5(m*BKS9~sTnPK|_lc)*0395;?-6TpG z>LsF7ataG@YT>Mqhi{~*BM6GnxRll%g(%>?>rI2V7AkB>&{WXtAyF7IjHKSNWlrQT z=_A>LVS5}Xbov>#cJO0()1%b&2TQ}EmhL4ui4~pQCvt7#+M{u}bh+@HV+z$YYpC1# z_HYn6DGme5HMQ{>r~~Vn7+2ay(?@8mrs;en_DogLBRQe*mA`*WH^q{jIMyTSDeS%c zfm5EYUo*L44OLmRMXXaACDXkBQ+v#$up<ghZf}Cesm??d=WMMyA<bT)sZCQWVCxyS zAJ*8L2&Xq8-9)DCbj^~+l%~wCwrHg7KpCRNx#TF#y=0k_Mvhz{9j6({G=p!iH41dF zbREf8?hwF<)`=+vwCHB#ay+%>%uGuxpRKBg4NR^QHcp?Y<_zMj@R8exPK54{hmj1v zzzs~0t5}@h6RT%LbKUchE$+&V>lUz!)wWu8Ut)(e@z_HgI-A4b+VJgAi*$l|HIw`v zQ@vI8wh-r0_H<gI)(G)vF{6TW=b&>?1D~#2v|!hr$IiR6u2I~#{u-KUO-fQvjNTF* zCz+B48y*jlK!XL7{WC@6HB4rUeJ0630DKg*nIXL?_4!$ueCBrxdd4H~nC)d5vHU4n z&zvRG6HNdjc2reeB<*iU`i4jmiJtM*s?9xIv$DoMiZ(uzhMh_{x~9v<4ir{21~&Ye zCHmjL$3ZrSBj#<ILTq6bD4?-O^2$^|^wdwQLozXdOADm}NZslOHT_V~v`dvyWoV=D z=(xNXYA_~pA{9j=^0>1janggd^0+K?lU>uys4Rv^InfP`8*$|ETMQQ<PaNw*w{6m_ zCYdgT<;4K!ltuwUyXNQY>7Q%k{H3`T5&7n2>5X^*co8-a+R{SB<_h`pHFl|a{XE8U z*TIud!ya~wXwJ$Ub?U!eAx9|u5M{U;XY2)|Zb$SL%(~NID#nToQB6kYEkT&HplJed zw0C~*(nLaNE!yQ2>LZSv(vZaR^cB{-etd)`Ev2Y3B}wHG7Af~Q3ZcfEsIi>4xjLwO z%G0)I5G^IT<VF0H=r(bl*p;4;nYRhr0RYSv^>PbZ7nsQ5d7JP-;+#@S0ui{&^xFIp zsjxNA^fgRF?ePYTS*#Y-aypx0MJ<(9(ZICAW!P6-kyhSi0IuR71V)Y-P05=1PkZUL zTkJjaI4f9LKd*Mwn*J8wMRv~)cAHSn`1A{?#}>_U589kAC@Ql?%@SgBID`h}jpJ19 zU)|gZSYFM&Y0gt?SH^<RH?b~bYrM5uhRecmYxmmp`!hz0RE9Ik(reiYc%ANx>&X$0 zMxTQl$TV%?RWtyb&_T<NPz68QwQ#R~&6QSJMG=WTAKQ0>$q7con6)G07NCK<LBk_o z212t6j%5n3zpZZnd-VJld5QX-#)TVNDyKPXxMaf?Pbp7VQDIW;*22ab;Xqmv%!8Bf zXe}$}AmIzBL~_(^>H$f_YLO_fZMg()nkP)^*0|ly`>f{psZM5(66_&k;io`-4%V-t zA(kdLdJ_p!fuKe_*2aA03tJ%KnKTTB+EoS1a0fUm)@l_5i4V>ObxNGlbu=E+pv8;~ z4dAL()-Bgo8a38wrg4F#%xD#~X|Fg)VJIkRO`2DUHge`lua;`)T68E9W_+e1#1UZ0 zwB#xONMO4Rp3qi^yWeE>q|^KXuy%=Yt{dl}Zn>FFtqglo8DVLSm-A$D&R8eVik#Uq z@70@6FVi>xm2jkFb7~;vQ`@uUR8qu}@2x)ckib&AE2qJEk5$i1kfBTdm{zG=mnGMD z9OSf2gDkc<bls<^9*}R*q~NVlmgBb^QH{2SGBGJ=m-J&_#&3N2U3Cs8O}d2YC@V4K zf~7<ecZjIg(J-}=jrk5q#^**X@FpH5Hw#*Zl$BW$f>a%yrLadyH8~kO8)|Qzi2VIB zy9*;{EphtksUfC4>-5hFKV0YG{GY%FFkV-rUgMeb4s>M-3vL^}kjts5w7qnrsAer$ zT|&7vrs-)<wtQ%>nFY!HI}o)YR>v1$&B$9ThrWL)TZV%6#sK(PyxE#B67nV|hTW;Z zy2EwV9tfUPwt~WyM1a4<(_u2moa@En3JYwcv}`6HI@ihAG?Y9xwf<&U+Ucf^&2(II zWLONOB2s7pCwjX&a;5wV9Q&*}&e_mTYfDR&W9z>BY^WCV=v5R>#uLB#=CkuwcEnqD z)ePP5#_-%!oh|!DTSeWOtJ@q~I-It~)HWxLYARpdG2nrohl-D*+~cba!fRA90ytby zq+j5+E8elr4?p0xkw5rDW^dlEW-}I(ShC(0i7@O}zwcs{Fp}pSdoljo!6gMxzS)hh zGx8cm<lcE$K|BAAK<+VLAo97a>#&NnUnMzJi52z<j^z{lW4?*zoU`_dGR))b)$on% zuX6pVdoR;rv6_{VKWOy<SA7<nJ0Dl~zt1<dg7eq<KR&3JF`a**HS0Ea8pYmqzISlh z#p4+re3tQlSM;QEMJ!y?t0M@RxKDcWPf?m#x${pI__a`fq`^PedW?~sopJkz)z6T6 ziND~u<nq<J@@S2p$ZT!|+H!ok5B`w~JXa|GJKM{%LBuotZtcMi9=uObdz~rt$Fqqz z6FdfJ-<njC7R}wTTc*|>{3v1nO>#NQ6ZR+y;(%0I6S<W?*3f=tLnrrK234XlP(}VM zta0M`MnzL?^&u~F`XJG4@`x<c7kiOc<%im8G-<1VfdkeddUfT6xD1u$!SsO)m8@U2 zn|`wf{FC8*b4>G5v{<HQ7C`Ck;+}#VYjS+b8<9@V^~l|UU_?KI<Ji@bH^#M85rWGs zY~c{L6q~Jj*(YI1QJuGa>ZH$rn5l65__*<&;l$7=a}2SgqQEw`TY^cYn5~QC#Ou5# zuFqd%%U{k%-4%Xn)=F<1ss`gbNrR>#uC^8-c;f28eOR;eGV*-&m7v|SL{WQJPQ9h_ z!{;+Vc>@E%!;`(HQ<;6qh#2=bZTQN^U#X!tIJ}O%1^Ax5!KW6czDB)=vc9JtUtzy> z|D5jEwm+pMCddtKUyE;ST5Er;umTU#3-WdE!MAvC9j@e<VNU((%HLDycXZ-&N8#T< z&CG!S;b6O`{<OuDO&<4eC7Cw5ifUAYPunEZlM|QQ_?KpDw%`5c1m$e6k`CxrmU)nF zj%PTv<vIhQKPPLh#;d0%XXuI2t22<k<0s9GbPl;j9$OF$Ao88)@|=7oo`b#!kO}My zq$nR50BfIq7fu&kGd<0TXK9u@EVLEM=ccGy7Q-8A9C{-HWB)AAguWH5S;y@Iz~u+U z(cS!b;OX}UZ8#{+$jbVM)ftP+TwpY$H&zo!&{M)uZO7!#glV>dhyx&-PXto|ViiS0 z6{YoN2m-ObZ_sw9__+MIoZd~105()T{(Tn)yRPMwM2Gy5j#0JnL?6w){d^8)0loQ? zPB@Y|0cgLgG0(YB>nHwT%sCtJ9-h^`ywLy_-Cj0hpJU=9gD}r)RPx^C)uDDppYw(( zyb;IxaKvjz{o}3J^WOJ{m3MN%y#UyPhrTep-g+SAbxy~cA8fm~&~R-Z>*i7Q*kvE` zGsEifM({^p-b<<z)78yZ5MRLijm-{0$J8^#=A|F_^Gm`W%Fg0T%r$u5nIBH#tKwe6 zPVCs9te0#dxV%plZeT%J$)`X69@FTeeK^&J2>$a5kmfHg|Nbvrsy{2cI^W^?PJdzT z+<hmUdnFpV*Pjj8_>M~TalH%iS0{G~dItdCQ!%sm3ET5i187kTyR&F}6Htp-Z=G{P z)^<_7&e>CD5J_a~ciZKOw>|%~KeldlTlNGRSlk=c-m-G5c8MNX)*D%1cfFtb<0YJW zc%wM^eZ*TzKh`KFZ}WPv+Z1UVZDn5zX!%EXGkPbg`$o@&NimjbFW?qAkSSpo3FwoH zBGeBB#PFxy9@TNdC5qnJ%jF(&3Uxb3IwLB{I!Mzw$S{*m*_V+H{YhVXdgn@;j=`?R zSgNWcC*s2~lT1RJf;p2;z%I2d>!xw2z{i{xFewaG7i!MbO|W9d1pdAR>JQ2#+=S(G zE3*kb5NN(jxfuul^wVprRl|GgXxy0TEp-OPn8<}^RZbuADW&;p-7(jbdsXTauxA|G zjoX0Kf!i=*fUw$D$KO^*mw0(@+pp=#VZ71xbz2{?Eo*8()9vfB^PfwERZOK_%*_~i z7syx_JiDSP7W|TT?P_|Se6r_yZ?8;t?wG&XUXj&Y(eH*TB_IBrYbAU)Tz>{tO89PV zev8Fl4Q}1+5mE*~x!r$8K_Y4e|0>;kGWtE8WMu;FZyDWhbuTnrl~fJ!c}0KMYo#(b zMYJpYE3G+`{N~xJ;cqg|+^v9n@Ei<2GWU2F^q<fL=%;r$owpa6H=YAhJ7V0x#YXd4 zp2cM{GJ^QX0gX!`lF<+C2vVS+r0rH<$l?diKcXot6?|I#7sPKt@~<|-|Gta#|J@9e zvylH+LtfoM2~7k!u&oxK0V*}*x=@2QJtX&~j+hqW=X!`P@$LQs<K=`$;--PZ%SGaC zvm`RdZFRKJBzLzKjH>BDa?V;_p3hO%*4oGG`MKA(_6A%jSTor;Iv0lEK>1-8Oij=g zmdfFHZbx8x@CM8<3m}?LcIR?fp!AyVmRN*P%^-7B42%tukj4Gip`ztb`lb#LVc-XC z-=0(Fp|ei&WU$rLI=a|gpV~y4X-+T(Hg8DRr4=Otza=xADlF5r^A48akhn@rf0d8E zW@y(cG%iLpCVNfHhV_q$c6M38TnkDXk+BwrOXCO=M!%kU&$e&?M}+ovttv~egkDUk zrI~>@o&Of#uoL5|#$`_PKAokE)}$k_W+~fi$xb#|C#|^~|7OxM+Q~*8ObHv+qWx53 zIHb1efgr9xxhHzJr-r*usYi~qqFV!PXgrfU^qvyZd106)my@N!zIhxklZ_=20!^vW zy3iPilh2kb*aOw9uu%z{7!`lh5=|=GGIYxOyokf0$J!W&MQI4cXk=Fzg(X<KwY9?b z?9Fc7-rQ^fo2p-uXg!6V%U+JqQlJ^CB@jZS7km3=JvCv=kP*JbaccPRXztO<JoW?L zuMlT7p_Ja8J^;#CRPsO*O=LUmt63|gY_<jfCc(6>82P}kD}H0b@2e#pYmQ9$3@0}? zhT70PQ7AfI_bdYX4$>|pvE))SFwOk3#I|?(6~N>n@$wr}#iS$M!RZaasa6d|?aZwA zvf^sB8$lTnY~M}h(|{0>^jB7P*5J%qcJSFJKH=|yiiw@{BHVAKIbHTFbqB;BWr{1= zz6F}34@joa@L1L@()ZY>!JDgy+K&EENt^SC#hr6e0rT5fGM+!UP6B_*<S#&jb%ad? z5z^>aeHj!m&-ez_QDQrlj0>EBP(Z&E@5HO${z#)z?tx-|9<9h#4Z4|aNJMFu2@*=W zPu3)^8Iz6Xv4Txem*r7;-$@M?LoCfAe01&W=ADR>>9Mhkf~vcM=p|*wPDJMR@Z(j@ z`C@P6!q2$=dESzr@LLhVzI}uLGSB>PLLlUw+}$l)|GWH@rxoCgr-kyj_g=><eU3;4 z$lY}B;)1%IfJ&!8z|*?LUVGW$c#yarGhhRoTiWd2=zg59C}RK{-ZroL1_A*KGoOlT zZ8IbVOYI3pQd%0uJpJ{92mAhYOy5v}{WX_e^Gc=-A4epf>D>x&+UeWcx#~+{{CnOC z_pR&3jp+$Uh;v;%@_rkPYn^$!fV^+2A8|E8kII_N3XdaYF+CyelN2!lB{#}n{yf=W zfuEX`v^PF3%RS0KaGZX1Zwm6fQjA0N00i-mV)EA>4fT(Q|2`a>2qa-593}IAHS>Sr zCL&C`$;1M=+MwbN&>yAh^#)aP-70^XUi6QectO|t+Y)ER{Sg;8H~EtLWqt8C9K<5e z{o$NEuxOPT(VSRR)oT_ba?uXt6%!j~egxS2O177*%g0#yqtKO=ma%W_x|*oECrd^Y zv6-GJQk&RWZpxfBEAnE>a-S+s%a+^FqQz(@lx)C#_;h9zjk3al4%zz+H=z|}U2Nv= zp+ASgPNj6=tXytmu=|opwVLTtmu5xJ|1`t1EPlSSE9XU2`*}~}AkvPbJ2`V&X2uOy z<l+^tkA~$Q@4m_`=CRJ2M^1vaf@w`+V_`Fp!Z}?d)~I#5>G%DUeoXqD1gi*S22ett zL?b!hVj#q=8pl#&L?fvxbBq49L}%$546l_(cp=UiB>@8`SMf~uYx0c**R4_VjRlMf z<TZIX`XUlGe@1ovtSS{(c_EZ}S<$YN6>YsJB|3kk8fw1Q4MtDlZZ&u9uH6go(7G_a zy0RKuS4xX2CWfT$VC+{aBNz5lDjj$BWkmq~U4U%?9G6N+jwB*if%{(BTMg63vFMI6 z=fJJis_U}6y`mTES)AmLVfR+1f&kVf9T7Sc{6(<@POSyC_m-A4j=X@d?2rr}|N32c zF$W!G*uH2dmAnp<8^?JzMwh%K*fyNs3|fw`eKP}i12!-_D$bbov@eW(RD18RuH5Cu zC``;3@a|G6UAp}03byEJbvgKk8g5Gvpt1@ompl;`o~-oXU1Mrp>44?w9zr%ttfhUK zg|b=oosqnLg%O^(swAVVR#lpFZVdz%PhB_PrN3k{sOjiE5%;Kpg}ad*g}YK66}!Z~ z80Ow29Dl9ixAQqvUA9x=gReeo9MJe38U55D>i5T%EFz0PP`7uFw$*RYdPa`FPp0h5 zbj!C|`k?E7pax1ZsAiT8<5U7CEpp4;(P4w{hEir0#ZSu!sWrfc68;_%l9kKt#m(R^ zo2C9~JM8wp5fn)GpntCl@WIAjIyXRbcVMU&%~RB1soSt2ODUo?wzjSJhiTJCGnsBW zJzMBN%Lg>x4n(5_;xN=p+N2UxpFC$jCCFkSc|_w70oZUDikSA{d+l}U3S6UHr5uJV zaX`~NHTmZoNq@U+U6prHLBYhEe=11Ub97A#y!GnD<MmFa`7h|}+e(fV?<Z}PK~Ys0 z(P<7Srv}|px>Kpvq<<SRR9ObFx?O9+dChL6IVszMu4|@G0zpq(4R&z17MGs9(62(0 z0Unna4z8)C<J#=J+$=K<Rp@UGrzbFm8h1UGR_>@7GK<cQcJ%=xEYO&T(hfvN1qm42 zVT5-+KQd0=o-A5BstFwew|h6dKDB(9HVJ!25?pHu+vEed`%F($PXXJsi@b)sjs6a$ zKRh*Qe`4@Iki#OkwAGupMa)SuEDT$^FDfZV<eWZN2&Wp3us<cClTJoyItf8}{x;|f zmrUe49TLP%>j8Bf2`q+h-+TIF=@M;;XEP-fB4`4m0jg-KaibB%qs}xyCd|K&#gsd& zJWs_S>RBGrmyLSP(AY|$Nz>>dk*-&@o+lQd)QbG{Qtf8#4RLi0{`_?D`}=4337T=@ zN5Tn87*sw<wx~A{OPuJ2|MLhQApOu892x!eS{)G2Q^OlvS=DeX5tnk|b_hnA@to4L zo;I|szb$cxtA*&@QIouRFlk4@$d%mlJ59iKb@9L_%lOS<TR;?gRdP<?A-DV(!Iu&6 zw!M39J-gq^2=$$0a#w==8Cjbl&<3V9&T#8o#w66q3^7Oc2dA&1Nh@D{`dn-`RwEDn z`-p8u<!vls#_gNLgoW)#@dc}F%BK3_fkTx8X~Tx^*-Nkok3Gs9a>kIRVtW#o`>+pq z+1wtaksl&K-(@T`qp1`kpW6vNp+Ox6DZ|Qe-Jypg{h6{L-=zEI{O~cL%O57H+wUyg zIrLXw>fi2@%C`-Q`)BcX)0IuyXC|$VbCqJSPv0Gd*B*^<Jn!wZ0E5?_XnjX=A0<Jj z<-Le9$Vog-j62Ht{qpj(d<0<DAFdO)jLki$?wLDG$Db|?FGLNNH6;!V=4BWgjf8#; z!RwY}AI@uGG!+k#_H3rBgIx{rkEHz(&R}?wP<TV0p5P*$=zQ9+dD9|M0$~OhC>NGW zK*}fju2q@~6DAUQhxHjoQ>N~)oHdI#h6lNaMx#B=C%X%)Um`+&cwmE;@UWrW#PBBC z*duv^?1-=~;$b>*u;2STZlvU)zl*BBu$6`VGSz+IL+qXj6hgnV0DEKk7OmI^VGhA6 zL?kx6`~yp5QzSRT-)4x}rS%|*$P2anhmm0nM+k2q19~0&Y`k%*5!rCONp7gzra>k# zI1g7ewKzWMvQEoez442KIJtZy<fjU#-FkMtu`+6X|N0AJ@D}x+0O~fKNp>nZ{!vwU z%c0Kt(%>qed$GDo+K!J`w~XN3e_#>v`97hj(BHn5{mUqee?N^$-NN3&*~#_4nA`vK z5NK_<p;@5+4RBc4DuYX15ET<yP!(NYkMJv^Szdsv{fTu70T*MR;?U*Lq}P-K3u`E> z-c#aTwEfMA4Uy?iSvSk%0m91L`C-871I*t;l0apyJ?A02jXP`Y+W(j@V~1yl$BN7A z^YsWbh~Q-~oV5kodS+CNd$(AM8Op)hs|YNQXS{!i5no)3vkR~<%7o~0hJy9xoLN9P zF;L<icTR|L%dI6ey7rT?#7JCPJo6gk6B`-Xr3jgU6!Nvo_2@^GNndnKRP?;~38^Ia zen(UX^biEvm^e9j9IUr!KTJf8u7=tSZ-l&&4pV4}2ofDUT}V|~3zg}IY>(bmA}SSA zMdX2XJ-*hf;Dmc-Xw|?jl5Nas;;;pSJt8fbCH+BSCd+r}#E~eAm+rI**5a`l$Q%^o z@!zcn5nn@&miAG;e>e5k=1`OUJaEY<4o~woMu`@7mL^R5P|=Bf>7MSWk^q%DYMw+? zt0==yq^2BN&pJY%QJ+cqoUQOr#%JlUuRQ7?G()~rXrJw;o=+}KN;Zx%*)k21A)iF! zMIxt2-ApRbupuS>6LA<q9P!YxkhYmRtt2S)L<LXb_~Hi-x7fs}hKSHULH2t@B^Z`l z#<S}|oc||#^&iIj<4sizDdHl~XEt=kR3;E5S#Q{K@{3U$5G6Tp$T?VV#X+3hv>X0e z7;llmSZ|qr9~h>63|IO+jULK9k3Ju<!JH1_J%+l^wy;=lslje;3GbfeJX!uS+=wc> z{D$I6*$(YNKX0Rc3K+AOpoNRtE5cNTxhROy5?n$BE`cu0(lZ9j8{g{phcGJ2f|eIc zR^h}-ziFFRS{NcA84S@rS_FsNeIHYiWG#PvdpyEqNldwsN(+sfY$m*HM;sk$9gy84 zxjj25aB^Z9J?wDUDpdy?@*xb9(i#sdgcA%)td4=>GCGbbFF<nSwDyYSAWC&8h2p*3 zerf&9161%h;iv#!*<q!WvrKWu==B$FW{^U8WyyDG7!|cNdi`4ks#N8{C7S5`Qrom_ zwqEHU{(w#E>ys<^-_INb2Lf#k<Z1qW_4Ed4KIv!15%}9y4lx66Q_8z?Yzn?u!)wAw z5r^#T-rNpNl9J<=5Jft)Pd}N1r}xgXeff)8RGaQqlgQ;c&aO{w9LSSqo~`433*sO= zcxu8f!LM&-THDy!UA4PXr$uz|%1D+M&@V1deje#9P;2d)DR6w{IPdgU-soJ_IN94d zSXJouICo1{a9YszR!$yrsS&X*tAtAe`};R9AT@@_<w0dyr&t10n&&FcMY}8~t1PE! z5W11*owMG%H>}4~T%5XqGFs_$R;h=Ac15OC$WIT2+>5xn2OQ~UTfWkqHognm_cN%9 z1mG`tjB6Y0hXFPgHCpBTti?AE8ry2Z6Gb=;i(3`A{!6Q`=n7luMUYP%^kurKeb~My zwD9OdQU$v3hYwq6B6PiFCpt2GLbY+4R<8&R^|kx7zLq-EhwkvwZQt6A>1yFO8n!fN z?Z3$O;kRlapLv{##fXP_!Vn9L6(s%&ZJ&f>yc?*F<1smSgi931*WW)MCyYEt<<Ffa zafRQ8k=D1y86r=&n%|(^x$H^6@af#w=85KaoVn~c?1+PNlsamIsi{KQ9DJs!{9{9N zr6BFoJYzH%VWT7yAA;kVr*FdX+(QW#S#zI5ebEi#wY~0we!J+gsjsr_>l?S<mwJ^! zpCZh|w14dLWVNRV;>k@f>JHaV(ltW!f`=I{1j%(A;}$AQ>u2eW+M)g?9b+Y>I@oS% zn<H0_X9XGIy5VgTv+sH2kR8M&;iL#iuv16L(j3t*MFqPfHpck4Qwdt89>k^X6n%^G zTI71w4QoIY(?$Y&-UH{Hk4%6%Rtc$ZND|HfQucI&&b;K=f5fsLiSoFWgkTgUrxnL& z49-<GhI5$F*$sGpy$>^^^DgK;8{JmFUVcb;QV87&=Sa{E1<F%_BZg0SXRAcs^HoP6 z9pis--rgHiSaoIlymZtl>I$=|lUCfCe)F{A`FVe!X@q|BfGW3b%qTumCm<{&q&EHa z<1ufE?C?Tr$&Bbx39RzHp=OuS7J?ntdh!D=Cu&{xjKWLBoCVK~&h_sw2$PR>o3GQ~ z|A<|J*uSci``Q^3ApGxk$Nx=@`cI-c?LV_)w;IgFR@;8uQI{gMP?LbS1!+<QO;(Ge z(T7F0v~|&EnCHwmu5Kw;6kHVS#_?)MjXgts494}ij|%k*Rqc1?RHTWQF*hG?`fY#F zdx)?16Hed1dBYHK7NR*p-;{krGtnP3$5zWsXF-!hP9fPu_tyM6^<WHc0P|tV;yWdK zLiI@CVfl#$L;7(*FfHiA0WlUhbS5qPTg;j+dbwBQ-b$kekQ6pLn_27}D~F6?)^cp! z98_{+_g<>ctqckr9CX!|{9_GGFcHn7{fEDKz0%W@)!-E@DwC};s|tU}&rjhvK6^xX zPXhC^J=pEGrfw1H3#)bN3(q`@gvqrOHZXUx=y$@lD@<^<xram_*kd?={Df-PtfA~S z^==VvG($kQ(m`A=%vO#R>ZH_KyQ8KfY@i{DEGbk(up0P+fH=<*4@Io8y0^J`c`trU zw@p>n>(WEpY;3-X9yyNlc;M8p3y7<9d8Q!&piH{v4O#Uq=p)2lN(~hbE+@Pk+p+&% z!*|7uEGyRhvg1WvfRfax0M4}<+Yj|oMjqY*7V+d6rAQ%Sf0ckThOHKZyR;+2S;LIm zU{C}**!(dL2rXv~5v+W*`S=cag8^Rg>@l!BY8=W(XtA6rg*rb2(vp{K%foI?{O<Wu zV=x_v&~cRp10>hYy}og6B#knvqJCk;(EtdaO!U4GP<jZ?7<GITi2+J{2u2`$Er(o9 zKiYKgBERu-;dnK<ncM)FJ>BYnnC<>zrg4WQpN>au>KtDF*%?otA!}!e;!9X~vV}%h z-P@i`W<o|1$<xJbC6WDk!M!B=qdGALMC;(}3tBF>2&u}J9|vUZGw0Aq6|~33p7~f2 zd#KJ8pqg1f{z-E#nJIId1cc>Nw{cwJ-~)i0P$iv)NH&sg&5<!qGWXdXl}F`W7QIgI z5*b1H_BXKlE1lEtGgl1+S3ChjiAhlHBHGm?8FS6Lwp66qfN4~jzJ@f3|9d_bfdbX! zlFe^2hf>>jnZ|s^C3aUgmYMkzsAJ!3ia!QbkM0;clj3D*?G>Fq5siOa^a1o12y(rL zWVC}YW+Y2!Et<TiL`2FfOXN@R!kL=!i8imuRKiAFhToR66r0^MpxcMvp88F11;9-| z{3>Dzgx4QS{h%Rba9^-hLLB<SF&{`FU#LtnJZavLne;50E2s!|0VHSNrJNtXxstae zMu>&MNaDf_2TBOzqH=}z3(j8b+sBlikG>~3C+xA*JxF9H%;O7pF`@DdzJ3F*4&S2+ zn~F5xjh7}^5L^e6Ega$<R0VMSCTaamv^z+``{d$ckwJ<(YOvl{TXFA}CBinKR0vel z%_~58W|6$*DZ7O@x}ng#!I=0S@As0>(ifcIlr;3*BK|!noah!=XrJs4aK#j}rH^JM z5dKBOU%fIW20mbA;+gp96t6fNVKFh<<gG|mDt-Ny6+qs!5`rgQJx2EvBlrQFj@2;j z78g!&92+Lteeip@N*qc$bHa+tS_Z<rT*lw^sgwV(ZCJB{<b-}v%5eXZQs(@(DX{<3 z)BFFE+!^%s5NRO9!CPQWY39L(wUCoQRq3PDrT=ua$oaYUl6h&N1_u2anWOBfj5bpE zqcXbIz4(nnlCd){Z!OCze=TpT;8$ND6mz&KyiDA<i8`X0i#su%7*Y%OC<{rX3<MG| ziWF}oH5IAEoBVK}I$!#gJ;5r|aR5G_E>q(sq{yQHFO;uqBA&w#4Sr$}s&9@XGzX*h zWW7r#%ToG}hc1?<f)@c~x|OwObr&0Vk#T~^Oio#Y8>AP$$kaZBT8Hk)k>y%#3_-i* z0<EJ0olYxm7CuA&#OvEGIE76<Kw&G-LR;2|qa(>J&^wkSxp`7uRZoO#M7Ot%;lj&* z<0hs>c5@Zj#`xHeowUp>Z^+U)CSbp!fV;?QX9qYe-O}hg-lO%NKxWeQ=q68h&nn;N z7u9s7N{+RhXut>d(Qa00XtD%}U~tV>7o!=_)|Kc<6tv8cl^ctUkfy8m46=$nkGvh9 zcd1}<s^9`?Fnns5*-NW7Z&O#`8`b+stBZp)Ana(jjq_Hkykik~`>U@&hk`7$S}xzN z>aJ`RD`_V^#8%gPtX3;>%6`qPRfDkoob88n)NRm5FVi~YSSv^<w|6|ksxbLTsOau0 zl7S;odB?#nK<m^9%W0M$V;v@{NP2MITL{Zv>Ffc=B@6NhB^n<GJdFH2{t<S1b`^Z& zH|2Tk=LbH-obG79vj?f>T#UY&G5gn!=S;URx`=J-M4GS{fl9f_zQ_U9$*0i^JK{4I zRit%X!3ZN^h|aymAS2v?M50~;O2A}KT(pf<IJs->i`Z;IE&he{Vca3nY_UK_&i57g zX`BTh3uFC|g0@mbe!cM7DQnE?3FZ-nDv}9P+#E3I&yo4k*$s=oJ(3L?4$B@PUmz<8 zA@fPxQ?)?8(WE*>^$Cg4;|NK@>4=dhR|z2zm2mjPAB|b_NdV#2#eV1y5@vK{2uW$# z4eXb^Wq}GlpJ*Y=9$>($^as?3u}8>Ap1jWPQqClsp9lY?2)M=jM`x$bIBf&_(%Ij> zK+pfP&i?Orz5fhsa{fC08|Rs(^`Aad_6hlNHES>k)i!0>Y*p(YrQt1wEy^`za4irZ zDrFNb1liN6=Bm_Jg~imx9V+7e0U%h)VgNVp7l^sr`kS1<rxyt%?;fWnWMYGZ)U4;L zr@-g!9Y3eL^It-SU=6rh<m&q-C<CM|MFzrBB)p9p#bca|r^)m2gfJV8VuNI>I^cYs z(W?x5Di=vN*n}AkSg-|8uGPp~&~8*|iErc&X2Ky60jQ8DC@6<c24N&7(C?iJan<{v z@-T4R$>86S+-5*fpkB?zhe=SBoK-S{s37<$c5NW7O3LhxAR|DH9z7xbno%@y%Ahz5 z9F)ZUmbKd#@JOQRtiw{rJt@j=eRQq4pjx;?g(|AcehHPGn79dFvXzj0|Aq4y8E2g; z?(#ha6&Jtw?+lFym{?I!ITd_BUm?o*^D`wR6bIY>fl_t1y1-YE17(9X^p#o!#&>bR z`-g$0{Ng*F=MG)fwnQbOL@El$sB%7@;<CaF{;iiTZ^#jQn)WYS)~H^aRrq{;C<P)) zA~H_k|HIllMOW6Y`@XTA5m%Cmor-PSwv7?9qKa+XR>ih$+fK!-op0`S)@gIMw%5Ek zr?qj@@5lT0{ycyD>?b2fs{95Jk`l1(mKVTHbTYM!BXBOmoCK0y;8VYwZgdy5M`_35 z6=<o;=+QDEFivEYngz1Y;qB^nmMAT#f{D{ijwp)-Y?&%at|byhfQh((PQ$n-3!X8d z)y1ymI~YxLR2(+)#7E-N8mA_gSy!P&TebNen|vEW4d&c;5$(BS`lnuT=?iR?a#QbT z%%s;_0Tw;(jz|H~LBEffnRrXSmA_<~Oku*bHKYi7J>rg40uedJ5%pw}*~^4;y<ZvW z#PQ>QrwP1ichGTi_LxEc2@2>dxiZo35dR`69#T#4@)bq+6a1dW!js%LpK7!W1*$*( z3{_(C)fn=nXd(Q*rZ-U*iU{;LuIPB+jtZmzC?=)iJ}Nx%uC|EfP+-jO7p?saxi)?G zD_G#N{~*SZ<ZJN2fNE~$!!rm>kBw3ouYLEulnIVsm*Dn%DkEBh#@N5JxD#Ye{I0jX zn=*DI*X_^*c3C;PA`^+Hu$N^;TRym-p2wW{^2h%AkCzf64&x%B3P)<+WAxS3&QMlH z^KBMm7a5~>aSa#YZNy$+iEPwxl8?(b6lb5QQEmIRzJ_IsVe_-i;uAn{d_~dVpEiqP z+|JFM2Hsu`E*ER4Rcxh);tNK$ZT8RJ;og)Zi;PMvjA#Y7;_1mXZ%KLQ<m6Z<Xu%P- ztlsmA>@^&!c>88EtrE#-;X6MgHayfRPAWN+;5l@AJsXc#4XaVKVoXWq%xJEXHvT*j z3xy;+vLd?{^}f|37|}=$Lz=Nu>i$<)>JIDrftORO4b3XdZ4*A_$|IJ5QTsSr*5nxR z4sQCa^^Sdy$CI_sz%{AiK$_p;m0XYa4R*u{XH>%lB2+pv3Vl`_F5pWqSJCVk?hO`$ z2Wt16=-r#7Q{rv=-t8RwqFmZgN;y3DAM>8eT~n4%8}H&`$h~B1wS48ZqM?~vlOvi9 zt246k36@3nPaOCKbT*q+OKQ&4!hy^aZ!8#kCD-WXAp$|R>iLPW7PwSon7!iLCC;uh z!{t$1&WQ6)oRjbOX7{eNonWq`O3QQemaw{oPzQ;iYCC+M%#{P>iN7zA0lA?f<{OXJ z1*vNL^}3?|QS=h}lhd_1VwRJp9PvQCAcJ2YMw2cp;L(hsc4(MpM|NJlV~i5)wG_N? z9GeG<13+*LdQM)se0PNTA%>rTK}|*2n8OANMO>5(q-G!nJ)Uc%AyjkfDBYL@=eSRt zI1-1gOTc>Czy*9F6y_hD%>FxW_iVcoYdN$lMGpA0Kqh}Yon}Yb51OL)Z^sHs`_zQ} z8_sNY?VCb0ZG-wdxvds?aDX;=``k=FtRsWu7FPoB;jf?qBx&<Ne5(E(I_5=3KoGq= zT0~1*Km}GS<~&K**hIV?qj7WKI%mD>*0*-*ikVgpSYQ9edE?Sta~vr~cqazDr2G5) z%u<FFpWX>!{0}jU!nTH<Ur70pa*xn;*y1C9IFfg0HFGG4Kg3vGvncN=JU&I^?0cte zG<q*IM#JmEC;P0_{8=k;U2N#iR-r0Qsh8^ZVQSGWOiE5kqVLX77_D(gwY(7PD!{d2 zdvT4nP$$HBmxOXhDCp889FUFi!6*wuxn~48$fnv^C|)dh*=~GhPkeX;Xpah_Eb=#A zN^vqy%;ibeGxThkIq8CQxSU?;YydMtzJGJiFfrj)`b?H1Grmd$GD-nAJKG9WjunmU z1h2^dyaL6X(xCIdhUq{5<1qc7tsN@%)~0sK7WV%Kwopa;%i00>EY@vnpcS$d6cHJK zr&~nQ)3=gA=q;f`kxnm_pEq5hw>8h$EQ{OT;lE+O$w%HIi0pbTh%`@O4F|xi9&8+4 zxJ~&SPkg>VJmC33yC(``s>{-vIUq`NqAd>t!P&(fXhKXAWfEm8Q%f042)xGT<+10A z920sq?%YWG123ss8BZEbYU#9e!(~>xNZMpk-Q#i~5H}x%f>pI8CpQI3@i&v(+m3<i zPc8dTo&dO)rtP@$*~d5QkT_i7CH1iWTJ8Fep2I4^lKoTuucpryqQz(gs}hri3*K9; zn`#Am`;#7JyUWE}g%>jL0=<-}YSA#H{&!0<sv<lG$4UeTVz87mK=6GJ!`4jS>4GRf z5ySEgv_DCXM;!A9zx*OhZyz>o@TzZHoRpVmj=jrZ7lO=26A)SzUKEI4fqAt@fLcjX z8`~qZ(QH9Mz@#$GP98kkom0EImJm(;DQ9N-5#<cEhKzj_jp6t%;F#f8`a5d!lJ4y^ z;^7!|l)@ZMcTmX#J0ik7D%Oyew1B=}p#}AK5fQxLdKXWJr+m5K$T{h`5Gu%S)a%c( zd>C;4`f71AMiY#2*|whr&iIxq&g{yCmf57kqx*$8r*TR02G{%h@TANRz;EcJRs9e$ z#PaE`NI?gO&5681o^^k~%iKoP`M!Uk4q-(W8hlgfB4JH>L73;r&2*0BMn66_9HNAj zng1;?8}?j+YE0%rTp>|H+hhievl3mRrAJjWncQVUm>6E6mFhri?!Nigx0-;usEjxm z2uR@9SoDAYR{PI?)c<27V)@?^#eXw{U{*=Lm_hfOQVlRff%L==pth=dZ1D<G-`9+) zq+0@mCh0dj*8^%^zYYJ0-e><C;BysOsAB$pc2ZgpJ?-$W{x5D2nLjH3Md$IB)7ACo zRO@l(K}LIyFRTH`b;xWqDre-FA#DKm5Q#g|F`$qb#)v2I_>c!xNNXw$hTOpixfn<k zsO*>>{XHTL#q5x{WG4tl>(&SctLUW&<w(d~GCYOsVw^|^_KPQU4|5c!UYqO399Vs7 z7IFp930`WwulJE%mf57X(A>pVGc2`IXn+8hW`r1w-*vrb%#_jAv49kB#vDM?2Ml(o zp@`DiV?{I^S}AW(;r8KE)xc7^uhk+rBpcFpwHLTp6ty`a_@jFH^Q@$>(ej;Q9JewT zOlLHp%dUHDPMk&)EhkO-kxu0n(?)QU6koMvCjV^DpJNp8Vd2UaHP%rwfbg!BneMc* zT7^HYYvj?#2)2zg{Uyxa@KKR{RBawki&Y5ko?X{7qqOAN$I!UCx=^~H;W_J;KV^I| z3CG(VKdb(;1VBqoNvV-vVjgN@J3V^mAndvB$$y)G79qrHb|||}R*8Tm&1UMCXM{sT zO(0kj9&%F~j((yr8^i}$98Ns4_)9ws!7I462R}S}Ts9kv@l-lqh??|aCEpm!IC~tQ z-SuY}H;>w4=BbjQaT3@(YvCUCH^^!@(3o$E4v5RDm4;b5O1IQ{1q&4fDz{vehmXsM z4dLvC_4X4EHX(MTe~pWEDN$xqXVjlR;zH@-;|}l=bhb<s;u&)qe~j`xVX&)o1T~*x zSfP#pt!%gw(nrzyHAG8x@G-9Uc*`R;$pHPZ>r@tZTVvrwEbQF_SUd^bYqi~smzrv1 zCDy+~^Iksx0SCRRAdGI_7{aVC@&7U6`H9>-hFX<B<rv{;U;!PGw}w!yJhqvF9lZdY zSVyAx7Q%y!*^>KYW)b7ItX5&4s!0L9YIMJ-N}u*LbgrZFTXocU^&n6;N?p5SDV8?+ z3dk%xuNuRBj&OT<U1bS^sgLeMm<JMA6oUbl^*4;0NW>&hRo=zM_iXEEj`UogZBn%! z#fLr3;htw3t^V$ATxFR%_(FrHG2!b5i=}QNsMu(l%_J*cVCoMR-4re)>pOf_qp<pi z8+2mf7X2@75U#eC$s4#uG1AHO0=ne9fIilq!3p{4w<>U!W-?E<9<)(J7Sd?@Tt){x zf9)=pfT8c2;Q9q2L*RTuc<~&t&+!9AIY<^KGzIlEFa=@GMY1eE{dWe}6~3CH`ogAX zP);a_aP#s4dC5vGld0_GA2)jSg5@1bDb~E9-*9Wgl4a!YLG_c@DEnnapuj`G$r{MI zg?ur*`18o5IZ${dglY!(Rl2Ga6M?B$s{?Tv5~N-Q;swLhA?0f)w@etmAA)z}1RbJ! z_j_PwC)?r$*MGmKTfQgnJ>$Q;@>=@#>_4OSKf|Iwr`h<Doa@K-*QEAew*>ItpneWO zef}|K6PO*DeWHB*ut=evJ@27#k8DsOea0?<`R!lJKY;EYZ|4(E`&e*FPYyt!##RER ze@bV;KDx#Ksr<_!zmJm+?w(wF9}gfZb^WV(^DoaB`;l-=*Vo;c_CKzS=>PM|$nf9& zVo~avDtOB{pY#%uEa@On7vG2F#Pm!It>kgrd!dBBfy-ru7J+8Qvsgk~qA<-xGT|!D z|CF5Pm0c&5%OpSDW7FLrbEPpZaY=a0JH98X`FZ&#J*DgZo`~YojSN&w0tEW%_2ci~ zP2X0x=X0-Rdk~KBW|eP!4FTc-?f^o?)h}Ma{<8%Lp|YWom?+pN3a&v}s;Jc9w>iiC z$^Z{Y9E{1-<a|xedT^jgPQs)yC=bztVo-!PNVX0wL@i3suxe(%5lD{0t)#cqV96~G z>}#bBU&-Fxvk-_r!j2?{exLFj$Ei1`Ukyvv^R?y(Vc1J~Kn>M%TYx<b%R|X!1N-+G z>~k)X9X#jwWC3X&TkV3Ni^xN{bY`6DhQX}BG*06-OU@eF*N#?ay&Z#%CLWT*bl16z z-)5aQeG(p;B)cZRb;j`akM;~aHYiY>FUCX+*f8BT5*d|KbL73o-3#h@4Ob<{FV{h4 zvG}d&Q^kfFl!pS3i!W8S3(iy82#6G!t-ZjELVXYLTVYlC4ylGG)3<I~1C#FNqGhuK zpx1wM@`9m*wX+#XN{Dd*@tH@*WoPBQ5Z4f7>5b{Ns(Yp~8nv5J9x<bC=dx84N2DjZ z))-?mJoZ0F<I22YHxFj>Mb%3WdsQSg00)}OR1zH3s<R5H_BWv&rhUxlcO+)jiI7D) zuf+i+7~ayo-_HemnTr5_*{WnXAlVJGq{eM5H79@d|7pQR*r1xxyavK`73{XVtMxm% zXS1<n4#N+Kql-=HEWC|h;mo{ERw~zaf<peVYVk_}c+2;XyNmW$Ja+{UT09f^6z=2) z6Yf*s>h;S*UagRVLfBPBkBka&^@mzNrxo5iy$kI;T1+2g7NuOCuL^C=n{zB)#*c-H z=o(pA<ttU2dL~zRITcrJ<K)e=yrXrat)O0}xx#tQ)gimTX0{rf&JJ{0h*7_>j<c+x z8-j^@5o9|tsSPUWxm`>ci4eNnXPT~C()eoh+Ou>-k59;2Zr$J4x8FPKHRH>})ecxb zhTkvRW4z0?m6h&NC$s4E#|NC_ZuMM4YK;f}L5L<`l?<{3T+Z@}n@6&~gR(<#jbSfK zX`DjRv_`_Cu%B~j>h=@f77N%^U_n+@zxvu7RVEosU6tvZ^dDD>^g5-EznYPadzK?> z8aID)TifhtuyFhRCvS5twuLGRLVTEfc>hTjnV+;K;Z;J-u*WI6%w?d>N*A99iiXqZ z@XjnesF_!7U+uuuSKF3GS&yq<T5<wT#9DHRX+?8h)Hzzf=`bCK(Y8Jh4=L{Mh@h(H z(6A7U`$MFcYx22)E~iBxeQ06flt`$psWN8y3*w5;Y)Lk**vhR|WlwYex@0mIt4zro znwNQcRCTB++kFT7r@iB=f?eOHlm#CL4?o*XF^yBrUWtoRFYBGPL$5XFwfx4VpdlQ2 zBJBlrxCwI{@XU8*)a>8WlmT~SQfAyW7qy=ReFl^T!{gC%p*D<-5^$?}FQqPCyx^!6 zE$x}Dg7Eyvz`CFCI45_j1A>_`X=<+O{<x)41yCQvcO1)e6_1aQ8$EQ^bEZ@k78O#^ z*v*V8aB*6hRVjI&rB`WA`B(Dj4(%d3*^rF6xSf!T-0=Aj&2#Z{<E`8^n!ou>Av^|j z{@qaxU6x*VtFxu1Yuba+u0q&xdxT#3Ej6o*X*bamqTO;oebqbz1YK|YQBVi7&H9YD z(++styy*^Kx@syWqfBbNVxOHk*BAPJ(H)#CfNEv0ymH)b4Vy=1F`Tqq+s(f60hL}- zlYhvh6|u6kq$c8pieI6{m2`xqC&vAy&)fbm8m{jxmMaR?{;{Kw6d*?(tG(Nlb*|cY zkTKmI+Nnz1{N)1d5{uth#6y7oTaVP)j!P$xt;3nu7PzjC<SlM5A@_?$xoScixuQNI z@MBjYm3|!^DY&tg8v3(w>9P8oIiWZNWW>t!Z2G(?9tu)*5_c^zR)S+*ZFiGS$((=n zU5x-ql0iv*pxri^m^TQrLEx<&t?3A)$f~PAuWN%b^t#-I5H@rzy6!ie6<OFUrZ-BA zUhK#35uLzVLiog=@gpUn-cZnj@GVmiAI#|Ygo*E1zt8ctUf82UF~4D~1Dj`NNf5rF zgLBXa&(iFjpevtX#q1N@@<0u&x2V4(QVeW6=u=te9PwKr$DT8OqZnpnIu#`hVA7^Z zqZR*X5jSHO2X9Gf{UJ_Knpeld6((rbLR4)4(_iTa>VR4T<ge&QeF;BuyCL+BZ5L#E zN0)O_C!3~e`1mel;)UuE&GHJ;fVr{t$<HOI$RMQzH-zCW(JKr`4v-O|O!dTy8^RYi zy52*<+U{T1Q3nQhAG`p|`1s%dB{g?Q(!9TXO~=pw9|;Ek)<gJTn9?K_P35oH!)Ne- z4O%h{*cL^pqyQ%5Gzc{+3$_3{QcMXEcVN;aeIxhzEx-4zxdvITlIhEZeLbxgTW`35 z=AT;L&CZ|RKPSBZz8uo{De}nX;-z5VNaaHZ2OA=)$8$iCgjHZGZdiO<UhvShv}@QS zx3g^73}-vo!&dekN(eO)isKI7SOm)VlM1iX*ge%~AvI%xkDHv(b{*8Tph}FhVPe5Q zIUz8%n!SAVBm5E-mnb-M7*4b{QvL5Xthh0DsXi<w{glM*)I$x&fL*!Q@6leMCdt_O z9?Jj(e9>`KCqY|LcX;nXa@q0|wU*8SUg=RpQx#CN8Te?Dj*iKn`mr3&ASfRsf&6=r zNVCo`28&8@>*qVP%c<mPHfv+?>PzM?VyWq3{js#|{_3dndBW;W3q*%9sxq7y>ko7# zTr>yi)>b3uEiqL1;tn$6KcY`KqWP$EIdS^q6dGEUS;yu`o<@7>Wxur7rCShW7XU+l z55geNoZ>)bFem<<yNr`dXL%i3WsUZnhAZ#-!Yu^Zn4!(ed)18$Jtt?fqS7dq^B0<C zn5p!!_t$+?UJX@(z9zbv0sM3-0!C4f!x{6~r>{bA;Q9NJ`ut!q1R`|7Z9DBZD~T&Y z%%}&eGo!0PAJrqysA?(+eBRS?q2SH&_UMC#NCFqOtkrf5#;!Udz{>b(@yZ>|4^h!0 zrnfoPqttcd?ubLe$1q)<hV3%lZ@Y_BT3w{S9{E`trVe^%66j4HNsMPsuD{jHdbiEL z-Ng&)w7KXFKEtbNrKGwGr@h}CDc~6w*9HMNq>(j{c`fL&vaAL{xh%Jng1h!PK!Xzo z4ke>!R^#wjAjXmG^2yqxMnYz80JGRQU}z;_kHJ&;9KW0dM#^HHp@9THqx`N<9+cIX zxkLHZd-KfKLw^P|1-Vn#1szZ{i17*A_p&$q6ypXzRl*mkC!7@$(>~b{Q+F_cFMA4| zcW~D<3=7m)6E3Y`jAnN}-eNOMw=}>lVQ(SCf*BW$-!tG>m;r{p&l!s1n4Cr$f&5w^ z{w|rkX-N0{uX<y{9nVdYFO3H5f6PMs=ehsi-5&q15NiF;f{J%ut%)uoSxW@fc`>|* zNA0HSIp0r3+Z({({cSBzcXcX$vkLZakAD8FJ+9!wKn?jP<$l(t)eJ64#>GY&_i?t@ zRY%v)zxR+mqCB!Y3_~i+)#+iRObqDQJujr>j7912uzk97K+Z6T365$?FV<-5F};}m z;QDz<u+57hx{W2Ec)xCN_VLD4wRZe^L<iN^{>uEFliim7+-%T|PP4lgc!O1XAyGHj z6ON$k)BmSF0oM%s{;L&~Ze`;xaF{_czK{K!K83ZLXz9ajvGPs!_ZdsZ!Ji4gB9!QQ z<-}a;wfJP;2t&5!?isnp!8nXyjovav#t^AwKt$D1Ixyuq9Y66{rM0t9S2}8aDz!Xt z_q|KWoI=uV!B*1BiP~I#@OUwbX&XU<6@VR&QF5p@*ilq}e-)LZ&?dQ)S-BQ1-ZtK6 z&%uhXnYrkI@QdpeC?d`ueTJ>nr8!}ly6k`q&lTQMv+Ey?Hiq!wTiq)&UT@t;X4t<m zQx_W2&?olGOH3__VAcmGnWa?1IBFabKjv0M98#K8>+9U5hJDaM_Tvm!Wms25A&#?m zS_v;`H328ndTtBJOk3uR-||cu9%GvX&Ai%(O%#lPES(0m9Xgq&5<%kmhuTeLJPp#F zUKT>45Eby<I}+1%gYxCG8xp5Au;2^!9$_qk5HU7gMa097zT_WKk`mj0nkP_X^T6>d z6kK!+lP#cekP->$r>d9`T(gJtDP4@8kH{qrv8P?O{Ns?+-y{@v462`NPFt=6>4Rme z(IsG-rWoG!C1E$Jnu=+8VwNr6-aav#z<zBtAn-cRsz_yd`qARQ_sps0rons&|8p1@ zv~wLIZOHlC5R(bl#Yp)ZqAWhajqJf21Z}bM{8KnYFXQ}(e$8`$L+}ntH<rFFnf(;Z zq|VRuMSdiJ?jo*>s8&C*jB(5B6n<w$t00V(ak~~M34=*<mS2gv+A(-Vd2owe6TB8L zBvEk8_s=x>zRRk+%I;6fE3=f$BGVl#QC_<H4e}s>S}c|VufWX*FkF^Gz75iM4Yct2 zTDC#M*vNR-{c{LO{>MZ3pQ*I}b_oBU_}^E<_<xm1_LZUtige7RC!>Io%qWpbBxQ)8 zQwK`VT5-!Dji!#uq{8R_J=4C2ef=sJU#eb&J`rwhn<llTlhllFG|ORrd%gTQwUx%t z|Nd1VS##5b_|yISh_IlUQA_kH_7TGmL!w|9vo9mUl4$RQ*eypm#U3w~FoE>tGm?A( zHpaOlVBbg=weY(kYp`9Vq()30G#;aOjBK43`EF|<A@)I~rK8u90)7ZL!mRG1M5$|7 zQ%cUUURis&QK^|ERZEjyG7|z;P(c4Aar5$0y%Pey3*Gc0q9{;;VlUZ+!Xbnxi@CKT z(Pojh&9v)MjkV}N4P&xgE$ooeWBkD0?A*T3PKw>dE!~jJgP<RiL*5uy#~fx-OLPiI zRg&R7T4CqlrMk%!iaxEGZdF;)M8AbM5j)~<c<@aCtsqf&=20eJ5;ZO^Cz}gkKCA#Y z-ul8DwXCzrB*|=$@VDA`kY?i+p}9vlK1inVjKtajY_~jAa_cvO?Rr}ou5_2<#P;!d zA3UV`BDF{3Q3=UzP+*EPjzoolN7E3NbDYWX@Qt_#ZTWOZ8BVfr-JcCQZBbbMv1i!w z$Y}@dA=!=i*_de)(%9r$GGXDkIUYpkp?SnM5>khjUe;!Plf=ioC;N4^Mt!K^rbxv^ z7~8++OwFw|PQHFp%&~EbVv+&$`xw-L`oaF?2<XX?xUMEE63oucwABdWFyd2A&S8pi zaWuUNbrH)<j{>GLIm3|sw&V0v+ImI#?coJU9<$6XRTIyV7}G3xPgO4?Wl?fiu|yB2 zy{F_FNBnP>CRZfi5y6Xy=$|_?IE6{(z0b88R(6<!tz}_Y$Bzz%i&;p>uI9=ZHl&c) z+~R6deTCujZx^+q;1BvoG5ymuqS{4+bw|yp>I$kK+)&@9LS;G|_8l^&IA8ucWN0T` zxB7%AgRY50M@i`WpgqcTGH51vJ2%(oRwG3~0Sd~+XqT@KRJ9jFnccE`CGJXBebo?( zE9kO#v?iGw-gdsJvx;_{S4CInNvBD$T&Ss*^a20!t5=)3lWnSGzrtheMmC`w;owsK zyib9K;N}_#1hpt4+OJ`8l|aj-@c$v;QoKpr8DeoMg^2H0GzSe+7>tY}gHP0OZH<f) z70YJPM;fO06#_Oyq3YR&?Pd{W40PV4(H2Ry@pBu7`5QfQgj(o+k77F<iW=37F4-ym zorQeMggB%H7#hKuj4X$owS(6GqlFW2%^_$G@{;HN4v_+ml20G3k6K~>XvvOqhKRo> z<;mo193b>yQ|u|cxl5wMD|Ss(ZF_;9@6h2V<+~-wp91Opnga*dRUAn!;fbZ(65=6a z1dC&{!*?pbPi8i91}b|P!Xjv{n1>9N(6F_~=re@gjTsRuK`_K1_D<bpts*MupUn;M z0*v2BDozfaG8<*?L5(US4-$~TCzP`bb})1iRd5Iq))MVj2YS&mkr*-wt>OFy6vJSQ z7~yX31=rx^CRG3R{I7!Xa$Bqehp%lJ<o~!W`_ImgFU+=}iLIsGzd1jOxM1B?78j2< zG`Gel!23{=N7w|=$RV&rNYg>k;z9gvWQ9;rZpl1|gw0@?(Z64LRY^CxKrSy?=_t@t z`TK`UZ<aSTR%|{kT{Tt=KJXuRrHvwZXkJX4UwK}&ntwgtE+WSeK>L~QSz+;j+0)!S zeS3y}pBJ6%-ng-Uj)A)d{?*sx%j;{WcSqh*-v!6uQ`sfK5ENBWEVXbFM7iAHP;qvw zDJ?BeEy$M^Z4OTl-&grovj@Qr^Be>3<Uq_$fF;+*gC#daMV}cy514Qh1nsEWqgvQ^ z#xMu+&wHpD@&D!C>C@y`2lorIqwRYk5TJF=e#n|X;75j`z4wd4<7P*qRdI+5k5Ijz zA8Z+jD%n#izGlHlDRbx2@6L3S(shT*J`M1yrG*}M2*R`LOQNoJtfmKfiSeIu+_$Q{ z@k6iJY{6Xi5a>nZNw3)(`c^r}g>fz^u@d_$>KPV`RhE8bh`lRhl71zcZo|gWn8wa^ zf3;;WO4|XC{g|>PtA<0p7vGKt*#%=gb=ehzJ5}NrJGX8Ndb<k3jY(N}yUt3K;1H$~ z!$q(zwqmXL;3iLG{f-g!5XOZ|uieIeUuR1U)|(1Xj=WyaWDvDp;ocy92gDE68zzh& z$BQ&79ZG{0*soT0e4`P|3`9AOyN&Ky@HN9q#d}Z~{8f8V^c}GL`+d`UlW<#m0p~Yr ze87zG<_h<afH%!d=+q}}O&PZ`_h!87UN4UqK0Cf)#M7NSjs)?i-?`nnJK%OL@PsP0 zIgNKH*6)UVPZCIc;m{b~w9tgZ6gohDpEyg8_>vI!dosxG${l4mr0*Q+5Pkm7)DRgp zEf~FeIHwFK<O@)JVn6LmCqtV~Yz4J$7sS>c3@Qi^Z+Ke26ah#hn9sFZ)Tisnv)yR- zlvy0)#y7Vi;m=12N)c(szir8F;n51;bu8%<Ne)Dm&;#Z4ZAshax0lv8@k2|HUJ}+P z#ajA9lVd;>_1dMk3*LTtx|eiw5+DY;CEMe*sdOZ5Fal0toS`Bq!PI6685L5)R$!Xl zPIui$V1|u9&w62Jt&s<!Py*P|c~G{5GvX|Ax`Wv=_C3AW1-UHf*2I4{u3EG1)}mG+ zoYkcY=BL}lFX16We7JbZ`v>M5ulxc^u`%8XbWCq!FT92N=I62x1!8GLq_Y=gvJc8w z@B*UImv93)ar(Z9zHDfSr?+Q6FU90}P+;#aMOHUv8wLC>VVK2~pjH)Y=|+y2L?FL# z*%X^BqeA>9p}g^`fmEx>OUnuMP0Up$%|?{fkx6SXlj^9C4odvaQhWIta&dk}VF6#5 zJ>pHGyd6czE;%{51?UF_?GU}#rnvy6K&9=Q*SeLmWL-|~q<NkCB_JA7Z;`lg9Odk& z9OF1xJ#nY}%$goACOg;C$!w|MAHKykdYN1{SiqhA6o-=C;Gtt+nwn0r`>K`8$-N;G znP@-Q4Ds%F$i$(-;E+8Hvqtyy#XY5pLFFpUlvs%jlFnIIV_UyTit9p#hSW)sU%zg! z`x<sf)NfLQ^?OTL-C<)A;w+vK_@s{#8{P)FNEU85z4iKQ_U2*W!wU}%+t|$p+QEAb zyb9UBvFC4L6o=LPsWy1hDcXU@?F#)7Cv8eVe2DEiAt6j6GrbX=fR1w;x!JlJayq3O z*M#(|iP^6sO<<s?u7&~y5xWi{wxd!z-?Oqp7nx*YN{5Xu?Bx37Mm$QvBt{V0+*BwQ z_KN7%L%lHIk{VHeXdkyLKwnrPejT?fye7`LfoxJ8zhgQ}5FeH+f++BIm6$A2(gBr8 znF*$%@?<qR-@M%|uDP_Kb=U&g`O)KnMZn6pE}+Kx+2uVrczb{y@SYsJJ#<a^tc%zk zvaNn2i|FgeFOur%xS=_Z2jj{h86;YC9xw6r>(up}SU1C-Bki~iZI)QR5q~y@OA#${ zVtI$fTb5^i$NBt5<R(js7857pc^2ueUP!{$8`eECsIT-?q2n&yufJ~(c&`fX?r*lZ ze7b*vetjeP_z3&_jI13JGB0Er^?-b6bE9jO4i(OGlXc|2x+F2bg`#?PR1?s!_a9hj z9hf&kqFO@`#bk4y%P>idRbq;KIPn^l{S5F`y|KsbnuNM_^Ufv~S1j`&KO(yfA#sS0 zPr0%_0*{d75orqk+v98X{Nuej;P31W{(DU@#f>iH_WaGycY%K7TN0&i$qe$+9>u_! zK-m?i+eTQq-I1Vet3E1#XleQgD!rD|F<cY`)ll6gh2+g(cmjg!gyMj^tPD!4iN9!( zXfGz4ynPYD(tyaW;sB}aLD*<|Dsi!u5iVavn72bXd2s|zcxqXgrco1dM|vvBky7yN z0FPpBn2=&1gFV7SF!>QYVe8^ZV=!?zYn?#i_l8)dPD{8>z@6r*n7GorqW$Z=(GSr^ zS2W-TUWB{sbV>llZv?1Lor3|5SN~@tSz17ZiHX%I@j8QHr+;dSi%IYuXSxRMd%6a( zoa%s*Y$iEnWP60v<cK8sR9%@$I-j<rIVpDJ1)2En^S*4WJI<lLY$m;#g;8s&?4ZAB z^s)%mIQ^4JOaWK@gvf$;AD=KFPCkq|49cDdg{ebu?3W%K&g!8b`Ity6v6_WZ5#=#B zpqJbhL4nr<%_N_mB+xuADSR<MKml;7P26b)O!AJKoQUzDqIFnd=wRZAo2;A_DaxI5 ze552(SE>$9x$|RRz)LWz@#;rQJ<ytLZky14ksGsj);FUk+GM)5Zq+Oad&n0;XEpjo z%x0CZwm_AyhmM#ZC-nljWRh`p*W}5Xl^AK4MurGGlCQ<g0L)In*$Cc5DHtdnUE~Qh zi9%_~W!YOACFDZz+sCR{I$V+)P-~9*iSr;tQIdwm!Qso=V47PSMXZ#E*<M6xnIRU0 zI<eGcDSf>ZFJ^!kJjJ1REO`-ZvJLR%`9~%@NH`9i!ZGKcZ3nrk$d5`b3@Z)qgugxK zL?}Kp?FN=pTe8AW=0pT8#$4C3Vb0gKDcjGc<O+DJL+xZCL_<v|D3e7*V#r<RRYV}k z+C>S^agq*E5N+FGcsVz28a*EP3OZBrK~4>4hAA^eTv|EY?n5AxPzyRyONa0Y0@*@z z<_N-YKecqZoPG*R8`};hpOO2RARtQ?S!dU*oFVQ;qoTTq(H3791{l;&@8L@faYYj= z6`&$Q8Zn+mBm-5>xX$r#D>BYXKkJK4(P3j7g0o;m)hKDHBE_vpyiNrvr7@EzPnq;L z?%%6-Q~Iv-vf|8UO{mr967&9)OVoH{QhBY!;tdG|c?6W5#FCtX{;>+zoTq(|PcOL< z=iA61K6wF<_r^zK#Xi&Z?n7YQnfJ_@iW>hS?VMpXyV@}g+>5ivfhdxO8-}o0im{e> z90iNoD(s?u5t;Y$L};23HJ&r6U!pl4V~v**LuaP-jk=J~A5az^+7D6TrZa7y1Ery& ziFbU#ze01E<&Hel*1f4+>342&LdyFpuPXY@PV0cu2CQT!r5gX;7C2GFj8?U@-aeA{ zlf;POdSiT&&+fH_GbaN+)OOF>i4^yO;V0uSr&g)u<Lr*1#ctG^WnmM?*5a(?3xouc zw630breD@;-;)u|L00`a&jH%(hUKy;b;`d-rEO6*;$tE*RA}K>CpG1-ANZu-jfp=B zu{ga1M2FNt?Ab2Wwn2-{E;6Q_ndf7%+1MAVH|x6E^2>^Fh`L>|1wQ}uEb5-EAZ*vh zUQnWIhNx^cKaA47NMu}8l$VdO46g}9-bPRB5uF#QN9Bc3=9_8Ow2oDa>T+tY1ijnN z?vUtNbK6Ja;)BMsi2p9@H^_hE0vCLd;+daYfR2llnG`MX#<WbrLih`50uawibf}Lm z4TExKqA4mb%d3lX+C9*M2T{}JR>WqvIw%>%%^^!vWx#vDJMxwuPpSc*e`b4_p*N@V zk{10C3tw1j;=31VO_O0F;C5ag72~^5*RUzD5SGu7-A&!HG$EpTjDi(MJhu{JgEZ+u z{~Z~*g?|yD32!33DW=ctt2Y8wTx4SaTL3lZvY1GFqtYpA4v_kM80u<~=}BC>G~^tm zw~fEefzu~$BQK&WpZnQ=GTYF~LYhU34gW1pIDl2wvekawf-Qb@&a>Q5Cho8houkia zoQJCq+O7$no@u_$brv|wUqL>J^p?@*zu75<7$hg3yuxl<UPc_d$GFdI>|h&c)6`G< zGv!Tgh#m7!e57f|k5P^Td5Af=%ntMWv=<i5XuA5bza%Q(IR!lzk&+$p>IuhwGM3GU zU3MlK_uXQ8VlU4!$NM&=?XEMRZFShRDXSu>D>NoHv5BmmnH*X@N!Fxugq8*Cl_~{W z#Slc{uwLXQi@HXI*^!{Cq`l^{|C)&sSVYi2lvu~jTNgmqK4P{S`yzE-;&eK0N-Jc> z%-8m-RSSQYy&V0ac8^Bz0oKRk1wg5$Iqls-4;yMVXrO0kLVC+CFNDe)2nV#<r&~0= zAt1gk<?19y^`gshO+XTrk)MNu2^kdTsECPj#=n{Bk}|VEmpq6u3_MNY(|ekk30AAU zESC_GnTWwPH7+!3e0nNmy$=q{3i3Vl`dfq|&M{20TgBQ=RwF`LYazM((tr>4tv69K zW~2Hux_Xr~^&^_s3}Q5ifLSAHD7ZpM7D-d!FqzN+>M3k1ytpm67=KcQPDS%?Q&JG! z9ZB$@H~_t*ptY{8E!-CsAHVJW0L+l11^2f=u1adFOMN}9oV0xd`!btN@q)3B$kY&n zugnuxGxeU4tPU~#^3IQ&WGLUGBl(T@xD0;a9k-nic=zHC#f@_OQZCzQIPvCtT%a$U zG5G1i`sBqG65<rVfy^{}O`@<p1#I#>Z7D&-;Pa|Bn}^0?08U0CLdmh^SA5c6%lQt+ zgWrR~ZZr=DwP{k-j-on23LNA<BS_-Gzc_Cgc)(y{!2BX!zdj5bW9BF1d6lj;fY>*Z zxG?SkS|vJ}Ncx3p%%D4x93s4ZDLdmwhRad8GxQwWv>r$Ups5;;FgD-@@_xd89|mE= zX&|D0t$AiPJn;DwarXQ^AWbRmj?sS7c8TsAzl3dp9CknsA0USzFqNAlGZl9Y`Doo% z8oEdM2r!=HeGDSwsq%TvTQisAd2@)5tkiwk7~$p{{91EB5VoY;?Jy^LuBPB?erqe= zDf$74aiU!6+wj<v$z6JFm)^YVd{#5==J^N8;E&IWxpwuvaN?2jLC5&i9b3A5(%o-- z9{c<k7Eb-^gBRTN<M9_9xapL+cL3*88BdP%-KirVojO6P1U&OWK)f^sIZX@$4btR0 zf3iSaIK=mK&5%B5gA6&}Wsnu!dpE?<HHROD4(?`Bpp#6HCi<QbX2^a|G7m5lIDW13 z5|VdP(Sp6n{R$^kxPC7P!db)OlOTYSLT=f~UyyDakXt0RH<Yws5<Nzsj(hTQuX*u# z$r}!CXjYcw3zn9pX^vgAPIvbQfs#CS-N<HWo8!vP^DWM?(9<|C(GZzo&bbJNAY)I` z^y(%8l`I~)S(@So7{77`V=JI@_fRS&1;~{1yvpYcXzuVm6l_0J{9NF6^<sbktJF$F znO?<}k$o*mS>3a0pHx1cypY_jc_0Mt_=50F7^nrV-x0}7d`{*nw1F}oY&R=tMq0{m z)G^0DPH44|hWwd*ByeNXeN9a2UE@4!e`jk_Q=BN(_z~BeSN<%1p&)1soWjh-i_vTM zoS1niik|Mq7Q7!!x8|Umqhn9YVJ*x-T@nuqWqS>jbED+8Qm<FjY!P2L!Do{E1i~Hj z86{uL2qeecl3JBl{%pdY95sI5hhwzTf@MAnEinha(q0hwouG!!UOKeNZ7u$t1-C5s z#7Vx|GLCm*8sGoKO1^U%0J)IWultd4+hsF!Xe#HS8NF!g3XM3WpFJ;cIHJ1O3T)Aq zG)M@GiTHzG=JjK$>j}*Ydv8w1aeiD0FfnGd{K5a*%Y*ObF9ta95JV@*uVOV=$=RDJ zBifqwncaSQ$h)27?$LV~^;yO9bj=vJne6?*pu-QsUTFF3jESg;CUKPZ*B7pJmMI8? ztC+)#`=}4n;J6`_u#XI2X0F`x&__B}o?u821!q76=rc-{H=KYrRX|v*1;NdOXquIy z7#!Yg@FEHtlJ7%%rp<(F?y+<y%#8l1{niap^b829J*EukL^^zC`^uNrDsdPlrGlA< zt=4MM2Ex?^5UV1pgsExJOa<fC{W4Nyw*h!jAw39owt(Ue_*ekkgc43d%x-xaLhXCV zZ@nxq{sv6$L7cE*tl4_Z7~Tn$*wRDTz#FDqBAhg-3eGGc60H-!tXGGGUb>#tU52Dy z@`bJw1nI3C*QTJo@vSqS{O*J}Uf1)7x3%vRZ9?8P@*>hPLhdbkwBBWUdjJ-Fn6-@g zAnV9Fyy3p}-%!2n1L?><&o72|px!EOEZ^{e1t0h=qds7Et{@wG!2YUe2VlD~+&ADv zu$RP|8yDOTeF))|YbM+ims<bNXqOvKaYFAc2T-1!mTv^k8z3Lic)Nzf_&1^ZcJ2$e zDBqlUz+w{cd3W8Rx=!4|vz<G@L%vb$P*L>w%_D|n?SJ3R1QXAi-%b4u)3tZs>tIgB zvv1>Xo`u!pG!?M}dCYo~e`n@C>Ve#G;f<~5;Dgh3<PD|g(gjz;*$rJY?s)RVkmT&b z%_F*08o!{zA!9i%T92Uk&J9N`S%@3m>i|rc=t7=W_^vFeCEx3G!*dWTgFDF@AH1zY z(q((2>h3QF$q;?h2}2(rV%Qf4U?X)?7jEU*C7yaXume-e&<JhMI>NneT+-R!qt$G= zJt1>Xi{QlV1k*22iV+{c+ng#`-aR)t9?yL0XNQRZ@3O@7mGs#HVfT(uL+Z&No!^2M z_W#O|uLGWu<YNCi4%3Z#5l;QaIO>K!$x^;2P>~-*HYfwzR^9Qs4tUZ{<v#t%A)2jS z(ere8_K40v)A~wZnR$<TAQ%m1PkjRp=_4_M@r-JFOSb^Z%I`xsl;FEih`d-LPS;BB zBTh=QPKfI3de&aL(Ln{8vwL#8Dh#{>H}I_=aFPbIJDf`#YS3*)K?i2|1;Mu98-lvH zF+BU=7-KQrfPywbY*0xsxRLGHP02kiDDyIcJkd+_`~)z!x;KsPwT2!dnJWjb2-O+U z42IYO;HQYXx8>TnQq){yi>DHn8hQ#9rM?}UnBO?<<${#&VBJXX8PY_C==avZvP*9x z8O3Kj7m6##PrE?$L$;X<g7JkEo=x+^gm)5NH2ty+pK$DAEy#Qt@e<f`_8ZZS3QWv4 zmMpAD5HF_XfO@j$gwRjr;9vH@CXnd)C8@@|4XcV1S`zyUg(mP4+0te_p0o|~Tfip- z59y8xLJ|(PjwOQcx8&?k)YG!s!eja5d+*-(?8W5!_ZMSe!x&n>J|7e!O^DHVmrqrp z55(+bDL^f}HdX3jsPrJl9@B{Uk1BTmaHpPNCkFydQt__)QVw3NSc0TNarlG+R*f*# z(Z&ajyMH-Nh(vxoFkpg!2!Dxa|95-)e^%K3&1v%Ar3R<}VA{TjmkdM*5sI}|bY)_& z=NgR>qI76^M&N3FN)1)`<UdAxz7W10f+uEAhh85$`ZLq_D#@O5^88QsR$iXlqzg0O z#it~<vYxI!+poV=w!bfzZXj5<#^`N8S$Yyi(pbAbmq=>th&<3!%B|#kF~ENOR^%?e zNjjtdC?&mwCrz-MgEpTm)yNPKW**MWD0MJX#r;RPM{DbRWV^e5FZ3iwFmgc)R==S) zDV8ohJRAZfXK*scrqq$Fb~E_{nt7-><^zWAZ|C-0(;(}$AfjL~MV8J3&fw3;$sjeL z3pYhL&kw0!H59T*pcEO`p9ZQchq&sC!Y$Kzwn5ck>#|>zOCdAN<0z8coN%>t#%tbl zKj?sNTKcsCvG~HxW-iN#Z)b)g!4tXB>uhfG$yXkkO~0UFNIbHcVA{K6t)-xPMlNQh zY_{r)Ozq9Z)DiVCi;WXZM#$d8v+G9_?ZarX1|pujBsH4VTe=wNY|YHx+YSz7acr%F zjJejZFHbwjXq=5Lg?>PvQs(MskI5#Pg_`1jIm$G0JxbXQ1TBNU<2E9W-@>%O(ud2* z2?~m$7KhJEl)K}UsATr$28d!v*HTve1?St#P>XIy*d%CfAwpyF7uj-=g5BP)PHE9U zpqEFf>?^i*D*96AAXG}dB!Yg`2bf~e^T6o@`PCRfK2bqpRA?yQGD3ZUg+-JGDdNkP z_VRX=F>-dDP7gpA1(k0hyHswH!fS33ch6cNZF}{#n1a}jTh!zRn<*1et87lKHzrSo zmQBXC%bxY1?!dj<#-Ur`5K62w-NoXLy(8M!B!CQu>#h&<OUpUs?d=x`ozvIpd82iI zy{1Z-SPfM$8mPI)ZOd0@_|UwZmo|CRFOm9h+h7of4^4)PNc$5B`$u2(;7rJuO0(-< z9vsugbD@>Io=dsQ^*EIx;Yu7uJ`&5ZNW;+I+|4XB9$VXoVm+I-+n^d>%3)qJ9qp-s zb?7~-$KhGD113%v7Gyb9s_XBF_0oqDGzoz)Ts~`yh^vdNtd%;9Tm`iO>shWgdGjcR zk2c%A$EOD?L622IqGww_XYJM)rT1yF%cGc#J<&3jHYoy?1oh6M7u@ALDWHN{lGG)K z^(be)*&bAwglw=LS+u~&UH8zxg6BQDa%O_$vy>gceoXJsTA<7-r#~9z+jjnp>Ggag zBw1(=yYc*<n%@`);qP^l*T}43C;a2pe@8OC@YEj^K@FjvrIUeV!0Q>FSbm0~J8Y<> z-rwT71_m{ZeYW0z1uC7{Cf^>9x}U`PaZtNy7Pk*`?ZA+`-!tev^5mcgYEK^M-eqM6 zFU~fDdQB><&4If$1W)wtZ@kVi^_@2}w<w2nWSm?tagBnINa~=d)kW%iSTloM&9h-7 zB+IwL7hEk1-S346@jHnM1StyNSBWL*<88tUQ-J80<c9MtPB-XdptM+r;*exjyE=Y{ z{nP>_JG&T}6bA7cLy+<CaeDB2WcG#~1R%ICc>Qo&3c%Cg0Cp1J(VAqUJv}5iAf$Sj z7-hKO{j74NjSJ+={=Zni(2|R0>0eUZ+gJVA|8F<nf5m!|RNvIm#Q~q>ur~GdXo@$2 zjb+8;!NXeCgaASqBX~p&*qHD}=ih0h@EMye+}6ADr}{HFr)7%goR2DAueH9)UY_RY z)NFAi{1+1!KfRyY-HxU@o{vjPK<M+6dl<b*Lt<3F4Qqhq80hqpVd!E<?AK@33^=Gx zp;K2I{sAcl@<tnS%2%}b%O9RGLo!n%8L~xBtM-iyGgACKDw>vs)TeA2oN?N&oi`n4 zyznR(!g>93KJ-(#8L=cEE6|)X$syQIvGM)hBY3x?KS=Kup@g)&gVw5850!P(*_svY z<rVCyHPz}<vRgXYIE)5ix&F<;rUYo0M#OfQ9BN>{<@oHaK;vjXOSwj5y3BH6+W-5& zR~kDZ5vKuXcy}w&_L;9_d-msygnl7HzTVDEY7zu?FM+M&-Sw*Hu9}bM{DF&ME0U%d zPappuC0PZ3IyjwJdQ1qlFrw8jiK+gfs3`5c@RSOse<PLojK~%e9uBU-9>MBMwM*Ep zHDL;Iy~9oVt`cH7+@PCN&O9u-NJpiyP#b89Xun$+jE=nkgu{WP!R;Eb&HwycE(evY zyGI~Abj-#sDpfC&#M_(<=Y923W?!+fPgR};Jh9Q4vd|dBA7f#z-lf@4y=e?)^%kyV z#iq1k5M+VF<ru@I9$~n5qfH4eSFs`sr*UU4go1a&fm$x77kyfupne)ef*!5J@zw2z zvf&DQTa^fAu2!Fo=p70sbI!??_Mhba$poN<h@R(?ylfu^-Ym)*k92xi{A2BFrZ>N9 zw`llwpWN1izZQAROUrdXn1xhTKL*T?$~*PU1oB8RNxd*;+FS?DnAt_JNi|g~);LLe zlCBepWt6%kk1*126o<AEt=map{_+wrJ88oL+D8z*y|&n19^S~Jx>6lxmjdgAcP{W8 zC?He`dhu)S&pTb4?NV&`J%|=Zg#v$eoZu99cxB#v@wy$^BhD9$yws|>OH&X8qd&4> zDv3qq`y4!piAM`<?ETEnT&VJ{0b5Wccr%NHf{9048#Caw8#mx0j>xE+NQm2cbr}f$ z6dbbq0w)_0%<fn)>S*!w+?k@qup>z5I+4!W{NEoTbejqD+vP34XTPDMroW=Gu;j7< zzfT_p69^kWBY_M5<c)D)2oOI>>LcxUb$TVZeTjp5b<M*k4;1Gh?tQhywlmlvJDW|i zB~BYsotSZA6THsIEHI?T%AI{qRC-CH_34GlHbj^neN?Z1kFxnodcMsV!OswbwKAY@ zxW*}Ek=#W)71X$9g|Wk;Cc!QeR&vUOPu>9|CYddAZ!beRgOOPh^3aLxp$h~5%E!C< zy%70^=mmuOg#cbU%op?@-_j4(7lrpP-_ktv|8%$f_>Z9&L0en<f0OtR)xEp{ix{6* z6Bkn#7XyJoAmhU9-yMWwlS1$|L{R$rC4>}UV4hD*m{(~>uL3t$1s1djDIXxiYXTa( zB7UruUxHaFTU(-96KYjeHL7Y?HEFG{rDy@BvsP1sY=mt7p4Gg3Ja&DB2Yrse?1kJO zulwR&AQJ=P)JFx%y<9((B)klW3Y6vtOU^ND6lSCD0GTyAV30ZL4n$o&84&=Ti8pD0 zPPsurz&Jps+6cXiavu((=;UBBsiQTVUEOJw6^`vrG9`e{`>wI0HJV*pRVN1T`IMcy zB@CP+#=b?fH$}y!-}Q%GZ;I+hcnxJsl)RlfFeIGY0jt@KeYsP7P`ysLx0Cv+|AUD@ z;U+gAOXt)YuB&<n4~{_ThQaN^)y{|)i?=Vsp87dCpfW%g&UJi+WM2^{hOxzZZ?uIq zLl8l&(jeAq67yGH3tu)%vI*Lxm{sf6h9FIsCv&-5<&3fe-!z?+nl{g*f@Tg&r2=gc zg?1%d!J?FiFe43WczPHFU6HU8I_&SIG!<s|2@|`%8Qe;C<vInY;!a+>2RoR<f$>O_ zh`4eBk%Bg#s;#0Bu6q;Oh6$;`gt{}<j}&S(r^3xF2zMpJLWgk)4u+HjTtfi*DfUxq z4jq&ks$~|wXLFnpb^`L0gqA}Ecf&$*TydhLQ<gD&&S=o-O#UIFtfjcNJn1M)MFAlZ z-8lDGx4aN@(o7X3UcOif27AIcI0ydS5r}xBM8gdOo_Hzfkl66J(OpOm6G|<!)7eL; z&iUxh$l*)U*QQ7UoJpoGl6_d5?V_&^2-06|6BC8`Lwy|b3Gp2esbjL%8lj>HT1Z1G zSqCQ4{ZF;(Lr<*lAa5)@K_9r;L&&EWe=I`JA>0A;Oxd$HB=4zTTkHq3tRAr_fhhFU zRe#)SNlo4|brQ_$GYX`I6IkYihCdIqoj(nD|7i8gb5!Q+X+otSiuXG`<NV6(7hw7G z+kGsK3M#K7+<o?jN6!G;g`@6{=@uzGE;wgjbn88Uy?fyX?Qwo7oC=Uih3ga4iK{pC z8`mdld*q))kGpKYeO=6+mR@6rY%>_rfdCJ_M7mm!jOz>{{rnAg$CQVovnMmpj1g{h zb{$c6)0jy|-tLoof>G%%-MiorA!|pJ8;2*{QVs{Uy@zV9tUUDC!yhELx?s0kbEL-~ zxS!!qChxNS+pXCedZLe?dAm8!SXthIv}PRX#>`+y{r)2Vi?ny@&NS+_wX1@PZC7mD z6(>(@r(&B=Y}>YN+qP}nNkw1Yy}pCJPS!fu2eXYoaJPGoIr`{VC$j=iGs6~NJ2L{M zbWA&K5#fmszupHeQ#({HpOE@pq?p1f{44N>CYdxQ0B_fg*k~m*W<t^I3f`80f1sNc zcck7h)!03UXKYbP!9qF}YCY+oBC@dYQ5XWjelFH|o^BmmXfOtbXfuj03_E=pTb>F8 z<yTi33>)Tbgi#Uv>hS@x(2jVc57kl+73`r!kQ#v)g3=Qv8GJ8@EASvqd^zjRsx%fb zFmJ}K4Db&Oe@pQi$}=8=Ts+S}d5#+@gqbqk0k_p<wU?-!(7_f1qlQ-gW0S^V$uMWe zYYh7%NN1)tP}Zz&4^K%`ow`=b)T9@bwtlOipmK5EF-Op{fpeO<bMZl{CDI8i6NeWp zEMAC>9xzeEu~~rp-DR>iS$EdY@2uLs$JicGsXglb>ty&fOMp><C#5BIf^iC!AN7MS zH|w2H?KIJ@Jo1k-<|rlsa4z-8k<Oaf-^mF)6gMfk>i!~%E$($IBU58$zBlWs6%H;E z^>^KD@;o_O1JeMEvRtG!NWZ)zWH$nwTO2a|peugQ8R0T{vCd_VC17aTD1s}jteU-* zIUzQ;sHp9A5p=O!@aaS)uGLM^hEXF!6B{1i+J@rhL@pJU(>Kw9=Z*&tS&!#q7#s$y zo!+y<^|ar1<4*=>kULsAMD<_KC!pNX@cjF%lNRPuZ~>he7MmiVI17N|^j=@3+xVN@ zu(NRRwnN`EYxx$NSdsE2qP+ySgpyd#8OsC7sHE^K6cc@hUmWD|fmighlm$k9y2M3# z3;ZdDwkm(giXMHR#hg{_XSlp9uMlVwNBUxHgBxn7PWc0r`)}x#D7{1kp|QS32<xA7 z{$8af+(pX&4mRa33IW;0HYHDRot;8mVi{S1=yp(g&D)70v!LIWf`|AmFRE9jN2H7y zzKDPGh*_<n{}!(_r!I=T>b4KLslxZHAj9>Z;WPf+BfIO+-Mac5^<TV-V`L}KY?w@M zUe&ZOc=F@j!e{WudhMTnuNz4H7-;R<MY_`$7QUtC)r-bdkz7=m&P+K}1uUK-T^mqn zH^LBq*rVsaZ_$V*gVo>M&thuaMi!EV+abB;k2&LR94CA3*K@exczCHFxJSim)Ika# z0J<}#g`?lt5)SN!mJ3eX<<Vn5?)YHIo5)|tjO{Lp6)+^o?PA_)W|NYh0i!<=T>d<k z^XgS&E&&=9=w1HME*6P}x#8W|LWJ=-<(x1;@Zhkn|C}y{2MTwQANv%~WkWc#N8OLR zBN~q6`56X~yF}P9@dp_uYO#&62g>q#k%sTrr)VJWh|QBE3_@w~OmgyW&*HBZiGC0i z4$-$lO+D0@Kmdr#;7p7ORurZyIT2(oG<g!F`v9e4NByr2DoE&EE7^VO!N^{i`CgpU zBNCw4p>m3?5Q`sH3%GGLTVHP_869}o1d4*eyq)3o_d={Df0AUe+)9q%O%1npa{pPf zV)=0hRUjSf1~vS3lX3gWT=Hj5s8>f215JXU12ak<^C!RP9wxT*kZFc^y&^*pepKy) zX~gh3i7U)cvb+do1%5abHCD2^d0QHbK9Z(5aUKXXnyAqVJjIm2eRcMtI%&vSYKBOw zK}Tn1;~IB{_|0IHRh@uU?uG7PD(4^dVDvJ`qC`XyWC+pyqkVu0^tF=f0bIgBS3!33 zz{nJOt*F30bQ)yqp3=U|5|pbUeLeECz~I^6JierTIxNuDx}_BP@-%&?dlVUjNd~DL zaN~nm9Euga>H`B*c62J?k!r+QQT2mp9AcKet@_lCjQ+;Ag2IDuvqXG=k9dXwmsu(= zSRs32GD<aSw0v!Be|R(8xH*!PIYUQ4eT_`mZ`#GaI2jR94PQDl)+I?S%NXmzPdZ0Q zZo8}pj;Z9QT@W*Vy11-<(XgSxx$qWYH_&8&%^s6mA6+uv0NLqxR;;UCp#^G{J-BUS zImmKLTFt7FTy_uoGMm<UTlBwR+stz$t?RR1xT=qq*+(90`%b^~*Zt`sUED$H5K)>! z%x-X$;(geW0Z+tn)5;K{-3nI<9RdT+H1RgH>NRfEuzvlD9sn?8b_0Hoz1cqn)s9SM z)|3uVgKd!mtx0jzgr-NXxvxeT<Z}4H)Uwr7j7-hxJ|I7ZUmII5=5cT#5x-(QoTW6* zh37sn#~g)!>ribF?LBnBXZLbKlQGHfZt4g>RTxdg_YXIdaE%ymG6s><D~R|c`xc3a zNkh%fuGaZMfNO=iKW3JSSah6etz`y(5Np+gU@@ORfbIRq(72jAqN1FVoOfl!lUF-m zPuZ8{zCIQn1Vcn5kig|V8693XFJeHzGEhsm`6Du=p_^n<_WvyAgZdPd20(wunPdD< z4etN$`W7_<{<r=%Q5D8RQyJ?ko8)qG|0%I@vks#Dyott2oq4Ef${D_`$$~k~nZ+vC zXHVOGStm(M!n#dauGlXOI*i8<1<{U4UYLSLQ{dN&pgiif4U)(pc}Yn~&8;W<Xqx3I zSK8lh_bHdI`_As`jQfMx;HV#J)NCBHk>8~9%K&h9T*&`0%g_HnRq5NZ`ad%Q`TY?X zT7r5ZuslL~gEPPPLT{&{#a~K5m-h{1K-gPsiLLGTj6F62sW$cobS@lrP+As4*KN7y zJ?EmhQyvthY*GBVwO?4Cm|r3S+B4L`KxI78UAVv3;I<@ovXBiw*_h5?BHC2@FfvPq z@qaz9+VOjnUjlu)5!UQxqF5Yw42Si|i*68M+*ShVcag}WcH}Ye`}cYN)#3f!y;jwJ z!S1piMxoimskmg%1R`(i>unonX6ZX`*Y3AF^Gu?9PDfoccN47K3UPZG4o8!|3-`&A zzDxBq3T<zqM~emRx9fwT^^PytEoL)4gzy(cH9~Uq{S%jBRe+M-x#(MrOf?gZjC|=A z6^xE-IMDO6OS2(@M}xAGT0}W}3PERRFjdH5ik6j=#TIV316vr<<zd|0&RT0#WEW4$ zC3R%gucO{98Fn;?_gPeB|E+5gj$l#If<ND;ID4s)7flM);(trX%9JxFnr0HqW}rk4 ze&)|Oc@s^tuu{WVcFB+@^oc}#Mi3^J9{~8*Tq8Td=>8jjTn5bf<?eB8?yY`YkCv^1 zR6|B!*1m3-jt@)OCDw-*dnstIAlzpKFt1%^{ctKjUlq?5L$80UUF3ufE)O_rT645- z@rkRB!^c_H7v*8xJvI%1b224oL=@KMZnqNVAgMV~B14u4ASn+;(&sD=aYgN`4dKcq z1w%hzCaQEa=<A-;BBs)$8f9rDA2z4RntAU?dw3?7USpbvACq97QaVQVqT9tV&iYd5 zt0oyBeb?w?2AQ(uNyMCMI>|sln~$|N6fx5BfdMZoim#QFjza#6wQkF|sz^d@^#1ER z8iv+?n-Lh*dyVz(+e?7OGrc1VRO!n$dI$GToDKH!ePv#y-?d@-jKVNH0mfR!+#<Xy z_H`R}1bC0XAbe8q8ex6)QzL)U?<;qRqK|Wg8PxsIK~y`m!j33TFr_l1SZ5t9cO?e( zwSo(49u1*B;0~k~82x2aN)u2s(g&yukVYrXQ$mlcfl0tXZ=k{Lql8MPG5ky#&C^mE z$x~1o?VHT!%me6dg)(ku%n>K>)um9El^#;a^CmH|{H>GGQ-V8ej+<0hpXd)yIB;Ea zIHT54)~#(0m0A_(B?k>Dk29kQ<H|c@WYXiKw!|TIr+BEl2?4KDqd=F?ucetnl%)7+ zm>W_USCTl$)MVSLMz}K?f~`E<NF!vWmYRc0xY?m!Na9gfVvt#}MTV>}t-=<<Oj-*- zkL;rlU$lHz*N>!`LboVg>5%r!FUz$(rIdFP3>}<=JOHvIld~en4svyn)f@#dRNjmB zt-H1L^LFA=6^d728`bKtKv_~0u`{X!EtYTz8mRm(J*kag93J<gG|Frqm9_e-r%G9l z`j?LLtfZk{a$-blOfe+Mvv{4obX1mHVESpifzTh|dek&qtBC`Mbvx)@9qaUQBI`C? zwyX?Ko17p4G0A8Xf~M&NK9QZlJ2yNzIX&pCEiEElt)p9Bo+Fmfxy3<ESe={0IR<Nh z_JZ7n{jrgCAuOsVU(xZgYlhGe;@u1!smr*T<mL6$<1?(k*A+7{$!U+5JLFVS6=PVK z6$`=5$IY{EyKN*xJ_BpKQD7Z~sOy3L>%}}h&`@}FknbUI`{S2#RD6DWFdF{F$)SOv zF~B*dx@u*27ofl+q`@R1A+z;}#>o$1tdvJP^_+5tG`S-MUCO90SUUSB&segZhS8#D z-QeFLCGDTo{inmXoNoS^spZu915rI<<K7mo3OEyc_sVNw>-ut0kmPC6`SKx(@Jgj4 zkS%piCRTz4H>UdPDHk`*moxp#3z%6_U5HUi^bCE*#1W`Xs%`5rXzP>%3obNR^Xt+3 zhESBe%<(_y5^u7Iswvs86o5WRJR?wZlET#Hk;*_kBO)`Mw6Y+DP%t#k?KVL-lD_Am z!TGgV9d!_XMLE8hU-lG;u)q57tdta$Y$W}P3rwUVUT)p9CYuwLV+Fs%a=M~wS}~ar z0QJzrLoC)x;UQ-v7{=48`YmS-T71$r<luF*4J^4L`}+rRfXllCY>8i@`l!2XtelFe zvHM2$9>14iPJuZZ6l<i+$!Yru88yX1V)D8_QKSFR2&>N+J)Nzk792e5%anG7GR}GG z5W4EX(9vILA4F<3$rF*W=JSeFqw@+jGeyayyoFJh%Zf8AO|@XLgwECRi!Cbv?<W5w znn_-|#nBI^>c>Qx#8I!;GA*8PM>;1~?hJ|`SeDIr)p4al?VwBJSTBp8;gsC_q;j>k z#SFEkxRo3nqZSpvLKYC=NXELbqn1w3SEy0CLyQ9RBJ+glNP5RToa(d2ABf;{aX@%$ zdM2NN*w1q~n|=(Fr}$nTe1E?DvVVX<Ksn$6Ou@7iydm>G_0)bL^tvH7{R12mQ(!g7 z<gxIWrjtDWk|fhZKuD6A^LLd?D^MNE@kFk=(Iw3_{3lLkMM^k+vY#UC`ocg3pLge_ zcqalju1Bf{hhr}1>)MiHY%j|9u_gG|w|Q?a!n#SjCO@tT-yDdm{3f@^0Of-1P{gnd zvd#<l9gfv{z);3Zs+a@gjD4Rb$y+e~&cgG?uq^bC&X!)vU=|hqKIk8Wp1~S3SW(S@ zUnj8YN1@scW>S&7JLb4`2cFqK7KuU1w2`($)+lTVNduAi@*!3XowYgn{j>lZx6&w; z#-h7md08DRik|FKokURsY0l_(7Jz}1!|G39T?1>CANYLIMcf-rpW7H@%d+8;3B#== z4BgF2)P)F~z&c*bWapAW{alulyB)7$r3qD=3448FB0gm#oFWi~Tl7(Ui6sqYps7YJ zZ<QmEy}lV|GaY*H7>ayZdJk9D4Eq>g^nB6GQUxL33i?t-%l5~Wlqpxy;}iuj+kM;) z{Mmto`<{3;Q7lW5uV>7?fcX4!=`qS&tnovp;#Pbyigi*Z`W`9)zej(b#bm0%Gr|Fw zVY#UcZ@06eh;^j7U4t~vgfl&EH6i6c4_Ld(b!<vA;}2zqqKYYzJI+ah*5yRk2S3{# z<f;(n_E-_D7huuNFs<&P+VBzG@Lg=dG1--`$UT14a8s^E@gr(N#yRO-qDiAf*0V&W znnHrgpmxqz-UyuBGiwMpsS)7`m$^l58(;*ZIb1O>6`rX>Cma`b)NINfX8Ln4Y1?H) z?ncX=J6%Wckp#h@%PD^8D|wGjH76z?+$>Ny=b2Tp8bz28>-DUkVvB6%%FKezDZXq` z<1b1#H<O%8-1(#nmLDT-Udd^1&uJo=DaJ*&e^)#!BU~bJLjiEFJfaBVXbcNX(qs%8 zFO^@^tP%l{Na)MC#OTxhz*dnIm%!u?`(R7IR92E)af;BQl31bD6YN`uBHRswMU&(F zQr4o}9lKNgjUCPO${oPatj&3hme3Iq2PY|>?~+D)u3ZiKpBe8@NO?f<cMDvI_CK}2 z|GRSj-@K{+Kck^i<=g>98TD(^F<yF}HbE|j5<Fj6d|pgguJ-3bQ%+!kh(d`E(Yj$e z-R4EmBwa(-jqlFeN8fY%KWRM8KgNddeGng-?>posn8Uy;YruRFgX7S|L6*DsbB2TW zHy>_#bNlP#Q1wUpttV}s_`Puq`x~&H-$w;D6iD%dAjsVA2ZRVNbPl?Z7th2Yu@~;s zzC3>vn5oK>!Adl2_Q;(mlrC8757FGEU5cUinU;xrQG}j9x$wifcY5*xXgwM$L{V>c ze(Mnsh(iG(!yq9$c2PXN?y_M(z<|WBQrTs+da?L$k-`x<Z>=RF;xamm%{soJ9(Waf z_k#>UH3I)^gQiMjEbKV3!+raWCMDV~o4<c;{CZ6y%LYfRU@s-KYxg)6m+F^FnDh^s zZ!;33O(Hz9a`btOPR4|zx%Zqkm9-n2m^U!ABX)bcUQsoknIU;alUC@Y%i88_j)T!0 z<nWgup~xa5DlU_y6Qjp-dMKG4>GU^8$nvxd*0>twyNDFAc*tDM9A8nR&2BpZvr82X z`muERPAZc!g#=Ppn9~&ClB|wbl=K)Jo2zmP_P#fX4yQ7x#uVF(s!rwH3x>QHvYJI@ z$H-{n)q3&r`rMoqvYPhB5j42`GDJMIdsqMf(sURwDlX(Mm@tOTk~#lE=~aK6iun4# zEA$+mHy=wxgR)R9UsPp)5^8$CAt16vTM%cB)G<d<5Vu)k1x&+zmF5uQV2>ge(N44v z1{m99%=cxjxmXuA`WqchdQ?phihkFKt6Yzqz0*}DG`C7S`5piqV7V*E-9^j8XOpUf zMUV}k9PC#wOo6g6*KyMBpxR~a5G0fY;@N}%75g-S=|ssl@LQx`8`%NRH(db;wkiX` z$b5an4bsSby~W6U`?)mPh1?wG*yJz9fEV1q3>9iO5m;%?DMflgvJrDhK@MR?@-cej z6o}>Yw@m@nE!$IrhPsBt+bh+i9{x6@QhVHO4&k*XY9=YIFEzYuMc=$ZW2MoxH2tA= zJl*QbbL*<bX$jV#MdffqSjEs{G74QPsC(HsI_<|u-H=TV<sc2A?lpo?GHTOgxV^*E zhP?Sz@~ZsUlCE!DTCPf&=OoPVsu0|!8g#Ipw9{zHCXCL)fuO){0e2oug*<p-d=@ND z{$f2?v+!G$$zgLuD(^FXJz6}S_`@2^G`+kuOxDPUKV_H-^T=^npvSFwIrV;$BBa@} zIc2knctv+^2})J0W?@w=;5uU<O&;x(v@X#X$$DX3L;E&Fv6swPlS&&NmY~oru0&L$ zoN!G{=kSFzrhc_Sn<538H_0(aI+3n=>4yn-2XyzT5)sV6rakmk4yDP+XlJ<V+DT~Y zGrsMyQ-h+X+iaZERZZaBfkv_DfrwkquS256aVrNpX@Po&GW_j*$gnpqBcF8g6J{a+ z0h7<nOphe@pSZGi;?f@OxHCR8;7NCASI|jlo(_LxCrP@2m7;EK5+zXIqDT$}21*f8 z|9IzPwzf51gJ9L?)ehrPmCGxw7Tg6?CfdDN6;)fjrOU$0=SM8flvcoX4`;||_D*+* z#@R1Fr}-Ft{(cAaPu&laj$TqQuw(@Xe7KHwOM$?g@THfb;#v>v$a%F`{g1Eu`Fk~W zhvFHppXHcS`sdKTve4?=FBqm)76@$Ge@6VDTD|CUR{ihQJb%)%VseqzjLz9yCdXd2 zL?|Da!R6m|*Gry2Le00BA%|jJJkb%7JOl?wYU?O;w<>hjjxQtKah^5Oq2KAG32T~@ zZKPv_4efeMzOgK63m^QcxWu*QjeeY8VR#_M(+zb!{jt0U`DsjRgq2HtW|+RJtv0T) z;>H)0eQErWpycOp(~d}j7dqpHt0#Gbq8UcH<nwox>AlzQC7hO=pL(<{OGNz2m~ctf z-ltNZ%tC)yotb--t!AF)jAYsv&`RlOKuucW)Bl39UW13v<^$IP@qD+SZ!%VTXhLpB zaLV*BBTjTm)VZ)O;MR^rrH98u<Q&$LJq{uKkZ9`stIUoNsU3iN3rA%gu#-pR94_vc z=yaTiuljNGNcJTVl6WHHMoo_OH{xHr=?LwyG_)#tX=OLaHNGFHFr9>Lo$&B(dc9Jr z9@7r(?9t?azco@Ra@vbVmHnAHE}C5GG1}S&b{WKb6M`;6H7O9$9VuTYriNnU?*Q7@ z|4}a6SP<TwziA69|09?8f4|lKJMQ$qV5gg^u0Yg7tS?XIdhYm1TPxVQ3{d?##1VVe zC0nId;?Nw48R0S+=ite-&D9oW$q<*tC7kocrToG*&~l)h1!SJQ@L+!9(@fbT$aK<@ z`JxKA#kP$xGIE{d&aLY|vE5bI?tNbG>o?Eq<l?XUKNvphG>AR7rpb0me)TYR@KbO* zJQ;r>e`0{$&}vca=lwu!pl(T-w}H69)9MpTrfP|p9|vs#QMLCiN3GbW3emyqaj}E@ z(kkEKlBrg;_4m7`{0}k??0fE`U|S!d34$3+V4u#vm;VUuHKDv&w!;R_54BVLk{Xds zy^^!z4Bid71HVzKOI++i*`nFY3w;Hri{eGO-}S?IPu1hxi%(-(`*LS~@~5MIxE}<n zrSgsL4}@IF-hOC&`5Nioe5NJ{hV1YumqL8Sn-)KE!wX1V%D;cls`yKHD6wS6fucjz zSPNA1EKD$QZAMt={@yZuQY-hE12+YUuycNn6S|lRnGBKp^`&IQipA`tW~6GFQD>ux zZe+d3TX}};<l<tkjb<ycKv8xB=la?;84+STZnV%MMM{l2BI*b!Dm_h@jaSPczlKw3 zOqJmB`BY#5<@#J)O}i1%mUE@vP{hOqsO>}*pU~fYvA8y@=!Lb^0IY0Jz*nI}B&wN( zf(<(pEU|kzvlO>pvzQ8p`$1YlBggc>2H~wVbzMPK(UyG+Xwtr}r{|(zP;S*`MW(pu z3-oePu~fRR@@(`C_Vze4#^&Iu6rdTSG7`JenaC;*a-2!(#D+I*3Ny=fnysE=-)BYM zIG?i5^}+X#;SK2{8S&`-1_BShD4EPsnEmf@hLWYFd|Fnwaz#`oFQH?Fp?XJ<jIy`N zh-1S7$nrHuHWXHLa^NBAV`Zp)mFgfAN35Q3*M*$An^$sk+gyS6;Ps6=mbcuk7*F*c z_`AeVIF(M{IBf9s_2s)I5!Qa#uf!9$(~6~vYQ~1Rk}&>#G_2|}AYAqRD9%BpN}jul z(!~HBmQ5KD#-<zyam^F}$V0NxOrI}^k1S!7Wqw2*M8E1ZxfLc`!bH-vA&lb82!yN- zcMV7kd#;fj{CmUYe{m{*t9nt?5KAF29r!9iZ1>BaZ7!pTsit9L$>?2raQl`|$Uvf@ zO1+u2`K&R(C}~Y&O=_+;D^J}_gWYj_X6+%MvXNC$frY9OztSyeXw`5o#H^h8G@%}2 z-l{XyaO`w|V9Yn0Bh%!GfQqjtnCde$8Z!WS>}hyK#7Rt|hNTUeMYiNS%$Vvk(3?2| zXQzQ7;!prPEel{Gttn|lt7(x}YRq-9kM&JVoJj~7hC*pqXKyqcKqL53e&om`>Y!kW zHQRtS4!UyYNS0;_XtG#U=?lw|O!4%Mzby@$zTrGvGn!Sp*rk9a8gy>1YW3J!vWyYU znrkf#P(8K8a#!}~wYZ+?$?om_LV);^Or(Pog$RUVLOG3K2-U;Hx}p}Cs#J5-msZxM z^`FZ`OMO*3GGUTUNVPtfNIPcI!yJ`QgP`&X+T#;&Z@7@#PcLN(WNd3`$^9T6HPb)K zO-m`P0~rQGFz`lEgcm_$4fSO0>^Oxb28ekGeulfwY7nP2&ZqL(Uuh39wAi%guIuF( z|LLUXhf&5eTD)DZ%a~Wjo!XQTJAh4XBYH(;x7^A$cT|ja@K@}QhtErNyI7EhZUtes zGhQkoiuNPftS*(|GWA47E-jZiXCzj+es~PK`TPez#LINHtf>hHKewQj^PqXh1qUUA zsmAM+4xFZR)X{&?!NjZLiqRO9aar!w+x?6fV5EA+$;%=lC$?l28Wjlai|@<kWDPPx zDsdh2+lmTwZsXb%wUKN)8xf!?GJa+~WuKZj+b|`NXnxQ1!(J+<I_4gzBx$~;*C@X? zP{^8J2jw|D>kEFOo4jp1Ri&Zcgsx<wO=s86D&hebZY3oMV^*)1Y1W8pT$?m?AhVi- zOSLpfSwCJ}Pn#G*A#<IQ*v_ditw$RF?x-PPRYl#5?Dv4jjf|Gr^U6h59Lm)VXISGU zd$Q9Rqj`7OsqI|oGr`EBYZkI4MerHaT*0+PnV2v0GoJSclx)G_bo9;ZoWGUkeYCV5 z7ULBM>lxXqgLzP&L%Xg`CG^BfXsTzrFrK=oOCNr#V;SR3T+V%wR>KVlWwPlZ7nVm% zxqEVWFCJ6xf>zULjmSft)T$vU1a`XN4dn-Y?ij1dczePKpJvKzYov*UFy(cPruVXO zt~)(Ea)*nQ6jz@y>5|G2joC6`Yv~nYgHse#3K*^b-Uu-=60n0I`N_VUQYZFX=^xiF z%xhE6^vuuJIf6T@z_}VM@ZLWV&_bW^C3u*qxKi=(u%`nvw3uXn)-dDRtouspbZ6A5 zkmb;MD%?k02C?ucsve-w3Ti?7uSuE_i?bWvB<|7j;(PHei8MmZX!}F(gTvI55v^cf z{eoR|2O>)lso!xJB9917bck+SMek#$JX)fsgXcUFn4jOM-v>XrM+SsjzJ&ip=5B+6 zjh1@=WZsqxOx0~2ZBz@fGBFh?gAedH)<n!8gNJ$zK}l3f6TpX^VJrt*f<_4`3oL_{ zLT~X>Y~vbY4Je*<OA?%ffMCHfY-D$leLJxpWx$Z62f+o0g7IsPWe70>PE`#;n?Et_ zjAq*^wH`1gSsVPwqy-m$gw$&)+{;lE+j!FeD%|o@ouM<uYDZO4`(CjOe>1Pz7Jaca z8RNw?Xl#ZmWIQTC(R2y`vIXF|AXU31G9H~Kk0)b)C=eC=5_?y(<d;WqRqbj$pcdyg zx)3RO5hwTOK@jq64gyb7zTkw1;UQ<=twYc`5NRhMX7jWVX+QaWOh<hXX)l9H#(Ym& zJP>Ke!R4L!LN2O(VjGZ%+OwT%tsr6Op}7N_5z(K;<4B05n!&WIE(9}VFot&_^}#+6 za#4v-z3@ev?=jnKhv%+18vY1DqofF{z}S)CL?N?*=&|9)t3i>~b5a;cG6XK_Ls<+c zG(iv7qSF|h%THPl+B<Wr)V$e(v=cm5z`z|$0-Es1YfbE!+~FfHTr>K%dZ?OUit9Ex zB0YWPSMg8!99f_oX31y<H1rs!kk9OzYM_rHX*pEYg6{*w?7D6+=}@zJMfzY`)PP9I z(A;*UBCe@7@N^h_1899>Er1u)b73Uaa6T<!_@PF9q$-r*J-1qT_K@Ozc*ZF1L9i?2 z<vr_Lj}79g{?0uzOXTe#&%O2&#O-0@TV}^F_nRD&T_nM4!qOkwb9z8E>?o@_3LdIN z-FDQW{W(V-LS@}xN1CjJwVMP-B%OG=;q$q~70S&B?Kvx;;#xp+!SQWV^^fZp=v#an zOG^?_luxl-q+&Vu?~II!KK4@KBgCiTJr;_9C-A8%sTCEDcIaG6g&;?b^(X;T!Gxu( z{^6}P>y86)iU6&(Sc=~l*ogkVKL`&;kyWy2a=(krci9_7ru!~CqsZ`CG=#UI&1`t| z?RBVj<<ydl>}_=&BJP*z(JG4dhEpY2Q06Zlj=z*MP9oxzT#%*orS&%OX$bDYsf-F% zV+e&7YDL_0M@@M}hf??Xhx_u3n3&udQ{dLaDJs2#91!$RB{LwhVI_lTi6z^ND(rOd zt)^UPRS+}($k05xU3x@MJ)CePzhnGo^7Cn`oILP7`H{u^pC&&H|Lb<2puL&C(SMUa zH`Oh4aaEl@r>-iDomt~(2Avzcq6|$s>ntnZm1sDd9_wf|<09V$?IM`h@FWbbuPR(j ztf+Yu1bq;72s`{>0)oWS$O;L2)(B&QiomdQ%rpR$g@v?M^MV8{g@u$+^A0A?s_l1x zq^~-D<E#CQYme`N&~+;@ulFIfEa-}q|IdisPNuEn;WxX#J_H0MLmw|WCtl*c!Gj}W zs2(gn5Cd-p&~#uo=`TQ5o)_UC*#rJRJ)pY_cL;Ak8~mohZqz-dqJwYOq4AOQ36yTQ zfAWM44@_KBy>tM-viybz-(Z-sAazN%%6G!|K1g$Kjlel)TPaBBD1izc-9-4Zp~I?! z`xZZWBEKmb5s2??e*AJb6@L6mH*nz7lrKeoHk2>K;L|X>HZX77@;BPEuLj`sU^nDI z`Jrs8m-;g8za0>J#XIiG+}@vfw{KN`{Hiye;NH1A5YV3ry$ERUiGBo7&fc{Dp=hY} zZvSG4=vKUW-upn||NQwyq47n6Pe1x%!v6`*uY6PgBWm~W;7&K?iwofs0kjw0zb~ww z@fUim?wH$crq5ux#!acTCwM>h4f}-Oj~a~ra_pvLk-L`q6XFC*!+Sh)45lKFFY>%r zVP0Nxb>x$<dYig)HN+@pyjb<*k#^ijky0z6;tK#0AO*^)M7n`!_4+x{OQm6#5GDeG z#%bt?+S7yCJe{fV-F$F_;e@!$B;hP85Wrt9w&!L~WIrO4J{nrJuZqyP0gzKLV>Td- zWYLqL%!zG~cBisusFJOv^wWspjzg*|r>3VJk53)R>K76WYxFSC4+T3jC_V`-n3TR^ zOSHA?Y+VPCJGOs$EQqfbB^oN*EC7%Uz1q-2@zy-7ifeQeYAort8Js<6=mcF7#lXfN zz%<)({n|Mw6{5J+sLpN6I1SHd=Y`zHLb+|UvAPp(yJfIDiT1w?H%3#XA#v;KPD^Un zQAg$fVn4CziHN}R%yOi^8NCArjXKKqc&Zrc!j?IH3j-77zC&Ft1{5{$Wl0fSq1*-2 ziK5OMW4g3u)m95Si5GG!mjjYnv>lEsZtaLGSCfVa7glE1S|uds=go)>a2Tz|#@I$l zkb=T=-INBzbkXa2MJ}C(!KHqtMxq*mDIhh4GRO^tV~v)U&;A=Y>8LThD^(Jy13<qT zL6;~=Q$hSG#4bCuZS_zt%Lm70){6u!P~c@9ar6hkm?7yolo%v1#{Z&E)$aW@S%AKV z8upCOQ37{cWg^3q^|wuka-Sw|Uw31MIVed2OWt9_NULD9U^Nvg_==MnC)&*JzCj*D zNsEA9zZSr*kPi^h5LClI<KQV>PfIsXOP!5NqUFe(n*_!KBnQWq&;y{K)TE+|;dt2w zsdo$)=Ysm_hOoy?Id_LrPdDOO_Zedc$c^=-&#ES2$#)l9iRJ`R@Wam}p4I}4(%Y;| zkEPrdXsB|HnESlMZK6n+P|^U@riB3PDqFBLA-suVC{-o%BIN*WX6a#?{zl%?Y*rRx zGb3`cMle}vsCi0H08Vqt@9L$;OhEZ5S)$-x?e`k~0@1uiqJ|lsULlUg^1i6q*7urU zZp%(nmJ6~NkY}<N8jFw*y+bOlH4N4EchRHk=_wYXOh*8c3|+k+lps#Oc5pXt4~T|{ zfB1bl0LLh`xA^Q~prUm~)GO8!$&bwAuj{&nUM(<jO=Jc=fJ;Nz%?`x0wt{!?wN0Qf zvLQ6nAyP4;W{7n!>yHLedhOt^`Njg`t%5)Ul_c3I^giia_+zaJDaqBe9IN*8t-7kt z&P)u~`gU<KipunkuOiv7+ENA5CA}Hs;n!A-sb*3gWyRTKM(S3wY=_(u=57gL+U{Og z99#3VHFaL=p}PfE86kHn(y8SmX7zb%=QuI~UuYbYG?5-&*^P(21Jm}Z$%a%eNZPz7 zGJW!9+eUF2Oi^Lk)L04|68Sxa4$U}cI~VpKt~L|Bx`5P-{m!cyCzmGMTom^kynt5o z;dXcTHw1jX-HZKnqqQOha;MUUOlx^Fh)a@+v`nduh^#CA@e`&?h0<WRR;@%;WW8e9 zLa(*S;>X*r&)r!Rs!Kw<Z3<c>s>{NksZXJO&DpZuuYb!qyo=)>dR8cj$5dmER_P%= zjw4N%npW&4m%DZneA|nuuFEa7<yUU&!*33ho%2=JLSWB8HuybuZhCvKW<QbahEuiU z@LCu)6i%TPCugJJuu>!VdR3!DcA=XEyRQDZiT-l?#|b_Jl?z}>%t=-`au{IS_sBP| zIFWrKAs-CTgYkwxl`tNJ*O=a@zWnTHQA_wCo@P=v^uxU-x8{yUGYXfJX=XWboB6(P z-vX~6PQz^?q*Z<kJ1dl(z|B%=SApx)i}S{0;Ky-`9a%YyO#<iEq~tLdzV7^6MJ=Hi zIZHFno&EO@z#M6E93#y_Yoi$HTvDN7*wyZivDyC>##VE%AZ7oJP}jKao^;6WSG6*l z#o?UOiWH=HU_0;CG060D=(#49Q3!3Vmkw46|J_Q`gm}N3pD*e<)rBNdIH6tqPCx$! z`Nf;nM}s`mfNS;l)4@x46!o+ul_^gF_-BMJn>P0z>Tjm>;0wcb?E_17E;rA&H78!G zZ;y$LbGQ!F)%z(7q1Xw{-Z|=KLFT+Ii<)!wUk3Ih4B+%MLjFXVhf8>Yi8B5ilO6sL z=j>11wR5K(Z#?4)eR*F!v-;&3LvALT0pE4sa$@wf)UFQtRpZ{C&+{eL={3QTrj*D+ zUd~HcWE-~su0@Crfq>b>_wB0E_W18%X)1rO>ME*@y{1es-|b-JW^@ZwNNBU)Gmu|; z0-<1hbn84OyRZmTFo=PPzT*6$aBi8m?(0CjTfB#2+tX@lX32K^c2&Ub#atCkKOk{= zM54Cv2yWRPReFYT$fbnh2SWENN_O`CM);qN${*Wn;W_ji^C<5X_P;Rn;<C%Af1nh< zNOMHClvnV;V!`n|>Yp#~w)*^ABHx)5a6{%pC>Ykr_AQ>rNXY8)ndDJi{C%9m;ZO<p zDG7OyzBn)4IFo?i9*~xEEpc;f1n-ooEHK($tN3K8><3%7BY#w@Z0qSbnT+NIG3zXH z=prd+T{4}!YoK<qId*|=`}M2%FR7I>I%UQ2YihmdGlt_5=s)oqs^CCb-C2`bh7%Me z3~nVGR4L%kE(n<Y$in@(AxTK*fBv5~f@Do(9B<(npaNeGCGfxO)$DU~x*CKt$&)Cv z=_Y9Cv(@F_ddO$4q<8}p^D%N+Sq^7tc2uEWj)E57M|O)8Sj8BF<z_e1uyWQ@WDK0( zcXbnijbNaSoE31t5^y#AKXrGIm%u%Hsg9NPU3t@y@2ucr?cpyEzpcK=g>Zrks;HZ4 z1E$?!FV%tf+RsU6mT8k#>BnHy{VBVHv?3#|j9SGq^qv;415AgxeNtkt6O+j`mGxw5 zihB!bd5RYPtkbz{YMPL$nplf6y&;5cVA+?dx4Up2P|cR*?wH}+=i2Ms#l<-1==#f` z1oSm$lqQY(gl@9zOP&w$E9%B|{5JN1HzQYqVvym!ysB>nwNtD3l|~fqfr{q=Lw}4S z8;$nf!uH+*2h;Rne~q^@_m45ZyWXM(iAnarqxQlliMhEYYYm)Zi`sKMfWaTz3Xkoc zC~^#8R@3W7B$?ICiEO0x-v+JY7NR63Zpo=r2FG)5(DD9?ODj|<h2!2q1NWV4i9{F| z<-753`6=1LLesB6b39h(XE6eB6cplrhR?$yR-1f0BIEIAePQc+A=J1bZrCGN3r?=Z z@79e}os|i%@lC6ZWz$8m`nDuSRW=adu>@E-!e%;Rw4GRQ2om(b|3h`26FMmpn-Pl6 zPo~R@?h5j9LvKHIy~xF=T~-YIDU0#sYTX-SLLbCCY}>;ew(M#>95UQTIE{sSyWyLk z^=3D5|6Aw!l}D5}dcWmZV&mu)T?UvnEHV9T+kVV?qEnTq1I~E;8}`~0^LZ;;;u<_< zOU!ocjbd+$o^aO_UE-QO=B~?!c`G^Q=@S`C!k?CPzhfbcz4p1Nz<Go4asa2$x<h>} zxLG{EMUgA28BlDS{D9RV{SSAGjyK9he0!L?kYGo9F50fz25sxo{pYn^7`-Ze2cSLX z53-kru%4PYVUO1f;?(a*^J%<=lPR~WV~wK;rhE5I^`l*pAWf%<0(`c*lIO0S+Z`H< z1>oPj>^)qI1;D0bHZ}Q}Yu7^flB-lG@@OUZji@|F>myl5s=UZKZ3_x=(m(qbxS@N2 z=fWG6q4GZM3NHi|`nHHmrY&c1O~Vb^{Y#}{I(4^wqlNpO-w4{GwEP%g&2--27*sMH zes9?R)wLKcU+`Gh33dqk-+`hqM~vXgS3j$Wgf=>zyCdA`^LugL(Vnbyx2~PXKHbH& zaIjk*nRpt&_x{=qm$<9m{FfrZ4~1NX_^n2~;{LzAw*GI2`hV#WooY}X-@MeXY(wL% zOm=z(FhAIIVnOlW3>TkrMB=t(3YI2}?tabm_$^<aBpVVaxCOGH&l;TD^q;*zBr zR@8J()!7;t8XuO8*&h|z*`}{ko;GBLsk(A6cjN8PSq{^@&l~ld4#x;zUi#!dW{&=0 zFgGC((R+;S_+ss2lPXZwC@WQaP#1_Vg<*g7iXpm(=vLoFcO+K%NpBj$w)e2Wr^{~k zT&TRF`A23Qpq;6KIwJV^u@--0@-e`5;ywsSkBkt$qg<hN?sdVOp*rYHw&WNgZN`pd z>s-epzk1d|t|2?h_ojieJD$D>N<&^0HDWvTAl}NiNPH@{*)PKO@97ZU!^L&4Qoa02 zQiI;3M-Hp+iaXulT`|aCl5BsW-=i<OkzfA$R)ar5dl27L_H=_kLHYegP9UYwj1h`a zjFF5X5{I;hQ2=)ZGlM=XQ6q}(3XqllP*PI#w!X>uU7hpO&mJ5Ol|@`GE2q~l3Xw%P zMs`L{pdSnlgGF#gTtJNKKy{XalXYxR3<{g{#8e<(8C&SJ4vV_vj~wB+)V?9J4x5M{ z8D!c>S+Nfw-n33oQK?~8DX^$k#;h%@-ZUsD)h`Oku|jYVI+21UJSS0vNVI~bV0d3N zV<*i>bYcKk&{;r_wpSjzk{$A6d@@8n6?Pe`*1VH$AZ6puR1RVBj8U<VvVeHjkSRLv zE+iI`W#~cNGjG&XJiy;~NSFgLBB(zi3?d2Jj#%DYh!o6)B@P4<4*YOd%^-(vb;FWu zjvA!&)JU{oD<l!uC$GSxajOhM(5-;6h6ah5IFhvZNf<4wFP$v~iC3vKxU&A?_ijB) z%ANSf1t&8$hp*lccY59^hpg0ztGESO))o42L`^CzeS(~XTYp-?Xz|0ER6G<jYDp<& zI(@TbLnFg7W2&+VS%fVQ13PY%3Nu!`$sh`tIq3wA2^yG+?3}-JygGR9%tDU_Zx+Lu zW+WLiratEbI<uSwXt=>FI&l(1BuD-4riGI0B{q~_Q2hu6j?PJP+9A_9!`P{(J+M^A zqalSBs(zuc=w7BKQKBSzWNRSdLT>4eg~Vp3lqTwe2yCh+v`OBSESkBT(0Ii&w@IMW z%BER<+^AHfCF6OcYBL<YOlv+<_-yjf`MX3~6VxnevM{Jz0{JLrxk1uOMY9qOA*`_k zumcBW@2Q{aO%V?7^?q)BrV&GHAQfs`ty=leWh5R+{Phc2ddlc;D6_`I$n<y1r2dl| zjiM;OTpru7%=h<k+#F)F`>7fEu|tQFuq__dJY)GWBZDIYunYy+oa?)H2F|`C6)0%# zg7cB`BU>4j4s6(ja_3B$;u!Qryx4SBq;BFCXWO9Rr6f=-t#@US$<Qk-7z>3(yw<^8 z1;_~uYhr2p!qsbtx~HZF>WVrFMr=eiR-rvqynV5tg5n-UH*CPtBY=5wxm1zp^T<nG zqLPJUN%E|{-9%{*=ZyV-O=?0vlAhk3th{*lme2c*4f8}<6&hD7c$zXr8yhm>g|;2~ zPev`-xYTpeurmdV%^k5br=ZFm{vb!4Tv^=58HeDh<};fXik6F;Ai$3ZWDaF%RmbGY zgR<JAI@|Yre}Ex)GB6ElbZXV)jym%LCPq-`W`=Vhkt&kQW=j;pdVP(f=tWHL6{~6+ z^wHMsy%!RcVlklOXmg<J7$hW}xlJ%d@%05zN0JGbba*8n_$=;m-d6FwW63})jrw7G z70hu?-aPq*yAwBJ!x|sBT2o+md!b69s%d5@i)9g0RGT$RSK^$_9JNr;)LNy~B%Fp> zyGAl8bfalQkUsPvD?qMORKol)XVJ7$X`joSID$XqqI5P@sd83*?tZGs0kZ$j1h8!( z9wcZ**<F8mG;LyGay-og$af%pbZy9Dwh6YdaOBhe?GR%`Idzzn+tPd?e4}O@qG`M% zDO=X0Q^sRln!)K*604X1tEpoyLhbK_esYRh4MvJq!?PCxr>R;h9$X=k!Jxo6uCPjO z@==_}2FG3SuQlF|I-UlCu3kdys#jzo!JjyrYV%7_Fst$gzijHzauqT1b>4MOFzTF@ ziK)d>4`EN~#xRHWTws0pWvs_S2SH~W%?~R@>aw?hUcRhA1xZxRqJVf3zrDs>XL02! z)?`u>f2o&}mwiAbNo(EnOx&U@p8P2X(^$Tsqki~8$%4&kcmiLut)U{X!ruB-O_P$m z@McprQX0z8-Nh_{J&NIeEbZ>jIw4=-&PhwHo)~v@GX#D}y7)F!A=I?c$*Ax?mWG(5 zK6ELHDXOCKBHgyM@VSPteC;YN+o0U%@~>5px-SaZ`m?cF!yuPDgdu4ktVw_%4oh1I z-O>qisuJE@F^3SwD{EUql7%By<?@M`BWE$91%01xlNisKh<=%dq*cKznq#4$s+l9J zcE8iH%c6U)X+f{$!Jd>ewzgzOOObaqk-SdYvYBIN!geD7Ul+}!Sf6<gQ9BVis^&3x zSunWv$64pzF3+M1!oI$qcdEQ{^BSZ*ICt4|9I%&*IOPDRc$}-9XLsbX^5$?^blK%6 z`N~HK(~^(%?Sr@K?9`&uHA%p`;@iuZZOUyK`Z?tYeNis&5?DSXv7EKGOx0M~AWV|V zNU-3w;e?%>fL_tCFZq<cD&}p=)`+U1jzADQ4!>xyk+F9Fnx2EbeDJ#zHM12*PQ2HV zI^On`)_pM?BO`G>XoniAj%7C)FHc!$ibb3#);Slu=gw3#Z{sQ~TXFLpwndy9h0f9l zl3v2u?G|beS&F7D1O52~05>ic6e63}Rh=YjhFAbypF?sBhc=s#J}E-!{Pw8zwn@B( za_BZABDe)HZSxR(8yUcshNKdI(PqvtmD<LK#iUOODsDW-L=&JKIgTUDPMj1r2iW+6 zbvdP_4RSn!%5*XcHvSb~j1Nw_dE)LA`|)tqz;k;wM8m!x8b`-S&4^34^u|`5Q&CfF zsMSK6cPhNYv~&xi{%=(oSk0(126rD>z5CBbnEt2AY?Gygt3<VczH~j=<yt?JMyoYi z>9;UHfKhZNOP@WAuX=(6FQ>yy8E@lAyVG7lG3uC2;Ip;WaF642h-fVK3wL7>@pOWs zzeXZj75g0d?)g{wd7AB$rthk1Wn+e<B!c4Zc)F-&<U&FI4k{K)mT&`4+fvBtE+sIY z>@Ap4Ci2d{L8wJ@rzkTP^tt64spSnNC}HP>&(IRRKpBCwunHO)`Yr9??fzBvAio~H zzX=))LdBys)l@%-ka&&);tE(tmvy(^3vOhTT3;4{R$fzb*<z#~cl{n(=C_}b9DN0o zi5GkSz;!<BC`EQvE@Z6zdkVg{3N?m*AAIe>mO>dRQOt?E27)mipEO#^y$}Kb!O0}H zG=8zIi_M4|cyIR;5(8vp@ALbvx+H}KZ#iZ{oU+ptK+v2|wm+|n5wgQ-PLuW_*tNfc zQr!W#*FHB#Tp}DqV0YuG2c$FTz7vmF2ODr_sM~H_J6t$g57peZR$0l>Y`kd2;;+rS z^ie{rDu!k99kaEBYb#Z}Xie)DOgG|D`QGx}-1yA4t~nnV5;kW~@21Q}ed3(jXW!8T zy=DyRLv&CNy$-0rt^{p3!)kSbqj58s4#FQ)u7vfj+X{0B9sFBkbi@fVvKhXix#$bI z#FWt0x{BR+K_xQ__NI=aLg$-}lE>Li`j{Oj=siKr-(ZZJqg+04=s&o`TsLdm>6s5q z`mulT{=%n-{+Mbn_-o86WhJV|SxTSuuC~d5NspLp1c|@FMbEr;{n&cA!GuBWY5wrv z=iPy|7`L(I>hs>qgD5k13xR>dwWX9<tU<WQ60D@r;IqJ|k!$N{`vLa0*#^I}%_aSo z0S1@DxdU;M-B-`mK7Cv0t!%g5V3!qax;uJjo$s4KO3gj^75}jCGR>9jK*62wMt8`l z3o~zL@adt*Mzo!^+l{o&SD8hcH%33RR&-gn2~hS6Pqoq*c)aqgxvl#W-j~huiPX<d zKeqN^afNpj-0ouUeb?sII9(T^eq6QLkhMGRNz`0`SI?#({RI1rUZxLh0;jhXf8hu^ zR=aU54giHEFzGeWLgtIx-KXV{jkWa-I@YLBWQg#DosMVtJWPbS!6F9G4&Ya7`MO{- zZVPtoH6~pc4}iej7A(^uabw!~1p-&f0Rx>89J7KOSC8TYqM|enh^p?ap)CnWM(BH5 zHc`SAMgtP)L>HIjNN^EqhJ-TrPst(Jq6wNIB0AN=6DGoeffP^hF(IW9B@KvyTUw!* zgCSHfj04<qM86pHYXjvv{Eb`gH=gS#2k=+C{a?!Cn@l<-*YDJhvT074mESkVwpIT; zDSTc*;L?4n+&+U96X~2s*v4@sb=SYbjawurraaF$GRe8<LXm?yQ737P>SB@m6Y`1d zm0Nj423Bit?XHb;YrPqA)^%|Dr@Mr;p<xMLLey{{&eU-~exJ+l^D$F5p5Wm9qn-Kb zcs?;W^1iHpNS)s@;~XC6ct>wv%X@_bCpglfKlkvx(>zKlQMmYh&GdNo8-1CU@t54t zxW0{7S@pvw-;qvNDSJ)6rvwi?V)$4BjUj6aJc3-g=b`BMh|hvp5!~6-5|0Zk!=Zoh zj7_)z+j(lH&g9_W@W3pcarSt0JXK+XesHoFfd8?ElqjWPNj7*Egu7OE9nHt;BF(Lj z6ML>$PinL=8XHfc!YrAYP_eMZbCz>xlXzEcHQc6cYB8MJRQk$7sYstdJicIpW|1ko ze@NrjBx^CuspSq>Iv%s)>OC%$Z8h39_#z-by<1Z6CYUA#G<m2S8TnF6<3h2&kL(Ap zB5`07Ghzo~`kPVoz((|2Mhx4f_<*N`*n8zE>miphVig-eV>6)1OAV__wc<0^{v6(+ zqUnoHy(=#1DK8m-P?HKEJs4Ktf*PmrHE%;>eZX0mJ6DsjariRHn2>EkQ(xs+w4;=9 z(F$e8UDhu&Kw08oBR*<@u^Z+U=fEFK)pE$Ze8D{C;OljjVPE1l+4DHAZJBXpV&kA6 z5}A^;3ymL_I<{z;c>P7^;uT7*m2X!_O`zJ2zJslbyWAGnvgHJ7ZOa=<(4I9ESv7s5 zXvD!rMO-VP9+IA@vXNKOZ#8DTQPmN^osfLXe2B9_IkZbBA3&Rj?h+2yBBmAbHXzjU zw<8>4z#TYKxkvczn_SV35ZinNPI%(syKMVZUS+NvePXU}X752gAFu3gg>RapXQ^fa z1>kl>9vwRhss_f-z=0y2NY!P{w%*)2itPJvPV8Gs-2>S?`L{{r1UByI`*_o>z~y@U zYge`%&uOcdo_p%6?7rZv<J#eSw$D7*TU9G~zPYI3@0jIxX_)=%wdvc^Cv?7Xq!+QM zuxW?8n`vDBt{R=ic7_-$b{{JjRxr&<f~wv|M9X}=7Wn1<$)y?-<);208$IYMuOyVX z<5u&oYH6`AP}aiyNtekNpgiO4(>pb-P}t*l5s~rN4+}UtQEa=$uT{shv@QQ1Veb?q zX&7bgcDc*8ZQHhO+stxRcb9G3wr$(CyX?v?o|^gNocJf=%uL1?d6OCM)pzl(z4m&R zddfCmNA%x@>iMfSFa)}}oqmfEZsnTpnB0AZHl^b3fKDw82ti8;MdKZ0(&1iYr8@Ec zZJ2B7wa5m?TV9A4g;yMH$zPGBUJ<XlzjhdYar+?S2~gExCi8!4KHl%DU;!a@A~>&x zgQK>g7+<N|6#GA52<nc2;-PFVj<B9_V4#M^_i?qz?-+sfTiu3*3Bm&JqAQ4mh>gO( zm3?nVmPm_vmKmj=3_9Ng|HHsmc^Z#>Li+I|j_Q9JsWAVq2DXy5sja!oe{ry@HKBd+ zECFA=+v(Z!HkV@;KrLSP6-f?S-e;W_QbLvy9*q^9%E1J?^_l&t8i~sK7bOeH2Klx` zA!$%(aFhe2YbT01n2vhsab>ExBw8VzJa`BgdmW-8`F!iEpdLpHP1;G@;k((&+#Qdu zm+qVHFQ47F9<TG{T0Tf4Qf&Vs=gf#rTW6>p{lJ$!1;ND5q1$elozguALA5Okt{cp5 z#IiQYrWY8OR6@cbKbn}zHpAgiHNL!qL4RLxLi8h38Ucn4#j-keUzOoN8Ub}!h}`ew zCp(Z%Kr?dokQf4y7Fa+yIV^w*OgQsvhx`>@aK=wE1})h0JF!_Sq!xHb^(ix~`QZr{ z`*sJOgSPmq`oOl}qa&gh`HC~B#4)0HSLLp?z)wc*D?7q5@|iclS2OMg`rc1C2jd7T z;9V(>5c)pK>HS9iJy7UaK+r!bH!MB30w~E0q%<CCG&!-P`CO09J;d~XNBJW0?nOCT z4S264`l2|>RlU2R`5c_>`H&d?kGkNre_e!cw?62MKgGYw4|;=c7-439RRRMe1S9Ug z$~>iqzbb%&5T$5Y8n-O{t<zKK&+Y-7D!r*h%_pI71LV-GmTs};i6QKHl&pNHQb(%Z z7PSuPCVCl3m&lDmT8U%W-!bgJ?ZiGqSS^j^RvR-Cs{ia#N@3;=SOIHwI@`vm`4qXd z@IMFR#dc&Q6HP-AGu^$Un})7AT|`5c*#gB>58?!BBw4)~@UL3wSyLT4PA<z|!N7YR z%pWv*uP!^>Dr874GoS0N9>{X#lNt~ZXe)g<G?=PH+%yH&hgImV%-MsK0LF_P4Z&8W z){R8WI+KRm#u#$Q44LDOJ8X$lVQpE*^t!dW);rb?=u}(>h1efy#>g1zAo;8N^-FXT zB!D(qLV(Cs)}bcayEL(YCn9Uc$3JFT^QKG%hb-j1W)nqt3WWN#vO(?1-_&9_USpMU zMe%Y1(P%2{6~uzZ`|WVVbZOVZlWFP3QEV0HJZu@mEc;8J?^;r=QA!Msp^tGF`z-xA z)pO)H%ky|U<XI6N&p~2tqMHcqAV)`ta>m%@$o!TppRTlt)co9L>4yV(9TS(x+c+#P zzB)9jq#*)oMrCX;KW|PJiow^@m#he;Da+75*j1Ze_4IM*^MY|8tm8!@**l_AsG8IY zC#i@2GO13`G)2|LB$9bsW#`~n?@5`l;1-0kSg_cfjA#ou;zwS~q>Xcx9!{Wy;Z2R_ zV9XwKg<y9pF~PvluUbJ=FP*`_(7F{%AXltfp;xb*(dZP;>qOWz#o(an)Xqb0jO7d1 zMOnJpZc(kl=vOO~+N)SKT4}q$vNItRde2zkweSRHd9CdUqq18y$zMM590)BvUaT`u z+UfO*7p^WML}vuwX4N6jxG_cK`}3QkaZR$>5cf({FO?|E#kmW+!z>U>>BZ>>xWOb4 z5fZ-MQp8hGPtMt!hAke!MNe{dvY!_?M0*E49`DP8k#^u8s1l%Pqu@;7LQwWb6<YM4 z9G#;h@5uY%JVio8%D@7P6jP5?3+I1aDO=V4FjFe@YmzMd2*5)+!V#_^PgWA#ma=qw z`5hecpfOBP^J8D$ZUo@QKd6nxOkX1`TS_KPeob;R<F#@|BnqGCU=%rkJD6Uh!eLVc zOBi5zWpMByARP}vts|XAKQLcGDQaJQsn6%99Xt*jT9&g&YFQ$A8897lOOyp;2`O7@ z+5b4q5cuHrWZR|zG}53ESG<plH(^W3?fg9wgHz57c^U<92;K+O8a!d2r&sdtLe*-V zwok;I1se=bWCRDKThg6~R~Q;Z&TP;ow?<isV6MD&_;{Q8=^qSmwPK~ZEzhLlcd@A$ zUfGn<*Xip^<mZ(}yJ8JGg5S)5>`ax$#^8Xyu&WO19c9j}7*w#zFCI<WSjHLZZI|<Z zqxgAaLZJ5_7O37EAHv^}XRy2bKFi@g!`^oGM-{X5Ssd^dgBQG(^$wWItOp6Ebkm73 z`>F2$-)=7*v4Knr>I{S>Oft5-dZgEsHDpY51Ap_hpFY1I)EiVr=VnE(2F*fMwL=Fv zNmAi!d={<vS-4uWsYUnGso6tH{6n`bkRZFDByyHZkoey|3oo)Q!CBZ7{$&_>hY1** zcR@s!)Fx>O|G@xCtXgupV%JKfBaTJ&zo;_s`<WiCs!gv8g~M>kN~S`xH3DwkgMg^G z!~)qi8kf&Wuk;aZ4(-Kuz3g-g_4A&(UZXX92?|>$a~)(ab}#1{ObvRcnf+XSmOR;6 z=W-)4je2O-r9tWjI~m|R**}2FMo3-pIdZP>tOCDn(wvSnfr(xOcJ2zYfA{U-JV%y} z6=jrLhQ~of-hCN)ZY%7;-_3T)crGl$FlZt%jizXA?}aHY%Byp!F9`F1L<4?Fmyk>Y z^{nn6#RHVg=(7MW&7#9Yt^OIy&UHry6U(TV42Z>#sz^MfyVUeeJjUt?OO}(kw`ESr zsHdzp|51rxZxEQ-tENY1D6ssN*|C$+=ze6<)f(MtNw=I8@DM#OAN}9x`8z0)%`sZ8 zoBb#J)nIo70{)F$=LZp2^&O)udej`bzb;FErAc>s>%4CBx$r+b&$efA_N)ZC2<{cl z0DsU{NoyjgdY&wu0*d*nJ}bCHBb<(>HcE<`e~(MAq2$agt4goAksG&fvhrP)2oYU@ zCpyj%|B;e4NFp>}o3MOyZwbStC5T<sto{|q@0U$qf4zcG19w_Bn8kL!qb1qJj%*s| z`(_$0HcLdgVD#`?i=ve*LzlN6Zcr+a3AAsJ{ueb1|5PDW>ri#qIr5w#*Cm{4E-N>t zc1Z^9Z@l|06ba|T&bE=s#%8*$cAh<M=vt^zX3Hn=B9f!TTQ4I1rdMgI(R!1oLZuhM zfDCA0WEs4b_!N!FGqj!xh7ah31~(PIJKm-S)cHiz@*nPGhrESs-M<Dp$|y-)7m;bL z%cs_A0X-xqzjCIBb%U;Q)i^&>Hji4b+a53+-g>_BF>Cf#214j__gcjLum5$n>k~dg zV4&6C3N-oPCM%jk#Rkr_DWe<$_zaGs1{<(KJ-gPhzZVaj@nacXM+AzM(@TA0TA%wr zq~Cj^_A>{O5J7gh6!o#qvQln2e{jk|qqe=1i5T$xG1pzrd!<TYwV<V_YY3yIKw>zU zAR!T7${nIX3^<2&|EeHaL92fzD>zOE9H)oePrcqxK{B(J14wPnlWGvyFzU;zJR6aq z?VN?SX<iqk*}_+RP&Q?*E@U1yWe-<VH}H#F+J_wXfpU55a~fiHEMg0<s8*OeeyFbL zovd@p`wjKN&0(I%oh>WiwtC?+LM9Wht_R16D`@ji@KdlI-6S3OxezLR*Xc)(N!-e* zi@f81>0NR3X0D}Yu30PtC;w(1JtlL5a`o2r>_W^Kg8u(Jg3x-Ff2Y79flXW)?eLe* zu`~aKSonia_WC>20hJ0yj?Hp7UBBfvT7Q97eF<?p*0hItx!Uh_z&g8tt{TeSASm2j zheV!d`y20&Gb*4Xv6kOQUF^(>17^$GUUXnO9+6U|Yuf_OO0iBqL3@laSm5t>O@f@T zTTG$d_gtDDsQSqPNR#nHFg+C-2UInE(?1V2#H?5~lm%-FKv(9fwPasNWO9djUO8~i zMzs_LM<KltaQ{N+$us89gW27eMTz6Lcw(?17>^JQd~(#)MqgUuzOBV*C<<=yy&*lo z6>hTzAk0p$9k=6W=Rn2X@`W+XlAb;D#SqLco;|&Tck=fN=bnl``k2Fco*Kn+hIJdX zZ0N@N?Lc0>IP`-!e)C3Q_jPU@^iKIh0(Uaw9(MwXZ#0cPdqa(H7~`IM!jPo{sF(NS znvg<^kyuo~wXN}87A%g6@v)M5oC=p<WjhEU{z68{a_*P83C2hx9>Omiwn=;AI41dr zb4t%1PA?GNVf;n!N@gr;9dEpI_Y!bONj<<wpHEypz`y6{Qr(H!Jo;!86$tT|Y(3<^ z2WwOPB)Lw=9r8K8+4H++ZPWF~xJmsLjX2gj$bV1hRQt{%aF*zt>xdEahH>b>i^8`T zxi{DY4-9kU6*!MPG@WTYz?eD!@(rdsfmD?Kaql0&dU>TDh!+gNk$5H#y|ARqaXDTq ztZnCSxwvpp<P(yKMV;r3Fg@rW=;qv`@Sh3W!M&rHp_%t#75quo)EMkIyb1hw?{3fp z{}8ypXr=1(FlnXi1gk$FX#bD;{gW+)s_lvGJL@=VZKrlSL-b`ZutxoUj+Vn8oO_4x z>x3_J2jb56{$XeG4&t3V;0y6T)KUJNhD0yij~{io|C2iU-{GAS=H_PqMH@wHT6^GX zV*A&S`Iwm}@HAv<X^&c;k13n7+oPm%!ILR$@g!rC@b=ReM-|h0nOKixV{<bHt56y5 zTK~bo0ZnR1F1Ef{gAYOza6-rhLVw_A5g^Rsk9#JX65>y99qZ@5v`@ZY^xkYkI)Q(M z?K6F2YWYHtLNafOW+dacgOH;noQXpsfkEd{;&*0niu;N3o;bM?2kBV5S<-up@v5sJ z%Pj0sqe!DpXxvXTmBQHK!hi@IilmxiG)DUYGMRJb6{FEQC<QoGPYxJO0N?RSY(W8B z6m|VyEQZ5~^O>PrY`)c?*#lQ*zS!B(ThJaP)0aq@>tU*%qWy{xMq6OSZ-Y3N-3zYb zF4uL8HcHp=ERIF=U7BL3sd9opB~|K8^1TN#e?n7dbIROhOZ4R|{Z<<y`DG<o5Z)-Q z^Y4Ppbw8#5I5j*32o<f4%N~z692*t$F>E8db`8aQj*O=l!<N{V``a@eC~D;h(U{5# z>buGF-YAX*7|s+&`g3QyPM9Nj{p}%&%qui;ztoY;i<{zdVCFYS&uV&y2zImQp}p#I z^SLIOZ{!&*)j$LYjI))>oJ6@nxYMyy+V9?5E)4eLiK5C`?7ku^Gf~!EIQ&sADiYE~ zhZAPqCi!Su3QtNzR}^n|WG~<zO}1vgD3<Id3Y*s6osw@@5@sJ${G+u}-p0LdS$@vO z*xxPtZ(%-K61;`s{>XVTGY<qG@$lzgjmZMpd4)kufG@luCf7zht}Bhi4zt}TC&iSt zwVZUTombBBTF4F7eZ-WyuQe417CY`0PEY<}CNL$&@sRhs;q!_iRJ%PV<mMbm&{Mk) z#q%9m8)_=_F&lV{wrPgTP-VdH6ys^R022Eb9gcd68@<U~Dri=z7zmeoxK&!gvN*ai z9ctd8;tLMjl6gvU%Im34w={F*9a?&Rzph;+`yDag`jf{$d=;XF&X9-4KbVv4U1!ws z7V<*xNxR0g$9cW!z3;*Cju*doG!vAUw<FqF+Xy5&VpI!0_>VD${G^50uf7YM&$2^B zU}H?Hljz_k&rW|Qjs;+AC@aJZ|7JfWr1uO+>u>?Yy*~3K{6$$2IX+W&pF@Yf0l~xB zg(sabJQOm*IG&|=Up;-%C|ry`U{}>DGd2soi2Et141O)YVwlN$;p&$Je$0am@h8SR z<0)m9BDM#r=rmotJw(*OMK^WGpU2Z#lSbxOTZ^RIGQcC%&s6dQj%A7Rh5#2^sdIRP zr76#6;l?$~S3*J70WaRH7sicMveCwe^W#UqRD&WsXNIb(3i{1lh*LQ|y!U+CQJyvh zTlIJcP~5L{gMuhflyop%)zos9HO8D0)_8`yMe*5NaV#C3NmCkaiCxZ-)~1!I(>n}7 zR!<9aN<|zpbiUnuYih=`hpy4BJ>ml86S<NOs!Bx~UvQ&I1&2gYC*hPwlfXqUTOj!D zssb3sN>a;I^)a3t006OeGha_nu}x`PRhGQLu&CfT23e%I8_Pr6*LQ@fg{EDh0c?7= zki2Ox0Y$7qyCfywW|h9N?bY=fY$?uDT~o1;lH>75GPW0?5}}=#$y%2<=hhIsq~!iO z&vrL+d+AkuJ5&1N){|PZhVY;*GnvmtLM~vp)Y9md+ubp;H7$N;Y*idxtO=3Hx~49s zA-r#a!*xRSKf}dELP}}mKH_<zc92HrXD<F4|KuC`rI+3AOL)xA5oG!f3*dYBha8h7 zmPViVZ%;lfuoVgC8&%&K)`c!bc&fVXAxw+hlov|hO%sdindB%8OIW=D(>@0b^dv@i zOp`PXvovv~shK9`i7i1Qaikz=t=(6lA%L|o>}L&^0_Jnu@$AG|0V#D<IP*q1XH6yp zJVjkE_^zRe=aC$9MpuxMhUkZ|O=Y_P7%voOmYF|v@2-5O3hb46p9D~9O=#8Kr%X-< z_VCGKIPrX;;xo?q+{>jH7;!i72k<Y`hj+NK81+Se6&Q!_y7TC$>dYAL;$5qPTp6Ow zeN4Qt6vrSj%<TU@r&I^c9>q<aT3mp~lVh79VGo6>nK_7)9(*{1IXtjY3%EV_E3Q~2 z%T<;go$c#zsws)va#xrK-#Hh)eKbtqV#GKz&}X_9YP=Q7d^sA~MyTohd$pXbRxq2+ z2xj%}$Ib}xJFb2Kx^+E#=rG96LCk)cC(fuC$o9ZK;Ks{E=<blOpec8F)CmSY0-n93 zY{mMK=D7|K(jzKd8H*egxN>+#IazZUSi!)bb$A2KMk4y8!Pepz#sClY)n8amc)<M) zi?L@iI-mRcPxjx1v}n-acSOAWe~gH;{jbx*{|Y`KWBxx&S;_w|`h@MuA(37ljJ}u; z$Lgo`s}@qTjMwuYiG|;f`9v`PANoXT7tyzOH{bx)5(oztd>(bkY5C5Xbr<Wj<bCa+ zlG(z<!P@?^wab6wdM)k$b~>61vK2{agDe@rC<@X<svpUKhp_jP;CN|X2hLQi&*}%s z0?7#Q6RX!NOLbHX@AM57#DursD;Mof4T;j3<|o9Vuvr|u$S}B}3n+!S6^R1Wd=xcE zM;IR^Jcz}QYASFiNDM=TFsg_;aW1_NZRAt%EKH_pqAc}CD+6k#rBVf2OZ4@6c6|aB zm~J@s=OT@$YouGYz$7-f<@42K6J>f9w^F#}6xS3Jvny%9z>MWlR(2|@g@B@xG64%b zpktR;+`~n`lU=m&h2=7~R?aP6^U4(N)1S4{C6rxMp7)>gGLG^HKxBZLweZX|qWI1g z`tgAZtEG0#&JF6Ho;f#UwX;K`4!d3Cy*mHdRdlkyxPIEG_FS^{vWb;+x`qOQM@b2r zE`{-QPD*T>$Ivj_D+P824So(oQuejJ!iNLm5;`d*;%17)kvAq0Sczysw~w^nc3rhu ziPX$8#U6I+M#pc<@+U0N!4gyRr9hn4r8=fthng4`UMn-VMk&Y;HJ^nknX`T{6dqz( zsXWmEcYj}mSy)fufk;p3fk{vCJ_zXA1NM;S$d5}`HvY-R28xx%QY_VY<VGa!f}<rV zx$wUz2BWwrJ3|5r-Qv`-PnQX|96Ry13_FRp0-76G7tZ?CNyU3)zP}M6e987reM$CI zp}%`ZBGd;k+o<+Ydd#%C<#@`|n2YI4ROiPG$SkCR5f334KC{?9V;Mn{k=NZ>vOt{O zpFoWP58zI8yk-LUQP)MCJc24=jOt#|#IR?cCYDD04)kKgk-Y5H^>v9ya|4CBmF}GR z@KjL-z->9<O>eKv6w81YP$Nb!`jD-YnzQyRTyCSHc#Yx@2_Z>Lp*b}-ERKg88@JH* zTAfhlDVC_cLh~dI?_s3*#?7<)d0Rd7w9=yhXZ|G@e+&7YIaQ&H%>MAh3%(Sg$y%M; zk15u>&`LCz3Snfo;Z%XfXL6<TLfZFzd1?29@6GAR7VYZ__PgRJUoJVOq0dy*Aw7OK zE`HA_VlA@M&?S@kr+jB_=L{17`t0v4=hBTj8FXtZ-oqV~CEfn(`>+k)@l2Yv$!Z~% zfg%;T%2Rs}Cl%}W5TCNBr(2*k`yl<25+R<-U+M_4DC!Q;8K}nVN}6n`$sdES$F`g@ zBi1cYf8meOH|<Rc-uoKLH;`_6U5%0Qb1&Urp<jYUd`Cc<7W)o=`n8%uVO<kf<j$x! zty1zh1d#JM4y3jPSJ*NfD(KjTAy)-|!v2u2apM1Gz5kYVPF6D!P~s03kU_4HF5q_t zyM%miRn9&KqJP@r6DYYNhhHH12Y6m$*bM%`2JeQoh6L=ZyJZP~z=>$qU-95f*zNPy zPn$F&7UTYEIe8~2@N3i>WQvpsaa*O!z+yPyLbk>B7k*&)f*`!0qBW4r;BZQ&7pr=h zHQ~1;A;a3y65((z0zk%Zu3fHoN7L7ASGsDRpf^wZNFhh;pQ)>bwxVD}Oc80g-=eiP zRjWWNHt)&<KtW`-B*51xg0yH$w7^f-Ec8rtozk24Jurp|?Pwz#({y9N$Mr=}5DQYN zWW36m^!z!Wm4s*Zd7e!OlkElfQHTk?Kn`w5&A<l?e?p%LitchZ^-~%N?a2#A{_gLc zp8&^uN2NTiBT(NVr`;A{lYBj?r$HnoJ}(X3ewIE!=4@fW6X8^*cUy$GL1ny}ew1|5 zl)viz50P_0{+rem;>Qo??;PWQ-+uDHiyQ@W<Ns;^Wotrvs!8I1O;fC|`|-wsp=i}G zAf;^E4J=HU2WUxwigAKKe-BOlI=wRa8r}>#Zs<{Jy)hZPnw6Rj&|__Mm-+&}nGH78 zlHJuSl{=dJw(2mSr`_<}?ykQ6yVsfNU+*`z7T3LQpAJ88wW0%}rCi~F%s;n7NnxTz zLCoURjr!pF0*xU!iB3ZybcG2d{XBEPExBW;(_)*zW2ig@42b#};fSIzA#P2!s011J zJ*|Jhd!`dIj?$71(0+KLJ0vt7!Wcxaj;-6GcOldw?t$+R2|B{<$$PruTYI|xpmdh$ zr}r$)>W)0zPWY-8=o$@uq46Z#nY{ynU@r1&laC=x%3T!jm123V)AJn)jdj_Yxnqur zW%X=54{>lbEejJvWKwI%{J;?fh;TOL_;QpVKUa>!37?}_$V}rYxpwGb{z-n$b6_4q z39%T3a;cbiM6|Ky&5S@?TlbupvVb-l_F-dRy=K_JdM{DdV=5wrX5~auJP8eP^NAud z*t%Yh@~2<r0F%%?2=i8pwp24E+Oa)#GtIklqNei3Pq(gY2bs3eVu{bTSnJ?N+09gz zltK!uHEgw8mWsEoiVWNOxEITw5fbC8)K1~q1D1(#Fq1%4XKc%e$T8Dpj%$gG$IXr- znY8Cc<rm%6nZg(!({oqRM9WP~Sv$Ae4!_Y!*6rp2$t1mteJb>8ymV)WI+u+%s!2?& z^_nA_7pKhCH&>`U*-@QPkGMn}(z3`&2Tju(tXX!eizgI+yJ5F*2vyjV#zd<ICFLhs zJ$T!*vx{Znd#Ux~c{pv2J7cQjB|}3{7Fr~J*c>Kb+Um{LF|!Qsu&k@j%%Z2br7YN< zxKi7fGSFA0#~ojgh4)$58Ef(B_c&)E1HlEx>!`AL%uYmY6kxGS@Kr<|&@^FuVG8jq zA!hRXoDKFs1?X?Fx2Es3|M)mDj-G-G#4^S;gBlL`!QI_jjMHYeUMi`;1}E;zSr*v- zvZO=XvCAZe@s+}`FH6&-#kLvcuhVUY9ESxp97yHvA#oDyp}GChLvai64a}mxmFJ_n zrT6WuGIo&v=?k@c49w|!xdZz{ct9LO2>p(Q2>T8$cnnPMLwMKQ!}JU~Oa<*7sHN5b z?d^Aj@DJT}eHY$~1)_2TLajGavQ<Mn*?s0NTPwPOuJ8oK`;6>Z=s?=fkvoq+zxHzR zVxiw*V`1NMzl_raxgEhjBcaL@1~Yx8;xZ@1Id$`!(o55rJu^h{Fd=gK$YCay>Tbp^ z(*3p7n)j!DB9j;jHU3P(1u*l8kYmA=lI|xN5%AIMqpL-YJMl~)WxJ-54UQJyNE6Jf zB-vM%IKpR-HmU7!NVm?}Jt-8kP#=~vjjZaoq^RNx$WA;+$B86;bUu4b8nE-nT&i1# zIGM#fp=DGHvVhZNxWzVayt-r|%2j&s`caXefyW7)X~3I^@R`P+Rlzre$;m*Hwde1~ zt#(j}0OHSrcIH=CmxZZpPsgGQgr-nRHfo<bmDiEdC+yvq&3v-pEpu()lu<pre?XXN z<e(T5kaZlZNRYac#)sPFof)RGut1$+6w@>6VkepV9l`Tlf-|Qa*U$1toK&G^?>CDt z9EB}rxlJdGFV4>+)AM)xz9zprrlD=ucf^%`<k>t~joO_Kh;eA*%$OLPnHY4E)7DFO z@Ig=yLK}C4P&5DZT9<o6OXv>23gvlWu1brJj~ZlPuLSUVw2LQ_$J!(91h5!&AlTh- z&8;`~Iuahsey}BhQ2MA=RA)+r2h~SYqm0~PN=_6=@@}DA&C#!?`$%o6jT%^EHIuhO zxI8PfC$2shnLl<Em|vr!HSY64*vb~MX%xpbfIJ~sUyGN!s{|mG*{fIroVwgxtZh<^ z|B{(u(%9$c%Nr+G*~nC88Gr>FP#aWO0zAK0Ko<e3H;kyqMGq1(JRCiZT-La}%QDME zt7gZ>b>u9hfq$ooNM&0#rsYDCI9yY@erGmJQ29*$JAf&vN>A!E(jrWUZuIT{t6}M` zwX?1{iKZI5yp(r>M_pnpKb3D{S<Yv2o)oW3DMJ$x_dIh4yjS63^RjE5`rAjlLuNKw zFOMnq>5)T8-&oXd2ASpD?<@DSOlkq%7*CNiCPVa|F2%#3gSXsTohSMoWh|zaD^qcT zQqGl1u^v-DB>#AWwZeRy;a{Jadc^yd?wZ4SC-$_B8}uZXHIGQC;D=#m%~-m1VR7e` z4aK6Yem0-_be)C5vr@!NRA}<r@8~>9c>Zx(t0Er(zg)RWuIQ+dijqbnkNKfMjaP4c zBe0D#T0L;PVO1-$wUE+|p`66MG|4>udY^snV2FCwva(7%adi*_L>kA~Z7@aKW$s%d zVPCky+g9(u9abd?WUk=gei~^aya2C+J<t<Ep2%|zg2$MG6FeKve*x-GJ(*jEAOJiF zIwPwms1FD_GcIWLnRD!JdK{hPJe59@5LPW;+^$kaK|Hl0$UjDTzw^Kuo%>#-0Vym} zw<_h!4XBx7ag)a`Ji<fVRaAQwFnD}^|5At;iH4+Tx_JZM`858VRPsOeSkoCrhYp44 zo3F^2pX*1Gm||p0$j%vJ@`q9^$UEo@MZwwC*kTWN5P2DIQym<hB>K?ezZk}fKkAEI z>qmIg6)wZjjjCHogqgIW@Jh#STMe<+L53oaI9Cl%hwW*IIYVWf{Xs7*m189kfn_ko ze;}PnIj~s?v(=(J4uHFWo}zrGZ^PI`CW;7t9I`GoA{-@f%R_}RmX+?z8$-ezWVGy@ zCsz%yP#j#OHa?;g_C%kl!sRy`c3BbgZBgA|OFZf>Do_24H74{PuNZvP+E85ZE!uW? z-2d^;bw-v|8ulbN;PQenzXNDmh1)Hltjh`G&H+Fx$5^t)TrirzkGe7x{NW&wTol)v zyxX#hCc%|s9z{&BC?eOu>?S1bU9B!vRIU15$)EINb%}pGdN^B^CU4kTJy7<V3ehr! z#I+o(V7Gr&>$e0%)W3DU5~8qHw2PDKpa+gF{2L(Qe_W*^{^dwtf0xKLp#D!+DWd;Q z58F99x|zBdyP3N(g8iqy{{G_+(Es@Q{`~h>Gmh_H9n9SrEnSQq%-pQZE!^x)87<xH z8UL^I<i3v<{g0#n%NV*_>zA+UD&Q-pl(N_I-@jBlY+9syqPz_(B*7~quzu!{w6!!N zQLvymOX-$i^YN6NKB0y80_zNvjBhJ-flc~P2wncaWwo@D;3Df(I^B(H$wu?-gl5}L zz~2;rZf6kkTDxKbIX3o`;Noea$87h@yTECV&yLT-mWKj}mPoEMQPe3KpJ5p0Z9yR6 zF3o@}u*H*XXd|3N3Jb7D)^qqxS*VG);dX*4RqrY|P)Fa@yvv9nECc382rA!oL~!B( zRlBGOew7@|4g*sn2+M)>5xHeRSoB}zCb<#4DtD_i{xoJ?)d!A2XNw5$^gGIT9wzVU z5xtluU;TeP?sCAs!g6VW!4bbyZe^jmJQap(hk&;APqUz}nCQL8hrJb^hEBlhh+n9O zy_G;Ar&mNM|IjbBJHvp3UiEi_sBavYAcAjLtXh`xT`xk`@F>kpIae(bo)xJHT>`in zDxx;uB@KF6Q5}<tI*r<RzDj)Gq8g1xc~O{5xm>YJau$txn6^1`dzlPh36)xP!sZ`* zHwd4Ek_H<#`C{5(vyQ+T68&OqlPqd3gX#r3<{6Fg!Z}K`3gxmCr8+(=gbZ5fmW+*Q z@OJV8L?oHb!2P~gpphcchW%rZ=kPkg9d`b-1RK>!x%m1e;>gd)jX{vbO-%Ly|3<+% zTZGpxzmq&pwD7c^GGj=S9d}4w@HG@{JhLVW5o5Bf3?y&c4bpi5M@3&FA}epdadStT zPFkdAr~-M+ek+?@>r0j{V$!YCE0)53C&R@S*i@TVl(6KS_~v9bXL&LntF&s;p1wHj zs32`_ZYxMg=*9<J3J%kq<`JX3XkrP?;BtG6@hs_oB;uNT7n}nEE8!ZhKOh5*LpH$8 zqL9c8lax5UR#^mLU~*P?^69KCx8Op$uKLrcr*K$awKDYKqKF~nMa(g9Du;*S%Z!HK zSQ+urB_5GW^y#?l6w4^dSk40C>LetZV#(Ey!Z9;h&{&?q*I+fx9uR}3^V&x{`!~Mp z67KQ@SGVLdH#Bs4nT7djdl82zB<nj(Ri_SAlQZ{yLKd`pOtMH*4JG6>SPoD42zvAg zhV@JKanG1S=(5|UXxJq4d4f+|=vA!<R<SOWW;Mqu_l$!vsG8zn!BcZ;r1;KZtDs?2 z^$rmaeDgCxh~ZExC|w#vBH480WZC$HWVJ&io|f|F*_-4FB@9X^bZX{cqBRzpVX7C( z(rZYQe0;T^&q8)<l_E#dcP6A$J2BzmB;3Ob(>pIC#Y8^GuIqZTVkNRPHO{kW4xL`X zdO$er_y*IkkuR>do{&NncPSQr@upU9@jF*M9UrvkC_c;hdEGnJG!;dbG7p&FpZjLS zk{;_3QgWC88MUIYJ3;XTqgUosqE{B4e3jOuaWsDevfiw7%d8o1+vTw<qtZ{u#!lTZ zSHk-fC}2NvwuNMWcJjgF2Ks%JT*E^6fq9cvxh_Dj)^k3K9lSb_+MQd7aURas5x~LD z&52i>Y1B-u@<#pnO%N#wrXBPlA@>4hdJuJP%%S@N&X*4tUuq0VStfC{B&_8}4MB1j zms>cfqUF9omHqG3Du3R)Uv}2rv<Gj#ERloCtxy8DTsGe!ngiL;UQ@r|5;euscl$$| z4(hPV0FkyJlpfTN$>=8~FgRA_zyhfxicx=cIFPuvj1Q0#f)`@vF_MGTncYZa<h5gJ z^(fsTT}bcN{To<ABNJ()Xwwv(g0gZ7Fbydt_`B@!0_FGNm1T3Ruy92U$YATx=4v8N zz2HjGepk^>m=K5=br%+3r6lk|43cP_LkM<Q9?K($337@wKL3lW_9D54Ym9-7wU3rV zJO|WB=Ov&|6FU$cAT|<j@EvFKcW%e@!5Nw3hs2bK_6|PPDmuO{^7ilM#KB$~jmQr> z7{Fttpo84xqT2jt9c8Ckrda6je9E9Wygo24gZqnYX4$*uXVJ{ChGj+lw$U2g;~o4^ zL1w~H7cO2DVvO;lI9QcT5}1k8x!6;m)7DSzQ8gmh&5<!Veb)7mz)8NVC9B_UbU{{1 zg-rG<R3tMaXo`avF-{AO+6YIJiTJ5503O>w3&G74mK0Wo^iI(&c5j@M`<S{F9Sri? zewM8|IYs)7svrUi0iwkON(HndSOwfn4&J|M&YPm~T61tNf28*B%uAg+2c8-YUf4V# zPme$O;5Wt0C%C;1a4fgr1L`H+#Bv~OvGg$luMWAa%v7>&RHNO)X&pJ8Jv4a#zGc4A zA^P|tUM*V@ZkNnoJyO?fVXH-7=kcO<$QE|~C8+e5l#6~|<j3*T*_uqw32|rmi<e#% zw0vezueoo1#^QeLfQ+H%AUJcSS`r3$zJvn;Nz%EURabdXZim~WiIa}p_2mG6Eodcm z8qDs8dBQa^BfpAyR2(oUCB~Iow>#*wF`q4_4nXyN<E{EO9e#?#u6npTS~>14bSSg+ zpqjd@YG|uw*4ENT)K}pD(V99R(P#JCQ6H+*Vp`!g>rTBhSE}oA6}^zCX%Y7WaaHBw z!b5BdPa&Zv>b$C+xsZP5&txp)2E~_1GjA+@Nb4^KOA&F*pt^b>cBQv49v_m2?C!DX zs!5EW7AZaPxTiQ7yg|_0+aEt2?5g1;y^7!dV-<;v+Kv9g^fAt9;Lh6Xg|5ZU!NEW^ z4rbgf#IwQ6+o{XJ;nC_||MKtN;rT7yb;UT<wk6_B{eDNndHv`*r9qL-X-XEBB0^}z zdAh`ibb_^_ncNYX!+b1k1e7nED1WW3J(YB1LZ#8X>Ltl`BS;%!WKKy4ugEL$-m?PL zM&`smWRva09ocL-s%SFc)-=*e-{nKgynXdt)P++lBvOUhVk9g4J(G@JyNzy*m0QlC zU)AL2<UNmx%Pzb_RXW;1F)G<brpS3RQTbLEH24uI`aZfvcnD>wNNr087D9fq$zSaq zy2Dq)Y)d~tW-=el3#N28Om!JWuiqGZW%blSF~S|h5a<w8oOPFTJQ=kdVeuM}C+%|s z8TJ}Il#feewbEs-p~sy{@8=4X#L%Yd8jcICN5v1aMlD|osUAi-<D#lbitc{Tnj9oc z3-5d%x=dT!dz2$ab-GGgqYOS%SWEe&5j~1UEqM)HW1ud{{tl6>?Q~`a_iCX~lq5ZU zS9iZsU*|9uT(cP?tLleJKs#bM^k|W8Tob6Q4TElmRPX^?BU)yWa=8-kkdM7f05+Bw zR?yEM;iJTG53CccjIl$7elyT>uq*CSxezNR+;aXl(%?h&k&*)rQDouxo%sb3t^S%X zG)1CRwLZu#;75sdvT?Di*<v8X?Nw&<y`bgu*Dbk0GFEh0;`yCKAd-a#DT??aRWsUb zFw+Cot{9em32<5&Ad@UcUXX4UeGzb4=^*;nN&?p@_K_%MHfqJMBCQ#HNtQ+*0w=wP z(E!5hQ|3nlIqbbVj=8Z_uP$uZ7xi19KAra`Gr{ga0pWYbs7L+d@}}2&pZ}32O)OM~ z$LA3{0ipfQSMWCm=vpIt8M>`EK(ys`z|=GCR8#BW&7666_Mv>mw^n~jK1Z?fgco*b zYxaS*`k#jQRHv7~c1Er0urK>;ZNo{lIYz&U!CZCl21}#~1>;m5M#Usuf{Q_#H9eJi z@KbQjKq;|F+B^FFFX}JHz25$>#rH4juiaBNtP{0=c!w?_YdL#A4X?72`|Kvm9mEy- z2IDa*bH}u+kr4#Vf8m(}W;W!IB$!9(CnF`4Q~S0|oj7>TvmRJC1Lh}h9k~BM%mhO- z?PP&tP}U8#Cs{%-m6{isaU6|xQ8ahZSvE7vCYIRAr@+diXw9EF@ft`5i+8Y)3YDEp z?QM*Zcqn`Os9(D)gHEs07>>%oWMB|vSB~0F>7e0Z=rkFGU^uML7-%(CNhuME*XuGM z?eIcs*PM=159_EV*t%;v`;9ZV;mFc+*s|K`4c8<TQeUs0*4HoTzw(qkJeoJz*UObL zps-QaG5o=e$=}e|nO<q>l+_=GcDq$d=zF!><ZZOy?L++YtI(BHG{7vpQC5f?^qk-Z zn|3M_XY%OPg+p2(0=t~7oDp+{i@urDQd^aQPyzd4oK7=2dr00_5i{sW_aYl$J>2rM z{aEB$1B4r*iN0Kz2O;3zqDC40yYoY{xU#D%?~5t7JtA?9;XEVTi`5r)AN|tGt(a*7 z<~>x|2`-0Ox)lbq4TVW!K9Sbw7dbxfR}$0G>0>NOoKWqLH@doA7D21@M%OG=$f{)} zjg2osP5HGVb(PR2kO#ZL7Sa|<X2t8&P;=A=qDWXVntpygDm^7&Kv^GJ$W~emEfbU~ zGp42q@@$3^x=y~USNfmnv~ltin;@o0#<cY|Tmrt|IKJ4;Tmx#e1qhVs_vTZnzagf6 z<*S8@tDvVyHP)$R1bSOD)Wl<$rZ=HPFVIxQ@yt!()Fg2n=veb=Nb@>nqX|d4QO3R) zH@gY0NFkb3KO)5%jyx@xS|#T6!7nsgr5cEYCJB{3^4rDj^hGaZo+a!^v_7)hCHMzU zFTAx$zw)<8S=KF=m}E}>x#FO7sAo3`wdeM>qrY8W8FbwIZLm3g)`)%9Dvs0yZ#ve3 zIoJ{ywh?25>BC^*14EIz)n<>@X<y20;sfhrCpaRo$=f#l%;3=K7sP9}r=Z=h&+?|e zQg3*DRFC^Ik?EZ43oAg2>l^%d_?s^ZiW>%TtkX$pCw6x7<skANgpZ7HVDP>WnDEX< z5WhR3dGz8W^-14D^92$+L3m*6jvc!`dDqsBqPT|ZG}Z$edbN5`=7-;7yc<M$wdpiP zFr@kn!e>u7!urhXwB?VP(@fas`Yd_d^}%FN_Y0MAL-LOP&DL}Llhk+f69MJf@F3^| zEGj}GV1g;xR5^-&4Hn9$5%Ucw1E?chJ#hDh5x-1tZv*pSaYI^ei)_qG>oz;o>%b+y zEM<voN#ggWke(Fqp%W+0BMbhWfOf-V*x#P?5nlvoD2}Wr%ngzKglO3}7^yTv{KU)c z_oFfu?1`Mc*Wva#k986hRd`;m2I3(&5x7<++600>{y>OW3Co{76n4l0e}wRje?p%V z^-P-`AbGPsc_4Sl&A5c-8~CU9TjR~y3AWGjuyU#lMn&eckWP^L!j>))7q;SHLJfcb zh0a&A2MuBPg+&YzTE6s}oScll+Np=04HJ_zWxPk{1|d0X(h=b38x(Bn+G>xU9h{i) zm#<Q-Xipkq6pe4V3hn(4%e6oKu0NLaRLOy~f+tevMBOWg^r#IB+bIXJ`Qd=-n^$Pv z0G`x2lb`&@atwf>ijF53m~Lq#I7`qSRK$aM=(}j6p8N5ixt(g6zY8shKYnNu|4);F z{}#^ve@zDdb1EQj>|ktZ?(%<p_iP<#Bei98eh-#(!E|3DIAWv$6ecMQBQ5Y?AuW_X zqk)tkkgK`rxlCp(sFuP?wii7&YMUD?3@uA5I@auD3l;X&Eh{>mjvE^*8l5-GG%`1S zU$ZIcL1NB3zrN^CcRX&qUV2{k*F6Y)@cOLX#sVAfeuvC@@AZL+uSL&F-{qm@rXCO@ zVj9LB7$e5)MH2Wz$9mpUy+%5tfem8~nX2F|-kM|Iq9YQFqT=K{8lez49ai4IXW$y9 zo~jb~f+=>cxC?!pj<5zi%2W3ok2K!Dx8TlN17o0EZ+)3@ZuQ|A+wS<0-~2fJiA4RW zhGUB!Mhzsq>aiI2QwiQ-7-g?kar{aBdI5(b*uaP`xSu;WMZj*TZ!fz1qd!paKvCtb z5%<^KUM(;aGYFIYeKGLY{_gO1=UU}H0C8m>UVGyUhQ3*uM&1$QkRI=4K-j2WOofY2 zO-LacX5HZEJ};P!daDW)-Ah@BC$i9)07ntEs4%E_L5#W!M}DC!DUUOB(4vXiY{<kS zN(n0}v-_RSdfoDp(>L6c>Bts(<lrf&pvA~zEsU~&!gx9ETAkjQ_4*<PXJ5#-b{+lZ z>8<0iyGMx(<wY{O4f~<lsX4v=0vBt-oE=4@mo`hHoQ9}X5Cs~71Tz$RX{ybcbY&55 zZ=%BJyXlw+O>Om(gbSAxWW`%VmdVaR`q4dO-o21@h<+y}Z1?9COM$RgD{l5(xA2Pn zzBEADy9vj*a5E}`WxGU&WcEp8^$4eqxYRkyg4P5iy5)GKOSZ1*iZ4G5S!#fL_$H|R zA2S-YZ)TK%>R%FsE!&_EJ6anP+!x3}6&xsF_9lgHL~xW-tK%R@?>Z);!~kFT5EHha z{hbxl7CpZIz(I;s)8=aW*<a`pzfY+)+O=$>ZO@WgS}Ybnd<n-g=En5XXxm8K&m4_H zMQ(+{ahzmltvRcRI$XwE9Mchh*7lK&dEHES6q7`hi3VtwI!5V)3cQO`I=Lu51`N)E zJB}{{*0?z9>mpd_i%Qm1I+vven~^<<5!m&Iq04`Jo?*y8*GNhcNE2G6oR==6*IEvk z_F8iQrb;1$NP}aqDn1Dwgf|lhS{9j&9ok3Aae4I?(-9u96_Pi&=~oErj&LS7JOj_h zLLqe?Zjde3d)F<c%&By++KlAHg{`bcYU=})DJbqy3h!7L9idFj^pe``HqiOZy_nxA zQQ;i3@A3etZ_Y5S>7Vh|^u)HmXDZE7`zKNOxQqPu@nTDk4sa738EM$wm@o|pf?T(X zGB*=|`7&pvmXa8LF3Hh<DtbQ&)~Ut8LGV{e^XApEC#*9h(0SxbvGF9_GNc>XDweD{ zruWkd7OB;W7xj3O@de$md8P|(qHWx^WSfJiMc-B_1M+`klP5WbNs!LV)WdRW!qn3Q z<0e12RTTci!#!1Zzx$!>R&3tB&hsCcq<?NYVwd>#`RE=19T8aoPjt$izs}gcX6dn8 zM};g>4FUb|nw49K0<D$#g3G!vucURq6t%u0s~U#%z<E=I#>JA5t(%VQ#hS)NJ0nIc zj$gHfuOk^!=3c=Q`O;Wy35u^yDSVT1p*&Bv^fZqB%3nI0`SRozB$-8jyQm<M62ql= zYg+s7e(NhFQ^uw8=neLb@<oP?>cw@gBIVGo%lW@}cnMfD_v}2Hr4MJm7~aCr*OXDS z2wOP%Wr@PsIR5}JdkzZkrsHqwk;7q^@eC$3m&JJ!Z*J%P`6xQ$B%<U?m8xkZJWuoD zJmS>f25c!fJBp3O^e=qQJ&Al^HP4mh!NM@ihY&PA+M}#nM-s#089$G{!p-tuKeu27 z%>{KHefd?SlUQ?MZM5Bu_E>qv+h}HP*7QXUixOwspm;@W@!v;u$sS83&l<GdP3d=B zuJNee>Q79>L8BCs&PQc@>sShlQI%2E7{Xc;W2S<!QZzi1d}TAgd{|;F>7-^rwc)dL z1E>d+%(G7tAW_G<CF~--h-zG@CG9P>x|1|4M+_!q`MkTbV^nIY@MlC)rddbsFI6Qu z6Y5MJ`}tmutRA1z_kYX$^AZXP&q)YBM6R?xJ6BD&)QN%olv+9h5_6`AsDfhWCftW_ zn`c)i0!w3L*x!V9(4@=2j17zg@H>Yn_km1c8O!-}rQPM)_z5t;-)v?DSGLLhiACy} zT+-VC4*M(PDRBi;ZA%@xOMhBzfZ^#L*qEV!#l2~r_+h<D^^?289nsYVfT)}FdG02e z$J)jEcSdYZc%X`IuSQI(_{Xk9r%J9|bGys3eo?HG#8cRh!Hen2iN6hvN@O^RwiZJy zD^tFaiqT0|7p(?ABP%3v(pT9To<BR3!V;ZMw%mBs$f&}?J5P`AbO;JJ`5c=V9r08$ z8V39lCO7;^lbBlFp<gms0F97Kx>XLzw!1@al#N?zcllAVKzi=0acvio^08iZk9$zl zaox=6)97W>n4y2}ZFLur8k}IZ-QGxU>!8o@(ap6pF(372vHSw;39G8?8O~h<y=%Nn z4ny9+0-t+S_Z1Ha0Jkc0P;J75{i39lPgN3ue2}=BPn~8^?RbNsA=NxS+*?bz<j2W0 zDTBHameY!Kh*pt}X0E}|6z4s%joj+baoeq-8ZC~kY_3^}9Sn9b;a&i@6Eo^TdbxF5 zKB@g{L5&et9W$2t%V$+~w|aI+w36RSJH`6M0qHz^K31ni7eJDa6(!<!gBzv23X*wJ z-n8qaL7gM&S;7b9;peY~)9=PmLKv2Wr=h6f3M7*L*)A&MF^23^%BoXEwP6}%@?KTB z@f|~KLmCQ?5R%Uvvu}9n?rPLn#AOm6IjpHE+d}4_1j@!^u$425Y=`_!fN#V%$eHYV z_0HK>WYiCcWvqZhj<rMhm)Vd0d}PuCuW&NXX=c5$jq{^qKHHAN-A*x}altj+X6?ty z)0v#RWLWLw${3%rU0e9Q_W3qIheR?*H*s^*DoDg$_-Xo-VPH$SI<)b4?2rk!)0yK3 zC7z2Z)V`j->mJ`{cJ7@&$QO{H_B{KXdUyWc>umA3qcfTlyq1;^nwk$>OiUq_C)$i# zb6tzsNukp+4?(cTCL-roL=06I1H)<G^fB3rDGfy)-Xc(uyu_42Mmca?>o<$r!_V!6 zfbO67iFJtlQA9XEp!_S0E#aSseY84R_L+$^JuAf)42*-8oi3taQDFsa46-Tv_#%3| zz^)V$jq4K-&sXKG1ml>F0ROW<EJ>?u!LYj^L=|pL3Zxvd@e~j_y*b1i8O!zu>?wf| zX}-!O-gZLsExnWM0dc_+guM6L@KPCOdvW7zehGkLYsVY&p|#xXE~~3}zH58RGN<jD zc6rXkvCjC$@paYA`k+E)cFqZgCf;CH41_8yrETK2r1Jz(1>Tw;Rx)k&_)~U<rQc0g zfgLB~pnEW2=iGmZFB;+i_eq5}jAy_!4H3@d4;Yvh*U#KQ`*tg&NNolCY!7JKfhOJo z1DzlQ6p3uv<8$piUt9@@)Q7zM3~v3w!t=TSV%#)W{HZ3__Tj$o9344VP;nbn>Hg1@ zeQmnY2QK{DeYgWWsbj6-GFoej?*(LyMH)6G(v>-ks^V=eNlhdE?I4NaeEg|6bWd!* zwlHkRx&!5*G}V_qnH_1!i+jEqkpNqVk;*=Qy{SVCWn_dsqKoORhJU5=>}^2+QoRvJ zTct-13oFmqkjY(%z>pUk&t2y%11G%6Gp>|H=p79Ocug(QHo~I)2~Oq@d9EE1)Iq)E zB4+-6l4HlgojU8RN&TeacHP$Bul0|&;hMvzfn4;a-&A&+8I0$LhU6JC!-;I{%cGiO zFs^LjhEB`kj#;d}h^*`N^6O-cmwi;u6|W1ZI+}4Ji^%E3Wo|xeD|3=*Or;wXg0lv4 z&q}XPWOR&Rk_+X5V+r?3ijwJcxd;pQSqr<<21NQc_-fCex@j1?&Plq2mQcMx99;qK z?_j)lJnq!3oK8gPlY*1so7`hE)8kbBBkekPk(>!J$LT4ih9;nTgZXQJY_D!joApNN z4<4zVdf;o1=Q)*~@x&`!enT1LM$AG(Cbf}QF5$fx5Byk>0wCGq@5#5+1cJT1g0Q6& zgn!+PjtJY4I8|Y=YVj7!&F2TUcZL?;bEoxV8#7x5x~b`z(Edu#5G~&F1aoLoUmJhr z0dn&m$9IgbrClaiKw)Nb-#;H#QO>ilU1!LMq_eN55H)8yHNvd6?rG=_1=GZWpf>|P zto$Go#g~|y+?Mc%F=!u)QdtewdB-N#M>`8BMWw`Lq=M;(4CdHsc2W{ra-m>{*vP8^ zpNqFF$t@9b7Vj-|#wk|=T?Ie+E-&x89wxnJBj;pb$;sU^=$D2ydhk8g9NYsvoZ3Tp z+fNx{#F7&0^bir4w?6rxBX9k;>=hmA_zx<om55omHw$$b_qkIow1$&a=7#@FC<O@i zZEg<OG}ODTe*vs@ElCVwOk%jK#rT8E4n?Pa33p)<&J1E&CNOTg{$sJEGOWQ1VI(xp zj0}rKsC;bUlQEo>G2~2GASd81+z6|*A0jCkirD~Zf`5`OaS@jxFVo3|AGX}#Q@Z+> zH$_La9|b|4g-j(Nx~U{<mok=L>Gy*-RL4#dQhCcpz*B&5=<46()&IlVJAYRmWp9JA zo!l4|+jhmalZveyTNOL0Bo(V-+qP}nHY$A6-P1GgyVi8C@2oX{!2SGk_PJ;8XFr(B zWbg`CTNzlhq#A5RK+uKc*!eJIKV|*p_mzaV%2Pmktlk<3+#|R~_boZleN`cRWqrf% zs<!q!x~6Psx<QiHWWQCs`Io~cXMG;h(-)b0p5(ucmH&~@{U654e-pYhRdrP6zGHk~ zN`n&%_XN0u2j$X#quy+Qk%n|GJdQGTcMvyE2d+&!&q;BNU)O!vRRjul-*9qgk-7X- zic6E_@M73<o6O>G+w#Ttg|vs(0iU*)k`QD#YYr&mp<v>cE*$@MXs_Fch^Q5kZ?)`8 zF;%S^FP!QUJ638HmS&}8rrRJp<dS&cK<-_K{n6O6@3I4cX)%(~sbHZqZwowh#X%Em zqQMT4X~bX*R2OsSZQuQ6R==;kzH*R7F#44;EF0hBPF!#uf%N1fWYk$!ooYJTvII{S zy}|_9aSoM5&T+xiJM6Gjz~4DV-GXSzU1>M=(x`~oR7z}aKxhdLK8=V#QeoKBO#;N# z3>f*PT{PW!>&^@H+$XiKqDgq!SAhY<tEY8iUuU%^LN4CkFr8vL^K_|0V@q#j@hKxN z^(W<X;#Y1*%8#;cSVpAp<JNajNaS@!K=%u>yRcE=KNZe|II3#_wwY~X!P;(9_4FyH z`_~fGnY@<%*&`-ojxse4>@(f)R$D<&%59uc>V^YcZoRALT4In}HIg;a&8Q=&P=YOj zSyHbhn$0BoPDjk*@uVULsylTc0@<+(>xzt=+HeW+GzU}=&!8eCS;z6|dy`&)Dk<cf zrK;Qw&{YmHEt{Zy24|A9)j}uAj}w0;uD_U+JP;1%{6z)4y;J>J!Nx$-1EoI952$r+ zi^xybL1KlWL*FLMmc8G$t1uz!sc!UqH;oJP)gw%9g=kE&S(l-ftw^sYFUBRR?!K0b zB3s`OriuTo(2V4WXX`(MaD2k@Uy)`L<0kBbxA%OdoYi0{!!XX-W7aZzPLXcxXp?56 zFyG>I5XEtc5?w=%5aKJHqE6`KdSK1qGXD`t@7CPsj)9M3^N%zEU-7iSxv2{=cNcys zLGr}yXb!;{|A6=hvm>+1fxYRAiUIzmcKFXs42J(96GO_`)b?LkOLT&*!ki+;(5Ks3 z;29j=u>H^CXAoUf8aOH=chWdIoENa(SLIWxmDYUv!6siKban?T?;YrC5uB+O=fHU* z$po({etzVxyRM5XK|w!I&4EIHv~#pd!?@(ocDkEdo9-S`a9a2Bz3><{P;$w)%5L|w zexD;A0!|xVFDZ<m3pvmUURRMRER;2{0U%2Jg2|YV0;4{J;V&E5`3gU$ru2zHP=MbG zZ|=P`EzJ8;(T0fNsv9z|K+~BA@TfZ)OrS`foEymqv<>hQJ{PloO~w7VMWH)oNvT^j zcSf$aPvLuBKWu}>L40bfp9Y4mPHG3mPY5yZ$c0lYOYXW}>4(|y-PG~5PQHc}CV!NC z)GHNEwH}vDiCW-^YLNqLiOM25I1eUXK5{P4h&{BbAkD!F+pA-4_)Z_Pe0bPk)|7&i zIfNY@YLr4YDg|3?KokHVIHSngO^rcBcj3dTuB6HN{_x{BXDDT7vZT6E+0o+i$`$}y zPHoFYr0GJ!+5A)ELYNMg)2~6&Ke`>SZT7+-rt=Z)9RUuG4qFRyQTCE7eZ9<)^PA+7 zgLc*233$Y`MRrY>$a16)hD}*)uCB_9;(6L?=!+PI!ZZ)Ph(z%S6?@sVHu)#^-yx+0 zzueIRrf|HU_1I#Pk%n-yM)+dd2>G+GJcY{mp{_9+7gbc=gdB_cbrk6-=Af47LKEh* z`}7fqm}wb%_-ns5sYg?j02EWXAt~As)b{9gmKE#~I|2tpsxg|KLQ}irdfn8>4#1s9 z`=nm`q}?Lf+aH&7Zo`5p1(L{9wcnTGG7mrx#`Rg?;V0_W2RiVT5@T_Gi8BoQSj7Rp zR6k*K!)OO|`e40J<IzV>Li2RP(hS4G0%2*8T6q}{GT%$7!^oX*{r;H-xx&mKUhs7R zIREPf_>U~{|LtXv{WlfqUpJsY3)UNB$>Y<H$2Do;XFmzb?hk}vo^ETH8lhe&0_-4i zAu=2UE{?p7IJU*}n0DSsVq#aMwHC&q8fMpwWp4bYX!Itbqznod&jPtQ3fqJ%sr38K zt9$zlu1`+ZHf^c4AHhU*cAbAWpFXy3KCaSt&ICP9XhB?uoltEC?{Ec(gdnr@gUCAn zFfgk2eb(u0yn91*{bUrk2UWq<i~0jK70O)UYfj=0s}Hw_wJ?!PI{zNg`WD~Xj^Cqk zGsgZ5cq<Ljhu>RDyj<#iMl`+P?0fcnu<prb@}&*1+ioIV4%>p=14Z0Y?X$Cd-hlB% z?jjm&TDZFkx`D?1V2Tn{PWsU7%eHt{LEMVo_Ij?vW!s*zzV><hzVjA|`$qmjBMtqL z1N9l^7a@FYXLWyN_!jDTA_xfkREF`xUcK|#TAJSMwj}?!g86{{)Cv6Tqa9t0oj+c{ zeZv-1YO1mn4n+<V%@?Mz&X+E=CL>F04Pw_)4FnCJMqpGXZEe*p2POwSt}@#prp0T! zl&B;ZurVr`{)I->qIf{nVxXNb7SdIp)whfqrqQYpxBhKYfm<<W((%oP7q+h<qu#(H zI{_y$cAtWRj&l<$j2B{|GLeN9j9c=-VaRomMO@lmM88*RU`RQ{bV!0;dML9T4>?OA zMkhQ!F|$6Jb)}ivasV0P&cZIvI?MI7ygn5$|FB`3!LrMpEdEknUPg$lWo+3uVJa*1 z**?@(Wg(Yt-5(k_zymD2m<H0?ws69$b0j-A9)$fVU6XP=(Pp>&mW<2H+BX;`C#71l zA`ul;a0zah$P1i_ZS1T+8H6RtbRL>e;!F&SZ7FHK-~y5uH=89{a{-%h(ZnZGP96cf zo73yc6u0avMjcG%h_5BZHb6rb5*$_?I^}I$T4rKRzJ1*Aa9?AV?<GoeF7pZ6y*Msy zLmpeUcv`~xr$fsev&Iez{lTPl+M`!m!6Kw?>9C0f1BBRX>&dS4Pf-SHams`E4JCjp z&J733lJOR?w1zrP(17Zr;If}^pX^wvxc72eMdKm~W`pqkopZ2GEc$6$$*6#G`Y(B! zj3>!vL8V9~(e-K2)#zxjXI6r0N&RdQM2!)o^mzT5$z;FR9Vty^iVl=H#a)4-py01I z9lOhEvOynlq&bs711TVjlqfV@x`jtgod|GHI`*$v@#FCNG_*pCxi_gqc{#h$ik_@U z>9HE1oMzC@Qz(Y$G0P!$x`$t*KG1CGm~(azyTZaTngVY`*_pz)FhfOba(+eJip<gm zF2Z(>1Gs%C19@M|Azx)(_|~k6539}Sm!wZtdOvoMq`m2SqIul&5Ku9p@$;I?+Glvg z6zz~ci6)#pSl2I8Iv)wz9CFM|s)99vd6LR(ju})ZG+c?m7<<Vifg!y>D#6;tG6}P` z|4sUMRLfQQpuO^BP>9Hm!>qtqE`*_Cwr~Vfw{g^^{Jap4^B67p%!Mz+iRW@ii$Gz! zoMO#+g`sNBB$S~l8BcSyzzrHp!?(XZJ!NO`)?8dR8PAjwwZGhkP7bkeX~(h6UcS19 zddB1m51)^1nUL2eU3@W$JcG?xZo+w7vap<uQ!KM--em)FbS7Un8EK_rOisA6GP9|| zd4<%A+g5<qa<)V!+1Y83j@1Lo<s@#S+|PKDPB2PVIbp@*6{%GAq*eilTAr<jZy(|q z?vOnJcP=uiKkQC-_KmGiJOn{2pCEnVvccAAyqXssmNlKe_}4e*m8tb%(36GzKMYN! z=>jK9Cf}1q98-?lU|7!_i(V{h8;CtbG7)agi;)D&#;Vr~M^JTRMlW0(qjvXP9EFp4 z_oG|asoh}jg=<nq5P9g<E5@V@N20d%bkXAHgHW*(ndJsuYW9KT`17X1Hb5U;<@m*c zIH{h>GJyz}7U(0kk>hxP8GTVg$|ZT(v7`3n@hyc1YicWg?1`iLX6}ej>pG*|!j~k* zH@#gq*=-oSm5&Pf<W}CrBbnyf?d+D&ql)5c?%@3vR9AqCzSUb&SAY)L`W97}FfR7= zwwSMQjN9W!^4)FFpM%;d$DY$je7=CfG2Rgf&i5|OROkV^f?weln>qHTQi6}jPfnrL zT>Qvzn3d*Oj?`U|=D+BheuQ^!Jvj5mWIA8UdA&<BA~P5}&dO5qr|G(*FrYwY3^iyl zYVz)wj6d5(f$&C{mYQD3A*bf2o479HJj%}<Oh99$<yTan?YI2tY{?(2MSD-(`sJ~5 z*uvWsN?RHfqg;<Wt_&3*t);*Cy)#tna^$uQ8S7iqZ%b2|ze*zkG#Xo_?zO=zF0(Yh zeP@weT%a>o4`ocKw*=M65nOE8*cojIbfjGpBAX+oECM>n7rAN-qLU&Y(rL%|jeBmk z-6*iHb;+wUn`N76sKDPvgcOI9ocQT=Iy1C+NBqwo@cM8_g}%w$si_`^LoAI~gv>@C zw?<kQS0<YS2N_uxvQezr^tT4=e#jh3W0Mgw7oHxgPbobWjADH_i|$MPU2aF>AgbT< z4oxm<=TKjXoM2{6lktMY6wF{wQ17j}3}G2VL4ci6dyAXW<R(4HNfPo9&3StUG`dS* zSdwEn)TMTsxarJZ0Vy*lzJ$1Q;+f+Dq|B8@&Pr+xl{9UeY;7y`rRnSkFzFCi9k<K! zX;z8iEG5q+MMXvH)`yd29&uBygcN>^QcT?gjBLhE!Yr0YgLH?(uP0P}DjI)r42KrR zNsT`HN1jLmM97;i7yQh(iF^4Hx$=0^tH#fJlNkv`SGwzMT{BOZC89GXc*?B=Do^v` z&q|fA=%uvNJjWg<dkVxnj&FUJwP>;wXcgW#Xv;d|Ff{DG^o7uYx7EKhM2!KSu>dEE zBQG>a<Mm-Accx{~Yo8LDi;Z!9clbX57XlX+*V!d1uuG|u8fRC4A7)(WxR+zdDR?D) z&4tViz#}#1iDMC^C|-HgkK}YmyuMZlErg(F_3)N)W7L_7_j27!N^F33PkpuyTRN?= zq&47h?0`HQ{}J!pv%SrFEH2Q~Z*uT1B5G@JOwo8TfOOwTLS@FwSu*oTod+Ac=<jBZ zy1nuTG<&UzlU>#6=V*qZhsrsEW<w@5W%A=_yGF3(g2`mxY&ygB`5*K3!_+086J(_1 z?^Vi$FL9R++2&e>{HJZHhLnyRfmz8K>`(RhOZ(`peDv9iH>}?8y+zlS;uekFZ)T*M zM?Pu>@J3O$8%w<D*2;BmX?$an%!%mSof;<{Ctte;Pxy!6d%OX1{N=m!RB-22j=J=> zZ~}O(@^#UNiPKZU7a2Wo;8<_bMu;tPO+F9XU%K?+vD?rF2M2ze?`Y|usyV_wUv4wP zK0G(RfAz+;ieHMsghmqza-7Z$;+MRrxWlET{n;xRg|)kaB8(YxZ^25n*BJh^HW22( z!*p#=j9<5cop!M=IyE#Diy=Jx@MEtOTJ$<x@sG@S^6`xh4b9B)<VRGG^m_Vpz?l02 z4_Qa7(7eK$_X_8a({lngpI%at1mm%6CM3pZ34c_N2?`7N83gxza$64a8vyd#&eQ~W zZ3Eda&OIAY$%d!$N*CP7LKKf*hP8+NBcb)t%&U4PWt9eJ^pHBSP>o15-y#V;;MP)u za4Cdh8M1oO$TP+1C1!Z^3ajtMM0H}7aG6_n>-x7Rc#$hy;Kow=J%e*+MQV_6tEz@b z)_-!Whh@I4h3hVdy58sJ!L0OvtoZnnU#QN$-eJ>zaVsOA_q}MWRWt<x0Rf$jRk=HS zjR!N8_cQ7Wc}h9D2YH!;r;Eq9!7YT=u+0~yZ1)mN3Zxv>E@K!R^%}O(dMbZSZ8CZb zA5RBQ2Wd8KvV>K<s5~#&($*Tp=~tD-f{hbr7KsZ0Km^VZsufwOHMT~@W#@aXAm~Q< zofmr6WeV(Np1=z*M&7FQ9;6-_1aLEZ5y-~Qeo6c0I<Sfv-MV2tgXzaTK7qme*RCbV zE{71&;5#l_8FD}7$Li~+StH88<$*5#`Sn;|{B9<2ulOC=9rciUWMm~z!ca?75QQC- zte$UKeJBD76L!1Uog!sh1F(#MgyI}m!Oe&!)G;Pt&)N-ArBD2cCkS$_qH_NuifL(M z`nCM2WqZ|7+cTT&tC~CKW?ze}+OO$>XUxsWC+4_UEvu^`Xw8%<Lui38WTmUV9^j3J zPYT-BWnaBlc2h8|zF2ZdY`b_$A}-;MVxI&tE}>e`9rh%o>6<NP7|q{0I{(M2p6$uw z>oQX}eqiYkp<dB6cXTDZ#Ze$l!BK%7)CNFSLIE=7@Bn_`f^~UF!~&{Gbz6&#W}p=3 zysCSQYuoxs-N1KeYvfFKx&Qehq$efz7j*pkV4fJALt{6Z`3)B<dDa%O>Kn|VqZOah za<QO^bJ??3DM*nWF0{FQ*`MsQC)lH{9-%Ij`JbiTB4C0Lp+z?#Lo?zt26}9&u{%x* zxk9k9s`fiBR?ey(8brf{5~9(-qVt9#b02H+mY?&4#4Vh0t7}r1@8wZ>`L2Qe0zF@< zJck&K1M{f6G|g~@S|~Ns3^=|R`%RT+_iYF8Qr{?3T!EaO6OEawom36QrwEDoY`P$W zZ{H>oePLo|aA0S-!8s7>-mo5ozt}q&y=b+5;3aNJw(2h^rzE9nFgCI1839d|ws4e% z_7b0%NSnicZt{DT)EPD#EQou@Zvde23Q^8O9$zewvAGQHJAkWw#vEJaaa#7-T<Zn! zBT-kn`t-3ok7>lo1UEc8-3<)^D+kFdNfp<-VrrzQohgEkG&@cq7uAp8_rjLqk=>2k zvzOid)HBxGnZiFu(ZvE=X$B+^5XNu+4T~ZFPgsnEs+^j$rH#|SQOW4|Dd609l)<hE zLCO*tIqG^0X>fK+u=>JjM^Iw53LUY2DGbV;X?Q$ysdXNX+RR(Y3{Y6&AWyMffIC)y zIVdD-5RFGy>el(>q`O;}@24}A0Uoay-JUimYqQ=rJF#6v$TBo(WuSBmxv5-4<#uC$ z3zSHcep?M|?KABLR*e8ci(r_<t|_0ZGbK#0K)5LOiS8`NlLEG~1bfIE`jFEXPi6F1 z<<~|kwZq^W_TgzIBW{9&eh|Ut6BUa-GXCX*`?2%~Afv(fGDC49s6-(omq1on0>63W z&2Z>+uoBCb@J>a3Ev<78GVTnS9yK<=KOiEYG=jIe%m@=pb-gbnLJk{YjAh`uS&$9a zpWi_oy7C&z3>zvZ;?;2_={K}8q4dfiR3FWI`_0i5UZ1<o8&G7+NYT2Jv6nwqA}$QO z-ZItfQ<ICiZ`AL}VEQvH8QO*n+C~<c%WbqHoKC4iHTLvq#AE!=c{+64hG%Gw_vP<z z_{{=O@wEB8a!*$D5sj;bYG>LAT6KD7DHt_66CoQmGF7zZauuS;as{D7_2eFJvm%5} z(_bD9FClCmKc8V-A6uRYOWbZ{{JvAnc?XWyK{y4iP}2mpP#?l3Qe(p0snDTW32JnS zA${rUP_^g`5lw5)oV$2Uhzzk_P2}ng5-zqO@oO!|RlHjAM;Mz$({gLR=RrKQ1dLUG z5F=9m_9EBnl3e(SP#K?OiDB7<Q#*Yt_)kq1eOsFs?H3S|0{-8s@2fQb-!)lZ)%Wkh z%hWjY!dSrh%rxO-wV^-(7wQ{8Lb-qnOZfSRB23OGXkh~)K1K34IAJAW1GbJey#->{ z(|Uk+d9}2nxMNwH&bD9~7tOLH+4nSiTH*a%e>+cL*UOBPVn5eo-*779Zqm!o@5+nf z^Zjju76drpr@n)UKxwdjOyiBUrE>iaVZ>Fs3w`TBCnQ>FBuY3AQH!#GEhaA{;E#)6 z5faSYg0Ijmo`Z|D4iSN!97&0#GV2ZSk5C*4QgtBlhqh<&mwHp|iA7tEf+n96S#ZaW z9X?Qk6qGlh_08R71{A6CeZ^T>K1o3;l(=gTu+CPQqg(V^LYian4JiWl>APxz4MkQ_ z{p0SM6A*8W*r-y(8K|(Kp;#{Z8>Sq~4FvlR_it_F0ugE$IBBsL^XVn-gMv|a5U)|w zsa!0V_8-4J(RnbS8_#kDCOP8oxU8%{K@xD%Tj$m!dY9Y_hc4!`4bi<6<mZl%oU~b5 zO3|V~ZXHu$tb-bn0!D*|bqepd8|zOnqiQgLhdS_(z_qq$^mSy>#_=7zb_<-qf<EFY zdN{`FAO#*8K1UZ_&nN}^KBA^*ft^s-X+|*5B23Zlt3%M_p05t}_m;GR>=F_@Qb{R2 zbBMnwp5<7w6*jl~dxrPtj`Ne03I_O?%kjmFHLG-7V%=)<_qop5l|%W-V`RRuk%lYE zziA&o(}!5wvBSmOpGyL=sonK@rT}jN)1u9WlJ{*n<`G_WB{~H(>m&<G(QO2Cu0F~V zH~Smq0a$G9VXlbu77Nwz7jSyB*D`Mrxthm9<`yejJIv*e!Sv(bw<=>jfkI2yER$C5 zkX0<@vvVb~R^RQ&6RURAAiEZ?@!pcw=dXF&C#zi<CXuH05?C}NzV}_-KqK01$HGlo zx~oJ8RP88mRc%k<egt$`xx-_zy&)dKdaok|6+yGW@({RWO`H~#PCHZpxrJ&Q8l<Ko zl;jWQbcWL--F5o5Zjd3bEK+*OLk_C~<4$<;)F+Q42yqLU^LBK96!KX=7dap5H}_T_ z;pHgxb(wZ@oMd)%oLt5bZa9E%z}k9c%^}=yjN!PHT;7rLiDSnc58d~~bXEou_>Aa! zJ+di9UHO}wCPNU-wDC_p+@pJd1rw70vXVYgmhrI3<LQh=X7i>>w9)L$#A$5No5Y5V zC29ie<GdrmTkU1#Ar;m?<~lg3X%3gXy3G`8Zf%6d1`4$H?kI9nrsj6LZ==cDX)-{C zSbgE)CE;%c0qnX8iW~fJdGQ$qIIYWZVU(;=Qb~PDSdqOWXvOi7yiJy<CF{~;*iP>L z<>fLAX7M7__A*`}(fT_epr(8nn`9!69(VB2dM-fUOFLPH0S>#<3W~={n4h}9V~82H zB5J)m@)k<Ce1TMLmiX0RHpg%FbC<BKqRotVvM|ZJcR^kfgBIiUoQUZA>Oa9tdm)-c zv}R0dEeobgYTkY)I8p?O{7H@KCGnzp@a?AO-Y@GlN`f}>x2tO*-#nv&6j2&WZfoD~ zUfNW~nN>hys|<>zpw&9rCrz67eN|o^va#;JriRHvAEaV$VIF~Z_3$jv)$3j3QLeMV zRsx?$^83&&)YgBTeX-u0dQ53YxLdzMr34S(KX#yxA0wyRAxkVE)5%L}7umff%*`JR z&X67>OYX#6#IVE@UE2IPBnO(=xr^}f$GD;4b~aZR^4-;t6WeDW^!0>}I{bon6LifN z7Jx;X#b2+EimZwCIP2>Z4&Stc^leqj*4aM~@q%0z@F_yB8sB`)LBmMux{tQ&qNbu) zm@}*06p=(tR;ZY{$qXJ%?1aPKU*AgE$f-`W#vRBWb=eR-!Fy)RT3qqR`luCWUd`ZG zH7c|1<<qj<Hj=%+@;qAOvZA!AG`1^dCq&a{p^~G(AESyl^3trOBzAvMW19|`c{K9i zl(qhSjIM}}bKJAh@K_a)>S>INS5$q%Z<Ey<&H9W9DHUS=eect>o!U(YdxKDCZFd6k zhT29awTI>FN0T@<40Tg}J}M^<8fWbu{*!i7Cwy)$KUp$NxFohB>vGqQMBRRC7S$xU zPGIG+2u{e)NjTBbyfG!>or8#Z{Ho8N?!6rFbtOWYar#xjJjvo7^03Wvv1Q)z97fPv zbk4Lk@}kLjW*%D$`iR|@?M!G`wDOI&FJ#%{5yUGJQNrMqH06Ad<Ge4^!~s8_z)h$} z!X0)?2zu9qJ67H~&RlBHfwL9Xm;M~)vIkVPmUTHGP*TiSpGxFb@5NG-+F?UNQ5O9G zq_ir&q&XlefDp0+4ieNmpdwpD#XhA*f%%?!H#<jOXv-X1dHOT_P2VBW+k}iF*`GfD z@}rm$idl3D`#sYUqDjK1ySOjcPye59sc@B;%E#A2f%m`qhmroLx75wh$=TGz$k5Tz z)aL&u$@KsEN#TEf`u`+H|6^To0Ql@Wr%14&FwqkJ4ho6b+@i?<fcZv@0t5U;&dj{c zzLH5M@+kSVJ*|DQGh<c3U!lFGU2%U6M1&|UXli)uyn5|qT+`Nh-Q-L#;Y>voeZHCC zyz<)ey7C(O^s3{#>)KNQ)f9<+u12_`?*lX|^t}tXpC><Ax_5`7;ot1MKYwRF7gQql znGTJ9{uKf}c7sB=crA%TIAAQGx_jfOy4}a(EgC{;f*rS0j4)(^O~0~kHWuHs$CB}D zCy#}Xx=%&G8-a45G&Xq`9algrL}6!6AR}_h;<-FlKkHG?8SQ$<$z8nf$fvlk4!3h# z1iVu-g3<E17Ma*v%*02n{4)(%e~451Mvka6*e-dG_Zi6D8G1E#4UQ;yza#NngKYRF z8j@}GoQi*abnp!6d(u~ReFmcQI^_5U>xcC7dI==rI-~uAwR`iWY&;9OJMzfn)z9=f z8-dX($dQBw?oW!eNns7B>S-R!ZB32pBxd~NYKgF(`G_@nTin|LTRNC2TWG1tARV41 zaKwxf3ReyNzEQMSwxK`Dc~usj1_}2h3TMM8U)d~btE}%e8eE(zy~Zdf$%M{KoJE~w zMwIHT9tusIBAo@+wo(?a7nT(rR}v@O!fg6{s-HB+UzX2=_P7oZ<mouiZfn$%xFSkt zDe5F^LHCV66&L2gG&H1KmMS9(dz2wgv9?EAGgS^kp}H}B+g3_^WpK1Qk;%<;&&RBE z>^PE{{9BvRhWKc_Tj=owf_Ayn!pSo5%c6oT3Y2vqf|iF>+@yE|TfO$T+dH^fA>~%y zU0_47x2J=DLGs}U$XTaJEvpEm8iwQ1`F*tmQygt(HR<uF9<MPkw|3yTZK%i!fE5iq zXT#@pg-(xLFD1RM`a-cE-?d#0*XbTEGMyVDJ1&A!1wTpjx4k+;Lh7()YG2ObjmzO8 z@*#oaL6kxt<dngnWbXrwFVRzLs2sWKfxB-LPjC+3^br-El)19H(YGx?X2c>{VoGvl zXy}k~<EEI+j(sIJ;7N7L#%k7run(^fg|bCAdrzXwo^K{z_Fe~kw*g-ZRcyTQ_lsf| zfK{YJoNqB+CMm7SG-_o;`3#Qi1fy#>uGCn(ozZH3UrW6%q?+|u&yp3Xd|NUxk6dHO zsyBZ7ezI)itkVTx*s-=~d)iar9AQFV6CT705AU$l9$#(2GXaU9*HeSoYI=R2>zz4b zLu1saT{?L8&8Y=uZYCC#K%?i|c<Qgs3~8LuK6RcvQW}{uvxp&fS}m4|rDKH5$$Us2 z`g}2-OfhqGO!*`2Xw0+vph?5_VZ%B!=oHpe9(=2@6o=qD+{`i+M0x=Gm@`jo0MCMQ zru+j7+we41pCgViOZlHfo{D(GhW5(19q-b)W3Wty{05$iyaxz+TQi=DvV+mIVOJMH z>-qdSsMX>*iq^2Jq!IU$IWwz8i%5C;dYAF^zttsk9QJV`W||<5gX&PjZ#o8AF@d{g zgJHNhr1Mq;EO{4`I$sb;TCGQ$Ja4gFQKoZ^xMAk1C06#lQo#%`ljqnJ_hP0bp%vTK zxizTO<upg;ZqgE~L%f6MqQHkomqIofehwe2eeMLVRXMNBndM7F944>SqVT2@KY}1q z!8~q;M3Hwgigx-m2O<dd-Yh{G`Do3SuM)K@D+5D(Qq;gl^tdOVsV7gJIs4mCcrljO znddvShwrdLXs~aC{L-{grk;>B_g)cZl=#x=y)^FioJ;$er(lP4k;a_0vnTz=pSft~ z1aZ!@dmhgY`KIX#o(_ND+)1=^o4nnwbPng7j<Y9ihg@FM*d0>zX3kuubF#eK94{=b znKqRNhodVi4P~mkul*tYukL;CCEc~Q)xYxlA^G%ihcuD)*qBi8_3-1g$qqE>$1JlV zhNPq%z)_L%9ZlD6=^&o@JWF#z%|g;ZGd4U{l^ptrZ^B=?OnJK02nSL{!1&sq;_;nq zSyGI$&Cu$BjxAUP8bytH!lB)D4BKQCEhwzGB5RGMd?+)U8mTm~B}fNnoV|V|*1=#2 zF3#8q$ntrlOg9_mSu=^K1N$<(b=rC5p7dta$d&0n$&{qPyK=cSLDo4VGM@5bMOV%I zo3vQVHI+e7m)Edy*S%?^xiC{GvBO2!HJkWqHyulv2O3kjbt4<XQ2!&ZarfJwE36h2 z+R>_aLV@Iq67e_F9{_O^d($7|+61dabuSPG`RXEG<Gx3@c9#a=V_fCD8Ay&=_Ezv( zXNzjm48=bk6ayMma#KRvE4-m=Yc?x4V{FfnvCNoz#L;>Wx92fUvt`m`6_p=7gc~6+ ziwIDr*EbkFR@25x=;AV{>QmFfkbE4&bZaID0I%|Myor4_uHpr98l%6I`AuWz=!r0c z;pfGeuc#DgyGkMhsuu^G44dF7u7EX=4j?>VMnO&XqSl2yiOdWF2fHda%S3iMw{2?+ zf2SSN-fb;HbehYONU13$k;y{SPBYh$xp$1j>TansP8PZTXdL<cjRx%?TmKWcX-YU+ zjBIwf+z$Jo3~-)^5et5Eg^f%Mh)A=9R9^258WNliD5@4baw;B|cFWfc`5t8ceOfN@ z%z%TL4YC#Bg67Pd5sv}qN&i>NSgG1|%X#@cd)}k)qKbJg3_S@NUL$7Jkae`?d1gP) z>sUAH7-&$x6iR!%aZ4LWJ)^a^s&Eu>IYoi77`#lb6xm@}TXP3jY?jWQJ@3-Oz}4}~ za@-t#tM34nFBqrSjZq(C@Y+5~>D9*VL*2Yr-D`L7S~L~QAbqp)$<g&*C)}be5$)-~ z{J#0q8)nXDv}G<Z$?K&;zz5vP6_9>o*n%VzUt(LsCSsPj7D~z66DAJ7FW!`K?Q8lZ z^OujFnPhgaY;fWsZ;4$1f%nAb$Gd02L*0e<ne=&)DZn<X9^=phm~s*E0AGkt9WR?o z49)6ox%ZPBs-~g`hqN5N(RmGfHRJAeYImDjuoRMw;=8rpM@Yt2qFLMbAGSGL{Xcxi zX0W%<CzT%<<+0r4I|Z6JVw!HD{@$2Jc(mvm6X(<JLwKq6bF}ypDwNm7rajePZ918n zYur^<Tnd&RNYO@X8xwrKff25j&b&H%{uKDLr|aGn<8~{7z1gF$?cV0C>+?$>f3LzF zkJq9%(KQbpu561spZu7UWS6#)QQ)R<M&t+1j!Ar*MsHoq$tg@VFJ)Vx?9y@u!(Ua4 zJf3|S?Rqu&t|r%0D|om5%%oPRi1_ye2KD4NOZ+@G&y?!>`pGG!%q(OXd&neEs@*P) z9*`V`4zXu_wxbPE?x|Pi?!9j+z~E%_?<yNgieEkLz1DasFQ~$ml6&@dRF#N3ssT#H z*|GLj=HKc$HV_B=u{W;Bbc9o)u(9UV!>mftkT6EX>eZHK4oHu85x}xu6r;DOyDm74 zj^XlrV$ku!1G116=^8o+<?{ifg}hPs8KvAX8K->!@9jBwXND!U2Jt{b@H{3)yqPwX z)|$jU_MKPiN8k(U@q>Sa()jH*8O<u5{GZw<hv!(MM=CHei|Z((nD^pZBBu+9hW8Y6 z!Na>eIP)kY|Dja6`{H1+_HBXzEsnL7x0Ld2Y|JYw{GRx3?g53}b-k&*;*;}-QLcc3 zXjz@bvzgc(J_@LSTYMqgDb(Mig<lB|$F^J%gSv?R2b3tM2Phnb0})E)_kV7b1kTIs zF@}_mM4cF+p)7)k#%fadJqU*!xz%^Q%X^{9#o-qXD7##C!G46mb1y8`iYz%mEY{^m zH>0L&>aohS!%$Y^5bY5t7}Iu!+K%3&FIRBZwu5sG<0@1~BJVIwEzig^nYgl78jig^ zgX#HObF(QJGw6k%r6}AMY2O}k@ns0&RxW8W7R{EC7wEGl?bauI90+m?dLxvHSMyYx zK^(>If(bYKVql?N_HXcM$>7hrT%7Mb?3Nd{DLU>CWMA9#N!j4{d?|87xk4tQhyF@p z4<wN+uCWNL(bU<pSi4x{Ez7^Pf@2G<F`wi23{ax#UGevg&0dK%h>9H2bp-_WDy7j& z(cntV=mlkwGCoRKdZ;la<wOl}%vX<DJ21Bij!#+-*)9ir&G<`HL&rK%_1Czx7bR)v zN8&vnbC&)^lr8I_Z-(WpLtnv(iPSgeo!Rkw=lY}{XGGEq+Qnkh>8to0Ktr^fwqJt} zyL)C-<(pcAvBM9IU-PIFt?GGnTJDK*E!hg$v!QG=aYH=?x5gEp?uj*aUokm94hbPt z-Br#Q;BLT3&dc(bLuyz~x=5+GS-o&ax2`ln-x>$e$dAd5RoM(6=~7^z9%^NPjP8Ep zsodqyJN|9qx{_r!N*)^>*hg1Tg5}f<c4(MAt7m(qmiEUiKCmD6S=gEFT=fIwa4|X{ zJrnib{y+d^!V5xgDsT_Fp@uRekl#toYVD_HR4#YA7{gX$%sMQ>o@{EA;SL`{8@wBM zd+L?7`JL-fF$kUuwL`>xR*V>^&TNX9uPLe<Sj_Yo7k58VWHa#jt{zw}`KY#2%X^us z-gz-BM#Gt7mK#3EM!!6sNw=AY<iS{}T8L3HzAfk+M410{_kN29&F?$b-t`ZB%KQ<_ z{E_pG;M3mXv$u<2)$clBd{{(}=Hs98Sd`F%?%c1TlI*|AV>$n4gXO=bKv~PLVH5a& zYh*QEb@0Ce971idmouTHCBZD=ata(^^Al3A8|HDpkr}uVhtO-b_xD{IrZVx?WoDA^ zRx~awmfD_nRH&U5EVfb5oD^!KUoC#fygX;6!qQb=e}4+)KJq?#@4VZXTH*Y3dq)JJ zyjI5#{S{-3u;-A`2aV1Z8;%L&FE^WW@Wv*Zxlv;Gl^qI(*nM`#2V;#MCRqY0p{hGg zP%uDBiiw1+H_!_ukf4Q&m{DTo^oPP&IEoW@ry7v&Kp@-BEB^-X@S~S<S5s8UM?lN3 z6t72t`hmJ&w8+I<e8}8|uQcbwcdX_On(bWjQPwI9v4y)NhuW0evHV9$oSyjja(;dO zdU-Wvuz87#Xw+XPb*a9a-=sdQSFn^vQzKekzu515d)mpQJI5zrrV?C7@DT=oi=~lv z_+}~959Hp@UIyUn{feo|VN7-GXy;bR%5L&jp~=Mw7<VeGd6!<wWHC8gVMz{IqwtQ) zRERV(5qkYwyQc%mZJ9`i28BQL5Ny|iG;#WakrRbgnD?SPC?wasCF_9EimMs)`A5(< zZH3s_XtTkoIcM6d<}7?PdG*!C@e2cIHpJI3%KLh%uy%Z;!#H#K#cNp@j?gl9D6Fz( zFd_m!Ja5^EX+PY@DkEeZks>qzmR`@pu_9$rP9Buw7tzgvR5p|ekqv)MdQw)c=DyBZ zlbsF<(YBFld|&h_4dGOv)X?CJTNP1trJ|RRtD+}H9rtk_V&)OH>D=@HM}~ana-qfN zO04D^0@+O7o)Z*d-yTmE)3t}U&`<(YRxcJi8**!<{w=?ftc>5}L}J?MjWcU!|IXON zbA-S7b-DkTyZn#_;#U|%(F|U2Z#U=shyMha!S+An9`M`=8IRp(y4|kP0+lZe!M6sU z5WI;P&z}9iJVhmNTT6p5^BEm`vCMeVWZ~NA5Z|z?ESQ>b<PWm5vE2cJ?ANSs>)njk zGT>h}qb_fQ-F6OQLu%k(Hx2O(REDP#$6d}=9pT5&8PrFZAdWk@pBaU1+u!MT8qq@f zjCO7TCnYm2ql>dyGssQ#yRf=cHu8f4B54Kq&;rr>aFeM;Jfr@B-#o3lgdC=XAHR&- zNZiIMY;<h-1emJMbsD+%YkN%c%55ve%#CZM`+{>%joKmH6*ju%%zRlI7NzK7xGsD2 z=W*~b6*`8^OyiIUR>V20l-(Q8A*_@{ic}dODrd}f?KDlke3cW@g%iPs8aHk<C!I~2 zg{lZ8ALlL1h_go7(C`>~|Ay6T;ox3sPndB_*Pqd+<#p0QEFq=xa!5?8N{`cFuBbg$ zBqd{Z?jKmI3}51!3^K4LY0Xuax}!PeI+p>LAl!PN=qR_gSmiJj^o3lOgw_7)17O6i zwB>RrJPu;{M`p4fsQazGgc=YjjB5{FH5~8KMT46ixPJ(ZW|@t-X6gi8?w{bIDKCO8 z#0Frqd5oqw^7CR@DG#73zKWRVC)owC?-aMfr<D!2W6s+yv!&n?d0q>9a<TquWnxK# z-BhqvwB{n!#Z?OzRerJ3Sn-rHpQMV6ioZ|J#_-M{F9JLe=+Fs6i5FzG@pP!4+YK`} zO1}&)OmVI2(L~5h&X<<?nt(qy>Vw!YWYH<^Ahyoc$8_O7<9(QJ(}`=w(V{G-@iI=R zUIP_z1ZZnZ@39YhN2Q0-`A831?+!@bxlgNKkymn6<Il_N)QE6K;2E#3g)~o*a9)?N zCd8vkr?)oE-1iUL`On-!gKQNvJNJ!G1#vG|;`wc~)AyzaWOh(eth@&Yxo!{ot_&+> zV{nHuL#u?^dZh?F|5hM}wM`FIp@P{%Je6uNX~m!wq?mIrI-GkVy2vam3CZ@shv~v5 zcPxzr!JVG{fw+Q!xC-!;Zu$e;=791V2>uu%oC`jGj=eb&7z6!78~w9|8WZt~<T}5< z?S`=34fiQ-HuhCSx1QGnJGSp&^Q-Hexh8qouD_w!ol))b52+{F`0jl!2?>iR!&JH3 zsL||~Z>j+)=c3xhn!>R}?FFpbQ(IH+0Y)32l}Wb8EQZGZ=*xOFx?ql2U26*R@d4D= z092<dcW54))@K|gAfa7zIU9p`HRuG#yWGA*e?qy=?gnPKFjKhgkhR8{dlT-QT8bZQ zi5D?Gx8bJLohOdnkG@(sLdPL*zq7rf&}H<392||Xh7k`wx^I_ehClnwl<d{V?1-4V zWWfH=Bx**Pa8UDBdLyEYz5NL9lR4HDri?yS{WwNkg4UUNc$2X(7Hx5QQpH$-YdvFX zFk0LEzN9Yhg8Z;1Gx4aD@K}1B1!ELpz!8BgI&-ih=cY0kD70H}J+-Y+9n!V8^$h)& zRq2Iabeyd4I_DGoA1a75)Kc2pFT8f_%X#8It01`kzdWn|7r6TGooJ%+nlv~w3jc{( zQ&~sxLky(PG#n7{Aa)X%`>kG}_?~|wdTqfLvsUY!p$GnX8~Ryk*G3zKNM_i?jLYdz zHvTGmiV-AKGg}-f67#lLN3&ZQbxf?B3FH3Dty3ETnt-}~kCuU-ALYsOn5UDFXNqsJ z_spq46r0!l@Z534Cr7^ch3%I=kQLunL9cVpcsNrc%Ye!ajJh(xP`{XW6Pa4&Oq2oH z>j$JIpZuY64Z>sMZ{f^Pz8J{hQ1qtFRmuykM9JE<5`;4j>EE;r;BzlTu2=qo4$AJt z8%z=4CvL%nqI#%h9EFMvO5bM&aZ8<p6V42lqkdoACkzdJ=dIyI(L;kf$Vly%BRR0R zUCf_HC}7&%q{7M*s>&{k?WRdoW%9sTRY`$DRM1P`Wiw`X+v-ju8g9py4Y%=U`U7iQ z`+y3^N(DYBvw~d#S87~ojE?Sg2RJ8K5u_MXwNn)9t6m{pPoa-Y6Ph&4n#6yf<uQ{3 zbhMv@=>Ow@S8<}xyg)%froI;3|M`IbhkcXAKjHa*bx;4#`S!@;F{AiU5X&UlO8rr^ zkP!+HNt4D_?GJ`igP>7ceFTA-oUBZ5wrL-J40tY=h9pDs1|bUOITH=AHn})&pGoIr zedH6^5CmBsv?5SzM`R8kK)KU|yJqP23Q0SoZR;GV23ViCPr+oicD`Le!Ctk1cA+hf z)YC@Ar5>0QUU=2ZjOZt-17i)_*j*osR6?vM70CN!%j@6N5L#z5!hqs&D_jbqt~60J zH&mMRI;LU17W8tI=!?<;`hykiono09vN<D-qYS-!?M&fsm7^pR$@9^IyUL1wp*$mw zWzJVc&hLDP*TlUn0^-HQVNAhhK>)TBq#<CiAw4JmCjI18;vUDzSp9JR&Z~gEss(>W zW^Bp0;?#qG{p9|VY964gn504FGHvKIo`UDTyGz_4zXL@Bx2&Efp`N{bhKiERE})Zo zUMN{?lW>Oxtx<66XTufK&5~2$$YL0{w}_~#;czeQILIdL0(K@;8fgVVtW?K4@;PRr zdBL=~8`WNSnV86?WJQ41R7M}(i-u(Z*7d6SOzyMQ^FKq+oM28KvcGEJ?Z4Il`~U2c z|L-;MFTF>F7OcC<QsPG}*_qZXIG&+#6zng902^>4c+m8LbOf*!6cd|_36G@gi_iu! zPZloScqr{wg(A!J-@p@=f;skl0~A@_5$Dy^6Xzu0+{#lyolDZ>s$qPVSGI{vWBaeF z!?`)1FPGU%?xPR$mfiHK^*5TI8}~p?Ht+S|p=(&kZ09~;hxcf-es|GEbJUc3HCC5q z%#<h7&nfEX_LRQ?c!b_cik)PHjLjY+0P{1BVL>5JrC*)rHXG(~85KRLEoHk76T#F! z-0B<QRuN4gFACk)zx-o?Hr*Pd<p6f6n@2T9WIwgzTNlVJ`<<ohGoa0&T^L{sgXX;u zdaKtCR;lZv_iEdX;Fa^E`(m)^hM;D~jldQ!2-BKA73ht;<+k^94UX(f<o9PA8SoZ| z_j)}9d<!Q(Rp5VSeQWvi9_;>Bu>4Zh{_U*-&o7iHg8yUFA<UFJZORLM_kpN?kEo-1 zM}m7n>7b`;TYux3^Q|pe_mwo~!Vjk7Qzhy{=J}(m!+zUuU^bgehxbnYMeqmu+B#<5 zr^a=JyT`%}+S)b+3UjIrUDA0wC^rU;%CMAT;7xPZX_(bXeHKM?gDPDdT)MV*N;Si8 z$>^6*mc6}@lcl{vL;07r!Xq6R)50XeBegPN^Lp5cZ06|VE>hI!Q`9-h{?r}-hxlGv zs?<qPVZ7`sy_ITY>`S173ekcJJ+w!GQx_`dcwkVQ54`ovw1mAgS%^ny#4pq(FP0i& z{)I9`vD95eauV%&1sR-OehKFkV<_4VQj8_JPm74)6yujLoXBU1iImUsB#wt2V*13{ zJWIbWZ|h{c@&%SnR+h~Q@&c+Ik@ntsr41X}>oq9-KBFw!Bl3=<J9XA4zRNY9sd;aC zT7`bzh7^ub@x@mjnPU_dil}Fc@12rU+zpx}=$ts;G9k$MlO$6-Bj`14=zH>_nXG+z zv98LCCRB~$t83=NCswqiPEPV&IpnKf`(JAfscD#4dN~S%L3;|qawwnC_ouiAYXy32 ze4t*b2GP{_$)pc|rjXnRk%Xswj=R#cG?HS@<<97~fD=vh&-v0@J{LsQ>kB4FQOpho zWj#Wd8*Vm1-Yz4Kiu&?~TEZ-~%*HYMaG?YCyx{3m3SZaAi8K7{P(f9L=0;2i%e;=b zKgIZ*s>O&0q?O<j>)whn@o*PUBfWogMNV()q($^D6a=4V*cm|+!Rc({PYU&?@1==L zzq{(4(t?`e%#t*qs3)Zy(gEa6lu<jzP#Cn8u=Ca++Tg$y%EEpcI~+uPt}0X8vY6z{ z0eHkQ982~oVueek$Cz?v9ZL-m0MaTY@#@#in9Wp$>8sUdRv!#|83OB>UT1T;IJ)GF z75g0}(gjx91<HsO>NjLr$|XsQ#ayxQGz&A@iI=%9a1|Ps;2Raw{4}=to{1bY9W=HS zMCOIOva%1n{gsF`?8@jlwV8n_1m)yfZ8iP&t-Vq@G?uh}wq^aHYPWN)iLNL_>#bmY zQO)0-N!U-2(>!Glxr1Fx>eDaLXP>@eF!6-EEVG3tXd0${6OpEggSFMH@?3*?R40i+ z6I+9nLe+SLg@R*Bouh=|T*~G}hG5kSwq>7F#S0Xlf`pNao#T7q9!i}fUQ|zu=4cSZ z0)2nUYf#-Q7I5JR@|RDO?p_nAS^ip8^OWUdv#RQ!8)wf~4hrE;Q-xv;G*c~LW^vz* zlHTiw30L}25cDfEe~9)6HU^6dO+m22s2U4(-Y!}Nak*|WMKPO@Ie@2VmW)4V_U!n9 zro(@;cs2nH^@CRwBF}&V7=xT?DCi`vE1i!Om@5k02~bl`?d#ZRr%h&;2?Wwl7WMAB zIw9%=Jc^ZZ^*3#u;9B1aQ`*ZnTK8pum%=AR9YiOEK(_=%Tb_7BOzpy@Q#UT}8rAf; zry*1Ku9#hTA6CDYH+E5FQ{<&8kzNWCcWFyg^@L9*EKcB%KPD-XsM5S+m=aPC4|o#J zG!%1F$XFFoiLqjYR;e(BcjgJkMbv7PMzmo_+188$7KY)*(~Jt=Anw#Ke{mB;b{26= z&*7aDU?UK519&jGxR-rtFyQWy2w@*b<!vxO>2SC!evA}zq$V^CXgFTA#J9HQgXgy> zxz3yu=8FOo7*ssOlH+E*qQj2+@jL(gxqRGkFsBMGU~!n44Q5*rCinpYD}jeu+A1s= znVyx)IRU;Q&`C8jm+KKJdQYa))>*88KhkfieSm<cU~a^c@jFhGru#&Vtq8srPDUM* zYKgv_nQfBlag$JB=u|O$1aoE}DP!2HMTa+8BDdR8Q$Y@fQVpwbjHIp};1otDUY;(c zBCr)8Pj_CKagxuRW+2Gj*CM0~d%mQTQ0LmziqokBA)gIHfD9e`gb=bSPlyz@Xo7@S zRgo$|$4L*i;^EMS8R{x;!n8c#Clo%e)&jzde+-*};EEuf$)lD05`0QYG`LJHV9ODu zyPRiTk|UKmhUl=jrc$ai)ex5%T)mqlyktZ|eS@W=&1p`fF@sKxdB%pGyRhrHOG|8$ zrs8gsMUP#N8W~;YZ%2%S=wuvZK<5ch?Q^DG58y7dmWsjj>v~IqVT6c+6fDEl+7ZzG z!-1JsNkuuX+W8P!Z4YsyOPtm=Jr78y4)Z+&l0-(vU81-|R^TP6`Jbhx1JXN5sl|Cv zWYQ8y@-iqh+!0Ic;>PQ0Atqt1y)!d2?-G-0D;0G(^E}0#ZXU108-1Z(zij?iNN{`t zcP{saz=TiWZ7?bIgwH3{^miAEKy)ctZ<?D^YT_II0(M5+_w%#nwO*ess@faQwY9OB z=r4|EpgMaiQ=Ar1mt>T-Vq?S7m8*05O(mbVC;sl*Ep&QC7^;^(*BIP@Lu|1g{eBL} zxMZ8nY~`?VLA<3T5s=r<!Hgfy@GsCK#R83_T;ITi(<&NUL&E#pXzg<1P2GyGgvHYm zCUHAV!y*A(NS<OZlb*U(uaTW+i=UA~Rnmo*M7hw;CX^F3q5XmH6P!`I!m?X<K4o%z z1KUQ*f(<E&;Tb87b#g%?(C@~=H{^!O7l~Z#E-26~!L?^3(AnR7i99k^cl;vGRs(8x z89vcYeJ?LirAWe@C56_hw#>c{p_$x6icg@#uWRSf_}hZxNQ<iac9o)n9!qbH$*nQa z>BlnD17`51*m6CYSMw^}cxc-VHX8_s`@j`A-)#gD_;>8Yd1iNan{5Qaq10Pyu2eW@ zHa%!|4&A_t8_aX?rJd%GT0DDsA<OaH^^gyWDq8p^#AL-acK}D#873b%=bzhNQ!Tot zJ-Emk($Ogw#b+&e=*8}@|4Bo7T34*bYgt~7Z-aGZ<+i92!XKS$#0%tP9zQ@m6LD<e z2sM5gfe|CJ7S&{Tg?EhwVKPeQ^=HXTty7tnVT#Ce5C_5@rgb#iJnl}AW9sPfj@3J* z)U*8o=Q}fb0pti_0)i&;Uh&Ha08>8LS%VcS#qCk%8oWt@uSzzW7sb61M*;!3J#DLT z1Jb;>V<|<aEVGU*Q)>L_W0npsV^W8!v{3Bh2aNmiH1o>9?xt%jr6b)l-Sh!n)8;5R zp(E3HkHes}nv85Y%|UbJ;0kYnHTV6Y_pj9E^KPm0e$wTE?v;s<t<byWKE;(tEcXI? zWzuYVUW1qWFDuA)d7eu+y;#m`hOv~-Xj!LWbeFtyj>T0@AkVk$C$g+jf<v(^EG`R6 zXSSLKVXaZ4Ou01UDWeX=rfS2V%&wdw6>v|oIi30$8*(;awarTu(Y1i?OOWh||3%q5 z1$P#9>x1dowr$(CZQHhuUy_b(r(@f;Z9D1M=}gW!b1tT8{$I`P+qY`fzF2$JexLO~ zNcG?+g9+`0urJ)Lej@_LaFw~*Gg?(6@IcO!yKD)OhD>&yIJqrs8iZlM0}pP|Tgrod zgK4ul6<z;4vq&?_L^BSNr@a$ML#I^83m>EE%U0kh-IeLwjNJ)ZPRo|)afvIpZ0zye zyuSG?vUU9$KW_B0c1x?>1$tAaz%at2%%e;+sN}Q;r|mEJv#C=r9D|WV<01Mpob4aC zIX6}gm-1HA`n*biEp!OmPqwfSg3v<%Ca$&n3U{L=+3&9jZHq&>rej}+-6B;Qv%EgH zkKFqUXMA6C{MgEr=*h}S2Kj<7G1s;09r-r~MxC!W47cu7v4~UJ4n_Gi13o{YeT!RW z`IQvDxM^T{9WmlfZxjh24YXh_Top$UBAN$1agm${uO$p-_cUWvLPtqNUI4a#?w&{h z5DjPMGf|BH<Nbc#LHgO?=G!$^ws{1+V>a*Dtrsi@ms3D&|BC=-X*Fg6ktOTMwgRq& zCGepu6xBQC!Xxr%CeYF#Y-a7AizmxYu(R&*6NXoDpbuzQ3dw3e&lje{VfTb*-rs#Z zSr_Q^<Nnzqk9+7u5+rc;a#y&&1D#y{0rVKOsZB3+tTH1$n&FXWdXC+}7O0<H!9ST` zC+s%|{dVxXo0MgFdyTdCHSqF##e05J!;CL>6-`kWdC?7jSuVtA^_zazL@<UO;#%dk zIIE*mKoTTl)mK>=LL)rxnhI#wWpU6#=O0(O&LSidTPAC~r@N4I)C9lQN+&H!g*Wbj ze!S88oa+j`w{hn1(@Q&OsYSD_ccj=JG<u<oXRzE|%+3wnDuWbo&aJ4`=oIp#yICX% ztc)3Bm<0^25jfSrK#7YY8;l%+@wandCsmU9-fy{%U`QfEHMB!_FG4%cT%ydJD}ZMC zYGt<+otwex3d^bZp9uXGQSs!Amaqj=o04uuaH`^)+Ta^ddM;nG1euM-PFpR{=%!8d zg?oWW<D|A#=AeIXt)JCDN5`|4?-b#sSa5X{qPEW-DAIyOSI4e2IHMlBTz-Y*r$+lo zKl086(Q2ESna~W_9f9M9#OO}h5pp;@IZMlE$trk8e&~uZ*q>_^4~XqeC<+)5co@b0 z;^gqoNE%%AhyE`-!#Svv&gw@hQcn1v@Qj~y@BeqQzN?Xo&Hq1QA@zSQCF|hoYUb?q zzi3FTik!ob^u%v7yp+uz8<^F%tcgfYS-VxS2b5YFBvP6R0@?e_?$Q<+#e$=1mCzqr z00c^UIEVzoAJupTDj51#!tr{>T^7eI%X91Byk4NSp>8bBwu3!VXn1-fBWw*kTH|pc zq}3{_^~VObV^(S_Rjg83j!3{I>~II_$fYH{PASbs>0ckb#TVE(?*t8v5y-D+{(S;a zW=0*@$zvyIY9H7?nbuI@?cRjLjcoyhu1N%;$>Yl@vx9s!AUJV}R5X$O+X>2N+G9nM zikjF(T23L4au=G3bekiMaD!hv^aL^GIpKh2hFnl~M+r3>hBq7e3w#*?RV6~6&H-07 znpiZ9)dY`y;}x+H?@CRQ3yf)P?A&NK+hV7|VL985wy;h58_hYrBdheoax+ckjzhem zZhgb9vA+OyT<B{%im222WRdmgZwiw!(Quo^S1DnJNk0S8rVTgko58zOwbsU4**OgT zhD?dANOCdO)vH>G4{1OS`e3N_qVdFFVf^IpRmMzk&ln3x^59Q{HmgGAZX->)Z>=W= zp+%u4x(#U*q2m|j-pUkJeLAk+7;4XdGU7@3P!P0}{VIgTSk6s;J=gxyWVd;d+X3Ci znhM&<?xF+Ojr^(c1+DZS82SKp0bHRP1>!rKo<>k+k7yCz(c%=@;J+bh<T17wSHJ(d zf=n_{!t`oiLXyWdx<EYlSOO$Qq~qhWwCtKLFhrngMFFEqW6o*3QJ-JKYe{s^l6k5V zyYMG?|H3$zo$n36vOu<aj3p($`)`EyTeH|*{s*`b0{u@7Py3&{RQ0Fr{~x5+Smn+C zl1TAoWkp?*m&g?)gKB%b-1qg|qJtt!5>_Ou6H{Ltj%eX>%#>=^(md4)0s{mOKwc?_ zs!+lpe*w(?UQK0lS(qOY2=w|x+(Pz5li7ASI;{$Ai{WRPIb+k`?E51nm6;#vz_;M> z8agr<JCV6*kcxzd{7wvy&@S)68uKtmy`76`D=-~UFz;g*Id>{1eh4M{%b|b;Jv-_* zu6Qjf-6Jo-7kxR5s&yR$f|Li1rxk!rn=X{h`1-BV$SolprD&b#f<n?%&s3oUU&57f z*>TQ+akJ^iBJW0MAled_!j%wldZ6rCo_}G4rxxBFM#<-?>0WnegyDn#?9^A+yQW#} zz~)7(Iu_@1%FGCh6Hx89&S$JySZ_e39SU9k^4=RxPCI>muBugS&)OiZ@HL|u(Uk@t zk+6^9ge?vztt<8OT+3D<?-zVt)U^Ib3u78R$bMA|#&~o!<T|;S(;{{X?Pb>xW83Zq zCvI>9!o{^!+$gLloiB*W5owyj>i|50ZH;B`C+-@foNCk5Llod1J3xV|L!k5-tPBU= zou}mgLE#l<Sy_(K?{GhooV|~3uQ2}BG#PXE6=Pc1#;&28jpkrl&eQwf+-q82SERWg zn9t-t>X<11bEo{@^Xz|+y>4v?Usbggfm3-eh9rnkA|YWs((rghVH8qIHo_oMLMX#I zHG-rxQ$uEy(!lyEGbP$K8;vWzmgedqLI42Tc(u9K@4Cj`<z>@s-uHCtWyh2}W2o=t z3;n1^XNK=(%SGXBmxup*v54oFVa2Nqcvo~Z-z`49Qr!RuyzT&Bims}Y3)O0>S2<^R z^f7+b2sT1ZUkbJFS-+ZR6@-lwn+jgpz{i$L7ohic56ZI;LP2;N?1Ugp$42#$MJfjn z4tSzwFJBu236j-~zEph$NQ7jpg%-%dnz)eHj6z~4ftf&$@F@n$sBZP`#!}}_?V=;( z2A5TMW&+9{9t|oy!2@PhZ)p)^ha1~p(J-<+Q(RDaHHN40c@bt``e3^RhYP6n$Ff_> zJ&_i_w1;;YBM>n#9>5ulh!~#s%sjbPYxWML>1z%StktL0PaNSCdQ-uy_cz>hb^rF` z+=|z1AN6P5p`#aOWVKd!;;{7U_4Dv5MpsvD@z{l#xvc6z?_39=I7Ru$x35<p@NGHO z`pEyRL3Lhmmuq%Ub3xp{{Lu&$?}X3@l<z#K`Ku1t(Kc0mMTgzdT3NCrv?h6YUorV- zrYR>|l57+_f8A=?-<+J_@9ewWtQ#y%3ebM(zg%_eyv?%RtZz<3KX~z@81$Kg8K~Zs z!1`ht?Bn%R9N2vN=?(8byuhLDs@~C|?W*75q3x>O@u7X^AAIm0hRC)d3LKSqINl+- ze5I>BKq2^E^a~tV;Q!dsjrB3y(V+FJ-{GM3s@*A2`<ETOQ2$#OA*p44GT<G$t(`h? zuq_OD*+Y0mc)5y`Lu)@Z%|N^PR|fG7@m+Gz%i=`vPh$9s`d|5h0=4_x4p=#`8WHOL zSZG-&i%47OrU+PuTeYIquY`Rt)GubS0H(lb+Bi(gE`7wpJPh0e#2cJMD(7LvI85^J zO5;$87}TQl);O~6-&sXcx=xf<8Zk;@xzz9~qCLbT#Fobe@kkj2OGQc~fIUWGH^_E0 zn<qGLDcU*HWYy3w?>gByEViZ0sQ6_}_;4IzZxn<f;C)14c`?of#Rl>odp$yRV-J)+ z)=9*&mA4UD(%6}gf_26Gg59zEmQ_R8KSs{4m%#HU`8&vT^I0Hd(N$hUBqZk9xRsEh znr*ZyRh}{Fs-T5T_%-mXp^uup#)PWwSp4^aE3gaLWNa(OEEY(A|Mff4nu}_uBE=#V zJjGqL2#!UjAT}!MRn3>jvAxM)8_SU~@paHkdrM~0zER<TRM{9G@iQYr51A))z>HLj zI?f=hCVYZ;9#?oSVv{Hr)j}!9X;250;6piXUbv26gA9?>B1A71<{E0&W)Z+ILttB4 z^WvAwEFS{Uj?F|*V9({8g}9KHMBvDl>m>=7`b@l4D8mEIRP9zWe$|xnu}<a?p+4)u zur3<9oa>tQkNX#`Gh-C%6%ZIHH*md`oZUq>QSplx6{|Zy&nVoKwtrQabOh*??9ir= z#&!xK9il2x4t}&3N0#^W*P#Xdde@LQ%9iKCUL>iv4k%K>K)CnMW+IW^e0m-1&)?^u z`@DVhF@+PCQO61jA4ykg%@!Y&dq7!~q{XOAX<_4hBGk#e9;6k(9FcGrAZw}ZvOmcP zj~VD823WpKLy9D!*@YShY05|)6ldR2+7v;s9QIp|&$Fe_6ee!iZLni`HD1%zz<D#; zlTP_77qW9HWd-LGWCO$Z-BFrQ8g~%`s3sSkMzby{)7O#2kx(e_ozn}>)KT>N<{3H- zb-6iiSuyJ~0|Ro9il)8nGLH;dD|JqPiAU0E6PKhJ%L{2(;CT@KOBKS^(2`KmRrD8h zVX?YtaI`J)ib1WQ1Tw9HgAjhef&1nL4G@}rUi8BY;561WC$TGKa3Ai!o6EBhdlq$R zuZTqEHeM;jZ+@Qk5~;1cEL=GV?y(6j!9-;<j_x4qAp)~v$;+OLw;v!fB|3L0$wH4` z;poaAJ(~30hC|<G++15Qw{lQ)&{iosCHpN9_xZQnzQq+tIzK*dbDY(T(Sg`2;^qZs z-g0LsYAJmi<9g;w&fkgop$dMK#NWgykfg+1E~_tz)sujKZqMd5oOQdstUV!eXTZO# zzwA~5u4nJShDj-;w(S|?ReVtPRU9dal}SrhX-HKLm%db~W^TyUDU{gUvQTwuX;0); z5=8<~G<K!2G^H^_D>sGiLRnyGT$5fF^%m?aL{`OGFg!<+sY!^Q=-}8%g$rOy6mssC zcc?GNwjyaFkV1qUHUWR&$po$^M^8{J)TLD)LY7mFlonI9GXA3}{znF7H1asJ9G%T{ zP>%!|OJ%jj>rSxlcePG){0OLA6{0C?4OI3kTRk)t6@F!uc6}z#bat)mT-Lzdk4$Pb z>aab_rHkC3NM4ZgtkSP8Q(<XHN_ce$dw*3lhw-XNO70QT1YMMPKhnX3B&RZNA1dmm zu`YEsd8;haTaGnSTn_X#MvbO&46eH5IW!$BimhH=_7f}hL^qE-xKIj(2x&#MQL`43 zyR|&uZgkjN&UVk31cO2)2&FDG&3b-_>OfU4JKU70?2uIKGm#>vAc|$!SuA@vwvi2& zVkHT``iWI_sFu>{U)RMwdHn{v)d8+k4LN)C17azzD0^{<&A@a|(IH*c^TYTIb!>-V zSCr3~LmSew1Z?9UdX~p>e1P0VmHbVW{CSo9brrt6Q5m=7tyQ94hOI{FTFM{yu*jU@ z;o;&Nn4z%DwSmkYNt9l67`8hcq40ou)>E&2M_OzWTz#t{>_NBrU-nK?sco)-IP&8M zCcUz{HBmG}DVc53y4Cxlq-om|D{irE>PV|fSJzZ8gn`60t3z<NA>{U`67g6kIB!BS zr#;8wtoWvb?NJfV4`mFbgY$m%j<N{vnS)FQZ98eTrx0vTjcs8|X|-|V2=Wto`WKTF zEA(9AJ!t~l8u7IXd7hYRmf$()3iuWZ>9z`WkQ6VXoFy>(#W$fQn!ds{rs(yaisUhr z<1|#X5(L#zI$oWvKmNM*+XYeTPG#gb$R0Ka_)ZnXH_Jl~!+xP5tWLdiP_R}9zwQXN zto}W2IQm|JAE3fZ{Z2)Tdzn9u>ZU}zS3=DmieF>OK#4Pv4wX*p$Ct3+%VZVS$_(8p zm+(uriseSH2_w#Rh{e}FEgI_EHv^WDfcS`i%^}AxZ38D5qyVgyMzQk(;9ii#nrw_a zJ(J@l7J`t37l+{QFoVuM&)@co27B0ozzK4+MAlX@?U}_J$;(jW@1(l4q=_>ml9L2- zlA_{P;6eRt&b<XMXqO#n(Ixd^k$iFBOt#m`tHm>~;x{v#<~Stec<Hgx>Qzt_A}QGJ zlGjS2%7$4oJ=L#fkij$Fa%u0f!!y?^BTw1xf<2W`7^2e9?f~TaXthZFms$reAi8zT zGF=5x9K$-9o;qDcksfS!_&kdQtam-Hf!Void1(ZsQ$<k-QU#p&=b8e@1U3gKcYnzL zjV08_G|i2T3PK!IQZz3^2z!qa%!Tx$8?f$d;r<?aO^0%heNLcy#U79Fvw<Z!vVpYC zUr;q?%5m@;l1z`71@tD88A#g6t%yCwqKx7D^S_rIHI>+`C^L#sa`jc_<$!gDKn@7z z^yO!xFPYfZeyRNOR!A(}Q|zEB8O=xIKHdKV@z4~s_rawrlPVjTv+xq%M4aeIE?&!S z>>K(?t~dwMN1>f%ZQha6Iaj<Tdd2gQta`OE8qH-OXxo=)F!!aO@?612+ik7xh+RAw zi6s<ry%IhPL$Xiq6YFHPDjC;~N4hyHW0rX$yQy1JQVkyw;|vHU*4?EEAvM-#K;5CN z#or$B4jBmbJD6u~An3uNy@^fy3x52mnv^78=*;~Z?EG&L2O&*BGBR}w;8~Jw)(ppf z@|_*7LPvs!qFweHNPY`98%f8ceYEW3cF&e&o4OmI%q?jZ6gr9^-=4CW5XcZ4>)iwx zXzALlIpJVjm+byWA-`MA!7({Hf55L*A2$5<X>7E~`BA3d3;Ac6BEw#PHYO?WVy$Rm z!0F95`8j`bsufyT(>1vOKhm-{!mStHy{zaqNl0U{{T|SV^e3hh^+KCG4>-paducy^ zXxEHP#-&RcVc*3+J<kpg710MV5fj0()LORZW?9s=cV6uKnYjCG7e&sy)k$=nd!$s0 z7ET4eThByJj+1JkxcjpV#?rRCd7*Y}X$%R%eIb4j8}9yC_8_g~$+rG@T$dKQ#o1V8 z97Fa}E_@ReD|JOfyH)<}tWQIZJyF_g@u*yBC(GY6(JJ;&oOWvaonuNDC9}dNe4?^P z8C@zFgNb|NA!uRgA5uGRqpT2=nd~ivMs##s#|9|}L6eVX^!kOVlH&r)n7xE0?b-I^ zqebF7MY#ICI;;c+e5nKFA$!QsGyZ|RjA)Fq(9!a*C0%9(cSa23wzhoQ96f@q&PJUL z<n@of;G6mdEVyi89Ncu$Bq}Jp%S=eU+^^6WnpjI!2SVl)SAs<lBI6U-g+K{ka{j;l z%Wr;w-Jr~<<?`f|%R{1GyzQbp^2J+79{Rbj*z7cKGP53#b!m~HCnpo3Im<#Af^il~ zqcti4C?!hibgCaT#W*nc70E&ppi8AaDZd)WSV+NAcN^(5AKY#RlS)GPR#X0xL^eN@ z>FTalRFY*v8XWAizfi))%fKQXMOJXz4>nrTdX%jyAa6?kEc0=}!$0lf#1QxSsXC$9 zsElw9chYI8K%NF0N#}eSyT*$iE^_$JyBwp3W@;;*6XjO+^i<G!sek~T^TOM)uUKtt z1xMACn%x>9VFG?d+x$k-*Ht&8vEB~x_&euciZ+xe1}od>SrbHw6g0AW0+S*+EhP=j zB~%=~6C*~{*_K(d;`;}Q_`)nUBwROWG5-CE&_ChLT~P67FiayWZCsbz-r-EgBJtox zq?|D}b5<qem2nLml6}SWs`!zV3$TYY^%OOg&p&4=$?Y{v#;!JSZu~K2$g7$u8Qt)| zb!07OOpamI2ManZ<<^qfD1ufxU;S9cBbJjNLmBLLuFRO<r;hUe_Hy>^QbAhD$sUSX z312ouDq-Y@SRCUogg}x~=BUQ_xrlGPZjBe8+9|qLAcS6^gA@C%%7-1u9Q!c-VLYy| ze_6Os#t&91ngpYPJ810CG&6XP&zL|^Oga9H7I$%}GqYFSDZgK^Xv}1crEk)XdCGb; zUyop<sGd=#D4y5h3el5s6Y;?}BgJuOU`qMJ*{(JtG4kFv6J=$KEmsV2h81M#*4SSw ztS(vB)}lMI6zmFBFew72lGw(@>SQ#;NUKK9_|nD-P#Eo3_14Q_Q$jMZI<UE;fSYve z34d_pA1KIKfDpzRxa2H+P*6@0m#tm>a;+_b%wAtwR~~vPjt4k;>UCl551WQ*!cM)M zijnHfMV@3NTjiT7puDwyhTyQKUHRR#-4s1M8P;Xmx3Zw!S#%6OSqVUr_>_gr-_m!D zejg%3{<Dg;4h{fK+Kt;sdG~&!U=w_mefE>TW=PyHSm>=)-iT2A`uS0uaQI`v$N2|b zQTY`zasY3y+z&K+vu|0;ZL;D6NwFnJdkq{*^xR94`2!_|M5v%4aP6och!ZwknEwk8 zBJ9xv7`5MnwIV~N@8#Cwo%nmlg8r{%$vVFAv3<l8`y4fNbl2BLegF^b8o1UH<{J18 zU;H)R68!pgd=gy9rlBOw5t^6FrlDnmM>=i9q;n{(gz`FkQOhrMe%K55TOw3136!ku z+ng%gi#2!?P}>OJ(22Xvea6u0TW+;`q}<SYH8Gz2KzIHb86P_8(tw>i)h40(WE<f> zjXXk9!TC$eey)Xl+*aY8A7`dMt`n?o5VF<NZYLf1L4z_Z&Me_=n}*u<;=eb*7rj{8 zu{QT1e^qMtYg{y8rD(@QO7KigxwZ5sRO5+>-n2aXCvW*wRuyl5q|S6>Ou}UvlZxhu zZDstuD)ws#t<lxM&g5dBo?}m+G(PHBkmO^?S-K=3&FTOeHG!JybGcLb#5E5T(Oz#q zf)so%jz=>a6itUs%FmoQG=j!tM57P1azv1g=yn9nc!hNpqVhH(KN(0k3n_Bsog%Ag zbVQySDKdgr@8i{lez?=56v0E^Yj<R|4-$K2Og_}9!xRXk*7k$?F?o0;QHB1cHUK75 z!sZa{-?XB2tMQ7X^`(D1xVsPGINt%YM{uj)xOic*AFyYTp9m|mzgvgEY<X;SOR%QE zLLaDiOET>^2cVIoZ@K}MIxR$_<4!zhP5S*cc#j9hvqy0TWEv3+<jE~bBrK$=2!zIZ zCDSxrYa(z&b9M!EZ|)MP4LvTY_QH?ZgD~WeNkX;qA}Itz-LeQ^u|$!-Kg6LeqjPTR z|5VMw&OTBYUIRC)#xqE?N#ZkY9t5^d0#OMOM{gONZ{VA<WoXzOoOW;D#y4ug*t||K z_la6}$7S2{gW1xQEXXgc@I+|SF_Hl^&I^`YkDGd_+0`YlyOK~z#na00@G~*_%kt1F z$S`vWDR0BGi8e?X+Kgf^QfQD`{aIOASgJr(U_Q>;PNE$rbwMVjkrQij-%>x)TZSKX zj%3d{1qHkTO^$n2PzkQa|EUhlF!h!(M8ky`9pEkxQ!!%Gm8_N-FR2MP=!<2w!N`_u zKPF`c#e>=7%m(t;1$M&(24RTs?t;d?^|nlwXNqQCGJ2e4U8~$Twwi%&gR~b%V-cL2 za;}V{r7)V&Aj^2rR15&EwetTkT=VDr^)e_3#`m$u>m2(PPXr-PXr2)T+7gL=ydL5q zXh&C4x_s@Z%Z{t?-P{jV$^D=jpr77SAq?tFn3|jht}|eoZ|+iJ$3^zl$+IWA@Fpb# z-6-_(zL{^2whZeKqGt10(`<d&B^RYlsRTn|Jsq{-t%b7}tGQeL6sxt{_O#t+Km(_- zX3?84lLdQybS)SNh>-)IQ&CTNvv}$R6MtCyv$@auYgI77KHDDLz$%CUjSspP6!6ai z(r}ow#8^EE7>GU5Sf2c94tQ`MReG;XIi3$rdf%0@h)c~8e0@B_5jm_|oD(N=UqiGz z%6lg0fs(Uzz`QNbI<Eh%F5-eAfvy`wr#R8Cc&w9>Q<5fMO@GjTE$@9c#KaMZ1Z65Q z!Y~f5X_V44(>(#~citX77z9;%EXf%1S^Q3G+{7E9sUUgI{mFo8vLIw1cNgF$mxFfv zVa<abqp?AUho6qNu-K<G%5{dCp?FMP>4MhvepK!3AdY9X9q0X+yK(<2*v+nvYIRsn zgFV}XeS6E*V$ghDmh`}#Gk}MTgHp{IO$8FSkBw?Lti-w|bNSl|Q|I#5{!fh?KPX1? zU~Q$1-j=gZz#=?`#wzueqMb}zC~ZML9({8oC6a0Tb^j#t+pBYhl#-nCU$pT@fLs9C zVkh_ctkj%Aifo?dr*)}^$AW|WoP%8HtYK6m?~cusd8w^6LVvTfi`G|pH(m|O-20-( zZ!78F!bH9rzm0)gFOlqnBHD9BtUH8mjp{Sq2Um23MVD9m$UdvBBXF>2$KwOUdA5cq z&&{7>b)@;)@yWSL;q0f?q;M8pSnz{4ulTm)6Hh2t124LZ(87-?XR^vSHlVe*0MV5m zEy0sM7=O?0cdDsLdbSSv*hktucs|ty?Zs=#@NPDX<Kw0;T&rZDkU+qM8FYmy_mqVx z()xMZvK0r=jubVN8G8WPf34@n@o~ltI0l-Jq*v$9o*Y5Gwxxt#{o0~{FQz%6?TNaa zX>xzH?z=hi?7(;^-gF{)4CK6$Z;5Fh+kfJ0iQL`m?~`VL_xl-xZZVAXffRz_qgo8) z9O$l*<K3eId=|&erVP7K{D*LHWi`zNxE_1|qzW}=-6G-w;~)6Y8I}97zN7Ne=xG{h zG!maE&WDPOXCPG!tKy2UN%UDO#SB`7qqru-kzg(g7GZ{w{5eUjnNeEJ=9+N6{cF@0 z7f*qgeb8AO(wCzHoFD`b_;(V3+W+zQ^lEP_g6o3{>=W|g2r^+7NI}DybrcmB4*rc# zwVw&kb@lbTY)GFf2TEF4^*h*!+1Dr+uSb_b>6MuA*fX<!9v|AG^l5ii2>=VQ7g};( zgI7$rg*&xljKq=mDNi9ZF*9B>gX>I;s4PDX;uEGS#vPw*?hjeNRb=OtHN$CY9wgb^ z`-Sbul+&7%?aE_&dI?+>FZx}?_vj$C+D^h(e;pE+aeh@*%(>#R6ZaDJG6Q1qDe8St z$cKv7()7a|Po_H{d@a`EDz%A`8#VLQpvUzY-P9fNaBi>QpdZ$2*R=~4PLgq=NUJ_? zYdVlNHyvFr^A`B62b|7bNpYWJWyz;!RZ>G+fY8Y8Gp~o8nxUs9J?v(*9!<Phx3o}C zdo$30QC-?_CA#$#4+Gnz>X}@(1P}cdCxpi<f9pbFltn>VE+7@SM>QbT`NIsrZrsPh zmH6dOe>FnB7Gg2z;t6*(9JlY4fWQ#R*hN|skv6RFIn0Es?-shxHcIa)68<2};;Tu- zwd>Rk+Y1SU+nc<vA((S0isg@oYkTK8rUap?7`TBzQl6cpe3`#l?*-8`NFQ`(3x;r+ z?^g`ZIrR%*jmLQ3%Su%lB52jB^~MYvcf(J!8`FUoYWB^O^sZz{Amc&yV6B|zsZ*47 zfj@Q*uSgJFcFq65{vpf5`yn_GV<|_yOK##__Q8`ml?|W&7{dt<6ZNRW73mxr68aG| zbUoTd(w#RnY=#x%i#|kb%#0sR*RL^0tMAnmrSCy9H*JJ~^XP&r^h_N6&P$e31LI4J zfoUt>g1(0>;5<i~9q$gctbY*3PkXmMORr>1=akqyR4%HFYfd(7G%i)IvV8(<Ktaby zUEfCu<uBV-7>L<FBRn0&N#%s#Hg-+|aex5T%m>YIpQ?XA*Bvw0_V$my^Ns#oRD9!a z5hqrerUG5%dG^*4+XB;c#v!Ta&p=^;!Z)DVcLD~!P1>^OObX)dKTLYlQ6rsq<mqZa z!v?fV6dGX^?f-<Gtz`fW&d4)fT>*z1G}l1$1@6nq3-?!2zW21Ct)Qc8X?{K_Qy64r zBiwHmu1g*NMS3Ngr^<uMF}I#@TiD{**q>(iq|xeYt;U&__BZmPaGRd#<ADKJeAD0z ztumth%mMz35Ze6xi!D^{Z{fcWsHYYs$}O<(pi@HuUm$^npl?xBJkDVG7ap%f=xIKk z1AUCUZVmkIq!Zi-F68wEueER?wvnkZwt*>?b=z`x&H@W8d#GKDt1@eds%A#If_^Jd z*m(f1RN%um`){iemA+GcPSu`5*aQY@HdBkm#c;Uh=*fb{)jB88nL6G4DQC{u*~T&6 znHdO7tSQAXS!MIG2rDRr#bW36Fd3)PVW-sLc|FZ0xQ34Vg}$(_M9+4VuC03x<P$ei ze6u_09b@%XI`fis;se_39C^emYDspe#KjQ8&muS&=7>Ze523nBLXi%b#N++lwW@Im ztzgsmFAb#M0mnP~2PWY$074tzO%Y?Y6%TcSmkH@%u(mn`okGIQCb9vHDl7>4L~vF3 z0HA+RGJ@5n@CP_|Ij`u>cT(|l;Ws((TVV=^EV?N82~@0=>|+&X(YQ>n{}VlN2>l$R ziVFm^C;Xpw+VuaQHkFFDMqdA`;f+<cQ9uzw?OwFstu*wC3<kt)T;FTXRUkq^1*ONc zN&>S6Dada&(>Cce=49UH$u13z3?cjj3P`@2vhCb+mwILPc;4~(*-T!2zI|MBAf;IG z$yjNRD+1Jy?}YIgj+IhJD^a`U=W)cfYk#uIV>M=8E$p8{7aM;6cK6sRJh*R}ru?g+ zy=A8jG2pUAZcVknG;23+Hsp>)=GD3A0><wS^f5$6#3STC=!924UTzqAE+HkOX4uLD z7lT{LS<}60vugV{epOpqv}{I4?S|{#Cw^(@4+xm~aC6x5W7{TT*|WrajgH)W3+Ufm zk7{WN$j#0*hdY?fq=BrKcwj-RWO0wwW4`9+qq@)U11(luc#k+7GTXdseJQJv8eP&! zoLIs%p~00tqUp7SC)kTY)lx4laFXH@pfwG8>yap13%2xg*DqY}Jv(hzUnNZUxpObK zj~o`qi;0m*XRsV{OSv*wGq;I^nnk*f>P5`hOV^0|n3$~h2n%Pc@sEuRy%#c#bEaHX z>{)stFD{7IF5EE8q(#*sK{O^5B?@q@B+jy1w-{esr>Re=Dcv)bDcviT&rV=j8g4sB zdBZ+Z%Ca+h<_G>5^E3Q}j`2I$?czYpn-?p0#u4G<=Fqng<6YqUV(A%5;cW*@MCQyQ z2&6qvOkNBqf5|xFzKt|QPkv-x1P#Ai@(z=R&Ft$WcPnXiv%Fs_im;3R8iwM^UJMWd zP;D(n=~ojOqd)gcqTo3}T0NpEu+a9vTdEQG;o)Tg$;@GXvH{&_#8%f>&No6*4Whjb zaSvZgdZj7}#2UgHeG+@g*K9!0b$#FS&}#hkvE(M)6~2)VGp#9H`jZVi%bjvbJlK`M z`*+g*cP|o^>A5+B0}XOlRYz68e^HqB-zLKfe;6I`|1o%l=0A7;|Fr#o@jCu@Rqy4i zy8I+?YHq$`df$*}2n-rAjF>2>noMS^6%=Hf2#468c0`87oDtO+Xo(TvW@YnX)7)$} zk9~>$(bx>Y{<&Mc_|<>(IJ7iJZ=;p$KI}}HHUL?DzrqpRbpEXBXZSw&{`Q|5e2lS( zx@JIoTgK#Ick&jmWymWukca4myCV2-4i0i#OfXLlu4gCpw`ZsIyKowW1IM0vzXH=w z<<rvN-}2`E{dED11u)a391LUjG}AoVAMO%uqf0p!6IM^`pKMc|VMsZ4#+m?CuW<?s zywlw;AnRHXiEdkHehV|X=b^8R)?1bte;>a<#-dL#N`XxqcWj5P)SKOL-BxJjPYmd` zaq%TCtGZKUt4%S=fmOrm%H=425Z@u4TxPaKzqb~uNieG(aU<659$O?FSf1QL$7+E- zZh?KibJx0w*D8XQ!{3;kX0}Pts=U%qnBi%s3)yTJVdpk0l3{n};_r!-H1AyWLNGW# z>Bi@+MIPf9+GZGB#>Tn7N-dCx+4ymoA@#$4@hQ*BvB!@u+Z}}PoSXio1#5*Xdy0tQ zGd8;lxmYKO>|{&+u>`Lrj<?LwSG<Rb@)!T{mZ)cCFv2S~U-$InGHmqH^v)Y=hfwKG zyuVi{{5xS^4w;jKdv+)QxMTds?vf7QpQU$r(BW7|Y@;<w)xqQ88<4C4wZdcSS+?kY z=}?=xY*%=4ZA>!B_ZNAs^LURZ^nwrHpMl`+R*64#X7o*-W0x%Y1!`d19^XmLp&_IF z4WFaeK=Q^-jf2AQrTxuc!|fFA?ij@0e@?BNp`PdBBtmz2dv-XD!13X`{mqCYK+*Iy z9yZSM(<qj}OqoxqG<yVOM5u__5cGovN2LGXlWcB?IpNY_-1{`7N=r9E^gBq3+z4aK z;^ya<5D7L+mh9z^v5=&eyX))4Do6OhSITyMzfizZxO*nwyrSn9`92FSU@u+~v8?JJ z!YgaIH!M+OdYedp^}ZtQ+9WGQm}M3cR$Yl64<2{UM<|rFNI{_0S{F-4Y-Br|E$*WP z0*e!0l1+%fS)9GGG>zWQ_)$5`Q>HO-z?|)GIJc~Q_aYu3$=or_Gu8ort<j+0XMqG2 z^fs`W^ArE-kgj6k)BWZPawq<sDVi-s!irPtfQ%UJBV!G{S?z1aOAXpf48gL{<zz62 zPfH%JJd^hWXV|P653n*UTbnaNvmHPH(KOOoKf(@Rr@CSbfb)5SPv!Q{pq^r+<>rK8 z_N~Kh36&10vcjlq(G*bzQK<CCz@r`~o?Pb)khAF`R(AJEi3|z$D(0_dwjDYF@E{B! z?jSQGj*z0?e3A<I_AQnyViod9tv}mRKwb7tWzNI<_AS?d%nYVr8NF1%?jR6^9~565 zOBk%-wah^%2raaVpO{GIjyXV_^TF2aUqN`}M3q40Yq=u8EDq%-CzQV9Us2e?psPtP zghjT+o3_s!+T7O&T4JcQb(EMXf|zVYiFu}b>aei-N(mYU-IYkT9Eh(cXWTrq+qMV7 z?$!}ZAg29sT@kqppphj=Cn)Yq>9C)RJS{&%M-;4iM^sJ6=lN}~SZkv)5-cmqwUAh} zvodvmFL=){EusU$e5UC9$J4H&Of{(>&L5@TQB`i5d{?Zp`3n~pnR#Vqt$dYFRd{Re zBwYOg0u_r=+$DF5+yaBM)}Prk1cz}Xdv5<g1C&n{?#hf-8o8tnXU{&h{$<bPoibQ{ ziskeU8LXU>y%)&`4EK>X3XI(n`{|WooL$c8pVp2Y96mzj^n_ytq~xu>+HeQt^cFmD z9IrWy-`f3yU);(F;V-bV)>?S$6n^IW*E1uqM{w~;@~?hIAYom>?3u-1|1|G`!S!EB zpZ{<#I%fFpEe!W}YCuHa>f6g_;Yh&TTiho_&i9lwIAZTm!2Db7C$F$&xasnn!>336 zsetRhGRQjyf2~uER|V|6l{Ynixl<M(nkLK+WokJM`0PK~6D2fq?QSVGyqOboDK*S& zDJ7M*DMgjKDP@&h)CL-0)-^TsieZ`53(LH0d4HNrV{=k>7>UQ?IG<DT8H)zTdXM$T zRUBB4u3>QXiz~q@G&NwB!#eJv2gN>t7YAI*>T1v{$vU*D@AXI%QzIWIkM>|n!`<wr z2+mTrv=tl7Jt$B3ju1e*w#kng8oE|55xiw!^-?O1GpQHV+A9R>skK1H)yq?o#IWF_ z*l2XBB}5Dee5?OR>*-a|3k6onxHU`bl~zuwmDZ?F)`jzzR5n}ZlvcPl>)XvOiR;-Z zXZ5qw$70DNl`!C9-{T8H4eT%P{jpZ9uDN*C(p!cp1HT(apLeU=D5W8YyR`1yDEK2j z)NZ|?$|9`WY+0eEp+V@nEYD`ZYBNY?muIopW;li;*k~9o_Jm)FUHv$567Ph`^R=T$ zdl8H2XTEnUt=By1gy*bVcCoNbe>ZOrnzvC@GZYA<=CiDpxlva61zmlB5~;LY^haMW zqXJ>Mpty`QztW#ApQaZx*^%h#!T2`#C=eSJ)dd6y-XSXLay=@AHm6}oo92Aoki-(0 z>ipM~-5}^$%N%Vvj3Ug*y>YiyQVlTiOT21sw7HuT3!Rjc2dG*d2Rh?mN;A5l1ubUG z3nYpgtWeYhB~>2V+eoG^t}?y4>8R}`M@`9}yQ!wvPmNjAjzOf$e`D8CVS|z-?pu;_ zW58CHb1-%alDW1dM&}{ogyt=MelF6j40$_dC#9C=o8T0}JE?|1*U5GYjtsPVxz4ex zVZgskW43vZW<eu3zNB1cazwKk8z1pN#EaLv*sY~{N3C&96AUt`EoEMQ-GaLB$E*bB z<g=5a+pu8?6&b{|0MpJmY;kt5W(*LXjiQ~4KqPQT8CF^uY4h9oTVD3nFquAPcDEpC zq{$z1;M_S{2D$mI7AlW~tJK;jw6d&wOowz?T(2`zJUuR0hXpGQ62x3F3TZ2HZ!aA{ z#|bPXUY$37AsH|p{AJ^r{uK~cESHJ4K*oYJd&J$n*~7&{hKYpJ{S#3R`E1DD`)HfU zAhE;cI7LsxZHiQn{xDyht*2A4W^#D2e<kFX3_?<GuWNK)>UO@4z{|0^-Lj0r!9-s^ zuC8!iwislA7P*~zWr?{BHO6WoceBX0*Gz!VUgqS$9MA4gQs?h%5D#>ijlDZVh35|) zyC#AfSsXsiWgAC7hX+Tdo!_*NN!#iU?l8OX?IQC+o45Z2pL#FR0{+>p&bCz0$uLix z-z3l8C;DKBQ9@d3sj;fO7|GGNo-a}_3M{FWHLrgMY6+7$l24Y|I7{$bboTe(M!wU= ziibqyT`kf)PnUX=Vspqhu$G!SF4V+af2s2~$YGZA1Sn+)_{*llN*dJE)x6Jf_r`oq z1`4nh^D;Mm5tq(dzZZW4ACbj>>IU1tf2&`XctIba9=tN0-}~cOs48)r5X+u6nMFg= zEZ5ruF_0J{g{?%-o}8=tm<gZ1Yp$I=Lmd32wp;0h?i+`6CY%DA1h<Vwf?T4gj44{; z_S|X8+(d!SN{J0e?Bu~|dAq>InKPzK*UwIhyeD4aD0v(<=uB0B(4xY)vSTJe+JaS? zunVqQ>~R*;F{mr4b;u$Tf6`=HWn`t@uoicy#nY>lspWNunR<mHr(nK@9Ov{>uy5V9 zMY?A@qnR@?oUQL3iO6=w8XPR$t4U88xWmUAoz7bi#Y2RS;*iiU_3LLxX<x&!LTJ{( z2<SgTC$kbsE)<<)ZRe0Qrsel=a7bHv+z>Z#@pBQ;$?_fM5(v|MFKO(5(BevmBPg+# zlRL#Kua;I(++0&`H3=}0vzY!Du6NyYQjOQsVz;-tziF^Jzq7N@)mwwK4h6P{yJ_M+ zxo8#|k;EslzOJ1s(g#p2-4m`&TsPVXE3sSSL`Aim@d4sA@We;GBi~637umOZV%6fT z(yyzoFM&B8qmNCx?yyzYN6MQ@q244RkX3FaQMWL}o>PdEmHTBd_pc@-O!q}xwCA?? zG4#*2OGlUga2EC-Q7Kyp;<qcXGI~-2yGe_NvStU5pd_9pvqn*~4qNu=6I5f|Jw5{X z3Pn>w*K)O=&!Qu>bR+ZmIkQ@YdJtBxZ)qYvq$XgZQ%PuRL8UkCIO2L8^>O-p{<P~) z1;E5P>8S-OCr}TL?QBV#WLT);$MK0~=1Z9ANhb%*qyJx^mW?<<hWXr0F|o?#ELGub zI?Pkj&c&QdAH9{h$Iw6B2)#JJ3cW*D14hg6OJGECe!SW@gdu(IehBQUcZM-Xy(adR zD|<l_@3#Oi+ZI_mL7UHyx8U*Z{w0R91rIhHk<w)%P#>GB)md$+>j{?(?-3nNj)dFs z*^<aGO~fd^pGZSu@5GVFF)8UDE8|p(JpQP2swp%-)XOrJm080tTD~;hfS85jtm3EI zI9dZ0CV%Y8?&NSRC8>3(gN8E6Ykny!g+vqMi|q6c{6<f|5$^4vddNfIiBjWC37GT7 zz%zD^cU-^RBb{lCM2c=m-2yCH9<dE7X9216vN0BUEZNxO!(tY^A{xeV)5x4<S3m>J z2vtOZo4t$HFd!+}BG#pfX%`!2f?9q-7mHp~iAg++qMY(_jLA98h{@q`3PNm)Rc32B zIm!tt*#LT<zEBNwb)I=cwq!|g(h4F)i6%t_LTwITTj;AP5ni#RBoTvGectR*>>b&h zOjX37w6+gck*wxK<BlVGL4FZ8Ha8$_Lw|&Ra@9cRi4_zUR>T+dV%ox*x)s%i-X|EB zX2dF}&}1tz%w`x9jo=X5mcf*J#)hd~kvzpowl>%bU5)FYEjq7=%%tg&lTYO+a0KI6 zWjuk$N-3dej7hxYt*Of*W}@@TEUa61o-8^=ZHAbFlDZR+ZQ^>ztx-U8Ikt@oc6Q*~ zadeiGY^I>`s{=t<m)>4e?|4Q(P5%hLh|Oa`+N-8|B5?fIBxaeLEJgXnFXvcg{RAEN zRg0In`S5ubgX(w|26|VtQUu_J`byj>jo*vpVnt1O9h`^a`LR(&>>6B$jxxvAL2ZC+ zG5Rsx5;at-IR)27bF{)0P=!hL=L+)J4qBacbUv|W6V+8Srxt|<CGvqI^dqeK6310) z&PQf#nY2Z9&{=wI5ps1U(COHwT>BC@S020Kq9!P>b}dm+`(?rnoBe0*clPDQS|rVY z0=h?!jS2dV5w513?xv8*KM5SlC=LbY_9f^$A{vei%}${kZ{`<!FUn<T?i@s>z2IIw zLc7JV*>lpnzy=&MR)v2JWg}2q=RD4R%Aq9Awcq&-=^bl}2_RuDP!|!HT=t87-;vC* zNvTQ+OitnrV<2j$Nb`}3eQ~}(I{^)^)sHIgSXIOYdNSv=^Rd`px<v+tzA5zm>Ce<= z){iovU&yikPt0aHLTrxKk2bOXNupxSo?$Iruv#gf50N?WzEGs{AiENKq25v-O0w9b z{w*<!>QJGBK(<Lae$Vm~JqrCcn`mtP!#ubzDy6*J-M@XPW=DjVEtAJ4s_HyOs(fu) z(sk)&wO#$PwR4<G4;ckYV&`X+?o-QRRk8~2yPlmc`W`^tPTXSWYn(Q!Ev=c>;i{kW zZ}g%X8Zhb|(VFM@Kif0G%d>U_yIpaf=8=*Ukp%fejT0!zageBbOLn!$juJvK7#q6@ z(Pzn5t*qzIUbM~`RD^DT^Lx@634mv<66|Ft>m>FtDAYBW{~&3bGT<pJ?rd98McN&@ zrWDfS3>-Ews4;bxLm+VyfxfXpe$|mZ>V9+;mv1VI4nNi7ZwBNGjCA`jw9~TJ_I-YE z7`44)S`B+79M&J`Hrs@*pr1MqL+UAK%P7PsYB|j`lQcDPS`0$c(avab3Wp7It&=2c zWFKM?b+7pmghl@?CG<7o729r$@V?(uZhSpaS&Fd0rv`9|gZ!ji@!S*u?#sq{KS1%u z+F7qj;eM+KvdXswP%=P%M`S}L43Ii<{>?nl3C=+8dgW9Tx^jG@0>mh}#uy*EDsl>j zc8NrV)OEOL!_z<&T@JOavhb-ZT?IPUX4Rd^7vn3z;`2yyxkfrCl*_r|U6);2Va{T9 z!yjIr<3Xl>oPj5obL><1BAxrARQa$hJpVY4axBU`qN671oSS)P9Vakv4oSszA-_aU z9px%>-u-=~cz59qV<F3TJgo`{<G!z~`%)e-ctq5cVrLgVT_q^f<=tTvcbF=}x#5H_ z+dpVCirH}m*we=S_`#>d%}*aYS!CzyjGRq-In;MM0(Q8`G){=HBX^|0#=_enw~f6q zYF0fC2f9fz5IA}MNSY`oh*Q!6B46Q^!4|we*@)aW1_Mh#j)L1-@k!e6cFm=}+(DlB z@D_P)3O@n&s_mm^cu}&R6g9hOd8NKvg{?XHn*^kBxAl*BMILHgq>MXs93yy_*<mwP zMIH$!m}C+g*41-ffStw}Dvb>vg}DTX^FmQg{4h9BUt3%ab}~3->6tE`%B`>&-wqhx zR8rbBkJi0TvTzCHv6q;8Y$0C(#L5YnCKFbMAU^|OoX8?qAza(VT>&A5Z^U<q(#5#k zkbecJ?@7YnLFbPMc_IHos2(Fi|A{P~3;4pnOQ@W!%98tB;hIt;nxfpTL`jmUZX0h! z(KrRE&O2>odjR`mRNQ~WyLynoNgzJG5K8YV%r17f-Q67OcI2JTgZP5+MdElRJCsGd za{2}4l|`hWEPphrGk205AlC!5c-5I2lWG9Hk^v%S3Ptk%s8Fv6qE;Nc3g1K9SH(tK z*Wbd>HhbL&QQp{}q#XgW7*)J-`pG`tDd?7u*4k`&;(8VHXU&VM;qyZ!-r*<lJWjp2 zzZwXc*`>7dSF^vrHGM2X$i5i@6OT^}yS8XW3i*Ds%Jm-FQ~#c&u&4z;LqW-%ZWzNa z8NStl;>%U$OC_ruZ7_Y(M1PU|1W*%=C=8peMZyue()(ls$ak!GSJ*hfe<_se`pl4e zls$omU8aO-){D4p{#EhKj-xK>INSX%$kRP|wImZ22&nQ$P5FOzq540nHr@U!-HQR_ zzg12@uqe<Ec>3SZ|G5;`&$+#sD}#lzk-e#_rJ1>_oe6`5s~yAtl+rM>vatL~no#~Z zb+8k0u(dTaakX-={~s(hM_oq+#RAj6CmVer7&L|2Q?fFJlz6@{6<Ulg2pPs2tY6bx zGjZ0`tuZ=F57mdi^*ettV`nYnd1a<Noq2J`;~mC(-eBR6U+?xb*K=_6RnP86cf={5 z{lC|j)m@<Mp;n_S3GIO}Mqfz}V}hM{#?_!V#^5%}nY4kn7>-UyFqnfj%KZvX+Aty$ zEydM=vAvGa)`3XF5*P=V8U8Mkau2Yl-27xl^#ruIY{dh;wxF)ipZDxHP+h@%p4wJj zNh!AbqkUi4P;-)^7CTF0a|oLQW38`2yLkjVZV@Th<|{Y<FrI9L;^OP%?VH#HlBwK) z`F;UPU%hjr6@BwbI*8Z=D>IL&2_RxExTs*0(x`t$rc%J-y6-TNUw#woY@3)C`(fa* zGyqzP(<?ZArUKOzWnjxrT<ysoN()b`fP0P58ppfTTp806Cv~SWXmdM-Tg9Cw=2(LZ zvAOrp9Gcqe)$4uCdB7>UUcaR2M;(b$t>pxLvjjyvvU!MQ^&8lTJ1}U;e4;P*i1;yN z5<cwKYxj20qFZUS7|}fd=-L{rSt>0gXk29!=xvA>4kv0c;`dt}6_u@a{MC2Ft8~nD zEU7hVxhgUPqLNhDE%F6F7Tj^$#fzI2b)8Yi9m$SK-kr-LV2XmL9^+DTQQ<`FOn#+o z7vt_xkPMhD8OJOYV=w<K%v?k*CoqL$f@_5|S=-aGu^=4d_YJ4JHjh}swN$IlJGFYq zV-V?A{i!n5T(|2AD|svKl&P%IQ2D&$vPL9Xb5!7LMB6&Z4#jX2^2aHK(+tNn2ko#J z_7p)PwMta;H^wl3hKn>a?Hclm*;c<EwXED@mlZV*v4gOENFp^!*dp`IzMoNA`Jt!5 z00cAtkOVXT2n93$Fa~l@;vJhjON@OH%AcueuQGMZDw1VBb&VXbN!6#Hm}b20X_zP> z=L+BRa7F219S(Fh`;TjJl`iw7+ImeJiYA;(_Unc+BU0=UFNdnH*hV0k3%(m$5$uo< zt)lcP9C7_aDdOmGc?OBCaj@yIst2BBZ6@66(X5s>sspTA2xT<%MnMx{dY*=Gd#Vb3 z>j^uuj!RexYj8<Un=JBJGv|6kXR=dTrPkzRr@z06<`KWYt)kYERkZ$K56csPb4{wn zTJu!voPfhsy`(O7%uG|gk0cK<16o0JPt&Zu*5-?cZ{<WHG#n^@H5I3B`OR$;2A-aW zbmZ}G`#(mFgNY=|^B;T+xvI@ZoJ){Mx<-1kem=%5o-<o9d%uvg_ap1vnz8Q(g!VD~ zo(AO`7Wicd^b7WYQmKI^&Iq^YMG}NU%0WEDBiJ?cDeufcBygulgm3pN@P-bQ#jik4 zvX_DxVV)`3FZB122<X}B9ca$z1ms73Hs>>>UKB(zx+BnI5)$H(J}{r4c|?>?a6TlX z60p<>A7ik0RIn*LoAmw%Uf`EJWD&mL%MIgpj%%=KxBhSW1Y$dQgby!nC=nsy)u;T- z-|>U8D<#BhiGcjmakdZUyOCRfh5L?-rzwoHIH-X*#~`_Pre4f)dt_5vBx@U|NSBkW zC;dNi9%4G0nm0Vy5CP>Nnx5SJmwt5OjDEStX@s=@i?VMD^5k2$>|&Rz%dYCOZQC|~ zW!pxVZL`a^ZQHhObLyOXXJYQd`NvG;L*`RPWX9g#{`OjHuT>L&d9~LpsjPgt*KNB? z@0?h(7JT*hlNj#9i0i2Dc1rdOyE5_U2a&r>PWt234`Z^Esy!-W`e3HYxjL1?MDtXY zYYGy`JA8>T^$f!GhHs;a*cO+gP?y;gfv;}f<CyDJGulJ)Sy|;WBP7fngJZ}?u0ib? z`6go|0?b{<B>HVZ41bv12F%lyy<%!bjVk#YMmR0B;h3MQg@b>cTT7EZa|)r}xXpw7 z(5}=yFaH?dH$6&vqMpA0+o%p~J%`5$?8gs%=zm%!NdCFDD>~{qI{a55PgHf`!#YCw z@)ENx+N(yvplj^;9vu4U2x||(bGqGXjok@)r}-5g*^C)8zh_4vOVYm=!#T&RR!+0H zOOE_RJFOy0=~c%<57rHjd`f`b>*fZ2z^|a=Xq)z%?_{4VuPYvI&zsISAWJkOs8+jC z5VS1X9g)C8MMUlF>|aI5?Z0R#2E*;*{gSth!Dt7lp|pcEiQBb&!xYEcB2}wmZX~jF z3bq$qrRlZ9mquK<{X2YvSw~%w>bA<asa+`*WyV~wY&IwRI1St5k6do9t>HKQ*NoP8 zdOYk%Ej9-B+fdr!uaa+o0+;cWuJJunCOm}(McsJvwsEBxU$ims;&1F&;*#u=jxaEe zTsx=y@18+9y?j-l#-54FyuyNI>$*)+-qkVSt5>E*T;+NMpSj?5ws-WLPr?~G`|py8 zJ%zLB%*>4ybPc`@zkF)~P@&WJUhNn;Fwq(Fd=t!s;(URU%n-=Tne~HKNVad6a1d-= z`ukeDM`IA?JQQaTxao@{g+g|r2Sgi&5vcX9H}P91?EGO+qEC$JL{tp&gvxK0sE2GJ zsYOWL>&1UclEeV5-H7;*WuZey<dcxVFlG-)^<_Za3)ho#&nTdA<YdlMmGcdYrFnuX zO2*W7uMRALwnL+Al;mgq4o0&}P8s2Q(w&l<1-_0L3S}}Z*=Nrgkmk_%X)G*W<>|d& zNMe$w8owuB))8%5Lm#Hl8xq-2-yrr}8c-$f8i0*XH>jVMDiL$3EQ>GXW(S5GwvsdH zJ;AgKEG@Zbbf!2>N=>4?7Jv{cH!Bnqq6c6cGE<~OAdx8QhGLi<>3=lkLdnBUtX7^) z*{J&=Oc`4r5v!7879sO1;QKrtxnhy>4%;2re2Q|++g@m~NSe{7uJ)7`(ct>zyEmT8 zyvqw(Et<luX3BKYv&g<4O4d99`Dio)A5Zk@TVzPXPOG)P9m-ETu>l~t`qJc9V&Jkv zhLtQaQ^gD!NFCK1SWm^?CM8d-t=MY-%2wYK@%x_>-h^wy%`Y`wr%L}f1refhQl)p$ z=+b9$ZxNG{g~#G&cHG2kXq2x0s^V>>cg(IFtP%2WcfU%4u<9^mnOPu@U3#yuL?20~ zl3kbQjxY;;Ag8N2eI$y{?f~9hS)pT+F^bRe#!tT?qIczit!o#F{c2Rk2U{mG-V#xw zcfkSP8#cjD$$_pLJjgHQ8(ul97PvuCC9a-H?%Z91ETxiCP!wq$foRMU(*~!hxKgs; z)H@1+SdhxdyW*pD69mC6t8o+r*}D|A=CRI5?G89lj-}|rYKX$6F#+XJ(Q-=iREGL2 ztjvtrB~Z!<*BFrQU=C1e>BH(ZaoeR8vk3vJ!hf411c*GbNoUmqhs5n=8z>~)4l*SN zc4CoU$y7hzH6=dWPgsbm-BKe(vk7RifmV{E0^RFVSO#k~Q7=|j7IEw-?!pGr0zc@{ z!!VW#?|%m_A5C3~2nzPd%vNePlDFvu>}sgNuNAHCObuv89T_@)==-KqCse%X$M7~g z_?o(#V**o;-T2Jdgf7TL5<P8dQ%h77%>V5gGmDRRry36h$jCap0+Wv#uaiKQYi=)^ za^?ICYUZ6`=Aw~nqq4P5(O?^=W>4^d);O(1ExvcrnkD9_TW~CAh4NA)BCxHhQC&9# zWuaE-Hs~*8n5N<l!*Szueh112pEKxiHK+9g!EQ;C+?s_+Tc5!@hkR@dPI3i|_aqr_ z6i3-joPUSZzB}RY{K7u3#YJ#?re=rCf;}b99YHZ{(kXk>pf9kIU(lcE6@MyyF~4`) zrLB!FP9k(q5p1Q!&0+EgJ-$C$DP!(}W~-td5pxzMmFBEa0>8|+^XI8joK(p*^iqOX z9B?~d@&il5q5srEETxygOYW3=o2mRX2=>dF=9AfG&^Od}+DwmH#q{y!hm(;vQGMG6 z0=^?sBorSivG<|-ddmyIVRLS7I$PGQ-usp8g4@y(kf2GW*tH3BKk2bmo(a1OtPQ<Y z;O`dM*7mj*t+3+w<l^+OYybK+E&Wwoy!bN0PZ_v)51d0U)b?Y-@38l^?$^_F?hkGz zRCOUdcQYj`Ane9@?&Cg2?1K%WiLO~QWUhd?J6jxX=%)^{?2lBKBz^J3zVL<PqD1Ik z$sZu-MBqKhFnk2AA#0O)F+alGjej#|fOwhAUEfdgrEVZ!*|BB?OE3@%Y4qeL^3cMX zX|aH8v6oYH+ZuFKeVaT))-sJUCM-myHIYPyy;7T%iyKr_q)<1~sFvI3pv#xx3XzLf z6&(awx<4?{bU|x|G|T{{4Hhz)hd2$um^=Kr95jzxA9pu<X544KWICP9(cWe%70d3y zXM!5n9pkDgq^kKNIE+9j!zj8pYB{P>XgOABX)-!@NS49fl-S{&Fxw2rKp`JQVcF~M zs0R`xABk1ce%UYb>d^*?W()R#Rxx03J$F~8{XG2}vqtz_Bp#iwZrZM(8BTMcV%b=E z!I|?wM)}4ZLbRC5&<+XZlrB*ul`Yg{muz8-gg&aw4%Y3SstDJr#3Wv+OSvcz&5pm< zfe1VPdflqb+#*N)fmNXPzSZIM0j`%Kx1~i7lXFtf1n6<rJh{QVj0?8llqt-!ZAwW+ z*m~un(soKWx{NF`iBV<2o@r6zm9wPKMPAEUQR-2SO5^0*<47j(a7A%OqDiJe&M?X# zf{TJU(@vvBtOy-kX1e4V2C*M$`S&x6j3M?VDHz(sW<<KjSqYJ*1Fb6O1WppjLZjy( zkj<bk!I&jb1)<xGixzNK`r&rm^AOIvDfkyq+~J>lgimd(u31gYn?{k<Qq$!f8izI; z(E<l`Pb){k(plG5R*9wP%2AA9c^#34jnU)}iZ{3elKkNFCj|^_5isVW2gl0Hd7VSV z+2orh+Py39ekva?Q^9o!F)(7MI2C6B!;tW0^74r3u`Tu)?YO-VSL5l<%R{EeiNMjz z)V`z@drdNfMSmioHMv5N1qnH9snl$iqM6umM`_f!4E{LClYl@WpF!+=1ky<6)XF(= zK#?!VqHrJ6<6NU1jpK?+lu<zgi9rGQ(vEw$jz77EorX;{)8D6mOOZk*`~q+wfBeWp z`lp7A_MaOr1ta7C-aadT@6-RQ^J-8H_fb5+@RmVzU%jut2d~#cKJ8{QLqsk_F^}EM z&J&MSN>K_fIx)jaBLUbe08w(dIH7G!Shb!EI^I>*SmuPZPFUqOkMZu?T)uQV#E}pM za`?Q-Prh_Md38PAwkKchkNRwS!*^SIo(~#lRPg_ZZoVPwBx#IpnF*<C``2<f(6laR zw-{-&$GLmcyzH&Y)k%uGg+}Tl2MwR~E1FdKz4}}28vksNvrkIleLBd&MV!KmRLfg6 zNLzYSALA-AK)Z3=T~&HhzRY_hQZ#*S!P>Y(ZuibgF&QfO?P$@C#c8WD08Qads@8>e zkEYyC#6nx<D$Kvp9xE{v7aEcpMqG%@1p9aX=s{OYRtk)IRhu7sWs7&(hX6Y);}~lb zFBC=yxx9gh(U=Ms=EMQHEVRE6u{Bj31In8Az&W{$I`@9y!LfC1t*)tPcv;M5tG32H z9UT*$n{8IM_j&XcdX*;}n%scFT4+Ldn64-u$%9(;)UwQ95TviS_|u1h1D$c#EnRt| zMriz8e*4}LTY39bQU)FPT&)+v#CRxjzL*D>6;x`Z7?-!SNMGLu32^90Rng6wK{vjw z^qqg4GB=pdjs+`|S~pwbcpYMtz}^+?q2VZtaVTE~g<S8-L81JIGG|J`2hcyC#~3lz zs5+KM1%=V>cae3QhofpBWMq+R_c4wE7K!2-R-y|)@N(ox^pry<l$9JWEYMQpP$XPX zJ9{WF&Bz)foK+wfrO-BtuDL*VRoSa!GXNXQt@mGu+nXUUIUPQiBtb;2g#ymnF*K)O z%SufRP30%l8yuhO>9hN&kENL5W$=y@6}qEi3)fi<0P}riA1Odkr-52kDJSYRP3UE_ zr7$0doDvG0STSa)JSU)x0>Uu_8h|Y$4tNf`$lYa*LYKjB{q_=JQA{mP%}?}}RZkll zCBs2+L^I3bT?-@X9T6kpuv(#sl#)HElaf(v0o#=qsW;!r@RLi8_EVPs<jDGVy%qd* zTfG6m^>G`ifJ4Bt0_U)xbkT$^16Q`_d%k+t%8Nz|@-sleR}Va*^i{I$Oxs>2Ua!Nn zq#z$#dPx(Pl#le(q*EGUmOuXFs#ELvR3@;c{wi(Dv-8MmBOH;UFozlJS2L%{>;=l< z@54P`_|-3iQf1)^Vq-qMOAQ;&R<#R{`5B@OhE>_Pl^!}k8i8z*7KBY>s@5wEYqJ;U z+WsBUd~e<i)@1Gq?=yRC@*X(hrL1cSw~6knuFWu$z+(nJD-wnW4g~u)aPmYimP`p_ z1nYxB^9Ad(bS=Ctam6MNyeI@ICjGc-4r!5P8e*Wr-?zXh)AzGk%3W`ArBBH}R4VjC zV9Fw;I~dBkebRK=Hr=+;t_2(J^u#O)^vGE}l*|-RVjH-GXLcMXUm0V&bAkefQ`YGv zDL3rn*HFonh{2CgrrJrROUM8iC$PC9KnS;N%E&x6mMx%E_XNQ{T&R@ANJ=t7NN;D2 z)}fDO6!ioeZY(RHa3G`C%fL+C|LJd1Y!EV8z_@3|S?NTi{MuMNdvq89n!fCl+18xD z>1JD3bfs}_&X^ip&ypsU;!YLIW0-*&m9SNXGxRbrpoV;2++X2{Ulu=-fbzP^o<@Jr zG-E0e9k-h?Ca0_lrd+0^jUqWtYEpa>1;sI_Qev2V<kMnyRT>jC<;n}7jV~~Wn<MYm zk?Y269(dj}&r4C$1=Zqw4!6idrzL({3wvyG*ix?V0%7*FPm7zC9;N9-$=UJ%8r4+T zm*Ls)1mS6ZMk)=aoIvd5Ss!qTOz~>;`$<md3JAB=8l;xAJ=`AElZI0crs3~+0xs>? z4B~@huKa0ldn8B6q5<c0w6mQ`HN{adL1K=`i(iH=$LPN-ZF1L`{(@8~8?;4xkhtNf z|HI!gUWSaCD74QYy!c7GU*l(%h<}5%t!*W%v6X6C+Hp5x+RObdZwLA#bq?`8!D8?S zdpVj(LiqA_LU4bj;$@VRF>wF@)EY+`(x*cR@?IiO){2eq68~0|j9#ipK!{@8$7N3& zJJ#-;#2esv{{v2<DV;8W)=sv`&Avz~DA>ehRsr3qQ7h#B!Bdm8PfMMv22riPXXTN6 z#;zEB2M-w~n3q3ZqEBTo`kK@(|Ia))R>@wtDYZap19nMcVvL3f;et7#lhjDq#3&z_ z+}M#9=&5(>+m9Bc{UI{F=^}ApX5k-&7^g6u<8AqfYLQ^oQ3mtiXU16N)6Csa6~N_# z`qk#P@KLJ`ADys^Gz8n`tH+*bk&??y=WjnQcxYYH9hMPKk=wD7Yz>yD4i?LQ*HZ!q zlCa2;R;V9rM49s($ww>hXXvT&2H>b=_xD}zQMJ9+2<)fN{4wb7<qxGmowhr@o=c?9 zJ&vi_imti_L|?G+3!z{D7_t8<;P}reM}%+Z(s0RC!&1Ju2G{`UMJ^@xNw37*E7Uuo zbm|_JYD01HkH&9T@tw@5%qrpH7*t}{et@mUl#w4wlW$w!^nz)RKbAv{W{1VI3^O{0 zZLvEG2bsFTo<N5$TPyD~nj)M@F82tuuTW5ilS|GcJ-(ffR-jRepAWlxfo`@99XvI( zBuzb67^PFT4J{0|%wIl{8)=31@esKCt<>5s3ljY?QLmfQgPyEe`D<dVojorZaczV; zPB}hM#&v_~*e+wZ$%kmeP^BKK4sXEoM};T_2aT9zWIa@0gDktL8;R2h9F-^vPJ`W# zUB;qF$gymEKmce4EYwu{v}_;B@@#wk7P7HKEK|4FDr7F;@82Mn{x(y!lq{WqDhU0p zg<o$_zk)fSf4LmuUyg^>-UM@ceI9@~FTK_2lhwP>_-pE}Y~zytDA?`<xdH18OzSwW z-+0&F3?9Qi#ba2HR=Zbq-8Jxggco?01^=WKxxW$!hpFB^G%{EpqLle_mT-~y(<O^F z{>Rc7zFk-hM_8ESX3+d@W@B(4LyW-~UzXkyk5V(W;4Ry<9*7I>L!h#SUPDLqZ77y9 zdF#gF-Q;or>UsbcTM|m461v-S*S{zZiy7qkONbvocv1eTmHN*Vhl7#*{~yJ{@*lgh zf4@pe&(%yx&)&qyk?6l}N^Z7B|IKeGS;)@Gp?kxfEmk6fgZN4#%TL25*gZ6cYT6P> zCPhw%n!PKDU=VAXv_>7HRq^)l5)dNf&0MeG8F@~v5c~>7Sl#z}z3<?@I${5KIXi>@ z5ia%<A3sMQ)qz38h^iREAU2&C41|I`*|i@4)`xvXj=tln!ym8*0wx~?Z$yNVFHjR> zBqv#@S<^mShKA~&<bXW}C`pS9TF_0I;!H{|ZZ51lxKLZuuE;2MZ4j!{Yl##Z@ic34 zAdQlg+vwKdF)&;@!Pg`^kO23OqpdWQXwmmg;~6Wjq8~=WN`0RzpRB%q7vO#zH;<>( z3LBtR;?pRxnQ6~yzfcP_wwkk-JTy++9L}}3OV?vg+G2hh7g}(nfZTAfDvFEH$ya65 zp-o?aoojFlm%$sMw?KXRSnw~DT#34%W`xPa$4A@BwzL^4{Dz|e-?EAm1!A2D&IF~F zRdH{70@gDoi;_DF9TNIdZJSmji-p5d!67@w_ST>=PrN8|v7K0$Qx1<!63oFHwLa<f zS-L;?uzl+hwn#f9VfaCtb9r>nV+*Z<e&7Z-NCv2^E)}(+xujo`U|T$-wF8Z^Sr0R^ zF0zG3$G-wkgurJJDlvXzUv7*2B*clZKM%hR%!PsE*XmKGi$G|T8K!Ljd&B^UUV9M? z+D0y+b}k|F((DfQ<7G>>EBDRLqdiCezIm=xykQ+SzaW#+Rd_bD8@YvYxSoL>R-DTV zhB*Hs1c*dPifZ*s@%J#TG{!_TL3B}U{l?H+ae+Aa!OyQG9%IeV)b*R&?;ac!5^|Ol zdbY}w^w45Pg(V-g)v0ewAle#K1L7oTU7*YRN8^`?axM|Ft3Pgg!I2Bol7~hj{BVq; zj_9e?Is%)&q&~`Vvo5ax$*|48rqk*eqeJ#L&nNZ`2mfc9kNThIfRv4ag^{7Ek)G}U zruHgSUwn|35WXsjH7VWbdx4OO`tkeGUw$C`mJWrd8mrA03C>HDg0&ja&|V8aNF=Pt zn5E>7zweBme#<`LpZo2HpD%8<T4<HFY2~i-CCdBZcxdLOx6<&&&wJkfGMT<Nk<NN` zGVrD41=o%6J_buF1%I33gn!rzg1hby>=Q;+^Q?F~Z4$)`?|u!QakCxy4ffhReuKRh zgc$Cs+?$cXFLxn7qj$NfysCa)^}QK6wuzsBSS!5#?!(iM$4i<SyB1A(DURSV<{5P0 znH(lH#5Q;p$M~RnL1z4$grIv!pXHnsJ2i~1yI(i%DI*e-I#u@!9pNcI_?u8i|8R^! zVB9lsK*wl5BLcrr$6?0~6847gRGS%B3`TUpk%1(K+xRrer#3rvZ!v*KZ^G~+elem; zX&zeGhw5+U;!yP2s^#W+QnrwQZ>&6XoK!F)B&0nZVhG86w;klBtq3eJxIjs@I~Ou0 zTmccALZ2Sw14^Qhk}mA2Eg3p&zn||s9}_}cHFE|OF|dD*+V6M>5!WzmsllJXCu}Dy zLUA{y1noo)2v{hUnaEf50gDfQ@I`y%X~K46F!=!@Yvz%bo!M&?7#_GM%^IS>HBw@U z({}bq<fZ9z_QV}zIb%zm7~Cdwyp@VP`avb65{w4!_!W@{5O$FMBao0Coy%rcGIvKz z4zpDnV0{_qo8y<vh*bw7^?p4`R(CRr=`-q$qf8YALv*lZvb`V5T%xRTuaU%UUIDw+ zg)pOOn#?596BH<9h0Rxkt#Y+#;(Ww-h%(CR^RSMt0)9j2OVVR0boYLsC;X6_N|IwT zLk;S&o~Hs#CJIfKV@esFPEQUc*=OREb!u~+=H?4!uR(_iNymkJsEDg6bH;;%4U59X z57_~o(#CGW6SY5ENYm@arg!$N&b5u{43muASu87~5x3><3ItT}7@D7(sL}9r>!2<V z&hQJj&z^$<ys(%mws|}idmuUsen*7(k!e@x0+WN0@?&{v_cYxEKyT^2=KHZB(rC%a z4GN!Tg1odV*F&vZYBd$!?hRBpxsHZQ3LSPdmv2L5Iq#JEnOp<FrgquUI*Yb3JFB+c z-n#?wD4r3t<*p5!-;tcT{Pv()XY#g-A|7s!g>gS33cSW~_ogHx9`25hxL&~|LB>Dh zR)BCn!bH1_`D0eL=s1V-wr-DIs37P$18~ikDP2SatXPs+$!FF|1d<I$YUbP*b0?ZD z-0VOdG-{Rs6$2IZ67JFquLw(nSzmzl`JWN`{V5r_aGVA5E0=52vD*rk8^bl(SPfx4 z4U^HT<#~n}>^|9Y)01-0<#`Iz%o3YGTO$kNb#?em6iDnqLap4-+}cUieX7DIpj~30 z-O00slUZ}K;Yk64%CuPpY$OuKiww7gKF!(DSn3nAX3@@-2&B}uy~FD3h|#Z$thJ9C zB{x#&htDzc+s|p9V<sdfD-lV1ST@WOmv@13mBkKC0LBi=F{Q@aL}eYF;c(W1C-;co zAHH!(lp>_ktFPIEa4t$?gas{0TkQAf_7OtC<R>R$LAbp3Y%vgJW;f>;->xz<QW^Tu zCcSz=rv#}1F$+QZGfXFoutC7|;2C{0Z0dF;eIo&B$kB!Sd;?LO8Q9oR`INHc%zY|? zH1F~~f3I1=;!|=#>XEbcCJ&07e59D1PNh}@k{WIU86DrosqARp{WFGcUruJJa4L$; zPQmQrUSRKMZ^70cDY$6_z*6SID^La~ioB@@?o-u2zK~S3Dy!ByH8AJx*%z|S9e4gB zK3bb{BWf)EUGgE#9P&7Z7Z&tkWHtX|S|$Bv={{cg!2-MN*j>n<4!6o=IEP<ox*skk z*BbugirTXd;mS9?3QtT7u_>7Bi_1vtuDAt!D864Dz0f8z=H~q^ruGPrUmDEH(OHZC zf|<?Ddm`+G!VASCLqufwL?oA1)0G;#_@J4C!v!D$82Xg7bz<VA<?pOEEs3oKIVT8j z%EhH#4q6LX*vKE7T?#>=DW9onmLL@gj6_1d6TejoZ4qKz-kd<L;jH-rBYWd)JKS-D zp*h;K<(P~g$A5PhOLkBQ=M3nI3d7YVRp}voBn?G)E6Yh`-FZNc1Sx{32;SQ=b=>h5 z<>h|P)*FZGffp}caOMJAdcas~qB3ZBTqQE3*A`aq)NZLOW#HzpJYY|ofIQWo$~?05 zAca4a_d%7mtUANSR3n)ZRL_hFga4}CccCWfvY^KRI5WsV!ir*5ZBA6-aR!9|n5b2& z51=qPD)lL^ncA7}S4ix3m{rL0`^Hoj6;^<&g4+_T8j_9goLe}L>=cK%8vj<AXO}RT z*}-q<cNKT_cAtcipD>x(ZmwqeI@H?*=S37UIBO41pv_QaYi1a=>jSM4XKPxFnUe3Z z09~L?UpS3ra|5^bDT|x|*Q@eb*<-woUPBfG_;9pm&$YT+K^wOuOMi}DL!W1NU*5-E z=7617cSpHy7_BQ0Qi3@*b!#6yQ1wN*pZz6HP+2ICniX&^$wPj#c1p;&louVD&~{3I zX)4RZ7DYqog+s)@rbDo|WkslUQ|f>?>D3Qr6IuhY%we4V!?HS`cdZb;A`&<q0-OVH zz&WY^Gb<b5ipzP!z!h%dh{?`xa;<82OZ1N6Go&*e5qxgtgN3rbb_3Ub_wQaD8FifT z`wZ5PL4<#59{w||`R@i=R7qO-`{94sW@oBcsbUEudy@oEL5^vXO>3-C%(CDY@CPPg zN=TN}n*u9mi=C~-!074KNj`yv(^g!)qCJCs%)+}y`4t?wzUPZZ^Y(7-+!VX8P!fTf z-jAJ+uX9d$WpTP#-=67c^8PsPTS9Qm*6C@106vD#!#O&z<by-Y-M25nO{S*`rkr&m zf(l9|L?2*g*Gl#_cyI-)8pW^pjl>T<NSM+M%kEKuTV<foli+6-<i4@b9-H16XvD}= zg!Td@+Zt6!I+u2lkKP-vvAG>(0U6}bHtugG$TreG5SdZ;`!G|0CDjE=T-A@bO4^9X z+&qL&z&|aAT@Z%3=2<#uJ0z8`xv<_i#IA{sw49u$XikR7%DBZlUNcSWEuG(lpU^s# z!q2F==MFhOhn_aW@%wL3X_H%L>(`l!BYfN0#9IU{szHw5-!CsHy`v(y0H{^7l%@u! z=}xZC6@qBr5V1y=6>=$WN_PgjwSp>7wfyY`fdHaqlh6+An+<uzWyw39V8Q0L1((D5 zCmQPXrQ&842dWM#`lYUzL&Np{yq4;o%7;1wdf2g#7$`QnNwqEmOgL*b&-Nm0(8iP2 zP&+D&)^kS_#_a{WR_%G)02FKoirV3lUnw?FgtXGoP)ueTN;RMWVIXjE6}`~`hD$m} z9`yt$=tkh(Lw#X;57{07N?G&7uc}ru@vtJ*BM}~U`X;hkIOPKws6lK!yCI@3!h%#h zdZ$b+<~gyEBBWd;2yI<94VBh`js5&5ap7wo9$nKrI|+i>524~b&tY2*l?x|u96h9k zO>T306N61=uDB7bq+v7lO9+aZC@+Y(2sddLLm8TWIPeu6qJ~1ZiQ!1|B*P``q^M9M z$UZ0g(!3((T!*!!Dkkl?Up9=y={urr{caOGp}V<>JLs>U{uzjIdJ`mgn&?qW1mq`9 ztIq5Rl5b5?#|gFF7j|~Zlc2Cy4#iU0K70G3<S}TCZIG`M#RUOzE&&QCh%Q={Yuc$w zzb}=QJs$Z=mj-X^<G8ZM$eW9Hd3Y3WxU}VNT0F%vIkVGh^l3s3SI;EwPhYsE;&zo^ z8z|1pkv+w^<_cT(X&8$Qg7B%XWWZ)VD-s%`RnPI3N;aMJTu|VX%yU|2BRtK!{1wZ_ zcE2#f@!@%}s_LU`0e|P)HK5gVbt@sjbm%k6CD8kB{6DU#9(>_mIr)|GJ!riC<|_XX zm6vodpJu`>%EX_ahB3X|1U>VP=sqVg?-abontB6`yv6$|7yNr7D<@Usz6c@{_tW8+ z06sJ^Ke2wn*(ZGam4$D3&612=>kN-ZfkWJ*$aa;~F&bjzPckB}p4@G$ZhG+sA6X3; zm}@}m4_G~Lv(ybfLu2TNZt!_nrgDBr9=_^BeE#`_0GpfMCbXQ7YkO3|jPniLlJ0>q z1wLRCPnxb@LNT3tp?~Ga7RQ#Ej3>DSkoqvAX7W>aMC&6+-C2Hp;8s`^U#R<BKV3!7 zFr+W{=R|OcSX%*&XQ*!#Iz#DUu91mw&Yb^d2)-czsPKCIB;)LJ1emo_iFc&8>n9B0 zW)#fzn`!np)9R;`i`Rm4vBN?HeG29IZ6f*np2m)io=J9!)iT8G-3TSv2yVM9Wm4CJ z$Jvz1ox>uHn(c!B>weI4P2br~+W$uUr4;4~PCg#P+ZLAN^KY%?(~AMa*>~;$&_C*N z{$oOh)BjyZ|4%}O@`nnNDDsyyOEo?f6ao-GwK)_$s47*%x7pM$@|bLVAW+K-V@4v% zbm`^HhHEk}zfUV!NR6ozko(M6I};>XO+OZPQWxXPOpmK8?}^XPqpB{Tl%TCZy>W?K zzPR8xPn-dW!&bUzFqG(AIeN67TrE7&&=%w#Rs^cCI|<}6F&9Gr28heyhfpF}Wy8GV zq1G@hWRPLe8ei#_HH90g0T%zpbGCIrHSE+LuHb&6-Vjb+FNXd}@*t&P6KqlbQGf+| zL2BXpQw4#bjo>Bp*di-S5?-uQ{464QIT$L3@XGCO6UMGtFm%U0ri^^TOIC4;ySS3$ z)?Q^1?ExcJJ^sVwTarQOPnfn)XJn0=Op$r_y+aZ~*BlKZ$D_HVzNL2w-!`{A-Jb}m z(tVpuT9R4m<JB;JdgZV}H{?(Pc3#1z0`5>P`72v|J2=a)98aE_`_0)N5ti_ugri1t z;lU(TkY%T0<m5qEPRApVed|-`4L@SSa8TO#A8KJ{v=&^XKbPag8b~5EXUPVdj#Hc$ z@`@R?63T>8rkFj$ub8xkU}05lmHSB17i^_3cg0Fvb9OvpPPb3mC*G0(`!s@ohpeo_ z<RPsbrz%v$x_&73;mAp9x#EXkMSjX1(!gJiM=7EXnlRb^`oj%NoB-Jc4o%B^-nS^n zAGWib8all#wxh;b5-mIOyOhEl6K>o5`gif&s=QINypyDR&(>B`z-6kD_Py2R=^c>4 zhD(MB<$ab6bc2+I6-MP(mm)>xiM`-8v0&N^(uoiLc2sqL?B_g7)TE`uibfwb&v@zB z0~o=)7ih?igvA)R3xjBa0lT$G#UKvFn&B=C9(B1fe2l(Nt}?|IxV+cjq}XUz<72k# z7LWdz=jyGwIYj5@9Ed^l;GDAl0S{RND?L(Z9DDTr<)sjOztqvTAn}Y;XKk#si#lj} z$3hx2dPk&5qamaq!VRs$a<5~W9mSK4VXRG_zH^_n9OF0Qu^i(V=)lKVnZ#2@^a9!; z2rtFnjt=`_APuug{|AjbDcT<!5Hq|{vi$1#8<?4#rZ_S(*#5+dLlDHI(K$r4fzb#u zS=oC|*^Dyv@s8Q$`226a-IH|I1dyPdW|>)ZQok3fCnoV>0u8~EJ~1+{vaSFAMm#Ge zd<EYSGQf=8r-c~tf{*2xT(IMbcMsPN!pkYp_p(8N#+S~3hT+AJ6JM~iBe;VDSsR&$ z1mDsvj*`@@8Zm&7RLhylLe%XD$L&oM78}Wt9T8Mzv6Wrv&!`O~Hu_09%2-aZ=9+s> zP{uVBWe*|94yB)77;%i=OJp6ppd2PJbn$yrfN}FzM~Y&CauC()F-p5c##D$8#wcEj zB7Mc~UDq#uu>k;wZ^^U3;jVV}8*yh`VlT{PJoqodO*+gj-@#kfe=En$ab_sLOAx^~ zwECZMp#R4b#Q0zMXQYy*ERy`MPdGqp0ac@tFsOV0Z~-+{NElQYLc6Yp!M?uh`X%mK z!5W~}BT4KXzBASJ1%-q_8xhazniXR&!%92^)G(df#Ms%m(`It~q>6XT`$uzFAe<?B z?3gJc09}$G*be1|XjT4L2m$G)4J!n<L|US)QeR?#Nl<^ywpPzn6Xs;Lu*T{*ry9r0 z%F4|w3ZKT@IVMwoI7y4<zSO2UsrUvhSMOALX1edsoA0M>L%WFI{of{l=DJ?WL?+R; zPWO!yxY0}<n_#J7+q?L3v8~TSF`MB?0@s}FBJ5U@`&hA<AIxg)nZ3^pz2BdB4tL<| zbC{dRmmEn88Q`HNY=hu87%$?fs?)@3?WVv<fL=Jx$9L)sL90rD-s0GxiV)ubO3;27 z+AE2VuB3nl<wrhM<Y@C%S`^x{b;G#uM4i&O>3ppP=IrsJEfhH{#(i0Hr5-9P`k+)* zj*Se4u~q8~9kz+cmg9NY=6)eB%}OE(3Wjt1HuHLKMvz;}I(Vk%BT)e(3|=ukoy9s7 z&ZrM90~a))$*sLZG!wLM`peEVzn6OKm*;}>0HHNo?qGEc=c_Ax)5N{!rUa&Rgr(Ax z?=y*BP!t8)+jv-upo5c^=+7v8q8-CiuUn>X&cmQKAu{=GP^x>tValaE>`0TTQi%%I z*xJn#$KR2>?Rc}HV6JxQ$Hly>Sq`iJoGzQ-EWru=s^Uv8jap}Oc;h>+J|5vvUH#w) z!YI~#%sLWSkuBU&o@8d20>kS=PFLbJim+H!=sRh>m#+fFd;hgdy$$l?FImmND!BrK zTp5M99uF%ok)nWbVOtC`&?i*L101FU?y%8dkZC09V^9%WAP`VD`q^b0WM!>fY=4BC zG4xzO4_)msF}Zk_#$EI=?Z3u9SS!wO@iz|I@sII8|1s3%e=NcOEzRKmsjDQsy4BuD zn=b0!Ee8@rl>f^ek{OaZW?Fzg`<O(%S0XNQB|x7YE37E%pj@}=Se;+pZ<*VJ+heIN zv*Rz|rORgXe65MrCf@c5Z`6bF&baes)pLv0%568g?Go&d-D(ZwxyFmEwsWSZr{DKQ zU?i*X6waH#xk6}j;}^9>?*PRu^DwO0p_@WnG_yB#&z6a6GQB6|{w~~hWwGr;=7P#S zSvbUg&&JCCS>~A~%CiLxvcKo_0_?7HJkT5N_@X~*Id^c;>KUrqsni*9n>@D%HL6`Q zrh0O_kkB<qsY9t#G`4hh3kT@rPqvvq=#pQN4!xbYrRHdh-E49{SleGKS<B?u({YwR zgv;CzxZ-qjrbM|clu|QkKg7+v$ag84bUo<cX!GB6IXRc1WibCc**kx1o#}+A@H9Q- z;p9x)aW%K{ao?$9qBHXbl<9Smh?jtuJHEwz+sE-16c>GbP6P0shu#{EKDph~et~=u zuX;~-uSera{ChJz<$iFq@8f!KbbwYo8Lsq>II?S0`U=IZEghp1ud{T(>R1x3>aFNK z22FX;)N#vs+jjp<%1v`yOMdI2^yXFd?)#o2`Z)}JaodHMs`JSv|0(pDfcw{Nf2yNe z{nKywb(YZQAkg5Ts$`P2^}Ry%Q|2>E;#2ys&-E~``;Os@Rqie+;4{_r6Z+;mzu<-S z#f9JzQ{sa^8ZYGQ%?a%I!>^LAyh2P{SOvK%mm*E|hOD)c$dx`l#FQdP^(2odhlOlJ zn^;)<fx=9JgGGe_F+r-Js`CDh;wQO!sDzKv4;1+OT8l*fRt7cIAUTF~TtNgJqm)W) zsci>GBesR{g+wm%blE>5u8C4Fm;mzWL;(Q#Y@$8@qlA*USbdZXfKfqd;Am7{88Mf5 z)5^fFN`km9-pY__OZz~k*na(ofmuGaP--a=qm@BXb=0vyOO?XWD5-LMF_FEMK~?n- zp<klcq|+P@^2H!lEhUml3H8@DMQ%|VE_8`ytg3oB6@M(HB)O(ww9&nqOf<^98u=ej zchCd498qd+l^FwOZaCuZ;G9u1i(|WHQFcEG&sGJ|msg<z{?FySa_NAo1QGZ0J2Ieo z<^wVJ@*>grN+!j0R6n$QQA+M80+z-TiIC2QGl}3z%jv|(*4j`^tHPm~d$u6lp<GPz zp_x5dqQE_IBGO;HGV_V?A-nNTMv}nZ?19;t5`UW%9_v95rbbV+Ju~<lCiAO&@Mkg$ zC{4~r*~$2b!=a`Y61z@E-R75GTJ3!+wZteKV=J}FCp;g-CW!zmhw_acE4BxS?phK; zS|YGCMe`{4&2hM@GkfOlT7uCQCw4e+ga_^ddZM}Z{`PsQFX{G*n15;+<yQ*UW5K0X z1WP7`jH>L>@aw1Y)+765T7ns#X7_m9*JY!BIv(&>-NxLy(54q~oy+6mtMEuf4;|m_ z;T}NJrWbLY$Y<TwzKqV@y9Q0WqS9vr-Dgz33#w)n5sY_;T_qpi*!$gv-BQ?HF-PCF zCgbFCiAS??jizfiYPf~tVo$FTg}Kb~DQrrDsK12RekH5EsJ#Rz{B=*5n&p%4%pOl} zy-lq2ln(LAquk1cl<O4StMZhE2hE}2&3=;emI9G}NyL0l0>`a8!P7SCf?5_ZS}viG zmk>EA39Bq^EtTKQE92;}yB;fLm6uk6EnN%76~7ll<;Y4FVE+^o#>y#lTX1CduT8x_ zmW=j3?w$816K>?cxRU=V=K>-xJ<qT09QEE%2{+ipLBv0y60BgJQi&^-iaiSRRNMk- zo|RTrM%aFi*zgAm`b2(TIeZ~Dz!VZn8s|V>)MK6=CSo)R)kjk}o)-Bw7@Z6U#}^!& zTv_y$<ynGb6-1hNELn9j%};05lllx}U#a1FO%juSZn|@_tFfb{Gry*zC7*EL20C#Z zpwfYCp=agfm0be4QzHSc;lH)i3CC#eP(9Fv0d0cc%mGIed#Vh|sj>QD1=F5TW@dBu zb{$`|u(gP7I^>*1=<l@91MUOgF~w@3cNHoo^Y$)A$btu1dbdzzGth;?e_k4x4F>?A zSXxk(oT+v3Olu>WuKXG3X`CQVy!bp!b1vry%v<8|P_)RV<{KApvNOt}t*=~N3Ufj< z2acrfe2ii_H`ianRGi2q(UCNOj6*dw%h0DRfztQpsA)o|gPCnzG|rxDD#*|Yt7>5% z&R(s+Q(Xj&Ns|-DXw+zIS+KckMZ}mn{*LB+DuHKd%7vo3YhZp|!$5W%I)d^5SZ0W< zqXtTTSggJ0IKjlpyXWYJSD6L+0J1wF-4y3>#s_K|LXTmM8Ia2&m3@Cbuy4pC2fMp$ zXXpcYr_$DUA~J7=?1N0?hlWyrN?)L!x({#7$~Df2wzfg7y`HXt^q`*AHElGJ{{kXn zAi=w96|_iIj;#+#qqc^ge-qaD9XG#us(H#=+J|Re<QuXcg*u--m==gjm2pH0D@CA3 zRag33uf2O~-v+i(Z&6d!->Pm!$`JK6t)@WFcr@)KaMaou?dR!I9;ygL7<J^lbYV|B z!*pk5&O{SEpL>Q7ab5M4Ty`c}zFZH3p^#}sS4AY6(Y%x8ppbGk&d;wyBZyhqJ%-r& zj#?uSbL$Y1cExD`I7BF;onW^t_tZfi*+Np;BkK|Z;a-RzhhU$PvXGj%l1k0wlJ?*L z)gT_q?}E-C@F<7sj@*f*C`(DJJJz49Y@?@3FYNx7Mkj1EtNxR-0fb(@B>3j=1(bdj zVv%C0e)4Clz)sJP)9DU0iG~_cB&B%^aSmxC6Sa+px@)&8`SDU)A=Z(86%=t56{L{a z;Afy-QGeq$ojRv)7r})Z_)QV@mFG^^LbPsd2X2L@Q?G1}9v7Aru51JlPk}QO@7{SV zS4H=msW+rrNycw-Re1dvSYD^mnU!8xpGVBZ%0?`tVCz9wiwO5_Gbc^^p_l?t)*DGx z!8G2XImPV9Je`=(=Suw^*yg>gfJVaw3cLWn=j-k?aCf1$`IXW9seOc0WmEpVUn|E1 zU`UO)&|d*KO5ht`glXr&o?<gXP-(W;Hyd<+2S*7k!i6bzxI0Y5QIsdn_7Jl`*JRA0 zT4pH+!`_KzZ_K{?eZ=`7z4BrmlKeaZT}$&izB>J=$bW_idx`lf+whEw$U^8MgsyFy zs{sRIu#T`S-nz|8W%={Cnc(aw4-@n>8jn8@D+XE8+0;NCa#@%O@>eaevwVM8zVp>7 zFFoB$TG~L8CD;8Gi{LZAe+iQeq0yseA!a-Fv|)#^uOB`YP&<!zYAPTosdOKXN|<M` z96)v1X8`WluXW(+%Dk8tbyvJ+*Baq~7(G9gC(}({Bbs?EPr9RpVp7ZoJ#Z<|3Hy0V za|1aVp+q#l89@XW@z~Kkv2|*3$Excyj8M)wkSD{ExEO(8f42wYVG>gaCSV-i{=Uid z8|5~Dpkw~2G?KetKndg`T@sb`g=LTKO#bKv0%J9Pf#fppVqSw?3H)R4DTJ959p<dX z093Tc`lrS&#>*Eq7>6(-$=JNg?G<iAf>v0UmoLV5lsKhZ2m-m>EoBKlv@UromVDYD zYU5Bo4tzsNgG8~kY?X9+7J*D70TeKaPpT+56*OXW<MOBQ`lz5y6}!X|*#m5=xE3)z z1I7YHO~#d?9>=>eKVu%FJP6R?=MZOz4Jl&$`9yhxXm9;I?qs56{RxOTfha#@&5zm! zwSD;!BWND=g*eErlsFz>M??1+(*0rRU$LGFpaS{b;V7u0g+!tE3!`ob&P+(PCNcJu zf_?y_#YPfRZkWa4jKMq^=2Us3zbkU8Dur+S*g!%YF$z}}CH&+IRdtxrwr1z24Zpsq z`u_?f9k5}hfr28f19hj`Kye0P&#O~Cf(s;4vt<_NxsFkuUbFSx4$hRskARc~#qs_{ z3aOybH(?UqxLaW_66bGW|DFFY=<!{3G3V*|m$VrUH2`7Ql<`P2YFDa<`6!=?abG(t z>uR6!NMF^M6kK3T(37K@To<mysBvX7<kAhBaVuxX#71+v;&C<2eoicw?I;*00Dl^x zj*JjFK9ay<axNDl1X6du4I@HSBixe0%W1q{K@c#;U~no-YMP4wbUPp7y=H7#l2d8q zC5LzM67a)lg8c7NfR%B=yRw!uiAy;uemu}Y;|L!8ZxS0X)*>7X`n(CK_uPqb^HdrH zI=vW6-#X(^d=qiw-%6J(W9JqNj-IwGAwN!MyVC~jX%As4;3n~A!Uz7|$7rr)yyK=L zzCfB9*d@?rldU8Qmq{gR{zgq<87g7fQWDl|=%iV2?apR-PB#rD7y(ZT?k}OQLw8s( zZ?7v)K2yS|>7GbqBbae38-@^&%e3lbG~gWG8Gy*OIfsGuccYg~KVQsFb|p@Y$Hkff z!nN-&m&gwlBPpaCC^yw97ejeCHyTNjj+FWnFF1)9nZjsMg29z4iSTo%F0}F2VxA0R z9#x%quBl~IReub3@)66HBaRQG>1yV$2|6a=nekY@iBP;C<(XZgnSPCs&`hXsqvmy* zK)XegH~~0Y`Z{;G$e2loq*lMYG~`NQpj_k^hKMcg1U_F-Vk{|6&5Jc;z!BufQjHgJ zMN;rEJ6Wf3EpsT_{?ShmYLcnoCu~SNLcWU9_fGJ-#3o$-3Fod<@)J0I)f|g@IdQTZ zVoF6Lu{g@}G6S<3FyjgyUpXmaL^Ub?QaOmXUN!UK0vPVZIvBxLF?pqraV-Up>YADn zJnG?)0h(G*G}cC2_3kl<7QYZQeMeuujB!2&E!}Koa)-(vamptODNzn*mC*hHsgm?6 zmB+36Vu^q-M#$PR1$`a3wF3~0JcdrI7z{?OJWcfQ_0g{~*g&Qk6C+8Zetrfr-fW<w zS&YAAtht?WRTp|Wrj^A(i%uN=?`*X$Cx61{Lfr>^!a1I%v*d&jt?%+(D`uzXZ{o6H z@rk?DV>TSn_Yfv9?isC!j7+Vq{SPC(Z;BbYZc)!ses+KP!Iq65`~fipkxrL}w_%Zr zGA{M>^sf3T0NoGl3=E$#UN0bd0t0@eIyjV(LbWv4%ZXW9%c4>I6pqpJetgRnsMlDo z>UjYDSXh@i)g}?<O(#uRF`AGr`CN}n7^fY(-vic4L77Q|s;$o|IXg~9+(^g0uhKxP z;<TZDBDw(R3L)Mz@=bbl^VU&(<8T0_b-vt*JogS-azdk}-UlwoUu(%ig1`elWRRdj z4>MO$OAlZK2*iS{BaMduYguZ_Yi|R;@M;<q%9sid6ZF*K$4OYjSYC^2Jg?cB(w<qD zf0%qAQBHi6E>{}2PH@3VO`m<4Na9<+#;8v<r3%SAx-b$`^bEIWC0St$k2Go=>dL^e zOPV6n)?WcB@*yk!Y0Mp5MJ>!GNh4$$)qe{4W|!p+MG%B}8S+As3}@SQ_T^$Oyb<JK zo2q)8D!PmK^V<TPTD(Z3<S3&zA|xT5$a_uc3Y8V|K%~~qBF$P#5Uq~O_Y(K0cGpVX z=Ti@_%T8P4QxNQ_3lo#<lc}eAFX<gD-Hn6RbC8{`QqK9x2clA_C-!6N0xVP1B5znz z(wmOEF6<*#W*UT2Mp)w~Y}%(yO1rbIMX;lF!M3p9`a#k>C!AnAGb#_cO|boIwJ%JZ z8QEs!pU}7+>6zFKFv=&s;H{Q?^<!zOL(<kV=!fgc9ssSw7+&3#X38+UI6DfHWZ-wL z3xt#+7k0v-yLdWY9lXe+7|c*RGRJ056B#<r8|_IfdKNa))p-@0yrg`_!@n9t6#)Jh zx~%ANMADDNim(k47c9$}_Yig5$DFNFh%nA*YbMn{mwEPG?<v9MJ16$ZVIR>w)^%lT z(_tUs-P;Er(a)XS+l5!2maV|w{*=Cl86k>|=Otk&)F$}tgefA8aRN(wI$MBh{Mvc6 zgi-Zd3DU@!WXR{4wK6rkJ$ctauqs2F@r@_23$he?1lK`2_3_4C$co(2)|SU*AgmhB zo1~v_Ipw0L${+F+1Y}S4#j+D{F2`+5&#WRB4^5MKboe+lVh|f4J)5<^APZK+S>F{K zz&2>K{`_bu_60Iwf#a2Tc$_T=PdYTR(K@mTXSs||j;tLc@eEeLrFKHXygK(gZ$M8c z4B*KHT1W|UrBy<6o3{&URg++xCq7k()-W$-K4tLV82&Ua9$P>GZwqyGhvu12JjDlZ zOKkSw<aVA72HZFMcP^He!8kQI{>{NH#Wk*$X<X8Ms(piT=H>3xXZ4uB0riaR=`>~) z62fZJv#GXO_JUE1&B3k2^$k^sK4qNeXxPkSK`+$-SQJMhE~3x&v4cdnPRfDIj^H}^ z<=~QU7#E+N%;d9RnTKOC&8s|+30f%%;x=r^an8e<?wd3<fUU*w7x%14^W(7>TCS;g zoHsl#tRqf77GuFW#ka1=MUzxy=@kzZ4`H6#^$(If$OgH$yZecLJI=}~$QsM7$2*n6 zH<rUPB`IAe<0nggG0jt-lH)qX<zz|Fp_OT3M0`a@WaMOtBz&bRm1I9ThYX&{2yz3s z{e3ksP1VEWn;BsrXp4bQ)e$9LEzKCdg-dhL;BTqi;WwbFsz>-EW{l??Y#<FE*biEQ zA7$=YqM4S(M`dW}r-4Fu!icX|LU8`hlPx?)?DtRlW<{dk-@CRT$#q%~<enN4*R?KJ z6=QZ#583x)b-ZI%u1cYbW!_@mg8S4d$i1VrPwqR)^S-!vkF}&YWe(;6^+83jLptqJ z-iCEP^OUCktOd!!A7=#}^)QueTW#Q`fgKB{!KYZXqfhQCAK#zooJ2dYKsd-Tr5?N^ zaitbtjC$#X<+(0)Yo+CZy#?Lyek?O(BPa`r+fI;W6%)v<7#}ChGjTNEUT`CCGpz8p zOKy&HsRw;pE{Pf})^DhFo(<tb@ySfKdATR?E%eik0K3)|8>s~d_?Mj(GgBKY_D?FI zwV|<b!Ui?sjVxxJKm@w?<_jhU^CuzQRN;5^V+ECnPJUBh352{9(;(bHfJ8O_-(0mH z^e+N}8kE$viUchC2o)a6OmGHT3+u8pbV~Z1<Z?A|7r{O(iFvJMPag9>VIKG&@R7aH zrW+mg;I|OAkk8s$=AsSZZBd2e12?>dZByUNt~uxW+vsH2YbXn`hhV3|k*1hp;_kv~ zt&UP#xW255;q#{S;cL3EW>*kj%SGo!VNawU=>56JA6@5%U>_hK#09-1I97D0>d;^w z2{69Cp$-Oj*T-)#&u9ws99E)3-1*CDw9_BnEH0q$&Fle2&`U)4EC#u4M_)`fo*zii zOXee3)N3=Z^Vi--MF*Ckm;8o#F>S1{l%2bSpqF~<kep6WY;k94XAn^BcA3$@jJa5J zHoxH&qW)L@5G^`!aaEa3_JHZ3WNpxW>Ai^1ju~;Xn(;o0aFmpyv*Epgq^P2zyz_k? zB+;UhZ~~XcnB11q7J<!8V@{_a>Z|etK=6a~=7`(9U6#o++dG6D3g;PUc3KR{*)%`L zTL_$cgKB`>FrD`GMCZ7z0Ap54@FNB0g!J47_d!wcLrQ|6%)LFwo96rM0p*FL;D_J1 zNRSyz8m9mo)W=HaxfU-*skEun^ufWaeL5;_CIHaVjtM=To3aL}7RiB^Hjx}J4YCxo zrqsdSR^FKf4y;0xHK~czgFnvlrpZC}V>KdH-}#IK`+pI3j=`A)UAvyxwrx9^*tRt> zC${y(wr$&Xo{4Q^f{E>%yl;J{>iqgn)v8tfXYc)|Yp?FreP8#)W?3T76eW@<A^z5w zl&F`qSH^%48UxW6ZRf-zhtU;6Rv4-1O7$ZKk-kRv*|qXW5)$1c%OX<*1)38TqqWs~ zcFfMVj^MX4r{7<rxjlUJpVPY%&9Tby==>zze>%|8YS>IF&Ubatr0=?Rc92O26Sz#G zBo%?R2FJhemJXzljIsmhnHTHIkGnS`%*^3_)&%3<WDMwlAKQFUM*k9BU0P-QBv}dT zHJW@*zz!c{&X`Wm^f8ZLaCXUM%Y<KB34M)utr-v)1S$6m0}JvM5xr4WdGv3HLwLj~ z5hxqOx_?F`I(s_nLwJCCkc@jxD)^+ocqs3~KC3&k=N=yi3_K!RYyEEN^VP2>Nv^Kw zD=W9y{TGMs+E)-b%9m+s*;ra^Y28?9MUy!;>%uTF+pSY5$p&A8RN0hGP9+KI_jcA> zKry!x=u}EVBo>Fyj^PxV9Z>*9#6jrVSwQidCN!0nVSu~+EhDC&#OgFOwSc791_y_W zL1A}sb<P-4evqR%f!A_ZcK9#IQTXqC%R;VAB7kd4Z|JfjFVIj>1>W@g-j@*P`u=dC zjU#GSwTMh^iarqF0q~ueZBle^rXwV<ZFTTeSGS>~jfja}bthkaT5BR?n3#S24F+$U z&k60?3`ZAh1G|`#Ze;uCy;3NLXM?MGVEA+!nLjn0(70Z5wWyp~$E~pxK|X;iUI$)Q zIZs|=ZHZ=mAT+fIfvZ`MVW#K^Zyma(e-^f-Fr279Rk*>Gg@eG#k^)zOj$;}+8@8B; zrKYE5h)A}SFADP4D9Xa}Yo<u7{kmmyW%xQaI8UljEL-!<dN8`Ju@mTmim6(K^t!1i z-BPJxOhqWCeAeZhIrh5TgSIH0=)|8~iNt27n!#D~gdBW)oYpmlfyeXRQB3FPsAoKk zsoxsJ(FnGj;+B>}jlLvCH)6rI9L&u;*e=%2EuMtmYuvxGvha`ae=ca8DrV-=KXM5D z^8xdimg<Bx>$8~FQSgs=@@`*Ke$1<W)pZP|YxhrTzaun;48f&qI`*z_xTTbeKJ>=s zEL-l#3@zPs*GHOHW>YJ=;Az5?2n=MUmTyuB2=iY>O|wPT-s4;PKp6NHbXSrbMf?vW z0l1b-B^iyan?*Iu%_-|7p&C_ll_HO4jggUSQE3FBHd^u{Vb)<R+}r{>;OR)5ajm1X zv9mth7Yr=Q-#*1SIz7vVmVUP1tY@k|UEQ!Iat1?7$;vkz_<!26CdMJ+u9ExJ*nnEQ z>28yg*@u3&=+;cCY)E&1r5xeQvtNY#icvuls>^>xi$d8Vo+X>Ti#PaO9F@8udM-C~ zp{T>|>-!iE*N3dto?1xt!dG-%)YAfgH8eMNIvL@}l=pSL(+0U%%HOrL7AEeWZ@7|? zPXC-mm-JOt@2n97VwlbIqMHHr2qX(y<`Re;@jF+jbm-=S4mH2UL;dfOmjY#LKij6^ z|6L3Kap<P>^h6}14stY3?+%<NJl%y0R8Rhr+(Nf+{<`^Yc3KM4&Rfq1+F`8K;u#*N zFx*TJsYjAs4j}qrPPR<b-!TI!&Y_~E@BOGj3L>KOYc{cN6|p5P_VtJ#_wx-Ed=%Ex zel02eM$^V=W78wkV_L&USJa;(z!@x9U)lf7uGr?%b!Ai~d)(@!shVv`Ry_8QyYZMM z2xAE)>X)?gh_m|_nTx&Rfxy-ls0^E3>4+(x)-1)nf1>MM4}0*{3Y&~{kur~ZS=i#@ zX45+%?9kCtv{isHNa|uwCYI2Vr?-Y`U4}r3TkQxGeN<#|ZJ}KSX0S7x1KMF^!SHJ& zlGZ--dNWoC4jXCNW3=sJDnPA-_}W*o;VdNu?EY~dJL$5lO{=@(Oh*sDfH$6yG*Xj! z{R4fQJ^i^c7vI~^%H)I%<l}Bl9J`*I@;WaYv(2|Q2)NWZx-ZS8iE}a_*s0Gugv=S6 zCK<-S=rXm<|6|a&wz5gS>{t~fumJfFWFqG&Cc%1mN|7b5j{fjl@gCk>BIT0U*%*lb zye@QD4m~}Q`7R))_Q=7`J*g{3qd5|t5KbX?C`z4J)WncLhHLGs8ZRLsQ-x!{IvAt8 z)fHOn4s0)rz#Yt;;qF?a6Jgw^RwCNOm_67zth*u>GzS;C1C8NE(rS(6CPOSp4&iKD zj1uLq;G`danMigar=>mf;%e@CGZ?wd&8Gak5Qt8|%!HYEePCfh9f5E3js%}X6FBS^ zW$7|24Hk8QxGP5_636xIX;Q5!q;m9by>A6X^J~2_a>$n)4GCq7xw?k-w8u!EpwiLz z*W%qG_KM$3{WDYN9i%)S>o^f%s(pp2sd}_+M1)-Vnwf6Y!fT=n&O0zCSFq6=Im%~X z&}}z-G42G#?ORW7M<YjBZESgumXQ^05kwdH%+N5<i;-s6RwBG_iD)9k7@)M-H0<0< z*dkzeU<0#iKpqFkyPTBPB7~@4!9~OfvPUgNVNTcb`)IEPtsRP5xMJazT?_97Zcil& z5(qc!Esgi34y$F}=4JE5q@W81@)U>pJ-f!0QVP&XNDsS7hfutuVZHUQ?v6-XI^8?% z(%=1*Bwe}lay%<CpkGQrLZ?0K^2-;v^Y&hVpW@6hv9z^?vx8+XQV`><eYsMY7!&>( zh-s#&WGG3s2Vl53nG}V4hR}#rutP%Qn>apuzlF(r8vEtWaxCa;3~PM5)T`ml4$bZX zoVXg^cYv8wN9pBXo0p0RR+7}GKHJkP^+rEwgW$E~l;yH=950;1b<ytf{AvpF>6>78 zfJJgoJK)m_?#i%pmiFVwAgU6+Cp~ZM2oHylMVDCB(*RzDKwvsI3naW%79gi}{<K$i zJ+ko=YAIbZAi6eMtej!c<!&=yJ1?>O9m{B_oJvQF1y`&C%I#Sq>OmV8WRAR4?MDz| z>qTt3?hIMw?b=PTt)5;E<q#*ty75!zgq}E#eYpifH;ABs68*XPy&aN5BTzKlK~yrS zPad2CJUTl0bdwHGHy)-G{aY@S;F{8Xd2G4tNPKtRz|cM&NANHgFo_?aAs?CMtvVw{ z?^VGt;^-1anu2^`$(i(GK;RC4i)lWB+6%VMH&RuzlG%N(6SJIf>+M`GZFLN_VE%Mj zp4@ZXLcs9ePBzkn@Sd)4?m`F2Mh-LNN2sANeMKncbG9#bnevNM_V+2qK#EIZRZEMN zvvxRB=;2|Pidfjk#&J0QTAR569aB{9@<nYR97GEHKQyuXxUUpHv*Mx*2@~02Qm<hh zFo4m`{cJCOV!u64`V$k{i58o$SWM=24AiM-Z-dOcp)gZ``XjWBIFsMqAnYQ%5#w;S zsTY@qv7h~<SX&dcnh5Mtsyd^d+jIAtnfk=vhx;UqMUiT&j2Q2B&(VKqyr(vw<A%Db zqTjdi07yUIXAJj2w6<3b4sqglVw8ovk;TThT(<<gKA_xw+zEa*V5P(f!(VJFH^%UF zWPk=s*8*z0Zp;x{LG%TT9ONuMf(|QN9*HkX<}fg@h&ALB9eOe%rZ2aCcMeMq`;!~X zA;G28qR#m;WL5dTuMmVjnsSZQ>1s)CHk~7Yhng$NU=xfO9{GFWw_7y-8JL^Fo%brp zq3CALB`M=gc9~B7OGTkySKjFw`3oJP^kqo-_xA~q?{I~Urh>M*{HxV=J?HE^Gu5mF zEOOUwb2!n=9mmKer??D?{CQ=B2t3ECacKR;a!p|9*9&;+7cijL__2FDvT}{X9Q-F8 za$%2^^L+ViFfiK0n$)~r7XN@fUPE3IAFYj0KmF(l1lXLZwO9?;`sk*-snHfDeuG_Z zYCVNe3&RLz?PqT%0mO*HRE=K3wS+J1Z^lh<kh3-sOEb|R-5OmE(`3rz$TBdFZIWB4 zl0O3GrZ=%}jU1_ZBp+^;n6+3^>j&yQ0E?Hi5GrrI%e@SrE1c7&b9>_bSd#0=q9+Yp z4KLul8d7r5Ix4EgQ6ps2nE1Mlm0exe2DKA*YR?JcY2GnMKo;Heip%|+IgG683<-!8 zIqra{2HCm<eH1lNx;16PwSe{tN(SH~E<OrR2iDt<8$ND%X|Sn4N`ov(I2@g>*134D z@ho^-Gy<iwcrI+GE}vwQwm&4Ib}4gf@KLO|MT5IuI=n?)cuSvdJ30nE>DU~S&V(11 zhwAFgz^gMpGa_ry0MBu2LPS?Fj<ISS_h0KR1$VHnSAv=PZaZ#bD|Hyaz04o(@h~w7 z%v(hS0A-Up%OU2HH!tR7{fSzzfVFrDcWGvdIS7c)-iWQqowo3&nsd(2Uj1(O$Xoq= z-!PAzKW=yK=@)xf3ax2<SH^Dv4PBnEgzw%=U2$bs$5-r~sm8wk$X^1(pVJFSaNKeA zlAb+ds|OlARM%HYg*#=#Z&tq)3&8~6KeA7biT2;_&LKYiln)J1uhJks>cXF@3O{}q zeyxnWA>4e(gFG?JecCF25#0D`c7M@qU%~YDFx?WZo;)Le`H}B_MEOqc<b}VN6@FUm ze{^{GlWZGAK52r+)j{~}gg@>?`t_kb^kTWZXMObV2u9xKiM`B_enkPlXt(<!o~}SI ziAekMRuqf=2|fGarISmu3Sj&w4T42Y&DE`kDh|>ozJe?v23y?PrCEjYx*(KVMcB4v zMM;9Bd^-;<2DRcMUmzQ?NwDsnFQ+D0!09TmZ}t+r`zH)Rv%a;hqy0;*iaN?#-Br2f zueRDh=^Mt%CDlgEi_q$z!L5Eb)HBqN)hB$Z5eq14CHM$t)Oka6_@IV(q@){d*d#+r zIY0+9+}{Dv@}QA=bd5pSa)3E>J=q@o>W|}o329MkUwLDSxZ*nl6u~qk+R#a<_-;zs z{NUSX4Y*5ix2}-TQMkCjhVV^6KZc6M{vgK)Lg1YEE;F9=)q4=Z3++RdBESyqDqsiA zG~4(f?=r*7<At7z(DGpuiRZ+lh3?Ua8v#dL2ul}k$uJ~#$>1T3sP(Ks7$QL#Vi)nO z0CvC8%*_3X-@k&n36V^8!L?$qbhuGIL8+X_Vdc&lAaf`lgl$Q!XN<XIq=5nu3T1F+ zLb%DaB^fTiot5HLewc>3Xwodel1ZhCCEy>0Zk&XScpJe3Z0Dzg_M02Ljk3XWnEklq z`p<`Zn5BcZm~j?LNckZaRG$XfWfaHm;S+KrPFa=9@E0&h`Qa9t#Jvzpk0TlXCKO_o zsb7Y?-2VZbLhP$9*_F4_`8%$Qe426558fLm{0cfP0d+tqO}n|392jyFQX$`fnQ$M9 zB*;%yu?Pz<Z5gqu@<5d>`Y@%5>nG5bSwCaO*QqqGDA7rEy8@5n6P{UQ<JS~5NlmSY zqmc*7NbyEjdNg(4rq2&6XeFg!hYrccR1ZrUTBkn!da#~#>rbbzV=YCCO<%QuIw|?X zYiPM6kfY@OdBhEVHM||oyckvx2>W5A)#Vg5?RMVh0ToTF&Rf6&|IbaBm~@0pS#QMZ zAI~((9}cq$Bg@NR%)y6km`uKbq|-l(wV@5#)}<D56}cs0B<(p9d@Qm|r8abKK<#B1 z$s2(L?YF$M;8y0~%dkggm-7$=c<B9KtKm8zSgO`&fHx!O3XSZNkUdMp18f*UyLG6s z<=aMn2fYd?UYYUR^AJI4!<a-VIF<eb`9=9@GOsw&tVe_FlB{#F-ooo-f_$Jh%#$6~ zAGB8G5~WlsI$;UBT;xzR_j7xp!0`noM@8d$ux>cVXWN7_4ERliGWc#BC?FC&-~o_w z?&3z+h3sPk*@Z;#S7x@juH<UhG~SB3k-WU$$dz_^ClYWw!;GsS`P&UrZ7_qI{tHxq z8;)UhtsbXlg~oyL^GUNEej1Rq=X1CNQErVjc;|qEdmlA-ZUZ3NMNI`sGnz?jq;Jng z2&2=2(fcE_N6QITYjn4(qXD(j@ZiAD3+q;IvJ2UYVP{%4G<D9`j=<6rq7UEJD7)+C z#&ABIzpI1)>WzHIJ2!V_o+py-3z1_<^|W8#CrdkeueC}=0P8M0<q+orze#5s@>Yzu z=VwL5N4y1rB*Qc$I`4g5e^0_k>I)wylQ(EGzjBT4wC8y0?IH3Clbh@pSXT0J4bLU0 zC<M7rDtmg;`AW>$m`q|O!n)tBbVm08#$+s@_!Ig@M(n*zR$IlN8TnwKP@JGT8FF_8 zyx6UX9a*<L+`E8X2p9YwNdcc8AvH80ww+UE4Lj5WdE?K#l1%|w?@M<ac=3svRk{na zWp!{!3I2O!zvZcbReN$2wr`vhKJifjh?p}Kd<p5tbPVZe+kBmhz)wAC+(1^wz`(Z* z$Vf@rYpIY)G7Jy_*hc_YsoehQ{u-eb`9_>fJo3li1R1`0>i4_?lx?Jgg1CQeQmA=F zAebJ-EPa86=aP~*M3}Fi>GnU4!iDCD3_Xe)qGMiR7I%oJ$YS2WV(+C6_~*f^@9~OB z12U>nQ6R2=2E;X;8Bs)YrMD9Kw*IY#xMpL8COILFvL8;1I59bGOb(YfHD&4e$8n;n zm%UwqBHP?jsWi}FV7vZ{iGp{px#!vf2UdOIAlvTm;~);a#{NG!+;%UF*GUH64tHI| zFfmBVS0N?=g8)+xl+Zz0>bNwPW)BF=fhw&lgz6XE*U6PVW{)U3Th4tR^ca~6b_k=T zLe_XM<VB8BuXx)0LnVB&kn*y5Z(3HNCRkHip~v$uBRxrOQFPN0cB@WVQ`P~TjP8H9 z8I$qmk)tg@*?n_N4#sZ8Aug}5J*JJ|ilSY$R*?68Ocpb35Mj(bKW2qQNT*J|q{1@R z3O(p4fJum9wwUrJxci?Rvrsw<)mQws@?AaJ)8Ib0LC=xZOP@(bFK~%6{eTFH9EUwl z>}?n<Wh-n(Ms=XGxhV}chb^11tt58ZdGiTQ#82pJmi-49)BGCxktg<Nc$3i?mS69n zh+#}d{5}vh*BqfDJ5HTrMi&pWX<Kya*YPLhQQwr{rf@Jm4&BV57w1HF&CIYK6iqe5 zK2mH-b(uQ|RYp{~msk(NP+2TYLD(TumU+hZ=<vQx@?NysRX9zVdbFHzb+qIlIkVr` zwcCi|v1coW4{{+v!@mg-rYKi1(6LDW)iTi!GV$Wa*ynqoQ8<uE@7f=34mqHe*vIyF zQmpSUGjC#^Mt3Qm4})B}aUp{e$ikZAf7#>T3Fc>hh7X-nQ3o5$UVXr-?sAof?G%7a z&3l>J;^~yj!~62#1`<4f;;HU_>!*As*kykL6=W%Q9Hp6aNu{M$CoJYclar#aiIOWF z&Pp6kv57w*LkKHgxzfclyOeYeSvx6r@OeA6g8rT8&@-UK#9_5s%MAR8*4$e1qY{9O zAJ!w=b1oA0GAN9F5Z*}%{$$3X-0w;*Ssgt<kGiFqS1FF6u4sr~BaP3{R*EWy=O$&8 z=t6`qa=Guru>@f?qV2V)@8yg(*TJ4@X4d&TzCoj~ZQgPFtz@+?Ygcs|3ser8`+*nT zO%T*g5Zyg>8Q4a*>B$@7fd^H@iv(W;NND2$ZtMX!@DFY6kh=A02#jwu8a;SFIHBw% z+izPnbj)rv3WOj%v%>CZ+-2Mjz{-mDeyON@zc8YkL3le>Y&$k`Vq=4wqKd(^)zF(~ zaO2eT!I5R%*$_KMd^=WjJ67^PSs{Ev7p+M2z-SR0t7sZ*$dc7qEfQN^IQsigqJrP> z`>aI5uvrP3KBG9teU9RCI%}#PM6UG*W!8_7ti)G`9pCmU$|)CXm5?e*g1uU4wylol zr~Y<!EDkF|YZVIXdA`Ns7k<mc8GSo8>7;!_mz6*xwHPPea3|g1|K?4==Gp##Kkf?^ zs*GUV49}tyi_IV!t#Kcq+!HeA30jm%9p^Rg6s7C_g!zXZHdl**v;!8R12?sC$Od{@ z>p#IcEL!jAJ`*}%yv+|4x{DH?kAzY!3XbO`G<)?E(_)k;D(2gt@i#+U2ZkvkuVgN* zB3?Lw>6SN#K?hCQeSd;x;7^A$%!rHCue|`vFdxr2j)Tc62#X=%lNlW&;?l5&qUwss zpeD0h(qM&HA;};k6*5oESOrpGA7D_c&wx5TWx1pC#;FYN%7FtJWWw1m@S)s|40d<h z>TqIWE5yU#DOYt80TVSHX1rhS2=-(H=IIImWgW%xxCMrE84`9LNR>C!Fl8whE5Skp z032!I(~s>M@*w_g6cpy*{pJY3)TicH!ZG48NOQoJRf!N-BnG2}*$_I6D<OQ8kk#zY z!<{36A0#X%F=x@w3t|*=WfT{orl}qxhkf>a2`&i21B?tU16FC`Clx}p&)Lh3{Uy`| z2@s7e4EudcV=gJ9{u2_y?kVC=^R+H@akE>S3|k0}r+&}=B2Q~lPdrjj9a2x8Qco{Z zPY_a1A>r5JUv(~R?XgMP(~gZ>uG!#QLtEOH)n14FK@$@RP@4IkU8n@77$;J7XC#}p zu1M|{3G<@^Cv#v!Cp!2MD|=Gigp&KN+^FvN$d`l|NJXLT*!*sW*dGWioiHq&IRDKh zP|@r3(F!QoDJT-o;gZgqEMDEZ(dQfNlrn8(GQ21y`r-2m>3=Tk3)Ia26X=m)Dx!MH zx!gj@gW>apVijo0>j3JD3y>1G6&98;9?DBM0yF|leky3M()sjo(eWfGsqqhPYQlcu z8)C#rC_`9ppv1UZRB{C-4PJ2!XqI(DvV^RqGo&8I*oB}mAkB0@mUT~jvv*+YlhUf` zhdxbva%g^vB#99gkT<}MGkJqxH?O{deyVl)WI(HMkc=SaM_j|RJExcLpo#E6fT|l{ zEGJMg!$&pTUNOr`5j*$v=-CsJ{gK|Z@p!gO0Pb#0(B_b-9%#@%7?d+6GX`_m3Uin` zn^>SS3*-8AMV;w57e#%O)^Er(^y3k>^W)os$$KgEFDl#=#d|z>!3))?N1!=Ch%M}= zJo1}m?x2DPr~0SI7LCBVUKe{TW4F;iim@|_F#8If-xYwVmPNE;H1W77OHb^b(}Y-s zKLN*}iwR$tQO)GAXluMu>s|4q+YPSC-{N*Vw_roXL<P5ubI-zEIUhj>f;e5$jUHwq zPvITbh8tm=>+YFNZ5OIf6TEu4tkS~QGUrIe1O*I-G3a8KpbZ$mF;cF#O-Pxx>vh^3 z%5_C7<t7bgQ!ae;l)g0V!CnbUUlWsfa~7!~<&H46lbQKbM#z8SRHQpytS9hM!bgRU zMAq+8_@nQpVDnU|ED_l(7Bc=Q*N7O$u+c<i3=Q3>UrV6f=u~JMrB+Bnclz8-KXy zQ4xMeEF#Mmr|(;MSW<me19dp?gA7dV0v*7+wY1u?ewo)}{bC`b)AdJ{kV*uvNVJh> zpqCw1P57J_^N;q^RlIK$mdgo6_9uieE8{sgU?}EOe#%@b!RKIIO_03JKXlC&pxEUb z{r%4?eCYwX>K}>uN_Lf0X>3p4L8VQdn>uGjTvcNZ-G_QJ6Pf}|K|V8l9oa3SZ<0!b zcBcFeDm^^f>d?HW-p;hUdIr~id35qx(zqV6{z+k<J-3y!fpd>k=PIsLY19IcvTu(( zno|{O3`c5X6)wB}BEgrB-6WA2vs~Fe9V+y2>za~(+o>JJiaLl8^4F<hvIC;2)KC{L z61aE7Z>^hBvg-I-{fh2IrzmAwmTHd$X)}~on%Lira!hU+bfh#2ViFysP941e894-z z#$16U(CMLgPDB97HN|ROBo7&=NL3rAnhB9R#vh26HWVPTPa}a#2>`2ET1ZVnmHsw3 zSQgCjAFfcAn+nAe2mq@nbCUSAS<Ot7q1wC<eL+9BS(oMyA)U##-4b9cum6I=KaSe+ zz5}tId5nkO42veC)4U3V8YWpGmwe5LMf%6qMJoC>i>R7-uD*JBDQ999Je;~HV-h`- zHj9W85)5d5c|kR5k%80-@>2oso<EQ+K;$Z0NO)Gwo0<Re0HZza>b>fnKl#fZ3IC42 z;Fa`!^9#KdRD4%U8Dk&k6A(lWDJQHMNWum%l<@7u4jvHsw<)_Gau@7g=Gbb)SJuN3 z9SLZS`$Me-;g+)WInI5{)UxzWyGQhgw%zB~B5h+Mi;V1{5xUenryvrLvcsFZNS(Tx z7ZCn4wi)EiIv~EK6x09~>({!`ZPC1#=%aKDZP}IZqVRxhWMe}mv;}W<E~rBYx{x-G zU?gl^(mofUB`nlW<$XWcsx(kfM@qzl!n1&pz<(L;b0~I*Z{uu-FSd;m?jqx@k6ht) z27IXv-=w%ei#diC>n<i+;%0hFV~g*`-mn#&Xxa*mUl9RLAeEzuxXV64r^_2NYKTeV zz`eZm#<dLuSY9T*?WwYRn5HmBnWQi_J!qJI2cbvIYMI`Gz!u#WmDeMjwUde0<w}Xg zy_zMLo#VZgfyYG4>txGAMBrw<las`gERq(QVhmI}fGmet9gNIb!OsmX<256xVnsOB zg&#iAZB^uOKqC!M<J<!%fqKEEN+L}Bj784Aef)X!(N=rQiS$Pni7Z}{G&F=FLX?TB z*!P#X!{GJEujfQz*97j3j$$eNi}y%G5P$g!#Z%_E_>CiEo?&UptcFo8wF6zbvgA;b zv@?XGvJ%HegBFvosSp>Z$1dA=9cmN66-M$%pYml$aNpn!5j>&ToklXy)}h{oH(HEW zgZ3f_@)Xfh3=BDgGbR{jzUbr)of~_+c&wO;`%VFQGHH+7ia2d0DG15@yJPo4bPv@h z8tFNEp;`U{QQXUR>OxSo^MXl=0DFvjtT&3(oQ)DnG~|dR#lu-&tN@?(H0a@@I9Py% zF>Cr;NZ`O)!_O%*#amDEuIbYJh^kE6^T!6?Dj>>t8Y3YuC!Fs*5-7Nd^0F2IJXrl3 zL5S?R?aFY7HKqeCGlh_VwYh@t=SX^sWOL_(FZvdx<?J!H9$42fqN&;{N=hKU-U(o0 zSJ;*@(*@*Q|FcD`x>d=3hP9Qx^-*JgY@(Y`bZmU*(3CMq{1tlAN#*-bmg;J9A=S6= z_!=KBd0v;(($@rw8jX&Bo(}q6oi09|W?!u*pZTJV`Tf%LK#--|Yi3kp%eZLziUtMG zz&XYWljmY3tX8e}l5m0EiS(Op_`)8`M;6{q+XIroV57=K%TpaxxK%&wJN$)$$;JJ6 zP*nbO@Che&EbEeLFu-?;msL{NJX?uwsT^tNlu+Woz$%7E78*{vAr4{nZS~EZBW%B{ zRdR(=;4fNu4|bpCCkD6&!!6F!LzvgC-PhSiU#Y9z_u4?!borgnEO1FbxSiW>4SDw_ zEKX?-gs0r|j->CfM{w{<?B8jSikQT`1;_mEFO6zN?y0iy8WaX+SU+A6YiQUG|J5Gu zjXK*|VtI1@wmdJQ#=rB1KJ+~W12JvTA9xeDnAaOP5|Hv%!G}2J+NW=`NcF+)Afqyp zc?Bj;(9cB)mt$tOvEl=y6+*<;dWFn&YnmY!`u2rQGvS8if>+z1!ijW^4&gyql!fl4 zcIzXYQW3NYA?W8oA0zH7!rdYBPb#+N-s71Tq6X;;l04(ma}!yF|EMu%M`UNpTSORb z1nQX2nxzKInY|)Ptrni|G<=OnB_&!W3Fv2$BaW-Z*5mREQseH$3WEglL8}}N#8V&z zMmTXMkBb`N{-rwv6v#{mk{#_KCp#A)++~?MSJ?bi$pNA8VUY~%VAd%<+1CwzEUH;r zDk_<I9<+nSr}2$_n0%%pXx<?KG`t&}d<IOyPO6d{<ma$<^r|@Y7z{9`qMQHOps6&Y zahxug5WkfD*=<j!pvZA>UstVwh?WCCsG#CWMYAeB$e4<0etOf{NTiN$>dHagTIFZ1 zX&}1;Jzzkkz~d8un>=7>q)cOLY|G|sv`T26v7wyUrDY(S{-Kl}j3vmLGmVIv8g3Rr zwrRBdg(6i(d1@1&u9rLw8M>B#k-!8fGGN}7m+pW>r76%Ss9+wh46wrmGf(YdxV5ru zZi45GCSt)daH?i{TfJTnD%__xLz*bzHKMmSThyrz^h?KwBJ||*ID%o8%7wl=lvbii z8#MNW#b;CuAv-)RH)k_!;zNr~o!Eo#0BxOU+C}w5)MJ_n*}CO}p19ld^913e(;RTV z74c9Nz}-%ZYsr~>?oS+snr{<%5ZJxLf&oOdJy&K#AAGr<@^)4Z9VNr&?tm0U8%KA) znU|11&4?KJ+KaPtkS5{)hp<v-c#=^6^pBL|Pom5K$2KPa^{;xAe#x=rzO-e@n!G58 z`ZiX{z75z?1ssj7!Nj*cHltk^{T3U#&7r)5XMeUBWqBrop?d<Dv6jJT!35*QmZK;D zJl(QKhQkNm|D;Ij^X+-o^1ZI*l!8*pW0A;XjTM}t1p=9B-x<Tlu4KLTpX%&{Iq6(( zk6|?j{hV`F>P4uGR)~#OMoG?9S?XT4A}_5&GRrWLDHC{OK&!V-uY?pG0SFChc!4;? z>NgP1%vTh1);z9vP@&TLrwmT8x0GC7EVSl!LG(`Z-gxug-uPapgaRT1C+7i>(**p` zDyjMq+UMwpgqnls?!uV7FdJdPTLfYCGjhVl>?ff>DJs&Z4${I7GS>MBplCR7=erzs z2n`=ZN=2Y0Na~}^ZK2S7{}0JYZ`JU{dXdA)+eul+BY;h{;T~HkI7ecK5MqZT+~Gbn z$kNFOY4Ln>74LP!aDP}P&F|wxV1gOJBP6vCm@V<;+lJI$%%h1$nO7%9Sx-z4BCm`O zK%CLY+oR-*7s+9Wl5oTxvJ_#Cxax1R;)(l03a&R=i+&u?vyN(`Y;yY%X^3nwC8#pv zbCGf9Orw%}9kMG}cJ|*`vdrNE&?<<%CO{pD(Q<@Nr^I|n3}B~_|0rHss1Dj#pF<zY zCf#~tvv<cWR3X{Q5t<lrg&vrO=;DAq=TG*}ZVw+|cD6@e!JvT0Ta=(PB6VUW(9#cz ziKfeMfSjgx;@S!up^W~~Vka1?#8I9Y(*!$GB$oa}cYJ{l9nTZZeTRrn?F+uS)olG? z8Wget9_5S%eoQUS(iq)*)C5&sR6y8i!I@kTaMbH082IYEzbM*oYE(HQ0{_qa@-P~Y zx^{Fd1DKkDwx*#2k%Jk!8Mu|57E{29h06TG;PlB`{OAo#_75<+jgz`i+#PZUyt7p& z`8P0-fYVokm5O;p=HbU>mkA}z3hGjpZ-h)1{uM7CZjP5d{z-jCUk3L97_2T->Ij>v zOlexoRN(YBqYrv-u6^gVyd^4ce;W{rKZOO*iwE(Ehl+?dlu|dqJ)$I_Ym?HTlFkvQ zRkZ{qCDQZAUd91tRUC%Yu0c{=wz1~d_DOS2OI?gzy?0TdD66G9uZ6(Jmeg+Y*%nAd zr32(BP$cLe@$1M3{>U`S8|u>M+BAT-mQ?ja>VWd<PHI7|LTGS@M^z_HMT`KLuBff@ zX-?zIP4j(N3+m>vUg<t;M9l(1hJMI0g3))t*B>TYjh95RLy8v<gu+<axF?LVYg*}z zU{PLBAej1ovf*G5wMV}eMMLICLl#Cu4(XXe>*d3T*p4%2MYrm{ui5>v?2?xdC$_i@ zL;2g{;mJH?DN7gx6WLqMx<*gdlpd4hrJDY*AB>$L#2yaV$Cp(P-Ov+>43Uqds6m(2 zp($-99Z*JX8yY$UkUS1*Hbe#d-QE=ERIq8MQ<5<B1i7u69W643t1^y~9N{D^Pz6pN z0uQwkE^Qhdw!cZG^`0%DY5djmo#=+nH!?7lwI6b^Euu_FZ9*E*@fB~Y@9RPQHXsUt zJw_TW^9>87(GdC>;50H;D?e~S{&t4aFU7`-XZ*!&JnRUgUsCWI7g8TT2>!NYiKj3i zBr)VC*C@%d`d3_<AI_w99*U8yBUQ1^4KPdK!L)YJD{dMwH-|usc4-}+TzoW-S;A*% zLOJ4zubvc#6GXaAk%8XrlFqPS2sV$3HvjymJ)CXc5n#}1;Z*Q%t|ODXOey&+cmI=g zr3jisL7KraMXljY`ytbgd+lukX57hi8J3-a&Iq-)j5=&sJDxLR_%NaNSWbg`P}Qu3 zj)r0xnOnZvJZ+(%2X~!ROE_*lsCdi93V+<%i#Ytv^T>hx1p1m*U@_n)c{L%T2Cm`H z-U;+RgeoVvD&^V@h!%y!<&H%5^@~_K-Lv+C%J$r@gfT5H)FNG9PvDPZVjJ<y{hY3s z<!(OeI9H<CiR}7y6b;Fzx3pVs&56dzin=Vl2;3{Le{FS1WVOe3hcFs5O~DDpbn(7P z`}%=u3iW}~u>{`l`$c?nDPyxMf6^F$X{!6z&-?=i(zQO?mxmKpwZ-yoShG%4q!y&4 z{-?r1CCiQ$o%=#p%HmzCk<7Xs1S*dWqSkOv^*TJ08W-qvV{fZx>p}bc=SmAp_^tCe z#@PVTzk2uj{vm$jFU(pUKSU2?3&c7m|1L^ur$;wtzfw1-2x`4Y7vsY~v#ckU0af*% zTSj>rYh8|3*gd_l{4g%fe`mjUV!pWQ;}6UsNuu_dw=*7AM>NG3ZO$eM=bd)iryi1@ z|7}mYX9ZWW1Bsx=jUy)ZUfYAW*q79Db|NY{BhRi{xiUjQ-JHn|<4D=CC5Q<>EeGYz zG^=UQfK@QpA;8!kSw?*yWyDh(&*3aJ*O8k_w#b^uzQy;f{n4ceZgbgJmOQ<jp*ypG zJU_49&wqQQzM8P{@{vaV3e!q@hqYSh?emBuN~QDMqZD~%HLlOBxCRwQ<G$hZjth6p zk=j|CU?B??Wf}LCJ#8cf<co@r3yD}=mlata>rj-bOcAeR{>@r}+koJ5?_h)QVMCG7 z7RC{#Ejy=APYo^~(qgpSdCTaAj?uElM3WA<7bt%AD}MgYAX>G2&{fG{yJ|;QoRw`l zYW6MV+h@gI7)04A8hS?7Bj{*1y`VQDfgCYfUA@8JgWlS_mBQ(+n@D34ZS0f42j%E) zq9L5k15Sd*9jK{>*ph;ZlNm|x;lhtd>iIWrw5)GeH$2OaG7qi|skOmE&}?bD!VVo3 zmK{Bgr*zJ;rlO)QMJ;cH1|Krt22NmX0hxi38-3c2W5b3Cs9X96&A4apUIiaQ#W<TK zVO~hVxHGeyC!zcS9JYElG+T0-QR*$M8f~3O)-5i6Rks~m#+Wuck%jaDw-GB#h{>t4 z5i3S~D1w*-eZ8D|R6VSxlzF2IMa`yb;{i=mT225E)e7R)&W&_b>70DTQPaQ^j^TA9 z{Fawl$P=qE#edM@sHe8<2dPMZy+W;1jA~L&=pLD-xBi8nDd(D1ouIh)hc>?VM{zi- zzCUk7&i8&-R#ObKgLF{gdzZmLdaI8wmWvur@AhDbm-F}pr74!$?p+_FAm%45<`)A1 zE(`(~ToL#cT$~P(G{vkpMdQ#2!pl+1EAgQcEW}P4CSB7mOra#zrZ5tYF1u`~cu{Uh zNh2JQJr&yXFlxij=kdeN7fm(AG<4V!V2mjXvz~_Mv&)MCl2i2qv$o87NN28rvq%v< z)QBu~Sx^s$qIyh1rDpXETlxWNP^-w!T|a16bmTIrcOM%D9(Xf2ihu6{gfu#2FVv_C zpvVe%9HBq-rEFWW7FRW>NIh#+co$O+Y^u-_M8t}z5lQ`_V~PIaqUPdKk*mpi!NRNn z!{9tf9D{u<sd!_AP<@Rak1Gcy9a#YqZ)$#509%IWpYj4&nqwl3KN07bZXDu&f`pbQ z*^t9ykdupM`UIb&O(!uqAl?97!-ab2EEL_HmVJ532XdOqczJX~vt!!u@3VHR4SxMI zCYg57316!XXCME!>2d*2MVb;0eCH0IoykHY1<}m%EFChhT&fMnKec0<`EFEzqiEwo zC43B;*IqeIMc9?mcC8xJ9?vanCwME|jJ`PGMT#1?*dwp>mewBN8=+dRIR5(gb2{q? z6XX!VQ82r(rs;%JqpJVurxbh3Q+1A8H&cjsA@*^W1>5S_bj8-lG(uC~rO|Oo)7{W{ zkpB4~a~E}v{^Y_2a}3GmqwhItwTIQuE*qpSzR6nXCc2?>+A*f{@-X3`PDrTHy;%c( zP{?vurTpa~%N7u8HNoKP9$|!4)B3r@0SUG<)T*xeA8hvsoxk6-71lTlY_bmIMu;eE z6>sMIwD$P=g94pZg;&7nSq2<HkpctDPM(5b)Uxn{fCXlb#B<;yRLBaJj|M5s9s!E} z@NhcbS13(0_o&bBjF=6Go}yT~IOdvTSpqwRMf%{wc62D)5}rvMgu}tj*C<kSV);i# zZt~rtF7_K##Xeb39+9m(=~GuFC%5J=mT6M06LFVFO-Q~k*mszrKJ-h8aV9GVUFdu^ z99K}QJ~xDRy?b;cO#HPJ<s&lwwltNNgk561KIW;*1-8qaLYQ&Dw4mBe&_<^!rz|I4 z#jT2Sjlsfm{i8g-hu+)3+XCu0z2vRRcimz?6+aC>6th0MuXn-!P<JeK*!PGfe|(e8 z{x|9r{r^rM{~v%TIm`b=-<4>tX`*Rjf9X>)lSBtqP}{kx!Nch4De1H@wkxfJV+CWj zoW)1~5lY{sr`|g6y~?WDdg{SQ3s_%Yc3#h2=*zF;7kC_45oqTBxRg^$7IRW?Mtt(y znQVK%Y@0f2^PkCunhl04u^e{mJ-;T2j#Z%_Qy}^|ryj}cP=>W7u<o8>#P#^>fc5xV zkM!oNG<zTlf0Ovo_Z0NyqvY5h1-_FcV0m(+W<YaVEO!6K3`X$l#7EIt6zmuN;WRvx zoZZ&Gy^R8bmt#0vSP%C8+m^s4z*~ItSoFt}^NOU8#}6d08)WyJdaO8)oAU56F}~?t z0yUMT&iOjlXR@C0d{hM*FVamToXlLUDJ5eHjwY{)a4PI#PJPXo7@84w^&}GHId!^h zW^{f#iX|`&fBNkD*P+%5T=RBUi{_;8vy#nGT=|vi7WgVaNQE3Y>Y4GijocWFxu@8| zl3Q1wB!?R<KMj<}&(h*fbkPH!$AU003+l-tFjZ!ooMqxCb>m7eJq~Ph$$1IVO_Qew zD-EqBhACWFds!OMN?}|=yHKM&F`|a%0`nXPByzgM4F$>W&L2|6yZ<y1CDr}penS2x zvxk9&9tzq#d#9+NQ&=u_(UPfVs)XkrK)xvsFB9XFm*AamMNw_D<P%d_)+R&Zf^cgh zlr52mbysUiJZ%rwt=AZ2t&Xn;m!+saJZJOJ7<NX@9fKqNm3)o*%e)+h-9DZN^d;V$ z!i=s$i<OC1TN<Yll_+s(DAOtfj=Vca6DBrz#X)WOAL@2L3yQsr2b_JBN7&s}q(|J{ z6`COo(XMFdQQ+UpW`?l^uNVrd6k&Bl>ZQQNMvNHQRC*Zp2@Rdt1R~iK&v^pk!!t4; z`h7H*ynQy9yaPBGgMGTtj1^4HsG5>&J=si!xq4H1DgbKlC>Lt)h-0YPTlNX$OTw9| z3-J=r?&5m~Ef!*GO{L2L;6M#+NUp3X%>|-y|C!23bjZx2tE@P-2`!(sh9To-G*%nL z!8c16ly>sOoR;AZyAtzZ+T-)fH+F51dPWgsp?3ouL6S4lX&#BYE}-VSzy<z=SR4*% zff_1w^feq!wBA&xkZ2$AtRGr-ZTnXV$1<jrQdfa}_{S^a)z*n>ZNPj(C%a%UhpM%t zWH2YkHmh8?GzM%pH?V-cK*xmo46t$*T+0P*ehf+Ah}+ukD(d|kYG{+sgmnLro>yoM z`Y*O`$EXudo}%&+dkVOC4{Mr^<}WQgE2DIov7>@W+MhTDY%36=Nr;Wr%p~PBO39%p zJdwo}A_sQnnNGv40U$alZ2yw&Lqqj|RExtH=LJC_I2xEioGb5-lo)K8%S$Agn*;I% z`f7%$^JTH#VmO&;S4ugDv48zC_>s#v?WE}-F`Ver`=F_ij7aKvO0AOX%AL{`vnF=( zT)!rq!+U=Pc`}P1Pm$phoUIb>X+oG82GC}eHODIeW9>d^+^(1x06ZJw`$GXU18$O) z(P_Q41kFpFPDexwID*8rw|y;Tnlaid4@`;DE6<yT8xP<;8tcBp%*Q_)@+*!?{Qx}0 zW29nA4BN?M)GH!+)N`Xr<6T>SPPFt_{{G9L+sULuNP44V5l-~dj~LtfW$$Wk;F|lk z(!K#JNtMa?6PM02&f~!WAm@I~tX~{OOZ$8Qo}W`o`wsI_BgRJkOU#!1SAI`->m|FE z?S~cmQmhcR8@PRGOE5Ue`2cO91^4)oRt(29L(e9QbW?^wh#ue^)hc<mxBL-(mBvFt z8NcEUBiCp@$}h0*5?top7;>A9nqlyo+DCf;e!Q?Kp3zx#9k0~H8WLlyQD%XWu7l~_ z^#P%%y`Z300B}mjPo?CE$kr*zykL+rP^~;!x+EBexpJsCJzZ3C32$c#H2lP-a<)tL z2VqD#^eFI0QN~fTsDH)>-O_f|oWiKPkIpw&zo8Clie!W4Fcp7q!C7>yHW50jd)#I= z=ki8`E!YM3WHLwXKr$QjONN7`4JMpKH`bybMnOi*mzK&Gmm(##T&1`-Zi^R*n~f{Z zHxZIL2xks385Gtdezh1F79SYQ3ySFr7H(DIJ|wrV$x5}k9oNEGHsYtKfk~?eVMt!b zd>4MGk6=dFCFeAO<7<~<t!c*?u_R*<4DM4V*>4^9pC#XSLqSQ5{W&rpThr`)l2>nQ znlyola`B0~b@AVVmVOgM=??kh2Q}jVR?z-Gb{hYWr3}meILWB!E20Ub^Dm^@>0;@k zFzjNDi|DFhMmz_xaJG=gd=R^Uk?_g4nRK=1P&DZ-_8mmcSQ|&Py#Me|zL~b3e+{*B zyX>*}yUmm2d=;0sGY!HwYK{n}HAxy(LNCt6-fgv;3fb1uQ8d*U*afM9?N)t>$K({o z;P;J`)&?6f6U2?woCCH%&H-`5L_$)BcDxWZ!N#92vfayqNE|l}fqbsMie7VUp{5;9 z{qdC$zCS0q_-WP;lohGNo_y9benT=oA+_JKe>U-K#I(O<KAXrfnE_n^4NfDqWixkZ zmoaF5qgG{%`hw8>JeCob*!KupkQ(yIN}P@`r4g{p@|$B|p%nVYZ+eL5ZnFekL;8x( zADt?JtT#$!ww5L)IR#>%s|%p3<N*Y5hKexP;R7~OG-^}FM${sqgTciMyeM|V^<D*C z*qltGJPclTxWzN=g3I=+jGD1oUtVj7u61h_>Nyf+Q}qvm4-)yWxrct6KAE8|Js0fR zWU!B!OGU2&F+)bK{&n?oXc<K?W+4z;WCSDtZ9U37s(V7|$bhXn!{Z(2yoBfCuS2Y2 zl^i6go@k@Y-AQm<@CCGV63gLhGL>PjI8t-Vb<KK--e3lsB>y1VU-62CLO!SI>ie*3 z;59rtD+xU84j46k2<nq#+AGvx!%F1dOtsR;c)lU<4HylNJ~vqZSv66ReL}&0vkK$E z{<lf?|7R7d7}@>)pZTQ;r>DDw^F`#8loc!sQ!rclD6A_((p+4q5z@*j1Zyc0FGN!l zi3J^xiaJ@;WOsSGxggK=RIZ@8)jaL0D=s@XU7NMBnXUTd*E!XbcgdgQ=C<R0MG+jY z!}<D;f9Iw5%IDZS=ZnX4KSfgE2e(1C1t2(X!x8B+1tq}|7(3xe<S#Ig_;&G3j>z^v z^XZc*n722Bf`hcG94yT%Pe?y3%00e_J`uad{9osm=mWRpQ=L4sGv!hR<_8`+g<Ed3 zvEv&EI>M%X8D8rfao*lwri~l!-oY&YC22na{cwwGgioJ^So^&V1!z87@ic^;ktb81 zyqM4aNW0vxc>U)D41T^B7RB5a<1!eJ>LeaPqiMyO6AoduUSM_}%P|j~8_Mx0fbXRP z!<RBWw<BYu&v2TlX4N*xM-#%?ZzS75w_z-J@OLcpG1ufv4TfgA(q?lGPoK&3m3+C5 zdwiMy?kSPkyR?us947<>?MH*dI9sBUiD<>#wS%?KEL$S(Q*qLs*!;pe!HJ5ANet-n z-`YnZ@30jnLpwOgbzjr`u9~tG@|x|~Wu>+{*?!a$E8C^;)?CD#h5ftNjQF1$U^$>p z#H+>s)^z|3yxm*2a#>WU2?O;3mKHy=u@zyt-@TW7E2(lK#rQv^Sj7caMG_LyGi9g- z&mZ+}FntNtO~`VUXi*|!*zHW(zI&J4D9S~kW}hC$!))<{cu~cCAOLyV)H!YlSzgT8 z*?l1op8!%SMLKt{5B}cx{!V^4*#xsZT=}Mghb0a;JyMRbFzR$;e{#%Ask`Z|GofVe zMsqrDdI#l)cc3+<`POM1QsrC@Erg5&!i0((0aDX904mZ@mK;;s7VY})T650lZK;DI zA(Z>PM8zC5MG<?PR(|cPf3pTRs)A?HoI(#z_7cb4MiDW;l-H&}f+;I%T*9xHP5AS? z^gklX)Fp_q5Q{Lj3Jzoko`IE~<}-^LhcSDR5@#2`D{BiNQzPaIjy!InJ31QfBL8}@ z=OSy#;A%@-5~{mO7ex!g(Pt{dBb`F#IOE9Qe0$3oJg+BTeg@%+&Ms@H;4VyIMh{o$ z@lio9sM?;W_&n~3`RG06;F4P*SEB*(YbczDfIs!bi^oEPB4S;V*;Aw%8CY3md<7~; zpNr{-_cFI!9{(t1IV$lm)vQ^x@Kwel!B?a>b5`+b?(XyXcFz*XA`~^<XxbGv+u}sy zh6Rty$8_-ghBBb%?=>TN><BwA@c7Asy^XTxrv@)gfTzklu4yPXU~sJ&$YH@%P8`}t zBej18TPxBR?N9wo^;xoO9p7SfPlqj{H30oeQ@@7!M2ULlcj^4gTWR1;h~c_B2<y5q z$p4@QwiCJVm)iFlS;GOANwvY5Z9O?wENl=4f@|Lv_7k9qzS%GP1z1?rRfowKL=!>3 zCa;7}iZ?aV2o?u6*3%ABo<~xn!wUPU^5qsHs#1aOEn50eYuliRBQ}JG8bcvc50c23 z?x~4YXjO-^Dl<k=L~7CM71zsQ9#b3hP^ZP}LGiRFlWI6XcA}^Z%anSh>x?Wal+vc3 zQNVV2bY_<M%GDTIbE*E$SRYcOP}O8^iLIa$UKuXz@MRtX3c>6N_ZBH|Z5y%^W<g;M z1orF+hqk~qdbjgbQYOW`*adfVEp*=cU{4eL16BwU5JzP$>g#FtSo9)!)-M+#B6z+C zbyYS6qbnt2B0pMF0W%|KeuOQqA6+b5a}%v6^a$kb5S^P1p`q<z53G-#vHfK2d%|_T zzcZ!K{L1z$vyOLIS`c+q5*cP5Iu)T$q>+5iY{r#ujT;7vG-Vd+q#o(Y($HkcrxK!3 z85q<S>~+WAkq1tqAG?6R2(6BV*q3@Um5i?1;RuS}vZDh$v<Qx6pXo=IG1mNXaW4vG zs%Kyr4$yjh#5oLJjqHkE*~%2y__AZIZ1+!#tLRy!p2QE}>nC^8`3PghPGvGi?$~g6 zn(kZx@RG)&yreLXbw1PLMA?RH>%K?XGbI-XFb2t0I<Bd?>{{7TxPxnanxr|8e>n}x zvv&Kqux(C}9w57PplRO)E@(D){@y|PkhfURw-WO=!EJN}5%7RsF`}l6^4I+G;@{wa z7)oS0y>E>VZ7SKqgLZ4a|LyJe+Os8~-HxG5#|L{kOaLno#CsBy5kri+fkg!8{l2~= zNnMRt1*q^a7VKaV;7x+qs=@T<6G+V^cCe2d8HA}pdU5k(<&_TQCz#ndsTUvmBjamC zh|aqp;@AG+FXB6)X`styuwE@uQ~=G9On(N0j)flAKd!m5;m7##*qQAoo@(QM(*rxZ zY8%Zz+P;A89pjkB@`!U_XR>J$t%-e*!Z-M*t&eklM6pjEDx9&Oc<S_Z<#{O7Cs=Zf z)z50S8=mug1iL1D-UcD&-6AhIU1UHyJ$6>kFuNC1zBJws-cj_+XC2VtR(6;h`a)hz zw%)t;ingw~FvuY_`)uBuA|1uBiHKIsUhBTX_<tz-rXW$;Wy{^(ZCkr-+qP}nwr$(y zZriqP+cu}qJ@>@KOvL;*CMv34>m{pleVGe9pb;K}awFC$oY3cTD;q|0ax0tE<8nxC z;}arzoUwG>2=rbQrWuQ*gu|!?RLObqtmm>q->&OcghcbA7G(P235Ii|(jkR%nQ-;O zcI6MqDh9Z#%Ly+S_Fw83ELhxP1m}!cB68bw?A`OEFqW)8G$}Rm1m%sWM$ECoH&BPl z@eepl*nT-*?UYq7nu$gc>)3(3`ROJ5@WKi-b5a27e2dd|fQ%aWM?o#%7!(1J*Y^1Q z_Go=w8q7%3io!?r%7tnMgbD}Hu(oVg2|aeHMdoqW&PbLKT5$5-a@5gaoJGvj?+ki5 zH&f)4kqhE#2MbqiW$4MFCkA0)rF$x27DLQ9*kiO-+8FrW=|Q)M65053K7*~nhciZ$ zW^^yrz3jky?G<7<_ut84l*R(ZlmaP+=;U-zc1?yzNKB)y9N=4VcBl0HXJ`AQ1@b8g zCKAOpiJ;3!$!ybk(@4oO20~TslWOf1Q!VdPk-O6Uwu_qmQ%Q!m7fTxT6)Hv*-H_Ky zl@a)JM+A%G#UE2jjS8i#zv@}_*T~sRH82TN9QEs08&>6w$r!eyq^Qd#<hTFObVEmI z(N~sb4V?jzCN<&o<sZ)Rt!Ua0<E>cN$i8!T+A$YFs}>rKLh;A}u+H#dFN;mOvnAC> zyb%k6UkgL(X>jbO=g?A#*5UNkfkSgm6sq`Th{nM3SHnl9Ep>&&`d87t+-S3BgBaGM zvm`7OCXGYild&3Z*rzimHKKG2nFcH!mDB_i)AUYVTJLW&3-765z8E`*E2t)bZB^kv zKAY@Z$`?o@CpMZ@IPvhm_=nV1`En}(E?6k2=72qb){!gvX)w(ozWm}&J<dfsqQ;q; zKWFwN-B;}1RV;e9qc$IEJhNOLs4#G^L@}#rPVqH~d<rwZlrzh{drYs=CE<<)8Zrih zZumRS*Q&%mb~<9renG!HM~b}!cf~fpJJH16CzYGYtR}r)L3mP4cw^$Z#oIgiN0V*w zmKbRFjNVnNBuR6)-d?o2rwaK6NxboHOjFx${SGje3)T1OcrbSTo?6)+Rfor?wtvco z)ZkWmj(UfGR?lI!_3sE%u1SZc3O)T45*XFULKY+o6YcOqCAz}0S!>;1fg%$&_!S<t zNEuGZ!f^%N>^9*>v51@p6edoff`Lt<_!5VzYzn+9V=u8om^&`y)a36ord~Ic<5z@R znvok8iw{VnW1)CA1XPn3XpHXJvkm<wLz^0<eH#bW%#_s1gq3V~S0=s$0cYm=Tq1%S zGk<KDzx9h3xyND}!gEz()J`jzDQc>F)1rXshDrTb7d5OXGWe-+j_eS)MCgM%P>*5> zH-T>>*Ke}8Zmnz!Br^GU3nK3}(2s1Phedv_+!&#&(m<QE02rq2Q!@c@u!g#Y+3A5Y z>j+5mN>_h2DDouM#5PsJHGU6Xm7p#gD0ckpK|m;xi3(}Zn@_b`G%$IH&w8qf@R&oT z^a(Uw`$%7wPf9t%s`tqP-e9ud{>#$byaAqk_9sz96#bu$3AFz_T$TNaOSQ4qvs5-R zH8ZgM?_kqL4RBqg!$%(*=Y%v%(BHeXe!n335fJ+9N#OxSMOpp9O@8Gqv9D&u`b}D| zZ2qc!+!m;`va+abL@u}DDx*Tqt0P=g_8{%Ne($oVw7RTB8UKDZHfCwhn9Te9<~n*g z^1AN4#_oRZve}LJejO+YJwYfM6cKUr*Ax%8O*<(t&{ThUaWMQQ5J)(nS0gPp<y;gg z@{EfaZ|O)axpl-<xq-r+K2YO+y0>hdkbBk7%l>=I*{U*@NS;@gy!=XEG&J1U(KGDS zQDYlL5Po35OC15Re1VSCy)rD}YDTBimx6LnUzIX$L{6jPCPb%XCqP#{fLeZ}#H~G< zGOl0*U%e}wwERZeQ-r}X+PNCi>x5B_>csrwO3-ZDA$FjJm!rXCO>s22<DWu>VUzUE zjB9g@%|Cy&pVcuw-2N&)Ya&B;eW)^et|atf-le|3Z0Z>$+`X`Jqn9h73gU&Oudpxe zwn{SQ3|?Dw>z(GttKEm;Vu1w@KhG3B)+w?dfH4fQtXieTi@D62XIDKG!pL253m^3! z_}ZAiXc4sIWZx=%_<b8USdEI<o!8TNZiwz~K-V2sjhc@sn1Si_Vca!3Y_r=uc4#H! z$<W=Iy4`!7I8G(>LEWWv@nDUc-4u3fbARjc;*8s!vVFYI@lvW8ZT8_Eb&XVXJ@*2% zw+CzfffseX^nz2n-MJU_&e)~14|Z_dGK9PI!sqr8O8Z$lMiPFi{FOQe`+CC6O-6}B zeWc*2ZpvMCOF*6@$2MBnEQoJhL1sCyZ=5N{W$3KdTQjP-*0#-R2;3)ZsG}=_Z!Gl0 zM2qa4Cd@iJI4~*6%@ALM;Kkw6v{N*IcP*v5>l^vojuRd_10L>ra9o^1pGcWOstjk$ z^^2O=Mu8Ey7E!%2w6(Rly+5)M6FVAzHWz-&Xn@kq1*|iS8uE<VG%7W$rz;g6oTzPL zO3;P2hGrJ~Br2oURhNQ#_IEM6guif?m$ANzxnIKH<716{nruD>9K`fWSDBTQbxTJB zUysx?jeyy!o-ZNc8Vfs@W_TDHXe{PEaE605Y8+bk3g2-93(7TvA%tXfuxmRG1mPRr zj9G(fz}Jd9HB$Q0#Xn5*_9xHcAa40w;IvaWqsiHUL_<BpWvif<=VIuMRIs08Dy98r zph@q$oE27Hj7wI8v_=J(oI+@lTps1e1n!I!UH#A~P=7QTV=bf9`0N^!Xxr0{4qX~O zBf*$^*r;6nX8;BmiLYt<^-}y;?b=rjROwuDe^X0`-78-wo$SMyuofjZx2XjW>z%bl zlF~>GN*ZUzM3^8-l}{DHD+`$^OM2IY4LyOdyTfADAOMiW07lhbnL@!MfcudNOs5sV zBV$Dm_2F>{fr7h?qe0z*`?4w2BHJ+Uhp9G91MdoTa^Vr^wOyHqF=B!j^#AZ%&N%y; z@UJFS1FXXPaNdK=)@}l2-(#UEW6D3!&VU&sh2gGhNbspAkg)j1WWPZR=;kL6vu-<( z0!F*?Iwy;3^8|xak0PhweZf#TtnOM3^kPOLGvZ|T^?<Aw5R6wY!iHka^S+;hE}fK@ zEP@oj3deHfU+t1|bkjpy;scW%ts;dy2yE~7;2TE6I~D|Qu{IctT5LAiw%6bUePQ_! zn{Ip{70>zZ{(hJx@$@qq5Q02KV_A6w^&m!rrX}`=!1e0iFf-t=Jc(U73+bT_8{CJi zO@3jxNHx<5g<GoT-I*wTVcl&02JN-H$`^`A1ze;l@eS1<ixUdqM1hQvqKOzLJy(vV zOdgNtLzfT?wh?JyL1A3haNZr;ZIzu7F4>-U%gRn3=W?u;e!fj$_wwZ~ozHSik&c-` zH{5SirNo$j{fUITJ9hd4^pQKHIemc3l6@U#_X+BTz&w4B`@)#fIIf=GXZH!{9(6pW zC<kQsiopTnRR*Q#H$$2`rF$!!+KwM@e&t~Iit4JmcX{<7_t81Vy@B=HW%q)~IR$U! zBujyv-6a1OJ;uG4QT!^K;@Qsu+I9R2GJTPltsz7OOd}Wem&x)O>{fndVgF9<s<^v$ z^iKDwzGGnj_R9g0KWYNC@TjyE&6jri@$tIHeU)MVPLuwH^;rt=W#Q;8P3fk5+&xm- z)EDk3T&<>5G+!b(&2y(C7ghcd(ms)Tnxd$!1X7U*>l3j27sK(ZeZoib*k|T*Z`MTd zt7PhX?>O#~y}O6z?8An;`c8uVJA~#0BF@*hswO}8LTTwb?CC8)xR89ed0dU~fW@+q z{Qeow_oJ%$LwNw!#~CebwQWzXgIz249e}J&{?8S8=rdXfL7RMOX<Pm*xE2}06RJra zDyvLw#5<x~Hy7B2r)sG@<%2@V$cByT?ka8WBq=B|O<Bb=LG(wSq9vs*8bQ>@rg6=9 zs4Ab{mKpY~2Ka`)U8!U@9My4~ru;`<3J-$R3y0(jetZoojNZN$yfh62h?5c4eEviu zT2|Jqs_4N3n%CFZ&c+yRJj^}q1?*sjfbox$J^4B2CQCOm>N_5(Ap**R0SN4ihul#E zoc=cM<waubi37@MSw+ao?HI5YnH=$%cp0lTLYBZYyYohBI~sbW<WdsZn4(szD49Z% zy;fSVuWT`7H-u4e`NTq!S~xCR1x5W&h=YACy^7M&sd$lm5&2>py-wL|lDZMVA9a<p z6Wq4CSf6|f0He5a%B3WtF?pp{K^1DHWB^L1B5h5#w3RmN&~pb(%x3=L?VI%zNR7#g z3Y%+s1T%kGBtHBpx){|au$+Q!+C`{qz6T6GhJ%<?VM)PW@9`w$6M&%Vv^)QmHZVn6 zmt^i=SUiF20(quLWD=ruMF8MM6~MAR^~%B%lT+ZAj%$W=K@fkDEOp536Pq@IoSq2@ zH-;{o^k#n`s%BLMfIoSZWIaPq>AECZ4;;bF5%&dsUuUj11#go+rEG@xXxwrk<M|l7 zQD^zTQX<CiHDAOy)aao|b|KmypA4(vaL_$?`=SGWw-y<6qe~h>v*m^@Ii4f~KH&&Z z<S-!v(GlQPQDRnk(@RZnn>0RNt}H?P8Mzvr4UAbz&I`cmq!HlB%#rzvH=dJNk~fAU z)hI8iWN=};Gd0U!I9Zcfxj=ntI~iy&!?wB(Lt+0LC35I(pkwoC3F&iVB93e(ruBo+ zIgLDIpNtMibk^@WbGB?}vja4wEQ_0kVx?B73a1}MO>*{6p<6We-E~Yv#miDEnGi5> z;KD`$AjukLrk8Ps9bu!%0>@>P^_i2olY_$+V(={)5C(ihgRO~_Q?|4-EdjkLUAw*I z4{J#SbZIz$^R!Sadl|}LRjnTg9Y@n*J5#H2(`wLxWw?^}Ex4i~0e<zY#KFycDNr$b zytraK)P_06cMY@Frl@R^A$_dT>&Xmx?R%ne#Xt?mDm=LVCZRqcEz@Qr>@W-dT(^4F z-`h@Kn019aIF|ojw;Fy(K<RM?4vih3>x0(!XK@Zl?hRMQZIH^97o}wHXq;O&DqUs$ zQiHvg!5rFoVL;B-Yzhv}?W~RfIT&VY@lb<qQTP0Yyyyn#5G$gUofIutO_Wd8Kx5~= zKjf-IxI*3&Tm+Lc$Dw!JQW~C~7+&{6sv**&Ho9Y`)(+3}#~Wy>v89B&mzrS#6Qy-= zwFgPY%T9nrDhy--8xosY?*!K0Sha8rKrX^`zkZJ@j<`KVn4ZzfOk;gzYpVr-8E2?p z9>s8ZgKUNkWgB8DH1<jRAXtl}L2-($hw<QK*w6F0Lw>!{+CW0#ybZglJc@2dogc=( zBLhQ27Kw>aU4v2oiH$_tV>6OBZq-^4hE*7=QWByFGPpfTRi++28GHDHvwhDKanJz~ zG)8m1(wam2Fp%17O24B6+j(kt{bZPCPqe*UXb;@3)^LP2H?$?Gambwj0ko<q#U#j5 zro|-(nQvsQQg6N(zF)S*ceg@L6f0M1&_m2q6avX46HxD7ooj<^dS*(`XXPxGegheL z5Xe@HG+a7wrU{h4Ew`;mNb`V>Kb9VvsM3vf2_e~{U(O7^*l7GZcGmY3+HwBQN6ls> zq;pck*(Uh{JzG?|=HAC?q6Qlv^;a=1)nA;j$=~GSUn8wAa1zFu9&Q*KO&q2RXfQw; z0#Am&Qc)s>5lq?l*t(qz6+_edo!p&cP+io4!6zN*bmD3L+&6~=RQC0yu=JB*R>~0= z24`~D>z#-_rN(UZNa;#A2S5GkA%Bd%DqlalbPjQPKl!tnx1sn6;bS*~nM{Cf9^>4m zEw{-ize@3UibC##LbXN7TP|Y7xN^i}<N5<_W(U~HoFEhmyGYLIy_~F+=hc1AU!X1t zcuj<0Qn`a;jY5r+Lq}>-_3y8pmxpV_b$6*<TDrd+>v|B+c4|O9;I8!UBZaGuiP7+J zDM)PA0}1#hF;AZYj?G@(Ay<Q5#B`e?&--t`wwmI=bV7-jGKp*^4ar#r%%v{T=cHE^ zqW9GyiUl3)9u?>&3lPc+VGRt+8RBpXV^(;Er5ivB>gGgF1IM{_yAhEWIQiH5&60zj zc04npuHafMQ@N9ute8rL1ofi%xjh<S98io&<x`alX)8wr%!DL2g3R5e;=|P~rsI^) zIHVEH6BIKEy?lr0!rZf=03z^o#e#iLt9$`Fa)6oU$uztUIiplgACSqtund0Sgvvo< z)f>aRSqCML7@|5}^#N&AzttY1qI+h?N6lpeU)i|s{u@*ogI3ufV_3W+O2@la0UH5O zn!94@Lm1Nxh(SzoN*54DL>NWQgP2HJjpJQ^zFd59C{;WolNjn@RVTo668cq{Z6mAE zd@XE1%q)o(fR(B*T#{bW*$c;2p&j-9ekc)CmL!AAM;CE`of_yqpgb{?Uwh_aTLlY0 zW>Y_dn31h|)G?G>&%6V^$gc5?MoO=Xep4U)i=g_hG>4SsbRtJ~8Zn++;0=%TpzYMd zsG{ADVRR^ps^>gy_A8^;&|`qi2dz-iv~_HfCpFbQ{j#Y3OPVh3px07Y0vlN^n*sR# zJlU;bx<tfyk)o$tB*ajT<H~D6>zZ{5zN>evhFKF|IPD8k7G}KJyx#VP<T~`UCYxlj z7fvdE+7rl|etHVnH$*kLt{8Q-ir=zQ{|!P1g0@aR&9Pq$TkFkjddJNz@|!vLOKQSj zQ8)+weo}m2GXHL29T&GxY>9XtX9QHCDLDXwAZnc4R>{gnAjTNKu1nX_MAE<J8nWtK zy!Xfl#?bRe>?yi(SrW3HeHvHTx$4BbOEQqr_+3VY(EvE+t<Ssrs9p9SeF02Roo=*D z7P;)R+^kKIw3f4=Yp~r|J@S3OPe0LWZ;<i=kQz~shC84cBf9vu1y?2nqCF$JtZ10C z;h_!{RUNY#le+E^UX|XcagsZD$0D4MylAq*Can*o;C51NhqVgb0d&yaPFRVucN4)^ zTe+;GRvz9TfKv8(dgUzF$V_YdG!(3=Kgrte7^yrH0X?SX^5+J{)aPU*?5H|{Q|xWx zsio%V-KvK{7-%>kChYu(#l|I6bkVYT%OvN<=9F9|=FSMUyvZw16gAHDNIijD*F)T$ zsmA)xEe9<w)R)tugQVZ^K1Z}AOR%#cjI{)KK;Jwrji~UZL3W~5igHRH6k>R*^XH}& z-(EpP$FZJR`?F7Xo+28QmfHZRL)D%ZXqmmdf~AIy)*DuuPH9e6sJpY!5|NP>7pP0` z3C*OeS9D}BHe+iS@*m_Q<|L@{b>?j>&+y-<KBag3v!`hKGDHTX;BJ#u{_H(JL=yBl zq$*Noz0|IGn>%K<=I2t2StP;E1$vvu4+EGh|Asw}o|{{nZ{S9z!`!(g+bSr%#*9(m zGm8iuD^^6(q~ooG$Wo6jY$`b5VjA>_JW8?-4y1}S+$3*A9#w_#UKejJ8O1XSAt>@9 zB;#->WIb$BPAw|FwAXiTj@3yMpuQNpwVS3>@#_r8l)Vw&c__z{c1k!cC)CQ?yH9@z zkpx{XRM8!QU=Ng|4KO3kFvGSqeo`=re_E9CTW&wYA+nH>a_jZ4Z|Kf}ku0YDl8`s_ z&5w8I3V3}oW-Jk8Awb!R{^JcMRqO(oZk<Q&j(VB@<Dzd3l-v!5?#8hxdJXc4oy#5$ zx{r3Yl~tPOGK(AQH4T`OQ_|iVd!?6jwSVi#qazM`L;prwod@Q|;1$?B1MZFK6=_ov z^782zA5$OlZs(KO=`2{~yhn~4=W0)YAY(1KHyS4D=8kbVDZ$SB0$U0W;=K0hOPq;X z==lVgEO%1aBJQJjDkFQYCg#}jwHo|u>V7lhD>~RNUj5al*J!sP$Osj9^qYfQ^~>P_ zl?411p9K7r-S3!r`V5^&;wmp-Bq?CUv0FC(N#UaSwk(8ju&9)X%r4y>>?C%ft3ST+ z5TxXE1c;I1TmuH0|8I52AF*Ya84G0AE;!^HP*~h<TM6OYzrgZviqyK$lkV`7B8Y9_ z5oXx#909{}G($S$h;!Q6GL;W1Z<rm;5S`20r?@xS;^2x|KC73bPG*X2Q&E0^3jxP| z7vYzO^mko?<gpn#`CR0kxpNUTGli%ij(&>Y&b>9go7{TS2Yfc(`0YZwV(8Gp=_sXb zfIl`AsCQowGYho)!eqc1@25^>7|vM+%inCmgZ4h3a_NR9kC^glr)+XA(QlU+5EeNF z5#%${D}**!gk@!15;p2`s@kqoS>B&JES8{SkYkV*MgHNK#a-9ba|)H7wOsL4)hrdV z7Gp~7E_^nCVt?uB4uzWqO-TPHb*b%u0Mr#4I>&Ft1CVVY!c<WKW~9^UYnT%~iHB4a zR(0t5Zk5kmeJj^GE_8yAl9kE!7%_&8pXz4|N4T+59il5vGr;@Rn^L`-aZMLHXA88u zQg@~w%YmuL!>Y(d9s|{y`-(R{(9-0Zv_xkg{`!nUo$Yp|n?4}AIF@J$r#S@ah*YuV zsy;aEfRUlv=vl6>hir$K?S^QVKIMcsS>&Bgfm;viDWo{zF}+p<&tfd!Ocid#JOzZ4 z^!u`@S?7gSh8Gy`S#eXIU1UbZTzvT><sC+?tR}a*zq4+}Ei(`QifS56=>H3hWBV3* zzX#@tJ?6y`fITv3EFq`-PXYwjqWr07NbD{f<ZOpQ{+?c0-Awg^o4<&>g?239_(LJ8 zy<p5o*1hL63Rp8I7gQ{1D{q}K(jPZ=5JF2{hSRpGHQv34KLo}r>-G#4)QAGsQ)sxk z&Ev&(H~Sp)+{s-IzSh0-zd9v)agLV&+?y|)tOf2LaQ;ZfTMvIc<FnX#;5u_(?1c26 zM01ukV@CnnG4Q)!L)^HN??Q{VMm1!z;9XYb3R?@UFA1;9K0Mzkx1~4Br8X-BuAdrj ziMiZRzx}!{_IMR%pYk|?x}G!@pDvDaW!_B8mLh_LNKBxV|1B=cCG%*DFSBd*VWX~- zZwG*Sw3_E`-x1s~x{{aw;|4}-@pPo|v)XAMvvnVoEoq<sgb8EV^uB9-D<}1tL8W}u zQ$0c{tgRyiK}KenHR#;FI#1i^uD|X67iUGfcXo&d<<~DAhJPAH{}1`H;x_tHHikz3 z;rT|%uUpUa!f|D=+UaYiCrb#lHbzOzgPG&qg7TN=D+BKVlPS5K%nxl5V=`MbG_A|* zp~u4Um*Vz_;2Bqn-Y64JyH8C`q^*CweeOf_I9#~31hh-FteD0xHQi)KNI_n;yYB44 z_s{EklHI$a+{XB!{B&4Nl2^&h;|SK&qlny*z)^peQ$lgXURkzt21e~6ar3lp{Zi*= z8T3qTGfiw!s^CF={0Z<J(l#~RLOPX_4bg~{6pH=KVO&y!urhp5n@kj9l;OFxPot&) zw(gw)_d<gtV|f{ZxaqlpK?7Wkm8aRjV*@a3TmWZu=1QN^mh9kuN6mqH12RQ>LrHT_ zPQH-dCbX}0{hv1(MeNd>-9$p1SWrpI+)^T<3!Kwjo6@7&P1QJX!T&hM|LsG#aC)8w zT^8xcwR;l2E}i&xa8^hVom6TCQJ461`X*$@YHBh)gmwq4SZpGw!`Q{VIql{*jV3qa zedbtMl)0uL*SS#n1RX~A^1p8ibn<UR@D>howKf1^YM9NFTMFGJrdyE67O0q0!!wI} zvE6D{6)=Ro)1a|xCdIKmIR$_f;|zDy6TtX)>N(hZ3uQaNuV1x4RHpxT<S@lQ?<f8@ zSMEPdrd1crN93;|WyWO2=u1|+no*qAxFjJseqS`x%pF-dA?7g4{Te6An9Ew^(b-7- z5R|sshMA<Q(=N_~OzxsgVyU;D-6)3_$T!@FI1^Uhx6SRyqFX@-fSmp9Vvp{2ujjF^ zo%-(%$erI`IK$GO1i@Ui1}lE(Y{-bIK}5@Jty3g5gYDEKi^=o(naKx=;rpCpb&3e8 zLqWjhwuW|23kWBJLf8~`6?^hf?Kkq7?%R<H*BbtBb(z}m4xC<?H0LkT(bs1$*`Nd( z)EbKkMDuo(BE!#21CYi}TlSDC$yCtrDpny5M&pwcDwB5=?Yfh##}R36&z{9cs!AjZ zv?^9IB&)L6#0`I~_lfS~l@@2RG#F{p)6y+c=n)ZDNiYx!jFz2g%uYy^!iz0b#xR-= z$QNHHB(2Owof+7^(=g(Y>)R^yTpWB31V|VLlk#UpF6%D2tMa&*7{w+NlGKFflIq8m zyPUm;%26iL5OkQqJ<aAS*6g2g39kGvO;=o8?B>^=6lV-1gc5K0aZ&DPjd-AeDi76j zT~BXiDS4D8Wj)!Tp9|BCWqz?IQ$$}Dv8KIk5QYb9ANR#A%%tS`T~z>ZuJr9?Jq!kE zw*t2iUg&L}Oj$*qL4=vF2-k8LcHCE3prlA=jC=34XVUW8kXsse%4n}~<+SlvS57QT z6wMYk<%_PsrI#y8)c3P%8(DyH-8CrQSDm;@3HZmfx=&kb*^tjLfs>GuAZN*2H8d*; zEi=U<%_Ll-kSI^;|B}>Lx^0VQVP%<8Hebwl8dEm2RJ@NhobKVnqQ3!x!Vn$16M&K* z@5x}*+o4!7*`aci9z7MY$KYS<i8*Y*1#|ou=#jZ)0OA>5XZP0INqIp=G~8K!iSpat zqtAjgnd!N{VQ$Y;dUN{N>cPDc0rKg~f&KvTVTv780EI}UwMCFQdC3UwZO^Biq=-+P zxbrl&G@d2DGuz&*{q%-@_L}YbV}MaO(WboUNO5pB^e9Orl>wJ;Ccd<SGa7R!!e%<; zKrmlm!Wk}=cnQfw!7+Y3>xrk4dW1C^m4!uSIDEH|iowQEl}F<1#&3n8@5jt;>w&ph zMkA!8Gz;$HKILq<W3BnkpK{@j@wP-(Q6y5@q08=Ov8bd2aeU&Tro~)63O2@aF<4cq zuknyy;&&p(N*_bBFcI%5S7;5^@+l+<Lo!{pVr}O~Kr&iR5}+hgcP6IvXc$r6%#~q; zlyp|1#VkP%vE|||4Qs&C{pE6Z9Sd!maJ641<t}|m=3~-bmbE$5iJI<6xeR3!bFZ~; zUHA=6^$D|9mG_w={>EK}IXmS9iGLyhsA1PF>VC%>3DyF+1dnSGuWq&R?pg7>cJAFq zKOop5lv$Pq9`@vzop-?_tXm52*=>!xE)!=!PCp_lM15t(3lm$P0Hvum;9PobMF_K9 zW5pFM=7l->l{x##>fwcXZ)}K(u<ypBl^C2S)S9>xU|S*Nx|cTLx|e4SaO-B5qyL7i zN+3`M(c1^owXCd%XGq-r2HlB-VD6j$eUaTzkqZYR(N>@{P-pP=7xsXlA{GQ3UX?bi z!m*z(!E76WoDer1r$3?;R#-4L+u8!Ww6PA`F~xJ}-FxAT65B?PFn~F1>^+*}5$n(e z^RHzD#&W|(G+dcoF<iFukQFjKVXyRHGM`N8D7Z_(KWkI&4O!)b1HIKuQOqdO&JAV_ zAHsJ@-y)~b8^?lbLLNX`EVGq(BG%8QEs-Q{D}}pU582$dh#5?!G527fF<`K7xHfDk zr!l48a21#*?UANF2WLqd-<|g7?&<~!rcp@6YO155(lYul>=LO3)g`M&Zjuf@(a)%K zL*LXxO2F-<Ea8)ho`D-!hAKy-M5Aetg&nxFD<mf~ao<QBj*+)D*8~k-6~dFQ_xuAN z+Ayg3Jspy?4hd8cad(h(+BtAcxXyn%zr9Y@kO$88@pK79^UR*s+1x)Zdxm&7hkjX& z1m56VjGwu_B}Zypu}{6ct3lk@L=bC=2DaYtD^N==l}xvxNCs-y2D1;MP_Z7wq?2*Z z55!H?5I9I-r&UdtIYm1LW2+TT$wP|Rf620|Opk;l#wpTt1ys_fRPARAeD8d^86lc) zSRG&EFk$$XC?3r%&*nfX+VKW-Y<j%;eh*2n5Zgpfd4!GMvN!2K$9lrDw<N0#8A<Pw ze>$$LGerkRJlG)r)PnR?|B3uTvfr!_Kh~pxRjdbGnBoB<TE%B+^f5Omw-JmJCrxuq zYL>zVkrGX5VCTp+cG|I3;IWJg*ygHV=kWVC?7x81+_<sD<PW2q7w(_BB=tXcNdX%x zTRjH{MLl~HBgg+V%2OZAMPx35bqom%n_GU%Ok|Q|BMyAt-(h%gG=$`L{>^Z|XKFc{ zNRo*}Fo<9pK*Y^RB{Y6cgYRd_O$&tstPMqu4(e^5S3Wb{d7rbz$DQaB25R(VxQzE( z86MM{Q=JU%*WEVVKszuWn=zfK_j%CZxKDq`l<xsD`NS>f^({bTZEP6yJ(Me^!WR8; zk8cBUW%dmA?rwi^`;`E?VoZmQlPGaw@=|dZ?XmH2M?rEo?78tga_^J$K>|Js)w+wN z?w=WXF2zjm-tS!?^K|(}>|I27dxGmc?NhvzyV{Bk{w41!-aChA5XILkbl-Dlw<=Wf z6!7y=l##+*I(c;y;434t0m}#Phma|G7${^ikW_Q1y=h=Vohpn{WZy{0%qVHAT#BE+ z!fzvT5wQF0h?AGa=BmtD>_;Du3>hB6?_>+>3N%tbMot_~pxdNR00()TH8f}Ej7!U6 zs<d5TD-M3PX3$d?K}rN(A3D{Ov5&`57McvCi%rX*l`nV`%p}nWl=jq=Nz=c^N>*nu zR_8kj-p}i`;%g=eeqgi=Ss>!Pnc~=GLQbLZ*AKBOK$C`m$YZsKXaa>a7W$PqO)_7c z)n;p3{}SvfMx2UaFcdimT~?9Z$O6Isg{wqvTxL(Z@`R_BU%X6vwYG4Z4~OrsUTaq? zbrV6DtANR>l0;ITo2H+!P^CXGXHft7*3q9|?#Rt+MY}!Wo^t`X#;tUig~E_S)yAJN z#x{DAITL0`&b?Z+mw^Ru9b-wgx;tI=lI;HrwqUiY&8(A5MF(Wgy44(@F?U!~<elX_ z06&-L!UTC+d4{*6;Qqesz@M!|Lm1|<NlKPrP`8uJYi^<@F6p<2dX11FiHe_IHsLWT zYaRHTaQR?7S^w^us(V6dVx<2jZpD-ud;CP9{?KPJmgxCQyNv7KUFMCdU5=BP8EWcn zp^zV)^$RyX279ecKkR^=YK1qca<hJSun^uO0W^=W;GhMDw||cL3%a(-tpl`#Ye2<} zEqeFN4RKXX@@vCvP2@70WVoI5pazDrty2H`OHr`S?lMO3O>VG=t$4r4%`b`aUF;9x z!FCMqh;1`hsF=SmoxwaiF&N5rQiC~+AL!R*FA>4rdo~!va0+l8vrom#b(wZtbl5nV ztX2cANNu~jH9EbQxcc!mqHG94lmtZ@V$LpyZ(GI&s5>BGthB5%BK9ysG1(WG)T!Hz zZg}bTlzQ2tXz=pO>nyYw=v<@dIM^3#>=@`+JF-~U95|<8PgXciTf9f5W0=fL)VOVj zQhw7+E$qxNRg=VdvPnqd$J0xtX(%+~V~-?IqZ7rodRcwy?t_rJ!ZNUEkjb7UJQIS% z2gTM>TSETS94_>N^SP)@Y=Rp2R9i(R^zNAvOFP28Q6zl_amjHG#mE`Eu{L^L8XK?H zKTpFhjc~-_``;pQ>5@|Elp#=o?{|%ktG$+J+Yr{&oI*orGHcS!T;rOnsyw^p_tPgq zqB?}VP|2VKeNhNr@i>ei9v&VMQ4LwRjFVVX_CgHx7YF>+@0{3pWZYg52rnz9-H1i5 z%dBD8&PVPVez1Q0J67-)d#IP%-XSS{1jeK)ICN}>To)T`Om5Xd_(xRLF19X##}L=* zCsd?)<2RaoqnPq<zp9f+cbzEYFyVO-uaM%KIAQjvw?LNgz$`M=akenAD&+Np)~fR* zdy!ooN;N{k81LJnO4nZ>y9DrAR@PwZRI!CoYlEWNBUWUwF%SEKX|{)`wO!_is2XPF z2Zp#N{H*r1hlc{9qcDbpb=F$^dAUEdwKc$T1)07h4|Xi-ZkSqP#F}?w*l!A8JhOnR z#a@gQk$&f9EyJjv7_L6GQZ5)#E#zTx&GFN`VL|G(f{pRp<QtMfo+gF7YbjBVE8lu! zIneQ^-h{_$Y2J*_11+@9ABM7=hpOC3qj5)z0*G|HMq`nm{NDZ>ZNDH_1wXbtl225t z%2)J@-0t=sr}SZM`0eo5vN&8)U3g5$Cz@?6fpjP`zF>9#g6GonOqq86V{3lph_D7; zy96t%Dy_PXcf&BG@c1>j$ZJj_^}d%l>A0zitP}DgM1G-5l)nV)&>#xPb$(O#KKU8a z$S_dW)IQhG{nlR;Ra8d=yaa(k-Mg;Z*5LYy8?l@s0AW^qAdjZ6CzP&uG&~G-smJT} zV3C=fb?}Mw9Aki%fEEXTQK*fp#xjwZBLDVhTExh{Sd+{qaQT^gOeyjcY+WhRVfKy2 z^^2-xGORD?hV3#_ClqmFTwr2j6hG)UM-XcqHUc_W6WM|{ba~xx9cTU)%N8=n@XsgG zPVWh$0y2w&Fy?{S8iM;9hx@#9$Fcr)@#c&7ex#igJpgLpyVhLPgT8`QfQBj%pjRqW zS(9>6$gML;Oz+S&)v?aR+q+evqHlU@1Ry<hjpt6{!;(U+5wZG!ZsjkSdltgXD;+@> zQ}igHtiP;+=1jE#DDX$Klm0q?P2mYGl1rlaZ*0{JR>{dR$CnHx*p+8zsEv|qD+74! zZ<Ssy3yPw#z}wk)0TQaRkD$UBLfP1J4nk8+Tyl0T>qMua#9Wfi*kjPLd!VufF=X~Z zI0IB}DkMkXgWW@kkQq7yF%~c8sDn}W%QH;!d#R1*oo3y-T}!{^)*eOxRrtMhKI&%{ zsU9Dp^L0OrT_6&8TP2sSkS%fH7(7Hw98UY_otb5{ODCvOYAwjBO;JmqJ09o^2@E?| zE?x1I6DX@frkm>-=k={;pCS$30j?x2wDrhOd#T1vM@^O_R&lhp2`q@oQxE3jwd&;= zrd(27mt74n<+P@rS8xKaEIx4mg<Gy*8Duqo|N6Cz_)oaye_$W}AGqZ|W1lPqE1Nl4 zByVb3h!wU>g{IfK(=*W0zcviS=|cWQ2#}Noy_D~cWGbY|$qhzB-TSCKf5Yg8F2G(2 zB9E03ch>8QpEK_>vmLTC9Hf1|U)>;fz;O<0!W${;RHx&er25VwtVL}V!lB8SkvHUP z25YJtd06APOmAwB!bH!(HqM2BZmBU=)p;<?5@dn%lpjS5aDq`_-;f?;)NqG?^l+Lc zBONtb!w&gg!G^U9dZJ37I9{6c*fNYH1y#Q(x12`nE#H`3I5=$yzpgbcMK-);R6^;r zlJS<GNc^bGr85~tx;YL=GR-lwFW>U^A2IPUUbsNg{W-{;WfkoJ%EJ-H$glQr`r9OD zwXPl?i?_2^0@4XKvf+WfbN9NS)|2=}(()v&W=z(9TKq!`^qVIp4t=T9G$P+3QOR%g zJB4gz7t)K+Jl7?AsF>*qP7dD<O3@r!7krz$3RQOIX}N1Q=y^*e3gym4!xat_@IhGj z=;2LQY*U^&;rVh65ksuhB!c}|eD<Mp_eI9LjD|9{HO*w5B!vVNdes4;If+1SJTVm6 zcL3)%if8Ds>N_cK5%R^i$b}5FVsL87JbqfPAas9msO~>Po)o0Ieqa7SVz{kdf{Qrs za0u-<X?&R<MVwQp1R<hh@~NiKQKkR5=>+7MYFI&)EO2NZ@11jI!XIY$J9K>t-S@*a zoqrWuZ}&kE?9Ujf^dA**Z2uo1neg9OS<%h*zd5g2ivO;<E7AtXP0Wn-p3_X}AgK@s z8fm^DIK_C-NFjv1l4z$239_H-1NH2|hc%hCVD_S(XUz2qdlnwmfOORD?V*F~_(0qH z<Kqsyhn!wdRJ6P$zzCgzURhDFW^6Lu-!3WBf>U3s7iri7qL|H^G}OMM`p?j<UnEk1 zA|>)Yl=<qzS+b6IrwN@Y$Z}&xra_asa)h3g3l)#rv!u)Tc5TzAFqPUf=BV@do%*O| zeXWRH$?3gMx$NnT1DD2RcW#PjttP1oI#Oricrs)Wet_mE55<9_In}gE-P?FaZ_QWv zw)A`P{E<A%UYNIqXzLNmBzOLLm69b3GgY;vHT#1Q%AmwLR8UKo#Z`vbu;aN{|FdOt zw)n#;bv}zlu>u`ehRbPFyk@<g-L{UE=}^Pv+806asDmOB0`l0Ci{%>MO3iuIX){+j zQm8{nd==Z~L5Yd|y>)xsmBbgpTmi;plS+N|il%EJiDTIFjBOn56gspSXChyx%A0AC z9!w0=4=(_EKXrk2aFUTl&RRd!5bY`}3{TY|oq9Aqlw@i`V{N0+oLemByBd!D-6Vy| zTJWrcVTR&Ql3MXQa^5(`m|&}=uWfn6yjG+$-H;vQ(6SIZLSIYZxNa(ub5bmiIoJgv zs5IP*Xyh(LHI=6gskijNWH?U<z^zi0C}a*ir{BOnnEPIJ+@f>=ZOnO}%sbII1tkG5 z53jarCY$id4elxZo+dj2zA*p<%4jwOTQ1*=!Z$=2MjX(vY&0B-U=lDok{~1mJ>iJ0 zXe>ORuo2%-qRjvxHv5uNSpZ)F#)a-kX)rq)UAaA&!4Uk)?sesWDCrG~fUC$g7~`_X z+8CIjn0qe8BZ@VoW*<l`NE>@gM405me@R38kaUUie?9~QkbnB?{tsjJ{}^h}|NEpE zrC=qqzzgS%LY^f5z$*j*e;~~YV;F;a8z7$VD{hZgfE9+D;(Up`MrGEF=A9e{x-fvd z6GK1sL=7(ql~UY(e>cHUUtizt?eh(;iyZSd8`BPhCCS<nB8I5|Gi19>IuApc2qxPL zgvr2cjQ-|GF+uJWEG{568K6k2(|jO;?ZG)iH_eb{{IPf?oe)S8=z~!%Tg@<`+zy_) zZcxLFphK@|6DZy_y6=^C75*7Y*&j84IGZghP~Z}oOcvU^sVrWM88<>Nb|#5BN<OZr zW0Ovy{+GD+o_kb5rV9$XdYz97C)9v%(UOctyiOK`L%tbdTX=C0OIQ=C$B8Z!9+L_6 zURBrih=`7-6tcPzX&66T`Gq9T>=dkZtc4Y#l`~n~B(of{a5`t$ZjSRVC|P6ZY7Y-Z z%XR_!GCs-(l|r>B+Qoq|*ghWAlZS^BifOtd`Qcu)_(Mp~HHBi)di~+h(D9^$bR20V zH;Yo>cw{{hs)+ZjSq>-AT!a)JO|_MMnKguyyyF8f)cyMRbOO4RLe`O4W&5jX>iJG9 z48fMAwGD!VPn>pUY6s+^&nN0x?p5$xVDl^zyWD5@GSt8UkxA|WW2~H=71TcJYGfQL z^<E!RCw&MG7Ddv;K<t9R_n#`iHOV>l)1keEqi+92>Dl|%o<!420;mdPs5s6!VLdb! zKYn`4$S#co3y02P6$yAW4uNY}Ra|qOo+;ZyD6f*5?p<@(FME#QY4!fn$Ce$J^*HP= z?G5T!7h3Ulp(ncy()^PXA@2`>fBmpyz7kJmf9g~W_@C<Ze~>W$_d4j`Ra&VU=7G2j z|6NJsMpWxd&~pSasK{E!7KrD|76A{4Nx0r<_<JU~>aelXwbMeGg0yq4Q0n?!+8vkC zN<afn7tvJSoyaPE>(py|7<aasLB>L@Y3YYP@Oc~U#?YO{ViV0Y{c${$@at-@Ti~Yu zw*gXdq!)b!Ewe#n2!p5oee7{Bc!6)dUS>Z<Ujx^4KSjSQvNkqeF4*zzqbm?BEZse3 zzboPvmR}%PzbnNS@&2XW!ag=<M?#28?Mu6x5bt%bM}Vu&Z;cyoVxK>OuzLcWo~a=r z{jR{c;QAJDxQF{OAhlefF(D(FGJ!ug{jEa9<2+vj$SpeeD`k$R?%uH>C;9$8LZbBi z!bM=-(Y?AhKke*#+SP@*j96%~<YXA^YB}2ultsXlDK+;&<PfCW<kT>%#;2JD?>bR$ z%E?un?D}k)RI`iN?*q#IIwC>&lEr%S4cW;&*P&V`hfvo~U}k%;1A$dX8aw!(^sY|+ z{4#ZXlht&Jx#PRINGz_k>@x{t!U`@nmUoNka$&z}Z<z|WX#6kWNd%N)M}>3p$R`VD z<x7@Oe8`F`K5(nrvv-zhXs-A=`*J(QMki3GxX)sCafM6k&4sK^1bv*BEFAKf_)><7 z`A2?quMx#8e<@mtjtT;059?9~x2{$$GzzZ6yoc9C*$f3Kd{NQiY>^#Agd-CyCYE^R zVd8BcQHQnx0jg*w529ZTg+ezAM<7wOn)1z?O0-bm_ommNK%HxVYecLC4Soo=hU|LX zMo_ZFk_ZxeW{b0=?!PPiCTf0^wmy1>f-ZXrV1{AzWbtUqm+^Ym<%8CkB?_mb>2G7` z821SGQ?u>@*q6An1@qK6R!KGcK9PZ=nY$%7F%Zp5Qp3^K_{SGh=+;Xw`dBdQ<PC(A zeJ59~Co2-cAq>jBQ)XaJ-WG#gt0TG)+5=YlIsP;|5eQ2g=(2nWF=QtLLLeM93cb`9 z$~9mfMxJ85DYwYzDXv`=xuF&Q?=?C@$RH|qQP!>7byyI8oG2^V`j>dU^{9r<Y5C?K z**U9rK&{7K%Kb@h3jM2hll?1Ki1*JSy8LVqmYWSdHF_0X)A<dH$DdIh4S4HUoAf}o zdtKaIh510$(6<$CD7$F#ibrK{fIeh<V{Q!4dE{;sI7@a+I6ttaM_+>cb@o&c2&4R9 z=Jg}|b?&i!0y-tn<ZH0kL$``|nkB!n=hsskbl=`(`&;UH*t`MR`sx41SGRvRBs-kE zHYo?EoVd1kgg-bQVpVG^#Q~i<PhT8?4~Au5&x8b*i9r1&c1deBL=|y-EaI9I<F5zX zv3w*yQAKaQSO}v)#@Y;RUT<>e)*%;57r)v<<50WgS*GL99~kM%HB&+B9>z6hOcKjO z{6N1O=Fsv`$LCPrimO?z_mfVeRi$-^wobdnDGzjyhFGr}Rjp!<yJ9ZIRD3TspRoK> zualsDl4}ivwP4j$&8<AT$~8orUn5*zR=8D{0P2!UOhclSuwvnpPZNoLD?Tk86xC0! zm*ytIl*Repxw_vfTEfm;oVI|iJcO_~IWlR#w@%w$!u6`+8lr)_nOYGCYNBbcEU1h< znK_@eLF*(N{bWjHp4dk~-bZj245pNokhM@w>A{PtU1Tr)E`$Re-JKtQxf*SFT_z|( zpKvMGXp(SHu9mLH>QG3N#J-p&Rcz)^(f;03Hc@-E1(aYWug4VEzyPv1;sTTAco~?U zbLkO&e<|y+oF~b=Dxv)RKs=x2W%i|bb&gQTOD}|B^r7}69(Mr=K$DFH>Rd@DW8CDl zh%&uRG__E?T;yXqR(*0i>n>2>K>sG(Ni>Q=8Y1M>FpGwiHAlie&=D9Hk;ue3v|;YO zc%{4i=AbO==(KcrG~;KAjFbi^+t+!Z<0*L;Rdw>{@~TW!$vA~&aNDN83jH;?zS$aO zBG`f%k%m#1T1EooG~U`j?+wpyI_&+1NzK>J#CR{$^4koHsd?weZ44aDv;x@#?@eki zcie}@9GD5~wpmkT2jyczhau`4E=oKM61y)M<0_Ytz7PE61cujZye$c_)N0ih+CIV& znh%FRW!&`f_e@KwY>F<<<=G7H-y*=yY*$xKeCr8{u6kH9yeyQrHcc-B!RjJ6v!X5| zZ{-%sojf}>yXrqt6n3ar#94m>hfwtH=jw)vs)V&`b0kVGPJJzeSln{KXq-Qv;N((0 zOvaT0vxQTOcN9#uhwnic!`-lUMP$3P*{F5>QitiT^+vu#cAvEf&2)ltFoU%IN|YM4 zJ409y*6LfB&y3Fke)~6ec`0tZ5R5R9!HCg<st@H&cn&rqSEJd^3Y<_3_v*30DC-P= zoU6{*13~%?%c%(TYaw{u3Jukc5U{6H*sAQ8hDO6hC)sgmZYUXT3?{Y2vz!G(EGQW* zypPFkod~;;?%@t2#Qd=-x^-P;5YZ&Su*v^=0me8>A0qRt;>Q`Lw_mbPAFADBSDtDx zun5AAs#+!te-YckL2VfYVzqzHnsHIgWl5TqNuFKTdH{uW<j(|eE&;5{gL+2jSP0_S z@3SJ;M_zsOkBR}u#V5D@Go{>iz9>}Dr6@@7so_wDRSF-6a!DA+8yP<0KF3<*knp!& zB`}rd>>mEr2xnJ}CDqJhjDYhL)~;hifR$CDWmrK~s5`{gwAi*uy@h&0Y8rV<VB;cg zhTUD<ejSp=eaO7bKWIbsFiBVzfe+f9pG;eJvN?bsP5{k0Z%Ph)Cuc(HB}OE_Yh(?a zQHxK|^7>XpUx*QPmfp`vrA8Z$1sESQA{4b&3{Jx$=TCXe9lOJZ&cNHmEiZg!8bvI1 zibC1L#(gOQ>BGT2nf5EsnfRjYuo+#9ESTODhNYgzng0vLmtVIYy7s>IVIvaf^S+a7 zk5(rL?8kp0a+ZKdmBgPp$P&^&AszaEKAQetD$M^(LK=VK<*<HiTe|i1f+q=MlduG7 z1MqltN8?jVqm+RH2c%HqK|_g^PHQ;)z{e@Cru0h})z{ZFG%khClq#bd8<SHlML7)? zU6=lDsmHi4)Nf%#&0S|0k?lf!Sc1PAZ@pjLckW(IyKDpN#;In8HNFrB)T4WjN4aP2 z4>jLnvru)P54FBzV{Q+_ZoJ@m59|y>dB=y{+jd3fw9%m-lfIzy(8${6`R7o)fK+>z z?WjO_SLSA@XrO%zNok@=^$oTJ_7<hJKy^D|%LL!t*=uX>s=G7ykb9Txh<kr!D_JSo zCi(M_wy5{wZoVK^=`G}-J5~C3x7ZQ8BU$brJ3%zvJB0WH^SF?oOsbmqz3NqIK{$`M za3iwp2!pb;)&jFIv;_6yfHu?b>ZE-#gErsa!7MeY^k!La1hud3d2F<xKDXYoY)k{g z(z?d>3P9jE?_awL_7-$_OAhVRXT!;|KicYXS_cEy0cAW$Z=yC&)>PNdc3-3-F&hhl zz`&{oUs{BnDUVn)F|S?n>ChrDc}7OPVt^xf1#g-UK~Mm9^p|N|JbCXi0plm*Xqz;o z|B(AUhtreIa7l7gBm?bAd%;-jw%7qwoCpnn8-hrVmqs+RV9tVevPp7e^Ad{oJ(iB1 ze@UUX6Xw2AjfX0SJgQFQ9)5tQs<rrXN=6J(`4d_C{;72kLD6-@NXEWrswmq<-E&YI zGR^>8fM057g{}vTGmWTb+gdVS<Ho1Eq~68=6B(cnGj*&}Vomm<z%YNmPqNOql%)Ph zJWtgNB9~ciH*NJZbRw=qP1UqH?`=}=><<f#B*|KH6CawV&(4cZxP?WZmIHunIVZR^ zol&)>*O`iCojA6X+pwt6Wkq19Ojhr=jtUfw4nMy24^ODk76QUhs^||RXZ}OFpF^%a zAVIEuG)O`I6{KR+QM~8W!N*+cifB{z!m_1&3$sP!q1X}f3}Vch1iw^?qSJ{@q@`rX zfTgd(B_vWwLeS{_%*aq&_VNoiUT+c<-W=PwX7ab$Eeu2$PE>kUgP7Zl<T&1k=pO|N zc5-820u&}_QgynmZ`DC=&-^`wixRl97pR=SCk3n!c@ScSWqm|*N^!k5^jpQj_E59x zkJ1A5_&`r9@RQ7a!Xkv`sHOaP(}Khvg~X!)ZAz9FhCn6~KZ?B8QuBU5hQ=x&tojDs z!cMhjNW)#_LBixh`qYWNVpxK$!VJAR)*!2d_khB1N>BWn(i754N3P<a$W-hoM|8aE zA#x^is>;pZO=rpIhW#w*8BFuVB8)>rCiSI#c(=r0BU&03%#8NE&YFML%K8Xsi*#fr zq648LoMGYF0FeW@mRYPL1qCW91g_`8{ey&dgOCODW}8s*EzxHI{n++Rsms-rBoXJ8 z=mLH*ho+HNp|qB#4)U=l+LPVgRFU5e>XoNX@**0}?P7H@&XGm1DMshZB0C7hQHGZh z3x!c0mE|iYmi1ALDbeNlsl2$x6Mx2x=JO*%4)B*ZM}K{th?MR9t_>AF79@sjWjDnc z@UIjm#bM6xA~!Lx+Ng_HuskwV2spdhN#OrqguPR6rcv89*d5ze$F^<Tw%xJOv2ELS z^2D}n+jcT}zi+0dYO3CU?vwj$A6>O;?R72WI(>-FMq;_cfIHb1UgTv-^j8_k2&siI zq$dN<tELjFD%ubtP-1#h;(bVCOqXu-IC`GplZ^gS`qPZzLiwXN%>$q7s4I2`Q*oNv z8N!|Yr6_|du($e8b93&eG1`5!!+vF5PFC_LDkBw)hXPvoAr?`R^m7F919Q19Uc~>c zB9FkmXQo$7EOI?^5gv!JQDitWWS_0^-%-rv!OeR>ef1HDuXAp(F8<%dK*vY>na60j z0B~3LZpQ%1xDD*X75t$Nr0<oJv$~mZTnQCV*-<;ed<1OJ@F5dqM7h0FJ*xr3M0P(5 zqB@06S%*8!1)CpbW(+0?xUvzHz+64J&HV4F*)&yDb)C*~3i-C``m&=!FyGB^QQuF< zDO3vxnp?BG!@`_dEyn!#UF-3bhA@q&uj2Bd;NV4PnZ@6}kCbzn7vajUFc0jD(c9%N zaLjY+oq*=@`n)`cpnop4U?mL+?$~=SfwnFNV#+4Wl4fZFVC|}^Z@?&2OwH8J0Frgv zG)$xJvj-O_dyj#9XoR}6Ui_fW+I)Z7wk}8=)wZ=HRUTFBIvCzYspQ+Kg|9K2@|rTO zC1rQR!#4%GX`(3ssP1$m1szO$Ie#PAe#pqtSrv!9a51Y{12*+=>!yS`dNI}v!VGP= zL^|;HXxld6%N(dXAh^4+FmJ@jvmLN#7s)%p<V=fmo1t9mShcIQMQ4`t3@l2u#Ym4x z6=Vc*?9p$6pyzFhiL4d#w30zszQLY^^j`sdP2s~7QMN|=nB)E3lXqfVCRh@1-gDC7 zu7OVLrQs*DGXmu&z7B;B9Xxf2#or+7;RDiPuw}W;-x-fYWq(MVFN0BIUM(Tv3a7Fn z8Ll~eqHPaCfqAG{AGDok%NpUZmh$oVHC<SJ`F=kX%8?&S{80&vJNX9lO6pRTEp9<J zzsxt2wOEA<RlJ51FFNFkRRthd<AuDT_+tvgYDXwR%DNIC<U#`O%_4BbXtOlUMd>M6 zK1mCO2#$U>O+sfP9=X<ZiE|)~9v%eux<HauY<?5_5Unvzh?$MVJbYZ|if(ren<;{m zYSld)uPHl~^)~V~!v~LC41)<t{7=kkY$($URpQTX=BFHi{67z<Y>SUQKxFJZCPzT> zDk$WHG(MZ3M!Q`pi0Cvm)p`)OpUucKPVrUWg_AXIW0^bD-E<Qv*ZZqhVdKU_XR5#v zt`8yhURnauqL63MCOc<PdPaSndC!m`YeAq*rkH*#CJ%~VBZy=>#lV0bt9Ya<HN&CM zz(Fw?eK$5V*n||rduVJN>O_-11iDn#<Vuhhn5WACeqE=!lYCu7Na*9y&Im{}FaJ>r zSnaaW=vzIbYE~QUu(ik#D^5GIp6pI531%B6B+hn}2C!F0os(TIRmuol{A<ZUaY~zq zLKCP4&*<_Q4UU-DC!=A_Ew$Wj@}nUrNir=J<V$C#`Y6!R!I<j~eT}$2YQVpgvUrx$ z=^ubkbHDIt=$vK-+l%+Niz=~4trc~y6*UlB<)JHT?47f8CEEI;NBKe+&qLv#4*8I6 z;yzeD0P%R&R6A754%N13(PkxJ-5&h29o+L4<Z2+H6?=OA%w&VAc$b#}_c;QH8(;D! zmwZ@g&zPH9wwI`{r@#;y4;g*O-ku;EC1sbwo+KM>c^9(|cRC#VCUYg=c(B4vpd%Q4 z@ZC+~qJKO-QjHk2MzY~HT{(1_gl;PqZAYdI>aWD2o7UYvZW-LQ<fEG$C+f8nDQ_(2 zO`a1PZ~WBou;P!!JY@&@6v~UzX4q`b){A!2pVuM=VJ=J1VW?M=ocP@^P#-^l*mg)1 z3!IV7_d8U+kjGqrDk_-!6f1Q_7`Tuh0A&NABpp#SJ_{ESEZ^pYNH~xY4Htfo$?n8g zJjPxHk2(^ISfqx@Kw!MW|HmQ3rkEq5HFAn~js@i$t7nY86TYDfqMePb2HvqdG*D<m zPr1j?#@^?T$~HZvh~mleYW|8uKg1k3^2kcZ9}z~tlMx!hW{%+@FXcJ2*Jj$M*$(!D z)2?)8P|a*c$kP((x26n97sxd2<mdm$n*MziW4A#4`c;koe}cu>{|y#fIGNZu(gFYI zhQWWZ^{-z)RO0`9|6ND?UlI2I9;NJH;Ak#nU@K!_YhY&LK>Yu3--<d`{|Vkqu&y5k zG}ZlKRjpdIWkIwT@KOQ^qd>V=$dLc@#=MHlmSAma;-csqKTR1L`tY-A9N?;uM*uar z+Vnh{;$X^b-}d$50l&epfmf?j35hVxDz`$jZEv;hg+*u6*)Uvz6umACEB5|k9dSaE zPQGtr7RbTQBay?DED3>WDp8<JVxGnrt9pVAm>)IltzAoygh`GFn=#^*urRAi5#i?9 z6(;@gbTlz`V=keBl9toI5nWXj+v8vR8dAUaTH7t3MwJWnVc$2)Txh41Y|t(*q?=%l z(76D#Uhcy^c`fX|LeyUG(_S%HYe}X$Bn1XoH%1nND;C<TolC!)8|3WzA(2WmtJS52 zvza0Wg=qxNg^J*P+57$^ZSpBgp2&{fYahTwL4WQVlM?pZeSd>uE{$&7q_ph@wJkDb z(^h#kEb?A{9*!UfkImi}Tru<?@x9p=8<kaJMGZ}zwZ0oN<G}%<bg;amd_b4XHQTL4 zUXZ-rsu9xjq)}(yfLy*N-vj5w+Q)Ks+54aEbkS-hYZZIo$>XNLn&kzMJ&nDBP-qhb zn`YdDRK`fc!GhqAn<A)A)`gFk!nZhYe}iWvx{`An0%{Z2<o+`;DJ*nvb3e-Swx6;2 z?-TQ1mFNFEF;W&zKkI2516$+&C7>tOA>B|^n!n_nomHGmIHkybV<Du|1U4ZO_<_Zd zfDjsNN0zP-ClwN$!foQBJ%b{u4Jjxn{1zAlW!qx<*ScFuK2<txKQxPp`v)$%3)4CC zw(Zwgrq-gCctX!JPxmz_;EJbZiszW`INR~6(|M=FEE}BOAJ5qkR9Eqq3S4)HO4g?% zJ?PU-rvE&jCwJGDY^$e+<zpy}?KU~Mh2<k9*p>N1^{0=~r)2k8wj+d({g#(^=0<Gx zOQJsni+AqE4EB%J%U@V<7O%YlJv;G}SLJ@apz@Z?|KR19Kd`=z`B1)Uw?W7vZW8?| z`Ja+7Uqb!M{x2oLzF|+;WMAmp;cVL$FS`BkhBvjrM1r>p3|~fQ#2<xwsmKL4ifDeJ zDhY*gGDI3A?FlG~Sr}rPXdEM>j^t9cr&w(uaWtVgQ4XMSWDqT)um0o+!g-=uAhQ|> zI)U^t0RTm|C_u#SJo8zef?QMw*5h1hi=_8}ot|G_jvI=_f?k1Pp65SNU>2;xS$zT6 z(fqsv<QN0Pp;Iha^h->vA8oAoE%|Jza)H8y1J)#!pbuG8UY+1Y8denYr3O}%nuWh4 zvP!zJ{1BK>?+Uwrm0J&xKR1Q85rP9{0D+OH<317*BVBEwpV&sy?iqi-KR+?~$xALy z1-vNaCzX)sgc>?zprzrXs7+<vni{&*1E`Ux(E=L{Mh1$l^?|DqM6?~bEP`bORev1k zcKngaxIcql6U#+JceYiaW#mYz3;U2VEo>#k3l>lw=k|s=F-AFdL+RzrKSy^&42zmZ zwPc;cU2!9PR(F-ASrq7CAsAUWP%Ig#b#a4hdLaK6V4<McGrL5NvPk_J1}vb8Hoe|{ ze=!JgCUOi-gFwUG5lcPL?o4cGWjdqZnz#j}^lk4=CAN~8Q6=)Rzw4O=6--|nFhUT^ z#AgJhoY_%~!qw=O>svU`tZ!7n3i=?-5)dt5L<=s^qhmb^@@Dlj-dyy(aiSUkTcJbh zCXrcXEEvwt7lKPhdPs24-j=P+F6EfN84C`6w^7IsSGvs7Q$Wh07y22t#r@hxOTK&G z!VQ6CQbh)|pz~bR1(U#5aw8z_+%XNnWo#L9M$fS5ptRFqNU=Ld{+h5-*~oSbG%E%d zw9eVNUf@hpWh0p@J7`V9@MMJhp|L`8_Jkc3CBV>g7KBqU%jbb*NUgVUlqr=g7||IU zsuL@iMFs=3TU64^6@w(rDww0r%O#VvdpY=zf-{H~Mcw6BG84+-g+TFeD|$HQ4~4%} zEda7i=Ec!8%n?ba%o#@r^?T=BiDW0tDMw|@dL^KZvGj$dYr_Rw{4!ClmEyPdTXlpI zZ4AgxnXU?y8`Em1I9cVP<D$<m9i@oK7gfhd9)-FYhVj=lc@&)!vGF+vlCZCWyRp3= z?i63_=*#&p>cDiA{Rh7|b8KW_f`M5mD6!NHN*l#X?n9$eE9XHQQxj;SbxWWrdQMaM z$17H#&`X4r4_c!-2P6m{!iE;`werWEGzAwq7iXkpL-Xg{AN^9*%&Q@>75@Gd3Sw2b zY0@RZWLcI)&ol(2Q+Z7o!ql8@51IN<Gj#m^J7RoQq|{kzofRWD5jNQyj1`vzYSGZ& zM4FucPgcqzP4>qtTu@rNp!FxTUYW@FjRnm#x=RGsKP+KMRe4NPkTAB7lV#Q+i!grx zMbp2^Sw@m|m}vyLFR*2R^K3!--bquy(MeOHqP4a#-dd0tNu6dc;a;$0(J9VNJ9B|F zegfOL4c0(Pi^a<5u!2LYV^s4BR<kP_!<l+C6oW+<4CRKjIY4*oRUx3{-Hjkfn1BeW zL=DTY*e+BIqj@A)zY;xVKH3V#tX4K<#&AjokjSJtJUpPPCz^8Z1gaxpZf)cD)2qWm zZT0n+;oJ#Tr)nN6&)pqt^5|=x_$enx?43pMT{Dj-Q^3=(|J~h5kIJbA8Gy}r!s@z` zBX;X7c>Cy7B+E7vMY&lxKiQa#F!|5_`Pl=G%<9JM_dPTqogPryNV#EMl&1k&2|TI) z7k_SK9@Jk|+|r#sZsapUk}P##OusU_#E}FUHAR3$IFf(TvLaDL#G}wMa=IMc<_sl; z99fc>L;->cwQZgXY@f|CwNvb!f^6;rEz3uu<;)3t)AmXjD1iJst?{`5AMY7Jfdf0_ zPZg=mvWd?c=(m+Wmp?>M^&KvWjtUx%)ltbkc5MbJ0o2)9x?r}%<2d&^JUMp?2S{LZ z&brEv;@p&ZK5?ocZ*Q}HAlZ_*VD!!3u+5(gw8o=D=0)i@bb?++0mw=Ft$a&%HpFAc zZ&O!lS!BpQ&jVBPl+L?&h?j&6p8f+>xmy~rCq`(nhzV6tQ#jS$D%%UVNJ#)B(Qhn( zF*%MZ7NlFbUnA$>kkv4jXS5;R8@wOLdR3vQb7AO#aB}wFp?Mmj@kZoKaOB`FzG;u- zEq{Fm%p4O}<KQgW#6-iiPA;6;4gB0afxXd~OvjVuner^|(d?-?sR`35po74SxI+#3 z7pbSB%$8edP!UYpPcJ~{d)66AE|sGr!zJxsX#~tzc}JyxIr$PQN`f*XV=)L`!sWc+ zM_@{{Oj+(%9lfS@jF7?^e@__urbJRPnQS@f9&r*aQSO1&L(9GK=GTp%Re5$-x&6{p zMKyAF<lnJ6<fdYiKBlPro8DR+H3HGKFLl=#?(V2{D5BB2+5u$30!pYrBw(W5!FaCB zHQHe|K4{W6DVZCF9(HdyBH_;D<8Mq%sm0je@#JbIaY=7kXGiFIuc(dMajY(2xMz9? zl1o+D;F{+AlpH|?a(1=RSircf85|Bk2$?A4U#Nw<Je{qI2$C!EWT1PO@cAXbPtcD^ zC-3y4VJK-Y#(i1sxwZ@iZk0WQVT;y<HFMR(!7=)vn%s60R)h9BIPBYuz%BT+@Nyi! zMdlz1(1<p-6#VfS6JM>H#u>0A#Ft20X^<9qKaT7@Cym1Y0dfnUd)X8|mkJFHbz@`e z!a>bT3#%bA3>p~z&8yqkY|MEc3IYrZ!^hW8Z+069Rb3xMmb!0TB|)NR46#%nzOUoS z==173oKS~H<pst>rIr(owr;FeB{&RyAZsmox;=VeenWU0N0qt(%++Kl_3lvQ5SL|8 z8J@=Sq;0Ro9Jb`C(=nh4+DVOpnv+v`M*L45HKrs*Lji@3ln`Uy${(VuO_bU+NNXGU z5~RbPxK&s_w1U@6%_bIl;~-L`anW9wp0&Yd?_I>Ew)aK_6bqZQ2);r7uUL511R|Vl zDV~DYn8yI81yEO$eEN$f0pKLav~nllQ1Ta2OGRyZ4m!i(e)4o?E&K+k$C#Hl10Sj* z{hyQ@r4|f33fchnEZu0T%F$Qn5mB?AGWa!c3!*!)%fKqoJG>Q=5iYP!h|#})4pg7` zlWGwG!&gf#{RG!HBh!BeUIR9!Hb)rKz}p^`my^y+O8^{YwzlONDQ5s=9rt0|gLl*z zYwRnvBBaTJ=G+~H;OOPolB&(mq*_M`^F{9sU3d={$QE>imxPSg&Cp#s-?2*~jJ9h< z+vlnE4(6WAHYzmQdwb7jF=zDV+<6^!6RO!}qCO|Hgz6N~&cIVzQtxP;8OPM8)CXme z8RWDp%eew&0eCY&h6K8m|J9_EYr<8$mF&pA-~7aHmJ~A-%NPiy#?jg@Wk*Cm?+#|i z*XQ5(@9w|9r?^)??&}(oszziS>(qa_w{Gt$a7Uv(+;H(seU2Oto}WH7=c;9rc{(MF zHN$U5Z51>$HwfvF3T=Y~46l+@fPN0_=%T1x3i`U*LxZ_x(qN2Kc_Q$E4C_B5Ts7&N zOFAIMoi8A)O74Yvk&qI8x(NqW{#ED9pPxsBJr3DnFTfREEeRgkcZxxX)ufM4327E; zDvfs$Q0E3_?5oY7caTL4_J)^){HpB47^D<?ch(B4m`PeU!%pYX2&(3}k-9PStk)Yf z#GBfTbZi}62QuL@tv$Iwi@ZH{b9ge+=e()wGoanAWm?Byd^XfhA`_G5u|glZ?gfE_ zUT!siuRG_FjoIq6pF)!+><G87>^*~Kp^c$35YPY+$+%Y&7a*+pkNVTfAuDc)jwDV9 zjwuNiLjee7#6_?P%*@af<B%9-W|AxfDc2#=vNgm_Bu8KbrcnfuI?*Q9!dBsl1E;Ks zoMcV&n3M#Mi|JN79@NKC^vW^yrd;;U7h8{Bt0aGeE7xPW84pSerik}hC%6kRLTU_t z+Ibi|zqpJH2%yJIW(r#$tx4WN-B+$mP)sx!&R^O`to;0$=xA6s`v_jMKcwr@QaD&0 zW%v#w$}H;A$P5!c+z(t6_;Nl#59l5a28^6wti~jU%*o_RU>GbVFB6TC^FQ7FspS&n zw?z9ArIF%yN0W~S3Yci~@}mM9m?Xr9NV&+!@Y3xelWd5kr-=zLQ@?-&((O5DwxkA3 zwD%@hk&cbyQzIpP4c;_qPy|j95Zz_Zo9@Ux6;uxGop!MfM;{N|H##gqvjydzXfxOS zMUG^*{O>>D+5&~n++TejkZvjcr`vFYzNnGMUn!`AWZkWBc0nx=cUJ-iy&B}P4xpv# z!AR_M$PGs*49R0Ru#(jwkY5Q*RUIERL7QgMDi;0@%HVm!zYNtPx+p+C|C1}C%OA_Z zJswf9Y!1KC$($iBH?FGfmUZ(F^QfZ(+aFL|qFOU~&uhbOF0ca9Gs-m3=(9Q<nb5>W z!-EP_QfUR1DQ-y47!p$)$|z89WKPEVe1+4?e7v3=et>)v7oZ?yDTw)u{p5N#c$iJL zV6Y*1<3}@-URU)RI!>PQ@;~h(lYxhtjrw*LLzL}Dc-T>jLMM7X;l%4?h%%$$*8`b> zhn=WH`m{$4w?_uk=K<Sgg(>!=Pi*cL`w`IdgzXO47NOJo>kf%~fRjAXiq3l8%n!3C z%tqx2VMu-Vv2#W?5aaF_eQm%UX)>Ug%!x}U4;5&qhnCGLD~mVSH#h#8FT_%oY)T~n zWsnNjr`2N9(hTF6V@W0341Jv=rH*~Fd*?=zq}$WB;6szR-r+vg(Z=`wH#kSuD*p!a z`&5fMu1hS620pk7-qL2jEi0099fi7SvWHO%70WsTp&k^WnMNdmCi1XZ3b9TnI@Ja@ z-KIr9=+d^bk!Pf2hDY7T6AgV;w|B4^xOLzOmA1h<ipm(3${4*m9@?&H1K8@Iw^fuE z*XppLRyO<J`61;7x!OLdJBMwunto>oSj&i&eMJXk%Q(D2z=l89L1(Ly&yQ7u%`WBx zl66#1zrhPc>!Qc|$=bT%c<;9-L-RV>9>F^`w{=d8*u~<C0ozUMry{q7UQEe_R;%|f zuFLh?#!vgk8=u<oE_Ba}_nXMiUr%e>eGO0Wx0#>QZoNJTbZhXtB=0FNNuOLDV+!~6 zpX9m<nJYC;{Z^8C9n~<szl%`*k|W<*neh4)WCpM${n}Erylr*>-cqpbYae4ha>wXa zbJ^iJg!~X#4SP;1x%I2Z_EpyH%Smjx&Aa3BD)jP?NfKf&#Tn95#tczr<5l6>ud(Fw zs(u>YUZ{H!q!~^*<Mt|2-Th;U`&9;Z8|8u7rLw%s<qX`Vc0B}t*3X{L8~$ez-Cp|h z-*ssYVwqlSAs&IoXB^6;OuDKhoDBg-6QzU2@3AFIaxpDYcg;wsrlf-<Ri!Q$8dURT z1v48S=h-WgnC3KqMT~;$rT1ALZejMC+QFhvuI?J**`<70Ou@f5PEI90F*-^I>HM!~ zla1iiXhpeUORSyNR4|UEIsM@%=7GAnV9u*NgXk(Jz`g|5)rtfW&h)JKu$A)O3r!Ly zZ@xnGv_<1S_8nLBEJjJfQ22WeGg<+MTD?7qS!P6oC2I8$7CU=OUn`i^?m?wys8t=D zMkX{`&Xfl7@%~2Gz5NpPfV0>B*q*j|WcMcs%aT^~;V;{ssF5S_?2$BYCI{=5TM=iT zX*>G|xZM^u$G`6N%kdYu5)bT9`#f6wlr2sxKcdYc=gI_+J@i&kjb^Pv*%uPqps8CE zgQ=s?dW2SvY-*6#v08S2?&vhX;saS6lCZ4~<G(`n&l>q=+hm&-1hs!+m$V=*z*ohJ zYc4_xQ%_-2=47yjQLSN#PR5hOcE%Ng?P!o*9FlM!Fl>jxL~lTN{JC0>RbB3M_GPaQ zspRHATO&L{$7}&HErqb;3#vrRjpXBb4oxT?4NXFoy${60x@sGf@whmCS@!TT98JSF zq*tg^1-Ql*8MSGDKfP*VwqHg5LSG?o|88wTUB^%Be8+5<yx{o<-d67F=oNM82H~=C zq#hLV3RlIi-2pBb{q70=&}zaJi!FACK~&esJEfVklSKgD03Fj;us2Gi{((HDbekBS zm1y*J2nas>4&~*}-Q$bCT|1@xQW~76)SRf(;ilp3-K+ECYIp1k`Cd3u2zGCnY-2Tc zrbkEOYkdb6Eh7C61VZ&x<`xp0)f?O@z{uNM{Uh&&ffHzE_f60FXK)AEbx1SIsN<YN zHuRTxO9PcQ?kkyXsTKG9@C>9ot}MOQPd!-`%`koN{7#`ssay5qx0zo*xp-<;oe@X= z4#wEJ^8f>{WMhl+w0iL|>Q~_ChI=;q1t86qN<g;#Ui#`qkZBsa?=Klgzv<-8ZNFXG zRlZBq4Vqvk-C#+Z_cz#oC_qGwpw{vqYf8*dx!`}N07-sGWm^*`Ix~kKn$OAH#MH^g zh|bK(hVFkUKyed;|C{_P(t!3-K1|{xOFP(-w#A1D6mw&jA2C9LAooY&hYUj!|0M$i zs@x%M8_$rC#vY?zsoB(Qc-h_z<-A_Mrl<ozT^iVNtkAKpa%qXVeD7Re?mFxG18Dlb z_jWb4B}LY6@40T@KF_?){C4*`#@2n^oS#OX)%;4$u`OvRqU(@7lf&E;rIWfhvFIY4 zr1E*A?9?QzAYoZ9!>vi0T|S|MeWT)2nbAn-qTT-c!tg4S&_xo^&3d{{>MaJ?W;yk| z`|Qf`;paoS`y+90WZ^?NDOdEG_GfZ>k)mrGZnKPYyvlP#&R57+OSC&zFa3ck!N+Fi zuk;&N!q=AEH~+W!9N+6{%L9P<`=Z1*&zGjex4@UK<U9A9y5KwioAuOJ+M_?_Dx?0c z8|+gS&I6h&Roavf-JU^p<@gwhmSvT^^R9>p3W_g7`)D}YA%TXx2bFZ1-o1D<Nx!#2 z8ZMQ4{eXj1ZS+oimt}hT-rcWKO{zgYU1W|r*)(hvJq;&uQ%XkH^ln{R*Y*x7!AiQC zrETiKBSDCiEp-DT%dKd%LO7Z<K`ll1_O0UXm?dF3)vIna1!BC3RF87ox!$I8G$qZe zZ4}$MT!Y=3**zhL?H-j>kHW*2p>6P>inIl5!}LZ)`l}E*iZd)b`$@HUEIQ)?v7O?l zO((;+n4`UG9?u~a$b-jn_$>pV7$#o%hsz5%dUIU)Y=aR;B9igeW#VzjXl43+7Ppy5 zo%Q_^(JW)_ln>?fauVkhj`@4<Cz6ms2f%<7QOL?vRWqJqQ4XVIcJ{opQ+2C*levl* z#=$i&6p|_2;!R%O7#ebUg2#mzSI2cK1uGmcEyZOhTVBRzFzlfOEURZpzOj&lWf@+W znP;333Lo_MB|vzs%lG^1e!eOE0QFP0eB3CRU*}V~|A5uv;>eg)ra9Wr2J4COVNDww zb$RjcGPNdm^GFoSxFV10`XDK=3nNpY0Tn>e#jSQ8&js<pNaNPE*2LDf)@ne)di9(= zK<jOP29&#<NJv%=24Fk@DIMQQR8345MXZ&Cp4XuD8hbJaCq+*KEWkax?L^MQjv>J! zVn`%QjVc$(I$9rJp~3O8D2@U4SE!n?RVR}^-o8)q(p7p<S9AwSB8v4gdaXbfi29e} zYAsK>J($AW<;$GJD>dB(O?|300MOn*R@Qp)%cKU`SutPQqjfnMjz6$WhR525p*6rl zwNIi5nZYJNmK@$%^Q;*CMlf0pPldA*A`xt@P-?1IHSVQ-?^JlDjgqjL26;v`ER5QN zkH>2E^MN<wD%VxhiEPtkcGD@PHw*2$P)_}U7BIY{gLZvnm3nme{^RRIQt8o(!#I!v zC92h)*|TaJ-?Q}ywb&FGB_9Q7n_9vg)yo^nt6~RmZZ3d}U6`*)fSp?giNM=c*;JZP zmfIvUJdl_FZFZyM0r^Mc!*$(oviX1)ag}rw%KRLLc8yBID>Dqc_4oF77hJW`?V}g4 zw9fv5@UCamXzo+ym{(M)=|bf;k)buj(#p7r>uLI8RE1g%>r1X(J0kr;B{~@t9LEeB zgq1)+zpP<dZ}VUXyR|(X7ud7L#x(E^R|Jt)LT><?nES|1>YzQIsQO~%HCR;^TnXW= zdM#ZxgypS=_O0a-IHG$mukrN3zxj6NR<5%Z2{Mc!GQ`G!QFCns_~^dYUh5T*U4h<y z7vdmX?<s>3wCG`vgbM1eG-Na~_dhsC8@HyjMh~rn6tYY#a%2;#!Y+NXMFq{FIWU4j z{c-9r7?k1&@f9$5buaYWhPUM28#`JwKH%HI;#3nz2W5Wx)U<^X|JwTZ)?eWQwk>Y6 zywK-f+eQ+r2BfZ3duU;=B1!@v$u96E9!#k%{2J*H|MaN`53ZQa7C7NhaTY#O&I4UG z_4WhH_CX$bxgvMWma9OFgJG(k<UQ@k5calHcZF=*+;~!VrNpQ|K;X8VBr+S#annpX zK2UGSA46xVoo0vpgB!D{c-a6yit63?1VFY>z-6wcwwnZG_&4oMSz<4lp(nZ(?|F_y z!`j9d|MuGSK6MhNP*9G*=`1wu{O6*Mws(rcPML#ZWZA8q$nwvhjUWVU-y73O?bl{M z{ZE(#KW-U+TQLq+WB;xjXR<$bSIV_m@zNAsdFXJc0Iv5Sb<>OYhmVN}BDmc`aV;+p zMc-Lwm4^X&mNW(Ag|hq}VNs<=nK%PV2vpf`EpRjTEb*TH`$C%jF3y(g3JpDYIX8jG zdIQcY$|)rmLXtZV_tS@5uTv3^(LMMZ+}2(eY?2mh7dc9F_zAE#LHJx->x!N#$o`a5 zrU#7(zL7tQ`X(}Q66n8{!z4nzSN39V#6%#q2zP#u0+MVa-DIDPpp4)2eXsP3Bc_x{ zWX9s#;WiHfm2Q~jz)k~^3%-E1SHYo@XdD-`iMJMtnni3ES%yANuc#A2j=Q1#wi0Cw zRyxZZ8_(0DN7KBS%b=n(s>#Gh=P<)Wi$p7FCyc4Eh(ix1<t=X)GB{jg7g(Qe=%srb z>#O;1IZehonTl4T%f_sc(uSThjU&#QbF5aS2bt6~ihh7Zd_kRE2u4_0d2D2>hM6?& zYOL~tPRGyQCd(^ZYxcF><-y4b$NJj#9Ar5f=xT<06r$?3vED;Pry?aI+ctYCou`!A zfYg_L_g@t)MokTsoA$f%Bvk9ZyOoTwSmAheuM;!i+)kSQyqfFJ<R7OA>gi~-$604@ zQV6UPZke+Zx_di134tt*&@x*<xhAr)tG~l*&_w|38)2Anxs5q{(I4E)c~Q9#8a!hg ztMxe#JE`fVt0x_<-RAkgIO|{p7`ckJ++Tf1cf>%|^Ae<&KCOuc&rg=q>T0e#Uag*b zdg~VlzqYvb*}L`o1j+@Bf2m2ZXSu+XkPz#h)8(qVwnWtS;iI*2Ts9I(Ea=gf`Sd#v zT<VsnnRPgWa_<4@!eZs2ZS;+BIG+jBx^a4Mx=}5s6_D7H;om2JA2*1|YBO_Om5?@7 z9c!WyIl&HuG|U7RGx>M5aC-{qI2v&6?m?Q7XS=J=)^J^4gKO4(9>;eO`_-4I0mrzu zgjub6!;HaXZ<$bd&e)d#QE1CtGI(=154UG&DN06nTxijgnjUHk=@Cl2;vOG0(mYkt z*bSq!IzOGewk0MvCfXLP9}Y7?jqD?I{_B8We71d#SSIKaxr0*L_T0QieD=)Ar;0~U zd)q4ty9P4k=H~nN6oBEKBRLXsEq+3=H-kfoMWk115Gg4bWu%Oy$ssCg?mxkyY#O8R zYEhq^7w#=L8`(2qU!Iw(VGjJ8IghN&IMWpT=)|XNqTO5QO$DIGE9(e+Kl7*Lb-!^Z zG5%c0JS8s7g~GTkbc~_Autfotro>XyubU;YSo4kEC9tva0r9Q$&E8%(ufLq^1*I$- zU%B$Zi~oFd5JOGB>JrCe>QP`&UgZ=+C8Ru(K@+2#aoAkJTwoQ029D+?W;TB2!vW!F zK({1ysogLH-vxNUHgJWCLc9Xs4Oz6})KF6>C2vzYMV_ikr5q*z2*^amV!V7VS*2)F zMa09<Hs>s?S4u@r+O{+sV^f)j!87eFZ1=OAte6h`I%alQr=M+?$}B1LFnfejxtw&F z>NibiFKX<mfJf;sdkbEBM}fTp(6A`4Jt`=qKLv8eVG;EMhdI+kTbi*iyZ)SXQ+%&y z{sX?s@)snp16)u@zVW;&{MOs(ccHGR#9z#~u3=gm2~@%t4aP6Bu{AHmq~Sc$0B&hY zZBpM#474OYiia5E*T>!{V=X1~Oj=G!M^MRu7hrg*CFlsb8Sb=nAptTrp2vaCY~&1X zGOU9PEgX3>-gF+vc2Co!qmBt)^kZPWDU}50w5pdq`=dLZ<GUtp68zgcuYH_{+J^d< z?2)mfChNyh?mat!eXnZ#+di+oFaH5CC?vWuGCXSW4-B3wq#Th%sz%xQ@HuJC>f3`2 z%`7vi>;i!IU>fXWy};@wOrUJ69*%=QR&0A+lT{Ag%nFMDRnQ<vl?UN8y?u;0ICro` zaej+Aa-D#$V6Xt$>}!XBZ@BM?_byFdGKu3@ynx)l)v}*P4jNXl{(Ybk1xgBDih8_& z)RD;uFESD!($cbmT@wu}cA<*2sTnNDyP@EDCwtLxDQ^18No}^2>^x_YM1p%BvGZrt zfKL-0vy(f*H7?xG;L(R_Vhv-~8JI>145FZioZ$ZG8Eyb5dLQ{!t(Lv#W^kb|*QJ<8 zH(VG`SfLk;#ix?^iT{yyRc*wPh&qRiFBm(>vcp}HN{0k07*89Vl95K{6XDo_>Q72e z))1rxcgO??i_mzK^nPQRl2EHD=O?S&;@>>MHMWpyx0?j!hS|&KnEB-3AxO)#=y}!6 z=O`ts+{sHTz*3KjM~Co}j?T>hb$*5g>6)kC31WKCc_kG3Dz~=5xP2JQj%+vD;<#>4 zE&R(PP>TV6%8<-AiS}PTfqHc104zN8MU4mMSOn!1qN|*INPXHDRUkds>x{<1Tqei5 z{ZnhFY!}Dz+=HM3W~ui=;R(Up5&JclL>EuV{3mUR#!V%p%NzWKIH~~3jNvk+6anN$ z<PDcsSr5it?f7p1k7$J5<0i!O)vyYR-~0iPot@$oO*N%=0B7wD4A1%4H%24M_8QDl zdrY1+B2RQ1higHuZd8)h4sTb~iFU@RQyJXG7=PV@Hzk##I4W|?POX@Nr5BjXD>YOW z^3C0J-iUi7t%xN6$Dk`r)`Q!#fyxwhtk6up(0sZYzyCpR^zR%DYaCkm0h@-}#j?)I zp9lW+gaDVA;98H&C$O#R_Xs`G0J)j?i7W3b=9!wx$y{yBm23N6U_7<Xt8e2<96X<* zZRDHQdAtVh6NYi9(FiN2J1WK#_avB#$5!>2I5>ePK~c{x92fLu-1|bnRG+x^_3UnN z=9pi=>Ko^PVncmm4d5qXn1X@X@~lk2y8s+?-El0hqbIA6mo9jChit#+kOHL>c_CW4 z6Zv)#m~RC*Amr4Y{T4cOn=eGo8&UUxu*WSdTbTIR&~0LHejt4+(!ltiHcSQx-C6*` z(Aeirp+2?dZ#t2%3E5AOpqBGrH|Okdp~Ze%kw_(2_9UFcrBl%Se^9E>qwW<KDZHJp z=F+NsYw=#|R;4g*bDfn~L7(8q-0Uc8P9V#x#lpQ#4Ad&~HY|ZbLc{ECDV{K&G94O* zRUy6G$jHb^`kk`d9#HG@j0HwD*4lCl4g5u;71sTc;E((9{Q@=!;S@139y1*)jx${k zEaF+-VZ|4OTm4VQnXyORC_4RzH!8$&YkD8_gv#EXQ@^n3ciH0ByMi{JY%p%Q#BsKR z1iHb&Uw`B5h1mW3<M%eKEz7sd@t~wD%D1ok*5(k=6py(&+L1Byp6>vCYS9v#-QgB4 z;29<PL1GJFGo3c~3UEoB@=m~8roAV`kv+~LcZz*pjE{{*u(yH@a&yn(#@KXHKNy|q z=Er&=natDMHTbmBl<vN5y^6nBx0MhTeGq1JhxL-Me~Z`#{troE;Aar2_>=o3Nc?{y zDJcHWB!!rPjfupMT<(8WN}XzuPRfgzU%HH=<1lo@V1BvD()x@{X}^GN)dh%&5eS)x z<A14WKAPOc!%Q4aK!>hbRxJIPMpU(mY@3>jnwkk&e&;nsRH<4$FJ4t_K6`WUd|r9e z(It$I0}UHZje5Jjrd<0xe}8)(uYTit0`;uE#K2eBMWu9Fb*hJ{MI5o@x5+XuM;tX7 zK04>S2AJDE)U`=Wbn3$VecF@m=pEjr;q5?ddAlL)Xp3(C`@9R+AvDoBAHrp?hKsUs zHMrR-HrUC#u%Ax3LDu#Beq+lmAM_mB>*?)=aIJLfL*PCG&c}<N4j+C*FzaOwhc^@= za{mv*XF#k?O!!(J6%Q2+PHne<mpeGa3!}F*oQN{I+)dkWDQy(vwK-9j90L?}7)9AR zT@>KzJ0-uvaA+n%ZIn9O+mU_B783cJDJv8%{nR|(A;>%=n>A2WU)l!tkug(Q9(}#) zda;0lhY917;eK=?R~^|B>Z8uuhklK%!%S{2l9b6aDl%>IItGe}r#O2>Xf)kBID6a_ zaK{yyXG|y(;P{phq%FDKt&;wX7O7m$l_OnS(}>)fEo(-zBQsB6+cbD0IDda??c*68 z|EX-1ty(3XSe|5+kXG0xD<I}}$7;5=VH|aYTUbm(CBHBbk7;yn2bdmtKJ%uKFlNmw zaXEP{#8^+jb0pVDHK;HO5$ed$LrJ{^GCMPto;>2;u#o6>x;l6Q>nB6IradubAmWDY zB+fo425gFF+BCKobiWL;P#Ba41Y4Lqm+hLi+!26qnt*Bu`e9m$yR(|jC7W2RNEhep za4@A!o>0)zrlzVIugF%((B4@Yg;{d~Jd3h1G?Qe{%N8_dy*+xF-@rqdf=aWcM5`QB zLa!3HS<X)gd<cV|G)<-$O_w{ayjaZ+CJPl}pUMxr_B>>P4ug8u_yt{((Z<>`t?8<h z@OZKqRB+5j_Z6qzcB$dn8k{VHAQQ4{xnW2ox{y6YE5%2pXuhhj+8McR+ML?akL24H zDdzG{VNsG!vGUmR6k8^8x$0D>X%c4`wn>~0qc!BMlso`6dhjcLXzE2fA2$-&X|?WS zTXPnm6>@W1#!ghInJgrLGC`%D^2Q^#XtMIEp5+AGDY8fz2}G+!BeG6G`SLv6Kl3;C zl}mQj=2QLSESWJZShNV8&aLwO$c6?ynk<#5j-4yjyU2#Nz-!E2NI7#i7TjffOjx`T zCCc1YyN+(b8QZaw>7YzC$9usXiI;Q>%6qGtUR|Ptj!i2SyU;KB;dB-+j9vM=6))-G zHC8WR*?B!|R&i>#G_c!4_fTlbc;CUh#^u{1Oiuycy@|osJMENRCA*9d^gbVqxgRdV zKPhP*${+mw@V7*u5hXQ(SU!=*pfr55H%fK$IR^6m(?5<KJ@c0$447Rt|57~I?xBPU z24A~Jm9Jb{`47?G${(tO*UTSy>!{ROB2#f?x1Y|Bm#j$C{xS^`s$lQ+$P#Ce+0>*a zMf(5Txjfm1JUz75n`0N2+&Uui<^VKXO_z6<o4D(m>uij$Ks@j9riP)QH2gJwhBd!E zV8v^Gqt}?UbB-#pZs!<_B;j#XyNYbhVwadHkeDdD(wC!xsPh#=zqe+i_+8~l1g|@t z)%e$HY1p@Wdc6RDsVfFoIvU!B=OFnS`k#db64=%}X>=lyvSVRP5eHV7W8b^5+Z?o| z07ltEc{ygX*q|acY+1RhKsCm3urAk>5i+vlB}>v*oxn_qhVKOFn!S4mb5JL!B<osj zu{!D?b)#&oFE=~vvBM(UAVS3e+2fdLKA__zylJB%|HAV$bZI{p4NQmkz8)kb!>qSL zZOL*DMpH(xg-s95%vMnAutzYr*-?2qb+poC9<Nvj+f;}ZS0i73vlOBSQjV9{>J0A} z>?mKCF{cz5IXtu&n^Gi8d!*YP(q@`>oy2zBsl?)<F}R7gIs%M1jti@0zWjOWsHQwf zIB+WdCw%S?R`4K+BZ->~H72+OT)k(cxwP(t;WMy@puC{}{5}!tw;}gX{VGpC2k12F zaDhz^V4ju9t2N;t3CAa}ufO3bUEnI6CT+>GO?JncD4}O6l9lpD#`1XOQ~$by2M06b zzS{3n!7MlaS~apQgpcGfv%rt)reX9IJzmO#6gjBZLni<2SN+QY(dG>HwPAPo?h>(R z{xBTTRfsVn8loHF<fvT2dM}Wq7|BDp=90YlOF_y7BRI6YWTtz2&UL2RG%Cb#6i$0Y zd{3Z!LQf#$v<pbLL!<#T?13sA=<z6}fY1d`(cEYujfr!;Mm%PO@Emz8NE66B>O*q; z-OMN`g9X3&lO7AF9p*JVVY!>bxE@2eTE_8U*h)(z`oG3;W<X+SwfL|>5Y*E8lOSjW zwP-+EE<im~hjmF@2sHZk*ejpfh(3Z$zatjZq<3r}i6GPk92NSsB-|<>uBH39B5tNg zZybpSobUJr;Ra%X84mbiI1q$bg=dkeRmE$yY-(Fps9D8pX@Jfce=h=wS9Xn%A6-x% z+Ofc9gVVuI7mX{OIw1;qG3Z1&uI&7>j<v`e$^NHF>S=Y^Z$rLUJ09#@GifltP)qDi zvO^6fQdmjWs_MVaZ)XFtEX#(C>6sCZVeRmXmE%_i&OaHr9@3EBVnVQXo6_ZVjkA^* zEh^qCODcg4@(t-K+3b4}?qeG6V~lAI*+i{~xy5Vz2QIUVl%{;?r=j^rL+nXh7XTPp zUK~F$aawitg!BCQ;6P(ksz+#9N^0}`G~AV!+3YMBuC@TU+DtF1(;e%{!6oZj1A^!) z>K$s_@D9hpuhPVX6iKpl5`8X(ff^bq4Gl@7zCoQ3hLpF%f>MoJgkd#F4)KzR7rHU~ zV}%99A+~TOLz*}v>M@MLjsSD6aHXo(R|g+Io^3$@8lKoEiCAsvRii@k=CC|ZIMYgn zCuW8MHE(z@B4o#&#R6W)cYMD&w?7FuW^^X@pkm#hm<_qu-w<DD&^u7J8e|0CFysMN zz=dw1o@-H7adGdD$gU`hh3;gov%3$iav47fYQDc+Z6$Q}#C68DXsag$O!RmAW;$dj zbw|t8+UhT<Ot`Mco=l?epcBy|b)^o+O5{m+Ln^bt;A(Hibm#XWDB1sUnqer~#Tt-? z>?$x1SK1ET<6{lI*wnqC&KIbQTEge&+q!S)qE(DjkHL>B;dbvnF}gn?-mAcLe8N;$ z#0{{(MGRP8?+b$Ep{7er^dB;ofhswd&Io2vR=>~*T5G+^VP=&uiK?dwrM`(n8Z5UV zCG&Szbwne8gpP@u3z|HS=63pVvPnWiAGFSm=1YPN1>F^b(VMSZrnmzyK;S!Gcfgk) z<8vRvb9t%9+S2+f8)0vd>?WzypreI|_Z+B`(?tbo>9jOsduk_k7LB#EQI^EIC{)v` zbZx3|1XK!HrirAK8YLAKZpmbM7UQ#!O?5X*bNkw8p|3P|AO^2M9o-d>=!1nzyW=Y9 zqUcL1dC9h?g#%LOO6Z$n>c+RfBXtRUS?F95*AF{RUe&Y)k=l`tEA;}qcXM92Dps|u zsah0{s@$-*Y@gwFbiTp=19ENWu{@)HoFLynW{>~AiTnStZ~Q+Xm-s(O_x}y;N>b91 z`;UD?sAcoA{;&XlCY;cJ4X9qVw?@^v3Kd&Raz%0eML)Sdk>qlzQ41;O6aI~@kl2tJ zEBjMnh)akCA*^owAUiY7@tVh#^M3z0<@#50?1PYh^&XlbBdN)T0^$G?{5X`T@|yNh zcstY($CeU(?`@Yq!Z0{gAI_h#P^OoLLFp~>;yF5u#7e8hh`-zFFq%vDm8JmG|4Hs* zI99LLwMn09ZnwH@eGJ!iJ_pFWC3jga(PVSHb7hUa>6$8@2eE*)CAw$J95ccwQs&Un zgD7IZ_6?m+J}yQrC}}2}NtJDw4(ZS6J#Lt6S2neEs}rv|)+gFp&ld)8tk*5AJ<?QY zFt=DX5=N8<;Rch%ZDhCoJ!6?KI}2WK%(CQOv&zx0R$#CqX|TAz+r*0(lI(g`^G>HU z;A(E~qj!;gw{8?(y{eW`dWUU4OSNs6Na9B9$|I(1vURvqwjHuqM(%voB_JxFHD{w* zV#?rx`&gpB17OkKRj`#2_=z!=ZVS>KvPkdO1)sO(8GsmJ4Y{Z85DW-m7{LIWf$QI> zTEd1@MvCT_1XEdGYM`cEOnrm^2OrLdP|~`6bnv}eU%N4i(vgZ!Pp81x5C7VALni}Z zoEfI>%cuT9G!ehqN1_cd2wzbV{3^q(l{?`IJ|<!ars`;3@sxYB$jd;Q?v$%67qGZu z>KKk~?YfTi3C?%P@1w2`^XAkH?+}E+d;5L2@o|9Y1^z9bg1Ebch?>qpo?7B&cz_Gr z*L|iYewcf~;qL&^jbBbI-i@EG7W)q$m{$M{6f+(aQ?(26-s$8mxd`qps=g)QpTd(f zy?NpxTyT_7Z2(_Memv?9u%hwed{gtk3?OuS0rC@x9ahnVy#I-<3&!&A%=q!3ko+Ih zy8dfM;{Pt8|3A*9|9$2iYPfr04?cc(HB~05VtW=0NMtHWMD8<9i2$*J;H*oacm=LV z*Z~DLHP(q3kIu&F=N93Bz7>!)7Rl#sP>5xaq6{AeC;y`9G`Bbvk+Seh)_urrB$>RP zypl||eii5I{`Sd<;bG#sKbrLXyY)VmG0XOKKZ5*ARRR_2Y1b3#X`cj?>DK%96&RFm zKLpArP>s8^HwN_sgiqy$>0={G?G_r{r_Am%9pgO-x`yh7MHgAgXMYIWZ9b?)c=|8T z3+@&gPq*tXJmc3%Uyks1j>s|>?Z@Cx&ncX*(v54!`4Hbtw)y9LfbZ@$UPp|P{|#UM zHTyiGG2s{fsE9jWVtl}>QkS4?JgP%n1}K>b0el&w45G82U{GP$lCr>=^E`9<6sKa` zNe02ZG^mw%vfv=|dX!Ik!43|N(hb-oDo8xImPK~R(L9jC3&^b?D-eyMIYZKjQ@p=u z#{gQMA}ct}t{f$@NE>-_=qal1zhrlFjw*fVc}cp^CASk4&PC`jS#)44RL+1Ylq!$3 zB}ftMfeF#Hbm30jVpwaIHS(of=%Ea4r{vfg4Vact$STGrij(}w4kM>#a~njcmWXM% zpyoN&pyqiF+B1|#IMoCfz=<~9op~BM9DrZE(6clGh!%>{c*a(NJy4|G<SdSYcs_{n zlA!cUd?1u1@X>7}6gjgbh%j$JQ&3mqmDRt10E-zSXfiK!HvQs~(Gb@|E!DGQa`qqI zR`Ial-ujgjv4`M9K{<yZu_eIBgE;ks!G+8Nm}N6;D_y?tBx>1d;K5BU0MBBU$fE_Z zf=Hfjn)*KCkbL0VM^HiIKIo0NleAI{V6}!^Ctuh;g%cBzBnDfDHp@#CZzz+hwuBSq zyzE5sd;v*f87WSfcv7>9v-IvR&^x?p)(qJ&Tx^6KNcaxXC5?1tP;Oq?J(Od~kk>93 zgK@cQ?mw8|Qvac}hU}p)7qMlA72K&-TpKBelxRNiM*@R^Cl;T2JX!Ikq7J0NL_Cf) zj9~ni_2C(Ey2!{ilo)Ww{5|7wnm5b2@Mt|LOmRX$ow?pNd4+mn)RKCZbSF+z;2w=c zvuaHp4GMf+_+y-S;%Z<%B5SYzEKqvAwQ&eUMsiX?T(F%uL=$5OtOLesAs%Z${LW%u zhEd+H^#H6@-*|fhHwoKm<bd0BSX>&d{iD0rVk#u&@uc`L`PO0%6!alYm;Ak(H@~{9 zz-0y<0roKU1s5bSMocKvnr`Qc?zl2j<6#wFJ<4X)$k@lmFjejG4OuJ}3wD>ljL=`& z<DP2+{3J@k#ifvN-WR>pBKVl5(+D`L^(M$ce%;y^LYb%sl*Y0S&gY#^9|=SKfv~KY zQuS)Z7&+8|{>FN-YJZ|n2azT5LFjp?u-IgK8d5!08c5r}PbC7=3_4q=N>hxXwd)Nh z;to3|O*mZgGvkajqkUXZGU9MqNygbh9{77ghozEf_G6msk^MGCR}=u|Y2@n4MLg+| zpplORyFv3}H=2}%D!0tp3ign+Dww&*l+`_pj3g>+V(%sZ@gg69dXdzLVj6Gm9QY~Y z6H^keaLTw-kfhq23JhkE6=#8j9)AqA#LJ#2`vsH8a}Z${^rO66p5&k63KamDT7y+` zwjvhm;Y}SrqfW(~*op7TUu8fv@0eoB8Krk5?^J5V9N9?%rMIM$r{v?Doe*<97mAVZ zf+!wg2iec@AeAr881IkjwM%N{DT%=;kh;qiP60c4iD0QAc#s$dTjg^sT9LwxXt$>n z?iy2a^Jd0xm6B|8$HoAOqKwmf%1yzRF{cbkz1($7eicB#mGUX=TdAb$JP+ljR0^_b zR8SiwZY~|8PoawHDK9{;2>e7Kt*dY@C9KL@zNlt~0QJvrt$ewn{s(#1@ydRgqMEsW zM%Yp(VLL38L0o3yc_K<4$(XVScAmVsga;IZGjd;)jE_d?>Cy+5H-O}{|4*S_w$iD) zho69O(chUvO78?+<x{Qv_w@(dw62P|=MxgRus9dJ6quj@|I_DF$|N6t`0@wFPk9tR z#Z%NbhQEsd@&Hr9;^!ueuxxXB-IKx`^9QABpW<EjBp=zDu?OfRABmc>2PzMp0zGs< zomRni=>u3N#k>~fXR=Sp>^k@1GuEd-5#L;n@*7hp(Y&7W8`Y;wQTKd14Cks{*&JV> zT({UX;!zBI3*~3Rmxy|+BcZzL>GngH<Zxg!-MlYG$;zb%%=)(HgLiPvIQ>eAzW~w6 z`5r}=@WS#m!--UbR{5NLb0vs}RuV+Y|3%n225Sx|TDJSxwr%@6Hu~7MZQHhO+qP}n zeQay`&U-aK?^LDoKUJxuva|PE4il_zxAf{W`BV}WN#p<}N?nJFgsGGStpv>!6y<yI zESnqUV#)!^(ulnA2ykVpI4ETaWVX8qJMmaB;U*N$;_{3m+N5Ih3KnfDg<{MFDfNuv zKf?-y<Sqb1sT7k)aX0Z{f)EJQL{&2CxXlha7GWJ_Zm5A_6D&l5e<73x<4H}aMiAie zNXaTs-}gSUDC!geO**R(Atgr*Yhd({WJYzQ3Z{jYhNu)X%IKb#CyQmnC30v}H;1}6 zCxg*8TfP3c(?FgFW9~2<jW=w~!0_nGt73YB5{G({aMhY5XyOdEnvObG7>(V_`xXK$ zer~5||1@brQ-znaoGO=vk5@ZQoB6^Rq&iwnn=N72Xy{NRS+0v0jd|@Z;KbSj{B*gH z46J~$utXhwG}chDyEmP|mF0ycUYyN6@sFcAV712mK$IkHCkxPyX=^;pK}riV1QUM+ z+xa{bj#LvZ@4w~zt+gQKW_sV^y7Zx$iREf-R%2_s+uYvM9R5`b2=#^1+!#pb?JB1s zUxo~ek58VoCyt-6`$CS71Yz`b{5mP24RUmpWYh@D{z=xVp_Pul!nGctP#oH3Gt^y? z&4Q5SucI}(JY}Vl-NPGy0|yuN=GVG=O{1p9&nDNrHH~L@aX&<2D6+b<U0bWK%wONN zTd8rLwuUu5?gGT@X^bhP)tQ2<s;_RWuQwR^)wRhS;~}ad6YB>)1~6h4*^Wrj)EH#- z7%iH#m2I^ZTQ{Cz4#;I*y#%)t!>}F%`!g2s82t5|`cyPlZE~2b^MesvhugQMa-3ZI z6fsT=qs`Y6qtGY2GzP@$dw|7;;PK2Oz(y8I?6XiWnfglMj__O<q0S18>=e=M8Ay<U zsSi3AdV>6g<lo*wZf3V`x=|xrPrF<umNwaBYqL}EcTRLV5kXc|-&sVwnyfo*()XSC zTRm~S3uuEX-D{pClbpPrud6Tb4s^^y-mg_xd2toPsKb7IRU^NGyWp@Ezi&sb*SEF` z9p}%)Tp#rr8FpL)e`Q$w2!{S^A1`y4++$@LgNy%F#ME2l?Ms39*L?otk6HqfWI{sJ zBQX|q2vNcCD2XX_%|D+>M!a)YsRPA6A&*Dba+`P;tMC-n=Df8zNUgX*=9o>}IHj{B zi@{^$ngvQdt8G=&5HB*%%CNU~lA^NU7e{PFq6Fkn#5G#T<BaxGwAZi;X+e2qsp4s* z4hcm<?l{iXb9TARp5&q1piGRZkSTpyqOn+|s+^;8skmcNJ25v^bEXgIN0IwMbAB!T zmM;EFWMUpk<odPI5Xfmp3`J~BYwx*&YWF;J!%4SCu7os4qm_XQK=@Q&(*ycy>cukV zgod1f>q3;Y*?d=x=AAq$+Dp-SphE(u6QDHSGJaXlDv=&MOuTf=G6^Cop-FP8axFJT zI*osdYt1pePMC8Ki+I?xrP&QI0TKFrVdr!W7mR#R#l>1WHCS{g!EL&PfG?<@!i9w# zml&oI$IO?CT}lZ`15yS5VDF7Hk@YQyfH3QUIqFA@*OBHgBqJ<+YnV3+=?-`oMnl*z zC99(O*|3i@8~_Kd$G(oCeY(PSWnF5G@e8wBnhyVcKx56WYpm^WMv@;ogzTLkY=zm8 zV{afEMtmc@SrwVaha?+@GBV*c5}<k)_%Ee9n>+N(a9(t6pj|?jaS2^>o~p1>REZk_ z<`HGUJfT_c2!$eRNm=n%)oWc~?}(@;saKlJGv+N$ENoH;cad2hy69@YHE*{CIi$<+ zc|)tI6ax{WK1Qbfc!A|b!M=LzWY35q0U@EU^I@_?vBp1DW8-EQO+1MO{rI-s4IJ$& zh$(B<0qb#>f{+Z~$A=ykot{EmK@-6uJc*X<Q;8t=B>%EX@aRr04z6et=ad*`zwM$* zUf86{IYf(za4i!V6d2Yj@Eju5;vQ_pfb?#~t2-E3<oYC)G=@=`p8uO;gug#L#ovsn zMxV9<uYZRW$uyd6Ulne``>G48AsNHh>h)+AhzHjiS|uq*f@LlpGT5Lr)4p58V%Ue5 z3kO{f{~^!@(T7q)-(Rfd<JW7^MppAc9mCH#^iL#nv|#QsGi<C?f%cm>Xma|F+OC+V zJ*StXW*gNJEZ!9)MjtE!Q1^@ORf>$6MldtnOgk8!8N2`5B6C~gArrk8NBH|Wz6-4p zf)ukW%UnlBE6~!tMw5F|v+FNKEsbNh7s5;g;aJe`Hn6=O$eoBmxvrewWkP90`v~Th z-JpRKI6*5_(>_vXQ;S>H*>KY47gMX;*4Z-B))z_5l-AjF)p^y5juydM6B#4Ll9?05 znwf*e1=Gh1h0})$%O{Qi5zRhh|C7T8InA-+650cYik39VT9xTz7Hi7X#bzwJ$R=a0 znYk24fTCvqF^x58>hMNIOG?GcIk^hgy~-*2F*@LSXyClyv$!%lS!8A~tzul~hM)vi z-vh5^q7-;kw|Ys2H;U*6X7n&^J^eI$nK#V9u}z_pGirSY@Z7ic59EA|a3aAlonxBe z4SK^}2cna7N0!ovtXzPl?1m?KN5wUh+wOxtS&l$m219L*sgk~__!~Uda~jqqg0|23 zmEuJ;5g31P)IBgq3?jFW+#Q>5_{%Y_^_Bx}fb!4-lYQ)!<p=R&%d=}YXm+nrisJK- zwFXzqwic)Fb5P9=o(qTFTS!gZtQ>2AXh5H)rBgD*4r!n4yUYWsxH>uJH_cs&GQ9tx z1q5o4KwYl#Hi!rUe1S*NNon0-HWa*td=Tf#Hw(?cS=EEa$`{PalN4UH81{-jHr7H$ zqnr8YRt)wXKqWuS+-6{!=9|jpaP|;QN6f6If8QOS*=VbxCsqNobsyU0a(jk#A8yOM z{JJeRJJ&d2$3Q)mH#h^WCKXoC-SSDEX8$>&@V4H9I{3HBcH~(}K}rlT$D7F{QKcpB z#^q>z2{XMdLTQsLCyq&SuC0npsrq<>db^g%@Q#gh<De$+<->EF=7R>TNTvxZ_l8qt zzJ-X2VFcTt1&SGSwP-%uq=lJA{c>8xbPJYF^^k?sqD%wUVzWY}d=YIu7IPC*C8HvB zD^_C@RHb~Ca>NLMO!YLq3r?{ld|^wPYq!m>Qd;l6ErfGc0Z_IM^{c=ER+-u|ULek8 z^(?-i<{%B#dP@jXh#z%I4O66?fsEfvwJxgY?c-4xHfGn*qCva<hx7~wO2r7JE3A|1 zc8At#I#bcVt178X4q26WB1UG2%{Zf;fY%uOq7A0_{G?%o&?wT0Ak}AxxC2b;Mq9+o zu5tJ;p2gNqUp*U#h)p9`(86EZy&-Uspxc{QvKIs>RTelY(mCBKBDpDXxdG04pd8Cp zR4(Y9p>^4}95a}LrF*@G2wbi3)OOeZY`!_OR7MiBaO&10DYYEAd@grAF#AB^LV0sb zQR^2$LMiDM*|7zcjRkA&ApQa%$-gnkpa4^9U8(WlYkhV-@rT2+j4k2B4>U2|XfXpS zU4d*GK`I&n(@MdO<-k`<;cy+lG|!+^4mi<%T(X2*^Aq9p$zcz)JdjT38#!`!^eA_P z{d{8clz@aZVz(8rJBkTBifn?4bhIe6qwAd5J&HZ+R6Vd5&nONSBE`jb50Y+;FH?Q| zsf*b$FN8mJVUky~Y>9F+N!!3&_iZ@bx0l;OS?%wjR?0$GJ8{5oMR=PyDip)|tFi6z zJxe9ui^DUJSk6$9Ss&~|obazlf$ipyJh0&Jx4csHuzG^%nN4t-;6yWTRNcHI&k=}2 z`!a0YV)jv>4eX;#COK#h^9{RpnR?#ov)*}E#@$|X`|Mfzi4FNj;!y~o|CscXE&@q; zXT{H@N192X1woGDG{_zis<7sMT-RoC4Y`O~J~>j<WN~eLLBYWlbZ$g#=4go38%i}O z)k56QN!yt#!V&0F*YTlm@}76cbt^tz>F4ZQKC8u#B<<{=P<xIn!Bha-q2Ng2Lo`$D z-D9~7SQ7etzS!r~hqang+D`x3$%6IDdRw2mYRh4+#&&!3z<WbU&1J*=moK}&>$UCj zLWo=-x`2lRcEiQo9Usz8i`}AtXY_40lkK`=MXa<R{M-&WN{DxxK46V9J|U0PugGJW zdl7};Ji}rhdZKvPEOdM<q(&4UW~L19az>b+*?5ObiKvCDfB0gM;#JZxaOxS`3hohw zMLJ~<4CwV0U22l=J1{)8+m9`g$#sthYuI#)s<T*eOxAp|FWBvw+wGyNhpLyRFa<eh z^H!3$>?a*c*#Q%vbmH8F<3l;z$mmOtYlJ(J1FN^r)U|o*Qxa9HvlO_k4-vwZ6eH4P zRf7xh&I<rjKviN4_KC#ll=}ieG|P!Np{A1q>H36gg2&6XEp>4k7zh4k-zX*#49yog zaC;rbbyK}M((T&#q`IFHMSN6+Pv~zWkYN34$Q&iaCV~eOmUJUWS|;eY4D&<@;SENG z;vNLw=+a<1e~H9Fg@vwSMw)z%-(bW<yI34I$H9VABW3a|k%S~^DX|V4{4WW`Ayl^| z+Nju5a7QMo?SYyBXqs3en}x)5oGHfjVA}%`PlsynU`G|D`;?d^W1AK43(d2Sl~!r( z`&-<^?@q7V-;Hmbx-iT?bct{a2Ii3X;=@Yj`ULoM?n=^<<s(+r1&QX(>lMYEoYQzb zvv@qYF7t0c(Eo|{EoLgD0{(GNZRr17v`_or`zrzt*0v7HcK;?gM*pkgnC5c#(j1;= zwv>=f(KQeQWJktfi18ww9@Qa}^P*@9H{eP-*a3m8r{E4Z7?A)7`P=jP{ROeFi4kJ# zk_Qn+332>e<YIt|AN|mvnjU%0{^grVUd$gk))MhJfUnaB_?yk_?DYQ}>Dr;HJs#)k zztqTDi~@f@&~W^&hT<;R6NcUjN^DD?VpeQRpO|K`xkt^i$-jxR$_j6!i3@CO2ZUq- zqU@?bPY<}E(e~`oXolWQn$+tcBB#{~^vXd?_JM5BnChZDBimZjGD%IeCgL#BIM7qm z?b|V9TlXN{3Q&JhJKCYvv;Y~f*49PYTcA`m^E28DbJfV#(Scvg_fL<bX+_FF)9|Na zVyo?mLbL66;DqTrvTa4#gt(`zRq9Ey)r=}mtxZU=r>R_Vd<=Gok!2h9N4r&k$_y-G z+&I~=rQg9UR(LkKGrvpCo_U|lnT$MJnT^8Pe9|bAvuo4LnLvZtMFwoI*TDtCoG}`X zJ#NJis^~9P!1I4IIMcJ6GHC><3%7?K>*3o>_glNEz}bxcyKu37N7|r{DAyO(oke#Q z1hwgjj=0Q78aGBAgJ7DfmW9hzbyDcG(PI^c1LY`(W>l$HX=t6u)w^5Gf71H^u3Hbb zaoDY`F^l$bm{#LNW!o9D%AJC}>UEH==*-Rb_Q1^St*!BCZJG(X=g`h+JMhKrL8lj{ zBVOi9qcNM1t=Ty6DLZl@Jfkro822?8SH>eQ822E;*bIGiA-u!>L#Su!SCD{nh~Uro zj68a*Co#l^N+O>9FjLQ3{QkdAOUs@J5m|)3RaMjn(9T0_A6$k!SH{})ISu?%yU4VO zuRA&!SGTGJ6wNy)6&9tqgrgUaEUMNE?ik$4u$G84(=K9z86ziHp0uzP*xJjPTNho* zEDX=0Kvzu^3cLK0&crB1I<55QvBHz*+%+Zx1*Fq3W+^Dap^8nR#6H<Wm4}GYjG|mc zS9F_cXFE_Ks6t18Z@CW>U5b@M_+f+?#}Hy|V{7m2ZGScOEvcp{UM9V5lqMxWw+p+V z{m3Lzx_Kr2+UP*aM#PAqX&IzzoS<X2e_U^VZRs@r-RnjGh&;*Qh)hs2+bP<vimv(` z`Z<;3D3QOM>abdswR6a(cR!jgNne)pb4Xn6=&WOCeMxr}L=aH@pP&oHs>`zJp}q9< zSF=lvCBcDFHgNIf0B!s7MxHIj7UTF@?}vjNJY9yiCM!vXITbVrYtq0F;>}5m_kwym z*@EQ8ZU34$`W19SIP~>ze5>)T<5*VnQ0hq);n7JG>}W+?^;v;#C{b31C?0NPAkO)w zq#jDns1}x*BriY5un8`&5bN?Wh1>)Cs~!Z{Cu`!i1*=Q5ChaEw*G|KpXPeYo)tAdV z5;JRp4eUp2+c;j{a3ksc<D{}*xQ`b?X>E+8qDubks9p(3|DySfXl@O0P9K<3ZbFJ^ z{Db`JfgYN{*M-6Z6R39~?fU7Y5|)|g*D&_n=WO+<NkU}h4~a_LXu_S%`Bw&Y1BVL! zX8)%WF8pD@Gf{M#P@t3X$>|*zCSZe`bXr&5i3Eg+yxe^ze!jtrQ9(z76Fdqu0I8cw z6x-?|@~seO*z=PS|8yW}%Uxlit!!|upJ6ncTl(Krff>PANJ;``xkzoh96G^H6{qHG z0t)nnf`fm!Aixt9rwB-_-#cUGusVc+3$lR>>H42^w;Tb<t8zRg-ZGk0TKbsP(=+h5 zuh=IHZVPD(vE~nhGFBn?;6w?d;IKZ_lv2YV1DB07QVi^$HvwH)&Cpssr)G2-A+^-> z17@A<S@Px0LJ5RZOi)QgD#fgOMp|~-Ck0SR3Z)B0`@1qdM!~P2IwOUs0kv~wG(wOV zvTNL8j1$x=f$p&ar(LGYT!+wSIo;W{&(Q<87m<xGOCTI-vLRV|qZTT!(3-B>un5_G zp9bfUDrGmITorwUT={*QHnCvOeO^?T!7nQAU+_dUc#g-#2aUHG0kh?9zj94y=*wQU zm6YA!cU1QY-O>cpB6b6Tp?q|Q(eFq>efxG($L%sHkSkxIdLo>pL(0eD<hRiwTwaN% zl$7sSKl3AM53#pA6^HTnHL1Qabcop;mAo>!LIC??I2DAF|M1kvsJ;<=g<)E_aH9qF zVYR75PbYR_EUQ6$vxBaGA8hcv@($>4Q=xiF4?bS010?!FseFQZOFmRb-U1AoB6|B{ z%P%p)F_q)PY`MVUBDSf%(R@n}ZtmcrzU7Dc_H*4;eF@W{H=zQlx+XY3D<gadWtBd; zdI}HtZgZ)8B7PL^m_OOK1w`YG)!<ayi03eG#ZW$DBXSSXk3?qpS5MM9S8s0Q?j*U( z_I#B;q2TAwft36O%ZMZ~C<@&Ii;57fDoS~jV$72U#=1rr^{gqjcD6<L<x$Dp)KH<= zP2#JeBFE&zH{C>zDu`sI_|uZv`f4EGJCyWMk(C)Gq)G%!Iky&1cpGO|^XYAH!G>r# zf>$&Cz0TrmBhCy$s7xZ%BhsoP42N(;a4I9(4e*S`l~Lk4hV8vrPK*(>l;tT-DsL&c zQ!J5MxaEr?4CD(U6zcgAp_S#y(B_8>-n9kch*A<9!;RgM+PL9)O>yyRBanx}K{&!0 zCs5_{BTx;Bsi=mjHuMar<cBPjmBKBQm%=oZ*Y<^!tM*G`VhYPbKh8*E08r%vzi%oI zjBHjM4v$8LrGZ%)AU>4ZU~N=Ih-(*yLcihgY7X_8;a%_NriI|)Z;tX)Lut9YB110# zdY1v4q0cNhI||vUEJTW*vy!}*MrAM&q7{asvl|eOv08QVJs9<3(i|9%t)oEt6^Yfv zdIQm~VM!A)&w3nAYsH22*3k0uc{+Hx<42w{A{CR~1r2QsQqIV!FC%Jh;-n&&uQj9S z`Aw1%r4wgIMC^u03HbnJG?|Ldk-oY7ar`@1#Qa>PQlzCTc(5nS+b!Z<q;N8X>QaWI zShp}PU3aE-O$Q*lu_GS|PU(JzZILB$V+H=5PK7j<W6;H;i>s$liU3;ix1mI`VManq zW(5&TOskjztf2IkjQP37LT_vNZAmg@5h`^D1ASAsOg@Ff$omWAb-_-kBhq7vic#sI z$(zE%=DC(TJM!4tAXZ_WAYN27`v^1X4l+1I>pDLHtG$c5+)3vb`E7wimFr9BaYKz2 zlsi|D4R1#GVR2&2_I&!L?c>O1TTzY`Hco8mrRaN&gc-9l5xLL`ovWvoYhU+GNv|uC z5n{s1xs(&ZEH89rwvPfCcidu5r$7@oYpdqsHf3oURH$*%5fO>|JU%oyz_D{BL2@*_ zX)1p01!Bm(h?VGh;3=t+1_GCRVtN*qd+|-4P)ku?H!VMz%bUmBBl^$-9RV!5I4nAe zPV%rQI3+308AOnmKsiaMiEt0*nS{|!ylp7$8L^C@ylD8s@|uC`IyQIamb8nHpX`TL z4!>G{`V212s9IiAt)tYCI4Y!Z$m+#jsgEf9i&>!X19OzPp!uMF0YkdhYQmBI5*hvI zpGm?=Skwxo6Qh<-1pgzwA`I-U7`g0z)bB7`p~Mw7mX)gNnhN#K^7U(%HXdbIR+o-> zHdc0zOIAEF!$C4np~%AadVg9q5y}+>&EtxSM%#op7lQ-j?8V+?{3QBr%<kg2!)S76 zlCD7%V^M0wYRV1lzXmT1?N2iSQ3b;OAv*DD`cW}b1)^V!wq?-+maX6D;G1A6M72Be zmb*vRWi~CU)yv-y&Qc!3j#sntiO)PNQ4PMf+(3}EEPx%VQWgOA_LAe`6)9ZL$h;H~ z#e9Aq`+N#cQ4zZ6q2a|ROHLAo1|aQ(Y$KB-H_ont0_hIe9msEL@oM+_goqY#oi?)0 z9`e^8E&u%m$3H;tauOAzuV6pwT6952;F}BFD=l^wT**IStR?8Uilzh<l5L4GNnDF7 zU`j<!V1l@oK!`H<;hN@`#%w)$B7)OAAjQXnh@NqkDFct{<ak4w+|ikfh?nWSMtFp^ zvvtu5FLMf+W7F1@?N#$!S*0Fp-{d7q2Mik&7khB_U;|l87bN1I7|=X#A;em{@{|;f zua`=hSR+QW7OP+okyeHJC0)?cVU5K>cMCopBaS|~xdTb%6QT)(2RE?quOo7qcI^dF z>(X0eMUZb4zjGQi#ukn2oPsGx%#Q8gvh(6Ki|c#lkMru{mk-Q{;xDdbQn!WjdrEe$ zpIHEv+$^Rp8yDv|u+Av9QOnWMc<)r?n>^A<oMsL@vu?Qeve!>LoEerDEuA<z==F~7 z7w4DL!X~bqX^G`4I>$zS2Q~%&CeA!UiG#~SzvvU~e>t+Mbn-l#h`cJzlYLT|6pDx- zQ&C~f=NX`}`;`s&zJeAY@8(0VjO|c{1$TZK%e>J|>{l+1x)e60FETSJfFzHSnR0Ax zi`l$ubhS8xZ8WO$h(zb{Y2@jbP=PHVSkPC9F_+T<IIZXR8(Dkw=5XgKO653~=FnlN zi2UrdM7auqnK*aOhxPn2fAMQ)&&E>zdh8bZxnAmZJ>TtoyrKIJNY>Rle$i=@^>H2i zy8rmaP0<VAKlsai@y$GS<SlNRUcv8{Bl=_^)tBbW510Usf5ot`w&ZIm<7kUzz!xZI z=`PhjPA+m;jvHbGSWnL@-mf?GC11b)*JbgI$mbtnwJCi*iXlWjW&81|Zapfx4d6fa zJ@)Wvkq^?I1f3kZ>%b{raf=$<zo?!EIRf?Rqv+XBGr<X3(>A+!820b>jiE_9-<rB$ z9r7T^_!*^wk<vhm>mbnj9Mm9^<;aFBNN6;$auO;I@u=w~pVhoY*9}1}+^PhF+l~^} zWCJmC;wyP2Gd<zp{!&pcDjU%FASH<<Hr12JV2gUIllkb7*N}8Vub?2O!uU0Fr4QaE z45GkVs@Xwz{n{;d54!1p2?g!f7nmA1p_HW@i@a5UI=D1Cm`EDp^GkI;s1BO`Lvx%g zc^zyh*~a_}+18(Os`gO_W7csUnBmMs4yLm|PJ~y2h1gPQlJ&&QE96C;YC51{)CBQ1 zqG*h2N@E(R7pnG*$xA$gWo~uS#xR@vmtxjRc}>-XI_d0nK*bkBwKM%uDqP=Vg8Dz^ zk>1F!siGYHUna19RzS!(`G^0eucg;ug-;j(Fnu_yr0Q)SbB@Kau+UuE9wS&x{J2qp z9%(RecJr&Smd9Wb5@A|p!T19g4%9l{)My#Lz&j-R>E~ijG)>hA->PwyeVS087=}<? z-eGbuP@lr!{sb7#J#pthl%F)g-8AFR7E<Q5x$tLDppfG=*Yz^aOka)E60*#${@LJ- zDM{E)&hbJrv*f6_lke$(svO8h6D(t2x=M?j5~@<A<wa8BiVSHnaB)WUy?o;HU~aSg zzjb(7OST~@l!r_ShFHxveVrtVaFovC_ITRYG-~9_BF^~bx9BXDlr>0Ex&m;O5b*Qn z?0=Hy`Tcc)SZ!;UozofesUIB6Ghg<;P$shCs-_kdsUB2s{bjVo*1R~#8}7mK^NuJv z;3&3Gp<+5At2Pd1?uYd8b17V76V5`<(r07`o0wr2V~Z9Ld|-R$(@eJcb;Roxq-fkB zql#nWovj1qmg@Lpo`o3GyNb5>P5<%L+wjqvPOxA41%op6ab70kWC+%M5zwxJhmT9V z60b>DNRNIyou^pDFhEQ`_dEQ)_}F&~$f=8KM6gNH0Cx9)I%`e$nJwIHJ$rFwF`hUL zmYpJB<tlH+pQuKK2GbK+AyETBR6Y-!|1L|wSgzSFBRgFA+twVqKL9@7X6dxm!J%b6 zqtBy0b4=z)c@^6Hc!BdP^(^YQ*&3|sh<_B88TLh4{LJ+)mSb$#*}jgIDjzeK8{k%g z;p_yOP_fj(Ou?9^_bp0Fl68LjX8#`Sw@lk9_Nzce(4-S=@V%xdAv0jRciz0rA>KTu zUafJ}Xa87OK(?n-Dc7$n4Z$l6ke_QI{PAC=aWc-}Tv%3wLe7J35CbHC^Odjy+!4UI z9uqo6^uUMq(Eb))_9QDDuo<*wD~zunIh^+4?`gd<r$6J{@y3Kg&w-&EU}^<b?io~t zNY-Q03DIlCnD(K%k!gi9wn5E?RNjHLg(Q5j+v96R&JH@iGF|qy?s<5D+w{Tjndk>- z4uP~Ob9yqTnOlX#o-w4Y=Z9|T)NMNI9PL2gYI33+2FvHv(xe6F##esjJOkkQ2mwFh zqw6uXgSp~5$e$v7M_5O-Ap8G}l!sE_`Z&WeLPsrRn3CTmedHi=dpA&53TgUyU#?+m zB^fgdC8)2b0(R85<`Uznd(AW7NZjE0a{j*F0+jUFyx4Sg=T8;}&jd~j?esoS9j{xq zXiK-fLfC$^lo2)A_KX%SFsYxjB|kh+tJg4XJJ|`;+t3RRuqJ)Zu0X4?#@v%3^m~%s z{9V%U-qai*SHXCucae2%ZbOAa;wx|ug53cgrstAyf=2klpl=3K>P!bSD(WcQ!Z!B| zx4kwLr9^HdIyHWQM<o1>lY6~KU>uiVSVz?7-9)E%1lh!|O0~b>kJVojiZ1kv>Fiw~ zi{YsvKN5r<uiHo)pJ)|h?{BaAeky-!cQ~muAC*QWs}faW)CjdK?6i_Pc5%fR=Gb7J z!#c9SIpQG3aFiG{GYhm4st^y%Z_Ak~*EBLEBjh%UP70Bwd%unbnaJ1-h0<kk<|aDx z0!W8nip#+cnT=z(dp{Ek857AE1I9{_=Ar;)=f>06MgSRRu9v|4<&JD%Grp{C_|v2G z9Dhduj_>rg#oy3}t?CgUj@@mG^HAum>OXv1e{EP_21TyB?e386!by6U2*&9zLTh8A zKOH1|f*D)!Yc4}=qoQA_B)po#!)o)*IM@y>N$;GY5Pd80dwAFma1&lVm=SjwOb)Oy zxBLF4ia$=0zAGbrX@vI(73}`?0lKxv=+L)7J#gwUo6d`3Or%q9r0AL&IktllEu&*G z8-*Q}C)>BBGsf*{#G**9@64oJ#n@X}e#7YVV1#QB>HLd?8y8DHep{pmFwzID=}Y#g zwP<tY)yaFI!@brnd8z56zQg9c#Om7n`M)sxUD6ZOwSSQ*Hp_pDO#eS<^8eR{X8fNv zXtKhl%_2VnPiC77k`|UArFlE*K?`J(hDaW-AA-D{q%fVb!b0euyy!*}x|xoKY$6{& z-F?hB1i>==J~2WQS~E8*(wnKQ^>k*goVTZsQAoegw%kEwl*TbVM#+_gfK?bR)x8iT zcGxW@yG;Gb^PU$2*QFz|lz$Zin0A~Y;yX6H&J_kcO&yw%_~yaU0-2QJp`B3T{y5Gu zW}}?89`f#2N}&#|Ge)y!J^oZjSlNgbqb>A(yqk|BN*18h4<0-Zs2}GU7sKnG!VSn0 zaHgY<eiEnQmej4E%1-;SSin5z!c*W_;$TUbSbtw1E-)!FwHj;uASkjWMP}I^-C)9> zdT+W=7wW$<Tk|dCpZ>@p0%iv}P?}=t`oSG7KQ|jCHCIKJA59n1V2yOe5SF~LM2L(> zrI%OV`F4gO3z%sbE3*o=@2Sj+ihL*E!pl1}s&H7R`R-EVA2QCZ+XibKwk3!`z_Jc} z=?u|Ze*yI8%^^aI<t`alGnuNLT-oQ2<h@cCDaB8QZv`2_4P%A|DUTw8`0-@WYwvI_ z_slP-<@D#0zJVppd;*^7{Mma`C|Dp*AU-9JG$-cnrgFlNl|`$!zhcEp8O4S?1b?vH z6DT=T6AEvzDe~N@C|(_q7-Ff5SZU(4N)!onLs;%HsTzJ=tRLY2Cxx#nbVqytN4uB* zuX5~v9IXF_x>7W=wfkQ;!vEY;&0dgtO3P0#0M~@B@gq<{f<A&tKSmIsAQ1s%^@chS z<h-C_J!-gdXw3Afp>)Vd=UUIo745oeP3r1q<+7M?rDA0P%}N*hv!1r*m5t$=KgT~@ zFWu==B#B0USK*JlJF`5WJ!jfqqJ3TpM{@`Y615MxA8F{>-GW0==x0lbxAyuCi@9eQ z+UAA8*xlVwYg1OR0{Kqzfovv7KV};jG&T7P+tu+dBEsDqf9H<p-rkbG(U@B^zFGx- z;b9F<MuxjPGEy`{KC%%m==A;O9o@UShx0Haaz#muoTc4^5Cf$$u}cm8<KFJ%f^sXf zLmImcmaEFY_^No%p^K&~Ck60|kLy|+Oua1z^X*7;c)JJc38<ynt9-S9-yT>!dN6%$ zT<BoStv$Th{sh49utO|GGkGOu+NQkFg6(SXN4~P9w`=2ha<gQ<Kw-OLe7eIgKRB@a z3hd}6rE_h2r8-^DXx=X=YjEN9gx);eroK)Je)INs)cW-f=q8VT;eBKA?d{h-uy1|l zb>TZa__*WSJ+L2t)n($xyK2?(QdQf)zuX$)d4#}YebVm#*r$6AOv`$_BJ2``ytjn* z4$4Ygn8Wi8h6aZd1HD&e<|fX#Zh!K?^Udzgo}#~sn0FuT<KMy?UyI>=GxlEYtG+73 z_m1$zhv!Zl<hH+^F1!VY`i}QHJk%Bkp6!aCwgw#eu=mno?AkqK2AtC(eqMQb#Q2`} z-`*Hs;<Eqr58mA48~1xM-IKHbtWWzQQhuMGylj86n}2Jc{1Cpsm-hc4&3|8=z;k~R z;wO*#9^FB^e-2IKk7EzT3fPD=*ujgUbS67cr?NQui65htaqs9;3<`aK9K<<HYV}OH z6Xa9bQ7ei<ZChY)C=PB{h|9&;RT{KnQQ8%5Re+Qz78Wyuu_+sFPf$mWv@b&faqm=< zwJi&;{gDokrO4$b8`QIiu=0b3aW05T!a64rO2)LHN?b>PQjhP*<HPzln`*yG=|#OM z7;*gM`b^fY=dWvEM2J>qK4u4R3I43F2^(gqoqaruCZtwrr#*mg9@(gFQ4^Cq{&zAa zFmV>9R{drCM5H&y#e)DfgvQuDQEII>Q4ZY-w0b+jKc=y~T)!Mq^<WEYP}Ih_bpUU3 zD+aXS3g&2V^_xM37o+&(+0HbP?`YRVgrANa<GGayRn+iXysEu;+u{mI___>LQ(qF$ z&{dn3QA?m9Rk+x`ww=Cb<g=^1E>0h|y_t{{Ia&I&dQ15Q*0@+nZr~i`s<vQCg{vgw z5slWMEhLMFgwYjnrMy44pq=d>wtNo3Q1YX9b-nRRE=D}DV11!y5j7%&xSq_HJSm5% za{%9Zlz>3x5g%8>%~N^~e?vtb|2n|FiBsl!lHWz+A7we+t9%7@r{w9(Fi|aE&4_(R z^2$|$Q@9+j25t7blS$W1ty%+~nz{Pj*0@Gi?0L7~O_=ZJBlnKtFLb8icghuik!ymH ziLy<ZxzuXX5B+QIbFX~BzLny793{eZy*NP=tZ>5`<5%iaNc7Tt^19w+qfui2tQ)DK ze{Urz8bqiS*w=CN{#eUIwf1H!xIwbrB)^sGaYmjmJCL5ql(sxIQngl3jX4jNI%Fbx zbASN#0E>;D#u`rm#ymN8#lIheYnJ60!1=iRSTUD1R((a!DE^mq20kT;OhOYz#t+Xm zdUcT17Dkpy(qr_Roq09Eft02Y14u-Gpk7#r&At{gBr}1(rygygd`igSufupLAago} z8xmIP91HugwA;%D&Jp<pz~Jd%b4}G4Mj2Ns7owB9<@=5X;%r0@1S92Ve<37g66{b= zQ}oMZXtDo-`W3Pwh{TOQZC1r_Gbc)(ym1X^6M}Sqy7)GYm_L|=(Fm)&afKWh0QiN? zmqRjaZiTf~mGanFmSBXYS(a#olnc~ED1zWDiE#JF-evL<nsfna&hIxJu-;yMP|Zyr zLiKPoQ7Uv-S7YB-f95cjx)s;UQ;sgj49eCG{sBVE$<j`6&~ss*2F%Y0cBn|28V4u{ z5+;JB8OV#CY~B}_lu;gCt*oC?IqS<GjY>e%fhOk0@lTGQzadVIW8~ELAD#{-l#r8V zu8i4euS}K8VS>G6Tv*}Pxb^v^iW%BV0b8i%^(ml5Bh-H=NlhUS$-2eq`;EE<{}K>L zEEL_$Kah0`(x*RG{7N=eEl8R9t-v}e=P1o8n{8F0xb%66Za5F*Tv0Bgs9aK^QW|)= zVaI_ME%KRtTl;Kh>ExE9p;lCJtD!XHT%u8xf>AM|)Lbzm_f(=$@vl?TuF=mz!*f*_ zc411RXHKC&eaBfC=3`hPx@=UTY|$*?o97xoD%~8iV}O+$K^at5!dk>DY8zf>8L9Me z>s3Laa3R&KW6iK6s_3m{4TJ;=9DUZgmTz6byi6`fk#?SVPNQfoZ(6EOq@JEOQ9Hx7 ztm58OrgCc$zGPjpQL+Jx%CHQmNH<?Vm<e#+G}cDwpHjl5GAgSp=Ui?ti6|?}Cy-6u z(67k0KtISVcd2~X(=vu$Y5p)&EbNivIC=QE)VoY%@@y#QEuLXt20a&4)GneErJ&ZV zBQtv|Op#5foE<;IT02c$uICR8Hcl;*OqZD=dP+ZEJZDnWuBl;IPBs%*RZTy)P)?S! zn8>NQf&$Sbm7Su~tfSmIj#Q&n(F<KZr+!FH0X?0{Vf17(@v`0zt8Ju48-&tTEv=oR zg3dU{dcsWPl}p`s1CbC>hbtl;pi%Tz(GFR&t*~5n4(ZrY%2i}fI~R3MEVofH#XLt- z+@=!klJ2u%U&eFhO$aT2hFah*3a8R7FTa)($1<v*FQX^YdXsW4?SPKfF6q$RCbrtL zte`Ka$3Ev(yi(L<TvlEFVz@+TUsKXmJRLs=Pn)5!RA03bq1l!3T{?w-s}ct>xU?F5 zesO*$mPf?C-oHqi!e3^ZfLuZ!#>+Z(tXf5aBYcVIj|<$~@WM@z6IuD_DDTO~V_6a^ z*{Fp}JI_4V7veFfX!BT7+9vXi<(L-U1fu<(TS|j(_-I0Y2O``BeDfo~-KKGlvE)}3 zqeB@D#H(bY`{zVyQTx2L<>xRgC!WWZ_s~{+#gykL$Y!2nI<Luz1qGVIK4sb6Y72SK zD$Q2jWS)aQ6_o2B$#k)i6GHnSK!4N$S|XR{S(f2JhT)~3h#BW0FmO7|U_(C{B`b&J z_)Ic__1$dJducF&eKi^tURG(WIHrIx&vC1jm&}Zz33eyX5#Z<>oQF{Sl_Wt7t^&=u zj~-fGKm>n7x)DH(dWvY1?>twO>nQRuF3T<tm%OKUAh15bRr1UsHG#zE``A?IGPqpP zFV{*vSw3OoNLsD8hIF<xkM?QAh!fh}Yns!q1rsjXJ9dj0ojWUb6aL<p4$fn@zqMFU zvaQ_B2V210K2;)Dp4+ri{L<+*tl%p{Pd~xS1)FS1$*;oMUjz-BEk|yW*_FG=IFCKY zD`Kfu18*v!FXKqEtvr5kbpZozSqHV(<iLQrS-OsWXF7*&UDr_um35O1n95!H_XJ9P zY-5oFm{j!sne){BnpW~v{XqyETrb(IUs%QD|BDFJV)EG!0W@KQA2DAPR`Oo@o*Gkw z*}@NWw0j;X+<#=I+GNL{(rhM3^h;}{A+WI-T89}kIk+0Hd(azKdp^y~u*J>QQx6*l zspC^FoB9u0;Zn`6(uzv*tzRM0itmzG3Fiq>$zsB9T-NLpsYIAQ<RRtaMKl3z@;^5I zNo$-wS8IvV=#{Q=0~}c;Z{oTsgvpYSyKGfTRls3vq9}<bH&nDiXAXou9S&OUCDgOV zX>_gB_{l=Mj&*1EWsPYQ4V5Ab2vs{CG0RAkJuw2?>S-wx_FmUlhVW-s*`fn7hEj&$ zR8#wz>Npx{B{1G<xH!rOC?SLPd}U~t`xBzQ44kZ!h7gJ(D=(P}Sh3R(&@+e+az|`I zamj)XHn_UHeew`>9AQbq9fB91^H;3%+iM;1cK@<4*k>*QSFp|&P(iu+u8PuP8IkPG zWpU$bJOraYOHQ}d{0x6Gboc<9;|VK-lXdp&J&va`gU&3vyN5V98a^pc!41+p9;%o? z)#g#<JtiKfA!Q0vYw8NyFNOZi4#AF$a;-pM!938;X3lC3X(8|eYkxf{5bkO(I}+eV zkdP1QWkLj@8aomwr20DTG}$Q<RU`$OURoFMW9>J+xW#vBIVC2mU)wfu<NFTAb40@^ z3(6(H+M=W@!9w#jaNakD1a|aKtxYfOCRgxOJK3$<8{1a?Nt(N@=OygU>BLc54G>=H zWIZ47jMCJzPSxpP7h2#Gpim9OEdxbUa1B%DN~PIe=L5JDgja3Jy9HdFdf5r`e@SA@ zqtoS-UJ^M0g?v;X34{(#Sh3-Alon#5+QwHAXY}-$#}NXqqRFO8vUq}{m@76Pp2J|i zb<iKv!HK^X%Q0E9l4pk9BRssxzIdI(yi<44Ae!m^c}m&SSs+y}3U=_TWF#@e<spDf zp+#v4c>~OKPCix%%Q87*I7x9EG~Sw~T)A8hBm@nN&DrcI=z@L~cnXz`<3m*Qdx`2` zh5b37F4I!nY&VtSbVKHd1!>X{HNi;9jA343XR|R^Yi*L?)iKi1fOve;M*LafM+jH; zgo~Lui6~}$(zIAvt+rI_hH@|VRgoy+X@9l4Xrx}W&hf!iM`#wTmR4bjcw8ZeDAocx z39KHHCRMYrW6E|cCp!X@)83tAx4&NI5<+TOd=a1*@>9cy%Gxw$ZF>GPX!Y?H>NW)a z$Y8nhk(@PYlboc8hej<NTAq=SwBlo?_6C@`#S^2+ED1T7t49W6v$?hRgk~|w&FI3@ z#VbQ~aBAw`ZPf7rO|bsd;v@6h3pe$$=c?sQTYLUCP^!f&g|QYY(N|Nz51WvVv<}ig z_*d>MRG3@JHxeC*<3AH%gK^@_1}a*)m7!J$J;yy?0-xfipduBH*r?}Ru<A#blRf)0 z7^ap-JgofXX9rv}dt}qT$Mvf=Cu96Klg=(NeTyjjK^AwP%Q{W4?zY~{p?y#pB-n@W zi@!D-GC8rwD3&0jWG>{EL!<%gnCSFawv{%l!Rf~Dyz~93X=;_)vqnayqKuw~>^J}m zpoWhIkrhcS?F=}1%;hW_NR#Kap91#6EOe?typ4F8S(a-@Hga5+mhGnDFhR)#Zpd>3 z?8?|zW2Mgp&kW|!ZovXS^yCHFX?+e&7h2eo2vKPh%|LKwA|pif6~e_%k%MG7B#7qi zo`h+`-1>PBO@g9`r5=dI1P7iw;CiH()siH3no~#cJ`>`@bNhS@?8C)8&rs(_*2@J= zvI*Vf1`@Lu?GKzrWueb{oDG59GBBRX#Q>r=$h4ox?55d*c6skqy1=n1raFgA?l8d~ zHq?m3lG(Zj#cY7D7`#a&Uy#iJk~A<*&*E|_uEU-2YD977-pk&MI@eKjAS}sDabn^! zReu2+PSWm^kr3Kuvx)WMd9&t9t$I&Oi4P?=?a8hUK(p$&4arMa(MS`BhQfLWGpu>c zUCxb8T3aE4wAe#6*<>x|T<Qpf7{?s;?|nB!vv73H82Gw=#v~l|5^A;80P~skHNylY zX8m^IOM%Jxo;>MsXGfCa!ZP@XRSHYk>)|9e*yNu>#1pV|wk$6~KGbtsC&vlw%MJEA zp$nKd%XxwpZpSeX=ox@~Q-Z_G61@<vnAXIrK=<5^)_7(0;v{npOM|orD8H)ZZ~cq& zxNIPi(|O@5E*xOWmznvVUZF-`-(-iyvRY)f%4jO%;w!@SuLV7$0yQa3U7eg|hwLl< z%{Oz2w>;hyr63exQoHDln(a8QuY0?ZJ(~;*Jp0nE6oLaF6oe~9R&-%SStUhqirqzc zr4Evjkos&_pSL;Qv^!J3!4Egm#f(D)DoIr;LELM2QS6pr1n$cQU8H-3Q&SZVm6|47 zfyW!n`DER%%ect6Wow0!71J)t`@9r;A4R>k2<cVvRkOs4e`stCcba{yMD#m@#L71( zk^mi;IT^Rktn}ki$bu<0-$-wExw-jGW-Y^hB}0y`?#jfox25Sbg1X-K$#iNn5lQQ@ ze%X9;XlICzS~BZ|z}oB;-<BDC7`8!<<&eoqCk2&z0vlL3vBWb79!X(w^7~GhuHM+3 z0`xMFEA%r`ZePFnW|Cd&un`&GB)4|~g-krsRpO*T8@lh4tJO-Muv4>ypPfCBiQm`z zEIFbJAXq}kXJQzv);N!b9_oX=2}8OUd-R<Dd?N%-u8KZc+}NIXaKIq)l<nq_w<|?^ z)PD{<S;K8XkI&lY!OQt?)BD&Xpzdt5LS6<n;HzNc+>D`C=HXOIR{xUwp;cMls<@p> z*ZN%s3>VkCJ^rN<@6j;CuoePf6g??cZ|0KLPmV!LSpVQu>(0^RQYHU|l)8Qlr990i zschl5R8*UChFBB#39i>&w8a5k;;PCBC@KhzKq(HhX72KbGBbo4G)d4;^pUK!WZMyM zSoUj`%O=6_Gy_>QRFYZ}B1UyyEW@LccM21IF?Mr=8ccj={3Po>&g<RKZ+j<*_IHf7 zmLfd7k}Wx4#3C;wr>OW_a>v8sf0kb)VAYrd+GvvxaB_)=T84wR$q=($yitfUi2dX> z|L42Z^{Fy!91T#%@mv(hXfyYKmp1T7@`~0oWb&`2<Z&t}2vmYvk+lfunM_lezRWL| z@+^aib^u#ltZ*=KBV2MKb5~{nN!u@o{)p-36iS<&pOPg3o>hU+*Z*niKW&{iuqbs# z@oS%%ACLmSG;q7bKa(}{r>*-orG3SWsZCy>d_<3;q}8MU)J?p-A>aQ=3G&6i^&NeM zP{5ZD7WiTKn+x`J0bF6%bZ_hD!;jCY)3U?3aa2^F7ndH>>|ut+O(ByUYUZL_3sIbA z<gjo>Hh2|d(fZ-{eHh1q{RuUy=ppfn7bqWEf;i9OwSihfVlHKGCVoN8NhUM>u4{dA zp?AbR)eVL`gZeOq%!OBykZ#ZU_AA=~A2pAa??who-QEukB^Rr7(W4AX9B;tQc_uaM zZgFu09j`z{8DMZf9ObuZdnS<44GEIU--1_BpKVyrp=O;72eh+=S1|~d;tXDn$J^56 zrk<7J>3G-#baMd4ebB_@Z$Co8Nh~9c%G_a|ObhWcXCbn)wL{yWz(#-NcX1O$<}z=! zA?<jks3dYq?4jfL7Fm`~S0cMW+LTRK4A%kU`RLFQT$49?_QxZmrr?y}o=Lm#scURS zQ(?BY-hiv5cLb0H&6D}aeOmwfecB1o3BY&h#zIsSl&*R1AesRDQG|Jh!7tneWr!LN zZn3_n`@LjW$7edCkHteQWBEL1*M;^xH=6cLgtwX99QCz^Q|er4f>s;52$n8T>1LS4 z8<Q_>zd_UDMs!Libu=~mbkcT$mWx>`JLT%>_-D&=Y;0W&qjF+3Tg%De#Pbh#L(vmn z#yLh`<Y!aY7<#F!L9%I$wO_^OBzM=%+GK-6QMB6MoMmavpg2*+*321RT3dWpmEXq7 z{;hlAZzYyK`V#u#?(or1Xh|qD)mSR~xFxji>V$LM+WT|d{F;YL3R@P)7i5xymp3JB z`zD&nrI{Pnd=ZNLa-(NiJW4SCJ`QlCI7WSJ``5ZSoG+J=H6w+(k#jhL;pI-fopM-a zuS&#|&sgCVJ6BP(=4~QK=Uj))#j;$ki$w|6lkFz950Xr>W+E3$hv;Wr-_eK81kZFy zyz_e0I8%$buD-ol`uF!1K3Hr!BlxyM&nBr9)Nj$87LURILUmKgsLpig;>3>rt&--n zkQ&%sfAuW=d_ps;KX6hOxm(_Libi{7ZV5w}vrN(B^Hxbph&$D&Q%i`{=AmSC$i@p_ zd>YPeT;COIH#pF#x9Jmd>#ooB19DJQ&To}N*wTuB;Mi^$Kc=<1F41KF_ATs))%wVf z@vPI2joV%S^etYz>w*hjf1()W6+3nU7CeuJ_{B~rv?Jxbc0zroLK3<uw{j`au@(v9 z1g<TfJId$!YZKl7RYth1)9-~>uLrw-5050y)1AZn-$DdGwy@R?;GJx`_|+BGGZJ}r zvBkf;7yU@!oAvAnjk^c;P9}Ig_zA@`P`gn0N#^|Uu{7vg82Cx(Es45tc&_B3u)ILn z9MDsZ^_Q|aBuC}q4AU76SEY3x@rht3cA>E%v!^tt=yX~Cz2}{=dylFJU7LKLCsD^? zT2w88099-*lF%3iI2F(C`hW<}zwe2&y&c0`AEQWZhS(j&y>AnsHBczwQ?WT?=tiR< zyU>0q0zsX`kObje1K^&4b2iKNQx`d|@xp`mq6@luaRZVKVy;oBeIS{eJ|<#a&+nAz z9^uW2+9=fK8C9$!${j6dgh(V02y{rU6*Bb)5$j1Ji~8-iy0=isva**L)9>^KmWs)Z zN{Bp&VQBBYl9=SKAaO{6s%HkdGlf4lC0_|k#|Ks(Vyu?0dAuNSqw6%lh(htj&<PS1 z*JO&xJ-v5k$X5iN{329A&H1MgriKITg^8K2VgI)v9S>k|FMYJ{RBjF+VFu&NkI)tl z1+FfHaV2CRe#?UOQ&K*+LQ~VU7~cWLHXZ6?lP&L+DMPpI^ih#67N@jOU^gRWD^oJp zZc5Mk2%AlT`dlI`<8)&Obb5Mqjb8LM%&SjYtW-Ynbb|M<Wnh*@0xBGpc<5xRoWuUY z5Pg4wTe8pG4T0o3e0JU4M3DT+LkV)-ys0~ZQUrRM>fF37^x~hl&zeQ$n$_f#-dQ_w z<ve;uz5TfCJ?e8Y4O;VY_}I*&^g9Bcgu=%gA-)TcF>CvmCAsCizh8CuEI;Dl3u!Yk zc*Z0tJ*Y50{J;q0pUy+>RwbXJ2V%4)(!Qe|4Lsh{-r>A|{Y)E$*tdwi?q~N%;t_4@ z(ppEd_t3;6^y?A4Ct~Ng@{Fe^=X<C%ukAaYH@^M%jp$NZv^R{e_z-9hD<b+_f|(yu zSnWQ58$C<<Alt+Cbgnt8cCtXr?v8hMaAtOKc+Tk_rx+0|*DFcTZmduVC{+vchWn4< zZI)|Ngp=`grYqFvJxb0^Qk{=pfbPQA?Jp%^aJ{cCVwsvB69rX6$B^xBchkpx9azCL z_Te)`M(PO4dP57SjJPp=pwdMdtp&Kxj}c*>dx{Dvp{m{PdCMd5jK!U^BhJG1P>)MN z7t1?Ci3SNx+5{l@&^Rv~i4Xzk!!vxA-vXs5r!nmuC{uxG=tL7sg-*M{2VVvhFHl3p zTxx`iZAi}uXNkdozaXjeSVc4iG?2ozJ4oZzT<*6y&rg2)hQ=I#l{Mu{Y5(&2Kcu}= zbY@Z4E*SHT?c|MZvtrw}SwSVK*tYGYqKa+Xso1uylm9>GjP7&ub@%9-J=Pria*e&$ zoa>Qste3Kc6&RZVm}_nZ3^-k>5BJ}V7~{9Rb6=g(EonGt)*gDI)C^YU7tx4u9=Pe` z=tf1`WX0#i&YYa`b=_J1q|7yi)>aX!X3Ph6CqmRXf4036=CYpQf}xxVikOOE7Z#*K zmAE!65t8vZ#5H%a;O$jrhWv_n7zYtEayWgX@l4h03n|F0sZuM*qd7U<;temBiv{cC z`6G&|f4bTssCo<5?JrD9XPOs>d-?0Y*!5>_i*C%Lb52B0O=f=iZ^AfA##WBYoqnmb zFEO>=7wZ<6_Z;a)LSoKD>|U_sBZC}{MMA9%HUw5aM=dOa%T)af24XKX6nFC><;{^z zWq>v85?5JDfU`d?b0^qH*Sws<;K_-|z3do$RP;|7xG|JhdEw6}$%4v*wtez+Z)R1P zDMX|qe|qXC`e0mG@*?_~xqn1NU6X;kB9M)$`#Wa$dL2i`v(9}!@px*HAH$BD^ISq# z2cuuEyB-f!<oZigOV}E)9v+?E?)wNmjq!q0nOXnTOBeg9Y){m~`qxh;^wWacqc}hQ z8+l#m)u<pQ009At{U<P=;r})AO2+!X@O+j3jpx^*>EcS~V=>SV6v5In(>FsS1K|)w zqtVDDPDFA!rV?7X-1fP|-Vqu3z)^)^UO~OkjsFQt$0J+Qf8+TZ>D;WFH`4}NF`(<i z_K38alfcMEIxP*dj`H0Mh^1o9RAZ4r1PsU!iIBU0ksJAw!{WroCdfB=L`Z{Y?)$ib z?xyaw*m6-=USznYILa=Y(U2midA)i3PTq{yyQP2=<<{}Mg+2iS2DVP2hLXaZFrJR1 z`6**om)5O=c*>jHNe{}yOT1lqCbiKx=RT|bh&IaUyD298HNI_d6g9*bl+p?H?bn?F zc&MhZP$Prj{DQK=pt>068Q1lplo-2pBh5sTlIcMI6}ap_yp_NEu5^^p#d&DvCX;p< zny{r8Iz8%sC$@1WUQVK^VLxHtizA1X9o~(K%9f4b$h7~WT2IS&Z!@KF!*2T8dyAc} zo}8FKc`B_7$X0&I^GIQf#aXC+s8h1h1|+kFhA3^px8$yKBls&fUT`GWJE$2n>Ht>6 zhwHNC8=Hm|xx_Btq2z30N>UFr_A#X4aSxqx?!oe(BoiSQx&sJ&r@h5b6TRjQ@~AG5 z6dzI3NVqryX?iCB))0#jK0(4>GMYp9AFz<<QVzygNRoo07}HXv@swS%eXrnHk|mb( zb8P@SgF&%nU-$@3=?;c?=rE)7{Yf$kG28oncH{QoNsEeZ(Eoz_5ls;ValTE(D*yk& z{r^Y0eX`n?3Z5GJr+wXMNKJ5p5P7khHl3WL8NKoX)E}6J5_=HXJi8Cq72SkjQ><T{ z)?e^jJdee!1Y7%qF@brk1l~8jg8esJWqYleihaltm;IejS-*X}-m>d0zTS^gOF@Q| zBKH9Lkwy(@Jo;BXYEgq$9wHHYG}Tg*q5y}X8_dm^9Z!62*|CFc?2>&S(wJY&1jE16 z!c8!poz@5Fsk{CH|L!(LAYm6Irr5ox0Crr=lYgW;NeASw)z~r{{H=ohmHt;vDv=34 zQA4BEMymCX>U+cia}k2hv**fz+vwjg*KYGuv+fd|t}+kL+Fjd8u0~wFLu?-Wc50@| zQiNgpGn<D=x$&jR5N!v2tYAG<`%6enZj(UY!3Ub=anIRb^zB*gzf_Z3$9rJ*1{0m* z^G6*o#i&P%Xj-`vLRz-%({IVv3=O%|?ps^6wsk<AXaFJZvwzx4TCAji3e7caG#~8u zq=R|vpi!PKe+%-A2;pfk*}cNZ5wO0=hEW(HpO`a!kMv(%U780^!4*arG60eO5(X2% z&*sCH2YMQHDS&*Fv<i*D+%@whQ%9WxKeY{)m>YYk{hQ13PkI$?T-?jC{ikc#d|QOV z9Tl&VU1tOXzY5KH!-ArK`!lMFGRvBpd?Pf`{cGPdyxk+e`QSzbqgU0Ly>YguXr{BS zJ;Ga?g#e@LB7r<>wU%b8^^60L6cg6_;<cy671C?DVT`t3vz+7izTI`@9~=ue<_ox; zC$jA^C-*S2Kiml!BTbNJj#inwYdS1tx6%tyks1{0cXiZGWt!w&nj_~pTCcFDmin@H z2+3nn2$F|%^GM=LHP8(HwE{e0)C-wFnLq5#JZ;jKk7?iyQkr_~JXwLigEqf{I4oBW z<?YjsloC5sGg9<g=Z>X4M)Qa=xI()UIp#%C*PZhw*ScVghnrf?U{PcL$b2epP4YY# zs=GnyzbWesYe6MDa@Od77--(rr>o&Yd*6>6x`%%fk*rz;&3LAeWxI+0Hr=<VAqqSL z)h_f`?r$|j05}pd&dalc1R_{G60H0wdgIN6xgf#s6S+6d6<YaWiZqLyba8&Ah&Q(E z&r;0i9p-OaV1jiclq~0RNpxW6ZVSEoAZZEAh&bO~K#H5ro9KKpJjS^gRVABk47493 z$_aZED;{hF(b+r62gFNoZ6pY<Y?8llmQjo4U-N@T9Fw{<?)%uI5GJa(OBN-;*o_k0 z)2yL$;ycy{>8FEdOCsk>71YJfe5(}_#HDa4?d{_Z?2M<0r@D&Qpj88gTf(kxXmYku zefrGaBiKHBU_OO8wmq`AC>S#N#^)h#4STJ^-i3QlP(xrt`Sd7!A=5!*B+8%OSpk2r zjkJL)8zS~Ad1)G-kpK0=X}eY~!-4<-;eh#1ryS>hKIQ)JDqphyF8(hU&uop~Ug#Pa zpA;(_>9$ZX@Ss*C#ccGM5Z_{s<bb3&`-Eb=0DEDCGOm?uTZ;7Tm8l7+y$bDF^{T6< zc6C~Tat?S~D)b0DZ?%PTwHrHc8*jnSo7jKO<`hPm0L8>DhpX)0)7)F!M>)ft9`}Ft zN<nP<d{2@4XbarQ^~nn~2C9^7hi%;5=~e9ac3hQk5vAR|(JQW@V4EXbNFzMlNs%0O zCpqtyvcE?^!cCeTyAEfjh~_;4X65@X&kiCY!z`pBV)yab>+4x6fsppJYp0YB9pT>u z0{#jSEfRgDWcUf!R<OD8*II`!_?gasgUIf@^!u>Lyp;O9Q7O_CQ)Whk`cY%9U(13R z^fkz2rMZT5o@9<w9J2%!BqgQX{R9;vxX6j;vSpvh-XInlbs*<Y@fgd&_LGdt)I+P6 zo2=nmc<jpLfezH-Q#k6OS;8Fgzu;gemEhg_FwPiJ*-JSTOl(n*FOKESU)@UA-V(ry zT<R)l8!Ko@i8~6Ln`6zLEb1J7{T`MR?MSEopsoX&o|TYp->%@+mlRV-$COaA3<y8F zdKBlCEJJ}tJ{C(PF_Y)hiVMU$(M^t^g)VoL@^9pl>194njs}mU6{J2xR7W>YAdoB= z9Uco|6|swKsL=q*)pJ?O=3|b9pAcb>Bc_`=&E&_7tyn9Lf1}Ho5Ofv9{TLo-@B@#q zT?9<7P#9YHA^eFPBHo_Sd5jac&@5!F7`OBgagxTg>ShqoU}FBu)2@qzIjj@lh0OL^ zd|WycyD&A*CGFNALEZKld7NKRFjowG>S3`D&_hAu+SQ__K=WN{rL)<mgJH_|(X1_9 zPNVHf>`Xd%vBDgxqG=Y_qXrx%9iDC+B7n7l#~sFDSMu$*WMIB!lmqPb84X?I3JfWm z%v}X7toQJ9O)(7Ss4$wQdVB2F=~>K2$I7#DkIwt7zY|A=h8XM@I#~z@tWXS4Yj(c= zkrpB$jbiuov$*Y2;8@*{xI?^AJ3Wqn`@94FR`2K1W3H&IJmniTZ~dbF?%J?)#YnuI z;jv6@XR>r17+0d-*x|(P@PgsGrIncQrYN5)WgD?tFotcnBRmtz#d7w<-FUwX4Ir6i z4aS<D58Z`d??Jtb4k_HQ;s_2iioPokp*<%@f!%%KhJ<a6JkysMa7;8P_IOD+ql?gD zgs64qDF=+JLdJ++<mD|Fsz!-bDNbk~f(B~)=O2V-Gf)1LC3QHw<N4L{`eRTX8bfcI zM(ok$Z<O0Q)!wg4#T;QG6}!Ib>GBlinYv9Hp7NNJhy(h*#~O2PmIS)D-zf-K82z<o zF1J%e>jWZrX36k&#fo)oI<u81^JCOdPOdxRH1jBn)XFI1$A`r(e!2}ZxV<Ir{9oxf z5`J16Z04?Eo4qLP<7yqRTILacHsxnMou2_?hT=nsA>=<U5-UW0PW*uhz9^{X?rp?e zR|iVhmf>=P+JHNR-4#*8n}=dlWV;0K{z*Xu9p59sGX7gH6WHWnMk)o-#5F9N34JUl zq{Wi#XJ2aDOlOuAfI|YImTy=Yd6h{3K{TIyjg6C0La+3W;+rwcRvPqpdv+vcuWxT} z$M?nD(j!71sJzLB+D^|d@#pF~yXBrQf|?_Od9#pf#mLisfDy2#b!*`RJyH859>TVv zL=T$DSaRAyDdvwm7o}Tjeq%%zuHpQMi6cJyg2MDWbs<w-`DjEB!)5A+*nHlmva$<r zGUu`KeSy!47=tXF>aV(NIJWbycT1^Q0Z*@Bp2SfB6yNw8jdzidz=S9rA&c76Ed5Dr zR*6N?)y|wU3mTDyE?Ju_mcNen<hus@GOKJ7GGd?><=!`-9d2uK9LgFtk6hr^&t3uc z9fzX#s`{EuW*m)yJoX`V7Lj4T@GZAmFQj=VeO_yvicR*VzCx!>jC%}-Gg<dX^1he1 zNA|w*H&NJIQJ1o*q%)4NTkQ?i5(EY+F8p17>J^rU-Ih4QknE*OzloktCuXpntk4Fw zLVa?5(X7`uEa?_J0Xy?B%)XPX&rdT{zja%17>iywx<bMtQS^hfgI22lH60{|HB|G% z)w*gOQx%0<6=8cI@Ck)cj&7=GN;*J_>q*tgZX9`X9hh7+q>>0*L}4X9rW$rT+@Up0 zyMI(+EDRQ4ER>r3RJdruuq(Y3e}kRCOB;A+$Dp&+sjY1a2!X?#(<lqjgp9Pzd=_qP zCm!4vff>e}mxqkzhqeh8Q4nki+4$=k-4!$eNeC<@D)}NH`a#+$;%PZGa~BZpKu(Go zx5F5`o3Vb?jzW$F6`n}gf!;?)po#F4@JmILI6%KkB!Cq7#a0_63V72g%jbW6{`-3w zSNuDpknL_KR3}y_3n!aZZ5H+o3I;ovkeF@~-G@#wO`pBX5zA?5rXwsk)<|m2i4O8| z*xB0g3Q#tzS4K|w=E8^7OZN1Kzkn;-X~SoTouHqk&z4^vS}ra1-%O3}cBLLlT(Cuj ztldwgS>yx#gF^kQOkAtNBFhY`jTM?RU{1rESz<QWj^ZACU+cNBzWSc29wT|wj$bIL zuC&12Rw5-bZdg?%{oc<LGIfN7q3RJpknv=?zvKDXgb<mVnz>L^)s!sI2b-S3*`_Rt zW7b5!f5Il+gMgKiuj_$fE5s28PlRx5k<chnriDUzsL?3akpP@;snFi-&r&4BRixbw zjE-L4U6FH;9pO$$$cPj${((M7WyrIxC`!&$8Ygq~nx)AcO7c8p!UzU!KDq=J7;RSh zEpUHB87nPpLBm)Nl%n|zKdJM<8QOR`IChlj3ZeQtglO&I+b?+Yi>{ydW6uXmZMpr1 zuw&`#6<Oe2@V~m4eLJa4qwfxe74<)LG2cNv|A{3nW99NcC-g}TtKVo#7(T-ZeA+`4 z*p3Bh$i_X99c79pJrwdCLXOw!fS@>z3r)iDz{VC<Qd~-MyF`w+IgTRwjbCjuLq+la zGbOzCbDbY39}9vrp$tdsIHR}j5T38pu|!+kPgDF)T}PcqT^9FKzMEd~LRg=K;;d6a zGeN_xFW8(!M~7(Ze7%#2>s|?&3Ql+EoC@Ra6aYvIpgZQY*fpR2_MsRKV{k1YW9W^Q zS4h=#$PL`oZKX!*i!My=FqZqdF1Eoys;L)u6jT=MF75lfHMT+jQtJy8=hptA&in2f z-y5%y7uJ!Pm%`8!`7^7vcA_HZPig+DAr)&1oZJQgf8u%ZukcDMskjg_h?2&nHlfFw zAVXkgZ9|lqbjzUIxRxi4KtU!ZcQD0+sd(d0sH)Wq&rV;mLam#keDjj3Z~rH0%3Ud1 zf+c!-yCI~re@r-?-VKrul_}CT4Ns5Kd}Kjr^%+)jMXHf*2qg`s2|!{m|39`VPGc+S z=^_nKlUYkq4fYwH93pGyORQ~+lsmcfHhV<4ZqORADZe(d*qs^)OA`qu<k3{l#P6dx zQe+gYhLl`s$Zv@=6;+1SM2@;xkDJY1flg;~kA==<1{YmSS9BzHWkK6;^Lu&{H(%a> z-XaQpv{qO8Dx0f>BGxl4Qk>ke$;lIS-RZ27$W(UB-E$7BKjGXtDM>YZ;#8M~yqD|f zg0VA$GZ%Khs<;C(&xe}p#nTE;JGgXl1mkW*VD)T(WtPn8T-a#14Yf5r)))zseL-@B zQUh$asDZ-eUi4KWO`#i4%>WE{!aB$(^O~UaK~UduCWY`YcDS~tCDIhQVp`)A2Gx<b zWR-)-$5shi-E40Wi2Jz07&(Y~pf@0$R(_H``T1I%eL^a{=3iRH+r)~bk`4EDGNFoq zVI*VXMVb*V0i$%S*4$1fg>+H+6V1h)eqjSGwTyIM75cZwF^0Zkky@MBqRJ2?j$ne~ zIP~AlJC`{(xEJbEZlFCqWO!x%pmT|N+KtHqVZKKvix1r%dxW7n`&+cjKjatZgggav zXK`WPvU)zK@OpUx1<1FWvOLHtIAcqdnHWUK>@eEp;3t~<Y@tbe`?l7V{z?4?<&;WO zk#3_h_$*YHDs<g}GnZ!ccZgUTcW@8bXih<1NSPK<!1Y~S04>)KT`G4pN(|jW1&nuq z!{~EsfWdYuoKG-a@Sp9aXM~&6E(36Ge)cM*^-qc_>f-I@7V#)5&7mvwj_6<L?}TV@ zpMHWg&uBWnLqSp9RL``Z6h`CGy>n0fV?KK-r40}Wi`88?MNzci=-K(&UVt?kMc&n~ zp;wVytmL9znlui2Ad;r$J+R<aEkQ|W>{V=(wS>RVIte9qk;h{A0wy1!{bgvWO>`1Z zV+;K1wkKjXcj}NOg&qQOtyEs2U33w&pZZd!PSY0XdJop#yZ5N1md?i`;O5scrYnya zF9=6gNm<cz)xw-26aOnVwL`;A=|n|7J9kM_l7~-&I&tYdEln-jXPf~dFzBWsW6Wxg z75^>I;zxw$ib+E{b6Ey1YeptZc9CPP+C7Z+ity$_I8R~$c8OLzR2_BS`ZmEn^B5Vb zoK;A2S3;Sm6V^w$Wl1iXk!mesyxO2LSx%Aou2cX7>=nwR{41p$s$1&a`UPKm_7UMx zt41Xj`Ih%_z7Hd@*mmI-V-J6=Oq{Wuhw7mA?e!qX%iZ;Gfj=Kut)(mBVr^MgD1Ic= z9n4TcKA&){C0DE?9quUU&-j#UBf-Y@fuGI&3W6HK%Te0v{?W_Aq`!=5KiHMRE-Z^Y z)?jAb?v0=?DPlcDv7sKWK!XN%WcrN3%7X^cpMwX<Aiir2_(<5e;6ZeV?>Z=GkS!>9 zP*l{BaV4T&gc1eEk?Nwf78I}wu|ssfzc^ei>~W21EpF^U><HP2D!%sDFgwWk7`TTS zzTp0$IgEPh`L6WEZX5HOT9Z$Sj4-o2L~d&xnV{p1LCE#B)x3sjCDy%NA(dxC(oi)3 zA+ajXwF+woO>#cK^dJtiv9bHh+HdHLDG1!O5v2m!iKwbR(49|o_657N-!N_yAySlj z!0J22<ew3)7W7uP5~YdgkmXZ1l_c*ovnPKHtTng0n?(Q^y31lgT2ETVpkZ^5DJ!<4 zTk^F4zEjqlB}cAyqhv*-*i{Yo1xc=ct#BuQh5PN|)Tm6_z$`GX9EiMS!$9nvBNVga zjuNJzs6t><vfu`eL!8^oBJ|9KJp#_P(;M~`06+3Wff#9bA6Fdr*saxnT|ppp9Au~C zD4K}o(2P3H@6B?E&u{tY%?I}lgwPE$or=GpXN<fFlz?Pwl*Nxnqd0}XuD(o~i0n*6 zk)Nx=O@#k)bOjw%UrY7k@SN<0PZbJy2Ijzb0W0bT?y-y(c8Ku3NC)PM;t=a0#^ERs z|KR+ur<B8gEmZbdHK0c9p+_ny<KplnhtR?<5y<wTjN@Xppd_2Y_me2&YVby^6o{QS zh5GD?V-u!L%>2%s{EGO<8F!&>TPWiin)k)lg>r~<DaS!p&Ls7rv@EJB*g|DC?7OzR zXj>X1XeT7sSoW8k){ODgGG^Vr!JK0A%Kj6@&Tt0IzdvOcI!enB1?7_Wa8_Tn$|t6k z*nM(nuHlOs857z%M6sUCK<UjLPK7GImB1vuO5kda)g13y$|8%eAXU?@rlej=N{oB` zOZg*AqBe706(h%58Pq{3kt1g7QzYjd5m4nNnP-=peVBw#^gC1I%WXmJS)k=P(WVSW zYaS!$=a1vdwWw;@LN9QO4fPGf6+w@-u(jZWxXXd~X0duV=&E`Wu~D&rG54S$Oe$8} zAj&LO2UCCTAv-#xan0#e=kzYeV{6^Ob3vr;D`6D>Y~&+p)PmWShZ^^@we$8=4R2Yp zUWxyiys~C|XO;im@>pa3r<Ujc13dA+<c87eD;j7T*k2n=Mj=dK(Pab0#>I3}Obk^r z1)88@mI2bp@OF)frn2IFvRSgoZC6!pwT-_ox@JSWmU9A<oKHojYfJgPZ)+9!OMQb% zk)*qMVMogMO)r04{qo)V*?rYMp3CX`g3;ss+y(LdCG^HJpeSKQ%%}y}<73S32{X5m z;qTp(U@`wDzrX42XW$Evka5DNBs<@|XU0MwAPW*55F;ZiLzS2QHeODGh@MwLeI+j< z2T0Cv_dDjJrYmQKjD~8Vq`>3FqcI=%b#jp!j|B4o+ON5CwmT`s_{evypj!2o)auEr zOzW*v@|UHpRx&054@P>8U{WfxXzJ4ZRtN*&QZ~eSTBkxB$Z|O8VFk2Oi-7nEd%2}b z3aG7wU|dh^AWYJHmZVU2y^9Hi0o8h)@Z#`2L_8<*jlwisBCIs9Us1j7qVViGBeg)* zQWc%)s@6Jdo~jIq*rsL{)gT4xKxtwNs}qnT<bN3RsNsJ+LZwP*?()u0T=HZl59icX z8(~I9($$(v3MBg8LU*l)<^b8|+0<%MrWQIdHd+iVKOgHtSXE@!IH23#+-&$HUq$4K z?6nq@cRx_bO>9tZqQWewFMv7q@S%0Qk`)oS+^p4vGcDN>I5#T;a?00FXEzP;i}$9Y zjmqM}19vR?J@Po2$Z@qeyf`UaxAwVKH2v#hD2!w7u#75H=PL~bl;BF^WMY%t^m6{D zRE1#`P8F*<-g9hF<z^iL8sE1Q+)y_`1SN4%OOEmbXDpjNnfu*QckVJnYb`?KaW{yY z*(?rtX^3q7ue?E)JUiKA--OMiZ@OhDO9nUH9)E|zL{NSOi$G84!ZZ~wXi*VM8Rq^S zWPB=Pfqzu&HFNB!7+h17!u6l1X?w_##~NNUTnl#rQ?D3CZ1rzX0hX@)pPR)gKPNHm zA8Anx#-E|K#-0&L8$?oRrfO!H68$x+yAA5WR@|lK_NiF>%`<0{=O4ah1CtCQt6_JX zJ#?x*^$QG>ND)q}+x~j|NJN~n>@&g$kQtTCm6_e(wz8&aeIp9^<cUhIbBmfpIXb@i zAs&^&QVDr^YbTYJxkv?Cqb#@HA?(dger_)(S=NXuaG0EePs_+It|N6wg#sZ7Mb>g! z<$80d&#;5dvq`FxyUMHz?D2qL1cn-85`V-w=`i#D?|tfmDcg3ah_A0O{Q*esy?Jdt zJlZ>S=6QX6y`)<jQ@93_$ETTmDxRZfGc`rZ`^3cm9*4o0G-D}|#=_mHFyAe0F7*aY zwvcQ!BP!e|LH#Ca$aMA`d#3;HagJ7lmu_~Iz?P;Cy72s`>|$?8kFjm6nZwc6(w1!7 zeK8x=nJIOYkU_|0i#GOT*Tjy6l%Jtb=Hr=F69MN_pfdeq%iI>UU;UJQHqBXAe{0%s zlbMTQCCzRD6Ah{?KNO*cCARNl8F87vI+{V`yl1L|VHk-@0yce>*S}zs8D@uQCrgOg zRjipUB4ON7>5QS+9Q~FmMNG5Q7vC&uYB7?IswQv#ih)QX7`$7=l$0tHSAR(FNAH!} zbdIyaG`GYy0P~GPapjC;9qt<})Yr<Z7*ZPiV}W16t*4S_V|PkYaRxWiK3u!$&#W42 z5(qvlPGPdY%@6pj2;<NnEPuCzfDRBYl)x67gb`NhsQS@M>f#wh`y+lE&%BQ|P`OZ| zZin0>N1}rTjCz+y>;mG{v$KnN!9cv9s$-bphbS_|PtBO_8>G+TUs*^?j-5i3)C1&| zS*=!H*~|hV1J+vLop%ttPRy!GI?%8WWV1rB_sSVwMU5!@NnD9=#1bdGB4&;$%1>xg zAL1W^FfUle&$#3-Jfrf)ycNZf<^EJwhM6^y7eZ(@efsTG8D*kw+hA_-=KfuGFiK}+ zk(@Pnzqg60LGdrP&6KDJ!(I6Nyj9sI*%HDJx#<^d$YbE1<eo*(v7CfN*AObvoZ>zS z?$xeK)I@pTkT&?)&I;0-I9@4sLdXif^Fi2dQk>$P6H+~VFfB1}@`PgVYV=M}Tu?C_ zVM3|-h}jY0)IK#*DZl<Z#}?>PY=Hm;0<r`DpAMS;2L<wfC42oJ3gk&ISTEJZ#b@rP z$%)ML4xunxqii7<5?I(ew10F$V6d=3#oGaiqog=#6G7>)nK~5<|H>O1wc#0BK=m5L zv_m1*wK41()opAVT~EpztJQSOP(F`3p3Dy?6HK2!yRV+!gnu4&{hH=KT6doIygL3n zh3}0HQX)f}bq&2vw}(jyvwrTEIy)>EnusgN2}-$dSc=wcJQGd=;H`yk=62$}9O=t$ zp@nB09B*mW9ilbun1c;;WaTty+S7QxqY3F;eO#8v`&f43?0%-<Tw1=dVe#4UU)tr& zV#5799+2$bN#L-}xz(^2?e?C6)*a2seZ%X{Dza`oe8qF4{+>hdwCwbkz~S4A;V7TC zrB!9fTlSuTQnt4}eTYBG87p>UeA0XU{MRlh-$>_`^Bp+FlgQ;q7_8nPd{^!_DzPhg zIGcODM^fUIOrY<y8|a>PaIM1oIT3@zoE=6Gdu_ove>Mu)GhBD=^xlf*>#yK=C54k) zx95a;GVkU!6w}?X_xJp{k{~znW=UQ%c6#lGQ{D^Ip?NQIqTd1MksQbOXkcq^T)qY3 zi+GRL%`4ge>fkVT{XIO?U~luR)$bYm>2pHmtFQB0L(FOaIW;MG{+vRfZ({1;e5a7| zkJs&8gTd|#dg3T_-D`iqcW=0rcn7-Gu=i^}07Gyb5|5LmyWV-PXI}mtY?|x35~N*- z(mR5V1QtFXOWntg^j)|Ko_AChW><&{yT=MkOFlo$wiKHfibpI4TQp6yS}$w(FZ9|V zaw#@V2)Cs>SO5OXAk1e`d^{o;(cpGrE9Vfy5KBPs`;Zydi>y<YUewVMSbJJeZm>MF z5<2%FnbJg5(y|zJcg}<y&YhNg$NW?z^{!WYnl;wEJLG)&7LF;lF@@li@sx!{ICnun zX6yRIp1A-ge2dn|B+#Cw_0Mie2E9!xopsiAkmkfBsxoVBQl_?N5kE1*X<DS2TWyxw zwVg6hX*!F;vA&N1*F#^0f$Iib8DUoTl}ep=5Vuwx^UU;y9HN4=(k%%2=P74<bL)6} zpT2=dCntJN<hJEw)62$AbzTG$t(CiervXB0GvvnSKgaeq>h&FJ2l!t}HX~!HZM+LS zr;~a@nshoHMty=0y2x}-A&sp~9{Sy!9UwnwG8$48)u6S*Q~e+GyW0vX3dInr-I||| z<?OwC_8zNTp*!DgI~s!4Iz?N`7=<Uy0@tqWRRTp3c`enI2oi-EKNd*<)N?P7tsiy= zlRJ4!TO1mANX&~#B&ZpT+xAuSW;DNCQT5C{lnrE6p?JZ1*?FjpMyww~c)TyOX(b~X z1haqq4Hc*j`8;+G3qRf^AZ%nkM|jqn@Ik=mhdEk;4zN3**VB=_J;?F%O>C~BJvMK- zmDA7F?%Legso>}?Ia!%BYPOIGY*#_cq5C&(4F22P3A9yQTWzFMj$Pf%s2YXBv<P&+ z6y=;Q@gM_Nlh0o<O?|O^4$dlQ8NR}Yu(q+H3o&^J?sXP`z!)$;Umem%R#r2HzR<+6 z3esm{2Md9ni@)6PC&dwYQl4EBfF!4yke#h0mhKT#ZdJyih1{1%|9Y2Tm?yFX8nkla zLQyYvkZFF3+eL<a?if1B8*LwS#~?{gvgfgXB!$_b(bhn|i`cuE`=@pyQ7kSX2Q#Xh zVviNGgU3+Y9?B*&DQ1V3T6$K#@eeMbFUvVuS9aQR<z2ivJs(PVGYPkznVy~{Gi0ed zT9pxb{ZA|CBnV5%;VBY|R78uVy0?Hji?_!e>Ii4tVFJS|i-A!nb6}?sk7!X$N%CKn zjcicCR_gioM(g&aex9v`qY`rWBH5KayM;xDW=myjw)C7^mO^CWW)F5d@nh*YLfCb@ zO|4DQ-!fgi7~j{zs^jg#)=a8h6iJu?-;Jq^2In!;pRs0te3epha3j&H`_WM*njohS z=RO;_UzM{xzi(W_ZBcF!>8~GPJLzWTkY~Wcj)4=wA1rla7Z&V|$RjDA+_QORPWf~U z34?<$5w(osijKMSheasfg5`O^UraCOK41!F5)yuTyz~>e#v)Nr5fuE2MI|I3%gk>t z(RD3BbB<$!lFcTcj8K6!WFlD0-%fKU90UJ;UNQ%<k8iA&zh%4%Xho#k4Rw`H9w+hz zT1yya-Y6!K;H(PFigPDNV=rKGbqU5>IiH7I!8zG-QGUh81tQ+J@@i{uK(@KSo0CpR zl5Y9n04?Ish6k46%}FXJ)|1UCXn}#~8WI!<EUi}o=`a{aEq)O9q{>QXvjv9Yr>Lc* z6ADBvEG3+LF?0AR@Fm5{nGuR>4oOpK*UJmR8K?mPcPb|eB#;h>E|C1EsEp8K_$uLw zL#P_t2=0k2H7yM4P=S}(m2q$#V1H?@aXGJgGvR>jee~L<J4&Jzc^#gKz*W(9x{iot zx+cY(Dwy2kxL^Ym&{-*|W?)l99#A;ImW<LP6eWbbyZrR_Rr`AiCU1(@U|_{SidbfF zqcSdC7PFy&kKfL0Nl_dq-enQfWvC|hRchK8K^?LnR@Tz}6IL;>NCsA`gJOWO6c?Og zH=nGGVt}TRxJ2)q2!E*Xmt*fNqD9?H1apac*V74n`kg`z&&-|!zL2i~D1yQn;Xtxa zj|c_+W9iWiwKFmjN;@y|re(xiRgrb|0HO8Wzh?Ym_3+U{N6-9jOk<#Vhk(KfjdLs9 zUfH;6AfZhQrTO}wm&ST|*i~)Zqhr0sIz{A~$MB`%K(=u%@N#$Q*L+0y%WrfiM*dw* zr(ED;BzOeZ2smfN)%Y%S#B=_0Jn#}r$Nj`J-h_6(9AAu&STY{pY*t$WMG#X^X@KO0 z*v<(<gLWscz5WM6Gqkn{xZSQ}%=3v5E!&Y{4A6&yFhNWdMMAWh&J*296<=kbe-|YP zG<-9TQ-v`f9Y2g)RU##wmP|scL$od#hdrT_PMypw*(rG+A-JOw!Q|B~m~K;Iv~u1K zYo$^KGd3QnLUCYk_lS(CC>w9d*Dq<15&b4e5$7$@wEZJV*c8C?A^(fXRMFfEgW-Gr zv{xB$x?#IIV2yYtm#6T5{ppwl^dZktb0mApDa?6h=bU!F!@IEs6nBx)6cx}a55Vt= ziM^*NxrL`96HDld{C;T1zxgfJLHC&#rZG?v@m%<vNT;tdaMlpaaRc?yIoj`AGG)+m zr*Zlo{rM^H`<2(-{Cu#MWI(l>3#5wtg?__$!(b=0Q~BV}kUD&ki|rQg01UR^=<r!G zZ(fqf_{>=r3l9fwQbrF$>E?$a4YW_Jg?>A5@mH*E7}<&22rbf!Z~TxJMiVqn{%n56 z&Q~p+#WlpeP-Sb|rP+pq)=kQ9eFg;I?5muXhA9k`CVf%w3hs6%LD1~7-n0Vc!xD?& zco@3Nn{F2{7YDgk)lk=|YXkSSxyBp0XA+<;ti-%Xrl@x5P9h;tUnYJ~w~QoM`P}M? zp>iq2lZ_Tgs%J@Dk~#q?o2skjFKH6w5~z#BH7cb<by)5+kEyBd<Il<3r>NwPU9Md0 zfMQH2&NUMuWC_cc6ew7p=%dtTqX`9)D{~-PxRTbC2UK&!)EXu<>CUO`lNS$YV|PWp z5p1Hk<&yma?R9Lr@wY`NwXP6qvC>j*6+@&7w6^&PU5@Hq0g*Mzy{=s8vSPS@wtrS? z6e-PFYT@?7`Q!qllPxD-*6}3x=YF0>A8p>P({9hguG1z-wwSykHt)k1hexQA$pJa3 zFld!w#i;(MW>iX=RaOk3=F?&=QO%*Bc!_1uDCz!XxSzodsKypZP#bCdGk)Y840gYk zZym$Gzgi8YreVW0vm!;yo>W4QeSF)T;8*e;R$@07g>O{?oJ1v}owH>@wTc0%IV#dl zoSQO|#Bns)s`KyDjZfc1MX`Lfbd&Gja|oqTny0-!9D<-(bC&n9P_MoYnJrkGCUjz$ zeoQUdsH6jJQ&(HUk$#-b;cvy|XHcnH5s{sy5JQ5+@}k=-ijbiCGFp_m4j5`Pgb9d| z(yIVMAKcXx7i7|fYm}%25>JpqjLjQzW}YyOv}cRHdaeGrE#zM=#PD#WjiVL}g#LkL zyf35{F$kehWme)hPP(|9fpeA6<UQN$Ici<)-v-w2yB-|y%*q}18U6mb%2S(47Jt^_ zc)ren;`$DfDdymZZXT3PA!XMw_1R-`&KjK|l<M}Hq0U=2!!SuqLO(;}bfMZqctzvt z(~VpC*eXJjT%YY4Nt=nQL7Zf!%rT&dnt6eP(R_nrMN<dZTyV^%Rnp5MgBQ`R1l+C; zHo7i8M50i*gAp8LmbUO;9Q|@>@$RxZ$n@S!xkcpnpmUg0AyIabk5HXQ5qkv>_CX?h zrGYQ7pl@p(%AI;aUvjaWkFT!$_$q@kDf=DIOEgFEdh&8K;l2A1t#$xV=EdYH1>?WT zBj#^z{6ae^l3*_{Yhx5-u1U=4#|>Hh!D%2QMZ$3te!?ZWxYF1byP&YKazcUMPdmgd zl<3nahWM9)M0{9JBsyK<qjAT_RV{N)$Mkrk?1f8L@Z1tG6w^<ijDQf`(I)%AMvGsD zq<E@)f#_t*IM$O?$Cen?_U{BoSFFgXVI{c&7gxhhcfP?z%?#lsFu{jQeql2HWImD| z{o8?>=Vg})7dsU_+gVrES0%$v7hV+Q4#gr{uoCIm(ep)n=J!3*7U^=Cw)zG^Lt2nx zdG~?GJ@XRvWbz?7WKo%Y3B06wL}^#{Dx^|K^Pu@^X4^ZV9Ft7c)cWxcIU1XyOM=U( zXL2J(7*7LSdOou<p6$C?VXz;Fzlzc`_=bxT6#xm7BZY!BI1iBN>c&^4D^(e7`xj&T zn(truvfAu~@tZE?;O`eOwA`EyjGIo%85P>n*?U(b*s4|1wP(zkb|%W^!>6uF5;|1` zTsKx8(LS~E0*x{ClR*O;d2AX;%Zs%YzvPFlqt~ALx(KA-%QGgMS6#mSQO-;xWGAGP zeMa_+>`l(o!U<D`s!?BWnoHiGLsN_t)vym|l1uQzLl`JK=q9J%^#fQhYR399S7YD8 zS1eT&?H)WWC(olsFhV@84vW~2xGW7G&zJWfni+1O(jy06^OSgx=j`2_Rkl!HgdA%b zi*7Tp9P5#dluDe6IpuMtffoT}A9}9ciM0PcY~aCNxE}pnS&tpa-c&SWlH@IEdbCb@ zu#c%pF-vxRD5CGw4Prs|{Wfn}t3+N@uKl@K*J1DKtZbG{;YMa5Yl|dTLb_l}b38F^ zb(V$D_HsJ-#qH%l_A-`w^-(ws9^H$fCt&c3SHN~Ww*_}+Juxzs-h7-~YyVXX9;3e@ za~tuK9qEAdP@CJT67E@hUhP?G{S1-9M^QN`M)wtCe9|UEo!&k#OZq0ny3_8$+R?Rr zEq4>ER3!f;VRfin+*`pF>Q&1@SNic(%@x6wmPX3tqKF#-w7V^_J6gTpQi7bKZ?ydA zy5(aa#O-hS@yWkkg6z%hDg6d}t=+}Bskp-^Xpgp$n)jW>O~l6Dv%8zrBdRF6$W1oO zo(E8ls=J7k^p~B~4l|<+t)r!*YQ)Nah)k$;JP1s7`V~Q_%Y+#rcJ#~KeV6p*Qe5|A zD>E&|H?PqZw5ju((U%v1krAi*Z{hlAyej1Sk2%WeuU8G}v|c`ETc$Z0`eB_42MxUi zsk7IN?{pQ}LE;x$o%Eg?&Zpg4Z?CUfqblkeJWh#~`~i#GltUq+2*_9bJ;$mkBKRln z{3MNj)KtsYTU4~_eB**anbD-2ezqsir}ZqW;*<-7#TPlSoxhT*)*4CPlv>Q_8JjDu zLhG7ZBC``EzF+=K!QiWljJZGx%C4k`2OVUdXIi$QW<1RM{P2$gW31k{N=iw57c7f= zNcc~Iz_!Nm3;4yx7pc|<V|5CLzD4dnL$r-kx8}>(R(Z0(^94dvt8gHFatifw2p&d6 z@j^pEc^<S5x{I?jY<GKFCj7N9<Pxb80T!pdwt^wNgh^MhgJS=soPBJUk`}=Yr53Q; zvH}UB$wlenK5K;+8|MB@MV&bpmu80KO~6McEzL_j=_OCT?y5CWS)yV?z<~8)P*=-Z zC@pT*v#jI{5Ak-#>=_&c=Jg4#0}jS_A?H)n_iuWRLFmoGw`pzB<MjOy0_p?E5Ec<A zodA^a2TB|vm`sNaeT-l9=RPz$gm1nZ#Bvz{BxV`}cz#-rL_hW`C*n|_ftBd2Qs370 z)qVIilKVKZhE#5V00C)x?<PWwt5cD@ogx0R6_6CC92{4&<%#1xv4pkl7r+G`;L?=f z(gN2DhbGrz%dE@sjMY)G<H<+^djk5+1%%*CE1E%=f-zl8<wHn;mMMav;*X1-QCtNF zM}7=bKLv=o<Ns7o!VmnxM*Zt2#MC%}tQ<s$sG()B851DWL=Jm0GA4!#v2ZRnN;ZRK zjLppaX1eDmK>V*Dz=WbS6gR^H$DSX|<aZCb;l_^+ZcsWw{yL|`c@c6_oeU6;&7ex^ z2s#v%9{?3jSxLckaX42NGz6CGBZv_oTKf20EOLw##?PF0HaeCeXDOTMc|Ym0lVBFX z<Wq$WrWfL<D0-m6KP{Tbx`j9&t%11)fO<74Z7eWT(MZaiHPqCnYf2)A983ktr}pTF z@)S;iT0<{7i>msCo~Z>$A_@E$G1iz=V`&c)7m;}nn<nUde!3?C6I!*umLt|gNU9-X z2NK3{K&vL`og?kUFzxZ3O%2FZNboZZU7vvvc}}o3Gr)SlMUzfDKZc3{MPHM~O{A&? zGbQ{iU!S#DJI-nfs_zAKq(&GJj5L}=H$w;2D{<{mGe?Kz1<0Lg$1!I2k}gEeOg8dr z-Bo@@dQbiLfWto-az4)_8#1jBs1kx^(L>rV^_ndIqw}%-gv~Z}XF&>^LS9HO8BnSq z{3*p^5yV(fLd!s*t^SjZQ}lv;P}QhxRF%>MqJ)6&jl)43Nj6r*$PV559&R-b2P5U! z?bc`DJR`&$73wvOefuA;kuFeCA7H7@Iq`4jFs_PF5(*y!ywcET8;8JA7tYWJbz6YI z@e))s1BOcgii;8Kj<m+F2aN>I7#Y6ZC_colIHu|r1f9GObI`B?s90sfn>L|C)5nUG zy#LRo-}rH;ZLB(&WPu~0jjb0#Q!1hzE+w&`I%u(|+{O^^$2!=VA(0m>VerE>;Lp;U zBPjKJusfk{5bL(FE(~5R#=1Lu!#4YN?^(W@%J50U4I03gp;tPqoH`3KWzUui+(PSt zsoaxgGOA*e%+Uw5waByR7p2j@m80Sje2Zd<D2zNNMs`3*9U7DPJo~3WE(%4R5y%I) zm+*We`9q0NdbwK*W3?Ojq2|xS$p&(+u;R{;faQ@9?vx<^RsGTd@zaDdx=2L2E6}l$ zh*)88A*2-s7ZDRAHrQPUvtZpUCadI85e|)IG-wS<01qnk5*dI84SI<JU`~!$ErYF! zI@E<8`)9?p<)2B7&&U2w3JJ&0`A0s999BkJh0$>VFuVf7e;7|SSlEQ>&ed3_Qx6k^ z=enia0v(~cWn%LSk)z3A4e?+NiOvsmZ}j`>-uu$Lk~$wXIAAq+JUfWXaE!unx`r_I z#8F~1!I4IIO+9WM=x*BrEm1X>18;^{guya5%q>}2=NK77mm#)kAp+<{TbOCV7gS36 zCZt}|g~2TB=`{jj>J9$cj$2VI5BQ=+ysLkX$awH(est0ma1doLsDzn=_IAmX|00TF z%lc-ZFrRwegr`CBRqBAyh-Z{24cZoraWF&L8uVChP)rH&^BQM)rYzTua0&U!U4gK3 z@=0?>`==FVLLJ7_Yp={v8`SOQC#**T9i2o@3V*-+X;IC<^^c~F=_Nm-Ock(hMM_d0 zU$A#1f`~kTX~2)TQm2(TTejaJ5f+R9ctg1ZLX~A<341gw<2B;9t10|1OD<k%03~Id za9#3oOLHmSfeY_#X^Cl&{W~W3qRz`0VraeMq$m?1G!x_&q?Vs-{Z2JPDSnG?xOHau zUMUb2GCO4a@rfX#h=s?gZ5FUBP7|nj{nj|4acLn#1&iPV;0Mz!Ti3+t60|nP4Q*s_ zjX8zM+D7?qDj8u7Y=?!MgFs~+I8{49c@^HOE0x27k*)k5Q)T!a0%M|u94t==Ej2}u z4scrr$AEz7N|LjSLf}$?vx`H3@O#Z5u=yvJDCix|Ms=fUt_I4|9lGL>;F4+-!CDFM z(hWU4p6E5uJZfxTFmgu_Va}<-)*k%cUxnV>1<h;q)dl!Xov|Tq+?IV>%{yXxIe=0V zi(1p}2)-WOZYXHf0sS}V_f5Ma(Iyo1wLF*Pzqb#|1hWY1*nXu+R!vx+B=ZgRT`MiR zIrbeU{OXmL&$R5VbkieT#7SYndB8{x!y|oy6U52&cPOT7-8CAMcJp;S*H~HeBN|3^ zk+n=rV4^Hr5l$P4q)$na6z3)r&U0B=5F^W`SYD*57jk9mnu`-r!~qO=n(s48apO}W zvw&gws<p|GHoV2i+R1EY6f=DD7}qOZs-Nv|t`I>9o6qoW58Ij!aoTXu+Xvg&h1Pv4 zTMO4slCl*kOk97xq#J?=wOEcSFYlQF5ud0~uZbmE3H&9_a2Zx&l#|c_O?-#AYaB9) zgl+f<QwA9csKf)$r2BnrtA&1w05lT_$^>0_K&!MLTG%ZF-MNiZszpu9@Ncbk(Fn8G z-B&UvF(|T}^U#5!uIA%0fFxgHj_Cb6NaP#E&B1rIgcM$@IfoVg*HmaXSYOf+WtdFb zi6xpj{O5%#M9<g`1<vG^Tq&<Qc(hw(kXcX>eknHhtqjCf-ctMMo_=Gf?H7}7b~`Va z!G*sKgytoq`LDM|IGdaYD{P{N#n7EIlopOBJS7RQY$&>o>CflaJw^2bSI=#zA5)9T zY-gFTbo1zqc=nYwIGqk^BjQ(U7;XYU%{U8QMCV)Efo-`rBWcv8D@V~9v2F7h!sa3- zGNMonkDpc$UF}4eN28%T|G?w=V;3TOo*qlK*ZQCLVb0CGnv1vVzdd{S-i%tj1?i^i z(PVy|e+LIS9f6J<O5pOu1-KBAHcD()-%D1BGcY;S{fq9|_~W(FPjx^0+xbdHJYP<g zw8oc_PBO#Y@6O8P*^tvK7ve3@{+Y!2w(#Dv#VS%L>u<VJ7h%}mrxS#avGHh7Ns-G> zPJHRz-5=oUW^JKpCzz?0&%V~Jf`@QOBGipphF|e;bAn3Pz63*kc#1;lS{NsG2v$!} zbEgb*XBXF)IRDm?1V0mn-+0kez91QUf183{sl0)DArdLiy`v0fA&p9WWqKVBYl7z* zf_p{qZg-<^3l2N<!orPEj*=;CGjj#U_Fz5B{A_gS)8d1*2ogfaOcG_#9-wN7fVD(( zrHT}H3DY}9*HDt4ess&Xmr<(6Xut8IaaKB$>p!twSjhBeZFElA5Z7i>FVogG4E_rP zYoWw#8+djNF_ljy8lrP8k`;N^Q_cNx6UTnemZW^2>j}k>;M5fbZ>q~x?P7dFUB&|` zBj3xyaxJE5h5bwejFWpAiqw5i2>CpR;ZrqYM(vOcUX(llVsMaJMJjsyDYZZ;Cw~y7 zQ{EY=Ck#zUAmj?z?`lKIp)knjKTs-PBi$x8J<@8K#vsVF1w5DGEdK)^F6iL^*W>^d zw1rCfy&X?gV+*n-*AtuJf5CsPiN0(P!YkVoo9R!$e|<+)BLZ#yvajTErwHMrv@_w1 z`|_cFY4zs~4MWRA3&lMlv$So;JvgDX=C=~?`d(jCS(=?bnh(w2AOY<|jjd|Y!1X|2 z98)N7+KN)y)4P&a%b27B+GjHOdgV;|mTu$Pi}T$aX`gas20q-pKa|5Wqa6#*DiB&( zD*?Q}%zkWGmnt953JNhKSao(mQLG*=^anh7vVgRG^R8q|0_q^%D8=KprnI}Bqo5fJ zQldA0>HV%&UAzYMez!>N3tE=wqf!(HU2i@Yj-F-+JGx+o6P&*AYA0mrF5%q8Z>b8T zZCO6q*Ehh_kj2RzWLBZpAOp?s%zW62nha0&ns_F3#aBsboJMpnW^3vNlQ(2-1%;IQ z8>x$e0pSW>=>s=VEolM5zQKk1S!pE2Rz0B<7I25spY48hW+a=U->)(DW{b4@{bgXF zb!NS=9Wk|g{*V{Sm{lIw;+~o6ntwt%MzMZ68NpJ@|45rVmohaNuib>XUkg{8S{tI+ zU-1m+tjSlME;gWxF7*&;yqorj3%(1lfMkNe>a)}>k{T;6j0pay702ZdDnD+v;uqfA z1OrB@_(SQ&Q>@j9*GF%anB$!#&Oub3kgq*2NLu37juO`{6ZcZ`q@Zq?O79*w*x*+d zt1YH0nhz_Q?@4o2<m-yH<rP*kE7CwobNClUlHAT|EnD`L4KUHPtoF1(EtT|IvZu)o zwL~y+JO#u*L^D^*WSVLv6gM|5k)6qK%Xf*fFK0N^91z<nMv`97eR$gjil7O6ak==w zEJC{H`&(!GTf0l$Q@I;5yH+6j*>b~RQWJ`(%#ZG9qmF)SYk_iZxmHn;`H^WOgDtbf zb-lzab!46slNctD&RwNgJckqRMJY&k(<7oh9=O>uo`tLw;5^f&^25>eP}vlLQ^b8; zaeVGh4s$FT)PW7F5DofZkN&uB3V?PG8J}he9pPNjiN$}{*zpZIa}n0(w;Gfz3=!F% zh&{+3C)A#vr`7r+1g!CRrOC1HtPJs4GNjGaO{}g^+!RcSKzYvhF3m5=#m%5q_b_#o zyJ_SL+nCv=!I=yMBXL|2$+CR{W>rK249VqctyB#~a>)1Y#&%5cNJhr7MC;-MWrF=3 zCC@D>D4!@pq9KWErNSquu0Ic(gHPAqg-=qIPga#rTbfsQnpdKgzgYh9VqAnL8!!G( z?!l+Cj|-3(1jI?{KXDJ3{xh%te;exmACl-nZD=pm!GD4l;}=ht6v!jxJy1+!4G4MR zbYX@tWEnz5(zSG>6k3vQB5oqJZv&ec@Wf$Z1;)V=#APtXVwIX8xd8<N?bEjq@weHn zPxf`0wi#P*U8&!C#EGomhe==D&gO@GF(#SKAU)KWVgVS}fgplo*J$rDLAg6v;e_3F zI}UvBnMyub+j$V7+en~@@Ykgv5)fQ8J<Omn@GxKnewd(DVBZ@lGeW|MB4vssC6wM6 z;aBdL;fDyC4MqW*MrTL~$_t+cG{gdJhfAZ$lj%V--M$gUQRuTT!fS_L4#c^Kj^E*g z-AEfE<cB;TG;x3p=|Q^hNn9b#=6{t`jKpCvH#YcpMrq`W-?JwK8&Vi5H;L*P=NAZx z58R>tAEdowlxI!zE!bt-wr#u1wry8+nO(MR+qQpYcG<RV^wjgd|9jWm5A)2LHD|5- zbk51l4-v5<BV+IFP93`nd<5x^ZH!5sm)Z<SE83k*o+rcgH<#c<7Kd^tw|4TtrR#T} zL~(?TG41wdFBa@;1m(?ifmt0Sh8o#*2a5FI6%RP&^skpU>GlSqfa25~pyE{RbJAQ_ z@3XWyat1Po<W%mvUpesxVlcQ227Uw08tU*_E&SQ11oT<OBQ(HFYaXKpiMiv*4q_MM zmkg{1g^9{YYREQ?Rwve1=Z6G-^$HuT1#}F>sXq+XrqCCe){6n-9`2XQJZH+R7o%P` zk_`M6P1O<MNQ-=91yqZ4qjj|F0^B8G>Ax)P4ze{Gv_-lzRn;xprw#T^XS)v8CDO;^ zp)<L!%exib2ZsO(5|0GA6g5c&*|MQfPSCH23Hdg%s5W)CEOR$iK`QmjuxwDBYe*f% zz&Oz&QU!DX@)IWTE3C9@7=t!i<z<3cl`Q8@BAEj5Ry~-{*hlpX`0OyGq9V)?GXN7h z10<*+YCu7@-CXT5i_1T(bdb<%av9~bU+MQ$of>Bd+Vs=Zy$7{V|F4-r30Xo7ej70- zr6Xrh*gv&Dgy`XdDrtORM&dOmE6pYkRFehvL{9K3IS{js5yXVqVE8VIL%CFb;tfx2 z{B)o=GK)eX=}F)kw4|cIk+VZk8?>pdfl7)C=FIS2C>heQ0yUE<D;dWa(^lB4jR6%F z$_Tti;>PiAju$L8@A?{0m#l4j_0@Nw42x5hK=d>-f0d#JM+!<#7U8}3*$wM$>SD)y zdZ_@x4`jJWuV|II;05)~=_OVeFv^)v_>l-eWFEpqT@I@FWQ+F`koonpW_6cYtZrsa z7*$aYy(q)3fn~Lr3`sFqApHlN7=~{MRdgIaKq@zMC(5y#5izE2N9BF|6IRA541gRq zNb=KQ`GrzpQrdI7@zR8J7&$0WYeLe9DABej;}`NOl@PxYXNAjtx@Zy)R&{@VX$FG? zJmaD6Uh3|^*@+TvBH<N)2m2hUD8Gy(U@eR*F?F7l8nE8{V`b713V88rwW8-D!h4Zh zu*vDp9U=BvNwQ=rbcD<kPG@|d8GoyQFLdPHf*`-!f8>z2Ca*hc<lRFjoKO~aaVhC# z1Qc^JJ2R=#fAS}o+5kw>Z!=<8S_*tKq%rjyARW;=RBuFenj38Xq8&gRI8k$PklGEB zjx1NaTu%D0jh;EBXNM(YRqG%xF&Q|X*b#9wZ`ftxtThuUPS@$1y55F{w8bRydn#es zBP>ZIj#WaoOs=Le85X?nUX&&?C#THG$9hwHwJ=VgdWH<iQ*@f*VSTg=44(9H-HZ3M za=L+4P>+xdz3_dRIV#d_bz19o0c3kO)iU-`*CilF9U!y(`VVo^qigI5eM#wIzQ9EW z<|(Xa@&g)MVd(dxR}XKUeu^8(aTl;$qt_=^evx$^p{gBjof&GBLvULFTz(0z{YhxF zkVtzf4#dOwEUALZ80;S$j-|Yw`Utqbcq`$MCgz!PL-=~J)~#V$wVUfU{}FC5jy-a) z^Qnhi^a>Y<&o3o6(t{dE)szk&q1G!?!V^6S={a2?Yr1H)=77vwO|V?RF%o&vu}sB{ zD6E*iY4o;w$Dd1mM1!G<ULM>63|5AVoWo~`&EhX9fmulhszZ1zec`}Ye~I8sE11)q zYk06v5Gq1hnwRuu|8b=jmDU}Yi+a_5Ti8<!M;=vlFny!I)LS%sebu-nUQ;Qaar9&) zZ{2>p7jQg^Ij6M0psl^Lj+?9@wLIC=6xs7m&J*G|ZJm!z<W2KVkV)ClJ>m954;K3i zesR-?_npzCwH3uSnTKxg8$#JUQ`w5x6~%Aq<(UgvOcQtof}rCxVX3Qs*`@UX^eI5( zZXLC5p2Y#zJDsrA&!`*0*Y_{}0R(&ED(+|-(OxTB>_+BGxpQ#>7w{p(VlQ*37Xe;K z;I1~($~VRvgZl!g8=>!LA5p*}YQED;(T2t4Q9#_>hIp_Pv_W(!%H&^u|Db7jeT#Pl zZb^c!N{nakRt8xrHhx=rnR>{dA6jq3#+h`WsP=!1S%(V1Ew+n>S_r7z;C!T@TfbE~ zbFWy~eFhz|$68G8USk*5s6)6l#jvn=rfrGOceTG;dCCDMoO1)V8`1U&{euED7o@4a z1nPWP<~1-4satH~Gg7cCiB*nb;zc+Nk%fi=!@ohd!Y3#K9OOco(@BLaRQ4VpsR07} z4A5T@z4hZo3?PMC6k3e_27~gUY+6j4+P%ni#b5T^z|6t8RHP(`f)Fy#8yX)bA$phC zpnuN3bo&F{!(#Hun}%KY;4$k$0+OA*r02U0zEYH<$;N)+4*%XUWbgf{KiAaB`W$pc zeH0P<TNe)+g4hOw<@F@1XeZYucB}w7UXP9Ni-FHvtb?IjX=Hh7AvC-)E!@P+=DSst zSAOP}5mD*k^_UGQZ%2_=jDiU)b{~HTxC(kDO@g`}ofHWjrqYxDS3M0>Taa%(+3dMo zEmOqdPjq{}p>8wL1`Rs)A){7@u3&ZA08tfMWS%h>sTr!G&+tF7M(A?Nw9H<~Svf56 zH&H$!qUBR4Dv2y1rQaG}iC7d(-V1q^R$g+LkUs0bWlMoq+nl0u+1B-iGhJs=82CJ3 zKFFGrvYT?7uIW)q`&Lx<(V86gOMJ?zd9eK#nPEihUOz*mM0gmANIS92CCi4dsUDah znqE5PvKmg%LeB8A1tUJ$RQ(+^wgZ%zk$*St3`a9eXDSTVWYW<TSIQknP5w-k;gWGc zeFYeP!e=Rrp>mf;;|P?uIV?1FK|xZGtFfd{mI4S;6rE8dC5w33i1Lgn;yJL3?RCf> zrYs%<1wY_4VuGMW?myYudl)^)5R=e`IcTiK%zzA!a<$Kmmxf=hP3qt)2Aag3BFDK- z<<eY+ZL9nfS)c6?2yBN+yukX2^$F8zk9B5Jng)FdkVj&u$7#}%)LD`IIfDP-(Gcxj zzK4-wWtI|A7B0@f!Zm8hIrN-a2{d{Mb`IF$hf3~BVzpOyqZ8+!D5Vxk=GC4)q}*7( zHAf##pR6#r!%{wB1x5VsiXtYcZuR@RtyBhPz9br!HMIf8SdUQMOCD4v;>e@7p;)+t zHI^yHt<D{W>ao(7T_M0D(^)S>y8BDg6KytKZ_2{t`Evnd-2(k;wmMk5m`nLF@M1;F zwf;gD$?EcDdI?6>sdY$1I#`nZx(18x*kZmm&xlY*XTP)obCxe{tI0XTbbuCFQ3CO; zl|-(46)^fUzrGR`G*G3I+Gm%sQ@~02UJNakK%64vDX2%NDBM(t>Rm|%-GHsJOP6Yi zl1PZSDR6*T|MqWzq<lkBNKpFR%@|SPVUcAUetP(PC!e<pn&d>%$upd<l%B7Uoguz1 zXBckpV(!-L-1@=1i(|pz^42Nc0w(hurMFg_B$>*9Bh5mJq2L;2Nncx<g74W-p<i`C zP;#N*UtbigVtvQ7B4BbV9%C`>W)j!c!}(#IgGzGD1S7NTa*knOdiGv_1Q|#t8iEfn zCl{sfd&t4FDBni}2>QFmGnGGQW~dgNaW3JB$oH|pym$=5uNaJo0iKDAZ;E8I<9Kl= zgmV$P4SJR&NW>Xzjm3p3Ns*Ti7hYO+lp5%H-E6gVg3`{zT6YQ5g{8C#r_VC?s;WoB z37SN9()IDdo|FY0@?$4;#NQf%7aYda4Y2{91ak&lRe3bGpFadS1fH_9b1E$k@>A?4 z48AemH&~yKfe#1HM$lCyrACZ>A~%e6UXR%BgJ~D|5X7WFq}dw`t4auJFtou%zUO^v z5Ko>vv<6;X+w41V1&AUW&|S+{4Yr!lk?&-YnSyir57H?(ol?f?wii~>y5h#mt1Gfr z7vvnSJZ!E!9IndPow^0O>-(8`m8njvRe|S(ixb)nU>N!kHO+lG`Vt5u01W;lkx%;C zY!?fp=-(hZH$R%yfws7VPkape8uTr^DNLq_Y;IUFKOUg1U<_`g^%Z&W<ThQYnw>m- z`F!DTZLi(-->w$$Z%V4m@?4j1l2h@EpZd%5SvnOudnS1*!(J}w`Co&$IUS)sOs3G6 z`Z!qmB?+z@>u>R~-R4K^*H>R$u-%qN7#wVL<oEI4UZ`@S35x5r3AP#PZjrG|PxrO6 z--6D={wP!E94(knQV26-D;zGACL!gw%B7v6Vi__c$t^*d^N@*Q$_6=S@3@RdF$O{U zI18638wTb49Q^}TE|-jy5EfUC;$E6UR|FZ$bRvWUF`O&bD?DHfUVNtfV~HdwgF|7! z7nJY?Xb|yp3nGplJkD$GnnG%az*0;7EnAGsTpw&Yt*DXjs-Wp2QUT!;v8zDZ8;!g3 z;ymy7ogX)*1_FL|DD!|AR{UYI&K%87LA?q@AZ$;+B0sqg8?4jnMPN5`YIPCiPfakN zoNr+S_5mvTc6d1#<fB!3?FivUx#~dN+AfKHwh;j>5D*<BysRTtopGAHjwDaah#P8) zsI%%oLu*0iaJ|(bJ{UkLQ=(3R^cH04a(`HP)9_nnM#2o?Zpct6d8~;~3Aaa5z7of> z!)8nH{BGP|`<*(3El_j#<YmDKb<-oVSi6O6YU}4Mh-~LydR>y-AsYs@<L1^>TD&1v zupwHgA};ahq4`I1m?2ukuy6(H(EtTmGSm^o2)%ML%#j9uk92(qFz^zq^E7IvH1-`) zKWz8#soOPBbEeU=9UBm}^l};<D<c)u!hn<gmH~Gu(AP!KT4O?$7aKOw=um}le}!n_ zGFl}#$VXN>a_@y8iHfN>6<E^celG4bR<8i*RY(-=i7`ntIXMdng<>*B54_2-zkG~b zeBo#*gIbNGYFbi8da*wQRw|)ZV^GDtL7UPbISY{fpmXgJ?>KO2fM(HCMEW%n0mlqO zV*Z3yx`(tVM-8O9i~*XsQYj{CZeCK>zI10T!Jg&hP-HD(iyVGfv5<L>EqRLSO;}?o z?8{j;v&yv}@YGu`xApVr|BW#DSI%nYg{B-2#lJ<FhaMbH+P1oImeI8xMw4<)LL>e9 zB%YA&ENf=N+l*;ny1<4>J8duqsJPm2FBWa~ExnJEm`h8L_{>yu5*H+0WARW11c@ds zK`>G(3r}GnMin`gu5|PkQ;G?5ToJZdlo=5B<m$=Cv(&&<pQ4%(NKGCX)4LizC3BXR zZlfw`qe?ZUmYn3S8eVQ<#<(=8P?f%T<cG(v#l+GMVwTX<p49Xf-^_6sYv(G97nHu) zFpVE>$RQWpa-8p)u}CIc73zT=HpM2QATlt$%raABz6DG|YTcL96&Jm)v|oU(Zd8hC zKAJ4+;8;bII%t|(Lq+2Xmok*v->$c+5z(#Np!i%+Lp`N~W~`f>*_q*8eubO3G^kIX z-<z6F!$7`!w)-n6h)R5UhP!QmX01Wf#-?b%p@&@C3U)F%`hzOLHu>~!d(Y?lMtn?l zjeauaU9?)~C$;iuLS<sDAz%7q4O>-oz?7NZNDDvBx~?)Qg?c?SdSm9uqr|co&sfP9 z9Hh2kn>q_umd+{l&WZ3!-l<sQ!j=jI2gSA#yz>t`HV9R-%-YRH*bdR-P4r@=f)N8u z<Gh}9b;dk9`5t4G4NZthm&vO+rnXL~gy)k5FPw76ZJZQV*HqV?iGhaUD<8a<h96yY zLra?};O!fFS3jQ74kB;{>Gs%1RZW{4*OJ$&&*UC$M;Di@aGIy$&eKkBc&G_6Y%U6; zK9#fNQ}r=M9e|yKQOcL$HvZtfi6CG?S~@^KfHFJ;@Sea8IWSN9Ia3DmGh#6BAdd!F z=QC^oeHw60xr2iDd1f?&@!oKo^y4sMZut|Xi0`O$sF`cCi^LpqVOp&M=}oLNPTo<$ zwqArHrCjg8PV^cS9TG-0;0Cf(Ll#!yM%7m^F0Db`Rd43^ac8aZa;|GZ1}`B-wbBO| zoufF!JX%_D^nsp>rP*u(D_7M5RL*f2r#c`?v;~5(mIw?=9w|7tJu&I)@Izs2abIkx zCmXoRW&N48-O^-FlGi<jf^88&ZA1)WreKm=yvrK0!JKT51*2`LgKQfKjXDF?&JA-e z+0*Q`5nycX`$SvpcZ_%jL|u{S>n9xA`LJs0+yZGX`F5zi^fgSL`xc*U+J=3(b*u>_ zZSi&N1t9F|auGPzXm-iH5bf$2{IoAq2W+2kc3t16>Q;I%uNoMFJ1-IX`JOHpu7b#( zbn6y+Fj7`y2Y%6`sX44V2yn!#QPm~zVBjCn`z>zRxQA5+v2A#}2X%ttAJ%-cnc*1F zxv@06^`UG)yC-PF$U8pXuwLGsx1}2LwSs(2UxvVK=#?GA_uVH6WwzJuYF@dy$MAq^ zx9#5m*AA#{0j<B%-yr`+?wWk|SAXHP8tJ$GFmcb$h2nXcFr@fR&^2Zs()!}F;0ttp zqu)>e1>v4607`HZx=Ydz-w6iw1SwgkE)g92Z5J*83gO=`DwxpkLG^X|lzub8;SPeF z7(IyNJJR{UJ?O$W(F!oz(CU3|1JG8>eFy`IH-&XTzR0eCnSt7y$TZO2i1Y>cfbBsd z2Ze_LA|`|{#F2sAJy1?!x!}URR|lB~fMb2Y8ud>{BCSE|Kh*SMneH6F_M{GmLKP5~ z3n}dcRW|}8_t+N(FHaD+MN8XY5{J51BtNiuBDamyZ_Q=U5DKIlcAye6*JOAl#|P|` z;9XNo3biw0E$4Jsl-Fb~VOF%)LVSvr8AaBD)8`;o<kw<9iy0jK9{Avsd_`j)c$$Cj z5w3;=nj(dcexs3BgSi@T<P+x|%XlHX@7%3shIa3Gd3Ae`#7ATIu<qEc^he_FaMEac zLkkb(8RfS^jSuaa^uM5B4hr2<ym4XB;3Jd#IpxL%oRV;}^0LBFl4m(Jv0{~zBso>n zgO90;Id#*cS(3D}$~Po0k$L4c!;fhgcEH9n7kvFNs0j?i@2FC!xAXL0;U|)}>xExY zKq|r-Rj~rC%&QbTjU-$Qo7W(YE7CF58W{^>`m|g~=@mxygqvX*lt>oz0x&95cTLY0 z-P=8J^zyg-e=Dc%tDaHo6!Ax^SDxQ!HRIPRx9-86$#seP;Ml8d4`nX+xHrCGZB^h8 zt~U|6cd|#U0e6Y;;9Sp<?`*DlxW~Ez(a%yll&b|#G)3O>Un=S3>xMpCbL>mmV)5tE zjX*RnwrOccB3R?xGTE}!%;o^ZoA6%BT2Pj)a`*RR^j?CDNt<6^iuP%}hnawuxybiD zM`Sj3Zj8GNfzNRp9Se<t?0)G4&2ZQB9pkp{+{dinfQ>+JoUQmXaJ%lhj`(_y-O}}3 zyx{9Q;tr^1yLwMi?VL{wwE?(Lw;fUxe#6_jO%HKo8+xyMVD;?l1YL7q_dRDt-ufIX zee}IT`kr{hy76%A;2*1PoO^=^xcY|ub?^<z<?J1i&xUZ+PXK$SD1XsZqV~;MfI+B> zy<CE>2-hv+7l4lS7e;eotO_0xD$!bl$?>BQ%8&Q};RTZqlxTLR-~~AsETGP`zfp{C zQquj)^XTc1!v2Ryq*<2Z&{72t&VzbUR3yi2GcXX&V+oLEGFmv^v7Xd`Kh0*glA5Wc zQsEYY8ceOL?^7f7IGtpE9SPz>Rq%;>U`V2?PF9ieo{!HSD8uF$!jwv#W>_xFHd&{# z@0G@ltI`RJhpkE{5*lcgnhzM88i~sf)b@W3fxj}9VR2TV`<RWBNv_$5Bc=`0l3yHa z$~jB0<Wr@X_w2`S);p135||)Wj$TKY>Axpb24ktlX#M#;#H%q7{uyG`sSO27(p-w? zLr{w6<rRlG++{h%SlolUis!|risy%u7Gk5Pvr%zRfbZ?EilrXY-2hA6@ut~yCHDq1 z4Qm&VXVK8??{X)y<5W2FOJ3T%5tY-=BZ$88jhC7w@a|uB9%*ap%JE~`pP#b!dnYy> z7dSOTzhuRPtP3vG1Y$(n%&7qY+_@KNc*%R5poRt2AXB$Qv@FCT=WNkOHW2Y@wr=j> z774~+-ai;v&ha`8$hw4cs4obzCVxj6buXWM1bEs*WE;_X+EcumEqd7xXghmy552N< z$*QgH;vJiCA9umvc8Sl6|1dW@r5`6GNi8!U{_=^4L?Sv%U-A)L!b<U$Nb&wz+5oJv zcjgUxwQu;$)Rr2`$9o|f`gP3ucR?V(Y#!-k2rwePV}k$XnADKo1~1YJFyMlw>H|>B zVG`p}sH5WZ9~u%MyodJz%t=?0r0y-5AAi92uW*K&-`~6<Ni?`xsy3~KSX9!#bIO3# zi^}=Qg^ZKLjRSy2kWQun7>-u4{gQbwHo0bZCqKd&UF5I7n{;|87=^9Z!zh7G@tXH0 z{_+9qf2o4@d>|0tm_i_(3<K01wOr=5L>R+0JP{`hN146Eg&0@A{N`n~0uQ5$_Dxzg zI<g5snsX`eN-O0uv(!E>1w39dfc}toR{Lj%{T9@s*v#FGE@^JzbsN!kQ|nCIhqIZ9 z;>1A^T5{}wY&lxtu+T{Q1$$R^PgjELkK*D+UN_pzEPqTcS9ikO5qz0t*fvDV3wvf* z*H~U{n#2<v@$B~YS1=C*xfz)-#((!^Ok(-Jde8=`NsWfsKYlC={QtPV5;iopcK9Cu z2Yhx@<GUWKiuNUE=8>41YQ}uolwC6)?3~a9_Xk-@Nh_gAcFv4SR$BrlDfNIY+m#u` z%n~jlf{>cNEN`Vly`H)Z)lgz}u$uBJB7$eH$G$8~;`1s~l39`>{pS5OwfE!Kw(d07 zbCy%@`=;0NEe5_jXrI<<X(3*#wR>m`@rGU$JFe<by-^p+_1(@U_g3I@Mb7i7yFg5; z0Udwdeqfu(NT`GGNa!t6b|Jx{BgNI+Et9uSxVLcm=4HPm-t$f(_tlUOnZ&-YDh~ZH z74J@eAa}1D&1tC0Goa!f34y;DJGNrDl<y@9`>P5fcmCERYv~rVCvQK}T}SqnjP1#k z>=O-7e`t9Dv~<y1UwvR(VamQ@*52bLD8_!DN9wE-J7?jR?{Me&76eaVFxL44Q$TU5 zROOy((OU{2?@~2#iO*ZzBcMDqlf1>?{DIs%cWeD2#`e21V!M3rx#A^|`b#4~V0WhC zB{HPf>LoM8ob^LD?{Ro95Q>I~(wfHtpWRw%%%P}c6SoQj)h+nF(2N<a6*O}=wq}Nv z#H^{ege{}#t=ip3n|4coK9Sp*GOG$o96@{5gqDAB)~4DQME2|xi6#CdVlW}A-on1J z&-58GAhC?1+P|h~)hlfL>T%bCvt4KhQuPX*Gt<Z?<&FopnOg~jPtCh@6~!>NmTt*f z%r*12&dQu8dkn--uCam6ip=_L->iwjqi-!2_oVt%9)2N+OSYgS{vP(OcQY!3n%Ex+ zr>THsGaxu$hvC$SlS`$M&j?;oqx}HC={&$AaRN%}t@<EsDzdb$y|h6=2@Ls20Hqvm zFfALCB9+gEsX`a(aQyBAsgyIV%yMhBrpRJggir%3y4c*htiMW1Z7Us8f1-)|WZ@t( zb-$#Q0>@D~%00Z|QNN+}CL?tXjd)s545v-r>LoPfx0SmZpqCXE+Ot$**SUZJw>G*p zDH~6csk7cfnKZ@V!+Kc0T6i?|hqh;<m5D<F>pmz@^z2|e!%_fY9mx<OMAhc*&ooQR zFfn6E7OWW2^u;0b%*I76Oua!p?rf6v{iWSH7Za-&*=F^YV3vH&vXUPPf=Q>586Zzb zxW+LxCcL<p>c${XYB|Ui+QxjBNd?Y|5fciE4zsRliot{wqVQ;2;4Mud$E+XPfP3t( zLPLu3gw?Z%;=S&rlscn$O%zI_X6WHQ(>5Ii{^2+}v%Mco)_ExFaL!cH449mNM={0V z@^DNgQh1QgI&G9vB6>%hf^hLfBN1n+*+GTu;*3d!OJ)#t!>}}tL7Kyi7ua;FM%dd4 z8<C??ojVm#TTzoi4q4!k$;8(UiV)hk;0^K++JvDHP}6X7X*f;t2{0OJ`iq$2fNnEq zQRXstdd@+KK$3S>%ouQljNMUWk?DA75j99_qGAnAjd~9DKgQ(c3gt}|Novv6$t3Is z@L=KV2C=3%^=|=Y%w-zfWqGpAR+^G}*pXJrM3ts3<ZK~XG)`<>GjaE((f;@k*bQp* zj74hn3ntk_7?RmUj}2RKk&f*|I41c-IETnuIO*9Jh7y6S)b-^38)Hv`;7B1h2~$DA zMA}8^D~v^=T5zk>jbKjXd+khUF%MKFl(i@2VTd377iN_(*bTC4u$JoQOGMcjHXH{^ ztND_tZ&$1)sm|C9+Gwfed%skjC-7yTu*1IL6gpJuQ0TI<nE@521iws<>VI&1!E1GI zO#3%d7SUx9TCbOi7z&dSpsr=@mrNbl&b5hIp{8Y+mblVO6BY%WGK%*LvIw&{>DX~3 zqF>`8CFm?qhb+ZRWj?XBvN^k4u5bOR*W9t6AdwEp$lcD?B}JZV-@<97tVCC@V@p~V zJ73M>UL7Jjw#d%p;1?rL>jy}Z8KII?3MbEVN{n2|o<%g$VE2%lHa{`pE#Q-k=yqyx zC>H%%dvb@#Yi~(gHGed%Q^v`#u;;#Vobz~f+C)`$+c@(UlJgtZ2%{;XqSoNSv!CfP zOg6zF0%`ignl+K*4nv{6LR&Qc>nfMWNPI;ZD<kJp%4Md=HPk0*23vFKHnjcX_!M^> zVvKj-kc-i_N#KD2=C$6ZmqTSIU=>+8>D`E3czV&<Opbrpu5{vir){}bP&DbQnG+(_ z!GnuFk_Z&odybJdYvuwbPcqQs?8=S>PSzsUnFjr&FhxPAYRGC$wVP6;VVumeJs0Lj zcG2vs;w<`Zve}o>a6E48tg+%hDQ1j3&F=kDKP$2uQPJ{+u{Ng)W9aGVXov38P%dC8 zE-O`Iyyt;fR#79%Mxt`^{syj!O{38`sW@hDEU{53_j`)kEu`<hHF~KGNE`1PuPH(5 zfhi_Mx6?8)#ZLdhPkvowxQdv8!9z*h-<=E4RKIpPvzg%+R6pMIQ|6V@?M{b?Hp;G- zWn_uBx28ov+rXl>us1W+dN2HGm6)Ceo30a2mhU~?Tm(LOV%Djb%LTdsw1ssoA?iL_ zGl8?$q=$IOwZLsuW9NBvr(APKx4aVhWP1QM0GQMJF|c{2%(^aNMlw1jG*B*&H#kqU zbb+SAcb-@uzn&Z*9*Ksfa6KI{Hhn+anWQ!THbyVBU&JgfT+(7>)j0)AY3;tsI#@E` zb7c=oZ44n%4(h}Vv&&xDo2y8{j5?3m_}gI)E&Fo2R&OBP*OZLu*0-Rhqlw$tJ63jy z_Y3!_bCbZTnm1Fs4%F7-n4}g2{$*i5_E8!L)evIc8=~P#xt8B|6L-He-jqXoWY-8T zOl1?H+!IlB^BLeskfpjc7y4iqTG+ULdV1mN(L8O}n#wk%y|H?EdzQVa*V-CXe8i^V z*;Py%+0CMHw#A%6rpF)+(BASO&{2KvyIk~MW8{6#e<`|L#b2kOn0TedD2U?MmCSu= z7#V#DqFDi1svYR5>g_zWN9v8Ns0hth&lL_Qgfqr0CV9lNOp2b$Tb~nJ(>K!2$)26o zQfsa>6y}S2&6t=ZQlHB;ih(<v{u9q5nmw<L>rk?bC-&;EmHMI!6H^cc;O}QN%kdlG zh}<@OIp3(9OVcd{Ynm@}Uhw?L@p~F|q`mX{sM$|Laj1mvJ^oNm+wY6U=W;wM_j|XK zyQ<r)HTu!_D`^k6q#T&2s?RKCU13bLreJ;%^Wd3LZEaUqXr!|a)~9YqkthnBI|)u@ z@u@J^lF~E)fp9YYh@~IGG0ZR&G8588H_Ma`9Fa_?#gNS?OBBGi&;vTnQWmNWvRwu> z8@CXLjM{zx`$*x+qf>?N3&am6&f4`e2cYD|71~fve|$l&#n-?b-7dac*#iNz-Nky8 zI}kveWpX_rb4|Rxx3OhV;udayYQfOhE8~Fe<TJst$U2QBHpHlg8+>n~+DsCyklo0= z!y7zKtkaS(q3-gFbvF8@fj3ns2SQ+)LT(9}1%t7>S>}?vs$bMX5btowDOFd7*Umtg zgV{fokq%DBPs|Hw$!q{i_C0>KiJ-q(#x-8oiz@Ll&n`XNs5D!HBdhWAD>%sqtEMnZ zN}i#2d`oxHQl<4hrIt518QPG#!gz&aPR9lNTgfa&b@eBx&xE?HOc2vtW5$XeTfil^ zd7tDb_97?8j&s@M%QQ|lZS;LCQ}Bb~RH4SYqJ)#MTq|RM8NC<G{mOW6^+A#Cq!f<R zpXpH^M2aMP!W+ATQ5?u^<AX|`Q8l+;t(93V4ytN%(-Y~E5NtlK<Y-PCY#GO$H_%-P z?M}Nv+4IC&&};2(f40Ix#+|Tm|MtV<#D*W&wc#$COWvxoFK!5O*w}D$DD@jG+YYXS z;Z<OY*=DmSx7ST4mseFfL1dL0QgXMI?SrC&>Qo#`6~<I!0X<uyLTp$rxP`So2~|<_ z>RqhI4U63k471XY%>}8sFzC4C_#MZu8Hrb4Eq@M;)HCkfo>y8+k0O%cGEBz>$tAdR z=TV7c;|JD&%jKyw&soS6j-^0bjQ7g!4|7E0xHX#Jx7|+d53@blU~%-AZnUXmS>RLr z$s#du!h6?}^DkX?WPRt;3qdW~qwYPnV%vMp8dxIcjj(MQh8mvOC;OWx8%<FOqGk3R z<9|VTwAyt{jA$08dE{VS5iAfY-J9{z7Shy{<GmuNW=(#tx#7Bu0&Bnb%x<+Ujma-G z?FA0P45QfogK0HDh=}!&F#STT#hyHQbDXZGuPryqo3CA&$tJvt#H3M&rZxIo-tnTu z{Bp5P($=UQthV3!^d7bysunOcxP;pdUrQmQ3n_(cUnFj)p=1nLKGO2QWSL=vq!X#Y zwj)Zla&HW2wQ#3VsK_M}NIt-8zV)g66Kamc3y3~Rmw^?fmDn0m4&zJ;3t69z!})6u zH}$oR>4~3_h2cKkquxE$6WaCJ`wyY-0JSF42JDX?hWP(>a{B+kZpZvzYTs-XYk3qQ zR6al<%mi>VBrr80s!e1=*bAs4rM&VtoAY4o{N*2d8}rOfO=RB`0?@#4fxef_C^xsv zrk_K@cHHf;PSf2iUT!^qyFS1Tu<X5NBYC);Hx?Q5jgghPhaKg`DN2+<$AZ+<MC1Ux zBEqV+0^Or=R1*1<5hJFWszdP=nr5PlGTPx8_UM&%KDp9*NL$d3YPOb@Y$2~LlB*&i zHC@{1uz_IO5pF`&q+K9-zbF%^+tA(M+s#9LNmkI<hYc<ysk*uVKKgN)){O?9;cpiY zz>?PFv^5x;eT{=HcvckJaWEqvNy_TlbH8-9Q<8o1E9^7@ARq`#MtKM!{=QL+u)zu} z3N6MpUibnuD?M{{27QAC{^A<Yj<J%y0GH%iUcK1nkABdUM0e(u=u$~umK$6K*e=lK zG)p%gSe6=fCh7jM@M@Xuiilr3kTV-$zy!cl`^K5p@^Sgw>Kn>KA&7tzf^Z&)cUTa# z{2B+Rbes42Igtz9{)vYtr9tZ)LwD~af{CWVyPADS>F;Ai{A_)MIxGOr4`4dvt<PQJ zoumV>4tZ!M!CZ<qW9X-oUO)pJB%{XwW1$sx%pq7Q_O8XB+d5W`GbXpAXYeiD4EJ%f zv)N#+z>Ax7td`TsZ=x8YyH~3mu|j@?X^%fnW4>9*$^+<K)Ezbx^QLbKT`J-H-9ub0 zf5+U+GyN(CQ&Yj0y&T^TgD`iw{XN!p@VIety~^vBMT{qacX%M62Y1O^mfDVt{e)?@ zzQzq0eB_jw1uL5u9Z49w*(a+E{QAWF;d5kC9Zw+ku<>DDw*kh@FPcVL4K?s1vrXt+ zB1#yV!+#Wd5t9#)6xqyvN)LxcqCfk33)3+@>*GI2#=3*cC#%ahw?=eiS7bX_72=9v zCpxMaCA!6FXB<|AI^>D;mpv@I^g|{vyJWmE4e+V|kC*8De8U<4RttIq`!_G4`uFx& zAzNGf|GQj=r3%h6+7~z-OIUvyv%$VW=*kLGgYnRU^ne-UutxNc(0;qR&5}UO!L-@1 zC^5TDI^8)o+qrJpj$%t3H%Bd;ku=Web34mSa@{$fZQtkLzl*z{ErU!Ee^O)tysmq` zc_5eFwolqq>Ggr?aQ@bW5ZFO_WF;_B?ne_{05aV<rzq@?cIk+^(ClG$FWVS?9`Lxk zQy^SJ?{2mU1U>I`^L8-=J@11c4fvFS6ZDIFyl6lYj8G8A-5^SPM}*3U-eB=o?XZKz zGJa~R-Eo28LG#Z{Fi@VT+=%M&SL8|er@FtU1=xY<A04WrK2W|;GZ3iP>Gxyl`N|5_ z2Gri);XuEkdMEbJFn<O`*-Jv=%UKwcNJ42Rw(Jhi$Joht%nv7JN)FB2k=u2Mkz-s> zm^2udnn%k)@!MJ`1XST+W8v^J)8@Cx&%ecxj$C2M;>y5Fl<n>3v1f7eGD=0x#((iZ z3`-bLGG!qG-|d|AIcx(Nsm^&0OT+;~#UDt1CgHa_^WZJ(j5N&`RSY+wJW&B$8>cOy z=9m&}`PNc-ne!x9T)Tw50!y7~><>tP7TP9{zq~glh6HsKS>ga*CxdpQPEpV=M}cij zqy{c$57ApyAqgbSlsjBh++@Ta^FG<Z0w*t-ZRalyol<Eel4d=Uer{SO;#Mt9HdS|e zgc@Lvr;AtFCg<ZDZw)hd?d8$iwgu{)g#<4?&bBl_(HbT>I5{u=K*Qo`XM{~PPNoq= z6`{!I$(ZCmefjBYHtf7F(qXLtTP;^TH~KDXC@D=9p-EfMX}zq&#|Fr%Q7ALv#Y3HI zsGzz??5HF-?8w6|9<M?}6nU#k)ezNZ{cRi00)aPQM?pt@k(a(N3#DDaV6Kj{>956- zO4*IkLwU`v?P+GDWKUO^?~)o6!`xm)X%?m1i`)6A_N$7<)MH4BT|xJPW|qm|m_--O z@+2QKq{(JW5(`2WUc>g*f&x&^Im+j*Fx2W8W26F96hS&&$r;6k=9Z^F1Oz+UmbWLV zlf+cJhm5X*D=a+Zh(GKoGpyX@qd7cJ-4kf8qSNnYs-t?#=dCaN5@WM8)gHsoW70Oi zI;NwGC;+)1%KAweWv=>NaEiZGMw{6+r_LFHVfL-r!+0TM`j8re>XI9ZY||dDRs8_( zB?~p5%F1kBF=Bt9M{C`6J!5E>>8M-oFUrWA?l|qLmc>aaE=YVH@T4z2rgK}!YKQ{1 z$GC=wOxToJJhX9Ia*#^%1Winoox-e%_>@^Rq4WXOH#k89FTw*XQNXdEg+=ghX*>C- zk%20yE$O+Qi<8S?Q>7-fmo_cE(KWO->eP1OH#d6sN;>FPGi2WP*Aq2FTP4(v#Mzx& z0^$+1yT_7l5{7M)9e-&+Tj>dHGgw+zE?zaWx2N;EuRb+dy2Jzw1(!5ld3GgCt4i}i z+{N%4YL#f8kS_EN4D@zcYu)mX%*rdHz$=~NaIdzoczSybcdI~$1Cv06luRS~hHf)> zL`4XXyoeki>}6LrA-w9697|a+WCmEX%N$-NS({zH7>=Z|DjzVscG!X8jD1sF{o)!M zTBreSXvqE6rb>T05Sll9$1W_+B58yr*~8Q9kv?mj_De40wWYx*KGeo-5m35!X#`u2 zgrW%tx5ausa-m6;Sl1jmS$3lFK~mU$PmB=Qzoxb^QPJ1|?iv;^PR?f9lbroq{&=eF zS#fi=U{a&V{3Yp2+PIqjLCaPhWQ!Bi_Wa=|pkJ{JpkbXANphSRZAJ&3cnC`d6&30# z00fLLny#nhKAoo&D+;-ezhL-KsUIM0&Mv-sx+#)B&mw>{w}y8L2s(vwxOqCIa(pZE z#&TRgAL-d&?PDSNUJc4H;3IDJ*;CBAlpP(%_&RijlufbT>s!Fj@mACfxW!OHxy@ms zniK8G8;$O7M^_Bk4H9Sz?ofYB>bv0mWqjYQ77v0`{ivE9g>>r|?*Xoju(j_AGPp>I zj5F?uRG4M}76lav`mtO9{s>tp<i|e81!bhdIZER?3n42J1H~rJ%SK@#&_`Kph5cdr zP({LbE-8<)Ym4ZqC6OW@=}DZEW5oEGGhBFZVC~q7k-<52;Y|2MdQhyms)3yB2SIx~ z5<<~65@|gJT%qZUpI?l~ku132j=1<SyC=lzRsO(`XJ(1qicI0-?w%!&SR>=~47`w! zr|#+P^$GVC9cy?T1OD4fJdcVocFm*e6mmEt;J(ZY*M;MT_=7S)*5B#*y_n^%m!c6G zf4&h270?<b9~1PZYm+g=>%5ptr*ax@p<lBCw0^8tSR)e09-Ij;MJWz9dC=^pgki!Y zi$ynhPby-<Zer2O@9<bzhNW#H2D!}92e69#i6ms+;AU0U1!)}soT*hqH>q<bBbikL z_Nl4@4vpZZHo6OTNodB6!nrZ(&o=}HgU!acPxGDUY~3h5pvpqfO1+=Z#OOdOqMq$F zaz-UG*;MAKD+`TX(*s0yhdDP;dq>g>T|W5dV<jcxb!I$^I1B`O{Vm;OskN*3iRxKH z!ovYKY;T@qb0!Q{XHTrE7;JQG&E23ao=7cgfvRysRS=H^iUxf!@&Ez+)t$%<2dF8G zI>ormk9ZugRpQZ1;P|P44dT%y1CvU^R;W8OE@U*5OhRKRlTJc6$h#B=#s=j-jzZhm zDI}esoAf8@p~<6mf5|S|{knJ0%q=E3LZjE(e#6tPxf{T1H{I^wwpi}p;jT3~n!@um z-7?w^Sr&A=W>`4Yx&qC;4$*XoHK8XjHM{@FAA0)5fXj4z!!avO_5t>{PrqEz=MT&V z2<a=4HztB-rTkw1fAKu4d<Va^zDcXw|5c}h^4}AdZ=H^R=tTdU&_^rV%FipH`r4^4 z+a|$51aK$0okS>XD+&#!T7*FoFp_%HYU2$xYj^Mz{_fK^+QSgAASRg|B-n{nn(6ND zVrXOK`lblwpK;Rj{QdVkA?vfHHH{0-7UL)hZZ|U^2f=fNZrr<sbm9xf+4Eru*2Wsx zU~*XQ!wtN0VlYV4fa1GSA?BdHx4ni#kdh0Ah~c#1WZ3A_Cb!QaIt6bw8^u~-27~cE zxfcbWID^#NAnYz}ZWxKvz7?@=#<KC4wRWqNO8=0mK2YP>7{#cUI`dw)XN<}f{X2JD z(Pm_BN*l=?6+vMLtE^TJIO>FKBw#k7@;qXbiq}8(r87ApDZqQqK3CbS+pD@CMW6{f z(>u01y`*WS_bNCXo!vH;K<PJTn+{Sf@-M*&#oA18F<Y{pDm&nN9^#Z)Jg<sln*9dz z{yJfD#P<mCPu!Ew@NK>jg<U(y3WrF;F!LXH29V<$g#m%1%km;$o%|J_{NqGf-_pFF z{8Fz{MV+~d*elh26>J)Ub^f3sCohF24T4iNJ;Nz?yVmnZ1Hwx=@($;*;@vPg0W)7Z zp*XXUh@pgn51Vk16%(#G_5v(oiL!Q<$NbuVb-weDjSoh+J@OxUc6khFiFnz05<5c- zaLRcCfCEzMk5ect@-YUQJJ~mK$1LwUI1i3h+W6zqCyBdVOxFk<_X3#c4`A@*C=yeD zrzbZHeT30O=2aS~sTUB@QHNrd8$s<GRamMU@e1WEy3e4Vb_y=!H;Sk-#$20z#CCM0 zSJqcL6Mp3m8aZpaG)JWq@|Y9!m=k)c&0Y5sfB*R20yB`pKa`A&V!NE=Yph8xzY6m6 zTi|4kr2H`!uj86vM$nVvSD6N)2v&XX41^@x(TQv%Wp4i?Ba5G+(U$$4qqqNSj?VD! zCjWm3?EMc>d$RJX-Mk<w-#qQ~-dq!^);M~ZC9;;4Rtg4ULLw*Pq9mcT$BBqz7LlXl zh1Fh?{2o>uqHq~OAHxkp7*D>^U7rYz$8<W26UQdc*W>XBmEVYa(g0f(S^V%L>7|{7 zhjKq1m7VmcR2#`|O^^#%MgUxhZuR3VT(-~@|B^Spm5<?jw?p4{sEGJ^sK^xDt3wf% z5oXvl)8-Q=U_&UG=yu~)XB$qR@#kHzPlyFoTq;b;`Td*w%3*=68y~l31MtYxlkKjQ zk1OXkwCyoSakd3@GSMRR@W3vb`WC}<$p(LeybZMNTMR~&POtv{F5wB)X!&Sio)Lbk z%Em}Z1Rbw|M&eV4`MXaye$()D-rlcTb7&+;wDmce)SK`Ay&zp1X4EpEHyaRVD?ffq zKYs1#7C@ewPi|y_d90ZCU|c%6jdN@p3iH7<Ry2{Xk(V)+DUCj7-Sp{G6p@*#evg&% zCdQ2-@T`;1dM0diN!pdhWr?FZI@KEcnHOtViDtDr_Edr<dF-!JOH{hVn8;|Y+q%aR z<0KYMPb+FZz7);msZ<`)IzQN3;_~gVKkz%-{c^ucdW^0jKZv&xquKe1IymAT6Y9%V zB!)|wg_P3ANyi3NN+is_G=GcXO41sGF;yAi;S6$RoTBWNGAfX>-(r7vyKVIo#TbN- zN6JT_w#jgcTc@j`pJ{`sE4(8tki}guhJQkvf)qRm06kk2Q)*>krVsw-sL0nQCrJHm zh8h1VEX(}wW~lPZ(8)r?(C&Y(qDlXkC919~p$H-Ji4fzYhyv>=phkzq1&sz^bmbL* zE3g8g713^oOr=%PHafbY!_=yN1>1iCtLpuMAZQ-9Z=m%`)esYk3!N->dV4s{$yv1* z;P(M{fOg9;AjE^m!lN5KI}xwJ8ez%<3>pB7OmX@ratq0yV-92Cb#qqkW`*3thLc@A zfconiNucB3k=cQdyH0kxQH+RTVyg~4d4Xg70;5XOd}^aDk8saJr)#W2m(>mz-OhS! z(;suvJV;0l#(2}ME3T$ziYjT{e`)ob#1-MaP5~9M?oTnI*2u!xqRn+1ozrumyP9;I zfq!N*=0%+}kdgXt5$2Dp0S>Weh{W$n7}Drdg&&p7&geR|Hq#I=FfGi%DlJ;<_FUdv zQtW0EWFabiL9{`?x=o$#mLvS=SR%AxMD?NvtuSXD{DpGAX*Q8jT+4nx>sx^jL?}G% z|EG9!SfGH`TC`i>FOA6-_cPN!+k)*+3<x$oPFq0bPg}xRCb)fYa);=Asy$gGrXf}b zyhLm}%(n1=kOF@y8JxD@b>~0p<*0z!jv}8*Vkv(T-g_&PHWZ0=SL*jKRlX3BO!a7@ z_rC#{tm;R2>skh!>0kS!!X42sBoFRw;ThG{)8=$g)Vi8w`c_V-E_5B5=A>gT9n>be z+})>>=+VsPks}A|-E0wW0l<?Ti`-vVbg$t&NFA%xR-6OkR9reKQ&@+Ju}DU4c;Y<+ zs#`8P<ND7~3e~or^XGgVq}K1cji;}n14_<hIN!(uo~DyZbIo@zlWsDn+yJKuWPU#J zzz0HE`)kA10@8G*q7xw7e28YEbl7VYK^EPbKf=AP7r?5)Y94DN7Isrly&w}uTlqxq zK=sLxZK1<rz`(Kfsl(mzPBh$g1Yv4KWZhIJgZ|jNnb^AyPjuL7NDL3ZMZJsvlDIN< zi5oLLgXvysU6CNeR$6EUe_?|gYTBVqJrA_iQ(h5Su<{E5%TpzrCrvs<yaRJ}4O(_Z zJQOVvFFuem`URd4<Kc12e1%F%MqKdB-r&(;$9Rk9hS=S4VVf=o8ncd^-p_{mG|i38 zhusax|5Le9n??I%_;$sZZ(?-?X%JA<ACQocKe{8iq`p1ye?R{(z-DC&dx!t+ivP<Q zqm}+gUL3TOiCj_}^3d0kGDh1_b+5SK&_66Q=|-@!$Nr+adqI=LYxA#gfuH*h$P49Q z6<#>BdmY`(WXyCHUru^%Z_nQ!H>m5n8f~VNwh-)BoNbX_@K^i((V^_@SRLlPcw_<M zU;u+R|J>WW1!lOChCefywArIZP1eSPJ3XpW2Z>1-!Gui$s=^SC)2c-%js+Noi07h& z%^Ilvh6z4djzh-rv9544Jt|59=A7T%0iSf{-jjdQP2vqs<cpE7$A@$d#JzKr%xp7) zdHIgoS&vN{j1O2YSbG|g*QcdLmsp;;LN(Jv_mWwi17TJu#BiZJ$_H3!iXzN~DKroE zutVr^b-vpzYa;PO*zwy}28?lXBAL9;be;HMGd1xc?(ZH{&hj8pkdn(s12I(he9Bcm zEA^D6LZbf)>k~|2de;BJ_*1li!(oHZW><-oU|5X!Cfn_NzSV170@iGy>%U}R&;c1& znvwzQ!}lNr$g>bWW`FJJ^?^US&MG|oE&8qurbA|pgt!90UNuzR7~!q~RyCo->Sk>q z+r>AO89KB-dC8r93y}UjniXM?`ynKHvh;_{5NDa@0NgI_TH%YFNN^N==+SubisK)P znF^({UI6;>Bkx}WIQh5j*qJ&rnEx`gGjX;sHFLH#W-xcQWe``9RW@~YwzM;M`kzX8 zlD6`^0^$fqaZ{6QzMG&TkfOFAu@V|666G(f$W(u!^xOWXAY=&?a<0W&?bE0j7XBBY z4~3Y{L&5d=M8}82-qk5R-&LnI{odanpnk+QqD1hKND7AG2T)_oW6B9=391Qf3CLsI zV~vb9L59ly648s&F+L_ssA+UOcCwYMa`Lhzs+s*El`Ql1%_Q^8O(5NN$!mZ}=t2Io zt8};7{N6oQ8#C-w|Fp5Fw_=Q;VY-oDxURdT8St*Q$-^`q=h$i!t+>Om&-20C%F8pT z63Oxp2pwjpuCnW<HI~bW)J-O9<l4ho-iG@A24h^TsF;+QEw=@VwU}2qdiAi>t`!~4 zwVmXzyqG2<C8d4ttL$lNPA>0pcsSx!dW#OKYe!qtHT{^=w+?YyEGuT#{!Xt0zpE4; zxie7j|84~GHxMXpIcEh^fF`8XlV{1#oyRDaUOpKY%HjEQn(^B6jJGYHQdlS*pOSUe zC_py4p1`uSv9D5je)zC&e`fG=MZ=BjK9gUL72HN{uphVz%zAG-_9N@5Q+AxQZdBA8 z&WTDkZ3bfjtL#GSsOA%Zt4PF=N-B|BCg6@C!dAu=m%@$_!csE6wN{1zv~b)txtJ<o zhi}YrNB;Uzf?AOBgIQS3lefz{W*)HvY*W^8TLU+Uao1=mAIQo`PAo0Znz|FWg<j`m zIzzCz5e8gTk_EQ?6q}$6qTSGb2ltuhbCS^YK%sQGV>N;#@o_!E0awq?nmI#Shh*aY zI@at0;hW{RxS^wxh=pV(25YB-I7Jc?t2dj3Ang~rk`M|Y9t}bzWq^Q+AoQrBdhsLW zk`RKPqY03a79u|+>?R)Nt4e<al5~utqLPpRrIHdVIV2=PGQqb-_ZFPPJ*Yt?r468! z6f!#?G(<81vsUvF{Du1y(CrfV5Kefm6sOt70CI{V)KX`*4iV)0$?7iG5g!JrloEh? zh!Y-0SX+10j3AL>f8dWwN*!<^DTF^RR6sncUBz_+H0BT|t`wIBc_#<W%m5J{PIz4} z_6&q|KnOFHG4lI68bd(VzUqfze*4*9sDF#j-!Feyejh}g=sj$0K>qXNKau-8$@<Up z{~Xr8g*1K`8UFfZYV)68rKM=8rKYG__JIF0M>r7`_&;C#GyVVb9N&lNA2#;(&i|}E zF*d_czo(=iF+D0XEjI<iB$PGSb)Z56rp(B|!7?M&4>=%H^&|Y~2OAj%SxOPQHkHcq zf7epNB<yGZo=N0i*Mk0j>tN$zZfW<=YA(urvFnVmo1ZjMlfr)rGM91SDYXbiX5m9& zqh!_t9>K!p=>L96jJ4;v@~n97c@dMHjRgW~d_Er=+l|J_Uur%*Kjt3NT$tmf{8pb# zQfFVl(KCe4)|3ZqJRcsmI2o&MB}SP1uPq1sv-o2UViH<L!g{XPT2tc`vX%1k0zVDu z&pJQ81j#S-F>=*ka3~7tj+_buow69+WY+_ngv4-wPeFso#vQE*?~8nRG<*~;^C6+j z8fMZaa~y@_h2XNe_TiM0Cb<TtV0MfJuVscdXhcq0ip2}5M*?pWEZCcp9VuawOA(hB zHtIC<qNL#h2;5$0Xl~mRdo>i2lY~GKnsW?VLjf8Y$|t}-RphSzFUr0FxUy|)w_|r~ z+qOIG*iLqA+h#`{TOHfB-LY-kPG0)l|KZ;E?s@;+RjX>Rz4jb6=BjUgLlgdkFDl+Z zrH>$$^4VXnpEl1Wgfb1~18V|_%6bE#REt;#0A67(G}6C@&X?v&r(!YVcD$YP6Xp}S z)gz22pdv&kk{e0^y0xgH_0d{lDU1B9M4S+P-mTz%vj~EfOp`=x2wU~;wx#WWxqy+d zaw6xqiS$D5+gY(ln8TDbmJ1C$<vmw~4%4{iQ)dStgP`4{ANdm~#<%bee&isY1l?NL z&SO*pJC(1&LM^3K`Vba3T^*+m3>Pc;P{hg8@||R4br?d=gHF^PM{-*D^2oO389r<5 z9ff*wvY}eLx!>>97rzA_t$Y0i&rRhXh?h@0RQY*m{NKaV!p!k6e2)&vjx=s7eDRN; zP4APS1~UKwVPLN%VQs`9%Ki1LG&(&dB|Re*;($EApx_8)7v0Fgh}>8xp7a1cNsTfY zE7~kIArxrw8}%<JqZBZTpEV53jGvCtpK%JbyDFga3C_~Lh3{t>`HQ}dleMFn(O>#l zMM_%tGQbKy@CMO+^Nl4{zs78#klX!2(hm-<PkIR<W{po;jt<q5(x2ANqa=$6@UJig zmX#rVXofJ-3}c9u!{du6W;xRBFa`|dIJL7ma>g9C@n{%u#3yr2Y#Nv%+CzjY0@?NK zB2Ixn0nT+cSgdX^0Pndh8I3Jp2O1d9%Q8>OuZ$Q@+K%GD#eef@5S$7zH$z643veG# zg;B@Oln#3x+u^ACxH1R%i10gV+<yJjSuvbI>Dte(pntynfB)kDu!g;p<v)5#O*JM? z+wjQ@lge@mJrY2Fy)+DF^%um?e-V9N|6UHn=hIKW;V*iTrm0e(5T~X4NBf8(bh7_H zKYjgd|A(Ip?DZV~q0Aqa5~q`(`J<7<_{4<xF#SZW0>dZ${OMhVXZg$LOzAHef2$Sz z=Tm7BB>`G-8BuyGJ!d29Pbd0M^UvS^8^lZSe>eYhmgxS;S^7`p{W(zhU)1@(<o$8J z{u7zh|4o^;Hdb`5R+eLGE7mI<2woeNkp5n*W`%%X*rs48R?C(#ETVB|_X%WXp^PFW zBzrJn?;hXtNLFfaON#=izI`!s4R+W!4aTD!iS*u`&7fs2KIK0sc6cHkz)W!n5|c3< ziD84n+gRKFOrr)L0J$~S<p|KD!PL2K*`fDtLHabeH$x0Yzy{X*q!^j_;3)m*x|)8T z!<G(3)^Pga?hIL7M}q-@7qa=zbKjjK#Z1TVU_dB*s!H5u1XI;_Nc54^AI2Szk&`U> zG;74tb0^V-xYHLe2NB$7gt*=W@9S27mIOJ`NJJ5P_4w9n75JvifR$-MozCXJ(j;$U zrClEBEl{<%Pc&sMCrCu21|x@onM9=?O-V~e@r(J`NWoKGO{(5ri?a<A`=DPKI*eG$ zx{A#Ifzd4%ZxovH?sywRU{jSyF7o>?PoXgj?YL(rnW!Ft^54-M1&d^tssVI$F%ism zxALrDRwkA2?_ovbo>j;^;pw|_{uw8vJn+^TQ`9H7migFBgo1Mh01MKd);(OtOo#ra zoE6lK<Q22oGYBb-RZr*gcgt0_=jk1A67<%!<*pMI-0Ud?04yKel&S5<)!pO!^Lh5% z5MiyCXDcbthucVk8WD$MMuCR&ke-%+O<$f68ha&v#reb4J%yyxxB(;|x?C3G*9Y=p zTEq$-N4yYQrl^_-v8Nm%dwloIIoX0*f_b|{l#xsdN*L6M+KhPMp32Bj$sPVq<<4zW zK^h#MeeOhk|Bna9br9TJv0plDJl<Jc4w=wYZdoYLTJpy+64BCGDDEJRGL_>op%z(O z3~usPuJn0sAj0m15+yJzaltM3N|}W*u@R7=1%k&UbMx6sy$OVzEcD21Nrpz;Kb+d{ z-B(=i1e<ZSCy0q_k4zuYw^_haD+2UYeQ}b8@QRe|-0+NgP}Zd`0AEjxr?XIMQ#cYt z`58wo)#l^a9(y-W8V*iHCj`ZU%jjVDRKv{4l#o6iF0C)AdSvzIHG`58?bA_X)1V=c zSx&2bj((LAlWkd7TGT5UEy++`qp;7!i4etG9buNO43r;yr60UI2t?>yKIrPTLI37T zTSKYmiNFJ&<ogixuv#nzy~FQ$TH*0qiGqlq4Igg4v2|sO_(jBX*i61+38WjV>;3MR zJ~S^z(#0T&-^RMF2S%nT5q#iEPoFlsTuU2Y8?Lv0CnSHjk3ls6y$OI(pHD}xHK#g* zd<Fl9myEj+Qqw*?Nh;*OBilb|xBm{0{2BAM_BOUg_J3@dqO<InB<&}mO3RCtC|yd^ zNRI6&e1*7fL%KnUkV1tWE03Tlm!d_{3J^kxfQ21v9#IGnW4^huByO4xzm|mIQM9~K zki4A^N4imvU{aWou#am-3YTD-L5h>~wLc<l*7}QD3+VkE4L%h#{Jj3Xz4-J7zS!8C z{6|y=_g`%sY|Tt;{sgN32~U#$YhxiN2S*z#B{Qo(F|OEW_-koo|Bp~NNLkYbSsCSB zCeC>I$QDM9f&dnsl(LQ(5)I4R45}_UFQ2j;2<3Ajq~r3DRJtUP$koq^{0qLz9D1JK zX$7OL>tTqGXq)ZKl=wh4^@=i9hnk7?ji>QO`kRN&&JUnX(2j)3fvSxf>Qu!!>cm#H z>0sW$dNlGok+m`o;#C^#o<szrMV^VICS%*$oXD}?;jyCxV?i&lyi2k9c3yrfso25h zgu-Ej&Z6v24>-N|!VN#=ZLNH`Ir|ZC8%6|0K>^St6tFSE_7Vf4mWfrN*(+C4V`#PD z8O73pHfv0%mICQ|1|m(ps|0Ah;4V19R-sddy_|lmqz2e6q?RU&3;soMJ7krRn%!Sd z^Ms(BS1+krI33x28ECZcZI+YNATobHLyx<{z_gSq2N2LkNQ*D_+nT;PFFPF2a8FRD zaFfd4RnGYF!V;s4%%PE<ht(W&3f3FX89yDW4#IVtb=qpWNIH~Q6tjkShl!z2?=ZPn zEvVM^>J&rYzqDAF#O_;n@8t)HrzHgj2EcO9?;8%yz_pk|Xqzm?n(D^m;Y*h=ebue} z5Tg*wNtzxlRn|*fpr}n<cPhYg9|_?o`33(5i(7$e{k)`!FW6zT-4tj5%dKf7+pWpb zJ!w3~q$N`)BgPz7F3|{L!#tz}Nx!m*V%9|Vf&{K}6p5hRgQ?H}W=lT4<sW!MV#8}a zR6|jyG-n1YFDZpK$XvIP7Y$)6F94o|!4;|@BS#qXh@SexCs#awp0*Shm1xrFJ0xRa zT8`n3x+>XERg|^>n))Xsb{<C25ohuWcEMQ=<YJxy(g=BPjV<b?FeoatHLV&n(B31_ zjx8RyAe*sxEt^=zP)eu;v5a6Ecrbdf8CP}`G7DuY@6K~|T8fD|xG@51@!X)+Vi~PL zX()D;)=g#nY7$tmi!HBhz>t&?8PoeOi!Cu=?{DRNoQ2%xRx~A~qs${EX3fVDa#r$F zxT=deGzQ>CQ2ENusSJt)-`u|sjZ9{lx|!DcEsL))6@L33Auy~nYHSmkcY|J=5-P($ zLt*+|s)wj|-u-lxQur<-A8E)VoVh1+ml-^tDzjc<HF>+?{G$>xmktoWrF-wgk9Q09 zBh{1fi^gDLJe)@WnqDr`srg#_uF)9UW7%c9Mj}&hu<pQ~E2}Q`mO*R_Duqzej{ORp zx(i{DEb3~nSMXZse61fi2%ugA{#mfw<UJw*Ceb9Rk91A7xbW!qJ~Yn2t0s0Q&}14) zU&6&vKb@`Ev?&W=x~X-m;4T^Er#u(&EiSp<TlzGWpas^`?J3C(h(>+f-NAZcw0egZ z7`93k>j&i2k;x(DfD3=W#pvR~1G@7AZ?B*J>!f0vogrpOlAR%##yO&}r{-(kEe=S( z*sEhU#vT6Il~Oi_hktF55iGo@N6yt~^}!DmVhh5dtQZeRu-x6$7i3DoRjzjb9%PiA z#>DQdU$G~=&(!<)xsi`HdGIZM0-hlkN4S3Cs}p+2yivqqal4G)_zDjj0v091@VhW; z((`=|?2yqZ=pykM0`VCmLYe}zY%$S9qN2(2fJ+_`AXV6KrcHgvZK3KTiBwhLk1#9r z>+Y+Bx!I41ov>Yg^a8^8g749VS*ZNPIix4?pI|^jKDw3NI|+K~d7&tM7Gx)RDfAQ$ zu_C;`sb0`0f52riNbwhRT6J3)bkCc1X+W)+m!;@vvHn12h2#u;OxL6BNdO0J4o2us z@>@`S<dWM;OML*@<o{!@fVsiL$v-QV2%j<kzbE@oWA+!>|1aV;`t-yd|0DYT<Lm#i z7ylx{)>6;S$o@Z)#PPS1<o*(<XshR9EoEb%=V)eQE%Ha%e^`bDg%z2VZwS0;pybsV z(chXA^Xew`$stvLup`hbQ{$DDD3^%waCJ*GU~t#qBKXXeMr#z~Pezq+wK@v{Ln*v% zu4QnVjHfKUy&VkFe}Q1Q8Dcnv(3=PYZ$s}x2aL8mzAa+8j@M&rT<lI`aj16SI%Xt8 zyj#Rf5D!+7x@K%WaYhwZlSF4vy1X(^z!3+xctzR8l33yOhrs5WYK7{VrC-uZHTB3Z z?C?cJVb%mM84tBXkFWAbz+%IT7fmu&<^m@OaK@sB>8edKLImlp?{~a7yH45l!pjUg zP!bEbHz3>F$ppL%2;+PI-Z`l|=q(N&YY3xJ3B05dIs<B1Li3(?+LixRvCUUljl1~a zBfye(s?7gOqqZM|ikID5`ln|<g9&Uq(i%u57V~pH^|dHPq>_wil&*t<?lLpQ29j`~ zfE8G8)k(*e{%gHD?}e8m9WGBkknxd|Nfn*7^0{eh9n~$pV1AouAz6Qa;ai}$d%(4- z62IhSP9W2B(xsT_w?gPdg>8>8NTBkmwr+ca2kv?6P@|NR*lS=)+7aM1D4eM37>b<W z7L>`nTG+EJ1S(3KDJpx1NE@{m$3b}j+AQ)njcEDN359FM>>!=|sr0J+k;AWcu<Cl8 z0+BS7i$uhNuGkYZ8Xm<ltLRD>&x^P>F_NVySNeTxi77{`Nd}5*G2A=!f8Z~ofA|&l zGl3WLx5<rvgWXS5nK`=sN7(&S;Q4=yg8z~v@|QsAKdFoV1GE3Dz{BAZmpGXhEoo+E zhD+WDNqF^bE~%&po)U>FOn4o~Bq5oLO(LD>Jru%PnKb(G3m-INE1R^~8nmQG8mGzr z?+Bl__jlwjMIIT#fnOeR*^FK$@Vq{jn6DA79Rj2G{1_qE9QVc*J`|^v6tFA68(A5d z%ibtlpk$aOs=ih;^-Vj;ULnkR-wU{H9}P#Urka6yq0@0aj`>Z7)PUmPG1Q_68PQTP zMm`YGjSwi?Z8#e&ULauY%GZtLme+j?ZMh|u1v_X|?7sJ7UBeE0VG@D_$A+Oy!&2j} z?9rR-@MX1qrJ{7?8Fg&g??bzoe3WX{Ub)M3XAkF~BJxPcb{2|oSN*Xp7ZV_n|3sXI zwRHOW!B8wT@)9Eskb-aa!C|Q@nX@rB8_#Swi2GG>ANYe871I!Nmhu68HEbRkAPZhg z%#_dBlK!->Q1GMp-~d!lZz$8XHnd-7F{itK&tJo4j2T&zghGZ|z(ZZ?bK|n)$?qlt zEa5VG?Lj=*Du;6fosahXRnPmtL6sEViFr=TaiGB6=Mpf7^}!y5SE%aS{zdF`a`R~i zMPs3EM^v#tk@mEcfY?Ad&S#{JN$N|aqT@#N9esSy7}^91FG+80io7%wlwyED?1^B9 zsscg~ch{mMcgw|Ug5AaV2<j-<idDy}xhpBD%RTz03<DK>Tgu3xG8l;LK*ktUs8Mn} z1?-xCe23wRXOIXk^J(UuMjrF3VTes^!~929TN4_UmGu+cOMeS)=KlsHh0PqS{sol@ zu~s(Iawvlz=p%|pi+$Z>@D2_R3X7&JWF59k*le}veSM~4y8ueK*@XE?rX82-AlXqQ z>DMpb6g$n0a7y#EF?sFn2d_Q{?-!h}?>9T>zJ-%aVhlJfGco(^jiMF&j4U@jj-HWt zqaQ^XVS9boWaq!HWZkGhLiLh}1D2ke_XdHo8OG#V$xaV{>Mb|$RY?b*s<{L=aNc1w zv@GPA2-H}(y*mV_BS!B>``uyg>Y0W^P<>3w(+e9%!LHcTd?XVt$$7vk4C1C@u7=*A zb1DsBol~iO_apQoq1x?|Q;8Nx)T_7P+#g*s)Rox)U7&OZ2sL^<&u+gkJeJwjHl{I~ z%Zef?d%H(wdrQLA4@z564hdzKJ{g3!6gz!b6wQ(x^{PE!s)!c&AemW~XRpsM^9)by zGp}kR4N6s4eQ^z>QqwkJR7;i3(kUz^fJhOzlH!j|#PZ_ff2!wB!`g=le{f;m=R0$G z4*H2p6`w~gasi!%`F4cdMprJfPN(7K2nME5K3yT=_CEU2x4c4)(wTiL@(ue|CJvHh z1qE@^8uvl)5>+G?$FiY9&J0g0r{fC@kunj!5toM$%Hr4ECRv?rVf)e_AlE(W{vG(b z>@<~ABM!y;F0=gfoF!rYK<UshOs89Vkc~oW&tcO{t;l-$(PMf(<L9ALJgxXgeZ(yK zWhGgO(E)0uv|$jJjKyx<j<xPkPE!Kv!uZHH!b%hnC2kMX`X#TMLfv&Az<(%LK%CL( z4=Q*57L|Vzj(><!-^t=Lt^6Nx?Ehrz|7xme;bdv~zt=lB#n~t#$)gNpodCDeq#<Di zrzV;Kry3T&`QZ#V=nLCw<t@3_Pl}d8jsuS~cop}cbFp%^p9`^Oc$j=26EI$M@P5d2 zxaT}rf4g}Y#Pl^P8^+MZFl(t-%CGIbs8by9F4U%Xg8$q>Cb*mTWJqGJT$DDSoeKgs zth)H%PNBLBVeCOtk{NXUK;q&S*PaihQG3tPzTrkau5t*QyQPEnUi-pu<C=-Ey{eT} zaeUv!DM0Ub$4NOss{WiM{T?d-MK&JO6MIay0k{)7SPzc4Nko}hTZ|>MGupZiP$(~X zfV4-@|I_@E_}906h5~{8U$#xT0$T{XwyHwW0V7)-;0Z!MdO_d_L7UJQer<vG%B`C% z28|2!J4>qMTQduP?sKh7uUXNnPE!)iAXT%Xla5BoTXT$?mafKQCp|%hw^bcM8hn|r z-BRA*^=k_%5z{~ML}ShTrfM|0ZPl*2#zb}HNGmHJCo6+yUHjFObPQW*n~N7I(@d?~ zAvj^w4BM%6PU4~T=Ho6~Q7O`RuzcADhcB=DW;vWE`k66Zqu1O;YdJzkeEb%@K2cjI zCocMsYxIQCyXK4fQf-(?K&CP;_BI>OKvWcy7Yh3i!V+XMF0%d3O8)NOL()f}F$Th5 ztM^bppfDa_k`Wj%5g14}Gih`+x*~{l*>E03DDDtgrF7sKdv6~Y^pgGX3Sbq_^_CeD z@Qfo3etQ)zz!L~eh?@s#5T`&76h(5H>!s|Ph`alxiiL^27s7X0=!Omug2$$3adf|m zRDS{MlAI2tH}I47hvx6gN$QYL+&!AY+y5<1>1O<Sv^A~SD@t*YjcQ4?1C&4uR;hL* zN%<v!wI{aF^%?v0xecfdVS<IJr{fjk&%kgTG<{3_92i-DJ1{W+d0;5n8yWo{;EtcL z!BRyS?6iP|83mbNEO^=~5Z{>x=kBh+C8wOd_lF{TRSN-YWidMvgzWC-=s}n}kl<A* znf1tDC(ch3$`P%1x0?IBp}wmu;<~5~U4ta9-grpKaO37?w(<FRI3WHqx|qO7r03bW z5;6ZAg;(!BrO-G<fy-w-gpshh!J3sk)v#nHs+jSf891fDm=Md5f{lb2w<%*dJ?9s$ zC1rJb_#6zXGHu^{jO|Fq)W2H*x^QMsm_aOSyxZJsp%m+`uy6`!1F>M0XQK$5BAer( z4R6UTJVg@mDzxp{WO1&0MYAd=tv3|S^<=BlZz!=)4;w3-UbaIE6C05UB4xkRUn;WR zs}l^xOQnjxnOV`ONM|AmJkPwZxpHrvGrLnE<uLADQA*!^e+$Nz0Yjo=XbTCCmsoX% z8r%OFZg$&JF2kG%W#cjQ-~~>uWj%z$ryI@L#QB@4iPM$iH=`>D1x^JM1x_0d8fF^~ zMu-vkK=<GlS3p!iR_`FJ_gA2=Sqz{YML6@AN?#3dVqpz%{Bf)qK{+EFh8Q9ok~gCb zk~bNK1x%865w_(FA-nrkNrPQ%MFj~Kj#;4J+BI@DnJmtN19h!Cts5H0tix*=sBAZZ zm8&1BoW2El=r_E;X{4vX!C(0Ldprsb93agiC-Cwdvfg8qJSzAPo;r{9KELk>LB+(~ zEm*Why3;3O>W^H?jBIZ`gFtN&TES$+{seizl$u-taAPJ|ra?ed>#e+gI8KRC4tRHJ z+N_#iAw6l^cqP0{tzeWJ51!t&I@;`)FFsDjs~DVw&w@eV-fcds^BI0Awk%yyi7F2( z*Vara=hJ*^0Jl`O!mVXBJ!vXOZjf2V+Ahi5Ar`=loW7aZ#@Tbh!;t@RL_Vi2Py$+r zLw|YhpoL`XrqosE3!edO3>pXkCIa3!0#XGPUIRu0_00SFng|L|g!oDAZ(Rg3k>;;o z@?B1AvZMr3139l)TL4M`n+iD|DPG0PpABqH<;}mw|JwYUoWNva33N;D&o{x-D%;_r z2#sVmDj67N(S9RBeI-K})rhc_9)EfH;W}Z#22>=bb&@N!A8{0D^I~miNF=`n!}?70 z;`(d|C6TJ+2;^y388dqyLq~Z0nE;*rMlI72L0sn`{3SrgAz^06o3KtcF*KvIrOL<A z!IXwaaVlLRN)+dKZmh!==(UFiUv>2Gbcn-js(df10xu}9A+!dgn*0iXY+-J@2C?Gk z;dT;+@>lus#|-E!_HESN@UvjA5HY_O${y&_Q9y(w>u@r$-vM(E4z~^gIU^ujU}jwd z<=RzjGIM(d1!snY&|oB#5!)+;-qal69_VbJzt%Q7$F1jWW;<xrKKzId+EDga*d;yg z6y)Ny28Hjd4-FC2`~dpHGgEhQn1r7kWByt4`}ZL~$v^XqsF}Tyi;ca7h_SJefg{QP zrko%pE7|4G`S=xJ8s>#x$vZYL!PtN@qzXL(5T|B?%8mtN0#ADt)QpsA3VdNY&9S{F zEmM{b-inM4oDDmKA)wN4Rx=NpCpaGxbvipUK-2_8h4F=&&XwZ!=DYpoq^vc5K7H<N zS>)kioR3Lc7bS&=7wqS?vnVzX+nTC$HcuE}!dq$vJG1;TObMQ%+Obgcv_Lg=E66sn z3D_7r0Ry)qt}L-p);LmabZN}#FKZ}0hGo8RKan_+7^^8a4i@;)AD-7P|Dh{!Iid?m zfib`fuG6B46k&!=dni3vQ(COmc38Ol3z*&$N%-pk>JJ<-94V@3j!OrI{H_VV-`!=v zn0%QcsJB9T7_&4htJb)Q(uKP57G!Rd$Edj~EI8o?F7m;?UpTG2>#z*Z7mMnpB#5eA zCxVS=bmjYqgR><g>#(J7<OGnSFkgdrFwP|2ipHXwR?lVJvJ4fPu@mh*ZF5cxOrrGm zf+_nwxRI-JbfHRNOOwFZ%tdo!TEwr8t+tbdD;v|pn$51d;dIuFVpJ79T9oS}jYqS? z_AH=}wDFkhLSk#JX6&R>;1JEYPBqmXMbjG_gvn_pTemf_50XHCQ8?$$M!s9eyWym6 zF8E>KxqCx^^x>1-rZ9Xcbp|8=3-wT*XX^HW<>H}7H0$=9_(#K>zi1&ich?>IV;(^e zW(Od)?;hz&(YtX&9+B!m=(UqLGvsCwTqiUf_kuhFNVvNwQql;x2}gS3r3u5-e-jE8 z-bcSf?nes%tAj$>k$p_R%&>L}6K@J3Am79lCbuFy$OE;I^pA=3J))SB*&)43`bfm> z-0DKaOk)$;X-nMTH3Uv#?xS~TDH?pxJeuw7RfzhlJSuW_A(^;dBcD2Fe&fDA#msEI z0@Jo9Q)bA!G`D*Ft3q?I-NsP<X=cCt?fiV)e}=!RjlHEIiQ->%i~q_bDFOakSgxqi zKtlityp8^g0xUk~P%$)A;D<DpSXs_xgH@rC?$X++Oyn!_N3bkO>R~JY(D$7bGunhN z+kB_#%{m9`wd^lD3rRL#GPhF#;=6<~*sl}zyZxr0T=Y&Cj7MY41D6FfbX_-IHut>f zO?MlqUTR9f+*Or--8%SXuD&*WbEhp6N9R4n{s!I-EJTVrG`6oNGGNmdMh_+`p*MHa z*shl1v64LRL4}x1lOd#oU`xEgtx>r^d!}E(J*_lL1q;14pkmtXxYrRcPlHKpvFo}9 zTgMf@LM6ZJjR>0Eu(XR$pCRQMt7vO0t$W^g$0nBg={w(Ai7+)Ro#2-;F%g8@eQm}( zK9ZTdjhU6C6SZ3_VxnY7JRzbwQ3HcpF`c)O?TKcF$lI);?LNfpg)Y<5NY=LtkgYa# zRSfI-LDVTUHk0X#Jbw~8dttVExa!Phs!9+iJYB?z;a07ptWyybpK#W%EzL@~C)ZQ` z)li)E-m&Wm6xyV*fqTO$@s;hFVndvIg$k!EWLl0OAwGc~E>0KSpiu0+EJX8bnw_#W zMXhE9Adi%|sp}gfq+#2>hd2>31hv-j4D}$PhGYn4H2VH9f?d{=v+L*$%0P>4#Hoot zidIJ?_EFX$Ii4xlCC)CTEtn7ut7SOAYVhYJ%bxa>f$3@`#u_Fj_dwr6r-d<&rb7$r zT!q;r+-e;Uo%I$QGwei$gB#z}j1S>N+1>Z@A{bZL)Z<%bq4<VFx^p|@0OL@1+7{Ve zwOd~bizyuDXPObj<}%)>poXRo6@w=nRy1w^UmtPlz_gDNpxtl|g}-xHYrw#Qwe&LZ zW1?f@4~^rGc+z=&;#lHuag6@YI2QaXocafX%hg>xwfe8JIEPiPTJ*64su7#St<k%5 z18^f~n{kF3zSTrpb@8n6icfS5pswVQ*U1UN;Q|M)6QY1H0trGPAVFq>LXsc=LqU;% ziV6DuKIO}}Upp7tet3E#ZeK~ca54G(7;ktyk3uv6b(KM?2!QIjk}Y6b(Oa(`qUONt zby5`xV>EOx?Fz@qv@o~icm-h76Ttp%ZI-tFs@G}^H$w$+5bK(mbPxSPq%_N3CRk+o zn`Bj^$X5Wk<QJBnX>F2o61w7<b;X#OYzriDDzhDV^T@E<>k57ujicLB4QD)n<-2sD zrs-WdhVq7PbuKt0weA;Kk~7cB`$P9|``!|&MLa!;3k}tRn|@2SIO?WQRCV?Plr|~% zsl=wVy%6(7pzMk%@j~XHmh?1RZc`B_H~O^{N0=1H4E^$;DTc&_HsqDX)zLMLp%^M@ zF315P0O~1@V}~HjBABx>jMccKbIlR=lpv{O^(JYqI2LJYQS5lRe<<Wil59=YAt|zT z1r}LcRV0o^;eEx=O#6PvRHb8cJ>ZCPQWsXpWat@$64UWLnXr3Z!-<HNwK9I8E~y{W z+T2TJX)*-At7s=NuE$a|;aaDrkB6dpnrnZOZwPhKWVR)e>EsWT>d^;QJKa?)u^knx zI{K9ZCXrw^_aPV4?0O*!dvXH{IJ&_b?pJ{CjWUh}MVI7ZUb=gz)O;DperE$?x$RK3 zJAMb(v$g0Bwb9x)G_t+!V7<)ZeVo7v#GM~ZtkjsqvCxoJDH9{7#L<YAVaN1msOZqk zz_V}rDd?g!JlwZT#-8S|^Hl^35m$-CZUnHm$D3*j^gTI(mk6u8xfY!{Nm`9gm$EM& zd87az88UT1ib>og8S)9C-aW&tQ117X%mrr7=h3}QXD=hoE1+e*X!eL>?Z1~4Qj=wT zBK9C))Syb0l<Ft_wyT|h=PwuK)-5O2R(JPcWVq;XJ(7Ke)YyCtt7)P*fah=S;plMP zf6641fY#L-%84UMUb+^3Ng4!;tQ_Bs4Q)6t1GPk$?Dv-^QQIzf(rraS>gVtfz-&*v zn+9eRR6wK`BV$fO&nLY?1ZLvl%QNw8);zR#prL{ssupwPe3}DjcS}#_s8y+dlZXDC zNC=9eerKT!&LPo-c31#rV;?KB46RjqN`2H48mkxr(NH|Mr^S)$X_?t!M9szJzSF%? za{<kP_LKPGVAXIy9JGvAybCHlKcxOZ4COOzW@OEG;n+ebE_HrY3@j6@Xd0!++d?d* z4Bdo8-c$FyU#Iz_0O{m`L~$mg0^6xZn`M1ZF4g7Q+JG!!ERS;YmFLL|$fPT!5Agz# z;5H3d&;6~%hHc}CXQSDXNAf1-1^Zb#N8iJUO#rBYqgOmioF2`VFl58osHPuJwM~x~ z`^YGVhv?zh9w@0RpNa^J`KXR7(F)KkmEA=Uw)m!gK?S7Rl@PxtUO5(S^SiOB8O)4+ zk3_R}eBUwC$(v-;oKM4mCBrCQ6WY2$^~fD)p$17650w>?xqOM2g^^)w4A|NioAUQe zO)M;BHSO|tpHbc#-KNSsM!Y@rRYhhoSui>h=EfLG;qKbob2eLL<?NjSkV{tv4i1+6 z-iVr_PIzk+x(mEuUv4^Y8BW=?tz?bZo?%Lyv*A@H!l^=y0u~&F_;D7b>lZww;!@W2 zJ+d(I;01`SC%n)Nqy!eyL1N&B?p{a8x4OgrHP7K_aTTGFS(33GV7#C~C6XZ;336TG zb|Ypo>;Rwz$+C;<LNFd6+3A8o2fCn6l;QJit<IRe6fIkF6yzHo@=Z+FL?#)nBl#oP z{9j99W+{iWmbtXmwJLjW=wLkX^m4QN8Pe8nwME7ctU7vQNfZ_~DtW|G(&ilQJcE44 zJCJu3XD-0n0Sg{cf?{g-z}^$S?3CyzoOlo;g6aA5#T~3)#5k8Ipqe%%7F&VWgI$U? z>+CfWUI^`GXiMKUaylVh;nxdOlzF$ZJE0!GCB{sP|5{D9Z&F?@rI+nXFlO<MLw*zL z3b{l)Be#jtL2-LU2ErdL73mo@;Y^DsO9R*#-1nEywkVWo{?10y(lmd#QNG0I>e}KV zm2TMU1m+8x*rg3!LUcY`0p^1@_q`BR+TTfW3|SE86<74g_1uM>l;V<Satgq9S^<#b zDr>w42^<w42ch~mpbr0Niprd&XXy8f6T{gZXs1z^N59NSS{Dvwh&%a7^`zzYwMumJ zTUo3}rQA*jT3!ps9dT#!#MwDvZ6CC?g!5X%t<NSq_}Gg^t)YF79x&L~M2lhcxLMuV zJ60G}wt8!<kzyVeu4q_~frG@xMPC2+#rpQHGh33mK-Xy}`;Hs6s@yI{oCkkcI=2L{ z9nhaf-L^}tLqi(Tw?#sX?qXbnhAZjU)o%OQY9?PPZ=6v%@LW__weJxjIH4*j&XP%N zf!UFTu7MC;IvG)m;eg3^P{QVuq2Zjo)Dy*RJAX2R%D~*NgvV){pf|!l()uy0E1m2m zaWxC`#KryK1w9|=%?)!?ZNPHOxS4+S@8<v2l+>kOCZBOZg@%+eW^ZfbSG%OANHa{C zchc`ROSH{rC@?>k-^QcE^+uh%?(mT70eycc)&6a>gQIg|ybqL((KfqesX8&}s}2r% z3VL94h8C4Aq7E#09ruwMOcV|Q!@$EP)d&oVVV{b!R8k%_D4juZn<w{dI+=SM6CO!b z(6D(zmHN7Sj$gnDyzK6Yx~)-%utvRvT#)$=yWm>7t}~>O93akJCr)0p47n*da#N*f z_{{cDjXpa#eka_0PnUX@I6AHZ-4zl~qN@#zqhLKu5fK;Nm4nOBTH^R;O$k+&{PLJd ztaYglWx<^0$*)RO8cd!z@+uJSIZ9PrSu%hv1;JyDpSU0P<32+h4-qXr>F;kN&{BFD zZt*t0)*8-HaP#N#fS1QTadG8X6i_@rPE=sYHN$xuNnjKJ3*KE2Qk{q{BD*}JDy?`K zIXTg8PmTA)jDlNQDz@pmy5S6~!FUb{9G8YJJDzx<zdhKCuKh>Zx8!9XAq1IM9~~`x zb#lw*jlDfQ+0lGW_zebwHx`<Cau3u@sWZ7s<!Zy}GsjpM`wS89_QFQ_N8W~Q;q$(B z;^7}oZ>-xNO^3{`Ei(wB_DvS5+s5>J!}d2`ekS&$JEg78m2|@ssIJZvYwoN;R^tVZ zeqA?ep(g6l<_|-@zj{P~eF$_S+@2C~w#>*|4^eC-Ba@)pl223;SgHvID-c{UJLRI; zc{|geE-chM6S}C?d6cjcb{5)a8&R}&xQ=1Sk0qw*7ogj)D&@hFS2FvR<oDFm)$sQh zv}uQJbGuG1-Rt*NDyGjcsTT524(qPNt)fI{<q{nmq1&Kr=5@dawzXVFPvt8aaXZi+ z%*Fk=!PbKtXTly!a+puG@jYLr;XA0>LWpwMw}BBov$|R@t;06IJ~^9+MdRva^Jmqj ztS04vO#?b|d&inXF+PqbUU|lZc*Z~+wMZd)9xF|h+tp}d99P=n(<n!(JcKuUR|Drz zD3-4Qm>pFkxbP*sbeD{n8C1;d&ZslkY3aaoEdw1D5gEru7G&rNMWnp^<cVUt`rdSx zP@b{Qs$*3QaTD~86cRsc>W#3xxG5Frzda-yl9?pbp|uR3oLJ`cix<*JQiP^zE#JZT z$?h=k?sCZbRvA3*=EWa03&zLe=FJM!Dv+)-u97$<*jSkDIXCM8kg>08y3nuKOFA`E z#<_7T<mKirsk~FtlLk7;E>S&|aWOkXqk~+Ns+@Dbi{xyeJaTmiSOvDMHpaUHmUP|( zHZ@n-Yk9+WJ!;-NWE7X}!(6~RA}=PX!jHj3`A(dSp^rZgm(#P<FO8Sj)B)`Xxlr_( zN~PT2u5gd!5^G0F8)lRHK+0`kSx9y)q90b>`aXLXR2QZE2rrRW5Phn!ElbfFk|Ly1 z8bbAo-ZSo%H&68{YfGggwhunn@h$l(Qbr!t`%_Is@N8OYKV9~3MPGh(*1z`0XR-+f zcFs?W!M%k|`{aFq6s$wkyG#p#g1+HWK$v_k;iHZRhV{$7?F0|*w#Da>m-s?;;g9GN zuXiA6DNH2VLxFFHrX+C$6zB>J&JUTp5P{)<fBJYi+p5<$Th8!xOCY(*xG(QTcjQgZ zhh7T*iuT!o|8zXcV`OmYwF&;M8GU~Z=4R;-n)Aw(2}#$7Y4Zz{J*RZ5zjwW9I7iom zKwRG@LyZ}g)Qy$JrK+M(gH@0S<ens#n&xyF!lFL%zG+pvkglZEA~;+FioW5+JCdz$ z<rEF+p75wtj&-CdSTiv&#K;DO`er%VD-m1=l8XA6PNc0Q<|!3i0~u(;eBfGM_g5%C zT=SmudEFBsPtT_21}m&GUQjf4Jy~-GcF=jfp3DVZ03pLf;G0T-RbU=!A`{@c0em#D ztA^|p1TGQAZ%=xW9IFfic*U@%V^&v_LIKtCYh+bjqAs^}5Hay&T8g<kcIhwh()s`Z z%=cc#*gZ9l3Y4uu&4|aJTe=b;?V{;&BN5EN3@w%MD^<M8gN#_Wh8+DN<I|^wdH3yN zPc3%(UH3Daj>ER#>1J177}Jg1b;;Zauyi@G$Fn~QuLq^MN8QLqE%j57b(_C<6IeAf zkbI+OdRxfj+(K%ag>L;FNV}l>>3ET<2?x9(Y|S$*n!`Cei3K+e{9uu?sIm~!T}Y{l zV_Af=&Gibf3Bw5ICf}UZe1+>^jo4y~+ftzJ#jOkC-SSF`JhF~E5~ZGjvyECy^pFm2 z1%Z9&RT;kgGH0HKjnDM(OgI*~vZ+UXT1a+k2X{}wV;uDMJCL`qJM)+2+D=s=&1F{F zWfJQn^JUqZWG6%W?VxXxH&kaV>_jgNU$1A$)^DyKm;=^9I;t33_c3`G<+HEl+l3o) z&O+k%3Xn^qWJ?D?HLAtYpu?YT&zXfsubQTzFKe)N0Q(uNO$w|K2&~Vg!J(Bad0p)k zXEE&S)Gm%DT9Qxf(8H!ztFjLpCK(t;e3bbkNMSwn>s%3V%#j>!N;cSUx~fuEsX<IT zv?av=FG&0)tM^v38_yGMPaORle(5yyxG~APVg8_r!y}#B-)m2uV~?o~sC?|()YE7` zD(Q=oOCO)ZXow^qx%2B0^!g}-V|ss))oAOWs}Q-|u)e}gA7hrWjhOerFwAZf3=`Pe z%0hP$vK3?(M8N<RY;g!OS%nZwO6C5R9+=uE!=E`ZdCxIfAzJNT%|SK`uUqcjcrBaE zkUBg9<rNC}IhY|Sx}YAh-p}&v3CGv1O=FiMPeYt!Q8mobzdWYb-u$#MwXcJJx^G)z zm||>0YS+T~bhf<9ETk)s?A!^yLJQi^3gsajFh-=-X>HO}D1MtG%EE0JcaWU+ie+_u zvW&<F@=%Q$Y^G^f;byx5gR?s0UIOdA!r%0={pw9>#KrZJ^8Elt(|y|}>E2+~ltBr$ zrXKtCtp;T<oOYb`ViJ{@^<Y4k+=Fd-19B+LPEL`LFB&NI&4>oZK;61ViY$>*B{8wG zGjG#xUm<5%L8E%?d^Dke{s0VCEfPX9nAHoTYMw<m#<+{nwdn2_j&V;NT^4`la>jx+ zmklfD#is8Wlq0DmgtG?u1rzy#cKao|BDG~M)Xe9%LIr9XgPv=wQ^?=ydTz+hb>P(7 zWYm_mP&1`M?0A^=&ru}|z6ZyJ_)*;kdprRYY(L`)JF%l4hVKi#eRc4l#o4^5y$h#x zTQzFtC_h>Ea_R916#DtcE^l??=&$gE{P2E7DF+*P#s?)T#F5n**k#`>gW<~=>E6a5 zj0#t$-U--ZUlYuwwrxr)#qqCx83sMtlez~%UE}O}8bF&-;VO$kWTyZ)XFIXs*1kZm zl5V=%PTa21F^)Hh001WNOEyqx*}Sgm4y(#yl+>avoHMSrP0*Td&wzPV+NCk|DH<}H zdcaz6qo$rqa@88kBEYd(Ws5udcv<|>KvSE&ayKE;Z`GCG`fdsDFzrkruAH{(9(k2) z3GeI4mbdxt$w+T@!8BAA&+&t8RFLrgL<B<VEz2N}pX_q@s$#)Y8ck!9;!|tpL=_Ua zoah&fGNh%5^2gIJ0lUKDOv;oaz3|sZoUi#LcoCgF2l;jZS75KKq(8CV^-TaPlKTZG zv`^HJ=KS0P8>zzRroxpw*z-?5COs9ix;8;9sh#XtV<RWOTCUyUp4mDKHqdU|wcWlG z;JxoY*j;SBsHA;ZE_>RTZ9{q!e7vK6h<>;PNxUL_{KUWbJn08{V5d;{1@j%7zi{KD zpPrbZYTxHiVrxuwqBs6?zaUV~zpGFDOM>?M=S~$4inc}uf7W~%SbpAkDFIxtlu_1_ zfWU`H2&=_mqi2^j{8+kGW}?2Wd?TO){}CJ*ro0mv;TWqI%nIvtb&h{Y{<s?spIDUN z^80$JbF-Dd*Ztg4MM&WgB;DgYz4n6dCEerW{o(=n3%&r_mVPqhZ+HDpFULHMP&h^F z`Vr~;0xDWW>)>jkr_l6C!}iRfqciXT?leggOk)_K&j5FQdfu54pnF+)&>-m%^lJR` z`m3R&u`VV!qvG0Vfy*@P4j6WaRk2161v}+}j><`kWxaHe-rnhg(pJ1=fdS=kHp)5T zq*z6rW}AXIy0e2(@MJFg<z2pcYDwulFE}AqDZ&El&bO;><S)H-ftYR5BKhgjDW>>Q zHAW@wyeSidRNl~E#V@-~0){d;p@>{OSKYq*!)tfAtM+jC18H?DBVI86UWgFQvBq$c z7N4xqJ2YgGE>>?lObmQLG=e-FX@uXMH(1tB4jXvRvulXM;i1z5MLO`3?jcJ2@qnyu zK}{Ph#=@orntA0Hc+w<rR!prjZ;e(Q12vhxic;-qjMDUq^qC$NS$WjlU}!@f>l<%0 z1*H}XC5ZVxajVb+ux(DW3g2?>%+Y)aQF6b&%UC?o^z>B%P}XC=gf$aiSg^3ff#s4} zpe`vjUsy`qb?ApmF2!1W7w&zhxweKJx)QBa?1i{{F!I0`yCnX0qsOZP6}(qWubyv4 z#k!>M^-#gG(Mi&Z0<}IL$yQ?lPO?EssBrU$Z*~TU?~25w;6~vRGRamgswpu`ViA0- z_M14YDg-3^w}LOuS8||m&Q+B)GNTGuNPI#G976?^F6N@OLc}azSon3RCu~Nxzf=dS zb{W0<PmCqOj=rT>V2O}I2xNG9i&cDEGEHMO0_=HZ9ERv@SHr>_*elq$lBrZGs)D)0 zw3pVt?gJZ&3_dsYlh|;6?y{tY!Yg5cKHyL29qvZfFD-{M#_#rl5SC_n0$+8!3nt(i zTx{@rS$pxUq5a3%m<LaT%hU^bvmkoyUP)`XSo87Gw*C`Fl6#Y9gc>}|-1IPj@Q%1A zd<#1b(6`-5IMo|+b<jk-x#bcOM9kmz_&|wEy~+1RkErb1$+v?+9IGfy>krc;1=1lJ zv}*^Uj8!01L#CispNn}WO<;wdk*$MJfzHBV%|NDrwb$|}d5Dr)SnHaddlfXqY`EjF z@evkT*ua+FlU!~d*tHMozRstg+93~|e@*;25*0=H^U5UTw4hzHiq(iBb`OHobZp3d zyHj_kP!+=UZ0wNw9A)#%i+s<#TodZZ!IZ!>qc9QQAUWMD*!>OX?jGOnFJ@rx_Z+Uf zjl3Jz&>4VMi8b_9oO#$oHASGuVzV<|<dP{J_6{1K3&Zx;q%M;1hfC8h;WIqw9W@^h z=|Hc~f3eIuQ(+(WXBD*nZ>yka|C~No{G0@5_z!vsN{4V&5?Kk}aC!KR0|}BY9t4We z+ULIrMw4bp=tqLB*wu#wBrgCeQl)zl)=qt2u{en5p?V6acIjV7UGd3G5nqyieZOeo z%UZoS&E#!8ICZ;U7fyPcx%z@=g(L${*^M%m*7<UH1oN=!Fz-JleS<c>#+v7AHhF6H zB8|;!vb?(Xz3_l;HC#OZn96+mZtN_fn9{7^b$PWl(qJ03K4oP1toWIdwf+n>@@Uqu zz(2FL#8J_~pn%nTGIIv1cv+*MoA>)1>li0{iS(T69*>}qRS8puLv6vnqtJMRM(Q>; zoL!u2VZr>YY=jM(&A7q>8+GYUhDBxB*yjEdugN1LVD9dlb+Vb*0yEqhjuDn->N5GP zaX|t0j!BAn#ku>?X?<v93Ld<AnpwrUXLe3zZCO%Z<f&w=)8OgBh4J|l`ip!)1>sz> z`8dl!DQiMp>wR%a0p<D|*=gxVXfcC}nP5plgN5SS&a#rEm(lC($f_V$u#%Spu1w_q z=ZP81?d$y+rOHPGWvUHD3;rIYk}dmZ$cke}#l`dY1;Mkk&lS?rKkzB77VO#P47#mG z@Y|qRBafVY=AAb%dT;N?uEZx5W>EMe75Ht;%A$0n8?~2`OVYK{&fS~I=L=F(?SICl z8R3$%AG@WmlDu#<r*O+;uv?rOyhOG)ZY)~7M0#0vR(rfW0dgsiDqQl$v0A?Ws4>1L zthqSBCw}QT7kH)CoJlUWsT^5!pq<$XJkB&}H#%)<W}KV6p%Z%6809LeFD`lP8+N1e zPQFumEjv)W$~`UI4pFaEwKA6|Sx7Mm;hjhq;N6EyInPy3%ZxpD?|o7Sv~Vh?IRviJ zoItk9PY|Dyc_*n(q_P&IrD|Z!T%~$R_Q5Y?rZD)K)qgyw+;P5aX0~-IESPL#tK_9l zD@W2g0X*h8twu7H3bC+Tw4wNqI_y^jgsfh}jG|JH6(iR!HiA<N_8(nUjgNPPw3k-v ziM{bUcg?h(-;QRZ&HCtEa5MZrCqVKtI@qkPsxjN?x5StwW3v~ORvkHdcp8;O(05&V z@Xt)QuSj=b+m?YpU^EM{77gZ^NH6*E%kf?$+{xIKlov}Lq(fLII^i|RPuz4#*K8bF z?>B64mP|;EtvN;1xZuW>0R{<778pm?onFG8tl&pe>seMn7QLVo-yZBAnh#WJvl?-Y zcx||c`99uGKR7==2FvXq2v4}svS{EGt(;ic3#nQ?+AP+0vL&9iOD@{0OX^mVvt%P5 z3aT3l8tQL~QE!u7vR1uc6q!>>9Pj(<n;ybiWfF~OceQmTU$mWEB3sb8qa4&H<STo% zp0i5t03ow<#u?tu(>J%ZARk<1^A5K<-(BZEE<`!uFX+$Tb0s_+UPH^)(apqPxfWO& z8w#;bm?8mL&{wnJ9+gdn^0OXWoosVY-e($Sr=AB1yFYDLRJ3xhYgJN9m{a!8^+ZaV zUrv9x!@ik}ck_zQ(MFCf#Vtz}5PE2i6%U)e#G*NWwNSL;<zqc6W2B4cJ-0D=_p7xz z#N&Dieot}al`F^rZpY@giZ>IuZ)#rlmN{P)G}4i6t$COkC~6r<RGJW<hw&2^k~A>5 zpJx=`A>@YlFmm!F>%WMp2%-J0ehHtE#VjM6zW8Rz6=Dr<UkE77PaF8&`rr@|(ma89 zAbHOmM()H~A6H9meFE@UOO|1GY!w$6U$m;CFj=0&K$lW}Xrof(=UiLP^>Em~L&nzh zkUk4})t*ULoseC#cI10{%s=Hp40icxex+xnFIiGuLN>RvS$5CA(9V;1=aoB>D5{0^ zVK8@bIP_6{%&xQiAie6KvDb<2aPgJ7#9T`H_pPh9(6idDM}s@QWL0w5qduySt9el* z{oUF^TAAit0oL<63r&5)1$T4d%tFR1c3abdLJR8}X@t6F>B-YP)d=89ww%G`9IuVT zWfdi>s<?%(0a+*LO29$vyp0o(Hek}bnxDFlx6rYzE$Q7D=1yza>D6*@&YOJKhdo_9 zuslBFE_^U@f3;FR;BF~W(9D@=>Jy;XZWC=*_JbcwRmR%v&~DtAp4~))%Hx!LJh(Vz zV7Likr<|j1!fn+$a!vD8qg0wzM#^Q~A>p%+=Q^t|Xy=Cy%a}eb@w?+`h4ZtTPv`a2 z-u=9C2XABrCp(4OOWN|xQx6UT=V4amJ?UoSl=H0C5%{?;Ewh|5h3@GHfZlQTg&*25 z8HuJY9S?NPH%6x8b;Vz8mQLX@0T!IRORQNMiVHjHN;}^iGrFJDchU=-dryt+YsVWE z@7Lb0Mmk<*QM6Yo45m(6cux6MURf)f7MS=PWY4c|9q4-Vy~f|>p&iga$sOw%<Dl)? zODmlF0?9|tQsTjz_ib?wFphx#ZqM#38$UL8w7T+qfMNu9mZB2Pnu?Kyc>fYqR_uYc zR4Y#F)NXx{DSwZarl72R|5AQh{BmBk@Z0;xIp4@!O2K~Wqt)WuPwL<5!%xvuoa5eW z+=X5lcb^?F@mg5TyaUW677VxZ*DRZzOGc>Qhrn`=bja+S6o#fOI|3Gt)K)D>3!z)k zYf684oa5!(3=i(fv1c=)o_KhY(A>F3SJdMmA8B7|GnOp~8nn<clb*3J4%!!BChjIW zMeU7;j9hS@Sf-2*R!R>-7}$FiaJme(puhff>WHmpMJ`P{xeD@-1_ZoWn}}5=>>s1u z>OY)szvMhFtMFG7&S(YD0|QW<`P2aB`hb#}{2WzW7kWedfb(V#kNDeEcB_MqsT21f zsn3o^R2^8ev+Q%5z#A6X)deHorE~Ss!z}%+DWOpgPFQ!dZr1blv-jDG&Z!R8%j)-; z?0M$LQzRLcE|txnbNr(;gkFE1<|AP2Q-F#tCBaK^(L?jvBzVnpiQHX;Eg})r5I<{$ z%Lb1Oqu#eOw@qNrnv^J90UgTUES)^^B5H3=cc>N?e0X#g7-yt;mp}BEIAk-f2y+e6 zKI+#Jc&N=CNIU#Y!QPhKTu#KpuY7Aen4>e1<)U}yOmkUisVGbh<+ra_?K@C=h{2ok zC?`^$>Yb5r-{|5`*j}ez%BuFD*-eL8gLy>I-GIxe6fh{s$th@V<Z>B*Q?4iQNWVFL zHoI4a@;+Q2%1Ddcu(uPxGdE)&f12G1Ucz=_{umhR&~qkbQ*NA<Ie&UvolFl3OI%)d ztbGYCyyc%i6++*qaef~mF-cd<%P?q+T!pC0(m4$-ao_0o>P>2WOP|=x*s<n4cK2tk zSDcPSz6@<xP@glPJt#Y_j`dQxQyZ#SFBrZOVmEoV?X5ul!02^2;LMsEdDfnI!bz!3 zb+Bzgt6kp$?4;Y&eUAAB$_#@STCdN)WU-F%a;`1BtE(EbJCJ+clW}X7*0QhV=d1E2 zz75uRByW9GFE?Kis-LKP0Hz0HS4?%N&oN=o4DxTXTeLTxe=EK0iO5_TXeS--U^kBk zt-6HcAK)nQ-$7KK2w<C+xOddT)EsawknxW-M>J(~KLf~<+lv}sqL?}cU$k#!8!f)? zB;}Vxm8Sj=_P#nQs_1Q(Mrx35P(eZ(iJ=B1rMpwQJ9U5&rC|W+96~}uI;9(tMp_yN zMClsx0^_~wyWd*hZ>{_P{pa25?Du)zJp0U9FtaxuJPYWZawwfnqgm#^umttkbqN(_ z$;w2Sq9XJ?9Gx>walPr+Z(sXr-Qt8!0tUUy)*HO1#V(Gwsi$quXWldm?J(-T+);37 z`uuiY(;<z$<gJ8*(6Desz-E-G4MFwk_o2&uw%_zRr#~<QoC&?YUOkmQ1zprGUa0>( zwqIYEgcUHl7qoE2cU`Yx2~)gVusTh-sZH~Lylvzam^dadG^w(Ag*vU`p~5G6xWpkV zZu7(c_F&{8D78ilefH<uZ`0qtV*VkSf)?oXG0cA@G&00`JAbjJ319G!sJVU4ug;$m zG+lqmxp?y1Wf|ZfLqKX-4yPrN7}_e&@h|hfwo*5Bm@RaKYfL@uAawZ6@`?SegmjX4 z!cpa~*4<5ur-dhPOOF~gcOGsu7q@UTGTy9VC8nOAbxC<N6;CV9_{S&p(!a_0I(NDa z^Uyvo*S-lK#jU!kDio(P1=Gy2msqex5-OJm7pG|%W0`gwnH-p|_7qz0<|{dAn|fq; z`8yR)1$2?ZBI73fPB{-gQ2X}oEvSFJ=xx>XuQ7D_oIx81Ql1vzulELZWIewK<uac4 z!E?TlX=DtX&=B3dyr}O@I(z^2lw}b7HRX#_H20ssB=&|sYkvavGwm+jSJSOd>n)uP zXcS$FTc3eY>~7@z(f>+%G5=h2^ywClEBKw}>7)(M7kc~ahIwp+?}RY>_Mdh9AX>s= z2fO0W-P~;&Ljq?seeaCl7pMJdut=~tUFALYvAqF49k~+Y)lS|CYV!0~oX-3`v9os+ z12ZV7EcXANLNDP$E0J_FyW@4K=a<F4@0I=g!*6OmJ9yd^Js1)ya>{<9qA)#WUF^`5 zoSvpx`;$hpUe}9TMfs&((`Q~2ngxycW6`U#Va=by<cgHTN0(VMS;hU!PiY=Xz?%dL zKG_?peZv$zI@Zm->K#dW?yyseY54r<G?hRwTTw>+_V)m$gD?bL&+frnCHLkw`F)Yv zpMeo`HD=ePjbCF*s08u@!SjTqI3KTAF~Fs)7)R*ff+B`&iDgBZD^x#7IoSp(7D}ro zKT0-=#4`=ZJBTSM0R}$W<rmwBW<1NPGVf7|mKkJ-Ui8J9$xz1<J|Nvd$3@A>MSJo1 zk*fOR><2t*>O|R;580k!C7|GvCZdF(M351n;$z}#^OLIKQWg}Es$uELs8g9ynhD5s zp>&}-Jfj9sqUy<wJ!pRh@ggfjqr{ncG4`sx7{VK&gIS6-BRysh`GK0wZa`OoWmcLi zfZ~8wr%}Uf#@SvMF@;u2P^48OXhzqLA+wDli)v3Ajh29JPnL*2g=tAzhNnk3T4XEU zehwj**+v&caV)n*Z?|m+M988GV*Dw!m1?JK=a;cSp+WW5t|2nBXy1tt#BxMSDYGSM zFMza=I^oXXSJdYYp`@dqXx9jv;k5@u)S)=y0M*8lAeE5!WYL&W=(Gj4v}R(<uVmIx z4N;-$HDqQE?fVh8U*bjws*edmoKOo{=g4ExGQO~47NKP17on-)0Cm-$X5&^!tCKw< zXn3Vg&4cRtITr^K4q+!%#?V6lqN7Dnglbe+gvEp7`aV}4G5|>@Q^uM^i^?^4LAMN$ z@q)Z*{~7Tcm8!iZf)9e#jvhgcGLK5HQ$v?cw3m`A`+{UyUPc*W-OeX71R-zth%i8D zpl34C;>YA6+l$Ek4Ec*%&OS#!itDSW&Yn%M2hA012S85A{-Vqf?ZxHNp^Bn{v};Jr zY}zRzys>J~TQw#DGnjj2xyC3HC=#q`SSf%r{V~sW{C1ZJYZPzHQmq<xGv;L%ndhiq zdt#%?<-VeNV>6Nc1<as7BKwP)g1K34OKv9kf-Q|;hJ;6NEDItG0n2!xyhV*5{fn7` zN11EOWk#Q^G$z)*2qB6%!TN))r#%LOARq#yL)d@t^bE&ZA(#+%89Wp`)NOWy2Q!2f zIk{IT7wCdIH4@7x?bZ<h6xs(f8e{JuGLZcUa#R4CW8UVY_6`WH3^qCd^%EH#8jw`2 zY*VfMHDn+HfKCf2()9!`KWO)kfTGai*y?yPEwi?3$;hEXv1-^vs9o{RSY-N8pqPJh zH}%@xAXE`hbXvk0<*|JT2}(6-CW;<@N}et6vUIzc3=5hH+IL+~;$_QrNf{P&6;#^n zP15$ykoTmSxIhBeqTC6TLUgE_r^qsX`&h&<N(K&4Wh@m^jS@+gi3y}}t;(%Ng`=ow zdIFY>+EXKjF*C4%a$|mwLsU4s2tx&iYfkP{2p&o@YZHp=<7Ial3N$V>qx{V$?L80& zGGqJ(4A+)iMU-STXAMubWxn>Z2rhIZK!fqv2812Ohph?C^=Y=$SR$kZ<&?b%*HvKo zv5YSI7gVw0P3rbq2n(q(UISpSCU+Y}5q0F50d52RUQq5fst}5ajwkxEY`a5*GsXgj zujZICBpua-y@|>dZ&_TX9>p0GT(qeJK?Udbqd233zibM&|Aml6IAbrMp2?2UK}1oP z*qcaPDVAAed{B3=E{ivv+r=Rgq(9L&Q7-d~&|SHgO=V8eb|N3YVr?RHm3YD0#IT2w z4a>zwAw<Jsee-bdp;>HhC<-BZO>QV^3<@rpIGQi1TJENLy9Go;CI*!r8(;SbxQx^O zN=6kW3#0VQrhL05q?S}1)0dh@VQd0o1vw_=L>EJ+EZd}NuZBdEisShLDn94JQAW_~ z)Q-fKG24MM+$bg(j%AxN?TV0u++-AP^kUK$d|yl+^)YscE^0h!3$8DLTH&TZ`!)ni zrW}0{g`e#W`W~}cM6M933#tKG3#J}mMt#h^eIDX1<AT13s-$}aST=4~lG#ODME{es zDc*ho5hrUQJVW8p9m9qYqF%6`KinfSdzTx7!hn9Fd&Ij;(*8sSh62K*z5UX2yA7m^ z%pdEF)-@q_1l1G;s(pmHtk{kd(TY)ulJUtFbD6#Ub3`i|m;fj>HVtt>v0*>Q+T&an zlUYJ*MK{Xc6m36+M3VUvo}s#?<}#p2pncIgVq9iv7l;TzyTsQk-n41whR~2*p`DSr zM&_ELwxK#}9?>k{eh(}n0Q(ZPL2irzk_fpVEyK9P@l_jxLE2DaSkLkHgqGc80@1Hg z#qu{9+S?#Dq*pXjj&FIz%2QDAedT%4i6OdVEGY8rG|#whDAC&8dr)7XENbI#yuSVR zR3%1xU{DNMS0Lpz3Aljrx@!-%tk|>15ORZI${upVbIEe1!h0FIBGC~Ou_A$ggA<^R zfAjiGb?>YB8DUpokOY!?nRiEJ=(xuay}Q>*7v0ar72XfLYWHTIXx!0bSk;h&&iz1H zjD#rNL(IwU{fGS^y^D%*O6wk@Cx=uTBb5Y5WiRVpjB<{-_Xa8(?;UsRAu(l0Or7?< zfg+@xl<a$`Ix=AOlKZQ;`=nxQkq}$t)r<+!BR0}n=6$A&1#I^o{~$xIM3$l35s7I* zdOSg<HKU6(Ac0h(BMktMN+2@X)mKQR1(FHXy^j^Be$QMbMJgwd%wc5hfd9;fBa@Xu z);#&yeOyL4_X)YxB9&f9r4X`A3#IqU*GOMG$R0EpB7K=4ePJV&^vEcE|3xW}R9Yd; zjUa2#jBN0J1k%?wQt9$fi7fDbD^e+kRKk!^f{{_~CnA;gNTmca%1dOF`{_uf0@8IG zvIg?^!Sa2+PlOFQcX5BC%00UW_9O4XIK;ipIAnF=q>xz+A_qC7qc6xFHiq0gTAxEQ zHju+M(x@{s$Hqz|#u}+KM5ghtTMM%HK~+g2V=KFlO&>W3>mzl@d&ylC8KX6F_>8pX zgd9YXh1)^i%feFkM0X)1R3C})Kqdf3LWhxeixDzLKL|3$mq=(RGDdo2sr_n@N;jl3 z5?MJ_WS7O1?|mI8A$|RGGJ>?;j9j<}#7N~Jl39+t7n^mE%r{77Ix;*L<ce!HMk=|G zN&s@WKpJ2`8USk{F*rzNAyNrL8UVjUDy@*pX{7Zf<SGRt@7n`$q>>QHlt8ZCOQU<H zdoVI<A!OD|$evz*y6+I81gT^|Dg%)<y}o}Uz<BP<22;DgQ&|4oKf_?I$O?BND~y9& zW1W)s0epCRZw5#4J`NJVeeqO*8uxLm{6;FL?~_&qDj;XyAZO)}588!S$k_tqZ2kT6 zR0Sd*zbjM7Sxw|na$gD(mHSet0_ENQNSv`<mmW~J4f8j6Pc5V#<DI5~JOU1Dwmhuo zZbZ7H>^usT(k1X5L;VugeNuuj-+rGHx}N#ER3nUM(<?z*_PjX8lz2UOXeEKi@pZ%- zFd}fd70-Gnzw`6T$$sIM-6336)U~&{h0yZZE`mMi`_b%k8xBg{iM}GNHpd5l8Ew2R z3`$~_IHG=An6gss6m?FyvJ@!4UCehMuJJ#mo1PY|x|ye1OF39o9)j_DbaFHU{k*@@ zEX(d6+NRZBEZE_Z564hU^*64aEs9njH#qe@)chD`y5P+kaP^YZX0sYLat%5J1NJ_H z0Y}39a5Gq(>fh%}Ht$9xVKSgd|D-e8Rga<(4VV=u6hXV=@nJ+83_WTr9{B<Ovg1Jj zb2v8|gwKJd_l3XNG>&-re}Q}W!)VTE|9VKlEWpm|9u~0lvxP~xHAv{RF?fX2A9^f2 z4EKc@A{OT0f}r~2)C2vM>T#RIk(v=45X*V#iT;|$$B_Y$gZ~tw^fYyUcG*J|77a=V z3tl+x3-`daVDlG_$FsjYuwkO-3j^?B(7gZ7sz=($7Rcso;Rjp^_7$=46HX7ZL1g^( zP=$GbcQ!n}jQD|0Pa0!J5TMiJ#&)<Q>;kc{1V;rC9yRvEUxElv{K7`0{ONxky29kn z#Kz(3pqLZCs1XZ)dibF)jOEPe&!IGo1tB&IX9KAo`=yOc_-CygD#2_JV)Jle(8#f0 z*2tkh*S_Do5j=mB^+R)5@>%mF+zP~f>K8o1?r*YjXb+n{Yo3C8fs)Ug7vTgTmm|OU zk#zsX)k7UvFWd>_a_Sd4BI>`map(*?J^QogS3Yt9UfexIg%O^E`{7+6hJ8fQNFNxq zbBF^|JqLe-Pk@pU;9ht&2zH2Q9-#oYZXP~`abJLY;3Xi_LqyYv5V&>gkP|lO-}?8E z4z_y^9)VwgB=!(FBQfBBKZhhR*!ksmI2_crhsYlx1GOC>YDZka0o#Y7u%(O34tNYG z@BmRgVhX<geJBKLySVIvE5HKJF9+dEpqqU}xguEDHr}5Z%<PW^^50$CmPl{CnLU-b zxVBlk`EvpDzp360Jh>YA|C9f}ATXyJx%|<9C%8onZ5=MehlbJ?^x?wSrU>U#;(GGE zgLUJ}6Q|48JVJCu2H|sQz4OU2`1m*lROdrdtNW3%gyNFOImlh;s$)ep?(5$XKw$Jj zbfCwX+~m@#LTI3jANh^<nF~Kk%A?3|=}#QYbP=}MGFug<{Qc&Eq3F3C<cVD`)h*pB zr0DD-5dgeAaHI@CF&8aTiZ)3$n0$~H5EH=xbp`T0t7|Ck`jJN*=>Rlhr#5$U3eC&S zAs?jsLXl`-w6wBW^nEo1AQTazzc8~>Fy<PWF1+xB`n8*4=vuBe2h^v*i+_Ao5TH3$ zOwLZLBU7TUB$`24=3F_q^2wGUGM;Wq#=)S}XXas<m78d&^4J`CI-N@RR3-4oYX|;s z=ILE@dG3*-!j3UhwGEM7TVrp?ZGah6WiDfxCE?<^1RTTe4L1C9tF)mWc?6up9u2De zy{q6*yxeFGF3*O*n#vw@TCNDeO5fNnsa$1F`rmtdw$CHwfMU<)7FNdqG0}Auz8PI4 zxtyF_-o6_AQ>z02)#zS*v7r^JG2ciV5i!xZZ>z$9k;u9_-_|a?Tqh2b&AnAy!^mV{ zGlznH^TJA^dT>t(tqF;?LG#qgc+t1jV}MK4IJt|vuOffPY8k*KlG&j7=Srq}ZO>QQ zMUo$Se_VY{`3F|701Q#ghT#4cM)k5DIXV#i4}Eawil%x?Paz$M#EJv7y@x33Sj7XF zM$}cGRdwm+$wrn7gBk6s&I-CV)T?{y=~`)O^}r)5*kh!T3?i4nH2Zy$P?*fT;pM_g zvU*7m8K4b1#}Tl$_th3Va!K@(cW!J|6%ZKiU3FH{wUn31dA+hXQuK4x6mS#nU3pgC z!z4EW8TiokD9u?Nh@VGAej)rl(z_PezS3@6(DM?IXDbvr_xfec*B;5xo-ulIMOr|# zwLXUzkR#2>t)WXhSDX{-*<irmxB43}9d%OGkksXs+ej`aY$TLs<0c+TBmLHp_OGi_ zO-xTTtuygZeZ%Ljp*(+1=M`7Sn)X#-sG$rVr}JOed0UA{w$Q|}Yw{9Wl`udBaO}0R zXLgS~z#&hDe4Exf_dSOo&@l>7H?v;xRHS>AG<04r)WFfJLCQ0whmLNibjx+{FSO83 zr1QYD@2kDY_<>U2R|k=A2lP-I2a&mhEa>UDXVgX`^mNLzbi<!^w`2=Ah)26yxaB)| zAqrBPz)7MI2I)<h4~7CkN)zEpgg)R;1@RmV8)uZtEQX+|{rxnRN^sB`i9n`3f~l|2 zR%GblGgNijvuWcwEi8Wvf6zu0q&tzCG~&@LJ)xh(?Fx=7sOB{NbEcsT*K7U0PnI@Z z3(j9F5y-SbQ1?ySi7Xvx^a<G-m?LESgdCdM4>+OG1$dlGzs>;46#A_b`#;mT>cBB; zZv~9a5uiRo+os8b_fUo@&(sY$T8V-!_rVy^0F4Q<B$#`%(nMks%<VFxpoBwW_e@4v z*DzpUpFQnM<z?~Ow1BY#f}qdEu4(wdy>Hjnz#d`Tx9iZfcz_L+825a?5knVPyd^sb z6TX(5P)=&|yi6=e=M4ONW~f}RcRjpMnC4u2nYRWLpc-rgUMo*HB?bC4YfSu2y79cM zFA(Lpu@HWw>=T6UoiXW|ywP4c=~=%q>K3ScsyFOW%I~E|zv)|1@Rm~!dMNPIrm@{E zuHb@`LX<vt3w2P6F4^wQ=mAe3Bfq$%A6Z|C{hOHsd+7A&QP_q6U3uA-`rtN@Yx*c< z!;7xGe9LW+2Dqp;L6X!5T-2M0PZDx#PAw?paM|%yR8}>l-}Y@Tuu7_TZ;mdo;c(e* zkesMaVy7z<5V!FQTC-OkG5q2trays~<Ulv=@Mg@tci%hBq-tTaL4RT}$&gm{$5F(_ zU%Gm`H$M&lP@nOmw2e%<-P|p&!3o-t(W8(JW4hgfE#<+lqFMP{oP*VLBV#oS2PROs z-JAJ?MJU|iP2WK)l*0ba^g#fWaP%l^1D%fH)0Y1rwkSwz0y~M&1N@<YkdtBS%vPB} zAJn_=mIkT=H?Q@ifhxhdYw-g9_6X9xLc8<t2V2mQ$)m=NYFb#{7TzFS1Y|mqoRkb~ zRhz&aq!4bEp3qI=_5wE+lyjP{oIO)s(rcaDuT5*M1!t~p3;5e0u=<4T&KD1cpe{d- z-dnAmc`Hj8w07+qrv+4j>(>Cv5{9kQ`&VfJm6wpalXvYAulr)`&xZ~yps>-SuNy3M z5@lP2gM+jZC3g86aN4%)E!9D8kpTS((<D>3%d~<v&bFO1W#t>afWiIwwCmbS=-MfN zycK-0BQ$Ncs(N>sWC&+)xb6LjfT1p7#yf0wenUgTjQ7|}wso!aKs>_MX-5GuS8Dpp z+ijwJm&L@+w5!SX+rxeLLaiNE-#y=7<{r}NK`&hGXiF=L#DlLs$(jAu;L6AK!P;T1 zbGBi#aQ1hDs|XjCZ5@a!BPQ}?T3IX}%etgPoh(;IT%_cX&OorHyL#@dNTaI?mx6#H z8->cZ9@n9%Z^6~>yc*R%+*fLhO25p$X>>K=ni_ZPF#_^Z<nbFmrx^a;^Cqn<4X^N* zd5!h<ug=ECnOD_`9xLlcj>WTcjjrBYb)$~QMnG|jHGV@0is6x-skE|eJeJKT`Lonb zt|45-{Dv|VDq}s;LsMhH9-h4N)rp=fOvaOTbxB+q`H@&dIupSYo@2LpH@RkU71-A0 za%B`n>I_Xy20!<z%(E`}-TAr6cG}U{7^q7zAz-Lap)%E@G&D68T<ujEYF)D3xz#kI zS$*ua0yh5s!!g(x_?qIvwyu{eqcRdRt*i>K@Q-=m(9~?Ohj-;|<lZZvjA?Uc4ZgZg zaRH_sYmI?U6moWTi(DD?kro1mZWJmDJveD)jd(UYt4u>WKZ7-W+={KYcRCxt0;Q@G zeOA_uGs<S?zPg@p4No{88w33*C~WJlxiZ=!BLxiKQK&5USf!P9;Mwf0Dh%nY1Z(=b zMO$z0bqY7@70)U(yApFdPdaj%03#{tZR@DHGkPQE`3++zhSz#B)5`ksSPoX{ho;tp zpZmGNtV<3$KR5fTReSlZ7@3IW&VFll<>RKGc62fUrc<ce)roLt3`g4V8^S1t;XQ|G zWutg3N2^bVrZ$70zu7OgE;;ICYw?w;_Ik6DVZt%(m~R67OtEWUr^B7`Ba)Ecu#7@w zyQeR$Y#I-Ky!w1d=T9)n+x>iNhm+3KmNSED?YAqFCg8%^rWRLc?tn?h4HIA^MVoD% zH+RO*$Rz>877CT!9#~r05+3|?m0?I{FPH>8kXE*$XmiFl>PTiP(vzHHy?r(=-1>dO z@u{iEKr*_3;b8Lcfz_v3`&Q31ZajX&k>ue+t4eG3^YQRj+Tz)?R?h<NP`kQf?#$nV z+Wdyo$-~DR_Gx8*6j?6Zm4~KI@~izDq1GiA<6Espy4A=2TVPY?>{;A4&ra^X+n#f0 z?hh*S8*U`4AU1xbl^rU=FWpP6*{{as+ZGh6YXi1QO`S_-?b|%(xY-2^caw)NHZX>C zF7rtO_48)a+B|=8I|vvaC#zgp$yR#>ZY`J!+SeU$XI>7H4^3U?SKl61U|n)EzSXwy zvidl1>(X?mboRW>^P0QRuI`#U^JdUk!0;w{_-11#t?Wh-e&b$ey?rx|Xj@SH2QNdy zPk%UGnTp&bU;Lxp*5#hofutSq3{BnS9|rn;Lej-#k#zcUBwck9NiV#;@9w<bE{c1) z{y(}AlHMqdq?vp|(zyS5)%`~+`A75mN5lH(wHoP_|KBv=-*i24y7{*3cd3K2kyaU| zkio?K%Z25iRX!vQk%6Rv)seK;TqMnO8cB2cNAuxF=5X=PE8{=<XC(bn5=jrpN7CE= z<s$Jf7uY|qE=an2{y&=GJxzk?)|wRj=Cwxk@y#eAko6W#n0XU=^>0)_P6PFjW6Euv z12-=vIK~~XBs{Mf0At88={8mdksCs}Tc>xU?rjiv`Y$<1ywR<<JM(&9{#~0QuN!Wc z!A;KLjjIJRj1}wKC_{&Dx;X#&U;8)C|1*61;cy?H-M_GFZ~3pmul-l9eG~XE12i4X z&hiR$UY|`A=-8b_7EF!q=_;39;Rnu7QupLBtcKZ0^brvTM&`AxB)Y9rU5i3dnP0lG z#=q+29c8kleXo=oNc&z{vWF<Odl^_Gzup(;LM-D(n$jH$#8uAafIf+*B$BI?FQt|X zmoFvidl;`L3e90wr<eOIU&<htD(^_y#}hvTgsw1G>eDhRnGXVWc*FPIqWHs|R`q@` zJzLcqVj6cVbteAdR{EMaeob$J>Gzu6AX8nWg;TsO)PgQPg}RS5-ZnCCfyq0<!Z?2B zDfC#$T$Xk_z1!K%(TuoymC}jWV|8Yf=~oYLFVnBS$~bwBC<}{t;3KHA(rPwPP#|1t zZRR@@G|a*y9w-9kR9bBS*71k;xJ3zs$FEV^5Eu6FE;0>AS+K_gS)gUgtCzq!-f+CN znJFf&a7HWQ<UaM+#JWA|cEr=Y>Q=<leQ|=}>8mMb#Pz+rV@%F5d2>uV5qZ5#BC9Eu z#HW3{vrP06c~eaE(Rss6Sz&pLOj%Gy3*wR9F*9QB?#fL0W?H#C`DSvtc=={3xoY`l zI=M*sW{N)2_%j~pXXbr*+WGWuxLZwHcLZ=wX*C__%@e-6HZ#T)5MjX*e<lFUR9=k% z&MB{!1HE~}1J_clKZXMf(m#b+gvg&nTIj~pKI~J9rzP!kX8yc3^ONZ|kuE01)fB7S zegD4;4y?HSvHQrlmSXX-q^~kr{tH>3Q9LbKpIE#RH?&3B-IMkrWnI?oyU>90+RQXl zeVD~Nd1$0Xj=VEnUjTDzghgO{X~Y^zd<JFTJ7!@vs0_0{Mc+&2*@t}{%(J9@kC}y^ zLZy_e1fX3??tKM1%Ax6&q6ZJ+GoWJQOg2wq_y)vd<<i%)`Yn{)xeoN=7qI;@<hfqZ zyL`N0ROK0v>F;6odvG8fFGlP4QJy|nY?diTCd>RI%Oh2Rf%w?M)b-E(6Uqnp>r~8s zf(J_RVuXH4@+J_mc_wbzEQ^oHk4FRs*yG@->jM3U%I<9L;qr@N&FxGsFHLMe)<5Rv z8xW17NM9H4S5!Ixt>-f%9v$$-gE9OX<w4NqP9~V7iQUJMN9BA2@HpM{b;W)Mr33Bt zT4n^+fk?a&)X4th?vrw%0m4|Jl=Z%T8s&rM>&ncCrw7*Ym(+fd@&TdEKbQigspBs( z{nF*Hq0K*;Zlo7qf4q6L%a6*q%l8t}Jdg4CfSzRiv8WQyL%(vIC+q&qtS=T_g3Q;^ znJFW{qZnPWgsEm^>s`!x1c)%4DQS>>kXLL>s+sZn8uJVa;sZ|aBN%@NbAO>yh46tL zNt6uN^A4SU8>I@)1AP*$C$Q%o80&}3MK4>;f(+Ipnfo7^^1Wm{up+5>WXjud(yyyr zfqo!B@+S)X6JsLQCB;m4J)L=m4v~ao&6u2S#=SnzJVS$k;+)8|Is{$C?xrrkSifKf zQX<~r0HgwJgBar&QkN;$`<Q|Bh;SSg=>Yp6%~)9KvgbOS8Hk4n#u=6gunT(HPsZHv z0Fj8pB@^Hj#2&kpvTVOz&)fh&Wa2o#2yh8XkCRAge-y~yLDvscauqtTAz6sL?7<*> z6e!Tq)xV^)M|t2wA{Ktxg)tb*uDnNkpi0slb~%Vq{^&-qW4k|4X^;HCl%$!2B_3x{ zt_lYv$*i=;#%CAA9s3TaRT7s39GSp;hDw#TY-1@wavAc+B`C39jN~$!)(qouB9Z+1 z3q~gQSfZ=A_t9$o{b3!ioTNc~OJPqe-w{d02FoTqj*Oyw$02C0Z5dAF@F<kBQqaAK zXro_)aY`<Us`9aW3K0!sC`~1m`v)S!C%U}mV(y=a<{#+_<f1jE5!tQ(mepdM<}v4U zS7!Vj=Rj3S=kCOq7Pn2wOD6m+Owh8CNc8cvfH}qb8`<wKzPNNd_Y*{=1k*Zo)2@fe zewTvsnuFXK8Ofgr39h27Gt1I`SeOixic6<*!*KUtgvvU<?sn_vjMj^yb?6@GcazNs zp>^p_?JtW0VmH<j!5Qm$S0&f$WQ~H9sN96BI>Sn06J?DeOZiscSk8r|$C5-fkO_~4 z&By(aT?j7a%|#a;2)l@jkM@0_@6essFT$AhVv1&;pU<MZx*v<t<b|_M_h7#)qluIt z)jo68Y*>99r)+a*hIw~r|7Tfn(86NaNL-n0>5Dq5eFArE##Xr<+iunV%&0T6#%iL# zNAuBVc#V-nH%|(wQeUVDX*{x_oF!~5i9?Tl9(|kH(5vW$pZ${S^s-5hY^d}jGMv_3 z*Ry1y(!;#&Uh5{ZUxG6n)>+rZ7^kInoYrmEL9)&tGF;XR`u(F9&>GwO-TH%Noud~< z`bpgb8B1cZDTRsrvg6`oBcn>C=q)YL56l?TV?!y0G5w0-%KE#aq;C#aWOHv24;aU8 zz@Oqa13}+j9Z4`aF`dI=c!{q@`l!RN;cIuW{W}=OEv$Lw76G%pMX2)KB3Ni{5t?_1 z&vyv^J3~!(hPv)xcDJyRJDANK%;OH$cn1@^gSFnmOw4Z)+&s4kiaS@4cZi-l1o0i> z^DUzF`>i2U=UZ6$9ZdHQR&odXaR;NmgO%OEhHqiq0=J0iJ6AM!i0C^6^Bto44$*Uq zShBx06n%F!ba!=UcK6P#Pujy<k$NZ6Z^dcKt)OGRwb61X{O`oooj|`6@9%`vo#?s~ zjCUgMPFUQDwL3v_C*tpf=AD?h6MQ7M;ZWTP{W~FiC;UjJ_<xeCv?hiTzot{y>)`H{ zSd$n7#)kCVa1?gbV9M~n;}_5b4P~RHsRnyukd4`CDJ84n{FIj34Crhl)KqZMq$&&B zMPL)a1Neg!ZOKd`We*B!p6QO+FG!ahdK$bx%@IJj8bqq**CNafLR~(ogBcPJpVx44 z7apG}8o&Yz35Xv@tB_8FgbUaynUl=1s>{=`P}{|K^Uv{D3OOYKqXbnmBn_Fkaydza zMrXQP__->hdRZ28%ZN=!r^1(P(?5N3ikC@H`0|o$Ao??({!8tFzpR-H!OTqXvF`O8 ztxU00`;QdkpVp80g=b&Z4itXoLNNbektkF;(6xVn;Y2~IVNoF>fJvk75u2No{jLDx zFTX&F;yiY!nu9BGEhfb%phIJhw;|LUH!C;uy-<<(S(G<UK#tv$?5$jgb=VJEUEUDu z2q!zCxSXFo!!@BZk=Ehw?dpJWC!~tD&<5xUvCo9jKGP6M`NZO?=A7K6(xKJIlSD+# zi!Taz8zD8Yg^-ivV^7FJI3U5pHcl)I@G)}B%nwBOq !`L$g90W)%A0s*-5z)Ao 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%0Dk>L$gJ_69sMRjCbDRCfdn> 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�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�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%0DlT^{}8yffVaX{XQXaSZ~;#DVSy6BIl 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%0DTVs;dwHH>j1z^l3o()& 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 G8>~QXxCTu<5vB6`EX4m}~QD_x8U%xH+<| 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%0D$U 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�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�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 (V!yPsuY7_FskqVLa@d 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�o0&DaZi`(cO6tta4W&$HvH3mkrr01|#&EfUYo4wLU*j{`U6 znh5^wiGj|CaJLxIXJ}>vYw>qz3g%K{XaB64zXS~fJBoN9*@8G&q3m*_nyql;a3i}= zfchHsvY7=s#IR$7(=hnrsI><n>Y<*bG);#C;0J~UO(QYo?osLju&Gj{l)C<*Imw&9 zzIZlo<=~!1S>}wTR3Fc-fQ??GdUp9oT&@jy8hToo@bPK|EFf&E23N+3p{1iTALerF zSSM2d2FM&<TKas}fao*}VsQaZSjfUiDKhA}Uj9Vp96Elm%TLaUkR3HLN~8gQQ%2ai zO_)%F9AQE)!j)dkV-6XtyLqvc@I)Clc-V=B0flI5Jj2oj?p(EaQBQbr*q`g+y!avN zJdL)m8qPQ{GIu&1IYT0l2)n+&wzd*g1gh$oGra!vAcg`fNI0K>35O~Ej>3Fm{}}t^ z3LOIluF4g=&PBn3t-<E>d^-cDMn1ib))wxR&`s0Pqn0`0-GzRj^H~h0RuJ(RC^FZ9 z(3n4*DUuc3fYdY^4e<>)CVWgxAc+m&5Sbl(t8RfxBi+XM0|PsrsluMz;`SwLZhsuL zbAV%fS3rn-IFLPlS})$nyv_v7NbN$6@mOkZ|603HJQc?+l*z=_*OC0n<LIU1r{;lV zLI<@P-~sr64VBOqYS^1Z!c-<qfs7@Zj)h>{BQAHNMMpo?Qd8J_mI_%Y^SY7P$2;o5 z@#0jP6pzBAQO{4~DUD#f=_SUv*LuLgkd{Z$+cu61dy(tAMz3}ydYHn{4s{pv+Tc$s z3r3aR1=;X3L#^1Pk2UVoy^5xbRF+H;jy`Soik1fIUygq68Zpg{NeqI*uF1<P)h!FD z_s>m4qWwQTCGWc8Ha<l9Az7GZtcM;7N0P@l4uIp8Lu@50e>bzkL$FJELzz_F<Fql? z+8K4aBQn8}lip5t2o^D)#SkO+yTchxg&C%aMJ1X<#zJcDIR`D8$eLxNVrKIhVBQ__ zpqxmWF??_)>GhCjA11s#k%!0RQg8IhnJS<RgqlTUr$ksXv#Cm9p)Rkc4)4H;kcm%- z=-k$2kC9@H%5)<D4&1?%AiLwPEdiR)Vzw3`P5D%ta)xTU6mjHRxyDH#h<pN1uxz;c zEv-+A>C6h^)7C~T$a8x)Ni3F2a(nP$2G(sJG}T$YYNkGFwmvH{3p&YFt7bM^#JGTb z#oCxAo{6LQ!qlVaZ#KBj0prC^8rGKHFHY>ZMG?+t9?ZG7YQq=P4hs$ZHKLLw98Jt7 zwUThe9{EV|_XDqG{^+F05qEoyZkhf<ZmIqhQdBLl0Z?#v?Kb!1Pq04YHKQk?7LteN zbi+?LLZ<SkL#Tm<++#J3=rDJ+z{Afx{ey!$DK5g;hww1#Vg9u?)$A*Vh#w_8vQJC_ z(+tNNRnN(S%u6U3f_E?J@gIpQ;u!I?LZS>Uq$AxZt3q?-DdA!AXz_?gpY4IZ<WFQD zB8FA|!#B2=ZYXcypUT&uQ({lq{$w}E){=8R@PU8qt*;6#yt4gnm|>luKn(BW)~N-N zRRBy-j=L}c%cZpqTD5R7A`jaUbe!opL@Qpqt9xpzA6T-Pn-PLY4i6RSv(p3AimPnQ z+;cn&?U8vqPgv2FILtaO$e%pM3Hqj?vQLl>`xxw@q$|5~*$IfJm!_xq(KVWNL60T& zG%ZX;v!~v+D=BCwwQuNYpI)whlZ17PHmS><GyP@ql1CKh=>83!s2v2PKfDFjlLQ}G zgj*PWul6x!8$mW}Q@&X0XK>|q<vMriB*eq=QM=Pl+v}#a>b^p63okLQlpoo_)p>uK zXmL+FnnHChX1FlTgjG+MO@79&2P{6b5#M!&`zu)Dh`1RSCZ(k$xz$f+QVul;^KHv0 z%|+@BXn_6z{j}uA&~^38P0sRnGIpYQ#1TDUXrt(NEUoyFC}5SZAP%L+MVo7hLMwtN zZhv4h3*2(WzbJoQeP+H1eZ%dyB#Q}x&dglppMDAC4tHyl{mIU)HEleH^);7RoB~Ea zSTCj)DOvvY0K>Y!v<bmN@>W~GD}N<%vKXREM5XHnri-eUi)=eFFlo}2<%S23Zsf2W z)hoQxE11TMZleE@5UUFfDLag3)r-a7HZ<`H6<U`Zep?5NH}Xlxzt*Ztqqlis>=6=r zyNlaPAFJ#AUMd|dfX?80@mVIvCOI3;u>@@b*8I?-4VbJnTA{fwlN9<ihlo<`w2pem zI=-~2;X55kgqjaDX3+N|H5#`VYPXOEJlY=rmdNjreL0y5E)&U+Tcnl~c+(-z->@ez z?m$v%L!VjhrPi4Ou3~zZ_uJ9Nqxo+#`y6gHIXQz(dVOh+T#MgL5@Xa*EK-JzM3L;Z zsan$N&UdWoWE<_ds*rGNG5d2=V+4XPfNKQNYvvGvn(BT5b<B|hRp-fkSZLW^YfGE& z&t-8`tX&uiyJaQXjR+s-#vZc(FT{(CtlNk+7DCz*gP5sW{os{YL2-hWOUY(g;0-sO z$6V{2;0Z?s5U~euXUZxcSa%s8)VK5mt!Mib@MH#oF{0A~98@t>TD8oaTW1d`(O6v& zZYdqE{<wjN)AUJf1hU29*6x~=1+;h~ZBctD@Vm+VjH`5mKA0x)TIHV>k7#xv&3$f4 zI9yjuBchnp6uaY`<r~WyAcSm|a2rNa(|7X??C7RpA+x*Uu$abHxhgUr;aXu0R{^L$ zp}R2)|Cq8xV_^UOY0{hxUJ&W0yVjZ$GIGLdDQu+F%8d;BT~jN(W>J}juufnl#fxsU zBv@BCu)CY5^totw#0Z6!(AFiUkQ<IS&X#2ewwd5_D&b8`!Y5^4acf!9E%|!O)a~;! zO`;>1)71fZONynVSm|ki3owDfu6JsR;#NIdOLfg_gR|R_oo5!HXwRB~gPH-qvaYC8 z!h=^JKL9rD&6;6J!;Y8dN)%cj$=L5m^!z2u*r@~8NJJ*cF$zwCAYaWT@k((u^M8YY zJz*_M%$#f}8Eja;uvZgcH@XrHdK<pBXTVIH9f0(T`&gd)WKoOI5L5&Cz?uhI^7}kw z{`F^vj|^50t*RiI;#Z`Tb<tUnQg>+8^taDQi(j0%QcK@wzWw9NoV~vNm_4X*S9xcH zn&~s-=cNT``0jsxGZUgH|Fdy%b-U3=^CdGRqxw4%;y+YA3!9sm7&{o-7#b7*70&a& zuK!t=emM;!K^TyOY+q8$hea(b+w92vnXo`?Kv4uJ1$)s{Om=B;Y>O#Ug_$sJnp>~I zpYjK|2Em(XCk_v>r;_7eA3koOfIMq<g@%J!z@&qS(4dv^18mSUWe4JSB#skwVaZZj zgu-Bq%7Un<MNajdu;S6wQlq-r;qjnz9l$Jix$!m`R@x{U;xUF8lZAqo`@&#w){rVA zkz_EXuMZQv5BJvhlY<oefhesaM0hV#J<G}g^4S7z$aoXYIG>ID^z=c}*HV;uTxff{ zN>M+}<jGnzhrHEHYrfvV#X|*99NJ7}vJndRz@H*kvdJH_FdB|i2D+9FJS4Z+=JgNf z+34qQ^^;%98sLM{MKkA;*sA!lU!rT-v#@4yaAL0{E&RyuU`Zn-K0`^lESc8Fb1*p* zl|5z4Z+|gG{2ZNPoL@oJ*k31xe_zk>A4Z4&-;0tdzb@0q|07em;1?S5)iSstA+H&d zu2f(OdPiW0LBjRUx<YWBNqhOl(s=dr4)~M&kU0TmBDi7v<T*zsho{Nm`|m%nKrZ@| z{>IQM)M~~twhkD3v1ZM)q6hc^wPgy&s>JZXFz7}t(Zlcr$uNL$O*WV!ISgGrIn~?3 zDvK4?0hDG7*SFa9T!cB^qel|3Rm)vU8^LU5wD`~Q$a;l*b<Ug)!R)O>J1*jst5{{_ z*{ouefKlA}M#_Zo90sw*L$hg@Mi-Jb87)Zx2`8z9o6X~&c{dJLWQ++zCE6C=O)H7X zTCFaf&Z3xwX255vxr}}NMG(T0dnAvo!C>z~g$=tu%|r&r?Jw#lyTx7!6XF!Vb;h1t z=P1rLqsumq<!JG)f4*xt0=ZtN8^p9P<zDTC#uTU>TRM?Rkn!=%EB{$(+&pse>{;o` z1b;Y*&lTA~I(^xG`<-BJE8YzA@X?yb3<4(f!&@cn0TdNz5XLBU8i5NmKX4e)joXjR zXNP-NJcUpzL@6J<$Z!@Tg@kZXGCkm#owkQ?klC0<9y>Qa|CK&diSrfmABRRmUd7dl zuWg|BMH>G5+ko;vIy6e_TN*q3oA@^<LLRP{{|DeRms)w2DCB+>Km`#RJQRRb(OA0V zqS|&~hl|~lI}qZ=8lUR>v7deQ+{On)9SZ^Bm-6H4y>Zq=Q9}s*=rpdp-uy7JjiS%! zqTx@jlZee)JRej9MCwB$bq8HVtk=?3t(v71mG9N6KagOZ^As~xxgfn?j8D!SrRvCL z?jE=PLw2G}>OyaG+lC%m?l9(8;L8Y-BY>9{r{k}D;3%rO(1Nc!`~CI#_wSwiKX>m! zw$^sePUbeIU$m2ek-nXivBN)Ms#3*T5lI!<rz*WhAB)nTzhMb13>{I>s&OeUp$tKS zm|zK?#=F~!R^PZjef6AhrF7nRzS^Y-B$F{8FY|=%G+3ti$R-H_F-Sixb&|((%5nO& z)%Ek`aoQA!H?S%fFWcg{zaeaznY^WRFA1<dVhQm(Dhvaq9<%Mnoz3r%SUF^;O6!P- ze5|p6;48WOQOWDe{VQav$PUJq95~NxbtbS22hu)16W?4}G*06hnw|wg^u*wF05fh^ zjB$u4vRP$n(WK2J0vKtto;64lbY&vhBENCoHR94!aZ@xh;gNJ5)pPL*B}iy4_uqAz ztr_rF)kT;h)MW^rS8Z^<jf@Yz$E6p#Oq(@2o?ib0IKotkjMyx@1yErF%zEnr<JsKn zDIlDFqw_|&$R!wuEP!zIAKMcev*%w?tc6GEKaGIW!{A0Zl-Hu2Od@$?Yi3N-(i#_w zyPlH2wle!EersztSfIZ2fWzqi>|Suq_E0x3B-H}c3f~ZH?_k7hHcGi45SULy;h8W5 zI$yGkCi{8!4YCaT5Z`^Jh1Tg274{IrQ*SzA>$j$+O6Pjc1*A%AGy6+Xof$~FD3d8- z)y+Z*b}787YE@M$Cisw;ttly?12~^AerN9=7Q>Avab6c~$1J)~++DCAx;aK}n5i}t z&eSlW_*z8{3y?O1U2wFeuo!LMpC_6s<mIzRyXL70r|sS{IHC-K$hDG2-zMU%6z+|a zclFgZJhAi-Cil|06}eBdQd>;1rrkax%Gu+Dy*8PqDDRHEZwuQ)8p?ZxUqPU|f;tzH zl-Y+f52{*|$rMIN-aIaV#mm3_!aHECG6>pz89fB-u8D{B+chaFA6t1hzBuvD0wrW7 z(FzJ5vuvN<<PJPpws}3VFf9$u2(ZoAor6`|t0JpFe~ea!-%?78=H<_MOMO<{2Qw{U zoK0H`ez@NJ6jD<L+#`T^<)p2uUeoMi-5@O6)RH%b_VWwEIL(RCMqz8aYvqpDW>?kK z-)9U1ftlmvjb9)e-1A34SE7X=It^1cl#MP7z^&K{Q@SO8us|wNJ5jLG&Utox@ApK% zxe`aYGE7*I2wO{;Ne;!mUzAiL<k#+FzlrO*LEa^cfs^`-{ITDtDO1#BUv^JLOI^^6 zkOq|r{fFocyv+qchZk+l@5O8Hdt7@6^;MpyJGjQJYe!?GneH^}mW=owGs61uW^d{d zlB{=e+p#1+0SIFPLtd_x964XEraP$gs&I8(P|7Vj(bzP)VpdMU+g`AHq}FNSxiq0r zJImNIiq}rCj!m#m5nW>Wt<bmceY!k9JUAdaNnS(TmQO0dB?JbCKk<w9elm^>krgzF zNE4h@bHKc&7K3CU4<fw&WeZE=iuHy5@?l^={vGK2hkW-x0rwv?_rHMWt3zYx?C@1E zIekIUzp%#@Q54z71g$QR9}yABnlda2f0v}7(i<tF(o6>?1|7ouw0P2lm};EXRNd;% z_XXsfqjBw_;la^YN%ra-m`sJa<N({n<Z>hRm3z9gzTWrqZao`_x7X)~VhhFqr47ZC z2X_1usaW*-H)NCzgok#64%TlNXHcxjR$vT%o=_5BQs8+Uo3k?cBNx%;iOxwbm~&jA z7PC|wQI^a$3#V4RPCOyudX0;!{Pf7is#1;yz^+7SL@U6U1tu%sW}MM6*dqAoh1MN# zQ?^B~Tx{tGxL5xOva+Viu3Ee+Z}{?4r?=IQ)x=`g$<)IHSjtpYG>u!tuRk-@QZHh7 ziJXP}l1g-nS8b~lvRPgb3ZP~pktAYKnhPA_$)Dy};(~!rtkOq*y%)!?v|QhCB4-vd zn`ds-W?qm9j=!oz$Qjb@#+!v}@UVfok#}R7=#F?V*c|Tu@X>=xh|r;R`Aq&|#j3>s z8#{19gz6pzyef_W3s#5q;Apeqx4Cjs%IPAp`54I7QCal2XpzCW5Q7lY%&eo}i;F38 z9gcXu{LeA075B9g;LlAw=B>*`7NTRvVwY;1^`%Eamo#Wq9A(QmY8%{+e$h~AL`FJ~ z0i^drK~7q$O*a&4?+|O}`v$malNt+W>&WVpJh8ral5s*g2)vv;J+43;Vhq~s*x4V4 z^mu(?*PSgZp{p4(ZKKf!q(RX<4d>_wq)jX8MQBsL?jb)Og;qpZ0@GIXo-g8h=(&V_ z1oULTB`!}sQu+YSuJRcB8)KuwN<N<~2R3V4O;SbM@WrbWVq7K~O$Hr==>e4lEZ$=Z z&Q^JGzVv&!Q0YneeB7%CG~rXx;UCiNkIjVlK8>5K#~a#Wa6I4p4o+7E<xZsLM8L$< zdYB2F<|kV6)iLF*XP-K_y7(W_$(x}UK4Uy^EP_blB=|rijkAPapl=nQd<gR+!tXPX z;chYCZaIq%V1-9f?@)IUt6I=BK~--Mz9aA;$OvY<<o)SD_0(|$<v$e=kNIRF_T={& zK=)c8ojXuE#CS_QpGf(HCkJ;pHGL`r?~?k%0sLAj^?(*(nhi5E8DOK@3L{>Hk8k@s zt|OquYg;7s)&)C9N-xxELL|8;D-dYXxP+|TjYlOES7(}v>sq5o9o{|ag9>C{c9eEW zWS)4di$DDXMF3KEEEVlwo57ynsgG`CRTd+yC>nfricok5)bBeXoO|^CCYgJ;h%j$Y z#T(AlC_ET3VZ)2zi$<&+-0vskWo`X@5Ci#SI4%+oCwz|ulHO~KKLIf=$X-60y=Xj? zx^QBf{9D%0#2_Ue#1e0)w2FO2CGSvvzJJv<MG#Wvw_o)f^WQ=Y=YOuQ`6tBuzsRC$ z{uS(k?xRvigeM^e4Eaq0YYrK4y*GnmCq@t{hX9;8n8Sl|%0SqNBJqI#rB-*HZ|1Wn z*ac92A?3^eDHjc&*+oSWjvd}R%FMKM+4YJ$-L-7<@$|U7{Vk(69;U4(qZew-+-XlH z&BS%^JPYuO;j~jv4Yzj()76uVLFh}ut81#Krz|AWp9WU7`%TC-v%N?^u~m}|$J5v( z&2Q7_IK$z*&2&X)wFZ+r^g3EUd)#uWNPjZbIeL9#QI6y*Ix$utyVg9TF2W;o8DnZv zIYXoND>*eB&0NFL3X?iqwPUZNmch2d(bX+D4pGQsv|<ggY{$_*fU6`$J)M*^UMQ|m z7~E1E@iSBABZfR20jmE*`}k4hEAJ)HJbjC}KQxxLKr-JLFpyCHbLn9+l~vblL8Z0b zszO8f<ZG4<GI&6qz*$VnHE!B|S5^?fSYDVCcKM)56bfT#y?32ZG)J+~E?K_?X94DY za;Ay3X;=CZQizyxHO$ZxV7_enj4HG}vO#1xPp$#brrFZ)7PgScf5cdDu3cYm8>Mep zso|*~8aLS_7HfuGF0qepSG8Whfr(Z~+i)F7_EKObt|jLWWr_)#vWD>~V<Kh?kgs%z z-gUz+VkZXwjee41^s6EbzNv5HCcZF;>1R@$$Ro*QSahnsZ;3%}sE0mUC{`k|5v7Qr z*Y`0hPbH*K6A$7P=;PC$0UfTno%uu0Ozo8uqRAxAOz>4zOB6vRmv07#*6nc)Vvf%M zV<oXe15L&o4TY#i)FSb*!|47}TtO7G?@0Pi%}K%!_Yr}nmTpDL#0uj5L=v@@{sFrS zQx~BlaT&blcjEBSc)olLo~0<78~|2~S&^tat^7G9@7Rkl>S+V7La>e^A@o6OeIKkP z8Iw`-78IXN<jovME@>Gk8=T>qs@^&IfXaNlU}tvp1$*Rxh0cd0E5Q>$lr8_GjCOFa zJr0_k{IIfDMQ*Mk(w)=#c_EejYv>=eKPk;zVY~bp!RS-xA9Duem$#&I*C}a2QipOF zQ6UD{9_@ms)eBb|IT4D0%ahZ~rqSL>w)4#gDBI@c8g{+4T4PU|Mn|+^R^eRp7G;;k zlDj?YWX0>{iED{jDtLF}%mNWymcl6|JqkU^n>7Ghga1^~lU~f0p|)HN{HB~eI?r+8 z@}iH2Aq6|XV;PzT-p%sWOj;S>kn=rCKg4CLSUvFp8S~YFuGiriO)g7l@*tbw275Hy zTxgKq+cOrQ#+NYn?Ys6f7I=d1^|#qq5Pj_7kk6L0esYHb&MPc~U7cRvhsa%Gd+7Y^ z8Ho{!Q$_P!A-nPrGvxx6?;;r%b7g@Vvh%X}N2ENaL80~5DPmo{1Fa8I8N=+QmW;hV zYx;!s<BFgJFEy*k!m3cRcSLc7K<xKeoR<gCt)^mKfld7RoDa|nP&%SzlI-#qg2`)< z-x`NS<Ddgc;)Dng8IXom#3;ihQ}9>4kbDJhb(7xW<35S@;A?bqwNJANHm*Xd!YW3) z1z%(Yyd0kUpp6K#ZkZ%5gcL4BfAWObIQI;5qKipXbRt^XhOlf8D930elO*$_@1zl~ zH4HT3?#+2IuV(6VVSdXI2TB9YX#|=f29gGz(E!r2Br*nkL?<8=RRx=B7bIe80+A68 zTd_21Lycic<SNDv`Cq}FY?0-PzdNrG9l;>h^MAw3|CJr_YlZ|u+kZyWt5Q<;Y;M^j zyxKM<8btS#zdTTwiIf*X71V4BG0idX(5padZ+7CzY~Y-9GS3(>+Hz<Z<yv-(G4+pj zigMxW0DJKBj9*?@pxYkGeI}&CXfXN!5rW_Zo4ii(ptbq6;ur`6t^5I0kN8Wp&vy_U ziVn%&p7RuKf+}{v6m@m}h+s89NX?vcpMSysG*l5?@|T)|^l!tm+5U6zuV8F#>!NQZ zr0?u#{BP&`M1^sQFXD|S6@$yr+FPk|I?+iUk6k61Mxg{s@Jz4}+SML&XqGuP)%=}; zjgY+M8sv@q#-s$Fu*8q}C~LzJPkd`jSLfTg0SP=-J?)`Z0)|7Rn8*pQQ0rRPq0psd zmEb3JBoWF|^m03ljN~I|zY>?ip3zJ<@(o9K!a%|r=T6=D?~xUvIq~Yez+5}Z7mpF+ zaCk%m=wXS_783V32+r^QI$Sf}d<&cjePk=kVXPD)F)uhi>$_}(RbH?PrHdH1uG}2h zKLsc~U|gKv{Y#j5LO|@1Q_lxwPreLCVZ2Iy3y^>25Ka;=QFioVb04lYXp_+2e8;q? znV5armb;mC%hT6&UpM1(Z<FmNan$Z_P1KliB4(NP>*#ikI+|-+$Fh2H8R3(cu-$t+ z0!3T&=yUCn>(S#=Fi)Dz*i4hWKc%1VMa&};Sc{k}!3ry&;@$lZ840lNM)2I!z0Ew- z@UiB%{t|qSp3110e-Sk8f6LSTcUJR%x(5IE)vRn%`NwMND`RW^wVFXoL1F(`%~P|q zk%@+n1T0m5XoQVt`MpUw0bw~1@hP6xBi^`<PCg!x5`7kEEJxZy?F4kjNV%X<ULo^* z$4SwRWUW8%^Tbff-CI=|Ozbq9NHEVbB?C8hb`*I`J`|x8E>1lM9MOV?(c)ySP=<hw zQ1oMjWE$Rx(8<O`M0v?uc2p-QK&MO&xR35x7cy_JpGt!`h5x|S?K*8Yg8Z{(j6>yA zOy}>LU2+)2S;HDON;KijQ+?!+{28O{kA%w<oswfA6fqn{I_+4k6CF6XB=oY+sSAVD z-p}HRK`5c$#h&kycZ+SU?|-&=Fvff#mp6h$=xhNZ^Sz)vLZt6s8UxRCP0MqHbAms1 z=94kt6=-gOj$lY>15TKRV9&Ka=`M~YtB>0W)w&5wYUcSd8ujEw$|)0y%&HKpYWxp9 zl4nBm{e-LJZg~Ho+rH)VN&Ww`noR#Z@g*uqO9Bg^`<QHQOfpZ7jd2EnSDG<JOF)?X z58B?b$<nS_+wJbMZFSkUZQHhOb!nDuciA?(Y}>YN?7Fcc_LukBYwb5y#QX&_uVZA6 zGc(We(<~SoZoSZXs=}Vs<!e1(n*#*r<vYlG{?U3rAAuN{$$@*ed-kKD$;Ka@&2Je7 ztbXVVFjnY8^nI35r@*GrEe5YqvdzRToYk#<hs^;NWpjp8Sf#Y+GuDGB$-C1PSC!8d zL?o*!EXmv#>^a=T_j*T9(8HAU3P?0qUS~+@RxOoRm~pS2zZL0}RvIzYfeJts)PO}t z3Zy0U!Bm2Iot`?bAnW)c6Db6DVqeEY4Z(6J;VF}BLQYC+Ov9l_$Fg2xaf3VLrll8? zMv8Pe2+&J?5IGt#MxYK^s(baQ$rxiyi{G8AZkco|0Zm_85UHSkmfby)+1<_dl-Y?| zu4#y<u0XWg?Ur41$1iSCT+j;pn_my#<Lwyw0+V9H49W?(=kca-v&>&+Y4;B!6w)aS zhlCa|Yvob&4^YzF1?a5^>}^Eub8HO4t&GNO{|aZ00>+lb{|cN;{~?@pt>pM>e!p=T zxSX&S`I`nZm$c7iosW^7j==7K{6D1bE)0Gm<O4C@wokTCzS1*Z>Q>o)i~2Hbfi44G zfZjvjQ66;mX9Q@~xDO7l#jTxdo_9H}`4q^X&>cC?BS9Y*?uM03S5vlQZ6x*?rH>rc z_HvWfljh?>V`t;LQv)o%p1F?pGKhy+MA6Z9*hKr{Grq6_prTvSiHzEv<6s`Iu;e$t z14r#c+uq|8(_<cle?9abUh@^u!M_3;YEc$z8ZP-yKmlI?MXRJvl<lY&qLb?&a<XDb zIGnK73-3--H2FCx_kOBlYTl^@Ve9+oD+}nM+O`m#I@<5enVzfRn}m<<48*-Y*!Y0; z{O%dW1+B5W_x&7*WZNhNf|>xOUrod#m-ja}*X&)9?#Lv00gL=VOlUcZQ65Flm?YC} zpn;m`&RWEY;CLVC@=(g((}<kjI^$OVD*<KxPXRs357YzkcNw~xvep7y$8<GtZQz|R zP@KxaoB9L(f-~I~?k5xjJ2rO9bIWr%IM(jl(fOTiz~u*hIi?z8jA4i>&LYGFx<mf~ z4xXc=Lz8U-(4_rqqDV>a??q)<y8QGg%1V*m$}1Z;Rm3k7-}F(~$Be107!Nu-FTh>{ zdMSOfGtW(^G>ew1oAa=@?i4w?Oj;wRhIhfs7ooxb5*p51{}-XN{E$T`fIh-U+JPvX z5M04>wN~QN3Xv>onoK&+6HyQJ2LWN-=0+u+`x(S;zWcbTnqj#t&L%%<P)nIqKQ6)h zD$mS<X9wc;_w`S149L2`G93QAWVm1v#laukf?O|%9)0PaubgKfXY4n0W|8q=^>8VH z@%SY5Axg-G7{{R>zaFlnX0v_Bd5aQOgfIk2YE@z)OTigwr^k@O^l?HR8B5`qk+6&i z4SoLhJ<;qIO|t&~j41Q}yc+r^o|(#;imM{XA4Iw;s03_)HSlveLx1TRHj*jHGlgO~ zL{b8hkf{(Z2vPgQ5rsjtmCxzVY4fwxRz+D(F49Z)OT6Q|@_ZA$5h6WvlRtHBhp!Xt zZDsSPz8_CeU5Hu3Vtmr_b@+n4+5iy1D}#yL{x}dI7}3O7EGK@VnjD`}5aKl&-2(Bz zD8Kguwbu}W9YayyH@!QCj&|2!X;a^gfN!}m{ljm+RHeyUvFXI!Mbf##Wz`1i*Eey` z)&kY}lc-;DI*;l7fJ;`bHZhagM{uphO4qRT1-SHuM;A(0r7EdAYimhe)draF<PC+V zX|281BBk@zHvN$&St39!>(1|?Cg5rwECMM+%i3Aj4xMz6yp=DLC2tVx*Jq;Z2c7FH zH4oaD`hIrjLEosW{?x;k=UTc)=1!Zl>*Q&n<12|go+h<fHelo8Ln1wv7mgo(p!r*r zv1QGwqu5;sLYD?<8@P5l7C$6xGjWy8TE{9-O_J{6RW!P6&2c{5>X}9RiBOUrXB5UM zq=tv_uJ1^T|B~Aui2G$(WH@VIJhxtqc`t^TwrH&~(VkRBM26+lq}+7L;e|5zdD}Kz zfRga#cZT^Hfr{)EUIbnEYX_s3tl6)FFTC>?qk|(cNZpeWFadEEPN<t^_nKIrF-S{n z2qokJ`}NxOJ8}%?cn*9_aa*To8*3shHalX&d-9$bXU2PV*ssJqQI6)$5mN7pK}IUu zu^DbQ!DL&9bI487Uvya8T7fO#hwOz#&+a?W`7xq?G(*BC#t_ehk3T;EOZYo~{B^Sy zfn?K=eDOcAo|tZQ{m|(KNMhCAaE1km*!a0bn#CItTXRA*ySXw2ELwyh=smtSx_O&? zdpO~C0<3bmQi1VM+HWy>$u!u-(&j~25TW{#l4ejfp|=V-thEZd2jPzt!v|>U>L>OQ zc}W`sc6h<Ke$xjUnJCnJ-{Tno$c>G;dHr(qmV%CDVLU_vGI~kDHW(Sx5`(p?iIx=9 zVqsKW`ZnvWmG~jl6LC*xl5&kp0?jzxo3Bse*=&?j9$Y4Zw^Qb7$t!&<cxI@@)mQ%n z3bmt274B=82^l7QS_8QM_NRL=(6#s%@Wpl>OsG%7UAg!j5DYy|4q^`SHrifv{T=OJ z8P@nFn_cTm%NqWV{)TM-BYgjIH8i&Qul`)7T=!ocYwrND?<GIAxUk?n?2%w`t$Ks{ z`sA1pW?omy$9G&7>w}_q|7uqUe!nLm!hB%3l-_7(t;;Uk2m8h2fh)u91P)`Gt$ctw z<HkmK*EyU=d0!@DRFX+tk6W(%JT;Un2ZG-mhL{{W*D^=eP3M>tPESGJuhtp8pFTqS z$Of`VPb%YNVaz^>qVHC$$c6(l%Z6@+(`)C1HohkSNoY-xrDMW{+vn*Ku#TF;Zhy-q z|G07`@*#UNE^?eBdGzVqFNRjIQ$<kk%8|J_9k|*XMXL42tp)^+Vuh;=A$pavn5sOb z_YjoEw!DC<7Dbas;f1}M(ZI9P@Phf*-yCx1o%a3fl%)TUw~YU0EA-zx<JTCzxrw=< zzLUAF&A*4GlICCLksl_W1yugOLw<#Y%p{FEh)3iEiiMGg@dGu}4<zSAIP23Ixi*fJ z`3iX7Orzm3UB~_Hvx+fEC8-!lRxf^-!One~dFjQ-{m19?2|^FFjy+$_N)XYI{Rn+h zj{ztkhZ4TC-&*m>Z@(ovIT?Kk2oP0!2pZQmv*$vl5W)*xLIDR9+l?I1NrPQAab6oX z<+AJ?q}%8YAM#7TRpA~x@4%f|6Mc^(OLCx5SQ)d-%Qo>6(l;L?r!OX}NlTK3j%!%e z#Vr$y#np14w*rSli38tZ0TLu0U;Uvm)Y`P)p<m<33c@$ub{YA&(oGrBKOVb2Izarn zC)dQoAca|0W3qxGIUl7rlM&vGM?90nrN5KHy_{5`xsu5Ah<n7;_cCU79d&fVwlaZb ze8!(bwo*e{W0j>mZPfS(=}zn8XA!Y+@S>oqMigB|7eQ`x^CS*_(4V8$tO)d&I3W4a zD(DSxOv@bWvWXDMMiQg943pa+R2{hsVz`U>ic;j&Io-~ygze?Gkv03waU=t%PqOAS zwj3p@%a)l<+c<`%?I0iJwWhgwC+wRvr7ezDx{5rUOb(kJ6;MX#Ce1cZz?*psJ-X>! zr2d`KXVX#KXLKZa8iR$A*^wwFMjGa_*&@J(81xz9#bujo+2%$kUOH|*+;DfZI}AxT z$2+Rl!;HJAwt-d5(ssJCqZcF$1@7i+Ei1PrKMyXsB<kj6c$PqRUPABJTTXHA2%goR zuKAvB!J8#QFTNJ(YU=N7K%PA-c60|8dX93eHc=UDVVLf3Z;NWFvfmFp21R&8eP^Ii zLZF0f9x(K43ed^QcAGIzPiQ;ABz<S}eO3`EA<xkSc*{RZKzkO+Y=7WLs?S*d=s0@) zyIk<h_NmYQf&l(M4$+hSx6Ye?KKcrE2sbTN=Z{IV{6{7qjSkwH!C353Ldmdms)1UZ zVMB3T%_MB=#*BW9=&ZdOlUUOl!>~*ad}4Sp#h=n*Wa1J5IWY!cnkx1XehK*nPJ~YQ z2{TEJRMghwQ%Q&dlkT?%$Kzx1Ob#cPw;h*Ro|oz$ju$P5QJrrGrn<n@sS3CeTVVU( z+nf2%uI3+kcW4K^81Hgvp9u$|6h7r!q_}TrADU^O@>hyEpH;!>+3s8YSh#Q4wxv%& z!F+v|Lj?+<5;o6N)Prn^*PseY3ZvTv4jW>)IaG4uip2sUi4@A>y43N^4C-Yw0vJ>` zQwACYT1ln#V}hgRK@yb88pLZ=@rh;JOG1{&HzRr#F;%L?mDq&!Dmfn8H51;NSU+`H z-Rz($RExU<R91e+Oa|c0uu{}d2e4Qu6fXy8&-Jm$hljbkT}ijf_hX=#Doat+4+nHS zeP^v#FQA^;BpM&Dy+B3DR<*}7>@jRjY%Fco?H6RYXF;Kr{3D%UmT1z(#F@WLK5jiz zFFs2%PGkNCd9G3{m?QH8T;nI|EYgP<UFuwXV9<w~6G0~A;J^bI>58a75;-@&+H`!B zP&tM#7pep)q6byKB{*}cIF@t{jmcV(=q_mhf-ha>9Lh>>yR?KX7YZ&+uz!gimq;-~ z$@;dDM09AqaT_PcDp(s>6tKq+AiswT!jA`_^N+4BI#GdNa^1CYC3;lM$PxMXh*2FD zJvV2#zP8c6)m2q_gS=k(ZHC2pnyAgzQk<|j;CBshz#g7aclD2V52IYWay(13oA?A^ z5=2_+zACHPGKD+xy%HQ_r2xZiB{iuua6nJVY~YF9!o}3F&3isBK2-?lC5-6o^vBhz zGj8N*(W@dCZxV-yToG@ROYqKgQjMDzRc_OjDHHB44dS$52`XwcFIy$)4|)+^)QGEQ zp0>Kg?`-4%**cB#O-=-vqw~D>7d?WE8BhNjw%51^#H6Kz6+wLNR3_3g!!zc#aPagn zxsr{}Am<XJR}Pu{UMU0U6!8wA_`L4?4Fk>o*OAv=!x}w`%&E+rq0QQkSGOypYGTBQ z$c8&y?g@&93nLce5<4?31CwznF3<>&TBkNQThg3-{a*O)^XTa6v(gJYsY`Lu=#x;t zt!Z#Yi?-byJtMLd@X;lrR>i>{ans!!1Os_btg!F;g7#ymM=oy3dls%91ZDcdz7*(~ zhu#NI7Y0stLJeXaDh~yQC3Z@1eKLS}{iJ2w@P5UC9Fu$v>=fW4w0fsZ2@nIR>@E6B zW1j*Mr8-g2osGO!*3_(&5K@H~aMBcd?gm=gF&i^Gg<1TmMwA9Sz?H@(JQ-r7#sYmz zHV)ein{G?I2+7si0x2SgDL1`&3&chYkdvfUtJI}F29!GB&(F=`qPs1&-uMg%WYW#h zK$F<1j49D{IEG*zZzWly>Ix}LH(65jK{W~rb(E6mw0a}usC@`m7roe$8Nw~}FL88N zd_YujnI9MUoy$1jcN#wW$aw9%VNm{CpX8C%Qo23fW<o6Lsf(CBZrDix_D^9!hB%oN z)_l(KSEBy$iIixWqZC}sOZbAZ3TMZ%-WEHI^o4D&U_0<zY6V5Ra69lrn~@f+5qF!e zu`x?io?j|9l@fc4-?|M1DtW4$QczZD)Dd8p@uSpsY+6yxfmIW<H`r)%R;&1D9{jv3 zfCNQERutOlRx67dFIQDkwgK2?oK+yMk~3UaP3A>Hsd~ujab4KG%th^1%K6Y-OmOL8 z+ZJC33v%tePx?W+e~PG?&dGRqoAhiD>}*Cd^t*KsSB~X?!*50$DDhe|YDkX>kQ}Pr zGZ~&;M+R3O5_Zc*)*9`|LVdXQhLFtAYc3#u>3;Urx{^TQ<(~{jrp4|4abXF|i9iQE z+#W^(h+&HFhGdD;9O~I^IrCe!pVZp8K`jH$myt781We<YhC!U^rnFv=tZN@hk~&~n zw?iaB_S;(1?k~H?LSmQDSj>(to^|EM2?sP9?+<ax^LfW1$fh>{BADncRpxdeQl^a9 zgK{RgtxQbZgaiEc^y;WhNgYk$OKub?kAT=fTx|C9{oLO4Fwe!|TPj`8pa=6g=~w2H z9G#wf$GnQ|^Cx1M>;aHS*e&xQo5kYj7xvM#Nj2M{a;3~fIWxXIe$1JppEw4g2W<<K z`)5)XRpaW&`^YE8Px)EV$A%HB;@ZtHmQLuGGgp*uXp2jYr1h)>%oU7|kr!R;Fxfq~ zm>0e5Dj}mnwvBcf;yId?6;5+UG6*#aBLcK-5$>c;y~wB9xzpOYlf=`9KI&SwO2Lk1 z`P&pevN>(c90HGK$jHDfd&#jAnjQ2m!}9jxAzPHiLndo|V#b!@4{lVGc&kRSzdd6N zp)UJhnJ~N2AQs0p>de2)h{U)Y^sKUcySwPwL~%Eeq;PlFF@2Em=CAC{aq)R-rEhPF ztT6XaD#2l(eEJNQ4mv5rAgeusH|K;HJC$9KD^h1|Z8353sznCPGpd<B9aa)yMMc!$ zg~>*m_^8Nr>0zpNv1*Ac;V*gl+kXyAK{N0~Q(}@7xPSjsv7O759diJkmFV?Qp5J6j zoXCBU;(z0OxJ1Jdbo-s+2XyDC#=$eCvOSN(o3+EW6L3A=egF=%amEFFP@UFAR1(H1 z+|@1*E*3;Ot#9<T&*|4nXX3_`U32wTbKaFoJXnT_mC-t}N`8cknu-{~T+~rsw-Zs~ z?d-_Oa-^Yo-nJ0KJW{lAzO{3VO8#4#d0NH_eYXU?57^1RVVh7`j6aG(Hr7ES>A;LU z5BM9O4I331)iD1UXmlH|U2{NN0M7ZV(cCIKAK5A1(dqf|juflqa6e?h&OzP6dbO%f zZ`d`G!=Me#Yhl0hV1b0z5M`@lXn9o<*SI@vnm0l+GcX5G?&6C9t|kD)GfacsHFUC^ zLeahZ*fk>QIk74*Zfgi!-&Ih5j6)@^j*${dM(T+Epos!)GGlCk!q_^ed3gbjqx|!e z&SxGPYb8F%E~WY>%4Jmc4AO_5!X#%VBL($7v7p5q@=_qYNb^8>52Vx<FgOHmOU$1A z2#d_^Q@*tq<fvVhwO5)Z4dgy8u0j#!J4PL^<%5<c#{0X;BuM!*ui1lEJqCAj-Pj{H z=w@)s{*2!$N1;8&*m)ioCO?Gl_r=%BUtX1?cH)Wzk*iJM1<5%^9QV21hl|bHFhQ%X zz2gfBb<BxY{Q?UvAeOC3$Crod)V(NpU0~AMxQ5~c*ZK+cc)yojA@-{T?6ZU0@)veL zuu-9t!7F?r)2i$tQD}2+7)HD=MvHH>WBwpu%viR7Icf&!4tj7!MY{FGG!ymC$1RQB z8hq|1u?V=Q{K?w7RA@%6H|~Ch&)W0(F3a8j$(zw<dv!(VmR2ORd%iaMp)ozd8hRo= zCzX>l-=?RpU{d~6J^rAf7#|U0nlgY^7y81E6hJ*Tz3)K+)gu4}yoihn0ZW<9a9CKq z)TGc(NFZs&=Y^=lHTm-mHh8PZn$N1{*OCFS!hjWuO+}<ieW<@yQ|gJ+GBmRD+{wx9 znJcc>NL&*A6(cNYnw`qiaLBZ&G_UVmy*=Emz3ggpU+r|Jt>O6$ITaG+I!5+w9O?FT z$FKe5njRB3l8=uFm`{q=J7$(E%cZbCUDi*OPCKV8@DFM~&$?~Ze<tKH0rgODnM(PL z)nB$>yACi$*-)gi=oc6Zh%W?2@3ofXcS-XaS^M_cywJBDlQK3RN93jR*tC?)Iw?x4 z;1KT?#Cg%a&m9z`Y0;XW5yyp1N1Tt7$R_IRFo&Mr5TtRjsFV&<TvmI<1-~6ICVCC@ zQFVn?G)6sQLe<VU?w)r<%nNvYx6B@`Y|k?MeGM|lJxHNW%4@g=X#!K)M^W12Q7S?? zuZKo0ght(nk68^5bCtu!dhW<`31i(3bF;<Lux^p2n<}3-!M3pB1)sFaSIo2=KesXQ zbK&svPYpV}IE6=4q8Gpt2OZZ=PYr#<oq(seS28IZm+9S!QL}U6W)>zXdtv{@d>xuc zy@wwJQ!g93Ru(WN6<i$zyZUBdw;!Eu{XzDn&+USKw4NPBI5TqW+JKqzWeJ&VxW~{Z zARXRTn78`hcNQ|on{8QINk4;SGeu2=sYd44^2dc424?bOWD29K52|De;&A^0^(exh zhkC{tHWk0u54+T2==4F$-d`q#)=@g#f=zy_)=PT<k<riHBRkEzdLJoG#l2F;l`EVw zW7|fY%OJ+8ATDhQw62RYQ!Jrx6Db6&OLMJz(X(Pq3tG*2PKjRz$z0Z9uvq-_W3>7{ zQo3SBO)5jk=nYGob^x4GA&0s=Mm|YIy8pbkCltN%)<nk2uKWyw<g=4Ds0XTA+TV8b zqwR*EEpC!n+n~&ySKIxx(uoXB#{pPy97J#&Z1+S<&+EIc6B`b-V)HZ`PWp}Ppk!3h zuJIdBo!6Y+1p{=IAx*k&gG~i>=Q|do>3iX51|sli<Seo3L5y#@{Tr;sQCr0RV|7xe zZEwv4qH-|pHVUe4Z_NY6$FF{Fn}Q#yuY#5rqf&K=1{ev9^D}tkQ7qe(Plk+-Sv&6r zXBAd*^YLn4C{56gkuH|!DmI%gAgeS+JNY*h8o@0?>pr+pl?K6H7hVue(qK{r=mNX} z0=9bW9p=5)D(Qww2~<_b3Rk3sg}#s_LLX~m+?rz+tz48;liW0~&Kg;YKYf@t#}?h5 zm@6$9MDd3^_>RWa6rEA5dpidx&3NI?DO@l%eP(f+q_=c5Nggz0Zgyx}RB9Io1fDG! zSt;$P*9b{gv~TX)DUO}J2$50}P~jNPH9N`AE?6XnisYBoR`IjrkGRYdC_zgkd8Few z1sO&J<Bjs8;JR1Uu$sd<dR41sL*kDr*Lg#;#P4Kwy1LIw7#7xfI%KG|nqE+-EXvR0 ztHkXHu<4FZp<jM`?N5#B`W4l<m?450*Ds^v#L4dx0g4C<qN6Fa0?3?Ua(bNMN40vd zT4D31ok<&;FM4Da5rDNG_2!(BNwx5~c4n?qERpdXae8kn>2#bTcO@&qJ9ominN_i? z+GLj6@2F=b3!twzugG@eEfW6t8AE<lHoCmO6i8B1l&-SLe{`f`af}I-*yU#QZNHfg z+pmf%m;aQzf-@OVys{p48*^{~O>)(u9CfL*_?R|Y{=sk{@ocnlJVu8UQGfwxf6m=K zXbW3?gBTolMQeJ7{uo|sk5mme9Py$gweNFx9dI^Ag*S!<M!StTQa9y!9E+Ca{IiYy z418ENDfo2wg9m#<H2jb-+M+2Hr8D3X^Zl{>?B4t1lQ#Ie3f-_rN5+9e0J=Dg<sw=i z!^Ix&zz6JckUcxf5pTJIV8lD(nAIMSR*}6?<9bx;lf)<LPyfy5KQ`-T2#zOk-@f%z z{ipHX|6aR6+~#YEz()TsBa8nUz3BMo`IU~@85@3JAtCth!gKyTKYT<50zsh*fBHZ8 zfyL{m(gdugwq}An%MKjHhr)e)^G&#(xL8T3HE%7y)_1+wSavj-=y2undH=XZ`i8ot zj+Vde_Z<$#&8W-p$FeX@vj#!Tglr<X6Y?Gp;gsf{zqQ9#iPTx(3G49^K9egG+N$Ln zJOS(6WeNO?@39qrjGC=p#qcPVR-@KnMPUV&ak^a0FLIYoG8L=7m7kZ+Rh#Sp@?`6A z@69pe*Eq7D-<#5P46giaP7jOjB@O{Fr{hu!MS`b67t#;z)$%bd5~_n&@OD0>b_7|* zE$~dvHB=>cniC4rd`&LO?Q&BHFlH)sZuNK?2@3f^Lubq%x;HTJ$%*40n^@8ARQ`18 zz&jK?+`4md&&7wrdgb@+*Mo#G^Ta5zN6=6VtqDxo0Yy*``7cdoXc`l=1kN1tub&0D zVzQ_CqB0kFXaebu(ke98v@xO9vSd2?#5%hv9n>c?kb(=w`1!eEl74ODA<^$fGp)00 zci5suSmdB?6+bDJW$pD@%W2mxUF<hG3bnR>P=OGq)?ka+Gt(T#SAcdT9sqN~n(w0C zrZ%87y-i?PbEclTNP-18CNx`2lGj*@dQ|o=G;crx2trJmp=G<2_1S9y%yr#!erv2- z=B!3PCA%Wr>k*DDvmpHXi3|*T)1yaI)$CFNkT)=|ng=NZ{onxK|I`~BNY<OaaK_l0 z<^K$}U56<_ITC8)eEQzHMR1fZ0Cxx2dc|iG?qtDN#fmB6sD-21RkhqJ1K;~)tINOn z6FLWeTn=_WzmQq5)lYxaGzHc}5Y!r`w;{$ExN=uhGmj3iWM2;^I7zn#{)riszJwOR z{k^HWBj&+a>Ln1^rZ@9|FQ1on*c}Zcq|G|ejukOAxP&f{)|(et-E!`80}RwdOq;hm zWUcqnEmO(!?#izRBSKYg+(7=w1@@rkyo<9)<eLcXx#N#0XNZpX<%~^F=JbD5x&B(D zx!W&QF6%!&UhqGs>c2){;-zh8zZRA@o!8hR6(9?Ay?pEW6!>A-?aY-Slz$3K@D)!1 zHAU9hH?5z6dTK*FNn&pS?{vX!iQ*4LVF}w1$V)DaO>|C9oVmRnURG^>OEXj2-myV> zwA<_j1WN;MD(7Y{=o3yN1wmam?|^#^G%c<<Fr0+%qFhmglU7K!PGUqEv=8|gafegB zLpLNX5Ui+jMS%!sH2^VQ2^tCzdpUrK#LG(nFI-;f2WN*A7gU5Wsn%~;UC@oC`sfNl zQ{F$&^X_-<aNKP=MTah%d+F(sRP3ywD$^tH1nReJq;yKU5BJ^F4cROk6pKlWSL9fg znJO6++-SOIG(Q7jSlGme6jzkwuHPO%fO|3EdrwDN_W`}KAcUsmRN<x&LH1Fmx;S}D zxHc+AbPh}6kReIpxCC-DaKph_qzEqe_G04ZOl;{^A46L*N)%{n9Z>-ymtX39rnRU- zx~F_BBHK3e2PQx_PyLREeOT;wX#<MLrjd(eQ*|u9MP`d;$tD%VR^aJv4%^EO3n5e8 z)5-c+6Y-%yi4{E{qB=gYtCJe9Re>;!4b4y6$P{iEYYijPY+LvY?6!Xk_NL6pA*tou zJsbVx_sNi`l;Z}eRVsgVqG$m)YZUCc$h7iqBiH$)>aAyVB$-#vdhD%tjgM{goJ%>A z67pHRjMm~RfBZc-7jK%p2K4onxqYo?{Ga#1B>r34@BjPk<~MM3a?m$)QZW8^pY^X- zWZnN&hgCMeUXX>~u$095T3YoF;pG!HmnRD&n9(4Y%a;q2I6rzy0Mr4`62<4^xZU&K zgkoe)yMB@lN@M<(#u}4;jk(y^SZ{hg_ZGjL+{F9yZHwFrkOMb^?}h`KZO(|V2Gz~s zrzephOeo!j7oH3bypRYap+`nLQZHAQRHCvsiYOv-6V@e3tb;UOg9D8ooGYV8rMLhS zi5BsA2Q^<zHC1k9MhXn-P%G8o9J=TncFJ<=uOO|2TtF}l+^Q@rLMX08huGHMI_g`X zA;VHka*G&M#Mw(iuWw0DdZNxBlw~A_;u_blzz~@VpqwMSR*1~10`CU(>s~<jn^()A zcc%PNc(RE`$zVIj6u5eVSefc~VZ`?n>9kT!kvzZ|%&c`4w0fjB(V>#l<4}xb93JvF zUo;HSnG)-3Y7<22dxmzR1!`;mY4AdNMlTxHASd!@gh3Qx=L9K{P9@R9h$wjE>8pYL z+M1l(gBl9+20Tg&nMz4e^}1Y?BMJO!BM%aQnV^}%fVH@0#siAbLo-C(K1xMh-1rn* z&3R$LNhPzTF+<&yMvSC|tns=+<TO`dHvI*4o)f@6AH{tChXxXm_lcH+`czoGLH|bG zP&ZSVst~N!$~{+h0eDPIBbkz(E;noMU2tc-{}%X*kj_zl08G8Aq%;@fPEWP~=Gr70 zq%=(iycU?n<C@gZ+C_mh<^;fb>vCx79cAvR2l>N|yo(lO1D@bXkI;TDS_hPxf0fk} za*vb42YlCd3i?HK3-Sdh62vU{>>MptzuwL8mwdZriXE2OIQs?Z6Hli9XA_WpJw&Xf z;GR_<y_c6Aj^VCdugFKpf-A&LU=Y`WnjvBO2Jl+nv)Jg`)$<y4hNV$k<OWX4&5&W7 z-=KEHdcdno?`JUAIYep~6W5iRWk$|IFnYRQ%Am#}_X1|HI#$iEkPk_CG;Nt{1g=Ke z=}_*&=dmP=Nh@4L+=j=If)fz8ozf1F_R?%~TZ9hNEcbHy8@G$pK`b;}$>b|Fhby=3 zRMD*1!CF(?OAk9-TJBpi`Wv<Dv0cZ-!|kRHqI{}XNYH5+J+5zMcFbMf%=ObhgE3U~ z8HV2fF1fBQ%f9h`wTMMw{}Z+{|G%+SG<Go8w=(zmyOAm9VC(iTy5nlcs#uFCpWJ-V z0s&w>2D^G#ZA9Haa#tE~u<2-w?STcBP$lE*YryFJY6>u@BCYIJ2E^-_jyDP=TZy!1 zT0PI1;v{DZkK+oZAI}AO9{&u9r*FL0|MathisDUhY`&bxe7*3w^vqlQeBBxS_OPRC zW7TcIyi&6_V9hqU^&J#X?}{H3&*18302DN?!4+KqoaYrdZpDD1TSiT^+ZAxu-B#Wc zdO$Sg*UJ|7Psog3X*H8dyLE07-G`;(hll}_j88uTXc^qnx|7kpmLsdS$|AUXx70y( zch7ZAr8kR7&Nr2=s6jSW?Bsv5*z`$pGZ^>n6k1EafPwUd@Qwen?#EeoD7+KvvBQ5? zrP*S)rV7eP(I02Oh3q7hOY}yRdrva{vSRk&vgre91=8m{Nv}I^3E3uOve2v-A`n@+ zjy#4kd@(0HXu>8mIY#iX8HGH-zc*Ds58IQ@cRrHpA*$66g7Ir4s5QN7-X7g0V84iA zH$9diFhOQDy-(WcB7ZNx2tQiLu=P4XR$rMFHLxgP2LWZm42LoqJNlD-mK~KEg)m2* zo?$bR_ZZwO!j<K|9eNUO!h`^mdT8Eu6+c&P9fU-GL*I@}H-U-po!UgmdIo`RH;TVT z=}MabmzD_fj1s@ry38dO%NuKHVU?MFWtN$qcvp_uQYeCbJr*J+R)Wo>FZs6j8fH%p zQH+yAQty-)1_LCqqtKYcTfoX@)9iY!%i9vN6gevv;g2ujF*$KoTM;k?=$U%hA5=PO z!jzB+^co0n5`l#DA1*1F>P0SvhtM@WsjMYWjSrK3nJKs~0=28-x2=NfK1?RGG!PNx zj7F--!WdQ*^#<nnmc!Rrg~kOseKnth4CEX_EUmTy`w5GUr^kFW)talW$qTDZ$$cq{ z>+^?ha){PFs7upX8&)eArh`Zm0zKP&r}E|@;lO>xJlcZC4fL{DheC1UR;kM*Q!$S- zvhK4u>7qI<nRdV$l?4)dn)Kc7E{lQK++Jzt2MQ`z+z!TO^j1`M;sYpN*-<=*%<0kq zzE6w8H<c_~;yuMyV~8~`81}h!d-oJ2VaKrW%y3JiS#JLc!p0PC=I8PaAL#&cjD4pc zw-M@!xe0jg9EecD5!=Y*Pk#P*kaH+XVyzaKwe<q{aCcD~ElE7efi4w_R!dQtvxaqr z%&P66jxq;@ki-d;j7Fpe`i4t;;td5u-<mU7OP>&6OW6GJ%C5GxDIVyTqJb!28JdxB zC_K>b7<BOhdflSK_@T+0^LKo-RIb{?vbR7`#PgB0<gXQ}6va#25NJ!DFt9;*(TZsm zVkvY0c{^xs!u_<Vm#P##k)uD_DzhC?{&bg7_=GPiy+w8Vyk${)B~p87cjGC&A^0j> zo4yJ6>tfv9wEd~+`Lm06)?*LyiQIfDB5m)-eL6v?EL#H%iM_PMgtpZ7F)g88?J{Td zwP5o+=ve1>;Z`=P`rA2(sA`0N6{8Vp!D@r%(TI+T$-W0K<F}8+;lrx)J3poRu|~`N zNnMmk5Oy~*6ejMuPm&gKk=2l$N)u(Q+XD)G$oiQ3no?I5t5c#oH!c$@j`=iq{%{-| zGYGSEatC`a#(v38tcdaM>{4grVL?tGPhu9+xayZ{L&jm6liY3_5z6qd&fme(!N}_( zG|4Ppto;SnltB)g09#CAi+s46dQVCY(XeAJ$89S4PMt6yOPhj4M4v$RF}tiNYvD4d zo(RnN1V{;|YF;*6OiXk*Silje+}lHp@nK5&#}FdA4PMJcBjT=n(}7@Q)c49vE1V?S ztNENZF=o_~Ndr-h#a76|+{DhYRs3o!T&o~7oIuwZQCEysxzR(I?FO&Cp+p%R58q&~ zP3cK6Rqk1JqGt~V%1kkb^U-oAn*Ap*JHP1SwOcx5jp!|!p7&o%;SO`~1(Tj2#v4&Y zBORIIN^Wg&cJAqvam9BmEpc*REnGz94G~vF8(TwX#Q6;qSwvjhy0k!#RA0WXkhgOo z5bv(v0$2f>PzLcVQ6A@HX$^);IXHvV8sIo9zz=5e&4TGY_|}+t^|pQlf+|0M{eEN5 zl@$>di`Z2lp^uVk>0={7LEJTKCK|YwBN{-kmy9q}pr((K&;T10>}T74W#9y2OPg-Z zCdind%AB@K$xT^jm*Sj_<r1+y-jf<ccsHWdJiY1scCSE#ohUVTkw{Z&4u}Zf1wmHH zM#Umv^Bay>Vl^`+{DDK|ioyJY+)83Mt&70|WPl@Cp7e@o1-wOk3uO+Bvo&eDt35J; zS^R8g)z%4IgIyhEru7_~<{a3fKK{y_1J;5OeX0k2!GyjPW5$B^`eo`Dd3&;#Mb2TH zeYBM5&*buN7yYk8Xb&Z!8wJmsv_Kd`ZmxLmo^lVU8ps)L@f_RvOaTD23Py0#lh}3R z;9VSYE1o;V#x-w{acXia;_Oky=G3GxWDPU>g6hbm6XZs)Ht_5GYQr>@{`Wb?sgzu< z=mlgKh8had^0+>2DW_y^s6_J%<PG|DXL2+&+T;k6o`Ot)<i=k>D;U@d2FOTYNE$y# z8yr&>QSC)Iv%?WmGr~o&>*$7<(WqL{aO13bBG|_ig;Z{EX+xx*ed#EWQ(ziEV%dXc zQx((-$IDGfg$u3AZ<&>J`b-7_v|uw64m3yTy|2%Gt0pc%Zg%l427+@eqJPVHBCpmD zPL*<J)vX6nhy0WXI~igLr<+)t$l&E<{HQ*!xT6`jJ$yoQcvJUP%54XU_Gh%s)!|SQ zU*j-n2$*BCk5gV^B42B5HE)$P$0VO<(cdu>ZG}Q&qg-@kn);=Uoaeg3euh!r(>DD0 zF+zcPG^t;n8`k~`Tu8b8kF<1#aC2z|{_Ptl>VK+p1pdc$j-ZvXzKyfpm&&B1?`ZkY zwdCtH?7t_q05sZWZEK@A3E?wPPB}vj4LX?8U$a_#bbVlqb2&8YGU?|FM{R%l(6XiB z5yhuikv;)cAK&nxJzO;T=VIzj>KrFB82=j9;;hS--OT<LLU=Ct&5>e<he^K^#b?c~ z9RwwuBFRgRei4#3$vdShEKC^%0!19a=a<aVmsK4&1__8A<MEwvjvvji3FUr|-FmKb z^3QRe9TK-urP64#UtTdH(WE+RF`zev%v=+YkE554ZMb*V(KvM1uMpQ%i%Vyc6(J}Q z3WIcu2QZx>3vwyp2@tf8|IQDW4ORCXh}q#UsHQBZ?zB|Mr&Jtsa7@<(Fjj$}yr#;V zm`SGlk3!-nHM+6Orj?76m)8%E8uLFZc?*%y_Q=cP&ZO{H)!_j)!t-^Ld=Rp2`LqE2 z94O9B?4=&%VfplXPZsKXkOC_dHZw+b9Qtadig_y{1_gGbX+~;3Yi$1HMEKRr0Fr<V zAwx0d#Cqv;)7y(d!ix1%#{R8UDwXo`W?QzK$4?;QgSDV<t#ku)PQx8`N%=p_1U<hs z*`@0j($qpDptT!dkyOMlhY43VW*r1tr>(Js-E4%Hld;QubEQM+(hgR<@tvR(9CVk2 zbA2>N(=NH45)mFb8P+lr^8o0P-I@lSOpij0JOuXm7GY>un8scdM@N}OGMXG8qJ8rg z_u#}X(1v=!a+#6ro0e`2CXoFd1Lh<W)kQF9wi1fleG5CH3F!f!UlU1HPfqrA9BQC< zAfHy)2;hN!U&QL6`yL&0iCifnGC87ye@QW5<`m|W6Ow#pvG;8RKaIC1J=Dkl6a8cY zL4!vKZmN~XJMM;xg5P+L*`qK(!mGjk_cMH_Dx~M_ZdtF4{c_}tFU|_|n+EiGS`-g; zR0>P9doAUP|0s*_yn)#OTjeyH6jhbsh%s{re9zn_n=>N5ti9TN>y6-N1!d7Lg-F7H z#l*2~n#1~)muPlas^XJUANuP7&EookDLr3fI2Z5qQIV<t8Igw1kH3Z@*GK?@-@h&v zE&p*A?0*j2-`9VUFG0Z8!TrC4-3sM@fm^U44=1w#`A!?6Q3(Z(xLjxeFD1w?m`>8k zo=~H`G!b{Mblk=(mMz9~z5J9c6=7P`K<<}py>7&Kn8AIReyQbhu$XQ8<)>pv?MIoy zLYK~mcK}0$UX5;GF3LgC8zZ$J^(1Q3qLoz9euJalST`#SI4X1{LkBoSA$#7R_+3H0 zbrFx+O;Fl54SADJX$};ZvN3}?N>co(8J8Tn#mYA+K>jEkwPfbk?T#5vY%f)QXs@ND zLM+S5?{^j!S8sbWO2&iYrA)jcb`{S)=}XtB#n@5snh^mChZfOEC=;Lnl7v=$><8P1 zQb%0z+cu@xv!P~c%OkRdjT%~=00?o&_GevCXCPKEm(Z6xry>dNsWJIKXp2RysBSkv z0*%Iz^_M_y7DGkE9}ec*-`FbYI3@G7RvV&)xsZqj3IWcu&|SLj4>N1`N-vOFHjgv! z!$Bx?3`U*Uwaz2W&#g;W#5$x^MTtosPZije<(({G?@y>7-Ie9mB+0q^6L-a5!UvtG zWvDk;G(4RbVbUbwL)%p!B@I>~G`JmxFQE9DGAT7{_dJ+6Y+Qm$-GWIB+${8hw%vzn zDK_Kx7w~weazH}Lpucv_umSfMy%;KOX)#k7laI4qjDW>toKyTkqhZ(!zh^mq=%Bez zUhYr;O5E!JL9Wv^h%8<QJ-X9t-+d&yaNxqz*clrq&}%98OM|SPaEGYB5o64-?>9lr zT}&H!CHT)&IUucD&X<jG=?IZY_-6r+e4t%9!*Ztg6?Brg<_df12tB1+2755WwCGTK zDfp%~qD@=%xaP%&KbtprgFrWFbLDsjVGG@4X>h%S(t9-@Pr&3F>B8u9p@U*se$N!J zI5h}^&NIQ}6<GBf5&h&AppN;pmhDfvf3YECsn}fprIiVPC8YneR`!3%#=r9HxQgbN zMuz->N<hx+?@!>SDwm^0;6~cu4=E$cCz>+x)I7%wJOfi$GDE8ShV=pF9gC59y?lN7 zbQH0>TmT?w&o`cPO5^r)pxMkCz3_Q`K8E@Qu_oEuhk}G;UcZ%=rX`yP!z#7LWFMYG zeJV~nLVpK6QE{WX_R!*V-cNRyf4Ub82|e(>)uMNlahtDJoRB2k+?VXV<1`K;e1Yb6 zRN@|KE<~x5+MO0Fua>#rPX=DbG%iWr^UCwJi0cg^Xj6%vV8sfqrMo1Q^g}%0GTgvu z^7h`nlcc9TLWrzI_SVnC69@@bP$FzG&3uO?poMHLE+#fq91vBs69gVa1xej?<xH2; zl*U{{Llm8?D!wvIT3?S8#yFS3L0#Vt61i;>U}<2cjij8|sU4noS8;Xo1qu>*zeoa? zd>j1Z8CCqr%cVlg>e7!|$>@v%|9C|x{5bta@<8W<6*O+un_@)7X1rz5_%<M=rGRA1 z>SlvMCKgrYnu3GUG8#m*EES`@M4@g<&xA5ku03LYk68s!gy?oY1+?tBnx$&@v3fL$ z&Z@XFe|6}EvWAb>4ZBZfWzWxMWkvp@7F_Rw%7SqV{syGB+s6|N->_}ovave@If!tB z1w~G=OWaaJiWn!Y@u6J2gk$7%v}uW}H33L<Bv<qc;s^_5(3#9-wMPNv<%TexRy57$ zA$9b=n4q>4gCQ2j0eUHx$_cxUoE`B9chg)cDMqffQ<7M^&)uk2j|dV412xRGPoQ)? zr{jvV=&u5xp8L_&kwDF*Cq_m)Cp;VCzJ7)`$fY&7;GTMVX~zg4TO(Z!C)Bj{vt#u) zjU^3LF12v{0zURMORHT*eZq$(_HR6KFOku@*jeuZ5{*qu+Etc?`bbMnhZ-2Dj-y!@ z>WnV&o6@iO{fcWfwt%|8bL{CuiwvEN=zZF`y~*F%`JhZE;mtz3_&}O)y~f-MvNNI} z4>+L|@aw7DvD4D%@ggSqlTRT)-UBQLu=|l6LYz?cDT$}mu7gW$hG*+T@Dr%gFi7(f zvC@iOK8BNB#lzXr`>%%2A8J0HD1?1j^K<A{m@t`5GMSW#z4lIAVhF;MN@3*@yJW@( z=#kvk<TIFq$~OmQ86|%+JgD*$UFj>oLI20cBK|KK{&z3+i{ZZuN>G)?ITRG+Zccwl z5Upz(O{g$E%<qvgBs{REYAQ{2Ms32U;mJ>|Z*VUJp(H$5pHa~y1B`;&VOO=(@=eDR zsda}p<1J%jP1)I<-<p4Eny0YY?g(H~H|LWi&zkk3AgM}g8JdlH%!E5YuLso0K2bDz z(}X_=AbZpv{SC3wl^ESw=6!xjRYH<b^H8$aj?)Av%_9`o-CX+sQ?7B<n4a_~S^0z= zD`XFa^sPde-N@m7?e8kRq48G!VH!~WX*8DD0=}88*Ph5T_D+Vu>@Yf7LIjD6S+Cz4 z8(qS|_{9B;<4pFM-CFSde?e>yhyvTG0S|HtLe+cXNSV?cPg6vT^OTeo`x|16|AH7c za@*oBh`lLFDZDjNMUOQP_KiW4NEN~k<!^+n`PVvHq)I9ONE+wXfEb}&a)g7B7NH6d z^-3v%pN=)qx(N^GNr-Lv7+pr$!pP}k=~Q;_gyGCCX({(7rIl5-ie-4n#m1^4f>fQ! zS6<x4Bm*C>CoqJ#?SaI#K7~Z}JEjjxd3Nr+QnXN{*i<W2+;2VtUaLx0UI#1EAO)(9 zrd3ZgR>}{QIcu<dt14Xz(Ld@&q-cQ?r%)KPR`@*{<++P~h!4)!JH7vwDq6}2NeU1} zRTxTZ?zW@USIVP{=|5JUj8rmSq<HCavDzmz)rS{EC7~ORu|9|}M7Pz-+;$M`k4L{f z5K3(xwli%@7wUP7W<NQhPZJB(x3@clv+|!VX{zO=*fO4ZSX&+s)mw%T<Z#cT@gbR; zmH0$nImS&|Xc98ajK|;^S?J<{U-w_Xvk7P|ujnCIQD8DZ@Ak3ILkbp?JpR*9^Ag)< zTF-^ezF=9NbKmh$tG^r6Xm74f)2N>V*0E9<)XOHIgW`-l$b<_uXzyR0N%UeAIUCTa z_Ms&G!S*6<!I#Gq$;fm;U;ROsF;93;<gKK)8C(2gIuQdGLpy-p#z@2?GJ0v=(n{|_ zZexkEzHV`8aAQvYGOWh6f2l17KZ80AlcY3}AiePEZ6M1}KK?TNUy2R?p_qM%36sOt z)45U!c5up`Qy7^$p1hU;0F;m#z~s_YAZ7`THk_VkU+D99+p0we6<GCu8{>cXk;hfW zZIMKgKc#Ek7B6m4R^YJ|el`=^BcdwstSqJQ*~KJAs}R-B?HZ+WK%Fj|brfEgBtLXP zto+Fxe3%idm~))>EfUQywH+|ojVYd4L8wl0-Dr2e9KZA)pV<8T_#pkouEbDnx87%p z0li(Awl>n$XMO*&)`v!NfT2Jv>mi@2@8qx#;X8nnJ=$7_8<bU!R;I`dYDn)!g)UR+ zrcmC1nNF~_mCj=?qVgm8l^NH=V#647I%(0Unvwx>RdOxTzgl{>G=V_t?#p%13<Y{0 zh1HDh{%7%P4}L9z7^atQb8Ov6lj^e~f{HPbz_54Pq38L&EiwibdFQ+o5)<R1a0kAT zQEs2zPVAFNpg^kt6x|zhs$ElMgMqAA=bD$mOuvPI<ZBLc5vU@mXgZD=bkplysQy!l zS=k+qUDQldf4U}gxkNrP=NHvDd|a)6q*hj|B=>E6VG~%A!m%0*)Y-qNp5X)c94lDt zXx)>iB(kfL7`+7pQsN9$y{K#6i8RM9FEx-1P*#;CBEfAi+G7?PxAaITt8yE{^1r(f z#}MMW`5~_DB{OI+xJ^H+Zu#6PQ3+XyW!2R7{wTZo&MJ4_v8&SHKUL;gFQF|NJfCJk z>T-BKKR=D!>#35OdjA`x)nHhWbZ7~`R8{%sv7>TqB_7i;Wg|sy#a2xu(+J500~P6C zskv5XdHLZhH7A;8VVUPDuIzrcRk~<b(+BxSdN$h{B0OS91bDrmAH1rXHZQA66A!fW z`jX(%adDmb$5vBSqRmGdvBV<w4(v_)4nhos@NDn&xt?sd<!gJ^o2o#cMlv`f4!Cb) zY9mq?o2Go28y!tN_;sparWv9XPS$Bx>xSa`OJ5?-^<RKtldh;R9cOoiG}?n2<`>-k z8KnQB91s1)!-UK7%-{*FV>B!BaAhDeO3SKO1eM)-aezIeNE?MYDw-J=3(YRJTASd- zAUVEYh|0Hx()YW2+>21&2ePUem(A~6I;oS`)<jg4rEGB}zaf-DQxjMHF|44}@@uRp zXMobeQUH%YtsZTR39WtDdq~|`5iYAk4OYuiBz7UhNlc*$(-D)5VzEw}yc}x7n-JAk z&c3aA%Mz^XYbzxOTQp;Gf|Nb3F9^x%9R@=sPRas-!kc*`+=-fTV=<0hz|Q%4m?U!c z1@5n^`<gW-*z*f@vH#7C{qLswmv8A;#)kJvO48AULRHe)6BeEm@B;#tujGgJHzzAj zn0vA(m-Mt-CtNI>@!g`m3iu;{goG&lX7wgXGSE`MWc`z5(L<WEu8wh%r;f2{RoA!k z{Tm$|VHi9Kvy|{ucq$pkZ_AW<x<Pn})EOsL^cTcb!H=j@)MOCuQ;tF^^y5%$LA&t{ zG-y@ELgdxNnJhb(=Pco*jfl)cl_<_a)=G>3n`tV>zJ-EQC04hMhD-{WSp`Vb@tv=H ztxi{NbmJmUyX4Z1$WcP98COje>v~V^)7~E)7@t&WN7Q7-wGqPFX+{@V;8qoZd4N%0 zPL>ep#LQ)Mw1EKDgTO$W0Mt7fI5}@&CeoYKzQ##pOL&e{k{U)ot;0sF!IL*oJ!c>T z?MEnoKjMndPN5r{91cw-U5ZRv`6-~Sx3;)OGQWGP;=ZEsqhwv$kkz!@Ei`7NdK$GC zv{`I{O6)=fo8XbNp~cHSz#(}_MZ>D{rH5$sw3I`^bA7%V$&eG}IE^@#ag=2K1jW@& zTyBk#+&a0fkouS!SHaUh_qJ7jvr;WdRm(rb<UA}M4XaS~#7|Ns`#SenOFh|rlxEhx zj(9D%11|s|3=>`4{Z4!<a+SC8id%9@PqkeG_8f>mKM~qnz2?EzYamIzlkVuq&rHSG z-h8I@xJ>E@a7B=Mg)}(IF)Wlhau!x9Mi9XoV%y=f%_?fNNBn$v`XpsAE__{!npbz4 zi9F%PxtoVC#G=lvT>1Hfs5gFC-v#nP*j?zD75H-HHH0#MkSo)`AcQgk_f9?m?bGj# zLww**-mdix<qt)|fNn)#-gxS%U$^4hR2k0;_B%&|zj~q!;aO3d*Z_3pZ2k29@;k2K zcdN{jyyk}=t`;AJ=!8{mVb5$Av1gDwXZp=mAzX6t5K=MFrIAM}!@)=KLW{T61b}(E z_jR!y%mR<hy-2x~+_;p&YyTdoPmsSz8U@xsTKT%a=KgQqUs?VUQ^!>&WwAt&KR{VF z8Z1Ksu>8|w^82j2-<J3!XY>Zyh~?D3$ARvZ4t8UV0q&_Zsx-Y$8a{<!xtUuE6u!*2 zPFha>#2e<5*@BuHLYCIENVFo3rL$gkJezDhnhbolzwFX}b5s-W>M0MM+<k(-g}B=W z%&bXu^(B+oq^jwKpkN;Z3j?;V=Lg?BZQ8UJ&LX>9ji`0Ais{fLHwe4!T;^j9I@C82 zKS(wm#2M>Plv^~nJM&(w3lPrOU;uly&~FQnRiIg$xi;z&+q5n1)9_4?fE|nZvQ_5E zvX&l_nhS9YEmb8T&&bP)Ywhi1<DXu`+9#%*yT-PAUwPAKN&;z)kyWUI#z-%>i|$Fz z3QBjVbP5#OH(E5K0*89DhWN1wH{Q7un|?-~>^XE}%{(Vk&<vWjO$$lzv(l{O4o4Ha zz&4oG1zjywi2NboD3k->_CzMF;b~i3yR`lTGX3!;J<&^^`b+#t%z}3b47X)t9u6p! z-O@q5pvK<(Jp$2ckh}*;TG+^{5)|uUs5&SU!EH6tRTBRH(Dsf|g00(<Xr(J{R@%00 z+qP|^(zb2ewlgbj+qN@b?tS{cckg)Jd-S<I`rrDw##k%9Ib(h?Bf{ovNmXE5rq2A{ zFGWv4IBhw_lsx6G2D>H%3OhF)wGuTOQ<ZG07pl5ZwU%^b);*>Q&E2{b9843+l3>c6 zl%&re+xHeuVs?Cn{tN^y-IwbR%8`tWfLAe?6P&cECn+siOj9)x`(a(lA=n{FQPL;m z;k_tdZybDZ4Xbom-?<&P(1#*imWXwU>jSnDCfO$EPLC4}*GzYE^n0qDheo`Z7D-Yv zczVq$;Nt@r-<@92VU33FU~X9A<=CX<i4nH00}P?AJ<izWCGdQ1p%j1p%t?ek*}Ku{ zc%?HR&A#*%sW}f(BiAY(E&zFWnA5=ocVF|$$<7X1RBauVIRA03689EU@I_Ywwv7lC zlc7le0;?}NENT$Yk?<vB=n}L#pMCsheamt$6KNa)gf{gcX|wlUvFB-L`fErG&p+Dn z9Eo}t;XBMyPIECuzQwOR;L0Gbx`_!rBJgo(^-(2;s9c8eR^|r15eO89C&+F?zH}}J z@I62hImFT0-u(542};De;?Ofztt8kXAJeZl5W7btvd0P_k2V9?O<fs-xa$WqGjRf? zw{)1=Bi)9JVg5Hu(`@LAtt$OAM+WseyG(U~BkICCWCAxBlPmQExmR(N5A&3Mw^<kk z4?N@8rSJOLYZW=?4*eJEF)g7eg1+mg+5gS@$?_kl*ZQkf=8C8MM!nxJ0gU8mUfRD} z<=I(YOG(pjt2;s@1oRtLHBggLcV_i!0G^w%>}{ND-omgP<x_^;tLu;ecN2Y-V8O)2 zC~+0>!^upKtBlsCKfzmG?{_vo=2Rtn`-l*Ei0zP)6^{F-#2MoKLMe!=(o&2>6EshP zjDm7&3q{`Pnz^Vg9?j8O>Xa)YRL~>bzI=6A>-NQKXDh11bt9`i3eYugu`ZR|w#&RV z%mRK{`{Q-u_UAN?WKP4X&sU0)`ME{2VE765%4*xcw`tvdq>)%6oOKlp-31`7j(b|9 z+Jxoc3&4wB%JFQW)9@%5))ctrB@&mIRE4Q)jZA+>ux?kmk^<sk<wB!vMh$)=zH&J> zZtX03q)jyx-Hat+*VX2-VR{ILF({RKX<)jWOufw014ZOuZ95VgR2fe$tXS`z|ALRR zA)UCgQbw_La|2M^qB+cBL0|1J#1H<3c!{burqO<5-fiv#>xoM#StlH=Rtb9{M1{3q z<$0o=wdDke`7Y`7j%RtN%$j8jHk{i|eBLYt_X5~$T?Ja6nn$~(69k2wv-g}znu(Ib zTjq^VTW?iQ--v%3(^$9#YCfDLy-;VbP@Z?zU;5<G#)3lsH2EW0`8v@9A6~`I7xZM; znS&s<wBYB++0ECyT=$dZ9n6eSj@d3#j~YA9!_S7A(>YW2rfuS=w{wi~&{ja|Rsv&> zw16%;9jZ{9nk{JMas!>(WiV?w#YJUo0I<LMjf+ShVOw6VldDLdjm}eoMFaR)T7fZ? zu$a9EcsIAxBZCw<;-h`Amj}?)$p6*#-A`p|*ZReu>-uLBR=v0b>It10pV!BIvS8Sz z^VacEaW0dx-Y)PO=v(GKcfpAd;3>c}La>-LMd~{kZHa*)ouu~I7uyO}9`haQ>!r-Q z@8@Vdo58Ok3a+^$)@sL$Y-h`SR`mVr&Zx{@yNsOFL`Q^T#v&+T+qCOUycb7}_<mDE zpC&6FKTfsGxe=cpH*?ru%P(j{juIM~pvc>(hGo2lkcjaLYpjeGNW>097KHX#DPZ%K z=S*=4aZny}zFcdu{xZw;DY%|q>S^<$O5XMGkAM+PAEt)c(dT!uA4f`(v6p^HmYM~N z(~aZD?nI(lL$T>7N(o(T;oeM=duV3CB_Gs!u}h4(SVK(T9rNGzdC<BpTYmqy5zqP` zh~N4~JlrQUn`aZ<b^#F~%rp{$Xhr}KAc#G20BE{8Az93b5)RAoE+*TR&=Esqw(Eh+ zi2;R@Ai4b8Jj%n?2?4_C`6{L~B3>p|BiAU4Lw$Yy*16|fzfafO3+fLQIcb8xa^k8& zTLhhgnc!bz_6(7P)}>1w;A?`ucyhLdzo==Uq^NoJrdki|)EXE2dJ>h|IhFKilio@E zb_VJw2F>%E@cf**c4CceS6o_Dc6`gb)`SVx9nYXr^Pv2VLpgH4iC#Tr;m;&a?P^GK zkp8~9y`_q>D-|xiSoJ$1@F_%T)5_}$<Srt=Iw&FBR*|i}%$p&bRVXpCt~p`EX7oQy za+TodX*r5fJSZ|kxCI0aK>g{XDfx~0D_9D*4?_&MP2+R~7lHaR4~v-ymCZSH>&NsY zL7!AJiU(`Sn29#=ODyQBsfuLIeb0fb!LFt>QfX^frS`?`zz}D!=MQ1uFvCmCok#48 zvMpt5CU;x@`Ez}(&;R8EQIV~uX_}}t&sXemsEkzJ=KM4z)FJv8y`x3m?xI%Nf&lh) zT8_6%;lDty#94NvKfD_|qi*GzMP8Nm4SMUQr7az;>h7$TCmfoE0-P45WOcKJS>wjC zB*gZQtD95Xk!v0UWA_Og;3(2ob1-!7oHHV(SVv9d!o3$K_CaOAmJ^;)+(;or7xb~4 z7*B#{Wjm8KXr$`!DJ_zD@$lt*9J7gS3CdEvE2EfUM^K>z`j%(}f!yT!XuYntOQ@xG zd?m|29+0NH6hUub8?^ejyJ3}8g!Q%TbWqd2r~vNsaL~JxD=@UauI3k3Bt;<cI8Uta z?Eps1B`y;ovQ$Z(A?=8mm)vN*uV62gDTNvxlBiQi^K&xYj8U^(wE0)%K~02rbHyvv z%h3f-J7}GVvdM!>tkUknCrCTM+%t6CgFheSKXl@@;Nw=7j^CVLN$#gI(CM7@-g87= z;f_?Wj?~9l!s3Ns^4XnHitU1gl~>g~i|CB#f~LT?*k*@UlQ1VmKKHD?=p<v7KqBAq ziN&xPrrpts8VaO-V<2x|jVk$$929@kXFJ2qk*Nr@>KIdShXSBi+!w!(Afz`ewMQ`N zS{5v`{X9l{ISjTxaQobq6LE_&@!Y&~58RO*VI?0^BA<w{UxNEzc)1dW^$pJGDxw%| z5kPH@;Il_Doyi5W)AcC@K9~+@dDRMp!H8m~Ou=VpLs*dvFD!pG0C%L~mD%6NLE%3( z0KEUUhT=b8>Hd$yK=n-rQw8~J(~Gv>P?QCdh;tSJQC=HdLzG`1x93(=9QQZnhGYDy zV;xjF-Z<suq`c|;y!qK$*@F4PYsI3-Lcl_dV>-rG<Khy{XNiwL4iApc&EDR6s-7xf z_NyAP(u-%y(YnJF*OSL&=TR2N+bWNaI|whwCvI<av3TiAOMuLFJfJX$r+A;9XBx}Y zb?lU=>(A^BKf<hoiKFL)DThnQ4!0;4orG(~u7Oq>hf9i#H}a#dq1Gd|Cnta{xEUh7 z_Qp*}z%H^p4gSi7ucY5L;m5JECJ)^N+d}Z22+kTGR}jxxAvFP@<zHR^$wK#HrnRps zz?7lK$#8YAYydoPbhvum3tzb>t4g45vMjUV!wD_1;xzIuqDu>oKJuf6^H4x&;`s51 z2KmG2ZNj^yE3){B;)Dxuwe@6~qV%Ohk<(&Emj(8GQm`jMX^V-34`-0jF7&{Z9425m zXgFy<pCX}9Lh=MY;*&}al`H%Bwn}@iY5SF>Aug8vlm^QhF#-iNR0>J@;p>Ki(8gXB z+=pZx3CalT%aSJn_tGfpC8ekzXcMH<vCTNyH%um5!b4?oprhA$(DYbOXXQsZMWj>Q zG14{DZXb$^6oWW~8MUw`CbJag;>TJE#ef|mYt4dghGNl;w84pxx!}Xl%%o%-nOilO zSmVMdMoZ!rpY<QZxV2K1UY6SyM)s(smLjZ!#-Mwkn1sxl?6mVk5`-H9s?b&#)oz(@ z0myPO9>)Na&;`>9Pr>&%`}qxGtt%uiIK5VlfSWXBQB`~~Hz{GnDV+4ACCYcqFt`#I zp>ESNi{_P&8e3vdG$Kr+<3@Ng6%mlK>Oyh{Xkx$_4wX3_AK(!)ep@tLz%$X6p9cLt zOF%+AZ4jpzR8sKWS;zx2Ry(6yZm4x&DA-_AEGTT04dedZENSxWv2-2#P?Gm+q>bgo zacST7$grWlJ-&p)220|y!}$;GdD_Tn5OcY3V}vl6o~D?><xEFSRWa1y^l^}336nuB zoIIwUDPy|iZM*=n_+DwN(3|GF)7(+t0`+HfbWBWbhc0V_*b~`XNgE*}f`YGIWH7y( zq82V^qQ%wHU~3{r)9`_uF{^WW6fVc>mPF4Q(90KPpv46e_Uut5p>}*b^qB)o*6iL2 z;|e|haJ{&@c;@L|@sJIQdl{PZym}=+2IE}%5{kF|IcK-xx%B#GK%u$!#{>tH&1I8_ z3jf$y9ilt{4ISpzv6RAooz)>kR-lL5+)%o6P*Yyybl^O)%&JZ044|sNyYu1#3jj}@ zJYk~L@PYwGcUT#7%Ip|w!p#qTdg)u6Bsp}q4$5uN{@4i`Y63qM%ldw_*c*cNgd2kn z$~}^dxt#H5GH>F&qvyZ~on0mL?!G;G?Y;Hto3@B8+skInM~=x4?CLp|*+ck+=F#Im zITz+tBggi}S{>nNjbC7f_ic@Kvck)ikud09)>fEtGgpg4dgwswLyL_k{nNFrD%}0O zQVZRAoh=WoIOMmlIr<1PMULW^VM9d^EcE?dc~Eg%fh_qi970FJTX`0He{}du?-Rbi ztPSt$K25Gok6t1tLP)F3sH|u+yh$R9HYQ1<+L`|iaHQd4^fQLc^;@GKab)qy9C_jd zYh!F~^UQ;W{Vyex%m%D-ML(bh44*0F3Z&^1fGQ~(l#o7Zi(B??We7!p5@b2N5+x?E z`7l#ml6O`p-pk6vB~0FiwIVL&i$=5MA}{8P=93@AC4IP2zUG8qe4tNqJ|#Imey@(X zK)x8-G@``0NCs#mk<D^8sB)hqRJ{(!o9WkDhdfWZeya%FLz8jd!0}C=e08HHmSn-* zFBsz1eLgFiCANJZ>vR&(avAi)r46#<QVqS3pJ%bt>vaa`eTgh7)Y}awd*}*Bd?BtJ z*iEsVVhA`hZL21D&)UDI+WpaZOt8<i{gyqE3ol$69UQgiIs_4WJ_8^gO&mgvE!dGV z7zAX4S&RM{o#h}L@qz4Q7wNjk;+|w)hjyN`zM(dgZgb|d02>(khY^rzpedvfs2}=2 z3}3^<7scXHU_N@7?!B10IgD?f#h{gJ@VogS-;yg*Aox)HR<joIa{#R){$u}V5B?I# z4syV)R`gw(p+)mdPUI{v-zip@s^Ds%{SUOhE6az@*ft&F#vb!z@wwJ&ee(hP*s)q@ zr8b-g7+zP<k7R2D+^Pc%KNZaV#C_~#9$bYKa<iFCY}ivS?Kwoq73|@7E@E$E`?QnM zJhNVdXf4MfYW5qiE8&u@qns{5a?e<EKNV~I%5BlBeNl>^W(VZ6xY6asNO2<kfg-|* z#T7q{8vW~5`P4dL{(5-j$$|P!zb*E595sW$O#-w$gsywhzP$~1?JZ73LBY)%JZoT& zGY~wI5(2B>oHDe+9e3N^y<f|PQgKV2&mNq{X>QPq)n&Av*uUX6Kj_EtG43h>(|)^* z1-Y0^X&?jhv_As}$qX@WI+n{8ouq18-4fx&)^G?P266=*qpbmR;dUMk0t+m9qYHxt za0B{IcZFb%Pq&3|88z@Ov5Xv=NV$_GDyhovKuAoT%Y*<KQ<C{}lpUYVRor@8_76oz zuOot+S&AWr`b3d(dFg_+xs%{XlIvh=OB&fyFLseZIxlp(2#^OL*fPV<`Xkyg?E!zv zXmp6XyYpyic28g&rjudYfMck!V_crdW|)xWsr(fRe8V}EbmnEpW~nnvb&I(RX0MR* z3?dE&L7Hi0qR`2t5ZAtS;+wxcXEpnj9*Dokkk;t`B&Ff|@AV{N-z&s=-$Jv0H6?`! zS~duLNI_e^fyixEC&5-96-_0cs!b<_x>5pVaq^v{xl8@dfEvjw#;Oq?D(=3*H17bP zq<iRfq_X;&=@Wn07#t4SuKtWpMrUtz0WJGy@&l%u5#HcRZ3=8yrH-Vz4#YsQThp|U z>n>q+TQqxhUx25tSJ8~RX4wM1rRZSZx$rL-;wJ24M~*i%?uxT4n=FqDt*6`2qbYq! z(o!yJk!{|$Q{`fG9L)T&-*9PJ+8<lkvz?u$M?Zu$`qpF!?)p}vRiq{GD{*a}fvbCC zONlu936rR&OM1D{iTj{IYnovu{+hV;He>h28w~ClKnxnN4b|gHuFk%DTE7IVGWkLg zsx3uqrgEEBN$_!So+pJBs*b|vq+WYmTVxZ<H#=jxa{63PzRNyBD^~n06SNS^e)c*D zNv`T@i$q_KBUYug>*t3sgJeUZs?gsUPzbtZ3LCkmT)n)BPhHkiO|@eu529Y5W|7lZ zWmmGs#lSjvTFay@5JwJ4dV>hKv?f9D`wRhZg`%k<18BczCp_8EO^u+2bF(v7B%=Kj z`vgJv`n#3i?uRm|H{baj?MNQC7@sPdZkDISTZ0jRgkds?v9cqemMy>8F+k+Kdfqkq zO|(KwwL!}OvL^n3m2CKq^5O5AW`W8*RRau;XA(<J;H|;V+|FpI6)H5O+DIXcjRAuS zA_c*XAuOPgcq-gG$iEt66tz?al<#@C&v$UZ|60%Wzh?mXpLZYsZj2R-9RKzIWqxPj z{Zc~mrf%1Zuc;xk3G@?>y+wfFvoy1UD@7u_m8S}6@>buKUavdfHSUM{MEn5q-tnJQ zEOQ!~p}CO!irT`wcwV0%Caz(i%KWqGG4*Xff5dr|;XyK`!})^ML)j(S+f&I%KVsp^ z0}X;>+OiP@%q?kvEkOq3QqYny1i>BGro@J{e_e~Y$XH>q3}*`6)ih4P0NDDF*PKn^ zraf9~uX*V~O)^{?#%JBnxlH>+*}V;#bd?5kz!^QcR)t0R^G{Uv-T6S&@3ws}BXG2{ zCJQU&M;9uewRNYG6V0cvqI!eZrUZgQ@_r;y>ULkB1|twa_g*I|pHaGTqi_zEDbzku z=nzi#bS!MF`3&kTSO;$ps_xEsofPXH>D6^+psC{Yo6v{g!`#$z;HG#ALHE^yrt>%p zP~>cC#2q!?v)Z9M=r;DyG>y;W>f=^lv-UrtQ?3iEbQ|)QmzM&<nc1$mxSXkb3>xb> zUs<fM>k5yQ!bC72uLcGq#)U3{c0U_zK#c98J@hbEQZSfTsJa@ju*T$*E^OGy_7Fh; zCa7tyaDYW}|7;@&4by+f>PP=!dT#5~fbpzHqphZq5pW+be-^SBOfotTFI{L5oVEkV z{I-ZJ-l^jKWMVIorLpmdr<7}F^2DD;Ml6q#v6C4_X>#%m!otel%L<}#TptF)Vz74w zt7qRFWWrja8<y<QcB#*)MMoORu>Rp&>hOZQM{HbSI|{LAnC`fg*4)~i5a-B=v6N(Y zm?|(=sye=<Xh}`kJR%-7pgE#dZ+U=Gu}_qfkL9MS`+NYlOr<QP?`c4HGpI$FG`bB0 z6(TA82(N;{lZ5q$U4_DQ2UgUC#3yKkTX<Y10qNe}vJjg6b4aMlsZ|)m3vHWoxxh_e zcTcKAh%mHu?9N{13wrG1oFHUa)`v6jH4i|E$G=RZMBrVWR&rwvEfoJVoE3a>Jl+TY zh6`crW*<k?Qu7135-?q1sz8`Mlik-@;zA``Up6c{ra&xA#^2rV-er0oCx?6(SiZj| zC>9tBBrO-;s3EU^dfI?+#-@N)w_zu220O^J@{|)ot*S~lA=haebchzaNEZ}wo@^bR zKZ$~=fLT!Lp`bvyF}uKP;gr0xsN^ar?G+W3QPN`M!=ElH+;c8OO`?ZpK#px{fMlEO zmH$<#iNus+yivuTmVLA_T+?HuF<Fx)=)F$qoV`1hy?ckf+c#uOH)H`}MMVu-q@svl z3@<sBJUIpgCn97JE2LE-GZe(w;J4)hlWp<5AO+(Xme8DjLZH^$8^1^z8rIGjp4 zJjZ7@hS}&Uni1%*Hn>u#`U|La(49xizzf0y=-1KxT^Mmq$ap20`C;wvKR$n*I^{RK zv{2vM*24doR3-55mp*4RgTHKN<(!P1{@>V=$^;vkIa#Ek?D17=e|k_!LccI}JERp% zTw<6P!~jv?JbskD_9{)0#`U-+g4;^Q*p%l!*zI8YERC`CAx5>+@W(6<>o<;Xdc6L2 zxAcVb<M4(M8X5L2S5I19=!Kl<hBVYIh_9CiB)zx^IfW^hq_!u<t$)iQ8Zz7_tcSy3 zx;b!rGsxhT`w3mynewSc(Pg8pU&0W(-4AqlM_G22Nyd31dVLKA;3?o_nsY0voVMWU zqK(!+Xc)aozc&e1TN$P-5!nwW+x30k`Iol>ls^jQig#83b=>r{P5Z8sKa1&wTD0$) zcd_eg9o4yRpk5_hIHQ7*Ec3d6xS8oNif6T*=H6y+;O|(hCHl;=lNEbxHssPU0H|_1 z{G;&#{R*z0l~JP@)#E%tlQYg`3oB~1vecH&JAC52LW8=`MBpWljq#}WzKH~qFg*_J zveaV1!;*yRswS7ot5a#MEa276hcq15B4kJGlTPgTvq>{D<FBr@YsxO8aj2no+%TL! z3i0lq3aU|OYk6Jc{sd35!*Ifm5xccfgrJUww7kI#$~q*q1K009KMhr*>O-Lt(fH92 zKw94%xaeqwmfD3;ef+S?NVO2z)x6LOT#B5sCdO9dD`y$PFe^0)&ZsIMW>Of8r+Oo7 zju|2x2=^sk5bTHf5pEs;XWM)ux&qGj=R$eE^e|aWGfeL!`L$J9?82An$Ji(K)66}E zb{!DQ#fr5pdrMVp%>&wF?9x3IS`hWNghnmsUk0)r-wIW9ewWb%o!5p}<2N;21{J27 zYNT6MK{Jm#M^|{Npo<qr6myNWY-t6}k{Ki#R(uEz-SZeqHjm2Um;X++Wu%qJ_p?L; zBUI;uFe+$7dKvrHX+sEB&|{O9{@n;}%|AM4e%D}wf4r0aKSjg;5LH)xJITz+qIpk} zo-sp6Dq?PfoetDOhlOOPhwzDp{1OytxhbO<mLt75mj++IM(n_y$<Ap`$q}ZBSo$P3 z@YE1?5*N*(X5+BQzRP;@+C1`X*z)myfzZVqWHsDJ2*KO(b&eQ_?J0?<1@2`rj2Lej zg+rzgCg37A@XK{D?w=0S(~!}+v<EestZQMgGLHncq2(k!d2Ca!zepQZqF=HKXP?{u z-uF}Qtf;gznM7ExWsJ|7qnd$8C^J<JN-;ckAJVZ6)?m-B4X7Wi$plA!O^Mg2M-56w zD=_m&g}9_fN6B_sDqmNdFC)g|BGOp;Lo`9xaYRh&mPYq`M-OfD#14U|j%|n*y$UdB zQ#noJ0jMnZXOugziGUpiH8&Y0H8L@oESOYPyWiBEl${^Zm&Zb%I7&H(XMc^By6EUF znUiurQFUy6H5L|9kn3QHTAD3Z+^rJpkT1ec$`{_TY*9m*m1$Y28k19Qn>YaJGfzx& zC@es8bk0r5DqK`iIE2rMy#!hsn}{c)9>?I9z-E4S$#PZxom&4|aj5`tw0p&g?4)X& z84Fao@}d5qwz4f`GxESpX%3_d()u75$Wv?_pIo@!GZ||%q~lB=`#cmPiCj`H96r^B z3Bk|#bTexp6|^GvnBN0z9?Ma=XEbVieH=;N-%%U}<cO~UVicMh#%OHHXi&3jWWrZ8 zNs{gslFGjtsR>WoxP%rR1U(A~(%*h0P5AKdcV5j4e977S)%njEKE)BV?m($sS2~Eo zFD}t9;zU5h5xf2R?M^cz%^*kqgl+|O;OPu&2|KGXa*kE-P8})cy%>Nh<p!<hwr7I9 zo{efKy@Ssr9GKZx_`Bbx`m@IZ_xg4j3ZV@57O0b+T1KuPnIFF;%~O(dPKpoZ=S^9t ziNn_PC;ZF?!F~u>!LH&h6UNnDe9fV1x6ZtG8lL9U8&r@Nqc5eKpXcg`vRDI>mvYH* z)KEyn*W2G(4>+*W^`mcGdHy4={u>1AKUbN5HMo^3S`LUxXx_{#j8d$DaN=qF&(wud z3i7-{tFjsvvCE8}4JeR+*8NRdY1Za-rSo!*m^VN?)bBvrcr2Q~^MBLtxn3kDe}b93 z1HkxQt#EN|FyG`+XF5-@U9lZ`WgmU4Uf9TZe}eSr{Ry0jK;-Md2!bUMSoS*y4Y<be zi3o`8H%&2o!Ii!lJb|0srri3q7kz`PeYA$CXF0&e?cvWu?9Ylb00JV_A1>TWFMgO> zroDh%Q(<;`kejDmdW;Mrn=^U3iVX5=>U7RsjRo?x#w;-z>HY|!@a0~zlu==Rjxm!a zl@Tf2y;nTi95R13LwhnUNt?M5zj94^>q-F*gTYvGqAY3j{5t@XeviOw57FzRpaIVy zC1|0#XKRLyZ#!6AMf9U6L+|wE^gTfvd#NalF!WFyq>?o^5xNV7e<6)2<o?FVPwjxe z4^E@f!%R=@s|IzDI?i{NaYlu9d4~!#^GGcDGJxSsDp_#YsSL7>yI40Tf6gMRq{w?B zj}oiCp${{&21_ipYP&$>fZC-D(lK1VxMC_9g-lX|!(OFPh)QezPwIVXX?ekPQDK7X z=Dg($sFt}V=~=jNsrbvBDrstxaS9_eM&iy3h{fon$YpBSO_eoGonz!DU|?RA9O*A; zz%n(Ww4snxs{(WMK}Y40(LaT4zfw*1KrcfMjeyEeUaB5QpYa)HHQL$aL>8|A*;tio z$JBf6>7Q5dpraGZ4*b0PwvCXhzuVp6o*E#I(kw1Ttu?%=eW@VUCOS<))P5pI5WCbJ zsu*7Z)(YIcK-7LD2tG}{lp&~oN(d-W2y8tZV^RAW4%@`s;HgzRUcPLwObGQ)f|`zb zt_R7@vUC&2vxX8pkEN4Tc!Z-;@D{<1Gx|bZhJ}2wc6kuwLojTO;^83)PXgmcRmP%Z z%>m9Q2YC-iFN|AY{*GyZDmMdW9%k+o91LY!%gmGl6!JOILSom6#5TRIODf-v*GO?g zNH3$CtIVG?P8iK|W5K{_rUlIWaaxQVK#9gZhx<UJqaxQ*vjblQ^B#ov1}t1JCK$^A zCEwBx(}@ho<!~>?rpmbUW+{2IS*)s00*n*p)pl=wUI4CNNSuPSFF=YS{NdDHd2*cu zR>I&Y%VL)L1fn&VtE!t#SPl)~Yo3dG@fI45%{rGvgg4S@a$xW+Rgju?U_X7wR!F-9 zWLu#d&!{g-sUHn~*4v@_wea?I^D9`u4S)ceL=zl0dF^{dsKSAP9n0v7&uK>wI4bCh z&+9^vy2NWe&A3hmQUv`V%Ouo1f;U2){zEM%(tX~S5`&h{gocP<FdtY8KW4yKJtRT{ z982yK6JUwI@Ib+zPsZW-k^tSHa$$V{FUcj?qV$3N%UX_cH2RYR;fk3NP8$n=8G6Y0 z=N07+Q%(HDN=mka<M>FCZGhoDA7AS|=f-0!n9CkW+6!6j9y7s$al(G9{?>j(#vQmD zH{KM<F{TN+?-h95!0ZcF4lF8WBBjl=6i+18IAy4|7QeK9hg85Av+u?vlUR-rLI?yP z#idQGZa$!8bN&ro6SaUl{4j7qc*7JVB{8Bv!6}9y^gEKruu?&78h#}B_(qeHPQ6tb zs#o89v)>1|k1)nBshbljL2hNFVVwNt?9WE8!K(PMtKQ+w;u>uc$ViXn;8_YNjX*Hb zTHgKq4Q)eBv6Bq(5ruKmQrk}eg%K(r1>6$`{>Q2<kmWrKh(nYn)=1-oHVM|m_K$lR zYG-LW9Ay+K?)7-a)sroWnqP`?*|I`jVaku_&NWlD;Tr?mk3_TQ6o$)7amo~IoJ6Kr z$&JnfMW@s1Y>6?&kK+pCN~pVfu!!9#2={wLGca{|3@luIL!*Yb+{|3O`&H*L(ly<7 zAnm2Z%Tj$=3KKxFd}WDzJDl9N3;<Pbm8(G1jlLL-03uYSXQk!VcV9|N)aBO+$AP(o zH2rTOo2BKmrA09nt#H~+7S=*;qAfi%8MFZ^=XNQVw~O#OPli$SG}05RFE^odg13u7 z!tMfxIk1**sDH5<wMQ5cfbX5r?tctm6#DmBjjOHM_b~7O$7{Y<YvyI)K4BbfRCQ6| z<p}WoE~)$cTs98s){)kU$VEeFiYSK*)zxR6!8u=CJg0#pO!I=kbQnKLour#7J?0D* z((g0a7%o`uCQ{ihrgXAl0W|w1f3nz71mIdX;|6f>w^0OnbS-s<tNa-KF@&b>)MYSr zX<1rSS9J4Z2z@o{8g+f&J!<N-sdXH8>WrPGm}#)CWso*&6g@q(LvNoc3)gOL+H96F zs~%C!h@!k>_prm-K|zI4{Yj;d2%TTTTwCSbZxsEI)3-1Qhd5a!ZVwn^h5n_<9H{~U z9kjbMSN($kK$5lr^`Xi9I2y8pcQF)HO9dcC#z%ZXDP5i!`5^>ZLocQ%(g~uREC1B9 zwx)Gx;s8G~Dk4^)0eMhya8*g%?-vl-?55{aG(vopIBL6wh&87lEabIl*4pr^kyE^F zdVVcPooXWrS=+W@zq4{g7R20J_<_+FEqbI|Wgi$e-k3R!<pOYubpw9cu7f<Td%WJ} zFGVtGfEBS)PsKITOl2*n>yqLU-dT$zD{{8>S6fv}+Ll*VqftvWdI;mFsnYMy!VcF@ zlV~Nx*pM{`C9!a)W^IFZ1|T^mYQQTDCjEW;lMsQ@FdC8*nYLjN4NN;hd&g5kU(jJm z(w{;??${OnPQ)lQMM58xReZ;quI<$oH_4gl^cpv2Sb~RoTqq+E(#1L9s4#XSX--lK zu7^QzaQ6KYFrxr%?Y3!@8-$f{m7#}|&)WcLyV=v2(Kx&a{x(~^TmlB^J;__Rgx$qf zTmx#eqXE2EJD8Jm>k7H8KkV2ack|AS;yiz*&x3!pBb4bJ?>8Hn%0s6q@}Kn+p<Z;2 zCts-WU9ib&!QdV8gO}m}F=G4IAsicN<`#pPrYZLwhWq?(Pyu<br4-hYir_}AN;x4t z(GO{_nOc8;74k0J`>he6{0W%--biWcLuSeYnz?aSTBAj}^6m4`DLyN!h0$e>v4v4U zr<om8oi^l>ce6*si13vYTats<I!pQ?9Qwj;%?e^0H>BM5Cd%!LWaty)NJidZP5!xy zoc9od^!~R=6cAj|E#CLVfABv}8vf5Q`JdR;chU`)f_O8P25E_E7_Rx?ED8!dj|RM7 z44g(t()I3KLxhpuO68gwAkBczwm%QQ4jo@4H(K_G)R3zSnNm#5_NpPf%hY=7(>eoA z`@hH)VBk+A!~CBFOW)*57;Z4d?}oIO1zD1`We_gT!kvJrN;fXo!n(a`P4hJAWgb3C zR~A)LVYwdEhEdReN3Pb~%A9Gu44t3AVUE6(0ZJ}WJ#<OJQ(zgg2&ril+FcqeJh|8r zWMlpSN#Ka#hJU%QB8*L8l>@4JmfJtu?sew<B^EhoyP{EC$OYL+fs#EPS&!x}j89Z% zrp(?TaINia9oWCh9!fXmW|)(SuMfCs7`^Cyp=a77;aK`3ra~snfO^nP=Nw{O=60Oo zg$!bzFa9hFDf~ML`aH{NC%QUAXQt0d!}26aARL{MOT4yje*xP5aXz1*ACBydDPCfj zm`>--U|qfs=Z*&$OB!|Q1!W1!da<E!j2$Fr+lTK`m>Xc7D{x4%5YI|G(dcFtzG%L+ zme;eT;k@q)?`k$WiE6ki%xz<%G!&6Iy0v2CZL|VIS%AfY2ydxE3Ax!$L<pD;IkTmF z7yGi@^>+YZnEG|U%peiebl}mQE`#J}coP(?7f}&cWi$UnQMyKNY+Ei?5w0(FMuWvM zM#NHpWAq`P?A2?E^c%NPFH^4yy6_YdsK9*{#N1lM;NB&B{DN>LqFtMF`>1==?_fv6 zI-DN*R+*n2PZ{pVJc808M0Qc<+V+Gj86=QdPVnG;uTc?18U`N$ARAJ=o$1F?408By z-~6gj(-_ARr?**lnFH9tgAwJvPI$w#7J#&tkLGT=w?p|57_^j*yy91~2Bx<Mk%smM z6;1L4TrN2v&vg0r7$cJ=5#eu(o8bY51th~zxaKrb;y36E9QaiZp(xRC#Q^ax={+xP zghfmVcOk3-^dabK8G`|V{E--vk>W_pNI{8dk)WU|*%VQa?!Wg)N4kFWpM3MHuz%!N z|BboDf30`_!LZi;Vpv~Rb!OBVR&y~$sC}LD%u-?i$Yug&r6BlbtqmxAe9d|qNk!?> zb$TVRr>w7jJ^?Zzu$+JMtLJk>2KFe1*SyJNe}dCzLjP?SXBnBfBJTNVv!{%^Ooy(k zr#I{NkJ}lOY@p@H6}UXs{ox%rPF92gcf&=z5Y*>A)1PV)L88ou!*pG&*aP4h`yPAm zbUVZ0o*wi8?isuF$<KQYI419|YJB}82X6HxYsS6oa?E2vfJwEK`K%dB5=8k0KOp8I zgS@r*KEw=GNimeaJ;2U){rr3_t7wzc$dHV0g~N&*K*EDOH%C@V<-EKVvzfxs$C<;D zvWlJFZr?s2{Pqqb3fB(sQ@Ir5>+T0;K0`-80p!(_nW^TmWw$TR(+IEo1MdpD@GR7a zRNbt{NTrVz+~Nf50yDC*=fjD0Aal)iXhZLPnf%mt1o`1Ls=V~PXZm(l6;<FKkc&n^ zAcEK}!UdMlXN_9$CgzJI^7hyl-1<|LXqQ)%EV4?H>{gU>BG=rllcZUz3OrS83xp4l zFBOkYPzq&cQYbX@c$u7xX-<>x6}6j<<%f%?<M@M<<hNTD8ijs2lF{lgQl|#eAIRdW z)L3pbn4Ypo5IEdD`o+huGZ5W5^{W{kV|={Wy9pG_f=U9Gt%3Z-v<wO?(_a*YznNC6 z63eX25cE3yj1bWHi5vA3xhsuVL$$kuJ@N`K$VhH!oYuTUQ+lrqjG1YNEcIc805MHP zk`ndRJ{lUcKH`F-l+#jIc)43(E{GMB$;^Z;%!YTz*fqw;0QI?YOjRIyKa#z7#<wXy zR6oc*n&iGYXjeL3?~e6=P>?qFS&st5<5GbV-<?l@N^fuDV@%>keDlR|gdPrR<NhVb z27}}-ojE9SUKSI&!nCN9*-VupAIPh5Bvr!@sHA7VGFvuFF)De;!upcf#b%=!8Ufty z0d_?S7`?$BqJTj^0mNe^eEdBB0S2`a2#vZr(;u6KH2y~SC<r4iFQ=R8Y+4#O43_CJ ze^y3}(%cwBh6!ojLiFjB7HA?n)T}wi8*jh|V(`voewoh|P-kfJH#iNmiFL^3pbN$( zn)q{DNqOJD_?Fc--(qj$36ufgIzw9b<+-6#RN)V|{)=x>TM7R}S>|G_sfIJr$<OrK zTaId74Y1-qa~x@;SzE(<+KqEXohXU^scG|5lZqM+FwsfY^G7$oWV_9DmU{0eN5JwE z@=tYOz)z(#P2U_LT-zsBKkQ+Vtl*HBT8EfV;3A}p2XRRi;38LK;%s|@881j*1>_d} z>)2VGpG(mpHQ8`RJPIaXg@6W{`VoqH5fTxx5D@^Ru<%+@(b`b>N?k<YD}r@zkia7G z($7P2Fw@+P#fc)cZeY2}4+ItM;xmLi?$r_<RwV=--ywsS{<T}+S2zJrGM4&2Y$@5! zPU9oQwZVq>X5X9(YU42mta)24&5f*915>!HpS0Iuuyqu@^=R+bQ!^`ij%|`2YKnj` zr0|VHG@EvrLaj@JrIV4FrjF3P9KjxO&j$a#2d`$ZlNg*)0uY{0cl2Wd!BX(|g&h;O z;2eIzQH=~QyTn^Zk3Kz}U|AKf;;>BZFtQLvIr(f#&HA3|lOUFY*D-3*ChB>!$K33) zX`D<o{(Dqj%O_gr<MU?_QM)v`IXPz<tXw6`1f%r=;5X-z>H{iJ#l4-j#+gMHJIM+g zR|x+P&IL;vbHAJ1d6xB~-AAZbbI`qcCPLl?oTz>Y`)h3QlI*Z|mj7<Ms9=Wg%bI@< zZuS&@24lJ`uvX4uz?jO<N*#%;65Nc6*sL+GKi+TATg}1)vy8g3P{Gd4Jeadl)rk-L z5$?u<xc3K4h;s~lrdoUW>s;sn72~?_bI@OetFb9e*FvdxF@UQ%4Xj^4kwT!)&2!(x zQ}Yg@asE7c{<UoWRkN|6%0<a3@=HZ4xT4P>4;2)#1Ih-^-b*RbnhC^c0>o~*w3X<9 zZwIj2wvRT;WeC1)Tq8JoGhS`11I2vtGFl{pFRpnJ<QO_NkZ$?$@03UsTfZgvZ^kwC zkBp1=-)3B*dJd-lRY6gya;ET?>8DnMK2>d-u0Ph=Gad;&JU(tR+BsnF5IqceN&)U3 zzh!fHOA@fYkTM0-$y@CG2Ip#n(=FJ3IL|x-D2o)y35iP)!^b-8M+{HF+^mDLg_>#s zgCD)^RqIg}*O5zB`}+lt&npry4foG&!auluDX_SaAl&5I)?j9%w24OK!{hik$$-ba zS;<D+>U>Bwee-8hrhyaoLWgYZ;(yej<2E_i7yVcR9&ovyf}(6d?E<K>2AchznY;R3 zs<vI6JY|NToZfkJ2IVa#8^$Op#>Lbj&82t=K?v&=4n4KqBvYwZm`7dn*u6<}Jiq`5 z%+$uD_rHz0kwGS<3LwXCBy(d%%UNT`LBg9nwF@(!l^hPrS_{q#4oKJN?;N9C-9bSB z=UO9-*oid2HJ3A!a_66Q&5dnS8ql##m*9OjLxmg`B9b#Svyjv_jn*9@##<dd2R4f4 zt%TMaFlwzFG95=COy=#+oqSnN7wHv?3D&5T-}RyaGf-hiuCwOj>L|W&G?7eD7u40{ zb-$cAj!G04sT1hcV9!M}o6HqsQVqS>v4PH4#FF_MPbJC97$vBFGP18|(%B2+YG*^w z&a)=e+fULasx(ZRaF_r$2<rKY*Sq1Hl#b5ccGPw1bJ5C)roW)iP2Q{+m_x<)M5hi~ z#v#egtN=bNsyxi?_vBtAEvjH^tXXxGKfo3WZy?OH2m-I>Wga|^rYjSFj=kfb<Z1Xc z#P6Htr9hSwBd7eP8Jhu@;xKj(b@T{HQ<az%H=M{g82h8-nkCpX7eg*Pv5*>5%n{J| zmNd^!Vn8xoZrmkE{86U4%YB=@l*;GQG8;m5@(dqnXG2TwHDr5Vp_buDkeVZU*;zPr zws6anUN)mV9;gH{Ix>CCYc&#Np{7)Se-Z{RjVkV}t~F|>4tw>ZFgTmZ7F&mz_BS1t z4TdWu5A!u;76aVQfl&myE4&wIm!BOFVn>E>v2XVEh0KiAHi+ZdbE<Fl9xCYMwgjkm zs1ABdm>7`F9@c49C*f32I~vn9wzt$(Jy%h9=X<2@6CE*}H$wAhpCef&)&zz3OJr5y zLRdV7D(Gac%&-mgJ4`o=Eusqus51}ovB1vBx}3^9u}qGQ3XPTTBFXE@3CDr+WtBvF zPnW(L4)o|<^~Ed2KsI#(TKpDSKC8mjuWWU^>WYYXr(h&6nG^Jbgttfi4KIzm&Bs`J zU;ml?sQQLj>tQ!jbV12|<poJMNvR7bj7vkyqD_}g)X3lFFfyNqiGbbN6M=%-smh`9 zYj=Y|2nQcZ8glL^_L^UcKcr47#A&452*koCYd52gVIIxZ)Kj?A`{7svz3!o95JBD% zZ=BQc98n3%0JIur;Yu_18fGy|Gd#=+;T74Q=G?1Z*Jt|}B94E2K<ma>2Zg8yL|gkJ z)>c7>EDJCWv|;x=l{VD?P%YK~_*f!FK8f`OC!2Bs^WbX0#k|cB!)}LI4%)2*>9sM4 zl9=^@L`-{|{UQM{1x%(>=W_(1;$-8({Nl~0@Sq@O&WWG!a>?B&=Gwl5&G8Bur&|Td z4WF2Gn+#lT_r<mIhn;qGIm@o4H?zbYFf>JsD}1lYs^r-+;bB~g_6`_{&c7Zvpxw6% zFid%83-qV=Gq`2cPQY>%<Bq07A7oky{Y4*?UROLerNQLAN&Xf}_;GR_c<&SIzn$!N zwEwox3<(3*bST0)j+V|N9Nq((Hr`P)zBcgLer@s81n$}J(0Zjk=$ns3J5oPwgtKbI z!@kcZ7|KlpR?Z7E{~NOe@FcjpvN1Iz6k@=olap5PE7&LmFRFPfve^d_?9*?N&F{|i z>~2_<CkNAZsOht6qufumDp3NM&NrkZ!kbO}I_{xI0Egj(Ni3GYb(gl6pqp;<fo>JJ z%AU{BYIoc4i6A4)%TJ*Gk6Z2=UREys>?;#>h!iHbXipg|kaslq?pH*`54pPWFQKPa zj{G*+n?1ElX*MBm$$X)r66va)hKyX>E#B%3A)JeIg@}Ep(>j%F@?NW4><@Ce3a|CM z_)@ZF3mU8V?5dGs^4ribPnuB&&efS~oBPui;cgA2YEUc&_9}tn=d>lodO~&;G2<}j zD4mdu1spj}Za?Kj9F{rzE^?gQG|zyhgZ$i+JX^3Siv!P`eI>^fs&{0m?Cp_r0nCpG z3V|(N4p><HwXbVMx%DDl<7r9<S7B=T4{9afpG&`gs`y^>F?vjH=8UH&g4+-KBj|ZV zXMPYw+40d@AP%$G?XpiLKax0X|G0>u06uWah+)o(A0#J@#UPDcb$#Y!ZN7GL`2s~o zM2!rBDY)T8mZ7-dihLV+Vw{xElbQ9F>-YKFV??5tCGPIKz_!ExlRS*)-!8BcMsEML zz7{4(D13`FhQCl>q2M6^@wsQptkA*xrN`%myqrkeauk-DAEYrPZBo_}YQ4#|LKvvu ze|VA(eGRfV?Gm?$PVODPPZF@PalL&4^}vw371+)3fi`2BH)E~$Zcttt+3DaSKKb$4 zY4lh)=XV{6#Nv=goAb;f>6NtAHq%5u9)KBPuqz9X$2ceEw)?{Dru9gZ=~=c?#gvI$ zCHC+$OrK8FY{?Z7ao}-DOq5XcH!=D)4o@afDd<|uL}KiZu+jrs3s@MP=3+u2!IqDf zkxJJrPn<fg&dglRKNv1=ENV9{R4q0Y-H=ss4*`xB+TY1yOVA{&K5aU~i0znt;$AmK z1P8s$7Sh9?Up8Xie=@GM7^24`omIeJU<wM%DbWC}ZLRX;HCskf*NwD}^xMe|^iyKD zlIjtK*Y(6pM5}L`)h(aU?O$N(94|)zqim((DpzKO26@|@mpk-~KBMAdPS<}4+Ol~f z*IW1whsrJ=1{t?B<;m9U6*KpTU;TK0E$z&+;&MowsD?|Nut|C0cR-=OLgx;6G0@Dt zRL{h_Q!V)3h|p{VuZcj;qr7LM@<=Mr(0v3ho$`U_k%DtT4QZvbd+1oUh<Gp58h&l< z@C7_z|1h)E^;HhCrvmv5X1@LrnEltBJVAKl=J-2wy6hkG7TEtgKh^)II82=S%XezH zdydMoow87f59vMdw-r1Jyd0$&A!%;zNN#|j&76}wYE!#mJ5jICNH~}j5<(=gHtX?V zIO>N^gw2?|_!<z?#AL^J((awt-KO>H$5nCl593<2z#t9`ciO_f>74DVAhSPXJ6V{A z`?fkTcjVY5t|QYI-F4&!3{b+Gj^o0kP7+PDBb4nhQcYBnTdGIxXPzRiY{RHo{Z{HG z$H#dGs@_R@%qu%9^C$wYD_&%1ueV7ASxVzVJ65-OQdyrJ7WN+D9!Z*DlQoj@gi8b7 ze9utslXd~kmUrSpF+N@Oz(Y}Vj={b4`fu$dek+q9;prBs6P1$AZPHPy4WnL51hIzX z-4jnOat~B%BOu;kp(qt`{U2o_e*ISdge(%VJ7EuLehG%;!#V1S#RpnG-A&$n@<nIQ z>-HsZK%)jB6Pa<f-{+4b1ARbiT@96nqMS^^1{ePmil_DEw2~j7V`|g3wv=BR(`?L| zeC@8s`u#~3$%z?A^J%L7U>r&C>b!|M_EK)XiU^b#G9(lv))S=)jhRfpIKrEw=3hcU zJAq+>h*LBX;bAL6^uy1ijU4%=PP%?Y5mxbs0uEr~6w{>~WmIF_ZiC;0dv)f9rT5c9 zy>KKJAb76;>h8A$s;_XlPYv=hIkoBfaBqIzbxvl8XMmt)U5-NxgfA@-6oPSol-OyW z?x$q4ig|ux;lEdfzE=8{HOoHyW|x%tNwA+^1&q#<t2QJ^`0_)`CVfN%dS4WhO@1m_ zeLZV=L-O5DdRHm}bRaUPOinC=^Y?1RyP5zDHW-Mg*+w7QMRs4l)3Ym<Hq>_L4{SC+ z3~&D$e4##Q{B8_E1gBWRa8Z1?)SP0-+^*p|%=<Ag_i~eQL@qBr#?YvbAdEMMDg-h< z0R_>eLoul7b(y4hnpRPBhzW*}e_8*2R;cmzeNWiJ|Ivw*>)%F-w3DUf-wNG-&DJ_q zB;pa3kUp*3#7I(UX@-6RarekE^b?To{sgBpfQrG3=cA9nFVC_iVRUXQX3s==C!s<v z8<?HdzYs>H)@-rc8v=nur7q#0y0F%7ix(pnLryJwV|~iH@;tJ$*?KuSap3`U{l$_W zBNwIzZ3MyqQ8fhDFOt`a!pA8bj$CUX(CY+}4i&54T30JSiHeqYP*jBqwbnKaM}q;{ zeA~8adJWp&D!))sY+j@`=N1;^G?yd2<hCGPS;}E?YO+p_!Q2d`RQ$sKi)<o?(y}U{ z3Y8q{$R-K^(Yn-K!FH4ob+|Y7?vQGdR%sSW+j_CNr7_p~gisC>=xhzjVssX(v9QQ- zp`?(!sSv&Keix0{M8a5UfkjCIF^SWmE_bn2^^9Jq%a~E1z8)$RTQV#>fqA8?QjRhY zxzf1Ac@CeDj10xte0>usN^@^*eOEY<;yFccmd0R&DEMI{nwPS9IAFx_xv9%3IAL}p zjuJi14A@IwRV+$GXTZD;`Nu@muebo7xhLl=qqoJoP(`bblJl9UkW79j<wF;%Fnx`U z@9cFNDxN;k!h_&thn|36$qPePN6$zn`!nwlBqWC+e91u`9S|-qj1rAZbIa4Gm%SQJ z;fyW#Bq|&Ir+?5c(jNN`FCE1V+GdC_+FF1B93wEKor9=OsuZC#S_z2tkH@e^qkjIu zEZi;|)JR*gbR6)kno+=9xiQ3QwJ=lSh-v>4;(ms)%P(e)D?Q!R`Z5CB@tdhI5&qmY zoSPyssSR6cD0|N%=44w2dQOlHH&EvkG~Rs%HbGj~RmGmEWkq;qjOu6IWwMi;`PhT~ z#RWHH=WY719c-qf!~%UP0|U};+jOUJ#o002sg37tGS@nHpAzn?2bjB#2M?#~t}U3M z?GFYwNZF|9#mFJt`8;^(@8v&DAgVJHu>)e>uTOQ)a3QlTWb>sKfEgJI6qDRF*d-DZ z$UjnS8#83*@(V_9Q>}PjmI8OvPtfOgo#Xq6KtT6pe$_TnFBT1lhc@0yx$A^K8y`b0 z$$%fQ_XY3I7dRBrNA}HYIBGWfTV>f8_8;C3KM*eSz;K0a@Wn3le`$&)l{ocA&m99x zLl-=~Ro%-Ia!B3ic>|x^{piEtf<xoFn*wHPxBOaBxWf`ZV~}F$%soa0nCNyl?+QO~ z*6SH1hdjKyq3-pBJ;F>oY8PliD)?~OiYbgmPnhv>#<K%h;T5LY{%{s{U{qfL>Ll?x z@uE%H>~5bPcbORnJN9Bt$s&9xR6!G!kr$5I9ORl#KbE+f)pb`O5T@}PpUlMXNj@1u z>h9kX=%OnZg@t$fUGfezQSf$;vjDVI;XyYPP&!SsER&qL--}#(dapt&_Q5%7RAJy_ zjV)5jgAz5Z)e;rIGvf1i$*#}E!~QPUiQf@-|LZjY{(t)*`kzH36)LPrukj*fNC{w4 z2No1ib;?tNw6jQfS>n%^<>43bg2-*6T3A3$VqCDpe>8I613i<@?*X^o>~a&{jJq2< zn@pt|=xn`z0&Np)s?|`jLMiDCU|~NF)IO6X#AMZ62kFs`(@`=OBAr@{G@_*K)L(c$ z<yD=1_k<A1+U>CgL{NdK?O^Y>zjb~tB-F~r1qZOy2RQ|;#P=j~UXs~wrO#H)STC$) zzQU|1H?F|-qk6RIXTk_Lutzua4UFea!wxD*vK9YwHmdNJLa<!S<rYg(3y-CZ=YMM9 zHfS;7kP1TBNy?$Oa2#g4a$wn?b%~aq8clngT86>G_Eu_FN%q~fgBx|8Mg|K0*m0FC zG`%7zRkT(>A1lTqL-q>B@JJHoMx6M6ID6+9O`^A3bf)c|Y1_7KyQl5$Y1{U+{kCoM zZQHhO+cr*rzwhSe<mTo}&PjGEwg0PBJ$u#KJ8P}ymj5TIE^FCq2+{|^=}9b;C0DYX z=Q*UV)%|nys2gCKE7^ucGy4)DKfdo`f5PgL<djn03l^y=G2@b-B!s5DFuh1Jii_12 ze{JTyW-Hpc9gG1bhDTcTl|cVD9WvG5q-&f*rFMa5z9dC$LhS+2e~ZTRil2l#;%+?K zYTu39`B*1;`|eP>2;OI>)!;u8bE`04TXStAPv;k|t&yuB&(KP&%i8}DH8Ltu&23uK zB#r*}jv^5uuyFO8{K5T?zclXu<4RI8Hnldk`G5Q-3to_3$||c*U*j@N-x1a%3?#qO zFp!A+kyr?5QG{*%bIK7$e#A0_#Rn4QRf4aLYA*VBi2FGUlKM9bHU2yE_oi)oT+nH= z6c@SWooX?ayCeya{&(fMHI?0Rv_6;RkmWIno3--Quk-`L<2B{EFy#<^PS&lT1r$9T z^F3uGT1m!Ze0Ru7DTC_pc|aSvi20PohBMQ$YkL**onwxEk|~z3=tes9?eImkC5*;Y zDkc5sZ2$yWu()uRev&Pg8to=OTnp`v*kHQbLTNtKkp_o6@4cjfL1O+UKZ`rb&YIGd zX0K;V*1l4`CnakrI`N$&8z238PsryzPN8d<p3a1Z?j}OIMSFlZ`DV{S_YkI1$2_dO zzpB}VwdvcCsdu-B<<qf<vJ`fPd2Q=948Lwq%x|;%U~>pyh3G_XvbzHM*r$ix^#Af` z$t>RLiRS*;wLw<u=jFN5Eqdmw+?cw<`>V=w{S5hX^DA1<GThmKm;OV`#xsTR17L~$ zToa2QeZ8mP!!yXtW)J+H+!-?WE%!E%V+^WR@{UAr-R)7@tPM6?z_pKX`;!FdeRW6k z-|or3KQl+K^)zI@yQSHG!bVImYrj!9UF<GxXnQ8%Pu=Xfi#>sNxy{h)B3;uVEI{37 ztLt_&fBB!Df~)L&D(h(D=H``AY3nZeDwdcinkjH-qLspm6X#NS;1m5FFVX%5y|5tO z2NLkzNb7hUTG(U~iz!l7lB%jQdLBBI$*+6&G+gm$p+pM<eu=K4vMh(tIoDkU%xJs6 zPFPy#<Lr#8-0Vie-J1mqF#mwKph90sbH%TSHrIF8H?N6@hZz-|H1}HCYAjPg*Q(u3 z7a`I+Gh6n@+PYbFd)<YetKPf*5g;xQKiOYQhd`VDTemueV6ucKSz=rrMYnQDz8rB$ zNsAq_uk4SJ;Fp=3&)2h$X5rEl!ry;z<$ZB~RJ@xXcE7AE>m*%RwB@4477F0drwk;< z%{N@YR*XdYa#Q}I;Pw05)WY^Eq@^P1Dr)GeY2YfP9LW@mQlW>85lK^7QcISJi4iS0 z6XFTh+SO}&YJA1mI0ay+;fJdRQj66nlS-O=%iJz;m71#K&?I2#%S$7JwSUBisESdY z1w-RxZ^?mEQ=f55cdKdY2#yuVRzwDpFVSbA116mk2ptWa-AgP~DKtl}%4UvocGT1x zwCFv{!$kD4_H;1IsNfd@N2$*w>}&T3>8ip6aed4Lw8aRF#dJ!%em{($7V3MXYNzYH z%l<Xv#w<>D#z;YercXp7byoZP$46sJxQ4h>vowbq(fBo18GI9M;7Rc1f;><Ii6E(j zRJGAJj95$t4%IlhYQi-&kMeG^=pi@(7p;QO8_|}lMT}{v!ovC&vAa4(nT~`gNqgkI z)v~@YQ72R+FH<{eGhOy+$PjPG>W=+Pkg~k7mnmnFs|5v?CQgyNJsU?c5I##=Pi0_t zbXQMTr%oGsJpO_O4w(AMPow2`YIfi+bxP_ftI41-s$kI`UlgnX#9E~`zqvyc9Na~> zvo21Sf?568MfFQYw57i<`x+x*`-5GXe&F_s8A5GsZ3VT~RZvYlh8+Ft>$qpkC9iR2 z=8rK6Uk35R?cr1A0eTgTQ-#EGHf=h2eUwlK3N8#7A_^T+ok*d;rr&D_+9<<3y)N=G zjsCb43gC0y%T$^xNi9ftrqONe5X{Xr2^ZQg6=gwHoVrNKj*{V);VF4V*Co&;c1g-L zCO^eeK|R-uQ?@QY(K*svx<axYUtXbQRl&7@jv}QsCFO7&C*O3Ogqeonl))TtDzw#L zb0k-S^<v<exF4d$i>pDR-Pn}$%2|rza|63nSL#KU!vO)Ax23hx!N<5oWSCyJ7{lAc z&He!iV02~~c6|Kh-88cXKQnXZ0QvmSWvU47;VaYHI^sDaP(dTTNLX_X(A*f#_6I%% zXURi|JIQ5=WH5@OzmyJ=L1a+j-oXrP^t?_~?(S`pG`p5So4t`qQ)`H=_`JF=w6;&D z@8S}Q6;*peqW&rb|4zb{-7nyD4#4vRos><1sm4L_e0)f{Dq)ixB9)-|D#MNhC@Ypy zTfkLY*AN$e9tdiltYpxq{2Y_`mmr#%RD3>Xzs$}^a6_nzgS)2CEG*3Ot(?Ha%Gv4r z+@zAJ_8)O=ng>zc{<gA<jnF73p%OW*WMXXiH51hl_pF7Qcv({N1U_e#DjqFV5mOPK zBkmzdyfK0(Rfh3s#)-Dd?Ikfl`DO(VwQNaUqEdFj8@4bVR#|O8v$>2(C8CVh^fwNp zJj?=Jo+gX766)^oGr@^mJ0hIq1qg9PSsEXp+-yD!5|W6}^kP{vTt%S~P5&hK7SUm) z<y?XzgRtsM1|J)!tKAy2FZ1eVL+LzEs+}v69gtD>=fHrnGUV*K&<vmQi4MIE)gyd| zIl7xrpgb}pH<T149)XmUPvDlAwTZMkAs3Tb@236HZe`uaRu~G%q4?$?F%2Bmr1c2- zB}=|s?;<|OU#G$7o6~6dx&!eRhT_#58~$17Em2-t3EXS$O6aFi)a#?2sgC?`mgb5M zvt`PEh)weGut$R0NRX5*7Af1sHbuz%Gn<sB0lgYb%15{VU_q&2Xo?m-&nQFGlcAu4 zPm350G<w_M{0Rxz8L(OpQUiO%yRYetO0O9l6m4D}tg=syigN28Bx89U7;AiPyN22S zTrUicva|!zeiF8`RUWNkD<j+9w)+Q4B%Gf1k3!u{Xo$9xZZ_J3+7wXKc)#(HeaaD$ zUTzH1HqW44F>rmi71~%#Ml=U%TCI;9<E?EH>#Y*qRMK*VKUrz_;B+CWt?Xv+f_6P8 zN73$XH9r6GGKz>EAaAU0d8A~1n%ZU7@}ldk9`Nl?ZhV&V+C$%3-Q~XNh(f&aqkX(C zS-K9V^~r(MJsMhjZ&iDzV7RxdA3+Pa5o}uuZ6au-AZ)+E%YTp;v&83Xyy5J;j_6w1 zC66`VL$=wJp9o}%-H@@ya|_(stKrp+o_Zv4kF)lY&FAqUT13uK!0R(y#fwNesi|2) z>l=Vlj7AH?)zHEQ+-60EiIq#Pb`9{Y#S01TNDf5#$fpV1<Q}lrM`by!#rK3(<yoVE zVx-Fq_B=XO2g#GHJY(;z&cq))8Lef>Wlc7cAD<Y&c0n=ha<X+A#L;@7k~14_9!230 z53Xiu%O_o&jCL5m5ASV`X=v(pM>G~=2i#N_MI8Zr=UC+N8uVeas(Ckfc_nnK`_Km3 zHz^b>A_VVGPez102k@}3Zu5qiT{bi@AQ{R%8Rb2Z$p^qLGl!!kdG;yTC<72qG{bvq z0vhZ=L@z)Du~tsw60Dpov8BW8r02fv5T}K5Kh{rvu*v55a(^@kK=4{_gcv7ex@<SP zftN%TRyX7)aX-zaPR>YQ48M5U=*bB`FV^MNHu9hVb4WyfFA#2dOQN+AJ(iE4oE(j{ zaY}`bVSrJeFaL4ZX=u;JM}At}JR^Iu^4D-Ut^?1qsS=OY$^N`*8<8sdAyM=L_YN6? z9usz6vPrs9Y`+QJDt#;%fP+d`RG(nf*KoTOGQRwkZR_>!<t_@{*4_64$#vx7bP$8E z3?MkQeq_vV1iIn4L{2r`-F8}v=_uoQ{khyw<V^|a;`pt=9D<YJE5o8hz>3u;M+(FJ z6#~ZE6WgnQnUlTf?4|0^5&1O&vos9?!fB6|`v8<{G_2Qw(968_6h=)rHg0J(Cd=~x zt+}K3S5uQ*5lf(VU7cm1SH`~NS3)58tK;kPLmwxRTx6epkeg}cRje<Wo*w=^vB3~+ z=~^(hiVR1$KU;R5D;Ww^e0MPbNs51EEdBuf$0uX49Bn$E3Cn=pOe3S(_*gVux&oKO z>v8SK-eiW$Xo}Jx)cyOF1XM=aHqSm(W+%DIR5rakSH9IH249Yh7fM<yMZ4EH=R+dP zlET|2<f`aW2_f`|C2zPqzo9K8N0zJ?)Zn=5<=EO)-m3aRU*|J%;A|mg1o6btaf$+$ z@oqn3A+rV_$lQ=jCP!^T`KBgc%;coJ)96t4K#Ytm4K;1L<eQ>~r$cj@!ThZvIYMFR zpHl%%<ARL+C`~ajs=*rzPSzQV#i`OAs1O4i$_i0e?NB|C>e$ItW-z*3c0{@Xs7dhd zFP+L!Y9mhnIv!pd)`_<UEBT{)jV3+utEIM0U*W3+<g=&r<IGuS&S)epi?D_*sY1~` zoBXadOM6K8=DQ<ExPss|J9g(y&`>hBo$m^S!3&{ShMCG3+Svfp6Wk#qL3P>)-1qnY zmQY~-rl7D2tbw4^(w`+L|H)Sa&DK;@ZzFrKSg-Y0F_w;-xrDjy=ScdDJ~G#+%}SQ& z#Y)ZNceag2BV=iZbOo;|vHo#i$30JQD53H;tdpQ-&M#chk6&;oxu!Y%a!_#n``rXI z2pOT$pyWG`-B9b|jxabd_WW4;lk2&U087MK8#kk<r-6u&k}RO+<&Y-try^Dt;B=|i zV({krrDijF3+AU_gNc}Ylbg}SPAcSSikN8X`F;J#`^LD7Yf0v&z|=PYuc*opDyBdg zQac>&^8hN>FA{NNOh!Qq<CqZ&gAXJ9#KT~P9D0&)m{8Dh2%={kk+D!?EKy?e-Pc-4 z>F?F7g>-uiZ|Ps?3Q)##Td!zrNX$<+Yr|F~h)@Q55Hcd={BDkar-btPNzx?%7AbI} zh6+J=QI?uipMa{^dqKy!)$20yqan~3hAnabZa#~Dt4c=aiVN!7C=h!znhdifmlT*E zn=glxlM>Hfdy-O_yTPm_lsFa7Vs@!UZ&eQRgR9a(7V_6G^zl0cs7)e0$J0<c7h_f= zbwHgMS){5qgLhE;6N+0FSl9%Kk7(Sc7#;Q!+>$GpmBtq&^J`^w|G=_$l2l|U4b@Z( z==?j2w*MAN=*<g7W<8xg9rB3g*TMi&+y|2pHr}mqj08o<{|DgT?UjL{F0fkvr`9+n zAkt)vrPnN-#1Sj2C=D_d1JJcy73hNwH+a#{f-fgx3epxO;Z9)_)!-3D)*%+JYnZHS z*rb~uwx~{SJo~K`wejIO8*&V9m})YneXj1`A<+=dUZ2AW;Rlc74~mD4AQ4t~c(b0* ziy09HWtD)>2&fQ9cvd(=iolWeMbK5eKa$Yol@JZj`^s&;v3z(Y<MnC6>ym~Y9t$gZ z#@5Y6FY-@}Gp>>rBo1FBhzK`4uJQ#P57S1oS(Eti(Iilcn-NT!6m!)dgjDUuSC_>0 z{+T)fYhFiBQ0E>?GO2J+7v3DQtBK)l(vF{X@-4gLe#Rm^IQFH5-}BQ+ZJ1?$hE6uj zY(hD*7O(_%A(?Db8C)+M<ETficeB#rv^MtSmcv5g^ORDCE#J2e9)q*RD5H7E6VaTD z!DTSpL*BwP?KO`?qEUX{B)f^&c)aRJkX_AAzel6Jdk_gcZ~Tzo7VEt-ae}H4l-owT zM_3Qf2W^U1T+a>41?7_Z{r7`bSzXHr{uAIkoOv3-UeFM_0%htIkM~_0zDg@qR&Ks| z(0Q00JBdjjv_1Z@|2CTt1#HVAHU$|yBEDcdo{&18es>`L>VOxy3J|#x7P;cebM?mQ z0J!1vd|#T1o-!Zj-YQiC`jOZ<<aXuEXzin8`gx^LY>2`vNy66F<-$O-b*RDQRG<o| zZdQAEJ}SZUMl`XO!xOsW=_pFAa|#B9b5*Z*+(0NwAp>ipa;$9G6P|ATkg~>%ut)s* z_`>IAVPJ5n-3^GPN)}_aCx0QDGzqxC?bGcZ+ZaJ+5l?-zk6Av=L(~>C#UKtm02jPv zX?3}^G`f9f?zRFm3>$5ghij0}3Z|#sT+D+^<*<1&Gru5L+SrF<x+L8?gM9p4wVTn* zwIf!yH4E%%!-pEO2U-16d`e=!>TWsrByd6+3IBnt8?sVThW}#Pm%Av41rORl6j5bo z>WA_YnYkJ=8ssNL{^W!J@9dB1R>Q!47K<A?WrxCihQgON7&I3eY9MsVAalxym^N~Y z7<^^&0W8YbL%$Lyw$Gy^CDUS%QG9X&fYVT-&vuBUbfwUZH81X>#L;G-`4QW}hqAOR z+?VB;n8An}ktFx5?-=@E3@g>zYn-AAso}BD^{9zTD2Z}<ky7!`^@uM%UW?qngR=Kv zMRz!<{+;Ip+K3Q~xgc8iP|#}<L6*jeK`=$hbilHR-gO25Fu1n)9ZWT^&vIOI16IL9 z?(}Bw%CljAO0A)SU}WyFw{|l*#F{t}%Q*gKX~ma<x^CF~U{5HR`V*H`2cD2z<!5UM zTP4PEVTd!5(hmAE%X+|SaE`T)hN3{iCimyi!GU<x#{6?lHL`f!wzp9gFnSE1Jp*|n zrWY3|w2vjqF~b3|7xkH91Lt((6`V(uY%pvaI_Hn0u1AS{d2SP&H-2I`G|p1gonC`j zWQz|Gt4)FwVOt{}+v(r$zvE16XK*hh8H`*o_A7IDJPZhK#6ald54%#SDbQ;1^CTR< znqBTccUa^E{8E9Bl;wA7iOeV*71{StWLwegz!aw9YKmh|93|;EWyE5zxz$x?Lny__ z++%|b5h*rp$j=0`J#v;hQBs$IYuf2l1;5Ei7$b)BMAo97;sE^?2zUUnMzyL&2iT)u z!){{w#s#JrH>RN&EN?1NgX9HW#<nYYKqZCS7uP6;HFc5^xEb}yh};g&T<}AVhJr>J zggqV{K~-kk>#XB!j~1v9Ok>Dn4qaG0NCL-3X4uS#N*r~vdV8N6`l-}lUr6_1equT6 z%_v*Dy%MrR^4GJp92j{6Ukj-Aj?2^#5qy&TaF8fyeW9AP?WYuxl!iDPUeqSREN(HP zmcCL+S|=1-mrov2uvr;Z4CVALHzXJLCkd-6Utm<g0uFn!Cvvty?7hgCE$$Q5-U1#E zH%D%aw}?ui<!mgFj!fAl<|Pm1XyIP57){|RKOwMKlaW?}5BWoroSX>6$;Cot=6Mva z9riI$jV{rD?V;yQmx%c8S;4WO87BPhF~eeBu~V$ugRbH`CWE7dq#S)`{!n85P->`< zQ>n#@P|8eQdl)C<Wp32akXQ{tS*^JDJ{Hh8(lt6S9AD9oldPyQkm)6JP7>oJt2wG4 z5#=^?Z*h9XRT1%d#lq-M*9(OgrQPSgZA=)}6GQXhq}**eHm@MKof7V}@1%zP;6%O8 zSHqS@S7I-wH#vbz5+o~+h(OUQDEYV)?1Lf<|C^G)oRWZ|uuEJ&1^4O(YA6PH@_?)W z$vdln!1SF$cpaX;?k<2Q9jT2wx00YrMK(G9tAWr5rNMQN9`mcOIpw%3@VE=5bda^c zGZ`7NvU_GQvHqj0*M87qw#V|m@y(nxWHrm^B9l4f*^PWK+aB1sk-Ab~db!AKxVDMA z4^|t>|Msgu=ZVd+onS8EXg_tUJlwjp0*7ehX2zcvBz>DnTo&MJKcz*}l6;_bwY!P% z><xe2aPJ;sUwHP40of$kUmL1&J`FK^3zjhK046pv>zrY@E&<mbmg36X;u`)tvTb;4 zJ^ZI~*57qMBq~Gy1gWW%q6G7##P89fo<xgC15@vl(1MXT@)|20If_B}NW=ip0F5PN zN+bd1VFqF*anYn6sWa6Y_Jy9(=q-6N6zU~S)tGr%G=P$$fl2BMk&g82XIiPWa-kXN z>N99)#-Qlc=+%yOW#M9`#>Eu`9~RT!gasc)B|s^uUB1TsGy2<2Xoo~}pAi;R8<``P zgs>MJYw2GDz-Yp2ywPIfLyU)g$AyW6H?m`k>*p1U^o%5ml1(vs$73$NqQPR`S`H7o zpM>L0C9xpz2uJ8|H^K=bjBAig0FzG+tBH<W(>C^CwhKR|m`V$yOuLaTe22MU$Xswa zTX+T=*D!3DKP{}JJqG{sak`J7A$%m%8MP8OFZK7-zYvUDM}A};`ITT(^K?$a#r?MD zosLEZ5gHMycW|%P^R~}j&OsTGAJqOvL1`tzu{hkO7MC%`-2*6D#+RAAEuVk|10@xk zUiR|^haW;r(bm7RLw5n2z%`rg>`vfriG7nqm#WA)P)FuAyXvR(vg64{1RSA*!PnBj zHfv=$x)4RdtVaJO98ir^vR4FUg6<h*H3~4`Fd?<>byA4yRbc$c#FbfzInWB2tXC&S z1HWj-L#Hu4q0-g#i^3mWuC2#}pWwWi1Bp`CHt09`EsdeL|HCcSL()-Lvdl+vgX}I6 zU6l8mx;-l=ZOzFkP<n*d8Eeodjk<_CW$%pP>>;9Hd_n&-@M^7z_fIUIS$Kv8FuBBT ztw$N`Y22pL|MkBi3cHjpVb&dx+GDL?`UI3m`ffw)!LOUNhe1X*RnNF#%VS*SjJTou zGJb{~MLyjStsJPy__0SJUT59>=40U-ES`VFw|LupmVw%H)W_BfMHuuIAx9<}Ldh$> z@#h$Pmdp6-MK6ZwDUx~<kYaO=>KKVHI{Yk2!|-_56-`XU(wH@hT8~yfV^PaQEm{3i zFw#r4PKG*4HsG!L>WXYgIcBoJ6hqfbBw>*dD8#5+rpgrly`>9Uea9dLAak<N5s2+@ zxI<Z2M-I(LS&U99$ck1eE6tQQOYDbNQh8*`|G~|0G0$+Z%xJXCNQ3eZ7_sQ>_uDGi zVK;xaWPQJY@sZx=20i3c3^2LnE4pQUCs%Kf1agx0_{=M&JA!1b5;jAE7wo?=#Bilk z9!Wb)IKGwIfKkyWHM+leP-JShR`bd4ucgO3FqdDs%r>6%!8mx2VeOFnP6=wAn}{!Z zqYg-J?(SFYuX|oA>Z{hydizdyfp#Ij;(|ll1>N&epS&9oV=RZ&=g^Nq#pQ;wY!~Hp z^^Y@!(=wqKTyp>URsV3DP?11$Ca11JId2>PvnCVuBKT0v96kbGJP<7>Oz_S}#!kNQ z6D3HF3WzCVEg~za$zUA<mW?D6zioYL(a)Lemab#T?;^>>8BIjwirjh!Ji1SsKNhR) zW{@RGMMGtqoj@^4(fMw6Mldxl%3ntfk-EV!e(uLqhfbE>!MMf)b6~=UmgcQsiWgvP z;+tWL7a=|Ivw0CGG<{;vKAjWFRbkEJ4$O)v<Zl}%O51q+bs8t!Rchajts__`oA?f7 z9m?A{A<<tK<WiH=V>1A{prgNXikL&!5|OME`ER+NpkwmHJ~9Pf)rOAX&D&ry)T><B zAm_E=W!oMURvXO9-@K(JyFBkw_j#CTCWiU#+b}sePZ68*CNX_mWPm(2esKJ%P`>%W z6T$O#g0TKOGj~bTaHm-M1<Lf=l$?79_k^Nb)GWk+>z~Fh$)#@usx**$WZ%17vMAH| z!8*yk6%l5fbBP)hIa!>d@a1p4DYPCm*B>=xWz`C1{f|I6)qE3}g!c;KbJ~Ld6^qb( z9Rq$Ex?_5Ii$vLm4-N&&Ej+&9+Etk?X)w~^T^Nzv*~Wp<fuv?_tEadEZ3M>xbXf$l z7S=G{69g}0I1b(U?eINOJ(H)`jK{p-`@FU0t|q6ZqCL@(%**}^5Y?n_uU;HNN!~KR zvAji4x@9IO`$NrIQpyU)5LreaGRZie%FVpUK~dw;12qyAoEG{$#ZBC7;NA2eZ~#Q_ zT{*ap!iRHECoMAA1SS@=mAtwWXt_=l9y;OM%U)}R_LEK&(gC227WP@YF|*2T_uYNY z=y|*pDrGL#Vp3o_BP@ShgJUows^_q@ps;w4<_^7tWlEr*2U&We&dv|B7xj>5{cqBq zTpb9!2?qA~ix~^LK|~8k7yDFS_PD6qN=2{Mp@El?*ma>slx>ME;sa}X1JOtYv9%7N z)g8}FPX_7j_(2|d$5ZYT5mj`)J)^7ZPY7w=9eh-$xYtzwy6X}rKQgKs)mDLs+eG#P zSe9w@Ey)Xbf<ziF?oJXgQSp;!3QdyAeF<4o_qoeTk+wFZi%TgH{)0=YP+NH_S2f{k z9GNs0vbOKRO18#ICW{rn5Eus9CE2G}zQcV9$h}<r<4XOJ@xzyy*0i33{*!<5>_f`4 zBO#9WxH`G3Pr|;9yYsgTXS-nm%%d8Wga!<U${0XNP_OdV{0N;qHbO#?N+K*|Z#v7A ze{t+!S^}KC+NN@j3L{3-j{4~-snvpmN}`oQWja(za17}0x1NKk)MMlVXdrd@{)Bx# z;mXr-g87AsJr=07X^e??W7~6)*jRVNpTUPe^ZKhi-?7(YFWB6}+e9%GJ2sOK(3htQ z83IYSa2s0VkW5m#NE%vG=EG;598pUbj0;rNVl;ImEu6n6Rg%C;!iLtQ`BN^%@-s=G zkFbR^Xz4;!fhv2f=7x+#L-72ms$w~WVmYKF@Upw^Fw<?L9rh~4b<f-4D`vGTr@@!R zv}?=i7v7zq{-0E_iwdFS7`T4r;aMu9`0Y>4vKT@CHmR~0N&hyDvOoVwE<{U(eB#3J z3t?V<_4^jU#6lrMss}9(7+a!_E>a}`RVcKm0BUV@DZBmKSF_iymd|Uf?_}`V8wsEd zlEOOWxm@A#v<m}a$l}DQ3#8jfpP(n<$oREo&zfRw5Butxo&x9VL+ORuDh}Fg>Wt?( z^TyI3&KiBEx9O^<4w6L9D?c6ZoJmzdJqG84c~RJnLXj?*{U3uDrTQyNq7dLM6$k-G z67;)@EodDaEs47QEx3yjmN%gGr)=#sV@)?LG`=~RZ-Qq7RQCiO&$K54R}%DWL{arj zV_qm56GIdNRs}z9>|uVf@4?+c(=asU4SK;m9I{ogG#MtY1TGxnQ!;qPeuq22z`1V! zti{8gD6Uy}hyDD^7todFJ8*YM=fF*``0p8Mvxt?SF?;Cf{u8z1OTd^pu>zTW4k1fA zu9y58ZN#Ob@n0{6IJw0ipwli}LfIy;o)B;e*S8@h4=7X>m!G|^fjO$Z?wn1zbki}1 zOLYP=j%XUjH4KupO~w_?wIcjip;zD{e7{)Vw%{p`T>)cW`@gK_>NUbKbIU<E<<5C3 zlPn6BB3$^M;eHbsiEb6MNuZez@V|yQO}#gn+>PWkRNBi>-Vmr-JqZP!nqu?Y9)Njm zYpY_eKp}=wwnk;_I#KHq!al7EV?JtQ@3ZUZ#C+@fBS%qRK2@CbBwqp-xza>p>IK|Z z+%+mE={c^1!{g}-e|lp4g5|U^-hO*3QL-S~RG`x_>uhdUJVJ+H*kXEuQAZHo;Ti?g zmT1ijUU2$Xf9fG*g8B#SQ40P}^5M|F8efm|VR7@oJ5EzN|Bj6#KORe0Kk=d3zFOy? z+#NQLsgJbB9d3}-)*ds~9ck2xVJEfMVRWzUCkc&X*Kk2Cb3+}%hOkzflsO<O-N~A; zQXzMRvsos{1ks@EbR+C1RUkH92W5yQ=ye>-(rl3UX$<1Zaxq8~-m@aOjc5YS07w%L zP}p5F<hFikMCk~H(b~aowa|W-V4|l$(y&&?uy-d7G`o)#(jq<>Yp#e2V}hjzHKswa zWCe(7fiI@G1SM5{4l2hTLk{vqq=1{tUu=_xm3g-trP%hI(Cb~!+3TrDm#w)TV8Ewu zy0AM|qFa;i?5=8tiV}OwmZ!VL-r*e<GW%ZquwUP+E$C0D)kPp6oe|Mn2r`-2pmgJo zT{B+DqdOa(;>Av&vl-6Odl|2Gjdn2=pt!m;IvacWf}(%@l;tx9IVL5>Wt^r1`~hf$ z!?D%CFkZose@LBYTN)JzN(`$jt*GJ3n;h+xqQ)+-kW;q?x360OZ_;XMUONqc1KPO7 zoFXcD$1mvU0dS<D8yq{cLkLgLD&}Ss7G~`mUKuhGe`{9KzBu%!u8>5BRwg+hVWY+a zgfRFCqg@v{Z4oYmYLc&h1};Y+OrV@xtIasrTCdIuzSb?SoNAuPm^gLOs$Y5`#LX#Y z@>OITs(1x?VNYNAj4}jB;<(P+<<x+ZiDL7)N5&Tb>@_cc=sIb4R2^snQ~Kc-Yx-|~ z4mSdX0nR)g8UfQ&RAM!(7{V3Ep?9PlD_H)}^L%Sq!E?Z!*FRk;JX1=ubq|Ejb_fqI z9E2`bzD4sIgloES_`QdJ>u(b}7?d?Zvp?S#G=P#-iv?<0<!Y9*<u~LtlUTA;vZruc zK5^FKnU93xx`dF+p7_s7>YtR=p9VcIy4+Pce-3dUPV+OC=}Iihr}Tk}U==gRf1?E1 zEi2CAv8@YB7GL}Fcx07y*U@3Whyo!ZkZ}TeG7>fBI|V6U1jW-}{Xcslcdwu`rkT}5 zlV+6~r7A%#yBU7L!g&t_KWYzpsA;=JG^q~-X?#9h8oqt&t)IL`@~J5{cW-s`o^@$m z9m5c-$$Cv?$yU<+;Vh{ffab$ZCV&62A_oAK7-rK%Yh9=gwH&LL(;`S0&DHfY0e3+6 z=3%NKRF+4GGn&~)_vWb0tHN7CDtAaZa!<Z&sLOBj0RJdc2FFD2gw!jOU1s>4!w5Bp zy(XV(|1OKwbX$|4uX}9|YH>|F*RM1dut(&{R-7=-a@LcD#nT0YY<2j+s?;Jb`$f|m z`^9JuUb^{L8oGHd1-xHy3K}B{RGv?b!y|&h8fQp>8fx|_4P`1R4gIJlsJsFYo0*2_ z17YznDHYBCMrMC1jioNNG!4Vr^BvxzX#ufmU4O8alm43pr2t5oFQ7>;U{mlOZE^5W zj+x#R(R6hu*E)$@6EPiDqs2ne1zU^8n5)G1l?v)nhx@70rgm~=n9vf6*CpUgFgY-d z+1EJJRW_=|EN6yrS0px1apA)+QdQK^^${-~EF0*AlAm~UcU%=bnVJK;w34@FEj*J~ z`3f58OFn5Ao)j`gAGBehD#iFI%h0Io8ZoFqO9-2FgCs<sfiSUF?@B=usUq>nM9u>d zR3fJlxLhK)r@uzZg-NOqV%sZiZ!}bJo@KE<>HdS+2A2W{-NSwh1^U2+>PBky$)kxg zqiv}k#aQZ7cQ(1%bbC%;^Vl4EG~w8DC9snf@vuugxBU^vV6&H+=nS%k{8Vj+vU1wT zY`DCH(+rVi_=r+~Dc{a;HiIo-K;dhlkxnvZV9G!zZILPh|73Jm(%8dN*is61jGdK_ z_L1gl)4*D|PNu1}qb#x1ne+|NP9N{pnZj}L4sk}OQJL?pRebOP=S1Y*m9+oik+NtT zW4!SXZ&8+_+Gfyx5o^5KhSbp$`%t4Pf3y|!yKj!V3F|h`nPA*o8)dUaccOAv(&4(z zMs(Zp2cL(Y_<`6Mr_Ju%43+b+QJfKcT&>kMM@FvVVLp`F5K4Np7Unk1dI_8zqIN0# zwTbmV_Ooa@wlnz?wx+mkD(8BXfL3YYjmlg$^Af8pTy<HjMNN3iHva{p9^#mJnTUEE z3f?oc?d)q<aYbJNsq|l;8ci!EE7){mC1zK@^Og%9$JUH%<zXR)o011`Zz;C$%x*43 zZIrC~Qw{P5P}*eAK`X1?_Sx|l`%sqO5lR;!z<^O4qaG+j>d^`eozQ*58B>jT;=`+v zQkJlJi^wF@TK05N8phV~wcU_DgkXg<*Ba0C3GjP*{{~$i9WFHKm$*G!WY9WTZiS4` z6i39$9KDo>CT|oft#rmQxvSGyD#+k1fx!cSB@NlEfiYHfDz|9QzBPxzPfU$mKj8a~ zGOk2;Y#7LhLY^{s+|dx9C|yG7;&;UD68fn1N+|-2rh4XR$j71_#^M|bH1A$Gew!Ja zb8PP=;QOYwRf2H=zewv53ROCMCU6deQFZ4YE%9A)qGXx=kfS0U_iZ6V#72>S1M5pc zH}@^S-G_E1;Jv2wfoSIwNwFe1)}%uSv%h?}PB))s*BL35{f|M1<nAq+nEF+7X9rH9 zId-840i<|&cKA2_vH;>O6o}s-_Ro`_n%`2_9~tPKL=mUSFJ=d3kMQU0aAelai&aSA z`*b2xWHi;Fe(@8%^A}OvD=i&urdsnoO*$R8>4w6As21@*;N|-y^y(D>tsZph9&l4P zu5>KF`#x|>0y71w2QB^A876Jv_sIQgzH<Kl`ywQ6*e7Wqxw;&EHYT;S`k8$p*!|d= z#I{OfeOyR>T4<}n?|r=I6}y$+{i2{-%Ev5m?d(JD1nPT{N-n+hbm7AE?(!qanqY!$ zW~4FJus8=hQGCUmZvC~s2Pprp_G-$ZcXG$SQ}Byd=Z0Vcnp9T&mEMe$#09c9hgk8# z3cbFbZF+V$h=lbKS&UIbCiXxXrs?0!c}{=nvkDV-tJ2Mn-<+YNrpF)L_UN7XxZNmJ zPfDukq;jaJ$`Ga6p_6&Rqfg?H{VmEqyj<75-@0W;C<#zw5LBukKjtm}Cmplc|AqS0 z!Cc?U+~YqfU4I;G-Q54%Suvqz`5k<Y;e$XzL$g*?NUE)=B~r12r1+aUF0@eFia>x6 z<#c1>kY&TA4*SV}`o@)GQr)zD;#tMCe)72oe|zdWgrn26j^rl@ygC1{%wzk}ZRgb8 z<|Li(*V~ca53+9KVfBO?Je#p&0nI_Aq@aY@8vg}^xW)c^Kp;G{MzAA7lk>vzZezaI z;l@1=sFnc-vuP@zJnb^c!i^{LR*za(ON!muRjijx*mJR=MZ*rCfx>)l|1l$%3&E9S z-8j_hI<Fxg3v<Js^MY{^dCW|eQK7oRzXzEFjW!;lZ#ykrT|t`ql-Q<NHhHbcV%p1W z%j*{W^gua;9F6bEDQ{3VirvY?oHEnqU*9xga(rsYDIo1ydn2c==y0WfOm<vFL{SF8 zmND?Kf~Ppf*eSlsV*sa#eIY}TS_e})f4?MwC=D`#@X7CTT6b|O<5S(4($Uq*(lvT# z(OlTMUo0;7?)O%CkxSXiu@dS<=xJ#hmvpe@?zbjR;=WYEn;Vj)?Zrm2>E+xTWV6vZ zxvH#4R3U7!V#)%`HREr7UCHICXjRGrems|S{DPEReFxmu4uo+xpK^VQ71`B1mb=Zh z|LH3q+aGX|_rGONQg0`^9+wG4Y{~KIS|h1OA4YfxZe=pde<p+sXrE&2ycSZ)h+@N$ zop`$OED3(GDs$I*^eF309YzAb@T&l=_7<vDBh*D?-Nj**%}!ihzpRzWy6sq17ngwl z=F*Omc+~oZX<v`DXrm`}_)aha+N;ZN;!1ctU}NHB&R)DDsY4iN4+TTfHjJ8`dI>Em z41R^ZCJ*hnk&;@)m-`PuxY8JgV4WIRJ)1#byqY=!EX&ihu5>?`8hE^w&C4e>iLDj2 z?1%Cf@BK3xc(nE+TAP1)oTXr*^Ppr1EBEq(U+sZ{;~OaUio@`s#mirp22P=r3{ztC zlz_m`A>G2UXFqx9H-F@5n>5d8cQMIibh=~EohNI002Q0zKo<&L^;pW2+RWTdIu9kj zZgd1}4|%$(Jc8SF*8Tz+6?SU3oJ7p#434=Qr!glX+1M;z#eW;OE0%t(Ag`6i9{$Df zdZdIXl^~YIth{KNtlKp48KO<81Uh;=4az4fYZoIbr}D8=jvogK?O~=hY|{v_C`QGv z3(xY`)4Ajk=NsO1{$asMY~^k}=$zy`K&;jqfTZ>~p`3FU=@fF^x4fTe7g3drsL*@l zx6F5gR)Z3iP?NN{Dg4<k^D2ZzLb)$p^((!a9zK@jWwyLo%q!>~OR|=JfC1<4pYoXz z#yE1&37>w@`Ja($zXm}AF_2Iv&I(>yuU^1DHVI&jyRK#^I7aj3XPAVd7t5+lg9e7# zp+vKCz5~UtZ0o&RcdH`V?E~Jwd**D}a{hfl`w*&U62-DL<mz54RJcATEs5!dt%{7~ z6<xcE>96Pr$3x{4>m<IvA{6%#P}>*37xB5(fJ?AeR=+0-L(w1Uf59F9C6*{}3!lxl zn%diT-yWv1iW=EZF&QN86L2pL-YH8X=JU8S8r=JHec3Ouxk>@y0_X6<{wKN_4$0G$ zA+FBdMYF^gqjOV(lEadHSiKRJZP4m}yUswNC9i6}%^p_p{}V|5pS#YKY)zd0H`f_Z zUD^>_^w;O2rbaChKjR=7Neanw?YX+ZKOUpND8r#!VHYcLlJ=!h^-ZG=>c^ehs&}w5 zHynrE-k%5s;UofOIpMG>DCjmg&DR`uJM@3<&*?0IB(OkZToVt^)~=UU&mvc8{?EIK zrXN|tgu#aD0DW+^wO@Ty_>0fgc=<b;U@sU%ZVwo*cD(-BzuVDz&OrKUN0yNYj3kv; zDk*ae6RnvtOTpRl(_XXwxv8q8@&P4+d*FVi4)`}_Qdwv!=u;v!u_ls<>Vq>kkR&D* ztjSE3k<F<{<{mNoG}r%YWNj&tDk^0DStsi!TR~s2baw*h=W;F)KG1#uwfVibEQXca zxXMP5TSELJ*5oXtYRpV5AWyRy=TeYBR639_$)=R`pc0`$qtn>hZXfX|X_`LvC6PtN z3*0Dha-tih8q-+AmeEUQLz%s&u>hAGk!~H&)+scz8G)crZ!~We-!%|G$f6Fy^GSvz z+cx^>1`o8U<CQC=0tI<}=XsL)vd`qAsi|GfsFaSxb}0Wf0V4G<c7!oEtv$oz(C${O zO1qHIq@l}Z6z(oMTWBqorBqgy8b@hKg?iR3YspUPKB_#ah>}I(^BO*`y*+Xv8#ym! z%fV<Mz9j3y+(xR=^n1}<DV&>;NuFBlAv`6e2{GB6AKGX^^pn$q3Q(w%Be_~L^2xYF zBBD{+7D?r=6n1!}*2oE`*WyVTLd~@n%Q{ApzhXJBEG}JHN%O+((Bq`qVfUoM_srCw zpfrIfVypzOJ5$z()t(2*rs~5$jR`?#4&Ec2c>g09hgwJ@qfW2QDYbUeank3hlfTBU z^i}B4@|fw{Lc`9qWs`cZpcA*8W^w|~Mtz4ot=H$Ap%k`f-;UX%W#1k(X3rD;$+0@~ zTb$fu*9~$HB>0I^PYJ$UdDba@Lz|AVIAZ)9O+5@2C;XbtPPF?)_|ehA&l!p2Z(iy? zm`fE;>=DueD)5VI|LD*vN47Ldi)sUc%UIM?#xBxMP(KbJcs(Wh+9(XA(=K-pzcL^# z+A1z#BS=r?{=4JorzRxoA%{DU;H)W2h&i4FAd2r_%sUM2(=Vy4W=KX(f=%IPI@(}6 z|3N+*3ZH+fH|X^d_<7>*P#?QP9Fmq(+yrh&@;@7$V2aI^=rVie>KT(cdSYnp!-;|= z<Yv#^5InP>ryTnq&I<%Y*aJz#%x%zj-oYYQ_B0~rh@#EIvp57e-0^{WZtq$xitUDX zQQQ!8TZGxccXlpPv6q-U(!?PhGFUdq-l4-$kfA<me(#c)4)rjcr$n&#vA&a{<G&3` z5O#~%46-u=N|M(ojNiaDtAaj=Cfg*R`5Uv@`xi(0z-M*(Nzq@pCTN{wuJF27Ig^At z8}w~~OWb+pab#G4J)dq4T?-CC2xNb3DYAGG5g-{Gu=n=QUWN^42vPh`bZPM3Gv!~L zDi)lfsqd+IdRLdESJ)rp_-9su_!Pnon#$(ts}{A^kUlz6@zPX4luuM6+Bv)8<}1Nx zaP>2{!7lzW+E@J(wi8dsw8#1+ZqZ;WVd=nOwJqzp2E3apsL{c78nF)AolQ9<V)A7t z|9Te|j9Rz9E6nIlZ{o@ux4<J^OffO7!AO?lF@&#h(6A4<4p4#W3<fVh^^2M*^tkK4 z_$F^&7|ixJl+yf<`3e6QeDlAc^uJ=r^$o0y|94DP(NdZdK>17}qfI9I&V&^?$P;Mk z_gqljXUanr0WU)Aq&24Wa|$q@jpg63n>;>#-bTC@=gg9o%BgpOFyxNs^>mqP+H##- z*<ZTC=l{9h<Hfz}HVt6GYZM$JesIeWAoH^Vk;mXFeBS0OPXSN1)$re0Z(aTkhylNm zX`Lh#W+E@NOQO-Gi(u+ox9Fk66kVg!>?No(lE$KuM$z6w<#!u+3W|@fv?FOU<5PuA z);C*Yh=^;;5)Ppi2N|=eG-A6;<pjaiek!m`5|L9Kuay)+E2!7GOlu^W+$;BN@8!qf zahj#9-R2BDz?$N{w2HV86_u;98zVLtfmfiJ*{x`^L=u?tBc>|4NR%g`%3>`%nPlWZ z=4;ot*I>b^F$|>H^5{iQMJ}&udX&&4L#GXicZaYZ*(5{KDKA2?)HRppNdF1kRB7u5 z^0>;dR&g~5h+PGDIBK6+c%x5A6yXUUTy(^Z+BLXSVHmva{)w#^gN|K4IM9JeB35E0 z74`)t^#u^~(i1!K&2Z<-a+XI~s6~ne2OKsau+0%`1_?Wq%@QvxPC`a~1ar5OP}COn zL7s7YP1MnlCab%m2eqksP8^Yw<?HUF|0a}6$Z69Sx6>zjB^?p%E1?v|Ke(3t(8{S= zpWg7e@BMSdz2McO^Om9GuD$j80?}F5Y0@VwH2YP~c7fe^gwkJI>IBaMm8r5H&k@}T zb{OXtu8agcmdHcLoi|gkr4oL{SL%t0iUSQ!We!p*CEeiUM{7D}#)cFIp}of}a+*#d zDF@Hw5I2MbItx1Ud6=!Pc?HNJjM5u43oMGKQBMh2Sa=-AJ;KvG;L_^-hK0Cb1`bSL z^;!J$0k!sk+3>(Ze@JhZ`1BOy`Je~wWDTWuN~sODTR7tRXW1;rF^WaTg(WsDM=8SZ zz!HfAOKhu593mO0n&^nU$KqlE<pYQO=@^%z>BR}lqV&V#6xJYH=#t8F8a~^WY5C6q zx8fe=gXw7j<*lq?5zHGvY=A5)EpHy@s6fZvdGw#p*3c!QOHfPbn?<Vc=*_BG^P;3> zk9(aFCcLp(v9Zw<#h$7m=Bha+EQ#R_J(CT4tbLo9ScSz#;ozS=Zz0H?{u1vwvxp|7 zJ{CF!uZ%%%vycBo%3kBQSpEHul+}g#pXky5<(mFa^yU9&O{;1tt%+gq_Qu(U_CrWz zDCWq{{!Isaies}rpTz(P>-mLLQXHQg$q=DHRHdzh;dV-YDwAqnl*xAwdH+?9=q>RE zEP%r1&Qestv*f=xIOp6lF5J@ldd2=Hf6Wo}R#Fr@SbO`i^_eIHLv7B}T~@u=f1wW& zjZ{KfO(*Db&lXP*%Q?7GQ|GZhLu);i(<v>#^0N-ZwpQg*og8T%>u6k)k!8)KF|g2M z&MH~6XoX2VY`k%#lo4*xNh)2_RLS!@ZPhhpfHfe?_P#ffw7}&aZ3$;7Z(@<iPsN3O zv@Plu$xn{oxn){;PrMZvA47Fil+W2Z5_aeH5#&;Un_OQV@3JGiL_|}3KfO@l-PlDl zOevnWgT&|@(y+?Xe2jAn7IUF~F2SzTHl}bBKIv>K>7V$tEgd|lMH+#dAe1DpeOT+T zbiCJrP6E`9IP4P&AZj+aL=GEs&a9(t>KLlf$zF8Zu(A*nu5-G<aT@K6yurQOrdbs9 zN~V`6!WVwN;3ib*J-1Vn2<<Q;_czLx58cl-!B<pV97d6()Gt#TlRS#bdKk`Vb2xha zGii{Qf|{=?Wa?J&G2#?~wiA;Pdf!0MfbC;oYnilYQeR8nSNz88HO2}@n5=H9MH53W z=F+hmeE_Tcq0#0mGFcVj&0KF*{$$mhO)moc6#q@wx|>w<2Bms8LtTyrpHJ=*zu$N9 znQu6Yx18zaI2tOfXjGw>Q=Ay(`SCD|G3`22$GJ{I^5Hu`)?wJH8V@`XQnTrv6&2+3 zgGY6aENu>VRVl%c{;M>Ac3ILKSP_m>o8YWqsnfghb&L+3NP&>sbfOV?N@lC@m%V(8 z&sO<tt3s;To6t>h9jlua^k@Jqt-Bkr=(N15UpvUmw)q2v!dmSt)KI=hd|D=pd@c zIDB?Y4njDXzFfRBOps5vw*AiHxXO!ZBntU&Pw>KL*xjm_>-2p}*{~hnR{5}#TYQNT zU&8!;d(qVHig$7ovvUAqkVgBJLS`Riv)CKV8JEp3e0}fG^gz-IcLOS7d6!sCUt>aT z4LCJAFzO@8XdH^RptX6x$TdB5#Ab(xZaj~%N*c+JgkAYRK2R@1qQ&p4d*!dlAe}E+ zS^khujNTqEc5C&z)d2LPVQ$k;30NB`xNsuR6eYYRx8s0jbdFM3Uc5YCDLicGVJX6u z{^$;)#2H`FMb|OY`6tdxi0Y}5hhr3Uilie+(@>{J+5%BCuUS*WAUiAn!S|0&g0nF{ zrnn>HeL9N0&A*r<cT6S{gXdaC2_eH2Ps5?$i)!k(t5vbNstF?$-uij~@=^@^KM02e zoz2t|pZ@`w2(BvDn{SXwhy9;GM*jc&pz6Pf!~Y91|9=cZRm*Ws_17ngR;OqTm=F|( z&{!dd9L^jyN--gsY<HM}kd@3RY(57$Kp-iSF3ae3+U0dN`7zt6XuP|AE~L|?h`;Ot zZ)8|aMn{~PuWhx?bn59MtL|3M_v;h#U-Y#K%2RBFU~lX51pg-T00o;tOwC9G4?f<t zegq<7-!ek}FEIsyY1ML>f7Nu`fs+Uq3w>!8RBc!*ayE6|CQKdUs?KXXNCXE?nW@xi z1{&i?)g;ML7Oe&ts8NNIKrAk3Swmy)j?#Iy#G~=?6E<dN(fp_KiybDAJn)7*>PEv^ z6H8%mEgBo6@WOE<@F-huuA_vxv$8^@*osQ*MuYNTxs<B0sf1RC6jd+ci@apqc!QM_ zPk_N?O-CC}hPoO{$UjMN)zaC0fA1W{e_?4Or)4|pv|+bMYHDMRPn-AVt3nZFm8;Sq z<AJb*KuQl%>)Ma{sr}qOoFwy9@9MY6V^fE|1NTM|6<x+hsQ#3SQ<^Jf*Hn%BznO7S zwRwpsN(Wc)hST|2^cZgwciWEUIKfdr6&|1m>puMB(HZ9WIYB_CR(^+UB$9qVfjXp9 zf@8sLI8=&-sjISQU$vdrwiaMBv2(kH_z5Nk<<FTf9FHkhFm)#)0N;NsDqZ3Bav;fo zN=1x%jZUKd&3_+PcFzg=K_rOvw%at^<_wC&q|{wTeS^8DpKHrC1MOf<Ys|sGW%<zF zclZ~rGj>z!4-@1*z1DR*##IY;NzV1tOP+XDdB=TOPzy<)I@A}Z^rFUVT9fi(&Qo2; zD)@Ho_2vz4Ole-L03W({*>@2fwGKn@KE^RC*#n~@Pa2)=?LIe>+(1TXbVlMGlEGd# z8hywnlE}UKz&o$dyB!cYrIu)5Ayo4VzY^(R`xKlR_AU*!m1%0_vx)P`IYm{UdMX0e zKUSLMN=J5}dk`NNF#_3Aq3VY%V7?Sl7(FEB#2f*Xaryg>Nj`IElQU;8uAKc_2X?t# zeH54_?NHlD=DtW=-yuny?7lbJ*J_a@<iFkE8DFr4s(wF;^dl?C_v_C3|Jcm8htL-o zC!{)Lq~q(+sPV_F0a)%nrJyg}@V$8LTK^ksJ}n{$vV8tGZFj+i6c}e&C!r`)Ir00G z;80RN?q0R%JrVYE)XDGwrv{Ggd9yo&L>_F17vw{2e{Tp($nM2tBn<Lbd=<gx`5lyf ze)Gj{B2Ng!<_nwjDEt#8pJm`$-UE&^g?pI8;<$9AAu_%&itBoc65V1<c0i0LL15A` zA^)rFI*~16#dZMv*X+;76JL<C!UM<J4Y8u%kI<6nat;8hb!d-hfx4!DhlMu+>_>{9 z>zHYGk6I)b5m_umnJo1`&1oKrexDTF_?xBJ=Gqq{Msee^Bzew;y39U%2w<&jvgBp5 zbdq9i;R>@}J{J5wE4b<V$D-;n7wSCw9BcN@;=~F9Z;fhM*&d>_jms<`t2!t`Av7U7 zh$@4ui>XI+`=89#|Hax_M%B4xT{;O8+}(n^ySuv`oZ#;65bWUY?hrh<LvVL@cXx;8 z-dkPc>mD_3kE*VJ=lp-y+H<cp_cOz2=|r_Zu0#xQf7jXmGx?;VXX#}0Po~H};6^G^ za>xoFaHDV2f>ii~xvk3b%U3`B<TR+{2?#~<qDdREj|$-6nCPVm%2u1NTrlz=1#?57 zo%Ey~xBDV|dR@;Pah`sYjv}D9MLCS~+;gqFIkvxf-+%rMQHX{3yAJ%pwk-yT{h7EY z9i@Bplj7$U{R@Xt=6Vne6I1trq^8a~oGc_p;6-?$9Z~rZHnyifLBil+>1AuhJ^-(1 zx1?e+zl7VQZ-1wb<B@{Rm^ltRwQQ=rV@1m^NALTfMYTFTdv`6B!C>HGk05IdVV<Jm zBnngSFTBCBfi!!qggVcajbXd}A^$IQ7s7*wuLY>?WSe7Iriq<NbKl~aMlnUU@1aVi zR@9=Clw)g+Z_>+*jf4<AG!K}v$a@TqTiY#-jp}~mhQY)+`4!g-Xg$ma7Qyh;rRYLn ziG)x@t6X+Xe24S#IIV<s(e9>()Yg$nme3rQV)Fma)huF!1xHpcZ0YZ2y%b1~7t%cX z%0(*^Ke0Dnti}5CJC%beq2fL=Dx{%X`6Z2%mQR~%fk7L~+qiIw-M*T-8VHA%m4^n| z+xORV;AW!SyD<Yj*LwpR995{*kf?@^HdS(HBHf^d4e?X(n?=20Z~m`^rg_m_dw!iO zv0N24*O+wNQr>Yqd?|oD36>%xyYI=b7mM_HXwgVHs$2zU99t(fe#ks9WIg5$ag5hw z7<`%6UMnS3(I}uDHW5q)3y!gPvt9k!ae@v?UJOWRi7{emYynJ;-Oq}mL$q5Pt$dq| zPe02iD@CGZ9gw|n-6mi{jB_LA%4^->=nlVZE^Pe9Q?opv;kGe7?`6PBGX>rt#@;{@ z95OA5qfs4gv&(*(D*+)JY*)(=BwIwKx-3N3HhNl(^p46~KR#fK^G4h@<K*$LVeNuk zg0%9n{F*rr$1DL+K!=uZtI!FY0gxWnuOJvdi_b+}*Ds1Jxlz}&T%38VkOzFcmdZa* zJiN<|-7f!zj*wHTZDg`Kraq&`DO&m&W@(%!PpMPrfX6co#9zqcLiOn?FJLYDT6Z9a zEr1|xO&+z4;H&UJj_ScZ=hO2I+_YJ`Vu1Q@Mb<XF^I<4%KB>lAWxL}l9m7W9Z>tG8 zOM%LVYn7aWEJr`u!l~vw6K?n)w+bL46llQ*PZ>h_zwSO@j7fCz{W0z^O!;(g`k`7r z!Teoq^Zxs)#nIl#+QiY6nBgB`0065Gx*vjfef(P892=;xh=?#bK2CP)LTN&<E`$iO zRO*ABX5#im^VfMQpif{Hed@z(Pu9-Y?GsdUXqg)gx~8<n)fAJg6j>ARm!~V(-#FEf zJ@mzTl)ez*pvLs2da~WfK()Ta`YfXZx!t=50yZ348lrQL`r47(%P&HXy{l+2st)xi zHYK~c7xk`_IT@Mhnp?8I9`zbo)}pW4EnV5je$j~?!_itvimp^}mCB$QKL|3YnvA;b zwTBVGi;YxcZE+N?B4pY-2KgXtw4b`-R&s6!Fy{u!25ozhx%}ox6gFf5rmjQTyMX|- zsd;)i@bfVkm4b6zGqvot-}T<VFL+QBg-*el@->;zYY2L6!aQ~iBZELK;R3F50OlhY zXv;7mIhy3oFpFckMA<?jatVEb{KZ|V$GfKQWyarY#kgzg^sG@ws0AvWgj+xV{CFV9 zZKE0c42T+d9kI-(6IC*;O0udcJeq&c!atZ+S76D{GtoS`DA}&WQ?`0Cvv|*#RHk|% ztc1wxjBK5LH%vB*k+7HDSuIgTvZybK_C+fzO2ED?0I1uqK-HDXY@RnSOPH!nU4(BM z9nfw|9((2;Sk;xEiCfUe4d}+}6|Xw?{hG+6>h{zu=!-tg?-OicE0XDU0M3{1Ne{SZ zu*~YFLhbfUB$-coLz+CCvq(B9;wU!>T@OP@IJtqZGJDNVi&TPVkm_<{3{UEcWhLVn zlIdoNN8t;sW6UJubdyZQNs?s|SAb#6Gw`bny%V{KN%VCPUU?sZYWH`d`g|e<`OtF; zxcHHpjkrJh?7sSg7S^^jinZTMe1j6FD9ve}^>3b~&)|g#j-0qh6qOs4jw`Q@^cKB& z(86be^%a(Lo1yQ6pg}d=?orAp5!TLOlL-mkWT5SsqVT$*K0e5~g_RVc8*ERG^p0hd z5EYkI(m?ZnxLN<Ba^4Ln`^G*<e|LYIrSbn!IsXi(`QMfEy|}I?H#jsnSpNIa=PTpN zcuGG4l!!#;%k4Vt$nIlYtx96zH*#s||4}=VQrNd2wX?jq_($zzEU$j+X!iu6kJ={? zPfnzt_U9b|Zggt}&&Ux|i>nzz5IZTkD8jr}jrh8k4FS!~?dPhTl$7d8?P1=WN(V6A znVJW60FrLj=Ou3b%#+~&`G|D$<6NJL8?I;f6asOGm6>!e;6<XDy~nEju#qg0uDBtT zio_hX6jP(L{vhMWfZ@CC4(_e3nAi9z&Gcq{G1kntw%=G8su+Z<>)SJQ7wP88jR7R! z6vK5$Y`Boah8K5Ty4{W^$dFX|4ptT*FzW{2Ih0N0xtm$+6^;~NIDPnKhXTZY_wkc| zQ*0Uv*J~P$#%ONR?T<d9=KR8mb|Y-Y3?_*>r$$E>gw9ekhj+PiR$rZ_qzKx!h<M4F zO>2(nUfpb5BHK%9&lk5GvS(^f<5<jUQNsHA4(Z36feO&(%oS-bQh_nq{+T;HrShIp zrAGDAs<CIEf$K*0Hb}on7`KBnq=DM<o6Sjq0E9+u9D;2riFL$JFTt#3X>+U{07DcU z04gZ%p#^I(-qb83oR*+RTt!JLA)y9M6k!KUaK2{(7TjrJqAi!O01e4R_7>Y1T#zyu zS}mO>T&Wj0MAD`0<YZyI`e7~Clp7aHfky`ui-c^EO1QYaZ<Zfx-3+Td!rGXQcQ(g? zBM}Y7)f}T3o;^CAuus}BJ<}pK2t1CoK`Yq)9VIF0ScWFL-z4rfvAjSKg6_X`5eEfI zf1kJO?hW38Q-^$qKOhCgzd~(yQOcS?&EoZcpUK!qGU^pcDbtvfCu|J!ptT3}Z<Grb z#OeaM!X<TEFd{9(n=2DFSBWxpoH2S%Za2W-Ghr60?^=4tTrE<~RWA?g^BKzvMI@?) zR88%P=c25hm9p_8hO`s@4hk8V=@?z1Vz-j-xsqGYhtOkX{`Kdr0+qohxzz{1jz4L} zheFmSj~_*r__twD{~txh^pE37<zE$<??70aMyMK$BD03#cE3eSy#K#ZWET+QU!v)0 z^a{UvCBy#qZ~9ccPr{w}>-R>O1<;rb<B8~y=T<zyX_kBlb9pK}x0)fw=%OM8Y-}QJ z4(6>yamda>bM!DDvS_rm#N>l(`N~u<zcxDr<1M%$I=N;9VT}RaFy~mOwa5GgsK#lN zxRYy!=0qE(#t3Wfn6Yo=CdIR$c;8f~x3I#fobi;mua<WWB{Z<bmHy<G3Alwy`Za)W z<XY7OtJ#Hw*~-Hvj#=+St(W2$X=U|e)1!wb=m;iMszH=iQae;<|877c#TIe_17cT* zQZ<Evx(*Xbhz<P&11Up9j9<(zlRTpE<D9}e-hJ3;HC9<7!dqWcuCI~w%bw>V{Qh-D zghohClnSdvyDE5P{K2@4Bh?aGJ9jj-MCRScFI&z;1dtSI>wEqabyXHug;`_isDla3 zEHF!HSgWFj=zM_>vrp47HXQ`BMt}FQnUvBn8|)Z!Q}kJJXyDj5rM{HL`aCrd|0P%g zKOnz_xOMyJZP$u$r3{8JvPeHRARqxh7Q;l%+J(<R&2l_JFQ;6?AlOCGuwoV4flM!9 zQ>4_t&!}^ZV#_eJ+5W@oV6J;z*wy=;MOiFp46Vs7{pf)H$|P*>>C_S%H7DZbwIfGJ zg=!+!oRuc*gwbbE{oz0#Ka<w|^&rQAV`BxQ6)?IpgU<!_EMEOp_2Af_y;T*Fn1kH# zsyWmGP86eIK=Q$dpN-&CPUS^w)>A;m!3{+#*%&uEImK6_YIAiV$W7KW_5lKzEm{I7 zGl=^Em*gG2pp;+DIyG3u>O9$#3PGnrPmy{r;gc|nP!{JVj#*lvdq&#KYfN~6aEKfk z_9^1RbcLAm@9qY~62XKwD{|yF#IKHZp<A50+u(JtynNP*T>Rxh8kiuiTRr>luzwt7 z7FixpPyf#<<Nl9D;9oUXprZXT6-VK*7*0e8%>fz*ODqLU>1Kx*Tt#Swf&e)&RtWox zm&rD%BNf%H1JWhl03b{x$fPN)MumLE@EL0fDDbqIvR1=P9xiS7>CaUk=AQj^n{^Pi zu5n6zHS8QcZIRE|jI@If-+PHe^<Bvgq&nlFNaQI87gVAZbHI*qF^#~cDf|3y;TgRR z<zdEmWxG9wvQcq^S}f|_Y=6UJ{6=7-Y}w6_0eTd;m!_E2YQUzMm@Zjz5L>3rw~f?4 zF4sR&xr9abYxmch@jQnpn?#3Si3aw3F#N&<GRya*qM*RLUv<Fu!#n6t>n{}K#^D8s z%Ih+1fmN})7a7hDQ7xzr<ApwkSskt8@{&oJDRd*@R-6$q0yITA<M7rD>gKaDE#}RM z^e7r}I5mU4YnW0fW@Gl$Hi4U-@M59Y06`BqnxURxJr<m4i<TY~nXrg};d>7CitCbK z(LP!*;|tL^u1pwC-<~tFK)>y#O2Y{T63^8!@a}%cj!AH|8(zKD_JblnnsXi^`E~Vk zxB$gRRcnh!YOA__A1aW(^is>igpzhftrJ`{EFg4qw{Y)mz<HY0GS!F7R9@*^{4R69 zwax_Zx)+a^lk}dXUm-^7gc*gw>VayLm1E?jFcXu+))Q@{E5e|zKX4}_Y}2N-3Wt5X zNih#4+meD^+ai(*$oqJ!>e-Ft#WO4P+Du=l2WJM0-uwI<3#7ywehAqd(*?4OWbY|W zdAQSuE|vi)v@mcw@(EaA-U@+czH*LPVBM#_STO`_(qHdj-|wZErcFc`dybrk33iB` zmQrZ-8|Tmo3QirnA9Wnt=3UCTmY<%Cn$e`Ew1qU<@Q*&@r$Fu2MsHIn)a4Txfa+{W zH4|wS&caAs{tOC!@jdt|-XXN|tzrTL-Qxu6aD1aw{+*SOSKskVRUlii55M#$LhT>w zsTRIi?R@~Btk85(ff$i^@123JtzLtH%6AZ2gYOTKU^*rWU)nommLTUEh&RVG#-2V( zdgOItnh`UG(^$=h3EEfERCFY9aQ$~}Bo0B(iDnr>ir@J!j97<nUw7oPXJUya4StGY z@c61oWyVFuuy-v$_E`*$>-US}=@GucRcYKH<cZ2~_9QEW;p%s>3+_0PElUUt?%77J z3Wn}7h|!9652(c4?}DV0J^s)N(L>Ivq;e$6Hv!~$f+<4ovMhDTmck5T+Xcq9hmgeH zdp0Ee<+Yp~@UG4LxD2NL?Vjx4&kj&>w70P~`JYSge;A2WN|TH>2ST@r>wOWngk!gZ zReuQgEwHo3SPk~62zPD&QUQ01o2@W+*|o2Dgl~mwvdamT6!4|`4Ap4s3-Z5>MBn}} z5*^QWi&{KZPft%@-_EZxl~cSvjH|AHaRs;OpNQJUfFi#m0HVIB?`F+En9%s$Vi2mG z^-IJPHlhh|_|1a_H!R|Q9^BQON{j~(*QIJNHuh2)%kr-`YXL}Va+nyYXkthkDKOK% z1aOB?F0+EclvTMTkIg`(smf$TZ@B@Cp3(_1!I?m%=~Qbq>PyT3fkqN#W|Xj@f_T+n z#owc?nRqHwrBz7+_e@eZ2X+PJJ}C*eD38e?Py9~IXHIUx>2#V(NOOEUWIgBmv}*hb ze)S^0Y-q3chhj+^>*HE=Dy`D%UTqr6MU0WUQLm_#{~?K)klqWqDXIj;hlyxElF`(9 zNO|<lNojtjMCmA94lQ#OWy7{6i|h8?a}*b6F0Ml`bZ6~qC->4b<GaPrLM;QM#psZ| zl6)x^Q7#hzfQdwDPI+kjC!plCY=^R@7npm|=qgb<qP5jvMV@fxxGq>+>og2LXzkrX zdyFO+l0Nk+Re)~RYpMfTh*s{NIwy@^3VKR6by`bPo<0`ck4LvPi$}m+CxKxFYNFKk z?a<Q(LuMB*7pLOLQfdwh7_=8XseoI~#VL2yuoG%l*}QpHlDffTo|l*UEqG3Lw<Fi8 zZOBLD{zT<Px1RAvdkW3(E9D^`42McUwd?HDYwmD-!@kI|*vZ+<)b1U$`dN0GwJPph zL2$VRY+KjITm4I9-1_eu72B>TY=o{vk!%du{gB~(mk{7v7{ZK^c^GK6)=66|v!*l0 zsn*qLR8Gb&5s#-(r4Ap_CLi{o0uUEX&c*UY1o~MiPEQ*f9tUOhlAC-w1oKwdgfY4Z z)IbSNSzo?_0}6k9B<>dCZ#ir#Ka3$WO=FR{=PTaWja?~L9x=-ODQ_`^xn-w#rohZ_ zM!A1Py9NJ->lx{R^Gm714PcDpg76U?CTs#1MIgP@2JO|Eplc5bc;Jl;`KBxUf*?2H z-UsY5OaDwgSU5l;ORFo9o*8TxD>rGnoaJ<i9Qmq{OUs!*P9S2?VTuVUuDK3FY8ui{ zFU8bO5&!t5Q%<{HuL9*<ePpZNx7)H+qT6fPdo0cx3H@MLuQD3AEZiZw(+48lVIlA~ z;E!V^6v;X8rP_5!fEp>c5q_&5ZR=M;(a*GA^2|c9+6lyGb?$xQ&G&`1^U(5)ps;)o zJUaG)c{7+3|CdL+vQq>0wOZ#nZLTxCL3D}c87CZguRgn`WA^q%qR16qyB&?K<Ri|= zbFaQj#d*6ITZr4_GtS5?&%VnKE8~mj$KRa2i8bP$InvA0DAG%)!@aUv+l7{~1X=rq zFX!o7k0ErE=)bL(rLXGA-+<A7x`8lI-fLeLPw5VUiH@93!ArW4`9F#zNLTTjW|J*g zL{(TT-KJ<Z07bK|-LPI$NM}0Qfl}l2_b9HLUFD0<%VKx5%`!YuA{JU*3>R5wF(=R% zP-1qmeTZ0(eBg3~Pk)ZS*}_Xz3qD5Q;(r@gCjOr&qdz+0zuM*jPG$edqwTiV<c0d8 zFQV`$pN*oYa9NW8LAj(BJyFQ_!WLguW^FR)+z``np}=g;{C4r#lYBd4wOUa_!WLHI zJcG++jAwrg_in%PqnoVsbbs%$D@7k}T=mB|`<c}OxgxdU{RJN5slaug*D4t`>0HfE zPgk=QEixMQQn`8Tvk)U)fi0e9>vwb~V1i(81tws*;=>WtU@XO$NJ3dr)p^hMpt-qI zK!r0%qoHFFILvs1GFq}zu`geBE3Vr#6=qqSu1zpeWhK{aEVE<OU6w{{2#{RftuT|? z;?{KS#(v4@?8XPgppFwz&%5r~nW&yrP}o<2H*gasQiqyHu%fT>#C-zZ;ZD+9ReI+u zT&7dVxCG|J-)+K%4VPTn@59E7@8vm}Rg7fw)w>jrr1(+v7OE~I%2JSXYyF~Hp>*h1 zJ~ozz4~|69?oXVJHok_-N{^K#Lph4PQ^EQ9WMyCchF5vc@Qb_2JQqW;oEiQOz8LKd zB!x(|GG_Q!3@LK?F+t(co3capP$#>UUC=yehGj}=)m_ul4YgDiv7|p>)4HCwLhP{V z=lH&xa4=B@c3A_WmW<f96;I~yL<@`@JnOoSwix$*+xtx>qXP?B8T$7udpf*YIjbh2 zliK&S$au(*_sZu(nx#x7#N)y#)}_sZ+}x}l^>E^78N#4N;^xVu9{MMYxm-Rb;Pd+m z98fEsm!3NPh}}z#xQ*wXI`M!A{loL4eS?^v7%dY!ALtDeeVW(CBv1EAs1}EpgFy82 z5d(8N(K(Of6NqBUqZG7GC*%6WEtrPxO;l|j!LGkzB5y=MX6FxY^!*#m^deVM_6P+n zP){3}q@VFuwA-QM?16T<*?N92kktZjhRJ-hBj3oHHR2usT1q`Ed?9*E?-`xcRuoI6 zwTeOdDdQ8o0n~t`Y;4{d!{`Y^)=8w48`TooRDFkh!XI8DDh!b(d&Q7GGxsGw+ryK+ zm-}VG)N_s+E2AF)Zzms$`?VH*CXMXeT@3Td4zo#VNbP`Hh>zAF!LaOAq;Ct75lzz& z=lcwj^}`)$j=wE4*0j-0PfN%qBkjZ^yE@3~U(<pv^SU<n5B<{fx6^|ExLW_YgtvCI z|Ho^Q@_*cE!VHHo1nBL^DG;WZA^T9$^K~Rn6k&XObjgvm<cjEU_3A}KTJ?!je2d<q z-+*Ja)5c4OLO%RH^3TyJg)SrnmM4ais7$7nF6WsZW3T)#kK^Y)pBjUX@OirxvCKR( zAI<<5m_7K3)8qys8l_j4;@zo0C)g-V<#9_p@cK@A>W8WZXHQekzDyAhBDu$gmCfAF z`GEa&`U6yg#u{_XieYVFfqAzzYHIyzt*h@yB8_Pk_1XoLX5VJwWjYt?rkxlDnpejn ztg0c#3QJno#S$EtW)zr8i4~f~?be6cht~?axR@|fdY+iTh`@6ELRu4HfANTEdw`u5 zW0F(^F``~b?fa(PvhCgDTPSf7J7XCu;<SrfjYv?~ny<vC6rrGRDbCBM;>y*AP}7?F zKX*MJ{EUK)H^bUYgxl3Zk_wtQXH93<is+L{3OANd=kQ$21vaWmR_V){H<PbC8jHb& zYg#f5!i<HP$~N<$rw)Sz7ZozEkuf{OXnXnSS3r(_LZwvaVf3|_W#VKimbZg3;ufe5 z7%mJ=BGDZq7LL3{{K`2J;5x;KoZND(DXk>+cs6gbQjaB37-Du~SG&sJlS_|H%S#z< zY$G$b7V5(-kXl|vZc0xJ<8qMG7j(?`m^md-8|yv4ljIJsSTdpr;%Wm)b9%Nek~K-w zBe$&6HT9;o;ytmtb<b)Gdy_eVKt}Y@yp=d#vMTDFmnpW&9iJ7E(CJ3TMTI&3@bfqw zV9fo>F+g^43dheg_<{*cc<>*(*znm0=Ae*K+|Y8BDktzCuGRqFj?&zlo_4Xiy8?e5 zR%B1!`Pv12FEW$w;P0%K#@h+H0)7sUVfisUFvTg%t9szF(#v(@v^5HcWhKu7;SgJP zo-+kcpOKZN@qh~QNF9$ZzT+cw1y-vo@hS`lRd~P=37X;~p!8i|c-B^ARA2HDd)hG( z{)a8>yjSkDD?A%{N$py{j6PAhW{+&ARdwYw*2B2yThqil8iT4JtV4h_7Rq{v-kOj1 z4={I0FeCezB&0{3=m!G*)cCX^s;m?|_J9#<m(!6a+c5F~TP{Z(pyZwjIlRfxbZkcn zVGgP1h@Flcqhi_(bPwl59O4u13d#8o>aYQGKIb^V?Yl6m_z=(1Gs3sPUpmuA(}Uwm zvtw~%2!~bk(TTed;#nD^q9#d))WP=*>RC4lF`RVUM_@*tOFE)Qt>G5L274@wXB`54 zue6v&+P4TIJ~VpqDjaY^#K($^B0{QtFfuVO9e1A<-@p7Z23grVsu}!fAD{o$!K3h> z9`^riAOG^y*K}AGMtMUSoDbGoA`T$6%AuJ-M@ka(og*cNmB{OnonBx_`ijxJ$Z2jk zC|*srSpY-V`ddy92<NEly7BcQ??+86p-!4Uj$3OBr^ns$IhV=!QDw*b1M+XHcmuU= zcN|8%fXugT9)@szA~>)#&)VKJZX2l9#mEgkP%gv|e-4L61SA40SgZao1C!In3iYFQ z+4?H&yJYo|pTAhTt7Jh3LiOk^0IF7Li(eA2P-_y4Q;h*8m{@bt{+!w-sANj=$6&X? z>Y<zT!}3n<9g~nrs0dW%03jzVG^=`E6t#-l1e$~zDNxRaW%@?aUQ_dWQ9%`$ZbxM? zCfF@crgvehl737U`YBq`0zJgUIJXJ;au8?RtT<>EK$}3%4q@q>sr@9!41{jAbycA; z>q$Moo3DjAYQKlgW3A<8y0Ph4><`7Rg6K&=UaDK;djP0$!X{w~wGy7{D9DmAcO|A} zi^8&r%HZ;Y;9A*FclA2vw=--Kxeow~L5e6#G}6T_@^_5r`4n3erOV(9TT!0R_@Y52 zUgG=mIRx-UKT>43$ZnOcJoX1mPIrQtiAN!ifKuW=29X^``J#-@na_SEY8cd3Z>x>n z;tihyD;yGq&8ml9ns=B;8gzSwV<nxZ&N5<<(mdB8HELJYCx%0Ievz~=5DRNIlAYlB zQH5+m3t+<K5xFR#bZ4x&XH`F^<`o&OqrJ?5Aq-fhaBeJ*IO|;h^oeYndLe0Ws%(fH z^0M^*K5exO+R0v--XCV%UGmE*0y_1y#xZ6(N>^1Bahvhu7!PL%7n6^z3gTiUwN>aN zSsS@D#zP0Q%-HtA-#B}ROZu@wZ<kAFP37kHrGU;*Z?~p$i0ZM8<uf#h-n53lH3B+D z!$BUMKd&-`UP?dmOOCugs1h?)C$sU-ZzNf&hkO>>EbeVLj6qFF93xq$^pfC`48mFk zlT6|_AXCLRFI_em5;6jwk@80_0a-*_P70M_ZrU%HO<}GXOH{$1roagmKO0Q#Cnw?= zd^g`{zQI+D^<x_#+wI)OvTpn=zAe)#qV;e<iqsPm72Bgutb<T-@LUA)-r)64e2C~} z1g*9+Bs?#{-)CjBiEG|efoi`QCRnV4`1JA8U{CZgW?1?T$J4kNPHHKzCBnt45m#fp z0jj7%(NP02*x^kPli*MZ-Jx$58Eyu++5>HMu=(kgXNABfsth4I;$=nTZunhz4tnU> z@cGlXr(Zhq=Ti~|6iKW3RKiaiVEJyG+*9REj`VCY4r|^nW{#DW;ie7Yd7q68pNE5; zhkwR}SL)ysxd6kplER~&hJu}jAB_1irCyDCnvJ+gFxNAMSb5K=h}LMfpFbN>-zOoS zCtiXKKG+>trq4Zil{LSTHGcAD3Uy4OOokCVL{hTFt?5xE$eH{rmPI~oj*0H$YLfJ~ zZ@&IhvGcEdIpqK;rH>u{*&=a^MEDO3giD&A5(v2u0X-18@hAe&IrbOzAqHA2Cw)dB zfnq*UMiQvz315AF_z3g3Uhaqt+kC4SB$Y2r?3NwBx$#_mbs9g}U;oC3I7vL(Lm@bC zfKrHU2g62^nn+Hjkf|`UA=lK&5~tu}C$kn^Q&I+~fgiSL)!)PDRf#VlO@sAkf+|nU zM!XI!Oa>DLDZT?aM9RBJe*>Ls6A{^l$EsswQ`xN^qWS7Bq9RqDqh_Is$(luR93D$m zm}4;;TgLi8M3xWbj0~OH7r_DeuCxEES+ne*&Jr+RN;$5tG0g%22s}QC)zXR0axf5J zYRVa;oXgALkLl92z}LL(=tQ~y%-7MJ459!QR)Ru`Mv_DMwR2Fp8M!w`d5M%2D$gU; z%u>QJOd;y4=`qIWhNH`59pUfp*B=Nn#S*A(?JSkp5HmV8Y@=SjcSG(T!?0@`P0nzB zyR%lZR;LJVdcC~|J8O2`w%wdigBh_XerSe<a#3zc$B(a+OJi#Zb}xDh-+Vfcrcj&} z)w8B8Zh^(7vxU6S1yfO%f|f&}A)?ex1;szLL{-NM{hR`wEb_3{9raqu9W|qzG`qD2 z)gTfVI*#x=RUdl~@0Qh$vZ+AZYg<TBbSAMy1IMZ6K)7c%4+3^M1-|}_#t+Gb<P;P_ zS~YegdoURNIi7`)=NUcH%zNguKRHJ}>Z*$G2-$H9u^HuGIj#@M2=wXTw=09#A))6B zR>xHQ5pKeZFdW`Sq=#LKaI1UbOMD3(*jtH$+@V0{=pV@<50AXa^p$6^nr-8>muK8R zIY+r-UA+v$khn&uOLM#cl|E$MN)@vIw^M@Uq#7K~Lf!=IG$eZcMi<mb)MFl`l4&=J z2ECl1OXyf*GF=sv=2Q5$>!OGhJ7*qAP);c#+9UD-#FIr1&ZwF}wCB&`Z+<4<?oX6{ zxok-oun8GpXxhWH-Su7{ci0;`RtaIQDGelL5<98`?NV*^lB{sGte)|E3rY3y48p5T z7xzAXaLuh5RfdrA$W}}MG{5J04}74!nMH!47a0b&^-=JO4r(#}dUYWDI@eG2At&zt zcA6^iZ_9~4OY{HEVwL%LM1;}*4s8|-`~>zHah<=U)`%EJO!HD+feVdeqIlnGQ3B); zxM+>j<a&X8D3E^nAsU1@cr}m3JEeA_xozCM$A`!E`p0e7Kc8gBiov;XFEk#<IFEOG zm2tXm=w@`zwVBGV7(=A4=6?&2K<XpJugelgvZHS1T-Yyqei8l&oDr13i_<Qc(I6&j z8~&v<l&opZq;|U_PCvp*M6s6t8Yxe+7Ba}RF5S#+?SP8uu~RFZ1~YAiSClJ2T!GxX z!IqCwf_L4?FaKax&l_sMoN8*;db4<#b>*@6yKe5-yi|L2^&_PxcB{=;jXWW({{<Ib zpSF7=+d bPqmH-adn}B$+B9gde$m%YSX%7yEs2KtyuX72*_^wD>3#JtoEW@!O(i zq1ZP#t#59wyrHf;y4_-sVQ@n*vleA(n-cXWmm)i(r1$wMCNK^*fP9hCqFCmW2u~*s zJJvT;i1LF)7DO0p@*7)gV1J74LSc*fG?;OqAIFy|(vR)mr*0H8x<S^=;-NkCUqgGU z(w?LaNW5)UPY_Js=w+I193@jaaRwh5#$lB{L8}qR`|^?v_pA(YkdEtlH4DGE`W}2I zXeQd4`n8xA|ESp#n2^&N@nsP8YX28dz1lK%80{dc78peS@~2dN<`#@O{mA61{Wt*r zo9S-<vh6F&*i7>yWXPnl%ScfmWXqf8D0gxEAc-U{`B|bYT;N%o0KZZ{H)F3}nRkmd z#rHum`|ACP59;!SFs>d^(a`haEG>%d+Iar$@%R~@&|M%6uAJ*eT%N~}>gTrediv1# zl#*i5TFbT)oTc2viyn%(8B@0(mi7HWkkw^a_=&Z?XE9^)vcKJLB5V>)r-Q0&v<L8| zRHh(SP#W9|NbI@K=&XkDb;dP$hN<?H2dGEj5+{KYNR)TKB9J3QD3~`+hbP-#dW?V4 zVAG&p?1>28TsISnyqi{j)zi$j_cL?^H#=yNR|SW9I+7jfzX(x%;x$aSJ3qQ9IZOpi z_j>2-E_Yy`p~qf6@zs>ho%JAE;utQ8GCV6_;Zk|iMTBFzEo+depv_B9m=jo?3{D-i zjmF1{e-a^*r?vwwTi0PadkJ)#<M`}@RLI7k5nqzm#K4hRtE`@Sqs*M2x3#(ly-?Jb zn|+W&=?A5Mx5Rwe9*XbF+?Rmk5h$Sa1EtZapgl0t^P>eL#We)anZpj}7`UpT@Ihdj zZ-2RVWmR&I6PJ&;D&h#@n8vXM`KhA&@c@HnV}+M*(`;H1(+$@(#aiDb(njIyv0#S% z)iMX$m$QjgM%@Ak+ny%uF%QRYz^8Bblsx2fL5{E%V=ep^wF{O6-VxT!ntx4Iim>4# zUOv9HT(H0U*8ctQ-#@=Khrf2i8Sw&thX1|`K`(13X_P9Xpv2@_#n2LN<;WoWBVmQ% zn5G_BHCrETI44;)kUpevo90HFZhf>c*Nd%>_}@0n_1fjB#6J1zMYr?O*2gxs^V5_0 zj;!`iYP}$+lv7yDhA1nO2!blzNH82_1Dh2%DyS<;zxwDmJ5VBap!^jWSDO_aR#UAo z^XIgK0<1I(Z7i=}t=@*NLL+V5;2H+UCg)mh19WuNWFi{bwDllt8tJHk*Cd;2a%s0E zy9sWyg(<FsEKS;*nbFSln2BbJ15gcVXcX>~cGNcAdl5k9c`+&c#l8tlq}NWkJFd^r zd5G7$WKH%Yssql0hyr0NE<8}Nl1X<D7S_yOdf2_XnVvJ+3J#6yH{=^5@<puyu_lcK zYtc&N3ABvlxtERY=ih2i_ECl$akHR<pcoR&g)Glz!ZVKW3ew_eM-l>gs(R?Hm(cDt zh|Pxt<)Gk8Vb`|{J0^MSY%^pTmnxQTq%D*N1ZCihMO73X)BP(9kiwwOn0Ce{a`YPl z;=JnfMV&^rQX`L(r>i2}a3!c2%QAL_bdz7#n=li_auu61B5NPia;S<YPYtV*siDk} zZ>BK$(SOv+ginH)rW8c!rVxd<kx>Px4aa?+v}xpTrgb9hWe{PUWOGozVu<)7<CkWM zZvJK*f@j$C6PMrz@c-5W9>6Cs3vvW-@23}XP`<$579%c@6OM&vcys>ok{5)-ArR?! zU2q0VCJTe)lNsv@a{bwk>}LsOh*Xd~cua@JfbcQ}zvL+?n&~S>h4bc32-rpWn<G&_ z>@+dm6Sm~dc(EcJ7+8DYGEGVsNvz$J@{@uNv2pMYqyGD!tQiVsLQKC8AH??Ge(C={ zMnTm`&*J~sevYbQ15n;!2cx5ba)_Nvp;m#!^0_LfV)T9}k`E9lrb|ye`IUM@^vEWp zI15i?jTZ)!8Q4*HQFy&7JV$*Iv@4Acn|)D%*zX`w_oLxLq>v0kx|eHd&u6b~>*s51 zF7^+XS(WWz7bsVVINge%!;MQo2$hFlLqT;Au=9cgA_!f#1_#{{2-d(0eF!>82y5{^ z;3onhsf5$yFPth1R)tI~<AngFbyS4WpOn)@D1-FL1o&;y^YyV{GF0T$62mky1riEs zYtpomy&`6DhnTa5&6E^3o_)|sNE7vx=*olChtj{Lm2|f)u8ZrmC}py7mtz(6&zvFX z;%N4(9*fQ*<Q|KT!N~KLIcZC)Q_!;e(ayw|6%}J<1Qksh;wtWEk*KPa7tf}ia5>2m z%xK>)aRBa;Eh2{pTG4<+8mn?9FBuKhfvKA8T@n(qLq;FxZ~+IQ!sZ5Tlc_=n656Mo z4PdO}B`mG<@4=@oFi_S-+9KtI&!4@%XSVddH_GBAs;OJa&Xe@vHmUwF{@nYtTa#gC zT474d@x4`visS>MpeD;|IMqshIE9usAOV<_9*k#62z6S?t&5A-GGNsF6Ql49HIlwR zcpA}bQJ@;$OXIY<!`7x0?*y$E0Y|c0^?-AVG0WAtknYqZeJp`rNgFz@s8q#M{zYaY zMCLAPk(6Laa@9x~F+H5+-P<U&`y#$2$-c3y#!8(E(}>w4B6ZJpvMPbZM{_Lgu7b*C zeaDxM37ci~MNpX)@Qzw;UiwDmu4}N1UK5*h9;<@Dtt<hrJ5VJU->ZIHBSojw=RKye zzShvUPY39TZo;Z}6j|Sl7;(_xbW*01Fa%H?y0H>nV^8Q1Ifg5RZ0WTkb(Jc#0*4j2 zgWt$MFbX1M?zyhG27h4`A{48B9+I}yDH}SYr>qUu5bD^HcWL&ce%^;)94`i&lZgIt zX&k%F)p{kG83s_TecO*-PpfH%D`5SucxaWasq(82qaWcKD$Wtc?_Dc@-5DY~Y(B(W z$oW$7L&j({WTPXu2A^GjI`xNgNGHV0nGIqNV}>Ud6+06UUlAL|`x1ie0YM7x=Yhai zF#1V$Vxb?mw_%d<&CmG~_a^u}SH}~c%<S9@8#HQ*;kQOcml<b#<=BQDXL2Qb=a0HA z6n~6dCqH8@`-O<`rWiZ2>bL+<Tu8|9i50wnS2Eohta1Ht)}}%U_pML*ThO)MTUR!_ zqL&rDZ020-o<ZDbW8J(I67^&k#1S}mjOvYY4;BH|A4rE5sGa-a=x)G(-dFYPZ;$&p zJ=6r?NBG{l1b6Bj5G_rxO7&SeuNn*ETdi>c?*`9yLYAl8TKLN%TK3U46Dx{eA8SC= zmgnsUYS>QBZktt^MM^J$PAm7t+f6_xPlq3oj<~poP`Kl4W!oNEoTONDm)(dn2Gx4F ze2+7ig58|nyngP|>Mw0FTMnR<X+4#^sXfe##<sn_Uej&`9_%Oj`T?nj2Lnl_7M<Qi zyXEj(HVD1zh=}j}4G%?5YuUJmlE-$O4dM|@GNou?-R<+gj#)O`VWX2qEfOs;M>xt0 zwX84lpqhMGh*f{LdO#0t_6(i8o)USWlTUr8(Va}KIRJkb1RL<d)GpVfJZ8kpO?g)} zMA-amJaJ)m47>TEPXF5+g+F`gznq|2{J~M+k(!PdQxM)EX#bR;7!AQoS*wDe1L*lG zopHIWIEN&`mQ0HKAmp8hiHpnk0P>;`=@N%kT%OUnFt)SS)^dNs;c`y8?&J9iu8SwN zI$>9Xjk$6phy#68mCVoTtM#P;)4gE9;e381c9@N()Appml?aDGYOCEb!wYCAAh}tl z)~bOD0KS+HR$v${(`tTfP4)lSno3q&#-H=<a&=LNtFp&xGPf^4BpDrOunqsgQApzn z22EUcja?--z6Rxdnu@DXM+8%6DkX(fPn>dYvRH~`m#b*sWob9Lpcii$h}}m>wBWvJ ztRbmCqqM)o`eSXXg}w_VGuFIJ`Z;~UNqDrj?I=g^kV7feI<r&a@dDUuv}oIdO=S4k zg`7Enm+Dpjn3!(_J!#GkFq}|1p&_*MoQ>BXEwzL)A<CZZFi&a(>_is#-DaZ=9Qcqt z$dc!Hx4T4%7h(#{o@RW26e_$ZF!Z_fbz&?_K0pe4vsU0L_^K=<-MV>+ud6!lcw&2= zKV3+d>{Xy=OEA=dt9K^2)E_1SWVpfNIK0XRX9m-g{gq8rffQI=-ldgIi%cVmrk>_X z>Xo`ai}v``Q1_T`A_44<pkA}2e#6BFN%;t{d7BvEKY`<E>t8@-6F0|n=wRH}A4kzw z>ik#YdiUn&>Vt7_S+K2<V&8O3rrWGNWF@%i6Dl^*ifckWk;oXL`FTUQ#K|T@GKrri zg(A>y3mFaHs!(8>$XRq7?eiTu%_UsM#(M!zBS*U8+5WuU%5c>ZSDX`J28JG{XY9)R z+n}(|%XGm?KaRpMWMl3#`zRUHGc!53a=pN%d<6Q*dcNf0PH4gS^Ok`h#2rkTOcc@S zip%K*Z_WFAK4pP>+Mt-2GVNyca%5f8k8OY1B)17aFvTF_D@S-838BB%Pj)NL<PasS zZB8FfCSEQjcwoqX*+&s@dazG4%m1`>7!~XV(NuaQkahh?>JR4Bz6~1#>67oATDSmH zF{7sw2e7=kVNTd{k!c1fcZ4)%URHhe2k6l_>d;)fJo2z1j@?da{aUAX6P3bT%3{0{ zi?^$*gE^JMq$1v4(=i;Wi(#0@CsMhuP%t3(@ShN1XE0xfVUZ(a7|{*5a;m;Qc!B(5 zLvj#*@}T!I()e$K6#gvgf9^;A=X%xZ1ICBqO)J4lM@{ot(yS`K9uPZ$q*F3Wst+QF z4S@nJ+D|uzWZj)Oy4pww<9UV7LB!<j`0~L>fj|5z#^d7BLQFgwd~963f8ynKcAf4p zzWRDvspAcHftOi$2{8-9s3z-q-{4aa(<cd@r3Y}gxVmExA(NPiRWk|Za!+HTx9<n# zb5@DsYA!g%oN+$H^cka}P4xt@&q4ZYAp2=j0gabejMYlmMxBd|Qfd5?2CUNj!u2i+ zm6m2W)0PMt%)2%dCt%#$r=eAi#m^6DayTkP!pcRyl%80}yI}8<e97?IgDNg2jdau` zBLEOci#a$dA?!asL7$3q(VFQIl@q2`h^WaPR+Xwhd-|xyO5vCRrFv#?*UXjna~-mg z`RffXiB=s?EBGl;wGYOS{Qm?gkZO>G@zDiR^SLw)4{Nu{-G7g+wWra5frcI02yK!h zrk!`{Y*@L&YjF0`Kz6Dr{s`BY+I5(~xHppa9IWe>7mQxtg^oS!kG6YOku*xi#)ASb z5b(tiKkEw;!!tksU^R-+YNEg_^r%aB{C=n&HPU2pzJfQT4i}%NZ-~j+?QjZTs96gW zv}0Ik1E$%sX>(#VI<=H;e0OrO_=elQiv^6ADyyNvi*Gzxyfx=bq?5ljIep7?_13Q7 zl8vi(9|wv(3eFt)AR*>b*=#$1>on(eH=51WyV<c0)o)z&ag<&JNmHtn#pEPz!#zen zFf-cL^J!xSuhqV>ghPjvc-LtfJV~yY-LYt%VPVoe$|cU~0fut+DQk5*p;Gq6E+|(8 zK2y>Xl<I@4FMXgCGB!JX!l8voB>4}l+!OPfDKz32Mvqk2nM-czR4~u9A=37sD9zw8 z&L^OGK!6H82fK2<{;lN37@eSQM9DoUiwal{fp62S6;s<I7oR1}v!xOCsNIUhC*TKA z(a+Wz(cU46dMSFo6Dqu54oMMv#c>u8FtiHXn{jYoa!rNsF;wK+0-F4qdcHLZc-?!E zk8Bo-u>`T%h0P_bS*;N8PI*AvASd4Jg_z;EU4<FGrUcp=Go&{mjHHwCT=Fk!uMlye z1^F;gyWb;;M7Rx=FpGa74&@`f^cv8KiGbp6FX6-ANIN&9aJ4<3DoTQHkhvzYC`isb zNbe;gYN9|97P+J^;;E3t0O^&&ITlnEyt${)C;F_87Ax~+8+o$OL3kXr3u69^0RLs7 za?sr|6gqzRI-e}~X2(K&c;+F0{0T~Lo%r_g*h_e=AH*nsY`D=|02BV}uy{sN3=t-q z4pAPruxOK*DD?$zXRHZdFT1)rY2HnsSBkTHs%2z}l((H~^wZZrdJNLa-o(X6kNIzN z6#ma1^RE<yil!X47|I*k@-cMUCrAQf;{4G92Jr2hROUj^AVGb#V30@$g#vR1|HWUK z1s(zy@&NPMr1n~$d_^J>^Vy(wm7^$g594`to$VPGDz~vkCX+GGbq*$z*ZK91_s<(3 z+!5QnSCHgtA)eP!?>!8`v!KdlkXG6-@ICSf-QDD@xeMXB<OC-N08#;s7+b#@A(KN} zorYQ(e@im91-Kdvx*C!*H8G@k?hk$o^Pl_{w>nD|Ce-ON3~C|s*&SjS|AdT@)cTIX zQwFMWTw}Y@?EBKu&1$5rH1|M@NQ+71VK1;WstV(<f)j4Aj0M}Kjrjeq&E?23IDhe5 zAg`Tno1C+8jcb34w_H?PC{U9*jL()?)qAP__?W-|rGCfD`~gxZt0`6b5#tqxdr)Y> zMm!|9;``nC<-S>Nm2~`2%Vm#5O#)u9Z^D(tpejT9_fF2RR-#q1*RR|31C#65UAK}C zkOFf9WKVR7L;aabLo(n-FGF#(+BlwB3jLhLV4;ZfGTF@I^XLz$Q~I*I;1VhNnA1v7 zH^{ivI3j}D{z%Z1dTPWI?a{S@ymT^vvT&CgQ%m0KJPcbDyl3}h%M@y>Ey{O-Sfsm_ zZy@U_z_-wEKahhq>`#s3Upy2hsLO{;ji$j;Ogr$8EA$|m1Kjhw%y9)rP}=4YC1n+^ zF{+kLx&~3J&gp41Y^-UZ2aCPa`d@j4m}jgOtU;2c?tBifUVBYTR>^mNO{}?zo<{C1 z9D~n9zqnID9n8tdY+{c%i#e>cz<Fc4GBmiiyfP+oF1WvHfu@0muvfT~vC7O-));9= zW1jzVRQVCL72}5lMA7QW_lv^_-Kz2<Yb?;kC_+s~?+(DA-C$05{>X|BNPA}jAniR3 zB6?jP8!5?r&(Wyd&Gb|sDvnAd&i4qFvEXomqocQ;Sce0<DHaBWCQL$rFF*vrAhG&n zLN96`?Kw7Ov(m@m&hyS16w<(<b#O*64o*oY*eJY|6+kP<n30;<<VyQO1+JI}(I!ZI zi@l>7{6x4H)<}m$XDR@3KEWPBj$cVgi%w7N<6Bc5De;IfzjMw&RO*`K$$Q22+eqtH zF}jbXRm?QN8COD(qLw0`yl|or(g%YnzexOvYPxf1QP-%j-ab_gXyIwI;T22Pb@46a zjVkm~=nH|Hr^62M7hy#@#7B+|0_Z%gn+wWzA=q>2IFi%AXN;_wE>zPtewrd$g|Q<y z2?)z8CE*>D?;{NGr8qnMcW?nS2-<MD>pe7Acb$@-7Y^uXbnD(h=j4Wq3|k^BX-=48 z@zQ6Q0gb3PaK06-pKHk@;G21q;P%EQ(mU31%(9&F5iJTjJ@OgWQ$))WfHKVKY!i*s zfqfZhSkSm;J(^~ot3(l6CRmp$SnEg;=aD&BE?iUMwNno{Vpw4rX2cq1FXGJJM=e-6 zsr3Oya%<fb!I7A`q^0`8kqQn<c3|59s=fQcuh4(=w%<0gRXQJ+qW?BY;g8<-uSWN6 z|0F3WWuqb>DtxE>Y2~KeNmiZ^gn&3fo)7LK)HdULD2-W&FlVjZ1VFcT6bdJX2qAs@ z<P(3na>#z;E0an<?fz{))8ovg{X+)6U2miR(357t|G{;8v1ttgd;cXkjDrC9{FxZU z_4mg9$J+BNec!}GdZn$ug&8l2AxsXY%ywTsrH$nUEO19lW4w>CIa9$cJW*XcPXge! z6h1oK<mMKE&6GL_E2Cnzu4+y@Cf|{5$h<g$ovyc(P}Q?#>B)d97pp*#V;Y)bs0Ke? zK9puJolqw|vO&eLKUBj#e(gGWIK2ySCp#O<5)bWUEAAjPN!>$<;2ShaYN{fqD<w8d znVzmrjfE9CvC0|uEJui<p=)eSjGg6np=Okxfhe2;x7*Y~&t!B|HSx<CBNvzUt@T3( z)+;_NH~G+VJHytHJGKGzNG)mTMq%7<576Sx*fVR9s>+9Lr)dMKY<sNE`0UMcgIRqv zcB=($H8O>^H?gwFrSOL>B5c&RmX6y9aV^R(-${qUx%wr$u*8p>PR%kNp53QlyJ@oC zMg?{6Wb4r)sY1(#`tmbJcV$F|QH;vjaNH!`Sv0Hl71d5wEDG#7a_Jts5lgXKrA8uE zGK(UkNrrzS!4^ZL^E+$3u}~kl5sen1PLeN2HF6SX2TX)tA{^OK2JlLQ(o6h>QIHF| zK<I|S1$<x>8tv-$j(2rXh&G8rOU(a)QTSE(7e=Az9~cGo4~zoQ9~cGDKQRh4weHX# z7=@ez{`b#nju%|qEw%SsFcA^VLhkSqPd~D65X*_f&~EI|_CHz7MqV50l+kAUpM)m3 zPKS*lz0!(xEKi=>-K2?k{J12{_}*oNy~%zWP|w%=b)4;MDsjLR8MNZhY+a!v>KI3L zYlxaQ;^S_>@(I!@cjBU#D?E=ig5V*O=M?&|qo%;%<y@2n#PsY~Yz^%`^%gyD0e}zu zWPfd<c!S^pxxL`cw-e-H*lUp@m+gQX!|?!Cf1;30O~7X2Gos@G>Jv}o8$p|pBUT=Y z9@?*bnachaC7?+|u%;YX1KzU;5c_6Q8}GyVvwL<rk5Gd6^+aZ+dT%-Z>kvAfh-tii zRpbg@0Yt4*WYkuu@;&+=h3%>7g>UpBTK*oRAo6eTdR6Vs9F3Gs?QNV)O#jCOxj<Rd z1{;9zChMubtZk!Bb{Hr~(TSoH%N~FN1#31v!5^HVLd=L{Lv}W_X55B7*Am!H(8HAU z6>kU`pO_d$m?{R}mH%Q$P7s2@VNN~OP@v9LEh}X)g=5`wz0BwR_ybfvvSp0cZ_Du& z_u8_piw_#B0#67kj6<s%Nwc!ri6_XYwQ$o3mg-9g&2<HTm7V5VjFTp3##6-Tvhi{U zb+mQ^XXFjYcz$gJAT<9>oJ;<DSZnQi-BSUkuY2C<-4X8m>4I^_Napc`-ttW0TKuw1 zlaV`Bq>X!I?cn~D+i=wjn6HZ4z)~K6lqe;Q?@p{oSTvrET4WR24Xcceko6L2)KPuG zYHVij8-DVR0;p{3u6ldZ<n2oKblcejo<d$Fd*mU_V)Z&3g^?Y5YXK3i*;CwCf|b>^ zpejbKYd568c(vrn7Gh1fbw<p?$ivF&F@s&n^r>Qdk;Al{RuyuFp!k73F5g<Si%WZ$ zNgJx8e7Q%E=DzN--wl>Pt)-wiXF$mBl*WKZb0^=}tK)V{8wKS{fnzHAOXH0Pm2pdT zuP}YK0x}O$hF=Hl6?9(1P7urLv)66S;eNMuzw4VI<z^FJtsCJ&>;s*7r=$8>5!e7Y zBAET2F7k19r<%{kDVQq4qpv~EVQF6LaaLKR(EYd&Vn$6)Y!^#=)xA$yk%(@ood+1b z$&q%gIYjV6{g4<~Dqx}p12dN>q|D5YTEA;JC6gyEag14*oys<WzZ2e@y1vYcWdUMj zxsv&QC}-Oy8~PUK*eYzF{wSgC6@L)V)d#*2J3T#1Xa6qqd!rq|CV-c=-9d*2+sis( z=GkVKs8TZY5;ut*t1`Dj&wU~iEs1LpS1xjn@yve8EL<nt$M{BI;R)0I0GiiV#4dDs zeUoW^iIMp!z86C@zPEwQ_KbfnPC<oWh;nKfVcShmsv16;CYJ0#8sNjf<qb+QDzMGu z)P_e2Q^Dtg-=!L8l~t%lQEzo+yF4Cb`V7-+%JJ2zBQLHfz4R40!y`TKEmAT#K;|Q; zp$osnlfFeYI1b}U^9UOolF<V<OY&{&5!$pbX(FPM-og|2awJO-6VSV?)$@R3E@||? zNPDZOIQ%4NG(hknxVyVsAh^3jkl^m_7Hn{LcXwyd;O_43?oKZM-Mx=@zrE)>XU@FM zTTTDEtGlYihSPu=@roF`nR%4aec36~Ox~(*f;O21k)bKX!dJzjT|D9eH0}%FhMU4k z#Ix7k6U0TG-XWzu$VG4g>5y5JXvD&o${i~Z7St`C)`%dAYHf!bLVPz<J+J6?dqUCO z?k=lkQFccH936#Mj4or$(8>1-662uO4y^N4^7ev><m;9lpTN#S;|%gU>R*E7neVv& z)RB*=$(8wkhM)gxD#7~yw~qXK$vXZE-b-aZ_3uQgqz#KB<s~#R>{k&0ERqNSg9JtB zw*XAaS0t}KVo+eL5ygazfdE?LlA85t{#;lSUrA7z8M;JZ-ke2wo3~9{V`XKVx8^$E znx?B(qsqhIb<e|zOmU|8DeL=WPn}J!L*LF@@6G24!>55)T|Pk($Nf+ldm%4!Wgg1T zlRVu1TZTRzyBH#e(CW}?)0uDAB!?Y+wZ7X+T@Gisc&`+Lo%?y1ea&1C_%{1(c&`k} zAGm{^gSD5AXPeqjZ@>8&+m6b2f-@dT8Qz%(b+(t}zdy{%T$eo|7QM=gzKw~Z@3>EV zaG}2S)MDjuJxhPQg_Zh@*Dij4!2M{S$mV46JML=PYEHe2c)}m_nS}JUQ_OUml}!%+ zd$2@^{i?-qO?l0c{1KhrN%D~_{dcU;cYE^3oBL1XOZ%sv3_pfdd<|b7wRaN8`U(X6 z65i~u28Z3vZBiM~MNL|cA6b-R8FFGSWJ;yvfnyHCR;j%Wpts@C0`AnwZ1Cjo#PA?z zfwFkfH|m4Qzy{?5Um3NXI8<Y5-w`y8DC8l@wF#r-iWub-uQIJH@?y~bvO}v@7AfsB zt8lEU%?im!M0ABo1Z%1jhOfzOF_7Q!$&n!-vwZ0G*Bs@c{f?LDLMxRK*#YehI3~i7 zd)Qk{IMhD4D1*~5w>vSSWh@D!!?g2`yC{RpG{d)3bdX3ag8$7*L(b&t?&>zeEBHra z_n$2nL5uj!YDip<_S_f@r9CA<)Kkvj9zk2v@7V5Q`TTfm8%05oh1HJ_cb3E=YUUaF zLt=si9qrT=kR96s3bCVK_ibQadNf}b^m4j9%XKP-_H*XS#i@V7IOOM=iJ|_fyaG0f zIjX^pSR75ae|&V#Z*;oYnx&KcgdMTLJG+H+PQZM$d`}}u#~%7!Jv)L@&|tpakw!@M z6Q0Hl9vb4q24AqeNfh4VLr%p~p8&EcaQAkR$T#3%9V5F-O@aCl_uckl`i}2Dgn2A{ zJnZ_pGS;g+FLslHN_mnq?%XW<I%4UA8`aM1<3+;f*DLN+XO=A)BeIH(ok1S~hvrxq z<1!k3=;^-FSb>It(JzV;DiRfp*Ri@$u+qY=VsUu`pWV@F0Ue&rA4J$5*DP#UdS$f4 zsYgn;uEEVcUT`BC+P;#rC(h+Ra84E%IN2Hv@xa0N&0(H|^{Y2i4A>y*qM8Qw%W<_< zy5I7E?DXgNvh>#Yr>E(Q>@E!)P0bwaO<a0Ucro>bl~ku@y3;F5O$M^JN)w$hSCLi? zeb`(n^}vIHmn3J)A2^KWR_cqLMU95$hK}!IceB6w`bOATKFR}5?!LCRH4-IMJ=0wN zZZ6_KJ1yPj$?j?^(qPnru>k^>wGl$0O<3of=9?icQuHZuLok1>tYIHj9)J7V>e+xJ z;tApNm6uo3v;_*Mex*$op5r-J-p3YkW>zLseaK+@^ue?DU69H68Y{ijQn#_j`@Kih zjG>ry>+%fo#>?7v0jhyuY=^_zb9er|6U-KIGB3wm(qs7y!JM6ghRwN~YUl)TaqrgM z$evyeE(g*7Wzs>W*d`|gPO7d+{)a+6#md8xwRpP2XI`~;$9so$=O@)5VVF5}(wt-C zZCZ>0*XZ^RCZm{JDbO5l@)4M`fGZGB?^k0RUOj7B{|m%1Jyk#D>0?O(%4u>NX;qA{ z)r>2uNHt<GNuNsd&aDA93dQOeH4T`+r6mjL#%h}JqKCv<a0n{1r{iO3TRy-xY9Tiy z5j;5C>~_l#NFJ>?gU1wATAEu1`spMXMAtR}5S$~+{mA0@{Tb-2Ei6lHwO8iq+IM%H zBTsA8<mHi)PxhQ=o6QH}vaQSg0BGoa2UlZ9>`*eBIYVk2dJ%9pkYO_gkj@7UCT2<L zu_jf3`dyDY^2*eR*wu`fi>``Af8vJrDs%I`iy|=H%*ji5MieKxeX6A{J17hlQ{fzG zLyV_4O=;gt6Z)kIO9Hi(0|Cm`>pa$iahYvl!9KE-2hC<c>J&xw<YvFp0l@a&Pn^9} z@(ZxY>f-VKNS2H>5BAD0Eg0T}&F!^4v-9fVh-L=q=<#+;EDl4^Xqp*8^NgtZQ51@s zpZ$ts{=OloBXiYB{2P6DsOp}Hs7sw(eL1pb-TKjrA{Rs_&;U!WhITPR)S61&dXg2u z0Q0&%(^J@x0O|gmfmtpzBzyW8tiFKpa{{ZH8~Rj@USclqUh)PbvYr)}mi1i`k>;Mc zul1MjA#<OL39hh9GUMDaf=l-;GiIk3TUN{6c$Fm{m_$3fr7fG4qQYvJ_1C$|I&&y5 z0Y5XKZri}#VrF7!C3|Faz;4zTXaECl(pNpKKrW0f4lFtEd&x6cR3fwG)U>`f8e~Gk z$BKoC6r;qZp1x;~MvA|`8TSGzOCMh$^w+2TF0%6--9JN>j2F}=EL%+6`9+jYHGA5n zaG5v}iUhN*Q!X9jw<0(&$~0`9TIrCi7KQXfIMdQBgjhxwJOVa!B4v~DHOxs^HmGYG zjWRC*ch;Q7PpQ)t2F0-fzBMhTU;X*c+}fAOsT9UAv>SYxI+-<Y|H@NDfUxu`@G+eR z-HI8z<sv+>rDp-d4quvVNGFG`uDJ{?b@Wl%#t*a+EHZg@bgMzV)$-^bc(hCRqc|by zH7e)(ApvGMgsmlR;Dw`jPc%9|ln7kf<*ErGT4J4`tqWg;#ykCL$HaMRWKEH<Rvc1o z7{=;zAg_=HyaMZt#uCrv>`fJJf$a4HQ#~U^_5ve4-^ffJr<ooO&eAVz=*Q~K%hXTZ zirExn(U-~1=2O#5)`7+^LN9`a3;oLMe0{VU4tO7b*!|VAh+{nBL03F)C1#l=J@8BS z(b}uIZP?y|XG7rcUmWRzGQ0WbZzA>gt|*3^jobQvsgq9__`$q)MTa9NK0rdWt7?}& zyRRDZ`@tW->P*4>p=;<i!#kUM8DmA8Cv<${Oq(4uD)u%rzji}}Lr=|>NS5^{ZH6Sq z-6eHjI_rjKIhXQgI$E#7ZN)a^@05cNB6+Z`s9ZWr2Unh69SkOlQt+)7s@Cg556ck! z({JZ=tKWTR^i86UUdx_EXr011hj=!~R(56OJN~JxX}cnB@><GC&Eg^A@i%cLS1VLT zGm6hh`4F%-?Vv8Xu{3G~M{6zD)s0cyZ+9=;mM8ar{BuX)<&~)F#ERU$8l&PCb7Exx zbHr~+WB7P45OT-ysfDHPkKDg@vY0aB6n~}N;T5$AqYEy1xHn|OBumXugsX0wF`GwH z=S;I)QR?C<VCBOveIYnoxuG$XH*`K#OF0YVxET8G&>U_xjqBNImEj~O=P{;*ATwWt zmDH!SG=c^aRnXWE*>BY?)3q^s5xg=}@1u+rtgId!UHy$1StfU*#sbc(T_j~B(iB*8 zMA4kOO(b=CHr;+D?Pw_191-sdqAwV-5fr^Pj%9s<Wrk!9zI6EF+zdxU=tt%NU|jZ^ zlswvkh~AjDd{S>>?<w{lDacDyTwFFJ=-uRaxnEpx-;-PRsml0ei(6qvQpu=b*x|$! zrS{9(??bP+X>4%7TnHsHeH<PASb1OdE{=q=+yS?vAdGD~e}urkgTzzyI2kNaN3`iI z{%83e{7WHC0NyM5pb$&NjPI0hSzWdvzj%btcpt<KPNGi!WvN4qVV9sxLO6?R!VYQk zC_c@5?1s{QqeHQjZ(g&iduF>%;pTLDSi4{%=P+V<p3)eS$~{<w*~4?Qx%P`>sZ{kW zZrK|B)Kv5rf1jazY^0;VgLh#x49K{u%%OrZCP<uyU+(zty4F_3RbJpv!ki5{XiUO! zRDIAYL&EzERDEPN@`kijnSZjC=4p<p^vfEw(%7O7s?;j^{6e?fqg1g^ZTU6zY{=ra z)$;a9fMJ@J8elei6q+gT;g_|eRtWc$kF+7hXQNoEf}jcQn^LNV<Wzk$@laKMaAb=o zx{gl5jL7fAm)=2mXv992I8?X)oMJ1_A!%pFY8lY2b@vQ%PuH9_)GppA9+@1OEWPmo zK7a8gFp_i&;eXvbWafBga-;0Z2}|GiQC*|p`*vG30x@>1eG~3~GEje4a)WFykQmKk zNuazhXdggx5gSc=1DhxpN~ve0@=X3rR#8fmZ9x1zIyE`F531w_X|jjcpql1^_2B)c zhNhD$`pQ%SJzALmNZUhxs(tPYE@FgRYp^P}q^~pxY_}9;pf@wxU<36c<i32Uzf{Wn z?UkCKd)D8ia4w1@y6h(9t&S#o)b#6o0o2Y~g5_BMOy=AGT-r<b0Qv%7sw#Q|2|HS` zXJC^Z02S++ZA-gQ?Z@`L=E(aXk5j;6Ox>CIDT731)%)|W5jB#B!pt0a<vowH{PsCh z`iJ+8I5cO*VTi6d^zYmBdLy!Ae7I<H2_C4V?UT5u8LZPHW8wT~e+H%k6<I}fG7i}H zQcNCY*qHfr)F+uCD{;a@qK6`xsmD^y$)ZT9ad=i|6$PaSn=JY~zEjJGoeNroiLvS| zDzhy;JepDepqU;FaTLE?79;$OdDxO#${pmbLrOsH677v*p07t0bPqKJ_vc|=od_{S zZvKhRMvm;JJGFQU{|eQhARGU|mb3}sTA^K^Tia+jUKjO%VENVfgz<?xO><>?+{JPm z*hg7Dom=_9qKn_bcb7bnOeIStR;c=LSOBl&gJ9^XkQT78FxW{w&dwd;{)d~_oKSLO z{J_~<tNopKJ7tC3YwLT@tcv)4MB>uLfYQ=tNvnd<@PS_0;nsozr?pg~w0$)jt6%=Q zR|%J~k&C)K`>jAW(RpKjT6rLJd6?Hjg9j+1)GJfXyNPUCZhpx~Oj%mX(_312_jvL` zezAzFz3A!C``G%t(o!?2_o-;ea`f&RnO0LLm!ES4PV8=;r^JJL|Ckd|`|q(1HyN|% z^~zTloHVMEcR)KvxUYVV`5R`O?AlN}8m<NmYtu#z%k`+*v$?ZW3~PydTSS>6f7kkA z`SGMp@0<Ui%edO_ipB%{Jo?pT%&p$tvEQ3>ES-=zr}!Ar1>c8lsQ}VdRwcI9<_6w1 zgqVX!*P+J}UERO!MWA#UBh^<aFlwCMMn;o*R|hTcdPUz!SbB1gyww50dCTUR1E*^d z8v@DC3X7;ay5?@Znm+@46t^pW4O=SK?Vc7D6jxafQxB5+c)?{>%*(#PV>&X^R>(vR z7K)<LTdCviJ})*PlOg@`m!IBeWt5zssMI{<kN{t$*YS%lH5FPYDv;n|7T4TroxBk- zKwP$N#u!nv9r}`itVk-Dm@nLYhE2Y;ml(g!Pj*VVtan&sK}Q72a~li)z^+K%I{l2V z-ybQOPB{*|_d#2PZIv?>*QofLG=pYrYuj@lY>p4$q%hDi`AMNPCShVp!VjCyY~kuh zV+Or05oeQ!sEjR}gLzDja>pn#ln%V>TA4AI@a;|dpqSaLE9{EAbG16YBzd>J<E4G~ zP8$;63fb&VhVghJWqo7r0B_Aca^f$<>%`sO9KEIwN&L%N;7gGF0r{>}{F;dUu~PAf z^Rj=%Y4XI~p+EmhKhu@ZS$XH1|CfJ8i+er$$T|@9396UoFYAnN?YwWW%~pT~?fcIH z`I*g%yH|<quq1dv)S!qP!S80@VkJ<I$pVG;sJ@tL4}qFa%pFuz5#w1IL#V|zj) zh)4FO*hOr<%@g0KsNxepG8rQ%x~SeGk6`EhVi>{A^ZEu4EQyh1DF>Fq`1XsN_aG(O zP4^Mg?AKU@jHDL4A<3@Dr;3~3fH~k7hegWICJ?8=h1K5_f%OIb@@6bG&KcitFpRBV z&^QuNS{7H1n5hslT~VWW;xWE-2@xuGtXXj1nk!f3Lf_XGc5*>?K$5E#GD?}i&Ks!{ zGL^U1)Yr^)v|Q$s+RUWLXgm%&4l;k0pqCN9zk?{=;K0!xKnPfKH?A}gd9`50YfKGF zl~B!E5?6+2g=ZxYAswNf5ah#A0-B4hUdY&Q&B=e8ViT`aDoNSv=Z*y@DV?RtaX+V) ziBLA$di|=p`wGr=Y?%P>Oywsa>xVP;`)D$tWl?Y}S!gVscm+RY&gR7xPN2dz2<Flc zX){>T7t5fPFz*?r@5ZuKq7&+5QScf{$|wA<FQVToMBtGu%!C$F62BnU2FCK8siMeb z2=!f6N#0|h*Gsv&2&E`*2jc<>0x2yA9CZ^+FbwG$F<LBagZCary&2Fhw^(M5PqzhG zd1^o=mn4apAz#v?w8wygha}whBv8F+$WQ$ucTto<id><qqPzfNsf+Oj$r1e6nuM^H zZEKAh4oMm_sHEzqOEjlhEwBcQtDNc;%}AHVz@J14=7=IA&x!UEMDj|hPq;1g6s__~ zjo)D-hkUX}n48{QO9UKVcxlAr3-iXNkTjvqjw0&RzwAL2d`FC#wVz6BaKaChHU(NJ z-~>c~&pVO`%u1AngQP(7{l-KFb>I@(^BsFa3LUP2QFT`M=wwbRdZ$#GcpBe2iY3+L zPrH?iMhEoZSRdE;g(%&d<mynlhokT##V-vVX83NzFY>AG`DiNmI8x%{dXo;2#@~8i zGG!W^<Km|z<*X<*JSdgpTz2?mDdUyS$%JLlO$Fy#;#o3b5D4-#<m(JXaFeuTNcj-h zCopDFEytqDx3ALJCj=v<m`Q8JWW6HSO(JRLN-$W*bD_t$cwBe-GS0f!Y;|2{6XB7a z&)Z=IUvjb}7E#RuP#x=_s^=UXTsE8(Y$MXML%vB+lQk=exJxn1Do{)r6$XAr+81QN z?_S5*AbmD4c8NbW{U$PH6jeE79Lq*c5N1JuRpg+`jKXF`<0;VyI0MH%kVjitN;xii zR3_y?F2ke*B$vz!N%)6X{0EO>xKaT2Z9gPkz~@OCKm!Q{UKF25Cq$-MxcXCc%he)5 zC$<{l!D+#o)_!8h_H!z)%mIquF=Zm$z?GTAn1XtQ4)=ox-Z!fRS}k`liHJg<ZT&^! z?CF;7O-9#pdeML5&t?o7{}uy!B*j{EstiNepP&e>n8SYID#*QOjv-NuJ(Ak7z+Yq- zzn=kIKfoMfAybbn>0kCS_RvWMvuM*~a@PO`HWBo-&^kTOm`V7BD*^Tjm`X)T#lq~Z z6LmQzsWY*X=B;zXBJhzPYGJBHD{Gc@CE#>vjAr*Tt9>LsemM>~PgB5Ry07js)pStx zC)Cm!;O@3H%#}StO2lc-gz~v4nci`AOaa$2<uxf#9<?iZ(G!mFS5@6NR$J%d^i|2W zGRHwhFMwHa+&(%A#U!vDhmw6b-25AQx95Wl8f5kvLG<I31Y5rmPScs+4$L_XVI0b> z{yD}cJ2VjR5ZFaQj1<i|BbxZYX~9~^{H5Rer|nB8?Mp{I2CDFw;&u(E4t*Du#C)fH z9`U@mOj0&v$(c1uUK1OklXs_w1FK2W)}KbUY#?shKv@$9SvIjj+^J=9gZ$;?LV<o6 zXTsvvNYz4P`PrcBb*Ck_%cfTQ(~X!Z!}OiNIsDn}!lNq|d(iT>W0AvH=>j<_L%bWx zw5Wg7br)ovM^RR<+_TQpRZ2v^Czs(t{DO)MxmRMP0wH0<0|$+oM~TXDp+jM`3C+)0 zD{>=Yo<Sj=!Gt6Om|`0+D-xc;v>L9W1}v2+Pw$god%sDO%0p-!#uT0PRDKFYMJQ^2 z>)$s2Vlbw9%ruWU8y8?7v1Xpm7!5fZPsB?AA3-VRw0h6bVUiqBv~XCz!U;1Y=A@sn zUOZ0_WerUB(L4`@v8y8glc^rk7HC4F)LbgDTp=M%uKE){Urh4)#S8xKSuG`F)v96$ zSj{JYNvov`eqOOvr&&%n5@w_Axt0^DuAj3E2fxd-4h|vvp{TiFMY2N#6|4W%ma^CZ zdhbY1J+;lM<R(a7d|zbJbTD`4pWlX^l!>U2HH8v5YHuN+$_pZh7@aU{GUNbgIXJo` z(A$T<wo^zhnO5?Nlz&rn+_0dtqlcF3ctcy6EL2Jpp&i%A?DIt1cZ?Z?CVGA~i@PC` zc@kEMe6rftw``*9Wq5$=iUJK}Jkq6+fafuq@US0P;Tr!;uh;&KA*Ua&Zzbv9t_o`$ zFuuJP-#L(S*BBcA0YmYwDDz_I8!dTB=svTE72nBWKhqT`>5CHofkyE@m70Br=ksD- zc1(lhaNjUvTFS7|@NM-)t{#n57BHZ3)qoYyif{abWP|^gKIJw4SgtX{0c3uEw>V;b zO=xwB>QRPgAOrB-2`|HnOw;y(VdK2d=EF3e_3^9_L?}?P9ICh#p_xRU0P#Ban|@MB zi6=7QR70#VYhUHUJWr~?^ivz1Wy(%}(=Y`$iKBT8N?9QGE-j91&vH4rvzmhDm*-zf zExK&aWZMkW7oZR(a}Kk-&nFJ5nnLWxYcijfS->*p7sVd6VWz%}A1w{ZB)Q}r;er+1 zRsfr<LS0OMaU0rO;~Hx|81u-)p4Sr-6m9H|Oz*hohVc1mpRkf=xY!KH8l@U{<QnjS z9M}*vhAH-FPr}{LgI$oAU>1)9HjaMpQ{JM{#x-@EWEMA2c%PdSLX?d73Sn<Bs2ee+ zy#uAZ<(lTBV&7P6Vo+-p&8>WzM_a^jmqovK=cL>^C|-6*vl^!7Y6KWmX3ungP1CVj zCE%7QNUw9t?_5?0Y@BY9^m0?VS{Uqw2iJkQdI7WDlIdQ>hnEjY?-!TpkMKMEjs<Po z+x^{b5qv}LPaDCNOC+uiPertt-Y}ELsOUxvEPNiQ^*4jY&Q|`PJ8vi7gSWd>cor!Z zxj7SV3+<q)o-uDWg*e5dw6;ImJHV-hGCV8IE&DkWbdy9k;PH(2oWc(E7*5e>R{kia zQL<5&1grEK`Ldle=3c^HyM+4@Wm_wmX-d`aydQ{3Muhp_1mWvyKh7rnq3~#>4%PJe z4~j2ch<B6n?x;O43hy8aFbWx$Gl3Q39D}=XLp1I#0p^?m=GjEehw%yLpiBz4i{Gg& zs73mS^ml8r(mdI@>{*^iQj<D2?iYoYypPk)5}W>StGtL)9XZ}pw@CO`XZhm1h_kz9 zyEUd=d|;1yxCi;**UUA%&{=0zbS}3sixRZ`^eMmTG(!Z}!cyQIoniT3f!yQy^gF0K z@ij~FM-=uy=9mK}@=p8ky_h6s&4XJ|nK3ce+MLj3gTL?;l(Vdc5nHwfJ5eg-WQsc% zCLOtVwZO9jZX00O5u8Tpof>nPW4uO$>Y(Yd&M}Tphw@u*aBWOEL9?5K-2E%QVK>`1 zH%eYXSqqW4MyF^4+mb^+`--n!IY;D`a!L4D_jw(<#LbJpkgv<hBs?=j7-oFmAbm*F zyupr0lT~-WS8R3YmH9YIGa$fCm~;ZfbGBAsx87jU?Fu@$6BOf3qBcbugZkSYPQMha ztwkRGS&rOPPtwvc137<DBB;mh!qmIO<yALDsR;&qfcf(c?Cfe2|ID=iP^Lzgc~bwN zTXcD>EnCj;bc5WCQC3jI@UNY;^n8Wk96iitWjp`9^>@3I`6I=4X5cQ{@-1Nenn(K3 zT~6IFB_dO|x`pt)ME%zV8sgFD7?0(z+rEGu;@L^2HPNEY;%JjBcATP@b`TawGK)+V z8L<mmlo{$C678IDKh8<DecYGeVH<KOxVpEb^T|~+4r>D}{*aLKQO0<FX?rqa#amhc z_&J+y|D`Z?>x6uM`nI>*#_>#5&y=Kbqi8Z5Y!Qz*PZyroZ^A5m#Kb$}Z|>DaMZoO- z>@2~Wo^jmDHaR284F_5%)kPckD`s(AV7l+~q~!mt-UV3VFQA)@{_>7a^YGSp(=t^C z>D&7GaZ?GNtQ|yh{1bv}Y9!}PH1MZbE01{{#i<IkRt8$T>tUjfJ-_Kb$}KpiJ~E6n zyI5c7i^u`>&f!+K@b|*_Mj?NI=fCc!Pz)e7u~_mLFSw1Mpgr1K;y$+cj7z^%Rn~!C z`hucF_l;kvx>~(1z)fKf`np#A=C8)x$h|Y+cx)A5dxo<%HCYwE@NVyiXitZ}IFQv4 zp`VT-|GgaxdT~JGG6~09t{*g;TQkI877ZM|!3uJN7V+Oemrt?koaQOoQZ5u=r4_sf z8!6?M^TsXDDk|qhP$VkLdtoj-jNZD@YO<Cp-5<pWWxR&08V{gv<WXmMEjMRV;lNSP z&9WNE9#-6#%|Z)~`vbS4AB3fbRpWnMvjJA&D*oF!<udi3?~UjH=dU$UDK)?^rz%P| z_pAB{Ocj=2%K5)xAQc#gBI_Y!1GRdEGJsn0h9=QrhDC4BQwXC+6}xOLie23Yq}QZ- z`h-!JqfdO{j9||nsqz?KTs+q%Slb3%nwe?08O)Mk>4m+PQC>ap*`^b`R+wcL2?{fV z&FAe~ZFXm!-u0pC;cIcfDUU0ofk4yEfA18P_EBgYoHQ0O2K!k(p6J%cpqJSKpv<Aq zf%`8oJ<;5(W?!}kb1I1gn~BbZ-DrDOk$mvBDUp0ow$EWM1>7im+K_zUwh5^Eijg;D zQMZuKey4v2qdoc7im8v^^O~cZE&9Y&a4G)ur3V_BFVK##XOh$lYa0{kLfq}kHYW0? zvMQRy3ve6&Ln!|AwTF?|3uRlGia+p*X+|9B8!?{P6I)L{OmyzsC``1W*Cdgb%e6== z-gf96;5)>RBd$PQ(Wkc=fCt$2BGSc-MwZ}W>Neap-aF>XD{l|~Z=Y};X$6lWH`R+c zPKK;2-+wm$-DRCKsf1s?VC()jl{LlxY4h*+{|2rkDog*P+W+8STn!Z#)})$LTKOUg zXHRA4SC(8RkvQXEHk{imTlc*xL))mDR$!;+a{CJkVmFxmfjF^Aq+o7v-q6k1*_qeo z#M#)#)AK#<Z)Ycbb#;c`0cTRR2=zw0e18%f4KqzM<_z8gePIdwj<so$9ZgZd`i6om zk1jPo8bK;5xnxi-mc?ahMv3AT-By6Yn;?$?mGxJasdT_&TD`xPH?SuO2Nnp@A?nv* z!45h4)5kRDX))Bx7p)|7KzC%1#QM8?JyuCXi#Xa)Fe_1cVq<@DcR*We9_Q9gzI_Vt zY;qd2WYnr|*5o1nmf}gA-1%r^CqfkF@&KXhkSXG1Q@hN46o1(rL2iR&5pTEeohTxF z{hdklJ4J33SM13~Qm;b4-<@j^L3wOYQ#kvY%XZFLp8pR947-VbcRI}@rm^Bw3T_x# z?MUlc{t?D`1|B*Vy1$n+SlsoA-8D|!l){Nc)T!VAlWgF!Y4nN&smlAI6qc3lQRgs} zwg(hP2aH;I>MI$oye}jJf<j`&>(DfG!m1@<_eyrGr+hiyL=2rG;0n%>Y<-R)AL!m| z!X3w45zpc2@(Qs;xwo11rz@*x)%SW%CXD4N7`yWUSNADu2QvX{BXi50wO@JEjiG=U zQ*o$5x+UX;wneJ-H~BB&%nI&jI->EM5Gb3Z4BdaAl^ta-4gD!=runaC5tRP}w3z;V zNRp^xEkCP(=5w*pY7;aLhT|+3Q>raELQ&Ee6o@1NBg|iOmQHvv(wN{>Y5oJ{Zz2Us z0O1?h2h}dfIQ0)j3whh)9q5qfkc;>5;a{1>Y*(5={-zG@S;80|1YC1_278Ks;{1&v z8L{S+FVuoCA+ym_0LS>|EM}frl>XMq!MQNl2bz>`3F+@c_TvyAr8u4)##BQ`R9iYv z(}*4<3N<4N5%R0Pia?Li8_%Ni*CtvS7SB%c^iw$6I4}Ks4;XvXw5UUobb#l}(iy7q z0ym)4`maRHMbd7l>$}d+uhtvRu+)uS;cfT?-*4Q%6y+HPmqGXLSTCQHE7j5Gc?(wC zs#R;7xqwX5FWV^h#1Bt$4Lx~Ip!+fxEYH1r>d<DlZL)I!f|*eIr<_KsC&0U&%8<GN zbdFF_F>9q?7gLweNlVTJZmK7mu{0$c_>&IrQ`ct@$oQ|~a3?t9L(&K|MQk#=Q9zUh zHl9Di2<RZTnu!`a%Xz@SUrW`iFntplR_rm@wqXSjm%qNp_mluU!n;sYle4|~4}09W zR=iry7qe6G*xFlW=OD~-C--`%RMh^wGgN^ejbSll@6su`-5KPT5TRJqSkk6?12@<x z1FmFUBMM{FX~g1GxGmC66xJ``YrWn>!$nc?$psqul<rBaoqn05{a5=q!nY{GHh&bN zya|xiuvyOI@Q#%!iuz*Cdn8yhNaOLgH(L9&JA2--O8wZQgWP=mMOTzdcBn;vTS&xZ zq3^NMsH%xFlXiLDB>&qe2Y*7HNct0>NdHxK|G(h#KVeguDq8Y5ibx;dh-jTe%VIYg z)hs~jm{c8*7Bg6~X$I~wR|~-qHumEVNf!)7Z?x%mNqlVH7tt2nrk|dqYC^<zCS4%! zAEqWg?;jr!0<e>YAtb25{#JOWL)1$ls5c7TMc}f6e)=CN>E??EJ?^H<+UsfxMiLh= ziv(-~Q~@tiFzXu}pxvWy!nF%ct(t>%+(lKfOO0Rgi%Ofdt)m|^?w(=LfuFlRU|YY! zgv@!SHH%17B}69HA|SWx*j1}_eTzOmCMa$Gz$AVZ==IPY;%SDY$W$RaqDF_(hP`o` z3c=m62Ea{SLFPZu++>$A=h#yjhRWM3LR?S!$d%9B|9+Ht^Xr>K35U*4oN)u=a2~@~ zF>$+Q+xTlWqS9JtqPE=DJxHxbh?HMW4IZZ<7Ir6hoP9_y3Nb+lQ|(<aP-rdv_}Z)I z;Z2t6c^+J+qmt4q*WTr}&G*{EYIGEg*2*smtY;xj=3Ky|v*U|g=bW5^9pn)jgB0c1 zKZfY?S1R4C!2aKCG)gTKHQcqrW>gbh9K9ofk0w(^R!%3uqr4^YEv$ES?S>iU*Mx@b z#|I@3+Yxx3eP-fMx7RK&R>}x-YuH$jD_U>}w{+?()Qrg(zfyc)$57MAN+XcG{oEM- zV$(gM=SJV5^{Bo?#~~!(U`VJHMtsMp{R$!|0UMGMD|tmW0Lkk;+rnhKNe+OW==`3W z8bTy0#BGs$(aPUK0m;tbNB?oSA%CuTV$+R?+wfn=rhqhq81g{#hpzvVpE9AuiW z6|)MhzJrlNBf|<`ywECwUiVFt8r*+{4}AQ~Gh!OGBi-y1yqHk`m+$s};+_&!{;gwP zO$tmBpe3TBVWgeGfZ2hk?mZ$JW5U1(jyzhcOEHbR#L<)fg){Z?y@Gzq$GbFv6J}R> zn>yG#SaZBs?`Y%q_5KT{2TN;?)spQOy3B{BFt$Y?g&j7Yn!;K8M-ShT(Rb<we_twF zziej+sGVGQ0h_KT{NfTB+_Pb&JOUUfJ8iRw)OT-k=!*ueD^;1=QX|`u2RQr;>LC!e z(7u2NTJ_)epQ`0k_|sIoqhVJ_1bce&*xh^nNKp#58TvxwI{GMDb8*dthL#$|>{xIJ zE55wij(w0^veEZ>VZGg=ge}H>E|+GSWXSwBuXL~K9$7a-v*qJP6aa*sxmdnZwd+wZ zs}3G~Z+$Ov5m8Nm$8;*m^AaHs-TPsm*Y-~9#}^Cle%9)oU9R@YX-z6oshKD8sXXT8 znS7jYly*4|=c!KOpuQez$M+X5tnk#+YWb0JXm_}ncih2q2f4WQy7FMR`gm)V2!m{Q z{6qtur-T@1Fj(A-c4~ttQyQ+&Mlr;g2bh+vwXhHVmcyb>VgU_W^{~3u!Z|{Nzmhzp z;`JW%FK?osz!?(q`{maLOJv7}GK8_YwJ+b51c5bAn^E(&oM(+N*W2AMpIyQj#$Le3 zSD_}29?Oy@6zD>Ezwn@}2$F=|p&#=3p-X>SrXt0@9B&e##4$1nxCMrY2x9~Y1Ol04 zHmgya*cihiL_!9BFKK?zQy;fml|CU?+#w8q?Idx23GN?-$5?g@r?c612@Z-{BW9EP z?iae|SeItyS|@~@X^SSEJ?)6Yypzr}fe)b3_))MDrkoO$<r-UT8pg1O{fm@Mf|+#W zs2^de#k|1xUs=W;zbHujK0#glUn}ze(2V{kUMW*q>mPfck0Pzs1`H4kI$AD?lvbdq zfG!ak6fyJm&6l{N)v3$`^4U}q*YKNaHbqIcX;&0ouj@^$Nh{1F$k>#kRNKk@ABSF! z2X~LjwqFje=_1hxO!W*02CSekOjwNUt;Uw!dh`hGxv)cGa$R?02<?jrJZ6@Ww^4*G zmX&o{dYBZ<ZqXmH;>uUhDaMrz%5~N;KNvQXjj)%dj2RwVE>ka;QUHkUzrg^@$x^Vs zsy9SPMyX3wr)A31tt3IhHD&1dN?{I1RyUeVAc0J$HlZ*$#L$v1g)=j@j$KtW#8bX! z$McW<^~OSUxVn~87C?W#L>0}%!v}Gq22Ce1eu;o;$yCE8vOq;8EB@ldL0w2@0?m}Z znUcyLC;>n^9#_e6aNQ8*k79DMw(kR+mc}2Qy~f&2MjiAK=3mPbfPdUdEq88RroGV9 zezgT%dX&u+7@LSMzSpTgMtn7Ql&uFQHR;PH7Jj4hP!5D%X=Kjs2gj&C65|dBWU<I- zJ6%aZ-fPOf=Grw|_8b<CH@X@tvJ!=BVHpkmwd4=EPCI9f(3TyT+6^z`Ls^v~5Qlw^ zn!jA)D_2<S#p9((*TFkIWz9#Cn&uC{HQ9xwClTbYODN*^OO%Uw63~Uc6N$ZJs!(1d z%V1Br@n9A(oskew1a=cgUppuA`FGe#e@rK=p;ID?GIQ0f57^1np*K&zqc5DIl69dr zrMdZt@qol+#tf%mE@J*(xFZ;1lh2jdM^9l5RBP-m>RRmCcU6iJpdPXl+;tE!Qy6kF z_B};ZxiHK9=nsh_{4izF7S0bAPYIg<4~uOKG`|yH?9V$b%KEpjj~Ukcjprwv-T!al z%=VuoBNfR{BTTdpZoj~Y{JNn7u|6tE0sjz7BvF7A`Y2d|l&$Oxu$F?gG!=HFYla40 zy8Q0Kw`L?9lToMLt=4NDTL^`sMU`f@dh?;<^8WPW>Gs_7OT2oBU@rnfa7?6urZAQU z2voX_V^ZKG?PFuP$Bx^dNp*mgr?n>2(qnj}?bXxlR<wg{VlwZ-qo|IqlSIs7tq$bu zWr_jZNmQ~nj4wlW+c{0w^f?qZ5NEJ=>c<s%PER;GX8r)Ky^e6$&e~!B$zfDavOAEu zX!U374R>!#pk8sAM#DytZW0YQ4{J}>*fHj07QJ^u3#1NP%NKbcRte8DEEk*J(dj3y zj_=l)wFI33KtT6gfirIhisrD?#7N4osj|FzA4uww>RAPKlYY6?v70XL$%ZL)%9n8s zLu|<4sqC`A?iY#)RS<SlVa6xB=H2a*hisNYaBmKPq<lCJ8!6g~`z}lqVpT5Z;bPMa zDI7K-I3CfGhyWRj@cYSeN;n$7O(g(7sisRf%43ZQ-RbA9dwC!PLMyP7V3nOc>ue6J z{=4lDd5|(w#ZD(ngKFE(UVl4rFcC$t%P)%Jw%E^o@43=g+!e>U5Spv=9#ggOpgz91 zU9`SYbrf`x7Im`fLt>p>3mwNJ9pi}7RIG^9pf@%z5T2W2uZa)>aJ{)s1cdh$jo7~H zrpETbQ><(53p2J^42o=YW6;EN|4vPa5_x#r<BXb2K@pPRRdtklbe6zNBANde8Lu!n zKfZuE@JM{+?ufSL?wb&!8Kw}XH|bu$6{S;rg><Tc=ajf*`WdSGFaWzwLd)}oeCf7m zYtp&<+~+FihD)v$_4_fU#>425TkusceuFm=*RSNm@R8Y{_t&=)$7pi#-X%a{cKf(8 zEK>=bfo1-_rxkEgKSx<C*o<oZh!~N8J;RD8tlGPyZ!4QbH|?-{TKEzbP$<H!p&@f; z$k^neCUel#3IlfcV*@To2m;Sl3OlORIAK8hAQJLWOeME@%>sIz`hLluqDjR+kY%b# zzdVV<d+fd*MJ~>swo5}ePZJJz_<2OC-wJrI@GH=`-T3-5z8f;F2hjLY|57_e|E0QO z*%GBQFI{wji!lDLgbgj;u?C4x#e@ETRXqF;PYwHj{+o%f|5!#0c5%YG*CI=e_F}*( z#e9{BN2#F+v8Gm`L1agx?=+FD(*KdZK6XK|a-ChqYQgO+=KC1!;Bhf-BH6>B@B`3h zI>~$Jb@8|+{_%b}zxgHU$`Bl4NzMQ%+VF`dl!+ibI+Kh*|EId=PAwyWF3e_f&x;gK z*p7Wn!5t+t-oO>Ra7FG3D~BuAfJ;^>0{c%_Hs0o9j)pLgidzy_HS9dgv|O%J0OyRL zV5%^12&i!YfcTNt{dh8OXoDZ356s1{FE|M<D-5+=#I~1XO9umtH0j$}3V)h!$D4W- z8>u;dioTC{#7*YejtWoP_x4=o(|GHJl*5ui6SQT*K~=@9-OBQ4jbXXm&f(yc5D<&s zIDRftb5|sd0(z^YwApDu@4Kd7b;j`&t6?<ufuvtEVfC<%)t=iI)NqPU=K9z=L{g~) zFHX68+cMYJ%&6yNgrR~&D8=3eu?M`N7chQd$A1K^+f(lcmhb1OKSX3NMcw6@bG4sw z%rbMX(x)Uiyn(NdN37f%hN|BS{vufU8*i+}d)DwrM<j}?tVr5v0ovPX!(}=mPN%sM ziXJzgZylxOPawx-7UBN*AL?9(SG0}G6ntGr2b|<osj{(i6wZ+}#aIL^S?K$FsmGAJ zNayF)rnSZgg~y^U&k6l?mdb2ZX_<c8qTxJ^W+^XeRB<xmZx7ar*%#5WC^jnzO{1Bp z^?1FUa9KMN-RJ=7mN45=;$mfYgQd?m5pK2GUK;&&{jIRivPU7N-x_jr+Y{2Yra({B z%jDY6pHQS9U4OlM5N?4vR}T*rpp2=_4|wK8AGf=GD|1?+*I~!?+MLREHD!R*ZS8)g z&cNVwP@+$4v7SV`aR>G{T*|?$5T38?dl9(53}Y1#5^{W}!tkpAd+7?Zbn--uZ;U{C z2OEA4;{S7y4)ZRiOB^x9D#aY~CEtj)M-0WV1#G*(M>(M+CLfu3f%ET=rSPmhJ8_5X zbT8!rnK)axOOWWpnt9(}p(k_HSl^*<u5+QI+@zIQ%~3T)_TdAjJix25xOszi`31b0 zWTOIbEbOsICKmN8tZ<`gIcMxw22$p(DUnTS5#2ihAU6>#Vq6Y`3p{d`GO>Hz5mHMG ziz=Xb!KyYi1<_bVsYp|ifIQT{07m*sC~h$=94q~Pz+`xlgfZT>Usq=hng^Mv+D=R- zSDYZz3e&-f#<o4QPnyh=dKT=)A*;RZX)3YUDa7KIFD~!R{hhBJ1i$K@^z&$YT6O=% zr!am>{1WZDt~ZtfjnGJqBw5RkfMuUpSv^rgA9h*ayfT(?rnZdQR#mwUOy5-~JH~eX zN4N9^Y}D+vJjn5w=aYyR#=GR}3qU-kc$({wmb3Nezm~H_&gg(Oy6I?^?EK3yjQH6r zaA}=zUMX~P){=KbUwvj{^qbx!720$_{X>>fJm`Mm`6S9-|7!@q|4@%O{#}nEmH*|Q z>Ye`GC8L$?9VW0^NeV7Xi%AF_vrMXl2E{`2TcyM1cP-cQah&ITl)rFfNd6G~ziD^= zWDAaQgT6?1C%KxMZnnF(v3|VV-eP`{znT(7u>5S+e*|+cjN45L4t7HYcy_CbAMtqa zZh;9~Z>9h?q$@>Ri`|k!BXZ||9Afg&Ih6JYf3zy+Wic=PP#X10&OMhGb$SIX=&+yx z;CV~?6`65D?gA0f+><;c`&6@wXDTS=X!+w4kN~G0RM<iGaeY#OMo}oT@k%5kvcQVl zIhYVpA0mmXuuXhgg<pf)<=tG}W}Cc8wFmC8D9+=TS$Hwka?IXUVWH*nRp-(Uyo5&X zBl#H)Nx>_`C~zx<H3Rla1+i|#kq(O?9!6|a`j5^9aWW@Q3VWu*Q+}7Z;eP@GxDW|A zcq?-Db0aZ&SGvB9AiZ_*L2Cg<mCL$oJlsiu{X)@kxjgi=EU+tSiYwUkiubb9hrX+Q zh9?5)X|e3-2T((0Gl%+FCtg7n)+$GkINb-(HCv=Kmu9Nn;E^2qdfvkI5qeNTqI9?% zj=_OAtTop<R|IFMWdPg1dQW^o+ZLf9vCaoNic{MnLe|u(-ZXViyZQ{<ZH{paHT&S2 zKPb;9Er^R8zJ=~5UH{?&=9iybk3OAJOF!SU|8G~`{{cIk|KVBxH8x@K&aT#-`xhE? zK=k`t3u1(XQXuKTkPY}#SiSIR1M6xs%^!qjd<#Pdjsp1q5E{RkP>UT8jPzb)aBZG@ zv2MOSJ)i&hO>dPpw5@^cJ}0d{5axFXg#(oaSRj8qEv|JUm6rr+uBv*s6{}2Qa&&jb zxg-bo@L_?hSkYW~jz!x5_X8rACc(tb#d2SJGn**;71u7q{%mV!r$}jm)-JF9%)TP0 zhEKG|fRUX?CXg)Mx?{l^Bq@b~MjnH3mxH~K7Ib5qQmM9BcvJ;_b;Y`4ww?36Cm2EJ zj?49%&XdEQo*Cv*%7A5f<~b5&8F%i+ls>h;7kb}YE=W$>$(u7~mkauN9z5d2?FE3x zP#SFOPTX2Xw3OVLmh&WfZrOQmLZ_VZXAxmXIBhD0ZWTL!(4n&yOip5)wF4N8bz3{( zc$a^mO{a1*Pu10gvBN_Z(WSWQ>#h4oA^`g(59Qa_R3`K`mAHG~x=4?t+`bd+zYQ{N zJYd};vE9Ki%1Fqfc0)sC4;YghZzvVP<KB_nvh6|EIA{=Z@Xi6eDZ=`aU^)sqOu{PX zC-o{BhrDFG=w6i3^u`R*Y6_V}$MrB?mR0PM+nt~UEt3|MPEnUuej2ep39OzGQXj;j zh5xk4N5dK4)`@Ehq{#(bpjJ^hG@N(at_trEkk=6?3;#T#K8SbryYXMbNm8ItA!bP4 z%g#Gt=b=vdH|XRonxKe3hnu|r%I^OUp!@!B&{ckt`=2iVK27wznsO!cIWXV`{hdVO z(}-BHeMo63XlzQa-kx;(cDBtROp?D+s3Fsc|F}iiKafG@*2XOraMn+5@Z64_t$l8d zK5?hYGpheJ{NVa~G~I~dP_99)MXrf{sQymKs1lkT`o-xVOuryXKoC7T<Y1*^Lbp$4 z0t^Q^qA)VcTzb_*X4Qf=HJ*ca<&XsR+R*YrM~zeJHe`UYk~h*Ip#OlFe<y0M?6mzD zPYKD|bdh&o6c-SA(>Ppxqq+h}mF=J`=_@MklRI-2ncBgpmhm}vSU&JGT`<+7;Jzwh zVWI<!c8NKNyH!(`CiUO^-U~R9#-GQg_&escc4}(dczUN~vv^8F&<`f~T-Qxg`9Nb$ z*B-9A_ndbgL;%^o5B4ZZ=KoXbI7B>4t-zam_;q^QdulnfkPSOzXJ1tn0`B}u;d`Vy zh{9`~iV2*9im$7D_YXS4<k5Jl7#*&V#Z{6+;Wys-b&P4hjrtm^-tMqS#U&0Ky|sa_ zCmfNx%D`v+@xtdex&(cj5GAO?G~r&R*GCv`dV(fUgs3#-0ng%xFZQ(ldU00qs7cJ= zE1{XtXbp$n(T6#pR)|wD$z)BaOo8bTBBqcuZ}rpg8Wzp$k-~k_Jd;DB(FIOTn_IN( z1@d@uI9${N2S=T?MYPk}3$8O#GDZIA+l5k1uDd)3aa9)5D6CRr^-#feXwDsE8Ys}@ zMyA&mXID0s1?Y*XB%`0!o+>inJr>u91?ISCG_mE*BXI^!Kw$<O%_OE1TZ315qv1%L zwt4igX1`q^c}e{ftJMFugE-f}v6`u({SU9iJDap_qmgq{nD>cQ9~k%$xTfDg0RyTR z0cBmU)TCOv<q3{9Et0=*sQmtj1E!zWCURQlzY);ej>j^8I8N}gK2E&7yuU;LCU0j$ z66XMe0Qs1?RiuG@Qc@OcV{$;E_|n{2N9rb6+&gkKS1ot^Ejrq6+*vGS%|=`J$*nq2 zw~Yxst4=MK@Y(vc>Yq}bac9e@nxTreIPO8@`9CZB2>i~m#FIJbR_4&BfYD>id{$%N zr++-7g#C2Vj%>XSvQFqvyc+=KI*sedTK#;>ZUiJW2P|Z-Oto1#SyePA&II#)<rE;* z>H3q`D#u=m(wt99m~80ymdt)?y&pq`rq;l0n2Q9wzI}<p^<|d>g25GLdX=`P=u#Hc znl6$drV-G~1<{;TO(cv+e@^MTNmymvH}-<~+CyV)qZ2Wt6?VGntFjshRzESSK9AK) z-^m`<ihiQ6Hm!8ze)HAYrYhB{J89{pw`?Q%ZujWS!+MQJOYy>NL=vis${53`s4$MR z;B3Vd5%`te9v&4i+u`sjWwB2NDDyTA>uJ|JP!InkE#Ya|6ayJwu!(Z29rIsER*NX2 z<e59CH>AP1d{sR+<8I*DVcVSPWpaDqb7B~jl8AgaoJYuz#>P0}VmXSU_!B3YXz9_N zcPGCC<sLk&DHg~_6g%z>HtHk1hZ;$Om8+J|K2?uJzN*4;9kER@S6NJxqZ+o&%S;2j zJ~ORZqs{}&4PePlWA;nZ8YEj+^>b{9IV~kPL%W)PY-o_}r;=Hg6`F8AhmmYtn(3UH zanymbr#glBVH4NB8Du~*GX+4i5uU~rUDeD_?jYYY7sPfGX`qrV6-@sw(($+tN39N8 zO}qY=hnechN^Qa?&LN@xTO;uO|GaS(G;nls&^L4vGq-Xwb}%-Q)wlaM@(X`z{o^71 zF+pae$Fc@XjRpp4AcmFITGhlYP@oI@<pGvo>4x2d21OB{B2#m()~Hkd(9xB{=v`vD z4BwhGN=fK-y`H_}Q2LsYDuWsqHs8OK!FqV+`0(iMdC3~D`|<W6{w3I6Sdf!}Ee9Uc z{kF{CxE-VK)J-^dkQ3cZ9hM|gb>m3zSC1yrDU(}0u_0@SSW5e_9Yi>%#>U>0i~e5> z!cb6qgug#i7)z5;`*;por8Lm|)ZIHV*WE^Vbp}Orl?nA$lVNzO#;igkO?&JVust$g zTe!TZM8h>v>Cmt)VacI^FjiQf+Na6UW^w|HV^XJPAWC}_T2GF<qTsqxcl#4-4tsRw zR=G%x>If33+;)MFTltll?AuL_9g`n(FUy%dkTe$G$wiza&frSk_@{GKkp3}z|5#X- z?u?pDntA$Y5j$()KElVD+{?LhKuoiI71~*QQd6-u^DrTC$u@H)yDYD@qd-tDPFske zX<<GsD6YQtubqxYN)l;w$kyNFO!%M0`wkS4&RwSia}|w!sfh?e$rV}HprNhRxoSJ@ za*X2|`f)lG<0eUyy};)Bxr<W!@AS8`P!pK+t3yZB`Fb(GOdH#irX_)rqa!P6)<*Pj zb2_!}4nnsSsPLk*doK=zpuBOrw@u^{$RAktY}m*#5Ke0a<|zG{rBrt_nItgtGf6Je z14zQ+%R7MB=`*V=i1DkplXC1tEWr>E@#PBg^-be|sFt+tOvMlbb~3hyi^-6%XVmwU z3C$)G^&ky`W(9;)5tT(J6novu`4ehvC#9C8N(BWDxMEhWbSp1p9~Yu((>kpLObhO6 zWrHHOBs4e8hy>zn2Md3HX>p$GkV594z=zLEZF$qGq%iS>i^AGv)cG7G_JaXe+7X<? zWc0$i6#9c%ZdJNki!I!5c9=B4tEjM!BgN@pAMDFAH^k4wApucv#+!qjh;kafK5-U4 zHG6PL^u?>t2zga6;3RbxP3IpCbln~9+KO0en$8|)bluwnjfnD;ZRkk@xqj@<YrF%j zZx=mPXJyoo`HdD)_0PcVt6g2)Hrq1n&Zd(xeY0ikAF-+liyeQ@{BwtgjKVk=Q6Kvg zy)tO?%IaQS+ibCc1lB^LEfy_{8ipR)^0smZi(%NUvPaHnpdnaxwI|~e%%9^V)uRhx z4mqVpL7<vaPM&dY+OhwKw0DZGgl)EkJJyQ1V%xTD+qSKaZQEAIPABQuPRCBi>~xGj z@AvL+k8v*kcYphwyEVpIcdP2DS+i!%ny@GI(xah0PVZ2Vam7o_;xG=d2XoR}Tp&Eu zJylV2_%-rX>E-1lyDXc(fVBCV8APqq^R(2W3hT-X34RgLC}a4=(lyna;Lp_Di{adg zp5)x4-sAUDDuR2Jbx47N#r|*LvjwA;%BRSMPyQA-;z(eFqfQeN8-*dBp-UAOOJ`c} zNvU9GUs_ZLOs9nOiu1aQ*jka^5Wdenf<3k=QS7!t$rQ>dW)V_Nfyytg?(|y?5j|&^ z8sDMCl0Mt~b?tUMpvAkdeMxEN6swlIFK^iC^z+QdDG)nFyVF1yWSc_8UzHL&dRt@% z#59O@Xm7pZVRss#`-0R+BGZ=$(P4A|$N6TMrbe8v+9YpDN#Q$FRx!^+=v_6<wx}%* zJYZcB>lch-!Y(<aRRQyB$Z+WKF?$wPg`K%${r2-22gp|(IuuWoM~G+nMdW9`W0g)v z&68mzGX{BTzPwvM%MmHr1cTIi`8_lXnHe&7)C`m{rM-g{0g4ql&-3;rtH!J{C!~1- zMKj(H9xf-z?}9R}6e<%^_K7-|rYl41)W{ummXm(A$(+U632$vX51aQH;O*Yh`GQ*~ zxI2Zo?k0UoRl<ixm^c!uP*#pX{QZwK{pinOI4@h_@<;mu#Y0jM&iE8Z=W$0HQb9uC zsfCTC$A7-ub$$sVof#l?G`#Or%wfZSwgO2uJxyd15c;T-hjRt(Y0%9r>jy_C^G3W_ zKQ=TIJBUC=*2Mi06-}nk#6s=-o-^Vjf(DBeH+)ItnheeJ%0s4#;*L8wv54SfI-q79 zKCzfa6iUqra@27AoL_DjG5-#-3#W9MV}Sb5a5Rlz9X?*sqOL@v*1K;!R{eygkMTx> zRp1}c&N?4IL;?2taLiof{|@H{WOzD*xnZ_-{eb_A+-Owkd1C&oNj(VvRF@e4gSzDM zS&7uG%sl=rH;YwWxBrxz@vZCP;*`sQp^cYvfXZ#kWX*$;DV0`Pmqau(RNj7fN?+Vr zNxcYo)*wuc_S^w`q#Ueq63G!~Z9NCh<ndX!TXgsOe>}n%!l9#E@h%h?Y6V9XNq<9! zhg3(eq0+RFgtAC8SW&I-FSvY>c<nZej0bpcI)!)`x@=?e2hTBX+E?y(;_0M}UUVV= z*D=f$i@5v?1zLo2)Fv8&_`?3|Juawg1IEA}R2gO2XeDqTI_-9IuUq93eFxY&Huv(# zdW#K}%cj4CwKSN)nvFY<PrEz$4{`F(gdIq^K5-4WI+fnUecdV5H(W&#C$U~Q<>Wo~ z66NOM)#vk4;j&V@hfZ$*-M#7iLs^McgFi$A%MMfym*3H2JdYVv-M<S(+Q5V{`=O`; z4miwC^Mt?~RkrEmn?YlfxlE*1!ck6ybvw>zJ=2jtk_5N7tc+uBbu}$G8{O-OvwP|Y z#)Q>B^$gXsF1eu@s^|Umj2LpVLhm+j=QAF_B9~LR7JMa%)kqU={3W(pp`HC{_PR<$ z`@8ihBk+(L5KZFVHsz;OC5B|2@$$85@m!Z2r%dUpO`?`FWjt1zWId7yM~4UFI6(2Z z#;_x&2FDA=yD_6=+d8TnoBSA()#MLc#tl4bzKCqxmemhJrD4{m&bvaQcplTMVPckq zpL`n><YOHQB+j&Ex<P)}MeFzlGJ3@_Vy;bhvO6F{_<KsCKC<e@w@LRjDD%3+Pk5C^ zv6~>VuWYftvL^UrqdJ4imiYyO>{1dZDjUQORCn;&RpPH-zl~5D(bvu|V{1y9|1Gyj zfnI4c{X|xY|JXs$|1To=zo-@s8<ll&G(H-j=>#!S5|XhbXrxSRAeJP7m7^pT5&SMP zO2vAKf)=f~P#Tt$eD-^={8yn55rGmGIk*ei^8A-*?gjRRt|TOXr3#DgnXXU6#E0{` zw~=ZCe=tUPo>2V_6(`7O>Pr);{>C75ruHi38^IxL{3_3oKddM#NJCIXI?}~p1W}g~ zMV>V~kx}@*H9M#f`OGE1y3zgGOm7*0&0_1nF1t&8@E@@H2z@pzj`jVk1Qy`fwwqzk zHu4MA&di6F-?Aov)9lk29BJm}W27BwP4L^Uwqd(w1C<!maVia-fmv!J^eJxfn3v+@ zrg;L>Wt>8NIHg~7=+1`YtTdJ(x)wU-F#IFEERx~&%BD1ImY6*_?i$5D?|H=)>X2=+ zi3woKKCYMj%nRDp#Nc=ZJsh1Ft|UhEixr&lK<q11h*9PRRD9zK3#N6)kXygA0M;F4 z1@W?%7n6l`=<=*2munkZhE2HTGu#{rbr#!8wOI?3zQIo(4G0d<^>_}dGQo21W*Vsc zIM_HQ7Flz&HQ=y|e`U;x_SEUrqvE9$C=F#PRv2}cn7nV5XV&#nZSrdxmnpND7q2;~ z(?8_*II>;8aobH_K>(-er9QqfG-@%|GCqP9u8a60vG!ztlz1_VGL9zlvr{3c#4eWA z@jD*4nB2?BZPo7>+0P_7vq$1Pd{oU?gjn|wOGEdS#}JA)Y81n9)4R=tKR0HIoXpdz zx$HbJcd0vns<VGI9j;f??OYwNUNpD8=Y((T|EAK^dAX<?yv-&?uWa1Uwktf~b!RiW z+Zx2cdfYCQX%i8%d&@Mx$QU35pYEt7q!k<}2cbKFL5&TYu~;8#1y7!5z0wa4-zMsT z(RSjRf2V0)4lWT*<S~!#di?SAJDRFh@!C15$bAH9O-GLWSQ#)<i>0-rq3QHd_y-{U zJsZp}+8%4;cjH2GGC*YNLF$Z*+nIG|*XX{?Dw>LXecf3%>R71m&CT)E&25n_iMJg{ zX{@ll_uI+ioYKJVDh|QV<7d&i{DHjxOmx%gQoRIL(a(DT-x$hLiG?>Q19%Uhr>bPC z{VOu{5~->+qLNLV`LUds#Jfa2=3)YqtXVl$%KIR?wM`*N9kI+G8+Z~D)$qP=DwzY8 z;4gGb%u8TT`9y~!_k<sDgEIB6p0nqkk<$dm7N44&FY^YHl3$B;o}qvzYCE2kArZLI z>R6eUkr^cclZ8u?wx1p^^hs)xj0z?uP8%LY?a5F11?NPoXq~i6p?S72e5)wWoaDp@ zKB{mya;7QYbA2S)ifP=Awc$FK1N>u$j}Z!$3$|lDtAif+Rl}~b>sz>OTOf2|>w#s* zM>?aAL`x`3R)Jit@y&~%-rQd<;HLKArS`eE3Z6tBUBN%d{m}dGYWse!w+lJ`_{ovT z$Q<~M&vLua!d9%r%9lV7MIW447WY*6QbhYwBHb6{?N+cRn%?;j0vBcoGgF}~9+41x zb0<&-#+pUQvPMAKp&|3EHsdTX0;;$>C&`g^-N@J*ebX5O=tXM2t~cV&XwI`T*xD6$ zVMww*sbqVC9GT+Os|4Hxgj2|(XWVis-wsADCiZpRNNFLxSIWOd<&C)JC~!o3RUt4h zfo57G{pPI&=)jShDfPy?s2UKZ_uLum(hhD1T(gAFT<cpz)wQr~NRfU(`~?e?v86Ac zKIubOz(2u)|Iu~Mg;dz;6BdX#*t?rKf3~at^|Gqld7z4+`IC>iC%a~+Y3kFqKvHI; zrx6wis=&(G6t0CyOWO&~Np+U!uy>hx1T%c}<?nF$KgbB|aE(Xf^F0nBzLUp~@Fbhr zWl63bm|mXe@;r3>-te*b{ZpX#6=8=Lf5-`|l+)fwY-oh(Zr?p8%vs=vCi*}w<+7?T zG3~P2Ml4B~kMX1GkcAVeV$|OEg#75;Xv+2kHFP#~9Dwwa<+WWHstj9K;<t78&BfoW zb}JY#3yU`T-z{l>Ux13#*e=ptvf<?tEll`(yS3J9(@xHQC(`f$*w>xJ*{m$*4tYV| z6Akp`*mdByb+g&CyFt8%7douf102GPcsE(9Cb30Kr?(0cAkzUd3~V@Rn_7oz$*f~! zUE=LIvnQ(>;@xrsW|E_CXg^FgZ(PHLbed^5Gg&&$PMh<-!n4}Bj;uc{FvT|)e>!2o z-pu#wUKraKQGf(C5E8c<F|16dZxjyZNio>njPN=*SLgMrZ5H8$%9ckd_d_V@Vf;AA zBFZ99B!Uim4AVPk38(w0p{9+Zize2BHfdSr1|Nvss$945jWV+17&FP=ygM)@C~ec% ztd#^EU`00x9S&@im|N(Sg=+x}^ql;ul%JHw+??cR-Yrg=l<ebwQ%cTOl?m@U+^eG% zqgNnT17IR(Qm)o;?vJg@O|W1;XYFFU)}vouhsjSgrJ4C`6sHv<#Z5qeAO9_w$-pM3 z!bqgtKDIffjv2a;DW>e{zUl&~o@UJ1%1uj4Yqgb|aWAY~iS48>uX5Iy@lf}*X)-#R zxE*HvezPB)eo>~ffC-qBXA&CHGO8qkkUju|cavrA-Xsyhj@!!!dvKB(AP2zf7;BW7 zmea0hHAlpuZHBJ9eqU@Y?&>@&#b1$^UfxzcWo_VWesILb|Dif(n8B-f%Bnk36Nb}1 z=IF}MHB|P=zS5i|@KSjM+gZV5*fPzgPBCL+2w_@PVfLmB+7FJKF0?Sc3%qFH=01B3 zT+2vS+nu(AldYqMiuBk+U(tJUrCzQk6~UZwr#=R_GM_DG!|$c9C~RNU)cNSGh3?_{ z@C_|WrtobRO;|B+o-{W_`Q^d+oOkJpU)*y_FzgK66>$e4B^6azzLWQK3S$*sImOKX z*17cpP>-R>&%TmQu}g(XBADd|nz_s%dq-Z+M7&CNGRn_o5W<iJM<fjuBn@z$#5LdV zu+HD2a~+tNuPrzBuSp^)ARx;c&P#lIJZ?Bwh(Kz;B@MVJrc=D_+A#*v1z03H1V=+S z8eiysd7$slMclc3afAVR0QCcGGBRBLkOj|x(On77gk~IC8~XB_Z%|C;C1X4JXMF*0 zwhstf$YG>Fp}4;wX-<r|zeo+rbZR~cKT%P{Iq@rV(Kvbxl?ro~>O^=6(Aix}9JTa_ zh81qC{k<s*wgxtEiB(IF%nrA(m#M_~*K>8mw?z1sUV@u8($M_G4T9qjgn^FqV*`vB zx!EhK=G<#}B%37C6dT3Vv)L3aT$Nuzo@~z;k$nA2l70Kozt%i$wWgrdgXXH4NzSqO z3nHa4;V=$97&~(<(U_)1ECVgohgs{JD8f0+(6lFpN2Z&t8s|y$G`^3xMG4l#zDJ23 z0wI${6r3s!`7(Wje<?6^w<$|^DT?zbiu<M1&)iCACOHGIMrj$X*I=g&5B{}q!N#%{ zc=h?7>ipvjne~4LsiI~sCT8}gR`wR3@9Mu>t<)4dhj~S`kq=Dm=Xz$xg_AP*wn8v= zs>w&#Mp2Hmf@2)$t1jmOYw50L%w#_rIbTWN-Oodbz!?a3Djn6e=7+nDkGI?f7yFmr zKOYFbAY5+*1O>sME67@URvBrCL=urqceg7pDVmSs|6Vy1+J=L4$aR6NMhEBRzRl(Q z#UxUC5hmh;6b6>RZi+Av0J(isS1(0?i866EXzv+FfdI4~8cIv^28=7M90597F|R#} zcd6n#rz;imQr(Za{bwS1pLpG<Z`rW=6!j=o3&p+aKGj7>>5D^}=ws4|W{39ZG8Yfi zP$T#-Gi?-0jNDs<j)RoM*UzuM#V=)B7fXmz<vu|YanK~vv_v*?Z*K4}0BaVcIf#L1 z9JW}}?~E7*5WsL?7q_mW&-<UO^!ZHMDS6H)UH`o?ZlJPSB66kCRNtQg&9so{rh126 zAT<UvBOPsjtKtykMd?shN#St)OTHHKIfL*|$G&=Rkq)f1%?O^L4-kqMY5LWhqK!H& zda>H-WxIDi2<?Q3h><(5s=LxgU;X8%8dg1-dP^CLF>awK`99h!KM<O)BBu+QO|lOF zs|24=+*M@->VpR1ed`}CIJfP=Y{XK(WU>-nte;p`M!0lcAj|a!DpfZ0I+fcczPs7V zHjJp$&^H()=27(K5uN=U^$vPX7-w$4SBgAn54FQae-6LsBee0c#Vn-Z)=J*zzrQ9l zQA`uFrG9q!tFAKzC6AE*MMM8%v&8(rjKjandaZ_)E3O3cyZEPR+0Wusvh^gqr>K3C zmLytRTalt6&W3}*N8+>u6J$W~W+Lmd^~hwLY0eHOClU%uo#QsgE_tA4g9(Z~fM^%+ zy64UNejP6Gx_bj1UzN8ymy>i)#Ahex;r5`Rwymo1!27aYo(EEo+N)5ELm*cSM<A2< z_{e;>gKFiAl5f0O-th;Bk$)IC)9}a}%~1bH94(>c8#$D&<r_Mrq2(Jp^i#_>c!)!b zcbFaD;=p0-(H-078r*}v!CQU!kac;ND$g@=NDX7#=!P}g!t+!Oqv%g_%vD(f{Pxi_ zqUNjOaJ=cO=CA@O>mQrcAa(lF!yA%QAk28bvlh!k`l7U0wPZkuYkvlJaaNUC2Fe;j zzPiQYmX!>{pG%KFekjVp&z@Q>WpZ*q)<&hC@(M-#e5|aC)mtZBg0sj9S6PzL{Fwcz z3;hE|$ZQ`FfAQ%#yESE`QcM;a1)1&qYUD1CuP!FLNHE|3c3;D#jb|!?vOEMh#ACp@ z_10>;mzFf;2`3|cz!8hZTb@{(JE>Hf!rg;F(MH69Xko3%;(ow0o6nl1!3A;p$zzYT zPga|rr6Qh*Uz(&|&lxgqPVnR>`wj7YBa?b3FDpS;opjVB%uAgu8l`T+T|CqlXA6zz zxZj%An#@kOWi%gS+ZV?~PVq>qbB*KIL{9Vm?mLxqFQiJfZ2IvO8@#r)QIa4y2(v%A zkslx|TeGop%F;Y^W5S}i)@@p3pQ))LbC3YUO>`ZI{i$-EMBFr0psYN+*)l0ExANNF zvP`}&8d|CS!4Y?2K2!uqt8c_^_=#kfU`rt;doxepLQy6&tTp9&FK5BtUBP1g8%fkS zDZNcxO9~n%yYVhU_d*U}r0?0tw$)DXUFi!P&PhX(k!p_v8eU*2+NYpxl9R-$oMt#p z?sy;7ew3=q!iDJ31#&Hz>qPuJk@p~~TGWY~BeTV^9p3d9j)uMKjgYdU-neIu2)*^Z z)a#@I@7=0p((ywfnd&q{0#P*uR1XORT3bRDMz*y@Fncxo4A*fBolzZ&@}Wf(p2>Wu zu~_PF6Gx9#7-wPQcNIJK2BHYDq7}a?Ep9WcWFuWI_m=ye3t9E%EGk$fNty#`2jqz- zu44{3NhBWIBD5(LEUlG1*HI5Ic<V~<xRQ06qS-7ey`?hFq8T|p{0UfPWoXuh+v@xK z;@n60?lG!}^d}V~BS394lw=lsi=p$ti=a=%Gvg033VmB9HHQm^N|`l*c63wiJYOk` zSP>;s&%CH_L0$x5b4uZQOYRDo>@b?axbs)2_|w{cV{<FSDWuc+N%Lst&Czhzc6I2o z)25n`h<lUhDjkvEZFw&j(H^1>?X~!Rfo850^u|-VhCNqv{L)6f5|~SiFySfR|NAjC zXdg@US_WgJ!v}=|4bX%&VuLO#s8--)6QcuRkKV!dqn5+5I%EOX6~hceh1T69J_x9& zZvXAjyU`2k<(US8V;2{$3fQZUwP$(l{1bPU@z?<^XM_(HV7@D~@omShJ%8RG<lKmY z3+Eh?<W0RF&Qr8ss9RdtgKk%9rFC?p2o@(-mD!)dNKACMY%;#nOfmEK(ut)ZQ@z!0 zHgqbEQ>uoHZXt%3g|u^SYCVb0dT#pF@~8W~&<h2QhP;=T&GOeln8Vws(zNKoy96DU zEZ?RioD-Rf?C%cV34LN)OpE?herHQYn185RHs50x%W2(Syfy?C*6d2W$Xe{nDEz1k z`5#D2Mk*8g_><skCV3SG0*n><=vEYF{PWGfNCrLB+U&5`9CR0_5%^=c#Y5~EXac&y zd?H*`(QsENU?_xU>^dkCI5*tjaj-sMlThMZ4T61ve<YkY)8`nSBS%&pm9g{@GXWnU ze=-G#Q=d@PP2XegCk<v3pJ-Z5-^p>;Bxh-6qew(;@Nk@Tt4GLj(N!N_%rBfR;M<$r z=RPd~CJHXaTt_|G-ac@sC^FU)e--@#U$}By%;*AmVZ;h$y<ZkqCbn;#6i2d&(93-z z!b=s0dI|{6X<e0)f;Rpb2+l?532MGV-w^6dc3L@Myce(;Ec3oF{GH6DH@u>!QC~w3 z{>}ihWv<}T*WpH?f7D&j(E#Fco|0YmtsEm4o(VFwz8~{LA-H&vdQf}?jd?}44ICN6 zgk&-Veq08r5Cg}^Wu>4I964@Cyq(v!-VBBqH$JwW%(mVRhBzl8ww}$l-UNoYBwG0n z-vD`Se+tKDWk0!uX2|Fpz{H^v*@qgzM-7WdgT$Q+p^GkNQ-_3o^8v$2oBgV4x4Apk zwaaNZkWYd0b$<P%+4g9mkxK$nePMOwoiZtJfoW<X>qT)p=ixx9%jdmieynvQUE<=h za>Rs#yF4$b^TRMThU2n0e?Lj;Aq19|W1&oHx}6>&AsScwlzKU*q<Yk?|JdP1G#^$h z|5nT)>9Pjyf~<uE+Q$dJ<a?y6>zRk)wr~y;7@p{<Ho2SFCG~Q{)mh|9i_+kh&|uyj z()upSy7<ALr-%#3$is&2^c6PdOJd_I=Z((n;jQydbjca`-8)`25pQO8zhur8#AJ>? zce-OMeAP*MHs1_Q`093^>(S*jSIuTT;O3-tkwPPM9#BHvirf-iVdgp&X0?0tS81R& zQp<BvF)LFYd3|Y4j#<WT9OpYQTO(klF72d6yFAu<PUcL1_F(KreY(A1UQYESVEjzQ z*cD`pCn#7BzCqYP+7Ce9?+X><awOX6^XeXOGK|8qm{hH!S<THD`c+^wVZwQcE#DEQ z5){lmBP03w;ZjBt2H_MJ6CZ_P*JvaZRlXz9Mem?5tpMzZmq*YYF9GlL#m@xnaz(fM z3N1teOJ>^GW_E>-X_$V}<XpIKrR)0AF?DU2hYyF<!vJ3Gl&{2x0bl5v#}*@3Xax#G zr8Mnf!Q*Enbi3{~^~*+4l>Yq9Z$HmoPya6j;0Bnaz7hTebvq=-WMXj`u5(bU_ogJv zeeXWNy4^!~sv43v^k?B!@tLc_n}2QQ-`SIi{Q6X<C*uASJMtf(`F|bo5O=dTakX-= z|8F#}y6J!-g!DnD7*|}-LO|KNtle-s=e&~)(_*EvUP84f3PAjh=PL5)hCk|;aci)I z8Ox8A|5hB+1XnZ|Eyu9B-jVq<HR<4f@BjMx4BrR0xFBilg73u3c1;`0WefDQFBnYN zKvxF$0dyGuo_{ygiKBZ_=eZ6!=a84i3mYu-nFe06haOn$7EJVbxc?-YGG4e?l^?ke zdCsFm?GL>MHcBvGi;onZL;OeuWTH}acpR^MpBV#$X*V4q)O<htH0e*|bR@Hj8}JES zY7F-`A{Q>)GR$ZS7qJlSVrNPrCkqdBL^B6irMwg0mib75pr^$%(Ig@j3CNhUzRFP& zK&;TEKR}zdiW#g49Vc$fn=-92H5R<CD?%Fg@%+F{ITn=Ws7F_`o~eS=)w)-;$_<Sx zh9y2wzuERoq%ziEbCX6+b6tn;!56@YDy&@7Q`2`HmuNg{=g0GphQhq`f`p_7+M0|A zrW#QN8ACqQ4=VO-I$_siwK@bd3EJw5%bmz2t2$J0$=`c9j$47JMJH~KPdl1uetcC8 zi_M<D{CQkPR+z_02S%0Uqq033vRpEr%61PtCmCZZImsnOEC}}UwrI{N@&h>?R?LPe zy{3DPs*Ffwh+xt^1OK{n#m39wp4pe$9E09?R92Y!i(d-S^_dr6p11}S4l2doPWh6i zu}agt;}-8mK~h&@nMdAI9yQA|#I14UM)SpC2j&81Gm)p6y+v2_zU7%@t|^~*8x$j% ze4JbO^k2tk=8D8r1wLW^kAGAE{;vb{zZX)s|I!1#x6<|KTcJOdqJs}cy@B-nNR~<z zL_$fzK(%@PHPEU%o^+w_(!+As`{Ta@bY0u7TXMzJ!NTHKcBX^-!`}gl@BUYSVmR?O zUGv5QZM8g&3P%$*Fr~qv0286l=pTJ}V`@LGAipbau4y$4C2-!;>xR9!6>j{l|LOkb z(M>1CV(`GN+uF`>=U*cWo^ITiz^4=_zzeTNfs|)FnnQK?Jd%V6NuSxTSnJW9xA3RC z&J_>EC$C6Mx($^Rev9CsocQ3u8o<)Moi3ss8(GLn&jkos%s?(te~li^zDI{x)bt3^ ziV8t`vtk~2cM$HN?DMa56(sDU>WqT=G{NUd9KsqI4RUr6L668=M*$Oxj7zx%t*cb_ zQ3vd-?V^^t;7eD+ea7eRzvA<!n%`gXxd8VT=R?gZqSMw@)N`Dopeo@F#{C+Gqw9?c z)TFeikHv#S4-18k0`m5OiX7UHSoIsNe1{tbZSVrR$vAXLb+P%ytLSl9IssAkhlEXg z8&%G+mfs1|jrLmy!#}T<N*yDYTM>zIY_mHs8?ja@d!_n8zDPO)te(loz&zu%p3P%& zirf&Mrxc4}N^juThFk}4F$b~iWrGA9?RO?f(wTH+qBV(MZb_S$c}Y(arSb>%okGwJ zFC*q_<0kyX)bS?hQ+r9?VIs3fy(M5Sq=a!4>c#Ilmt#L5^X9V{@j4`27DgdV4bHxz z#15c6{bI^*R$@k0{#&EU+`{W3_!*&t{}`eFK_mKqJfZ)^FRT5R8AWTI-iaXsh!FT7 z)p}p7oRTZ57Y=vkwNaxflmD@KE}5Q9Yus`EbsIFPF)6mdOL5FmE2@^J<}&%w#=1}5 zQTL|L%gf9|{+IccG$KPP!M(tka7_#*`n`r2BxYSxG2TQ*ViD(9by40_Msg9SqiW)1 z(Ha(Tm$J>r<|XFpR{KnV^cHK&a9AOGwstZIVCzCRlSrvT`;X~VqjgwX$>)xW6fjJ^ zC7EFfaY_<OAxwy}7X98CU_1y!115cYIlLyQ5RVQ|j2eE1d||I?!yZr+;%LcL?<r!_ zuS5_29)WOn$rJX+(#U{MF*(e7IZ3RmFuO&z#z0^<NKGv^X>FFvZ#{fQ^$gpft4~48 z%uS_D153QCeP%>Dq;>l&#jT*?r|gnFTf`VnY^ta&BdrJ6pD3=>-R8XbXx$Pl%{;_; zKvPd5K)KbLlPJ0%3|1Zli$6b_#G>_d^&Pe?>BQJTDO>wCUuxNHw$UvZwf)hSSAO&( z&x7XWAYcXSplHcjwS_L1gRoDJygfHaCxWtl7;&^ch>jQaCda5S-x6Jx=n830>KF=3 ziVCaWvbUl+h$#;HoR(?8H9m`J^3J*<0uwNxCoNN3i=8Gl)P)_Z_xau8;UYlh=%LId z+_V#~e!3)ra|L<o7eG&usMD*iuZw$n0xAK2pPRKGM~b5$;0w89ZVkB=yG)kAEi$jc z?i<85=5^N@q*QNHtHixZhW$E2|GqCCRv6L;<Oc&Z?#{`V$plqhmJL!&-(2@EQu2vG z>H2~(GYWZvyxrjRd+hOe9=O>ZND<`Aai-~#z80)CJaQXsRtwik-MNhsUbIL-@t4Fx zrYK1nHpy3<oP<uWmAD9=3WNkEJ805exOcgR*H|Jy5TVVkkRhYYwvof4My_%5QtfBQ z>O%;(6dN8af0ZQ+^GR%v)T8DKUXg@wJY9w6sYMn!x-H%?7$Ij%K7svxP+e;~uI=D6 zhkE}}Q%LtelR5v&Ar&*%f2WU)3#u8K|CV{OUGjypcd<|fI(0Kusbaqj4t*&`MNdF0 znvhuAdZ}KPsffFZHrmw#Tt$J2MfcQWAmXx9j#9z&XaG0!KIYemuYEUQ-qZG3<QL<M zvW-`(4>=DxpEfVu6usN;H{1d4zPRFiabXSk@e+=Jk*AxG7zz^Ty-G&;9jmlF7?A<W zGgtqZhMxZUG3a3?<giE;X7W`HVR7al*peUh3BPg|UcGY+Sn7yDaS#L=eLbTH%FS{T zndp$BvZ)qU>5wd~@sSfcYnen0)p|3TA)CgONLXrO$t}wpx93|1Bhr|j_}ZwrP|N5P z*OHx?SwzA}3hv63#mjgKS6hX$e)(@ox5nx$d;YK_VX`W<lp+OeTH(yjyYK%PlMh_m zgJwAirCirICFS4v$;CV0k(~pPq^)h}rsDEJWhZSj!EGL7C#Aw}8duIrkxeu+SNaT! zm}Hm7rmO7@5#;@2mN});z7%&#R>_)8Zfh<i4cmc-)jMj|m7Rb>C3tRjZNHXn2${D& z#&JHwNIRXYuvkT#Sf(LV4CyUy#Ds}MDu`N<|G@H@^hCF_BH1*-WVP8R$;x7QD!?$5 zS$sZ=xZEsnHdWH`9b&7CPg;)V@D~w)ew(<Hgo-CyUI#dW#goF$jE!?IdnUfdCv?x9 zKKoP82_rg+(@bcJrhb|L>I?`gWInGqN@iXx=oaYpZNRVwkRC(X(&2^KqHkkIyA{bm zksFwkdQ&5)=D?gw6g1o^Zbwmk61V>IXwMICLLv6?{NlSvTM|vz+{o9Bwo$mA(NY9N zt<@O&bB-tB6sMmKha|9<;=w^!+NQkahBRwvwjy9=yZeg$T)YhX5D*M|WDpF$Cum^x zhiqW=CAxz6R;mqoWE^(n_C$m**UY+0ckH@FYF?Hk`}tkrZ1s(bDLpZ-#yG$2fNp8b zhTB6B?1&ia_lqHXg_)swguXa%4sFvfc>7?XS8Ql@c1@1z452@|rKe%W-T|UwbL8-U zA77H2@=x!0pSGHnYiUUy28nBHvKni?&1Cc^l7{&a!NKfX6l>j@*wo_1n>%go8qfX` z!|)M^p_SofpGMSaLeDkSwA5u0`+@xCI7~=kLhkX!NbwFvBp<gqr=Ql~M9x2XkwbyS zAat$h7=mR7!PSL9@$L3^{8|yAH$S{U@8rN*iqo$GbA^N{rG?DnO!;IL6Wh_Z><YV6 zI`EVx65iVob42U~(a&Yd^Z<5ta<<uRFTO_=ae>YOr1tO<dTof>{uQ-|D@kZWFg}s) zO8q|ZB=ngtu`9ARDs%EIgn{KC7q*2xD9uTtDnv*AU#I;z-66<+Lqku}MLJayihF9s z)MEx8*m;e{qrIenV>pGwfGjE~mQB~qGRWoUYzv&&CM@TrWkXLJD@?$HL$ywlkTQ;b z-kue@OejLJONG@HS*0yfI>DgUJ>>mCmJv#;7lxJr=a`iQXGKQ_`$uK;)IxD_Myb?4 z@Xu-bv3jpF(PcpaEPkKgiqw}X%DI;lI>A3{Ay86DSjzMuY4}BayJho&>RV$7+$XCZ zzb?3XINz#>Hizjmd%I3>R%qUxQOj4)3`$0CiS_h}GWEQe8BmJ8)W$ZX(I}cXY?&>< zDa!Zk&2uBRfQRa;F?;{9NvU$7)adPp{G-FcY@r>Og)4EuHX~sILeNt3yN3H#9gY^9 zkUatT=9Ulzk~afV6WyXaP=!;`9<}5G){y3<>f}^?w6RE>Vr+(xGk$;ipgKqZy|Dyp zh|DXS;xgLFThCqeM-YTj;b+cIJkrk--0cS94wv_i4i9vOXkC`6Rt5%xnk*cGNH)N| zETN=R@OFwLWb{S9TH4yuT0>fFSFdl;kdcpZiZ-k%#jkZJxIM2k1W(F}M|H*2v@#y3 z3b21Dq#w9TeZXuMvn@5gikCmb-B<SR)j#8eE$Yz2L&5ywCyqEnEyAzxs75K_Y65%1 zB8<1O#2X|^uS?|B^UkC138=$b_1WSc&Gxvh*P-Q8DAX4;q9ZN4W~V-(+E)U`+r4DJ zGALq?N)2%C)sdv&Y|DH%p>X`BDlHjrBvBFLsDqUx{kKS9jDn_y?6dap!2eSl%=RDF zA5~`~dlz#DXS;vP1pE{y<Odj$aNA0W3aLVAP@o12dkonqM3GU12@7wPaSlHvOU{QY zqfSV#*iifd@xq+Qj)chko;^)XP5W<;zCKV$Mn6T4jYJun!z%ZbvR{?8eoH&@e%ETU z5GPXs_88Q9SzE}N&WAw1mX4w|mF|M?a^}tKnQ~_jN*!23MJsD1{uV_uCVK*7p*>2= zb}4N(Q@2z@I$x?{NO=pot4m4hfTU>P%*|&VAzxr;v<8`3<AsvZ%SthTIgx#7JFn!d z(!_U%wybi=vdWdx=X0^3SW@m3*G5J>iyabp*$*>Z41xS9?c_qFrR4Z9G-rSa{_+uj zf{Ns-h&NAiTy)e3pYApreq_Aj6f#w%yS;f;6kiahv*OMqNXF7vfAu#Aknb>4ApYDi zg!lvk|Nk3?T>tZ*@b86!e}RF2$u|B?Nc?4<h5BipB~PX2-X$0+`~?Cz`o4%(!+~y; zECDMjOYnIon#(TUY|OoFb+hP|LSMFfH~41N1NCdH)3kE+D6C~x9t+R!DGrvS$sC4l z0e?`&Xf<@|Mr_uDJw-<u`ZhM%{s@vdD~Kj+kY8w%G@6Qz;Y1xXwTo~geq)=bDjKR& zun!Oeq78eCv03|zv_=V<9=64kd`8VoUSXR3&2nEOjhOxTc~y)f>bTU1ujsN`JvVC7 zL%RkhFsz=V<U@7HF0*dCN@Je8%F1`>GdW}@FhyJJUoQKrI)-on&m`*@msvx63Z4K% zP3W<rJ<YU=N5~G($_3U+U{!H42lg_^MPQy0rQXK=%ZBB185y2RAb-A>IMRYWt6x~4 zBKW}0m@opiKr|5Eh4MV*mM8m(%vrT<Dr@SkOlIX~_R+3>(xd>Qp<Rz9FXf?PP>{fj zjZWcrO03aK^X-NVO-^RGtj@Z7mc7_)zw%ZU?*Y|`ut&GO2JHyT#ai06M{ZS|Py06! ziMBX=-q}P6p%G$O*fdw(!NxcvSxQZ#V?-G0+H~Nr_x&Is%2#!H319sa0Luq%G;!wr zcSpV(oT*_k^L^rl<-|0SMKx6aNF6z2`7#zGOgxgovI2H|o~|!p_)Yo_&y4~)vH6H6 zRSEnrGFKk?iY8h5*s*2I2x*d|(dC#`!S8&>WOhL%UZTfPma7{&_2)jK`U@K1>6Wp` zkT>6sNwm_Lo&K0WJ5N`lLz4mXP>W5mroV$s;1vc3E>jLbx#AOH^cx}FVeYmCI9{(* zicyx*V3ECO@?<RPl3DRe9%~zmxm(a&45_bKvp)dGd0g?r%>8gh?VyyL@TeLkbV`!j zk<U32%lM*5nGe8X6n{v0H$sgn!1Hz;qv!Wa%D#d8HR2pv5ZJ8xOoros9C32|-z3D} z`1tdLw#&LI+B;e=S-IST6ZBo`FCjdh$`dfk7AYxVP$DbrEJH~z>ejug)WaA$sKy;A z#sxkBu#CXwLKc7xd(Fx~J&5^AUl=@KJ2ljJRsL|&Rr7JHy7<cfi05d-<?!nL=^5t> zW&^Ol8vyfdlrv0WOXMhqxK8@cNpGth`-FIrDb`)#5<QmsK7b(Ui=0W;n~{5mb< z-D|VHxk^2UrS^0>#$RtU3CVy_u9n-Tq9sc`S<nM{b7Q%RP435Psc>lyl^Qjf$b_R- zT}BQ-ghmtS<D)KYtHzL7rS=U);4*xs_OQt&dX?((%%!_VF<xJh&OTqkeWkZ>xj6=I z+}(K&G!ZGM7H!PKRf?nK(A!I-x~>ujlI~3=HOTs4sfs=i&t%)Y^tn)*j-3j4IXn@N zZfj93gw;<6L&P(LV(uI1oGjz9Xve0~=1MYv7Q4pdGKu2CW>$XMw6V7YIjT6N{A+j^ zkDN98$}szOrr?{v2jGaCg|ierYJh8Vv9=OS`jk&tZ;^K<NxRJre?}(0fJDo#`7J_4 zzPSRZJyvIHYtuWPtNW7B;dOdi-=(?00Z;$PgqCnZ%@^1Gq71E&|DIpy=GO~t=DfM# z3QK83dZNRyOmz`&U1gnuDIug&se@8Sx}M#z$-HHsgw$Sr5s_UvP(9mfz38O~c1JbL zD?zr3#Aq)7zg?4^roVjaEqAopRHVMtIGj)}*JNCorq8s>N@05$&s=3QN&6FCL|1)t z_*{S8NC!nKo@^vLs-+612duU=C%IB+CVCZ;!!6<}pnU9HVZP_`s!PPJenyM8V)E9y zbecO^dV?V7z8mSs#PRIUk>gO#;p<kct;iic7)%5?WC>7HFBAoswBLJ9gmD(vc_A$P zOhY&P{1Jk&CSVW^;k@aNTyey8LrkGID9quL7T}X(HwbbxMm5>rxYqBS=hyG_{E_4Z zv@0K<eXLgHPnXk#%#J#3)cuDg5Ys--jfibp)o=Z<t9A6~)UHZrOKuZl^pcSTG&QY) z`(7#i7=(HXkAsTt^;Z&@R=6fGK!ijtO>H@R2B&j@zQ#lHfwtmvBjC&bO%#xfJFpje z3nuS`=MdnCZNZ7?MN5){b5M*sa@{QQ1_K1mQ7D~9eL$Av6LsY42~P-#go0ksIG_>j zb=<^5HawIFNzHduep+?sStRV^A_ehbvmYT=r;<KtC_OKpr?>tg7K^l$z%fRE*i3ST z?*So37}q_9VC`R+Wl%`jyK1cr-(5|9Sry4+Jt%F;V|cbUQm*$J5>4QA6FkU)X3p7Y zg&WF%N;5mRm>%H=*U`e-%aKZcT7iA5Id5-8KR+yg;NSnsWRcheZn7PE8z8kJ=HP9N zC;__SK>`;!P7p!$l|7YYmz*%r;wI;UHt?v!nqJ}uyiP$~dj;l(v#wa0ivyy;;TI3t z_8SGBn{ceJ&1{doSwV;`5Cpg2AH;UuzPM{%;p!O8KAhBrsV`UL_8qZ0_l~`b9CG$V zOEg}Xezncp9%N6wO^g%I(Ow86T!_DEAsYJZ@tfz0zFRcJ?K;Nfeh&bO{*BI*kPVQF zKiReAe?(`(|I2sqFV)e%=>k%we<Os_R2`KCMWm6Ba?JTK!qhWp*dX+IXQ~2XWzocF z;=`g^za6^f5foWeaw(%n{K?0nZ6S+xPX0%bSH(D=c~H<$<YU>U>`lJjCLj9j?XUjt zpo~F?MvHrip1f&=J5pG+Sn$O_1+&K3G0Q;~;Jzg6RY*NwIwRFCgovjMOVNhw1s;qF zpkJ$yneunp*oBpd3+^Q&>!-aA9i5W18%aZjop?_LsYq;B9nTyx%mN^hYtyk~>UUmp z5$PmjNOv2n2iYWZfDv(OQ&eP-89E@3u*EWy6cBu*8|YqS!8AuA?5a7*S(x3)GnSy_ z09vK3Ks$ky(R!Ox$X}Z6TdAtM?=G&xGCH5o=$w_fWUJS$5d)$mFmM2`d{br31;4$@ zo3%rJAS8rv*wGJ{B~zo$=HAa9w&2~rxRE5Ml)F?+&I~su%g#lWfZ)-TrBt+o--2sn zX-?G8-6~{7W^yFQI()F6$^^gk>Tj%)B2E0OQqEd!`k3sD$zpXqEBEIVsF@$T6_;J= zId1u35!w&q6G(_Wckks%U>b?IlgH*bO~!x?1blmO0YV#k^KNXASGQVyKuVApfKu~E zV+cCL)wRA5gDM0fQfZT4vPs|U*VHxA5+HW<c}fUCWG^a{F-DKWBkblZUCw8BE$hU$ z`J9+8K>JN!-_iE1s=eV5U$o@LW;=CXo_&zfS1k%lcjpqcycM{}&H<m)qjo8ln%y{# z#3!(x_3L^tYRV-o^QYb>bLA(Mx9oMfkfKM4Ua6(BucRS%;Z}|jR=9t=;gql4E1VB7 zASFiN5KNNi)&jkA5aD4v?kb_{gAy2f_T1*z?EXsd{gLQ(d+cC@&wE*s@IcQsp$;1F z&oL?QtlRkfMd67vl43ylD2Z?XBmSpt^$!0>FkIdM1WkK5@z=YASbBX38{`p*#@u>a z#6Z5RoiA*DPznBoXjeR<kEYC8A>#(Kv|s;_+fpIc%2GCC?S))%AD;2w|4ICoBl^`e z%o?YHc1_9-Dq&{1^~InCf_g`Yl$R^SXl6~C;0fBwDXKd(z2Y0p0>>MA7E;kS-{N$0 zn(^MX#z(lnU`ow=7!JdyD+t~{x?BnVKc(m2cqRAWboiFEP2|3w(6!y3egLzm7<(j4 ze+VaOSg7cmYU>%LJDn8|iNL@hK@mZUDC+)SJMkOyY&cXb%`!eSe$yRCTt^!|Gw-i& zH*kHh?52{Mii{y*Ffy=7v!p5Lpc<sS3H8*w$RhV0M&28{Q*;w9^6qygkZ$XZ?M+sv zbrX6p@xU<O!@qV_5^fOSIW){Qzp<USE;nAJjj^Guw~7T@-G-GXQgC=|dDNYi3+q>f znR(&>zTMtzF2>y<b}rulRMyE+H=A;$jq-_FtT?y^ma>d)(sS=YJWihjrA95M?2mta zzr-@e51>j!5@B=4?O-NLd2F9##79RSFcr8Mb4ustKT6t>ePIb(f?l((gaT-&pD|GX zc^ij(!!n(jqkG7`Xa-{3D*Z|oCY7Fijq%z8eLEL)F4|(zPP=r&RSJ<jo#kW>!PofR z@2t|My>{7;yj0g!hKZ6*0P>xn9_)|3mnTcjX`kV{j+5EUB`3Umm$cV}ad`S53U`%` z`arYZfc1sr)vSG$<^U?XMxq*1kQ=q~>p&(A9059vT3AB_wA$n@x!%zu01%yCRTNSV zSR;GFTHX_vq??4UIAQ(;H`nG${Z&bza^y;B5vPa&qXX|!g>e#|yr0f`OJs3Fi=9Ru zQcB8Of>Bz}E2gAP@^LiP_ykAOX%{W>+xIz6KNeH)LsW9fJW>(nVkg+^Qk!=971w-w z^2MoVtXvdqh&h}RU(u(?gEQk3v`U5}PyUB%N}_mSstxkDfBkHeXj3l<b<`{$dAo<O zK~FfOMVIzX{F#UO=)`*=NrXF7I3Mv?)#&I9T#ve-BfeVzL-9@tolF{wRVMjDB%)U# zwZy0~(ea)%m?_q5V|4UyJH}!l{Yw5PW_N=6rzV#F{~;OvPKDake@%u)K0FjI#uIKB z2Ps5zn4{+5g%ah^AVv2Ukw#Gr(rTxZ=9B7Fo&dv`{-|<_Mdbcp1U_@2F4;{7i^N{* zYJls=Lw<(q;qoD$p!dt9k)AMGlae<j3Ta94v50t|F2SXdzAzS??(X*hC{PRtTBbn` z*MT|P+HQO9`(2km0Yt4<Sy{Opi`Ht@%n@~_Ixbj!NKRYFOQu;wDwJ9;(nF2ZVP&(f z+ssysfZ7AfkV<l$el6zdld?-%mdSGO);xOVkXv;v6D-Q(viqXe-s)AJ(>fs@5s2y% zY_X-~r?qv!jUq73+bz|$n^El3gPZ`Lb*H*V*@b7Ok!R@q))rNd)+S6{32zU+tPIZQ zR7b6ntFv%%XwI(3xJrI%8T<h2M;)0+ryASO=2y(G0|b6!iSi8<ab^oRPc<Ape)C$# zl*iNfzgG{>xMt~+MM>Zj3$xG<4=?eh8bR@y(0m*M>>+_|VxU(GuZcz(=k|TqcW9;X z6aM9EW}7uRR3r1PYE3fOLvn{P&WKGLq+vvW5u_2qe7ccqEQJcHne}8T?r9pPjXu(m z+F?fs4Isu$v`GfH2`KmhFa`e&TGIsUGJz{B(tgPZy3A8-|66vU{Un&3MCo>0fBlln z*W8?E`H^5KW`FKEOmI8HpgQfyIx~#;-?t02L0_&QJH;g|TZF2=#3u3nMhAJq>St(% zCEm53x1;gvqntAFl`o0LD!xf_IAV?^+5!{Zn`BFJ%%mhBatxV0!q^)jFIxFr3fyCR zhM@Exewie3NF=CBevG`PSsnN)5weRVT%D~TXOCiMkHXKvv2Sw+D#buWvjrD&=zyft zF!co8W;Ebd6W#Ua!?7Sq&a0hx2<PDbc9Kc+$XRZYjTb+^wBm6xS5AcdM`V0NdSpR* zG;qUdr0cj`sSNA+I>A-!`s*zmDNOM@Py*v8iPDC<#@@dK=38J~X3L)$1p1HVg!lg< zgJjIS{(Cf3t8S-(^VjAMjIBG19TjqlazSbHuc0J$8#+>BWSQ8KQt6V`#dI=SBcrD1 zY`N6@JqM&2E1!fi|6|NvPu|b19S`?(vOe*kkpZJ$(>)$}M_ZXZ94|-Py*-fE^tiyD z_FBS7D+s?w%`zkMKm|t$K$EeTMt?aa^&`LqR=S;{<OS9)8*?6v$gge(j+T;gUxtZR z+LLmZChSuX|1DlG`8uM|LY)J5YFYg<Bd*6yVbgR+Y+>;nC{p{gg?r$S@=(=bRhk-G zGj1f?M9COqb5t_P$McF&2rm<wtBOY%mVJqQH&4$fQg(wnYZwdJ=HexX^+cAQdOH04 zU0O|)HEmTZ{qlEa@>`;LE;}0`7cBeS6qm_$slW$<!R@t;{dPa)NntN~1N}*bSg4iF zR`sSl6m^5D<~n{gmoRH}m){d-A&CkC=7wpK*AbDsi$TTe?9hvd<d;O~8bJDRyz55o zpU#MsSUpADS<zD*&9#C9jNY&GVf%$}8dMWh&Z(GpRh8WE+4W6$SEzww`t%E7{fs*V zvIBFm8!;Z8oo3$QD#&f9)@8AUVZ!1e?)<o_SbqKzOLFN3&NWu+>TQGQrRhKHiBn;f z!n@on@l}}@v301^tvVGc74X><N<-K#Iu7EhdB64DpT@dV!l@6`S*j+w;xt|ZG0|`x zcIe_jcz<dBz#2jIrQ5}clX*<r=Sdh~ZbYHRrI{tIaaL_07dnzO$~6HCOPI%Hv&1E* zg~`U<9!OI>YL7%5bd28p_0`8;brR1^TEbZv)LXq)tp2AN3i<?^hXI8ycS~5u=@n}3 zQ2|d+KNxHnjZr-3dD(te#E;k)Tk6fAGdBn?mk%|B4<CKiwAyc;TWC)wMG`aa^AOx# zx0vz2i5e@c=V5By1fK*T+$!H1&`!RKDwNcdYcrTCY)e5ef)jU+F|O9VxT2UWHXjG= zckZ~+W_vFMcF{k3-{M;3%SnCXNrB;LA=uz2UH<ItL9E3Pb71&^MZ*x!*pl<<5N9XI zasi}~?@*2ifMC)o65+3c#K~{yw8?&vqb}OwPI<!%tRhc9y>WK5Lrg$o+=96C2%``f zCZeS{1TtGH6TzzlfiGnfSlXu89R+D<d$8s`dMB|b)_R<MvdCoVSt)Rwg*4>|OHtoY zan*_Hg%2rTSu))zl=6No-1oL^b9R-`uE1TaIN}Fs>KCm0N`u1e{^U|y)En{x@{|k0 zGkcIqR-KA)uu~(`gg=!JcEy1gc#V2wTtQAr&h5WOu15u6xI|(i(|5v8^xI~~KyqWw z?&MaaDWF_`-0KT^1eZL3byD!-d7NZ%qW^gGfg?f0dO{Y*XS^keS$uk{{w~v`1DUCp zW4|{^@12K7{8~KlTxgI)V&z$&Dr|vR{JumU3nSYqX9D^}7z<kHH6Nbgd=!68K6NCy zEkUsMNzWMF8-=(^X~z@3BmRYgqp*GF<UX6!+JD@O`42`2{|9^h*`)qm?@QJHR)WyS zxY2<@Qhr*E<S-A*fFK9Tp&_C5r-L_!3^M3-O#W5xS$3;$`@imK$gx(C{^eeFvym3- z1~@X#YCg()$vNWZ`_zQIKfmo$1W@s+%)+*yqh_QO8cO%;$-<rGg#aOpHqsfZ34^#` ztYCm)D^*6F8@oI-X=k|nKM}BsY|@5u%~WX6JOhckrx7_iCXj9j^MLEMF}J#SI6iAS za&(<xl}RL1gbvtVGA_{w>DK{;Lj%k)P=T3IM0EMrikY>4?$p_P1TkSovC?+w8D%Mg zSMI{>ud2P)r?Yj*T((;mbJTZEX_U>6vnCb>w8CZ^dj>)U2lg1EUbrr8t+<kT^>AA2 zGPS0d1|JuJ&f8db%gJo*ZtJWamr<o~k*D2>ilvsRw<we00-Mti%{8$`_22!&@(M-= zf|F)D#L?4|$7gZSG?<!HHB`)N?1%Iz7<N9sIxEe(Z|;Who%Ku~Tz6b%SKKc-G*`^% zoId2a0KhTYFNbvd-B>s2%vRRfyE6ZH5ja?@>-%M{7fY8kvH8ONq1FiQEfO6s({pu| zPhNy*gvP>@5uFRxhk;Y#9aKb%M@p~98bV1cjwnnvYVG%zN<pE`&;Xia$3CD^73E8M zju)^?_AxGb7FF=FoleeTT+dq#Ph5}?<XnusM{AJQa3Z|X$@7qDExCL+VylTsYMOiz zVPCzrQeiNhU#D7#MUAfSB^3f^8a%6w;~XrP?ADcaCE)9_Tnw48ETeFvUiCA@o741s zRwgMPF|16yvNV?T6Z*{&^1bMgWr}Sdc5@v<-YdNR7Qbg4xh{#}a%2y?4lK_N?5#Pi z-hSQ|6%w?fpZQcBm`a%P?SfsnJ-ATCteO=C>kxeR0*xo^uCj)V);t9<FRUV-dx;V0 zI^vJ-CFy4P#0JeE3F9pc@p`4n=+YtqO~s+h|Hs-p$M&LkZJ)c`wQalIwQbwBZCksx zZQHhO+ctOG={fgvKl5ZJbKd)%nWSlcY0{*Bbme=kwXXHK7VLf5g<`vy!sxEqqL{B; z@FWS2$VvE<`N0E^Pw@m<J_s}+#ufA2A_9>(pAZmV|EBf_3k!Gu`BnvD|ELQ7cbiOU zJ!dl$J$*}~|8as=sr;{y3JnTB#t{iwc(?+6g&2QWICVKe*#gc65M+^IxFiH<@Oa>% zPttDIe1qG+$dre!&D4oWC^ajoj@Mfr-~TjEiQm|@?;6ukEf4X>M~4m_F&(h|LD+)a zW3>Ul*-kG^N3xGI6vTv27?x6VC6SWwT_{WI^cy=hfgw=ICeZWyFxx4$oTQy4m+0hH zn+K3<Fah)?Y8$D{Ov{Hf{eqg!&4lFZ(y5&MM@?3825Fkl1PRxmlu2O-#uMMyxp8{L zie9NNKdofKFWiIC$?wX`p+3z#0vH&Fpu>M%SywxdlJ`MT+i5IMC{5A{@?1ZJlk5Hv zs4!>mg`YcoXPmGtMW73Q(tmiE0th&>3jwy40U1%X=T6g%l$ICo>~Fs0;x<Zan8+1) zoo7SqZ^}Ev0GbDxtkc6#Wrl+^0YDHQo9oaDIdDw+3HKW?pv5&! V<z?#L(cc5= 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�|f$!7_zOeK`AkS^oUZFx{3E9=tf>@Np_dGFyu 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�`aR10P2vXu<Nv{KPQLlS)lzoTT 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%0DsH6fh}VhMCf(l6)Kn!1jgrB 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∋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%0D)(^Zx5q>G#ugFj@)iiQYrnn+ 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�(XK$V+L=p^S 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%0DGb21tgzH)= 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∨GBvoM7Y=(VJ+Gn~`Xs;2c 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 a{~le1Y#f+nS+v<s0qh0_Nx%- zN3IA6w{GqYQ$9Y*Lg!L}5;@iG*GoZ3q<+o6>F}r~2koS91yyYFD-&cV&(A_kD#{si zV$K^m;RrcI@n`imSqr^hc|O598S8fg%~YQS)5(wJCHC+o_P2cXb?n$2XM~<YE1ta@ zKDGYQZk5taBveX~;9DqNGM3+0fVVLH!{FS`hLkD?%btWlg@xjInw^E6xnr=Mh2ts9 zW24ju)wdESL;d0%6rHilzRsbUD^R^f2ksh&;TDm8b?~j$x6{}V+6^cA-ww&!PJ0b9 z{l8mP3K=^4;Mw=5$WrbrLaf(I>UH{?NRpi(_bwW1c6eH3XxVgf)vp}nSqAUhdg;;K zFQNm+>SR16XB-l>SuTK?8yK0mFBm&}B|?=L)~&yrP+N{|+nSx$71`Gr)J`IzyzdZ% z4)G5!%68<IeAY|d+w_n*Pc~|@Tj4J!X#;&*=HeW)Iou0~M<{$pOcnb7)Nr?v6C!1y zhW5N!0^Matqo4Eg7P1}%;7hDYE*3*?!$ENf9HkqBc%Kx7*bG}Eb3^)fw|yqqX<MG& z*O3#uo-94q+0i+lP(S}7G8gT77_kfM#+Cw-qvY;_?E3~Kgc*A$!_-2lj`%+PmCI&F zUpJSP#}GTVeY83FN+Yse6b`~J41CY8TbvwJ<U@1<!<mu>!3Le~^i(9Zj#|PS_u2MX zzt_DE`{cDqnAZir{h!{B$1#nzcZD$Cj>!JtX(R%C-&&*C5xe_%zS~@RL_GPA?CKl; zkqXy8_|-G@^4s%;eeOaF@*RHhXX4Yn=My|i4>Mwq<SysYPRssr%i(d$!EuXp4lmvl zr)H1xt~>XYeVtzmpeOX+8~??(%DgCd=U30<%O8~QzkXaAcj@mU@?3>#aFV~*e*Hi= zjg@#)gnZXsBusqrgM8;-BusrmRT4N(`w%#lmwdB?^z*+rCws5@`T=qZN&cQiE{%Qg z^Lz6Xvvo3ExaoDLZ{90iYVMVNIC#yF{Ihxk{1xk4mTCI(;hZOgcI5YB3O?IcrW3ue zkI0c1Z-j<>*e7yr=+jB6`ZHBjQQO<YOF&&MVR8eZs9I-uGrC`}zV;c7pD{gfP{_Gw za;hsy_w2IDgAp-W-DptxW-odw@^K968UY^l@=>i*-L#Wz$pUSBmO_eqGr*T>9Fc1U zhO3{W-<oCH;_ZjHNwkPXEIN<5E0y)<?_RvQKJf{a^7_R=vdj&o@HR1xpDLWQUb2&0 z7{%Ts(F6560Y!L^14?LUWv7{{pNt;@ErjZOH8Rb|VyH?t+IM^lqiKG%l)NR`Bxk}H zcBZMw2)Lnp<4%yD;m}b8h6V+gi7aUr`H8YJhAtI9EGbHEff8TEO&uCBSy|E+V~yeP ztc@t-Cs-VGAcnn}c?0*V!nr99ZwC0j-m+?J5B9+wYNJNVsN4(~eO1M#yEd|fP+c5g zK^^xr3jUEyp>_=f`&ucha$7d^3kTKO)1}~ttKJifhPkPRbwSLm*VlJAoKB00U-t3U zoXFeZ@DOq=$oq<kKg>{x32fOM>M`lDvrH6&WJR!S*=t85m06Ze@=G%;j9nUj%y)9} z2hP*EM21&KHRE#iM_NFbYgmMa%ZYWs0rhOgzqQQRq4Gx!!Pz|SPQW!klG+)BhJzJK ze&y|Y5`o~QUrP$t6Pt&4kvZF))r6ROFlxa(GI4Md6tLV@rkFYim&fIrj=W{%ns(~^ zH9#OHXuK`VD3IA3tQI$Yzjq7K?V$fqwnO==$GTNWtJRWZy<XpF->7Q)v7blaC%}iJ z<r;gr|2$#Wto>77fO*Z(v$8on$%f!QKMO1sU6ya+lDPleZuVL?V%sZ%Ud}$N$fPQQ z>&ndoDKcbRl+ZWit;=$8j;UehK~{wsm7??t^mt^BX4e{*_VQ`@L|wAYVK#PFWd7vP zH*Pr#;NP9)AMry1<BnwQwp*$>-f@p$lpNvA8!@reBN!Vxv6P=@nh@0VlIf+3>Ei1p zq&&YE$0i*~wMmcZQKKq7NUTsFs8O#KMM+>Muuz$P8{?r~lG3C<prKBc)}%hrp*EM| z)*Yi(l8dWfPx<&4`-(jF-n8_2*-J+JPist}|8gPnzwJVlT<u&eZU1%UtL|jz;P4;k zyJ9t6bzD`n4NiSPp9D1#iZ+cxBk_+RL@lQL@^AUVU(v$yy5S8aN<-4CM!}8+uNapf zYr0Rggmnd4)%1O?ww@q$F1%Uce|$4(LTr1SNWZO{7C71*{p7f=DgCFfeBm}mL>$32 z+a^X1auyDZk}ig?(9Mj~`a46w%ip#76GBYkV~v0!di@b0svy<C<s45S^xaY9lwbQk zS8;thgDO7npEzl?JmV$0O!9tKa0qQ1m}#2Bvl_)~nbeY5*-8^!y~*Np3Es7IVdBg} zz(}E-0nx_-7t@?+KSQyu^G_QLepA`VktkDbJvjq*M}c3>aSRc>&4cT=Qw+}fpJv-_ zT5DU(8v%97B_))XXwf$*J6bm@>LHz!YO33M(mauGZOw{uml_Xt&NtB+=bEo23pO2} zL?G6QAb#fM+mrJp$`gEcrhTvCMhm@SjpZ4POcTUUFQ2Ady^>BLTs5vmGz;4!>OCa2 zU-jU2dVShN%?=uDv^fXMs_@pJ;nL)$(4aeny3z>8F50QKmM&IIK56xH1dl;lxdcD* zlyBc5y9tx95Tcx9qi49;L?Yy~DkN!mGUu4Og$3QP7aEh8ex}O&w1i4|P{UhVuSyfO zo~D7}lh9e1bgt-r+LxV1W2r`H8^=3cE>U)lJS-rm^e#FFZl++n3|wmrtKI>DqPa1M zOnG}0Vy^4Gy6~qw9JS^7d3(4vmdl5pmfv+aPMS0zC%bgmB69WwaBUmatR-F&Y%?!> zR?5^SD`Lo$KsU@IF<Tu4wC$%@?GsVIqRR}oJjoHgB7|yhYvGQ8d#Or|OEOloBOsR2 z5L22yRhhG%1l$H@4H1=wW3B}QSQqE6Q;2Llw>&WsDS!0hN*rmKce1Nkx6f~-O{{U| zY_aqy`V!lQAFim6(Fq*1G-Pfq5qa&iDV@ZBh5qqK4LLJyK1FeW^xe@%VuM{u&@nZm zd!IJU<OJ%+{u6S*XgFz*pXzmu^SOB1DH44s@*q?@*KQZqAW_q3yP(}R={HH19)$!E zB!z?td=oHi+U+&O*M}}C^<i#dc>=;!DHrPniBpRkPB7(RsE;{+G(~C@7-4>sMiAnN z*lXymahLY`$d_X~YETc}*W)3o+mWZ^_Z@<rZie~l&wH*Rec}Y@L4cCq4@tWp9zb`C zVc<y6-p*2(fH)h0o^LqFaZwI$@~gB+S*}DhA*oy6zU_M`2*v0T{=+E)FSDq^yaXvg z7UMC#A24Brjd+CxThWOpv_V3<w=eZz*rf>Mp}<n4qMpQty7JBWsC!AP&QuhjJk6(A zT*9rAeq}7<l^!Ac-q}_bAB1;9O~ottjtQaM1@!q*S-v!rOFDGkl{?#e(tcB(*z7|6 zDqdwB+_s4Jp6?X}aYD=vFD&W0KpBm5gAC!zr@SwAp`U<GB$i2)t|{^+_!qp-sDOOt z{VP=DAAJb^Yx@0v>r|hF%in6sWR<^7b?M>Zkzrs8^44h{K!d!#QWr=FMSz=u^)5B) zN)wS~vkkt4`iK$ET=!nD5Pm8t%bPSxk|s>1M=!Xy+I&~^dwM>;#0`|dfzPv;<%KXs z7R?ZZ9pp!ed(iDcADXxr>h&oTW0Dn-(XoJGe&)EQV7<*Q695bbX&gdws_bs6#~fqU zI<%(pvb(F2m!kM57YE&KS-0_krVvb2*z@}j5&6mES#Aq9n>=cfDXMI(T6Eea6`2Sv zvXctV?V1Yif+<f<LbS7b+zDB-$Vrn;p#3_HqYY;>vvuu4FSzwPZZs+U3vz6~XC?|x z$R)oBY?!23^k)j`RUdke&eAu~?O+3jA+_DhvYu0VAA{qwtzzh34qIrZ$ak#Y(Jn+- zY3!sKsrJU;m#6S=I!SR9vb(&X+3ghrerE9HD&uoE7GlaymM<r{)I;|erbJGn(}(+A zYM}E@FS+!lZw{?YLwOghRitxP)!SikwmBQ1lhIMPhS)(*qj&zQ4@!kmi&LwOumiXD zAUD(%g1|-5qs0<c>-}QK67&)K(*VmItK_GMct}2mD2tAJAuuIlrG_<}c+(Fqq)s|i zrbi_FmNZ0yZPBWvV-cCNe6%oi1!;S6%_haL6Tek1Q9Zjl!f@s(D5II?f>C}+<V7d< zgFu3zvSo|)PJBKZ>>f_3+WH~wc&_L9!zysj<;Zmwo+<~yE1cJb`aZ5C!NiF39sP`z zS|G?0K0=lwKyMCx`in0xv~@g8(u6!~EB-DXPbRDP5&T^qDjvh2w9(B6aMc*I6#Att z24IE?G(!$rDT?IZeqO2#<_Ob9+v7L}NdVlT0IaWB$o`NO4=i98{rP@81{yMmYyyqx zw!m81FVz}}+yWOqH8j#rK-4KC8MOpTw*Uh(R30!j54*Ngj8|n0$?Pa#DvT#q6w)e} z9;UPJVRS+%Y#zsGSD#v^Bc2TXdt76PUxvd>=F}IHG$M_5PomXaxpC8hA4^u7FZ=ty z12%l}zrB7+TR{Gi7Wr@17R%pcX7=Bi7$x)@N*FN3{y2(uR+g~E9$#Uoh={b9<E7Y! zLM?ey22E3KFyjP^ex^xCvR(g`B4ysJO;zo5ZD>A~HU5~*?fmfe^5+kwKN`!V1we_x zSSTnC#t6?HeI2#{y8O$<_#Yu8L}uh)MSL>gaVf8j0odRTFa*qCZfyc4m-etBF%uM9 z2a?&igZlwf(#33mGOHZgD_d<1xUTfhwq&{tGeyi%qfxem6;xKyr&4x6gE_X+EJP<O zAan`a2iEKd3$!U4pz6ZrASn5OJDY7MD*fn%r-jYaEm^=DK+Eheq{|Fv$W0c&HVQ#9 zNdyykI+|sMW@RZ2*h6JG?IdrNO|vh6uN!Y<`;>1XwvVhKs4c!xMcrL-CtpkA10J`a zu`<qS(E7K*pU4)<D<q_gS)x-dpmL|o<{J`RWodENH|wa*=3U$>4rlcaIjG6_U$@B1 z9kMi2t#ClrbQ<U<saQk``q?E_8uyWPSlz2SHRkrgd989CRJ@dz=x{tY=;9w?4eisw z!DCe?4E01I`)GKO6=#FN!R1xxjKcFvb4>lj=V9wdwNpJdIjaA--$<IN(Cw86prcPS z$)HPL!PFUhO#Rxd43iokDPE1q@9JKJ`)a;0CL2NQ=15SHN&FB)+K~E(db+;7?2coz z?9Kai+7@c8gz8M)hw)S<Yf70>H=En9yNf;wG?{gE88W(hM<4@F%~b;qrmp&iUNQ85 z<DsXHNlcktB(NAi=fQ17@XPsvFq>!Boojw(6+fA5-=2kV-4n3}og<X|8Pw*_qML1) zYCor-7I1Y*wc^i<j~Q6*7Q1Z<Psy|ZSX9ZRok-uWuTey{IgD3zUqkP}DkpnSDxW$u zluiIWfrOtn8qoH@G({`B_`~MJ-}rNiJ?)qtvN*@6A3sW3#IHh=SwL9=Su!MHAZf+r zvFQzy_gS<MPZ*XIo!eS7<1m?rX=A|71)>blmLy>k)H4$uw*TclU}J}Gc>Y;UWB(Z3 z^WUr{X4Zf2qLcrY2B0R;(NzXTs)MzK6YHde!GIR{3;l|tB2rO2FingyG)yn%z#X9J z2{pe1p(muv{X;dLBMaAC)LLXU-_^xmD*yPGGQjT*3~8_;Vmz#(H8h@QefaA!f6`{z z-O#7(v-OTbMP|1yLOM<9N@TSZrUZS035-(Kuw5CBeW#lp;-e~i2M*p*`AWo(axhz! z)KsyE+O8DddeTAWSr6`ILzZ>;3xur@)Ww9B7{f4i!SMV;Oit5z)!@C&6h=F>&IMHe zoN~zsurk-}*=1<CSfhrLheb#Mfs+NUa3>;}J5}Hu7`e}=jNnf3va3Cmldl~zaza~U z96<;2B-1<N8}nPmI`!5zq-H)r{oIy;N<I3#^tr}*m88@lh4^ZgS=Y+<Or_wIWi-8P zpW0l<_-KQ*3}Z>TjlX})d++DmO>k(kjO}$JZD^CA&oxFwr73LpAE4x?i9|a(D=i%7 zCDO44xZg^*yqX&u`B9hAQ8wFW+*&uzxGM|Utz-sseDfLJ0i&b){1lZ(Nj?ZMI5T_; zQ|WfwryZ-M#y5%nf;&B;8UslHs3bh&wN!6?2tk!aYYZ-2{ztk6@Ec|ScCg6AjF(gg z+@v1*r@wmwxh%8Dlzw3T?Zmkm5c)A&d<ozDV1`+;GiDgu3Vh2Q)pOiP!7O3a!-l6< zfiaM^+13%@;XVv;zIcr#t#75<!K4&IyAxdjsh+Ixk)YM5>MUp7Nu+Ygrb5u-Ooi9) zLZ}z=1`Z^qp7mXn$dOAKwb;j9#&q(rDEP>OtA}Sx{E3b-6JQ;;L^K*+zrQ<eVm<Qk zK-k;Dc7@IkSw^}wjc`ov;P2%H?HB4K(fm*ww22Vxze)6KQ`q<t$>?%+V2*4aPVy#D zy{XV&r;4U4)1vqU#AOcJg0#pj;)U8NlOVw<eqJ~}aZb=7sQrE~MWx<A8>;@i9#pE_ zKY+o-yPC$u<{}9bN>+KkYY=qL#Mem#*-DDPil@FZI10rL$({e^APgT06Zt4Se7`{K z1=2779ZKsynu<wH`jh;}z^ViS_6H>1fR9WNOu!Z5Rm*4FWn)TpCZ(Xa-|zpzx)cuC z6P%yqztum!a{mu{|G&}g-;SmK(femB+kVEMBKdWiO=2ivol;$%p<9#)0o9dMg;4<# z;A9xGSF^HR6QoVz381flEA(!rztd0UI8`v%u<Fkma&P(F1-5)Yt`BhiG1Tyv)7)$Q zMRBD$Qt&m>TI!5GgQ~URemASITr#O-Y+?j9)w~Am=%~|NyKn)++4j4F;#O*6Jn9FP zEvG{Bk}pT1K;SNni$&UVuINyM8r$Oup6V7IN#3~T$5Lr9%Xh=K5-To4orwDW@L%Um zKSJqSf}=?$!Q`NxetHhQAkzy$%MQAc6s&W~<ol7UY$sntc@h(*^kU(Bcl*VZO{mCB z_Yo)vxYyQ;GE2(5A(c8jXM*DyIxUGp|0Ds^yR1VWJ38LrA5m+JJ~Zu9Wdf$YmzwPF z4RqoK@7SCe;)KIn_T}<Eh`P(ls9+(gCIMwCp2A1mUA6|<@Nipn*>;#0B1RgPB(MA7 z+~rgu;NGdnLktf+YOqq|JWe5Eow6@j>E79$lj1b?r=PV0nHDlPmwV8X3APC;7WCni z7i>`3sIgsm0KB<mt`HRJh`$8Ttx^}QK)lLkPhuFh>8AScX6Q~_#<A=ZtKw{`e1}Bv zlOM}`gYR#?BoZ3b#TJ!E)m5Y0z>-D+I2tnhgN3*99OJPV|J+!{eeze-yX{gbOA#Bc z>qM5bU(75rhE-sj%X9w%D&eB;fncBQU+Etc5dWL)pXER8|MRE>R~_m7;i>+iejQIH zF%DKzf+=+yDXc9d$RC<wNbc7+2}YMX%+FiPgnOPJ9I}l0$uA1!O2ul5m3%6;p0X7Y z64fgA)k@!0*0?)j9AQZY!dB8(xVO@8Cnr{V-rw)tzho~bIp9G<ORnGTVU)CTOo~Qi zvg%|W7)^zS1+Aq$<`0MJ5x)2U9}WF`I!JeAp_@FU`_?={Bf%LqlO51tmN42Rq`5+( zpppesMNCBLU>&B#LrcNHcHNU-rMOCgD_4!CR$gx3z8!?+AJL1pm?i57p>L<lP$=zz z?$7Q#2k$Qn&sJf{PsuoDu7h?a)(yzeNR7F;kfmdhn<~t+TTA%UF0e@R#$aKCR>oMj zXHZo!RG3L=PL%UOl2-4Vp)2pX%^o+WG<ANNsbSVtpN!8+n6BK19-bev;<CnC$-<dB zgy*k1PO&<XV(2V8PIs^}mc^f<vfdx()IBTMYn4?Ug#yB!Yo)gUe_MG3+)+m;PX53M zjSVP1=p&Vq`^_3LO6+2qjOw`c$$3K?WH4+`fDl>Uhg76Bdi|cEFVGvK!W}J^9KK@2 z1!rwztFS>btjy5+OjO8JpAV7amY%(DY&Wx1K}5z8;$vbbnCZFHJoJd;u3b{}Al4D< z^%6Z11p{&QzMZ|r(OK<E*6FM)q1PH+WP}3pd%PS}dfwP{-S+5e3qQzPYwFg)P+ZS9 z!S+<qLp<`#BN0o?t3)>Plw3np(c2dxbO(5GR+Ku6<&>BxHKoAgRCKUR<!cT^MB%B4 z0$JdyMq5M8uqiM-?X;*yT4Nze7ENuo`LQnxHNW-Cku1rwThD+28CiFKA&UAC?I8>7 zYmo6=$4A9phet(vOfZjNLLlQT`;uS-T1mFwtYu+~8xb8r5msI;#JE!ETub~H122iU z7ie)qA<Se|)xp?;wH{6rlj;giRGNp>2aybnC<rheUWgn7bah)$f^}l-T1D9_kL5zI z4P~Mj$bQO-h$}G`o@wVZEYvU2)7*rm*{wVh>SD2f#O8CWU!o`B#iPKT&z`%Nm6j(l zwmgO!J;ciQ`jPSM0j_zn^F0D{H*!bkS|5Yla`z2rbv2WnTtbcB%8rClAvJ?x??idz zasiCKwQ}2Jx)0GN%uk~Ns%GkOzU>n!qXNoi>IoYvX6o_2%@Z{tp*d`2`_S<iC6vC} z+m^l{J8k%LMx{b>ZeZ0#<8ohCXF%T33z!S3wCLWx5R%>enQMlBVAT=qmCw-j5S!a; zKf`enU9SlnM!#++DL~!(gX}ps;72H_KR|dzcx?;t0{uSo-4nL_+h7cTWALoMPGfPN z;O?fddS3m+&Pw0$H`Vn1j^NdAuCv4mfc2Ln=hgB<&V?yLUIG_Lej$4WpC7*(<}_ss z2+rWh7K3QqFxacGUFm|n76baL(BZ4#DK&WI>TWHJ@PP(~E)B3i^K2|rOy=J9IHQf$ zeg@)x5)DIss#-lh6W^z(`#o3=fBR*kZc~8ASk1P#+wViy@YYkYl$!d)0b@b5_ObS| z?E&+6>l)WR6i2<-(y$rrkp3qG{-U-Se@Y<vq%8a``-{Y_LZy$Wgsw^tg-<xhoCq9B zOePb<yr6E-;HoEduc$r8+DBuho5cn9XnR|;|99Npwr00SjuXL+A>93P2fiHq*fS3w z-W;i6W#ziP3YzwPe0A4ZRZS<`y{mP(Em@*(R%mt{5P}_Y?BV$tvI_KeNFR<t%Vg~u z0j=^RV|FA{b~_xIeV~~Xo61Zpa0GRld}huZ!_iaN(mr;(G$H4Hn`F&DXKTpatU}5g z#PQt10Ak<SAghzM<ITONM7vNG`yPxIYE-#*kqSfyu1U6(thHYWx!R*cx=JTUHE8ms zf=*264B?i>St+>fj0eIv-#dS_{;^Bg_w)|_<(=u*{T<}5*B}ctl>RTBupR6_E!h9- z)VlvuarpmD9e>9`rRWJ8BZ-vhh_s<uQj>#U+Lr4CMW|)PBNTQQA8Q4W8_wn3DDSIp z!!q&g0W0_Ho%k{_iqWL5i8D8xpQqg2rdR$vzm9W$Q63qy0H_Rs8KF>+m$7t)jTfb3 z^sTX6Y}W*N3p?qHeL*DSONxt&Gr1~-n|GLl%W*J??(Hx@=K^>yGChwynB}Z-)9aH+ znlH{Z&1IP38tI~YWxEzme1R}sVQcGBm>V;dOE|8wv#k&vr%CzO0?R7xbAeS|bO_&& zH?`8-oVd2K>kMuiiIz_-B-+w;h;&xzknJ53Vv@aZXfLhfuJR+PVbhTnyS#xLBiP6z zIEvWA>r05gGuR;0oCseXWTOFa)Xw6Py{RaD5Qnwif;5eOe7_{oS+>J!QPmFa>yZND zVvc{F0(bDsM#WzG*g=A2AC?UoDLaD<Xr<WfLY8f2oM4GlxUpx~h&_@O%b%@b<^0*J zsF<{|%EjjDTXKNOvTwZ}1voX$yr?pxrfEN&z|mB@s=`bR0yH%^YhD6DjbH*?DGU2u zk4Mn;^a#B^cq|jGp<FK?1{&W`K@d4OHlJZyr-mx6#*lLFF*e|>0KRv|(dme~5Q4X* z=s3pok_j%`8v#x!UcIu85s$mWg}m^L#rbC_CtN;j15`K)6f~#Rhn=wd9}Fwn?>s(g zWe|9LU_(svznaoH&Uva$$|u0)3lXyH3lgWg48eA#&jI8+7Rt~auHrT6X1J#w13XzH zIJ*i!NrP6IO8~6z0(xV+Fl+L=i(x;f-<O9KRrfidd$4h<RG|{{H_RF#opXL5Iql9{ zWRc&?wA@*tDfz?K99^*Eqd!5-%kCbJJ8QwQ=Yt44@*ag<n*fPd3)!b`k}ICoQ&iCB zFR2eu{d+^_&eucGoDm>im3An-iUowFrBV)(>bt6KVVZ<5x_%9<as>4I=>zaLw{iM{ z5SC*0gvGo;hI7$zrZXF$hJ*#0qMTCg+IA1d``B*g$h#mn2(1GCbUEytR;Pr2)mgM3 zFEiNZaBuyO!~OqzX4Ah@>i><otJR@B&<?QuD3@$FzW(^uXZQ<U0T2KI);MMw1I}T? zkpV_^mzQV~MVgs?egOeuYg^vMccQ6Xre=$4fzBR4F;M2OX2Y*ly}F9=bMw)6b@9cI zwIOlR4BU5>Qr@il`Tg?a;_}aj?`||C0YvS$ayl_A&ez!}Z55x{Sf6#8tTibI-fopB z#ywg;zlTxdmI!{or)yQi@3LI(P_CsBU4BWsH7M)nRU4$%e+qW=p4Ur_dVJO?V_&5e zet;Mv!nl4Lj3Z3;_{P;Q%ulrd5ay>_5JC@qON-W4#Y?#qALtNQ_1Op=ek<!kR(xrV zuzzAkY<ano^%NwIrS$cX+LW(+a{H9?VSDmb?(!DAa(nVI#$pbvT)tfMcT&Y(RzCee z6ikX1|DzE?N^+aPr-vc^GwiO?k8Out&@YH^ybl>&@Y=Yk^+{QC=hd9XujUI(qXL~7 z8BT#0izOMlj1I0P{383}@6f=^AgE@VG^B2ct%9WtHQUO3ckFO-7^$^@_y+|ttjz@^ zJ4;v&8Y<_Y0<Wr$=Hfk)LRQhbJ`<_S^)pMLZ2IhKZF*AiE=L1zNvRiVNC3Cyxb*Oe z))c*{^kiDPRt=E?`bDFcRR?_~uhoJZWwnMaDq(Ngtnq-7^kI#%!i<5dqO;|46n6Y( z4g%?Hjk^f^_58^~;ptrv^%g?|k!$|wwmf0sVpMUIh)nFFTUs5%nuK>BQzu(lh_O;{ zl(ARQuPsBD%(`|F;jI#)9w{BVh3ucGPIgVArp6A|rO5K>YINnhm@qzKRpYA4MyD<) z17{ixis{O^>WM})5|@gM3yH|a)?;p#q`Fd?nbBzhn#L+*%FuvIM;0O$6%`~-xJ5U) z-|H=;=d6jAm1APhCPw#3$qG!|g)hXZw0=XVX0hokEwuuahj7Q8jbDn<rG*B8b9RxX z<Gkdd!NtGFZAqi@CoShj;mE`hUw75klc`vmht8qo2-f_Kg;P*ov*5)rN3m}4X1$|q z0Jh~p*rzE-G8q0F2?mz1fm0oP{kLZP0>fs?ZdwfQb5^_*JsM7p_2T=5oAm`D1k${- zxY6xO(P}@liPUmQb&{A8x)iAu3TbhgMIhBPNA`PYCKM))Q;|I17|)`#Bu}X1>^SyL z?<^QCKM#d@6)@yA_|?YZX4b0jUgoCCc*oy4DmiB@tJnr(B?~FfT%eWuJ-PJzJFcZ` zVnuAH{r!XKTrDhywa|O!uB_k02JPA35K=-A_gLUlx0NW)=*?vSFg;6GkntZ#48O0$ zYg0>l?%^z-P~WR|8FAieymz1SLVEJW`?pMuSC-Z0uMpSsc5*#*0V-f0<gf4ac9UFY z`qodeVLimVALOFHn%P8=Y2<BW@sA65`rL&TNYW%m6l5ohHE4cPKNr-X+u~Km|H-#l z04^5V+$HT0BWSBOa}PqLjr!}JFqr93&m;+VPR)+l?Z4=;N?AStX3qckm!MHs@cHaR z@OUZzh`cxX)_+tBP>m2*{e5aGd)<H`6;5U;+zc-}TMJMgk|Y`0qmiW+jjfQGNeY)r zFOg9i6AM24^&v$&TUg2>%v)YwO^(v~OUflpcl4V`EZCif`mZQmqG(H;QD>VTN^2?Z zn%_w<Y6|Hj(GQBu{Hp0CH1q5SU}xKP*K%^v+^}NcNkapkmm-kaf)H;-rWD2U=L*td z%ZU~B^3EU?*M*1%Q!SgKGc-SOBEy{Iz+yuEz;a%;D-=wWb*-&8AcUQ9Zie!FnC8+j z=CbJN?`3;K++K@}NgJ{6%y!GpO&pI}72&w4%Bj25*%NznJR+bfpgZb{4Q*NN>G&EG z4&6XH?N*fZ(8r*k!Q<NxiS(IYE%rx~AsPyr9~Ko%&^I^|3Cb$&>FIY2bO%ygGNKdW zn<np_JZZwJ;6oc&j)l9)a?;j}N0HTwhWGf=(X&#do#4jt8^|?pj&bk-e(PnHh4V7O zu;Zd+OIS_~M2bhE)hqgXol{0HKm&?Cv57`TA#C4lJq8mgmy(ja3Pqe@dkVl*kYja1 zr!kk7&6;BjQLgM7CE_$LK%R^4b(MxcyL{Me44*x6aHg$z@+@5Zd>#tcL)q@oKFUWX zl{I9+rB}3je4lIQzytr7uj**}OK|A~gaBv4t>4ASp10Y(09D{fC4ty`h!EO(Y~RVN zf(C04iCz2B<|~1=Hb`z{{w~~{xe>%vpZ93FL*usZ0#xQ|5aLV-C_cW9v(15L^McS* z1*D=6)O)S1#TW86+iZZg^i!lcwJrU)VP(?yY+wO-pgy>d{;v<a=@YAN^jWdW3}e@I zuh)3nV;!xEzz{DPkw9BXXSengmV15R@uf>)hU}lct}>~4MOmyq5%4yEwq#%>@ZD-c zn2NM<Mb9G9aJQgphT{mX`YbI!*s?r*M+8f2+);S1?&3sn3*J`i{tHF0wM7x)-t*i` z9>$rF(7WDr)E0(~D6zL4S)66fi!cOAU@|(CJ#Gx~fq+|ntEWl=N6;vYoA5^Hji01h z>md`3TY>Ik);)DrRt>StWWQk&LnU`m#E2yzjiLiI`C;n#4~gU<^zphh)E^x>Gc<37 z0iu`kmW31o#-c3>RbuL9e=XX~BY1<5$($AW8<9*nD9;4hsT0B>8@chUz;&1UNuJ`| zXKq){A^1Woz{<Li3ZcyS@;r6h>eMDUrJ|iT>Ik*@5KVfy=)~`ptV}PtDXA%0RBvli zUT@Tnw$SJ}BU&5NXGY_20kJ9ciDUMO6WNJ<hQk{-vYAk_2c>#KZ3q83$U6Agxn0yw z9)W4z`~@@Q)4H$}l%&Z$Z{!2-<2ClQab3){WZo0C8oXF#Y23=DNn0FoKi&gzt8_|C zWlTji2T`p`AC)ecEU$ZScx4mV^AX^n(~?P!j&5vam04B2{JzSNcf;D0q8Dx5WU5}- zF`#L|0_#>Idwxug@EiTGtKSMJ3duLGFXj>;;vtrN8z8qA{mEs6zp=9gwgBDFPa|n^ zNBraWI~d)f!@@CVE{OCree7<P1buyG;ZB=K7{$1$cSf4r4O`ZEFc?U!DXhNu%)4GO zEAVt1(apRd;$5Lc&dW4iE`~UWLF4HKd>wJSjSbBk+OK4u>2lx4oL`(c9iuJr(pEyB zeI`%(*U#{rn6n2n;?ZEJ9P=O?7A0o!OkVhmSHdN2wi_Is#e{MBfg15&c?8Z47uv9~ zupF3Yn(u0C9NMFw+y8Jay9b9>)9Q5Xl|3f0HJiDEIwEzH+sTKlI&v@Qg;(k{F)|TB zzb3fQm~)qBrL!hCIF;5fBV3&!xn?!M-c}$Oj50huYqg`YhSp8Y*Jo*0Le%zcde!I# z->W`)2u&D~es!NI=GFYsRrPCQ;+4M>@6LJPu}=BH{BD6<Pqeue-Ex2DJG(&QZ_cG! z*7-?21IUiU?}*JcQ*HtdsYh=va{NpZ?g%r_#5{sBp#=LvFA5>^)_kSvUUHQ#FYR=t zKaZfIxw1b#9NYcU&s`2S=}Hmjv&DgTg)T45JT5_Ug6|wz-OS_1(_R}mP93fhf${J# zLEDl^zSj;f50Yqm)CjBd*uK2v;#-^h*kP>@B~ofox*dwb6^?&$m=kxR?mw@o%_RlJ zyBJM0(lh#DzVmiCd=K$826IIq;_^>kf%-5Cp~$V2Bn~R-T0dH>xwb8=^g%3i3Jk3e z{0yLMc#A5)H-*+CvFMg*^$B)(rMV3IX^K`o8@N75u)i4f<L{3S;g8z>$pKK@dXE@* zWA-)rM#3?s42kNMSmn#6egdIpn(m{-RnyW_*v=hE>>CfkpzN~XCkz2Sl{bpN#&lNz zAVB;R3WxqrdSbEsN5%2C<BlA)Zaag!DB35{Oq~jjCKQnxV9=|CB6Q`tmXj2GK)13% z@<!|{N;vam;KO>Yo>mr)_<|Yb+}yON0K@jV3|&dLuQ|HAy?iA65=By6K+sR)5*2jp zDkIfG)>bV%*h=QEB4eNw9MS<(LKaJ%rsfb!%w`KS-!ZL#daQ2@HMOew8T`!#E`QK6 zzplwXhheFe;5Jmd2sfN`DQY^i#-#fh;|?qAV7|zrlbR?dZ+2$OZ@$JIdCI-?$&B&+ z#f;6DjGR=y^77@dyGa~9L`M%mjqQk~5Myxf9(&zcYU`6dQ?EEsF6OSYxxwo?$m<iK zOq=0fw1c5Afdek7k+2rpy5P31Wwcvi%HCEnV~!Oi=T%WPQpMz|oP1V#aCk4X<Ajj| zg)eZ_a)g`l)u#rqGYqjwN*PNzJ%<vbmvIf#_<X4kHtVB)ZI<DAg705Nq@#wUx>H?W zlRlX`XV>Wb_FZ{J=e;y}>ZEorYxBVjDMqZ`${NvVwvJdwdE_{&3V_7HnJL@O58*OH zo3Qc-;)cJqSh&K1hKJQyxB`O)mxSNYm~%irhdZJ*&Cf?w#}1ilEP}&V9W%AKCrxke zuGLwk4*?z<Gr8n)+3`^EX4x~}iM~|Iy8qtX4ba+fO@Id}$stdK<1hVDiRv>geLx=> zLN$m!olmToN_t?eF*9a5>S%8!XlgT`RTy80F-))z;Uu$sp)Y$sg~qWW$be3g<pahf zjA_Kb|1*VPm9>2)Lt-wRwLH2T+*?-o%cKZEX|y{p*reLPU#(GSGqBOwggiSJ6%omv zkV|A6-b#-|Mkx*-soFPmMhN;RxRBEym}FnT*Vh<|hyGzZ+9%AqVi)LCYB9)Bp<Q)g zK0m{dHn|?@ECht0km1ifI09jAk&Tz03Dxiszk>8XH>57;d{W3-4$&?Xsh<u&i^UqU zjuq7{Sk@I9+Eh}5L5MVNC2_uGLHNR3A1kOvlr@;hs7c`yqR|L&enDPg&dIO3BO3Ji z6+v1f8iVlbbkk`T1H(Y^g`=-ncRldPUEAI>A1Sd)kN-MeU*`CEPW}m&W&aT@|2HWL zR_1@B<!qI|o$0EJ7O0AeJg}28S5t(A(1KHFh_;IZNRzKw-Zkc$L;!tcAi<p1&~K5f zO6D#@kXQM5(<LBMg?aB14`(e$S(oc>-{0O|@P9!Oa2A61-*BP;@Rp3Q2Jf-#3}kvI zu`(R!Beb3HQ@2IXxZ6g>nW>io0@h$IsM3rqHuuGP%&yLDLl$>&yGI)!IB8d~19|0Q z@<nqxv`>vHCYE#!SzXZCt?9Mvsv?N%(T7<YiUW=7EyhkuE-<jf5<tF-XOyI1ld!63 zB3UbP4)zVLM$}6C3=)wkHnQ2#IcukS6GpXGw)cO5xbOaSq$5QRGWjafE{R6LSx?)p zSySrzA}(&SkU`%nEs#t8wfXiAHpDJ+DP%@xT7A@uc0%VQZA^r0Xy)1*^dz|BC?fxo z@u{d1pc+rvGzOLkm3AautRqy<aEzYVfy<HJHJwUvlF{6H6C&dj{J|g@y*JW+7L4p# zO}?}^2?OwEQN<L2Cy!oEXfm`ml1qhdUTkrYu$o_($jC6{F8U+UTB)Yl+Zchpt{VR> zGr}!ParTEMxHHY6qkOL~I^tDaenY&i7l3ojX_@!1^-$|!QF<lAyS=upy4p^*f@(KD z0=%f)4_gnmAApIyOp8wK$?_x*7(ueH;sabFC*J~$B|i8O53C~Gi(gD0Hj>`&y9r!R zyo;NI6K{+j@px$$wj&&J9T<5+ngM{?4?Om7Dr_6+PI%mXY)_v}m*R-hAl*wyJ?rOB z*ajJ2Nr+)uF2{E`q;g?L`YZNXgX66jL2aWn0w7nHTs73-o)Z*^mL<Y5GUEKw4>=xw z={YW8g1H2OWpHV8H)N^rLQkkd#94*kQK?DzLT<?_l_-`l9guIXJA&-y66|QYGpFv% zYh}>mY2<vqMY-k2hSlQ7KK|NhJ*w$2+wDkHLiFN~kh{yz)zRCeOddfOuJQUo4qYhu z=<FdCwt)Q<QgWo9M^>Q9HvX+5EIx@#b1kGo0ku@3X7^4G;P>4A2Jz<KM<!Vf2Vog) z0Hx^?k49RJ!MF`%{Ok2gq(2bG{H!~y|H-;z=KhZ|L{}MA5{(~Um;zf24p~E5T~u^3 z6``s|zqTr@Z1#&3Xjw-)JDIMb3($}fHCoV=@WJ&lc>}U)j^=)nrgDKsQ17lsV>2g; z8H8q_sN{7j+xwE+_r<N}?d^%$-|#J;Bt)4;ZchfxoSCFrk^2p0C@n(YQLeW&f@z92 zO~FA(6qDlMRTTX*!d?`S#i_MmyCQ%NV6lK!!aFpBEI+{tMtMeJzMR7jo?Ao5=tOBx zr?nq$dLCdni5o+`<!e5p%QF6Xx6ktVF!r&0Zixx_wQE!F6KqrIYEs9VXJmJr#IaJk zEg}kXzPI)bM-IU}j|KLdi<NykNs#nkKZQ)xOXsHC)0#{x!MTf}taJ?d0x;KqADOWx zRl(@FI)6$>5=>5fo8T1ZtOX(r2HfP8wJ!1<qEAekeyQusW1yijf%o@vTtV07sH-sz z&OHBO)(zmAO?VH0a}vu~k^aql7SRFTm@BRD2wy3zuyHENb&o&ixjR9(c>u1?(8)94 z(C&K@y^`RU$Fol7-Q`4Po)Wa9hDYM#0{HWJnQp5$nYO@XuAT+jV=*RoYI&As%#xDf zqJ&1*A%n{|xIx}gW}wxNa7U9i`)SdEK4CRN{L>Jj3+F-jp`}bCB>)_r(;;!S8CjKL z%V>F{KpN|zT0cmIl2ti2PSkJyiuVwGeKBqTA70QXHl&|R7{_O+j);Mt%y@Z+nccPv zB$s$a0HXh$UOR+Md*_Xy-+*tn0&w%d&mcehOO08@!HYp!efo#nSn$DYPKm5BFq)Es zcXjq&pnc&f7rnpW;C_(vcv<`O&5wL#lo$8UGx@L|5hKs#JjW8jw5$n>KC>3JIxqcZ z{5sV95OY70?kw|&J|+LcyvyK2eDVB55$7}1nIH=&u#}lB`;6R=NV^i;fYJ@HIkDh_ zMxOW~2KnbluCg`MTWrjCBx2eTHOsTCh~PPEh4+BIchM!(Ao~(R;(DHYFx|Pi9K~{~ zCTExm#CA-W-`~NLyTmxX1F5_t1s)Kn9|$ZTdPx&S;__ap-3U#Kk$b;9B#M&x1kCaH z2denSoe@oj0`vQK6Q}0sB!`ubF$p+>E$p-bk9{o%(qaaLv;6{|WnY`3c!c2`$@nyl zHeo=wY76$r6jq0Mq#O1zq!LKh)H#z|dN34!;`hy(J*ZqW#XO@kz9v+Ts=RRbS%=wm zTe1&XbyY~IT1Tm_-sX!9u_1V~`}H~63kboC*;87sADGU#9;-tCn;){rvXiU-YzdtI z=-~ff@2&rTvSyC|bOc#vRB<HVJ;dlH8>7rvFc}mZCZh4aNB}4pFU8O@QJif+P&wYx zoQR&rbh{cY5~Lsa$7hT*WTI3>LYA{MdVa*d@Vi6=XC*yx+&E$7YPy>I<LOe@#_iEZ z&l`jR3N6OVbz3m(6G=3q<E%vLgwsl&dMgPtIkRm(qP})ouPQ9zE^fGHgMMOKVk<*j z#zQ0KB$SK!kQ$iRVL${5kkLbn{`Zo)s)m!guN4ADK>g{@)_n7K%CQ`a$x7&Nzox9K z`?$BNf1|OZ20PVWs08Mn(3Wb!Htrou1h3v_tIDfq%_YLKYddn5RYvP&ktmg|NBk<5 z2{oqQoo#oHywP1PbFiwq`sKUN(_L99mq-c%b{yq`M+dgkjyuUYW<`1fD%-&z51X|L zKm(~fP)|(51p4B6A@}QS#_#(Yqsh5Cu^pTvoXj%ppnebW-ha7oy;&>jxD=-UDWGsL zf|lp#_d!jzNfBH#wBM1XHF8{_{@YFkQPQjaYtMP2yt^5j@rf?niJ>OFM@bXJnzl*b zas%y=>k6V(P7Ona1$~(W-7?m%ya9Mz&iK?;(>)Ft4h&`sW9V@dcN?F`4p2%rOL)KJ zN9;@`v|QkbZDW;8Yk|n<kmY)VBOCzq>m}(LR<Gobbw9Ch+fNAKs9b1}*PxU=>tfs; zk4RZDy0{_6t@#UpAF~t7a(@(I2xwTP`#V;U9FFz!i5#359elOe3yRw>VI@cpUD5QV zJ^h|r*cocTiSJo*Vh%3B5zHgbqX}|R&n-%1HML*^hYzPBv^`3t*t`V^YNwz#`)9WK z?3et~N>dp-5?l6!q!8Q<8&{5y1eJhLs_&zK0#O_>l}0fkJdG;5J+L(kOh&tK)D z?ekA5T|WHTiV5mQn;uuDC2SeqBf2l0rsLnUW4?lML8J#^86j<h)4j>sF?zm4lzu3D z*yFjS%>X3!xCHVc1IfUm?x+PwH=)P)*F&G{TTqoeFG7;=rfqxMKR769Lp&#IKbk;i zs=#TX`EZVCxW&yaHei^Tq^-;ozo@t37OA9I5-hJbn-Q|pYb{foY!=H5AV-mhaVGL; ztz54Y*0x;rKIj*WE?ebmiP*9<#|?V$8rQU8?cq`EZWzL*HAvPF4if~Ja>{Sv{`IQg zc2L+Ff0l6j|LCj!pBnxP(+Z)zm$U@C#%KCNQE@iW2ZJ;E`x6mCX%NN3FkhRl$&K~Z zOS`p%ee{b&Bfb><1Og=4n7h;el2E%@52F2rX&cO^K3QIdhClbOr|w?>8Yzl_AlNhz zmB;rfady(Jqz@e|eOMUdVNr_fiTMUHbbBZiWb5W(GQg4xITo<OI@geys^kN>CdrL` z+UIPx7G<qfB3Z!Pn8i@L+39Xq8C+ZDU&FBJEL$7DwM9(7WFZCXVoXLuRaWosEaUVF zyY_Vsc7W`unVM|Z`oX-WZK{jh<;)eA(2CADi;UPfAAV|#+X8t)ZXA5eu<<Cpt-Lb) z<V3l3O?75ldZ%3&YKXrb%Uu>okWkLr^p&o9i;Os^D$!ftqVAYg1xYBpp-F76gpdle z#leQM2AUz&Nsie*wUu>nk=T@W^6xv0>DB_g*Fd<!BbhQFJqz?1V)!OupiWoGk<8@e z+JJ8(+=oOUrJRh75}V=V*c!IL&q&V-K_1MnebHi$QxjMz0K4(^jmCPE5;Pr=>L5s% z5@u3EwO+skb(%OmU>v#^jju1jK}V%F2pl>V-G#V34?Gp!Wt#@@(PoyCUoAWb7fpb? zp@gX}?L34e=nWTAqns)CX!e(Yb<?6sDOP!rgR^`!yY%y5VQk(cA^(-m;q#q$SHB4n z@<l7qcMOr9y`hyll$~{|#;T`TdO6jkHvO*9wWfgJ90EN|<ojer<Y(w*5d!R26;F`j zMO}R&UN%PoEh}XwNjgKvkx=vb%2t5A>n*MfQ0sf<4j=<L_XP**CVE2tO%}Y|%Ndj# zkH#J3qR?maEo@yMU}o<S-zAFgeYC^*iY4kp+_VcbXi3T~;?2v?Ry3GKy&4Ew&3KK9 z@(M<+_)Qh$H}1#sIB0yAIRERmDDaM73K{1w9GloaBm0SCUFVbZ<(U_;{ugU+9UO<U zE_vEwW+sc7nVDH?F<8uOF<RJSX0(`@nVFfH$zqmeZ=dtdi`X~2b8p<3iD*T%{;%q) z$}jVmKLd5i6~{)QM>Iw(zR(y+&AtnHi(d9VlJ0}Cpn`G>2K&(ckb2zR$ATtp!L;b* zGg`xloBZQx%cY^HVw)T9aW~U%R(5y%r$XamWpChr?L1r0y9Zp*&g1#Ny7M^xIX(Yz zRw!EG;}u|B=TlQ#(=7Q%v}j<UHtGm7oWJ0#XQRQ&P$?93^PES$<^Smid9BS|Bz>Qx zcybijnq(O`vM+OT1Wx!;KiuvQPEKk*4aaHD1+mdi@9QBPa5ELb!!eG(CPct6(t$8x zrD1y!5wLpdb>J(9%w@anfi$A*ChNsqBB!zlLgc|ES^2~dhw{3U>Y7*~9ftHem22tF zaKOh|M}=1*WndRYgXkxbiS=g368ZvF)XF($NDB!j9>p;<ud@Bsb}R4xCPX;{_MiFP zH<k31k&@}I$$53R>|$;G)M)eJ3OSgusTvO(^g9;#d&Qy7N>L@iZetI*H`j(Fvs1JR z*g+n|Wo(84#<NE_bAnWb5*tXBC;1WcjyNmy7*~|=T+Uy#aP}yq71d`>Y4RK5Uu4L* zws@7+P8dth?czoK`$&G^X(WqXeQ2&>|1PldGdRZn5f(^=uYymZciEX_?w~DM%1K!^ z2gZ}aCD**CuCM6hgYLKR+d@Z^gT(uXd%3;HWLknv*Hjh{gKt{#f?MA=+G70-%<Tk# z8gms%%vVS@Jp28Wz)IjoYXM2<*ZwPwc=kzSMXxFJ7+Vp-?YbVic!qJI27!X*+5|&T zWMsjS;F*I!_y<sgfFkRyMoffzwb(9L-><&7z~UqmP2P<tXl6X6aW6<4%Q&4m3CDgU z0n$QyG?Ak=84-M1VDtz^iZ9@zSz;=)LI*2RB*Js%XzDmyo_(RM+U#B+d`d@V;bZD8 zgknWI`8l;`u^Q6#{Qcy@!MJe4jf|TO=P0uo`Y!xtV(>8Y8<iaI40+QS;;a;w=<1M( z8toa6TSMg%VlDJL36qvNs;<n*$?5(VM`KgMJf+h&e;hd@o%g^|lazdX<z@38;wSE= z&yV=;!%iq5h^hG50e3F8@)?EOEZyK42htq=!-B5R-KT=*du*|{VACvOXqv|Z<^w__ zp2_=9J@S{tHS{yAOlIUwF?O+jsYS9lUZK=o4iJV7P?douICm53FN0Zz7n1%j<k)_! zFplXK>B{V5>ee<48_g~DbG<R7w-)13++lm4ZZ&3QId~G@Vn%tJTehRThONQX%@)0e zX%ld)rqf1}Vx8bhKC~^cMw?iOo?nRuE8~=&|9%rg5IG_Jb$X8dpYGxR>B|1^J#43m zFM;7lDa^TM3qOxmRs|{nM5Bg>X$B*W=fslFOTfU}Nj1ewv3FYl@tb}}2nqMhm+ukq zNPQgh{HBg|r(_96@qA_Vc0b-e5q!2gzW(m_PS}g#gSir?c4GxIK?~N3JxqL6A-&hY zOk^k_U19vHCxM5ISy`qvLWYUzlV>O<A}PUCzkgE~p<r8P`bV6e2hyM%M_85EuV~i> za);SpM7PfFicuGM;uI?)Ly_8WfzJb+bJ?ajlNh1V(PQ$8sj_$;=htQ)7jy?mZo6-G zc>;F<BMi8LV(eWuogjTw)Au81?>=c08xOwN?ky5QzwU)n?71GWi_m4YaBP!2&*|PU z+$_QOVMXPjl?k+o_%m$Y(qn?g@Bx9lK#A9Ebhc5fKigm)-ZD#8v&F~-hrm{co|2;^ zMd6!#h&WI3(<8h6c{4${zg-xW`C$o}w%ckf?KF7qNtYo{kX0{sr{>smjf*f71FU$8 z`5RIVg7v~Q;D$kLMs5Ye-a?6@iy~?Bm2;Z3NndeDXuy3S&8LgGGNMw<`_i2;j&-6o z^6l-3aVAn0x;zoVeMYH!N#_PxtwbE(MHq?Uuu2j;gw1@8^H+r2A(i6ATuAdMmc%fd z;?UH65{=h|weE^Mj4z@XPBGdSb#9ZCaV#NgD^ZYwPnUem?;u_Ny=0GaTjiz;3VZ|Z z4i9b@FUMF*43!T~9<jq?*zpX93^E0XW*e}_jPTn4pdzy|fKfJixz?>>XAPTFZ+NE{ zP+^3X1AInZIMqon{@gzMD@xI-HJ}C8-e5Fp?~Ufsu$7dIozT~;i=s6^OKym*+h$#2 z4ROH2jbzFy-Ff`NlHN~e!7STCFY0(!n-`+>i96f8)s?6<PN7MsLJP|^80BKKtj72@ z5p~Y3<UJm$jy{6H_%sff_&jrTz~^Fu-NtlIe7&L`LEKDR&$SAdy5*Fex-Xg>{xJgr z?@4u+9Q6ne-&LOqzg@nT6cZGdAUzE0qi0L1_TZ4dL7l1OqZU45eK6!@lJhDM_){RE zjy}2*=Duq_bS5m5HAbYOg~cC}OUlfjV|id-&$(;Kf3|{Y{32Zv*}Y)G0bwBaifWV~ zYAbXL?<Eblk}JqBPR{i;$jx8w{b3;!Ur2c8OYj<1JR?`<cChFL^dYDo)BNm#QQ{8O zYLX<zbBtW%w>`=aZkf+I12_Y%rhHq5RD~O9#4g#Us2Aic#qoB`exg2*2dAqq2Fj~S zVKC+5*U@-yE$hy;<X=6`JWK7D9?&R?*;tuW_TNaXxIP{!XsY=TzdJu*O7}q&9gO>- z3sKvdpz-OfSQ<mq+?k-F>|>ba$GqgC24vvi|3Qz(0}%v36=Ic~D(a$DY#QN9K6EC* zwX>ITsAEuJ1jfYf{--k@0B%DDq<x5wI+yk^r9*ev6$<7p!Fle7zki<8bXqP2K~DZ4 zP?5|33HAGbywBPGLDNSkY$&3uU;zJYr6}r_WALksOHf-lK{OKeis?eB+LjbEkOSef z6h~OOC*!O{+SuZunL!_wgQg4|69nX4G29heUOV|H^6c*)JJajlHPu~yzka!WGK4#W zVca#w(LY5_>=@)GHi{$ZV;y9jWCiJJti!C+tbO0K`wN3Bz|h0z*&6a{PMWHMuWTu; zV*m|N;#F6x;a&qAjZ=eYul4tfwU9m)+5xj!_UX-Qt#rE}Ry-<<X;wMOY%-gj*w%I> zj=gq;R^xo4v&)puoL=JVbN-A6<8122tQ-5<{AETZZ;_p^Zy$SQ`F?v09~}w}&qlR9 zeOhN;M`wpwVfnhofa8Ux$Cs_5)%K%Bg^m<1ybDG3{-oeDYIBghZ~q|fL^wumzgsMP z-BS~>k5#f|o^F<I(l+od^@wP~Hw7aBEOC+KwN{MPU7FLbd~BJ%&3IkCt!sL4vhfo{ zzV-&^W>nGAg`__5a(R*R8uJ6N_hk+l^Yjnj>rM1wGZ);I<ud0E2Rm<b#=C(a2VW`U z$%3qk;V$)B!hwcDdG+fHJECg4@+b{W@-$6yq_%7Pv55Zk5d`nTxUq)59A;#h)MA(z zZDDGXe7dsA$;vT&`cY?oil-cH&1}d0`Hv)KF=zM6A3y=g0VZQ7KYcftJqSfreu-Lm zA)eh2&9I>Bco4Z_|HmJAuz-GO2qJbC>D4*WaOTy1l)S}$W~0&&)P5~pH!5dcucS7H zKRC{<LnG;A3ctf(`qkcWU5H~u5C8;y><YHf3G9~l7?}Lx;l{YJd4Nh|c-IKT&R)3) zZ;y}_jOSY@2bwp>jNg8>YY@?jP&u;<P7zL76oj{W^Ue_`<2e;x)q8CMGe5nrvQK`U zQatVvyir3r=BO1ji8i^g42kyq9TRpg=76aHC0pA6uO?gmk+1)|&?qITm_a0$co#A* zavjV1wz^U6bDyq6NKC=Oi^)bc1r8def`~ycm&%{>s3hF%+s{7KBMnv&O)BCa@d6ez zM|`OQ9j|Xc7qCBB)Zs~TF^(SP>oH2q22G&q^{HdBp+Y$E1UD9@!<fe-?&-j+9QiQ@ zd&*#|Z7SE5f<mw+k@)E94TfD96u_KK-kp7#pv<Giz&^TUb}=m-k2l6Kz8cOUy>JKK zesi30%&KU$wfb?ObTVB^`uHE^M0e(b%=SdHwAk0$kHC-G{a73@cnuk4Jf1C#iKXbk z+WSt!IP#2!h)s_{JN+vGqh9R=I*{URpIKbHMI1;@V?exBh(gJw3b{qk5n3gm)j>N! zy&lLH{K|cN-z5_%<f_ZhB|hg=cef00RDAH=QeAi)=j}V8KT^MyFiX@IVxl1Hd%L#O zT%kv)^+oSPrV;3*v6BUDQG82*8u|H!V9m$+vFvgMe<rrqbjpGE5LYlci$864kEicX z)$xX-bsB`aToVYsbshjTR~l_`jjD2e47qmtu9DZZ8EKo0N{I$bEzJ6Esw|F*!u?{P zZfjK@wl5yiM9~*;JSZorA$>%i&4TGhU`EZkq|DdYX^O8d^zTamPqzlV6eoira71J$ zV1R<^MX`qfxMrJZzXe``YUVFcr_rgs9q+)Zpu#<xi8KK}62~mYhIh_>PtAj$4iiFl z23n%~_lMX5(X-@`hWWJD?H}g3w^@*{$HmNN406N2(D%RKU6YU1RX|2oV@v2B<L5(8 z;J@ye7-i)AB=SnhS8ne(GW{%$?45KRx$PO!EkZz2Q7~vW2mCbGJ$Q(uWo!*?7k-G8 zG{^|{MS2@((g-z%H%=UbUL%u(66y$c2TL%7qy2Z0(Ty77&xx@?samenxW=Chq~b~L zFtyM2NN60QPs%ZQ`aD;pROj17^@qbOdy@FWGFhY-ZsYIlLmDV#Ry_~yuD1gEfi8*m z+kiuv`>Q2w(s1#N*Qnh@{n9yQM5A<VMAZF!!bgVtW*y&(#aUbdaUVqeYu$F1`Ne2l zCJRWK73+-O#ktngd;F4{vS)a093kC*KZEszFQWenHroHoEA+po8p}F6*sFarGt>NL z<zn{jzY_+@D*84c1xmoZVQiSAxvA=L!y3O9>a4MwHZT~5?iQS$p-3rn>eAelkF23% zspkmLC+d40i*{|Rs`4d*Fs;pfI?MZ5?`m!4y5v*y9OB$y(5DI#e(Wz$9^#f=$~wtR zu+h;}9S}VZ!wJknYC7E&NK*4xg9TafLwPd$K3vV?TNb$nifSUC^3Xx$qC&BeqOA2C z@{@U^QDfg|>iaG8TxhCdoLN-8=(m|0O^P-fBKEGHoJH>=L9)!Sh)_gU>T;<pzzTL- z<c9;L0=zaFwXv!(E!C)*)mKb(QSO(F(U~IFc9_~>kA%#?qyE_9`f#7Btev8sKU=>r zz6@<%3iH*^ujy(lPIC8pK{G%E>&6h@X<6)Ja+zoU>eU(eWB;{Uq+hS9C@M|V_Lv}S z`_Gf2hZnBCZQn^=`_aAm41WZtMIhM><kU9HDLxfZ^&$jxHOXNE8^tc|@h&BIY>4(P zv^ihf6Kv;)3A^7fz)sbLH(<JQ+iayytEZ(d*sR)d4RIPTs=Ah=M&tW%JfrgWU!fh& zkD0DP{K(rae{{>-^Hjmzt$*upR@A-wd_5q%s}TBmiv5>DLPm0k)Asq(CqB^f_}^b& zxc@ER3E*V=zx0;;_wx9ku~#~m&TGtNjWF9VrNZ)HPGB6IG<(KwL8g~B(856m?h?6A z^QE6W?&b3@>Or0@WfDtf(=`jB6YndZ?)RsUd(BT3mb|qr7lugpoLIK>ytT|WCS$`2 z_$@f&Ra!&ZnR#jswyat<?Myh+uErEONN(PwupUZitXp#=shRxYQ?D?M^*_1IJ_WsN z(ZpBE<P-<Sd1otMd&MuuV|-1rJ{qD$58t1^7%IPZeLmuy5qGSmB6@fwDofGug`<>* z=tE#ShYXZze1T*~)m05nw@3r~kfrWXX=U3F@zH`ZDg9XcJYec3KUDjI{2O73sf;DV z$SWe2I;|zJ*8#s~i(8c+pWO7R8FTac@@8c-QBPvKVH+v^<>w#8vDuMuPadR!vvU!& zi0IW|A;7O9K1zDp*ihOe-e~m)anp_VYh$#SXfteAb{tyIo3rkR<@+5y9y=E1O#$Bz zW)LKd9T<X6)YUg2PX&!||6PH^j1q0l`S&m}!jhNCVbERqb6p_oBi;Z6$2N|FENu4l z>@=B-e&Fpf$?AyS&v~8cJ~K5-*HCOntP`U*D?Igfv#1v76zOIA@BLbsMee0O0grbm z2iHb*$b~e~wH(gPZFxhenQQvJLwW`UEMifqesAofW}?-HPWluRHm_H__Hm7tp8)Jr zCgVICgMXtB7z<EdU_m#8umAFf@b4qm|J${u3yN4{{QfIqUC*+ta&-yUh)MR4td=}$ z2vf!!E`iS9UY6=<`jph#`x~XRA3jldANr;MW#kMv9swnm;(K}hqW9}H>sqMW2Ygn1 zASluk8D7h!?$CHGD996=j?uoYbxPS@2E@0{Q>$=b;kId~!kKn2M4Nf{){mFy%tT|| zm}60D@u2+q3ga>vGl|=~E2J)KYC|*QEF#^2e$hod$15Wdcc=rYiW^Up1EpW))kkJ8 z?o!J{^z<UQM>iG68qOxdJTS2y_K2?2kIIg|Q5L3PC?N6Hq-^ASIIWBkv8NT4_jd9L zA@O(>bKp*Bu%X)TV8|M3GfL2SuoF|lXhU)<DSW^9NBmlc#zSty#Lf-z5iKlddxt4n z^PkKFktl#CkK(|_;s-s}#eA`l`+nrrT2?7DQ3dx>o7xzgk(<lR2suBtyU(JsMH(aP zHGVpl!DOvhF|Q%av=$cv8`YSx7VlBr1wSV*pP|+-I@dvI(n<K=%cKa&I=-hS5vs^e zU(BqTfw1SzEE$7P+0%23#4=R@x5Ff>C89qUbQpV~iY*_Zv6-XcYZcfd;kN3BH^}A4 zE8K-lDg)=e<$Xi$&ruG(?AFE>(ja>3GITN^(8qMHZ4oeHz0pR?9p2v6q+zv*jxLeb z*qC~Dt#0)yBp`vjyv4rqZ8w~^=zsmH<@YnB{S~nW{L5wbANrSAxc*x+(gyYRVf?ml z$vddU6v0sDY=URr)i4DJqtptMVjAyHG<GEg7y;!=wEmz-M#J8H3a1?ALjRt0yP2-T zVrIwsoWt{+b?sx(wgBQm`9U)WOW-!)#N`<?%hx;yyBPF?*9j$|4wBW8n;{(3AwZHD z<0dmx8fB5N7iYG!_3g$EYv6({XvDBBmbfG`VYaYsD%#)%vBxJRFGZ<?h)~|zxQ?6; zVBk1Oo**JrV;&}47P~dAja`N3#5lg*6gE9zNg;Hj*t`@($S*r{=ksAL`59L|%a=qz zL7i#C1H83Nw&=?%uyYMKOf?<&Ij3a}*jQ2%W4k|(Fu5@ID{t*qghl|7p-$UAK?U&x z#_tG0ocllsTH%|jD!!z}!E}t};CKNqJa84U9(9*#5*5k3+>Q*D!rZEolB7;snH086 z{);f<Bq&@UQ@Y}sF8MwkV)*b6e}b=b_r=E;cKJD#{X)xIbqjYHD1=&d5pF3n=f){` zu``4IH~B1CEDb<);u?u7TP+?~C5**95HbrgF)e|)Y8MyeB+SprJ37>Y%P~=WnWEF` z%?iebYmZZPM6812bxh3rqk1qt>n1slpumW{rFxP|$2N@8;{lqsIO{5Enup#qfTk^% zl}II34ECyZd@~Isy+xX37-G*7yVmkwzokR~MeH#0H64K!bLSf}$5V6GRXBBcBX1X; z8spn(?e2Ma$6)u-B5%h_qQ3$kW?|;IDgwxp-6$Jx$!eL%UuLCkq^Z}4NXhAPK4;8= z-If)Uk$^&TP<{#iPlF^r&^Om4@~Zwnzl+^)$mEepzhh3qfF1t+%=#Y2`vi-4*$}z2 zZ<KT!;zGzpt%yJNd41z7kAz`Fe&Gt+GQ9go+^V;<Z)hoxxW~^g-rB^foY9xP(X(fs zYNX<hkuH<Te+^rbwGb0Q!xo-p7|^hV8Z>Nqr_vZP`BH8e`p>ZCC+j}J-@}&tYv{nx z)^FdY1ctvss#B`P)<yBPdS|gzsbG@<TRW&`PjVg?)-SzgcM>C2@BcOp-U#!jV}Py^ z?EmtXDgAG+5~^nAwq_<SR&IYIBL9JCNE(^AIDGRY|L5QT+KFA7ub@5+jNf0;dF@!~ zQ|d7=wBeeqNYo^97ip8Kv;v#!Fjdajar=|b<g?{-iLW|Z55TBf0eX3(-{PDd`2z1M z{=~j@rLz|{HV=LKbu{h$y!8nBdp^E15Yqdk9F$0sbP$hnY+}PA^)tbe#D!QTirj@~ z9ZM2!<7hOl5RgD<ly<6Wh;72(PH{4aA{7(Z2*wqRW{PpCR!bL5a~glqA+{PcLcT`l z`UUv_mLGQ*aGG>zWp#oplaow3BV#fnw^jA+Eie!pvy&V}aaCj8l@)fy4Wc{~%}tZt zY=Z_6TRh*4$w9B_PCpf8e}1}%Za;u|h6y&rAUQt28C3wks260d&)=P&^R|b?XF{=p z*Pbp9FK>Ik=w>|^Ws^1+t;4k<R`Klu%(}qrOfjgeXo0tg4_bER6#!^Zox@sTsa%Zs zj$ArWn=ohYn>kh+mF?x@-qOul=IRV8sy^7z_ZzCiwlvB%!nN-b_8n>>c2O5it^(_W z;wzibLzIg(Yv*;Ls&-8~Ok!Vyow8jb5Swn8%<b4Rtd`~E4OlXfq2)6Z1VHl^SS}kK zxYq9UbVyZ0(ixon*#I~&5$Ky3F%S|^70fqPpF+iC(uhsc-W%TrSpY@kF7BG`m9xMO znqSR2u6RS}iBGK+b1Ebk76BP+`_|Rn#Z-Cj9Y8x3`zyorWDu@h@dO?dC#APjg`82@ z)G?Kv&PlzP2Lo)AH)ko!^{FBil2$ULyoA?2)ugqt+g2-?lV<UI@f}&5F7Em01qP&K zo3Pba1`bt~dtHs*=~goG9M{2CH*0gClX?s#qq*u@`7Y*Xm`g&rOdPqsMGs4i2l|vk z$pqcC#$oe#d;oS0Vbr@}gXj5&0`a1;MOJY4a@>~Lv||pI3^Z-N7X6qYCcI-LDA0t_ zS-#KFS-p#h>9Eg$>0t6B@Pl@{uY-0wvHtqNKO%^`a2Fi&%YJPj8JJD=#2DZfRZ!zL z+yxM+1ZhvS2UFi!?M8o5Xx4IMEx<#QerN&KAjMk&wonsRdAM~VeT6qtM`*S0jA<av z9#eig#1alQmii*ww?f<9*8<lKaMIg%5j9r{<)b(QI3Z^gp0fm~n>f6Jv4xgF28?}$ z0}|S8CZ%d^X^kgHwTUjjWubN;yt}kiU!zdhloDJKkNhNTw~cO)O33S5{ZLS-Ux?|~ zi!XX^t&6gP6PMh<cxfH)np~Zv1$KV#C-fSx{Y7H{yV2wl)y;28bm@M%r40V)?7sN& zIXcvfCVL&87I<1G)>iXz{XTM{r)t4~pJ8=5x7Gj&&Zv0J+^+kP!}m)+u1gTu4PSgR z@@400wc~JOST}=J&H51gLZkl6@E+Xw^<z>?>yI_*6J!JRwvEEs4uyHv?(xo;9m7l_ z+3hMlUJQfn-Zl6rrk2m+p4hr$hSff~9*-#FQeIX=yQ(+}P`{dJPLvRpd%vSTnSXW0 z+^$S;Za&-eK@BXtJSgNi<R5eJ-wBUzpbk^ZmLyj7#p@HS2Ww4k42Cm=N8bMwu{K1t zi(*e^(Od)EaDv{A_G$S>PKafA_NmN_r))fHkyQ58h=HmGi;j9KS3GLR>99lHg87OZ zE;c`nOd=~ROLUhY0)q1!qi0@_R=*PWaPn@yvoib*`tS<WL?AXQBYaMOuo#Srp)r%F zSzq}%TiW9L^U+uN$ZV;x;}8p$SE-od(YeJhG+b405C!Q0ocv+<oepS4+T_M*@?JP3 z1SD`@jL-y&2C>sZ3WB>+UkOZz42&7N`z4#7xw{K~KR3D%=&tT1o(9Dv);hu=DSA^^ zhl+NE*?v6K6R@eoc7#1*8T)c+B$Rj;s1wE5BiUgiYAH;b&%WV#J<R2d*Dz7cJ*_Oq zx8yVs7vVQpI_#!t%47YUr(gfMl*%t((()Le(j+52V+8EwnZyV~-NJ{2C+_c4$p3N- zNOMIgQvc?7k2`69FOswH{`{j$S-^6}xLVxptL~RBMe>N}Ba|wNnA}%lKf{!h@JmS9 zUxQ6Q+MeLqekD8omdxHMb48tM9nAXOtD*NaTOmbaHWAi5Xp0re3sh*_ipnQ2|H(7C z?!;6D<FM$1Y5ubfF4;!RXqgq3pR?+4)TCgpnIBuWu>6gFF!@0BlxOui1p8Lv+h=Ne z=s#i99=&{|-x||tAUl;8FEhT#5?^@06Ww(qo8+~WeU7q#RfmrB*k_<OdUKlL{rxw| z!R-jeAOeJRJ3{$aPw9XEw)y`Q)&AFEm#y)xiD8E02ZV$IqN1XTv8ie33+vq`kQb7M z8PQ=7lk4za#!QSdH%v{_x-oTVnQO0yRJ*AxjFagv-evKAEb@F%e9ZSK3+znR`&W7d z-22}9ULSeZ++Y2Aysqi_Tsq<oM>|(x$nys0=_TK1|A1`_`9!@MIbz12CoK7c_!@n~ zkE90E=#z?5^w=yW#yc4FAQn?UF@h5>bu&p_Ivmg_Jh6&6fNE$gK3=U>*s@)khC6rw zPSR0)7!Y{ZxSE6NCqQ?=1F7EqeP+T#WH=I3D`nS0zh%YJWU8tp8@G|6>&4sQCI=&# z|K!MRzu^Qx9!YG*yy8ii%{0;JU&`iWIA5QRmxOH#q{#EhcyO~nJmJDk*|SejMjdBV z-I9yL;wzR*BV?iPBIDrC<r7%<myxv^jIlPaImX$~p*(I6g3_=00kqI^nVO%x@i!Xk z&jyEnEae-s+N&zCVS&Xj2Ia%X@Q|)|+ag($s$&Qik*tgW4f|H~pAGS3G)2Q_<l2C^ zF>#`bhFWrAD3mySO%P{1PzwN8{3r6mwx>A7vm!Q`XP9)!_*<GXqqMUJ2#1?0D=&h~ z(jLF^lEk8R{gK-J=(WcrJ2Dl4J-p`Rq+7IX!Al&*DbC5X1woQS(*TSk<W-tyEFRg5 zg-wzvdC%<lB3_9r@g@rTjItp7298<s-wO3uZ8F$9R!mSAU8ByD8j)3B``0^!<CJGH zI2NuoiOD~~cSN@qwb6vqsJ8!1LSNcIn8Q3;_@oj3Nxf23%T}LOBVTb?1(WFj6SHQY z19wENGlq+NGTSoQd}J;rtXb7bkGd-yop$-a57(j01D{I0Gl&s(!T}F)=axiZ`QVhd zLvg4B><~k7!b553{Y7{vG>|o7fmX18gjG=GmPQb8%cD5TO~z<Y`l7m8npLXYVRh~_ zb?L^TIrC5wRiow;-M~6s#vSWms;BIPx+4p-V^kfIX%S+vsZ$qS<vcQ^suH9F3vXfB z*5R+u_7#5ssm0x#G`03H<sR5TpLZdag`Ic4k<QiBcQpXSCp29O#6W)A7a<{f7z)C5 zdV0ulgN<~6oY=wN2**X3y)Y=J2KU;m?W81gR+e)+C958}OjYK0t&Oi7;+{GQsgJ^p zz&_QWk5)VEd*f%N4|KB}@L?DiU0Q(t5v&a`Cqtwd47MIMrj9(bO)QJ+j>^;w_S{i> zo3}3MoSS0SeLY~!6Pk|eDqHashS=a;^JgNK{L#B+y-{4vQsqoZ&f0jV{Ks^Py~~N8 zkY*vP&F&ZKq%wWP(;L8JZL%vdeVu}<I9TJL{leF+Hlzfjk4&|Mek0eczckg;NF%hE zM$z5!Zt-M9he9aSpFk~)E1^V{<>h6PEP5brN4&z*=71qospy#Yo3-_KNyEv7@{_Mo zpPo5JhjcKE36+G~m=wl&d--71!v7G&9HIj73MGj=Q>|-=-A|B5bv+?pD;T}*3Q!D8 zgaudNsuinGT4TNup76R7-d$BtpXS<=q_RfLx8o5-_yuGHb>IK_7?`MRpIA|mZ(GB6 z_GGw)JkboB$ZB-45|;imHL)47IpLEOZnw>m6nXN?rd5icj+~T%c)owfN?><rD}?n5 zA4d$lU^9%8-5CD)rw2;cYLwshQ$8ebXkmceFKN4j*fB9~pxZD?pN!<tSq$6iP}^pt z^RGb6HeIPfN^WucT#D>@WE25SQ`*ECxyGeIgrhyMDm!CIu9Ai;8~ZU!PJlC=XIql} z-hS`Xee5+2neqVLpNDTA4m(;?N-(u>k=481G3`RiJQ2pMSkF$n^IRI5a@+HD@?h3l z8irp)o*HiO99Y_OO;C{xY4+(iiA8aY@zcK=a&))JqZm<|c4!_mFU%{pjIROtZkTT+ zxM@8FDMV!{!_ZKiEZSLg%P7{FdWxTD3&V>ipB+;@-LT)$a64X4Z!%P}cyD1i;BKhl z_sBFntKc#8r7+=%exXhbciLz9>nrx!&!|BNY&&C@cezuAifDpSKnA0Jhy3%mg72vF z)$SEU3BpADS7*zAC}^;<|08IC;MN<G7{A@>7<8#W6Xd$qkk1Ytqlsi38^bW<6$(eo zfCq?*McO(<g~j3M!<;oLePDioPtpAZpJZoC?`B!}vUH|B#;vH(W+`bg12VL2IB)g* zdA;ZGN99+a3unQ6X3pt9c@h1Fp0KIOoIaRJi<Xvf7(i|Sibl>w;K~$}rzaoUU_wro zwFc*t--CR}FF+C&^Yvn(>Dh!S29`m}><B|ky0m6$C|!y@Mm&m0^0PnyXC=h|$5A(B z)GL1RUntSx<`6zB+#D+DeC+Y*l&`K?<rEL)Cm?Iv`(M^JrgS$61D`quO4?!0vCeLM zE-Bb?Ov#Wvx8||=`!h?q9~8e)&tTlyHCNf)5Cm=%<dC<}AbLSE-!sB8Mgu0^Sgt7X zL~X@e;B|&uvLc}SUVimBw%^R7XRlb===L;@J#n6yxjeWqDZBS+3w!YAD8ZUw5O0$% z)<*Z)YEGaO!tF`*S>jbTx`|$j?3JZ+SUo?3;_eSLv#Ffw4VKDXg*XR`3w}?e1vZ0q z3^RjcPxlu+5_X*ll$Wc~jqn<>60FH`yO#ht#aQ+|uEt3%XYm8m8b<B_T`XjI?e&;p ztPaM<vWk++`XdjuA)Y-4ZcIpcy!P2DLzMv&dK#_e8wL&b%6#1ccaQ$K*BvNBLm}yV z4#b_HR@bua-v%><KoS`lF<d1KHTF~DTd5Z<kXIL!xa6Q)Ork0T?x~&zoSm}WKmIm3 z6?!K`NL8{!%viA_$zgdgbEa|?O{1q(n6cu8(DKovX4d0@*PF-c@MEc^r)@Va7-x1d zcOFrAXtHf+)F#brup78JCeW1EHkMoM#ukjMSj@Of$tcht$(7mYuxLN>*eJXv7;;p- zE9iqOX~8{4Ko2+adgCMM;r>{BdvNIy%TlCEoc|48yA!_Wk!mRl_ln0lXcG^%JrEkl zB>2c=70-fCQYKn&0QJ=OM|i?P8Wr2bTl~PeCQb`io(@_XOB-Z|aY|7__(}Fir`lNh zs&zoQ-6~_cA1ZBu7TS6PS4Ee;`nge{%`UPz{pB;`CE;!Q;Ah6GC4DB<!rcqywt&da zV7IR#*x09gN^=txt>avA2b929N_!{x=NBx>wjk~9=+Mm}+GpiGL3twL-I)Olc`2i1 zRpK@xy<#<&zG2LV`6&VR1K$@2hDO~H^?a6mn^s9Z0v<2T`ay~?@a$Qwc_jzoBx(Bj zbx|8H!y6PhZ&)+OFLv*i27UmvWR062vwh!@e9yz_&jpKEf-j89=GB&r=Bsy>1Vtq9 z%eInBk|)rf0m-~iF$|vWg(@S8yOKB#Wc!~4t4I_Rsphepz8l^!HC~bV`jANwRk*4p zE0e{lZw^{S6QOru8gC9~J9f$WO*DWQOu<<4%jw;RJ%356fdaVOBp^AJ>0kO>{=*!~ z|59g+PAs;p4(9RML2oHe9IG>*I07aC2Q4J*=ztP;V4qdajuWrq7txP7=*C7_-=`mq zmut2|($tJHX2lB|zSHU3SFevJAoqHr*1~Lv4PNzuBm|d}oOa6+YtbIk)i-(PNz2ng z0mO#Znmq_2$H}q}k`ew9GT==V1%pFM9s_6d@T}l<5`>uMa003B7Cj7?1D5UGgK1X2 zRZV(z(QoK!H;1iqkRMM;hGx@qqf!mRbC^xSVu6}ZaScndZC`pIA;+=E3LjD~CF)lP z1B)hW%cv%9b_ON6W*P->qb_AILMoOsnthE9gKYDxZW8!9%x()viEft!GbFbtJ?hIp zu+P{Qt)gz`pNPl6t|uQDCDFoZl>8cE5|DRLW#cK%)>Jc!O*@)xzf?NDajez_ej4PH z?`^WK-gD<o@H`qaj>#!L2Y@V9Aoze0Y33Cz<$UcahWci@L@T#Y(N6AF57~2;JkywC zsj=j}RMsw0XIZv<Zf_s&gsG(8MjY7;s5AA{_P9_CH&Kzo*dmB^r6(DRU%rLFC7d{2 zj+clzD2uVsGQ#1`<v6Xn)TorLdsFl>uR<+4)!@0~W!!6v@yjv`yOLaH2{r;As!00p zZ3;q~oIc9Xk4PV7kdGiMi7Yr74$R`%!`@~Xv2!*Xd_T-y5uKXf6=8u$^UWD!M)(3% z4T#7{ty*_8G$+u0x-McL2>&io-O(mQ*rutLq1E0tw`2l#5y|m-cTs(>p|9-+eXSYh zb@6_`#M>L1hATgNv<~@rmivW+N<T)x6t|J>DEd3pyR;-sS0m8(#38Fty#{(0<1P0} z?VK?}b?kah(!h|rE@+mj(N{RQ(ydv+W&}I9CABB--t3NzREU}>f-Sfg9M~|J=g%Rj zZb~Aq4gIEt^AYu485F!33j-Rpo1sYc)>Oi`N|%9~wk!xr3!PsI10vjt!l@GYX21U8 zODHx>i(%&5CeE#eq91{g{3!UAkw1a4MI1IApG5b$Pk%i**D*`c)7E<?A-h_Ny>=k% zgDD*)lo^Yd5z=gNKm1VXl#jdnIkJ>)8Lt#CZyD1jjBKtlZMiVk3G?8$y)tyEMPg&l zEnDfOpzMjkUwgH#>7!B}q{O!VOC|O{y)FFXNdv{V6&Hm;fs-VL%H)me3(Ta*_6|Kb z4|gtdsG+pVIBBtm6I*xsA^S)>%_9mQ_&*0<q}l(n;T)uE6Gu|OuNMD&nB+NmpXRbS ze*W>L=M(*|4Aw_$_7LGFhcdhJcz%=>IGeU9vyI`jznNjqXN2PlVwAc1nFFmsg!FQ3 zk1;ecrMkwxT&7UOK4z_Zu)1~YWeL;!cBPbfom0o}K~g!tgqY9AiluleGtfC1xDfOW zwCo9>Qn1NM;aVM*x^j)y_%`;ngB%hWa&+`6QOeO_bCiKCLu!|DUh1mL(w)yCiKTjO zFCq}hs^cZ#q0BB;Ce&F7y|X_EijC9w!HLS|iKhvP5eiBisR=X{j;-lZ8TlZ!ntqO} z9+A89F_$+n{0`Tx8oaMM8B~;bsPVS%P1Fz<HYk5uXpWr$U(u;>K$SK->oId^I4}Po zxxMsSjUcGo9}5iS%QRF(BNZ@!i1{-7b+;R9%zTx()^MK`3V}YOHS~SaHNx}PT#IcD z&3-Uf3ocYls_kw-c&LZCY<2}=3C5}kaLqY{1>u8^YCs&DN24_{cn(SI^^zOmprjfC z_A=rS@ee%%LYr}!N%qq3Vvf-tjgvn|3n+7#ioujNbZyRlpLHK~9Mjnu68X9Wqq6YM zuzQulpE|@zV)>r!iaL0Hx$MXw%6FH<;~*Sh=iETT5ka~On>ax89NVp#J%buHf66_Y zy+`b_b?1flMeeE)iucsa*$S<bBNCv!2zyvYFl`b{TZcU40FWeYXd|H<mikY?xguyf zCePl9f8bREa_~(VN=XklPv<sqrnc06Im}t=MN=}%7!U%=;lgX;QSQzQ;Fcc$_AOLb z<wypCCVWSrOY#5SxA31X@qY*f$$up~lu>>w(jX3gg2Ye}Z!0U(1Ea>K`5G7LUo<KG z*+9&jK7jqKkY*XwM{z3V>f`9+Jlt~-#VeTWouCTuLhV9n!Iimny&=$X^6<WQ!t_ZJ zHF3`02$xp!9K;E+d>;H}0E}{~lOIhROhSM}CYOiDjb|p?BM~!{<Z?Yh6;mkvp4ca3 zLBS&iP~-BXPu)It)7#)2okwdz%cv_`YxiKn`<RZ&0T~(UZ8J7=*cxq95+$N3D;qQF zE0g+`)RtM*w_IB7tby%SnKB%|DF-YPb%3^O-F0&?phT4%YgDMBggN0`l7^=AcM-wO zm<K8MCSQdqp7uO@TlyJ5s}dKk*9__eG1DPB|G{ZWda`iHN_VqsXhb@9qL&=^T72T9 z@r-q479gY(N5S+xBc7~&_Y94aNx3~QoyOJ9JC%w+#m6t$==|4Ns#GMH&#TJZF5Kwj zh1d9ER@M~VV`F6`8`Xs;xtrJ4_!?|?X{5Fl<MnIpO)-luGdeJNX=;(y-L0}Pcmxh_ zj(jgXP@6xQxx|nN9u8}+a2GcPgWg1<&zW8(jP`W6Jg~yj!jgZwCKsIx7s$vCL?E<C z8l64=cAC=OsgXefym{rpX|HHbixCCh3jn*7|7a6N>w0e%DqNKxi}}|@TPEe5@H@Iv z&hXV`87aR9w_mL;5&<Xj?&j_*^M`6|>3k0tuz7!~?o}@HEUOG^Z|p@^dNb1IYW#4G zniW|2bX!prIvjCTMr=hZLs_{OYj`blo0q=q&s_h-l0^TOU^ap?>>^q+s#E+%E<rHi zCphGbVD2%)xy*e7xQ>kwiKBAAO~4P)@1o{Cv!i}wqrY2M?Y{b;>RPTiW^?mOKPPsI zAR{`&Gbz?f<{~2a1r2VC;L!`y=GtF;Kdu)x4Yf4?t`B5n${(B!)HOA!UXCWZV|0SF zC~Mv(U2&;v7EX&O6Dn<G`}!1s=Jv^Vq=9Nsag&jhQH7Een}?tI1@qhIRNCtnP#KKq zf0e-yZZgcIEyqR9#n#e6GoSk5=RZc^i+q=2l-&~g>vTDd<Tu6xoi616@^tz4m2e71 zj{h&y^Z)OFuS(m~5Mv4VPuC?&<`$|b@hF^huRjU&=QeiOIe!sw5@He6QjJv8FuKew z*M>;LCUqN!*!2OtnsP0GgEFi*zYU#rSC!6;SMIWxkzG@%^!J@f^ZHDBlEL3~4&Bek z9W~Dicc&}vTkwV%<>SL(dRIfDdU<=YOa!g6ihfiROZ9pOLrtr3(HA$~0oBiW;NNE* zgR(ZMskp|zH8{2oK@+xEw<-)sG64_ZkU7Wh-L$Xbjue@`)oH`<nyn>7SDoH{Ym;l< z=xoJ*_HbglLO=C0diF>DJ{TnU3zlo*&H@qnl^J%U%L6ACX1SpLBQor}d~>Xghv;d} zLq3Mm*zJNKe~?92T6E9&U6!E$lZDdwT_CW>^Op2$!a-^m`wM2DmwL)d=L_H0)FVXg z?W7|HCbwO?fbIAreZ)UE`<8knFV~(oN_#im^j|Drln12X#FlX`QmbO|mZkzMH^XS6 zs%#<}Q<}s{8Au8$ix|)t<vjKC;<iw1VWIcK)AE?}gf_>`;OWYx;~F?oWO1xmpF~<V z3-383`t5GD@@a@buf{J4hH0aF!lkyi<$&nomrf#Ew3!{`hw=S(0JsgfS-1zYS~E2Y z=8yuRIK2C>BtzXkwUBi0lU7<Bd#rv8vSaArdoLqpTm<L?bvQma=%GC1ITk%y`e?BL zM>*|DEy8?}V)%FC5-0~p@%O#wu?ftqd(tWS=sefHT9qG``euVEkQyN#3A)%;aKS0i z#v*G}$l3c}A*U1(yEq9rjqgPRnmL1*juD0}AO+USS;F^++gtlbCu7KE>%lN2e@=-^ zdhvya05VAU<?sOa3Q0{3ihFC_>8z)@y6W8AvUA6O08-}0gHgf_{ZZY+@d2oo47$P| zG)_3JV`o{X=+Fh^Jc}k_6hCV8%xy9FS;+9<*l{ruFcIhoSU-uV(OKizur?K99Gb;* z01G1uI8c%ouL=kll3jULz@PUaARVUKDar7V=S}bgHA)GBsZ>|n6k{O|*uBkrZ1Et= zIv(tjDTo-!2x8|-s_`z;Q)2*zM4Dkt@EDSXogf9of62TnN>*XilA=PME0j9UN5K>m z#4GZPAm4uvQ&hG2s#F58ek`F=Kw`2bY9fFis52H<#nP9Bk$oO$N7`>!ESh<m(3ggB zlKhxob*br|H+rEEf5>j}XUpM&#OOxmJ)C{eq|Y(3zp;B$6*E06;SW~$L$M|ODqa-y z3M=lg8M(oHwD9HHd%WwJYf4kh%I+RG7gw?l{ge)u!rmbW7vXEbG~=kT<luaMGXBIV zj#fu$;-~C&CxV-Kg^{=H#Gi6uIj9&C@te;bF0?4zk$=^?`D0j%7>~oae;=LDRjbe> zoL+7&ch7(~|3z(}$MqL<$=M46ABRu%LC<QDqj1I(Z#PO5QypMLbG7OK<Co6J%IW~^ z7{)a4anHjrdrM)}*~?;RQ=EB`e&uZTSezZh7H%-w=UCgbdm2u)-t=rdFH23o&E=@r zv`9tdXimNP?tHw&MW2wEO3Z~r?a0zPt@_)NV}2QdezdY@23}bO_!70ktE+1q4hO&3 z*qJrEo0WA`^>BHRD~F;=(Cuo`0fL_BXIiT0N?t7Z%GCY&B?#9rYR%k=aO;F(q$Tyd zjLHhqb}7ur*lr8~S+%nMQ$Jcs0DxL9c}{Zw0J~L76A&`O?wVFyd|?f=H80n0&tRC{ zTdgW18{|4_FON%<Jvua<J=nEIqGWOMR-nfUKeI-1Yak0j&x;#mpic31|M9wbO&-^m z-*~q6O^aDoql23Qnjl2g<k1_S5Q+^OZs7La77GqCBoX?X_whA+s9&W}cXbSxXBwHV zfPT3$`^{@m_Uv!d-Dvf+y71TIWdeZich$%Fq9wXjS`A!=zS?v*0tnBQ#moj$-!YqE z)MW1n#2VyGgb#*9`j*B}=8^dM{%+q62RbDzI|-&=2xwjh-uq9G3HHstQio>q{(Fzg zJ%z7=3)m^_U&Xy2y_F7a5~Y?D6eRJP^p)&<2kOt?JUQSNo&~wCqH}bPB~9X&r8i5F zYx^WqbWOGjKkI8XQe-x}RO}e6>!f1b7Fi~WQa=6Yf8uBLMRA>Chfl-8lF!a~g(4hv z&owO^Ay~shz~ioDc4a+Okyx)X-uDO`lZoD;w>qUk*R$UNSXr3kw(3T`h~joQdz~Of z4rMiB)o>oL`I{!o@J-fcfJ+07al-Be7O6lkYuy`!0eUs0r0IU0@E$HA7G0T1=1CFS zAdL^?Qn7g|{(59~uIKV>dyOa{(<<e|*xg)}zB?GN4mp_TB0a$3bOG)sf+h1$bC#)# z?`Q=61A|mz3{@!)@?mXimF>@aF9>Hl-i`ztOo67lnU7scGij{t?q>{RyvcPOtDIbD zu(+R}e7DGJTL!#le>QaXC*w9m7<V|&qiuBE>l9CL1eR&}hkVK!P3A%Dq;8w&H@-?O zyo^1_S;*`%NJ%6UBQ@fh!MkP1soK5bxf1Y6!Nha`(yj+q=G!?|Qs45)we+^(Rv#|^ zbWitok2lyrutS$2&>C|k*VAK?;9O^cOD#arG={70Z}Ie^XE%yQcSJK3r6LpV1FI56 z=Yb(N=T<09w_rp^18h=~OIk9+U{lm7_MVfs@Mip!-~VE9z(m$<<^r#9L@vg|&QTH9 znm=<flzl@_+eWyyLY7&pX-D6Vu7m9Z_bgU(k_lcd<?jHz;c6s|gd~rMoXPq|MbZM> zCi|h-Qvp9fK<)m%g>1CRd04#)+@otY6u19MCHa<}&0ULL(A@j|iwx5FYQvn*uDGD2 z?&gKV2#%;pPn~~^K&G^-<C!EMCri|x7ox8hgNv;&QniVWiy?u1FZrf)>~^qKD=wQ8 ze9T}~>5!d#LUiF)a8qj#_--~ge5Mmo^DfnDMC5FUoFjJiFsJHHwBn}N>DNx-o~~f% z8$2TRgKoU9cNM*5T4Fy|R3*dWB0H(_ljAZ8%&B&^!{!e+6r+^7&7v-|JPD1&aip-n z9$SoBMV)iYM&w0v%4*P?z3J5NH&+HT&>2lcY}BLu^;M2_e7_^bM~Mqw-bkM{b{YMc z+4d-&Eb_Ykv#b4>8{79`4twLlMU6uP^WyQB;RHr`<%cDb%I<ka4C-Y`+<@=|!^H9I zAwLUjB=rYNBPvR+jN6m~Qi-7mz9)VWMvCZ60`(2$_Q1(vYN*`G&Gc^9qOkY}X*g>X zY8siu!aJMdT19z=XXYRL`e`X4l0BYZ$sg(oFP>fYYbSOSPafPXr;)e`Ei_#(+l*}a zQk3&>qhqwM_*+hS04#atX%>DKL_<^K`K@b1x=yWTk#wHYHes&f2cGszbtfd~m%`a+ z1uo_bfY&6Op-Wa><?Vwk3?OCA&y>(h`JUi8sAe`+WH!!N=08LOF#JeDIlZVJ3E8JK zoLwd1?+Ewj+D~~WYXM&k1-rr;(mU|e^xbzckMAoAeGvH$zax2oUmqx34(hH35srtq zEWvaZQ10vdb#)EZ)I7f=KMM9_3M#w4C|3<ijrWdNGdx@Dqq`yra#ZYzBIF@KAIST} zzA2bC`Tk%fOyWX3+0{F~hEmIP;LsCBJgUlUbiM)C$jS5>N%P3yg-c#eH#Kk%L3tzb z8$`gAJ|~5*P!sf<jBwp$=Rgn|nxTHSO%C~i{w-Y{AVHL(cygaj@yF*ZhH_^~rdt(J zTZRaGm7kG3b{q2>>i1vdN8x(3u})N7`t!y4ghxJVjI?KiS#B>crN-M1hxgJp-isP) z6K?i={63Q#t%y<$eM{0KSvyGXS1eEAgx3SBGyXHBw<mEu;s_&*QN!42{!D92-T4;o zCRha;MHtqlk9AQwgQPzmc+0+r8>BzaqIJyBv-noZU!U$P+!G4K0~o#!Nq<ds^?}Ro z2pcEdSg_in92zQ)ipK&@twryo5mtsa@ST}#L?$^wIj<(vCGZb<Z|Co$ZA)dBZY8NG zc88cv+^WW;LkIg!2xcUc&TZ(DT2+nekEf8#OxzF(I>Ry;N(sf!lF#QHP5=J#*V6*! zV9etZME@Kh_*bv`|4?N9N4HAWv;m-N;`pTm+iJC7Dywx$Mso_2?{>kcDVJ)ALqgQ7 zQfLo|u104@2X^T$mUr#^1j)+j%T_{V2ZmC7RUh+;??r4Mv$ufnvOk^O$cp=kdoMdI zcJ8}pJhvxu8eR`}HiSNx4yD5NuY#VU`VyzZpIOf1=PGh%0belA#U!|+$l#=;Lax$K zd_@T~Z}{19KUnu!(coljg<$kIL6x9t%25Ht2)E4C!lA*svVF|*B=mW5@J_1y>!PL@ zl|V9ajbR$x5(<cO#05t@iWgE$0kmIymBEZg_8ms&gll_#TUX0(fW@R{T_=X6f;FJW zG|k7fe|-EWSnEuy^QV}kl(ExAwU&{pJ+1lr1R8;qNiFk9X2LDbCbh~PX7swNxyJ3J z+4)7Y{)-mWvE`=VV1{^^7~D|6K;0IB`@CdJi+UrnbxEVvGK*@R`M}vcA((Vw!+fT+ zl{xEiyhGEa(UcW#_=VL-t^E2FNsbYvcca>J^m(3CDxV0tfuuW(hn8r7k*t;gxa_1! z&t9uv5ul#Uqe+JPTP4XB#+;lM2cdmSZ9xHRp8%POxagkMhU00c>$><O9GUlqDP{g( zNJ;0aug0>cybBMg*N0EA<Ght-YeT4XMB*1D8Aro@)-?k+cGTkU9xe1y34O`=#jMJy zFl(y4lSl23LtFL;2zPC5zUmgd{2y|6@AW#X_v)4`2Q+j8%c})^;2NUCr4bxjbO%up z*f;r6scM~3P?$A_Rl)mGnku)n%jF)3h^*7)9)u>e(|er}@S>dok+h6^^-)~vogpn0 zl^*iQ4W_Y@H1jJQ*1YS|IZORgd>uSCg<8b0nIJZJ{e>t4nbmO|n=46;r&w`^;iz4l zav>*Pd07}xr>Zi&6u!&@`nuc$IaT82T25=;e12A%-|?xFz<ieNxA2gpPw75cd_}Cf zPoR<nBXxDysL;R(ZN_Z~b8a;r3+BcgISFrORS<h|SzEBDJr)Apax)hbS2CMHV8^(L zcg}{U&PphGFc~JBXPH=R1Bu~Cz>^!S2;hqoZ+#gCev^R`o_V63O~K_`N=)`hCNEzm zl8hEtq>r6pe|f)t2_ltXt(08o8QzoLKtIPND(nd=4R^ntT=QkHi1>37%1od}=Gae@ z7#t2=4cQfW_mqxeQkSnYGHGAR(yU_{JWI)9axi2NiaGcSI%>`0#}tkC{8JP!D3K#v z0l4z2M>;tdkc1bX3ux-Ri2{6TpXI^NVjE#wh+hxOS@laiHt^{z>NDCFET$fQvevyr zskW!PK&9;zavKfy%iph$UZuAd07rar_G{v>-5H5il$<aQ^wItw*4{Bn^Sw(J%u3s~ zZQHhO+g7D*+h(P0+qN?+ZB*jsIq%!Ode%&zJ9nnPJ?r`W`|lllN9>68ajm!-CwV_` zlU^0q!T`lbX!&p#_)=~?Ma?;lb_l+J#jQ$Au|AlWZV?1A-?McbWZd@PUR>U>ZczrU z6T0Ue{u?ZBHz1LtPY3d)oet*^ZRy?-D~MY1TA7D5Cy@Ft%J=T6V6{21U`kLhcJ~5W zdEA#Da>rQAi(_u`-lwpVt+p0toeq<9aPm=w7pSQ3S$r+>lkvR;o7x(CD8Pji!wS5| ziQE-x*O4x$Vzu!a8C-7~lT$|~@R1Z=d3k7Z`}jTGG5QEGh7>Ud9B*m+2T}Y3yo0Yv zyQjbj?|4B1MFfT#!cqoNI|h1v!?E@^Q1ve;rMFz7H)Nu>Xw$oPxRiv?*^}4kb5<`j z6iE3v=XL%|X9E&fm6@A{+Y>6HQLIK#9CZCU)<X-2o!Bi3p*EAY=xhqHpsH2zDZZLK z1Cd_UYEr+vX*GQw*jgf_JZqI`FCSTGBV&x#R=~rtX>!HednzV>+G10ArZ-hSf92bh zJsW%}GYaW9`d&SXa6ci7GNh8}a!fmY0v>RP)u4@CBw(G0*5DXaO)b8>(sYoHWO$Pn zRF1%2IC~Z2(%3p9#Ur!TQE55FFW&0nd$uMNsp@9dm!i3&BCY=5J~ySsbKv?`*}27s z?-nSlid+}iV^@~=DhcK+0aplqOVk5cFQ(0;U$Y|TVtB5)fV{TaeA?XdlG>MOCFA&D z%V=Of{}!sl&)Q*wehc+fq5lWF%zu~yDQl@=eM{11!8yj*Q>40-BU4Zp;R%%%*EPu@ z!C6`SQji}U#A6KB_n@s9Ee2w5`uO&k-uQJ~)?7V2%D={r+(;Yd8x0)BsyNKda=Usy zE_u9i&Axa%q4hC$G|+p=P-}J<uxs`+;(3`ST%efJl3NKF%m^Z9XuSPBpv->Z*O@=j zk)#l(fG{@XJQZ;GcfSvY@Ov_pQTY4Umo8a4nMnnsxJ{Irwqh&m{2YMcx#v?TDYU62 z0Qk{S)C7s<(=sQ&D4kr{7o!9h&|aJ6Ni-W%N`zv$;?~Tq<3#DzVcC6rrMQCL!zffF z-^Su!`HDLtI#`Hvf_k*ksIWIF{95C+<KnHhlFcdxXpEsh@R(^#BI(_xcTuMW+mFMh zX{oYgdkB(YOCbjpm5pEKw{&YI?oBfLh5tYp(&kEhB4dO+{h-LYbOn_$$MBb{UdPU~ z?aQwVIh~fK>W&J`bihX1T;AZpjiNY9nV!+|z$~rj-|NvC1QK%3yKXMM)^?&!CEMo$ zOjQ*oGtTSsZX?ndUaV&cHE#j~3y&x$Hef8_nXI4;#0vEeP<m2HHdXpd!<Zq~-hp-` zwj1hVBD?(z)qS;hj7CZkk32YS)iKEsZeoT5!(gk8x2W5w=-wD>!|1~x5vA$i{`X?Y z(!18!gHT!XnrKJ;V?y?vF*fM3M>UGiz{B@QVvk}Zt)-LH(YR(py-Qq2^}WT3y(UeT zB9$^bXmO&{XXM?*>|16zEA9p}lX+30Mwei!q&>4+C&y{(CwDsS<F4r3^l0jvy<$uG zTd%k7kJHx>qM)fBOR&A~Z?E-i9xAX(j;&CIG~7Wi!Ge%xZKj4tM4iJ+wphC^S%GZ^ zYub&B(|iT7a5vkBKNNckuFVd~i-&kuKCy`SK0+ox$FE0y^}NG2k=kMBAGwVY4|ODa z@qXQ;UF6(6$br5_qW&}j{u=Cq5?4yiw++%I8r{QrE0&%Oii@Y!PdY`TC~ec*pOBRk zPie(UaIAL+u)6n%QH8#b+Wi{N7u_($QJ2_#KG-BFrIb6D_3QIcH6Vnr&+ZTyM^1a9 z`V+c*6WuHV#x*dgn<qWUAWi!1uh*^_Jhrd23g-TJL$_dR?IKT8(2Su)zCU0)tX*md z9a^pbWZ{jR>ofT{wHmmEU1<FE_Xm9hM%C-^y^&t|$Bp#=A#D6lan!%By|g$@(2Xe+ zkkMF+lg0rGstWw@^?wj$)-F70f`)KSIY&IgSwvwvKw#oU*^z#dAG9rKTCK~QGd^eK z{Ka;%KCfKc?fm$@=!$TfRe?5W#U*MbX;SdmRGstVB8ZaUs4)agq{L(>*4G^GfHXzk zGy<2+>~}Upe~<sP3F+<3-iMZPP`YW_6bRtT6zwOJvf7lzTyEY=yZbqZZtpfl4TRok zLeR=&hp|RYHlfdLfp==LA*-b=XJ(V1*?$y6Pt9Wxk<|T4IAEqE`b`CG&rt|Ew#FNx z$0`Gx>Ug^3)y91WdABkx;q5TN!fY`LYvwlCL}CTNdza{+a)_`8w#UicMSbTdSMKr( zZ8?oNmuH0|t+^E?GN}Y>vrgNcY+}BP0PJ%yS7F}<SE4eyF5^~_J-N>((~QC`SsIui z44G>L((zG)>43EP4oE`{OmQSVihoBaGnZB-F%xNZ8=Pbj>oFg#HzvjYln0$1rU@%D zF_VecJ-VvNR-~`YhnRvqW}ZCo|2DdfbT2c2n8Hk{E7(KWZ{#2})4)`%E6|q_Vq0cu zJRq!7HZItstYH|OuFr(VAxn~CdQg|v($l50K@oa*K!(;~8Ie&jW#2J7jef{w-jeak zok00rbtL3xrRDHj_t|1sFyLg1#gb`Cp#rN$$jQ(=GO5;}Px30FW&3;v{f#jBy7Ffi z!OCZ(ry>{R`MD2~il5ark4{vyv%$C?4o{<=vs+VKNuu#Q<_F-DKQf-?8MNo{3iv`f z3ifOWRGb<v4aPTTT1xCgya5)o_Xqq-YB3R2U(9*gN93j~Xe9z5+b(aPrua7IbjNG; z1nO4Ax?D#P%t4!!hyM<er?Eq%n<l|GVb6b6E=V(3P2O+>9H-FtMDKS6*lYO146cY7 zL6I;5sZ^?(Vj6G8HyISqGNTCCB~m|T=+H;5Qi!W!BSY|^55X07{#7a$rshx>)+(Gn zs=av1e*uOWldoduPGHm&RDozoV1(immSiSv))R^_<VR-Ide(*YP@jkpMN0QG|8Fj+ zAPd6jFD{7tAHO`o|9>}M|7K;2RdtlGMUZ*A^afy&2;c)U!2<*aXyby-p}(`u;lqIu z`Qw&|VH>6xjnnc?&EmP=4u9T&y;y3Xh$pMQS|;<2-#uI`*E_iRBa*k<x$W>iZ^m{H z?0mg{lKC-oiWlH8S*EEBWMOv84|K*<s?Xj6=v5pQ#Du;`4kW~gsW0aniHsO=D-2X{ zYAyV#*|YLr-aYcq8p{Ope*p1Jp|<1Gy6FrcY6vbkF<p_1B?C#Ya_wUYOrQgKo1V`e zmsaX}oOK4Jo`E@3z_;(Z>IZ^V?kHGvwLUvU3Fxin6w$k4pNABLI^TvWw<W1;0aldq zI?hjbk#3P+(vcTiv{LePy{)sm-thMk_l`#r2kvln&{x*4m`;=F?zZAwv)Pz3Q=72w zR6p1bumH*VN;nOt*k}s0@Ye&S15zINNpoY<LZ3dt0=oiYxWJ6w_7K8vJw3q${te=( zQl<WE%<HkW;9NOVd!(FMr*&5^Cr_nCBmw|OiL4}lW*MPICU7mJ+PmpT#YbXCQ)arv zR3<X8Y@&pH?QZ<gh*|+_L4TRwoZ&6%EKhpZY*A}|Huq9&%LFHQ7gbS#6Ns!zN$^fo z2a(~2o3JUYB2b@ydygl91Ke<m#AIdh9`Hk8`iXm>@|)T0BDC~`zJ@<;AVckrrcJ-n z`7syeiEA92iSJr7M$NbiZ%lt>!fKT<ZlDF!^R~wS{FL>ERT1>t0Lb5M)+i5d$HLum z7b6Gjl)p6O8YXQOHI2Ii(o(!CWwUo1&cf#HxX=HAMIH1m4)Uj%P+u?j6*~Gz%?~Uu z@61#R2LD$n?c7I6Ti^UmoriT1voxlS3ECRv#2Hifj4_dsc#wtkI%*B-<ud8_pR9nF zs7QFDnuI;eYU*tQ%w8Xla+iQz#Hmtx$N9O4rp2ystd>p{hqWwsLH=~3d2cou)z2+C zwmfTWeEM550Yvb{H2!d)Se;{{)p=jqw1Aid6MBtUfoGr=3T8o?wke|x+7_Ut1s?ZN zk$}&1^XZsx*fbUJTek28qR~;Y?b%;R01(p`81F&a2b2LdPp(VG0Mi#tdy}e2(-*9J zld{5F<X>;IGnv;4ZwL&;96J-xI6}sXw?@K@<%0|b=}E3p>Lry&=(m&ha%vYWi0PA5 zxIKaoz}(iaG|WDch0_@B0nc?2KO`~w5tGgZ@RQ~@BZKDQ&xD06(h}y4Lif`P?veK2 zLFSnev3La>U*S%*P%3FmCaP-<qz4u2^5c=TIf`cy1Z`$BWjtF%2HN7r#Y}oBlbP$$ zi=QPi2XwY&8FBFxBkpve9=XDu>7pEf@eX*49lR9@PL-tA&Q!cZWN()5M)hXf!oHx1 zh-Fl5zDypISaTSZX3l<TAmwdSR_aRYGa4^xnJlRos7#PVl*9i~l6H#OWAcvK$j=6+ zDtLEF?!c-``InD2smNLu=eK@w5AuHy^#7-`{<mJ_TN2ew0|SFFt^<;sxt<y12}E50 zt{eek3T)slz0m|LI4_}8_0_NU4fp+G;9_PzzkP`$N|7g$64Ea?*1lapTj>6rT+iqM zB&^2e@A^kslo3qgQ#6JedJrEl<czvUXkh51CDPL!GC@#4KtcC`Y%OMsfc_+IpMY0y zhRn(*tIYIna7;RQib-KIFQv0OVlh%{aJkjlfM);Wnf?P>a`-!5)!O`su{8V4dYe-* zGDU^??|9XU%<p*BDS4-M4S6@-<QGK&syST`OI{Ii))h$ThIrDEdLc2f-<)T5V<8*m z=1=@w%iqV~krk;#KVF;@4eDX+Ks}l=PDs9w!0UrfpmFeQw(>2HH9>cfL|rR5n$0tJ zD%ewlYG0LFji$<4ak}!NsMz$W+<Nb0%=ul8f0HbBia>N*-g(Qq9L_fDGP9H#D$S3P zzK1B#GOIO`zjfKDTyV>s2QYR;7v`cq4K}MV*{PdsQQO*^?NExVE8D|tA?lL5hm%0m z{;dk3Y)2`&)$Gp*fL<o)RG<&33Lt=H3i^tz)kkhYM^rN)8W4}f#CY4nZ!b1&{w-`6 z)`S;e@IH^RfTytk9%n#_Xu~p(a~_wucu+TC4Q_w0!#Y7f2diB=Ryl1tL~rgXs8dII z1t*s}2sw3LHDxg{ANHCsaaIin4HWN8#Itp;d>+B0*}iG_*|xsRwB@Gb{3pCLP?r!^ zN1UgqoH%_o+6U~9WCWanW}snW@SIfpK1Lo~ApA4>Tv%1mz1O!sgl)g{#wYL#O0WoI z6`~p^_b0x)BG`qHpZ6bvh9Axi0zqrPpm+~|EcOPwX6uGz7J-S!%u2miflS6dBqr^L zD~WrVy^aHhMB|T&>Z~%%RKZg1v0k;hh&!{&E<Xb7kw_XApzdl^7wAVxo^rSS!qXk^ z<8*~jJW(PYRFGbRUm-{OuJMs%zC_NDuluxK7!xka>GEAsCYwWD!%-Gp*M`FIE+)_p z&(s3ve&>DWoBL<)e}iz@c75I--%#N5d$RuT6<Pm>ApAcBS*lu2>)#g&sPz328LNX1 znk_QPgA(+l;H6W=%?C-Xu0~)7tS^cuclZM_1;SP677|<Uc~2~tKsgqs>)kFTd=(1~ z0exubne>G`6OPl*+2;{Izy2J^0Wi7e8$q|YZ1(BEJTrS&6ZvmYOj2@`8X@0PY^v#@ zIuG9RkFb%$9uS}|U2PzzIA@L2hg>Il7a52QPzpJ2qts~YhnbZ$qa#N8Ml)qmwFRVR zKI-6FuXf;O7fJapJvCqSs_bxuLcGqyVD#!&f%gT9%)koClD#S})oR6DbK$mR&7!4H z5yJ&tYIM|;X<+fOx!0Mpol<9Ir5mBYQP`6ZY)?I?hcNECZfO>OG%G?LOV(bnH6N|@ z*AWhL9C>WoNrqGcr6Fx#ZCD|0n8P6kb~maW!JNGjF5aXW65nGEWFz5t333K;FM-h= zM<{LnM$bj{#*2B}QtPBd8PoOO+Xg$XF{(~L+sITPxeDagcEB;1Fy%j^eAvaSIPjLc zfTGMq>A_Hbt*=}+d9Yu*m(1q0kx=I0a}I78K9cGw$v55w9R7|ICpXI88~$-s0-hNi zf+w!4Wp~r7s`5J}a&O<?R0I_G_1Bqa5>tq@f}}3lb_RtH)8XP!&YzUbar|27yZDKQ z694PlK!36_dg<dS6Fz(Ia%;e=R)SZX^^ziT=?<J>ARw$V@>n(&YmC+5SWH)F?ja_i z8HQ<jUO}A$u)`;Zx4xH}1JL42^?DfXel+MdI1H{3Ik_^jf!DBs$Li!qA&F^N**^Q% z#gHOcB$-&+6m$GqlM+zO-J&gXdjTU4CM8bY2O=cLBDhg`r&j6>mjcX*hu`snl5dwh z1HrzlT4Z2LxQgv8m{~m~sGJ-*FkdWa!j?HDLVib6is5_X`1TZi&&KKX5r8_6M)J7? zp5|4j72V=ok;F=+Yd*hr%#j908c7QW{=5XK7FPQ~c*D93DE*92Vf2-{PGcVvyu!;$ zw<T!)psMK+^FHB0<obgyNv1XHNK+(U6l!51urre01M5B?1mH<UB2Szn;%LUP&%Du! zBiqE}z;RdTN7X91oY*KgJI3N^4$q0pL(+jh25~q1f`j)FV6dKTa-F1h<`nUc{tW3{ zwNH&}1Z;)y?2eT`!Q&5I5>`CHu1Gv=9qN!$G%sfwZhok<1Ko^}s53}h;ssAfup;0s z%usgvc;S3y7u6hhrI+d&^FUi6TXu<k)*AjE|7{%709nZYg_qPBOjo$mUGUg28c@P5 zDDm;P=?@dVvwiz_WibE82#f#s_GABwUj7e%sc-wSzdV0<Z0C!iOt7%<4xD=3Pbt&b zbOprAC>7;j;iVI2bLJPPq8PC_DAsq@7m5h_xcDF)vaG#%@M#i!VrO`sw+~+a#3t4P zG}qx4MsFZo4Vu5UqVCo7ZYtS0KT6}D+FU>e0dXk+MiSX9p0D+(w`DtP$7$fMQPa38 zm43V?L09_dK=S8hq8D!FiBBlTuVI=z@gFZA2Pb$~L@$;oP8S7ZTQSAcNnElQZ<jk4 zYzAJET^xmh6l`zfORyqxV$GB&9RX{40p(mcYgS0|(=Sb5Ou~;03`qM_G_sfkdF9Yq zOX%HtaXF=X=68)H_k`N`O7oR=?#;T_vA$BNTy97N{n42uKvaJO)F>iNo$<gr*?`M# zaIW|0)`Fm3>}pJg5n(bDzB^8J^A9~ai=+wimiPkEewh5)AxMbwhHm^b0xt$kGr0mN z_XO{B%?ha93;5nZV;D}U_nyLFeBmu{KEM!Q_qF(Z{^ncAQT=?1m~!q7M%6kA8CwGn z(kh9~=oW32Oq$6Ni!t=`nEP$uWG!na8&JFUk<Gs0*w&$E6om<kHO3e4FPe`9w1BGi z+jQ*aTfqC@w+fE`?bP`Hs382;O<T2^&R=`jEjB%&5Q-!?i@+kq2$rB(0F-KoXh0ep zn&9Seb<HN&F?i6BbZ5rB!s@5Kqs*ROx5pu{i~8AOt5=|RoKM))lj$I4ct-vdxHhMg zO{ZtxlT98o((l$Wq6Z*)!yN{@i8vQ7_j=JBhOxOfQ02#g;N~DV=u`Ci?H{|x)Xhq_ z@5BvX=NAfy8*bi*CeXMi^+ONj7F`c24ul$Vlo1?>qfMWJG|*XU1;t4+F;b*>bT*mg zp}-`iKE*(`E1fZF(m1-weVhI+191iohNtE?aNdNb_wQL6i4fa$#o44OF2}v*`eapU zmF30K`eIB@Ag@t)bTyYHNros9S?Di&{hU5FlSAZ?WegQHQz@&+i1c_gmiopSbPbKn z)bNC>3DMl9D#aM1$2L?I9<)+>CM}R+?E;JR1serU|Els))IIL9=qFH^G0e(xY75Eb z2&dMlx{A{=f6QD;%KaM$ES!NoU}ym=xQM-eh8OpF=K*_HQxV<NgN&+^=eGDz{c$Xe zjq>X8u@vBH$)lyV;zo&aj;;!8nbS584JwLF=|^auidY)QXP)ZdSaDs=lQNX&W9udW zqenR#TZdrsXDd2=%Ao|)Tg59Sz}l$7kaeLdiXC^-L}`T8^gtI3Jjz<<<tpK}wiOzs zk)b31iZL^~7+$s2dL{bmW0y6`^rVAhcTxqEe4s38mMXo_0hK{7gRF6?<;#kJ9;MjE z7}pq2MPS9yV(WPbs3Hcj9=9(!*poD2j!cz^q0hZNgAgiOoAF{7X!*)}>v>-Wo21Dq z#%jk87rfuz;h~iISawpU0<!%YLBQmQDRHU4ppz-B%#`YtqwgWq<9|WQ^kV9*kf4)` zzo6%ey8|lmD+B~5___G@^u<}@2Y=qt#9AozqZ%$!ZzH?R(=&@KgK#I`KodcyV(sQ_ zJIa?Axu*hET-=MkbnL#z|0XGqBgZLs76a98M{V2Mv5LU?!~MK&c>V)Pq!yJdLge#8 z!7H6Ln&mfad`7l5)Q3yu!pzaS-c@B_{9Ai9Oj)F%t8OFM`h8P7eN$hXvm@OeleSCv z8M|HK^gxbW>29(tgGbb~x3O1P?u}Q#o~}`2ja~jvOe=J<bHkcsbL$0&ghsvrMku#h zCgCloYD0XDW|`@!Dec@eAMSYHtm(}j7O%i=FRs(b)IA#a*=a01AE=glRdF@EH81#* zTkI{GxX{#^>Ny?vg239{=%-G=Khe^-okn)|b7c$W_+fxPP<#S(8lKrU?6JJPIS!bn zGwku9$7r*1Y6S)pjV<ZRj&(RMrWQA3-Z<bv-dym$LAf??U7||;e8_h_qVx!1upxlk zb2?!V{-)h?E9Tq&N#+rsuyi)O$>5*iDIg<M#P+fBO60AP%R%UfE#V_pBfewDjk_b9 zQ>?SWG7)zeA`jSTw=l_PT17X2Y_~YZ-gYM{_WM<b$pamS6Blb<Ve-7bZ&37p<POYA zub>Ep>sbTLA?C+qJIJ@g2>1^Z=p_pH6CzRbRpDu#qi?(_LM0zY#z?n640ed=LidCW z?d@xo?fD3`!Dti&q?Bh9P#PTsJ1ldxBYYqB9V=qRj)Y)GboU?R;Eiz1|6uf`nty>z z1u~SjZzL1Jt)6|#yG-s$a`dN>rxHa;PzIDrv%9oItk`!|Rj}){#pc3BeRu+>H~Eu{ z_}`s3tk|s{$YkYLid)eT@6k5?Yf~N(4-<g&eKIljKYB;}AKaHZg!f-+?VeN_Qzi`P zASQBnW<zm56l4U!xj0aWkRx!AK1;5#n2BCf(yi>^LEW-NOA6IG+;~GeNlIP*^AMpQ z7QvQUnl@He)v6ns8|$iGc+JDtnd#Q`YcgT4AKRJNf41GauHCO~ay(9M6abip=usl) zRKr}gYxfIZ(jsCHkRW--Mp02-TLt=}DFa&l<1^DbRffLnT4Ao~LyF*L#0>dri6Q%X z+MPyDb7d=F3&W*T)OO7-EQ%3N2oCqw*y#yIyHwv6CF#w&^k(6{t~0$eo*dWOG@ASR z5Y#i%gGf&I;Atwx8>En)$?+DnPjo(yb!!8--iT`suKcgm505wuT*Hu149}o^v9(wq zk=0mPkR9@VZEvMMqs}bDqR9L}NZ9gLXd40S<7)(z*aL`=m^<gFu2Oy+wVNXTKJNv_ zY!E;X6eTq%V9U!e0{KmSO;Pr>dE-H~GZ}`0B<9sAPwOUJHjL-+A7)+Y@P2-(-{BaY ztR-ZKpbCO8Q?63vmK$?v2oa>#RK}Vy2rUolWn+zm`6`#yqB6pEB$@@@%NLf4C~Oa5 zz5Nl?V?jbvH2EaJwZynYx;!kAp=jrZqLJUBkd?iTJZ7bAr<o7((k%t~qGYz33Yt?Z z2M%32yBArSmhSN`t1?(oreeEUS=JMqD*K5gB=+0zS*Y^o>lx9iBaPKT0Z50V$E|1b z$W~xm_n4*;YH;l))7l1Bo7N0CPDmD6Nr_$_a6qqwVOISZ{p3@Q{tCL_i7^;ZONm77 zM)$gR=hS4f0@zz-9_8DbR|yt8GqRj!VUaxy^Gy=5BxAV@=_H~g`>AUM+M>s1C$6&} z)c8_PA*woE5nc<MuKB&iLXyfU%w}TEQ<KyqjmQ0>OqOS|jIvnSxy3zlg~oJGJ2~s- zWCv5jgo%Ny1$MDh`U8v0E~-wGvhr0anA4tI1-n|9zw3niT3EP)6Cq_SUSM-nZ=yo3 z_q~*f0#Oq}t`C^4Ui|r&{BU;i^z4S$Q_pXM5N@ZDQD5^z%x<#+@GM>!eEXA5Sl*L- zUeiO+Zk+t*fBaDzh*U4wLvxoMkYu)WhoG~1AxQy`!fVxH>Figmt)HOVQ^WL~0z7#- zF5*RHD)6i##g%cCUbw8-W4k!B!t{+?VR?_4`o#S?djl%;b1;|Lx;K}lbL>=$+oo5K z`8^rNrgw+=J==n={(|pD4(6-B2jyLC;O8wXj!>Yn%0SZ#yj>LW*9fPs!ReQ~m{5x! zVGv<a?<n?GemJ)(Z|Bcgb3%UDaPQ8kjh{OD)<0u{C74k61{zwIWrqouL1fdtWRool z_{k%{Eeqt!qL3{F2Q2*0uFtAw>JE6Zc{&&_<v;430f8w)Z4bIQoad-1x9*0gN)|eE z3dIVJa?Cj*Q@mhwrzJE@?3hPUJY2eZ51Dd^oQs<<heiGGA};<^z_nB+XS7^Mb0^tz z;WAiYU75(pmZi)cyK58%wi{a3Y}h)BuqMM5LAS3Y({_cq&^BJC<!jYsyErF3IF_g( zKhNsA;^1tcoWE&4aa4E^fTi02uZgl_6h=o)sC;ZI{^H$itsvFb5|hckKQ&_Ieawg| zJIjVTT=wKaAiX?n$IX8h)_98F`r3!aR2@vEbyT6bxAUEm=?aEj(BLR=KgLQ&em+&4 z626`WrNX^NB`}CoSMx$UcnwsOe<P%MilV;u0Z$T!DJ|i1aD;XF*Z~t@LU_Vc5UGj5 zrEZvf{|@?FzHr1$SO_*H)KSi`qKuZ^8^?@*of*oJO-rmi3@sUf%F}}}D-JwCB87%; z&0#Z|eZUjf{-fl?mnB(W?yRV8J7zk}`XM;WUF#`X&VH#1XR;6ATg)OKzK}g@4u2g6 zJrX87F~A6p!HyIDfJz#vhIx5Wx&b55|1nQJtEE*wc{VwP@$iE-^><Vz#g<*s@&|}O zD!(YPwxJ6j7Ef%YfHg4A2GO428%GoRd#YTZF84#?kz|121B!I@MZl_@pD@rAh;$O0 zAw^%th#$SG-_NsIufSGu^;KaLml<5YDoFym;NGaNAUu~>fMija=p|;;1$y(w+10)K zq7j6{S`rWt9r>qQHwvT}{8m>@G{}y;t9y(HSi$pt`eTlBfQWEzZyPkxAPBmAhI*i( z1u6*i<o?s?s}^ufrtGv~#D!LmAA(XmH44R1QO_DPR~Np4c}|i*gIxaZWVljbh9sg0 ztthDznREDdeUKhh&TTN&j$GItSnG$EtAy9Rs%=0UhuN)S+rim)wigM{hOrmDx*m8> z6WQzpZhJ+Ycybe4w(@i(z16*_RsCS2^QZx8Mlg53z*Jfxtq^v9y%Ct1<J6SI`Nr)6 z_|)bLz!CAm&>_*}67gOVFIrGY|K>-yEVY&)+a`8)1UsHP*}Qo`o-PDenQP$=zPIo| z^jGqp2cb}gmoRd-giHp$CabG})fOBtsU}EMH4Q4o6BN$_Isnhh1s-8=(#@-{V2<mr zn!Z{Idn8QQl-@*h(<jMq(6~!LKF01Z2DG@9kA2aWl(yJ~KW0$O?tf=Vrv2nqYpHx> zF4y4KBy;kN*=3ZRJ0fABpeCMbqUhucZl|T@96riCF|CF;Ah&|c6Tcb~f5ji32&I?c zjiR_im`sQ@tl13Z^Z+n;MXyPq&?f4brG--@h1(<bNMn3ucO4}o&lGcz#~q;Xz@C{P zyA9y>S36QVO)1@^t`UY$EDPm@&Zce=BAA#;f&oH8$mf6qgRm4#GVdq{;l_Lp$<+v0 z9tiq_2kc3~rX<StMsp%DEY6tyxW{5#H#EU{Jg4SZ*{;$_XLcTQ%RcX-3_#ToBYx2I z%O^T=tcBZlW4yvb_tXgw+yqxmvr<x1re{y<79ruZdI4a+CI%S$IdhQI&4y`e!Xk=H zN3B&eAT1K8wZ`wOO{8)l@cQowR2R8zvh;f$@rd|O6Da@xb^`q`2W(EnBDO9z|K*Q= z4Wh+rR!&GN=)TjWQ_U0eDS}WI2wG)n&Hf;Vrb?AfsN^Npvq_SD6RaBZ!I!q1){+9q z%E~vNSnv3FAYv2vOrvDk4x%_C8>j9VF7J7Kf<7}>2}Kg*B4i6&&son;oiiLKJR5Rf zpEsC(Q|?mzmQmsC_yWD^Fq-t!c(Ib~VGsxrL8RFGfdhoNi8t&y>VOb(wEhti2oeYs z5H9G6d3)k8^J)7D(|BTSQw#_pVHOai)ZzQ4F9#F|8VImL)#b8Q5S2TO4KbGU!aDC| zoQ2<MiEK#(EJ#LW7)uK!zYndW4L-bWV%eCLnX02Wn{7*s!iB3+vn&&R2ZLCoF~)hu zYBtloLOh+7+&nQ<g(INfU|2GvU9k1RpR_2V4;E!?*x7i>*C1Tx^U_0Fla-@^Dyr}6 z_%N8aE?|z@(219rX~bNdCyc{}6PFtknyVV~DbA`)C_!vgF_y?H@^cpzJ2CI7Wsfl` z=^}Xak4q%5lx;e)4c77@DTSCMhCnfZv!Q}&nntZxF{emMUC%P&G1Fu$F>-P{IFvk7 zDvlKp$rv^DB&XOjrtsl1N=!Q*%#CN2R6}eNvdb~Yi)>4h2zRW#B<NeHam^3K1A0^I zW@edl4ILjXU}qf}A3kCac|M0NC}q5a5NJ1GbB4E&noCO1n?=R}jBylYsJtY$<ye)C z#a=VOIc@x0B5#U$67`Td`8YyG3l!TglyO>ILR;6n^CsBY>Wzx=J(7P=oooV@UdxP` zDieu~aiS(h?cTm{*`{{Kj}>ap?*UKS8m@X|y1Z_4H_&%@d}2(A#XJ(XOSRslbhS`x z1Wyr1YjSXvU(Ubc>Zo>pu->IHE*pd(2TwPOP01>_B{+aBkD3o)B8-?!?gvGI%Z|Ha zmZEc_?NA7F6CG$|rQFiXMz9kdaB$E3GTpnM{#BtrD+ac4+yK;Uvqq>J=YUEV;Vv;e z!A^F-ZED=v-`5qfQg%B{7P+ouae{Qq8G0WQ1vX1&#P$^Co|ylqCs!vV1q3zFpbbi( zC8;mI022tI`@w}IGy|ZNC6uhyfox9MsOUhxc&m<ZUZK2BO$j(vAp|DgG0+fCi_1`+ zdWeN=C7Dfufx0-)M+9wn8FEEwPTD|@9E48tm-9A@IJNOh{x${$U2VTY`JliC%?$P9 zNK^@qkvUmA>MvRK5oXxBM^#p2dv|JFGxd%%`=t`rbLbQ3z-c11E|t9TaQQddGWl1V zl`|H!mOvHt%b|yfdM2Oytyr0dA59s&TfodWygx#?wiKwMHzJ0u6h!Vg8xy_JdYysg zWisxwQ~Nk;1=-y({NdoK!&G#fz;!~|k-L_$R&lMNw{KaWM6d$2+AI52oXW0XU4n(2 z$~0gtV5Mq=exnZTkHih^ql`KS31wdsp~D7O*63RR95561*pFgm!_-54b$b1{n^jp< z=zfc(Md&om>bF=#Y<vW+PVFWp@D9(r;rJayH%sjuT;0DC2C;)r>mBLS@0JGNJ(6?- zWGe0^`GQdzjOQTw0&x<gXU{go9)&r0iY5Ri7*?3*s{>z$0!J7DBRsAttxtrUn&MF4 z#AFhS?@vPv;t(R<9$Ez=i_&aBwk!Euka;sKZcE}trwJ!=Uv)L1^>~c7>zhzE63;Rh zOFeayW+Qx8|2%sGYbmZdP3t%>uIT_04OmlnMu_3z%nXkW-Xn<UD^z{M^*fkv6EU-s z-^1PpxMT;6Y++-;K^$&QFU}OyTf9TOB<5U*Q{Wn)ORK#gm){soekPUrH;@KLsLDa= zo&HM?82o1u%j*Ql-0!wyfku6JudPFx#cj4Y7izdBk{S4w$60NPU+zA54lIW@Dw-^@ zmGWc=NVM>X`?tX}5#r!S_o4LKf`Vm9z~gmTM7}W)J?`ZVRFYLQ`LBvY+`8F{ys^R_ zotz}x0Y1Lj^?XW_UcI$;e4<-!fLz*K?G5@yTp3>=f9)<I5#dZGzbELh|IrEh-(jxV z$~u3Ax$-pFXlSO|QG-+7S!ijf$}3n@6aHW+PZJkfY`Ju$j@;0x??8E_c&nLt0SqVo z1o#;pju{O%%(a0EMFP%yF`3Quoa1ydz4iM3XMhY~p%qIA8qG)?pMnTwfJ8b%0A(Nv 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%0AL4d@6$!8O@i&2f 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 `v>flFWRC3bN2=R~v6H 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 C0;m7KV>k<N?N|R}0EmmI~94|MSYx4Qw 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 `XJfoSvVcV*_lXw*w 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℞<pD>~>&z)m;OG6o4o(!d1Nh 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 g>#J6^!{RF^-j)gKKEJ0ckNp(c(|pvG1xBTImc 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≧T)P3Gk+fqVFk8;ht8H==P6g7 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≀QnSU!8@P83R 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�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�ivlOp2`T6ps9+k)0XCq(#27Qg(ZDx?1Ysl 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⪼vYc$vS>#*B%N6`;db2-97&Zk9xvFtZ2V+jj_k0 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≪WYLWY1+`v%n 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 DlmU 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�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Ë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 U90)GyTJo>gd7Qk5M&V!o4^+Y8+yDRo literal 0 HcmV?d00001 diff --git a/wastedcops-master@4d070d71e37/lib/Houses.jar b/wastedcops-master@4d070d71e37/lib/Houses.jar new file mode 100644 index 0000000000000000000000000000000000000000..f49efe2ce54c5c3a025f1ddde79f026ffe501e17 GIT binary patch literal 107429 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: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 XIABo+_}+kj8i0K!_87n>5zzkuKs(FG literal 0 HcmV?d00001 diff --git a/wastedcops-master@4d070d71e37/lib/WastedGuns.jar b/wastedcops-master@4d070d71e37/lib/WastedGuns.jar new file mode 100644 index 0000000000000000000000000000000000000000..6d512d6a58217e46cda5e129e970b8ab821213ac GIT binary patch literal 90406 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 literal 0 HcmV?d00001 diff --git a/wastedcops-master@4d070d71e37/pom.xml b/wastedcops-master@4d070d71e37/pom.xml new file mode 100644 index 0000000..da20d8e --- /dev/null +++ b/wastedcops-master@4d070d71e37/pom.xml @@ -0,0 +1,158 @@ +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + + <groupId>net.grandtheftmc</groupId> + <artifactId>wastedcops</artifactId> + <version>1.1.0</version> + <name>WastedCops</name> + + <repositories> + <repository> + <id>spigot-repo</id> + <url>https://hub.spigotmc.org/nexus/content/repositories/public/</url> + </repository> + <repository> + <id>jitpack.io</id> + <url>https://jitpack.io</url> + </repository> + <repository> + <id>nexus-release</id> + <url>http://nexus.grandtheftmc.net/content/repositories/releases</url> + </repository> + </repositories> + + <distributionManagement> + <repository> + <id>nexus-release</id> + <name>Internal Releases</name> + <url>http://nexus.grandtheftmc.net/content/repositories/releases</url> + </repository> + <snapshotRepository> + <id>nexus-snapshot</id> + <name>Internal Snapshots</name> + <url>http://nexus.grandtheftmc.net/content/repositories/snapshots</url> + </snapshotRepository> + </distributionManagement> + + <developers> + <developer> + <id>1</id> + <name>Presidentx</name> + <roles> + <role>Owner</role> + <role>Developer</role> + </roles> + </developer> + + <developer> + <id>2</id> + <name>MrTeddeh</name> + <roles> + <role>Senior Developer</role> + </roles> + </developer> + + <developer> + <id>3</id> + <name>Tim</name> + <roles> + <role>Developer</role> + </roles> + </developer> + + <developer> + <id>4</id> + <name>ThatAbstractWolf</name> + <roles> + <role>Developer</role> + </roles> + </developer> + </developers> + + <dependencies> + <dependency> + <groupId>org.spigotmc.1.12</groupId> + <artifactId>spigot</artifactId> + <version>1.12.0</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>com.github.j0ach1mmall3</groupId> + <artifactId>JLib</artifactId> + <version>LATEST</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>net.grandtheftmc</groupId> + <artifactId>wastedguns</artifactId> + <version>1.0.2</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>net.grandtheftmc</groupId> + <artifactId>core</artifactId> + <version>2.3.10</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>net.grandtheftmc</groupId> + <artifactId>gtm</artifactId> + <version>2.4.0</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>net.grandtheftmc</groupId> + <artifactId>houses</artifactId> + <version>1.0.2</version> + <scope>provided</scope> + </dependency> + </dependencies> + + <properties> + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + <maven.compiler.source>1.8</maven.compiler.source> + <maven.compiler.target>1.8</maven.compiler.target> + </properties> + + <build> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-shade-plugin</artifactId> + <configuration> + <finalName>WastedCops</finalName> + </configuration> + <executions> + <execution> + <phase>package</phase> + <goals> + <goal>shade</goal> + </goals> + </execution> + </executions> + </plugin> + + <!-- Nexus deploy --> + <plugin> + <groupId>org.sonatype.plugins</groupId> + <artifactId>nexus-staging-maven-plugin</artifactId> + <version>1.6.8</version> + <extensions>true</extensions> + <executions> + <execution> + <id>default-deploy</id> + <phase>deploy</phase> + <goals> + <goal>deploy</goal> + </goals> + </execution> + </executions> + <configuration> + <serverId>nexus</serverId> + <nexusUrl>http://nexus.grandtheftmc.net/</nexusUrl> + <skipStaging>true</skipStaging> + </configuration> + </plugin> + </plugins> + </build> +</project> \ No newline at end of file diff --git a/wastedcops-master@4d070d71e37/src/main/java/com/j0ach1mmall3/wastedcops/Main.java b/wastedcops-master@4d070d71e37/src/main/java/com/j0ach1mmall3/wastedcops/Main.java new file mode 100644 index 0000000..5159bb9 --- /dev/null +++ b/wastedcops-master@4d070d71e37/src/main/java/com/j0ach1mmall3/wastedcops/Main.java @@ -0,0 +1,214 @@ +package com.j0ach1mmall3.wastedcops; + +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.entity.Creature; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.entity.Villager; +import org.bukkit.entity.Zombie; +import org.bukkit.metadata.FixedMetadataValue; + +import com.j0ach1mmall3.jlib.commands.Command; +import com.j0ach1mmall3.jlib.methods.Random; +import com.j0ach1mmall3.jlib.plugin.JLibPlugin; +import com.j0ach1mmall3.wastedcops.api.Cop; +import com.j0ach1mmall3.wastedcops.api.CopProperties; +import com.j0ach1mmall3.wastedcops.api.events.CopSpawnEvent; +import com.j0ach1mmall3.wastedcops.commands.WCReloadCommandHandler; +import com.j0ach1mmall3.wastedcops.config.Config; +import com.j0ach1mmall3.wastedcops.listeners.CopListener; +import com.j0ach1mmall3.wastedcops.listeners.EntityListener; + +import net.grandtheftmc.gtm.GTMUtils; +import net.grandtheftmc.gtm.users.GTMUser; +import net.grandtheftmc.gtm.users.GTMUserManager; + +public final class Main extends JLibPlugin<Config> { + private final Map<Player, Set<LivingEntity>> cops = new ConcurrentHashMap<>(); + private final Map<Player, Long> noTargetTicks = new ConcurrentHashMap<>(); + + private final List<Material> disallowedBlocks = Arrays.asList(Material.LEAVES, + Material.LEAVES_2, Material.COBBLE_WALL, Material.WOOD_STEP, Material.WOOD); + + public static boolean canSeeTarget(LivingEntity cop, Player target) { + return cop.hasLineOfSight(target); + } + + public static Location faceLocation(LivingEntity entity, Location to) { + if (entity.getWorld() != to.getWorld()) { + return null; + } + Location fromLocation = entity.getLocation(); + + double xDiff = to.getX() - fromLocation.getX(); + double yDiff = to.getY() - fromLocation.getY(); + double zDiff = to.getZ() - fromLocation.getZ(); + + double distanceXZ = Math.sqrt(xDiff * xDiff + zDiff * zDiff); + double distanceY = Math.sqrt(distanceXZ * distanceXZ + yDiff * yDiff); + + double yaw = Math.toDegrees(Math.acos(xDiff / distanceXZ)); + double pitch = Math.toDegrees(Math.acos(yDiff / distanceY)) - 90.0D; + if (zDiff < 0.0D) { + yaw += Math.abs(180.0D - yaw) * 2.0D; + } + Location loc = entity.getLocation(); + loc.setYaw((float) (yaw - 90.0F)); + loc.setPitch((float) (pitch - 90.0F)); + return loc; + } + + @Override + public void onEnable() { + this.reload(); + new EntityListener(this); + new CopListener(this); + new WCReloadCommandHandler(this).registerCommand(new Command("WCReload", "wc.reload", ChatColor.RED + "/wcreload")); + } + + @Override + public void onDisable() { + this.cops.values().forEach(s -> s.forEach(LivingEntity::remove)); + } + + public Map<Player, Set<LivingEntity>> getCops() { + return this.cops; + } + + public Map<Player, Long> getNoTargetTicks() { + return this.noTargetTicks; + } + + public void reload() { + this.config = new Config(this); + } + + public Config getCustomConfig() { + return this.config; + } + + public void setWantedLevel(Player player, int level) { + switch(level) { + case 0: + level = 0; + break; + case 1: + level = 1; + break; + case 2: + level = 2; + break; + case 3: + level = 4; + break; + case 4: + level = 10; + break; + case 5: + level = 25; + break; + default: + level = 0; + break; + } + + GTMUser gtmUser = GTMUserManager.getInstance().getUser(player.getUniqueId()).orElse(null); + if (gtmUser != null){ + gtmUser.setKillCounter(level); + GTMUtils.updateBoard(player, gtmUser); + } + } + + public int getWantedLevel(Player player) { + + int wantedLevel = 0; + int[] wantedLevels = new int[]{0, 1, 2, 4, 10, 25}; + + GTMUser gtmUser = GTMUserManager.getInstance().getUser(player.getUniqueId()).orElse(null); + if (gtmUser != null){ + int killCounter = gtmUser.getKillCounter(); + for (int i = 0; i < wantedLevels.length; i++) + if (killCounter >= wantedLevels[i]) + wantedLevel = i; + } + + return wantedLevel; + } + + public void resetWantedLevel(Player player) { + + GTMUser gtmUser = GTMUserManager.getInstance().getUser(player.getUniqueId()).orElse(null); + if (gtmUser != null){ + gtmUser.setKillCounter(0); + GTMUtils.updateBoard(player, gtmUser); + } + } + + public void addKill(Player player) { + + GTMUser gtmUser = GTMUserManager.getInstance().getUser(player.getUniqueId()).orElse(null); + if (gtmUser != null){ + gtmUser.addKillCounter(1); + GTMUtils.updateBoard(player, gtmUser); + } + } + + public void addMoney(Player player, int amount) { + if(amount > Integer.MAX_VALUE || amount < Integer.MIN_VALUE){ + return; + } + + GTMUser gtmUser = GTMUserManager.getInstance().getUser(player.getUniqueId()).orElse(null); + if (gtmUser != null){ + gtmUser.addMoney(amount); + GTMUtils.updateBoard(player, gtmUser); + } + } + + private Location getLocationInRange(Location location, int minRange, int maxRange) { + return location.add(Random.getInt(minRange, maxRange) * (Random.getBoolean() ? 1 : -1), 0, Random.getInt(minRange, maxRange) * (Random.getBoolean() ? 1 : -1)); + } + + public void spawnCopAtLocation(Location location, CopProperties copProperties, Player target) { + Cop cop = new Cop(this, copProperties); + CopSpawnEvent copSpawnEvent = new CopSpawnEvent(cop, target, location); + Bukkit.getPluginManager().callEvent(copSpawnEvent); + if(copSpawnEvent.isCancelled()) return; + String entityName = copProperties.getEntity(); + LivingEntity livingEntity; + location = copSpawnEvent.getLocation(); + location = location.getWorld().getHighestBlockAt(this.getLocationInRange(location, 0, 4)).getLocation(); + if (Objects.equals(entityName, "husk")) { + livingEntity = (Creature) location.getWorld().spawnEntity(location, EntityType.ZOMBIE); + ((Zombie)livingEntity).setVillagerProfession(Villager.Profession.HUSK); + } else { + livingEntity = (Creature) location.getWorld().spawnEntity(location, EntityType.valueOf(entityName)); + } + livingEntity.setMetadata("Cop", new FixedMetadataValue(this, cop)); + Set<LivingEntity> cops = this.cops.getOrDefault(target, new HashSet<>()); + cops.add(livingEntity); + this.cops.put(target, cops); + cop.onSpawn(livingEntity, copSpawnEvent.getTarget()); + if (this.disallowedBlocks.contains(location.getBlock().getType())) { + livingEntity.setHealth(0); + livingEntity.remove(); + cop.onDestroy(livingEntity); + return; + } + if(location.getBlockY() > 100) { + cop.onDestroy(livingEntity); + } + } +} diff --git a/wastedcops-master@4d070d71e37/src/main/java/com/j0ach1mmall3/wastedcops/api/Cop.java b/wastedcops-master@4d070d71e37/src/main/java/com/j0ach1mmall3/wastedcops/api/Cop.java new file mode 100644 index 0000000..8a181d0 --- /dev/null +++ b/wastedcops-master@4d070d71e37/src/main/java/com/j0ach1mmall3/wastedcops/api/Cop.java @@ -0,0 +1,159 @@ +package com.j0ach1mmall3.wastedcops.api; + +import com.j0ach1mmall3.jlib.integration.Placeholders; +import com.j0ach1mmall3.jlib.methods.ReflectionAPI; +import com.j0ach1mmall3.jlib.nms.pathfinding.WrappedPathfinderGoalSelector; +import com.j0ach1mmall3.wastedcops.Main; +import com.j0ach1mmall3.wastedguns.api.events.WeaponRightClickEvent; +import com.j0ach1mmall3.wastedguns.api.weapons.Weapon; +import com.j0ach1mmall3.wastedguns.api.weapons.ranged.RangedWeapon; +import net.grandtheftmc.houses.Houses; +import net.grandtheftmc.houses.users.HouseUser; +import org.bukkit.Bukkit; +import org.bukkit.GameMode; +import org.bukkit.Material; +import org.bukkit.entity.*; +import org.bukkit.inventory.ItemStack; + +import java.util.Optional; +import java.util.concurrent.ThreadLocalRandom; + +/** + * @author j0ach1mmall3 (business.j0ach1mmall3@gmail.com) + * @since 4/06/2016 + */ +public final class Cop { + private static final Class ENTITY_CREATURE_CLASS = ReflectionAPI.getNmsClass("EntityCreature"); + private static final Class ENTITY_INSENTIENT_CLASS = ReflectionAPI.getNmsClass("EntityInsentient"); + private static final Class ENTITY_HUMAN_CLASS = ReflectionAPI.getNmsClass("EntityHuman"); + private static final Class PATHFINDER_GOAL_FLOAT_CLASS = ReflectionAPI.getNmsClass("PathfinderGoalFloat"); + private static final Class PATHFINDER_GOAL_MELEE_ATTACK_CLASS = ReflectionAPI.getNmsClass("PathfinderGoalMeleeAttack"); + private static final Class PATHFINDER_GOAL_MOVE_TOWARDS_RESTRICTION_CLASS = ReflectionAPI.getNmsClass("PathfinderGoalMoveTowardsRestriction"); + private static final Class PATHFINDER_GOAL_RANDOM_STROLL_CLASS = ReflectionAPI.getNmsClass("PathfinderGoalRandomStroll"); + private static final Class PATHFINDER_GOAL_LOOK_AT_PLAYER_CLASS = ReflectionAPI.getNmsClass("PathfinderGoalLookAtPlayer"); + private static final Class PATHFINDER_GOAL_RANDOM_LOOKAROUND_CLASS = ReflectionAPI.getNmsClass("PathfinderGoalRandomLookaround"); + private static final Class PATHFINDER_GOAL_HURT_BY_TARGET_CLASS = ReflectionAPI.getNmsClass("PathfinderGoalHurtByTarget"); + private static final Class PATHFINDER_GOAL_NEAREST_ATTACKABLE_TARGET_CLASS = ReflectionAPI.getNmsClass("PathfinderGoalNearestAttackableTarget"); + + private final Main plugin; + private final CopProperties copProperties; + private Weapon weapon; + private boolean weaponCooldown; + + public Cop(Main plugin, CopProperties copProperties) { + this.plugin = plugin; + this.copProperties = copProperties; + } + + public Main getPlugin() { + return this.plugin; + } + + public CopProperties getCopProperties() { + return this.copProperties; + } + + public Weapon getWeapon() { + return this.weapon; + } + + public void setWeapon(Weapon weapon) { + this.weapon = weapon; + } + + public boolean isWeaponCooldown() { + return this.weaponCooldown; + } + + public void setWeaponCooldown(boolean weaponCooldown) { + this.weaponCooldown = weaponCooldown; + } + + public void onSpawn(LivingEntity livingEntity, Player target) { + if(!this.copProperties.getWeapons().isEmpty()) { + String w = this.copProperties.getWeapons().get(ThreadLocalRandom.current().nextInt(this.copProperties.getWeapons().size())); + Optional<Weapon> weapon = ((com.j0ach1mmall3.wastedguns.Main) Bukkit.getPluginManager().getPlugin("WastedGuns")).getWeapon(w); + if (weapon.isPresent()) this.weapon = weapon.get(); + } + livingEntity.setCustomName(Placeholders.parse(this.copProperties.getName(), target)); + livingEntity.setCustomNameVisible(true); + livingEntity.setMaxHealth(this.copProperties.getHealth()); + livingEntity.setHealth(livingEntity.getMaxHealth()); + livingEntity.setCanPickupItems(false); + livingEntity.setRemoveWhenFarAway(false); + livingEntity.setAI(true); + if(livingEntity.getType() == EntityType.WOLF) { + ((Wolf) livingEntity).setAngry(true); + ((Wolf) livingEntity).setAdult(); + ((Wolf) livingEntity).setSitting(false); + ((Wolf) livingEntity).setTarget(target); + } + if(livingEntity.getType() == EntityType.ZOMBIE || livingEntity.getType() == EntityType.PIG_ZOMBIE) { + ((Zombie) livingEntity).setBaby(false); + ((Zombie) livingEntity).setTarget(target); + } + if (this.weapon != null) livingEntity.getEquipment().setItemInMainHand(this.weapon.getItemStack()); + livingEntity.getEquipment().setHelmet(new ItemStack(Material.STONE_BUTTON)); + + try { + WrappedPathfinderGoalSelector goalSelector = new WrappedPathfinderGoalSelector(WrappedPathfinderGoalSelector.Type.GOAL_SELECTOR, (Creature)livingEntity); + goalSelector.getActive().clear(); + goalSelector.getInactive().clear(); + Object handle = ReflectionAPI.getHandle((Object) livingEntity); + + goalSelector.add(1, PATHFINDER_GOAL_FLOAT_CLASS.getConstructor(ENTITY_INSENTIENT_CLASS).newInstance(handle)); + goalSelector.add(2, PATHFINDER_GOAL_MELEE_ATTACK_CLASS.getConstructor(ENTITY_CREATURE_CLASS, double.class, boolean.class).newInstance(handle, 1.0D, false)); + goalSelector.add(5, PATHFINDER_GOAL_MOVE_TOWARDS_RESTRICTION_CLASS.getConstructor(ENTITY_CREATURE_CLASS, double.class).newInstance(handle, 1.0D)); + goalSelector.add(7, PATHFINDER_GOAL_RANDOM_STROLL_CLASS.getConstructor(ENTITY_CREATURE_CLASS, double.class).newInstance(handle, 1.0D)); + goalSelector.add(8, PATHFINDER_GOAL_LOOK_AT_PLAYER_CLASS.getConstructor(ENTITY_INSENTIENT_CLASS, Class.class, float.class).newInstance(handle, ENTITY_HUMAN_CLASS, 8.0F)); + goalSelector.add(8, PATHFINDER_GOAL_RANDOM_LOOKAROUND_CLASS.getConstructor(ENTITY_INSENTIENT_CLASS).newInstance(handle)); + goalSelector.apply((Creature)livingEntity); + + WrappedPathfinderGoalSelector targetSelector = new WrappedPathfinderGoalSelector(WrappedPathfinderGoalSelector.Type.TARGET_SELECTOR, (Creature)livingEntity); + targetSelector.getActive().clear(); + targetSelector.getInactive().clear(); + targetSelector.add(1, PATHFINDER_GOAL_HURT_BY_TARGET_CLASS.getConstructor(ENTITY_CREATURE_CLASS, boolean.class, Class[].class).newInstance(handle, false, new Class[0])); + targetSelector.add(2, PATHFINDER_GOAL_NEAREST_ATTACKABLE_TARGET_CLASS.getConstructor(ENTITY_CREATURE_CLASS, Class.class, boolean.class).newInstance(handle, ENTITY_HUMAN_CLASS, false)); + targetSelector.apply((Creature)livingEntity); + } catch (Exception e) { + e.printStackTrace(); + } + + ((Creature)livingEntity).setTarget(target); + livingEntity.teleport(Main.faceLocation(livingEntity, target.getEyeLocation())); + } + + public void onDestroy(LivingEntity zombie) { + zombie.setHealth(0); + zombie.remove(); + this.plugin.getCops().values().forEach(s -> s.remove(zombie)); + } + + public boolean onTick(LivingEntity cop, Player player) { + if (cop == null || cop.isDead() || player.getWorld() != cop.getWorld()) { + this.onDestroy(cop); + return false; + } + if (cop.isInsideVehicle()) cop.getVehicle().eject(); + + HouseUser houseUser = Houses.getUserManager().getLoadedUser(player.getUniqueId()); + if (houseUser.isInsideHouse() || houseUser.isInsidePremiumHouse()) { + this.onDestroy(cop); + return false; + } + + if(!Main.canSeeTarget(cop, player)) { + return false; + } + + boolean valid = !player.isDead() && player.isOnline() && player.getGameMode() != GameMode.SPECTATOR && player.getGameMode() != GameMode.CREATIVE && player.getWorld().getName().equals(cop.getWorld().getName()) && this.plugin.getWantedLevel(player) > 0 && cop.hasLineOfSight(player); + double distance = cop.getLocation().distance(player.getLocation()); + if (valid && !this.weaponCooldown && this.weapon instanceof RangedWeapon && distance <= ((RangedWeapon) this.weapon).getRange()) { + WeaponRightClickEvent weaponRightClickEvent = new WeaponRightClickEvent(cop, this.weapon); + Bukkit.getPluginManager().callEvent(weaponRightClickEvent); + this.weaponCooldown = true; + Bukkit.getScheduler().scheduleSyncDelayedTask(this.plugin, () -> this.weaponCooldown = false, 4L); + } + return valid; + } +} diff --git a/wastedcops-master@4d070d71e37/src/main/java/com/j0ach1mmall3/wastedcops/api/CopProperties.java b/wastedcops-master@4d070d71e37/src/main/java/com/j0ach1mmall3/wastedcops/api/CopProperties.java new file mode 100644 index 0000000..957a048 --- /dev/null +++ b/wastedcops-master@4d070d71e37/src/main/java/com/j0ach1mmall3/wastedcops/api/CopProperties.java @@ -0,0 +1,57 @@ +package com.j0ach1mmall3.wastedcops.api; + +import java.util.Collections; +import java.util.List; + +/** + * @author j0ach1mmall3 (business.j0ach1mmall3@gmail.com) + * @since 4/06/2016 + */ +public final class CopProperties { + private final String identifier; + private final String entity; + private final double health; + private final int weaponDropChance; + private final String name; + private final int killReward; + private final List<String> weapons; + + public CopProperties(String identifier, String entity, double health, int weaponDropChance, String name, int killReward, List<String> weapons) { + this.identifier = identifier; + this.entity = entity; + this.health = health; + this.weaponDropChance = weaponDropChance; + this.name = name; + this.killReward = killReward; + this.weapons = weapons; + Collections.shuffle(this.weapons); + } + + public String getIdentifier() { + return this.identifier; + } + + public String getEntity() { + return this.entity; + } + + public double getHealth() { + return this.health; + } + + public int getWeaponDropChance() { + return this.weaponDropChance; + } + + public String getName() { + return this.name; + } + + public int getKillReward() { + return this.killReward; + } + + public List<String> getWeapons() { + return this.weapons; + } +} diff --git a/wastedcops-master@4d070d71e37/src/main/java/com/j0ach1mmall3/wastedcops/api/events/CopDamagePlayerEvent.java b/wastedcops-master@4d070d71e37/src/main/java/com/j0ach1mmall3/wastedcops/api/events/CopDamagePlayerEvent.java new file mode 100644 index 0000000..9ca95ab --- /dev/null +++ b/wastedcops-master@4d070d71e37/src/main/java/com/j0ach1mmall3/wastedcops/api/events/CopDamagePlayerEvent.java @@ -0,0 +1,48 @@ +package com.j0ach1mmall3.wastedcops.api.events; + +import com.j0ach1mmall3.wastedcops.api.Cop; +import com.j0ach1mmall3.wastedguns.api.weapons.Weapon; +import org.bukkit.entity.Player; +import org.bukkit.event.HandlerList; + +public class CopDamagePlayerEvent extends CopEvent { + private static final HandlerList HANDLER_LIST = new HandlerList(); + private Player victim; + private Weapon weapon; + private double damageDealt; + + public CopDamagePlayerEvent(Cop cop, Player victim, Weapon weapon, double damageDealt) { + super(cop); + this.victim = victim; + this.weapon = weapon; + this.damageDealt = damageDealt; + } + + public Player getVictim() { + return this.victim; + } + + public Weapon getWeapon() { + return this.weapon; + } + + public double getDamageDealt(){ + return this.damageDealt; + } + + public void setDamageDealt(double newDamage) { + if(newDamage > victim.getMaxHealth() || newDamage < 0) + newDamage = victim.getMaxHealth(); + this.damageDealt = newDamage; + } + + @Override + public HandlerList getHandlers() { + return HANDLER_LIST; + } + + public static HandlerList getHandlerList() { + return HANDLER_LIST; + } + +} \ No newline at end of file diff --git a/wastedcops-master@4d070d71e37/src/main/java/com/j0ach1mmall3/wastedcops/api/events/CopEvent.java b/wastedcops-master@4d070d71e37/src/main/java/com/j0ach1mmall3/wastedcops/api/events/CopEvent.java new file mode 100644 index 0000000..d6b7ab4 --- /dev/null +++ b/wastedcops-master@4d070d71e37/src/main/java/com/j0ach1mmall3/wastedcops/api/events/CopEvent.java @@ -0,0 +1,28 @@ +package com.j0ach1mmall3.wastedcops.api.events; + +import com.j0ach1mmall3.wastedcops.api.Cop; +import org.bukkit.event.Cancellable; +import org.bukkit.event.Event; + +public abstract class CopEvent extends Event implements Cancellable { + private final Cop cop; + private boolean cancelled; + + protected CopEvent(Cop cop) { + this.cop = cop; + } + + public Cop getCop() { + return this.cop; + } + + @Override + public boolean isCancelled() { + return this.cancelled; + } + + @Override + public void setCancelled(boolean b) { + this.cancelled = b; + } +} \ No newline at end of file diff --git a/wastedcops-master@4d070d71e37/src/main/java/com/j0ach1mmall3/wastedcops/api/events/CopKillPlayerEvent.java b/wastedcops-master@4d070d71e37/src/main/java/com/j0ach1mmall3/wastedcops/api/events/CopKillPlayerEvent.java new file mode 100644 index 0000000..8132ded --- /dev/null +++ b/wastedcops-master@4d070d71e37/src/main/java/com/j0ach1mmall3/wastedcops/api/events/CopKillPlayerEvent.java @@ -0,0 +1,45 @@ +package com.j0ach1mmall3.wastedcops.api.events; + +import com.j0ach1mmall3.wastedcops.api.Cop; +import org.bukkit.entity.Player; +import org.bukkit.event.HandlerList; +import org.bukkit.inventory.ItemStack; + +import java.util.List; + +public class CopKillPlayerEvent extends CopEvent { + private static final HandlerList HANDLER_LIST = new HandlerList(); + private final Player playerKilled; + private List<ItemStack> drops; + + public CopKillPlayerEvent(Cop cop, Player playerKilled, List<ItemStack> drops) { + super(cop); + this.playerKilled = playerKilled; + this.drops = drops; + } + + public static HandlerList getHandlerList() { + return HANDLER_LIST; + } + + public Player getPlayerKilled() { + return this.playerKilled; + } + + public List<ItemStack> getDrops() { + return this.drops; + } + + public void setDrops(List<ItemStack> newDrops) { + if(newDrops == null || newDrops.isEmpty()) return; + this.drops = newDrops; + } + + @Override + public HandlerList getHandlers() { + return HANDLER_LIST; + } + +} + + diff --git a/wastedcops-master@4d070d71e37/src/main/java/com/j0ach1mmall3/wastedcops/api/events/CopSpawnEvent.java b/wastedcops-master@4d070d71e37/src/main/java/com/j0ach1mmall3/wastedcops/api/events/CopSpawnEvent.java new file mode 100644 index 0000000..252b28d --- /dev/null +++ b/wastedcops-master@4d070d71e37/src/main/java/com/j0ach1mmall3/wastedcops/api/events/CopSpawnEvent.java @@ -0,0 +1,48 @@ +package com.j0ach1mmall3.wastedcops.api.events; + +import com.j0ach1mmall3.wastedcops.api.Cop; +import org.bukkit.Location; +import org.bukkit.entity.Player; +import org.bukkit.event.HandlerList; + +public class CopSpawnEvent extends CopEvent { + private static final HandlerList HANDLER_LIST = new HandlerList(); + private Player target; + private Location location; + + public CopSpawnEvent(Cop cop, Player target, Location location) { + super(cop); + this.target = target; + this.location = location; + } + + public Player getTarget() { + return this.target; + } + + public void setTarget(Player newTarget) { + if(newTarget == null || newTarget.getWorld() != location.getWorld()) return; + this.target = newTarget; + } + + public Location getLocation() { + return new Location(this.location.getWorld(), this.location.getX(), + this.location.getY(), this.location.getZ(), this.location.getYaw(), + this.location.getPitch()); + } + + public void setLocation(Location newLocation) { + if(newLocation == null || newLocation.getWorld() == null) return; + this.location = newLocation; + } + + @Override + public HandlerList getHandlers() { + return HANDLER_LIST; + } + + public static HandlerList getHandlerList() { + return HANDLER_LIST; + } + +} diff --git a/wastedcops-master@4d070d71e37/src/main/java/com/j0ach1mmall3/wastedcops/api/events/PlayerKillCopEvent.java b/wastedcops-master@4d070d71e37/src/main/java/com/j0ach1mmall3/wastedcops/api/events/PlayerKillCopEvent.java new file mode 100644 index 0000000..3fcda5b --- /dev/null +++ b/wastedcops-master@4d070d71e37/src/main/java/com/j0ach1mmall3/wastedcops/api/events/PlayerKillCopEvent.java @@ -0,0 +1,53 @@ +package com.j0ach1mmall3.wastedcops.api.events; + +import com.j0ach1mmall3.wastedcops.api.Cop; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.event.HandlerList; +import org.bukkit.inventory.ItemStack; + +import java.util.List; + +/** + * Created by colt on 10/27/16. + */ +public class PlayerKillCopEvent extends CopEvent { + private static final HandlerList HANDLER_LIST = new HandlerList(); + private LivingEntity copKiled; + private Player player; + private List<ItemStack> drops; + + public PlayerKillCopEvent(Cop cop, LivingEntity copKiled, Player player, List<ItemStack> drops) { + super(cop); + this.copKiled = copKiled; + this.player = player; + this.drops = drops; + } + + public LivingEntity getCopKiled() { + return this.copKiled; + } + + public Player getPlayer() { + return this.player; + } + + public List<ItemStack> getDrops() { + return this.drops; + } + + public void setDrops(List<ItemStack> newDrops) { + if(newDrops == null || newDrops.isEmpty()) return; + this.drops = newDrops; + } + + @Override + public HandlerList getHandlers() { + return HANDLER_LIST; + } + + public static HandlerList getHandlerList() { + return HANDLER_LIST; + } + +} diff --git a/wastedcops-master@4d070d71e37/src/main/java/com/j0ach1mmall3/wastedcops/commands/WCReloadCommandHandler.java b/wastedcops-master@4d070d71e37/src/main/java/com/j0ach1mmall3/wastedcops/commands/WCReloadCommandHandler.java new file mode 100644 index 0000000..79b5e94 --- /dev/null +++ b/wastedcops-master@4d070d71e37/src/main/java/com/j0ach1mmall3/wastedcops/commands/WCReloadCommandHandler.java @@ -0,0 +1,23 @@ +package com.j0ach1mmall3.wastedcops.commands; + +import com.j0ach1mmall3.jlib.commands.CommandHandler; +import com.j0ach1mmall3.wastedcops.Main; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; + +/** + * @author j0ach1mmall3 (business.j0ach1mmall3@gmail.com) + * @since 31/08/2016 + */ +public final class WCReloadCommandHandler extends CommandHandler<Main> { + public WCReloadCommandHandler(Main plugin) { + super(plugin); + } + + @Override + protected boolean handleCommand(CommandSender commandSender, String[] strings) { + this.plugin.reload(); + commandSender.sendMessage(ChatColor.GREEN + "Reloaded config!"); + return true; + } +} diff --git a/wastedcops-master@4d070d71e37/src/main/java/com/j0ach1mmall3/wastedcops/config/Config.java b/wastedcops-master@4d070d71e37/src/main/java/com/j0ach1mmall3/wastedcops/config/Config.java new file mode 100644 index 0000000..2f44ec4 --- /dev/null +++ b/wastedcops-master@4d070d71e37/src/main/java/com/j0ach1mmall3/wastedcops/config/Config.java @@ -0,0 +1,51 @@ +package com.j0ach1mmall3.wastedcops.config; + +import com.j0ach1mmall3.jlib.storage.file.yaml.ConfigLoader; +import com.j0ach1mmall3.wastedcops.Main; +import com.j0ach1mmall3.wastedcops.api.CopProperties; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @author j0ach1mmall3 (business.j0ach1mmall3@gmail.com) + * @since 4/06/2016 + */ +public final class Config extends ConfigLoader<Main> { + private final List<CopProperties> copProperties; + private final Map<Integer, Map<String, int[]>> groups; + + public Config(Main plugin) { + super("config.yml", plugin); + this.copProperties = this.loadCopProperties(); + this.groups = this.loadGroups(); + } + + public List<CopProperties> getCopProperties() { + return this.copProperties; + } + + public Map<Integer, Map<String, int[]>> getGroups() { + return this.groups; + } + + private List<CopProperties> loadCopProperties() { + return this.customConfig.getKeys("Cops").stream().map(s -> new CopProperties( + s, + this.config.getString("Cops." + s + ".Entity").toUpperCase(), + this.config.getDouble("Cops." + s + ".Health"), + this.config.getInt("Cops." + s + ".WeaponDropChance"), + this.config.getString("Cops." + s + ".Name"), + this.config.getInt("Cops." + s + ".KillReward"), + this.config.getStringList("Cops." + s + ".Weapons") + )).collect(Collectors.toList()); + } + + private Map<Integer, Map<String, int[]>> loadGroups() { + return this.customConfig.getKeys("Groups").stream().collect(Collectors.toMap(Integer::valueOf, s -> this.customConfig.getKeys("Groups." + s).stream().collect(Collectors.toMap(s1 -> s1, s2 -> new int[]{ + this.config.getInt("Groups." + s + '.' + s2 + ".Min"), + this.config.getInt("Groups." + s + '.' + s2 + ".Max"), + })))); + } +} \ No newline at end of file diff --git a/wastedcops-master@4d070d71e37/src/main/java/com/j0ach1mmall3/wastedcops/listeners/CopListener.java b/wastedcops-master@4d070d71e37/src/main/java/com/j0ach1mmall3/wastedcops/listeners/CopListener.java new file mode 100644 index 0000000..1e049e4 --- /dev/null +++ b/wastedcops-master@4d070d71e37/src/main/java/com/j0ach1mmall3/wastedcops/listeners/CopListener.java @@ -0,0 +1,63 @@ +package com.j0ach1mmall3.wastedcops.listeners; + +import com.j0ach1mmall3.jlib.methods.Random; +import com.j0ach1mmall3.wastedcops.Main; +import com.j0ach1mmall3.wastedcops.api.Cop; +import com.j0ach1mmall3.wastedcops.api.events.CopSpawnEvent; +import com.j0ach1mmall3.wastedcops.api.events.PlayerKillCopEvent; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.entity.ArmorStand; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; + +public class CopListener implements Listener { + private final Main plugin; + + public CopListener(Main plugin) { + this.plugin = plugin; + this.plugin.getServer().getPluginManager().registerEvents(this, this.plugin); + } + + @EventHandler + public void onCopSpawnEvent(CopSpawnEvent event) { + if(event.getLocation().getWorld().getName().equalsIgnoreCase("spawn")) { + event.setCancelled(true); + } + } + + @EventHandler + public void onPlayerKillCopEvent(PlayerKillCopEvent event) { + Player killer = event.getPlayer(); + LivingEntity victim = event.getCopKiled(); + Cop cop = event.getCop(); + if (Random.getInt(100) < cop.getCopProperties().getWeaponDropChance()) + victim.getWorld().dropItemNaturally(victim.getLocation(), victim.getEquipment().getItemInMainHand()); + event.getDrops().clear(); + int reward = cop.getCopProperties().getKillReward(); + this.plugin.addMoney(killer, reward); + ArmorStand as = (ArmorStand) victim.getWorld().spawnEntity(victim.getLocation(), EntityType.ARMOR_STAND); + as.setCustomName(ChatColor.translateAlternateColorCodes('&', "&a&l$" + reward)); + as.setCustomNameVisible(true); + as.setCanPickupItems(false); + as.setVisible(false); + as.setSmall(true); + as.setBasePlate(false); + as.setInvulnerable(true); + as.addPotionEffect(new PotionEffect(PotionEffectType.LEVITATION, 30, 0)); + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(this.plugin, new Runnable() { + @Override + public void run() { + as.damage(0); + as.remove(); + } + }, 30L); + this.plugin.addKill(killer); + cop.onDestroy(victim); + } +} diff --git a/wastedcops-master@4d070d71e37/src/main/java/com/j0ach1mmall3/wastedcops/listeners/EntityListener.java b/wastedcops-master@4d070d71e37/src/main/java/com/j0ach1mmall3/wastedcops/listeners/EntityListener.java new file mode 100644 index 0000000..30499b8 --- /dev/null +++ b/wastedcops-master@4d070d71e37/src/main/java/com/j0ach1mmall3/wastedcops/listeners/EntityListener.java @@ -0,0 +1,207 @@ +package com.j0ach1mmall3.wastedcops.listeners; + +import java.util.ConcurrentModificationException; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.entity.Creature; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.EntityDeathEvent; +import org.bukkit.event.entity.EntityTargetEvent; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.PlayerInteractEntityEvent; +import org.bukkit.event.player.PlayerKickEvent; +import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.event.world.ChunkUnloadEvent; + +import com.j0ach1mmall3.wastedcops.Main; +import com.j0ach1mmall3.wastedcops.api.Cop; +import com.j0ach1mmall3.wastedcops.api.events.CopDamagePlayerEvent; +import com.j0ach1mmall3.wastedcops.api.events.CopKillPlayerEvent; +import com.j0ach1mmall3.wastedcops.api.events.PlayerKillCopEvent; +import com.j0ach1mmall3.wastedguns.api.weapons.Weapon; + +import net.grandtheftmc.gtm.users.GTMUser; +import net.grandtheftmc.gtm.users.GTMUserManager; +import net.grandtheftmc.gtm.users.JobMode; + +public final class EntityListener implements Listener { + private final Main plugin; + private int multiplier = 800; + + public EntityListener(Main plugin) { + this.plugin = plugin; + Bukkit.getServer().getPluginManager().registerEvents(this, plugin); + /*Bukkit.getScheduler().scheduleSyncRepeatingTask(this.plugin, () -> Bukkit.getOnlinePlayers().stream().filter(p -> plugin.getWantedLevel(p) > 0).forEach(p -> { + Map<String, int[]> odds = plugin.getBabies().getGroups().get(plugin.getWantedLevel(p)); + if(odds != null) { + odds.entrySet().forEach(e -> { + Location spawnLocation = p.getLocation().add(20 * (Random.getBoolean() ? 1 : -1), 0, 20 * (Random.getBoolean() ? 1 : -1)); + plugin.getBabies().getCopProperties().stream().filter(c -> c.getIdentifier().equalsIgnoreCase(e.getKey())).findFirst().ifPresent(c -> { + int count = e.getValue()[0] == e.getValue()[1] ? e.getValue()[0] : Random.getInt(e.getValue()[0], e.getValue()[1]); + for(int i = 0;i < count;i++) { + plugin.spawnCopAtLocation(spawnLocation, c, p); + } + }); + }); + } + }), 300, 600);*/ + Bukkit.getScheduler().scheduleSyncRepeatingTask(plugin, new Runnable() { + @Override + public void run() { + for(Map.Entry<Player, Set<LivingEntity>> e : plugin.getCops().entrySet() ) { + try { + Player p = e.getKey(); + boolean isVisible = false; + for (LivingEntity z : e.getValue()) { + if (((Cop) z.getMetadata("Cop").get(0).value()).onTick(z, p)) isVisible = true; + } + if (isVisible) { + plugin.getNoTargetTicks().put(p, 0L); + } else { + plugin.getNoTargetTicks().put(p, plugin.getNoTargetTicks().getOrDefault(p, 0L) + 1); + } + if (plugin.getNoTargetTicks().getOrDefault(p, 0L) / EntityListener.this.multiplier >= 1) { + double level = plugin.getNoTargetTicks().getOrDefault(p, 0L) / EntityListener.this.multiplier; + int lostLevel = plugin.getWantedLevel(p) - (int)level; + if(lostLevel <= 0) { + plugin.getCops().getOrDefault(p, new HashSet<>()).forEach(LivingEntity::remove); + plugin.getCops().remove(p); + plugin.getNoTargetTicks().remove(p); + plugin.setWantedLevel(p, 0); + p.sendMessage(ChatColor.RED + "You lost the cops!"); + EntityListener.this.multiplier = 800; + return; + } else { + EntityListener.this.multiplier -= 150; + p.sendMessage(ChatColor.YELLOW + "The cops are losing you!"); + plugin.setWantedLevel(p, lostLevel); + plugin.getNoTargetTicks().put(p, plugin.getNoTargetTicks().get(p) - EntityListener.this.multiplier); + return; + } + } + continue; + } catch(ConcurrentModificationException exception) { + continue; + } + } + } + }, 1, 1); + } + + @EventHandler + public void onChunkUnload(ChunkUnloadEvent e) { + for(Entity entity : e.getChunk().getEntities()) { + if(entity.hasMetadata("Cop")) { + this.plugin.getCops().values().forEach(s -> s.remove(entity)); + entity.remove(); + } + } + } + + @EventHandler + public void onEntityDeath(EntityDeathEvent event) { + if(!(event.getEntity() instanceof LivingEntity)) return; + if(event.getEntity().getKiller() == null) return; + if(event.getEntity().hasMetadata("Cop") && event.getEntity().getKiller().getType() == EntityType.PLAYER) { + LivingEntity victim = event.getEntity(); + Player killer = victim.getKiller(); + Cop cop = (Cop)victim.getMetadata("Cop").get(0).value(); + PlayerKillCopEvent playerKillCopEvent = new PlayerKillCopEvent(cop, victim, killer, event.getDrops()); + Bukkit.getPluginManager().callEvent(playerKillCopEvent); + event.getDrops().clear(); + event.getDrops().addAll(playerKillCopEvent.getDrops()); + event.setDroppedExp(0); + } else if(event.getEntity().getKiller().hasMetadata("Cop") && event.getEntity().getType() == EntityType.PLAYER) { + if(event.getEntity().getType() != EntityType.PLAYER) return; + Cop killer = (Cop)event.getEntity().getKiller().getMetadata("Cop").get(0).value(); + Player victim = (Player)event.getEntity(); + CopKillPlayerEvent killPlayerEvent = new CopKillPlayerEvent(killer, victim, event.getDrops()); + Bukkit.getPluginManager().callEvent(killPlayerEvent); + event.getDrops().clear(); + event.getDrops().addAll(killPlayerEvent.getDrops()); + } + } + + @EventHandler(ignoreCancelled = true) + public void onEntityDamageByEntity(EntityDamageByEntityEvent event) { + if(event.getEntity().hasMetadata("Cop") && event.getDamager() instanceof Player) { + + // grab event variables + Player damager = (Player)event.getDamager(); + Creature cop = (Creature)event.getEntity(); + + GTMUser gtmUser = GTMUserManager.getInstance().getUser(damager.getUniqueId()).orElse(null); + if (gtmUser != null){ + if (gtmUser.getJobMode() == JobMode.COP){ + event.setCancelled(true); + return; + } + } + + if(this.plugin.getWantedLevel(damager) == 0) { + this.plugin.addKill(damager); + } + this.plugin.getNoTargetTicks().put(damager, 0L); + cop.setTarget(damager); + } else if(event.getDamager().hasMetadata("Cop") && event.getEntity().getType() == EntityType.PLAYER) { + Player victim = (Player)event.getEntity(); + Cop cop = (Cop)event.getDamager().getMetadata("Cop").get(0).value(); + this.plugin.getNoTargetTicks().put(victim, 0L); + Weapon weapon = cop.getWeapon(); + CopDamagePlayerEvent damageEvent = new CopDamagePlayerEvent(cop, victim, weapon, event.getDamage()); + this.plugin.getServer().getPluginManager().callEvent(damageEvent); + if(damageEvent.isCancelled()) { + event.setCancelled(true); + return; + } + event.setDamage(damageEvent.getDamageDealt()); + } + } + + @EventHandler + public void onPlayerInteractEntity(PlayerInteractEntityEvent e) { + if(e.getRightClicked().hasMetadata("Cop")) e.setCancelled(true); + } + + @EventHandler + public void onEntityTarget(EntityTargetEvent e) { + if(e.getEntity().hasMetadata("Cop")) e.setCancelled(true); + } + + @EventHandler + public void onPlayerQuit(PlayerQuitEvent e) { + Player p = e.getPlayer(); + this.plugin.getCops().getOrDefault(p, new HashSet<>()).forEach(LivingEntity::remove); + this.plugin.getCops().remove(p); + this.plugin.getNoTargetTicks().remove(p); + this.plugin.resetWantedLevel(p); + } + + @EventHandler + public void onPlayerKick(PlayerKickEvent e) { + Player p = e.getPlayer(); + this.plugin.getCops().getOrDefault(p, new HashSet<>()).forEach(LivingEntity::remove); + this.plugin.getCops().remove(p); + this.plugin.getNoTargetTicks().remove(p); + this.plugin.resetWantedLevel(p); + } + + @EventHandler + public void onPlayerDeath(PlayerDeathEvent e) { + Player p = e.getEntity(); + this.plugin.getCops().getOrDefault(p, new HashSet<>()).forEach(LivingEntity::remove); + this.plugin.getCops().remove(p); + this.plugin.getNoTargetTicks().remove(p); + this.plugin.resetWantedLevel(p); + } +} diff --git a/wastedcops-master@4d070d71e37/src/main/resources/config.yml b/wastedcops-master@4d070d71e37/src/main/resources/config.yml new file mode 100644 index 0000000..c4a7920 --- /dev/null +++ b/wastedcops-master@4d070d71e37/src/main/resources/config.yml @@ -0,0 +1,88 @@ +Cops: + PoliceMan: + Entity: ZOMBIE + Health: 5.0 + WeaponDropChance: 15 + Name: '&3&lCop' + KillReward: 50 + Weapons: + - Pistol + - StunGun + FBI: + Entity: HUSK + Health: 10.0 + WeaponDropChance: 10 + Name: '&b&lFBI' + KillReward: 100 + Weapons: + - MicroSMG + - SawedOffShotgun + - PumpShotgun + SWAT: + Entity: PIG_ZOMBIE + Health: 15.0 + WeaponDropChance: 5 + Name: '&8&lSWAT' + KillReward: 250 + Weapons: + - AssaultShotgun + - BullpupRifle + PoliceDog: + Entity: WOLF + Health: 5.0 + WeaponDropChance: 0 + Name: '&9&lPoliceDog' + KillReward: 50 + Weapons: [] +Groups: + 1: + PoliceDog: + Min: 1 + Max: 1 + PoliceMan: + Min: 0 + Max: 1 + 2: + PoliceDog: + Min: 0 + Max: 1 + PoliceMan: + Min: 1 + Max: 2 + 3: + PoliceDog: + Min: 1 + Max: 2 + PoliceMan: + Min: 1 + Max: 3 + FBI: + Min: 0 + Max: 1 + 4: + PoliceDog: + Min: 1 + Max: 2 + PoliceMan: + Min: 2 + Max: 3 + FBI: + Min: 0 + Max: 2 + SWAT: + Min: 0 + Max: 1 + 5: + PoliceDog: + Min: 1 + Max: 3 + PoliceMan: + Min: 2 + Max: 5 + FBI: + Min: 2 + Max: 3 + SWAT: + Min: 1 + Max: 3 +DoNotChange: 1.0.0 diff --git a/wastedcops-master@4d070d71e37/src/main/resources/plugin.yml b/wastedcops-master@4d070d71e37/src/main/resources/plugin.yml new file mode 100644 index 0000000..8ded80b --- /dev/null +++ b/wastedcops-master@4d070d71e37/src/main/resources/plugin.yml @@ -0,0 +1,19 @@ +name: WastedCops +main: com.j0ach1mmall3.wastedcops.Main +version: 1.0.0 +author: j0ach1mmall3 +description: A Cops plugin for GTM +depend: [JLib, WastedGuns] +commands: + WCReload: + description: Reloads the config + usage: /<command> +permissions: + wc.*: + description: All the WastedCops permissions + default: op + children: + wc.reload: true + wc.reload: + description: Access to /wcreload + default: op \ No newline at end of file diff --git a/wastedguns-master@2e3501603b9/.gitignore b/wastedguns-master@2e3501603b9/.gitignore new file mode 100644 index 0000000..14f5663 --- /dev/null +++ b/wastedguns-master@2e3501603b9/.gitignore @@ -0,0 +1,102 @@ + +\.idea/ + +target/classes/ + +target/ + +*.iml + +/bin/ +/build/ + +##### Gradle ##### +.gradle +# Ignore Gradle GUI config +gradle-app.setting + +# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) +!gradle-wrapper.jar + +# Cache of project +.gradletasknamecache + +# # Work around https://youtrack.jetbrains.com/issue/IDEA-116898 +# gradle/wrapper/gradle-wrapper.properties + +##### Eclipse ##### +.metadata +bin/ +tmp/ +*.tmp +*.bak +*.swp +*~.nib +local.properties +.settings/ +.loadpath +.recommenders + +.project + +# External tool builders +.externalToolBuilders/ + +# Locally stored "Eclipse launch configurations" +*.launch + +# PyDev specific (Python IDE for Eclipse) +*.pydevproject + +# CDT-specific (C/C++ Development Tooling) +.cproject + +# JDT-specific (Eclipse Java Development Tools) +.classpath + +# Java annotation processor (APT) +.factorypath + +# PDT-specific (PHP Development Tools) +.buildpath + +# sbteclipse plugin +.target + +# Tern plugin +.tern-project + +# TeXlipse plugin +.texlipse + +# STS (Spring Tool Suite) +.springBeans + +# Code Recommenders +.recommenders/ + +*.class + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files # +*.jar +*.war +*.ear + +# Unit Testing +logs/ + +##### IntelliJ ##### +*.iml +*.ipr +*.iws +.idea/ + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* + +##### MacOS ##### +.DS_Store + diff --git a/wastedguns-master@2e3501603b9/README.md b/wastedguns-master@2e3501603b9/README.md new file mode 100644 index 0000000..fdaec0e --- /dev/null +++ b/wastedguns-master@2e3501603b9/README.md @@ -0,0 +1 @@ +First commit. \ No newline at end of file diff --git a/wastedguns-master@2e3501603b9/pom.xml b/wastedguns-master@2e3501603b9/pom.xml new file mode 100644 index 0000000..fb0c541 --- /dev/null +++ b/wastedguns-master@2e3501603b9/pom.xml @@ -0,0 +1,132 @@ +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + + <groupId>net.grandtheftmc</groupId> + <artifactId>wastedguns</artifactId> + <version>1.1.6</version> + <name>WastedGuns</name> + + <repositories> + <repository> + <id>jitpack.io</id> + <url>https://jitpack.io</url> + </repository> + <repository> + <id>nexus-release</id> + <url>http://nexus.grandtheftmc.net/content/repositories/releases</url> + </repository> + </repositories> + + <distributionManagement> + <repository> + <id>nexus-release</id> + <name>Internal Releases</name> + <url>http://nexus.grandtheftmc.net/content/repositories/releases</url> + </repository> + <snapshotRepository> + <id>nexus-snapshot</id> + <name>Internal Snapshots</name> + <url>http://nexus.grandtheftmc.net/content/repositories/snapshots</url> + </snapshotRepository> + </distributionManagement> + + <dependencies> + <dependency> + <groupId>de.slikey</groupId> + <artifactId>EffectLib</artifactId> + <version>5.2</version> + </dependency> + <dependency> + <groupId>org.spigotmc.1.12</groupId> + <artifactId>spigot</artifactId> + <version>1.12.0</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>com.comphenix.protocol</groupId> + <artifactId>ProtocolLib</artifactId> + <version>1.0.0</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>com.github.j0ach1mmall3</groupId> + <artifactId>JLib</artifactId> + <version>1.10.0</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>net.grandtheftmc</groupId> + <artifactId>wastedvehicles</artifactId> + <version>1.0.2.rewrite</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>net.grandtheftmc</groupId> + <artifactId>houses</artifactId> + <version>LATEST</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>net.grandtheftmc</groupId> + <artifactId>core</artifactId> + <version>2.3.9-mutex</version> + <scope>provided</scope> + </dependency> + </dependencies> + + <properties> + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + <maven.compiler.source>1.8</maven.compiler.source> + <maven.compiler.target>1.8</maven.compiler.target> + </properties> + + <build> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-shade-plugin</artifactId> + <version>2.4.3</version> + <configuration> + <finalName>WastedGuns</finalName> + <artifactSet> + <includes> + <include>de.slikey:EffectLib</include> + <include>net.grandtheftmc:WastedVehicles</include> + </includes> + </artifactSet> + </configuration> + <executions> + <execution> + <phase>package</phase> + <goals> + <goal>shade</goal> + </goals> + </execution> + </executions> + </plugin> + + <!-- Nexus deploy --> + <plugin> + <groupId>org.sonatype.plugins</groupId> + <artifactId>nexus-staging-maven-plugin</artifactId> + <version>1.6.8</version> + <extensions>true</extensions> + <executions> + <execution> + <id>default-deploy</id> + <phase>deploy</phase> + <goals> + <goal>deploy</goal> + </goals> + </execution> + </executions> + <configuration> + <serverId>nexus</serverId> + <nexusUrl>http://nexus.grandtheftmc.net/</nexusUrl> + <skipStaging>true</skipStaging> + </configuration> + </plugin> + </plugins> + </build> +</project> \ No newline at end of file diff --git a/wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/Main.java b/wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/Main.java new file mode 100644 index 0000000..c4306e3 --- /dev/null +++ b/wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/Main.java @@ -0,0 +1,154 @@ +package com.j0ach1mmall3.wastedguns; + +/** + * @author j0ach1mmall3 (business.j0ach1mmall3@gmail.com) + * @since 5/05/2016 + */ +public final class Main { +// private final Map<LivingEntity, List<Integer>> shootingLivingEntities = new HashMap<>(); +// private final Map<LivingEntity, LivingEntity> homingTargets = new HashMap<>(); +// private final Map<LivingEntity, Set<Entity>> stickyBombs = new HashMap<>(); +// private final Set<LivingEntity> reloadingLivingEntities = new HashSet<>(); +// private final Map<String, Long> cooldownLivingEntities = new HashMap<>(); +// private final Map<LivingEntity, Integer> burstShots = new HashMap<>(); +// private final Map<LivingEntity, Integer> burstTicks = new HashMap<>(); + +// private final HashMap<UUID, PlayerCache> playerCacheMap = Maps.newHashMap(); +// +// private final Map<Block, Material> blockQueue = new HashMap<>(); +// private final Set<Entity> entityQueue = new HashSet<>(); +// +// private Collection<Material> ignoreBlocks = new ArrayList<>(); +// +// private Attachments attachments; +// private Explosives explosives; +// private Melee melee; +// private Ranged ranged; +// private Airstrikes airstrikes; +// +// private EffectManager manager; +// private static Main wastedGuns; +// +// @Override +// public void onEnable() { +// this.reload(); +// new PlayerListener(this); +// new EntityListener(this); +// new WeaponsListener(this); +// new GiveWeaponCommandHandler(this).registerCommand(new Command(this, "GiveWeapon", "wg.giveweapon", ChatColor.RED + "Usage: /giveweapon <identifier> <player>")); +// new WGReloadCommandHandler(this).registerCommand(new Command(this, "WGReload", "wg.reload", ChatColor.RED + "Usage: /wgreload")); +// this.manager = new EffectManager(this); +// wastedGuns = this; +// } +// +// @Override +// public void onDisable() { +// this.blockQueue.entrySet().forEach(e -> e.getKey().setType(e.getValue())); +// this.entityQueue.forEach(Entity::remove); +//// this.stickyBombs.entrySet().forEach(e -> e.getValue().stream().filter(ent -> !(ent instanceof Player)).forEach(Entity::remove)); +// manager.dispose(); +// } +// +// public void reload() { +// this.config = new Config(this); +// this.attachments = new Attachments(this); +// this.explosives = new Explosives(this); +// this.melee = new Melee(this); +// this.ranged = new Ranged(this); +// this.airstrikes = new Airstrikes(this); +// } +// +// public static Main getWastedGuns() { +// return wastedGuns; +// } +// +// public EffectManager getEffectManager() { +// return this.manager; +// } +// +// public HashMap<UUID, PlayerCache> getPlayerCacheMap() { +// return this.playerCacheMap; +// } +// +// public PlayerCache getPlayerCache(UUID uniqueId) { +// return this.playerCacheMap.containsKey(uniqueId) ? this.getPlayerCache(uniqueId) : null; +// } +// +// public Map<Block, Material> getBlockQueue() { +// return this.blockQueue; +// } +// +// public Set<Entity> getEntityQueue() { +// return this.entityQueue; +// } +// +// public Attachments getAttachments() { +// return this.attachments; +// } +// +// public Explosives getExplosives() { +// return this.explosives; +// } +// +// public Melee getMelee() { +// return this.melee; +// } +// +// public Ranged getRanged() { +// return this.ranged; +// } +// +// public Set<Weapon<?>> getWeapons() { +// return null; +// } + +// public Optional<Weapon> getWeapon(ItemStack itemStack) { +// if (itemStack == null || !itemStack.hasItemMeta() || !itemStack.getItemMeta().hasDisplayName()) return Optional.empty(); +// +// Optional<Weapon> weapon = WeaponType.getWeaponsFromType(WeaponType.Type.THROWABLE).stream().filter(w -> General.areSimilar(w.getItemStack(), itemStack)).findFirst(); +// if (!weapon.isPresent()) +// weapon = WeaponType.getWeaponsFromType(WeaponType.Type.DROPPABLE).stream().filter(w -> General.areSimilar(w.getItemStack(), itemStack)).findFirst(); +// if (!weapon.isPresent()) +// weapon = WeaponType.getWeaponsFromType(WeaponType.Type.MELEE).stream().filter(w -> w.getItemStack().getType() == itemStack.getType() && w.getItemStack().getData().equals(itemStack.getData())).findFirst(); +// if (!weapon.isPresent()) +// weapon = WeaponType.getWeaponsFromType(WeaponType.Type.RANGED).stream().filter(w -> w.getItemStack().getType() == itemStack.getType() && itemStack.getItemMeta().getDisplayName().contains("«") && itemStack.getItemMeta().getDisplayName().contains("»")).findFirst(); +// +// if (weapon.isPresent()) { +// Weapon w = weapon.get().clone(); +// Attachment.getAttachments(this, itemStack).forEach(a -> a.apply(w)); +// return Optional.of(w); +// } +// +// return weapon; +// } +// +// public Optional<Weapon> getWeapon(String identifier) { +// if (identifier == null) return Optional.empty(); +// Optional<Weapon> weapon = this.getWeapons().stream().filter(w -> w.getIdentifier().equalsIgnoreCase(identifier)).findFirst(); +// weapon.ifPresent(w -> { +// if (w instanceof ThrowableWeapon) return; +// try { +// w.setItemStack(NBTTags.setNbtTag(w.getItemStack(), "_", UUID.randomUUID().toString())); +// } catch (Exception e) { +// e.printStackTrace(); +// } +// }); +// return weapon; +// } +// +// public Optional<Attachment> getAttachment(String identifier) { +// if (identifier == null) return Optional.empty(); +// return this.attachments.getAttachments().stream().filter(a -> a.getIdentifier().equalsIgnoreCase(identifier)).findFirst(); +// } +// +// public Collection<Material> getIgnoreBlocks() { +// if (this.ignoreBlocks == null || this.ignoreBlocks.isEmpty()) { +// this.ignoreBlocks = Arrays.asList(Material.SIGN, Material.SIGN_POST, +// Material.WALL_SIGN, Material.BREWING_STAND, Material.DROPPER, +// Material.CHEST, Material.ENDER_CHEST, Material.TRAPPED_CHEST, +// Material.IRON_DOOR_BLOCK, Material.IRON_DOOR, Material.ANVIL, +// Material.CARPET); +// } +// return this.ignoreBlocks; +// } +} diff --git a/wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/MathUtil.java b/wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/MathUtil.java new file mode 100644 index 0000000..5076ab9 --- /dev/null +++ b/wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/MathUtil.java @@ -0,0 +1,160 @@ +package com.j0ach1mmall3.wastedguns; + +import net.minecraft.server.v1_12_R1.AxisAlignedBB; +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; +import org.bukkit.craftbukkit.v1_12_R1.entity.CraftEntity; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.util.BlockIterator; +import org.bukkit.util.Vector; + +import java.util.Arrays; +import java.util.Set; +import java.util.concurrent.ThreadLocalRandom; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +/** + * @author j0ach1mmall3 (business.j0ach1mmall3@gmail.com) + * @since 12/09/2016 + */ +public final class MathUtil { + private static final Set<Material> TRANSPARENT_BLOCKS = Arrays.asList(Material.values()).stream().filter(m -> m == Material.BARRIER || !m.isSolid()).collect(Collectors.toSet()); + + private MathUtil() { + } + + public static double getCrossProduct(LivingEntity livingEntity, Location target) { + if (livingEntity.getWorld() != target.getWorld()) return 1000; + + Location head = livingEntity.getLocation().add(0, livingEntity.getEyeHeight(), 0); + + Vector look = livingEntity.getLocation().getDirection().normalize(); + Vector direction = head.subtract(target).toVector().normalize(); + Vector cp = direction.crossProduct(look); + + return cp.length(); + } + + public static Stream<LivingEntity> getNearbyEntities(Entity entity, double range) { + return entity.getNearbyEntities(range, range, range).stream().filter(e -> e instanceof LivingEntity).map(e -> (LivingEntity) e); + } + + public static Stream<LivingEntity> getNearbyEntities(Entity entity, double x, double y, double z) { + return entity.getNearbyEntities(x, y, z).stream().filter(e -> e instanceof LivingEntity).map(e -> (LivingEntity) e); + } + + public static Object[] getNearestTarget(LivingEntity livingEntity, Location origin, Vector direction, int range) { + LivingEntity target = null; + Location intersection = null; + double distance = Double.MAX_VALUE; + for (LivingEntity e : getNearbyEntities(livingEntity, range).collect(Collectors.toList())) { + if (e.getType() == EntityType.PLAYER) { + Player player = (Player) e; + if (player.getGameMode() != GameMode.ADVENTURE && player.getGameMode() != GameMode.SURVIVAL) continue; + } + Location i = raytrace(origin, direction, getBoundingBox(e), range); + if (i != null && i.distance(origin) < distance) { + target = e; + intersection = i; + distance = i.distance(origin); + } + } + return target == null || intersection == null ? null : new Object[]{target, intersection}; + } + + @SuppressWarnings("deprecation") + public static Block getTargetBlock(Location origin, Vector direction, int range) { + ThreadLocalRandom random = ThreadLocalRandom.current(); + try { + BlockIterator blockIterator = new BlockIterator(origin.getWorld(), origin.toVector(), direction, 0, range); + while (blockIterator.hasNext()) { + Block b = blockIterator.next(); + if((b.getType() == Material.SIGN || b.getType().name().contains("FENCE")) && random.nextBoolean()) + continue; + + if (!TRANSPARENT_BLOCKS.contains(b.getType()) && !(b.getType().name().endsWith("DOOR") && (((b.getData() & 0x04) != 0) || ((b.getData() & 0x08) != 0 && b.getRelative(BlockFace.DOWN).getType() != Material.TRAP_DOOR && b.getRelative(BlockFace.DOWN).getType() != Material.IRON_TRAPDOOR && (b.getRelative(BlockFace.DOWN).getData() & 0x04) != 0)))) + return b; + } + } catch (IllegalStateException exception) { + } + return null; + } + + private static Location raytrace(Location origin, Vector direction, double[] boundingBox, int range) { + double invX = 1 / direction.getX(); + double invY = 1 / direction.getY(); + double invZ = 1 / direction.getZ(); + + double txmin = ((invX < 0 ? boundingBox[0] : boundingBox[3]) - origin.getX()) * invX; + double txmax = ((invX < 0 ? boundingBox[3] : boundingBox[0]) - origin.getX()) * invX; + double tymin = ((invY < 0 ? boundingBox[1] : boundingBox[4]) - origin.getY()) * invY; + double tymax = ((invY < 0 ? boundingBox[4] : boundingBox[1]) - origin.getY()) * invY; + double tzmin = ((invZ < 0 ? boundingBox[2] : boundingBox[5]) - origin.getZ()) * invZ; + double tzmax = ((invZ < 0 ? boundingBox[5] : boundingBox[2]) - origin.getZ()) * invZ; + + if (txmin > tymax || tymin > txmax) return null; + if (tymin > txmin) txmin = tymin; + if (tymax < txmax) txmax = tymax; + + if (txmin > tzmax || tzmin > txmax) return null; + if (tzmin > txmin) txmin = tzmin; + if (tzmax < txmax) txmax = tzmax; + + return txmin < range && txmax > 0 ? origin.clone().add(direction.clone().multiply(txmin - 0.1)) : null; + } + + private static double[] getBoundingBox(Entity entity) { + net.minecraft.server.v1_12_R1.Entity en = ((CraftEntity) entity).getHandle(); + AxisAlignedBB box = en.getBoundingBox(); + return new double[] {box.d, box.e, box.f, box.a, box.b, box.c}; + +// try { +// Object handle = ReflectionAPI.getHandle((Object) entity); +// Object boundingBox = handle.getClass().getMethod("getBoundingBox").invoke(handle); +// return new double[]{(double) ReflectionAPI.getNmsClass("AxisAlignedBB").getField("d").get(boundingBox), +// (double) ReflectionAPI.getNmsClass("AxisAlignedBB").getField("e").get(boundingBox), +// (double) ReflectionAPI.getNmsClass("AxisAlignedBB").getField("f").get(boundingBox), +// (double) ReflectionAPI.getNmsClass("AxisAlignedBB").getField("a").get(boundingBox), +// (double) ReflectionAPI.getNmsClass("AxisAlignedBB").getField("b").get(boundingBox), +// (double) ReflectionAPI.getNmsClass("AxisAlignedBB").getField("c").get(boundingBox)}; +// } catch (Exception e) { +// e.printStackTrace(); +// return null; +// } + } + + public static Vector getVelocity(Location from, Location to) { + double dX = from.getX() - to.getX(); + double dY = from.getY() - to.getY(); + double dZ = from.getZ() - to.getZ(); + double yaw = Math.atan2(dZ, dX); + double pitch = Math.atan2(Math.sqrt(dZ * dZ + dX * dX), dY) + 3.141592653589793D; + double x = Math.sin(pitch) * Math.cos(yaw); + double y = Math.sin(pitch) * Math.sin(yaw); + double z = Math.cos(pitch); + return new Vector(x, z, y); + } + + // + public static double getExplosionResistanceMultiplier(LivingEntity e) { + double total = 1; + ItemStack[] armor = e.getEquipment().getArmorContents(); + for(ItemStack is : armor) { + if(is==null) + continue; + if(!is.hasItemMeta() || !is.getItemMeta().hasEnchant(Enchantment.PROTECTION_EXPLOSIONS)) + continue; + total += is.getItemMeta().getEnchantLevel(Enchantment.PROTECTION_EXPLOSIONS); + } + return total / 2.0; + } +} diff --git a/wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/StringUtil.java b/wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/StringUtil.java new file mode 100644 index 0000000..9e91e06 --- /dev/null +++ b/wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/StringUtil.java @@ -0,0 +1,78 @@ +package com.j0ach1mmall3.wastedguns; +/* + * Copyright (C) 2013-Current Carter Gale (Ktar5) <buildfresh@gmail.com> + * + * This file is part of wastedguns. + * + * wastedguns can not be copied and/or distributed without the express + * permission of the aforementioned owner. + */ + +import org.bukkit.ChatColor; + +import java.util.List; + +public class StringUtil { + /** + * Quickly color a string + */ + public static String colorString(String input) { + return input != null ? ChatColor.translateAlternateColorCodes('&', input) : null; + } + + /** + * Quickly remove color from a string + */ + public static String removeColor(String input) { + return ChatColor.stripColor(input); + } + + /** + * Color a list.. + */ + public static List<String> colorList(List<String> inputs) { + if (inputs == null) { + return null; + } + + for (int i = 0; i < inputs.size(); i++) + inputs.set(i, colorString(inputs.get(i))); + return inputs; + } + + /** + * Color us some strings matey! + */ + public static String[] colorArray(String[] inputs) { + for (int i = 0; i < inputs.length; i++) + inputs[i] = colorString(inputs[i]); + return inputs; + } + + public static String[] colorArray(String[] inputs, ChatColor color) { + for (int i = 0; i < inputs.length; i++) { + inputs[i] = color + inputs[i]; + } + + return inputs; + } + + /** + * Limits a string to an upper bound for its length + * + * @param string The string to limit + * @param limit The upper bound value length (char count) + * @return Returns the chopped up string if it goes over the limite, otherwise returns string + */ + public static String limitString(String string, int limit) { + return string.substring(0, Math.min(string.length(), limit)); + } + + public static String replace(String input, String toReplace, String replaceWith) { + return input.replace(toReplace, replaceWith); + } + + public static String replaceAndColor(String input, String toReplace, String replaceWith) { + return colorString(replace(input, toReplace, replaceWith)); + } +} diff --git a/wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/api/attachments/Attachment.java b/wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/api/attachments/Attachment.java new file mode 100644 index 0000000..f77f111 --- /dev/null +++ b/wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/api/attachments/Attachment.java @@ -0,0 +1,167 @@ +package com.j0ach1mmall3.wastedguns.api.attachments; + +import com.j0ach1mmall3.jlib.inventory.CustomEnchantment; +import com.j0ach1mmall3.wastedguns.Main; +import net.grandtheftmc.guns.weapon.Weapon; +import org.bukkit.Sound; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.enchantments.EnchantmentTarget; +import org.bukkit.inventory.ItemStack; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Set; + +/** + * @author j0ach1mmall3 (business.j0ach1mmall3@gmail.com) + * @since 13/05/2016 + */ +public final class Attachment { + private final Main plugin; + private final String identifier; + private final double meleeDamageFactor; + private final double fireDelayFactor; + private final double walkSpeedFactor; + private final Sound useSound; + private final double damageFactor; + private final double accuracyFactor; + private final double recoilFactor; + private final double zoomFactor; + private final int magazineAmount; + private final double reloadTimeFactor; + private final double rangeFactor; + private final boolean pumpkinScope; + + private final Enchantment enchantment; + + public Attachment(Main plugin, String identifier, double meleeDamageFactor, double fireDelayFactor, double walkSpeedFactor, Sound useSound, double damageFactor, double accuracyFactor, double recoilFactor, double zoomFactor, int magazineAmount, double reloadTimeFactor, double rangeFactor, boolean pumpkinScope) { + this.plugin = plugin; + this.identifier = identifier; + this.meleeDamageFactor = meleeDamageFactor; + this.fireDelayFactor = fireDelayFactor; + this.walkSpeedFactor = walkSpeedFactor; + this.useSound = useSound; + this.damageFactor = damageFactor; + this.accuracyFactor = accuracyFactor; + this.recoilFactor = recoilFactor; + this.zoomFactor = zoomFactor; + this.magazineAmount = magazineAmount; + this.reloadTimeFactor = reloadTimeFactor; + this.rangeFactor = rangeFactor; + this.pumpkinScope = pumpkinScope; + + CustomEnchantment ce = new CustomEnchantment(this.identifier, new ArrayList<>(), EnchantmentTarget.ALL, 1, 1); + ce.register(); + this.enchantment = ce.getEnchantment(); + } + +// public String getIdentifier() { +// return this.identifier; +// } +// +// public double getMeleeDamageFactor() { +// return this.meleeDamageFactor; +// } +// +// public double getFireDelayFactor() { +// return this.fireDelayFactor; +// } +// +// public double getWalkSpeedFactor() { +// return this.walkSpeedFactor; +// } +// +// public Sound getUseSound() { +// return this.useSound; +// } +// +// public double getDamageFactor() { +// return this.damageFactor; +// } +// +// public double getAccuracyFactor() { +// return this.accuracyFactor; +// } +// +// public double getRecoilFactor() { +// return this.recoilFactor; +// } +// +// public double getZoomFactor() { +// return this.zoomFactor; +// } +// +// public int getMagazineAmount() { +// return this.magazineAmount; +// } +// +// public double getReloadTimeFactor() { +// return this.reloadTimeFactor; +// } +// +// public double getRangeFactor() { +// return this.rangeFactor; +// } +// +// public boolean isPumpkinScope() { +// return this.pumpkinScope; +// } +// +// public Enchantment getEnchantment() { +// return this.enchantment; +// } +// +// public ItemStack add(ItemStack itemStack) { +// Set<Attachment> attachments = getAttachments(this.plugin, itemStack); +// attachments.add(this); +// return setAttachments(itemStack, attachments); +// } +// +// public ItemStack remove(ItemStack itemStack) { +// Set<Attachment> attachments = getAttachments(this.plugin, itemStack); +// attachments.remove(this); +// return setAttachments(itemStack, attachments); +// } +// +// public boolean has(ItemStack itemStack) { +// return getAttachments(this.plugin, itemStack).contains(this); +// } +// +// public void apply(Weapon weapon) { +// weapon.setMeleeDamage(weapon.getMeleeDamage() * this.meleeDamageFactor); +// weapon.setFireDelay((long) (weapon.getFireDelay() * this.fireDelayFactor)); +// weapon.setWalkSpeed((float) (weapon.getWalkSpeed() * this.walkSpeedFactor)); +// if(this.useSound != null) weapon.setUseSound(this.useSound); +// +// if(weapon instanceof RangedWeapon) { +// RangedWeapon rangedWeapon = (RangedWeapon) weapon; +// rangedWeapon.setDamage(rangedWeapon.getDamage() * this.damageFactor); +// rangedWeapon.setAccuracy(rangedWeapon.getAccuracy() * this.accuracyFactor); +// rangedWeapon.setRecoil(rangedWeapon.getRecoil() * this.recoilFactor); +// rangedWeapon.setZoom((int) (rangedWeapon.getZoom() * this.zoomFactor)); +// rangedWeapon.setMagazine(rangedWeapon.getMagazine() + this.magazineAmount); +// rangedWeapon.setReloadTime((int) (rangedWeapon.getReloadTime() * this.reloadTimeFactor)); +// rangedWeapon.setRange((int) (rangedWeapon.getRange() * this.rangeFactor)); +// rangedWeapon.setPumpkinScope(this.pumpkinScope); +// } +// +// if(weapon instanceof EnergyWeapon) { +// EnergyWeapon energyWeapon = (EnergyWeapon) weapon; +// energyWeapon.setDamage(energyWeapon.getDamage() * this.damageFactor); +// energyWeapon.setRange(energyWeapon.getRange() * this.rangeFactor); +// } +// } +// +// public static Set<Attachment> getAttachments(Main plugin, ItemStack itemStack) { +// Set<Attachment> attachments = new HashSet<>(); +// itemStack.getEnchantments().keySet().stream().filter(e -> plugin.getAttachment(e.getName()).isPresent()).forEach(e -> attachments.add(plugin.getAttachment(e.getName()).get())); +// return attachments; +// } +// +// public static ItemStack setAttachments(ItemStack itemStack, Set<Attachment> attachments) { +// ItemStack is = itemStack.clone(); +// is.getEnchantments().forEach((e, i) -> is.removeEnchantment(e)); +// attachments.forEach(a -> is.addUnsafeEnchantment(a.enchantment, 1)); +// return is; +// } +} diff --git a/wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/api/events/NetgunHitEvent.java b/wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/api/events/NetgunHitEvent.java new file mode 100644 index 0000000..bf8767e --- /dev/null +++ b/wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/api/events/NetgunHitEvent.java @@ -0,0 +1,135 @@ +package com.j0ach1mmall3.wastedguns.api.events; + +import java.util.Optional; + +import org.bukkit.Location; +import org.bukkit.entity.Entity; +import org.bukkit.event.Cancellable; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +public class NetgunHitEvent extends Event implements Cancellable { + + /** List of handlers for this event. */ + private static final HandlerList HANDLERS = new HandlerList(); + /** Whether or not this event is cancelled */ + private boolean cancelled; + /** The entity shooting the netgun */ + private final Entity shooter; + /** The entity getting hit by the netgun */ + private final Entity target; + /** The location of the hit, where the netgun explodes */ + private final Location location; + /** The number of ticks to keep the net alive for */ + private int duration; + + /** + * Construct a new NetgunHitEvent. + * <p> + * This should be constructed and fired whenever a netgun hits something. + * + * @param shooter - the shooter of the netgun + * @param target - the target of the netgun, if one exists + * @param location - the location where the net appears + * @param duration - the time, in ticks, that the nets live for + */ + public NetgunHitEvent(Entity shooter, Entity target, Location location, int duration) { + this.shooter = shooter; + this.target = target; + this.location = location; + this.duration = duration; + } + + /** + * {@inheritDoc} + */ + @Override + public HandlerList getHandlers() { + return HANDLERS; + } + + /** + * Get the list of handlers for this event. + * + * @return The handlers for this event. + */ + public static HandlerList getHandlerList() { + return HANDLERS; + } + + /** + * {@inheritDoc} + */ + @Override + public boolean isCancelled() { + return cancelled; + } + + /** + * {@inheritDoc} + */ + @Override + public void setCancelled(boolean cancelled) { + this.cancelled = cancelled; + } + + /** + * Get the entity that shot the netgun. + * + * @return The entity that shot the netgun. + */ + public Entity getShooter() { + return shooter; + } + + /** + * Get the target of the netgun, if one exists. + * + * @return The target of the netgun, if one exists, otherwise {@code empty}. + */ + public Optional<Entity> getTarget() { + if (target != null) { + return Optional.of(target); + } + + return Optional.empty(); + } + + /** + * Get the epicenter of the location for where the netgun hit. + * <p> + * This is used as a reference point for where to build the "webs". + * </p> + * + * @return The location for where the netgun hit. + */ + public Location getLocation() { + return location; + } + + /** + * Get the time, in ticks, that the webs from this netgun live for. + * <p> + * If the value is 20, that means the netgun's webs will stay on the server + * for 20 ticks or 1 second. + * </p> + * + * @return The time, in ticks that the webs will stay alive for. + */ + public int getDuration() { + return duration; + } + + /** + * Set the time, in ticks, that the webs from this netgun will live for. + * <p> + * If the value is 20, that means the netgun's webs will stay on the server + * for 20 ticks or 1 second. + * </p> + * + * @param duration - the time in ticks to live for the web + */ + public void setDuration(int duration) { + this.duration = duration; + } +} diff --git a/wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/api/events/WeaponDamageEvent.java b/wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/api/events/WeaponDamageEvent.java new file mode 100644 index 0000000..f477412 --- /dev/null +++ b/wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/api/events/WeaponDamageEvent.java @@ -0,0 +1,99 @@ +package com.j0ach1mmall3.wastedguns.api.events; + +import org.bukkit.entity.Entity; +import org.bukkit.entity.LivingEntity; +import org.bukkit.event.HandlerList; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.inventory.ItemStack; + +import net.grandtheftmc.guns.weapon.Weapon; + +/** + * @author j0ach1mmall3 (business.j0ach1mmall3@gmail.com) + * @since 7/05/2016 + */ +public final class WeaponDamageEvent extends WeaponEvent { + private static final HandlerList HANDLER_LIST = new HandlerList(); + + /** The damage involved in the event */ + private double damage; + /** The entity being damaged in the event */ + private final Entity entity; + /** The cause of the damage in the event */ + private final EntityDamageEvent.DamageCause cause; + + /** + * Construct a new WeaponDamageEvent. + * + * @param who - the living entity that owns the weapon + * @param weapon - the weapon in the event + * @param weaponItemStack - the weapon itemstack in the event + * @param damage - the damage for the event + * @param entity - the entity involved in the event that is getting damaged + * @param cause - the damage cause for the event + */ + public WeaponDamageEvent(LivingEntity who, Weapon weapon, ItemStack weaponItemStack, double damage, Entity entity, EntityDamageEvent.DamageCause cause) { + super(who, weapon, weaponItemStack); + this.damage = damage; + this.entity = entity; + this.cause = cause; + } + + /** + * Construct a new WeaponDamageEvent. + * + * @param who - the living entity that owns the weapon + * @param weapon - the weapon in the event + * @param damage - the damage for the event + * @param entity - the entity involved in the event that is getting damaged + * @param cause - the damage cause for the event + */ + public WeaponDamageEvent(LivingEntity who, Weapon weapon, double damage, Entity entity, EntityDamageEvent.DamageCause cause) { + this(who, weapon, null, damage, entity, cause); + } + + /** + * Get the amount of damage involved in the event. + * + * @return The amount of damage involved in the event. + */ + public double getDamage() { + return this.damage; + } + + /** + * Set the amount of damage involved in the event. + * + * @param damage - the amount of damage in the event + */ + public void setDamage(double damage) { + this.damage = damage; + } + + /** + * Get the entity involved in the event, that is being damaged. + * + * @return The entity being damaged. + */ + public Entity getEntity() { + return this.entity; + } + + /** + * Get the damage cause for the event. + * + * @return The damage cause for the event. + */ + public EntityDamageEvent.DamageCause getCause() { + return this.cause; + } + + @Override + public HandlerList getHandlers() { + return HANDLER_LIST; + } + + public static HandlerList getHandlerList() { + return HANDLER_LIST; + } +} diff --git a/wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/api/events/WeaponDropEvent.java b/wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/api/events/WeaponDropEvent.java new file mode 100644 index 0000000..623c27e --- /dev/null +++ b/wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/api/events/WeaponDropEvent.java @@ -0,0 +1,34 @@ +package com.j0ach1mmall3.wastedguns.api.events; + +import net.grandtheftmc.guns.weapon.Weapon; +import org.bukkit.entity.Item; +import org.bukkit.entity.LivingEntity; +import org.bukkit.event.HandlerList; + +/** + * @author j0ach1mmall3 (business.j0ach1mmall3@gmail.com) + * @since 6/05/2016 + */ +public final class WeaponDropEvent extends WeaponEvent { + private static final HandlerList HANDLER_LIST = new HandlerList(); + + private final Item itemDrop; + + public WeaponDropEvent(LivingEntity who, Weapon weapon, Item itemDrop) { + super(who, weapon); + this.itemDrop = itemDrop; + } + + public Item getItemDrop() { + return this.itemDrop; + } + + @Override + public HandlerList getHandlers() { + return HANDLER_LIST; + } + + public static HandlerList getHandlerList() { + return HANDLER_LIST; + } +} diff --git a/wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/api/events/WeaponEquipEvent.java b/wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/api/events/WeaponEquipEvent.java new file mode 100644 index 0000000..70a0be2 --- /dev/null +++ b/wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/api/events/WeaponEquipEvent.java @@ -0,0 +1,40 @@ +package com.j0ach1mmall3.wastedguns.api.events; + +import net.grandtheftmc.guns.weapon.Weapon; +import org.bukkit.entity.LivingEntity; +import org.bukkit.event.HandlerList; +import org.bukkit.inventory.ItemStack; + +/** + * @author j0ach1mmall3 (business.j0ach1mmall3@gmail.com) + * @since 29/09/2016 + */ +public final class WeaponEquipEvent extends WeaponEvent { + private static final HandlerList HANDLER_LIST = new HandlerList(); + + private final ItemStack previousItem; + private final ItemStack newItem; + + public WeaponEquipEvent(LivingEntity who, Weapon weapon, ItemStack previousItem, ItemStack newItem) { + super(who, weapon); + this.previousItem = previousItem; + this.newItem = newItem; + } + + public ItemStack getPreviousItem() { + return this.previousItem; + } + + public ItemStack getNewItem() { + return this.newItem; + } + + @Override + public HandlerList getHandlers() { + return HANDLER_LIST; + } + + public static HandlerList getHandlerList() { + return HANDLER_LIST; + } +} diff --git a/wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/api/events/WeaponEvent.java b/wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/api/events/WeaponEvent.java new file mode 100644 index 0000000..085fab5 --- /dev/null +++ b/wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/api/events/WeaponEvent.java @@ -0,0 +1,85 @@ +package com.j0ach1mmall3.wastedguns.api.events; + +import org.bukkit.entity.LivingEntity; +import org.bukkit.event.Cancellable; +import org.bukkit.event.Event; +import org.bukkit.inventory.ItemStack; + +import net.grandtheftmc.guns.weapon.Weapon; + +/** + * @author j0ach1mmall3 (business.j0ach1mmall3@gmail.com) + * @since 6/05/2016 + */ +public abstract class WeaponEvent extends Event implements Cancellable { + /** The weapon object involved in the event */ + protected final Weapon<?> weapon; + /** ItemStack representation for the weapon */ + protected final ItemStack weaponItemStack; + /** The living entity involved in the event */ + protected final LivingEntity livingEntity; + protected boolean cancelled; + + /** + * Construct a new WeaponEvent. + * + * @param who - the owner of the weapon + * @param weapon - the weapon involved + * @param weaponItemStack - the weapon itemstack involved + */ + protected WeaponEvent(LivingEntity who, Weapon<?> weapon, ItemStack weaponItemStack) { + this.livingEntity = who; + this.weapon = weapon; + this.weaponItemStack = weaponItemStack; + } + + /** + * Construct a new WeaponEvent. + * + * @param who - the owner of the weapon + * @param weapon - the weapon involved + */ + protected WeaponEvent(LivingEntity who, Weapon<?> weapon) { + this(who, weapon, null); + } + + /** + * Get the living entity involved in the event. + * <p> + * This is owner of the weapon. + * </p> + * + * @return The living entity involved in this event. + */ + public final LivingEntity getLivingEntity() { + return this.livingEntity; + } + + /** + * Get the weapon involved in this event. + * + * @return The weapon involved in this event. + */ + public final Weapon<?> getWeapon() { + return this.weapon; + } + + /** + * Get the weapon itemstack involved in this event. + * + * @return The weapon itemstack involved in this event. + */ + public final ItemStack getWeaponItemStack(){ + return this.weaponItemStack; + } + + @Override + public boolean isCancelled() { + return this.cancelled; + } + + @Override + public void setCancelled(boolean b) { + this.cancelled = b; + } +} diff --git a/wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/api/events/WeaponLeftClickEvent.java b/wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/api/events/WeaponLeftClickEvent.java new file mode 100644 index 0000000..b3de2f6 --- /dev/null +++ b/wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/api/events/WeaponLeftClickEvent.java @@ -0,0 +1,26 @@ +package com.j0ach1mmall3.wastedguns.api.events; + +import net.grandtheftmc.guns.weapon.Weapon; +import org.bukkit.entity.LivingEntity; +import org.bukkit.event.HandlerList; + +/** + * @author j0ach1mmall3 (business.j0ach1mmall3@gmail.com) + * @since 6/05/2016 + */ +public final class WeaponLeftClickEvent extends WeaponEvent { + private static final HandlerList HANDLER_LIST = new HandlerList(); + + public WeaponLeftClickEvent(LivingEntity who, Weapon weapon) { + super(who, weapon); + } + + @Override + public HandlerList getHandlers() { + return HANDLER_LIST; + } + + public static HandlerList getHandlerList() { + return HANDLER_LIST; + } +} diff --git a/wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/api/events/WeaponPickupEvent.java b/wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/api/events/WeaponPickupEvent.java new file mode 100644 index 0000000..61b92b0 --- /dev/null +++ b/wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/api/events/WeaponPickupEvent.java @@ -0,0 +1,34 @@ +package com.j0ach1mmall3.wastedguns.api.events; + +import net.grandtheftmc.guns.weapon.Weapon; +import org.bukkit.entity.Item; +import org.bukkit.entity.LivingEntity; +import org.bukkit.event.HandlerList; + +/** + * @author j0ach1mmall3 (business.j0ach1mmall3@gmail.com) + * @since 6/05/2016 + */ +public final class WeaponPickupEvent extends WeaponEvent { + private static final HandlerList HANDLER_LIST = new HandlerList(); + + private final Item item; + + public WeaponPickupEvent(LivingEntity who, Weapon weapon, Item item) { + super(who, weapon); + this.item = item; + } + + public Item getItem() { + return this.item; + } + + @Override + public HandlerList getHandlers() { + return HANDLER_LIST; + } + + public static HandlerList getHandlerList() { + return HANDLER_LIST; + } +} diff --git a/wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/api/events/WeaponRightClickEvent.java b/wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/api/events/WeaponRightClickEvent.java new file mode 100644 index 0000000..b8eff2c --- /dev/null +++ b/wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/api/events/WeaponRightClickEvent.java @@ -0,0 +1,26 @@ +package com.j0ach1mmall3.wastedguns.api.events; + +import net.grandtheftmc.guns.weapon.Weapon; +import org.bukkit.entity.LivingEntity; +import org.bukkit.event.HandlerList; + +/** + * @author j0ach1mmall3 (business.j0ach1mmall3@gmail.com) + * @since 6/05/2016 + */ +public final class WeaponRightClickEvent extends WeaponEvent { + private static final HandlerList HANDLER_LIST = new HandlerList(); + + public WeaponRightClickEvent(LivingEntity who, Weapon weapon) { + super(who, weapon); + } + + @Override + public HandlerList getHandlers() { + return HANDLER_LIST; + } + + public static HandlerList getHandlerList() { + return HANDLER_LIST; + } +} diff --git a/wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/api/events/WeaponSneakEvent.java b/wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/api/events/WeaponSneakEvent.java new file mode 100644 index 0000000..3033c00 --- /dev/null +++ b/wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/api/events/WeaponSneakEvent.java @@ -0,0 +1,33 @@ +package com.j0ach1mmall3.wastedguns.api.events; + +import net.grandtheftmc.guns.weapon.Weapon; +import org.bukkit.entity.LivingEntity; +import org.bukkit.event.HandlerList; + +/** + * @author j0ach1mmall3 (business.j0ach1mmall3@gmail.com) + * @since 6/05/2016 + */ +public final class WeaponSneakEvent extends WeaponEvent { + private static final HandlerList HANDLER_LIST = new HandlerList(); + + private final boolean sneaking; + + public WeaponSneakEvent(LivingEntity who, Weapon weapon, boolean sneaking) { + super(who, weapon); + this.sneaking = sneaking; + } + + public boolean isSneaking() { + return this.sneaking; + } + + @Override + public HandlerList getHandlers() { + return HANDLER_LIST; + } + + public static HandlerList getHandlerList() { + return HANDLER_LIST; + } +} diff --git a/wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/api/events/explosives/ExplosionDamageEntityEvent.java b/wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/api/events/explosives/ExplosionDamageEntityEvent.java new file mode 100644 index 0000000..a4ea0ca --- /dev/null +++ b/wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/api/events/explosives/ExplosionDamageEntityEvent.java @@ -0,0 +1,65 @@ +package com.j0ach1mmall3.wastedguns.api.events.explosives; + +import com.j0ach1mmall3.wastedguns.api.events.WeaponEvent; +import net.grandtheftmc.guns.weapon.Weapon; +import org.bukkit.entity.Entity; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.event.Cancellable; +import org.bukkit.event.HandlerList; +import org.bukkit.event.entity.EntityEvent; + +import java.util.Collection; + +public class ExplosionDamageEntityEvent extends WeaponEvent{ + private static final HandlerList HANDLER_LIST = new HandlerList(); + + private Entity projectile; + private Collection<LivingEntity> victims; + private boolean cancelled; + private final LivingEntity shooter; + + public ExplosionDamageEntityEvent(LivingEntity shooter, Entity projectile, Collection<LivingEntity> victims, Weapon weapon) { + super(shooter, weapon); + this.projectile = projectile; + this.victims = victims; + this.shooter = shooter; + } + + public Entity getProjectile() { + return projectile; + } + + public Collection<LivingEntity> getVictims() { + return this.victims; + } + + public void setVictims(Collection<LivingEntity> victims) { + this.victims = victims; + } + + + public static HandlerList getHandlerList() { + return HANDLER_LIST; + } + + + public LivingEntity getShooter() { + return shooter; + } + + @Override + public boolean isCancelled() { + return cancelled; + } + + @Override + public void setCancelled(boolean b) { + this.cancelled = b; + } + + @Override + public HandlerList getHandlers() { + return HANDLER_LIST; + } +} diff --git a/wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/api/events/ranged/AmmoUpdateEvent.java b/wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/api/events/ranged/AmmoUpdateEvent.java new file mode 100644 index 0000000..e5fec45 --- /dev/null +++ b/wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/api/events/ranged/AmmoUpdateEvent.java @@ -0,0 +1,45 @@ +package com.j0ach1mmall3.wastedguns.api.events.ranged; + +import java.util.HashMap; +import java.util.Map; + +import org.bukkit.entity.Player; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +/** + * @author j0ach1mmall3 (business.j0ach1mmall3@gmail.com) + * @since 16/07/2016 + */ +public final class AmmoUpdateEvent extends Event { + private static final HandlerList HANDLER_LIST = new HandlerList(); + + private final Player player; + private Map<String, Integer> ammo = new HashMap<>(); + + + public AmmoUpdateEvent(Player player) { + this.player = player; + } + + public Player getPlayer() { + return this.player; + } + + public Map<String, Integer> getAmmo() { + return this.ammo; + } + + public void setAmmo(Map<String, Integer> ammo) { + this.ammo = ammo; + } + + @Override + public HandlerList getHandlers() { + return HANDLER_LIST; + } + + public static HandlerList getHandlerList() { + return HANDLER_LIST; + } +} diff --git a/wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/api/events/ranged/RangedWeaponReloadEvent.java b/wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/api/events/ranged/RangedWeaponReloadEvent.java new file mode 100644 index 0000000..d8fafde --- /dev/null +++ b/wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/api/events/ranged/RangedWeaponReloadEvent.java @@ -0,0 +1,39 @@ +package com.j0ach1mmall3.wastedguns.api.events.ranged; + +import com.j0ach1mmall3.wastedguns.api.events.WeaponEvent; +import net.grandtheftmc.guns.weapon.Weapon; +import org.bukkit.entity.LivingEntity; +import org.bukkit.event.HandlerList; + +/** + * @author j0ach1mmall3 (business.j0ach1mmall3@gmail.com) + * @since 6/05/2016 + */ +public final class RangedWeaponReloadEvent extends WeaponEvent { + private static final HandlerList HANDLER_LIST = new HandlerList(); + + private int ammoToReload; + + public RangedWeaponReloadEvent(LivingEntity who, Weapon weapon, int ammoToReload) { + super(who, weapon); + this.ammoToReload = ammoToReload; + } + + public int getAmmoToReload() { + return this.ammoToReload; + } + + public void setAmmoToReload(int ammoToReload) { + this.ammoToReload = ammoToReload; + } + + @Override + public HandlerList getHandlers() { + return HANDLER_LIST; + } + + public static HandlerList getHandlerList() { + return HANDLER_LIST; + } + +} diff --git a/wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/api/events/ranged/RangedWeaponShootEvent.java b/wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/api/events/ranged/RangedWeaponShootEvent.java new file mode 100644 index 0000000..a3f3db5 --- /dev/null +++ b/wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/api/events/ranged/RangedWeaponShootEvent.java @@ -0,0 +1,28 @@ +package com.j0ach1mmall3.wastedguns.api.events.ranged; + +import com.j0ach1mmall3.wastedguns.api.events.WeaponEvent; +import net.grandtheftmc.guns.weapon.Weapon; +import org.bukkit.entity.LivingEntity; +import org.bukkit.event.HandlerList; + +/** + * @author j0ach1mmall3 (business.j0ach1mmall3@gmail.com) + * @since 6/05/2016 + */ +public final class RangedWeaponShootEvent extends WeaponEvent { + private static final HandlerList HANDLER_LIST = new HandlerList(); + + public RangedWeaponShootEvent(LivingEntity who, Weapon weapon) { + super(who, weapon); + } + + @Override + public HandlerList getHandlers() { + return HANDLER_LIST; + } + + public static HandlerList getHandlerList() { + return HANDLER_LIST; + } + +} diff --git a/wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/commands/GiveWeaponCommandHandler.java b/wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/commands/GiveWeaponCommandHandler.java new file mode 100644 index 0000000..c9467a3 --- /dev/null +++ b/wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/commands/GiveWeaponCommandHandler.java @@ -0,0 +1,70 @@ +package com.j0ach1mmall3.wastedguns.commands; + +import com.j0ach1mmall3.jlib.methods.General; +import net.grandtheftmc.core.commands.CoreCommand; +import net.grandtheftmc.core.commands.RankedCommand; +import net.grandtheftmc.core.users.UserRank; +import net.grandtheftmc.guns.GTMGuns; +import net.grandtheftmc.guns.WeaponManager; +import net.grandtheftmc.guns.weapon.Weapon; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.Optional; + +/** + * @author j0ach1mmall3 (business.j0ach1mmall3@gmail.com) + * @since 7/05/2016 + */ +public final class GiveWeaponCommandHandler extends CoreCommand<CommandSender> implements RankedCommand { + private final WeaponManager weaponManager; + + public GiveWeaponCommandHandler(WeaponManager weaponManager) { + super("giveweapon", "Gives a weapon to a player"); + this.weaponManager = weaponManager; + } + + @Override + public void execute(CommandSender sender, String[] strings) { + if(strings.length < 2) { + sender.sendMessage(ChatColor.RED + "Usage: /giveweapon <identifier> <player>"); + return; + } + + short id = -1; + try { + id = Short.parseShort(strings[0]); + } catch (NumberFormatException e) { + sender.sendMessage("Cannot convert '" + strings[0] + "' to a numeral."); + return; + } + + if(id == -1) { + sender.sendMessage("Cannot convert '" + strings[0] + "' to a numeral."); + return; + } + +// Optional<Weapon> weapon = this.plugin.getWeapon(strings[0]); + Optional<Weapon<?>> optional = weaponManager.getWeapon(id); + if(!optional.isPresent()) { + sender.sendMessage(ChatColor.RED + "Unknown weapon " + strings[0]); + return; + } + + Player p = General.getPlayerByName(strings[1], false); + if(p == null) { + sender.sendMessage(ChatColor.RED + "Unknown player " + strings[1]); + return; + } + + weaponManager.giveWeapon(p, optional.get().clone(), true); + sender.sendMessage(ChatColor.GREEN + "Successfully gave " + optional.get().getName() + " to " + p.getName()); + return; + } + + @Override + public UserRank requiredRank() { + return UserRank.ADMIN; + } +} diff --git a/wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/listeners/EntityListener.java b/wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/listeners/EntityListener.java new file mode 100644 index 0000000..4614558 --- /dev/null +++ b/wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/listeners/EntityListener.java @@ -0,0 +1,131 @@ +package com.j0ach1mmall3.wastedguns.listeners; + +import com.j0ach1mmall3.wastedguns.Main; +import org.bukkit.event.Listener; + +/** + * @author j0ach1mmall3 (business.j0ach1mmall3@gmail.com) + * @since 6/05/2016 + */ +public final class EntityListener implements Listener { + private final Main plugin; + + public EntityListener(Main plugin) { + this.plugin = plugin; +// plugin.getServer().getPluginManager().registerEvents(this, plugin); +// Bukkit.getScheduler().scheduleSyncRepeatingTask(this.plugin, () -> { +// for (World world : Bukkit.getWorlds()) { +// for(Entity entity : world.getEntities()){ +// if(entity.hasMetadata("Explosive") && entity.isOnGround()){ +// ((Explosive) entity.getMetadata("Explosive").get(0).value()).onLand(entity); +// }else if(entity.hasMetadata("Airstrike") && entity.isOnGround()){ +// ((Airstrike) entity.getMetadata("Airstrike").get(0).value()).onLand(entity, (LivingEntity) entity.getMetadata("Shooter").get(0).value()); +// }else if(entity.hasMetadata("AirstrikeBomb") && entity instanceof ArmorStand && entity.isOnGround()){ +// ((Airstrike) entity.getMetadata("AirstrikeBomb").get(0).value()) +// .onExplode(entity, (LivingEntity) entity.getMetadata("Shooter").get(0).value()); +// entity.remove(); +// } +// } +// } +// }, 5, 5); + } + +// @EventHandler +// public void onProjectileHit(ProjectileHitEvent e) { +// Projectile projectile = e.getEntity(); +// +// if(!(e.getEntity().getShooter() instanceof LivingEntity)) return; +// +// LivingEntity who = (LivingEntity)e.getEntity().getShooter(); +// +// if(projectile.hasMetadata("Rocket")) ((Launcher) projectile.getMetadata("Rocket").get(0).value()).onHit(projectile); +// if(projectile.hasMetadata("Explosive")) ((Explosive) projectile.getMetadata("Explosive").get(0).value()).onExplode(projectile, who); +// } +// +// //TODO see if the every 1/4 second method is ok for this +// /* +// @EventHandler +// public void onEntityDamage(EntityDamageEvent event){ +// if(event.getEntity().hasMetadata("AirstrikeBomb") && event.getEntity() instanceof ArmorStand){ +// event.setDamage(0); +// Entity entity = event.getEntity(); +// ((Airstrike) entity.getMetadata("AirstrikeBomb").get(0).value()) +// .onExplode(entity, (LivingEntity) entity.getMetadata("Shooter").get(0).value()); +// event.getEntity().remove(); +// } +// }*/ +// +// @EventHandler +// public void onEntityDamageByEntity(EntityDamageByEntityEvent e) { +// if(e.getDamager().hasMetadata("StickyExplosive") && e.getDamager() instanceof Arrow && e.getEntity() instanceof LivingEntity && !(e.getEntity() instanceof ArmorStand)) { +// e.setDamage(0); +// Entity entity = e.getEntity(); +// Sounds.broadcastSound(Sound.ENTITY_ARROW_HIT, entity.getLocation()); +// Player player = (Player) e.getDamager().getMetadata("Shooter").get(0).value(); +// entity.setMetadata("StickyExplosive", new FixedMetadataValue(this.plugin, e.getDamager().getMetadata("StickyExplosive").get(0).value())); +// entity.setMetadata("Shooter", new FixedMetadataValue(this.plugin, player)); +// Set<Entity> stickyBombs = this.plugin.getStickyBombs().containsKey(player) ? this.plugin.getStickyBombs().get(player) : new HashSet<>(); +// stickyBombs.remove(e.getDamager()); +// stickyBombs.add(entity); +// this.plugin.getStickyBombs().put(player, stickyBombs); +// this.plugin.getEntityQueue().remove(e.getDamager()); +// e.getDamager().remove(); +// } +// } +// +// @SuppressWarnings("deprecation") +// @EventHandler +// public void onExplode(BlockExplodeEvent e) { +// if(this.plugin.getBabies().isFakeExplosionDebris()) { +// for (Block b : e.blockList()) { +// if(!b.getType().isSolid()) continue; +// Location l = b.getLocation(); +// l.setPitch(-Random.getInt(180)); +// l.setYaw(Random.getInt(360)); +// FallingBlock fb = l.getWorld().spawnFallingBlock(l, b.getType(), b.getData()); +// fb.setDropItem(false); +// fb.setHurtEntities(false); +// float x = -1.0F + (float)(Math.random() * 2.0D + 1.0D); +// float y = -2.0F + (float)(Math.random() * 4.0D + 1.0D); +// float z = -1.0F + (float)(Math.random() * 2.0D + 1.0D); +// fb.setVelocity(new Vector(x, y, z)); +// this.plugin.getEntityQueue().add(fb); +// Bukkit.getScheduler().scheduleSyncDelayedTask(this.plugin, () -> b.getState().update(), 5); +// } +// } +// e.blockList().clear(); +// } +// +// @SuppressWarnings("deprecation") +// @EventHandler +// public void onExplode(EntityExplodeEvent e) { +// if(this.plugin.getBabies().isFakeExplosionDebris()) { +// for (Block b : e.blockList()) { +// if(!b.getType().isSolid()) continue; +// Location l = b.getLocation(); +// l.setPitch(-Random.getInt(180)); +// l.setYaw(Random.getInt(360)); +// FallingBlock fb = l.getWorld().spawnFallingBlock(l, b.getType(), b.getData()); +// fb.setDropItem(false); +// fb.setHurtEntities(false); +// float x = -1.0F + (float)(Math.random() * 2.0D + 1.0D); +// float y = -2.0F + (float)(Math.random() * 4.0D + 1.0D); +// float z = -1.0F + (float)(Math.random() * 2.0D + 1.0D); +// fb.setVelocity(new Vector(x, y, z)); +// this.plugin.getEntityQueue().add(fb); +// Bukkit.getScheduler().scheduleSyncDelayedTask(this.plugin, () -> b.getState().update(), 5); +// } +// } +// e.blockList().clear(); +// } +// +// @EventHandler +// public void onEntityChangeBlock(EntityChangeBlockEvent e) { +// if(e.getEntity() instanceof FallingBlock) { +// this.plugin.getEntityQueue().remove(e.getEntity()); +// e.setCancelled(true); +// Block b = e.getBlock(); +// if(this.plugin.getBabies().isFakeExplosionDebrisParticles()) b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, e.getTo()); +// } +// } +} diff --git a/wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/listeners/PlayerListener.java b/wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/listeners/PlayerListener.java new file mode 100644 index 0000000..738d2c9 --- /dev/null +++ b/wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/listeners/PlayerListener.java @@ -0,0 +1,246 @@ +package com.j0ach1mmall3.wastedguns.listeners; + +import com.j0ach1mmall3.wastedguns.Main; +import org.bukkit.event.Listener; + +/** + * @author j0ach1mmall3 (business.j0ach1mmall3@gmail.com) + * @since 6/05/2016 + */ +public final class PlayerListener implements Listener { + private final Main plugin; + + public PlayerListener(Main plugin) { + this.plugin = plugin; +// plugin.getServer().getPluginManager().registerEvents(this, plugin); + } + +// @EventHandler +// public void onPlayerInteractEntity(PlayerInteractEntityEvent e) { +// Player p = e.getPlayer(); +// ItemStack heldItem = p.getInventory().getItemInMainHand(); +// Optional<Weapon> weapon = this.plugin.getWeapon(heldItem); +// if(!weapon.isPresent()) return; +// +// WeaponRightClickEvent event = new WeaponRightClickEvent(p, weapon.get()); +// Bukkit.getPluginManager().callEvent(event); +// if(event.isCancelled()) e.setCancelled(true); +// } +// +// @EventHandler +// public void onPlayerToggleSneak(PlayerToggleSneakEvent e) { +// Player p = e.getPlayer(); +// PlayerCache playerCache = this.plugin.getPlayerCache(p.getUniqueId()); +// if(playerCache == null) return; +// +// if(e.isSneaking() && (playerCache.stickyBombs != null && !playerCache.stickyBombs.isEmpty())) { +// playerCache.stickyBombs.forEach(entity -> ((ThrowableWeapon) entity.getMetadata("StickyExplosive").get(0).value()).onExplode(entity, p)); +// playerCache.stickyBombs.clear(); +// } +// +// Optional<Weapon> weapon = this.plugin.getWeapon(p.getInventory().getItemInMainHand()); +// if(!weapon.isPresent()) return; +// +// WeaponSneakEvent event = new WeaponSneakEvent(p, weapon.get(), e.isSneaking()); +// Bukkit.getPluginManager().callEvent(event); +// if(event.isCancelled()) e.setCancelled(true); +// } +// +// @EventHandler +// public void onPlayerDropItem(PlayerDropItemEvent e) { +// Player p = e.getPlayer(); +// ItemStack itemStack = e.getItemDrop().getItemStack(); +// Optional<Weapon> weapon = this.plugin.getWeapon(itemStack); +// if(!weapon.isPresent()) return; +// +// WeaponDropEvent event = new WeaponDropEvent(p, weapon.get(), e.getItemDrop()); +// Bukkit.getPluginManager().callEvent(event); +// if(event.isCancelled()) e.setCancelled(true); +// } +// +// @EventHandler +// public void onPlayerPickupItem(PlayerPickupItemEvent e) { +// Player p = e.getPlayer(); +// +// if(e.getItem().hasMetadata("StickyExplosive") || e.getItem().hasMetadata("Explosive") || e.getItem().hasMetadata("ProximityExplosive")) { +// e.setCancelled(true); +// return; +// } +// +// Optional<Weapon> weapon = this.plugin.getWeapon(e.getItem().getItemStack()); +// if(!weapon.isPresent()) return; +// +// WeaponPickupEvent event = new WeaponPickupEvent(p, weapon.get(), e.getItem()); +// Bukkit.getPluginManager().callEvent(event); +// if(event.isCancelled()) e.setCancelled(true); +// } +// +// @EventHandler +// public void onPlayerSwapHandItems(PlayerSwapHandItemsEvent e) { +// Player p = e.getPlayer(); +// ItemStack previousItem = e.getMainHandItem(); +// ItemStack nextItem = e.getOffHandItem(); +// Optional<Weapon> previousWeapon = this.plugin.getWeapon(previousItem); +// Optional<Weapon> nextWeapon = this.plugin.getWeapon(nextItem); +// WeaponEquipEvent event = new WeaponEquipEvent(p, previousWeapon.isPresent() ? previousWeapon.get() : null, nextWeapon.isPresent() ? nextWeapon.get() : null, previousItem, nextItem); +// +// Bukkit.getPluginManager().callEvent(event); +// if (event.isCancelled()) e.setCancelled(true); +// } +// +// @EventHandler +// public void onPlayerItemHeld(PlayerItemHeldEvent e) { +// Player p = e.getPlayer(); +// ItemStack previousItem = p.getInventory().getItem(e.getPreviousSlot()); +// ItemStack nextItem = p.getInventory().getItem(e.getNewSlot()); +// Optional<Weapon> previousWeapon = this.plugin.getWeapon(previousItem); +// Optional<Weapon> nextWeapon = this.plugin.getWeapon(nextItem); +// WeaponEquipEvent event = new WeaponEquipEvent(p, previousWeapon.isPresent() ? previousWeapon.get() : null, nextWeapon.isPresent() ? nextWeapon.get() : null, previousItem, nextItem); +// +// Bukkit.getPluginManager().callEvent(event); +// if (event.isCancelled()) e.setCancelled(true); +// } +// +// @EventHandler +// public void onPlayerInteract(PlayerInteractEvent e) { +// Player p = e.getPlayer(); +// ItemStack heldItem = p.getInventory().getItemInMainHand(); +// Optional<Weapon> weapon = this.plugin.getWeapon(heldItem); +// if(!weapon.isPresent()) return; +// WeaponEvent event; +// switch (e.getAction()) { +// case LEFT_CLICK_AIR: +// case LEFT_CLICK_BLOCK: +// event = new WeaponLeftClickEvent(p, weapon.get()); +// break; +// case RIGHT_CLICK_AIR: +// case RIGHT_CLICK_BLOCK: +// event = new WeaponRightClickEvent(p, weapon.get()); +// break; +// default: +// return; +// } +// +// Bukkit.getPluginManager().callEvent(event); +// if(event.isCancelled()) e.setCancelled(true); +// } +// +// @EventHandler(priority = EventPriority.LOWEST) +// public void onEntityDamageByEntity(EntityDamageByEntityEvent e) { +// if(!(e.getDamager() instanceof LivingEntity)) return; +// +// LivingEntity l = (LivingEntity) e.getDamager(); +// +// Optional<Weapon> weapon = this.plugin.getWeapon(l.getEquipment().getItemInMainHand()); +// if(!weapon.isPresent() || e.getCause() != EntityDamageEvent.DamageCause.ENTITY_ATTACK) return; +// +// WeaponDamageEvent event = new WeaponDamageEvent(l, weapon.get(), e.getDamage(), e.getEntity(), e.getCause()); +// Bukkit.getPluginManager().callEvent(event); +// e.setDamage(event.getDamage()); +// if (event.isCancelled()) e.setCancelled(true); +// } +// +// @EventHandler +// public void onInventoryClick(InventoryClickEvent e) { +// Player p = (Player) e.getWhoClicked(); +// PlayerCache playerCache = this.plugin.getPlayerCache(p.getUniqueId()); +// if(playerCache == null) return; +// WeaponCache weaponCache = playerCache.getWeaponCache(p); +// if(weaponCache == null) return; +// +// if(playerCache.shootingLivingEntities != null && !playerCache.shootingLivingEntities.isEmpty()) +// e.setCancelled(true); +// +// weaponCache.reloading = false; +// +// if(!(e.getClickedInventory() instanceof PlayerInventory) && e.getCursor().getType() != Material.AIR) { +// ItemStack itemStack = e.getCursor(); +// Optional<Weapon> weapon = this.plugin.getWeapon(itemStack); +// if(weapon.isPresent() && weapon.get() instanceof RangedWeapon) { +// RangedWeapon rangedWeapon = (RangedWeapon) weapon.get(); +// rangedWeapon.setAmmo(itemStack, rangedWeapon.getAmmo(itemStack), 0); +// } +// } +// } +// +// @EventHandler +// public void onPlayerJoin(PlayerJoinEvent e) { +// Player p = e.getPlayer(); +// ItemStack heldItem = p.getInventory().getItemInMainHand(); +// Optional<Weapon> weapon = this.plugin.getWeapon(heldItem); +// if(!weapon.isPresent()) return; +// +// e.getPlayer().getAttribute(Attribute.GENERIC_ATTACK_SPEED).setBaseValue(16.0); +// } +// +// @EventHandler +// public void onPlayerMove(PlayerMoveEvent e) { +// Player p = e.getPlayer(); +// if(p.getGameMode() != GameMode.ADVENTURE) return; +// p.getNearbyEntities(2.0, 2.0, 2.0).stream().filter(ent -> ent instanceof Item && ent.hasMetadata("ProximityExplosive")).forEach(ent -> ((ThrowableWeapon) ent.getMetadata("ProximityExplosive").get(0).value()).onExplode(ent, p)); +// } +// +// @EventHandler +// public void onPlayerDeath(PlayerDeathEvent e) { +// Player p = e.getEntity(); +// Bukkit.getOnlinePlayers().forEach(player -> { +// player.hidePlayer(p); +// player.showPlayer(p); +// }); +// p.removePotionEffect(PotionEffectType.SLOW); +// p.updateInventory(); +// +// this.plugin.getReloadingLivingEntities().remove(p); +// +// Player killer = p.getKiller(); +// if(killer == null) return; +// +// ItemStack heldItem = killer.getInventory().getItemInMainHand(); +// Optional<Weapon> weapon = this.plugin.getWeapon(heldItem); +// if(!weapon.isPresent()) return; +// +// weapon.get().getDeathMessages().entrySet().stream().filter(d -> d.getKey() == p.getLastDamageCause().getCause()).forEach(d -> e.setDeathMessage(Placeholders.parse(d.getValue(), p).replace("%victim%", p.getName()).replace("%killer%", killer.getName()))); +// } +// +// @EventHandler +// public void onPlayerQuit(PlayerQuitEvent e) { +// Player p = e.getPlayer(); +// this.plugin.getReloadingLivingEntities().remove(p); +// if(this.plugin.getShootingLivingEntities().containsKey(p)) this.plugin.getShootingLivingEntities().get(p).forEach(Bukkit.getScheduler()::cancelTask); +// this.plugin.getShootingLivingEntities().remove(p); +// this.plugin.getHomingTargets().remove(p); +// this.plugin.getWeapons().forEach(w -> this.plugin.getCooldownLivingEntities().remove(p.getName() + '/' + w.getIdentifier())); +// this.plugin.getBurstShots().remove(p); +// this.plugin.getBurstTicks().remove(p); +// if(this.plugin.getStickyBombs().containsKey(p)) this.plugin.getStickyBombs().get(p).forEach(Entity::remove); +// this.plugin.getStickyBombs().remove(p); +// p.setWalkSpeed(0.2F); +// } +// +// @EventHandler +// public void onPlayerKick(PlayerKickEvent e) { +// Player p = e.getPlayer(); +// this.plugin.getReloadingLivingEntities().remove(p); +// if(this.plugin.getShootingLivingEntities().containsKey(p)) this.plugin.getShootingLivingEntities().get(p).forEach(Bukkit.getScheduler()::cancelTask); +// this.plugin.getShootingLivingEntities().remove(p); +// this.plugin.getHomingTargets().remove(p); +// this.plugin.getWeapons().forEach(w -> this.plugin.getCooldownLivingEntities().remove(p.getName() + '/' + w.getIdentifier())); +// this.plugin.getBurstShots().remove(p); +// this.plugin.getBurstTicks().remove(p); +// if(this.plugin.getStickyBombs().containsKey(p)) this.plugin.getStickyBombs().get(p).forEach(Entity::remove); +// this.plugin.getStickyBombs().remove(p); +// p.setWalkSpeed(0.2F); +// } +// +// @EventHandler +// public void onAmmoUpdate(AmmoUpdateEvent e) { +// Map<String, Integer> ammo = e.getAmmo(); +// Arrays.asList(e.getPlayer().getInventory().getContents()).stream().filter(i -> i != null).forEach(i -> { +// Optional<Weapon> weapon = this.plugin.getWeapon(i); +// if(weapon.isPresent() && weapon.get() instanceof RangedWeapon) { +// RangedWeapon rangedWeapon = (RangedWeapon) weapon.get(); +// rangedWeapon.setAmmo(i, rangedWeapon.getAmmo(i), ammo.getOrDefault(rangedWeapon.getAmmoType(), 0)); +// } +// }); +// } +} diff --git a/wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/listeners/WeaponsListener.java b/wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/listeners/WeaponsListener.java new file mode 100644 index 0000000..95a3a7e --- /dev/null +++ b/wastedguns-master@2e3501603b9/src/main/java/com/j0ach1mmall3/wastedguns/listeners/WeaponsListener.java @@ -0,0 +1,81 @@ +package com.j0ach1mmall3.wastedguns.listeners; + +import java.util.HashMap; +import java.util.LinkedList; +import java.util.UUID; +import java.util.concurrent.TimeUnit; + +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; + +import com.j0ach1mmall3.wastedguns.api.events.ranged.RangedWeaponShootEvent; + +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.Utils; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserManager; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.guns.GTMGuns; +import net.grandtheftmc.guns.weapon.ranged.RangedWeapon; +import net.md_5.bungee.api.chat.BaseComponent; +import net.md_5.bungee.api.chat.ClickEvent; +import net.md_5.bungee.api.chat.HoverEvent; +import net.md_5.bungee.api.chat.TextComponent; + +/** + * @author j0ach1mmall3 (business.j0ach1mmall3@gmail.com) + * @since 6/05/2016 + */ +public final class WeaponsListener implements Listener { + + private final GTMGuns plugin; + private final HashMap<UUID, LinkedList<Long>> playerShots = new HashMap<>(); + + public WeaponsListener(GTMGuns plugin) { + this.plugin = plugin; + plugin.getServer().getPluginManager().registerEvents(this, plugin); + } + + + @EventHandler(priority = EventPriority.HIGHEST) + public void onShoot(RangedWeaponShootEvent event){ + if(!(event.getLivingEntity() instanceof Player)) + return; + Player player = (Player)event.getLivingEntity(); + RangedWeapon<?> weapon = (RangedWeapon<?>)event.getWeapon(); + + if(!weapon.isAutomatic()) + return; + + double allowedSPS = 25.0; //bullets shot every tick (20 ticks = 1 sec) and have some buffer for lag. + + LinkedList<Long> shots = this.playerShots.getOrDefault(player.getUniqueId(), new LinkedList<Long>()); + + if(shots.size() >= allowedSPS) { + long difference = shots.getFirst() - shots.getLast(); + if(difference < 1000) { //player may be hacking. + BaseComponent[] components = TextComponent.fromLegacyText(Lang.ANTICHEAT.s() + Utils.f("&c" + player.getName() + "&7 has triggered &cFASTPLACE &7 event! &f&l" + (allowedSPS/TimeUnit.MILLISECONDS.toSeconds(difference)) + "/s (Normal is " + allowedSPS + "/s &7")); + for (BaseComponent c : components) { + c.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, TextComponent.fromLegacyText(Utils.f("&7Reports&f: &7&oClick to inspect")))); + c.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/inspect " + player.getName())); + } + + ServerUtil.runTask(() -> { + for (User user : UserManager.getInstance().getUsers()) { + if (!user.isStaff()){ + continue; + } + Bukkit.getPlayer(user.getUUID()).spigot().sendMessage(components); + } + }); + } + shots.clear(); + } + + this.playerShots.put(player.getUniqueId(), shots); + + } +} \ No newline at end of file diff --git a/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/DamageDataHandler.java b/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/DamageDataHandler.java new file mode 100644 index 0000000..c2e36be --- /dev/null +++ b/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/DamageDataHandler.java @@ -0,0 +1,90 @@ +package net.grandtheftmc.guns; + +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; +import java.util.UUID; + +import org.bukkit.event.entity.EntityDamageByEntityEvent; + +public class DamageDataHandler { + + /** The singleton instance of this handler */ + private static DamageDataHandler instance; + /** Maps uuid of entity to damage event cause */ + private Map<UUID, EntityDamageByEntityEvent> uuidToDamageEventCause; + + /** + * Construct a new DamageDataHandler. + * <p> + * This will be used to keep track of damage sources for damage events due + * to weapons. + * </p> + */ + private DamageDataHandler() { + this.uuidToDamageEventCause = new HashMap<>(); + } + + /** + * Get the instance of this handler. + * + * @return The instance of this handler. + */ + public static DamageDataHandler getInstance() { + if (instance == null) { + instance = new DamageDataHandler(); + } + + return instance; + } + + /** + * Add damage data for the given uuid. + * + * @param uuid - the uuid of the entity + * @param damageEvent - the damage event data to add + * + * @return {@code true} if the data was overwritten, {@code false} + * otherwise. + */ + public boolean addData(UUID uuid, EntityDamageByEntityEvent damageEvent) { + + boolean updated = false; + if (uuidToDamageEventCause.containsKey(uuid)) { + updated = true; + } + + uuidToDamageEventCause.put(uuid, damageEvent); + return updated; + } + + /** + * Removes the damage data for the given uuid. + * + * @param uuid - the uuid of the entity to remove data for + * + * @return The data regarding the uuid damage, otherwise empty. + */ + public Optional<EntityDamageByEntityEvent> removeData(UUID uuid) { + if (uuidToDamageEventCause.containsKey(uuid)) { + return Optional.of(uuidToDamageEventCause.remove(uuid)); + } + + return Optional.empty(); + } + + /** + * Get the damage data for the given entity. + * + * @param uuid - the uuid of the user to lookup + * + * @return The damage data for the given entity, if exists. + */ + public Optional<EntityDamageByEntityEvent> getData(UUID uuid) { + if (uuidToDamageEventCause.containsKey(uuid)) { + return Optional.of(uuidToDamageEventCause.get(uuid)); + } + + return Optional.empty(); + } +} diff --git a/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/GTMGuns.java b/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/GTMGuns.java new file mode 100644 index 0000000..237d27c --- /dev/null +++ b/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/GTMGuns.java @@ -0,0 +1,49 @@ +package net.grandtheftmc.guns; + +import org.bukkit.plugin.java.JavaPlugin; + +import de.slikey.effectlib.EffectManager; + +/** + * Created by Luke Bingham on 19/07/2017. + */ +public final class GTMGuns extends JavaPlugin { + + public static final boolean DEBUG = false; + /** If using the star system */ + public static boolean STAR_SYSTEM = true; + /** If using the kill count system */ + public static boolean KILL_COUNT_SYSTEM = true; + /** If using the star system, max number of stars */ + public static int MAX_STARS = 3; + + private static GTMGuns instance; + private WeaponManager weaponManager; + private EffectManager effectManager; + + @Override + public final void onEnable() { + instance = this; + this.effectManager = new EffectManager(this); + this.weaponManager = new WeaponManager(); + WeaponHandler weaponHandler = new WeaponHandler(this, this.weaponManager); + //new WeaponsListener(this); + } + + @Override + public final void onDisable() { + instance = null; + } + + public WeaponManager getWeaponManager() { + return weaponManager; + } + + public static GTMGuns getInstance() { + return instance; + } + + public EffectManager getEffectManager() { + return this.effectManager; + } +} diff --git a/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/TESTING.java b/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/TESTING.java new file mode 100644 index 0000000..95534f3 --- /dev/null +++ b/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/TESTING.java @@ -0,0 +1,17 @@ +package net.grandtheftmc.guns; + +public class TESTING { + + public static void main(String[] args) { + int best = 80; + double result = getPercentBetweenValues(best, 36); + System.out.println(result); + + int result2 = (int) Math.floor(result) / 10; + System.out.println(result2); + } + + public static double getPercentBetweenValues(double goal, double value) { + return 100 - Math.abs(((goal - value) / goal) * 100); + } +} diff --git a/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/WeaponCooldown.java b/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/WeaponCooldown.java new file mode 100644 index 0000000..6c03558 --- /dev/null +++ b/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/WeaponCooldown.java @@ -0,0 +1,29 @@ +package net.grandtheftmc.guns; + +import net.grandtheftmc.guns.weapon.Weapon; +import net.grandtheftmc.guns.weapon.WeaponType; + +/** + * Created by Luke Bingham on 19/07/2017. + */ +public class WeaponCooldown { + private final Weapon weapon; + private long cooldown; + + public WeaponCooldown(Weapon weapon, long time) { + this.weapon = weapon; + this.cooldown = System.currentTimeMillis() + time; + } + + public WeaponCooldown(Weapon weapon, int time) { + this(weapon, (long) time); + } + + public final Weapon getWeaponType() { + return this.weapon; + } + + public boolean hasElapsed() { + return System.currentTimeMillis() >= this.cooldown; + } +} diff --git a/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/WeaponHandler.java b/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/WeaponHandler.java new file mode 100644 index 0000000..327da75 --- /dev/null +++ b/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/WeaponHandler.java @@ -0,0 +1,924 @@ +package net.grandtheftmc.guns; + +import java.util.HashMap; +import java.util.List; +import java.util.UUID; +import java.util.concurrent.ThreadLocalRandom; + +import org.apache.commons.lang.math.RandomUtils; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Effect; +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.World; +import org.bukkit.attribute.Attribute; +import org.bukkit.block.Block; +import org.bukkit.entity.Entity; +import org.bukkit.entity.FallingBlock; +import org.bukkit.entity.Item; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.entity.TNTPrimed; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockExplodeEvent; +import org.bukkit.event.entity.EntityChangeBlockEvent; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.entity.EntityDamageEvent.DamageCause; +import org.bukkit.event.entity.EntityExplodeEvent; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.entity.ProjectileHitEvent; +import org.bukkit.event.inventory.InventoryOpenEvent; +import org.bukkit.event.player.PlayerDropItemEvent; +import org.bukkit.event.player.PlayerInteractEntityEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerItemHeldEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerKickEvent; +import org.bukkit.event.player.PlayerMoveEvent; +import org.bukkit.event.player.PlayerPickupItemEvent; +import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.event.player.PlayerSwapHandItemsEvent; +import org.bukkit.event.player.PlayerToggleSneakEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.metadata.FixedMetadataValue; +import org.bukkit.metadata.MetadataValue; +import org.bukkit.potion.PotionEffectType; +import org.bukkit.util.Vector; + +import com.google.common.collect.Maps; +import com.j0ach1mmall3.wastedguns.api.events.WeaponDamageEvent; +import com.j0ach1mmall3.wastedguns.api.events.WeaponDropEvent; +import com.j0ach1mmall3.wastedguns.api.events.WeaponEquipEvent; +import com.j0ach1mmall3.wastedguns.api.events.WeaponEvent; +import com.j0ach1mmall3.wastedguns.api.events.WeaponLeftClickEvent; +import com.j0ach1mmall3.wastedguns.api.events.WeaponPickupEvent; +import com.j0ach1mmall3.wastedguns.api.events.WeaponRightClickEvent; +import com.j0ach1mmall3.wastedguns.api.events.WeaponSneakEvent; +import com.j0ach1mmall3.wastedvehicles.Main; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.servers.ServerType; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.core.util.nbt.CoreNbt; +import net.grandtheftmc.core.util.nbt.NBTUtil1_12_2; +import net.grandtheftmc.guns.cache.PlayerCache; +import net.grandtheftmc.guns.weapon.MeleeWeapon; +import net.grandtheftmc.guns.weapon.ThrowableWeapon; +import net.grandtheftmc.guns.weapon.Weapon; +import net.grandtheftmc.guns.weapon.attribute.WeaponExplosive; +import net.grandtheftmc.guns.weapon.ranged.RangedWeapon; + +/** + * Created by Luke Bingham on 19/07/2017. + */ +public class WeaponHandler implements Listener { + private final HashMap<UUID, List<WeaponCooldown>> cooldownMap; + private final HashMap<UUID, Long> fastplace; + + private final GTMGuns plugin; + private final WeaponManager weaponManager; + + public WeaponHandler(GTMGuns plugin, WeaponManager weaponManager) { + this.plugin = plugin; + this.weaponManager = weaponManager; + this.cooldownMap = Maps.newHashMap(); + this.fastplace = Maps.newHashMap(); + + plugin.getServer().getPluginManager().registerEvents(this, plugin); + + + Bukkit.getScheduler().scheduleSyncRepeatingTask(this.plugin, () -> { + for (World world : Bukkit.getWorlds()) { + for(Entity entity : world.getEntities()){ + if(entity.hasMetadata("Explosive") && entity.isOnGround()){ + ((WeaponExplosive) entity.getMetadata("Explosive").get(0).value()).onLand(entity); + } +// else if(entity.hasMetadata("Airstrike") && entity.isOnGround()) { +// ((AirstrikeWeapon) entity.getMetadata("Airstrike").get(0).value()).onLand(entity); +// } + } + } + }, 5, 5); + +// Bukkit.getScheduler().scheduleSyncRepeatingTask(plugin, () -> { +// for(UUID uuid : weaponManager.playerCacheMap.keySet()) { +// Player player = Bukkit.getPlayer(uuid); +// if(player == null) { +// weaponManager.playerCacheMap.remove(uuid); +// continue; +// } +// +// PlayerCache playerCache = weaponManager.getPlayerCache(uuid); +// if(playerCache == null) continue; +// if(!playerCache.shooting) continue; +// +// ItemStack heldItem = player.getEquipment().getItemInMainHand(); +// if(heldItem == null || heldItem.getType() == Material.AIR) { +// playerCache.burst = 0; +// playerCache.shooting = false; +// continue; +// } +// WeaponCache weaponCache = weaponManager.getPlayerWeaponCache(player, heldItem.getDurability()); +// if(weaponCache == null) { +// playerCache.burst = 0; +// playerCache.shooting = false; +// continue; +// } +// +// Weapon<?> weapon = weaponManager.getPlayerWeapon(player, heldItem.getDurability()); +// if(weapon == null) continue; +// if(!(weapon instanceof RangedWeapon)) continue; +// RangedWeapon<?> rangedWeapon = (RangedWeapon<?>) weapon; +// +// if(rangedWeapon instanceof WeaponRPM) { +// if (playerCache.burst >= (((WeaponRPM) rangedWeapon).getRpm() > 0 ? 5 : 1)) { +// playerCache.burst = 0; +// playerCache.shooting = false; +// continue; +// } +// } +// +// playerCache.burst += 1; +// +// Location origin = player.getEyeLocation(); +// Vector direction = origin.getDirection(); +// +// rangedWeapon.shoot(player, origin, direction, playerCache, weaponCache); +// +// if (rangedWeapon.getRecoil() != 0 && !player.isSneaking()) +// player.setVelocity(player.getVelocity().add(direction.setY(0).multiply(-rangedWeapon.getRecoil()))); +// } +// }, 1, 1); + } + + @EventHandler + protected final void onPlayerInteract(PlayerInteractEvent event) { + Player player = event.getPlayer(); + ItemStack heldItem = event.getItem(); + if(player==null || heldItem==null) + return; + PlayerCache cache = weaponManager.getPlayerCache(event.getPlayer().getUniqueId()); + Weapon<?> weapon = cache.getOrAddWeapon(heldItem); + if(weapon == null) { + event.getPlayer().setWalkSpeed(0.2f); + if(event.getPlayer().hasPotionEffect(PotionEffectType.SLOW)) + event.getPlayer().removePotionEffect(PotionEffectType.SLOW); + return; + } + if(heldItem.getAmount()>1 && !(weapon instanceof ThrowableWeapon)) { + player.sendMessage(Lang.AMMO.f("&7You cannot do this action with a stacked " + weapon.getName())); + return; + } + + if(GTMGuns.DEBUG) + event.getPlayer().sendMessage(weapon.getName()); + + WeaponEvent weaponEvent = null; + switch (event.getAction()) { + case LEFT_CLICK_BLOCK: + case LEFT_CLICK_AIR: + weaponEvent = new WeaponLeftClickEvent(event.getPlayer(), weapon); + break; + + case RIGHT_CLICK_BLOCK: + case RIGHT_CLICK_AIR: + // Fast-Place check. + long lastClicked = this.fastplace.getOrDefault(player.getUniqueId(), -1L); + if (lastClicked == -1L) + this.fastplace.put(player.getUniqueId(), System.currentTimeMillis() + 150); + else { + if (System.currentTimeMillis() < lastClicked) { +// ServerUtil.debug("Weapon right click DENIED. (" + (System.currentTimeMillis() - lastClicked) + "ms)"); + break; + } + this.fastplace.put(player.getUniqueId(), System.currentTimeMillis() + 150); + } + + weaponEvent = new WeaponRightClickEvent(event.getPlayer(), weapon); + break; + + default: return; + } + + if (weaponEvent == null) return; + + Bukkit.getPluginManager().callEvent(weaponEvent); + if(weaponEvent.isCancelled()) event.setCancelled(true); + } + + @EventHandler + protected final void onPlayerInteract(PlayerInteractEntityEvent event) { + Player player = event.getPlayer(); + ItemStack heldItem = player.getInventory().getItemInMainHand(); + + PlayerCache cache = weaponManager.getPlayerCache(player.getUniqueId()); + Weapon<?> weapon = cache.getOrAddWeapon(heldItem); + if(weapon == null) { + event.getPlayer().setWalkSpeed(0.2f); + if(event.getPlayer().hasPotionEffect(PotionEffectType.SLOW)) + event.getPlayer().removePotionEffect(PotionEffectType.SLOW); + return; + } + if(heldItem.getAmount()>1) { + player.sendMessage(Lang.AMMO.f("&7You cannot do this action with a stacked weapon!")); + return; + } + if(GTMGuns.DEBUG) + event.getPlayer().sendMessage(weapon.getName()); + + WeaponRightClickEvent weaponRightClickEvent = new WeaponRightClickEvent(event.getPlayer(), weapon); + Bukkit.getPluginManager().callEvent(weaponRightClickEvent); + + if(weaponRightClickEvent.isCancelled()) + event.setCancelled(true); + } + + @EventHandler + protected final void onEntityDamageByEntity(EntityDamageByEntityEvent event) { + + // if the damager of the event is living + if (event.getDamager() != null && event.getDamager() instanceof LivingEntity) { + + // ignore targets that aren't living + if(!(event.getEntity() instanceof LivingEntity)){ + return; + } + + // grab event variables + LivingEntity damager = (LivingEntity) event.getDamager(); + LivingEntity target = (LivingEntity) event.getEntity(); + DamageCause damageCause = event.getCause(); + + // get damage data if exists, queued up by ranged weapons/explosions etc. + EntityDamageByEntityEvent edbee = DamageDataHandler.getInstance().getData(target.getUniqueId()).orElse(null); + if (edbee != null){ + event.setDamage(edbee.getDamage()); + + // remove the data from the handler + DamageDataHandler.getInstance().removeData(target.getUniqueId()); + return; + } + else{ + + // ONLY HANDLE MELEE ATTACKS + if (damageCause == DamageCause.ENTITY_ATTACK){ + + // grab the weapon itemstack from their hand + ItemStack weaponItemStack = damager.getEquipment().getItemInMainHand(); + + // get the weapon + Weapon<?> heldWeapon = weaponManager.getWeaponByItem(weaponItemStack); + + // if no held weapon + if(heldWeapon == null) { + if(damager instanceof Player) { + Player p = (Player) damager; + p.setWalkSpeed(0.2f); + if (p.hasPotionEffect(PotionEffectType.SLOW)) + p.removePotionEffect(PotionEffectType.SLOW); + + if (p.getInventory().getItemInMainHand() != null && p.getInventory().getItemInMainHand().getType() == Material.DIAMOND_SWORD) { + event.setDamage(1); + } + } + return; + } + + // if melee weapon set melee damage + if (heldWeapon instanceof MeleeWeapon){ + event.setDamage(((MeleeWeapon) heldWeapon).getMeleeDamage()); + } + + // this case only happens when melee hitting with a ranged weapon + if (heldWeapon instanceof RangedWeapon) { + event.setDamage(((RangedWeapon) heldWeapon).getMeleeDamage()); + } + + // this case only happens when melee hitting players with throwable + if (heldWeapon instanceof ThrowableWeapon){ + event.setDamage(((ThrowableWeapon) heldWeapon).getMeleeDamage()); + } + + // call a weapon damage event to see if we can carry out this damage + WeaponDamageEvent weaponDamageEvent = new WeaponDamageEvent(damager, heldWeapon, weaponItemStack, event.getDamage(), target, event.getCause()); + Bukkit.getPluginManager().callEvent(weaponDamageEvent); + + // if damage was cancelled + if (weaponDamageEvent.isCancelled()){ + event.setCancelled(true); + } + else{ + // set the damage of the weapon damage event + event.setDamage(weaponDamageEvent.getDamage()); + } + } + } + } + } + + @EventHandler + protected final void onPlayerToggleSneak(PlayerToggleSneakEvent event) { + if(event.getPlayer() == null) return; + + PlayerCache cache = weaponManager.getPlayerCache(event.getPlayer().getUniqueId()); + + if(event.isSneaking() && !cache.stickyBombs.isEmpty()) { + cache.stickyBombs.forEach(bomb -> { + if(bomb.hasMetadata("StickyExplosive")) { + ((WeaponExplosive) bomb.getMetadata("StickyExplosive").get(0).value()).onExplode(bomb, (Player) bomb.getMetadata("Shooter").get(0).value()); + } + bomb.remove(); + }); + cache.stickyBombs.clear(); + } + + Weapon<?> weapon = cache.getOrAddWeapon(event.getPlayer().getEquipment().getItemInMainHand()); + if(weapon == null) { + event.getPlayer().setWalkSpeed(0.2f); + if(event.getPlayer().hasPotionEffect(PotionEffectType.SLOW)) + event.getPlayer().removePotionEffect(PotionEffectType.SLOW); + return; + } + + WeaponSneakEvent weaponSneakEvent = new WeaponSneakEvent(event.getPlayer(), weapon, event.isSneaking()); + Bukkit.getPluginManager().callEvent(weaponSneakEvent); + + if(weaponSneakEvent.isCancelled()) + event.setCancelled(true); + } + + @EventHandler + protected final void onPlayerDropItem(PlayerDropItemEvent event) { + if(event.getItemDrop() == null) return; + + if (Core.getSettings().getType() != ServerType.VICE) { + weaponManager.updateOldWeapon(event.getPlayer(), event.getItemDrop().getItemStack()); + } + + Weapon<?> weapon = weaponManager.getWeaponByItem(event.getItemDrop().getItemStack()); + if(weapon == null) return; + + WeaponDropEvent weaponDropEvent = new WeaponDropEvent(event.getPlayer(), weapon, event.getItemDrop()); + Bukkit.getPluginManager().callEvent(weaponDropEvent); + + if(weaponDropEvent.isCancelled()) + event.setCancelled(true); + } + + @EventHandler + protected final void onPlayerItemPickup(PlayerPickupItemEvent event) { + Item item = event.getItem(); + if(item == null || item.getItemStack() == null) return; + + CoreNbt nbt = new NBTUtil1_12_2(item.getItemStack());//testing + if(nbt.hasNBTTag("weapon_type")) { + Core.log(nbt.getNBTTag("weapon_type").toString()); + } + + if (Core.getSettings().getType() != ServerType.VICE) { + weaponManager.updateOldWeapon(event.getPlayer(), item.getItemStack()); + } + + if(item.hasMetadata("StickyExplosive") || + item.hasMetadata("Explosive") || + item.hasMetadata("ProximityExplosive")) { + event.setCancelled(true); + return; + } + + Weapon<?> weapon = weaponManager.getWeaponByItem(item.getItemStack()); + if(weapon == null) return; + + WeaponPickupEvent weaponPickupEvent = new WeaponPickupEvent(event.getPlayer(), weapon, item); + Bukkit.getPluginManager().callEvent(weaponPickupEvent); + + if(weaponPickupEvent.isCancelled()) + event.setCancelled(true); + } + + @EventHandler + protected final void onPlayerSwapHandItems(PlayerSwapHandItemsEvent event) { + PlayerCache cache = weaponManager.getPlayerCache(event.getPlayer().getUniqueId()); + + Weapon<?> current = cache.getOrAddWeapon(event.getMainHandItem()); + if(current != null && current.getWeaponState() == WeaponState.SHOOTING) { + event.setCancelled(true); + return; + } + + Weapon<?> next = cache.getOrAddWeapon(event.getOffHandItem()); + if(next == null) { + event.getPlayer().setWalkSpeed(0.2f); + if(event.getPlayer().hasPotionEffect(PotionEffectType.SLOW)) + event.getPlayer().removePotionEffect(PotionEffectType.SLOW); + return; + } + + WeaponEquipEvent weaponEquipEvent = new WeaponEquipEvent(event.getPlayer(), next, event.getMainHandItem(), event.getOffHandItem()); + Bukkit.getPluginManager().callEvent(weaponEquipEvent); + + if(weaponEquipEvent.isCancelled()) + event.setCancelled(true); + } + + @EventHandler + protected final void onPlayerItemHeld(PlayerItemHeldEvent event) { + PlayerCache cache = weaponManager.getPlayerCache(event.getPlayer().getUniqueId()); + + ItemStack next = event.getPlayer().getInventory().getItem(event.getNewSlot()), + previous = event.getPlayer().getInventory().getItem(event.getPreviousSlot()); + Weapon<?> currentWeapon = cache.getOrAddWeapon(previous); + if(currentWeapon != null && currentWeapon.getWeaponState() == WeaponState.SHOOTING) { + event.setCancelled(true); + return; + } + + Weapon<?> weapon = cache.getOrAddWeapon(next); + if(weapon == null) { + event.getPlayer().setWalkSpeed(0.2f); + if(event.getPlayer().hasPotionEffect(PotionEffectType.SLOW)) + event.getPlayer().removePotionEffect(PotionEffectType.SLOW); + return; + } + + WeaponEquipEvent weaponEquipEvent = new WeaponEquipEvent(event.getPlayer(), weapon, previous, next); + Bukkit.getPluginManager().callEvent(weaponEquipEvent); + + if(weaponEquipEvent.isCancelled()) + event.setCancelled(true); + } + + @EventHandler + protected final void onPlayerMove(PlayerMoveEvent event) { + if(event.getPlayer().getGameMode() != GameMode.ADVENTURE && event.getPlayer().getGameMode() != GameMode.SURVIVAL) return; + if(event.getFrom().getWorld().getName().equalsIgnoreCase("spawn")) return; + + //This event will fire even when moving your mouse. + //We only want this to continue if a player is stood on a different block. + if(event.getFrom().getBlockX() == event.getTo().getBlockX() && + event.getFrom().getBlockZ() == event.getTo().getBlockZ() && + event.getFrom().getBlockY() == event.getTo().getBlockY()) return; + + event.getPlayer().getNearbyEntities(2.0, 2.0, 2.0).stream() + .filter(entity -> entity instanceof Item && entity.hasMetadata("ProximityExplosive")) + .forEach(entity -> ((ThrowableWeapon) entity.getMetadata("ProximityExplosive").get(0).value()).onExplode(entity, event.getPlayer())); + } + + @EventHandler + protected final void onPlayerDeath(PlayerDeathEvent event) { + Bukkit.getOnlinePlayers().forEach(player -> { + player.hidePlayer(event.getEntity()); + player.showPlayer(event.getEntity()); + }); + + event.getEntity().removePotionEffect(PotionEffectType.SLOW); + event.getEntity().updateInventory(); + + Player killer = event.getEntity().getKiller(); + if(killer != null) { + ItemStack heldItem = killer.getInventory().getItemInMainHand(); + + PlayerCache cache = weaponManager.getPlayerCache(killer.getUniqueId()); + cache.stickyBombs.forEach(Entity::remove); + cache.stickyBombs.clear(); + + Weapon<?> weapon = cache.getOrAddWeapon(heldItem); + if (weapon == null) return; + + if(GTMGuns.KILL_COUNT_SYSTEM) { + ItemStack newItem = Weapon.setKills(heldItem, Weapon.getKills(heldItem) + 1); + Weapon.updateLore(newItem); + + killer.getInventory().setItemInMainHand(newItem); + } + + //TODO Display death message + } + + PlayerCache cache = weaponManager.getPlayerCache(event.getEntity().getUniqueId()); + cache.getPlayerWeapons().forEach(w -> { + w.setWeaponCooldown(null); + w.setWeaponState(WeaponState.IDLE); + }); + + cache.getPlayerWeapons().clear(); + } + + @EventHandler + protected final void onPlayerJoin(PlayerJoinEvent event) { + if(event.getPlayer() == null) return; + event.getPlayer().getAttribute(Attribute.GENERIC_ATTACK_SPEED).setBaseValue(16.0); + + if (Core.getSettings().getType() != ServerType.VICE) { + for (ItemStack itemStack : event.getPlayer().getInventory().getContents()) + weaponManager.updateOldWeapon(event.getPlayer(), itemStack); + } + + event.getPlayer().updateInventory(); + } + + /** + * Remove from PlayerCache when player quits. + */ + @EventHandler + protected final void onPlayerQuit(PlayerQuitEvent event) { + if(event.getPlayer() == null) return; + event.getPlayer().setWalkSpeed(0.2f); + PlayerCache cache = weaponManager.getPlayerCache(event.getPlayer().getUniqueId()); + + this.fastplace.remove(event.getPlayer().getUniqueId()); + + cache.getPlayerWeapons().clear(); + + if(cache.stickyBombs != null && !cache.stickyBombs.isEmpty()) { + cache.stickyBombs.forEach(Entity::remove); + cache.stickyBombs.clear(); + } + + //TODO Remove bullets + + weaponManager.playerCacheMap.remove(event.getPlayer().getUniqueId()); + } + + @EventHandler + protected final void onPlayerKick(PlayerKickEvent event) { + if(event.getPlayer() == null) return; + event.getPlayer().setWalkSpeed(0.2f); + PlayerCache cache = weaponManager.getPlayerCache(event.getPlayer().getUniqueId()); + + cache.getPlayerWeapons().clear(); + + if(cache.stickyBombs != null && !cache.stickyBombs.isEmpty()) { + cache.stickyBombs.forEach(Entity::remove); + cache.stickyBombs.clear(); + } + + //TODO Remove bullets + + weaponManager.playerCacheMap.remove(event.getPlayer().getUniqueId()); + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + protected final void onWeaponRightClick(WeaponRightClickEvent event) { + if(event.getLivingEntity() == null || event.getWeapon() == null) return; + LivingEntity entity = event.getLivingEntity(); + Weapon<?> weapon = event.getWeapon(); + + event.setCancelled(true); + + if(weapon.getWeaponCooldown() != null && !weapon.getWeaponCooldown().hasElapsed()) return; + + if(entity instanceof Player) { + if(((Player) entity).getGameMode() == GameMode.SPECTATOR) { + event.setCancelled(true); + return; + } + + //Check for Flamethrower ammo (Fuel) + if(weapon.getName().equalsIgnoreCase("flamethrower")) { + + ItemStack itemStack = Main.getPlugin(Main.class).getBabies().getJetpackFuelItem().clone(); + boolean found = false; + for (ItemStack item : ((Player) entity).getInventory().getContents()) { + if(item == null) continue; + if(item.getType() != itemStack.getType()) continue; + if(!item.hasItemMeta() || !itemStack.hasItemMeta()) continue; + if(!item.getItemMeta().getDisplayName().equals(itemStack.getItemMeta().getDisplayName())) continue; + + found = true; + break; + } + + if(!found) { + entity.sendMessage(Lang.AMMO.f("&7The &c&lFlamethrower &7requires (jetpack) fuel to use!")); + return; + } + } + weapon.onRightClick((Player) entity); + + if(weapon.getDelay() > 0) + weapon.setWeaponCooldown(new WeaponCooldown(weapon, weapon.getDelay() * 50)); + } + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + protected final void onWeaponLeftClick(WeaponLeftClickEvent event) { + event.setCancelled(true); + if(event.getWeapon().getWeaponState() == WeaponState.SHOOTING) return; + event.getWeapon().onLeftClick((Player) event.getLivingEntity()); + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + protected final void onWeaponSneak(WeaponSneakEvent event) { + if(!(event.getLivingEntity() instanceof Player)) return; + event.getWeapon().onSneak((Player) event.getLivingEntity(), event.isSneaking()); + } + + @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) + protected final void onWeaponDamage(WeaponDamageEvent event) { + + // grab event variables + LivingEntity shooter = event.getLivingEntity(); + Weapon<?> weapon = event.getWeapon(); + LivingEntity target = (LivingEntity) event.getEntity(); + DamageCause cause = event.getCause(); + + if(!(weapon instanceof RangedWeapon) && (weapon.getWeaponCooldown() != null && !weapon.getWeaponCooldown().hasElapsed())) { + event.setCancelled(true); + return; + } + + // initial modifier for damage is 1x + double initialModifier = 1.0; + + // if star system + if (GTMGuns.STAR_SYSTEM){ + ItemStack is = event.getWeaponItemStack(); + + if (is != null){ + + // get the number of stars on this itemstack + int numStars = Weapon.getRarity(is); + if (numStars > 0){ + switch(numStars){ + case 1: + initialModifier = 1.0; + break; + case 2: + initialModifier = 1.1; + break; + case 3: + initialModifier = 1.2; + break; + default: + initialModifier = 1.0; + break; + } + } + } + } + + if(!(weapon instanceof RangedWeapon)){ + weapon.setWeaponCooldown(new WeaponCooldown(weapon, weapon.getDelay() * 50)); + } + + // Note: LauncherWeapons and grenades call this with a specific damage cause + // instead of relying of last damage, which allows us to hook into the actual damage caused + if (cause == DamageCause.DRAGON_BREATH){ + + if(weapon instanceof RangedWeapon){ + event.setDamage(((RangedWeapon) weapon).getDamage() * initialModifier); + } + + else if(weapon instanceof MeleeWeapon){ + event.setDamage(((MeleeWeapon) weapon).getMeleeDamage() * initialModifier); + } + + else if(weapon instanceof ThrowableWeapon){ + event.setDamage(((ThrowableWeapon) weapon).getDamage() * initialModifier); + } + } + // else melee damage + else{ + + if(weapon instanceof RangedWeapon){ + event.setDamage(((RangedWeapon) weapon).getMeleeDamage() * initialModifier); + } + + else if(weapon instanceof MeleeWeapon){ + event.setDamage(((MeleeWeapon) weapon).getMeleeDamage() * initialModifier); + } + + else if(weapon instanceof ThrowableWeapon){ + event.setDamage(((ThrowableWeapon) weapon).getMeleeDamage() * initialModifier); + } + } + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + protected final void onWeaponEquip(WeaponEquipEvent event) { + Weapon<?> weapon = weaponManager.getPlayerCache(event.getLivingEntity().getUniqueId()).getOrAddWeapon(event.getPreviousItem()); + if(weapon != null) { + event.getLivingEntity().removePotionEffect(PotionEffectType.SLOW); + if(event.getLivingEntity() instanceof Player) { + if(weapon instanceof RangedWeapon) + ((RangedWeapon) weapon).updateAmmo(event.getPreviousItem(), (Player) event.getLivingEntity()); + ((Player) event.getLivingEntity()).setWalkSpeed(0.2f); + weapon.onSneak((Player) event.getLivingEntity(), false); + } + } + + if(event.getWeapon() != null) { + if(event.getWeapon() instanceof RangedWeapon) + ((RangedWeapon) event.getWeapon()).updateAmmo(event.getNewItem(), (Player) event.getLivingEntity()); + ((Player) event.getLivingEntity()).setWalkSpeed((float) event.getWeapon().getWalkSpeed()); + } + } + +// @EventHandler +// protected final void onAmmoUpdate(AmmoUpdateEvent event) { +//// Arrays.stream(event.getPlayer().getInventory().getContents()).filter(item -> item != null && item.getType() != Material.AIR).forEach(item -> { +//// Optional<Weapon> weaponOptional = WeaponHandler.this.weaponManager.getPlayerWeapon(event.getPlayer(), item.getType(), item.getDurability()); +//// if(weaponOptional.isPresent() && weaponOptional.get() instanceof RangedWeapon) { +//// RangedWeapon rangedWeapon = (RangedWeapon) weaponOptional.get(); +//// rangedWeapon.setAmmo(item, rangedWeapon.getAmmo(item), event.getAmmo().getOrDefault(rangedWeapon.getAmmoType(), 0)); +//// } +//// }); +// } +// + @EventHandler + protected final void onProjectileHit(ProjectileHitEvent event) { + if(event.getEntity() == null) return; + if(event.getEntity().getShooter() == null) return; + if(!(event.getEntity().getShooter() instanceof LivingEntity)) return; + + if(event.getEntity().hasMetadata("Rocket")) ((WeaponExplosive) event.getEntity().getMetadata("Rocket").get(0).value()).onExplode(event.getEntity(), (Player) event.getEntity().getShooter()); + if(event.getEntity().hasMetadata("Explosive")) ((WeaponExplosive) event.getEntity().getMetadata("Explosive").get(0).value()).onExplode(event.getEntity(), (Player) event.getEntity().getShooter()); + } + +// @EventHandler +// protected final void onEntityDamage(EntityDamageEvent event) { +// if(event.getEntity() == null) return; +// if(event.getEntity().hasMetadata("AirstrikeBomb") && event.getEntity() instanceof ArmorStand) { +// event.setDamage(0); +//// ((AirstrikeWeapon) event.getEntity().getMetadata("AirstrikeBomb").get(0).value()).onExplode(event.getEntity(), (LivingEntity) event.getEntity().getMetadata("Shooter").get(0).value()); +// event.getEntity().remove(); +// } +// } + + @EventHandler + protected final void onBlockExplode(BlockExplodeEvent event) { + if (Core.getSettings().getType() == ServerType.GTM) { + event.setCancelled(true); + return; + } + + for(Block block : event.blockList()) { + if(!block.getType().isSolid()) continue; + if(RandomUtils.nextInt(10) != 1) continue;//Only spawn a few visuals + + Location l = block.getLocation(); + l.setPitch(-Utils.getRandom().nextInt(180)); + l.setYaw(Utils.getRandom().nextInt(360)); + FallingBlock fb = l.getWorld().spawnFallingBlock(l, block.getType(), block.getData()); + fb.setMetadata("EXPLOSION", new FixedMetadataValue(this.plugin, true)); + fb.setDropItem(false); + fb.setHurtEntities(false); + float x = -1.0F + (float)(Math.random() * 2.0D + 1.0D); + float y = -2.0F + (float)(Math.random() * 4.0D + 1.0D); + float z = -1.0F + (float)(Math.random() * 2.0D + 1.0D); + fb.setVelocity(new Vector(x, y, z)); + this.weaponManager.entityQueue.add(fb); +// block.getState().update(); + } +// event.blockList().clear(); + } + + //@EventHandler Disabled because it doesn't work. Makes the potency of the explosions very small. + protected final void onEntityExplode(EntityExplodeEvent event) { + if (Core.getSettings().getType() == ServerType.GTM) { +// event.setCancelled(true); + return; + } + + for (Block block : event.blockList()) { + if(!block.getType().isSolid()) continue; + if(RandomUtils.nextInt(10) != 1) continue;//Only spawn a few visuals + + Location l = block.getLocation(); + l.setPitch(-Utils.getRandom().nextInt(180)); + l.setYaw(Utils.getRandom().nextInt(360)); + FallingBlock fb = l.getWorld().spawnFallingBlock(l, block.getType(), block.getData()); + fb.setMetadata("EXPLOSION", new FixedMetadataValue(this.plugin, true)); + fb.setDropItem(false); + fb.setHurtEntities(false); + float x = -1.0F + (float)(Math.random() * 2.0D + 1.0D); + float y = -2.0F + (float)(Math.random() * 4.0D + 1.0D); + float z = -1.0F + (float)(Math.random() * 2.0D + 1.0D); + fb.setVelocity(new Vector(x, y, z)); + this.weaponManager.entityQueue.add(fb); +// block.getState().update(); + } +// event.blockList().clear(); + } + + @EventHandler + protected final void onEntityBlockChange(EntityChangeBlockEvent event) { + if(event.getEntity() == null) return; + if(!(event.getEntity() instanceof FallingBlock)) return; + if(!event.getEntity().hasMetadata("EXPLOSION")) + return; + + if(this.weaponManager == null || this.weaponManager.entityQueue == null) + return; + + this.weaponManager.entityQueue.remove(event.getEntity()); + event.setCancelled(true); + event.getBlock().getWorld().playEffect(event.getBlock().getLocation(), Effect.STEP_SOUND, event.getTo()); + } + +// @EventHandler +// protected final void onWeaponStack(ItemStackEvent event) { +// if(event.getItemStack() == null) return; +// if(event.getItemStack().getType() != Material.DIAMOND_SWORD) return; +// +// if(event.getItemStack().getDurability() <= 751 || event.getItemStack().getDurability() >= 800) { +// event.setCancelled(true); +// event.setClickOnly(true); +// } +// } + + @EventHandler(ignoreCancelled = true) + protected final void onInventoryOpen(InventoryOpenEvent event) { + if(event.getInventory() == null) return; + if(event.getPlayer() == null) return; + + if (Core.getSettings().getType() == ServerType.VICE) return; + + String name = ChatColor.stripColor(event.getInventory().getName()).toLowerCase(); + if(name.contains("kits") + || name.contains("stats") + || name.contains("cheat codes") + || name.contains("ranks") + || name.contains("choose the villager's job") + || name.contains("token shop") + || name.contains("crate rewards") + || name.contains("christmas shop") + || name.contains("preferences") + || name.contains("contacts") + || name.contains("vehicle shop") + || name.contains("choose category") + || name.contains("sell drugs") + || name.contains("buy machines") + || name.contains("choose category") + || name.contains("buy supplies") + || name.contains("choose gun ategory") + || name.contains("choose gun category") + || name.contains("buy blocks") + || name.contains("purchase throwable") + || name.contains("purchase melee") + || name.contains("purchase pistol") + || name.contains("purchase lmg") + || name.equals("Chest") + || name.equals("") + || name.contains("purchase smg") + || name.contains("purchase shotgun") + || name.contains("purchase assault") + || name.contains("purchase launcher") + || name.contains("purchase sniper") + || name.contains("purchase special") + || name.contains("taxi") + || name.contains("machine mechanic") + || name.contains("chamber") + || name.contains("distillery") + || name.contains("processor") + || name.contains("condenser") + || name.contains("producer") + || name.contains("sugar box")){ + return; + } + + for(ItemStack item : event.getInventory().getContents()) + weaponManager.updateOldWeapon((Player) event.getPlayer(), item); + + ((Player) event.getPlayer()).updateInventory(); + } + + @EventHandler + protected final void onPlayerExplode(EntityDamageByEntityEvent event) { + if (Core.getSettings().getType() == ServerType.GTM) { + if (event.getDamager() != null && event.getDamager() instanceof TNTPrimed) { + TNTPrimed tntPrimed = (TNTPrimed) event.getDamager(); + + if (tntPrimed.hasMetadata("entity_damage")){ + List<MetadataValue> md = tntPrimed.getMetadata("entity_damage"); + if (md != null && !md.isEmpty()){ + boolean damage = md.get(0).asBoolean(); + + if (damage){ + //event.setDamage((event.getDamage() / 4) * 3); + } + else{ + // ignore damage + //event.setDamage(0); + event.setCancelled(true); + } + } + } + } + } + } + + @EventHandler + protected final void onEntityDamage(EntityDamageEvent event) { + if (event.getCause() != EntityDamageEvent.DamageCause.FIRE_TICK) return; + if (Core.getSettings().getType() != ServerType.GTM) return; + event.setCancelled(ThreadLocalRandom.current().nextBoolean()); + } +} diff --git a/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/WeaponManager.java b/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/WeaponManager.java new file mode 100644 index 0000000..d00e38d --- /dev/null +++ b/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/WeaponManager.java @@ -0,0 +1,302 @@ +package net.grandtheftmc.guns; + +import java.util.List; +import java.util.Optional; +import java.util.Set; +import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; + +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.entity.Entity; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +import com.google.common.collect.Sets; +import com.j0ach1mmall3.wastedguns.commands.GiveWeaponCommandHandler; + +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.users.UserManager; +import net.grandtheftmc.guns.cache.PlayerCache; +import net.grandtheftmc.guns.weapon.MeleeWeapon; +import net.grandtheftmc.guns.weapon.Weapon; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.ranged.RangedWeapon; + +/** + * Created by Luke Bingham on 19/07/2017. + */ +public final class WeaponManager { + protected final ConcurrentHashMap<UUID, PlayerCache> playerCacheMap; + protected final Set<Entity> entityQueue; + protected final Set<Material> ignoredBlocks; + protected final Set<Weapon<?>> weapons; + + public WeaponManager() { + this.playerCacheMap = new ConcurrentHashMap<UUID, PlayerCache>(); + this.entityQueue = Sets.newHashSet(); + this.ignoredBlocks = Sets.newHashSet(); + this.weapons = Sets.newHashSet(); + + //Register giveweapon command. + new GiveWeaponCommandHandler(this); + } + + public ConcurrentHashMap<UUID, PlayerCache> getPlayerCacheMap() { + return playerCacheMap; + } + + public Set<Entity> getEntityQueue() { + return entityQueue; + } + + public Set<Material> getIgnoredBlocks() { + return ignoredBlocks; + } + + public Set<Weapon<?>> getRegisteredWeapons() { + return weapons; + } + + public void registerWeapons(List<Weapon<?>> list) { + weapons.addAll(list); + } + + public Optional<Weapon<?>> getWeapon(short durability) { + return this.weapons.stream().filter(weapon -> { + if (weapon.getWeaponSkins() != null) { + for (WeaponSkin skin : weapon.getWeaponSkins()) { + if (skin.getIdentifier() == durability) { + return true; + } + } + } + + return weapon.getWeaponIdentifier() == durability; + }).findFirst(); + } + + public Optional<Weapon<?>> getWeaponFromUniqueIdentifier(short uniqueIdentifier) { + return this.weapons.stream().filter(weapon -> { + return weapon.getUniqueIdentifier() == uniqueIdentifier; + }).findFirst(); + } + + public Optional<Weapon<?>> getWeapon(String name){ + return this.weapons.stream().filter(weapon -> weapon.getName().equalsIgnoreCase(name) || weapon.getCompactName().equalsIgnoreCase(name)).findFirst(); + } + + /** + * Get the weapon based off the itemstack representation. + * <p> + * This is a costly operation and iterates over the whole set + * and compares each weapon's base itemstack to this one + * and possible skin lookups. + * </p> + * + * @param is - the itemstack to get the weapon for + * + * @return The weapon, that has the base representation as this item, if it exists. + */ + public Optional<Weapon<?>> getWeapon(ItemStack is){ + if (is == null){ + return Optional.empty(); + } + + for (Weapon weapon : this.weapons){ + ItemStack base = weapon.getBaseItemStack(); + + if (base != null){ + + // if the same type + if (is.getType() == base.getType() && is.getTypeId() == base.getTypeId()){ + + // if same durability + if (is.getDurability() == base.getDurability()){ + return Optional.of(weapon); + } + + if (weapon.getWeaponSkins() != null){ + for (WeaponSkin skin : weapon.getWeaponSkins()){ + if (is.getDurability() == skin.getIdentifier()){ + return Optional.of(weapon); + } + } + } + } + } + } + return Optional.empty(); + //return this.weapons.stream().filter(weapon -> weapon.getBaseItemStack().isSimilar(is)).findFirst(); + } + + public Weapon<?> getWeaponInHand(LivingEntity livingEntity) { + return getWeaponByItem(livingEntity.getEquipment().getItemInMainHand()); + } + + public Weapon<?> getWeaponByItem(ItemStack itemStack) { + if(itemStack == null || itemStack.getType() != Material.DIAMOND_SWORD) return null; + Optional<Weapon<?>> optional = getWeapon(itemStack.getDurability()); + return optional.orElse(null); + } + + public PlayerCache getPlayerCache(UUID uuid) { + return this.playerCacheMap.computeIfAbsent(uuid, k -> new PlayerCache()); + } + + public void giveWeapon(Player player, Weapon<?> weapon, boolean freshWeapon, short... skin) { +// ItemMeta itemMeta = weapon.getItemStack().getItemMeta(); +// if(freshWeapon) { +// if (weapon instanceof RangedWeapon) +// itemMeta.setDisplayName(Utils.f("&6" + weapon.getName() + " &8«&f" + ((RangedWeapon<?>) weapon).getMagazineSize() + "&8»")); +// else +// itemMeta.setDisplayName(Utils.f("&6" + weapon.getName())); +// } +// itemMeta.setUnbreakable(true); +// itemMeta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES); +// itemMeta.addItemFlags(ItemFlag.HIDE_UNBREAKABLE); +// weapon.getItemStack().setItemMeta(itemMeta); + + player.getInventory().addItem(weapon.createItemStack()); +// if(skin != null && skin.length > 0) setSkin(player, weapon, skin[0]); + player.updateInventory(); + } + + public Weapon<?> isWeapon(ItemStack itemStack) { + if(itemStack == null || itemStack.getType() != Material.DIAMOND_SWORD) return null; + + Optional<Weapon<?>> optional = weapons.stream().filter(weapon -> { + if (weapon.getWeaponSkins() != null) { + for (WeaponSkin skin : weapon.getWeaponSkins()) { + if (skin.getIdentifier() == itemStack.getDurability()) { + return true; + } + } + } + + return weapon.getWeaponIdentifier() == itemStack.getDurability(); + }).findFirst(); + + return optional.orElse(null); + } + + /** + * @deprecated This method does nothing, as createItemStack returns an ItemStack. + */ + @Deprecated + public void setSkin(Player player, Weapon<?> weapon, String skinName) { + WeaponSkin[] weaponSkins = null; + if(weapon instanceof RangedWeapon) + weaponSkins = ((RangedWeapon) weapon).getWeaponSkins(); + + if(weapon instanceof MeleeWeapon) + weaponSkins = ((MeleeWeapon) weapon).getWeaponSkins(); + + if(weaponSkins == null) return; + + for(WeaponSkin skin : weaponSkins) { + if(!skinName.equalsIgnoreCase(skin.getDisplayName())) continue; + + weapon.createItemStack(1, skin); + } + } + + /** + * @deprecated This method does nothing, as createItemStack returns an ItemStack. + */ + @Deprecated + public void setSkin(Player player, Weapon<?> weapon, short id) { + WeaponSkin[] weaponSkins = null; + if(weapon instanceof RangedWeapon) + weaponSkins = ((RangedWeapon) weapon).getWeaponSkins(); + + if(weapon instanceof MeleeWeapon) + weaponSkins = ((MeleeWeapon) weapon).getWeaponSkins(); + + if(weaponSkins == null) return; + + for(WeaponSkin skin : weaponSkins) { + if(weapon.getWeaponIdentifier() + id != skin.getIdentifier()) continue; + //weapon.getItemStack().setDurability(skin.getIdentifier()); + } + } + + public void updateOldWeapon(Player player, ItemStack item) { + if(player == null || (item == null || item.getType() == Material.AIR)) return; + if(!item.hasItemMeta() && !item.getItemMeta().hasDisplayName()) return; + + if(item.getItemMeta().getDisplayName()!=null && item.getItemMeta().getDisplayName().contains("Devil's Snowball")) + return; + + // grab core user + User user = UserManager.getInstance().getUser(player.getUniqueId()).orElse(null); + + if (user == null || user.hasEditMode()){ + return; + } + + Weapon<?> w = null; + for(Weapon<?> weapon : this.weapons) { + if(weapon.getOldItemStack().getType() == Material.FLINT_AND_STEEL && item.getType() == Material.FLINT_AND_STEEL) { + if(ChatColor.stripColor(item.getItemMeta().getDisplayName()).equalsIgnoreCase("Katana")) { + if(weapon.getName().equalsIgnoreCase("Katana")) { + w = weapon; + break; + } + } + + if(ChatColor.stripColor(item.getItemMeta().getDisplayName()).equalsIgnoreCase("Flamethrower")) { + if(weapon.getName().equalsIgnoreCase("Flamethrower")) { + w = weapon; + break; + } + } + } + else { + if(weapon.getOldItemStack().getType() == item.getType() && weapon.getOldItemStack().getData().getData() == item.getData().getData()) { + if(item.getDurability() == 0) { + w = weapon; + break; + } + else { + if(ChatColor.stripColor(item.getItemMeta().getDisplayName()).equalsIgnoreCase("Minigun")) { + if(weapon.getName().equalsIgnoreCase("Gold Minigun")) { + w = weapon; + break; + } + } + } + } + } + } + + if(w == null) return; + ItemStack newItem = w.getBaseItemStack().clone(); + item.setType(newItem.getType()); + item.setDurability(newItem.getDurability()); + item.setData(newItem.getData()); + item.setItemMeta(newItem.getItemMeta()); + +// net.minecraft.server.v1_12_R1.ItemStack nmsItem = CraftItemStack.asNMSCopy(item); +// NBTTagCompound compound; +// if (nmsItem.getTag() == null) compound = new NBTTagCompound(); +// else compound = nmsItem.getTag(); +// +// compound.set("stack_fix", new NBTTagString(UUID.randomUUID().toString())); +// compound.set("weapon_type", new NBTTagString(optional.get().getWeaponType().name())); +// +// compound.set("weapon_range", new NBTTagDouble(((RangedWeapon<?>) optional.get()).getRange())); +// compound.set("weapon_accuracy", new NBTTagDouble(((RangedWeapon<?>) optional.get()).getAccuracy())); +// compound.set("weapon_melee-damage", new NBTTagDouble(((MeleeWeapon) optional.get()).getMeleeDamage())); +// +// if(optional.get() instanceof RangedWeapon<?>) +// compound.set("weapon_damage", new NBTTagDouble(((RangedWeapon<?>) optional.get()).getDamage())); +// +// if(optional.get() instanceof WeaponRPM) +// compound.set("weapon_rpm", new NBTTagInt(((WeaponRPM) optional.get()).getRpm())); +// +// nmsItem.setTag(compound); +// item.setItemMeta(CraftItemStack.asBukkitCopy(nmsItem).getItemMeta()); + } +} diff --git a/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/WeaponState.java b/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/WeaponState.java new file mode 100644 index 0000000..19fe35b --- /dev/null +++ b/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/WeaponState.java @@ -0,0 +1,34 @@ +package net.grandtheftmc.guns; + +/** + * Created by Luke Bingham on 24/07/2017. + */ +public enum WeaponState { + + /** + * This state will be used when the player is reloading their Weapon. + */ + RELOADING, + + /** + * This state will be used when the player is shooting their Weapon. + */ + SHOOTING, + + /** + * This state will be used when the player is bursting with their Weapon. + */ + BURSTING, + + /** + * This state will be used when the weapon is not doing anything. + */ + IDLE, + + /** + * This state will be used when the Weapon is no longer being used. + */ + NONE, + + ; +} diff --git a/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/cache/PlayerCache.java b/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/cache/PlayerCache.java new file mode 100644 index 0000000..2b647b4 --- /dev/null +++ b/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/cache/PlayerCache.java @@ -0,0 +1,93 @@ +package net.grandtheftmc.guns.cache; + +import java.util.HashSet; +import java.util.Optional; +import java.util.Set; + +import org.bukkit.Material; +import org.bukkit.entity.Entity; +import org.bukkit.inventory.ItemStack; + +import com.google.common.collect.Sets; + +import net.grandtheftmc.guns.GTMGuns; +import net.grandtheftmc.guns.weapon.Weapon; +import net.grandtheftmc.guns.weapon.WeaponSkin; + +/** + * Created by Luke Bingham on 19/07/2017. + */ +public class PlayerCache { + private final HashSet<Weapon<?>> playerWeapons; + public final Set<Entity> stickyBombs; + + public boolean shooting = false; + public int burst = 0, tick = 0; + + public PlayerCache() { + this.playerWeapons = Sets.newHashSet(); + this.stickyBombs = Sets.newHashSet(); + } + + public HashSet<Weapon<?>> getPlayerWeapons() { + return playerWeapons; + } + + public boolean hasWeapon(ItemStack itemStack) { + if(itemStack == null || itemStack.getType() != Material.DIAMOND_SWORD) return false; + + return playerWeapons.stream().anyMatch(weapon -> { + if (weapon.getWeaponSkins() != null) { + for (WeaponSkin skin : weapon.getWeaponSkins()) { + if (skin.getIdentifier() == itemStack.getDurability()) { + return true; + } + } + } + + return weapon.getWeaponIdentifier() == itemStack.getDurability(); + }); + } + + public Weapon<?> getCachedWeapon(ItemStack itemStack) { + if(itemStack == null || itemStack.getType() != Material.DIAMOND_SWORD) return null; + return this.getCachedWeapon(itemStack.getDurability()); + } + + public Weapon<?> getCachedWeapon(short identifier) { + Optional<Weapon<?>> optional = playerWeapons.stream().filter(weapon -> { + if (weapon.getWeaponSkins() != null) { + for (WeaponSkin skin : weapon.getWeaponSkins()) { + if (skin.getIdentifier() == identifier) { + return true; + } + } + } + + return weapon.getWeaponIdentifier() == identifier; + }).findFirst(); + + return optional.orElse(null); + } + + public Weapon<?> getOrAddWeapon(ItemStack itemStack) { + if(itemStack == null || itemStack.getType() != Material.DIAMOND_SWORD) return null; + Weapon<?> weapon = getCachedWeapon(itemStack); + if(weapon == null) { + Optional<Weapon<?>> optional = GTMGuns.getInstance().getWeaponManager().getWeapon(itemStack.getDurability()); + weapon = optional.<Weapon<?>>map(Weapon::clone).orElse(null); + if(weapon != null) playerWeapons.add(weapon); + } + return weapon; + } + + public Weapon<?> getOrAddWeapon(short identifier) { + Weapon<?> weapon = getCachedWeapon(identifier); + if(weapon == null) { + Optional<Weapon<?>> optional = GTMGuns.getInstance().getWeaponManager().getWeapon(identifier); + weapon = optional.<Weapon<?>>map(Weapon::clone).orElse(null); + if(weapon != null) playerWeapons.add(weapon); + } + return weapon; + } +} diff --git a/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/cache/WeaponCache.java b/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/cache/WeaponCache.java new file mode 100644 index 0000000..88c123e --- /dev/null +++ b/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/cache/WeaponCache.java @@ -0,0 +1,18 @@ +package net.grandtheftmc.guns.cache; + +import net.grandtheftmc.guns.WeaponCooldown; +import net.grandtheftmc.guns.WeaponState; +import net.grandtheftmc.guns.weapon.Weapon; +import org.bukkit.entity.LivingEntity; + +/** + * Created by Luke Bingham on 19/07/2017. + */ +public class WeaponCache { + public WeaponCooldown cooldown; + public int burstShots, burstTicks, clip = -1; + public LivingEntity homingEntity; + public WeaponState weaponState = WeaponState.NONE; + + public Weapon<?> weapon = null; +} diff --git a/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/AirstrikeWeapon.java b/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/AirstrikeWeapon.java new file mode 100644 index 0000000..15e5375 --- /dev/null +++ b/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/AirstrikeWeapon.java @@ -0,0 +1,135 @@ +package net.grandtheftmc.guns.weapon; + +import org.bukkit.Sound; +import org.bukkit.inventory.ItemStack; + +/** + * Created by Luke Bingham on 18/07/2017. + */ +public class AirstrikeWeapon extends Weapon<AirstrikeWeapon> { + +// protected final boolean useBeacon = false; +// protected final Effect beaconParticle = null, explosionParticle = null; +// protected int beaconRadius = 3, circleParticles = 60, beaconLineParticles = 13, updateTicks = 5, rotationDegrees = 1, targetLength = 5; +// protected double damage = 0.0, explosionSize = 5.0, explosionStrength = 2.0; +// protected ItemStack bombItemStack, hydraItemStack; + + /** + * Construct a new Weapon. + */ + public AirstrikeWeapon(short uniqueIdentifier, String name, WeaponType weaponType, AmmoType ammoType, ItemStack itemStack, Sound[] sounds) { + super(uniqueIdentifier, name, weaponType, ammoType, itemStack, sounds); + } + + @Override + public String[] getStatsBar() { + return new String[] {"null"}; + } + + @Override + public AirstrikeWeapon clone() { + return null; + } + +// /** +// * Get the particle used for the beacon visuals. +// * +// * @return particle type +// */ +// public Effect getBeaconParticle() { +// return beaconParticle; +// } +// +// /** +// * Get the particles used to visualise the explosion. +// * +// * @return particle type +// */ +// public Effect getExplosionParticle() { +// return explosionParticle; +// } +// +// /** +// * Check if the airstrike weapon is using beacon. +// * +// * @return beacon status +// */ +// public boolean isUsingBeacon() { +// return useBeacon; +// } +// +// public int getBeaconRadius() { +// return beaconRadius; +// } +// +// public int getCircleParticles() { +// return circleParticles; +// } +// +// public int getBeaconLineParticles() { +// return beaconLineParticles; +// } +// +// public int getUpdateTicks() { +// return updateTicks; +// } +// +// public int getRotationDegrees() { +// return rotationDegrees; +// } +// +// public int getTargetLength() { +// return targetLength; +// } +// +// public double getDamage() { +// return damage; +// } +// +// public double getExplosionSize() { +// return explosionSize; +// } +// +// public double getExplosionStrength() { +// return explosionStrength; +// } +// +// /** +// * Get the Bomb Itemstack. +// * +// * @return bomb item +// */ +// public ItemStack getBombItemStack() { +// return bombItemStack; +//// ItemStack itemStack = new ItemStack(Material.STONE); +//// ItemMeta itemMeta = itemStack.getItemMeta(); +//// itemMeta.setDisplayName(Utils.f("&6Grenade")); +//// itemMeta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES); +//// itemStack.setItemMeta(itemMeta); +//// return itemStack; +// } +// +// /** +// * Get the Hydra Itemstack. +// * +// * @return hydra item +// */ +// public ItemStack getHydraItemStack() { +// return hydraItemStack; +//// ItemStack itemStack = new ItemStack(Material.QUARTZ_ORE); +//// ItemMeta itemMeta = itemStack.getItemMeta(); +//// itemMeta.setDisplayName(Utils.f("&4&lHydra")); +//// itemMeta.setLore(Collections.singletonList(Utils.f("&7Type: &a&lPlane"))); +//// itemStack.setItemMeta(itemMeta); +//// return itemStack; +// } +// +// /** +// * Get the fire delay for the airstrike. +// * +// * @return fire delay +// */ +// public int getFireDelay() { +// return 20; +// } +} diff --git a/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/AmmoType.java b/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/AmmoType.java new file mode 100644 index 0000000..df852a7 --- /dev/null +++ b/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/AmmoType.java @@ -0,0 +1,39 @@ +package net.grandtheftmc.guns.weapon; + +/** + * Created by Luke Bingham on 21/07/2017. + */ +public enum AmmoType { + NONE("NONE"), + MELEE("MELEE"), + + //RANGED + PISTOL("PISTOL"), + SMG("SMG"), + SHOTGUN("SHOTGUN"), + LMG("MG"), + SNIPER("SNIPER"), + LAUNCHER("ROCKET"), + ASSAULT_RIFLE("ASSAULT_RIFLE"), + ROCKET("ROCKET"), + + MINIGUN("MINIGUN"), + + //EXTRA + EXPLOSIVE("EXPLOSIVE"), + ENERGY("ENERGY"), + GRENADE("GRENADE"), + + FUEL("FUEL"), + ; + + private String type; + + AmmoType(String type) { + this.type = type; + } + + public String getType() { + return type; + } +} diff --git a/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/MeleeWeapon.java b/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/MeleeWeapon.java new file mode 100644 index 0000000..4ef8efa --- /dev/null +++ b/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/MeleeWeapon.java @@ -0,0 +1,116 @@ +package net.grandtheftmc.guns.weapon; + +import org.bukkit.ChatColor; +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.util.Vector; + +import com.j0ach1mmall3.jlib.methods.Sounds; +import com.j0ach1mmall3.wastedguns.MathUtil; + +import net.grandtheftmc.core.util.C; + +/** + * Created by Luke Bingham on 18/07/2017. + */ +public class MeleeWeapon extends Weapon<MeleeWeapon> { + + protected double meleeDamage = 0.0, range = 0.0; + + /** + * Construct a new Weapon. + */ + public MeleeWeapon(short uniqueIdentifier, String name, WeaponType weaponType, AmmoType ammoType, ItemStack itemStack, Sound[] sounds) { + super(uniqueIdentifier, name, weaponType, ammoType, itemStack, sounds); + + this.weaponSkins = new WeaponSkin[] { + new WeaponSkin(weaponType, itemStack.getDurability(), "&e&lDefault") + }; + } + + @Override + public void onRightClick(Player player){ + if(getName().equalsIgnoreCase("Chainsaw")) { + MathUtil.getNearbyEntities(player, this.range).forEach(e -> { + if (player.hasLineOfSight(e)) { + Vector toEntity = e.getLocation().toVector().subtract(player.getLocation().toVector()); + double dot = toEntity.normalize().dot(player.getLocation().getDirection()); + if (dot <= 1 && dot >= 0) { + e.setNoDamageTicks(0); + e.damage(getMeleeDamage(), player); + } + } + }); + Sounds.broadcastSound(getSounds()[0], player.getEyeLocation()); + } + } + + @Override + public String[] getStatsBar() { + String[] output = new String[1]; + String symbol = ":", + done = ChatColor.GREEN.toString() + ChatColor.BOLD, + empty = ChatColor.DARK_GRAY.toString() + ChatColor.BOLD; + int bars = 10; + double best = 0; + double result; + int stat; + for(int i = 0; i < 1; i ++) { + if(i == 0) { + output[i] = ""; + best = 15.0; + + result = net.grandtheftmc.core.util.MathUtil.getPercentBetweenValues(best, this.meleeDamage); + stat = (int) Math.floor(result) / 10; + for(int x = 0; x < bars; x++) { + output[i] += (x <= stat ? done : empty) + symbol; + } + output[i] += C.GRAY + " Damage"; + } +// else if(x == 1) { +// output[x] = "Range "; +// best = 100.0; +// for(int i = 1; i < (bars+1); i++) { +// if(i * (best / bars) > this.range) output[x] += done+symbol; +// else output[x] += empty+symbol; +// } +// } + } + + return output; + } + + @Override + public MeleeWeapon clone() { + MeleeWeapon weapon = new MeleeWeapon(getUniqueIdentifier(), getName(), getWeaponType(), getAmmoType(), getBaseItemStack().clone(), getSounds()); + weapon.oldItemStack = super.oldItemStack.clone(); + weapon.deathMessages = super.deathMessages; + weapon.walkSpeed = super.walkSpeed; + weapon.delay = super.delay; + weapon.meleeDamage = this.meleeDamage; + weapon.range = this.range; + return weapon; + } + + public double getMeleeDamage() { + return meleeDamage; + } + + public double getRange() { + return range; + } + + @Override + public WeaponSkin[] getWeaponSkins() { + return weaponSkins; + } + + protected void setWeaponSkins(WeaponSkin... skins) { + WeaponSkin defaultSkin = this.weaponSkins[0]; + this.weaponSkins = new WeaponSkin[skins.length + 1]; + for(int i = 0; i < skins.length; i++) + this.weaponSkins[i + 1] = skins[i]; + this.weaponSkins[0] = defaultSkin; + } +} diff --git a/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/ThrowableWeapon.java b/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/ThrowableWeapon.java new file mode 100644 index 0000000..a9770b1 --- /dev/null +++ b/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/ThrowableWeapon.java @@ -0,0 +1,435 @@ +package net.grandtheftmc.guns.weapon; + +import java.util.Collection; +import java.util.stream.Collectors; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Effect; +import org.bukkit.GameMode; +import org.bukkit.Particle; +import org.bukkit.Sound; +import org.bukkit.entity.AreaEffectCloud; +import org.bukkit.entity.ArmorStand; +import org.bukkit.entity.Arrow; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Item; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.entity.TNTPrimed; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.EntityDamageEvent.DamageCause; +import org.bukkit.inventory.ItemStack; +import org.bukkit.metadata.FixedMetadataValue; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; +import org.bukkit.scheduler.BukkitRunnable; + +import com.j0ach1mmall3.jlib.inventory.CustomItem; +import com.j0ach1mmall3.jlib.methods.Random; +import com.j0ach1mmall3.jlib.methods.Sounds; +import com.j0ach1mmall3.wastedguns.MathUtil; +import com.j0ach1mmall3.wastedguns.api.events.explosives.ExplosionDamageEntityEvent; + +import net.grandtheftmc.core.util.C; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.guns.DamageDataHandler; +import net.grandtheftmc.guns.GTMGuns; +import net.grandtheftmc.guns.cache.PlayerCache; +import net.grandtheftmc.guns.weapon.attribute.WeaponExplosive; + +/** + * Created by Luke Bingham on 18/07/2017. + */ +public class ThrowableWeapon extends Weapon<ThrowableWeapon> implements WeaponExplosive { + + protected Effect particles; + /** Does damage scale off of distance from projectile landing */ + protected boolean scaledDamage = false; + protected boolean sticky = false, proximity = false, flammable = false, teargas = false; + protected double damage = 0.0, meleeDamage = 0.0, explosionSize = 0.0, explosionStrength = 0.0; + protected int explosionDelay = 0, duration = 0, tntFuseDelay = 1; + + /** + * Construct a new Weapon. + */ + public ThrowableWeapon(short uniqueIdentifier, String name, WeaponType weaponType, AmmoType ammoType, ItemStack itemStack, Sound[] sounds) { + super(uniqueIdentifier, name, weaponType, ammoType, itemStack, sounds); + } + + @Override + public String[] getStatsBar() { + String[] output = new String[2]; + String symbol = ":", + done = ChatColor.GREEN.toString() + ChatColor.BOLD, + empty = ChatColor.DARK_GRAY.toString() + ChatColor.BOLD; + int bars = 10; + double best = 0; + double result; + int stat; + for(int i = 0; i < 2; i ++) { + if(i == 0) { + output[i] = ""; + best = 55.0; + + result = net.grandtheftmc.core.util.MathUtil.getPercentBetweenValues(best, this.damage); + stat = (int) Math.floor(result) / 10; + for(int x = 0; x < bars; x++) { + output[i] += (x <= stat ? done : empty) + symbol; + } + output[i] += C.GRAY + " Damage"; + } + + if(i == 1) { + output[i] = ""; + best = 3.0; + + result = net.grandtheftmc.core.util.MathUtil.getPercentBetweenValues(best, this.explosionStrength); + stat = (int) Math.floor(result) / 10; + for(int x = 0; x < bars; x++) { + output[i] += (x <= stat ? done : empty) + symbol; + } + output[i] += C.GRAY + " Strength"; + } +// else if(x == 1) { +// output[x] = "Range "; +// best = 100.0; +// for(int i = 1; i < (bars+1); i++) { +// if(i * (best / bars) > this.range) output[x] += done+symbol; +// else output[x] += empty+symbol; +// } +// } + } + + return output; + } + + public Effect getParticle() { + return particles; + } + + public boolean isSticky() { + return sticky; + } + + public boolean isProximity() { + return proximity; + } + + /** + * Get the generic damage of the Weapon. + * + * @return damage value + */ + public double getDamage() { + return damage; + } + + /** + * Get the Melee damage of the Weapon. + * + * @return damage value + */ + public double getMeleeDamage() { + return meleeDamage; + } + + /** + * Get the size of the explosion. + * + * @return explosion size + */ + public double getExplosionSize() { + return explosionSize; + } + + /** + * Get the strength of the explosion. + * + * @return explosion strength + */ + public double getExplosionStrength() { + return explosionStrength; + } + + /** + * Get the delay time of the explosion. + * + * @return delay value (in ticks) + */ + public int getExplosionDelay() { + return explosionDelay; + } + + public boolean isFlammable() { + return flammable; + } + + public boolean isTeargas() { + return teargas; + } + + public int getDuration() { + return duration; + } + + /** + * Get whether or not this launcher weapon does scaled damage. + * + * @return {@code true} if the damage is scaled from origin of projectile hit, {@code false} otherwise. + */ + public boolean isScaledDamage() { + return scaledDamage; + } + + @Override + public void onRightClick(Player player) { + PlayerCache cache = GTMGuns.getInstance().getWeaponManager().getPlayerCache(player.getUniqueId()); + if(this.sticky && cache.stickyBombs.size() >= 5) return; + + this.launchProjectile(player); + + ItemStack heldItem = player.getEquipment().getItemInMainHand(); + heldItem.setAmount(heldItem.getAmount() - 1); + player.getEquipment().setItemInMainHand(heldItem); + Sounds.broadcastSound(this.getSounds()[0], player.getEyeLocation()); + } + + @Override + public void onExplode(Entity explosive, Player shooter) { + + Collection<LivingEntity> eventVictims = MathUtil.getNearbyEntities(explosive, this.explosionSize, 1, this.explosionSize).collect(Collectors.toList()); + ExplosionDamageEntityEvent damageEntityEvent = new ExplosionDamageEntityEvent(shooter, explosive, eventVictims, this); + Bukkit.getServer().getPluginManager().callEvent(damageEntityEvent); + if (damageEntityEvent.isCancelled()) { + GTMGuns.getInstance().getWeaponManager().getEntityQueue().remove(explosive); + if (!(explosive instanceof Player)) explosive.remove(); + return; + } + + Collection<LivingEntity> victims = damageEntityEvent.getVictims(); + if (this.duration != 0) { + AreaEffectCloud areaEffectCloud = null; + if(this.isFlammable()) + areaEffectCloud = explosive.getWorld().spawn(explosive.getLocation().add(0, 0.5, 0), AreaEffectCloud.class); + + if(this.isTeargas()) + areaEffectCloud = explosive.getWorld().spawn(explosive.getLocation().add(0, 1.0, 0), AreaEffectCloud.class); + + if(areaEffectCloud == null) return; + + areaEffectCloud.setWaitTime(0); + areaEffectCloud.setDuration(this.duration); + areaEffectCloud.setParticle(Particle.valueOf(this.particles.name())); + areaEffectCloud.setRadius((float) this.explosionSize); + + new BukkitRunnable() { + private int count = 0; + @Override public void run() { + + // every tick, get nearby entities + victims.clear(); + victims.addAll(MathUtil.getNearbyEntities(explosive, explosionSize, 1, explosionSize).collect(Collectors.toList())); + + victims.forEach(e -> { + if(isTeargas()) { + PotionEffectType[] effectTypes = new PotionEffectType[] { + PotionEffectType.SLOW, + PotionEffectType.BLINDNESS, + PotionEffectType.WEAKNESS, + PotionEffectType.CONFUSION, + PotionEffectType.SLOW_DIGGING + }; + + for (PotionEffectType effectType : effectTypes) { + if (e.hasPotionEffect(effectType)) { + PotionEffect effect = e.getPotionEffect(effectType); + + // if no effect, add it, 1/4 of the duration + if (effect == null) { + e.addPotionEffect(new PotionEffect(effectType, duration / 4, 0, true, false)); + continue; + } + + // if less than 1/4 of the duration remains + if (effect.getDuration() < (duration / 4)){ + e.removePotionEffect(effectType); + e.addPotionEffect(new PotionEffect(effectType, duration / 4, 0, true, false)); + } + + continue; + } + + e.addPotionEffect(new PotionEffect(effectType, duration / 4, 0, true, false)); + } + } + + if(isFlammable()) + e.setFireTicks(duration); + }); + + if(this.count++ * 10 > duration) { + this.cancel(); + GTMGuns.getInstance().getWeaponManager().getEntityQueue().remove(explosive); + if (!(explosive instanceof Player)) explosive.remove(); + } + } + }.runTaskTimer(GTMGuns.getInstance(), 0, 10L); + } + + else { +// Vice + if (tntFuseDelay <= 1) { + TNTPrimed entity = (TNTPrimed) explosive.getWorld().spawnEntity(explosive.getLocation(), EntityType.PRIMED_TNT); + entity.setCustomName("EXPLOSIVE"); + entity.setCustomNameVisible(false); + entity.setFuseTicks(1); + // add metadata to see if this should do entity damage + entity.setMetadata("entity_damage", new FixedMetadataValue(GTMGuns.getInstance(), false)); + + } else { + ServerUtil.runTaskLater(() -> { + TNTPrimed entity = (TNTPrimed) explosive.getWorld().spawnEntity(explosive.getLocation(), EntityType.PRIMED_TNT); + entity.setCustomName("EXPLOSIVE"); + entity.setCustomNameVisible(false); + entity.setFuseTicks(1); + // add metadata to see if this should do entity damage + entity.setMetadata("entity_damage", new FixedMetadataValue(GTMGuns.getInstance(), false)); + + }, tntFuseDelay); + } +// explosive.getWorld().createExplosion(explosive.getLocation(), 1.8f); + +// GTM +// explosive.getWorld().spigot().playEffect(explosive.getLocation(), this.particles, 0, 0, 0, 0, 0, 0.01F, 1, 50); + if(!victims.isEmpty()) { + + for (LivingEntity e : victims) { + + if(e.getType() == EntityType.PLAYER) { + Player victim = (Player) e; + if (victim.getGameMode() != GameMode.ADVENTURE && victim.getGameMode() != GameMode.SURVIVAL) return; + } + + // send entities flying away from this explosion + if (!(e instanceof ArmorStand)) e.setVelocity(e.getLocation().getDirection().multiply(-this.explosionStrength)); + + // the initial damage modifier they should take + double scaledDamage = 1.0; + + if (isScaledDamage()){ + + // the distance sq from the origin + double distanceSq = explosive.getLocation().distanceSquared(e.getLocation()); + + // if there is an explosion size + if (getExplosionSize() > 0){ + + // ratio is (explosionSize squared - distanceSq) DIVIDED BY explosionSize squared + // look below for example calculations + // assume explosionSize for all is 10 + // if distanceSq = 4, 100 - 4 = 96/100 = 96% + // if distanceSq = 9, 100 - 9 = 91/100 = 91% + // if distanceSq = 81, 100 - 81 = 19/100 = 19% + double ratio = (Math.pow(explosionSize, 2) - distanceSq) / Math.pow(explosionSize, 2); + + // CLAMP percent of damage to always be at least 10% + if (ratio <= 0.10){ + ratio = 0.10; + } + // 90% accurate should do 100% damage + // b/c to the user it always does less than max damage + if (ratio >= 0.90){ + ratio = 1.0; + } + + scaledDamage = ratio; + } + } + + // absolute value this just in case + // 19% of getDamage would be the total damage + double totalDamage = Math.abs(scaledDamage * getDamage()); + + // create entity damage by entity event and add to data handler + EntityDamageByEntityEvent edbee = new EntityDamageByEntityEvent(shooter, e, DamageCause.DRAGON_BREATH, totalDamage); + DamageDataHandler.getInstance().addData(e.getUniqueId(), edbee); + + // damage the entity and set last damage cause + e.damage(totalDamage, shooter); + // reset damage ticks so they can take damage again + e.setNoDamageTicks(0); + e.setLastDamageCause(edbee); + } + } + GTMGuns.getInstance().getWeaponManager().getEntityQueue().remove(explosive); + if (!(explosive instanceof Player)) explosive.remove(); + } + Sounds.broadcastSound(this.getSounds()[3], explosive.getLocation()); + } + + public void launchProjectile(Player player) { + PlayerCache cache = GTMGuns.getInstance().getWeaponManager().getPlayerCache(player.getUniqueId()); + Entity projectile; + + if(this.sticky) { + projectile = player.launchProjectile(Arrow.class); + projectile.setVelocity(projectile.getVelocity().multiply(1.2).setY(player.getEyeHeight())); + ((Arrow) projectile).setBounce(false); + projectile.setMetadata("StickyExplosive", new FixedMetadataValue(GTMGuns.getInstance(), this)); + cache.stickyBombs.add(projectile); + } + else { + + // TODO add skin support here (if we change say grenade skins) + ItemStack stack = super.createItemStack(); + CustomItem ci = new CustomItem(stack); + ci.setAmount(1); + ci.setName(Random.getString(16, true, true)); + projectile = player.getWorld().dropItemNaturally(player.getEyeLocation(), ci); + if (!this.proximity) ((Item) projectile).setPickupDelay(Integer.MAX_VALUE); + projectile.setMetadata("Explosive", new FixedMetadataValue(GTMGuns.getInstance(), this)); + } + + projectile.setVelocity(player.getEyeLocation().getDirection().multiply(1.5f)); + projectile.setMetadata("Shooter", new FixedMetadataValue(GTMGuns.getInstance(), player)); + GTMGuns.getInstance().getWeaponManager().getEntityQueue().add(projectile); + + if(this.explosionDelay != 0) { + Bukkit.getScheduler().scheduleSyncDelayedTask(GTMGuns.getInstance(), () -> + this.onExplode(projectile, player), this.explosionDelay); + } + } + + @Override + public void onLand(Entity explosive) { + if(!isProximity()) return; + explosive.removeMetadata("Explosive", GTMGuns.getInstance()); + explosive.setMetadata("ProximityExplosive", new FixedMetadataValue(GTMGuns.getInstance(), this)); + } + + @Override + public ThrowableWeapon clone() { + ThrowableWeapon weapon = new ThrowableWeapon(getUniqueIdentifier(), getName(), getWeaponType(), getAmmoType(), getBaseItemStack().clone(), getSounds()); + weapon.oldItemStack = super.oldItemStack.clone(); + weapon.deathMessages = super.deathMessages; + weapon.walkSpeed = super.walkSpeed; + weapon.delay = super.delay; + + weapon.particles = this.particles; + weapon.sticky = this.sticky; + weapon.tntFuseDelay = this.tntFuseDelay; + weapon.proximity = this.proximity; + weapon.flammable = this.flammable; + weapon.teargas = this.teargas; + weapon.damage = this.damage; + weapon.meleeDamage = this.meleeDamage; + weapon.explosionSize = this.explosionSize; + weapon.explosionStrength = this.explosionStrength; + weapon.explosionDelay = this.explosionDelay; + weapon.duration = this.duration; + weapon.scaledDamage = this.scaledDamage; + return weapon; + } +} diff --git a/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/Weapon.java b/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/Weapon.java new file mode 100644 index 0000000..8fae3e2 --- /dev/null +++ b/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/Weapon.java @@ -0,0 +1,636 @@ +package net.grandtheftmc.guns.weapon; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +import org.bukkit.ChatColor; +import org.bukkit.Sound; +import org.bukkit.craftbukkit.v1_12_R1.inventory.CraftItemStack; +import org.bukkit.entity.Player; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.servers.ServerType; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.guns.GTMGuns; +import net.grandtheftmc.guns.WeaponCooldown; +import net.grandtheftmc.guns.WeaponState; +import net.grandtheftmc.guns.weapon.ranged.RangedWeapon; +import net.minecraft.server.v1_12_R1.NBTTagCompound; +import net.minecraft.server.v1_12_R1.NBTTagInt; + +/** + * Created by Luke Bingham on 17/07/2017. + */ +public abstract class Weapon<T extends Weapon> { + + /** + * Extra colour codes to make it unique, extra c, d and l standing for + * custom damage lore + */ + public static final String CUSTOM_DAMAGE_LORE_PREFIX = "\247c\247d\247l\2477"; + + /** + * Damage prefix on the lore line. + */ + public static final String DAMAGE_PREFIX = "" + ChatColor.RESET + ChatColor.GRAY + "Stars: " + ChatColor.WHITE; + + private final short uniqueIdentifier; + private final short weaponIdentifier; + + private final String name; + private final WeaponType weaponType; + private final AmmoType ammoType; + private ItemStack itemStack; + protected ItemStack oldItemStack; + private final Sound[] sounds; + protected WeaponSkin[] weaponSkins; + protected Map<EntityDamageEvent.DamageCause, String> deathMessages; + private String[] description; + + protected double walkSpeed = 0.2; + /** The time, in ticks, that must wait before firing again. */ + protected int delay = 0; + + private WeaponCooldown weaponCooldown; + protected WeaponState weaponState = WeaponState.IDLE; + + /** + * Construct a new Weapon. + */ + public Weapon(short uniqueIdentifier, String name, WeaponType weaponType, AmmoType ammoType, ItemStack itemStack, Sound[] sounds) { + this.uniqueIdentifier = uniqueIdentifier; + this.weaponIdentifier = itemStack.getDurability(); + + this.name = name; + this.weaponType = weaponType; + this.ammoType = ammoType; + this.itemStack = itemStack; + this.sounds = sounds; + } + + @Override + public abstract T clone(); + + public void onRightClick(Player player) { + } + + public void onLeftClick(Player player) { + } + + public void onSneak(Player player, boolean sneaking) { + } + + public short getUniqueIdentifier() { + return this.uniqueIdentifier; + } + + public short getWeaponIdentifier() { + return this.weaponIdentifier; + } + + public String getName() { + return this.name; + } + + public String getCompactName() { + return this.name.replace(" ", ""); + } + + public WeaponType getWeaponType() { + return weaponType; + } + + public AmmoType getAmmoType() { + return this.ammoType; + } + + /** + * Get the base representation of this weapon, without any lore, values, or + * data. + * + * @return The basic itemstack representation for this weapon. + */ + public ItemStack getBaseItemStack() { + return this.itemStack; + } + + /** + * Get the weapon lore for this itemstack. + * <p> + * Note: ItemMeta is required because we're still building rules from + * getItemStack() above. + * </p> + * + * @param is - the current itemstack + * @param im - the current item meta for the itemstack + * + * @return The lore for the weapon. + */ + public List<String> getWeaponLore(ItemStack is, ItemMeta im) { + + // do not include weapon lore for vice + if (Core.getSettings().getType() == ServerType.VICE) + return Lists.newArrayList(); + + List<String> lore = Lists.newArrayList(); + + // if we have a star system + if (GTMGuns.STAR_SYSTEM) { + int rarity = getRarity(is); + + // add lore for the "star" system + if (rarity > 0) { + String builder = "" + ChatColor.GOLD; + + // add each "star" rarity + for (int i = 0; i < rarity; i++){ + builder += "✮"; + } + + builder += "" + ChatColor.DARK_GRAY; + + // for each star not on the item + for (int i = 0; i < (GTMGuns.MAX_STARS - rarity); i++){ + builder += "✩"; + } + + lore.add(builder); + lore.add(""); + } + } + + if (GTMGuns.KILL_COUNT_SYSTEM) { + lore.add(ChatColor.GRAY + "Kills: " + getKills(is)); + lore.add(""); + } + + if(this.description != null) { + for (String desc : this.description) + lore.add(Utils.f("&7&o" + desc)); + } + + lore.add(""); + lore.addAll(Arrays.asList(this.getStatsBar())); + + return lore; + } + + /** + * Create a new ItemStack for this weapon. + * <p> + * This will clone the ItemStack representation of this weapon, and add + * default star rating and default skins if applicable. + * </p> + * + * @return The newly created ItemStack that represents this weapon. + */ + public ItemStack createItemStack() { + + // clone the initial itemstack + ItemStack result = this.itemStack.clone(); + + // if item has no rarity + if (!hasRarity(result)) { + + // if we have a star system + if (GTMGuns.STAR_SYSTEM) { + // default is 1 rarity (1 star) + result = setRarity(result, 1); + } + } + + // If item has no kill counter + if(!hasKills(result)) { + if(GTMGuns.KILL_COUNT_SYSTEM) { + result = setKills(result, 0); + } + } + + // get the item meta + ItemMeta itemMeta = result.getItemMeta(); + + if (this instanceof RangedWeapon) + itemMeta.setDisplayName(Utils.f("&6" + getName() + " &8«&f" + ((RangedWeapon<?>) this).getMagazineSize() + "&8»")); + else + itemMeta.setDisplayName(Utils.f("&6" + getName())); + + // add the weapon lore + List<String> lore = getWeaponLore(result, itemMeta); + itemMeta.setLore(lore); + itemMeta.setUnbreakable(true); + itemMeta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES); + itemMeta.addItemFlags(ItemFlag.HIDE_UNBREAKABLE); + result.setItemMeta(itemMeta); + + return result; + } + + /** + * Create a new ItemStack for this weapon with a skin. + * <p> + * This will clone the ItemStack representation of this weapon, and add + * default star rating and default skins if applicable. + * </p> + * + * @param skin The skin + * @return The newly created ItemStack that represents this weapon. + */ + public ItemStack createItemStack(WeaponSkin skin) { + // clone the initial itemstack + ItemStack result = this.itemStack.clone(); + + // if item has no rarity + if (!hasRarity(result)) { + + // if we have a star system + if (GTMGuns.STAR_SYSTEM) { + // default is 1 rarity (1 star) + result = setRarity(result, 1); + } + } + + // If item has no kill counter + if(!hasKills(result)) { + if(GTMGuns.KILL_COUNT_SYSTEM) { + result = setKills(result, 0); + } + } + + // Set the skin + if(skin != null) { + result.setDurability(skin.getIdentifier()); + } + + // get the item meta + ItemMeta itemMeta = result.getItemMeta(); + + if (this instanceof RangedWeapon) + itemMeta.setDisplayName(Utils.f("&6" + getName() + " &8«&f" + ((RangedWeapon<?>) this).getMagazineSize() + "&8»")); + else + itemMeta.setDisplayName(Utils.f("&6" + getName())); + + // add the weapon lore + List<String> lore = getWeaponLore(result, itemMeta); + itemMeta.setLore(lore); + itemMeta.setUnbreakable(true); + itemMeta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES); + itemMeta.addItemFlags(ItemFlag.HIDE_UNBREAKABLE); + result.setItemMeta(itemMeta); + + return result; + } + + /** + * Create a new ItemStack for this weapon, based off the old ItemStack + * parameter. + * <p> + * This methods attempts to copy some meta values off the old ItemStack and + * create them on the new ItemStack. + * </p> + * + * @param old - the old itemstack that needs to be replaced + * + * @return The newly created ItemStack that represents this weapon. + */ + public ItemStack createItemStack(ItemStack old) { + + ItemStack result = getBaseItemStack().clone(); + + // if we have a star system + if (GTMGuns.STAR_SYSTEM) { + // get rarity of old "itemstack" + int prevStars = getRarity(old); + if (prevStars > 1) { + result = setRarity(result, prevStars); + } + else { + result = setRarity(result, 1); + } + } + + // If item has no kill counter + if(GTMGuns.KILL_COUNT_SYSTEM) { + result = setKills(result, getKills(old)); + } + + // get the base item meta + ItemMeta itemMeta = result.getItemMeta(); + + // set weapon skin here based off old + result.setDurability(old.getDurability()); + + if (this instanceof RangedWeapon) + itemMeta.setDisplayName(Utils.f("&6" + getName() + " &8«&f" + ((RangedWeapon<?>) this).getMagazineSize() + "&8»")); + else + itemMeta.setDisplayName(Utils.f("&6" + getName())); + + // add the weapon lore + List<String> lore = getWeaponLore(result, itemMeta); + itemMeta.setLore(lore); + itemMeta.setUnbreakable(true); + itemMeta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES); + itemMeta.addItemFlags(ItemFlag.HIDE_UNBREAKABLE); + result.setItemMeta(itemMeta); + + return result; + } + + /** + * Create a new ItemStack for this weapon. + * <p> + * This methods creates a baseline representation for an item with the + * specified star value and skin. + * </p> + * + * @param stars - the number of stars associated with this weapon + * @param skin - the skin for the weapon + * + * @return The newly created ItemStack that represents this weapon. + */ + public ItemStack createItemStack(int stars, WeaponSkin skin) { + + // get the base itemstack representation for this weapon + ItemStack representation = getBaseItemStack().clone(); + + // if we have a star system + if (GTMGuns.STAR_SYSTEM) { + representation = setRarity(representation, stars); + } + + // If item has no kill counter + if(!hasKills(representation)) { + if(GTMGuns.KILL_COUNT_SYSTEM) { + representation = setKills(representation, 0); + } + } + + // get the base item meta + ItemMeta itemMeta = representation.getItemMeta(); + + // Set weapon skin + if(skin != null) { + representation.setDurability(skin.getIdentifier()); + } + + if (this instanceof RangedWeapon) + itemMeta.setDisplayName(Utils.f("&6" + getName() + " &8«&f" + ((RangedWeapon<?>) this).getMagazineSize() + "&8»")); + else + itemMeta.setDisplayName(Utils.f("&6" + getName())); + + // add the weapon lore + List<String> lore = getWeaponLore(representation, itemMeta); + itemMeta.setLore(lore); + itemMeta.setUnbreakable(true); + itemMeta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES); + itemMeta.addItemFlags(ItemFlag.HIDE_UNBREAKABLE); + representation.setItemMeta(itemMeta); + + return representation; + } + + public abstract String[] getStatsBar(); + + public void setItemStack(ItemStack itemStack) { + this.itemStack = itemStack; + } + + public ItemStack getOldItemStack() { + return oldItemStack; + } + + public void setOldItemStack(ItemStack oldItemStack) { + this.oldItemStack = oldItemStack; + } + + public Sound[] getSounds() { + return this.sounds; + } + + public Map<EntityDamageEvent.DamageCause, String> getDeathMessages() { + return this.deathMessages; + } + + public Weapon addDeathMessage(EntityDamageEvent.DamageCause damageCause, String message) { + if (this.deathMessages == null) + this.deathMessages = Maps.newHashMap(); + this.deathMessages.put(damageCause, message); + return this; + } + + /** + * Get the walk speed attribute of the Weapon + * + * @return walk speed value + */ + public double getWalkSpeed() { + return this.walkSpeed; + } + + public WeaponSkin[] getWeaponSkins() { + return this.weaponSkins; + } + + /** + * Get the delay that is required to be met before the weapon can be used again. + * <p> + * This is in ticks, as the value ends up getting multiplied by 50, + * representing a "Minecraft tick" in milliseconds. + * + * Therefore, if this value is 5, that means 250 milliseconds must elapse before firing again. + * </p> + * + * @return The time, in ticks, required for this weapon to be fired again. + */ + public int getDelay() { + return this.delay; + } + + public WeaponCooldown getWeaponCooldown() { + return weaponCooldown; + } + + public void setWeaponCooldown(WeaponCooldown weaponCooldown) { + this.weaponCooldown = weaponCooldown; + } + + public WeaponState getWeaponState() { + return weaponState; + } + + public void setWeaponState(WeaponState weaponState) { + this.weaponState = weaponState; + } + + public String[] getDescription() { + return description; + } + + public void setDescription(String... description) { + this.description = description; + } + + /** + * Get whether or not this weapon has a rarity associated with it. + * + * @param is - the itemstack representation of the weapon + * + * @return {@code true} if the item has a rarity associated with it, + * {@code false} otherwise. + */ + public static boolean hasRarity(ItemStack is) { + + // convert to NMS itemstack + net.minecraft.server.v1_12_R1.ItemStack nmsStack = CraftItemStack.asNMSCopy(is); + + // if tag system exists + if (nmsStack.getTag() != null) { + NBTTagCompound tag = nmsStack.getTag(); + + // if key exists, this has a rarity + if (tag.hasKey("rarity")) { + return true; + } + } + + return false; + } + + /** + * Get the rarity of the specified weapon, given the itemstack + * representation. + * + * @param is - the itemstack representation of the weapon + * + * @return The rarity, in a rating system, where the lower the number the + * lower the rarity. -1 if there is no rarity. + */ + public static int getRarity(ItemStack is) { + + // can get rarity if it exists + if (hasRarity(is)) { + + // convert to NMS itemstack + net.minecraft.server.v1_12_R1.ItemStack nmsStack = CraftItemStack.asNMSCopy(is); + + // if tag system exists + if (nmsStack.getTag() != null) { + NBTTagCompound tag = nmsStack.getTag(); + + try { + return Integer.parseInt(tag.get("rarity").toString()); + } + catch (Exception e) { + e.printStackTrace(); + } + } + } + + return -1; + } + + /** + * Set the rarity of the specified weapon. + * + * @param is - the itemstack representation of the weapon + * @param value - the higher the value, the more rare it is + * + * @return The ItemStack that was newly created and copied. + */ + public static ItemStack setRarity(ItemStack is, int value) { + + // convert to NMS itemstack + net.minecraft.server.v1_12_R1.ItemStack nmsStack = CraftItemStack.asNMSCopy(is); + NBTTagCompound compound = (nmsStack.hasTag()) ? nmsStack.getTag() : new NBTTagCompound(); + compound.set("rarity", new NBTTagInt(value)); + + nmsStack.setTag(compound); + return CraftItemStack.asBukkitCopy(nmsStack); + } + + /** + * Get whether or not this weapon has kills associated with it. + * + * @param is - the itemstack representation of the weapon + * + * @return {@code true} if the item has kills associated with it, + * {@code false} otherwise. + */ + public static boolean hasKills(ItemStack is) { + net.minecraft.server.v1_12_R1.ItemStack nmsStack = CraftItemStack.asNMSCopy(is); + + if (nmsStack.getTag() != null) { + NBTTagCompound tag = nmsStack.getTag(); + + if (tag.hasKey("weapon_kills")) { + return true; + } + } + + return false; + } + + /** + * Set the kills of the specified weapon. + * + * @param is - the itemstack representation of the weapon + * @param value - the amount of kills + * + * @return The ItemStack that was newly created and copied. + */ + public static ItemStack setKills(ItemStack is, int value) { + net.minecraft.server.v1_12_R1.ItemStack nmsStack = CraftItemStack.asNMSCopy(is); + NBTTagCompound compound = (nmsStack.hasTag()) ? nmsStack.getTag() : new NBTTagCompound(); + compound.set("weapon_kills", new NBTTagInt(value)); + nmsStack.setTag(compound); + + return CraftItemStack.asBukkitCopy(nmsStack); + } + + /** + * Get the kills of the specified weapon, given the itemstack + * representation. + * + * @param is - the itemstack representation of the weapon + * + * @return The amount of kills + */ + public static int getKills(ItemStack is) { + if (hasKills(is)) { + net.minecraft.server.v1_12_R1.ItemStack nmsStack = CraftItemStack.asNMSCopy(is); + + if (nmsStack.getTag() != null) { + NBTTagCompound tag = nmsStack.getTag(); + + try { + return Integer.parseInt(tag.get("weapon_kills").toString()); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + + return 0; + } + + /** + * Updates the lore of the specified weapon. + * + * @param is - the itemstack representation of the weapon + */ + public static void updateLore(ItemStack is) { + Weapon<?> weapon = GTMGuns.getInstance().getWeaponManager().getWeaponByItem(is); + + ItemMeta meta = is.getItemMeta(); + meta.setLore(weapon.getWeaponLore(is, meta)); + + is.setItemMeta(meta); + } +} \ No newline at end of file diff --git a/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/WeaponSkin.java b/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/WeaponSkin.java new file mode 100644 index 0000000..e67e161 --- /dev/null +++ b/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/WeaponSkin.java @@ -0,0 +1,36 @@ +package net.grandtheftmc.guns.weapon; + +import net.grandtheftmc.core.util.Similarity; + +/** + * Created by Luke Bingham on 21/07/2017. + */ +public class WeaponSkin implements Similarity<WeaponSkin> { + + private final WeaponType weaponType; + private final short identifier; + private final String displayName; + + public WeaponSkin(WeaponType weaponType, short identifier, String displayName) { + this.weaponType = weaponType; + this.identifier = identifier; + this.displayName = displayName; + } + + public final WeaponType getWeaponType() { + return weaponType; + } + + public final short getIdentifier() { + return identifier; + } + + public final String getDisplayName() { + return displayName; + } + + @Override + public boolean isSimilar(WeaponSkin weaponSkin) { + return this.weaponType == weaponSkin.weaponType && this.identifier == weaponSkin.identifier; + } +} diff --git a/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/WeaponType.java b/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/WeaponType.java new file mode 100644 index 0000000..745d818 --- /dev/null +++ b/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/WeaponType.java @@ -0,0 +1,156 @@ +package net.grandtheftmc.guns.weapon; + +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; + +import java.util.HashMap; +import java.util.HashSet; + +/** + * Created by Luke Bingham on 17/07/2017. + */ +public enum WeaponType { + + /* Ranged Weapons */ + PISTOL, SMG, SHOTGUN, ASSAULT, LMG, SNIPER, + + /* Unkown / Special */ + SPECIAL, MINIGUN, NETGUN, FLAMETHROWER, CLAUSINATOR, + + /* Rocket Launcher */ + LAUNCHER, + + /* Hand held Melee Weapons */ + MELEE, + + /* Throwable Weapons (Grenade) */ + THROWABLE, + + /* Droppable 'Weapons' (Airstrike, Nuke) */ + DROPPABLE + ; + +// /* PISTOLS */ +// PISTOL("Pistol", new Pistol(), Type.RANGED, AmmoType.PISTOL), +// STUN_GUN("Stun Gun", new StunGun(), Type.RANGED, AmmoType.PISTOL), +// COMBAT_PISTOL("Combat Pistol", new CombatPistol(), Type.RANGED, AmmoType.PISTOL), +// HEAVY_PISTOL("Heavy Pistol", new HeavyPistol(), Type.RANGED, AmmoType.PISTOL), +// MARKSMAN_PISTOL("Marksman Pistol", new MarksmanPistol(), Type.RANGED, AmmoType.PISTOL), +// +// /* SUB MACHINE GUNS */ +// MICRO_SMG("Micro SMG", new MicroSMG(), Type.RANGED, AmmoType.SMG), +// SMG("SMG", new SMG(), Type.RANGED, AmmoType.SMG), +// ASSAULT_SMG("Assault SMG", new AssaultSMG(), Type.RANGED, AmmoType.SMG), +// COMBAT_PDW("Combat PDW", new CombatPDW(), Type.RANGED, AmmoType.SMG), +// GUSENBERG_SWEEPER("Gusenberg Sweeper", new GusenbergSweeper(), Type.RANGED, AmmoType.SMG), +// +// /* SHOTGUNS */ +// SAWEDOFF_SHOTGUN("Sawdoff Shotgun", new SawedoffShotgun(), Type.RANGED, AmmoType.SHOTGUN), +// PUMP_SHOTGUN("Pump Shotgun", new PumpShotgun(), Type.RANGED, AmmoType.SHOTGUN), +// MUSKET("Musket", new Musket(), Type.RANGED, AmmoType.SHOTGUN), +// ASSAULT_SHOTGUN("Assault Shotgun", new AssaultShotgun(), Type.RANGED, AmmoType.SHOTGUN), +// HEAVY_SHOTGUN("Heavy Shotgun", new HeavyShotgun(), Type.RANGED, AmmoType.SHOTGUN), +// +// /* ASSULT RIFLES */ +// ASSAULT_RIFLE("Assault Rifle", new AssaultRifle(), Type.RANGED, AmmoType.ASSAULT_RIFLE), +// CARBINE_RIFLE("Carbine Rifle", new CarbineRifle(), Type.RANGED, AmmoType.ASSAULT_RIFLE), +// BULLPUP_RIFLE("Bullpup Rifle", new BullpupRifle(), Type.RANGED, AmmoType.ASSAULT_RIFLE), +// ADVANCED_RIFLE("Advanced Rifle", new AdvancedRifle(), Type.RANGED, AmmoType.ASSAULT_RIFLE), +// SPECIAL_CARBINE("Special Carbine", new SpecialCarbine(), Type.RANGED, AmmoType.ASSAULT_RIFLE), +// +// /* MG */ +// MG("MG", new MG(), Type.RANGED, AmmoType.LMG), +// COMBAT_MG("Combat MG", new CombatMG(), Type.RANGED, AmmoType.LMG), +// +// /* SNIPER RIFLES */ +// SNIPER_RIFLE("Sniper Rifle", new SniperRifle(), Type.RANGED, AmmoType.SNIPER), +// HEAVY_SNIPER("Heavy Sniper", new HeavySniper(), Type.RANGED, AmmoType.SNIPER), +// +// /* SPECIAL */ +// MINIGUN("Minigun", new Minigun(), Type.RANGED, AmmoType.MINIGUN), +// +// /* LAUNCHERS */ +// RPG("RPG", new RPG(), Type.RANGED, AmmoType.LAUNCHER), +// HOMING_LAUNCHER("Homing Launcher", new HomingLauncher(), Type.RANGED, AmmoType.LAUNCHER), +// GRENADE_LAUNCHER("Grenade Launcher", new GrenadeLauncher(), Type.RANGED, AmmoType.EXPLOSIVE), +// +// /* MELEE */ +// RAKE("Rake", new Rake(), Type.MELEE, AmmoType.MELEE), +// NIGHT_STICK("Night Stick", new NightStick(), Type.MELEE, AmmoType.MELEE), +// BASEBALL_BAT("Baseball Bat", new BaseballBat(), Type.MELEE, AmmoType.MELEE), +// KNIFE("Knife", new Knife(), Type.MELEE, AmmoType.MELEE), +// CHAINSAW("Chainsaw", new Chainsaw(), Type.MELEE, AmmoType.ENERGY), +// +// /* EXPLOSIVES */ +// GRENADE("Grenade", new Grenade(), Type.THROWABLE, AmmoType.EXPLOSIVE), +// TEAR_GAS("Tear Gas", new TearGas(), Type.THROWABLE, AmmoType.EXPLOSIVE), +// MOLOTOV_COCKTAIL("Molotov Cocktail", new MolotovCocktail(), Type.THROWABLE, AmmoType.EXPLOSIVE), +// STICKY_BOMB("Sticky Bomb", new StickyBomb(), Type.THROWABLE, AmmoType.EXPLOSIVE), +// PROXIMITY_MINE("Proximity Mine", new ProximityMine(), Type.THROWABLE, AmmoType.EXPLOSIVE), +// +// /* DROPPABLE */ +// AIRSTRIKE("Airstrike", new Airstrike(), Type.DROPPABLE), +// NUKE("Nuke", new Nuke(), Type.DROPPABLE), +// ; +// +// private static final HashSet<Weapon> ALL_WEAPONS = Sets.newHashSet(); +// private static final HashMap<Type, HashSet<Weapon>> TYPE_WEAPONS = Maps.newHashMap(); +// +// private final String name; +// private final Weapon weapon; +// private final Type type; +// private AmmoType ammoType; +// +// WeaponType(String name, Weapon weapon, Type type) { +// this.name = name; +// this.weapon = weapon; +// this.type = type; +// } +// +// WeaponType(String name, Weapon weapon, Type type, AmmoType ammoType) { +// this.name = name; +// this.weapon = weapon; +// this.type = type; +// this.ammoType = ammoType; +// } +// +// public String getName() { +// return name; +// } +// +// public Weapon getWeapon() { +// return weapon; +// } +// +// public Type getType() { +// return type; +// } +// +// public AmmoType getAmmoType() { +// return ammoType; +// } +// +// public static HashSet<Weapon> getWeaponsFromType(Type type) { +// if(!TYPE_WEAPONS.containsKey(type)) { +// HashSet<Weapon> temp = Sets.newHashSet(); +// for (WeaponType weaponType : values()) { +// if (weaponType.type != type) continue; +// temp.add(weaponType.getWeapon()); +// } +// TYPE_WEAPONS.put(type, temp); +// } +// +// return TYPE_WEAPONS.get(type); +// } +// +// public static HashSet<Weapon> getWeapons() { +// if (ALL_WEAPONS.isEmpty()) +// for (WeaponType weaponType : values()) ALL_WEAPONS.add(weaponType.getWeapon()); +// +// return ALL_WEAPONS; +// } +// +// public enum Type { +// RANGED, THROWABLE, MELEE, DROPPABLE; +// } +} diff --git a/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/attribute/RankedWeapon.java b/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/attribute/RankedWeapon.java new file mode 100644 index 0000000..90e3770 --- /dev/null +++ b/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/attribute/RankedWeapon.java @@ -0,0 +1,10 @@ +package net.grandtheftmc.guns.weapon.attribute; + +import net.grandtheftmc.core.users.UserRank; + +/** + * Created by Luke Bingham on 15/08/2017. + */ +public interface RankedWeapon { + UserRank requiredRank(); +} diff --git a/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/attribute/StarAttribute.java b/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/attribute/StarAttribute.java new file mode 100644 index 0000000..0116201 --- /dev/null +++ b/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/attribute/StarAttribute.java @@ -0,0 +1,32 @@ +package net.grandtheftmc.guns.weapon.attribute; + +import org.bukkit.inventory.ItemStack; + +/** + * @deprecated - Unused as these methods were turned to static in Weapon. + */ +@Deprecated +public interface StarAttribute { + + /** + * Get the amount of stars assigned to this attribute. + * <p> + * Generally, stars are indicative of the power for this attribute. + * </p> + * @param is - the itemstack representation + * + * @return The number of stars for this attribute, -1 if not found. + */ + int getStars(ItemStack is); + + /** + * Set the number of stars assigned to this attribute. + * + * @param is - the itemstack representation + * @param stars - the new star amount + * + * @return {@code true} if the stars was set for this item, {@code false} otherwise. + */ + boolean setStars(ItemStack is, int stars); + +} diff --git a/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/attribute/WeaponAttribute.java b/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/attribute/WeaponAttribute.java new file mode 100644 index 0000000..251fe6b --- /dev/null +++ b/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/attribute/WeaponAttribute.java @@ -0,0 +1,7 @@ +package net.grandtheftmc.guns.weapon.attribute; + +/** + * Created by Luke Bingham on 24/07/2017. + */ +public abstract interface WeaponAttribute { +} diff --git a/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/attribute/WeaponExplosive.java b/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/attribute/WeaponExplosive.java new file mode 100644 index 0000000..631d680 --- /dev/null +++ b/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/attribute/WeaponExplosive.java @@ -0,0 +1,14 @@ +package net.grandtheftmc.guns.weapon.attribute; + +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; + +/** + * Created by Luke Bingham on 07/08/2017. + */ +public interface WeaponExplosive extends WeaponAttribute { + + void onExplode(Entity explosive, Player shooter); + + default void onLand(Entity explosive) {} +} diff --git a/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/attribute/WeaponRPM.java b/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/attribute/WeaponRPM.java new file mode 100644 index 0000000..ebc29ad --- /dev/null +++ b/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/attribute/WeaponRPM.java @@ -0,0 +1,47 @@ +package net.grandtheftmc.guns.weapon.attribute; + +/** + * Created by Luke Bingham on 24/07/2017. + */ +public interface WeaponRPM extends WeaponAttribute { + + /** + * Get the amount of revolutions this weapon uses per second. + * <p> + * Note: Minecraft runs 20 ticks per second, so if this value is 10, that + * means 10 bullets are fired per second. + * </p> + * + * @return The number of revolutions this weapon uses per second. + */ + int getRPS(); + + /** + * Get the amount of revolutions this weapon uses per minute. + * <p> + * Note: Only increments of 60 effect this value. + * </p> + * + * @return The number of revolutions this weapon uses per minute. + * + * @deprecated - Please use {@link #getRPS()} instead as it's hard to + * calculate the rpm of a gun and assume it's true RPM value. + */ + @Deprecated + int getRpm(); + + /** + * Get the burst rate of the weapon. + * <p> + * Note: If the burst rate of the weapon is say 5, then that means it will + * attempt to fire it's clip through 5 ticks before stopping. + * + * If the burst rate is 20, then that means it will attempt to fire through all 20 ticks before stopping. + * </p> + * + * @return The burst rate of the weapon, in ticks, before this weapon stops trying to fire. + */ + default int getBurstRate(){ + return 5; + } +} diff --git a/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/ranged/RangedWeapon.java b/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/ranged/RangedWeapon.java new file mode 100644 index 0000000..30fd40b --- /dev/null +++ b/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/ranged/RangedWeapon.java @@ -0,0 +1,1097 @@ +package net.grandtheftmc.guns.weapon.ranged; + +import java.util.HashMap; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Effect; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.block.Block; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.EntityDamageEvent.DamageCause; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; +import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.util.Vector; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.ProtocolLibrary; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.wrappers.BlockPosition; +import com.google.common.collect.Maps; +import com.j0ach1mmall3.jlib.methods.Random; +import com.j0ach1mmall3.jlib.methods.Sounds; +import com.j0ach1mmall3.wastedguns.MathUtil; +import com.j0ach1mmall3.wastedguns.api.events.WeaponDamageEvent; +import com.j0ach1mmall3.wastedguns.api.events.ranged.AmmoUpdateEvent; +import com.j0ach1mmall3.wastedguns.api.events.ranged.RangedWeaponReloadEvent; +import com.j0ach1mmall3.wastedguns.api.events.ranged.RangedWeaponShootEvent; +import com.j0ach1mmall3.wastedvehicles.Main; + +import de.slikey.effectlib.effect.ExplodeEffect; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.users.Pref; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.util.C; +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.guns.DamageDataHandler; +import net.grandtheftmc.guns.GTMGuns; +import net.grandtheftmc.guns.WeaponState; +import net.grandtheftmc.guns.cache.PlayerCache; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.Weapon; +import net.grandtheftmc.guns.weapon.WeaponSkin; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.attribute.WeaponRPM; +import net.grandtheftmc.guns.weapon.ranged.attachment.Attachment; +import net.grandtheftmc.guns.weapon.ranged.guns.PistolWeapon; +import net.grandtheftmc.guns.weapon.ranged.guns.ShotgunWeapon; +import net.grandtheftmc.guns.weapon.ranged.guns.SpecialWeapon; +import net.md_5.bungee.api.chat.ClickEvent; +import net.md_5.bungee.api.chat.TextComponent; + +/** + * Created by Luke Bingham on 17/07/2017. + */ +public abstract class RangedWeapon<T extends Weapon> extends Weapon<T> { + + protected HashMap<Attachment, Object> attachments; + protected Attachment[] supportedAttachments = null; + protected Effect effect; + + protected double damage = 0d, meleeDamage = 0d, accuracy = 0d, recoil = 0; + protected int magSize = 1, reloadTime = 40, range = 20, penetration = 1, zoom = 0; + protected boolean reloadShoot = false; + /** + * Can this weapon fire multiple times even if it's not done firing the first round. + * Typically burst weapons will burst over a task, and still allow to fire. + */ + protected boolean multiShoot = false; + + /** + * Construct a new Weapon. + */ + public RangedWeapon(short uniqueIdentifier, String name, WeaponType weaponType, AmmoType ammoType, ItemStack itemStack, Sound[] sounds, Effect effect) { + super(uniqueIdentifier, name, weaponType, ammoType, itemStack, sounds); + this.attachments = Maps.newHashMap(); + this.effect = effect; + + this.weaponSkins = new WeaponSkin[] { + new WeaponSkin(weaponType, itemStack.getDurability(), "&e&lDefault") + }; + } + + public Effect getEffect() { + return this.effect; + } + + public Object getAttachment(Attachment attachment) { + return this.attachments.getOrDefault(attachment, null); + } + + public boolean hasAttachment(Attachment attachment) { + return this.attachments.containsKey(attachment); + } + + public void addAttachment(Attachment attachment) { + if(this.supportedAttachments == null) return; + + boolean supported = false; + for(Attachment a : this.supportedAttachments) { + if (a != attachment) continue; + supported = true; + break; + } + + if(!supported) return; + Object obj = null; + switch (attachment) {//TODO + case SUPPRESSOR: + obj = 0; + break; + case GRIP: obj = 0; break; + case EXTENDED_MAGS: obj = 0; break; + case SCOPE: obj = 0; break; + } + + this.attachments.put(attachment, obj); + } + + public Attachment[] getSupportedAttachments() { + return supportedAttachments; + } + + public void setSupportedAttachments(Attachment... supportedAttachments) { + this.supportedAttachments = supportedAttachments; + } + + @Override + public WeaponSkin[] getWeaponSkins() { + return weaponSkins; + } + + protected void setWeaponSkins(WeaponSkin... skins) { + WeaponSkin defaultSkin = this.weaponSkins[0]; + this.weaponSkins = new WeaponSkin[skins.length + 1]; + for(int i = 0; i < skins.length; i++) + this.weaponSkins[i + 1] = skins[i]; + this.weaponSkins[0] = defaultSkin; + } + + @Override + public String[] getStatsBar() { + String[] output = new String[4]; + String symbol = ":", + done = ChatColor.GREEN.toString() + ChatColor.BOLD, + empty = ChatColor.DARK_GRAY.toString() + ChatColor.BOLD; + int bars = 10; + double best = 0; + double result; + int stat; + for(int i = 0; i < 4; i++) { + switch (i) { + case 0: + output[i] = ""; + best = 30.0; + result = net.grandtheftmc.core.util.MathUtil.getPercentBetweenValues(best, (this instanceof ShotgunWeapon ? this.damage * ((ShotgunWeapon) this).getShellSize() : this.damage)); + stat = (int) Math.floor(result) / 10; + for(int x = 0; x < bars; x++) { + output[i] += (x <= stat ? done : empty) + symbol; + } + output[i] += C.GRAY + " Damage"; + break; + + case 1: + output[i] = ""; + best = this instanceof WeaponRPM ? (500.0 - 300) / 60 + 1 : 2; + if(this instanceof ShotgunWeapon) { + result = net.grandtheftmc.core.util.MathUtil.getPercentBetweenValuesReverse(best, this.delay); + } else if(this instanceof WeaponRPM) { + result = net.grandtheftmc.core.util.MathUtil.getPercentBetweenValues(best, ((WeaponRPM) this).getRpm()); + } else { + result = net.grandtheftmc.core.util.MathUtil.getPercentBetweenValuesReverse(best, this.delay); + } + stat = (int) Math.floor(result) / 10; + for(int x = 0; x < bars; x++) { + output[i] += (x <= stat ? done : empty) + symbol; + } + output[i] += C.GRAY + " Fire Rate"; + break; + + case 2: + output[i] = ""; + best = 0.008; + result = net.grandtheftmc.core.util.MathUtil.getPercentBetweenValuesReverse(best, this.accuracy); + stat = (int) Math.floor(result) / 10; + for(int x = 0; x < bars; x++) { + output[i] += (x <= stat ? done : empty) + symbol; + } + output[i] += C.GRAY + " Accuracy"; + break; + + case 3: + output[i] = ""; + best = 80.0; + result = net.grandtheftmc.core.util.MathUtil.getPercentBetweenValues(best, this.range); + stat = (int) Math.floor(result) / 10; + for(int x = 0; x < bars; x++) { + output[i] += (x <= stat ? done : empty) + symbol; + } + output[i] += C.GRAY + " Range"; + break; + } + } + + return output; + } + + /** + * Get the generic damage of the Weapon. + * + * @return damage value + */ + public double getDamage() { + return this.damage; + } + + /** + * Get the Melee damage of the Weapon. + * + * @return damage value + */ + public double getMeleeDamage() { + return this.meleeDamage; + } + + /** + * Get the Accuracy of the Weapon. + * + * @return Accuracy value + */ + public double getAccuracy() { + return this.accuracy; + } + + /** + * Get the Magazine size of the Weapon. + * + * @return Magazine size + */ + public int getMagazineSize() { + return this.magSize + (int) this.attachments.getOrDefault(Attachment.EXTENDED_MAGS, 0); + } + + /** + * Get the reload time for the Weapon. + * + * @return Reload time in ticks + */ + public int getReloadTime() { + return this.reloadTime; + } + + /** + * Check if reloading while shooting is allowed. + * + * @return reload state + */ + public boolean isAllowingReloadShooting() { + return this.reloadShoot; + } + + /** + * Get the fire range of the Weapon. + * + * @return fire range (Measured in Blocks) + */ + public int getRange() { + return this.range; + } + + /** + * Get the amount of entities to pierce from a single Bullet. + * + * @return Penetration value + */ + public int getPenetration() { + return this.penetration; + } + + /** + * Get the Zoom identifier for the Weapon. + * + * @return Zoom value + */ + public int getZoomValue() { + return this.zoom; + } + + /** + * Get the Recoil of the Weapon. + * + * @return Recoil value + */ + public double getRecoil() { + return this.recoil; + } + + public abstract boolean isAutomatic(); + + private boolean minigun() { + if(!(this instanceof SpecialWeapon)) return false; + return ((SpecialWeapon) this).isMinigun(); + } + + @Override + public void onSneak(Player player, boolean sneaking) { + if(sneaking && this.weaponState != WeaponState.RELOADING) { + player.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, Integer.MAX_VALUE, this.zoom - 1, true, false)); + return; + } + + player.removePotionEffect(PotionEffectType.SLOW); + } + + @Override + public void onRightClick(Player player) { + onWeaponShoot(player, true, GTMGuns.getInstance().getWeaponManager().getPlayerCache(player.getUniqueId())); + } + + @Override + public void onLeftClick(Player player) { + int ammo = this.getAmmo(player.getInventory().getItemInMainHand()); + if(ammo >= magSize) return; + reload(player, GTMGuns.getInstance().getWeaponManager().getPlayerCache(player.getUniqueId())); + } + + public void onWeaponShoot(Player player, boolean subtractammo, PlayerCache playerCache) { + + // how many revolutions per second should this be + // convert to ticks, so 1 = 1 per 20 ticks + int rps = this instanceof WeaponRPM ? ((WeaponRPM) this).getRPS() : 0; + + // TODO remove for compatibility purposes + // if not defined + if (rps == 0){ + rps = this instanceof WeaponRPM ? ((WeaponRPM) this).getRpm() : 0; + } + + // TODO debug remove + // Core.log("[RangedWeapon][DEBUG] onWeaponShoot for " + player.getName() + ", weapon=" + this.getName() + ", rps=" + rps + ", automatic=" + this.isAutomatic() + ", delay=" + this.delay + ", multiShoot=" + this.multiShoot); + + if(player == null) return; + if(playerCache == null) return; + + // if the weapon is reloading do not call + if(this.weaponState == WeaponState.RELOADING) return; + + // if weapon cannot multi shoot, check state and cancel + if (!multiShoot){ + if(this.weaponState == WeaponState.BURSTING || weaponState == WeaponState.SHOOTING){ + return; + } + } + + RangedWeaponShootEvent rangedWeaponShootEvent = new RangedWeaponShootEvent(player, this); + Bukkit.getPluginManager().callEvent(rangedWeaponShootEvent); + if(rangedWeaponShootEvent.isCancelled()) return; + +// AmmoUpdateEvent ammoUpdateEvent = new AmmoUpdateEvent(player); +// Bukkit.getPluginManager().callEvent(ammoUpdateEvent); +// int totalAmmo = ammoUpdateEvent.getAmmo().getOrDefault(getAmmoType().getType(), 0); + + weaponState = WeaponState.SHOOTING; + + if(this.isAutomatic()) { + playerCache.shooting = true; + playerCache.burst = 1; + + new BukkitRunnable() { + @Override public void run() { + + // TODO debug remove + // Core.log("[RangedWeapon][DEBUG] weaponState on tick= " + weaponState); + + if(RangedWeapon.this.weaponState == WeaponState.RELOADING) { + this.cancel(); + playerCache.burst = 1; + playerCache.shooting = false; + return; + } + + if (RangedWeapon.this instanceof WeaponRPM){ + + // get the max burst tick possible + int maxBurst = ((WeaponRPM) RangedWeapon.this).getBurstRate(); + + // clamp to valid values + if (maxBurst <= 0){ + maxBurst = 0; + } + if (maxBurst >= 20){ + maxBurst = 20; + } + + if (playerCache.burst >= maxBurst){ + + // TODO debug remove + // Core.log("[RangedWeapon][DEBUG] playerCache.burst=" + playerCache.burst + " is >= " + maxBurst); + this.cancel(); + playerCache.burst = 1; + playerCache.shooting = false; + weaponState = WeaponState.IDLE; + return; + } + } + + playerCache.burst += 1; + + if(isAutomatic()) { + weaponState = WeaponState.BURSTING; + + int tick = playerCache.tick; + playerCache.tick = (tick >= 20) ? 1 : (tick + 1); + if (!RangedWeapon.this.isValid(playerCache.tick)){ + // TODO debug remove + // Core.log("[RangedWeapon][DEBUG] Ranged weapon is not valid, playerCache.tick=" + playerCache.tick); + + return; + } + } + + Location origin = player.getEyeLocation(); + Vector direction = origin.getDirection(); + + RangedWeapon.this.shoot(player, origin, direction, playerCache, true); + } + }.runTaskTimer(GTMGuns.getInstance(), 1, 1); + return; + } + + Location origin = player.getEyeLocation(); + Vector direction = origin.getDirection(); + + this.shoot(player, origin, direction, playerCache, false); + + if (this.recoil != 0 && !player.isSneaking()) + player.setVelocity(player.getVelocity().add(direction.setY(0).multiply(-this.recoil))); + } + + public void onWeaponVehicleShoot(Player player, boolean subtractammo, PlayerCache playerCache) { + + // TODO debug remove + // Core.log("[RangedWeapon][DEBUG] onWeaponVehicleShoot for " + player.getName()); + + if(player == null) return; + if(playerCache == null) return; + + // if the weapon is reloading do not call + if(this.weaponState == WeaponState.RELOADING) return; + + // if weapon cannot multi shoot, check state and cancel + if (!multiShoot){ + if(this.weaponState == WeaponState.BURSTING || weaponState == WeaponState.SHOOTING){ + return; + } + } + + RangedWeaponShootEvent rangedWeaponShootEvent = new RangedWeaponShootEvent(player, this); + Bukkit.getPluginManager().callEvent(rangedWeaponShootEvent); + if(rangedWeaponShootEvent.isCancelled()) return; + +// AmmoUpdateEvent ammoUpdateEvent = new AmmoUpdateEvent(player); +// Bukkit.getPluginManager().callEvent(ammoUpdateEvent); +// int totalAmmo = ammoUpdateEvent.getAmmo().getOrDefault(getAmmoType().getType(), 0); + + weaponState = WeaponState.SHOOTING; + + if(this.isAutomatic()) { + playerCache.shooting = true; + playerCache.burst = 1; + + new BukkitRunnable() { + @Override public void run() { + if(RangedWeapon.this.weaponState == WeaponState.RELOADING) { + this.cancel(); + playerCache.burst = 1; + playerCache.shooting = false; + return; + } + + if (RangedWeapon.this instanceof WeaponRPM){ + + // get the max burst tick possible + int maxBurst = ((WeaponRPM) RangedWeapon.this).getBurstRate(); + + // clamp to valid values + if (maxBurst <= 0){ + maxBurst = 0; + } + if (maxBurst >= 20){ + maxBurst = 20; + } + + if (playerCache.burst >= maxBurst){ + + // TODO debug remove + // Core.log("[RangedWeapon][DEBUG] playerCache.burst=" + playerCache.burst + " is >= " + (((WeaponRPM) RangedWeapon.this).getRpm() > 0 ? 5 : 1)); + this.cancel(); + playerCache.burst = 1; + playerCache.shooting = false; + weaponState = WeaponState.IDLE; + return; + } + } + + playerCache.burst += 1; + + if(isAutomatic()) { + weaponState = WeaponState.BURSTING; + + int tick = playerCache.tick; + playerCache.tick = (tick >= 20) ? 1 : (tick + 1); + if (!RangedWeapon.this.isValid(playerCache.tick)){ + // TODO debug remove + // Core.log("[RangedWeapon][DEBUG] Ranged weapon is not valid, playerCache.tick=" + playerCache.tick); + return; + } + } + + Location origin = player.getEyeLocation(); + Vector direction = origin.getDirection(); + + RangedWeapon.this.vehicleShoot(player, origin, direction, true); + } + }.runTaskTimer(GTMGuns.getInstance(), 1, 1); + + return; + } + + Location origin = player.getEyeLocation(); + Vector direction = origin.getDirection(); + + this.shoot(player, origin, direction, playerCache, false); + +// if (this.recoil != 0 && !player.isSneaking()) +// player.setVelocity(player.getVelocity().add(direction.setY(0).multiply(-this.recoil))); + } + + public void shoot(Player player, Location origin, Vector direction, PlayerCache playerCache, boolean auto) { + origin = player.getEyeLocation(); + direction = origin.getDirection(); + + User shooterUser = Core.getUserManager().getLoadedUser(player.getUniqueId()); + if(shooterUser == null) return; + boolean useParticles = shooterUser.getPref(Pref.SHOW_PARTICLES); + + boolean flamethrower = getWeaponType() == WeaponType.FLAMETHROWER; + int ammountOfBullets = 1; + if(getWeaponType() == WeaponType.SHOTGUN && this instanceof ShotgunWeapon) + ammountOfBullets = ((ShotgunWeapon) this).getShellSize(); + + AmmoUpdateEvent ammoUpdateEvent = new AmmoUpdateEvent(player); + Bukkit.getPluginManager().callEvent(ammoUpdateEvent); + int totalAmmo = ammoUpdateEvent.getAmmo().getOrDefault(getAmmoType().getType(), 0); + + ItemStack newHeldItem = player.getEquipment().getItemInMainHand(); + int ammo = this.getAmmo(newHeldItem); + if(ammo <= 0) { + if(getAmmoType() != AmmoType.NONE && totalAmmo > 0) { + reload(player, playerCache); + return; + } + weaponState = WeaponState.IDLE; + return; + } + + newHeldItem = this.setAmmo(newHeldItem, ammo - 1, totalAmmo); + player.getEquipment().getItemInMainHand().setItemMeta(newHeldItem.getItemMeta()); + player.updateInventory(); + if (ammo - 1 <= 0) reload(player, playerCache); + else { + if(!auto) weaponState = WeaponState.IDLE; + } + + // logic behind calculating accuracy: https://imgur.com/a/erSo2? + for (int i = 0; i < ammountOfBullets; i++){ + + // 2 TIMES accuracy gives the DIAMETER around the initial direction + // RANDOM TIMES this accuracy gives a value between the left lower + // limit and the right upper limit. + // subtracting the accuracy gets the point centered around the origin + + double dx = (2 * accuracy) * Math.random() - accuracy; + double dy = (2 * accuracy) * Math.random() - accuracy; + double dz = (2 * accuracy) * Math.random() - accuracy; + + if (getWeaponType() == WeaponType.SNIPER && player.isSneaking()){ + dx = 0; + dy = 0; + dz = 0; + } + + double newX = direction.getX() + dx; + double newY = direction.getY() + dy; + double newZ = direction.getZ() + dz; + + Vector vector = new Vector(newX, newY, newZ); + + double range = this.range; + Object[] o = MathUtil.getNearestTarget(player, origin, vector, this.range); + Block b = MathUtil.getTargetBlock(origin, vector, this.range); + + if (o != null) { + if (b == null || player.getLocation().distance((Location) o[1]) < player.getLocation().distance(b.getLocation())) { + LivingEntity target = (LivingEntity) o[0]; + Location intersection = (Location) o[1]; + + //Blood particles on Hit. +// target.getWorld().spigot().playEffect(intersection, Effect.COLOURED_DUST, 0, 0, 255, 0, 0, 1, 0, 64); + + // call weapon damage to see if we modify the event + WeaponDamageEvent weaponDamageEvent = new WeaponDamageEvent(player, this, newHeldItem, getDamage(), target, DamageCause.DRAGON_BREATH); + Bukkit.getPluginManager().callEvent(weaponDamageEvent); + + if (weaponDamageEvent.isCancelled()){ + return; + } + + // create entity damage by entity event and add to data handler + EntityDamageByEntityEvent edbee = new EntityDamageByEntityEvent(player, target, DamageCause.DRAGON_BREATH, weaponDamageEvent.getDamage()); + DamageDataHandler.getInstance().addData(target.getUniqueId(), edbee); + + // damage the entity and set last damage cause + target.damage(weaponDamageEvent.getDamage(), player); + // reset damage ticks so they can take damage again + target.setNoDamageTicks(0); + target.setLastDamageCause(edbee); + + // TODO this was removed because target.damage(amount, Entity) called EntityDamageByEntityEvent which called the logic for melee damage. + //target.setNoDamageTicks(0); + //target.damage(this.damage, player); + //target.setLastDamageCause(new EntityDamageEvent(player, EntityDamageEvent.DamageCause.DRAGON_BREATH, this.damage)); + + if (getWeaponType() == WeaponType.PISTOL && this instanceof PistolWeapon && ((PistolWeapon) this).isStun()) { + if(target.getLocation().getWorld() != null && !target.getLocation().getWorld().getName().equalsIgnoreCase("spawn")) { + int stunDuration = ((PistolWeapon) this).getDuration(); + target.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, stunDuration, 2, true, false)); + target.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, stunDuration, 2, true, false)); + target.addPotionEffect(new PotionEffect(PotionEffectType.WEAKNESS, stunDuration, 2, true, false)); + target.addPotionEffect(new PotionEffect(PotionEffectType.CONFUSION, stunDuration, 2, true, false)); + target.addPotionEffect(new PotionEffect(PotionEffectType.SLOW_DIGGING, stunDuration, 2, true, false)); + } + } + + else if(getWeaponType() == WeaponType.FLAMETHROWER) { + if(target.getLocation().getWorld() != null && !target.getLocation().getWorld().getName().equalsIgnoreCase("spawn")) { + target.setFireTicks(100); + } + } + else if(getWeaponType()==WeaponType.CLAUSINATOR) { + if(!target.getWorld().getName().equalsIgnoreCase("spawn")){ + int cSlow = target.hasPotionEffect(PotionEffectType.SLOW) ? target.getPotionEffect(PotionEffectType.SLOW).getAmplifier() : -1; + cSlow += 1; + if(cSlow>=5) + cSlow = 5; + target.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, 20*6, cSlow), true); + target.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, 10, 0), true); + + ExplodeEffect explodeEffect = new ExplodeEffect(GTMGuns.getInstance().getEffectManager()); + explodeEffect.sound = Sound.ENTITY_BLAZE_SHOOT; + explodeEffect.setLocation(target.getLocation()); + explodeEffect.start(); + } + } + range = player.getLocation().distance((Location) o[1]); + } + + } + if (b != null) { + Location l = b.getLocation(); + if (!flamethrower) b.getWorld().playEffect(l, Effect.STEP_SOUND, b.getType()); + + if (!flamethrower) { + //Block damage particle + b.getWorld().playEffect(l, Effect.STEP_SOUND, b.getType()); + + //Block damage crack + if (GTMGuns.getInstance().getWeaponManager().getIgnoredBlocks().contains(b.getType())) return; + PacketContainer packetContainer = new PacketContainer(PacketType.Play.Server.BLOCK_BREAK_ANIMATION); + packetContainer.getIntegers().write(0, Random.getInt()); + packetContainer.getBlockPositionModifier().write(0, new BlockPosition(l.getBlockX(), l.getBlockY(), l.getBlockZ())); + packetContainer.getIntegers().write(1, Random.getInt(10)); + ProtocolLibrary.getProtocolManager().broadcastServerPacket(packetContainer); + } + range = player.getLocation().distance(l); + } + Location l = origin.clone(); + vector.multiply(0.5); + for (double k = 0; k < range * 2; k++) { + if (useParticles) l.getWorld().spigot().playEffect(l, getEffect(), 0, 0, 0, 0, 0, 0, 1, 64); + l.add(vector.getX(), vector.getY(), vector.getZ()); + } + } + Sounds.broadcastSound(getSounds()[0], origin); + if (RangedWeapon.this.recoil != 0 && !player.isSneaking()) + player.setVelocity(player.getVelocity().add(direction.setY(0).multiply(-(RangedWeapon.this.recoil/2)))); + } + + public void vehicleShoot(Player player, Location origin, Vector direction, boolean auto) { +// origin = player.getEyeLocation(); +// direction = origin.getDirection(); + + User shooterUser = Core.getUserManager().getLoadedUser(player.getUniqueId()); + if(shooterUser == null) return; + boolean useParticles = shooterUser.getPref(Pref.SHOW_PARTICLES); + +// boolean flamethrower = getWeaponType() == WeaponType.FLAMETHROWER; +// int ammountOfBullets = 1; +// if(getWeaponType() == WeaponType.SHOTGUN && this instanceof ShotgunWeapon) +// ammountOfBullets = ((ShotgunWeapon) this).getShellSize(); + + AmmoUpdateEvent ammoUpdateEvent = new AmmoUpdateEvent(player); + Bukkit.getPluginManager().callEvent(ammoUpdateEvent); + int totalAmmo = ammoUpdateEvent.getAmmo().getOrDefault(getAmmoType().getType(), 0); +// +// ItemStack newHeldItem = player.getEquipment().getItemInMainHand(); +// int ammo = this.getAmmo(newHeldItem); +// if(ammo <= 0) { +// if(getAmmoType() != AmmoType.NONE && totalAmmo > 0) { +// this.reload(player, playerCache); +// return; +// } +// weaponState = WeaponState.IDLE; +// return; +// } + +// newHeldItem = this.setAmmo(newHeldItem, ammo - 1, totalAmmo); +// player.getEquipment().getItemInMainHand().setItemMeta(newHeldItem.getItemMeta()); +// player.updateInventory(); +// if (ammo - 1 <= 0) this.reload(player, playerCache); +// else { +// if(!auto) weaponState = WeaponState.IDLE; +// } + +// for (int i = 0; i < ammountOfBullets; i++) { + double newX = direction.getX() + 2 * this.accuracy * Math.random() - this.accuracy; + double newY = direction.getY() + 2 * this.accuracy * Math.random() - this.accuracy; + double newZ = direction.getZ() + 2 * this.accuracy * Math.random() - this.accuracy; + + Vector vector = new Vector(newX, newY, newZ); + + double range = this.range; + Object[] o = MathUtil.getNearestTarget(player, origin, vector, this.range); + Block b = MathUtil.getTargetBlock(origin, vector, this.range); + + if (o != null) { + if (b == null || player.getLocation().distance((Location) o[1]) < player.getLocation().distance(b.getLocation())) { + LivingEntity target = (LivingEntity) o[0]; + Location intersection = (Location) o[1]; + + //Blood particles on Hit. +// target.getWorld().spigot().playEffect(intersection, Effect.COLOURED_DUST, 0, 0, 255, 0, 0, 1, 0, 64); + + // create entity damage by entity event and add to data handler + EntityDamageByEntityEvent edbee = new EntityDamageByEntityEvent(player, target, DamageCause.DRAGON_BREATH, this.damage); + DamageDataHandler.getInstance().addData(target.getUniqueId(), edbee); + + target.damage(this.damage, player); + target.setNoDamageTicks(0); + target.setLastDamageCause(edbee); + + if (getWeaponType() == WeaponType.PISTOL && this instanceof PistolWeapon && ((PistolWeapon) this).isStun()) { + if(target.getLocation().getWorld() != null && !target.getLocation().getWorld().getName().equalsIgnoreCase("spawn")) { + int stunDuration = ((PistolWeapon) this).getDuration(); + target.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, stunDuration, 2, true, false)); + target.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, stunDuration, 2, true, false)); + target.addPotionEffect(new PotionEffect(PotionEffectType.WEAKNESS, stunDuration, 2, true, false)); + target.addPotionEffect(new PotionEffect(PotionEffectType.CONFUSION, stunDuration, 2, true, false)); + target.addPotionEffect(new PotionEffect(PotionEffectType.SLOW_DIGGING, stunDuration, 2, true, false)); + } + } + + if(getWeaponType() == WeaponType.FLAMETHROWER) { + if(target.getLocation().getWorld() != null && !target.getLocation().getWorld().getName().equalsIgnoreCase("spawn")) { + target.setFireTicks(100); + } + } + range = player.getLocation().distance((Location) o[1]); + } + + } + if (b != null) { + Location l = b.getLocation(); +// if (!flamethrower) b.getWorld().playEffect(l, Effect.STEP_SOUND, b.getType()); +// +// if (!flamethrower) { +// //Block damage particle +// b.getWorld().playEffect(l, Effect.STEP_SOUND, b.getType()); +// +// //Block damage crack +// if (GTMGuns.getInstance().getWeaponManager().getIgnoredBlocks().contains(b.getType())) return; +// PacketContainer packetContainer = new PacketContainer(PacketType.Play.Server.BLOCK_BREAK_ANIMATION); +// packetContainer.getIntegers().write(0, Random.getInt()); +// packetContainer.getBlockPositionModifier().write(0, new BlockPosition(l.getBlockX(), l.getBlockY(), l.getBlockZ())); +// packetContainer.getIntegers().write(1, Random.getInt(10)); +// ProtocolLibrary.getProtocolManager().broadcastServerPacket(packetContainer); +// } + range = player.getLocation().distance(l); + } + + Location l = origin.clone(); + vector.multiply(0.5); + for (double k = 0; k < range * 2; k++) { + if (useParticles) l.getWorld().spigot().playEffect(l, getEffect(), 0, 0, 0, 0, 0, 0, 1, 64); + l.add(vector.getX(), vector.getY(), vector.getZ()); + } +// } + + Sounds.broadcastSound(getSounds()[0], origin); +// if (RangedWeapon.this.recoil != 0 && !player.isSneaking()) +// player.setVelocity(player.getVelocity().add(direction.setY(0).multiply(-(RangedWeapon.this.recoil/2)))); + } + + public void reload(Player player, PlayerCache playerCache) { + if(player == null || playerCache == null) return; + if(this.getName().equalsIgnoreCase("clausinator")) { + int ammo = getAmmo(player.getInventory().getItemInMainHand()); + if(ammo!=0) { + player.sendMessage(Lang.GTM.f("&cThe clip must be empty in order to reload")); + return; + } + TextComponent tc = new TextComponent("Click Here to Reload Clausinator For $100,000"); + tc.setColor(net.md_5.bungee.api.ChatColor.AQUA); + tc.setBold(true); + tc.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/christmas clausinator")); + player.spigot().sendMessage(tc); + return; + } + if(this.weaponState == WeaponState.RELOADING) return; + + + if(this.getWeaponType() == WeaponType.FLAMETHROWER) { + ItemStack itemStack = Main.getPlugin(Main.class).getBabies().getJetpackFuelItem().clone(); + boolean found = false; + for (ItemStack item : player.getInventory().getContents()) { + if(item == null) continue; + if(item.getType() != itemStack.getType()) continue; + if(!item.hasItemMeta() || !itemStack.hasItemMeta()) continue; + if(!item.getItemMeta().getDisplayName().equals(itemStack.getItemMeta().getDisplayName())) continue; + + if (item.getAmount() == 1) player.getInventory().remove(item); + else item.setAmount(item.getAmount() - 1); + + found = true; + break; + } + + if(!found) { + player.sendMessage(Lang.AMMO.f("&7The &c&lFlamethrower &7requires (jetpack) fuel to use!")); + return; + } + + player.updateInventory(); + } + + this.weaponState = WeaponState.RELOADING; + playerCache.burst = 0; + playerCache.shooting = false; + + int ammo = getAmmo(player.getEquipment().getItemInMainHand()); + int ammoToReload = this.magSize - ammo; + new BukkitRunnable() { + private int i; + + @Override + public void run() { + if (RangedWeapon.this.weaponState != WeaponState.RELOADING) { + this.cancel(); + return; + } + + ItemStack heldItem = player.getEquipment().getItemInMainHand(); + if(heldItem == null || heldItem.getType() == Material.AIR) { + RangedWeapon.this.weaponState = WeaponState.IDLE; + playerCache.burst = 0; + playerCache.shooting = false; + this.cancel(); + return; + } + + Weapon<?> weaponInHand = playerCache.getOrAddWeapon(heldItem); + + boolean checkSkins = false; + for(WeaponSkin skin : RangedWeapon.this.getWeaponSkins()) { + if(heldItem.getDurability() == skin.getIdentifier()) { + checkSkins = true; + } + } + + if (weaponInHand == null || (!RangedWeapon.this.getName().equals(weaponInHand.getName()) && RangedWeapon.this.getWeaponIdentifier() != weaponInHand.getWeaponIdentifier() && !checkSkins)) { + RangedWeapon.this.weaponState = WeaponState.IDLE; + playerCache.burst = 0; + playerCache.shooting = false; + this.cancel(); + return; + } + + RangedWeaponReloadEvent event = new RangedWeaponReloadEvent(player, RangedWeapon.this, 1); + Bukkit.getPluginManager().callEvent(event); + if (event.isCancelled()) { + RangedWeapon.this.weaponState = WeaponState.IDLE; + playerCache.burst = 0; + playerCache.shooting = false; + this.cancel(); + return; + } + + this.i += event.getAmmoToReload(); + int totalAmmo = 0; + + AmmoUpdateEvent event1 = new AmmoUpdateEvent(player); + Bukkit.getPluginManager().callEvent(event1); + totalAmmo = event1.getAmmo().getOrDefault(RangedWeapon.this.getAmmoType().getType(), 0); + + heldItem = RangedWeapon.this.setAmmo(heldItem, ammo + this.i, totalAmmo); + player.getEquipment().setItemInMainHand(heldItem); + Sounds.broadcastSound(RangedWeapon.this.getSounds()[3], player.getEyeLocation()); + + if (this.i >= ammoToReload) { + RangedWeapon.this.weaponState = WeaponState.IDLE; + playerCache.burst = 0; + playerCache.shooting = false; + this.cancel(); + } + } + }.runTaskTimer(GTMGuns.getInstance(), this.reloadTime / this.magSize, this.reloadTime / this.magSize); + } + + public boolean isValid(int tick) { + + // how many revolutions per second should this be + // convert to ticks, so 1 = 1 per 20 ticks + int rps = this instanceof WeaponRPM ? ((WeaponRPM) this).getRPS() : 0; + + // TODO remove for compatibility purposes + // if not defined + if (rps == 0){ + rps = this instanceof WeaponRPM ? ((WeaponRPM) this).getRpm() : 0; + } + + switch (rps) { + case 1: + // fires on tick 1 + return tick == 1; + case 2: + // fires on tick 1,11 + return tick % 10 == 1; + case 3: + // fires on tick 6,12,18 + return tick % 6 == 0; + case 4: + // fires on tick 5,10,15,20 + return tick % 5 == 0; + case 5: + // fires on tick 4,8,12,16,20 + return tick % 4 == 0; + case 6: + // fires on tick 3,6,9,12,15,18 + return tick % 3 == 0; + case 7: + // fires on tick 1,4,7,10,13,16,19 + return tick % 3 == 1; + case 8: + // fires on tick 1,3,6,8,11,13,16,18 + return tick % 5 == 1 || tick % 5 == 3; + case 9: + // fires on tick 1,3,5,8,10,12,15,17,19 + return tick % 7 == 1 || tick % 7 == 3 || tick % 7 == 5; + case 10: + // fires on tick 1,3,5,7,9,11,13,15,17,19 + return tick % 2 == 1; + case 11: + // fires on tick 1,2,4,6,8,10,12,14,16,18,20 + return tick % 2 == 0 || tick == 1; + case 12: + // fires on tick 1,2,4,6,8,10,11,12,14,16,18,20 + return tick % 2 == 0 || tick == 1 || tick == 11; + case 13: + // fires on tick 1,2,4,6,8,10,11,12,14,16,18,19,20 + return tick % 2 == 0 || tick == 1 || tick == 11 || tick == 19; + case 14: + // fires on tick 1,2,4,5,7,8,10,11,13,14,16,17,19,20 + return tick % 3 != 0; + case 15: + // fires on tick 1,2,3,5,6,7,9,10,11,13,14,15,17,18,19 + return tick % 4 != 0; + case 16: + // fires on tick 1,2,3,4,6,7,8,9,11,12,13,14,16,17,18,19 + return tick % 5 != 0; + case 17: + // fires on tick 1,2,3,4,5,6,7,8,9,11,12,13,14,16,17,18,19 + return tick != 10 && tick != 15 && tick != 20; + case 18: + // fires on tick 1,2,3,4,5,6,7,8,9,11,12,13,14,15,16,17,18,19 + return tick != 10 && tick != 20; + case 19: + // fires on tick 1,2,3,4,5,6,7,8,9,11,12,13,14,15,16,17,18,19,20 + return tick != 10; + case 20: + // fires on ticks 1-20 + return tick > 0 && tick <= 20; + default: + return true; +// case 1: +// return tick % 4 == 1; +// case 2: +// tick %= 7; +// return tick == 1 || tick == 4; +// case 3: +// return tick % 3 == 1; +// case 4: +// tick %= 5; +// return tick == 1 || tick == 3; +// case 5: +// tick %= 7; +// return tick == 1 || tick == 3 || tick == 5; +// case 6: +// return (tick & 1) == 1; +// case 7: +// return tick == 2 || (tick & 1) == 1; +// case 8: +// tick %= 5; +// return tick == 1 || tick == 2 || tick == 4; +// case 9: +// tick %= 6; +// return tick != 2 && tick != 0; +// case 10: +// return tick % 3 != 0; +// case 11: +// return tick % 4 != 0; +// case 12: +// return tick % 5 != 0; +// case 13: +// return tick % 6 != 0; +// case 14: +// return tick % 10 != 0; +// case 15: +// return tick != 20; +// default: +// return true; + } + } + + public int getAmmo(ItemStack weapon) {//GunName «16/1254» OR «5» + if (weapon == null) return 0; + if (!weapon.hasItemMeta()) return 0; + if (weapon.getItemMeta().getDisplayName() == null) return 0; + String s = ChatColor.stripColor(weapon.getItemMeta().getDisplayName()), middle = ""; + + if(!s.contains("«") || !s.contains("»")) return 0; + middle = s.split("«")[1].split("»")[0]; + + try { + if(middle.contains("/")) return Integer.valueOf(middle.split("/")[0]); + else return Integer.valueOf(middle); + } catch (NumberFormatException exception) { + return 1; + } + } + + public ItemStack setAmmo(ItemStack weapon, int amount, int totalAmmo) { + if (weapon == null) return null; + if (!weapon.hasItemMeta()) return weapon; + ItemMeta im = weapon.getItemMeta(); + String s = ChatColor.stripColor(im.getDisplayName()); + String displayName = getAmmoType() != AmmoType.NONE ? "&6" + s.split("«")[0] + "&8«&f" + amount + "&8/&7" + totalAmmo + "&8»" + (s.split("»").length == 1 ? "" : s.split("»")[1]) : "&6" + s.split("«")[0] + "&8«&f" + amount + "&8»" + (s.split("»").length == 1 ? "" : s.split("»")[1]); + im.setDisplayName(Utils.f(displayName)); + weapon.setItemMeta(im); + return weapon; + } + + public ItemStack updateAmmo(ItemStack weapon, Player player) { + AmmoUpdateEvent event = new AmmoUpdateEvent(player); + Bukkit.getPluginManager().callEvent(event); + return this.setAmmo(weapon, this.getAmmo(weapon), event.getAmmo().getOrDefault(this.getAmmoType().getType(), 0)); + } + + /** + * Get whether or not this weapon can multi fire. + * <p> + * Typically weapons that have burst or automatic might be bursting over a task + * period and can be fired if this again with another burst task in concurrency. + * </p> + * + * @return {@code true} if the weapon can fire again even if it's already firing. + */ + public boolean canMultiShoot() { + return multiShoot; + } +} diff --git a/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/ranged/attachment/Attachment.java b/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/ranged/attachment/Attachment.java new file mode 100644 index 0000000..6b1bcbd --- /dev/null +++ b/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/ranged/attachment/Attachment.java @@ -0,0 +1,33 @@ +package net.grandtheftmc.guns.weapon.ranged.attachment; + +/** + * Created by Luke Bingham on 21/07/2017. + */ +public enum Attachment { + + /** + * + */ + SUPPRESSOR(), + + /** + * + */ + GRIP(), + + /** + * + */ + EXTENDED_MAGS(), + + /** + * + */ + SCOPE(), + + /** + * + */ + ADVANCED_SCOPE(), + ; +} diff --git a/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/ranged/guns/AssultRifleWeapon.java b/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/ranged/guns/AssultRifleWeapon.java new file mode 100644 index 0000000..6b808dd --- /dev/null +++ b/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/ranged/guns/AssultRifleWeapon.java @@ -0,0 +1,80 @@ +package net.grandtheftmc.guns.weapon.ranged.guns; + +import org.bukkit.Effect; +import org.bukkit.Sound; +import org.bukkit.inventory.ItemStack; + +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.attribute.WeaponRPM; +import net.grandtheftmc.guns.weapon.ranged.RangedWeapon; + +/** + * Created by Luke Bingham on 21/07/2017. + */ +public class AssultRifleWeapon extends RangedWeapon<AssultRifleWeapon> implements WeaponRPM { + + /** The revs/fires per second for this weapon */ + protected int rps; + /** + * The revs/fires per minute for this weapon + * @deprecated - Please use rps and related values from now on. + */ + @Deprecated + protected int rpm; + + /** + * Construct a new Weapon. + */ + public AssultRifleWeapon(short uniqueIdentifier, String name, WeaponType weaponType, AmmoType ammoType, ItemStack itemStack, Sound[] sounds, Effect effect) { + super(uniqueIdentifier, name, weaponType, ammoType, itemStack, sounds, effect); + } + + @Override + public boolean isAutomatic() { + return this.rpm > 0; + } + + /** + * {@inheritDoc} + */ + @Override + public int getRPS() { + return rps; + } + + @Override + public int getRpm() { + //return (rpm - 300) / 60 + 1; + return (rpm - 300) / 60 + 5; + } + + @Override + public AssultRifleWeapon clone() { + AssultRifleWeapon weapon = new AssultRifleWeapon(getUniqueIdentifier(), getName(), getWeaponType(), getAmmoType(), getBaseItemStack().clone(), getSounds(), getEffect()); + weapon.oldItemStack = super.oldItemStack.clone(); + weapon.deathMessages = super.deathMessages; + weapon.walkSpeed = super.walkSpeed; + weapon.delay = super.delay; + + weapon.attachments = super.attachments; + weapon.supportedAttachments = super.supportedAttachments; + weapon.weaponSkins = super.weaponSkins; + weapon.effect = super.effect; + weapon.damage = super.damage; + weapon.meleeDamage = super.meleeDamage; + weapon.accuracy = super.accuracy; + weapon.recoil = super.recoil; + weapon.magSize = super.magSize; + weapon.reloadTime = super.reloadTime; + weapon.range = super.range; + weapon.penetration = super.penetration; + weapon.zoom = super.zoom; + weapon.reloadShoot = super.reloadShoot; + weapon.multiShoot = super.multiShoot; + + weapon.rpm = this.rpm; + weapon.rps = this.rps; + return weapon; + } +} diff --git a/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/ranged/guns/LMGWeapon.java b/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/ranged/guns/LMGWeapon.java new file mode 100644 index 0000000..3b39e17 --- /dev/null +++ b/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/ranged/guns/LMGWeapon.java @@ -0,0 +1,80 @@ +package net.grandtheftmc.guns.weapon.ranged.guns; + +import org.bukkit.Effect; +import org.bukkit.Sound; +import org.bukkit.inventory.ItemStack; + +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.attribute.WeaponRPM; +import net.grandtheftmc.guns.weapon.ranged.RangedWeapon; + +/** + * Created by Luke Bingham on 21/07/2017. + */ +public class LMGWeapon extends RangedWeapon<LMGWeapon> implements WeaponRPM { + + /** The revs/fires per second for this weapon */ + protected int rps; + /** + * The revs/fires per minute for this weapon + * @deprecated - Please use rps and related values from now on. + */ + @Deprecated + protected int rpm; + + /** + * Construct a new Weapon. + */ + public LMGWeapon(short uniqueIdentifier, String name, WeaponType weaponType, AmmoType ammoType, ItemStack itemStack, Sound[] sounds, Effect effect) { + super(uniqueIdentifier, name, weaponType, ammoType, itemStack, sounds, effect); + } + + @Override + public boolean isAutomatic() { + return this.rpm > 0; + } + + /** + * {@inheritDoc} + */ + @Override + public int getRPS() { + return rps; + } + + @Override + public int getRpm() { + //return (rpm - 300) / 60 + 1; + return (rpm - 300) / 60 + 5; + } + + @Override + public LMGWeapon clone() { + LMGWeapon weapon = new LMGWeapon(getUniqueIdentifier(), getName(), getWeaponType(), getAmmoType(), getBaseItemStack().clone(), getSounds(), getEffect()); + weapon.oldItemStack = super.oldItemStack.clone(); + weapon.deathMessages = super.deathMessages; + weapon.walkSpeed = super.walkSpeed; + weapon.delay = super.delay; + + weapon.attachments = super.attachments; + weapon.supportedAttachments = super.supportedAttachments; + weapon.weaponSkins = super.weaponSkins; + weapon.effect = super.effect; + weapon.damage = super.damage; + weapon.meleeDamage = super.meleeDamage; + weapon.accuracy = super.accuracy; + weapon.recoil = super.recoil; + weapon.magSize = super.magSize; + weapon.reloadTime = super.reloadTime; + weapon.range = super.range; + weapon.penetration = super.penetration; + weapon.zoom = super.zoom; + weapon.reloadShoot = super.reloadShoot; + weapon.multiShoot = super.multiShoot; + + weapon.rpm = this.rpm; + weapon.rps = this.rps; + return weapon; + } +} diff --git a/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/ranged/guns/LauncherWeapon.java b/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/ranged/guns/LauncherWeapon.java new file mode 100644 index 0000000..97b2837 --- /dev/null +++ b/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/ranged/guns/LauncherWeapon.java @@ -0,0 +1,552 @@ +package net.grandtheftmc.guns.weapon.ranged.guns; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Optional; +import java.util.Set; +import java.util.stream.Collectors; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Effect; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.block.Block; +import org.bukkit.entity.ArmorStand; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.entity.Projectile; +import org.bukkit.entity.SmallFireball; +import org.bukkit.entity.Snowball; +import org.bukkit.entity.TNTPrimed; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.EntityDamageEvent.DamageCause; +import org.bukkit.inventory.ItemStack; +import org.bukkit.metadata.FixedMetadataValue; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; +import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.util.Vector; + +import com.google.common.collect.Sets; +import com.j0ach1mmall3.jlib.methods.Sounds; +import com.j0ach1mmall3.jlib.player.JLibPlayer; +import com.j0ach1mmall3.wastedguns.MathUtil; +import com.j0ach1mmall3.wastedguns.api.events.NetgunHitEvent; +import com.j0ach1mmall3.wastedguns.api.events.WeaponDamageEvent; +import com.j0ach1mmall3.wastedguns.api.events.explosives.ExplosionDamageEntityEvent; +import com.j0ach1mmall3.wastedguns.api.events.ranged.AmmoUpdateEvent; +import com.j0ach1mmall3.wastedvehicles.api.VehicleType; +import com.j0ach1mmall3.wastedvehicles.api.vehicles.WastedVehicle; + +import net.grandtheftmc.core.util.Utils; +import net.grandtheftmc.guns.DamageDataHandler; +import net.grandtheftmc.guns.GTMGuns; +import net.grandtheftmc.guns.WeaponState; +import net.grandtheftmc.guns.cache.PlayerCache; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.attribute.WeaponExplosive; +import net.grandtheftmc.guns.weapon.ranged.RangedWeapon; +import net.grandtheftmc.houses.Houses; +import net.grandtheftmc.houses.users.HouseUser; + +/** + * Created by Luke Bingham on 21/07/2017. + */ +public class LauncherWeapon extends RangedWeapon<LauncherWeapon> implements WeaponExplosive { + + protected boolean homingLauncher = false, blowOnHit = true; + /** Does damage scale off of distance from projectile landing */ + protected boolean scaledDamage = false; + protected int blowDelay = 0; + protected double explosionStrength = 1d, rocketSpeed = 1d, explosionSize = 1d; + /** The number of ticks that an entity will remain stunned */ + protected int baseNetgunStun = 0; + + protected LivingEntity lockedTarget; + protected final Set<Projectile> rockets = Sets.newHashSet(); + + /** + * Construct a new Weapon. + */ + public LauncherWeapon(short uniqueIdentifier, String name, WeaponType weaponType, AmmoType ammoType, ItemStack itemStack, Sound[] sounds, Effect effect) { + super(uniqueIdentifier, name, weaponType, ammoType, itemStack, sounds, effect); + } + + @Override + public void onRightClick(Player player) { + super.onWeaponShoot(player, true, GTMGuns.getInstance().getWeaponManager().getPlayerCache(player.getUniqueId())); + } + + @Override + public void onSneak(Player player, boolean sneaking) { + if(!this.homingLauncher) return; + if(getAmmo(player.getEquipment().getItemInMainHand()) <= 0) return; + if(!sneaking) return; + if(super.weaponState == WeaponState.RELOADING) return; + + new BukkitRunnable() { + private int i = 0; + @Override + public void run() { + JLibPlayer libPlayer = new JLibPlayer(player); + if(!player.isSneaking() || weaponState == WeaponState.RELOADING) { + libPlayer.playSound(Sound.ENTITY_ENDERDRAGON_GROWL); + //libPlayer.sendActionBar(Utils.f("&7Cancelled lock!")); + Utils.sendActionBar(player, Utils.f("&7Cancelled lock!")); + this.cancel(); + return; + } + + if(this.i >= 3) { + this.cancel(); + Location origin = player.getEyeLocation(); + Vector direction = origin.getDirection(); + Object[] objs = MathUtil.getNearestTarget(player, origin, direction, LauncherWeapon.this.range); + Block block = MathUtil.getTargetBlock(origin, direction, LauncherWeapon.this.range); + if (objs == null || (block != null && player.getLocation().distance((Location) objs[1]) > player.getLocation().distance(block.getLocation()))) { + libPlayer.playSound(Sound.ENTITY_ENDERDRAGON_GROWL); + //libPlayer.sendActionBar(Utils.f("&7Cancelled failed!")); + Utils.sendActionBar(player, Utils.f("&7Cancelled lock!")); + return; + } + + LivingEntity target = (LivingEntity) objs[0]; + libPlayer.playSound(Sound.ENTITY_EXPERIENCE_ORB_PICKUP); + libPlayer.sendActionBar(ChatColor.GRAY + "Locked on " + ChatColor.GREEN + ChatColor.BOLD + (target.getCustomName() == null ? target.getName() : target.getCustomName()) + ChatColor.GRAY + '!'); + LauncherWeapon.this.lockedTarget = target; + return; + } + + this.i += 1; + libPlayer.playSound(Sound.BLOCK_METAL_PRESSUREPLATE_CLICK_ON); + //libPlayer.sendActionBar(Utils.f("&7Locking...")); + Utils.sendActionBar(player, Utils.f("&7Locking...")); + } + }.runTaskTimer(GTMGuns.getInstance(), 0, 5); + } + + @Override + public void shoot(Player player, Location origin, Vector direction, PlayerCache playerCache, boolean auto) { + AmmoUpdateEvent ammoUpdateEvent = new AmmoUpdateEvent(player); + Bukkit.getPluginManager().callEvent(ammoUpdateEvent); + int totalAmmo = ammoUpdateEvent.getAmmo().getOrDefault(getAmmoType().getType(), 0); + + ItemStack newHeldItem = player.getEquipment().getItemInMainHand(); + int ammo = this.getAmmo(newHeldItem); + if (ammo <= 0) { + if (getAmmoType() != AmmoType.NONE && totalAmmo > 0) { + reload(player, playerCache); + return; + } + super.weaponState = WeaponState.IDLE; + return; + } + + newHeldItem = this.setAmmo(newHeldItem, ammo - 1, totalAmmo); + player.getEquipment().getItemInMainHand().setItemMeta(newHeldItem.getItemMeta()); + player.updateInventory(); + if (ammo - 1 <= 0) reload(player, playerCache); + else { + if (!auto) super.weaponState = WeaponState.IDLE; + } + + double newX = direction.getX() + 2 * this.accuracy * Math.random() - this.accuracy; + double newY = direction.getY() + 2 * this.accuracy * Math.random() - this.accuracy; + double newZ = direction.getZ() + 2 * this.accuracy * Math.random() - this.accuracy; + + Vector vector = new Vector(newX, newY, newZ); + + if(player.isInsideVehicle() && player.getVehicle().hasMetadata("WastedVehicle")) { + WastedVehicle vehicle = (WastedVehicle) player.getVehicle().getMetadata("WastedVehicle").get(0).value(); + if(vehicle.getVehicleProperties().getVehicleType() == VehicleType.CAR) { + if(player.getLocation().getPitch() >= 20) + origin.setPitch(Math.min(player.getLocation().getPitch(), 35)); + origin.setPitch(Math.min(player.getLocation().getPitch(), -10)); + } + } + + final Projectile[] projectile = {null}; + if(super.getAmmoType() == AmmoType.GRENADE) { + projectile[0] = origin.getWorld().spawn(origin, Snowball.class); + projectile[0].setVelocity(vector.multiply(this.rocketSpeed)); + projectile[0].setShooter(player); + projectile[0].setMetadata("Rocket", new FixedMetadataValue(GTMGuns.getInstance(), this)); + projectile[0].setMetadata("Shooter", new FixedMetadataValue(GTMGuns.getInstance(), player)); + projectile[0].setInvulnerable(true); + } + else { + projectile[0] = origin.getWorld().spawn(origin, SmallFireball.class); + projectile[0].setVelocity(vector.multiply(this.rocketSpeed)); + projectile[0].setShooter(player); + projectile[0].setMetadata("Rocket", new FixedMetadataValue(GTMGuns.getInstance(), this)); + projectile[0].setMetadata("Shooter", new FixedMetadataValue(GTMGuns.getInstance(), player)); + projectile[0].setInvulnerable(true); + ((SmallFireball)projectile[0]).setIsIncendiary(false); + } + + rockets.add(projectile[0]); + Sounds.broadcastSound(getSounds()[0], origin); + if(getName().equalsIgnoreCase("net launcher") && player.getWorld().getName().equalsIgnoreCase("minesantos")) { + Location eyeLocation = player.getEyeLocation(); + Vector originDirection = origin.getDirection(); + Object[] objs = MathUtil.getNearestTarget(player, eyeLocation, originDirection, this.range); + if(objs != null) { + if(objs[0] == null) { + if(objs[1] instanceof Location) { + onNetgunHit((Location) objs[1], player, null);} + } else { + if(objs[0] instanceof LivingEntity) { + LivingEntity target = (LivingEntity) objs[0]; + HouseUser houseUser = Houses.getUserManager().getLoadedUser(target.getUniqueId()); + if (houseUser != null && (houseUser.isInsidePremiumHouse() || houseUser.isInsideHouse())) return; + if (!target.hasMetadata("WastedBarrel") && !(target.getLocation().distance(player.getLocation()) < 5)) { + + // create entity damage by entity event and add to data handler + EntityDamageByEntityEvent edbee = new EntityDamageByEntityEvent(player, target, DamageCause.DRAGON_BREATH, getDamage()); + DamageDataHandler.getInstance().addData(target.getUniqueId(), edbee); + + // damage the entity and set last damage cause + target.damage(getDamage(), player); + // reset damage ticks so they can take damage again + target.setNoDamageTicks(0); + target.setLastDamageCause(edbee); + + onNetgunHit(target.getLocation(), player, target); + } + } + } + + rockets.remove(projectile[0]); + projectile[0].remove(); + return; + } + else { + Optional<LivingEntity> optional = MathUtil.getNearbyEntities(player, this.range).filter(e -> { + if(!(e instanceof Player)) return false; + return MathUtil.getCrossProduct(player, e.getLocation()) < 0.12; + }).findFirst(); + + if(optional.isPresent()) { + LivingEntity target = optional.get(); + + // create entity damage by entity event and add to data handler + EntityDamageByEntityEvent edbee = new EntityDamageByEntityEvent(player, target, DamageCause.DRAGON_BREATH, getDamage()); + DamageDataHandler.getInstance().addData(target.getUniqueId(), edbee); + + // damage the entity and set last damage cause + target.damage(getDamage(), player); + // reset damage ticks so they can take damage again + target.setNoDamageTicks(0); + target.setLastDamageCause(edbee); + + onNetgunHit(target.getLocation(), player, target); + rockets.remove(projectile[0]); + projectile[0].remove(); + } + } + } + + new BukkitRunnable() { + @Override + public void run() { + if(projectile[0] == null || projectile[0].isDead() || !projectile[0].isValid()) { + this.cancel(); + return; + } + + if(projectile[0].getWorld() != player.getWorld()) return; + if(projectile[0].getLocation().distance(player.getLocation()) > getRange()) { + onExplode(projectile[0], (Player) projectile[0].getShooter()); + this.cancel(); + } + + Optional<Entity> nearestTarget = projectile[0].getNearbyEntities(1, 1, 1).stream().filter(entity -> entity instanceof LivingEntity).findFirst(); + if(nearestTarget.isPresent() && nearestTarget.get() != player) { + onExplode(projectile[0], (Player) projectile[0].getShooter()); + this.cancel(); + } + } + }.runTaskTimer(GTMGuns.getInstance(), 0, 1); + + new BukkitRunnable() { + private int i; + + @Override + public void run() { + if(projectile[0] == null || !projectile[0].isValid() || projectile[0].isDead() || this.i++ > 200) { + rockets.remove(projectile[0]); + projectile[0].remove(); + this.cancel(); + } + else { + if(!getName().equalsIgnoreCase("net launcher")) projectile[0].getWorld().spigot().playEffect(projectile[0].getLocation(), LauncherWeapon.this.getEffect(), 0, 0, 0, 0, 0, 0, 1, 64); + if(lockedTarget != null && LauncherWeapon.this.homingLauncher) { + if(!lockedTarget.getWorld().equals(player.getWorld()) || lockedTarget.getLocation().distance(player.getLocation())>200){ + lockedTarget = null; + new JLibPlayer(player).sendActionBar(Utils.f("&cTarget lock fail! The player is too far away!")); + return; + } + Vector vec = MathUtil.getVelocity(projectile[0].getLocation(), lockedTarget.getLocation()); + projectile[0].setVelocity(vec.multiply(LauncherWeapon.this.rocketSpeed)); + } + } + } + }.runTaskTimerAsynchronously(GTMGuns.getInstance(), 0, 1); + } + + /** + * Called when the netgun hits an entity. + * + * @param location - the location of the hit + * @param shooter - the shooter of the netgun + * @param target - the target being shot, if one is specified + */ + public void onNetgunHit(Location location, Player shooter, LivingEntity target) { + + // base stun duration + int netDuration = baseNetgunStun; + + // create netgun hit event and fire it + NetgunHitEvent nhe = new NetgunHitEvent(shooter, target, location, netDuration); + Bukkit.getPluginManager().callEvent(nhe); + + if (nhe.isCancelled()){ + return; + } + + if (nhe.getDuration() > 0){ + createNetgunWeb(location, nhe.getDuration()); + } + } + + /** + * Create the netgun web blocks at the specified location for the given duration. + * + * @param location - the location to create the web blocks + * @param netDuration - the number of ticks to keep the web blocks up for + */ + public void createNetgunWeb(Location location, int netDuration) { + + // create a list of cobwebs + Collection<Block> cobs = new ArrayList<>(); + + // grab initial location + int blockX = location.getBlockX(); + int blockY = location.getBlockY(); + int blockZ = location.getBlockZ(); + + // iterate around location + for (int x = 0; x < 2; x++) { + for (int y = 0; y < 3; y++) { + for (int z = 0; z < 2; z++) { + + // grab blocks and set to web + Block block = location.getWorld().getBlockAt(blockX + x, blockY + y, blockZ + z); + if (block.isEmpty()) { + block.setType(Material.WEB); + cobs.add(block); + } + } + } + } + + // delay task and reset to normal + new BukkitRunnable() { + @Override + public void run() { + cobs.forEach(block -> block.setType(Material.AIR)); + } + }.runTaskLater(GTMGuns.getInstance(), netDuration); + } + + @Override + public void onExplode(Entity projectile, Player shooter) { + + // get nearby entities to explosion + Collection<LivingEntity> eventVictims = MathUtil.getNearbyEntities(projectile, this.explosionSize).collect(Collectors.toList()); + + // call event + ExplosionDamageEntityEvent damageEntityEvent = new ExplosionDamageEntityEvent(shooter, projectile, eventVictims, this); + Bukkit.getPluginManager().callEvent(damageEntityEvent); + + // if event is cancelled, remove projectile + if (damageEntityEvent.isCancelled()) { + rockets.remove(projectile); + projectile.remove(); + return; + } + + // for each victim + Collection<LivingEntity> victims = damageEntityEvent.getVictims(); + if (!victims.isEmpty()) { + victims.forEach(e -> { + + // if not the same world + if (projectile.getWorld() != e.getWorld()) return; + + // send entities flying away from this explosion + if (!(e instanceof ArmorStand)) e.setVelocity(e.getLocation().getDirection().multiply(-this.explosionStrength)); + + // call weapon damage to see if we modify the event + WeaponDamageEvent weaponDamageEvent = new WeaponDamageEvent(shooter, this, getDamage(), e, DamageCause.DRAGON_BREATH); + Bukkit.getPluginManager().callEvent(weaponDamageEvent); + + if (weaponDamageEvent.isCancelled()){ + return; + } + + // the initial damage modifier they should take + double scaledDamage = 1.0; + + if (isScaledDamage()){ + + // the distance sq from the origin + double distanceSq = projectile.getLocation().distanceSquared(e.getLocation()); + + // if there is an explosion size + if (getExplosionSize() > 0){ + + // ratio is (explosionSize squared - distanceSq) DIVIDED BY explosionSize squared + // look below for example calculations + // assume explosionSize for all is 10 + // if distanceSq = 4, 100 - 4 = 96/100 = 96% + // if distanceSq = 9, 100 - 9 = 91/100 = 91% + // if distanceSq = 81, 100 - 81 = 19/100 = 19% + double ratio = (Math.pow(explosionSize, 2) - distanceSq) / Math.pow(explosionSize, 2); + + // CLAMP percent of damage to always be at least 10% + if (ratio <= 0.10){ + ratio = 0.10; + } + // 90% accurate should do 100% damage + // b/c to the user it always does less than max damage + if (ratio >= 0.90){ + ratio = 1.0; + } + + scaledDamage = ratio; + } + } + + // absolute value this just in case + // 19% of getDamage would be the total damage + double totalDamage = Math.abs(scaledDamage * weaponDamageEvent.getDamage()); + + // create entity damage by entity event and add to data handler + EntityDamageByEntityEvent edbee = new EntityDamageByEntityEvent(shooter, e, DamageCause.DRAGON_BREATH, totalDamage); + DamageDataHandler.getInstance().addData(e.getUniqueId(), edbee); + + // damage the entity and set last damage cause + e.damage(totalDamage, shooter); + // reset damage ticks so they can take damage again + e.setNoDamageTicks(0); + e.setLastDamageCause(edbee); + + // if this is a net launcher, add effects + if (getName().equalsIgnoreCase("net launcher")) { + e.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, 80, 2, true, false)); + e.addPotionEffect(new PotionEffect(PotionEffectType.WEAKNESS, 80, 2, true, false)); + e.addPotionEffect(new PotionEffect(PotionEffectType.CONFUSION, 80, 2, true, false)); + } + }); + } + + if(getName().equalsIgnoreCase("net launcher")) onNetgunHit(projectile.getLocation(), shooter, null); + else { +// Vice + TNTPrimed entity = (TNTPrimed) projectile.getWorld().spawnEntity(projectile.getLocation(), EntityType.PRIMED_TNT); + entity.setCustomName("EXPLOSIVE"); + entity.setCustomNameVisible(false); + entity.setFuseTicks(1); + + // add meta about the damage type of the explosion + entity.setMetadata("entity_damage", new FixedMetadataValue(GTMGuns.getInstance(), false)); + entity.setMetadata("entity_damage", new FixedMetadataValue(GTMGuns.getInstance(), false)); + + projectile.getWorld().spigot().playEffect(projectile.getLocation(), Effect.EXPLOSION_HUGE, 0, 0, 0, 0, 0, 0.01F, 1, 50); + projectile.getWorld().playSound(projectile.getLocation(), Sound.ENTITY_GENERIC_EXPLODE, 5.0F, 5.0F); + } + + rockets.remove(projectile); + projectile.remove(); + } + + @Override + public boolean isAutomatic() { + return false; + } + + public boolean isHomingLauncher() { + return homingLauncher; + } + + public boolean isBlowOnHit() { + return blowOnHit; + } + + public int getBlowDelay() { + return blowDelay; + } + + public double getExplosionStrength() { + return explosionStrength; + } + + public double getRocketSpeed() { + return rocketSpeed; + } + + public double getExplosionSize() { + return explosionSize; + } + + /** + * Get whether or not this launcher weapon does scaled damage. + * + * @return {@code true} if the damage is scaled from origin of projectile hit, {@code false} otherwise. + */ + public boolean isScaledDamage() { + return scaledDamage; + } + + @Override + public LauncherWeapon clone() { + LauncherWeapon weapon = new LauncherWeapon(getUniqueIdentifier(), getName(), getWeaponType(), getAmmoType(), getBaseItemStack().clone(), getSounds(), getEffect()); + weapon.oldItemStack = super.oldItemStack.clone(); + weapon.deathMessages = super.deathMessages; + weapon.walkSpeed = super.walkSpeed; + weapon.delay = super.delay; + + weapon.attachments = super.attachments; + weapon.supportedAttachments = super.supportedAttachments; + weapon.weaponSkins = super.weaponSkins; + weapon.effect = super.effect; + weapon.damage = super.damage; + weapon.meleeDamage = super.meleeDamage; + weapon.accuracy = super.accuracy; + weapon.recoil = super.recoil; + weapon.magSize = super.magSize; + weapon.reloadTime = super.reloadTime; + weapon.range = super.range; + weapon.penetration = super.penetration; + weapon.zoom = super.zoom; + weapon.reloadShoot = super.reloadShoot; + + weapon.homingLauncher = this.homingLauncher; + weapon.blowOnHit = this.blowOnHit; + weapon.blowDelay = this.blowDelay; + weapon.explosionStrength = this.explosionStrength; + weapon.rocketSpeed = this.rocketSpeed; + weapon.explosionSize = this.explosionSize; + weapon.scaledDamage = this.scaledDamage; + weapon.multiShoot = super.multiShoot; + weapon.baseNetgunStun = this.baseNetgunStun; + + return weapon; + } +} diff --git a/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/ranged/guns/PistolWeapon.java b/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/ranged/guns/PistolWeapon.java new file mode 100644 index 0000000..b7f74b0 --- /dev/null +++ b/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/ranged/guns/PistolWeapon.java @@ -0,0 +1,68 @@ +package net.grandtheftmc.guns.weapon.ranged.guns; + +import org.bukkit.Effect; +import org.bukkit.Sound; +import org.bukkit.inventory.ItemStack; + +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.ranged.RangedWeapon; + +/** + * Created by Luke Bingham on 21/07/2017. + */ +public class PistolWeapon extends RangedWeapon<PistolWeapon> { + + protected boolean stun = false; + protected int duration = 0; + + /** + * Construct a new Weapon. + */ + public PistolWeapon(short uniqueIdentifier, String name, WeaponType weaponType, AmmoType ammoType, ItemStack itemStack, Sound[] sounds, Effect effect) { + super(uniqueIdentifier, name, weaponType, ammoType, itemStack, sounds, effect); + } + + @Override + public boolean isAutomatic() { + return false; + } + + public boolean isStun() { + return stun; + } + + public int getDuration() { + return duration; + } + + @Override + public PistolWeapon clone() { + PistolWeapon weapon = new PistolWeapon(getUniqueIdentifier(), getName(), getWeaponType(), getAmmoType(), getBaseItemStack().clone(), getSounds(), getEffect()); + weapon.oldItemStack = super.oldItemStack.clone(); + weapon.deathMessages = super.deathMessages; + weapon.walkSpeed = super.walkSpeed; + weapon.delay = super.delay; + + weapon.attachments = super.attachments; + weapon.supportedAttachments = super.supportedAttachments; + weapon.weaponSkins = super.weaponSkins; + weapon.effect = super.effect; + weapon.damage = super.damage; + weapon.meleeDamage = super.meleeDamage; + weapon.accuracy = super.accuracy; + weapon.recoil = super.recoil; + weapon.magSize = super.magSize; + weapon.reloadTime = super.reloadTime; + weapon.range = super.range; + weapon.penetration = super.penetration; + weapon.zoom = super.zoom; + weapon.reloadShoot = super.reloadShoot; + + weapon.stun = this.stun; + weapon.duration = this.duration; + weapon.multiShoot = super.multiShoot; + + return weapon; + } +} diff --git a/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/ranged/guns/SMGWeapon.java b/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/ranged/guns/SMGWeapon.java new file mode 100644 index 0000000..e1869e6 --- /dev/null +++ b/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/ranged/guns/SMGWeapon.java @@ -0,0 +1,80 @@ +package net.grandtheftmc.guns.weapon.ranged.guns; + +import org.bukkit.Effect; +import org.bukkit.Sound; +import org.bukkit.inventory.ItemStack; + +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.attribute.WeaponRPM; +import net.grandtheftmc.guns.weapon.ranged.RangedWeapon; + +/** + * Created by Luke Bingham on 21/07/2017. + */ +public class SMGWeapon extends RangedWeapon<SMGWeapon> implements WeaponRPM { + + /** The revs/fires per second for this weapon */ + protected int rps; + /** + * The revs/fires per minute for this weapon + * @deprecated - Please use rps and related values from now on. + */ + @Deprecated + protected int rpm; + + /** + * Construct a new Weapon. + */ + public SMGWeapon(short uniqueIdentifier, String name, WeaponType weaponType, AmmoType ammoType, ItemStack itemStack, Sound[] sounds, Effect effect) { + super(uniqueIdentifier, name, weaponType, ammoType, itemStack, sounds, effect); + } + + @Override + public boolean isAutomatic() { + return this.rpm > 0; + } + + /** + * {@inheritDoc} + */ + @Override + public int getRPS() { + return rps; + } + + @Override + public int getRpm() { + //return (rpm - 300) / 60 + 1; + return (rpm - 300) / 60 + 5; + } + + @Override + public SMGWeapon clone() { + SMGWeapon weapon = new SMGWeapon(getUniqueIdentifier(), getName(), getWeaponType(), getAmmoType(), getBaseItemStack().clone(), getSounds(), getEffect()); + weapon.oldItemStack = super.oldItemStack.clone(); + weapon.deathMessages = super.deathMessages; + weapon.walkSpeed = super.walkSpeed; + weapon.delay = super.delay; + + weapon.attachments = super.attachments; + weapon.supportedAttachments = super.supportedAttachments; + weapon.weaponSkins = super.weaponSkins; + weapon.effect = super.effect; + weapon.damage = super.damage; + weapon.meleeDamage = super.meleeDamage; + weapon.accuracy = super.accuracy; + weapon.recoil = super.recoil; + weapon.magSize = super.magSize; + weapon.reloadTime = super.reloadTime; + weapon.range = super.range; + weapon.penetration = super.penetration; + weapon.zoom = super.zoom; + weapon.reloadShoot = super.reloadShoot; + weapon.multiShoot = super.multiShoot; + + weapon.rpm = this.rpm; + weapon.rps = this.rps; + return weapon; + } +} diff --git a/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/ranged/guns/ShotgunWeapon.java b/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/ranged/guns/ShotgunWeapon.java new file mode 100644 index 0000000..8240447 --- /dev/null +++ b/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/ranged/guns/ShotgunWeapon.java @@ -0,0 +1,75 @@ +package net.grandtheftmc.guns.weapon.ranged.guns; + +import org.bukkit.Effect; +import org.bukkit.Sound; +import org.bukkit.inventory.ItemStack; + +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.attribute.WeaponRPM; +import net.grandtheftmc.guns.weapon.ranged.RangedWeapon; + +/** + * Created by Luke Bingham on 21/07/2017. + */ +public class ShotgunWeapon extends RangedWeapon<ShotgunWeapon> implements WeaponRPM { + protected int shellSize; + + /** + * Construct a new Weapon. + */ + public ShotgunWeapon(short uniqueIdentifier, String name, WeaponType weaponType, AmmoType ammoType, ItemStack itemStack, Sound[] sounds, Effect effect) { + super(uniqueIdentifier, name, weaponType, ammoType, itemStack, sounds, effect); + } + + @Override + public int getRpm() { + return 0; + } + + /** + * {@inheritDoc} + */ + @Override + public int getRPS() { + return 0; + } + + @Override + public boolean isAutomatic() { + return false; + } + + public int getShellSize() { + return shellSize; + } + + @Override + public ShotgunWeapon clone() { + ShotgunWeapon weapon = new ShotgunWeapon(getUniqueIdentifier(), getName(), getWeaponType(), getAmmoType(), getBaseItemStack().clone(), getSounds(), getEffect()); + weapon.oldItemStack = super.oldItemStack.clone(); + weapon.deathMessages = super.deathMessages; + weapon.walkSpeed = super.walkSpeed; + weapon.delay = super.delay; + + weapon.attachments = super.attachments; + weapon.supportedAttachments = super.supportedAttachments; + weapon.weaponSkins = super.weaponSkins; + weapon.effect = super.effect; + weapon.damage = super.damage; + weapon.meleeDamage = super.meleeDamage; + weapon.accuracy = super.accuracy; + weapon.recoil = super.recoil; + weapon.magSize = super.magSize; + weapon.reloadTime = super.reloadTime; + weapon.range = super.range; + weapon.penetration = super.penetration; + weapon.zoom = super.zoom; + + weapon.shellSize = this.shellSize; + weapon.reloadShoot = super.reloadShoot; + weapon.multiShoot = super.multiShoot; + + return weapon; + } +} diff --git a/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/ranged/guns/SniperWeapon.java b/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/ranged/guns/SniperWeapon.java new file mode 100644 index 0000000..917f2e6 --- /dev/null +++ b/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/ranged/guns/SniperWeapon.java @@ -0,0 +1,86 @@ +package net.grandtheftmc.guns.weapon.ranged.guns; + +import java.lang.reflect.InvocationTargetException; + +import org.bukkit.Effect; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.ProtocolLibrary; +import com.comphenix.protocol.events.PacketContainer; + +import net.grandtheftmc.guns.WeaponState; +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.ranged.RangedWeapon; + +/** + * Created by Luke Bingham on 21/07/2017. + */ +public class SniperWeapon extends RangedWeapon<SniperWeapon> { + + /** + * Construct a new Weapon. + */ + public SniperWeapon(short uniqueIdentifier, String name, WeaponType weaponType, AmmoType ammoType, ItemStack itemStack, Sound[] sounds, Effect effect) { + super(uniqueIdentifier, name, weaponType, ammoType, itemStack, sounds, effect); + } + + @Override + public boolean isAutomatic() { + return false; + } + + @Override + public void onSneak(Player player, boolean sneaking) { + if(sneaking && this.weaponState != WeaponState.RELOADING) { + PacketContainer packetContainer = new PacketContainer(PacketType.Play.Server.SET_SLOT); + packetContainer.getIntegers().write(0, 0); + packetContainer.getIntegers().write(1, 5); + packetContainer.getItemModifier().write(0, new ItemStack(Material.PUMPKIN)); + try { + ProtocolLibrary.getProtocolManager().sendServerPacket(player, packetContainer); + } catch (InvocationTargetException e) { + e.printStackTrace(); + } + + player.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, Integer.MAX_VALUE, this.zoom - 1, true, false)); + return; + } + + player.removePotionEffect(PotionEffectType.SLOW); + player.updateInventory(); + } + + @Override + public SniperWeapon clone() { + SniperWeapon weapon = new SniperWeapon(getUniqueIdentifier(), getName(), getWeaponType(), getAmmoType(), getBaseItemStack().clone(), getSounds(), getEffect()); + weapon.oldItemStack = super.oldItemStack.clone(); + weapon.deathMessages = super.deathMessages; + weapon.walkSpeed = super.walkSpeed; + weapon.delay = super.delay; + + weapon.attachments = super.attachments; + weapon.supportedAttachments = super.supportedAttachments; + weapon.weaponSkins = super.weaponSkins; + weapon.effect = super.effect; + weapon.damage = super.damage; + weapon.meleeDamage = super.meleeDamage; + weapon.accuracy = super.accuracy; + weapon.recoil = super.recoil; + weapon.magSize = super.magSize; + weapon.reloadTime = super.reloadTime; + weapon.range = super.range; + weapon.penetration = super.penetration; + weapon.zoom = super.zoom; + weapon.reloadShoot = super.reloadShoot; + weapon.multiShoot = super.multiShoot; + + return weapon; + } +} diff --git a/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/ranged/guns/SpecialWeapon.java b/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/ranged/guns/SpecialWeapon.java new file mode 100644 index 0000000..e822a38 --- /dev/null +++ b/wastedguns-master@2e3501603b9/src/main/java/net/grandtheftmc/guns/weapon/ranged/guns/SpecialWeapon.java @@ -0,0 +1,93 @@ +package net.grandtheftmc.guns.weapon.ranged.guns; + +import org.bukkit.Effect; +import org.bukkit.Sound; +import org.bukkit.inventory.ItemStack; + +import net.grandtheftmc.guns.weapon.AmmoType; +import net.grandtheftmc.guns.weapon.WeaponType; +import net.grandtheftmc.guns.weapon.attribute.WeaponRPM; +import net.grandtheftmc.guns.weapon.ranged.RangedWeapon; + +/** + * Created by Luke Bingham on 21/07/2017. + */ +public class SpecialWeapon extends RangedWeapon<SpecialWeapon> implements WeaponRPM { + + protected boolean minigun = false, netgun = false, flamethrower = false; + /** The revs/fires per second for this weapon */ + protected int rps; + /** + * The revs/fires per minute for this weapon + * @deprecated - Please use rps and related values from now on. + */ + @Deprecated + protected int rpm; + + /** + * Construct a new Weapon. + */ + public SpecialWeapon(short uniqueIdentifier, String name, WeaponType weaponType, AmmoType ammoType, ItemStack itemStack, Sound[] sounds, Effect effect) { + super(uniqueIdentifier, name, weaponType, ammoType, itemStack, sounds, effect); + } + + @Override + public boolean isAutomatic() { + return this.rpm > 0; + } + + /** + * {@inheritDoc} + */ + @Override + public int getRPS() { + return rps; + } + + @Override + public int getRpm() { + //return (rpm - 300) / 60 + 1; + return (rpm - 300) / 60 + 5; + } + + public boolean isMinigun() { + return minigun; + } + + public boolean isNetgun() { + return netgun; + } + + public boolean isFlamethrower() { + return flamethrower; + } + + @Override + public SpecialWeapon clone() { + SpecialWeapon weapon = new SpecialWeapon(getUniqueIdentifier(), getName(), getWeaponType(), getAmmoType(), getBaseItemStack().clone(), getSounds(), getEffect()); + weapon.oldItemStack = super.oldItemStack.clone(); + weapon.deathMessages = super.deathMessages; + weapon.walkSpeed = super.walkSpeed; + weapon.delay = super.delay; + + weapon.attachments = super.attachments; + weapon.supportedAttachments = super.supportedAttachments; + weapon.weaponSkins = super.weaponSkins; + weapon.effect = super.effect; + weapon.damage = super.damage; + weapon.meleeDamage = super.meleeDamage; + weapon.accuracy = super.accuracy; + weapon.recoil = super.recoil; + weapon.magSize = super.magSize; + weapon.reloadTime = super.reloadTime; + weapon.range = super.range; + weapon.penetration = super.penetration; + weapon.zoom = super.zoom; + weapon.reloadShoot = super.reloadShoot; + weapon.multiShoot = super.multiShoot; + + weapon.rpm = this.rpm; + weapon.rps = this.rps; + return weapon; + } +} diff --git a/wastedguns-master@2e3501603b9/src/main/resources/airstrikes.yml b/wastedguns-master@2e3501603b9/src/main/resources/airstrikes.yml new file mode 100644 index 0000000..a8e1035 --- /dev/null +++ b/wastedguns-master@2e3501603b9/src/main/resources/airstrikes.yml @@ -0,0 +1,59 @@ +Airstrikes: + Airstrike: + Item: '143 name:&aAirstrike itemflag:hide_attributes' + UseSound: ENTITY_SKELETON_SHOOT + DropSound: ENTITY_BAT_TAKEOFF + PickupSound: ENTITY_BAT_TAKEOFF + BeaconRadius: 3 + BeaconCircleParticles: 60 + BeaconLineParticles: 13 + BeaconUpdateTicks: 5 + BeaconRotationDegree: 1 + #temp using ParticleEffect.java + BeaconParticle: REDSTONE + # The delay before the nuke launches + TargetLength: 20 + # The damage of the Explosive + Damage: 50 + # The explosion radius size + ExplosionSize: 5.0 + # The explosion strength (for knockback) + ExplosionStrength: 2.0 + # The explosion sound + ExplosionSound: ENTITY_GENERIC_EXPLODE + # The explosion particles + ExplosionParticles: EXPLOSION_HUGE + BombItemStack: '1 name:&6Grenade itemflag:hide_attributes' + HydraItemStack: '153 name:&4&lHydra lore:&7Type:_&a&lPlane' + FireDelay: 20 + UseBeacon: true + Nuke: + Item: '143 name:&bNuke itemflag:hide_attributes' + UseSound: ENTITY_SKELETON_SHOOT + DropSound: ENTITY_BAT_TAKEOFF + PickupSound: ENTITY_BAT_TAKEOFF + BeaconRadius: 3 + BeaconCircleParticles: 60 + BeaconLineParticles: 13 + BeaconUpdateTicks: 5 + BeaconRotationDegree: 1 + #temp using ParticleEffect.java + BeaconParticle: REDSTONE + # The delay before the nuke launches + TargetLength: 20 + # The damage of the Explosive + Damage: 50 + # The explosion radius size + ExplosionSize: 5.0 + # The explosion strength (for knockback) + ExplosionStrength: 2.0 + # The explosion sound + ExplosionSound: ENTITY_GENERIC_EXPLODE + # The explosion particles + ExplosionParticles: EXPLOSION_HUGE + BombItemStack: '1 name:&6Grenade itemflag:hide_attributes' + HydraItemStack: '153 name:&4&lHydra lore:&7Type:_&a&lPlane' + FireDelay: 20 + #set to false because we want to fire immediately + UseBeacon: false +DoNotChange: 1.0.0 diff --git a/wastedguns-master@2e3501603b9/src/main/resources/attachments.yml b/wastedguns-master@2e3501603b9/src/main/resources/attachments.yml new file mode 100644 index 0000000..5865229 --- /dev/null +++ b/wastedguns-master@2e3501603b9/src/main/resources/attachments.yml @@ -0,0 +1,171 @@ +Attachments: + Surpressor: + MeleeDamageFactor: 1.0 + FireDelayFactor: 1.0 + WalkSpeedFactor: 1.0 + UseSound: BLOCK_LAVA_POP + DamageFactor: 0.95 + AccuracyFactor: 1.0 + RecoilFactor: 1.0 + ZoomFactor: 1.0 + MagazineAmount: 0 + ReloadTimeFactor: 1.0 + RangeFactor: 0.9 + PumpkinScope: false + ExtendedClip4: + MeleeDamageFactor: 1.0 + FireDelayFactor: 1.0 + WalkSpeedFactor: 1.0 + UseSound: + DamageFactor: 1.0 + AccuracyFactor: 1.0 + RecoilFactor: 1.0 + ZoomFactor: 1.0 + MagazineAmount: 4 + ReloadTimeFactor: 1.0 + RangeFactor: 1.0 + PumpkinScope: false + ExtendedClip6: + MeleeDamageFactor: 1.0 + FireDelayFactor: 1.0 + WalkSpeedFactor: 1.0 + UseSound: + DamageFactor: 1.0 + AccuracyFactor: 1.0 + RecoilFactor: 1.0 + ZoomFactor: 1.0 + MagazineAmount: 6 + ReloadTimeFactor: 1.0 + RangeFactor: 1.0 + PumpkinScope: false + ExtendedClip14: + MeleeDamageFactor: 1.0 + FireDelayFactor: 1.0 + WalkSpeedFactor: 1.0 + UseSound: + DamageFactor: 1.0 + AccuracyFactor: 1.0 + RecoilFactor: 1.0 + ZoomFactor: 1.0 + MagazineAmount: 14 + ReloadTimeFactor: 1.0 + RangeFactor: 1.0 + PumpkinScope: false + ExtendedClip18: + MeleeDamageFactor: 1.0 + FireDelayFactor: 1.0 + WalkSpeedFactor: 1.0 + UseSound: + DamageFactor: 1.0 + AccuracyFactor: 1.0 + RecoilFactor: 1.0 + ZoomFactor: 1.0 + MagazineAmount: 18 + ReloadTimeFactor: 1.0 + RangeFactor: 1.0 + PumpkinScope: false + ExtendedClip24: + MeleeDamageFactor: 1.0 + FireDelayFactor: 1.0 + WalkSpeedFactor: 1.0 + UseSound: + DamageFactor: 1.0 + AccuracyFactor: 1.0 + RecoilFactor: 1.0 + ZoomFactor: 1.0 + MagazineAmount: 24 + ReloadTimeFactor: 1.0 + RangeFactor: 1.0 + PumpkinScope: false + ExtendedClip30: + MeleeDamageFactor: 1.0 + FireDelayFactor: 1.0 + WalkSpeedFactor: 1.0 + UseSound: + DamageFactor: 1.0 + AccuracyFactor: 1.0 + RecoilFactor: 1.0 + ZoomFactor: 1.0 + MagazineAmount: 30 + ReloadTimeFactor: 1.0 + RangeFactor: 1.0 + PumpkinScope: false + ExtendedClip46: + MeleeDamageFactor: 1.0 + FireDelayFactor: 1.0 + WalkSpeedFactor: 1.0 + UseSound: + DamageFactor: 1.0 + AccuracyFactor: 1.0 + RecoilFactor: 1.0 + ZoomFactor: 1.0 + MagazineAmount: 46 + ReloadTimeFactor: 1.0 + RangeFactor: 1.0 + PumpkinScope: false + ExtendedClip50: + MeleeDamageFactor: 1.0 + FireDelayFactor: 1.0 + WalkSpeedFactor: 1.0 + UseSound: + DamageFactor: 1.0 + AccuracyFactor: 1.0 + RecoilFactor: 1.0 + ZoomFactor: 1.0 + MagazineAmount: 50 + ReloadTimeFactor: 1.0 + RangeFactor: 1.0 + PumpkinScope: false + ExtendedClip100: + MeleeDamageFactor: 1.0 + FireDelayFactor: 1.0 + WalkSpeedFactor: 1.0 + UseSound: + DamageFactor: 1.0 + AccuracyFactor: 1.0 + RecoilFactor: 1.0 + ZoomFactor: 1.0 + MagazineAmount: 100 + ReloadTimeFactor: 1.0 + RangeFactor: 1.0 + PumpkinScope: false + Grip: + MeleeDamageFactor: 1.0 + FireDelayFactor: 1.0 + WalkSpeedFactor: 1.0 + UseSound: + DamageFactor: 1.0 + AccuracyFactor: 0.9 + RecoilFactor: 0.8 + ZoomFactor: 1.0 + MagazineAmount: 0 + ReloadTimeFactor: 1.0 + RangeFactor: 1.0 + PumpkinScope: false + Scope: + MeleeDamageFactor: 1.0 + FireDelayFactor: 1.0 + WalkSpeedFactor: 1.0 + UseSound: + DamageFactor: 1.0 + AccuracyFactor: 0.8 + RecoilFactor: 1.0 + ZoomFactor: 1.0 + MagazineAmount: 0 + ReloadTimeFactor: 1.0 + RangeFactor: 1.0 + PumpkinScope: true + AdvancedScope: + MeleeDamageFactor: 1.0 + FireDelayFactor: 1.0 + WalkSpeedFactor: 1.0 + UseSound: + DamageFactor: 1.0 + AccuracyFactor: 0.8 + RecoilFactor: 1.0 + ZoomFactor: 1.0 + MagazineAmount: 0 + ReloadTimeFactor: 1.0 + RangeFactor: 1.0 + PumpkinScope: false +DoNotChange: 1.0.0 \ No newline at end of file diff --git a/wastedguns-master@2e3501603b9/src/main/resources/config.yml b/wastedguns-master@2e3501603b9/src/main/resources/config.yml new file mode 100644 index 0000000..9d2b1d5 --- /dev/null +++ b/wastedguns-master@2e3501603b9/src/main/resources/config.yml @@ -0,0 +1,6 @@ +CrackBlocksWhenHit: true +BlockParticlesWhenHit: true +FakeExplosionDebris: true +FakeExplosionDebrisParticles: true +BloodParticlesOnHit: true +DoNotChange: 1.0.0 \ No newline at end of file diff --git a/wastedguns-master@2e3501603b9/src/main/resources/explosives.yml b/wastedguns-master@2e3501603b9/src/main/resources/explosives.yml new file mode 100644 index 0000000..2c8bf3f --- /dev/null +++ b/wastedguns-master@2e3501603b9/src/main/resources/explosives.yml @@ -0,0 +1,112 @@ +Explosives: + Grenade: + Item: '402 name:&6Grenade itemflag:hide_attributes' + MeleeDamage: 0.0 + AmmoType: EXPLOSIVE + FireDelay: 30 + WalkSpeed: 0.2 + UseSound: ENTITY_SKELETON_SHOOT + DropSound: ENTITY_BAT_TAKEOFF + PickupSound: ENTITY_BAT_TAKEOFF + AllowedAttachments: [] + # The delay before this Explosive will explode + ExplosionDelay: 60 + # The damage of the Explosive + Damage: 50 + # The explosion radius size + ExplosionSize: 5.0 + # The explosion strength (for knockback) + ExplosionStrength: 2.0 + # The explosion sound + ExplosionSound: ENTITY_GENERIC_EXPLODE + # The explosion particles + ExplosionParticles: EXPLOSION_HUGE + # The duration of the TearGas effect, only enable if this is a TearGas explosive + TearGasDuration: 0 + # The duration of the player burn, only enable if this is a MolotovCocktail explosive + BurnDuration: 0 + # Whether this explosive should stick, only enable if this is a StickyBomb explosive + Sticky: false + # Whether this explosive activates upon proximity, only enable if this is a ProximityMine explosive + Proximity: false + TearGas: + Item: '370 name:&6Tear_Gas itemflag:hide_attributes' + MeleeDamage: 0.0 + AmmoType: EXPLOSIVE + FireDelay: 30 + WalkSpeed: 0.2 + UseSound: ENTITY_SKELETON_SHOOT + DropSound: ENTITY_BAT_TAKEOFF + PickupSound: ENTITY_BAT_TAKEOFF + AllowedAttachments: [] + ExplosionDelay: 60 + Damage: 5 + ExplosionSize: 5.0 + ExplosionStrength: 0.0 + ExplosionSound: BLOCK_LAVA_EXTINGUISH + ExplosionParticles: CLOUD + TearGasDuration: 100 + BurnDuration: 0 + Sticky: false + Proximity: false + MolotovCocktail: + Item: '378 name:&6Molotov_Cocktail itemflag:hide_attributes' + MeleeDamage: 0.0 + AmmoType: EXPLOSIVE + FireDelay: 30 + WalkSpeed: 0.2 + UseSound: ENTITY_SKELETON_SHOOT + DropSound: ENTITY_BAT_TAKEOFF + PickupSound: ENTITY_BAT_TAKEOFF + AllowedAttachments: [] + ExplosionDelay: 60 + Damage: 25 + ExplosionSize: 5.0 + ExplosionStrength: 0.0 + ExplosionSound: ENTITY_SPLASH_POTION_BREAK + ExplosionParticles: FLAME + TearGasDuration: 0 + BurnDuration: 100 + Sticky: false + Proximity: false + StickyBomb: + Item: '385 name:&6Sticky_Bomb itemflag:hide_attributes' + MeleeDamage: 0.0 + AmmoType: EXPLOSIVE + FireDelay: 20 + WalkSpeed: 0.2 + UseSound: ENTITY_SKELETON_SHOOT + DropSound: ENTITY_BAT_TAKEOFF + PickupSound: ENTITY_BAT_TAKEOFF + AllowedAttachments: [] + ExplosionDelay: 0 + Damage: 50 + ExplosionSize: 5.0 + ExplosionStrength: 2.0 + ExplosionSound: ENTITY_GENERIC_EXPLODE + ExplosionParticles: EXPLOSION_HUGE + TearGasDuration: 0 + BurnDuration: 0 + Sticky: true + Proximity: false + ProximityMine: + Item: '348 name:&6Proximity_Mine itemflag:hide_attributes' + MeleeDamage: 0.0 + AmmoType: EXPLOSIVE + FireDelay: 20 + WalkSpeed: 0.2 + UseSound: ENTITY_SKELETON_SHOOT + DropSound: ENTITY_BAT_TAKEOFF + PickupSound: ENTITY_BAT_TAKEOFF + AllowedAttachments: [] + ExplosionDelay: 0 + Damage: 50 + ExplosionSize: 5.0 + ExplosionStrength: 2.0 + ExplosionSound: ENTITY_GENERIC_EXPLODE + ExplosionParticles: EXPLOSION_HUGE + TearGasDuration: 0 + BurnDuration: 0 + Sticky: false + Proximity: true +DoNotChange: 1.0.0 \ No newline at end of file diff --git a/wastedguns-master@2e3501603b9/src/main/resources/melee.yml b/wastedguns-master@2e3501603b9/src/main/resources/melee.yml new file mode 100644 index 0000000..23bd78d --- /dev/null +++ b/wastedguns-master@2e3501603b9/src/main/resources/melee.yml @@ -0,0 +1,66 @@ +MeleeWeapons: + Rake: + # General formatting applies: https://github.com/j0ach1mmall3/JLib/wiki/The-new-Item-Format + Item: '280 name:&6Rake itemflag:hide_attributes' + # The melee damage 2 = 1 heart (Not specified in spreadsheet) + MeleeDamage: 6.0 + # The AmmoType (Can be MELEE, PISTOL, SMG, MG, ASSAULT_RIFLE, SHOTGUN, SNIPER, ROCKET, GRENADE, MINIGUN) + AmmoType: MELEE + # The amount of ticks to wait between using + FireDelay: 15 + # The walk speed (default walk speed is 0.2, can be between 0 and 1) + WalkSpeed: 0.2 + # The Sound when shooting + UseSound: ENTITY_PLAYER_ATTACK_NODAMAGE + # The Sound when dropping + DropSound: ITEM_ARMOR_EQUIP_GENERIC + # The Sound when picking up + PickupSound: ITEM_ARMOR_EQUIP_GENERIC + # The Attachment identifiers that are allowed + AllowedAttachments: [] + NightStick: + Item: '369 name:&6Night_Stick itemflag:hide_attributes' + MeleeDamage: 8.0 + AmmoType: MELEE + FireDelay: 12 + WalkSpeed: 0.2 + UseSound: ENTITY_PLAYER_ATTACK_WEAK + DropSound: ITEM_ARMOR_EQUIP_GENERIC + PickupSound: ITEM_ARMOR_EQUIP_GENERIC + AllowedAttachments: [] + BaseballBat: + Item: '417 name:&6Baseball_Bat itemflag:hide_attributes' + MeleeDamage: 12.0 + AmmoType: MELEE + FireDelay: 15 + WalkSpeed: 0.2 + UseSound: ENTITY_PLAYER_ATTACK_STRONG + DropSound: ITEM_ARMOR_EQUIP_GENERIC + PickupSound: ITEM_ARMOR_EQUIP_GENERIC + AllowedAttachments: [] + Knife: + Item: '418 name:&6Knife itemflag:hide_attributes' + MeleeDamage: 15.0 + AmmoType: MELEE + FireDelay: 10 + WalkSpeed: 0.2 + UseSound: ENTITY_SKELETON_SHOOT + DropSound: ITEM_ARMOR_EQUIP_GENERIC + PickupSound: ITEM_ARMOR_EQUIP_GENERIC + AllowedAttachments: [] +EnergyWeapons: + Chainsaw: + Item: '419 name:&6Chainsaw itemflag:hide_attributes' + MeleeDamage: 5.0 + AmmoType: ENERGY + FireDelay: 5 + WalkSpeed: 0.14 + UseSound: ENTITY_WOLF_GROWL + DropSound: ITEM_ARMOR_EQUIP_GENERIC + PickupSound: ITEM_ARMOR_EQUIP_GENERIC + AllowedAttachments: [] + # The damage to be dealt + Damage: 5.0 + # The radius in which all Living Entities will be damaged + Range: 2.0 +DoNotChange: 1.0.0 \ No newline at end of file diff --git a/wastedguns-master@2e3501603b9/src/main/resources/plugin.yml b/wastedguns-master@2e3501603b9/src/main/resources/plugin.yml new file mode 100644 index 0000000..6540cd8 --- /dev/null +++ b/wastedguns-master@2e3501603b9/src/main/resources/plugin.yml @@ -0,0 +1,23 @@ +name: WastedGuns +main: net.grandtheftmc.guns.GTMGuns +version: 1.0.0 +author: Teddeh +description: A Guns plugin for GTM +depend: [JLib, ProtocolLib] +commands: + WGReload: + description: Reload the WastedGuns config + usage: /<command> +permissions: + wg.*: + description: All the WastedGuns permissions + default: op + children: + wg.giveweapon: true + wg.reload: true + wg.giveweapon: + description: Access to /giveweapon + default: op + wg.reload: + description: Access to /wgreload + default: op diff --git a/wastedguns-master@2e3501603b9/src/main/resources/ranged.yml b/wastedguns-master@2e3501603b9/src/main/resources/ranged.yml new file mode 100644 index 0000000..e038239 --- /dev/null +++ b/wastedguns-master@2e3501603b9/src/main/resources/ranged.yml @@ -0,0 +1,840 @@ +Guns: + # PISTOL + Pistol: + Item: '268 name:&6Pistol_&7«12» itemflag:hide_attributes ' + MeleeDamage: 3.0 + AmmoType: PISTOL + FireDelay: 7 + WalkSpeed: 0.2 + UseSound: ENTITY_FIREWORK_BLAST + DropSound: ITEM_ARMOR_EQUIP_LEATHER + PickupSound: ITEM_ARMOR_EQUIP_LEATHER + AllowedAttachments: + - Surpressor + - ExtendedClip4 + - Grip + - Scope + # The damage, 2 = 1 heart + Damage: 5.0 + # The accuracy + Accuracy: 0.025 + # Multiplication factor for backwards velocity + Recoil: 0.0 + # The amount of degrees to go up + # Speed Potion effect with the following multiplier + Zoom: 4 + # The magazine + Magazine: 12 + # The time in ticks to reload + ReloadTime: 40 + # The range in blocks + Range: 25 + # The Sound when reloading + ReloadSound: BLOCK_NOTE_HAT + # The particles to display, can be one of (https://hub.spigotmc.org/javadocs/spigot/org/bukkit/Effect.html) + Particles: CRIT + # The warmup time in ticks (Not used currently) + WarmupTime: 0 + # Whether we should apply a pumpkin effect as scope + PumpkinScope: false + # The amount of bullets to shoot at the same time + AmmountOfBullets: 1 + # The amount of entities to pierce with 1 bullet + BulletPenetration: 1 + # The duration in ticks of the Stun Gun effect + StunDuration: 0 + # Whether we should allow shooting during reloading + AllowReloadShooting: false + # The RPM for Fully Automatic (Set to 0 to disable, can't be < 300, FireDelay needs to be 0) + AutomaticRPM: 0 + StunGun: + Item: '269 name:&6Stun_Gun_&7«1» itemflag:hide_attributes' + MeleeDamage: 3.0 + AmmoType: NONE + FireDelay: 57 + WalkSpeed: 0.2 + UseSound: BLOCK_DISPENSER_DISPENSE + DropSound: ITEM_ARMOR_EQUIP_LEATHER + PickupSound: ITEM_ARMOR_EQUIP_LEATHER + Damage: 1.0 + Accuracy: 0.0 + Recoil: 0.0 + Zoom: 0 + Magazine: 1 + ReloadTime: 60 + Range: 10 + ReloadSound: BLOCK_NOTE_HAT + Particles: MAGIC_CRIT + WarmupTime: 0 + PumpkinScope: false + AmmountOfBullets: 1 + BulletPenetration: 1 + StunDuration: 80 + AllowReloadShooting: false + AutomaticRPM: 0 + CombatPistol: + Item: '270 name:&6Combat_Pistol_&7«12» itemflag:hide_attributes' + MeleeDamage: 3.0 + AmmoType: PISTOL + FireDelay: 7 + WalkSpeed: 0.2 + UseSound: ENTITY_FIREWORK_BLAST + DropSound: ITEM_ARMOR_EQUIP_LEATHER + PickupSound: ITEM_ARMOR_EQUIP_LEATHER + AllowedAttachments: + - Surpressor + - ExtendedClip4 + - Grip + - Scope + Damage: 6.0 + Accuracy: 0.02 + Recoil: 0.0 + Zoom: 3 + Magazine: 12 + ReloadTime: 30 + Range: 30 + ReloadSound: BLOCK_NOTE_HAT + Particles: CRIT + WarmupTime: 0 + PumpkinScope: false + AmmountOfBullets: 1 + BulletPenetration: 1 + StunDuration: 0 + AllowReloadShooting: false + AutomaticRPM: 0 + HeavyPistol: + Item: '271 name:&6Heavy_Pistol_&7«18» itemflag:hide_attributes' + MeleeDamage: 4.0 + AmmoType: PISTOL + FireDelay: 8 + WalkSpeed: 0.2 + UseSound: ENTITY_FIREWORK_BLAST + DropSound: ITEM_ARMOR_EQUIP_LEATHER + PickupSound: ITEM_ARMOR_EQUIP_LEATHER + AllowedAttachments: + - Surpressor + - ExtendedClip18 + - Grip + - Scope + Damage: 8.0 + Accuracy: 0.02 + Recoil: 0.0 + Zoom: 3 + Magazine: 18 + ReloadTime: 40 + Range: 30 + ReloadSound: BLOCK_NOTE_HAT + Particles: CRIT + WarmupTime: 0 + PumpkinScope: false + AmmountOfBullets: 1 + BulletPenetration: 1 + StunDuration: 0 + AllowReloadShooting: false + AutomaticRPM: 0 + MarksmanPistol: + Item: '290 name:&6Marksman_Pistol_&7«1» itemflag:hide_attributes' + MeleeDamage: 4.0 + AmmoType: PISTOL + FireDelay: 57 + WalkSpeed: 0.2 + UseSound: ENTITY_FIREWORK_BLAST + DropSound: ITEM_ARMOR_EQUIP_LEATHER + PickupSound: ITEM_ARMOR_EQUIP_LEATHER + Damage: 20.0 + Accuracy: 0.035 + Recoil: 1.0 + Zoom: 4 + Magazine: 1 + ReloadTime: 100 + Range: 10 + ReloadSound: BLOCK_NOTE_HAT + Particles: CRIT + WarmupTime: 0 + PumpkinScope: false + AmmountOfBullets: 1 + BulletPenetration: 1 + StunDuration: 0 + AllowReloadShooting: false + AutomaticRPM: 0 + # SMG + MicroSMG: + Item: '267 name:&6Micro_SMG_&7«16» itemflag:hide_attributes' + MeleeDamage: 4.0 + AmmoType: SMG + FireDelay: 0 + WalkSpeed: 0.2 + UseSound: ENTITY_BLAZE_HURT + DropSound: ITEM_ARMOR_EQUIP_GOLD + PickupSound: ITEM_ARMOR_EQUIP_GOLD + AllowedAttachments: + - Surpressor + - ExtendedClip14 + - Grip + - Scope + Damage: 4.0 + Accuracy: 0.035 + Recoil: 0.0 + Zoom: 4 + Magazine: 16 + ReloadTime: 40 + Range: 25 + ReloadSound: BLOCK_WOODEN_DOOR_OPEN + Particles: FLYING_GLYPH + WarmupTime: 0 + PumpkinScope: false + AmmountOfBullets: 1 + BulletPenetration: 1 + StunDuration: 0 + AllowReloadShooting: false + AutomaticRPM: 600 + SMG: + Item: '256 name:&6SMG_&7«30» itemflag:hide_attributes' + MeleeDamage: 4.0 + AmmoType: SMG + FireDelay: 0 + WalkSpeed: 0.2 + UseSound: ENTITY_BLAZE_HURT + DropSound: ITEM_ARMOR_EQUIP_GOLD + PickupSound: ITEM_ARMOR_EQUIP_GOLD + AllowedAttachments: + - Surpressor + - ExtendedClip30 + - Grip + - Scope + Damage: 4.0 + Accuracy: 0.025 + Recoil: 0.0 + Zoom: 4 + Magazine: 30 + ReloadTime: 50 + Range: 35 + ReloadSound: BLOCK_WOODEN_DOOR_OPEN + Particles: FLYING_GLYPH + WarmupTime: 0 + PumpkinScope: false + AmmountOfBullets: 1 + BulletPenetration: 1 + StunDuration: 0 + AllowReloadShooting: false + AutomaticRPM: 510 + AssaultSMG: + Item: '257 name:&6Assault_SMG_&7«30» itemflag:hide_attributes' + MeleeDamage: 4.0 + AmmoType: SMG + FireDelay: 0 + WalkSpeed: 0.2 + UseSound: ENTITY_BLAZE_HURT + DropSound: ITEM_ARMOR_EQUIP_GOLD + PickupSound: ITEM_ARMOR_EQUIP_GOLD + AllowedAttachments: + - Surpressor + - ExtendedClip30 + - Grip + - Scope + Damage: 5.0 + Accuracy: 0.025 + Recoil: 0.0 + Zoom: 4 + Magazine: 30 + ReloadTime: 50 + Range: 35 + ReloadSound: BLOCK_WOODEN_DOOR_OPEN + Particles: FLYING_GLYPH + WarmupTime: 0 + PumpkinScope: false + AmmountOfBullets: 1 + BulletPenetration: 1 + StunDuration: 0 + AllowReloadShooting: false + AutomaticRPM: 460 + CombatPDW: + Item: '258 name:&6Combat_PDW_&7«30» itemflag:hide_attributes' + MeleeDamage: 4.0 + AmmoType: SMG + FireDelay: 0 + WalkSpeed: 0.2 + UseSound: ENTITY_BLAZE_HURT + DropSound: ITEM_ARMOR_EQUIP_GOLD + PickupSound: ITEM_ARMOR_EQUIP_GOLD + AllowedAttachments: + - Surpressor + - ExtendedClip30 + - Grip + - Scope + Damage: 6.0 + Accuracy: 0.025 + Recoil: 0.0 + Zoom: 4 + Magazine: 30 + ReloadTime: 40 + Range: 35 + ReloadSound: BLOCK_WOODEN_DOOR_OPEN + Particles: FLYING_GLYPH + WarmupTime: 0 + PumpkinScope: false + AmmountOfBullets: 1 + BulletPenetration: 1 + StunDuration: 0 + AllowReloadShooting: false + AutomaticRPM: 450 + GusenbergSweeper: + Item: '292 name:&6Gusenberg_Sweeper_&7«50» itemflag:hide_attributes' + MeleeDamage: 5.0 + AmmoType: SMG + FireDelay: 0 + WalkSpeed: 0.2 + UseSound: ENTITY_BLAZE_HURT + DropSound: ITEM_ARMOR_EQUIP_GOLD + PickupSound: ITEM_ARMOR_EQUIP_GOLD + AllowedAttachments: + - Surpressor + - ExtendedClip50 + - Grip + Damage: 6.0 + Accuracy: 0.016 + Recoil: 0.0 + Zoom: 2 + Magazine: 50 + ReloadTime: 50 + Range: 47 + ReloadSound: BLOCK_WOODEN_DOOR_OPEN + Particles: FLYING_GLYPH + WarmupTime: 0 + PumpkinScope: false + AmmountOfBullets: 1 + BulletPenetration: 1 + StunDuration: 0 + AllowReloadShooting: false + AutomaticRPM: 555 + # SHOTGUN + SawedoffShotgun: + Item: '283 name:&6Sawed-off_Shotgun_&7«8» itemflag:hide_attributes' + MeleeDamage: 4.0 + AmmoType: SHOTGUN + FireDelay: 70 + WalkSpeed: 0.16 + UseSound: ENTITY_ZOMBIE_ATTACK_DOOR_WOOD + DropSound: ITEM_ARMOR_EQUIP_CHAIN + PickupSound: ITEM_ARMOR_EQUIP_CHAIN + AllowedAttachments: [] + Damage: 3.0 + Accuracy: 0.075 + Recoil: 1.0 + Zoom: 6 + Magazine: 8 + ReloadTime: 56 + Range: 15 + ReloadSound: ENTITY_IRONGOLEM_ATTACK + Particles: PARTICLE_SMOKE + WarmupTime: 0 + PumpkinScope: false + AmmountOfBullets: 5 + BulletPenetration: 1 + StunDuration: 0 + AllowReloadShooting: true + AutomaticRPM: 0 + PumpShotgun: + Item: '284 name:&6Pump_Shotgun_&7«8» itemflag:hide_attributes' + MeleeDamage: 5.0 + AmmoType: SHOTGUN + FireDelay: 70 + WalkSpeed: 0.14 + UseSound: ENTITY_ZOMBIE_ATTACK_DOOR_WOOD + DropSound: ITEM_ARMOR_EQUIP_CHAIN + PickupSound: ITEM_ARMOR_EQUIP_CHAIN + AllowedAttachments: [] + Damage: 3.0 + Accuracy: 0.05 + Recoil: 0.7 + Zoom: 5 + Magazine: 8 + ReloadTime: 56 + Range: 20 + ReloadSound: ENTITY_IRONGOLEM_ATTACK + Particles: PARTICLE_SMOKE + WarmupTime: 0 + PumpkinScope: false + AmmountOfBullets: 4 + BulletPenetration: 1 + StunDuration: 0 + AllowReloadShooting: true + AutomaticRPM: 0 + Musket: + Item: '285 name:&6Musket_&7«1» itemflag:hide_attributes' + MeleeDamage: 4.0 + AmmoType: SHOTGUN + FireDelay: 92 + WalkSpeed: 0.14 + UseSound: ENTITY_ZOMBIE_ATTACK_DOOR_WOOD + DropSound: ITEM_ARMOR_EQUIP_CHAIN + PickupSound: ITEM_ARMOR_EQUIP_CHAIN + AllowedAttachments: [] + Damage: 30.0 + Accuracy: 0.025 + Recoil: 1.0 + Zoom: 4 + Magazine: 1 + ReloadTime: 100 + Range: 25 + ReloadSound: ENTITY_IRONGOLEM_ATTACK + Particles: PARTICLE_SMOKE + WarmupTime: 0 + PumpkinScope: false + AmmountOfBullets: 1 + BulletPenetration: 1 + StunDuration: 0 + AllowReloadShooting: false + AutomaticRPM: 0 + AssaultShotgun: + Item: '286 name:&6Assault_Shotgun_&7«8» itemflag:hide_attributes' + MeleeDamage: 5.0 + AmmoType: SHOTGUN + FireDelay: 5 + WalkSpeed: 0.14 + UseSound: ENTITY_ZOMBIE_ATTACK_DOOR_WOOD + DropSound: ITEM_ARMOR_EQUIP_CHAIN + PickupSound: ITEM_ARMOR_EQUIP_CHAIN + AllowedAttachments: + - Surpressor + - ExtendedClip24 + - Grip + - Scope + Damage: 3.0 + Accuracy: 0.018 + Recoil: 0.5 + Zoom: 2 + Magazine: 8 + ReloadTime: 40 + Range: 20 + ReloadSound: ENTITY_IRONGOLEM_ATTACK + Particles: PARTICLE_SMOKE + WarmupTime: 0 + PumpkinScope: false + AmmountOfBullets: 3 + BulletPenetration: 1 + StunDuration: 0 + AllowReloadShooting: false + AutomaticRPM: 0 + HeavyShotgun: + Item: '294 name:&6Heavy_Shotgun_&7«6» itemflag:hide_attributes' + MeleeDamage: 6.0 + AmmoType: SHOTGUN + FireDelay: 6 + WalkSpeed: 0.12 + UseSound: ENTITY_ZOMBIE_ATTACK_DOOR_WOOD + DropSound: ITEM_ARMOR_EQUIP_CHAIN + PickupSound: ITEM_ARMOR_EQUIP_CHAIN + Damage: 5.0 + AllowedAttachments: + - Surpressor + - ExtendedClip6 + - Grip + - Scope + Accuracy: 0.022 + Recoil: 0.6 + Zoom: 3 + Magazine: 6 + ReloadTime: 40 + Range: 20 + ReloadSound: ENTITY_IRONGOLEM_ATTACK + Particles: PARTICLE_SMOKE + WarmupTime: 0 + PumpkinScope: false + AmmountOfBullets: 3 + BulletPenetration: 1 + StunDuration: 0 + AllowReloadShooting: false + AutomaticRPM: 0 + # ASSAULT RIFLE + AssaultRifle: + Item: '272 name:&6Assault_Rifle_&7«30» itemflag:hide_attributes' + MeleeDamage: 5.0 + AmmoType: ASSAULT_RIFLE + FireDelay: 0 + WalkSpeed: 0.18 + UseSound: ENTITY_ITEM_BREAK + DropSound: ITEM_ARMOR_EQUIP_IRON + PickupSound: ITEM_ARMOR_EQUIP_IRON + AllowedAttachments: + - Surpressor + - ExtendedClip30 + - Grip + - Scope + Damage: 6.0 + Accuracy: 0.022 + Recoil: 0.4 + Zoom: 3 + Magazine: 30 + ReloadTime: 40 + Range: 45 + ReloadSound: ENTITY_SKELETON_AMBIENT + Particles: VOID_FOG + WarmupTime: 0 + PumpkinScope: false + AmmountOfBullets: 1 + BulletPenetration: 1 + StunDuration: 0 + AllowReloadShooting: false + AutomaticRPM: 380 + CarbineRifle: + Item: '273 name:&6Carbine_Rifle_&7«30» itemflag:hide_attributes' + MeleeDamage: 5.0 + AmmoType: ASSAULT_RIFLE + FireDelay: 0 + WalkSpeed: 0.18 + UseSound: ENTITY_ITEM_BREAK + DropSound: ITEM_ARMOR_EQUIP_IRON + PickupSound: ITEM_ARMOR_EQUIP_IRON + AllowedAttachments: + - Surpressor + - ExtendedClip30 + - Grip + - Scope + Damage: 7.0 + Accuracy: 0.018 + Recoil: 0.4 + Zoom: 2 + Magazine: 30 + ReloadTime: 40 + Range: 45 + ReloadSound: ENTITY_SKELETON_AMBIENT + Particles: VOID_FOG + WarmupTime: 0 + PumpkinScope: false + AmmountOfBullets: 1 + BulletPenetration: 1 + StunDuration: 0 + AllowReloadShooting: false + AutomaticRPM: 445 + BullpupRifle: + Item: '274 name:&6Bullpup_Rifle_&7«30» itemflag:hide_attributes' + MeleeDamage: 5.0 + AmmoType: ASSAULT_RIFLE + FireDelay: 0 + WalkSpeed: 0.18 + UseSound: ENTITY_ITEM_BREAK + DropSound: ITEM_ARMOR_EQUIP_IRON + PickupSound: ITEM_ARMOR_EQUIP_IRON + AllowedAttachments: + - Surpressor + - ExtendedClip30 + - Grip + - Scope + Damage: 7.0 + Accuracy: 0.016 + Recoil: 0.3 + Zoom: 2 + Magazine: 30 + ReloadTime: 40 + Range: 45 + ReloadSound: ENTITY_SKELETON_AMBIENT + Particles: VOID_FOG + WarmupTime: 0 + PumpkinScope: false + AmmountOfBullets: 1 + BulletPenetration: 1 + StunDuration: 0 + AllowReloadShooting: false + AutomaticRPM: 500 + AdvancedRifle: + Item: '275 name:&6Advanced_Rifle_&7«30» itemflag:hide_attributes' + MeleeDamage: 5.0 + AmmoType: ASSAULT_RIFLE + FireDelay: 0 + WalkSpeed: 0.18 + UseSound: ENTITY_ITEM_BREAK + DropSound: ITEM_ARMOR_EQUIP_IRON + PickupSound: ITEM_ARMOR_EQUIP_IRON + AllowedAttachments: + - Surpressor + - ExtendedClip30 + - Grip + - Scope + Damage: 8.0 + Accuracy: 0.02 + Recoil: 0.2 + Zoom: 3 + Magazine: 30 + ReloadTime: 35 + Range: 45 + ReloadSound: ENTITY_SKELETON_AMBIENT + Particles: VOID_FOG + WarmupTime: 0 + PumpkinScope: false + AmmountOfBullets: 1 + BulletPenetration: 1 + StunDuration: 0 + AllowReloadShooting: false + AutomaticRPM: 500 + SpecialCarbine: + Item: '291 name:&6Special_Carbine_&7«30» itemflag:hide_attributes' + MeleeDamage: 5.0 + AmmoType: ASSAULT_RIFLE + FireDelay: 0 + WalkSpeed: 0.18 + UseSound: ENTITY_ITEM_BREAK + DropSound: ITEM_ARMOR_EQUIP_IRON + PickupSound: ITEM_ARMOR_EQUIP_IRON + AllowedAttachments: + - Surpressor + - ExtendedClip30 + - Grip + - Scope + Damage: 9.0 + Accuracy: 0.016 + Recoil: 0.2 + Zoom: 2 + Magazine: 30 + ReloadTime: 35 + Range: 45 + ReloadSound: ENTITY_SKELETON_AMBIENT + Particles: VOID_FOG + WarmupTime: 0 + PumpkinScope: false + AmmountOfBullets: 1 + BulletPenetration: 1 + StunDuration: 0 + AllowReloadShooting: false + AutomaticRPM: 445 + # MG + MG: + Item: '276 name:&6MG_&7«54» itemflag:hide_attributes' + MeleeDamage: 6.0 + AmmoType: MG + FireDelay: 0 + WalkSpeed: 0.14 + UseSound: BLOCK_NOTE_SNARE + DropSound: ITEM_ARMOR_EQUIP_DIAMOND + PickupSound: ITEM_ARMOR_EQUIP_DIAMOND + AllowedAttachments: + - Surpressor + - ExtendedClip46 + - Grip + - Scope + Damage: 8.0 + Accuracy: 0.025 + Recoil: 0.2 + Zoom: 3 + Magazine: 54 + ReloadTime: 60 + Range: 60 + ReloadSound: ENTITY_SKELETON_STEP + Particles: VOID_FOG + WarmupTime: 0 + PumpkinScope: false + AmmountOfBullets: 1 + BulletPenetration: 1 + StunDuration: 0 + AllowReloadShooting: false + AutomaticRPM: 440 + CombatMG: + Item: '277 name:&6Combat_MG_&7«100» itemflag:hide_attributes' + MeleeDamage: 6.0 + AmmoType: MG + FireDelay: 0 + WalkSpeed: 0.14 + UseSound: BLOCK_NOTE_SNARE + DropSound: ITEM_ARMOR_EQUIP_DIAMOND + PickupSound: ITEM_ARMOR_EQUIP_DIAMOND + AllowedAttachments: + - Surpressor + - ExtendedClip100 + - Grip + - Scope + Damage: 9.0 + Accuracy: 0.02 + Recoil: 0.1 + Zoom: 5 + Magazine: 100 + ReloadTime: 50 + Range: 60 + ReloadSound: ENTITY_SKELETON_STEP + Particles: VOID_FOG + WarmupTime: 0 + PumpkinScope: false + AmmountOfBullets: 1 + BulletPenetration: 1 + StunDuration: 0 + AllowReloadShooting: false + AutomaticRPM: 550 + # SNIPER + SniperRifle: + Item: '278 name:&6Sniper_Rifle_&7«10» itemflag:hide_attributes' + MeleeDamage: 5.0 + AmmoType: SNIPER + FireDelay: 32 + WalkSpeed: 0.14 + UseSound: ENTITY_IRONGOLEM_HURT + DropSound: ITEM_ARMOR_EQUIP_DIAMOND + PickupSound: ITEM_ARMOR_EQUIP_DIAMOND + AllowedAttachments: + - Surpressor + - Grip + - AdvancedScope + Damage: 20.0 + Accuracy: 0.014 + Recoil: 0.3 + Zoom: 8 + Magazine: 10 + ReloadTime: 80 + Range: 95 + ReloadSound: BLOCK_PISTON_EXTEND + Particles: CLOUD + WarmupTime: 0 + PumpkinScope: true + AmmountOfBullets: 1 + BulletPenetration: 1 + StunDuration: 0 + AllowReloadShooting: false + AutomaticRPM: 0 + HeavySniper: + Item: '279 name:&6Heavy_Sniper_&7«6» itemflag:hide_attributes' + MeleeDamage: 6.0 + AmmoType: SNIPER + FireDelay: 41 + WalkSpeed: 0.14 + UseSound: ENTITY_IRONGOLEM_HURT + DropSound: ITEM_ARMOR_EQUIP_DIAMOND + PickupSound: ITEM_ARMOR_EQUIP_DIAMOND + AllowedAttachments: + - Surpressor + - Grip + - AdvancedScope + Damage: 30.0 + Accuracy: 0.011 + Recoil: 0.3 + Zoom: 9 + Magazine: 6 + ReloadTime: 80 + Range: 100 + ReloadSound: BLOCK_PISTON_EXTEND + Particles: CLOUD + WarmupTime: 0 + PumpkinScope: true + AmmountOfBullets: 1 + BulletPenetration: 1 + StunDuration: 0 + AllowReloadShooting: false + Minigun: + Item: '293 name:&6Minigun_&7«600» itemflag:hide_attributes' + MeleeDamage: 8.0 + AmmoType: MINIGUN + FireDelay: 0 + WalkSpeed: 0.1 + UseSound: ENTITY_ZOMBIE_ATTACK_IRON_DOOR + DropSound: ITEM_ARMOR_EQUIP_DIAMOND + PickupSound: ITEM_ARMOR_EQUIP_DIAMOND + AllowedAttachments: + - Grip + Damage: 10.0 + Accuracy: 0.025 + Recoil: 0.1 + Zoom: 3 + Magazine: 600 + ReloadTime: 100 + Range: 55 + ReloadSound: ITEM_FLINTANDSTEEL_USE + Particles: FLYING_GLYPH + WarmupTime: 50 + PumpkinScope: false + AmmountOfBullets: 1 + BulletPenetration: 1 + StunDuration: 0 + AllowReloadShooting: false + AutomaticRPM: 1200 +Launchers: + RPG: + Item: '288 name:&6RPG_&7«1» itemflag:hide_attributes' + MeleeDamage: 7.0 + AmmoType: ROCKET + FireDelay: 80 + WalkSpeed: 0.12 + UseSound: ENTITY_FIREWORK_LAUNCH + DropSound: ITEM_ARMOR_EQUIP_DIAMOND + PickupSound: ITEM_ARMOR_EQUIP_DIAMOND + AllowedAttachments: + - Grip + Damage: 500.0 + Accuracy: 0.005 + Recoil: 1.0 + Zoom: 1 + Magazine: 1 + ReloadTime: 60 + Range: 70 + ReloadSound: BLOCK_PISTON_CONTRACT + Particles: FIREWORKS_SPARK + WarmupTime: 0 + PumpkinScope: false + AmmountOfBullets: 1 + BulletPenetration: 1 + AllowReloadShooting: false + AutomaticRPM: 0 + # The speed of the rocket + RocketSpeed: 3.0 + # The explosion radius size + ExplosionSize: 5.0 + # The explosion strength (for knockback) + ExplosionStrength: 2.0 + # Whether this is a homing launcher + Homing: false + HomingLauncher: + Item: '289 name:&6Homing_Launcher_&7«1» itemflag:hide_attributes' + MeleeDamage: 7.0 + AmmoType: ROCKET + FireDelay: 80 + WalkSpeed: 0.12 + UseSound: ENTITY_FIREWORK_LAUNCH + DropSound: ITEM_ARMOR_EQUIP_DIAMOND + PickupSound: ITEM_ARMOR_EQUIP_DIAMOND + AllowedAttachments: + - Grip + Damage: 500.0 + Accuracy: 0.005 + Recoil: 1.0 + Zoom: 1 + Magazine: 1 + ReloadTime: 60 + Range: 70 + ReloadSound: BLOCK_PISTON_CONTRACT + Particles: FIREWORKS_SPARK + WarmupTime: 0 + PumpkinScope: false + AmmountOfBullets: 1 + BulletPenetration: 1 + AllowReloadShooting: false + AutomaticRPM: 0 + RocketSpeed: 1.0 + ExplosionSize: 5.0 + ExplosionStrength: 2.0 + Homing: true +ExplosiveLaunchers: + GrenadeLauncher: + Item: '359 name:&6Grenade_Launcher_&7«6» itemflag:hide_attributes' + MeleeDamage: 6.0 + AmmoType: GRENADE + FireDelay: 16 + WalkSpeed: 0.12 + UseSound: ENTITY_CHICKEN_EGG + DropSound: ITEM_ARMOR_EQUIP_DIAMOND + PickupSound: ITEM_ARMOR_EQUIP_DIAMOND + AllowedAttachments: + - Grip + Damage: 500.0 + Accuracy: 0.005 + Recoil: 0.5 + Zoom: 1 + Magazine: 6 + ReloadTime: 50 + Range: 50 + ReloadSound: BLOCK_PISTON_CONTRACT + Particles: FIREWORKS_SPARK + WarmupTime: 0 + PumpkinScope: false + AmmountOfBullets: 1 + BulletPenetration: 1 + StunDuration: 0 + AllowReloadShooting: false + AutomaticRPM: 0 + Explosive: Grenade +DoNotChange: 1.0.0 \ No newline at end of file diff --git a/wastedvehicles-master@5cac11d6d43/.gitignore b/wastedvehicles-master@5cac11d6d43/.gitignore new file mode 100644 index 0000000..631a4a8 --- /dev/null +++ b/wastedvehicles-master@5cac11d6d43/.gitignore @@ -0,0 +1,101 @@ + +\.idea/ + +target/classes/ + +target/ + +*.iml + +/bin/ +/build/ + +##### Gradle ##### +.gradle +# Ignore Gradle GUI config +gradle-app.setting + +# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) +!gradle-wrapper.jar + +# Cache of project +.gradletasknamecache + +# # Work around https://youtrack.jetbrains.com/issue/IDEA-116898 +# gradle/wrapper/gradle-wrapper.properties + +##### Eclipse ##### +.metadata +bin/ +tmp/ +*.tmp +*.bak +*.swp +*~.nib +local.properties +.settings/ +.loadpath +.recommenders + +.project + +# External tool builders +.externalToolBuilders/ + +# Locally stored "Eclipse launch configurations" +*.launch + +# PyDev specific (Python IDE for Eclipse) +*.pydevproject + +# CDT-specific (C/C++ Development Tooling) +.cproject + +# JDT-specific (Eclipse Java Development Tools) +.classpath + +# Java annotation processor (APT) +.factorypath + +# PDT-specific (PHP Development Tools) +.buildpath + +# sbteclipse plugin +.target + +# Tern plugin +.tern-project + +# TeXlipse plugin +.texlipse + +# STS (Spring Tool Suite) +.springBeans + +# Code Recommenders +.recommenders/ + +*.class + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files # +*.jar +*.war +*.ear + +# Unit Testing +logs/ + +##### IntelliJ ##### +*.iml +*.ipr +*.iws +.idea/ + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* + +##### MacOS ##### +.DS_Store diff --git a/wastedvehicles-master@5cac11d6d43/README.md b/wastedvehicles-master@5cac11d6d43/README.md new file mode 100644 index 0000000..87f5476 --- /dev/null +++ b/wastedvehicles-master@5cac11d6d43/README.md @@ -0,0 +1,3 @@ +First commit. +<br> +test \ No newline at end of file diff --git a/wastedvehicles-master@5cac11d6d43/circle.yml b/wastedvehicles-master@5cac11d6d43/circle.yml new file mode 100644 index 0000000..ba8d480 --- /dev/null +++ b/wastedvehicles-master@5cac11d6d43/circle.yml @@ -0,0 +1,5 @@ +deployment: + staging: + branch: master + commands: + - sh ./deploy.sh Build-$CIRCLE_BUILD_NUM Build-$CIRCLE_BUILD_NUM "$CIRCLE_PROJECT_REPONAME automated build $CIRCLE_BUILD_NUM" target/$CIRCLE_PROJECT_REPONAME.jar $CIRCLE_PROJECT_REPONAME.jar 4eedfd44a69246519654006ba7fc7d39b731fc69 \ No newline at end of file diff --git a/wastedvehicles-master@5cac11d6d43/deploy.sh b/wastedvehicles-master@5cac11d6d43/deploy.sh new file mode 100644 index 0000000..ac29ad7 --- /dev/null +++ b/wastedvehicles-master@5cac11d6d43/deploy.sh @@ -0,0 +1,23 @@ +#!/usr/bin/env bash + +sudo apt-get install jq + +usage() { + echo "$0 <tagname> <releasename> <body> <artifact> <artifactname> <token>" +} + +response=$( + curl --fail \ + --location \ + --data "{\"tag_name\": \"$1\", \"name\": \"$2\", \"body\": \"$3\"}" \ + --header "Content-Type: application/json" \ + --header "Authorization: token $6" \ + "https://api.github.com/repos/$CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME/releases" +) + +url2="$(echo "$response" | jq -r .upload_url | sed -e "s/{?name,label}//")" + +curl --header "Content-Type:application/gzip" \ + --header "Authorization: token $6" \ + --data-binary "@$4" \ + "$url2?name=$5" \ No newline at end of file diff --git a/wastedvehicles-master@5cac11d6d43/pom.xml b/wastedvehicles-master@5cac11d6d43/pom.xml new file mode 100644 index 0000000..be3b443 --- /dev/null +++ b/wastedvehicles-master@5cac11d6d43/pom.xml @@ -0,0 +1,109 @@ +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + + <groupId>net.grandtheftmc</groupId> + <artifactId>wastedvehicles</artifactId> + <version>1.0.5.rewrite</version> + <name>WastedVehicles</name> + + <repositories> + <repository> + <id>nexus-release</id> + <url>http://nexus.grandtheftmc.net/content/repositories/releases</url> + </repository> + </repositories> + + <distributionManagement> + <repository> + <id>nexus-release</id> + <name>Internal Releases</name> + <url>http://nexus.grandtheftmc.net/content/repositories/releases</url> + </repository> + <snapshotRepository> + <id>nexus-snapshot</id> + <name>Internal Snapshots</name> + <url>http://nexus.grandtheftmc.net/content/repositories/snapshots</url> + </snapshotRepository> + </distributionManagement> + + <dependencies> + <dependency> + <groupId>org.spigotmc.1.12</groupId> + <artifactId>spigot</artifactId> + <version>1.12.0</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>com.comphenix.protocol</groupId> + <artifactId>ProtocolLib</artifactId> + <version>LATEST</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>com.github.j0ach1mmall3</groupId> + <artifactId>JLib</artifactId> + <version>1.10.0</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>net.grandtheftmc</groupId> + <artifactId>wastedguns</artifactId> + <version>1.0.9.rewrite</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>net.grandtheftmc</groupId> + <artifactId>core</artifactId> + <version>2.3</version> + <scope>provided</scope> + </dependency> + </dependencies> + + <properties> + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + <maven.compiler.source>1.8</maven.compiler.source> + <maven.compiler.target>1.8</maven.compiler.target> + </properties> + + <build> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-shade-plugin</artifactId> + <configuration> + <finalName>WastedVehicles</finalName> + </configuration> + <executions> + <execution> + <phase>package</phase> + <goals> + <goal>shade</goal> + </goals> + </execution> + </executions> + </plugin> + + <!-- Nexus deploy --> + <plugin> + <groupId>org.sonatype.plugins</groupId> + <artifactId>nexus-staging-maven-plugin</artifactId> + <version>1.6.8</version> + <extensions>true</extensions> + <executions> + <execution> + <id>default-deploy</id> + <phase>deploy</phase> + <goals> + <goal>deploy</goal> + </goals> + </execution> + </executions> + <configuration> + <serverId>nexus</serverId> + <nexusUrl>http://nexus.grandtheftmc.net/</nexusUrl> + <skipStaging>true</skipStaging> + </configuration> + </plugin> + </plugins> + </build> +</project> \ No newline at end of file diff --git a/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/Main.java b/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/Main.java new file mode 100644 index 0000000..38bd157 --- /dev/null +++ b/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/Main.java @@ -0,0 +1,211 @@ +package com.j0ach1mmall3.wastedvehicles; + +import com.j0ach1mmall3.jlib.commands.Command; +import com.j0ach1mmall3.jlib.inventory.JLibItem; +import com.j0ach1mmall3.jlib.nms.nbt.NBTTag; +import com.j0ach1mmall3.jlib.plugin.JLibPlugin; +import com.j0ach1mmall3.wastedvehicles.api.VehicleProperties; +import com.j0ach1mmall3.wastedvehicles.api.events.VehicleCreateEvent; +import com.j0ach1mmall3.wastedvehicles.api.vehicles.*; +import com.j0ach1mmall3.wastedvehicles.commands.FixVehiclesCommandHandler; +import com.j0ach1mmall3.wastedvehicles.commands.GiveVehicleCommandHandler; +import com.j0ach1mmall3.wastedvehicles.commands.WVReloadCommandHandler; +import com.j0ach1mmall3.wastedvehicles.config.Config; +import com.j0ach1mmall3.wastedvehicles.listeners.JetpackListener; +import com.j0ach1mmall3.wastedvehicles.listeners.VehicleListener; +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.servers.ServerType; +import net.grandtheftmc.core.util.ServerUtil; +import org.bukkit.*; +import org.bukkit.entity.ArmorStand; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.metadata.FixedMetadataValue; +import org.bukkit.scheduler.BukkitRunnable; + +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; + +/** + * @author j0ach1mmall3 (business.j0ach1mmall3@gmail.com) + * @since 5/05/2016 + */ +public final class Main extends JLibPlugin<Config> { + private final Set<ArmorStand> entityQueue = Collections.newSetFromMap(new ConcurrentHashMap<>()); + + @Override + public void onEnable() { + this.reload(); + new JetpackListener(this); + new VehicleListener(this); + new GiveVehicleCommandHandler(this).registerCommand(new Command("GiveVehicle", "wv.givevehicle", ChatColor.RED + "Usage: /givevehicle <identifier> <player>")); + new WVReloadCommandHandler(this).registerCommand(new Command("WVReload", "wv.reload", ChatColor.RED + "Usage: /wvreload")); + new FixVehiclesCommandHandler(this).registerCommand(new Command("fixvehicles", "wv.fix", ChatColor.RED + "Usage: /fixvehicles")); + new BukkitRunnable() { + @Override + public void run() { + for(World world : Bukkit.getWorlds()) { + + if (world.getName().equals("spawn")) continue; + + for (Entity entity : world.getEntities()) { + if (entity.getType() != EntityType.ARMOR_STAND) continue; + if (entity.hasMetadata("WastedVehicle") || entity.hasMetadata("WastedVehiclePassenger")) + continue; + if(entity.hasMetadata("CUSTOM")) continue; + if (entity.getCustomName() == null || entity.getCustomName().isEmpty()) { + entity.remove(); + } + } + } + } + }.runTaskLater(this, 500); + + if(Core.getSettings().getType() != ServerType.GTM) return; + ServerUtil.runTaskLater(() -> { + for(VehicleProperties vehicle : this.config.getVehicleProperties()) { + Core.log(vehicle.getIdentifier()); + + World world = Bukkit.getWorld("spawn"); + if(world == null) continue; + + Location loc = null; + switch (vehicle.getIdentifier()) { + case "Zentorno": loc = new Location(world, -277.5, 26, 226.5, 0, 0); break;// + case "Entity_XF": loc = new Location(world, -287.5, 26, 228.5, 0, 0); break; + case "9F": loc = new Location(world, -272.5, 26, 225.9, 0, 0); break;// + case "ArmoredKuruma": loc = new Location(world, -267.5, 26, 224.5, 0, 0); break;// + case "Primo": loc = new Location(world, -282.5, 26, 227.5, 0, 0); break;// + case "BMX": loc = new Location(world, -296.5, 26, 224.5, -180, 0); break;// + case "Rhino": loc = new Location(world, -269.5, 26, 240.5, 90, 0); break;// + case "Hydra": loc = new Location(world, -286.5, 26.3, 213.5, 0, 20); break;// + case "Maverick": loc = new Location(world, -271.5, 26, 213.5, 0, 0); break;// + case "AttackMaverick": loc = new Location(world, -279.5, 26, 213.5, 0, 0); break;// + case "Dinghy": loc = new Location(world, -264.25, 24.4, 213.5, 0, 0); break;// +// case "Akuma": loc = new Location(world, ); break; + + default: break; + } + + //If location is null, continue the loop. + if(loc == null) continue; + if (!loc.getChunk().isLoaded()) loc.getChunk().load(); + + //Remove existing entities if any. + world.getNearbyEntities(loc, 1, 1, 1).stream().filter(entity -> entity instanceof ArmorStand).forEach(Entity::remove); + + //Create new showcase entity. + ArmorStand stand = world.spawn(loc, ArmorStand.class); + stand.setHelmet(vehicle.getItem() == null ? new ItemStack(Material.DIRT) : vehicle.getItem()); + stand.setMetadata("VehicleStatue", new FixedMetadataValue(this, vehicle)); + stand.setMetadata("CUSTOM", new FixedMetadataValue(this, VehicleProperties.class)); + stand.setInvulnerable(true); + stand.setGravity(false); + stand.setVisible(false); + stand.setCanPickupItems(false); + stand.setArms(false); + stand.setBasePlate(false); + stand.setAI(false); + stand.setMarker(true); + stand.setRemoveWhenFarAway(false); + } + }, 15*20); + } + + @Override + public void onDisable() { + for(World world : Bukkit.getWorlds()) { + + if (world.getName().equals("spawn")) continue; + + for (Entity entity : world.getEntities()) { + if (entity.getType() != EntityType.ARMOR_STAND) continue; + if (entity.hasMetadata("WastedVehicle")) { + WastedVehicle vehicle = (WastedVehicle) entity.getMetadata("WastedVehicle").get(0).value(); + vehicle.onDestroy((ArmorStand) entity); + } + if (entity.hasMetadata("WastedVehiclePassenger")) { + entity.remove(); + } + } + } + } + + public void reload() { + this.config = new Config(this); + } + + public Set<ArmorStand> getEntityQueue() { + return this.entityQueue; + } + + public Optional<VehicleProperties> getVehicle(String identifier) { + return this.config.getVehicleProperties().stream().filter(v -> v.getIdentifier().equalsIgnoreCase(identifier)).findFirst(); + } + + public Optional<VehicleProperties> getVehicle(ItemStack itemStack) { + return this.config.getVehicleProperties().stream().filter(v -> Objects.equals(v.getItem().getData(), itemStack.getData()) && itemStack.hasItemMeta() && itemStack.getItemMeta().hasDisplayName()).findFirst(); + } + + public ItemStack addHealth(ItemStack itemStack, double health) { + try { + JLibItem jLibItem = new JLibItem(itemStack); + NBTTag nbtTag = jLibItem.getNBTTag(); + Map<String, NBTTag> map = nbtTag.getMap(); + map.put("WastedVehicleHealth", new NBTTag(NBTTag.DOUBLE, (Object) health)); + nbtTag.setMap(map); + jLibItem.setNbtTag(nbtTag); + return jLibItem.getItemStack(); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + public ArmorStand spawnVehicle(VehicleProperties vehicleProperties, Location location, Player player, double health) { + WastedVehicle vehicle = null; + switch (vehicleProperties.getVehicleType()) { + case CAR: + vehicle = new Car(this, vehicleProperties); + break; + case HELICOPTER: + vehicle = new Helicopter(this, vehicleProperties); + break; + case PLANE: + vehicle = new Plane(this, vehicleProperties); + break; + case BOAT: + vehicle = new Boat(this, vehicleProperties); + break; + case SUBMARINE: + vehicle = new Submarine(this, vehicleProperties); + break; + } + VehicleCreateEvent event = new VehicleCreateEvent(vehicle, player); + Bukkit.getPluginManager().callEvent(event); + if(!event.isCancelled()) { + ArmorStand armorStand = location.getWorld().spawn(location.add(0, 1, 0), ArmorStand.class); + vehicle.onCreate(armorStand, player, location, health); + armorStand.setMetadata("WastedVehicle", new FixedMetadataValue(this, vehicle)); + this.entityQueue.add(armorStand); + return armorStand; + } + return null; + } + + public String formatHealth(double health, double maxHealth) { + double amount = Math.floor((health <= 1 ? 0 : health) / maxHealth * 10); + ChatColor color = amount > 6 ? ChatColor.GREEN : amount > 4 ? ChatColor.YELLOW : amount > 2 ? ChatColor.RED : ChatColor.DARK_RED; + String s = color.toString(); + for(int i = 0; i < amount; i++) { + s += "▍"; + } + s += ChatColor.GRAY; + for(int i = 0; s.length() < 14; i++) { + s += "▍"; + } + return color + s; + } +} diff --git a/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/SpeedBoost.java b/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/SpeedBoost.java new file mode 100644 index 0000000..c100b64 --- /dev/null +++ b/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/SpeedBoost.java @@ -0,0 +1,31 @@ +package com.j0ach1mmall3.wastedvehicles.api; + +import org.bukkit.inventory.ItemStack; + +/** + * @author j0ach1mmall3 (business.j0ach1mmall3@gmail.com) + * @since 15/05/2016 + */ +public final class SpeedBoost { + private final ItemStack itemStack; + private final double speedBoost; + private final int duration; + + public SpeedBoost(ItemStack itemStack, double speedBoost, int duration) { + this.itemStack = itemStack; + this.speedBoost = speedBoost; + this.duration = duration; + } + + public ItemStack getItemStack() { + return this.itemStack; + } + + public double getSpeedBoost() { + return this.speedBoost; + } + + public int getDuration() { + return this.duration; + } +} diff --git a/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/VehicleProperties.java b/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/VehicleProperties.java new file mode 100644 index 0000000..2779cec --- /dev/null +++ b/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/VehicleProperties.java @@ -0,0 +1,166 @@ +package com.j0ach1mmall3.wastedvehicles.api; + +import org.bukkit.inventory.ItemStack; + +import java.util.List; +import java.util.Set; + +/** + * @author j0ach1mmall3 (business.j0ach1mmall3@gmail.com) + * @since 15/05/2016 + */ +public final class VehicleProperties { + private final String identifier; + private final VehicleType vehicleType; + private final double acceleration; + private final double deceleration; + private final double takeOffSpeed; + private final double rotationSpeed; + private final boolean invisible; + private final ItemStack item; + private final float boundingBoxWidth; + private final float boundingBoxHeight; + private final double launchLocationMultiplier; + private final double launchLocationYOffset; + private final double maxHealth; + private final boolean explode; + private final boolean damageVehicleOnPlayerHit; + private final int knockOutChance; + private final int passengers; + private final Set<SpeedBoost> speedBoosts; + private final double maxSpeed; + private final double defaultSpeed; + private final double collisionDamage; + private final String wastedGunsWeapon; + private final List<String> allowedWeapons; + private final List<String> allowedBlocks; + private final List<String> displayBlocks; + + public VehicleProperties(String identifier, VehicleType vehicleType, double acceleration, double deceleration, double takeOffSpeed, double rotationSpeed, boolean invisible, ItemStack item, float boundingBoxWidth, float boundingBoxHeight, double launchLocationMultiplier, double launchLocationYOffset, double maxHealth, boolean explode, boolean damageVehicleOnPlayerHit, int knockOutChance, int passengers, Set<SpeedBoost> speedBoosts, double maxSpeed, double defaultSpeed, double collisionDamage, String wastedGunsWeapon, List<String> allowedWeapons, List<String> allowedBlocks, List<String> displayBlocks) { + this.identifier = identifier; + this.vehicleType = vehicleType; + this.acceleration = acceleration; + this.deceleration = deceleration; + this.takeOffSpeed = takeOffSpeed; + this.rotationSpeed = rotationSpeed; + this.invisible = invisible; + this.item = item; + this.boundingBoxWidth = boundingBoxWidth; + this.boundingBoxHeight = boundingBoxHeight; + this.launchLocationMultiplier = launchLocationMultiplier; + this.launchLocationYOffset = launchLocationYOffset; + this.maxHealth = maxHealth; + this.explode = explode; + this.damageVehicleOnPlayerHit = damageVehicleOnPlayerHit; + this.knockOutChance = knockOutChance; + this.passengers = passengers; + this.speedBoosts = speedBoosts; + this.maxSpeed = maxSpeed; + this.defaultSpeed = defaultSpeed; + this.collisionDamage = collisionDamage; + this.wastedGunsWeapon = wastedGunsWeapon; + this.allowedWeapons = allowedWeapons; + this.allowedBlocks = allowedBlocks; + this.displayBlocks = displayBlocks; + } + + public String getIdentifier() { + return this.identifier; + } + + public VehicleType getVehicleType() { + return this.vehicleType; + } + + public double getAcceleration() { + return this.acceleration; + } + + public double getDeceleration() { + return this.deceleration; + } + + public double getTakeOffSpeed() { + return this.takeOffSpeed; + } + + public double getRotationSpeed() { + return this.rotationSpeed; + } + + public boolean isInvisible() { + return this.invisible; + } + + public ItemStack getItem() { + return this.item; + } + + public float getBoundingBoxWidth() { + return this.boundingBoxWidth; + } + + public float getBoundingBoxHeight() { + return this.boundingBoxHeight; + } + + public double getLaunchLocationMultiplier() { + return this.launchLocationMultiplier; + } + + public double getLaunchLocationYOffset() { + return this.launchLocationYOffset; + } + + public double getMaxHealth() { + return this.maxHealth; + } + + public boolean isExplode() { + return this.explode; + } + + public boolean isDamageVehicleOnPlayerHit() { + return this.damageVehicleOnPlayerHit; + } + + public int getKnockOutChance() { + return this.knockOutChance; + } + + public int getPassengers() { + return this.passengers; + } + + public Set<SpeedBoost> getSpeedBoosts() { + return this.speedBoosts; + } + + public double getMaxSpeed() { + return this.maxSpeed; + } + + public double getDefaultSpeed() { + return this.defaultSpeed; + } + + public double getCollisionDamage() { + return this.collisionDamage; + } + + public String getWastedGunsWeapon() { + return this.wastedGunsWeapon; + } + + public List<String> getAllowedWeapons() { + return this.allowedWeapons; + } + + public List<String> getAllowedBlocks() { + return this.allowedBlocks; + } + + public List<String> getDisplayBlocks() { + return this.displayBlocks; + } +} diff --git a/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/VehicleType.java b/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/VehicleType.java new file mode 100644 index 0000000..67ee32a --- /dev/null +++ b/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/VehicleType.java @@ -0,0 +1,13 @@ +package com.j0ach1mmall3.wastedvehicles.api; + +/** + * @author j0ach1mmall3 (business.j0ach1mmall3@gmail.com) + * @since 26/06/2016 + */ +public enum VehicleType { + CAR, + HELICOPTER, + PLANE, + BOAT, + SUBMARINE +} diff --git a/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/events/FuelUseEvent.java b/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/events/FuelUseEvent.java new file mode 100644 index 0000000..599f723 --- /dev/null +++ b/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/events/FuelUseEvent.java @@ -0,0 +1,45 @@ +package com.j0ach1mmall3.wastedvehicles.api.events; + + +import org.bukkit.entity.Player; +import org.bukkit.event.Cancellable; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +/** + * Created by Timothy Lampen on 8/22/2017. + */ +public class FuelUseEvent extends Event implements Cancellable { + private static final HandlerList HANDLER_LIST = new HandlerList(); + + private boolean cancelled; + private Player player; + + public FuelUseEvent(Player player){ + this.player = player; + } + + public Player getPlayer() { + return this.player; + } + + @Override + public boolean isCancelled() { + return cancelled; + } + + @Override + public void setCancelled(boolean b) { + this.cancelled = b; + } + + public static HandlerList getHandlerList() { + return HANDLER_LIST; + } + + @Override + public HandlerList getHandlers() { + return HANDLER_LIST; + } + +} diff --git a/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/events/JetpackFlyEvent.java b/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/events/JetpackFlyEvent.java new file mode 100644 index 0000000..27f9c66 --- /dev/null +++ b/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/events/JetpackFlyEvent.java @@ -0,0 +1,54 @@ +package com.j0ach1mmall3.wastedvehicles.api.events; + +import org.bukkit.entity.Player; +import org.bukkit.event.Cancellable; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +public final class JetpackFlyEvent extends Event implements Cancellable { + private static final HandlerList HANDLER_LIST = new HandlerList(); + + private final Player player; + private boolean cancelled; + private String message; + + public JetpackFlyEvent(Player player) { + this.player = player; + } + + public Player getPlayer() { + return this.player; + } + + public void cancel(String msg) { + this.cancelled = true; + this.message = msg; + } + + @Override + public boolean isCancelled() { + return this.cancelled; + } + + @Override + public void setCancelled(boolean cancelled) { + this.cancelled = cancelled; + } + + public String getMessage() { + return this.message; + } + + public void setMessage(String message) { + this.message = message; + } + + @Override + public HandlerList getHandlers() { + return HANDLER_LIST; + } + + public static HandlerList getHandlerList() { + return HANDLER_LIST; + } +} diff --git a/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/events/VehicleCreateEvent.java b/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/events/VehicleCreateEvent.java new file mode 100644 index 0000000..f883e96 --- /dev/null +++ b/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/events/VehicleCreateEvent.java @@ -0,0 +1,29 @@ +package com.j0ach1mmall3.wastedvehicles.api.events; + +import com.j0ach1mmall3.wastedvehicles.api.vehicles.WastedVehicle; +import org.bukkit.entity.Player; +import org.bukkit.event.HandlerList; + +public final class VehicleCreateEvent extends VehicleEvent { + private static final HandlerList HANDLER_LIST = new HandlerList(); + + private final Player player; + + public VehicleCreateEvent(WastedVehicle vehicle, Player player) { + super(vehicle); + this.player = player; + } + + public Player getPlayer() { + return this.player; + } + + @Override + public HandlerList getHandlers() { + return HANDLER_LIST; + } + + public static HandlerList getHandlerList() { + return HANDLER_LIST; + } +} diff --git a/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/events/VehicleDamageEvent.java b/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/events/VehicleDamageEvent.java new file mode 100644 index 0000000..f38cfc2 --- /dev/null +++ b/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/events/VehicleDamageEvent.java @@ -0,0 +1,46 @@ +package com.j0ach1mmall3.wastedvehicles.api.events; + +import com.j0ach1mmall3.wastedvehicles.api.vehicles.WastedVehicle; +import org.bukkit.entity.ArmorStand; +import org.bukkit.event.HandlerList; +import org.bukkit.event.entity.EntityDamageEvent; + +public final class VehicleDamageEvent extends VehicleEvent { + private static final HandlerList HANDLER_LIST = new HandlerList(); + + private final ArmorStand armorStand; + private final EntityDamageEvent.DamageCause cause; + private double damage; + + public VehicleDamageEvent(WastedVehicle vehicle, ArmorStand armorStand, EntityDamageEvent.DamageCause cause, double damage) { + super(vehicle); + this.armorStand = armorStand; + this.cause = cause; + this.damage = damage; + } + + public ArmorStand getArmorStand() { + return this.armorStand; + } + + public EntityDamageEvent.DamageCause getCause() { + return this.cause; + } + + public double getDamage() { + return this.damage; + } + + public void setDamage(double damage) { + this.damage = damage; + } + + @Override + public HandlerList getHandlers() { + return HANDLER_LIST; + } + + public static HandlerList getHandlerList() { + return HANDLER_LIST; + } +} diff --git a/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/events/VehicleDestroyEvent.java b/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/events/VehicleDestroyEvent.java new file mode 100644 index 0000000..9155e7e --- /dev/null +++ b/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/events/VehicleDestroyEvent.java @@ -0,0 +1,29 @@ +package com.j0ach1mmall3.wastedvehicles.api.events; + +import com.j0ach1mmall3.wastedvehicles.api.vehicles.WastedVehicle; +import org.bukkit.entity.ArmorStand; +import org.bukkit.event.HandlerList; + +public final class VehicleDestroyEvent extends VehicleEvent { + private static final HandlerList HANDLER_LIST = new HandlerList(); + + private final ArmorStand armorStand; + + public VehicleDestroyEvent(WastedVehicle vehicle, ArmorStand armorStand) { + super(vehicle); + this.armorStand = armorStand; + } + + public ArmorStand getArmorStand() { + return this.armorStand; + } + + @Override + public HandlerList getHandlers() { + return HANDLER_LIST; + } + + public static HandlerList getHandlerList() { + return HANDLER_LIST; + } +} diff --git a/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/events/VehicleEnterEvent.java b/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/events/VehicleEnterEvent.java new file mode 100644 index 0000000..0806c7b --- /dev/null +++ b/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/events/VehicleEnterEvent.java @@ -0,0 +1,36 @@ +package com.j0ach1mmall3.wastedvehicles.api.events; + +import com.j0ach1mmall3.wastedvehicles.api.vehicles.WastedVehicle; +import org.bukkit.entity.ArmorStand; +import org.bukkit.entity.Player; +import org.bukkit.event.HandlerList; + +public final class VehicleEnterEvent extends VehicleEvent { + private static final HandlerList HANDLER_LIST = new HandlerList(); + + private final Player player; + private final ArmorStand armorStand; + + public VehicleEnterEvent(WastedVehicle vehicle, Player player, ArmorStand armorStand) { + super(vehicle); + this.player = player; + this.armorStand = armorStand; + } + + public Player getPlayer() { + return this.player; + } + + public ArmorStand getArmorStand() { + return this.armorStand; + } + + @Override + public HandlerList getHandlers() { + return HANDLER_LIST; + } + + public static HandlerList getHandlerList() { + return HANDLER_LIST; + } +} diff --git a/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/events/VehicleEvent.java b/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/events/VehicleEvent.java new file mode 100644 index 0000000..c156197 --- /dev/null +++ b/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/events/VehicleEvent.java @@ -0,0 +1,28 @@ +package com.j0ach1mmall3.wastedvehicles.api.events; + +import com.j0ach1mmall3.wastedvehicles.api.vehicles.WastedVehicle; +import org.bukkit.event.Cancellable; +import org.bukkit.event.Event; + +public abstract class VehicleEvent extends Event implements Cancellable { + private final WastedVehicle vehicle; + private boolean cancelled; + + protected VehicleEvent(WastedVehicle vehicle) { + this.vehicle = vehicle; + } + + public WastedVehicle getVehicle() { + return this.vehicle; + } + + @Override + public boolean isCancelled() { + return this.cancelled; + } + + @Override + public void setCancelled(boolean cancelled) { + this.cancelled = cancelled; + } +} diff --git a/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/events/VehicleIgniteEvent.java b/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/events/VehicleIgniteEvent.java new file mode 100644 index 0000000..2e806a3 --- /dev/null +++ b/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/events/VehicleIgniteEvent.java @@ -0,0 +1,29 @@ +package com.j0ach1mmall3.wastedvehicles.api.events; + +import com.j0ach1mmall3.wastedvehicles.api.vehicles.WastedVehicle; +import org.bukkit.entity.ArmorStand; +import org.bukkit.event.HandlerList; + +public final class VehicleIgniteEvent extends VehicleEvent { + private static final HandlerList HANDLER_LIST = new HandlerList(); + + private final ArmorStand armorStand; + + public VehicleIgniteEvent(WastedVehicle vehicle, ArmorStand armorStand) { + super(vehicle); + this.armorStand = armorStand; + } + + public ArmorStand getArmorStand() { + return this.armorStand; + } + + @Override + public HandlerList getHandlers() { + return HANDLER_LIST; + } + + public static HandlerList getHandlerList() { + return HANDLER_LIST; + } +} diff --git a/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/events/VehicleImpactEntityEvent.java b/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/events/VehicleImpactEntityEvent.java new file mode 100644 index 0000000..7eb0d23 --- /dev/null +++ b/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/events/VehicleImpactEntityEvent.java @@ -0,0 +1,49 @@ +package com.j0ach1mmall3.wastedvehicles.api.events; + +import com.j0ach1mmall3.wastedvehicles.api.vehicles.WastedVehicle; +import com.j0ach1mmall3.wastedvehicles.util.SteerDirection; +import org.bukkit.entity.ArmorStand; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.event.HandlerList; + +public class VehicleImpactEntityEvent extends VehicleEvent { + private static final HandlerList HANDLER_LIST = new HandlerList(); + private final Player driver; + private final LivingEntity impactedEntity; + private final ArmorStand armorStand; + private final SteerDirection steerDirection; + + public VehicleImpactEntityEvent(WastedVehicle vehicle, Player driver, LivingEntity impactedEntity, ArmorStand armorStand, SteerDirection steerDirection) { + super(vehicle); + this.impactedEntity = impactedEntity; + this.driver = driver; + this.armorStand = armorStand; + this.steerDirection = steerDirection; + } + + public Player getDriver() { + return this.driver; + } + + public LivingEntity getImpactedEntity() { + return this.impactedEntity; + } + + public ArmorStand getArmorStand() { + return this.armorStand; + } + + public SteerDirection getSteerDirection() { + return this.steerDirection; + } + + @Override + public HandlerList getHandlers() { + return HANDLER_LIST; + } + + public static HandlerList getHandlerList() { + return HANDLER_LIST; + } +} diff --git a/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/events/VehicleImpactVehicleEvent.java b/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/events/VehicleImpactVehicleEvent.java new file mode 100644 index 0000000..0e2159d --- /dev/null +++ b/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/events/VehicleImpactVehicleEvent.java @@ -0,0 +1,60 @@ +package com.j0ach1mmall3.wastedvehicles.api.events; + +import com.j0ach1mmall3.wastedvehicles.api.vehicles.WastedVehicle; +import com.j0ach1mmall3.wastedvehicles.util.SteerDirection; +import org.bukkit.entity.ArmorStand; +import org.bukkit.entity.Player; +import org.bukkit.event.HandlerList; + +public class VehicleImpactVehicleEvent extends VehicleEvent { + private static final HandlerList HANDLER_LIST = new HandlerList(); + private final Player driver; + private final WastedVehicle collidedWith; + private final Player collidedWithDriver; + private final ArmorStand armorStand; + private final SteerDirection steerDirection; + private final ArmorStand collidedStand; + + public VehicleImpactVehicleEvent(WastedVehicle vehicle, Player driver, WastedVehicle collidedWith, Player collidedWithDriver, ArmorStand armorStand, ArmorStand collidedStand, SteerDirection steerDirection) { + super(vehicle); + this.driver = driver; + this.collidedWith = collidedWith; + this.collidedWithDriver = collidedWithDriver; + this.armorStand = armorStand; + this.steerDirection = steerDirection; + this.collidedStand = collidedStand; + } + + public Player getDriver() { + return this.driver; + } + + public WastedVehicle getCollidedWith() { + return this.collidedWith; + } + + public Player getCollidedWithDriver() { + return this.collidedWithDriver; + } + + public ArmorStand getArmorStand() { + return this.armorStand; + } + + public SteerDirection getSteerDirection() { + return this.steerDirection; + } + + public ArmorStand getCollidedStand() { + return this.collidedStand; + } + + @Override + public HandlerList getHandlers() { + return HANDLER_LIST; + } + + public static HandlerList getHandlerList() { + return HANDLER_LIST; + } +} diff --git a/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/events/VehicleLeaveEvent.java b/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/events/VehicleLeaveEvent.java new file mode 100644 index 0000000..062a4a1 --- /dev/null +++ b/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/events/VehicleLeaveEvent.java @@ -0,0 +1,36 @@ +package com.j0ach1mmall3.wastedvehicles.api.events; + +import com.j0ach1mmall3.wastedvehicles.api.vehicles.WastedVehicle; +import org.bukkit.entity.ArmorStand; +import org.bukkit.entity.Player; +import org.bukkit.event.HandlerList; + +public final class VehicleLeaveEvent extends VehicleEvent { + private static final HandlerList HANDLER_LIST = new HandlerList(); + + private final Player player; + private final ArmorStand armorStand; + + public VehicleLeaveEvent(WastedVehicle vehicle, Player player, ArmorStand armorStand) { + super(vehicle); + this.player = player; + this.armorStand = armorStand; + } + + public Player getPlayer() { + return this.player; + } + + public ArmorStand getArmorStand() { + return this.armorStand; + } + + @Override + public HandlerList getHandlers() { + return HANDLER_LIST; + } + + public static HandlerList getHandlerList() { + return HANDLER_LIST; + } +} diff --git a/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/events/VehiclePassengerEnterEvent.java b/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/events/VehiclePassengerEnterEvent.java new file mode 100644 index 0000000..0b4ad44 --- /dev/null +++ b/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/events/VehiclePassengerEnterEvent.java @@ -0,0 +1,36 @@ +package com.j0ach1mmall3.wastedvehicles.api.events; + +import com.j0ach1mmall3.wastedvehicles.api.vehicles.WastedVehicle; +import org.bukkit.entity.ArmorStand; +import org.bukkit.entity.Player; +import org.bukkit.event.HandlerList; + +public class VehiclePassengerEnterEvent extends VehicleEvent { + private static final HandlerList HANDLER_LIST = new HandlerList(); + + private final Player player; + private final ArmorStand armorStand; + + public VehiclePassengerEnterEvent(WastedVehicle vehicle, Player player, ArmorStand armorStand) { + super(vehicle); + this.player = player; + this.armorStand = armorStand; + } + + public Player getPlayer() { + return this.player; + } + + public ArmorStand getArmorStand() { + return this.armorStand; + } + + @Override + public HandlerList getHandlers() { + return HANDLER_LIST; + } + + public static HandlerList getHandlerList() { + return HANDLER_LIST; + } +} diff --git a/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/events/VehicleShootEvent.java b/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/events/VehicleShootEvent.java new file mode 100644 index 0000000..eb958bb --- /dev/null +++ b/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/events/VehicleShootEvent.java @@ -0,0 +1,42 @@ +package com.j0ach1mmall3.wastedvehicles.api.events; + +import com.j0ach1mmall3.wastedvehicles.api.vehicles.WastedVehicle; +import org.bukkit.entity.ArmorStand; +import org.bukkit.entity.Player; +import org.bukkit.event.Cancellable; +import org.bukkit.event.HandlerList; + +/** + * Created by Timothy Lampen on 1/4/2018. + */ +public class VehicleShootEvent extends VehicleEvent implements Cancellable{ + private static final HandlerList HANDLER_LIST = new HandlerList(); + + private final ArmorStand armorStand; + private final Player shooter; + + + public VehicleShootEvent(WastedVehicle vehicle, ArmorStand armorStand, Player shooter) { + super(vehicle); + this.armorStand = armorStand; + this.shooter = shooter; + } + + public Player getShooter() { + return shooter; + } + + + public ArmorStand getArmorStand() { + return this.armorStand; + } + + @Override + public HandlerList getHandlers() { + return HANDLER_LIST; + } + + public static HandlerList getHandlerList() { + return HANDLER_LIST; + } +} diff --git a/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/events/VehicleSpeedBoostEvent.java b/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/events/VehicleSpeedBoostEvent.java new file mode 100644 index 0000000..2684457 --- /dev/null +++ b/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/events/VehicleSpeedBoostEvent.java @@ -0,0 +1,47 @@ +package com.j0ach1mmall3.wastedvehicles.api.events; + +import com.j0ach1mmall3.wastedvehicles.api.SpeedBoost; +import com.j0ach1mmall3.wastedvehicles.api.vehicles.WastedVehicle; +import org.bukkit.entity.ArmorStand; +import org.bukkit.entity.Player; +import org.bukkit.event.HandlerList; + +public final class VehicleSpeedBoostEvent extends VehicleEvent { + private static final HandlerList HANDLER_LIST = new HandlerList(); + + private final Player player; + private final ArmorStand armorStand; + private SpeedBoost speedBoost; + + public VehicleSpeedBoostEvent(WastedVehicle vehicle, Player player, ArmorStand armorStand, SpeedBoost speedBoost) { + super(vehicle); + this.player = player; + this.armorStand = armorStand; + this.speedBoost = speedBoost; + } + + public Player getPlayer() { + return this.player; + } + + public ArmorStand getArmorStand() { + return this.armorStand; + } + + public SpeedBoost getSpeedBoost() { + return this.speedBoost; + } + + public void setSpeedBoost(SpeedBoost speedBoost) { + this.speedBoost = speedBoost; + } + + @Override + public HandlerList getHandlers() { + return HANDLER_LIST; + } + + public static HandlerList getHandlerList() { + return HANDLER_LIST; + } +} diff --git a/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/vehicles/Boat.java b/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/vehicles/Boat.java new file mode 100644 index 0000000..591cfe9 --- /dev/null +++ b/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/vehicles/Boat.java @@ -0,0 +1,62 @@ +package com.j0ach1mmall3.wastedvehicles.api.vehicles; + +import com.j0ach1mmall3.wastedvehicles.Main; +import com.j0ach1mmall3.wastedvehicles.api.VehicleProperties; +import com.j0ach1mmall3.wastedvehicles.util.SteerDirection; +import com.j0ach1mmall3.wastedvehicles.util.VehicleUtils; +import org.bukkit.Material; +import org.bukkit.entity.ArmorStand; +import org.bukkit.entity.Player; +import org.bukkit.util.Vector; + +import java.util.List; + +/** + * @author j0ach1mmall3 (business.j0ach1mmall3@gmail.com) + * @since 2/07/2016 + */ +public final class Boat extends WastedVehicle { + public Boat(Main plugin, VehicleProperties vehicleProperties) { + super(plugin, vehicleProperties); + } + + @Override + public void onSteer(ArmorStand armorStand, Player player, SteerDirection steerDirection) { + Material material = armorStand.getLocation().add(0, this.vehicleProperties.getBoundingBoxHeight(), 0).getBlock().getType(); + + if(material == Material.WATER || material == Material.STATIONARY_WATER) { + double boost = this.speedBoosts.isEmpty() ? 1 : this.speedBoosts.get(0); + + if(steerDirection.isLeft()) VehicleUtils.setYaw(armorStand, armorStand.getLocation().getYaw() - (float) this.vehicleProperties.getRotationSpeed()); + if(steerDirection.isRight()) VehicleUtils.setYaw(armorStand, armorStand.getLocation().getYaw() + (float) this.vehicleProperties.getRotationSpeed()); + if(steerDirection.isForward() && this.speed < this.vehicleProperties.getMaxSpeed()) this.speed += this.vehicleProperties.getAcceleration() * boost; + if(steerDirection.isBackward() && this.speed > -this.vehicleProperties.getMaxSpeed() / 2) this.speed -= this.vehicleProperties.getAcceleration() * boost / 2; + + VehicleUtils.makeJumping(armorStand); + armorStand.setVelocity(armorStand.getEyeLocation().getDirection().multiply(this.speed * boost).setY(0.05)); + } + } + + @Override + public void onTick(ArmorStand armorStand) { + Material material = armorStand.getLocation().add(0, this.vehicleProperties.getBoundingBoxHeight(), 0).getBlock().getType(); + if(material == Material.AIR) armorStand.setVelocity(new Vector(0, -0.5, 0)); + else { + if(this.speed > 0 && this.speed - this.vehicleProperties.getDeceleration() > 0) this.speed -= this.vehicleProperties.getDeceleration(); + if(this.speed < 0 && this.speed + this.vehicleProperties.getDeceleration() < 0) this.speed += this.vehicleProperties.getDeceleration(); + + double boost = this.speedBoosts.isEmpty() ? 1 : this.speedBoosts.get(0); + armorStand.setVelocity(armorStand.getEyeLocation().getDirection().multiply(this.speed * boost).setY(0)); + } + } + + @Override + public Vector getWeaponDirection(ArmorStand armorStand, Player player) { + return armorStand.getEyeLocation().getDirection().setY(0); + } + + @Override + public List<ArmorStand> getPassengers() { + return this.passengers; + } +} diff --git a/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/vehicles/Car.java b/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/vehicles/Car.java new file mode 100644 index 0000000..bbc28cf --- /dev/null +++ b/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/vehicles/Car.java @@ -0,0 +1,64 @@ +package com.j0ach1mmall3.wastedvehicles.api.vehicles; + +import com.j0ach1mmall3.wastedvehicles.Main; +import com.j0ach1mmall3.wastedvehicles.api.VehicleProperties; +import com.j0ach1mmall3.wastedvehicles.util.SteerDirection; +import com.j0ach1mmall3.wastedvehicles.util.VehicleUtils; +import org.bukkit.Material; +import org.bukkit.entity.ArmorStand; +import org.bukkit.entity.Player; +import org.bukkit.util.Vector; + +import java.util.List; + +/** + * @author j0ach1mmall3 (business.j0ach1mmall3@gmail.com) + * @since 17/05/2016 + */ +public final class Car extends WastedVehicle { + public Car(Main plugin, VehicleProperties vehicleProperties) { + super(plugin, vehicleProperties); + } + + @Override + public void onSteer(ArmorStand armorStand, Player player, SteerDirection steerDirection) { + double boost = this.speedBoosts.isEmpty() ? 1 : this.speedBoosts.get(0); + if(steerDirection.isLeft()) VehicleUtils.setYaw(armorStand, armorStand.getEyeLocation().getYaw() - (float) this.vehicleProperties.getRotationSpeed()); + if(steerDirection.isRight()) VehicleUtils.setYaw(armorStand, armorStand.getEyeLocation().getYaw() + (float) this.vehicleProperties.getRotationSpeed()); + if(steerDirection.isForward() && this.speed < this.vehicleProperties.getMaxSpeed()) this.speed += this.vehicleProperties.getAcceleration() * boost; + if(steerDirection.isBackward() && this.speed > -this.vehicleProperties.getMaxSpeed() / 2) this.speed -= this.vehicleProperties.getAcceleration() * boost / 2; + + VehicleUtils.makeJumping(armorStand); + + for(ArmorStand passenger : this.passengers) { + VehicleUtils.makeJumping(passenger); + } + } + + @Override + public void onTick(ArmorStand armorStand) { + if(armorStand.hasMetadata("WastedVehiclePassenger")) return; + armorStand.setFireTicks(0); + if(this.speed > 0 && this.speed - this.vehicleProperties.getDeceleration() > 0) this.speed -= this.vehicleProperties.getDeceleration(); + if(this.speed < 0 && this.speed + this.vehicleProperties.getDeceleration() < 0) this.speed += this.vehicleProperties.getDeceleration(); + + double boost = this.speedBoosts.isEmpty() ? 1 : this.speedBoosts.get(0); + armorStand.setVelocity(armorStand.getEyeLocation().getDirection().multiply(this.speed * boost).setY(MINECRAFT_GRAVITY)); + this.passengers.forEach(passenger -> { + VehicleUtils.teleport(passenger, armorStand.getLocation().add(0.75, -0.20, 0)); + passenger.setFireTicks(0); + VehicleUtils.setYaw(passenger, armorStand.getEyeLocation().getYaw()); + }); + if(armorStand.getLocation().getBlock().getType() == Material.WATER || armorStand.getLocation().getBlock().getType() == Material.STATIONARY_WATER) this.explode(armorStand); + } + + @Override + public Vector getWeaponDirection(ArmorStand armorStand, Player player) { + return armorStand.getEyeLocation().getDirection().setY(0); + } + + @Override + public List<ArmorStand> getPassengers() { + return this.passengers; + } +} \ No newline at end of file diff --git a/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/vehicles/Helicopter.java b/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/vehicles/Helicopter.java new file mode 100644 index 0000000..b4c6dc8 --- /dev/null +++ b/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/vehicles/Helicopter.java @@ -0,0 +1,45 @@ +package com.j0ach1mmall3.wastedvehicles.api.vehicles; + +import com.j0ach1mmall3.wastedvehicles.Main; +import com.j0ach1mmall3.wastedvehicles.api.VehicleProperties; +import com.j0ach1mmall3.wastedvehicles.util.SteerDirection; +import com.j0ach1mmall3.wastedvehicles.util.VehicleUtils; +import org.bukkit.Material; +import org.bukkit.entity.ArmorStand; +import org.bukkit.entity.Player; +import org.bukkit.util.Vector; + +import java.util.List; + +public final class Helicopter extends WastedVehicle { + public Helicopter(Main plugin, VehicleProperties vehicleProperties) { + super(plugin, vehicleProperties); + } + + @Override + public void onSteer(ArmorStand armorStand, Player player, SteerDirection steerDirection) { + double boost = this.speedBoosts.isEmpty() ? 1 : this.speedBoosts.get(0); + + VehicleUtils.setYaw(armorStand, player.getEyeLocation().getYaw()); + + Vector velocity = new Vector(0, 0, 0); + if(steerDirection.getForMotion() != 0.0) velocity.add(player.getEyeLocation().getDirection().setY(0).multiply(steerDirection.getForMotion()).multiply(this.speed * boost)); + if(steerDirection.getSideMotion() != 0.0) velocity.setY(-0.5 * steerDirection.getSideMotion()); + armorStand.setVelocity(velocity); + } + + @Override + public void onTick(ArmorStand armorStand) { + if(armorStand.getLocation().getBlock().getType() == Material.WATER || armorStand.getLocation().getBlock().getType() == Material.STATIONARY_WATER) this.explode(armorStand); + } + + @Override + public Vector getWeaponDirection(ArmorStand armorStand, Player player) { + return armorStand.getEyeLocation().getDirection().setY(-Math.PI / 4); + } + + @Override + public List<ArmorStand> getPassengers() { + return this.passengers; + } +} diff --git a/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/vehicles/Plane.java b/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/vehicles/Plane.java new file mode 100644 index 0000000..8c8228a --- /dev/null +++ b/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/vehicles/Plane.java @@ -0,0 +1,62 @@ +package com.j0ach1mmall3.wastedvehicles.api.vehicles; + +import com.j0ach1mmall3.wastedvehicles.Main; +import com.j0ach1mmall3.wastedvehicles.api.VehicleProperties; +import com.j0ach1mmall3.wastedvehicles.util.SteerDirection; +import com.j0ach1mmall3.wastedvehicles.util.VehicleUtils; +import org.bukkit.Material; +import org.bukkit.entity.ArmorStand; +import org.bukkit.entity.Player; +import org.bukkit.util.EulerAngle; +import org.bukkit.util.Vector; + +import java.util.List; + +/** + * @author j0ach1mmall3 (business.j0ach1mmall3@gmail.com) + * @since 17/05/2016 + */ +public final class Plane extends WastedVehicle { + public Plane(Main plugin, VehicleProperties vehicleProperties) { + super(plugin, vehicleProperties); + } + + @Override + public void onSteer(ArmorStand armorStand, Player player, SteerDirection steerDirection) { + double boost = this.speedBoosts.isEmpty() ? 1 : this.speedBoosts.get(0); + + VehicleUtils.setYaw(armorStand, player.getEyeLocation().getYaw()); + VehicleUtils.setPitch(armorStand, player.getEyeLocation().getPitch()); + armorStand.setHeadPose(new EulerAngle(Math.toRadians(player.getEyeLocation().getPitch()), 0, 0)); + + if(steerDirection.isForward() && this.speed < this.vehicleProperties.getMaxSpeed()) this.speed += this.vehicleProperties.getAcceleration() * boost; + if(steerDirection.isBackward() && this.speed > -this.vehicleProperties.getMaxSpeed() / 2) this.speed -= this.vehicleProperties.getAcceleration() * boost / 2; + + VehicleUtils.makeJumping(armorStand); + } + + @Override + public void onTick(ArmorStand armorStand) { + if(armorStand.getPassenger() == null) { + if(this.speed > 0 && this.speed - this.vehicleProperties.getDeceleration() > 0) this.speed -= this.vehicleProperties.getDeceleration(); + if(this.speed < 0 && this.speed + this.vehicleProperties.getDeceleration() < 0) this.speed += this.vehicleProperties.getDeceleration(); + } + + double boost = this.speedBoosts.isEmpty() ? 1 : this.speedBoosts.get(0); + Vector direction = armorStand.getEyeLocation().getDirection(); + if(this.speed < this.vehicleProperties.getTakeOffSpeed() && this.speed > -this.vehicleProperties.getTakeOffSpeed()) armorStand.setVelocity(direction.multiply(this.speed * boost).setY(4 * MINECRAFT_GRAVITY)); + else armorStand.setVelocity(direction.multiply(this.speed * boost)); + armorStand.setVelocity(direction.multiply(this.speed * boost)); + if(armorStand.getLocation().getBlock().getType() == Material.WATER || armorStand.getLocation().getBlock().getType() == Material.STATIONARY_WATER) this.explode(armorStand); + } + + @Override + public Vector getWeaponDirection(ArmorStand armorStand, Player player) { + return player.getEyeLocation().getDirection(); + } + + @Override + public List<ArmorStand> getPassengers() { + return this.passengers; + } +} \ No newline at end of file diff --git a/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/vehicles/Submarine.java b/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/vehicles/Submarine.java new file mode 100644 index 0000000..839a6f9 --- /dev/null +++ b/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/vehicles/Submarine.java @@ -0,0 +1,56 @@ +package com.j0ach1mmall3.wastedvehicles.api.vehicles; + +import com.j0ach1mmall3.wastedvehicles.Main; +import com.j0ach1mmall3.wastedvehicles.api.VehicleProperties; +import com.j0ach1mmall3.wastedvehicles.util.SteerDirection; +import com.j0ach1mmall3.wastedvehicles.util.VehicleUtils; +import org.bukkit.Material; +import org.bukkit.entity.ArmorStand; +import org.bukkit.entity.Player; +import org.bukkit.util.Vector; + +import java.util.List; + +/** + * @author j0ach1mmall3 (business.j0ach1mmall3@gmail.com) + * @since 2/07/2016 + */ +public final class Submarine extends WastedVehicle { + public Submarine(Main plugin, VehicleProperties vehicleProperties) { + super(plugin, vehicleProperties); + } + + @Override + public void onSteer(ArmorStand armorStand, Player player, SteerDirection steerDirection) { + Material material = armorStand.getLocation().getBlock().getType(); + Material material2 = player.getEyeLocation().getBlock().getType(); + if((material == Material.WATER || material == Material.STATIONARY_WATER) && (material2 == Material.WATER || material2 == Material.STATIONARY_WATER)) { + player.setRemainingAir(player.getMaximumAir()); + + double boost = this.speedBoosts.isEmpty() ? 1 : this.speedBoosts.get(0); + + VehicleUtils.setYaw(armorStand, player.getEyeLocation().getYaw()); + + Vector velocity = new Vector(0, 0, 0); + if(steerDirection.getForMotion() != 0.0) velocity.add(player.getEyeLocation().getDirection().setY(0).multiply(steerDirection.getForMotion()).multiply(this.speed * boost)); + if(steerDirection.getSideMotion() != 0.0) velocity.setY(-0.5 * steerDirection.getSideMotion()); + armorStand.setVelocity(velocity); + } + } + + @Override + public void onTick(ArmorStand armorStand) { + Material material = armorStand.getLocation().getBlock().getType(); + if(armorStand.getPassenger() == null && (material == Material.WATER || material == Material.STATIONARY_WATER)) armorStand.setVelocity(new Vector(0, 0, 0)); + } + + @Override + public Vector getWeaponDirection(ArmorStand armorStand, Player player) { + return armorStand.getEyeLocation().getDirection().setY(-Math.PI / 4); + } + + @Override + public List<ArmorStand> getPassengers() { + return this.passengers; + } +} diff --git a/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/vehicles/WastedVehicle.java b/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/vehicles/WastedVehicle.java new file mode 100644 index 0000000..8e2955a --- /dev/null +++ b/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/api/vehicles/WastedVehicle.java @@ -0,0 +1,396 @@ +package com.j0ach1mmall3.wastedvehicles.api.vehicles; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.UUID; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Effect; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.entity.ArmorStand; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.entity.Projectile; +import org.bukkit.entity.SmallFireball; +import org.bukkit.entity.TNTPrimed; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.metadata.FixedMetadataValue; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; +import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.util.Vector; + +import com.j0ach1mmall3.jlib.methods.Parsing; +import com.j0ach1mmall3.jlib.methods.ReflectionAPI; +import com.j0ach1mmall3.wastedvehicles.Main; +import com.j0ach1mmall3.wastedvehicles.api.SpeedBoost; +import com.j0ach1mmall3.wastedvehicles.api.VehicleProperties; +import com.j0ach1mmall3.wastedvehicles.api.events.VehicleDestroyEvent; +import com.j0ach1mmall3.wastedvehicles.api.events.VehicleIgniteEvent; +import com.j0ach1mmall3.wastedvehicles.api.events.VehiclePassengerEnterEvent; +import com.j0ach1mmall3.wastedvehicles.util.MiscUtil; +import com.j0ach1mmall3.wastedvehicles.util.SteerDirection; + +import net.grandtheftmc.core.Lang; + +/** + * @author j0ach1mmall3 (business.j0ach1mmall3@gmail.com) + * @since 17/05/2016 + */ +public abstract class WastedVehicle { + public static final double MINECRAFT_GRAVITY = -0.9; + + protected final Main plugin; + protected final VehicleProperties vehicleProperties; + protected final List<Double> speedBoosts = new ArrayList<>(); + protected ArmorStand driver; + protected double speed; + protected boolean cooldown; + protected boolean tick = true; + protected int displayBlock; + protected UUID creator; + protected List<ArmorStand> passengers = new ArrayList<>(); + + protected WastedVehicle(Main plugin, VehicleProperties vehicleProperties) { + this.plugin = plugin; + this.vehicleProperties = vehicleProperties; + } + + public final VehicleProperties getVehicleProperties() { + return this.vehicleProperties; + } + + public final double getSpeed() { + return this.speed; + } + + public final void setSpeed(double speed) { + this.speed = speed; + } + + public final boolean isCooldown() { + return this.cooldown; + } + + public final void setCooldown(boolean cooldown) { + this.cooldown = cooldown; + } + + public final boolean isTick() { + return this.tick; + } + + public final void setTick(boolean tick) { + this.tick = tick; + } + + public final UUID getCreator() { + return this.creator; + } + + public final void setCreator(UUID creator) { + this.creator = creator; + } + + public final ItemStack getNextDisplayBlock() { + if(this.displayBlock >= this.vehicleProperties.getDisplayBlocks().size()) this.displayBlock = 0; + return Parsing.parseItemStack(this.vehicleProperties.getDisplayBlocks().get(this.displayBlock++)); + } + + public void shootWeapon(Player player){ + double speed, blocksAhead; + switch (getVehicleProperties().getIdentifier().toLowerCase()) { + case "hydra": + speed = 15; + blocksAhead = 20; + case "rhino": + speed = 3; + blocksAhead =4; + Vector vector = this.driver.getEyeLocation().clone().getDirection().setY(-.03); + + + Projectile projectile = this.driver.getEyeLocation().clone().add(0,1,0).getWorld().spawn(this.driver.getEyeLocation().clone().add(0,1,0).add(this.driver.getEyeLocation().getDirection().clone().setY(0).normalize().multiply(blocksAhead)), SmallFireball.class); + projectile.setVelocity(vector.multiply(speed)); + projectile.setShooter(player); + projectile.setInvulnerable(true); + ((SmallFireball)projectile).setIsIncendiary(false); + + + + new BukkitRunnable() { + @Override + public void run() { + if(projectile.isDead() || !projectile.isValid() || projectile.getLocation().distance(player.getLocation())>200) { + this.cancel(); + return; + } + + if(projectile.getWorld() != player.getWorld()){ + this.cancel(); + return; + } + + Optional<Entity> nearestTarget = projectile.getNearbyEntities(1, 1, 1).stream().filter(entity -> entity instanceof LivingEntity).findFirst(); + if((nearestTarget.isPresent() && nearestTarget.get() != player && nearestTarget.get() != driver) || MiscUtil.getMiscUtil().getBlocksInRadius(projectile.getLocation(), 2).stream().anyMatch(block -> block.getType()!= Material.AIR)) { + TNTPrimed entity = (TNTPrimed) projectile.getWorld().spawnEntity(projectile.getLocation(), EntityType.PRIMED_TNT); + entity.setCustomName("EXPLOSIVE"); + entity.setCustomNameVisible(false); + entity.setFuseTicks(1); + projectile.getWorld().spigot().playEffect(projectile.getLocation(), Effect.EXPLOSION_HUGE, 0, 0, 0, 0, 0, 0.01F, 1, 50); + projectile.getWorld().playSound(projectile.getLocation(), Sound.ENTITY_GENERIC_EXPLODE, 5.0F, 5.0F); + this.cancel(); + } + } + }.runTaskTimer(plugin, 0, 1); + break; + } + } + + public final void onSpeedBoost(SpeedBoost speedBoost) { + this.speedBoosts.add(speedBoost.getSpeedBoost()); + Bukkit.getScheduler().scheduleSyncDelayedTask(this.plugin, () -> this.speedBoosts.remove(0), speedBoost.getDuration()); + } + + public final void onCreate(ArmorStand armorStand, Player player, Location l, double health) { + this.driver = armorStand; + armorStand.setVisible(false); + armorStand.setArms(false); + armorStand.setRemoveWhenFarAway(true); + armorStand.setCanPickupItems(false); + armorStand.setBasePlate(false); + armorStand.setMaxHealth(this.vehicleProperties.getMaxHealth()); + armorStand.setHealth(health); + armorStand.setHelmet(this.getNextDisplayBlock()); + armorStand.setCustomNameVisible(true); + this.updateName(armorStand, null); + + for(int i = 0; i < this.vehicleProperties.getPassengers(); i++) { + ArmorStand passenger = (ArmorStand)armorStand.getWorld().spawnEntity(l.add(1, 0, 0), EntityType.ARMOR_STAND); + passenger.setVisible(false); + passenger.setArms(false); + passenger.setRemoveWhenFarAway(true); + passenger.setCanPickupItems(false); + passenger.setBasePlate(false); + passenger.setGravity(false); + passenger.setMaxHealth(this.vehicleProperties.getMaxHealth()); + passenger.setHealth(health); + passenger.setMetadata("WastedVehiclePassenger", new FixedMetadataValue(this.plugin, this)); + passenger.setCollidable(true); + this.passengers.add(passenger); + try { + Object handle = ReflectionAPI.getHandle((Object) passenger); + handle.getClass().getMethod("setSize", float.class, float.class).invoke(handle, this.vehicleProperties.getBoundingBoxWidth(), this.vehicleProperties.getBoundingBoxHeight()); + } catch (Exception e) { + e.printStackTrace(); + } + } + + try { + Object handle = ReflectionAPI.getHandle((Object) armorStand); + handle.getClass().getMethod("setSize", float.class, float.class).invoke(handle, this.vehicleProperties.getBoundingBoxWidth(), this.vehicleProperties.getBoundingBoxHeight()); + } catch (Exception e) { + e.printStackTrace(); + } + + armorStand.teleport(l); + armorStand.setMetadata("WastedVehicle", new FixedMetadataValue(this.plugin, this)); + this.creator = player.getUniqueId(); + } + + public final void onDestroy(ArmorStand armorStand) { + VehicleDestroyEvent event = new VehicleDestroyEvent(this, armorStand); + Bukkit.getPluginManager().callEvent(event); + if(!event.isCancelled()) { + this.onDismount(armorStand); + this.plugin.getEntityQueue().remove(armorStand); + armorStand.setHelmet(null); + armorStand.remove(); + this.passengers.forEach(passenger -> { + if(passenger.getPassenger() != null) passenger.eject(); + passenger.setHealth(0); + passenger.remove(); + }); + } + } + + public final void passengerMount(ArmorStand armorStand, Player player) { + if(armorStand.getHealth() <= 1) return; + if(!armorStand.hasMetadata("WastedVehiclePassenger")) return; + WastedVehicle wastedVehicle = (WastedVehicle)armorStand.getMetadata("WastedVehiclePassenger").get(0).value(); + VehiclePassengerEnterEvent enterEvent = new VehiclePassengerEnterEvent(wastedVehicle, player, armorStand); + Bukkit.getPluginManager().callEvent(enterEvent); + if(enterEvent.isCancelled()) return; + if(armorStand.getPassenger() == null) { + if(wastedVehicle.getDriver().getPassenger() == null) { + if(Objects.equals(wastedVehicle.getCreator().toString(), player.getUniqueId().toString())) { + wastedVehicle.onRightClick(wastedVehicle.getDriver(), player); + return; + } + } + if(this.vehicleProperties.isInvisible()) { + Bukkit.getOnlinePlayers().forEach(p -> p.hidePlayer(player)); + player.addPotionEffect(new PotionEffect(PotionEffectType.INVISIBILITY, Integer.MAX_VALUE, 0, true, false)); + } + armorStand.setPassenger(player); + player.sendMessage(Lang.VEHICLES.f("&7You entered the passenger seat of a Vehicle")); + } else { + if(this.passengers.stream().noneMatch(passenger -> passenger.getPassenger() == null)) { + player.sendMessage(Lang.VEHICLES.f("&7No seats left!")); + return; + } + this.passengers.forEach(passenger -> { + if(passenger.getPassenger() == null) { + passenger.setPassenger(player); + Bukkit.getOnlinePlayers().forEach(p -> p.hidePlayer(player)); + player.addPotionEffect(new PotionEffect(PotionEffectType.INVISIBILITY, Integer.MAX_VALUE, 0, true, false)); + player.sendMessage(Lang.VEHICLES.f("&7You entered the passenger seat of a Vehicle")); + return; + } + }); + } + } + + public final void onRightClick(ArmorStand armorStand, Player player) { + if(armorStand.getHealth() <= 1) return; + if(armorStand.hasMetadata("WastedVehiclePassenger")) return; + if(armorStand.getPassenger() == null) { + Location l = armorStand.getLocation(); + l.setYaw(player.getEyeLocation().getYaw()); + l.setPitch(0); + armorStand.teleport(l); + if(this.vehicleProperties.isInvisible()) { + Bukkit.getOnlinePlayers().forEach(p -> p.hidePlayer(player)); + player.addPotionEffect(new PotionEffect(PotionEffectType.INVISIBILITY, Integer.MAX_VALUE, 0, true, false)); + } + armorStand.setPassenger(player); + this.updateName(armorStand, player); + this.speed = this.vehicleProperties.getDefaultSpeed(); + } + } + + public final void onDismount(ArmorStand armorStand) { + Player player = (Player) armorStand.getPassenger(); + if(player != null) { +// armorStand.eject(); + Bukkit.getOnlinePlayers().forEach(p -> p.showPlayer(player)); + player.removePotionEffect(PotionEffectType.INVISIBILITY); +// player.teleport(armorStand.getLocation().add(0, 1, 0)); + } + if(!armorStand.hasMetadata("WastedVehiclePassenger")) this.updateName(armorStand, null); + } + + public final void onDamage(ArmorStand armorStand, EntityDamageEvent.DamageCause damageCause, double damage) { + if(armorStand.hasMetadata("WastedVehiclePassenger")) return; + if(armorStand.getHealth() <= 1) return; + + switch (damageCause) { + case FALL: + case SUFFOCATION: + case DROWNING: + return; + case ENTITY_EXPLOSION: + case BLOCK_EXPLOSION: + if(!this.vehicleProperties.isExplode()) break; + armorStand.setHealth(1); + this.explode(armorStand); + return; + case CONTACT: + armorStand.setHealth(damage); + return; + } + + if(armorStand.getHealth() - damage > 1) armorStand.setHealth(armorStand.getHealth() - damage); + else armorStand.setHealth(1); + this.updateName(armorStand, (Player) armorStand.getPassenger()); + if(armorStand.getHealth() <= 1) { + if(this.vehicleProperties.isExplode()) { + VehicleIgniteEvent event = new VehicleIgniteEvent(this, armorStand); + Bukkit.getPluginManager().callEvent(event); + if(!event.isCancelled()) { + new BukkitRunnable() { + private int i; + @Override + public void run() { + if(this.i > 100) { + WastedVehicle.this.explode(armorStand); + this.cancel(); + } else { + this.i++; + armorStand.getWorld().spigot().playEffect(armorStand.getLocation().add(0, WastedVehicle.this.vehicleProperties.getBoundingBoxHeight() / 2, 0), Effect.FLAME, 0, 0, 0.5F, 0.5F, 0.5F, 0.001F, 20, 50); + } + } + }.runTaskTimer(this.plugin, 1, 1); + } + } else this.onDestroy(armorStand); + } + } + + public final void explode(ArmorStand armorStand) { + if(armorStand.hasMetadata("WastedVehiclePassenger")) return; + if(this.vehicleProperties.isExplode()) { + armorStand.getNearbyEntities(2.0, 2.0, 2.0).stream().filter(e -> e instanceof LivingEntity).map(e -> (LivingEntity) e).forEach(l -> { + + // TODO distance uses square root function, inefficient + double distance = l.getLocation().distance(armorStand.getLocation()); + + if (distance <= 0.2){ + // kill the entity + l.setHealth(0); + } + else{ + double newHealth = l.getHealth() - (20 / distance); + + // bounds check + if (newHealth >= l.getMaxHealth()){ + newHealth = l.getMaxHealth(); + } + if (newHealth <= 0){ + newHealth = 0; + } + + l.setHealth(newHealth); + } + }); + armorStand.getWorld().createExplosion(armorStand.getLocation(), 2, false); + if(armorStand.getPassenger() != null && armorStand.getPassenger().getType() == EntityType.PLAYER) { +// armorStand.getPassenger().eject(); + ((Player) armorStand.getPassenger()).setHealth(0); + } + } + this.onDestroy(armorStand); + } + + public final void updateName(ArmorStand armorStand, Player passenger) { + armorStand.setCustomName((passenger == null + ? + this.vehicleProperties.getItem().getItemMeta().getDisplayName() + : + ChatColor.GREEN.toString() + ChatColor.BOLD + passenger.getName()) + + + " (" + this.plugin.formatHealth(armorStand.getHealth(), this.vehicleProperties.getMaxHealth()) + ChatColor.GRAY + ')'); + } + + public ArmorStand getDriver() { + return this.driver; + } + + public abstract Vector getWeaponDirection(ArmorStand armorStand, Player player); + + public abstract void onSteer(ArmorStand armorStand, Player player, SteerDirection steerDirection); + + public abstract void onTick(ArmorStand armorStand); + + public abstract List<ArmorStand> getPassengers(); + + public void setPassengers(List<ArmorStand> passengers) { + this.passengers = passengers; + } +} diff --git a/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/commands/FixVehiclesCommandHandler.java b/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/commands/FixVehiclesCommandHandler.java new file mode 100644 index 0000000..c6ba4d5 --- /dev/null +++ b/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/commands/FixVehiclesCommandHandler.java @@ -0,0 +1,63 @@ +package com.j0ach1mmall3.wastedvehicles.commands; + +import com.j0ach1mmall3.jlib.commands.CommandHandler; +import com.j0ach1mmall3.wastedvehicles.Main; +import com.j0ach1mmall3.wastedvehicles.api.vehicles.WastedVehicle; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.ArmorStand; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; + +import java.util.Optional; + +/** + * Created by colt on 12/21/16. + */ +public class FixVehiclesCommandHandler extends CommandHandler<Main> { + public FixVehiclesCommandHandler(Main plugin) { + super(plugin); + } + + @Override + protected boolean handleCommand(CommandSender commandSender, String[] strings) { + if (!(commandSender instanceof Player)) { + commandSender.sendMessage("Players only!"); + return true; + } + Player sender = (Player) commandSender; + if(sender.getWorld().getName().equalsIgnoreCase("spawn")) { + sender.sendMessage("This cannot be used in spawn!"); + return true; + } + sender.getNearbyEntities(5, 5, 5).forEach(entity -> { + if (entity.getType() != EntityType.ARMOR_STAND) return; + ArmorStand armorStand = (ArmorStand) entity; + if(armorStand.hasMetadata("WastedVehiclePassenger")) return; + if (armorStand.hasMetadata("WastedVehicle")) { + if(armorStand.getPassenger() != null) return; + Optional<WastedVehicle> wastedVehicle = Optional.of((WastedVehicle) armorStand.getMetadata("WastedVehicle").get(0).value()); + if (wastedVehicle.isPresent()) { + wastedVehicle.get().onDestroy(armorStand); + } else { + armorStand.setHelmet(null); + armorStand.remove(); + } + } else if(armorStand.getHelmet() != null) { + armorStand.setHelmet(null); + armorStand.remove(); + } + }); + for(Entity entity : Bukkit.getWorld("minesantos").getEntities()) { + if(entity.getType() != EntityType.ARMOR_STAND) continue; + if(entity.hasMetadata("WastedVehicle") || entity.hasMetadata("WastedVehiclePassenger")) continue; + if(entity.getCustomName() == null || entity.getCustomName().isEmpty()) { + entity.remove(); + } + } + commandSender.sendMessage(ChatColor.GREEN + "Broken vehicle(s) cleared!"); + return true; + } +} diff --git a/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/commands/GiveVehicleCommandHandler.java b/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/commands/GiveVehicleCommandHandler.java new file mode 100644 index 0000000..9f0aed1 --- /dev/null +++ b/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/commands/GiveVehicleCommandHandler.java @@ -0,0 +1,45 @@ +package com.j0ach1mmall3.wastedvehicles.commands; + +import com.j0ach1mmall3.jlib.commands.CommandHandler; +import com.j0ach1mmall3.jlib.methods.General; +import com.j0ach1mmall3.wastedvehicles.Main; +import com.j0ach1mmall3.wastedvehicles.api.VehicleProperties; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.Optional; + +/** + * @author j0ach1mmall3 (business.j0ach1mmall3@gmail.com) + * @since 27/06/2016 + */ +public final class GiveVehicleCommandHandler extends CommandHandler<Main> { + public GiveVehicleCommandHandler(Main plugin) { + super(plugin); + } + + @Override + protected boolean handleCommand(CommandSender commandSender, String[] strings) { + if(strings.length < 2) { + commandSender.sendMessage(ChatColor.RED + "Usage: /givevehicle <identifier> <player>"); + return true; + } + + Optional<VehicleProperties> vehicle = this.plugin.getBabies().getVehicleProperties().stream().filter(v -> v.getIdentifier().equalsIgnoreCase(strings[0])).findFirst(); + if(!vehicle.isPresent()) { + commandSender.sendMessage(ChatColor.RED + "Unknown vehicle " + strings[0]); + return true; + } + + Player p = General.getPlayerByName(strings[1], false); + if(p == null) { + commandSender.sendMessage(ChatColor.RED + "Unknown player " + strings[1]); + return true; + } + + p.getInventory().addItem(vehicle.get().getItem()); + commandSender.sendMessage(ChatColor.GREEN + "Successfully gave " + vehicle.get().getIdentifier() + " to " + p.getName()); + return true; + } +} diff --git a/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/commands/WVReloadCommandHandler.java b/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/commands/WVReloadCommandHandler.java new file mode 100644 index 0000000..b2f8b17 --- /dev/null +++ b/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/commands/WVReloadCommandHandler.java @@ -0,0 +1,23 @@ +package com.j0ach1mmall3.wastedvehicles.commands; + +import com.j0ach1mmall3.jlib.commands.CommandHandler; +import com.j0ach1mmall3.wastedvehicles.Main; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; + +/** + * @author j0ach1mmall3 (business.j0ach1mmall3@gmail.com) + * @since 31/08/2016 + */ +public final class WVReloadCommandHandler extends CommandHandler<Main> { + public WVReloadCommandHandler(Main plugin) { + super(plugin); + } + + @Override + protected boolean handleCommand(CommandSender commandSender, String[] strings) { + this.plugin.reload(); + commandSender.sendMessage(ChatColor.GREEN + "Reloaded config!"); + return true; + } +} diff --git a/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/config/Config.java b/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/config/Config.java new file mode 100644 index 0000000..719fa33 --- /dev/null +++ b/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/config/Config.java @@ -0,0 +1,100 @@ +package com.j0ach1mmall3.wastedvehicles.config; + +import com.j0ach1mmall3.jlib.storage.file.yaml.ConfigLoader; +import com.j0ach1mmall3.wastedvehicles.Main; +import com.j0ach1mmall3.wastedvehicles.api.SpeedBoost; +import com.j0ach1mmall3.wastedvehicles.api.VehicleProperties; +import com.j0ach1mmall3.wastedvehicles.api.VehicleType; +import org.bukkit.inventory.ItemStack; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +/** + * @author j0ach1mmall3 (business.j0ach1mmall3@gmail.com) + * @since 5/05/2016 + */ +public final class Config extends ConfigLoader<Main> { + private final ItemStack jetpackItem; + private final boolean jetpackFuelEnabled; + private final ItemStack jetpackFuelItem; + private final int jetpackFuelInterval; + private final List<String> jetpackAllowedWeapons; + private final List<VehicleProperties> vehicleProperties; + + public Config(Main plugin) { + super("config.yml", plugin); + this.jetpackItem = this.customConfig.getItemNew(this.config, "Jetpack.Item"); + this.jetpackFuelEnabled = this.config.getBoolean("Jetpack.Fuel.Enabled"); +// this.jetpackFuelItem = this.customConfig.getItemNew(this.config, "Jetpack.Fuel.Item"); + this.jetpackFuelItem = this.customConfig.getItemNew(this.config, "Jetpack.Fuel.Item"); + this.jetpackFuelInterval = this.config.getInt("Jetpack.Fuel.Interval"); + this.jetpackAllowedWeapons = this.config.getStringList("Jetpack.AllowedWeapons"); + this.vehicleProperties = this.loadVehicleProperties(); + } + + private List<VehicleProperties> loadVehicleProperties() { + List<VehicleProperties> vehicleProperties = new ArrayList<>(); + this.customConfig.getKeys("Vehicles").forEach(s -> vehicleProperties.add(new VehicleProperties( + s, + VehicleType.valueOf(this.config.getString("Vehicles." + s + ".VehicleType").toUpperCase()), + this.config.getDouble("Vehicles." + s + ".Acceleration"), + this.config.getDouble("Vehicles." + s + ".Deceleration"), + this.config.getDouble("Vehicles." + s + ".TakeOffSpeed"), + this.config.getDouble("Vehicles." + s + ".RotationSpeed"), + this.config.getBoolean("Vehicles." + s + ".Invisible"), + this.customConfig.getItemNew(this.config, "Vehicles." + s + ".Item"), + (float) this.config.getDouble("Vehicles." + s + ".BoundingBoxWidth"), + (float) this.config.getDouble("Vehicles." + s + ".BoundingBoxHeight"), + this.config.getDouble("Vehicles." + s + ".LaunchLocationMultiplier"), + this.config.getDouble("Vehicles." + s + ".LaunchLocationYOffset"), + this.config.getDouble("Vehicles." + s + ".MaxHealth"), + this.config.getBoolean("Vehicles." + s + ".Explode"), + this.config.getBoolean("Vehicles." + s + ".DamageVehicleOnPlayerHit"), + this.config.getInt("Vehicles." + s + ".KnockOutChance"), + this.config.getInt("Vehicles." + s + ".Passengers"), + this.loadSpeedBoosts("Vehicles." + s + ".SpeedBoosts"), + this.config.getDouble("Vehicles." + s + ".MaxSpeed"), + this.config.getDouble("Vehicles." + s + ".DefaultSpeed"), + this.config.getDouble("Vehicles." + s + ".CollisionDamage"), + this.config.getString("Vehicles." + s + ".WastedGunsWeapon"), + this.config.getStringList("Vehicles." + s + ".AllowedWeapons"), + this.config.getStringList("Vehicles." + s + ".AllowedBlocks"), + this.config.getStringList("Vehicles." + s + ".DisplayBlocks") + ) + )); + return vehicleProperties; + } + + private Set<SpeedBoost> loadSpeedBoosts(String path) { + Set<SpeedBoost> speedBoosts = new HashSet<>(); + this.customConfig.getKeys(path).forEach(s -> speedBoosts.add(new SpeedBoost(this.customConfig.getItemNew(this.config, path + ".Item"), this.config.getDouble(path + ".SpeedBoost"), this.config.getInt(path + ".Duration")))); + return speedBoosts; + } + + public ItemStack getJetpackItem() { + return this.jetpackItem; + } + + public boolean isJetpackFuelEnabled() { + return this.jetpackFuelEnabled; + } + + public ItemStack getJetpackFuelItem() { + return this.jetpackFuelItem; + } + + public int getJetpackFuelInterval() { + return this.jetpackFuelInterval; + } + + public List<String> getJetpackAllowedWeapons() { + return this.jetpackAllowedWeapons; + } + + public List<VehicleProperties> getVehicleProperties() { + return this.vehicleProperties; + } +} diff --git a/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/listeners/JetpackListener.java b/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/listeners/JetpackListener.java new file mode 100644 index 0000000..f6e3602 --- /dev/null +++ b/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/listeners/JetpackListener.java @@ -0,0 +1,247 @@ +package com.j0ach1mmall3.wastedvehicles.listeners; + +import java.util.HashSet; +import java.util.Objects; +import java.util.Set; +import java.util.UUID; + +import org.bukkit.Bukkit; +import org.bukkit.Effect; +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.block.BlockFace; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.player.PlayerMoveEvent; +import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.event.player.PlayerToggleFlightEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.scheduler.BukkitRunnable; + +import com.j0ach1mmall3.jlib.player.JLibPlayer; +import com.j0ach1mmall3.wastedguns.api.events.WeaponRightClickEvent; +import com.j0ach1mmall3.wastedvehicles.Main; +import com.j0ach1mmall3.wastedvehicles.api.events.FuelUseEvent; +import com.j0ach1mmall3.wastedvehicles.api.events.JetpackFlyEvent; + +import net.grandtheftmc.core.anticheat.check.CheatType; +import net.grandtheftmc.core.anticheat.event.MovementCheatEvent; + +/** + * @author j0ach1mmall3 (business.j0ach1mmall3@gmail.com) + * @since 5/05/2016 + */ +public final class JetpackListener implements Listener { + private final Main plugin; + private final Set<UUID> active = new HashSet<>(); + + public JetpackListener(Main plugin) { + this.plugin = plugin; + plugin.getServer().getPluginManager().registerEvents(this, plugin); + Bukkit.getScheduler().scheduleAsyncRepeatingTask(this.plugin, () -> { + Bukkit.getOnlinePlayers().stream() + .filter(p -> { + return p.isFlying() && p.getGameMode() != GameMode.CREATIVE && p.getInventory().getChestplate() != null && isJetpack(p.getInventory().getChestplate()); + }).forEach(p -> new JLibPlayer(p).playSound(Sound.BLOCK_FIRE_EXTINGUISH)); + }, 5L, 5L); + } + + @EventHandler + public void onInventoryClick(InventoryClickEvent e) { + Player p = (Player) e.getWhoClicked(); + if (e.getSlot() == 38 && isJetpack(e.getCurrentItem()) && p.isFlying()) + p.setAllowFlight(false); + } + + private void updateFly(Player p, boolean state) { + if (p.getAllowFlight() != state) { + p.setAllowFlight(state); + } + } + + private void updateFlying(Player p, boolean state) { + if (p.isFlying() != state) { + p.setFlying(state); + } + } + + @EventHandler + public void onPlayerMove(PlayerMoveEvent e) { + Player p = e.getPlayer(); + Location from = e.getFrom(); + Location to = e.getTo(); + + if (from.getX() == to.getX() && from.getY() == to.getY() && from.getZ() == to.getZ()) { + return; + } + + if (!p.getAllowFlight()) { + this.updateFly(p, false); + p.setFlying(false); + } + + if (p.getGameMode() == GameMode.CREATIVE || p.getGameMode() == GameMode.SPECTATOR) { + this.updateFly(p, true); + return; + } + + if (p.getInventory().getChestplate() != null && isJetpack(p.getInventory().getChestplate())) { + if (p.isFlying() && p.getAllowFlight()) { + p.getWorld().spigot().playEffect(p.getLocation().add(0, 1, 0), Effect.CLOUD, 0, 0, 0, 0, 0, 0, 1, 50); + p.getWorld().spigot().playEffect(p.getLocation().add(0, 1, 0), Effect.FLAME, 0, 0, 0, 0, 0, 0, 1, 50); + } + if (this.plugin.getBabies().isJetpackFuelEnabled() && !containsAtLeast(p, 1)) { + this.updateFly(p, false); + p.setFlying(false); + } else { + boolean c = e.getTo().getY() < e.getFrom().getY() && e.getTo().getBlock().getRelative(BlockFace.DOWN).getType() != Material.AIR; + this.updateFly(p, !c); + } + } else { + this.updateFly(p, false); + } + } + + @EventHandler + public void onLeave(PlayerQuitEvent event){ + Player p = event.getPlayer(); + if(p.getInventory().getChestplate()!=null && isJetpack(p.getInventory().getChestplate())) { + updateFlying(p, false); + updateFly(p, false); + } + } + + @EventHandler(ignoreCancelled = true) + public void onPlayerToggleFlight(PlayerToggleFlightEvent e) { + Player p = e.getPlayer(); + + JetpackFlyEvent event = new JetpackFlyEvent(p); + Bukkit.getPluginManager().callEvent(event); + if(event.isCancelled()) { + e.setCancelled(true); + return; + } + + if (p.getGameMode() == GameMode.CREATIVE || p.getGameMode() == GameMode.SPECTATOR) { + p.setAllowFlight(true); + return; + } + + if (!this.active.contains(p.getUniqueId())){ + this.active.add(p.getUniqueId()); + new BukkitRunnable() { + @Override + public void run() { + if (!p.isOnline()) { + this.cancel(); + return; + } + if (p.isFlying()) { + FuelUseEvent fuelUseEvent = new FuelUseEvent(p); + Bukkit.getPluginManager().callEvent(fuelUseEvent); + if(fuelUseEvent.isCancelled()) {//this means that fuel shouldnt be used + return; + } + else if (JetpackListener.this.plugin.getBabies().isJetpackFuelEnabled() && !containsAtLeast(p, 1)) { + Bukkit.getScheduler().runTask(JetpackListener.this.plugin, () -> { + p.setAllowFlight(false); + p.setFlying(false); + }); + JetpackListener.this.active.remove(p.getUniqueId()); + this.cancel(); + } else { + ItemStack itemStack = JetpackListener.this.plugin.getBabies().getJetpackFuelItem().clone(); + for (ItemStack item : p.getInventory().getContents()) { + if (item != null && Objects.equals(item.getType(), itemStack.getType()) + && Objects.equals(item.getItemMeta().getDisplayName(), itemStack.getItemMeta().getDisplayName())) { + if (item.getAmount() == 1) { + p.getInventory().remove(item); + } else { + item.setAmount(item.getAmount() - 1); + } + + break; + } + } + } + } else { + JetpackListener.this.active.remove(p.getUniqueId()); + + if(p.isOnline()) { + Bukkit.getScheduler().runTask(JetpackListener.this.plugin, () -> { + p.setAllowFlight(false); + p.setFlying(false); + }); + this.cancel(); + } + } + } + }.runTaskTimerAsynchronously(this.plugin, 0, this.plugin.getBabies().getJetpackFuelInterval()); + } + } + + @EventHandler(priority = EventPriority.LOW) + public void onWeaponRightClick(WeaponRightClickEvent e) { + LivingEntity entity = e.getLivingEntity(); + if (entity.getEquipment().getChestplate() != null && isJetpack(entity.getEquipment().getChestplate()) && this.plugin.getBabies().getJetpackAllowedWeapons().contains(e.getWeapon().getCompactName()))//getIdentifier + e.setCancelled(true); + } + + private boolean isJetpack(ItemStack itemStack) { + if(itemStack != null && this.plugin.getBabies().getJetpackItem() != null) { + if (itemStack.getType() != this.plugin.getBabies().getJetpackItem().getType()) { + return false; + } + + if (itemStack.getItemMeta() == null || itemStack.getItemMeta().getDisplayName() == null || !itemStack.getItemMeta().getDisplayName().contains("Jetpack")) { + return false; + } + return true; + } + return false; + } + + private boolean containsAtLeast(Player player, int amount) { + + for (int i = 0; i < player.getInventory().getSize(); i++) { + + ItemStack item = player.getInventory().getContents()[i]; + ItemStack fuelItem = this.plugin.getBabies().getJetpackFuelItem(); + + if (item != null && item.getType().equals(fuelItem.getType()) && item.getItemMeta().getDisplayName().equals(fuelItem.getItemMeta().getDisplayName())) { + + if (item.getAmount() < 1 || item.getAmount() >= amount) { + return true; + } + } + } + + return false; + } + + @EventHandler + protected final void onMovementCheat(MovementCheatEvent<Double> event) { + Player player = event.getPlayerData().getPlayer(); + if(player == null) return; + if(event.getCheatType().getType() != CheatType.Type.SPEED) return; + + //System.out.println("Max speed: " + event.getObj()); + + if(player.isFlying() && player.getAllowFlight()) { + if (player.getEquipment().getChestplate() != null && isJetpack(player.getEquipment().getChestplate())) + event.setCancelled(true); + } + } + + @EventHandler + protected final void onPlayerLeave(PlayerQuitEvent event) { + if(this.active.contains(event.getPlayer().getUniqueId())) + this.active.remove(event.getPlayer().getUniqueId()); + } +} diff --git a/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/listeners/VehicleListener.java b/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/listeners/VehicleListener.java new file mode 100644 index 0000000..47926f3 --- /dev/null +++ b/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/listeners/VehicleListener.java @@ -0,0 +1,475 @@ +package com.j0ach1mmall3.wastedvehicles.listeners; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Objects; +import java.util.Optional; + +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.entity.ArmorStand; +import org.bukkit.entity.Creature; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.player.PlayerInteractAtEntityEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerKickEvent; +import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.event.world.ChunkUnloadEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.potion.PotionEffectType; +import org.bukkit.util.Vector; +import org.spigotmc.event.entity.EntityDismountEvent; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketAdapter; +import com.comphenix.protocol.events.PacketEvent; +import com.j0ach1mmall3.jlib.integration.protocollib.ProtocolLibHook; +import com.j0ach1mmall3.jlib.inventory.JLibItem; +import com.j0ach1mmall3.wastedguns.api.events.WeaponRightClickEvent; +import com.j0ach1mmall3.wastedguns.api.events.explosives.ExplosionDamageEntityEvent; +import com.j0ach1mmall3.wastedvehicles.Main; +import com.j0ach1mmall3.wastedvehicles.api.SpeedBoost; +import com.j0ach1mmall3.wastedvehicles.api.VehicleType; +import com.j0ach1mmall3.wastedvehicles.api.events.VehicleDamageEvent; +import com.j0ach1mmall3.wastedvehicles.api.events.VehicleEnterEvent; +import com.j0ach1mmall3.wastedvehicles.api.events.VehicleImpactEntityEvent; +import com.j0ach1mmall3.wastedvehicles.api.events.VehicleImpactVehicleEvent; +import com.j0ach1mmall3.wastedvehicles.api.events.VehicleLeaveEvent; +import com.j0ach1mmall3.wastedvehicles.api.events.VehicleShootEvent; +import com.j0ach1mmall3.wastedvehicles.api.events.VehicleSpeedBoostEvent; +import com.j0ach1mmall3.wastedvehicles.api.vehicles.Submarine; +import com.j0ach1mmall3.wastedvehicles.api.vehicles.WastedVehicle; +import com.j0ach1mmall3.wastedvehicles.util.MiscUtil; +import com.j0ach1mmall3.wastedvehicles.util.SteerDirection; +import com.j0ach1mmall3.wastedvehicles.util.VehicleUtils; + +import net.grandtheftmc.core.Core; +import net.grandtheftmc.core.Lang; +import net.grandtheftmc.core.anticheat.event.MovementCheatEvent; +import net.grandtheftmc.core.users.User; +import net.grandtheftmc.core.util.ServerUtil; +import net.grandtheftmc.guns.GTMGuns; +import net.grandtheftmc.guns.weapon.Weapon; +import net.grandtheftmc.guns.weapon.ranged.RangedWeapon; + +public final class VehicleListener implements Listener { + private final MiscUtil miscUtil = MiscUtil.getMiscUtil(); + private final Main plugin; + + public VehicleListener(Main plugin) { + this.plugin = plugin; + plugin.getServer().getPluginManager().registerEvents(this, plugin); + new ProtocolLibHook().addPacketAdapter(new PacketAdapter(plugin, PacketType.Play.Client.STEER_VEHICLE) { + @Override + public void onPacketReceiving(PacketEvent event) { + Player p = event.getPlayer(); + if (p.isInsideVehicle()) { + Entity e = p.getVehicle(); + if (e.hasMetadata("WastedVehiclePassenger")) return; + if (e.hasMetadata("WastedVehicle")) { + ArmorStand armorStand = (ArmorStand) e; + SteerDirection steerDirection = new SteerDirection(event.getPacket()); + WastedVehicle wastedVehicle = (WastedVehicle) armorStand.getMetadata("WastedVehicle").get(0).value(); + if (Objects.equals(armorStand.getWorld().getName(), "spawn")) { + wastedVehicle.onDestroy(armorStand); + return; + } + Location l = armorStand.getLocation(); + l.setX(l.getX() + wastedVehicle.getVehicleProperties().getLaunchLocationMultiplier() * l.getDirection().getX()); + l.setY(l.getY() + wastedVehicle.getVehicleProperties().getLaunchLocationYOffset()); + l.setZ(l.getZ() + wastedVehicle.getVehicleProperties().getLaunchLocationMultiplier() * l.getDirection().getZ()); + Vector v = wastedVehicle.getWeaponDirection(armorStand, p); + if (wastedVehicle.getVehicleProperties().getVehicleType() == VehicleType.PLANE) { + if (Objects.equals(VehicleListener.this.miscUtil.getCardinalDirection(l), "East")) { + l.setX(l.getX() - 3); + } else if (Objects.equals(VehicleListener.this.miscUtil.getCardinalDirection(l), "North")) { + l.setZ(l.getZ() - 3); + } else if (Objects.equals(VehicleListener.this.miscUtil.getCardinalDirection(l), "West")) { + l.setX(l.getX() + 3); + } else if (Objects.equals(VehicleListener.this.miscUtil.getCardinalDirection(l), "South")) { + l.setZ(l.getZ() + 3); + } + if (l.getPitch() >= 30) { + l.setPitch(l.getPitch() + 15); + } else if (l.getPitch() >= -30) { + l.setPitch(l.getPitch() - 15); + } + l.setY(l.getY() - 3); + } + if (VehicleUtils.getBoundingBox(armorStand) != null) { + Location loc1 = VehicleUtils.getBoundingBox(armorStand)[0]; + Location loc2 = VehicleUtils.getBoundingBox(armorStand)[1]; + Collection<LivingEntity> nearbyEntities = new ArrayList<>(); + Collection<ArmorStand> nearbyVehicles = new ArrayList<>(); + for (Entity entity : loc1.getWorld().getNearbyEntities(loc1, loc2.getX(), loc2.getY(), loc2.getZ())) { + if (entity.getType() == EntityType.ARMOR_STAND && entity.hasMetadata("WastedVehicle")) { + if (entity == armorStand) continue; + if (entity.hasMetadata("WastedVehiclePassenger")) continue; + nearbyVehicles.add((ArmorStand) entity); + continue; + } + if (entity.getType() != EntityType.PLAYER && !(entity instanceof Creature)) continue; + if (entity == p) continue; + if (entity.getVehicle() != null && entity.getVehicle().hasMetadata("WastedVehiclePassenger")) + continue; + nearbyEntities.add((LivingEntity) entity); + } + for (ArmorStand as : nearbyVehicles) { + Vector vec1 = new Vector(loc1.getX(), loc1.getY(), loc1.getZ()); + Vector vec2 = new Vector(loc2.getX(), loc2.getY(), loc2.getZ()); + Vector asVector = new Vector(as.getLocation().getX(), as.getLocation().getY(), + as.getLocation().getZ()); + if (asVector.isInAABB(vec1, vec2)) { + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(this.plugin, new Runnable() { + @Override + public void run() { + if (!(as.getMetadata("WastedVehicle").get(0).value() instanceof WastedVehicle)) + return; + WastedVehicle collidedWith = (WastedVehicle) as.getMetadata("WastedVehicle").get(0).value(); + if (as.getPassenger() == null || as.getPassenger().getType() != EntityType.PLAYER) + return; + Player collidedWithPlayer = (Player) as.getPassenger(); + VehicleImpactVehicleEvent impactEvent = + new VehicleImpactVehicleEvent(wastedVehicle, p, collidedWith, + collidedWithPlayer, armorStand, as, steerDirection); + plugin.getServer().getPluginManager().callEvent(impactEvent); + } + }, 0L); + } + } + for (LivingEntity livingEntity : nearbyEntities) { + Vector vec1 = new Vector(loc1.getX(), loc1.getY(), loc1.getZ()); + Vector vec2 = new Vector(loc2.getX(), loc2.getY(), loc2.getZ()); + Vector pVector = new Vector(livingEntity.getLocation().getX(), livingEntity.getLocation().getY(), + livingEntity.getLocation().getZ()); + if (pVector.isInAABB(vec1, vec2)) { + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(this.plugin, new Runnable() { + @Override + public void run() { + VehicleImpactEntityEvent entityEvent = new VehicleImpactEntityEvent(wastedVehicle, p, livingEntity, armorStand, steerDirection); + plugin.getServer().getPluginManager().callEvent(entityEvent); + } + }, 0L); + } + } + } + if (steerDirection.isJump() && !wastedVehicle.isCooldown() && armorStand.getHealth() > 1 && l != null && v != null) { + if (wastedVehicle.getVehicleProperties().getVehicleType() == VehicleType.PLANE && armorStand.getTicksLived() <= 140) { + p.sendMessage(Lang.VEHICLES.f("&7Get in the air before firing your weapon!")); + event.setCancelled(true); + return; + } + Optional<Weapon<?>> weapon = GTMGuns.getInstance().getWeaponManager().getWeapon(wastedVehicle.getVehicleProperties().getWastedGunsWeapon()); + // TODO remove debug + ServerUtil.debug("[VehicleListener][DEBUG] - " + (weapon.isPresent() ? "exists as=" + weapon.get().getName() : "does not exist")); + if (weapon.isPresent() && weapon.get() instanceof RangedWeapon) { + Bukkit.getScheduler().callSyncMethod(this.plugin, () -> { + ((RangedWeapon) weapon.get()).vehicleShoot(p, l, v/*, GTMGuns.getInstance().getWeaponManager().getPlayerCache(p.getUniqueId())*/, ((RangedWeapon) weapon.get()).isAutomatic()); + return null; + }); + wastedVehicle.setCooldown(true); + Bukkit.getScheduler().scheduleSyncDelayedTask(this.plugin, () -> wastedVehicle.setCooldown(false), weapon.get().getDelay()); + } + } + if (wastedVehicle.getVehicleProperties().getDisplayBlocks().size() > 1 && wastedVehicle.isTick()){ + armorStand.setHelmet(wastedVehicle.getNextDisplayBlock()); + } + + wastedVehicle.setTick(!wastedVehicle.isTick()); + wastedVehicle.onSteer(armorStand, p, steerDirection); + } + } + } + }); + Bukkit.getScheduler().scheduleSyncRepeatingTask(this.plugin, () -> this.plugin.getEntityQueue().forEach(a -> ((WastedVehicle) a.getMetadata("WastedVehicle").get(0).value()).onTick(a)), 1, 1); + } + + + /** + * You may be thinking "Holy fuck Tim, this code is absolutely disgusting, why don't you just add a method to the rhino / hydra vehicle class??? Oh wait.." + * Yea, there are no vehicle-specific classes like how there are with weapons. So the cooldowns / shooting has to be hardcoded. This can be changed in the + * future, but this plugin would have to be rewritten. + */ + @EventHandler + public void onVehicleShoot(VehicleShootEvent event) { + Player player = event.getShooter(); + User user = Core.getUserManager().getLoadedUser(player.getUniqueId()); + WastedVehicle wastedVehicle = event.getVehicle(); + switch (wastedVehicle.getVehicleProperties().getIdentifier().toLowerCase()) { + case "hydra": + if(user.isOnCooldown("hydra_shoot", true)) + break; + user.addCooldown("hydra_shoot", 1, false, true); + wastedVehicle.shootWeapon(player); + break; + case "rhino": + if(user.isOnCooldown("rhino_shoot", true)) + break; + user.addCooldown("rhino_shoot", 2, false, true); + wastedVehicle.shootWeapon(player); + break; + } + } + + @EventHandler + public void onVehicleImpactEntity(VehicleImpactEntityEvent event) { + WastedVehicle vehicle = event.getVehicle(); + Player driver = event.getDriver(); + LivingEntity livingEntity = event.getImpactedEntity(); + vehicle.getPassengers().forEach(passenger -> { + if (passenger.getPassenger() != null) { + if (Objects.equals(livingEntity, passenger.getPassenger())) { + event.setCancelled(true); + } + } + }); + if (Objects.equals(vehicle.getVehicleProperties().getIdentifier(), "Rhino")) { + livingEntity.damage(3.0, driver); + } else if (vehicle.getVehicleProperties().getVehicleType() == VehicleType.CAR) { + Location loc = event.getArmorStand().getEyeLocation(); + loc.setPitch(-8); + if (event.getSteerDirection().isForward()) { + livingEntity.setVelocity(loc.getDirection().multiply(vehicle.getSpeed() * 2)); + } else if (event.getSteerDirection().isBackward()) { + livingEntity.setVelocity(loc.getDirection().multiply(vehicle.getSpeed() * 2 - 1)); + } + livingEntity.damage(5.0, driver); + event.getArmorStand().damage(2.0); + } + } + + @EventHandler + public void onVehicleImpactVehicle(VehicleImpactVehicleEvent event) { + WastedVehicle vehicle = event.getVehicle(); + WastedVehicle collided = event.getCollidedWith(); + Player player = event.getDriver(); + Player collidedDriver = event.getCollidedWithDriver(); + if (collided.getVehicleProperties().getVehicleType() != VehicleType.CAR) return; + if (event.getSteerDirection().isForward() || event.getSteerDirection().isBackward()) { + vehicle.explode(event.getArmorStand()); + } else { + player.damage(10.0, collidedDriver); + collidedDriver.damage(10.0, player); + } + } + + @EventHandler + public void onChunkUnload(ChunkUnloadEvent e) { + for (Entity entity : e.getChunk().getEntities()) { + if (entity.hasMetadata("WastedVehicle")) { + ArmorStand armorStand = (ArmorStand) entity; + armorStand.setHealth(0); + entity.remove(); + this.plugin.getEntityQueue().remove(entity); + } + } + } + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent e) { + Player player = e.getPlayer(); + player.removePotionEffect(PotionEffectType.INVISIBILITY); + Bukkit.getOnlinePlayers().stream().filter(p -> p.getVehicle() != null && p.getVehicle().hasMetadata("WastedVehicle")).forEach(player::hidePlayer); + if (player.isInsideVehicle()) { + player.getVehicle().remove(); + } + } + + @EventHandler + public void onPlayerQuit(PlayerQuitEvent e) { + Player p = e.getPlayer(); + if (p.isInsideVehicle() && p.getVehicle().hasMetadata("WastedVehicle")) { + ArmorStand armorStand = (ArmorStand) p.getVehicle(); +// armorStand.eject(); + WastedVehicle wastedVehicle = (WastedVehicle) armorStand.getMetadata("WastedVehicle").get(0).value(); + VehicleLeaveEvent event = new VehicleLeaveEvent(wastedVehicle, p, armorStand); + Bukkit.getPluginManager().callEvent(event); + } + } + + @EventHandler + public void onPlayerKick(PlayerKickEvent e) { + Player p = e.getPlayer(); + if (p.isInsideVehicle() && p.getVehicle().hasMetadata("WastedVehicle")) { + ArmorStand armorStand = (ArmorStand) p.getVehicle(); +// armorStand.eject(); + WastedVehicle wastedVehicle = (WastedVehicle) armorStand.getMetadata("WastedVehicle").get(0).value(); + VehicleLeaveEvent event = new VehicleLeaveEvent(wastedVehicle, p, armorStand); + Bukkit.getPluginManager().callEvent(event); + } + } + + @EventHandler + public void onPlayerInteract(PlayerInteractEvent e) { + Player p = e.getPlayer(); + ItemStack heldItem = p.getInventory().getItemInMainHand(); + if (e.getAction() == Action.RIGHT_CLICK_AIR && p.getVehicle() != null && p.getVehicle().hasMetadata("WastedVehicle")) { + WastedVehicle wastedVehicle = (WastedVehicle) p.getVehicle().getMetadata("WastedVehicle").get(0).value(); + //speed boost + Optional<SpeedBoost> speedBoost = wastedVehicle.getVehicleProperties().getSpeedBoosts().stream().filter(s -> new JLibItem(s.getItemStack()).isSimilar(heldItem)).findFirst(); + speedBoost.ifPresent(s -> { + VehicleSpeedBoostEvent event = new VehicleSpeedBoostEvent(wastedVehicle, p, (ArmorStand) p.getVehicle(), s); + Bukkit.getPluginManager().callEvent(event); + if (!event.isCancelled()) { + wastedVehicle.onSpeedBoost(s); + heldItem.setAmount(heldItem.getAmount() - 1); + p.getInventory().setItemInMainHand(heldItem); + } + }); + + VehicleShootEvent event = new VehicleShootEvent(wastedVehicle, (ArmorStand)p.getVehicle(), p); + Bukkit.getPluginManager().callEvent(event); + if(event.isCancelled()) + e.setCancelled(true); + } + } + + @EventHandler(priority = EventPriority.LOW) + public void onVehicleEnterEvent(VehicleEnterEvent event){ + WastedVehicle vehicle = event.getVehicle(); + Player player = event.getPlayer(); + switch (vehicle.getVehicleProperties().getIdentifier().toLowerCase()) { + case "rhino": + case "hydra": + player.sendMessage(Lang.VEHICLES.f("&6In order to use the launcher in this vehicle, you must have an item in your hand and right click.")); + break; + } + } + + @EventHandler + public void onPlayerInteractAtEntity(PlayerInteractAtEntityEvent event) { + Entity rightClicked = event.getRightClicked(); + Player player = event.getPlayer(); + if (player.getVehicle() != null) return; + if (rightClicked.hasMetadata("WastedVehiclePassenger")) { + event.setCancelled(true); + WastedVehicle wastedVehicle = (WastedVehicle) rightClicked.getMetadata("WastedVehiclePassenger").get(0).value(); + if (rightClicked.getPassenger() == null) { + wastedVehicle.passengerMount((ArmorStand) rightClicked, player); + } + return; + } + if (rightClicked.hasMetadata("WastedVehicle")) { + event.setCancelled(true); + WastedVehicle wastedVehicle = (WastedVehicle) rightClicked.getMetadata("WastedVehicle").get(0).value(); + if (rightClicked.getPassenger() != null) { + wastedVehicle.passengerMount((ArmorStand) rightClicked, player); + } + + if (player.getFireTicks() > 0) { + player.sendMessage(Lang.VEHICLES.f("&cYou cannot enter a vehicle when you're on fire.")); + return; + } + + VehicleEnterEvent vehicleEnterEvent = new VehicleEnterEvent(wastedVehicle, player, (ArmorStand) rightClicked); + Bukkit.getPluginManager().callEvent(vehicleEnterEvent); + if (!vehicleEnterEvent.isCancelled()) wastedVehicle.onRightClick((ArmorStand) rightClicked, player); + } + } + + @EventHandler + public void onEntityDismount(EntityDismountEvent e) { + Entity dismounted = e.getDismounted(); + Entity entity = e.getEntity(); + if (dismounted.hasMetadata("WastedVehiclePassenger")) { + WastedVehicle wastedVehicle = (WastedVehicle) dismounted.getMetadata("WastedVehiclePassenger").get(0).value(); + wastedVehicle.onDismount((ArmorStand) dismounted); + + entity.setVelocity(dismounted.getLocation().getDirection().multiply(-0.7)); + return; + } + if (dismounted.hasMetadata("WastedVehicle") && entity instanceof Player) { + WastedVehicle wastedVehicle = (WastedVehicle) dismounted.getMetadata("WastedVehicle").get(0).value(); + VehicleLeaveEvent event = new VehicleLeaveEvent(wastedVehicle, (Player) entity, (ArmorStand) dismounted); + Bukkit.getPluginManager().callEvent(event); + if (!event.isCancelled() && !(wastedVehicle instanceof Submarine && !((Player) entity).isSneaking())) + ((WastedVehicle) dismounted.getMetadata("WastedVehicle").get(0).value()).onDismount((ArmorStand) dismounted); + + entity.setVelocity(dismounted.getLocation().getDirection().multiply(-0.7)); + } + } + + @EventHandler + public void onEntityDamageEntity(EntityDamageByEntityEvent event) { + Entity victim = event.getEntity(); + Entity damager = event.getDamager(); + if (victim.hasMetadata("WastedVehicle")) { + if (damager.getVehicle() != null && damager.getVehicle().hasMetadata("WastedVehiclePassenger")) { + event.setCancelled(true); + } + } + } + + @EventHandler + public void onEntityDamage(EntityDamageEvent e) { + Entity entity = e.getEntity(); + if (entity.hasMetadata("WastedVehiclePassenger")) { + e.setCancelled(true); + return; + } + if (entity.isInsideVehicle() && entity.getVehicle().hasMetadata("WastedVehicle")) { + if (e.getCause() == EntityDamageEvent.DamageCause.FALL) e.setCancelled(true); + WastedVehicle wastedVehicle = (WastedVehicle) entity.getVehicle().getMetadata("WastedVehicle").get(0).value(); + if (wastedVehicle.getVehicleProperties().isDamageVehicleOnPlayerHit()) { + e.setCancelled(true); + VehicleDamageEvent event = new VehicleDamageEvent(wastedVehicle, (ArmorStand) entity.getVehicle(), e.getCause(), e.getDamage()); + Bukkit.getPluginManager().callEvent(event); + if (!event.isCancelled()) + wastedVehicle.onDamage((ArmorStand) entity.getVehicle(), e.getCause(), e.getDamage()); + } + } + if (entity.hasMetadata("WastedVehicle")) { + e.setCancelled(true); + WastedVehicle wastedVehicle = (WastedVehicle) entity.getMetadata("WastedVehicle").get(0).value(); + VehicleDamageEvent event = new VehicleDamageEvent(wastedVehicle, (ArmorStand) entity, e.getCause(), e.getDamage()); + Bukkit.getPluginManager().callEvent(event); + if (!event.isCancelled()) wastedVehicle.onDamage((ArmorStand) entity, e.getCause(), e.getDamage()); + } + } + + @EventHandler + public void onExplosionDamageEntity(ExplosionDamageEntityEvent event) { + event.getVictims().forEach(entity -> { + if (entity.getType() != EntityType.ARMOR_STAND) return; + if (entity.hasMetadata("WastedVehicle")) { + WastedVehicle wastedVehicle = (WastedVehicle) entity.getMetadata("WastedVehicle").get(0).value(); + if (!Objects.equals(wastedVehicle.getVehicleProperties().getIdentifier(), "ArmoredKuruma")) { + wastedVehicle.explode((ArmorStand) entity); + } + } + }); + } + + @EventHandler(priority = EventPriority.LOW) + public void onWeaponRightClick(WeaponRightClickEvent event) { + LivingEntity entity = event.getLivingEntity(); + if (!entity.isInsideVehicle()) return; + if (entity.getVehicle().hasMetadata("WastedVehicle") || + entity.hasMetadata("WastedVehiclePassenger")) { + WastedVehicle wastedVehicle = entity.getVehicle().hasMetadata("WastedVehicle") + ? (WastedVehicle) entity.getVehicle().getMetadata("WastedVehicle").get(0).value() + : (WastedVehicle) entity.getVehicle().getMetadata("WastedVehiclePassenger").get(0).value(); + if (!wastedVehicle.getVehicleProperties().getAllowedWeapons().contains(event.getWeapon().getCompactName())) {//getIdentifier() + event.setCancelled(true); + } + } + } + + @EventHandler + protected final void onMovementCheat(MovementCheatEvent event) { + Player player = event.getPlayerData().getPlayer(); + if (!player.isInsideVehicle()) return; + if (player.getVehicle().hasMetadata("WastedVehicle") || player.hasMetadata("WastedVehiclePassenger")) + event.setCancelled(true); + } +} diff --git a/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/util/MiscUtil.java b/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/util/MiscUtil.java new file mode 100644 index 0000000..8ace6bc --- /dev/null +++ b/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/util/MiscUtil.java @@ -0,0 +1,66 @@ +package com.j0ach1mmall3.wastedvehicles.util; + +import org.bukkit.Location; +import org.bukkit.block.Block; + +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +public class MiscUtil { + private static MiscUtil miscUtil; + + private MiscUtil() { + miscUtil = this; + } + + public static MiscUtil getMiscUtil() { + if(miscUtil == null) { + miscUtil = new MiscUtil(); + } + return miscUtil; + } + + public String getCardinalDirection(Location location) { + double rot = (location.getYaw() - 90) % 360; + if (rot < 0) { + rot += 360.0; + } + return this.getDirection(rot); + } + + public Set<Block> getBlocksInRadius(Location o, int radius) { + Set<Block> blocks = new HashSet<>(); + for(int x = o.getBlockX()-radius; x<=o.getBlockX()+radius; x++) + for(int y = o.getBlockY()-radius; y<=o.getBlockY()+radius; y++) + for(int z = o.getBlockZ()-radius; z<=o.getBlockZ()+radius; z++) + blocks.add(o.getWorld().getBlockAt(x,y,z)); + return blocks; + } + + private String getDirection(double rot) { + if (rot <= 0 && rot < 22.5) { + return "North"; + } else if (rot <= 22.5 && rot < 67.5) { + return "North"; + } else if (rot <= 67.5 && rot < 112.5) { + return "East"; + } else if (rot <= 112.5 && rot < 157.5) { + return "South"; + } else if (rot <= 157.5 && rot < 202.5) { + return "South"; + } else if (rot <= 202.5 && rot < 247.5) { + return "South"; + } else if (rot <= 247.5 && rot < 292.5) { + return "West"; + } else if (rot <= 292.5 && rot < 337.5) { + return "North"; + } else if (rot <= 337.5 && rot < 360.0) { + return "North"; + } else { + return null; + } + } +} + + diff --git a/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/util/SteerDirection.java b/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/util/SteerDirection.java new file mode 100644 index 0000000..134c337 --- /dev/null +++ b/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/util/SteerDirection.java @@ -0,0 +1,47 @@ +package com.j0ach1mmall3.wastedvehicles.util; + +import com.comphenix.protocol.events.PacketContainer; + +/** + * @author j0ach1mmall3 (business.j0ach1mmall3@gmail.com) + * @since 5/05/2016 + */ +public final class SteerDirection { + private final float forMotion; + private final float sideMotion; + private final boolean jump; + + public SteerDirection(PacketContainer packet) { + this.forMotion = packet.getFloat().read(1); + this.sideMotion = packet.getFloat().read(0); + this.jump = packet.getBooleans().read(0); + } + + public boolean isForward() { + return this.forMotion > 0; + } + + public boolean isBackward() { + return this.forMotion < 0; + } + + public boolean isLeft() { + return this.sideMotion > 0; + } + + public boolean isRight() { + return this.sideMotion < 0; + } + + public float getForMotion() { + return this.forMotion; + } + + public float getSideMotion() { + return this.sideMotion; + } + + public boolean isJump() { + return this.jump; + } +} diff --git a/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/util/VehicleUtils.java b/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/util/VehicleUtils.java new file mode 100644 index 0000000..5945dea --- /dev/null +++ b/wastedvehicles-master@5cac11d6d43/src/main/java/com/j0ach1mmall3/wastedvehicles/util/VehicleUtils.java @@ -0,0 +1,73 @@ +package com.j0ach1mmall3.wastedvehicles.util; + +import com.j0ach1mmall3.jlib.methods.ReflectionAPI; +import org.bukkit.Location; +import org.bukkit.craftbukkit.v1_12_R1.entity.CraftEntity; +import org.bukkit.entity.Entity; +import org.bukkit.util.EulerAngle; +import org.bukkit.util.Vector; + +/** + * @author j0ach1mmall3 (business.j0ach1mmall3@gmail.com) + * @since 5/05/2016 + */ +public final class VehicleUtils { + private VehicleUtils() {} + + public static Location[] getBoundingBox(Entity entity) { + try { + Object handle = ReflectionAPI.getHandle((Object) entity); + Object boundingBox = handle.getClass().getMethod("getBoundingBox").invoke(handle); + Location loc1 = new Location(entity.getWorld(), (double)ReflectionAPI.getNmsClass("AxisAlignedBB").getField("a").get(boundingBox), + (double)ReflectionAPI.getNmsClass("AxisAlignedBB").getField("b").get(boundingBox), + (double)ReflectionAPI.getNmsClass("AxisAlignedBB").getField("c").get(boundingBox)); + Location loc2 = new Location(entity.getWorld(), (double)ReflectionAPI.getNmsClass("AxisAlignedBB").getField("d").get(boundingBox), + (double)ReflectionAPI.getNmsClass("AxisAlignedBB").getField("e").get(boundingBox), + (double)ReflectionAPI.getNmsClass("AxisAlignedBB").getField("f").get(boundingBox)); + return new Location[]{loc1, loc2}; + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + public static void setYaw(Entity vehicle, float yaw) { + Object handle = ReflectionAPI.getHandle((Object) vehicle); + try { + handle.getClass().getField("yaw").set(handle, yaw); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public static void setPitch(Entity vehicle, float pitch) { + Object handle = ReflectionAPI.getHandle((Object) vehicle); + try { + handle.getClass().getField("pitch").set(handle, pitch); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public static void makeJumping(Entity entity) { + Object handle = ReflectionAPI.getHandle((Object) entity); + try { + handle.getClass().getField("P").set(handle, 1); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public static EulerAngle toEulerAngle(Vector vector) { + return new EulerAngle(vector.getX(), vector.getY(), vector.getZ()); + } + + public static Vector multiply(EulerAngle eulerAngle, double factor) { + return new Vector(eulerAngle.getX() * factor, eulerAngle.getY() * factor, eulerAngle.getZ() * factor); + } + + public static void teleport(Entity entity, Location location) { + net.minecraft.server.v1_12_R1.Entity en = ((CraftEntity) entity).getHandle(); + en.setPosition(location.getX(), location.getY(), location.getZ()); + } +} \ No newline at end of file diff --git a/wastedvehicles-master@5cac11d6d43/src/main/resources/config.yml b/wastedvehicles-master@5cac11d6d43/src/main/resources/config.yml new file mode 100644 index 0000000..cb216f9 --- /dev/null +++ b/wastedvehicles-master@5cac11d6d43/src/main/resources/config.yml @@ -0,0 +1,530 @@ +Jetpack: + Item: '315 name:&4&lJetpack' + Fuel: + Enabled: true + Item: '263:1 name:&4&lJetpack_Fuel' + Interval: 20 +Vehicles: + Zentorno: + VehicleType: CAR + Acceleration: 0.03 + Deceleration: 0.01 + RotationSpeed: 8 + Invisible: true + TakeOffSpeed: 0.0 + Item: '215 name:&4&lZentorno lore:&7Manufacturer:_&a&lPegassi|&7Type:_&a&lSuper' + BoundingBoxWidth: 3.0 + BoundingBoxHeight: 1.8 + LaunchLocationMultiplier: 0.0 + LaunchLocationYOffset: 0.0 + MaxHealth: 200.0 + Explode: true + DamageVehicleOnPlayerHit: true + KnockOutChance: 0 + Passengers: 1 + SpeedBoosts: + Small: + Item: '336 name:&a&lSmall_Speed_Boost' + SpeedBoost: 1.5 + Duration: 200 + Medium: + Item: '265 name:&a&lMedium_Speed_Boost' + SpeedBoost: 2.0 + Duration: 400 + Large: + Item: '266 name:&a&lLarge_Speed_Boost' + SpeedBoost: 2.5 + Duration: 600 + MaxSpeed: 1.5 + DefaultSpeed: 0.0 + CollisionDamage: 2.0 + WastedGunsWeapon: '' + AllowedWeapons: + - Pistol + - StunGun + - CombatPistol + - HeavyPistol + - MarksmanPistol + - MicroSMG + - SMG + - AssaultSMG + - CombatPDW + - GusenbergSweeper + - Grenade + - MolotovCocktail + - TearGas + - StickyBomb + - ProximityMine + AllowedBlocks: + - STONE + - STAINED_CLAY + - WOOL + - SNOW_BLOCK + DisplayBlocks: + - 215 + Entity_XF: + VehicleType: CAR + Acceleration: 0.025 + Deceleration: 0.01 + RotationSpeed: 7 + Invisible: true + TakeOffSpeed: 0.0 + Item: '206 name:&4&lEntity_XF lore:&7Manufacturer:_&a&lÖverflöd|&7Type:_&a&lSuper' + BoundingBoxWidth: 3.0 + BoundingBoxHeight: 1.9 + LaunchLocationMultiplier: 0.0 + LaunchLocationYOffset: 0.0 + MaxHealth: 175.0 + Explode: true + DamageVehicleOnPlayerHit: true + KnockOutChance: 0 + Passengers: 1 + SpeedBoosts: + Small: + Item: '336 name:&a&lSmall_Speed_Boost' + SpeedBoost: 1.5 + Duration: 200 + Medium: + Item: '265 name:&a&lMedium_Speed_Boost' + SpeedBoost: 2.0 + Duration: 400 + Large: + Item: '266 name:&a&lLarge_Speed_Boost' + SpeedBoost: 2.5 + Duration: 600 + MaxSpeed: 1.4 + DefaultSpeed: 0.0 + CollisionDamage: 2.0 + WastedGunsWeapon: '' + AllowedWeapons: + - Pistol + - StunGun + - CombatPistol + - HeavyPistol + - MarksmanPistol + - MicroSMG + - SMG + - AssaultSMG + - CombatPDW + - GusenbergSweeper + - Grenade + - MolotovCocktail + - TearGas + - StickyBomb + - ProximityMine + AllowedBlocks: + - STONE + - STAINED_CLAY + - WOOL + - SNOW_BLOCK + DisplayBlocks: + - 206 + 9F: + VehicleType: CAR + Acceleration: 0.02 + Deceleration: 0.01 + RotationSpeed: 6 + Invisible: true + TakeOffSpeed: 0.0 + Item: '214 name:&4&l9F lore:&7Manufacturer:_&a&lObey|&7Type:_&a&lSports' + BoundingBoxWidth: 3.0 + BoundingBoxHeight: 1.9 + LaunchLocationMultiplier: 0.0 + LaunchLocationYOffset: 0.0 + MaxHealth: 150.0 + Explode: true + DamageVehicleOnPlayerHit: true + KnockOutChance: 0 + Passengers: 1 + SpeedBoosts: + Small: + Item: '336 name:&a&lSmall_Speed_Boost' + SpeedBoost: 1.5 + Duration: 200 + Medium: + Item: '265 name:&a&lMedium_Speed_Boost' + SpeedBoost: 2.0 + Duration: 400 + Large: + Item: '266 name:&a&lLarge_Speed_Boost' + SpeedBoost: 2.5 + Duration: 600 + MaxSpeed: 1.3 + DefaultSpeed: 0.0 + CollisionDamage: 2.0 + WastedGunsWeapon: '' + AllowedWeapons: + - Pistol + - StunGun + - CombatPistol + - HeavyPistol + - MarksmanPistol + - MicroSMG + - SMG + - AssaultSMG + - CombatPDW + - GusenbergSweeper + - Grenade + - MolotovCocktail + - TearGas + - StickyBomb + - ProximityMine + AllowedBlocks: + - STONE + - STAINED_CLAY + - WOOL + - SNOW_BLOCK + DisplayBlocks: + - 214 + ArmoredKuruma: + VehicleType: CAR + Acceleration: 0.03 + Deceleration: 0.01 + RotationSpeed: 5 + Invisible: true + TakeOffSpeed: 0.0 + Item: '213 name:&4&lArmored_Kuruma lore:&7Manufacturer:_&a&lKarin|&7Type:_&a&lSports' + BoundingBoxWidth: 3.0 + BoundingBoxHeight: 2.1 + LaunchLocationMultiplier: 0.0 + LaunchLocationYOffset: 0.0 + MaxHealth: 350.0 + Explode: true + DamageVehicleOnPlayerHit: true + KnockOutChance: 0 + Passengers: 1 + SpeedBoosts: + Small: + Item: '336 name:&a&lSmall_Speed_Boost' + SpeedBoost: 1.5 + Duration: 200 + Medium: + Item: '265 name:&a&lMedium_Speed_Boost' + SpeedBoost: 2.0 + Duration: 400 + Large: + Item: '266 name:&a&lLarge_Speed_Boost' + SpeedBoost: 2.5 + Duration: 600 + MaxSpeed: 1.2 + DefaultSpeed: 0.0 + CollisionDamage: 2.0 + WastedGunsWeapon: '' + AllowedWeapons: + - Pistol + - StunGun + - CombatPistol + - HeavyPistol + - MarksmanPistol + - MicroSMG + - SMG + - AssaultSMG + - CombatPDW + - GusenbergSweeper + - Grenade + - MolotovCocktail + - TearGas + - StickyBomb + - ProximityMine + AllowedBlocks: + - STONE + - STAINED_CLAY + - WOOL + - SNOW_BLOCK + DisplayBlocks: + - 213 + Primo: + VehicleType: CAR + Acceleration: 0.015 + Deceleration: 0.01 + RotationSpeed: 3 + Invisible: true + TakeOffSpeed: 0.0 + Item: '216 name:&4&lPrimo lore:&7Manufacturer:_&a&lAlbany|&7Type:_&a&lSedan' + BoundingBoxWidth: 3.0 + BoundingBoxHeight: 2.3 + LaunchLocationMultiplier: 0.0 + LaunchLocationYOffset: 0.0 + MaxHealth: 150.0 + Explode: true + DamageVehicleOnPlayerHit: true + KnockOutChance: 0 + Passengers: 1 + SpeedBoosts: + Small: + Item: '336 name:&a&lSmall_Speed_Boost' + SpeedBoost: 1.5 + Duration: 200 + Medium: + Item: '265 name:&a&lMedium_Speed_Boost' + SpeedBoost: 2.0 + Duration: 400 + Large: + Item: '266 name:&a&lLarge_Speed_Boost' + SpeedBoost: 2.5 + Duration: 600 + MaxSpeed: 1.0 + DefaultSpeed: 0.0 + CollisionDamage: 2.0 + WastedGunsWeapon: '' + AllowedWeapons: + - Pistol + - StunGun + - CombatPistol + - HeavyPistol + - MarksmanPistol + - MicroSMG + - SMG + - AssaultSMG + - CombatPDW + - GusenbergSweeper + - Grenade + - MolotovCocktail + - TearGas + - StickyBomb + - ProximityMine + AllowedBlocks: + - STONE + - STAINED_CLAY + - WOOL + - SNOW_BLOCK + DisplayBlocks: + - 216 + BMX: + VehicleType: CAR + Acceleration: 0.05 + Deceleration: 0.01 + TakeOffSpeed: 0.0 + RotationSpeed: 11 + Invisible: false + Item: '168 name:&4&lBMX lore:&7Type:_&a&lBicycle' + BoundingBoxWidth: 1.0 + BoundingBoxHeight: 1.0 + LaunchLocationMultiplier: 0.0 + LaunchLocationYOffset: 0.0 + MaxHealth: 50 + Explode: false + DamageVehicleOnPlayerHit: false + KnockOutChance: 50 + Passengers: 0 + SpeedBoosts: {} + MaxSpeed: 0.75 + DefaultSpeed: 0 + CollisionDamage: 2.0 + WastedGunsWeapon: '' + AllowedWeapons: + - Pistol + - StunGun + - CombatPistol + - HeavyPistol + - MarksmanPistol + - MicroSMG + - SMG + - AssaultSMG + - CombatPDW + - GusenbergSweeper + - Grenade + - MolotovCocktail + - TearGas + - StickyBomb + - ProximityMine + - SawedoffShotgun + AllowedBlocks: + - STONE + - STAINED_CLAY + - WOOL + - SNOW_BLOCK + DisplayBlocks: + - 168 + Rhino: + VehicleType: CAR + Acceleration: 0.05 + Deceleration: 0.01 + TakeOffSpeed: 0.0 + RotationSpeed: 2 + Invisible: true + Item: '168:1 name:&4&lRhino lore:&7Type:_&a&lTank' + BoundingBoxWidth: 4.0 + BoundingBoxHeight: 3.4 + LaunchLocationMultiplier: 4.0 + LaunchLocationYOffset: 2.8 + MaxHealth: 500.0 + Explode: true + DamageVehicleOnPlayerHit: true + KnockOutChance: 0 + Passengers: 0 + SpeedBoosts: {} + MaxSpeed: 0.7 + DefaultSpeed: 0 + CollisionDamage: 20.0 + WastedGunsWeapon: RPG + AllowedWeapons: [] + AllowedBlocks: + - STONE + - STAINED_CLAY + - WOOL + - SNOW_BLOCK + DisplayBlocks: + - '168:1' + Hydra: + VehicleType: PLANE + Acceleration: 0.05 + Deceleration: 0.01 + TakeOffSpeed: 0.5 + RotationSpeed: 4.0 + Invisible: true + Item: '153 name:&4&lHydra lore:&7Type:_&a&lPlane' + BoundingBoxWidth: 7.0 + BoundingBoxHeight: 1.6 + LaunchLocationMultiplier: 6.5 + LaunchLocationYOffset: -1 + MaxHealth: 400.0 + Explode: true + DamageVehicleOnPlayerHit: true + KnockOutChance: 0 + Passengers: 0 + SpeedBoosts: {} + MaxSpeed: 1.5 + DefaultSpeed: 0 + CollisionDamage: 50 + WastedGunsWeapon: RPG + AllowedWeapons: [] + AllowedBlocks: + - STONE + - STAINED_CLAY + - WOOL + - SNOW_BLOCK + DisplayBlocks: + - 153 + Maverick: + VehicleType: HELICOPTER + Acceleration: 0.0 + Deceleration: 0.0 + TakeOffSpeed: 0.0 + RotationSpeed: 5 + Invisible: true + Item: '200 name:&4&lMaverick lore:&7Type:_&a&lHelicopter' + BoundingBoxWidth: 3.2 + BoundingBoxHeight: 3.2 + LaunchLocationMultiplier: 0.0 + LaunchLocationYOffset: 0.0 + MaxHealth: 200.0 + Explode: true + DamageVehicleOnPlayerHit: true + KnockOutChance: 0 + Passengers: 0 + SpeedBoosts: {} + MaxSpeed: 1.3 + DefaultSpeed: 1.3 + CollisionDamage: 15.0 + WastedGunsWeapon: '' + AllowedWeapons: [] + AllowedBlocks: + - STONE + - STAINED_CLAY + - WOOL + - SNOW_BLOCK + DisplayBlocks: + - 200 + AttackMaverick: + VehicleType: HELICOPTER + Acceleration: 0.0 + Deceleration: 0.0 + TakeOffSpeed: 0.0 + RotationSpeed: 5 + Invisible: true + Item: '121 name:&4&lAttack_Maverick lore:&7Type:_&a&lHelicopter' + BoundingBoxWidth: 3.2 + BoundingBoxHeight: 3.2 + LaunchLocationMultiplier: 3.0 + LaunchLocationYOffset: 0.3 + MaxHealth: 220.0 + Explode: true + DamageVehicleOnPlayerHit: true + KnockOutChance: 0 + Passengers: 0 + SpeedBoosts: {} + MaxSpeed: 1.3 + DefaultSpeed: 1.3 + CollisionDamage: 15.0 + WastedGunsWeapon: Minigun + AllowedWeapons: [] + AllowedBlocks: + - STONE + - STAINED_CLAY + - WOOL + - SNOW_BLOCK + DisplayBlocks: + - 121 + Dinghy: + VehicleType: BOAT + Acceleration: 0.05 + Deceleration: 0.01 + TakeOffSpeed: 0.0 + RotationSpeed: 2.0 + Invisible: false + Item: '91 name:&4&lDinghy lore:&7Type:_&a&lBoat' + BoundingBoxWidth: 2.0 + BoundingBoxHeight: 1.4 + LaunchLocationMultiplier: 0.0 + LaunchLocationYOffset: 0.0 + MaxHealth: 90.0 + Explode: true + DamageVehicleOnPlayerHit: false + KnockOutChance: 0 + Passengers: 0 + SpeedBoosts: {} + MaxSpeed: 1.5 + DefaultSpeed: 0 + CollisionDamage: 5.0 + WastedGunsWeapon: '' + AllowedWeapons: + - Pistol + - StunGun + - CombatPistol + - HeavyPistol + - MarksmanPistol + - MicroSMG + - SMG + - AssaultSMG + - CombatPDW + - GusenbergSweeper + - Grenade + - MolotovCocktail + - TearGas + - StickyBomb + - ProximityMine + AllowedBlocks: + - WATER + - STATIONARY_WATER + DisplayBlocks: + - 91 + Submarine: + VehicleType: SUBMARINE + Acceleration: 0.0 + Deceleration: 0.0 + TakeOffSpeed: 0.0 + RotationSpeed: 0.0 + Invisible: true + Item: '56 name:&6Submarine' + BoundingBoxWidth: 0.0 + BoundingBoxHeight: 0.0 + LaunchLocationMultiplier: 0.0 + LaunchLocationYOffset: 0.0 + MaxHealth: 100.0 + Explode: true + DamageVehicleOnPlayerHit: false + KnockOutChance: 10 + Passengers: 0 + SpeedBoosts: {} + MaxSpeed: 0.5 + DefaultSpeed: 0.5 + CollisionDamage: 2.0 + WastedGunsWeapon: '' + AllowedWeapons: [] + AllowedBlocks: + - WATER + - STATIONARY_WATER + DisplayBlocks: + - 56 +DoNotChange: 1.0.0 diff --git a/wastedvehicles-master@5cac11d6d43/src/main/resources/plugin.yml b/wastedvehicles-master@5cac11d6d43/src/main/resources/plugin.yml new file mode 100644 index 0000000..54907a6 --- /dev/null +++ b/wastedvehicles-master@5cac11d6d43/src/main/resources/plugin.yml @@ -0,0 +1,27 @@ +name: WastedVehicles +main: com.j0ach1mmall3.wastedvehicles.Main +version: 1.0.0 +author: j0ach1mmall3 +description: A Vehicles plugin for GTM +depend: [JLib, WastedGuns] +commands: + GiveVehicle: + description: Gives a vehicle to a player + usage: /<command> <identifier> <player> + WVReload: + description: Reloads the config + usage: /<command> + FixVehicles: +permissions: + wv.*: + description: All the WastedVehicles permissions + default: op + children: + wv.givevehicle: true + wv.reload: true + wv.givevehicle: + description: Access to /givevehicle + default: op + wv.reload: + description: Access to /wvreload + default: op \ No newline at end of file

")); + ret.append(TextUtil.implode(args, " ")); + } + + if (addShortHelp) { + ret.append(p.txt.parseTags(" ")); + ret.append(this.getHelpShort()); + } + + return ret.toString(); + } + + public String getUseageTemplate(boolean addShortHelp) { + return getUseageTemplate(this.commandChain, addShortHelp); + } + + public String getUseageTemplate() { + return getUseageTemplate(false); + } + + // -------------------------------------------- // + // Message Sending Helpers + // -------------------------------------------- // + + public void msg(String str, Object... args) { + sender.sendMessage(p.txt.parse(str, args)); + } + + public void msg(TL translation, Object... args) { + sender.sendMessage(p.txt.parse(translation.toString(), args)); + } + + public void sendMessage(String msg) { + sender.sendMessage(msg); + } + + public void sendMessage(List msgs) { + for (String msg : msgs) { + this.sendMessage(msg); + } + } + + public void sendFancyMessage(FancyMessage message) { + message.send(sender); + } + + public void sendFancyMessage(List messages) { + for (FancyMessage m : messages) { + sendFancyMessage(m); + } + } + + public List getToolTips(FPlayer player) { + List lines = new ArrayList(); + for (String s : p.getConfig().getStringList("tooltips.show")) { + lines.add(ChatColor.translateAlternateColorCodes('&', replaceFPlayerTags(s, player))); + } + return lines; + } + + public List getToolTips(Faction faction) { + List lines = new ArrayList(); + for (String s : p.getConfig().getStringList("tooltips.list")) { + lines.add(ChatColor.translateAlternateColorCodes('&', replaceFactionTags(s, faction))); + } + return lines; + } + + public String replaceFPlayerTags(String s, FPlayer player) { + if (s.contains("{balance}")) { + String balance = player.hasFaction() ? "" + player.getFaction().getStash() : "no balance"; + s = s.replace("{balance}", balance); + } + if (s.contains("{stash}")) { + String balance = player.hasFaction() ? "" + player.getFaction().getStash() : "no balance"; + s = s.replace("{stash}", balance); + } + if (s.contains("{lastSeen}")) { + String humanized = DurationFormatUtils.formatDurationWords(System.currentTimeMillis() - player.getLastLoginTime(), true, true) + " ago"; + String lastSeen = player.isOnline() ? ChatColor.GREEN + "Online" : (System.currentTimeMillis() - player.getLastLoginTime() < 432000000 ? ChatColor.YELLOW + humanized : ChatColor.RED + humanized); + s = s.replace("{lastSeen}", lastSeen); + } + if (s.contains("{power}")) { + String power = player.getPowerRounded() + "/" + player.getPowerMaxRounded(); + s = s.replace("{power}", power); + } + if (s.contains("{group}")) { + String group = P.p.getPrimaryGroup(Bukkit.getOfflinePlayer(UUID.fromString(player.getId()))); + s = s.replace("{group}", group); + } + return s; + } + + public String replaceFactionTags(String s, Faction faction) { + if (s.contains("{power}")) { + s = s.replace("{power}", String.valueOf(faction.getPowerRounded())); + } + if (s.contains("{stash}")) { + s = s.replace("{stash}", String.valueOf(faction.getStash())); + } + if (s.contains("{maxPower}")) { + s = s.replace("{maxPower}", String.valueOf(faction.getPowerMaxRounded())); + } + if (s.contains("{leader}")) { + FPlayer fLeader = faction.getFPlayerAdmin(); + String leader = fLeader == null ? "Server" : fLeader.getName().substring(0, fLeader.getName().length() > 14 ? 13 : fLeader.getName().length()); + s = s.replace("{leader}", leader); + } + if (s.contains("{chunks}")) { + s = s.replace("{chunks}", String.valueOf(faction.getLandRounded())); + } + if (s.contains("{members}")) { + s = s.replace("{members}", String.valueOf(faction.getSize())); + + } + if (s.contains("{online}")) { + s = s.replace("{online}", String.valueOf(faction.getOnlinePlayers().size())); + } + return s; + } + + // -------------------------------------------- // + // Argument Readers + // -------------------------------------------- // + + // Is set? ====================== + public boolean argIsSet(int idx) { + return this.args.size() >= idx + 1; + } + + // STRING ====================== + public String argAsString(int idx, String def) { + if (this.args.size() < idx + 1) { + return def; + } + return this.args.get(idx); + } + + public String argAsString(int idx) { + return this.argAsString(idx, null); + } + + // INT ====================== + public Integer strAsInt(String str, Integer def) { + if (str == null) { + return def; + } + try { + return Integer.parseInt(str); + } catch (Exception e) { + return def; + } + } + + public Integer argAsInt(int idx, Integer def) { + return strAsInt(this.argAsString(idx), def); + } + + public Integer argAsInt(int idx) { + return this.argAsInt(idx, null); + } + + // Double ====================== + public Double strAsDouble(String str, Double def) { + if (str == null) { + return def; + } + try { + return Double.parseDouble(str); + } catch (Exception e) { + return def; + } + } + + public Double argAsDouble(int idx, Double def) { + return strAsDouble(this.argAsString(idx), def); + } + + public Double argAsDouble(int idx) { + return this.argAsDouble(idx, null); + } + + // TODO: Go through the str conversion for the other arg-readers as well. + // Boolean ====================== + public Boolean strAsBool(String str) { + str = str.toLowerCase(); + return str.startsWith("y") || str.startsWith("t") || str.startsWith("on") || str.startsWith("+") || str.startsWith("1"); + } + + public Boolean argAsBool(int idx, boolean def) { + String str = this.argAsString(idx); + if (str == null) { + return def; + } + + return strAsBool(str); + } + + public Boolean argAsBool(int idx) { + return this.argAsBool(idx, false); + } + + // PLAYER ====================== + public Player strAsPlayer(String name, Player def, boolean msg) { + Player ret = def; + + if (name != null) { + Player player = Bukkit.getServer().getPlayer(name); + if (player != null) { + ret = player; + } + } + + if (msg && ret == null) { + this.msg(TL.GENERIC_NOPLAYERFOUND, name); + } + + return ret; + } + + public Player argAsPlayer(int idx, Player def, boolean msg) { + return this.strAsPlayer(this.argAsString(idx), def, msg); + } + + public Player argAsPlayer(int idx, Player def) { + return this.argAsPlayer(idx, def, true); + } + + public Player argAsPlayer(int idx) { + return this.argAsPlayer(idx, null); + } + + // BEST PLAYER MATCH ====================== + public Player strAsBestPlayerMatch(String name, Player def, boolean msg) { + Player ret = def; + + if (name != null) { + List players = Bukkit.getServer().matchPlayer(name); + if (players.size() > 0) { + ret = players.get(0); + } + } + + if (msg && ret == null) { + this.msg(TL.GENERIC_NOPLAYERMATCH, name); + } + + return ret; + } + + public Player argAsBestPlayerMatch(int idx, Player def, boolean msg) { + return this.strAsBestPlayerMatch(this.argAsString(idx), def, msg); + } + + public Player argAsBestPlayerMatch(int idx, Player def) { + return this.argAsBestPlayerMatch(idx, def, true); + } + + public Player argAsBestPlayerMatch(int idx) { + return this.argAsPlayer(idx, null); + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/MPlugin.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/MPlugin.java new file mode 100644 index 0000000..f9496d7 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/MPlugin.java @@ -0,0 +1,350 @@ +package com.massivecraft.factions.zcore; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.reflect.TypeToken; +import com.massivecraft.factions.Board; +import com.massivecraft.factions.Conf; +import com.massivecraft.factions.FPlayers; +import com.massivecraft.factions.Factions; +import com.massivecraft.factions.zcore.persist.SaveTask; +import com.massivecraft.factions.zcore.util.PermUtil; +import com.massivecraft.factions.zcore.util.Persist; +import com.massivecraft.factions.zcore.util.TL; +import com.massivecraft.factions.zcore.util.TextUtil; +import org.bukkit.Bukkit; +import org.bukkit.command.CommandSender; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.plugin.java.JavaPlugin; + +import java.io.*; +import java.lang.reflect.Modifier; +import java.lang.reflect.Type; +import java.util.*; +import java.util.Map.Entry; +import java.util.logging.Level; + + +public abstract class MPlugin extends JavaPlugin { + + // Some utils + public Persist persist; + public TextUtil txt; + public PermUtil perm; + + // Persist related + public Gson gson; + private Integer saveTask = null; + private boolean autoSave = true; + protected boolean loadSuccessful = false; + + public boolean getAutoSave() { + return this.autoSave; + } + + public void setAutoSave(boolean val) { + this.autoSave = val; + } + + public String refCommand = ""; + + // Listeners + private MPluginSecretPlayerListener mPluginSecretPlayerListener; + + // Our stored base commands + private List> baseCommands = new ArrayList>(); + + public List> getBaseCommands() { + return this.baseCommands; + } + + // holds f stuck start times + private Map timers = new HashMap(); + + //holds f stuck taskids + public Map stuckMap = new HashMap(); + + // -------------------------------------------- // + // ENABLE + // -------------------------------------------- // + private long timeEnableStart; + + public boolean preEnable() { + log("=== ENABLE START ==="); + timeEnableStart = System.currentTimeMillis(); + + // Ensure basefolder exists! + this.getDataFolder().mkdirs(); + + // Create Utility Instances + this.perm = new PermUtil(this); + this.persist = new Persist(this); + + // GSON 2.1 is now embedded in CraftBukkit, used by the auto-updater: https://github.com/Bukkit/CraftBukkit/commit/0ed1d1fdbb1e0bc09a70bc7bfdf40c1de8411665 +// if ( ! lib.require("gson.jar", "http://search.maven.org/remotecontent?filepath=com/google/code/gson/gson/2.1/gson-2.1.jar")) return false; + this.gson = this.getGsonBuilder().create(); + + this.txt = new TextUtil(); + initTXT(); + + // attempt to get first command defined in plugin.yml as reference command, if any commands are defined in there + // reference command will be used to prevent "unknown command" console messages + try { + Map> refCmd = this.getDescription().getCommands(); + if (refCmd != null && !refCmd.isEmpty()) { + this.refCommand = (String) (refCmd.keySet().toArray()[0]); + } + } catch (ClassCastException ex) { + } + + // Create and register player command listener + this.mPluginSecretPlayerListener = new MPluginSecretPlayerListener(this); + getServer().getPluginManager().registerEvents(this.mPluginSecretPlayerListener, this); + + // Register recurring tasks + if (saveTask == null && Conf.saveToFileEveryXMinutes > 0.0) { + long saveTicks = (long) (20 * 60 * Conf.saveToFileEveryXMinutes); // Approximately every 30 min by default + saveTask = Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(this, new SaveTask(this), saveTicks, saveTicks); + } + + loadLang(); + + loadSuccessful = true; + return true; + } + + public void postEnable() { + log("=== ENABLE DONE (Took " + (System.currentTimeMillis() - timeEnableStart) + "ms) ==="); + } + + public void loadLang() { + File lang = new File(getDataFolder(), "lang.yml"); + OutputStream out = null; + InputStream defLangStream = this.getResource("lang.yml"); + if (!lang.exists()) { + try { + getDataFolder().mkdir(); + lang.createNewFile(); + if (defLangStream != null) { + out = new FileOutputStream(lang); + int read; + byte[] bytes = new byte[1024]; + + while ((read = defLangStream.read(bytes)) != -1) { + out.write(bytes, 0, read); + } + YamlConfiguration defConfig = YamlConfiguration.loadConfiguration(new BufferedReader(new InputStreamReader(defLangStream))); + TL.setFile(defConfig); + } + } catch (IOException e) { + e.printStackTrace(); // So they notice + getLogger().severe("[Cartels] Couldn't create language file."); + getLogger().severe("[Cartels] This is a fatal error. Now disabling"); + this.setEnabled(false); // Without it loaded, we can't send them messages + } finally { + if (defLangStream != null) { + try { + defLangStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + if (out != null) { + try { + out.close(); + } catch (IOException e) { + e.printStackTrace(); + } + + } + } + } + + YamlConfiguration conf = YamlConfiguration.loadConfiguration(lang); + for (TL item : TL.values()) { + if (conf.getString(item.getPath()) == null) { + conf.set(item.getPath(), item.getDefault()); + } + } + + // Remove this here because I'm sick of dealing with bug reports due to bad decisions on my part. + if (conf.getString(TL.COMMAND_SHOW_POWER.getPath(), "").contains("%5$s")) { + conf.set(TL.COMMAND_SHOW_POWER.getPath(), TL.COMMAND_SHOW_POWER.getDefault()); + log(Level.INFO, "Removed errant format specifier from c show power."); + } + + TL.setFile(conf); + try { + conf.save(lang); + } catch (IOException e) { + getLogger().log(Level.WARNING, "Cartels: Failed to save lang.yml."); + getLogger().log(Level.WARNING, "Cartels: Report this stack trace to drtshock."); + e.printStackTrace(); + } + } + + public void onDisable() { + if (saveTask != null) { + this.getServer().getScheduler().cancelTask(saveTask); + saveTask = null; + } + // only save data if plugin actually loaded successfully + if (loadSuccessful) { + Factions.getInstance().forceSave(); + FPlayers.getInstance().forceSave(); + Board.getInstance().forceSave(); + } + log("Disabled"); + } + + public void suicide() { + log("Now I suicide!"); + this.getServer().getPluginManager().disablePlugin(this); + } + + // -------------------------------------------- // + // Some inits... + // You are supposed to override these in the plugin if you aren't satisfied with the defaults + // The goal is that you always will be satisfied though. + // -------------------------------------------- // + + public GsonBuilder getGsonBuilder() { + return new GsonBuilder().setPrettyPrinting().disableHtmlEscaping().serializeNulls().excludeFieldsWithModifiers(Modifier.TRANSIENT, Modifier.VOLATILE); + } + + // -------------------------------------------- // + // LANG AND TAGS + // -------------------------------------------- // + + // These are not supposed to be used directly. + // They are loaded and used through the TextUtil instance for the plugin. + public Map rawTags = new LinkedHashMap(); + + public void addRawTags() { + this.rawTags.put("l", ""); // logo + this.rawTags.put("a", ""); // art + this.rawTags.put("n", ""); // notice + this.rawTags.put("i", ""); // info + this.rawTags.put("g", ""); // good + this.rawTags.put("b", ""); // bad + this.rawTags.put("h", ""); // highligh + this.rawTags.put("c", ""); // command + this.rawTags.put("p", ""); // parameter + } + + public void initTXT() { + this.addRawTags(); + + Type type = new TypeToken>() { + }.getType(); + + Map tagsFromFile = this.persist.load(type, "tags"); + if (tagsFromFile != null) { + this.rawTags.putAll(tagsFromFile); + } + this.persist.save(this.rawTags, "tags"); + + for (Entry rawTag : this.rawTags.entrySet()) { + this.txt.tags.put(rawTag.getKey(), TextUtil.parseColor(rawTag.getValue())); + } + } + + // -------------------------------------------- // + // COMMAND HANDLING + // -------------------------------------------- // + + // can be overridden by P method, to provide option + public boolean logPlayerCommands() { + return true; + } + + public boolean handleCommand(CommandSender sender, String commandString, boolean testOnly) { + return handleCommand(sender, commandString, testOnly, false); + } + + public boolean handleCommand(final CommandSender sender, String commandString, boolean testOnly, boolean async) { + boolean noSlash = true; + if (commandString.startsWith("/")) { + noSlash = false; + commandString = commandString.substring(1); + } + + for (final MCommand command : this.getBaseCommands()) { + if (noSlash && !command.allowNoSlashAccess) { + continue; + } + + for (String alias : command.aliases) { + // disallow double-space after alias, so specific commands can be prevented (preventing "f home" won't prevent "f home") + if (commandString.startsWith(alias + " ")) { + return false; + } + + if (commandString.startsWith(alias + " ") || commandString.equals(alias)) { + final List args = new ArrayList(Arrays.asList(commandString.split("\\s+"))); + args.remove(0); + + if (testOnly) { + return true; + } + + if (async) { + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(this, new Runnable() { + @Override + public void run() { + command.execute(sender, args); + } + }); + } else { + command.execute(sender, args); + } + + return true; + } + } + } + return false; + } + + public boolean handleCommand(CommandSender sender, String commandString) { + return this.handleCommand(sender, commandString, false); + } + + // -------------------------------------------- // + // HOOKS + // -------------------------------------------- // + public void preAutoSave() { + + } + + public void postAutoSave() { + + } + + public Map getStuckMap() { + return this.stuckMap; + } + + public Map getTimers() { + return this.timers; + } + + // -------------------------------------------- // + // LOGGING + // -------------------------------------------- // + public void log(Object msg) { + log(Level.INFO, msg); + } + + public void log(String str, Object... args) { + log(Level.INFO, this.txt.parse(str, args)); + } + + public void log(Level level, String str, Object... args) { + log(level, this.txt.parse(str, args)); + } + + public void log(Level level, Object msg) { + Bukkit.getLogger().log(level, "[" + this.getDescription().getFullName() + "] " + msg); + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/MPluginSecretPlayerListener.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/MPluginSecretPlayerListener.java new file mode 100644 index 0000000..7df5d34 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/MPluginSecretPlayerListener.java @@ -0,0 +1,52 @@ +package com.massivecraft.factions.zcore; + +import com.massivecraft.factions.FPlayers; +import com.massivecraft.factions.listeners.FactionsPlayerListener; +import org.bukkit.Bukkit; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerCommandPreprocessEvent; +import org.bukkit.event.player.PlayerLoginEvent; + +public class MPluginSecretPlayerListener implements Listener { + + private MPlugin p; + + public MPluginSecretPlayerListener(MPlugin p) { + this.p = p; + } + + @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) + public void onPlayerCommandPreprocess(PlayerCommandPreprocessEvent event) { + if (FactionsPlayerListener.preventCommand(event.getMessage(), event.getPlayer())) { + if (p.logPlayerCommands()) { + Bukkit.getLogger().info("[PLAYER_COMMAND] " + event.getPlayer().getName() + ": " + event.getMessage()); + } + event.setCancelled(true); + } + } + + @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) + public void onPlayerChat(AsyncPlayerChatEvent event) { + if (p.handleCommand(event.getPlayer(), event.getMessage(), false, true)) { + if (p.logPlayerCommands()) { + Bukkit.getLogger().info("[PLAYER_COMMAND] " + event.getPlayer().getName() + ": " + event.getMessage()); + } + event.setCancelled(true); + } + + /* Should be handled by stuff in FactionsChatListener + Player speaker = event.getPlayer(); + String format = event.getFormat(); + format = format.replace(Conf.chatTagReplaceString, P.p.getPlayerFactionTag(speaker)).replace("[FACTION_TITLE]", P.p.getPlayerTitle(speaker)); + event.setFormat(format); + */ + } + + @EventHandler(priority = EventPriority.LOWEST) + public void onPlayerPreLogin(PlayerLoginEvent event) { + FPlayers.getInstance().getByPlayer(event.getPlayer()); + } +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/persist/MemoryBoard.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/persist/MemoryBoard.java new file mode 100644 index 0000000..bb8d817 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/persist/MemoryBoard.java @@ -0,0 +1,313 @@ +package com.massivecraft.factions.zcore.persist; + +import com.google.common.collect.HashMultimap; +import com.google.common.collect.Multimap; +import com.massivecraft.factions.*; +import com.massivecraft.factions.struct.Relation; +import com.massivecraft.factions.util.AsciiCompass; +import com.massivecraft.factions.util.LazyLocation; +import org.bukkit.ChatColor; + +import java.util.*; +import java.util.Map.Entry; + + +public abstract class MemoryBoard extends Board { + + public class MemoryBoardMap extends HashMap { + private static final long serialVersionUID = -6689617828610585368L; + + Multimap factionToLandMap = HashMultimap.create(); + + @Override + public String put(FLocation floc, String factionId) { + String previousValue = super.put(floc, factionId); + if (previousValue != null) { + factionToLandMap.remove(previousValue, floc); + } + + factionToLandMap.put(factionId, floc); + return previousValue; + } + + @Override + public String remove(Object key) { + String result = super.remove(key); + if (result != null) { + FLocation floc = (FLocation) key; + factionToLandMap.remove(result, floc); + } + + return result; + } + + @Override + public void clear() { + super.clear(); + factionToLandMap.clear(); + } + + public int getOwnedLandCount(String factionId) { + return factionToLandMap.get(factionId).size(); + } + + public void removeFaction(String factionId) { + Collection flocations = factionToLandMap.removeAll(factionId); + for (FLocation floc : flocations) { + super.remove(floc); + } + } + } + + public MemoryBoardMap flocationIds = new MemoryBoardMap(); + + //----------------------------------------------// + // Get and Set + //----------------------------------------------// + public String getIdAt(FLocation flocation) { + if (!flocationIds.containsKey(flocation)) { + return "0"; + } + + return flocationIds.get(flocation); + } + + public Faction getFactionAt(FLocation flocation) { + return Factions.getInstance().getFactionById(getIdAt(flocation)); + } + + public void setIdAt(String id, FLocation flocation) { + clearOwnershipAt(flocation); + + if (id.equals("0")) { + removeAt(flocation); + } + + flocationIds.put(flocation, id); + } + + public void setFactionAt(Faction faction, FLocation flocation) { + setIdAt(faction.getId(), flocation); + } + + public void removeAt(FLocation flocation) { + Faction faction = getFactionAt(flocation); + Iterator it = faction.getWarps().values().iterator(); + while (it.hasNext()) { + if (flocation.isInChunk(it.next().getLocation())) { + it.remove(); + } + } + clearOwnershipAt(flocation); + flocationIds.remove(flocation); + } + + public Set getAllClaims(String factionId) { + Set locs = new HashSet(); + Iterator> iter = flocationIds.entrySet().iterator(); + while (iter.hasNext()) { + Entry entry = iter.next(); + if (entry.getValue().equals(factionId)) { + locs.add(entry.getKey()); + } + } + return locs; + } + + public Set getAllClaims(Faction faction) { + return getAllClaims(faction.getId()); + } + + // not to be confused with claims, ownership referring to further member-specific ownership of a claim + public void clearOwnershipAt(FLocation flocation) { + Faction faction = getFactionAt(flocation); + if (faction != null && faction.isNormal()) { + faction.clearClaimOwnership(flocation); + } + } + + public void unclaimAll(String factionId) { + Faction faction = Factions.getInstance().getFactionById(factionId); + if (faction != null && faction.isNormal()) { + faction.clearAllClaimOwnership(); + faction.clearWarps(); + } + clean(factionId); + } + + public void clean(String factionId) { + flocationIds.removeFaction(factionId); + } + + // Is this coord NOT completely surrounded by coords claimed by the same faction? + // Simpler: Is there any nearby coord with a faction other than the faction here? + public boolean isBorderLocation(FLocation flocation) { + Faction faction = getFactionAt(flocation); + FLocation a = flocation.getRelative(1, 0); + FLocation b = flocation.getRelative(-1, 0); + FLocation c = flocation.getRelative(0, 1); + FLocation d = flocation.getRelative(0, -1); + return faction != getFactionAt(a) || faction != getFactionAt(b) || faction != getFactionAt(c) || faction != getFactionAt(d); + } + + // Is this coord connected to any coord claimed by the specified faction? + public boolean isConnectedLocation(FLocation flocation, Faction faction) { + FLocation a = flocation.getRelative(1, 0); + FLocation b = flocation.getRelative(-1, 0); + FLocation c = flocation.getRelative(0, 1); + FLocation d = flocation.getRelative(0, -1); + return faction == getFactionAt(a) || faction == getFactionAt(b) || faction == getFactionAt(c) || faction == getFactionAt(d); + } + + /** + * Checks if there is another faction within a given radius other than Wilderness. Used for HCF feature that + * requires a 'buffer' between factions. + * + * @param flocation - center location. + * @param faction - faction checking for. + * @param radius - chunk radius to check. + * + * @return true if another Faction is within the radius, otherwise false. + */ + public boolean hasFactionWithin(FLocation flocation, Faction faction, int radius) { + for (int x = -radius; x <= radius; x++) { + for (int z = -radius; z <= radius; z++) { + if (x == 0 && z == 0) { + continue; + } + + FLocation relative = flocation.getRelative(x, z); + Faction other = getFactionAt(relative); + + if (other.isNormal() && other != faction) { + return true; + } + } + } + return false; + } + + + //----------------------------------------------// + // Cleaner. Remove orphaned foreign keys + //----------------------------------------------// + + public void clean() { + Iterator> iter = flocationIds.entrySet().iterator(); + while (iter.hasNext()) { + Entry entry = iter.next(); + if (!Factions.getInstance().isValidFactionId(entry.getValue())) { + P.p.log("Board cleaner removed " + entry.getValue() + " from " + entry.getKey()); + iter.remove(); + } + } + } + + //----------------------------------------------// + // Coord count + //----------------------------------------------// + + public int getFactionCoordCount(String factionId) { + return flocationIds.getOwnedLandCount(factionId); + } + + public int getFactionCoordCount(Faction faction) { + return getFactionCoordCount(faction.getId()); + } + + public int getFactionCoordCountInWorld(Faction faction, String worldName) { + String factionId = faction.getId(); + int ret = 0; + Iterator> iter = flocationIds.entrySet().iterator(); + while (iter.hasNext()) { + Entry entry = iter.next(); + if (entry.getValue().equals(factionId) && entry.getKey().getWorldName().equals(worldName)) { + ret += 1; + } + } + return ret; + } + + //----------------------------------------------// + // Map generation + //----------------------------------------------// + + /** + * The map is relative to a coord and a faction north is in the direction of decreasing x east is in the direction + * of decreasing z + */ + public ArrayList getMap(Faction faction, FLocation flocation, double inDegrees) { + ArrayList ret = new ArrayList(); + Faction factionLoc = getFactionAt(flocation); + ret.add(P.p.txt.titleize("(" + flocation.getCoordString() + ") " + factionLoc.getTag(faction))); + + int halfWidth = Conf.mapWidth / 2; + int halfHeight = Conf.mapHeight / 2; + FLocation topLeft = flocation.getRelative(-halfWidth, -halfHeight); + int width = halfWidth * 2 + 1; + int height = halfHeight * 2 + 1; + + if (Conf.showMapFactionKey) { + height--; + } + + Map fList = new HashMap(); + int chrIdx = 0; + + // For each row + for (int dz = 0; dz < height; dz++) { + // Draw and add that row + String row = ""; + for (int dx = 0; dx < width; dx++) { + if (dx == halfWidth && dz == halfHeight) { + row += ChatColor.AQUA + "+"; + } else { + FLocation flocationHere = topLeft.getRelative(dx, dz); + Faction factionHere = getFactionAt(flocationHere); + Relation relation = faction.getRelationTo(factionHere); + if (factionHere.isWilderness()) { + row += ChatColor.GRAY + "-"; + } else if (factionHere.isSafeZone()) { + row += Conf.colorPeaceful + "+"; + } else if (factionHere.isWarZone()) { + row += ChatColor.DARK_RED + "+"; + } else if (factionHere == faction || + factionHere == factionLoc || + relation.isAtLeast(Relation.ALLY) || + (Conf.showNeutralFactionsOnMap && relation.equals(Relation.NEUTRAL)) || + (Conf.showEnemyFactionsOnMap && relation.equals(Relation.ENEMY))) { + if (!fList.containsKey(factionHere.getTag())) { + fList.put(factionHere.getTag(), Conf.mapKeyChrs[Math.min(chrIdx++, Conf.mapKeyChrs.length - 1)]); + } + char tag = fList.get(factionHere.getTag()); + row += factionHere.getColorTo(faction) + "" + tag; + } else { + row += ChatColor.GRAY + "-"; + } + } + } + ret.add(row); + } + + // Get the compass + ArrayList asciiCompass = AsciiCompass.getAsciiCompass(inDegrees, ChatColor.RED, P.p.txt.parse("")); + + // Add the compass + ret.set(1, asciiCompass.get(0) + ret.get(1).substring(3 * 3)); + ret.set(2, asciiCompass.get(1) + ret.get(2).substring(3 * 3)); + ret.set(3, asciiCompass.get(2) + ret.get(3).substring(3 * 3)); + + // Add the faction key + if (Conf.showMapFactionKey) { + String fRow = ""; + for (String key : fList.keySet()) { + fRow += String.format("%s%s: %s ", ChatColor.GRAY, fList.get(key), key); + } + ret.add(fRow); + } + + return ret; + } + + public abstract void convertFrom(MemoryBoard old); +} diff --git a/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/persist/MemoryFPlayer.java b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/persist/MemoryFPlayer.java new file mode 100644 index 0000000..7441ed1 --- /dev/null +++ b/cartels-master@e4f5c2ecec5/src/main/java/com/massivecraft/factions/zcore/persist/MemoryFPlayer.java @@ -0,0 +1,953 @@ +package com.massivecraft.factions.zcore.persist; + +import com.massivecraft.factions.*; +import com.massivecraft.factions.eco.EcoResult; +import com.massivecraft.factions.event.FPlayerLeaveEvent; +import com.massivecraft.factions.event.LandClaimEvent; +import com.massivecraft.factions.iface.EconomyParticipator; +import com.massivecraft.factions.iface.RelationParticipator; +import com.massivecraft.factions.integration.Econ; +import com.massivecraft.factions.integration.Essentials; +import com.massivecraft.factions.integration.Worldguard; +import com.massivecraft.factions.scoreboards.FScoreboard; +import com.massivecraft.factions.scoreboards.sidebar.FInfoSidebar; +import com.massivecraft.factions.struct.ChatMode; +import com.massivecraft.factions.struct.Permission; +import com.massivecraft.factions.struct.Relation; +import com.massivecraft.factions.struct.Role; +import com.massivecraft.factions.util.RelationUtil; +import com.massivecraft.factions.util.WarmUpUtil; +import com.massivecraft.factions.zcore.util.TL; +import net.grandtheftmc.core.util.NumeralUtil; +import org.bukkit.*; +import org.bukkit.entity.Player; + +import java.util.*; + + +/** + * Logged in players always have exactly one FPlayer instance. Logged out players may or may not have an FPlayer + * instance. They will always have one if they are part of a faction. This is because only players with a faction are + * saved to disk (in order to not waste disk space). + *